n8n-editor-ui 1.92.0 → 1.94.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 (124) hide show
  1. package/dist/assets/{AnimatedSpinner-CtKKeDrz.js → AnimatedSpinner-CY5xYI5m.js} +1 -1
  2. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DR6h_xsK.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-BOrzkwPH.js} +1 -1
  3. package/dist/assets/{AuthView-mKkzBRxh.js → AuthView-BTzGYAnY.js} +2 -2
  4. package/dist/assets/{CanvasChatSwitch-Bu2VD2kp.js → CanvasChatSwitch-CwpjFCL0.js} +17 -18
  5. package/dist/assets/{ChangePasswordView-D5UI1v-J.js → ChangePasswordView-BKR2UFVI.js} +3 -3
  6. package/dist/assets/CollectionParameter-BJtiV9En.js +4 -0
  7. package/dist/assets/{CredentialsView-B78eNJO5.js → CredentialsView-DVgxfnNi.js} +26 -11
  8. package/dist/assets/{DemoFooter-DP26HpCu.js → DemoFooter-C1T3Q0NX.js} +7 -8
  9. package/dist/assets/{ErrorView-C3fvEdCg.js → ErrorView-Cf2Yb8Ea.js} +1 -1
  10. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-BBpwYdHY.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-DUu0UMcW.js} +2 -2
  11. package/dist/assets/{ExecutionsView-BvlDZwIs.js → ExecutionsView-DjNkfnDh.js} +20 -18
  12. package/dist/assets/{FileSaver.min-BzAtcQXX.js → FileSaver.min-C1p9Eies.js} +1 -1
  13. package/dist/assets/{FixedCollectionParameter-CS5zXMAh.js → FixedCollectionParameter-DN_uJhpe.js} +1 -1
  14. package/dist/assets/{ForgotMyPasswordView-CVQ7pcIG.js → ForgotMyPasswordView-BMQBDIrq.js} +3 -3
  15. package/dist/assets/{InsightsChartAverageRuntime-Boh0SMb3.js → InsightsChartAverageRuntime-JzBkV6Rc.js} +4 -4
  16. package/dist/assets/{InsightsChartFailed-IZ-KYOU9.js → InsightsChartFailed-DMD3c7zM.js} +4 -4
  17. package/dist/assets/{InsightsChartFailureRate-2fWw3p0L.js → InsightsChartFailureRate-D_qeZo4f.js} +4 -4
  18. package/dist/assets/{InsightsChartTimeSaved-B2pLVys1.js → InsightsChartTimeSaved-Cw2T-Wvp.js} +4 -4
  19. package/dist/assets/{InsightsChartTotal-2QD4wPLR.js → InsightsChartTotal-DlF47gob.js} +4 -4
  20. package/dist/assets/{InsightsDashboard-Bx4vx9gz.css → InsightsDashboard-BSrakbzr.css} +42 -8
  21. package/dist/assets/{InsightsDashboard-CbiFbJ8w.js → InsightsDashboard-CxQ9H296.js} +40 -41
  22. package/dist/assets/{InsightsPaywall-5d-cSdiS.js → InsightsPaywall-hRkAfeHz.js} +1 -1
  23. package/dist/assets/InsightsSummary-BcXd-3nU.js +209 -0
  24. package/dist/assets/{InsightsSummary-CdlaUpAt.css → InsightsSummary-DzGQpM5h.css} +27 -24
  25. package/dist/assets/{InsightsTableWorkflows-Blv_GPUj.css → InsightsTableWorkflows-DfTZQkWL.css} +3 -4
  26. package/dist/assets/{InsightsTableWorkflows-_eTCUNCX.js → InsightsTableWorkflows-ybloXdDn.js} +5 -6
  27. package/dist/assets/{Logo-Dl2xVRIu.js → Logo-BGe7-2Vd.js} +1 -1
  28. package/dist/assets/{LogsPanel-JnYirDqa.js → LogsPanel-DtTp6kY0.js} +334 -338
  29. package/dist/assets/{MainHeader-CEPLiR-5.css → MainHeader-Y95RcfHb.css} +24 -17
  30. package/dist/assets/{MainHeader-Bk29pgmL.js → MainHeader-h2DV-VuD.js} +148 -82
  31. package/dist/assets/{MainSidebar-BM5ku_wM.js → MainSidebar-AAHHRXFA.js} +28 -11
  32. package/dist/assets/{MainSidebar-zZpP3qQ0.css → MainSidebar-D1_1YFQZ.css} +2 -2
  33. package/dist/assets/{NodeCreation-BEjdAYc_.js → NodeCreation-nHiG-Lhi.js} +9 -5
  34. package/dist/assets/{NodeCreator-D9fmPdS2.css → NodeCreator-D18StsVZ.css} +1021 -174
  35. package/dist/assets/{NodeCreator-cEUgbAI9.js → NodeCreator-weAzsmlU.js} +862 -418
  36. package/dist/assets/{NodeDetailsView-D4O9dKTA.js → NodeDetailsView-BsXbcyfb.js} +22 -15
  37. package/dist/assets/{NodeDetailsView-DsFLtbxi.css → NodeDetailsView-DpO8nTmN.css} +16 -16
  38. package/dist/assets/{NodeView-DDSOUm8E.js → NodeView-BY1O3wWl.js} +104 -50
  39. package/dist/assets/{ProjectCardBadge-BNn2hiMe.js → ProjectCardBadge-3xpk5Z4e.js} +38 -2
  40. package/dist/assets/{ProjectHeader-CaEZ2OPj.js → ProjectHeader-CpoOisjf.js} +106 -64
  41. package/dist/assets/{ProjectSettings-otA8E-yW.js → ProjectSettings-B__3XaPY.js} +14 -3
  42. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-C3JbZMCk.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-DaoPdG_5.js} +1 -1
  43. package/dist/assets/{ResourcesListLayout-1d9Ic6VX.js → ResourcesListLayout-DAxou314.js} +156 -53
  44. package/dist/assets/{ResourcesListLayout-CtGME7aU.css → ResourcesListLayout-DuNjbsMn.css} +8 -8
  45. package/dist/assets/{RunData-BjlZgIyx.css → RunData-CE5FsU6k.css} +2 -2
  46. package/dist/assets/{RunData-Bx47sNQp.js → RunData-fnd-jejc.js} +257 -99
  47. package/dist/assets/{RunDataAi-DOac7nwD.js → RunDataAi-Ck3VGKP_.js} +3 -4
  48. package/dist/assets/{RunDataJson-Pev6yNEV.js → RunDataJson-B80Z4URL.js} +7 -7
  49. package/dist/assets/{RunDataJsonActions-Co4xgmVq.js → RunDataJsonActions-CdZi1Qul.js} +1 -1
  50. package/dist/assets/{RunDataParsedAiContent-D6MNLmT3.js → RunDataParsedAiContent-BczxQ63H.js} +5 -5
  51. package/dist/assets/{RunDataSearch-C8orcAlP.js → RunDataSearch-C4KmCz4c.js} +1 -1
  52. package/dist/assets/{RunDataTable-oi_l8dhA.js → RunDataTable-CsLCZIWp.js} +3 -3
  53. package/dist/assets/{SamlOnboarding-CT5J6dx0.js → SamlOnboarding-DkhjCrPa.js} +3 -3
  54. package/dist/assets/{SettingsApiView-CupjcI9v.js → SettingsApiView-Ci2-rEpm.js} +1 -1
  55. package/dist/assets/{SettingsCommunityNodesView-B5K2VLyJ.js → SettingsCommunityNodesView-_UOppuqS.js} +24 -11
  56. package/dist/assets/{SettingsExternalSecrets-BidJCf_t.js → SettingsExternalSecrets-DHIkKr53.js} +1 -1
  57. package/dist/assets/{SettingsLdapView-Cva6akhW.js → SettingsLdapView-B8ezgdqP.js} +1 -1
  58. package/dist/assets/{SettingsLogStreamingView-Cy-rAKUO.js → SettingsLogStreamingView-YP6Xy7Fe.js} +1 -1
  59. package/dist/assets/{SettingsPersonalView-ZJ1Syok2.js → SettingsPersonalView-BmbFyWPb.js} +1 -1
  60. package/dist/assets/{SettingsSourceControl-CMtqqlkO.js → SettingsSourceControl-DwaOdDke.js} +1 -1
  61. package/dist/assets/{SettingsSso-Bi3OpykL.js → SettingsSso-DOC-P2wt.js} +14 -1
  62. package/dist/assets/{SettingsUsageAndPlan-C5TbwZhP.js → SettingsUsageAndPlan-DVOLlEkG.js} +1 -1
  63. package/dist/assets/{SettingsUsersView-BHuP5k0A.js → SettingsUsersView-CN_KLeIm.js} +1 -1
  64. package/dist/assets/{SettingsView-DPIIqaKN.js → SettingsView-DiAhLyco.js} +1 -1
  65. package/dist/assets/{SetupView-C4V9j6sh.js → SetupView-OE_yCNOU.js} +3 -3
  66. package/dist/assets/{SetupWorkflowCredentialsButton-BZ9ILQUp.js → SetupWorkflowCredentialsButton-Dx1IkZgW.js} +1 -1
  67. package/dist/assets/{SetupWorkflowFromTemplateView-3uV3zSU2.js → SetupWorkflowFromTemplateView-lQXKgIuL.js} +3 -3
  68. package/dist/assets/{SigninView-DWZHdCjG.js → SigninView-BWSrzbF7.js} +3 -3
  69. package/dist/assets/{SignoutView-DbduXAir.js → SignoutView-DxGgFxt2.js} +1 -1
  70. package/dist/assets/{SignupView-DWq6VACk.js → SignupView-Dtu5bMqF.js} +3 -3
  71. package/dist/assets/{TemplateDetails-BckqE6GK.js → TemplateDetails-CQ7TYqsP.js} +1 -1
  72. package/dist/assets/{TemplateList-Bw0JeBMP.js → TemplateList-Cxmv-0p-.js} +1 -1
  73. package/dist/assets/{TemplatesCollectionView-CAKT-mpV.js → TemplatesCollectionView-xvV6FXib.js} +5 -5
  74. package/dist/assets/{TemplatesSearchView-I2a5us58.js → TemplatesSearchView-CsECyZ52.js} +3 -3
  75. package/dist/assets/{TemplatesView-6EwGFFJK.js → TemplatesView-DrEKpZTU.js} +1 -1
  76. package/dist/assets/{TemplatesWorkflowView-C8xYMhwu.js → TemplatesWorkflowView-iSAL_yol.js} +5 -5
  77. package/dist/assets/{TestDefinitionEditView-CNd3Cuzq.js → TestDefinitionEditView-C3ohfu_r.js} +6 -7
  78. package/dist/assets/{TestDefinitionListView-BwTWIaAM.js → TestDefinitionListView-Dwto0jxH.js} +1 -1
  79. package/dist/assets/{TestDefinitionNewView-BQas0_G1.js → TestDefinitionNewView-9xVUm2ZJ.js} +2 -2
  80. package/dist/assets/{TestDefinitionRootView-D971MFye.js → TestDefinitionRootView-DLurQ4xl.js} +1 -1
  81. package/dist/assets/{VariablesView-DcBBuFxh.js → VariablesView-Cg2WSt_e.js} +4 -3
  82. package/dist/assets/{WorkerView-DSgBNIeb.js → WorkerView-BG-Dl0Ej.js} +6 -6
  83. package/dist/assets/{WorkflowActivator-DAyH7N29.css → WorkflowActivator-DrMTmuTZ.css} +2 -2
  84. package/dist/assets/{WorkflowActivator-CPCbgb_n.js → WorkflowActivator-e7wvW1kJ.js} +17 -11
  85. package/dist/assets/{WorkflowExecutionsInfoAccordion-Bc6vzAZu.js → WorkflowExecutionsInfoAccordion-CijtfO0l.js} +1 -1
  86. package/dist/assets/{WorkflowExecutionsLandingPage-BPPS4V9i.js → WorkflowExecutionsLandingPage-Do4y1yOx.js} +2 -2
  87. package/dist/assets/{WorkflowExecutionsPreview-Bbb5MB8Z.js → WorkflowExecutionsPreview-Bqo_3PXl.js} +6 -6
  88. package/dist/assets/{WorkflowExecutionsView-Pz-7iHJY.js → WorkflowExecutionsView-C1gS45nc.js} +10 -10
  89. package/dist/assets/{WorkflowHistory-Czo9IuI6.js → WorkflowHistory-CypQw7rC.js} +37 -19
  90. package/dist/assets/{WorkflowOnboardingView-B8DdkfJ5.js → WorkflowOnboardingView-DoKXpaNj.js} +1 -1
  91. package/dist/assets/{WorkflowPreview-eVlO1itk.js → WorkflowPreview-Bxs5XzBX.js} +1 -1
  92. package/dist/assets/{WorkflowsView-Cr2D0vym.js → WorkflowsView-BlvgD3xI.js} +299 -157
  93. package/dist/assets/{WorkflowsView-B2_HJCJ5.css → WorkflowsView-CQvTAWQ0.css} +24 -13
  94. package/dist/assets/{chartjs.utils-Dk1WO3Mr.js → chartjs.utils-CuWcgqCr.js} +2 -2
  95. package/dist/assets/{dateFormatter-C8N5khiG.js → dateFormatter-LbucaaRt.js} +1 -1
  96. package/dist/assets/{easyAiWorkflowUtils-CLqHnasO.js → easyAiWorkflowUtils-_kvYb5hw.js} +1 -1
  97. package/dist/assets/{global-link-actions-BvoZh8u9.js → global-link-actions-DG0SjhQE.js} +1 -1
  98. package/dist/assets/{import-curl-BpxkGYMX.js → import-curl-DQ6uPzZ1.js} +1 -1
  99. package/dist/assets/{index-DCpy4nCU.css → index-BA8d2DN9.css} +311 -515
  100. package/dist/assets/{index-B6eunbxp.js → index-hdsPF3tl.js} +61611 -57550
  101. package/dist/assets/{index-Br8T1Gn6.js → index-vIybYvt3.js} +1 -1
  102. package/dist/assets/{pickBy-8Urz9lDY.js → pickBy-DmKUpB7M.js} +1 -1
  103. package/dist/assets/{polyfills-CLZ4X0Ad.js → polyfills-J2x06Gdp.js} +157 -224
  104. package/dist/assets/{templateActions-DzjysjbQ.js → templateActions-DxoxchKp.js} +1 -1
  105. package/dist/assets/{typescript.worker-BsxN2afA.js → typescript.worker-B1loTpxy.js} +1 -1
  106. package/dist/assets/{useBeforeUnload-DxrN8vOO.js → useBeforeUnload-B7JAQiE8.js} +1 -1
  107. package/dist/assets/{useCanvasMapping-cuXLM-h-.css → useCanvasMapping-CFf4cwnq.css} +6 -5
  108. package/dist/assets/{useCanvasMapping-C2BQB9QB.js → useCanvasMapping-CvcOHj5p.js} +94 -50
  109. package/dist/assets/{useClearExecutionButtonVisible-BV-jMf2m.js → useClearExecutionButtonVisible-DFNEJves.js} +1 -2
  110. package/dist/assets/{useExecutionDebugging-0pPCimcw.js → useExecutionDebugging-DsRIfE0y.js} +1 -1
  111. package/dist/assets/{useExecutionHelpers-DIvhViMz.js → useExecutionHelpers-CEOL8_vt.js} +3 -3
  112. package/dist/assets/{useImportCurlCommand-BWf4R83s.js → useImportCurlCommand-DdIN4YaF.js} +2 -2
  113. package/dist/assets/useProjectPages-OGc-GAxb.js +17 -0
  114. package/dist/assets/{usePushConnection-Pobjq0U9.js → usePushConnection-DNGIaS0A.js} +29 -127
  115. package/dist/assets/{useTestDefinitionForm-BA3IS_2B.js → useTestDefinitionForm-Bi6EgFVm.js} +1 -1
  116. package/dist/assets/{useWorkflowActivate-DFqvrpj6.js → useWorkflowActivate-CJ1hLmv2.js} +1 -1
  117. package/dist/assets/{useWorkflowSaving-BACesUoL.js → useWorkflowSaving-BuokdhTC.js} +2 -2
  118. package/dist/index.html +3 -3
  119. package/package.json +1 -1
  120. package/tsconfig.json +1 -0
  121. package/vite.config.mts +4 -0
  122. package/dist/assets/CollectionParameter-BeCTpZ-q.js +0 -4
  123. package/dist/assets/InsightsSummary-gldDQ9rg.js +0 -207
  124. package/dist/assets/useCanvasOperations-DaP5jKbH.js +0 -3183
@@ -1,31 +1,6 @@
1
- import { d as defineComponent, cm 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, dv as clearPopupWindowState, ag as useTelemetry, dw as parse, dx as hasTrimmedItem, p as useSettingsStore, a5 as useWorkflowHelpers, ak as WORKFLOW_SETTINGS_MODAL_KEY, a as useToast, dy as generateNodesGraph, aq as h, bz as useNodeTypesStore, dz as getTriggerNodeServiceName, bA as useNodeHelpers, dA as hasTrimmedData, aP as useExternalHooks, dB as codeNodeEditorEventBus, bR as useCredentialsStore, dC as useAssistantStore, dD as useSchemaPreviewStore, dE as makeRestApiRequest, O as defineStore, Z as useRootStore, P as usePushConnectionStore, r as ref } from "./index-B6eunbxp.js";
2
- import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-CLqHnasO.js";
3
- import { g as globalLinkActionsEventBus } from "./global-link-actions-BvoZh8u9.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
- });
1
+ import { Q as useWorkflowsStore, H as useUIStore, dD as clearPopupWindowState, ag as useTelemetry, bP as parse, dE as hasTrimmedItem, p as useSettingsStore, a5 as useWorkflowHelpers, ak as WORKFLOW_SETTINGS_MODAL_KEY, a as useToast, dF as generateNodesGraph, c as useI18n, dG as getExecutionErrorToastConfiguration, bz as useNodeTypesStore, dH as getTriggerNodeServiceName, bA as useNodeHelpers, dI as hasTrimmedData, aP as useExternalHooks, dJ as codeNodeEditorEventBus, dK as getExecutionErrorMessage, bU as useCredentialsStore, dL as useAssistantStore, dM as useSchemaPreviewStore, dN as isCommunityPackageName, dO as makeRestApiRequest, O as defineStore, Z as useRootStore, P as usePushConnectionStore, r as ref } from "./index-hdsPF3tl.js";
2
+ import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-_kvYb5hw.js";
3
+ import { g as globalLinkActionsEventBus } from "./global-link-actions-DG0SjhQE.js";
29
4
  async function executionFinished({ data }, options) {
30
5
  const workflowsStore = useWorkflowsStore();
31
6
  const uiStore = useUIStore();
@@ -52,8 +27,9 @@ async function executionFinished({ data }, options) {
52
27
  let successToastAlreadyShown = false;
53
28
  let execution;
54
29
  if (data.rawData) {
55
- const { workflowId, status, rawData } = data;
30
+ const { executionId, workflowId, status, rawData } = data;
56
31
  execution = {
32
+ id: executionId,
57
33
  workflowId,
58
34
  workflowData: workflowsStore.workflow,
59
35
  data: parse(rawData),
@@ -91,6 +67,7 @@ async function fetchExecutionData(executionId) {
91
67
  return;
92
68
  }
93
69
  return {
70
+ id: executionId,
94
71
  workflowId: executionResponse.workflowId,
95
72
  workflowData: workflowsStore.workflow,
96
73
  data: parse(executionResponse.data),
@@ -120,35 +97,6 @@ function getRunExecutionData(execution) {
120
97
  }
121
98
  return runExecutionData;
122
99
  }
123
- function getExecutionError(execution) {
124
- const error = execution.data?.resultData.error;
125
- const i18n = useI18n();
126
- let errorMessage;
127
- if (execution.data?.resultData.lastNodeExecuted && error) {
128
- errorMessage = error.message ?? error.description ?? "";
129
- } else {
130
- errorMessage = i18n.baseText("pushConnection.executionError", {
131
- interpolate: { error: "!" }
132
- });
133
- if (error?.message) {
134
- let nodeName;
135
- if ("node" in error) {
136
- nodeName = typeof error.node === "string" ? error.node : error.node.name;
137
- }
138
- const receivedError = nodeName ? `${nodeName}: ${error.message}` : error.message;
139
- errorMessage = i18n.baseText("pushConnection.executionError", {
140
- interpolate: {
141
- error: `.${i18n.baseText("pushConnection.executionError.details", {
142
- interpolate: {
143
- details: receivedError
144
- }
145
- })}`
146
- }
147
- });
148
- }
149
- }
150
- return errorMessage;
151
- }
152
100
  function getRunDataExecutedErrorMessage(execution) {
153
101
  const i18n = useI18n();
154
102
  if (execution.status === "crashed") {
@@ -159,7 +107,10 @@ function getRunDataExecutedErrorMessage(execution) {
159
107
  interpolate: { activeExecutionId: workflowsStore.activeExecutionId ?? "" }
160
108
  });
161
109
  }
162
- return getExecutionError(execution);
110
+ return getExecutionErrorMessage({
111
+ error: execution.data?.resultData.error,
112
+ lastNodeExecuted: execution.data?.resultData.lastNodeExecuted
113
+ });
163
114
  }
164
115
  function handleExecutionFinishedWithWaitTill(options) {
165
116
  const workflowsStore = useWorkflowsStore();
@@ -187,7 +138,6 @@ function handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData,
187
138
  const workflowsStore = useWorkflowsStore();
188
139
  const workflowHelpers = useWorkflowHelpers(options);
189
140
  const workflowObject = workflowsStore.getCurrentWorkflow();
190
- const runDataExecutedErrorMessage = getRunDataExecutedErrorMessage(execution);
191
141
  workflowHelpers.setDocumentTitle(workflowObject.name, "ERROR");
192
142
  if (runExecutionData.resultData.error?.name === "ExpressionError" && runExecutionData.resultData.error.functionality === "pairedItem") {
193
143
  const error = runExecutionData.resultData.error;
@@ -220,52 +170,17 @@ function handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData,
220
170
  });
221
171
  });
222
172
  }
223
- if (runExecutionData.resultData.error?.name === "SubworkflowOperationError") {
224
- const error = runExecutionData.resultData.error;
225
- workflowsStore.subWorkflowExecutionError = error;
173
+ if (execution.status === "canceled") {
226
174
  toast.showMessage({
227
- title: error.message,
228
- message: error.description,
229
- type: "error",
230
- duration: 0
175
+ title: i18n.baseText("nodeView.showMessage.stopExecutionTry.title"),
176
+ type: "success"
231
177
  });
232
- } else if ((runExecutionData.resultData.error?.name === "NodeOperationError" || runExecutionData.resultData.error?.name === "NodeApiError") && runExecutionData.resultData.error.functionality === "configuration-node") {
233
- let title;
234
- const nodeError = runExecutionData.resultData.error;
235
- if (nodeError.node.name) {
236
- title = `Error in sub-node ‘${nodeError.node.name}‘`;
237
- } else {
238
- title = "Problem executing workflow";
239
- }
240
- toast.showMessage({
241
- title,
242
- message: h(_sfc_main, {
243
- errorMessage: nodeError?.description ?? runDataExecutedErrorMessage,
244
- nodeName: nodeError.node.name
245
- }),
246
- type: "error",
247
- duration: 0
178
+ } else if (execution.data?.resultData.error) {
179
+ const { message, title } = getExecutionErrorToastConfiguration({
180
+ error: execution.data.resultData.error,
181
+ lastNodeExecuted: execution.data?.resultData.lastNodeExecuted
248
182
  });
249
- } else {
250
- if (execution.status === "canceled") {
251
- toast.showMessage({
252
- title: i18n.baseText("nodeView.showMessage.stopExecutionTry.title"),
253
- type: "success"
254
- });
255
- } else {
256
- let title;
257
- if (runExecutionData.resultData.lastNodeExecuted) {
258
- title = `Problem in node ‘${runExecutionData.resultData.lastNodeExecuted}‘`;
259
- } else {
260
- title = "Problem executing workflow";
261
- }
262
- toast.showMessage({
263
- title,
264
- message: runDataExecutedErrorMessage,
265
- type: "error",
266
- duration: 0
267
- });
268
- }
183
+ toast.showMessage({ title, message, type: "error", duration: 0 });
269
184
  }
270
185
  }
271
186
  function handleExecutionFinishedSuccessfully(workflowId, options) {
@@ -320,7 +235,7 @@ function handleExecutionFinishedWithOther(successToastAlreadyShown, options) {
320
235
  });
321
236
  }
322
237
  }
323
- function setRunExecutionData(execution, runExecutionData, normalize = true) {
238
+ function setRunExecutionData(execution, runExecutionData) {
324
239
  const workflowsStore = useWorkflowsStore();
325
240
  const nodeHelpers = useNodeHelpers();
326
241
  const runDataExecutedErrorMessage = getRunDataExecutedErrorMessage(execution);
@@ -329,10 +244,12 @@ function setRunExecutionData(execution, runExecutionData, normalize = true) {
329
244
  runExecutionData.resultData.runData = workflowsStore.getWorkflowRunData;
330
245
  }
331
246
  workflowsStore.executingNode.length = 0;
332
- if (normalize) {
333
- removeRunningTaskData(execution);
334
- }
335
- workflowsStore.setWorkflowExecutionData(workflowExecution);
247
+ workflowsStore.setWorkflowExecutionData({
248
+ ...workflowExecution,
249
+ status: execution.status,
250
+ id: execution.id,
251
+ stoppedAt: execution.stoppedAt
252
+ });
336
253
  workflowsStore.setWorkflowExecutionRunData(runExecutionData);
337
254
  workflowsStore.setActiveExecutionId(void 0);
338
255
  nodeHelpers.updateNodesExecutionIssues();
@@ -352,22 +269,6 @@ function setRunExecutionData(execution, runExecutionData, normalize = true) {
352
269
  const lineNumber = runExecutionData.resultData?.error?.lineNumber;
353
270
  codeNodeEditorEventBus.emit("highlightLine", lineNumber ?? "last");
354
271
  }
355
- function removeRunningTaskData(execution) {
356
- if (execution.data) {
357
- execution.data = {
358
- ...execution.data,
359
- resultData: {
360
- ...execution.data.resultData,
361
- runData: Object.fromEntries(
362
- Object.entries(execution.data.resultData.runData).map(([nodeName, runs]) => [
363
- nodeName,
364
- runs.filter((run) => run.executionStatus !== "running")
365
- ]).filter(([, runs]) => runs.length > 0)
366
- )
367
- }
368
- };
369
- }
370
- }
371
272
  async function executionRecovered({ data }, options) {
372
273
  const workflowsStore = useWorkflowsStore();
373
274
  const uiStore = useUIStore();
@@ -389,7 +290,7 @@ async function executionRecovered({ data }, options) {
389
290
  } else {
390
291
  handleExecutionFinishedWithOther(false, options);
391
292
  }
392
- setRunExecutionData(execution, runExecutionData, false);
293
+ setRunExecutionData(execution, runExecutionData);
393
294
  }
394
295
  async function executionStarted({ data }) {
395
296
  const workflowsStore = useWorkflowsStore();
@@ -425,12 +326,13 @@ async function nodeExecuteAfter({ data: pushData }) {
425
326
  async function nodeExecuteBefore({ data }) {
426
327
  const workflowsStore = useWorkflowsStore();
427
328
  workflowsStore.addExecutingNode(data.nodeName);
428
- workflowsStore.addNodeExecutionData(data);
329
+ workflowsStore.addNodeExecutionStartedData(data);
429
330
  }
430
331
  async function reloadNodeType({ data }) {
431
332
  const nodeTypesStore = useNodeTypesStore();
432
333
  await nodeTypesStore.getNodeTypes();
433
- await nodeTypesStore.getFullNodesProperties([data]);
334
+ const isCommunityNode = isCommunityPackageName(data.name);
335
+ await nodeTypesStore.getFullNodesProperties([data], !isCommunityNode);
434
336
  }
435
337
  async function removeNodeType({ data }) {
436
338
  const nodeTypesStore = useNodeTypesStore();
@@ -1,4 +1,4 @@
1
- import { gM as useTestDefinitionStore, r as ref, q as computed } from "./index-B6eunbxp.js";
1
+ import { fJ as useTestDefinitionStore, r as ref, q as computed } from "./index-hdsPF3tl.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, dL as LOCAL_STORAGE_ACTIVATION_FLAG, dM as WORKFLOW_ACTIVE_MODAL_KEY } from "./index-B6eunbxp.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, dV as LOCAL_STORAGE_ACTIVATION_FLAG, dW as WORKFLOW_ACTIVE_MODAL_KEY } from "./index-hdsPF3tl.js";
2
2
  function useWorkflowActivate() {
3
3
  const updatingWorkflowActivation = ref(false);
4
4
  const router = useRouter();
@@ -1,4 +1,4 @@
1
- import { H as useUIStore, a3 as useNpsSurveyStore, Q as useWorkflowsStore, a5 as useWorkflowHelpers, ai as useMessage, c as useI18n, cj as MODAL_CLOSE, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, ck as MODAL_CANCEL, aj as MODAL_CONFIRM, V as VIEWS } from "./index-B6eunbxp.js";
1
+ import { H as useUIStore, a3 as useNpsSurveyStore, Q as useWorkflowsStore, a5 as useWorkflowHelpers, ai as useMessage, c as useI18n, cr as MODAL_CLOSE, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, cs as MODAL_CANCEL, aj as MODAL_CONFIRM, V as VIEWS } from "./index-hdsPF3tl.js";
2
2
  function useWorkflowSaving({ router }) {
3
3
  const uiStore = useUIStore();
4
4
  const npsSurveyStore = useNpsSurveyStore();
@@ -11,7 +11,7 @@ function useWorkflowSaving({ router }) {
11
11
  cancel = async () => {
12
12
  }
13
13
  } = {}) {
14
- if (!uiStore.stateIsDirty) {
14
+ if (!uiStore.stateIsDirty || workflowsStore.workflow.isArchived) {
15
15
  next();
16
16
  return;
17
17
  }
package/dist/index.html CHANGED
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <script type="module" crossorigin src="/{{BASE_PATH}}/assets/polyfills-CLZ4X0Ad.js"></script>
4
+ <script type="module" crossorigin src="/{{BASE_PATH}}/assets/polyfills-J2x06Gdp.js"></script>
5
5
 
6
6
  <meta charset="utf-8" />
7
7
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -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-B6eunbxp.js"></script>
20
- <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-DCpy4nCU.css">
19
+ <script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-hdsPF3tl.js"></script>
20
+ <link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-BA8d2DN9.css">
21
21
  </head>
22
22
  <body>
23
23
  <noscript>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-editor-ui",
3
- "version": "1.92.0",
3
+ "version": "1.94.0",
4
4
  "description": "Workflow Editor UI for n8n",
5
5
  "main": "index.js",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
package/tsconfig.json CHANGED
@@ -14,6 +14,7 @@
14
14
  "@n8n/composables*": ["../@n8n/composables/src*"],
15
15
  "@n8n/chat*": ["../@n8n/chat/src*"],
16
16
  "@n8n/design-system*": ["../@n8n/design-system/src*"],
17
+ "@n8n/stores*": ["../@n8n/stores/src*"],
17
18
  "@n8n/api-types*": ["../../@n8n/api-types/src*"],
18
19
  "@n8n/utils*": ["../../@n8n/utils/src*"]
19
20
  },
package/vite.config.mts CHANGED
@@ -35,6 +35,10 @@ const alias = [
35
35
  find: /^@n8n\/design-system(.+)$/,
36
36
  replacement: resolve(packagesDir, 'frontend', '@n8n', 'design-system', 'src$1'),
37
37
  },
38
+ {
39
+ find: /^@n8n\/stores(.+)$/,
40
+ replacement: resolve(packagesDir, 'frontend', '@n8n', 'stores', 'src$1'),
41
+ },
38
42
  {
39
43
  find: /^@n8n\/utils(.+)$/,
40
44
  replacement: resolve(packagesDir, '@n8n', 'utils', 'src$1'),
@@ -1,4 +0,0 @@
1
- import { hu as _sfc_main } from "./index-B6eunbxp.js";
2
- export {
3
- _sfc_main as default
4
- };
@@ -1,207 +0,0 @@
1
- import { d as defineComponent, R as useRoute, Y as useCssModule, q as computed, c as useI18n, V as VIEWS, h as resolveComponent, i as createElementBlock, g as openBlock, k as createBaseVNode, e as createBlock, n as normalizeClass, m as unref, F as Fragment, D as renderList, j as createVNode, w as withCtx, l as createTextVNode, t as toDisplayString, h9 as TIME_RANGE_LABELS, f as createCommentVNode, ha as INSIGHT_IMPACT_TYPES, hb as INSIGHTS_UNIT_IMPACT_MAPPING, ag as useTelemetry, _ as _export_sfc } from "./index-B6eunbxp.js";
2
- const smartDecimal = (value, decimals = 2) => {
3
- if (Number.isInteger(value)) {
4
- return value;
5
- }
6
- if (value.toString().split(".")[1].length <= decimals) {
7
- return value;
8
- }
9
- return Number(value.toFixed(decimals));
10
- };
11
- const _hoisted_1 = { "data-test-id": "insights-summary-tabs" };
12
- const _hoisted_2 = ["data-test-id"];
13
- const _hoisted_3 = { key: 2 };
14
- const _sfc_main = /* @__PURE__ */ defineComponent({
15
- __name: "InsightsSummary",
16
- props: {
17
- summary: {},
18
- timeRange: {},
19
- loading: { type: Boolean }
20
- },
21
- setup(__props) {
22
- const props = __props;
23
- const i18n = useI18n();
24
- const route = useRoute();
25
- const $style = useCssModule();
26
- const telemetry = useTelemetry();
27
- const summaryTitles = computed(() => ({
28
- total: i18n.baseText("insights.banner.title.total"),
29
- failed: i18n.baseText("insights.banner.title.failed"),
30
- failureRate: i18n.baseText("insights.banner.title.failureRate"),
31
- timeSaved: i18n.baseText("insights.banner.title.timeSaved"),
32
- averageRunTime: i18n.baseText("insights.banner.title.averageRunTime")
33
- }));
34
- const summaryHasNoData = computed(() => {
35
- const summaryValues = Object.values(props.summary);
36
- return summaryValues.length > 0 && summaryValues.every((summary) => !summary.value);
37
- });
38
- const summaryWithRouteLocations = computed(
39
- () => props.summary.map((s) => ({
40
- ...s,
41
- to: { name: VIEWS.INSIGHTS, params: { insightType: s.id }, query: route.query }
42
- }))
43
- );
44
- const getImpactStyle = (id, value) => {
45
- const impact = INSIGHTS_UNIT_IMPACT_MAPPING[id];
46
- if (value === 0 || impact === INSIGHT_IMPACT_TYPES.NEUTRAL) {
47
- return $style.neutral;
48
- }
49
- if (impact === INSIGHT_IMPACT_TYPES.POSITIVE) {
50
- return value > 0 ? $style.positive : $style.negative;
51
- }
52
- if (impact === INSIGHT_IMPACT_TYPES.NEGATIVE) {
53
- return value < 0 ? $style.positive : $style.negative;
54
- }
55
- return $style.neutral;
56
- };
57
- const trackTabClick = (insightType) => {
58
- telemetry.track(`User clicked ${summaryTitles.value[insightType]}`, {
59
- referrer: route.name === VIEWS.INSIGHTS ? "Dashboard" : "Overview"
60
- });
61
- };
62
- return (_ctx, _cache) => {
63
- const _component_N8nLoading = resolveComponent("N8nLoading");
64
- const _component_N8nTooltip = resolveComponent("N8nTooltip");
65
- const _component_i18n_t = resolveComponent("i18n-t");
66
- const _component_N8nIcon = resolveComponent("N8nIcon");
67
- const _component_router_link = resolveComponent("router-link");
68
- return openBlock(), createElementBlock("div", {
69
- class: normalizeClass(unref($style).insights)
70
- }, [
71
- createBaseVNode("ul", _hoisted_1, [
72
- _ctx.loading ? (openBlock(), createBlock(_component_N8nLoading, {
73
- key: 0,
74
- class: normalizeClass(unref($style).loading),
75
- cols: 5
76
- }, null, 8, ["class"])) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(summaryWithRouteLocations.value, ({ id, value, deviation, deviationUnit, unit, to }) => {
77
- return openBlock(), createElementBlock("li", {
78
- key: id,
79
- "data-test-id": `insights-summary-tab-${id}`
80
- }, [
81
- createVNode(_component_router_link, {
82
- to,
83
- "exact-active-class": unref($style).activeTab,
84
- onClick: ($event) => trackTabClick(id)
85
- }, {
86
- default: withCtx(() => [
87
- createBaseVNode("strong", null, [
88
- createVNode(_component_N8nTooltip, {
89
- placement: "bottom",
90
- disabled: id !== "timeSaved"
91
- }, {
92
- content: withCtx(() => [
93
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.title.timeSaved.tooltip")), 1)
94
- ]),
95
- default: withCtx(() => [
96
- createTextVNode(" " + toDisplayString(summaryTitles.value[id]), 1)
97
- ]),
98
- _: 2
99
- }, 1032, ["disabled"])
100
- ]),
101
- createBaseVNode("small", {
102
- class: normalizeClass(unref($style).days)
103
- }, toDisplayString(unref(TIME_RANGE_LABELS)[_ctx.timeRange]), 3),
104
- summaryHasNoData.value ? (openBlock(), createElementBlock("span", {
105
- key: 0,
106
- class: normalizeClass(unref($style).noData)
107
- }, [
108
- createVNode(_component_N8nTooltip, { placement: "bottom" }, {
109
- content: withCtx(() => [
110
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.noData.tooltip")), 1)
111
- ]),
112
- default: withCtx(() => [
113
- createBaseVNode("em", null, toDisplayString(unref(i18n).baseText("insights.banner.noData")), 1)
114
- ]),
115
- _: 1
116
- })
117
- ], 2)) : value === 0 && id === "timeSaved" ? (openBlock(), createElementBlock("span", {
118
- key: 1,
119
- class: normalizeClass(unref($style).empty)
120
- }, [
121
- _cache[0] || (_cache[0] = createBaseVNode("em", null, "--", -1)),
122
- createBaseVNode("small", null, [
123
- createVNode(_component_N8nTooltip, { placement: "bottom" }, {
124
- content: withCtx(() => [
125
- createVNode(_component_i18n_t, { keypath: "insights.banner.timeSaved.tooltip" }, {
126
- link: withCtx(() => [
127
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.timeSaved.tooltip.link.text")), 1)
128
- ]),
129
- _: 1
130
- })
131
- ]),
132
- default: withCtx(() => [
133
- createVNode(_component_N8nIcon, {
134
- class: normalizeClass(unref($style).icon),
135
- icon: "info-circle"
136
- }, null, 8, ["class"])
137
- ]),
138
- _: 1
139
- })
140
- ])
141
- ], 2)) : (openBlock(), createElementBlock("span", _hoisted_3, [
142
- createBaseVNode("em", null, [
143
- createTextVNode(toDisplayString(unref(smartDecimal)(value).toLocaleString("en-US")) + " ", 1),
144
- createBaseVNode("i", null, toDisplayString(unit), 1)
145
- ]),
146
- deviation !== null ? (openBlock(), createElementBlock("small", {
147
- key: 0,
148
- class: normalizeClass(getImpactStyle(id, deviation))
149
- }, [
150
- createVNode(_component_N8nIcon, {
151
- class: normalizeClass([unref($style).icon, getImpactStyle(id, deviation)]),
152
- icon: deviation === 0 ? "caret-right" : deviation > 0 ? "caret-up" : "caret-down"
153
- }, null, 8, ["class", "icon"]),
154
- createVNode(_component_N8nTooltip, {
155
- placement: "bottom",
156
- disabled: id !== "failureRate"
157
- }, {
158
- content: withCtx(() => [
159
- createTextVNode(toDisplayString(unref(i18n).baseText("insights.banner.failureRate.deviation.tooltip")), 1)
160
- ]),
161
- default: withCtx(() => [
162
- createTextVNode(" " + toDisplayString(unref(smartDecimal)(Math.abs(deviation)).toLocaleString("en-US")) + toDisplayString(deviationUnit), 1)
163
- ]),
164
- _: 2
165
- }, 1032, ["disabled"])
166
- ], 2)) : createCommentVNode("", true)
167
- ]))
168
- ]),
169
- _: 2
170
- }, 1032, ["to", "exact-active-class", "onClick"])
171
- ], 8, _hoisted_2);
172
- }), 128))
173
- ])
174
- ], 2);
175
- };
176
- }
177
- });
178
- const insights = "_insights_syjwy_123";
179
- const activeTab = "_activeTab_syjwy_161";
180
- const days = "_days_syjwy_174";
181
- const empty = "_empty_syjwy_185";
182
- const icon = "_icon_syjwy_193";
183
- const noData = "_noData_syjwy_225";
184
- const positive = "_positive_syjwy_230";
185
- const negative = "_negative_syjwy_234";
186
- const neutral = "_neutral_syjwy_238";
187
- const loading = "_loading_syjwy_253";
188
- const style0 = {
189
- insights,
190
- activeTab,
191
- days,
192
- empty,
193
- icon,
194
- noData,
195
- positive,
196
- negative,
197
- neutral,
198
- loading
199
- };
200
- const cssModules = {
201
- "$style": style0
202
- };
203
- const InsightsSummary = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
204
- export {
205
- InsightsSummary as I,
206
- smartDecimal as s
207
- };