n8n-editor-ui 1.31.0 → 1.31.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/.turbo/turbo-build.log +63 -63
- package/dist/assets/{AuthView-RfvlQPh5.js → AuthView-HA2BeS7f.js} +2 -2
- package/dist/assets/{AuthView-RfvlQPh5.js.map → AuthView-HA2BeS7f.js.map} +1 -1
- package/dist/assets/{CanvasControls-l1b_Zx_I.js → CanvasControls-cUUtH5At.js} +2 -2
- package/dist/assets/{CanvasControls-l1b_Zx_I.js.map → CanvasControls-cUUtH5At.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-khhMqm-D.js → ChangePasswordView-LvlBcxOc.js} +2 -2
- package/dist/assets/{ChangePasswordView-khhMqm-D.js.map → ChangePasswordView-LvlBcxOc.js.map} +1 -1
- package/dist/assets/{CollectionParameter-Zf8DWdFO.js → CollectionParameter-m-zt5fCV.js} +2 -2
- package/dist/assets/CollectionParameter-m-zt5fCV.js.map +1 -0
- package/dist/assets/{CredentialsView-f__IcIwo.js → CredentialsView-KBhkHODh.js} +2 -2
- package/dist/assets/{CredentialsView-f__IcIwo.js.map → CredentialsView-KBhkHODh.js.map} +1 -1
- package/dist/assets/{ExecutionFilter-mXzOcdkW.js → ExecutionFilter-V_hSgWod.js} +2 -2
- package/dist/assets/{ExecutionFilter-mXzOcdkW.js.map → ExecutionFilter-V_hSgWod.js.map} +1 -1
- package/dist/assets/{ExecutionPreview-Av4NpeIF.js → ExecutionPreview--u-5HE62.js} +2 -2
- package/dist/assets/{ExecutionPreview-Av4NpeIF.js.map → ExecutionPreview--u-5HE62.js.map} +1 -1
- package/dist/assets/{ExecutionsInfoAccordion-_GKLsSu_.js → ExecutionsInfoAccordion-x5q8J1U1.js} +2 -2
- package/dist/assets/{ExecutionsInfoAccordion-_GKLsSu_.js.map → ExecutionsInfoAccordion-x5q8J1U1.js.map} +1 -1
- package/dist/assets/{ExecutionsLandingPage-YC_2DX-_.js → ExecutionsLandingPage-L28oIFKc.js} +2 -2
- package/dist/assets/{ExecutionsLandingPage-YC_2DX-_.js.map → ExecutionsLandingPage-L28oIFKc.js.map} +1 -1
- package/dist/assets/{ExecutionsList-oSHXwRlB.js → ExecutionsList-0tFgI6WR.js} +2 -2
- package/dist/assets/{ExecutionsList-oSHXwRlB.js.map → ExecutionsList-0tFgI6WR.js.map} +1 -1
- package/dist/assets/{ExecutionsView-Pksjr3jh.js → ExecutionsView-TqkdmRRD.js} +2 -2
- package/dist/assets/{ExecutionsView-Pksjr3jh.js.map → ExecutionsView-TqkdmRRD.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-sxQf0ZxA.js → ForgotMyPasswordView-D1sIgYax.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-sxQf0ZxA.js.map → ForgotMyPasswordView-D1sIgYax.js.map} +1 -1
- package/dist/assets/{MainHeader-xz6puNIL.js → MainHeader-rSjJUqni.js} +2 -2
- package/dist/assets/{MainHeader-xz6puNIL.js.map → MainHeader-rSjJUqni.js.map} +1 -1
- package/dist/assets/{MainSidebar-rQpe5M3X.js → MainSidebar-YIkYQNvU.js} +2 -2
- package/dist/assets/{MainSidebar-rQpe5M3X.js.map → MainSidebar-YIkYQNvU.js.map} +1 -1
- package/dist/assets/{NodeCreation-8CGLiFnw.js → NodeCreation-Fzq2oHdG.js} +3 -3
- package/dist/assets/{NodeCreation-8CGLiFnw.js.map → NodeCreation-Fzq2oHdG.js.map} +1 -1
- package/dist/assets/{NodeCreator-0H6HfISN.js → NodeCreator-ZB-_-VPe.js} +2 -2
- package/dist/assets/{NodeCreator-0H6HfISN.js.map → NodeCreator-ZB-_-VPe.js.map} +1 -1
- package/dist/assets/{NodeList-02mJFRoY.js → NodeList-SQExkC1I.js} +2 -2
- package/dist/assets/{NodeList-02mJFRoY.js.map → NodeList-SQExkC1I.js.map} +1 -1
- package/dist/assets/{NodeView-WA4RerRw.css → NodeView-4TdTW4nM.css} +1 -1
- package/dist/assets/NodeView-R9MRan_s.js +8 -0
- package/dist/assets/NodeView-R9MRan_s.js.map +1 -0
- package/dist/assets/{RunDataAi-aB1oIQkq.js → RunDataAi-3ZnF5uZf.js} +2 -2
- package/dist/assets/{RunDataAi-aB1oIQkq.js.map → RunDataAi-3ZnF5uZf.js.map} +1 -1
- package/dist/assets/{RunDataJson-6dD5AHsW.js → RunDataJson-q9s2CJ1L.js} +3 -3
- package/dist/assets/{RunDataJson-6dD5AHsW.js.map → RunDataJson-q9s2CJ1L.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-3jBSymBt.js → RunDataJsonActions-87I4s3Q4.js} +2 -2
- package/dist/assets/{RunDataJsonActions-3jBSymBt.js.map → RunDataJsonActions-87I4s3Q4.js.map} +1 -1
- package/dist/assets/{RunDataSchema-uYs9i5gp.js → RunDataSchema-yoVX-T4I.js} +2 -2
- package/dist/assets/{RunDataSchema-uYs9i5gp.js.map → RunDataSchema-yoVX-T4I.js.map} +1 -1
- package/dist/assets/{RunDataTable-G1II-GXc.js → RunDataTable-64svWUC6.js} +2 -2
- package/dist/assets/{RunDataTable-G1II-GXc.js.map → RunDataTable-64svWUC6.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-ekSCvOA8.js → SamlOnboarding-M2xGH4bo.js} +2 -2
- package/dist/assets/{SamlOnboarding-ekSCvOA8.js.map → SamlOnboarding-M2xGH4bo.js.map} +1 -1
- package/dist/assets/{SettingsApiView-nYqcsdag.js → SettingsApiView-DbkofsKW.js} +2 -2
- package/dist/assets/{SettingsApiView-nYqcsdag.js.map → SettingsApiView-DbkofsKW.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-m3YKlauH.js → SettingsCommunityNodesView-AgA6fziO.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-m3YKlauH.js.map → SettingsCommunityNodesView-AgA6fziO.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-34jgnmjV.js → SettingsExternalSecrets-bVUCWLUK.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-34jgnmjV.js.map → SettingsExternalSecrets-bVUCWLUK.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-PlM5Q7BR.js → SettingsFakeDoorView-vBsbSMTz.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-PlM5Q7BR.js.map → SettingsFakeDoorView-vBsbSMTz.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-9xig0oET.js → SettingsLdapView-aOF3TxNb.js} +2 -2
- package/dist/assets/{SettingsLdapView-9xig0oET.js.map → SettingsLdapView-aOF3TxNb.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-ClMsYqOF.js → SettingsLogStreamingView-bm51qMta.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-ClMsYqOF.js.map → SettingsLogStreamingView-bm51qMta.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-YHwQ6IXq.js → SettingsSourceControl-WEi8c37q.js} +2 -2
- package/dist/assets/{SettingsSourceControl-YHwQ6IXq.js.map → SettingsSourceControl-WEi8c37q.js.map} +1 -1
- package/dist/assets/{SettingsSso-iFCiagfy.js → SettingsSso-1KUvHct8.js} +2 -2
- package/dist/assets/{SettingsSso-iFCiagfy.js.map → SettingsSso-1KUvHct8.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-qV-dasPh.js → SettingsUsageAndPlan-qvlmdNIu.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-qV-dasPh.js.map → SettingsUsageAndPlan-qvlmdNIu.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-oFMSuGNj.js → SettingsUsersView-ipMjmS0J.js} +2 -2
- package/dist/assets/{SettingsUsersView-oFMSuGNj.js.map → SettingsUsersView-ipMjmS0J.js.map} +1 -1
- package/dist/assets/{SettingsView-PQr3D_Qw.js → SettingsView--YvZzIsd.js} +2 -2
- package/dist/assets/{SettingsView-PQr3D_Qw.js.map → SettingsView--YvZzIsd.js.map} +1 -1
- package/dist/assets/{SetupView-XgKAnmCH.js → SetupView-sXfLqAaw.js} +2 -2
- package/dist/assets/{SetupView-XgKAnmCH.js.map → SetupView-sXfLqAaw.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-1thP_Pd7.js → SetupWorkflowCredentialsButton-JeMgqdLT.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-1thP_Pd7.js.map → SetupWorkflowCredentialsButton-JeMgqdLT.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-srBMzN1e.js → SetupWorkflowFromTemplateView-CDQGT8sq.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-srBMzN1e.js.map → SetupWorkflowFromTemplateView-CDQGT8sq.js.map} +1 -1
- package/dist/assets/{SigninView-eE5qnff6.js → SigninView-Z98vY620.js} +2 -2
- package/dist/assets/{SigninView-eE5qnff6.js.map → SigninView-Z98vY620.js.map} +1 -1
- package/dist/assets/{SignupView-9d40Dggz.js → SignupView-X0K4hmyL.js} +2 -2
- package/dist/assets/{SignupView-9d40Dggz.js.map → SignupView-X0K4hmyL.js.map} +1 -1
- package/dist/assets/{TemplateDetails-rR8wjzGE.js → TemplateDetails-LkR9Mwpa.js} +2 -2
- package/dist/assets/{TemplateDetails-rR8wjzGE.js.map → TemplateDetails-LkR9Mwpa.js.map} +1 -1
- package/dist/assets/{TemplateList-iPTJU805.js → TemplateList-3Sn3bOND.js} +2 -2
- package/dist/assets/{TemplateList-iPTJU805.js.map → TemplateList-3Sn3bOND.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-nbC99QSt.js → TemplatesCollectionView-ShC0Z9iK.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-nbC99QSt.js.map → TemplatesCollectionView-ShC0Z9iK.js.map} +1 -1
- package/dist/assets/{TemplatesInfoCarousel-SruxUbHk.js → TemplatesInfoCarousel-LmSrKkcm.js} +2 -2
- package/dist/assets/{TemplatesInfoCarousel-SruxUbHk.js.map → TemplatesInfoCarousel-LmSrKkcm.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-v3YJ9cpx.js → TemplatesSearchView-WIbBh-fS.js} +2 -2
- package/dist/assets/{TemplatesSearchView-v3YJ9cpx.js.map → TemplatesSearchView-WIbBh-fS.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-fUesRX9J.js → TemplatesWorkflowView-GF7A2wQ8.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-fUesRX9J.js.map → TemplatesWorkflowView-GF7A2wQ8.js.map} +1 -1
- package/dist/assets/{VariablesView-VWkgCVLM.js → VariablesView-F5vY_O7t.js} +2 -2
- package/dist/assets/{VariablesView-VWkgCVLM.js.map → VariablesView-F5vY_O7t.js.map} +1 -1
- package/dist/assets/{WorkerView-2M4ULe2q.js → WorkerView-3HVNzSKY.js} +2 -2
- package/dist/assets/{WorkerView-2M4ULe2q.js.map → WorkerView-3HVNzSKY.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-Ljzsj-Pc.js → WorkflowActivator-Bn6AJk6k.js} +2 -2
- package/dist/assets/{WorkflowActivator-Ljzsj-Pc.js.map → WorkflowActivator-Bn6AJk6k.js.map} +1 -1
- package/dist/assets/{WorkflowHistory-XIO4RPyW.js → WorkflowHistory-BOE4rgDP.js} +2 -2
- package/dist/assets/{WorkflowHistory-XIO4RPyW.js.map → WorkflowHistory-BOE4rgDP.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-uocM15_t.js → WorkflowOnboardingView-mo-6kuvd.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-uocM15_t.js.map → WorkflowOnboardingView-mo-6kuvd.js.map} +1 -1
- package/dist/assets/{WorkflowsView-kE5lfz5s.js → WorkflowsView-Xu_gm30s.js} +2 -2
- package/dist/assets/{WorkflowsView-kE5lfz5s.js.map → WorkflowsView-Xu_gm30s.js.map} +1 -1
- package/dist/assets/{cloud-eCWdzc_U.js → cloud-HXwHoJMx.js} +2 -2
- package/dist/assets/{cloud-eCWdzc_U.js.map → cloud-HXwHoJMx.js.map} +1 -1
- package/dist/assets/{index-6DR75wmI.js → index-36CdMZUz.js} +61 -61
- package/dist/assets/index-36CdMZUz.js.map +1 -0
- package/dist/assets/{index-nnspvX6P.css → index-wl9S8xQJ.css} +1 -1
- package/dist/assets/{pushConnection-Nsi8KY7W.js → pushConnection-oi9TyCK6.js} +2 -2
- package/dist/assets/{pushConnection-Nsi8KY7W.js.map → pushConnection-oi9TyCK6.js.map} +1 -1
- package/dist/assets/{templateActions-izEz5292.js → templateActions-EUfdPNqc.js} +2 -2
- package/dist/assets/{templateActions-izEz5292.js.map → templateActions-EUfdPNqc.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-io4M-GfO.js → useExecutionDebugging-986Mdc3C.js} +2 -2
- package/dist/assets/{useExecutionDebugging-io4M-GfO.js.map → useExecutionDebugging-986Mdc3C.js.map} +1 -1
- package/dist/assets/{workflowActivate-cwYrfIJI.js → workflowActivate-v05HQ2xy.js} +2 -2
- package/dist/assets/{workflowActivate-cwYrfIJI.js.map → workflowActivate-v05HQ2xy.js.map} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-Zf8DWdFO.js.map +0 -1
- package/dist/assets/NodeView-eyw1ZaPg.js +0 -8
- package/dist/assets/NodeView-eyw1ZaPg.js.map +0 -1
- package/dist/assets/index-6DR75wmI.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as q,m as j,$ as K}from"./index-6DR75wmI.js";import{s as V,m as Y,cW as J,e as z,l as X,v as Z,u as ee,y as te,B as se,b0 as oe,dO as re,d4 as ae,cS as ie,d8 as Q,a8 as ne}from"./n8n-oSulVm5C.js";import{d as ue,m as le}from"./pinia-jQLgEt_L.js";import{p as de}from"./flatted-jPn12Tq4.js";import{u as ce,a as he}from"./collaboration.store-INqaSyP2.js";import{G as we,aE as fe}from"./vendor-e5jTRqqt.js";const pe="/orchestration/worker/status",ke=async e=>{await V(e,"POST",pe)},ge=100,me=120*1e3,Se=ue("orchestrationManager",{state:()=>({initialStatusReceived:!1,workers:{},workersHistory:{},workersLastUpdated:{},statusInterval:null}),actions:{updateWorkerStatus(e){this.workers[e.workerId]=e,this.workersHistory[e.workerId]||(this.workersHistory[e.workerId]=[]),this.workersHistory[e.workerId].push({data:e,timestamp:Date.now()}),this.workersHistory[e.workerId].length>ge&&this.workersHistory[e.workerId].shift(),this.workersLastUpdated[e.workerId]=Date.now(),this.initialStatusReceived=!0},removeStaleWorkers(){for(const e in this.workersLastUpdated)this.workersLastUpdated[e]+me<Date.now()&&(delete this.workers[e],delete this.workersHistory[e],delete this.workersLastUpdated[e])},startWorkerStatusPolling(){const e=Y();this.statusInterval||(this.statusInterval=setInterval(async()=>{await ke(e.getRestApiContext),this.removeStaleWorkers()},1e3))},stopWorkerStatusPolling(){this.statusInterval&&(clearInterval(this.statusInterval),this.statusInterval=null)},getWorkerLastUpdated(e){return this.workersLastUpdated[e]??0},getWorkerStatus(e){return this.workers[e]},getWorkerStatusHistory(e){return this.workersHistory[e]??[]}}}),ve=we({setup(){const e=fe(),r=q({router:e}),n=j();return{...J(),...z(),nodeHelpers:n,workflowHelpers:r}},data(){return{retryTimeout:null,pushMessageQueue:[],removeEventListener:null}},created(){this.removeEventListener=this.pushStore.addEventListener(e=>{this.pushMessageReceived(e)})},unmounted(){typeof this.removeEventListener=="function"&&this.removeEventListener()},computed:{...le(se,te,ee,Z,X,K,Se,he,ce),sessionId(){return this.rootStore.sessionId}},methods:{queuePushMessage(e,r){this.pushMessageQueue.push({message:e,retriesLeft:r}),this.retryTimeout===null&&(this.retryTimeout=setTimeout(this.processWaitingPushMessages,20))},async processWaitingPushMessages(){this.retryTimeout!==null&&(clearTimeout(this.retryTimeout),this.retryTimeout=null);const e=this.pushMessageQueue.length;for(let r=0;r<e;r++){const n=this.pushMessageQueue.shift();if(!await this.pushMessageReceived(n.message,!0)){n.retriesLeft-=1,n.retriesLeft>0&&this.pushMessageQueue.unshift(n);break}}this.pushMessageQueue.length!==0&&this.retryTimeout===null&&(this.retryTimeout=setTimeout(this.processWaitingPushMessages,25))},async pushMessageReceived(e,r){var f,k,g,m,S,x,y,E,T,I,N,v,D,M,W,A,b,R,C,L,_,H,$,O,P,U,F,B;if(e.type==="sendWorkerStatusMessage"){const o=e.data;return this.orchestrationManagerStore.updateWorkerStatus(o.status),!0}if(e.type==="sendConsoleMessage"){const o=e.data;return console.log(o.source,...o.messages),!0}if(!["testWebhookReceived"].includes(e.type)&&r!==!0&&this.pushMessageQueue.length)return this.queuePushMessage(e,5),!1;if(e.type==="nodeExecuteAfter"||e.type==="nodeExecuteBefore"){if(!this.uiStore.isActionActive("workflowRunning"))return!1;const o=e.data;if(this.workflowsStore.activeExecutionId!==o.executionId)return r!==!0&&this.queuePushMessage(event,5),!1}let h;if(e.type==="executionRecovered"){const o=(f=e.data)==null?void 0:f.executionId;if(this.uiStore.isActionActive("workflowRunning")&&this.workflowsStore.activeExecutionId===o){const t=await this.workflowsStore.fetchExecutionDataById(this.workflowsStore.activeExecutionId);if(t!=null&&t.data){t.data=de(t.data);const c={startData:(k=t.data)==null?void 0:k.startData,resultData:((g=t.data)==null?void 0:g.resultData)??{runData:{}},executionData:(m=t.data)==null?void 0:m.executionData};if(((S=this.workflowsStore.workflowExecutionData)==null?void 0:S.workflowId)===t.workflowId){const l=(E=(y=(x=this.workflowsStore.workflowExecutionData)==null?void 0:x.data)==null?void 0:y.resultData)==null?void 0:E.runData;if(l)for(const w of Object.keys(l))c.resultData.runData[w]=l[w]}const p={data:c,finished:t.finished,mode:t.mode,waitTill:(T=t.data)==null?void 0:T.waitTill,startedAt:t.startedAt,stoppedAt:t.stoppedAt,status:"crashed"};t.data&&(h={executionId:t.id,data:p})}}}if(e.type==="workflowFailedToActivate"&&this.workflowsStore.workflowId===e.data.workflowId)return this.workflowsStore.setWorkflowInactive(e.data.workflowId),this.workflowsStore.setActive(!1),this.showError(new Error(e.data.errorMessage),this.$locale.baseText("workflowActivator.showError.title",{interpolate:{newStateName:"activated"}})+":"),!0;if(e.type==="workflowActivated")return this.workflowsStore.setWorkflowActive(e.data.workflowId),!0;if(e.type==="workflowDeactivated")return this.workflowsStore.setWorkflowInactive(e.data.workflowId),!0;if(e.type==="executionFinished"||e.type==="executionRecovered"){let o;e.type==="executionRecovered"&&h!==void 0?o=h:o=e.data;const{activeExecutionId:d}=this.workflowsStore;if(d===o.executionId){const s=(v=(N=(I=this.workflowsStore.workflowExecutionData)==null?void 0:I.data)==null?void 0:N.resultData)==null?void 0:v.runData;if(s)for(const a of Object.keys(s))((C=(R=(b=(A=(W=(M=(D=o.data.data.resultData.runData[a])==null?void 0:D[0])==null?void 0:M.data)==null?void 0:W.main)==null?void 0:A[0])==null?void 0:b[0])==null?void 0:R.json)==null?void 0:C.isArtificialRecoveredEventItem)===!0&&s[a].length>0&&(o.data.data.resultData.runData[a]=s[a]);this.workflowsStore.finishActiveExecution(o)}if(!this.uiStore.isActionActive("workflowRunning"))return!1;if(d!==o.executionId)return r!==!0&&this.queuePushMessage(event,5),!1;const t=o.data;let c=this.getExecutionError(t.data);t.status==="crashed"?c=this.$locale.baseText("pushConnection.executionFailed.message"):t.status==="canceled"&&(c=this.$locale.baseText("executionsList.showMessage.stopExecution.message",{interpolate:{activeExecutionId:d}}));const p=(H=(_=(L=t==null?void 0:t.data)==null?void 0:L.resultData)==null?void 0:_.error)==null?void 0:H.lineNumber;oe.emit("error-line-number",p||"final");const l=this.workflowHelpers.getCurrentWorkflow();if(t.waitTill!==void 0){const s=this.workflowsStore.workflowSettings,a=this.rootStore.saveManualExecutions,i=s.saveManualExecutions===void 0?a:s.saveManualExecutions;let u;i?u=`<a href="/workflow/${l.id}/executions/${d}">View the execution</a> to see what happened after this node.`:(re.emit("registerGlobalLinkAction",{key:"open-settings",action:async()=>{this.workflowsStore.isNewWorkflow&&await this.workflowHelpers.saveAsNewWorkflow(),this.uiStore.openModal(ae)}}),u='<a data-action="open-settings">Turn on saving manual executions</a> and run again to see what happened after this node.'),this.titleSet(l.name,"IDLE"),this.showToast({title:"Workflow started waiting",message:`${u} <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/" target="_blank">More info</a>`,type:"success",duration:0})}else if(t.finished!==!0){if(this.titleSet(l.name,"ERROR"),(($=t.data.resultData.error)==null?void 0:$.name)==="ExpressionError"&&t.data.resultData.error.context.functionality==="pairedItem"){const s=t.data.resultData.error;this.workflowHelpers.getWorkflowDataToSave().then(a=>{const i={caused_by_credential:!1,error_message:s.description,error_title:s.message,error_type:s.context.type,node_graph_string:JSON.stringify(ie(a,this.workflowHelpers.getNodeTypes()).nodeGraph),workflow_id:this.workflowsStore.workflowId};if(s.context.nodeCause&&["paired_item_no_info","paired_item_invalid_info"].includes(s.context.type)){const u=l.getNode(s.context.nodeCause);u&&(i.is_pinned=!!l.getPinDataOfNode(u.name),i.mode=u.parameters.mode,i.node_type=u.type,i.operation=u.parameters.operation,i.resource=u.parameters.resource)}this.$telemetry.track("Instance FE emitted paired item error",i,{withPostHog:!0})})}if(((O=t.data.resultData.error)==null?void 0:O.name)==="SubworkflowOperationError"){const s=t.data.resultData.error;this.workflowsStore.subWorkflowExecutionError=s,this.showMessage({title:s.message,message:s.description,type:"error",duration:0})}else if(((P=t.data.resultData.error)==null?void 0:P.name)==="NodeOperationError"&&t.data.resultData.error.functionality==="configuration-node"){let s;const a=t.data.resultData.error;a.node.name?s=`Error in sub-node ‘${a.node.name}‘`:s="Problem executing workflow",this.showMessage({title:s,message:((a==null?void 0:a.description)??c)+this.$locale.baseText("pushConnection.executionError.openNode",{interpolate:{node:a.node.name}}),type:"error",duration:0,dangerouslyUseHTMLString:!0})}else{let s;t.mode==="manual"&&t.status==="canceled"?this.showMessage({title:this.$locale.baseText("nodeView.showMessage.stopExecutionTry.title"),type:"success"}):(t.data.resultData.lastNodeExecuted?s=`Problem in node ‘${t.data.resultData.lastNodeExecuted}‘`:s="Problem executing workflow",this.showMessage({title:s,message:c,type:"error",duration:0,dangerouslyUseHTMLString:!0}))}}else{this.titleSet(l.name,"IDLE");const s=this.workflowsStore.getWorkflowExecution;if(s!=null&&s.executedNode){const a=this.workflowsStore.getNodeByName(s.executedNode),i=a&&this.nodeTypesStore.getNodeType(a.type,a.typeVersion),u=s&&s.executedNode&&((B=(F=(U=s.data)==null?void 0:U.resultData)==null?void 0:F.runData)==null?void 0:B[s.executedNode]);i!=null&&i.polling&&!u?this.showMessage({title:this.$locale.baseText("pushConnection.pollingNode.dataNotFound",{interpolate:{service:Q(i)}}),message:this.$locale.baseText("pushConnection.pollingNode.dataNotFound.message",{interpolate:{service:Q(i)}}),type:"success"}):this.showMessage({title:this.$locale.baseText("pushConnection.nodeExecutedSuccessfully"),type:"success"})}else this.showMessage({title:this.$locale.baseText("pushConnection.workflowExecutedSuccessfully"),type:"success"})}this.workflowsStore.getWorkflowRunData&&(t.data.resultData.runData=this.workflowsStore.getWorkflowRunData),this.workflowsStore.executingNode.length=0,this.workflowsStore.setWorkflowExecutionData(t),this.uiStore.removeActiveAction("workflowRunning"),this.nodeHelpers.updateNodesExecutionIssues();const w=t.data.resultData.lastNodeExecuted;let G=0;w&&t.data.resultData.runData[w]&&!c&&(G=t.data.resultData.runData[w][0].data.main[0].length),ne().run("pushConnection.executionFinished",{itemsCount:G,nodeName:t.data.resultData.lastNodeExecuted,errorMessage:c,runDataExecutedStartData:t.data.startData,resultDataError:t.data.resultData.error}),t.data.resultData.error||this.segmentStore.trackSuccessfulWorkflowExecution(t)}else if(e.type==="executionStarted"){const o=e.data,d={id:o.executionId,finished:!1,mode:o.mode,startedAt:o.startedAt,retryOf:o.retryOf,workflowId:o.workflowId,workflowName:o.workflowName};this.workflowsStore.addActiveExecution(d)}else if(e.type==="nodeExecuteAfter"){const o=e.data;this.workflowsStore.addNodeExecutionData(o),this.workflowsStore.removeExecutingNode(o.nodeName)}else if(e.type==="nodeExecuteBefore"){const o=e.data;this.workflowsStore.addExecutingNode(o.nodeName)}else if(e.type==="testWebhookDeleted")e.data.workflowId===this.workflowsStore.workflowId&&(this.workflowsStore.executionWaitingForWebhook=!1,this.uiStore.removeActiveAction("workflowRunning"));else if(e.type==="testWebhookReceived"){const o=e.data;o.workflowId===this.workflowsStore.workflowId&&(this.workflowsStore.executionWaitingForWebhook=!1,this.workflowsStore.activeExecutionId=o.executionId),this.processWaitingPushMessages()}else if(e.type==="reloadNodeType")await this.nodeTypesStore.getNodeTypes(),await this.nodeTypesStore.getFullNodesProperties([e.data]);else if(e.type==="removeNodeType"){const d=[e.data];await this.credentialsStore.fetchCredentialTypes(!1).then(()=>{this.nodeTypesStore.removeNodeTypes(d)})}else e.type==="nodeDescriptionUpdated"&&(await this.nodeTypesStore.getNodeTypes(),await this.credentialsStore.fetchCredentialTypes(!0));return!0},getExecutionError(e){const r=e.resultData.error;let n;if(e.resultData.lastNodeExecuted&&r)n=r.message||r.description;else if(n=this.$locale.baseText("pushConnection.executionError",{interpolate:{error:"!"}}),r!=null&&r.message){let h;"node"in r&&(h=typeof r.node=="string"?r.node:r.node.name);const f=h?`${h}: ${r.message}`:r.message;n=this.$locale.baseText("pushConnection.executionError",{interpolate:{error:`.${this.$locale.baseText("pushConnection.executionError.details",{interpolate:{details:f}})}`}})}return n}}});export{ge as W,ve as p,Se as u};
|
|
2
|
-
//# sourceMappingURL=pushConnection-
|
|
1
|
+
import{a as q,m as j,$ as K}from"./index-36CdMZUz.js";import{s as V,m as Y,cW as J,e as z,l as X,v as Z,u as ee,y as te,B as se,b0 as oe,dO as re,d4 as ae,cS as ie,d8 as Q,a8 as ne}from"./n8n-oSulVm5C.js";import{d as ue,m as le}from"./pinia-jQLgEt_L.js";import{p as de}from"./flatted-jPn12Tq4.js";import{u as ce,a as he}from"./collaboration.store-INqaSyP2.js";import{G as we,aE as fe}from"./vendor-e5jTRqqt.js";const pe="/orchestration/worker/status",ke=async e=>{await V(e,"POST",pe)},ge=100,me=120*1e3,Se=ue("orchestrationManager",{state:()=>({initialStatusReceived:!1,workers:{},workersHistory:{},workersLastUpdated:{},statusInterval:null}),actions:{updateWorkerStatus(e){this.workers[e.workerId]=e,this.workersHistory[e.workerId]||(this.workersHistory[e.workerId]=[]),this.workersHistory[e.workerId].push({data:e,timestamp:Date.now()}),this.workersHistory[e.workerId].length>ge&&this.workersHistory[e.workerId].shift(),this.workersLastUpdated[e.workerId]=Date.now(),this.initialStatusReceived=!0},removeStaleWorkers(){for(const e in this.workersLastUpdated)this.workersLastUpdated[e]+me<Date.now()&&(delete this.workers[e],delete this.workersHistory[e],delete this.workersLastUpdated[e])},startWorkerStatusPolling(){const e=Y();this.statusInterval||(this.statusInterval=setInterval(async()=>{await ke(e.getRestApiContext),this.removeStaleWorkers()},1e3))},stopWorkerStatusPolling(){this.statusInterval&&(clearInterval(this.statusInterval),this.statusInterval=null)},getWorkerLastUpdated(e){return this.workersLastUpdated[e]??0},getWorkerStatus(e){return this.workers[e]},getWorkerStatusHistory(e){return this.workersHistory[e]??[]}}}),ve=we({setup(){const e=fe(),r=q({router:e}),n=j();return{...J(),...z(),nodeHelpers:n,workflowHelpers:r}},data(){return{retryTimeout:null,pushMessageQueue:[],removeEventListener:null}},created(){this.removeEventListener=this.pushStore.addEventListener(e=>{this.pushMessageReceived(e)})},unmounted(){typeof this.removeEventListener=="function"&&this.removeEventListener()},computed:{...le(se,te,ee,Z,X,K,Se,he,ce),sessionId(){return this.rootStore.sessionId}},methods:{queuePushMessage(e,r){this.pushMessageQueue.push({message:e,retriesLeft:r}),this.retryTimeout===null&&(this.retryTimeout=setTimeout(this.processWaitingPushMessages,20))},async processWaitingPushMessages(){this.retryTimeout!==null&&(clearTimeout(this.retryTimeout),this.retryTimeout=null);const e=this.pushMessageQueue.length;for(let r=0;r<e;r++){const n=this.pushMessageQueue.shift();if(!await this.pushMessageReceived(n.message,!0)){n.retriesLeft-=1,n.retriesLeft>0&&this.pushMessageQueue.unshift(n);break}}this.pushMessageQueue.length!==0&&this.retryTimeout===null&&(this.retryTimeout=setTimeout(this.processWaitingPushMessages,25))},async pushMessageReceived(e,r){var f,k,g,m,S,x,y,E,T,I,N,v,D,M,W,A,b,R,C,L,_,H,$,O,P,U,F,B;if(e.type==="sendWorkerStatusMessage"){const o=e.data;return this.orchestrationManagerStore.updateWorkerStatus(o.status),!0}if(e.type==="sendConsoleMessage"){const o=e.data;return console.log(o.source,...o.messages),!0}if(!["testWebhookReceived"].includes(e.type)&&r!==!0&&this.pushMessageQueue.length)return this.queuePushMessage(e,5),!1;if(e.type==="nodeExecuteAfter"||e.type==="nodeExecuteBefore"){if(!this.uiStore.isActionActive("workflowRunning"))return!1;const o=e.data;if(this.workflowsStore.activeExecutionId!==o.executionId)return r!==!0&&this.queuePushMessage(event,5),!1}let h;if(e.type==="executionRecovered"){const o=(f=e.data)==null?void 0:f.executionId;if(this.uiStore.isActionActive("workflowRunning")&&this.workflowsStore.activeExecutionId===o){const t=await this.workflowsStore.fetchExecutionDataById(this.workflowsStore.activeExecutionId);if(t!=null&&t.data){t.data=de(t.data);const c={startData:(k=t.data)==null?void 0:k.startData,resultData:((g=t.data)==null?void 0:g.resultData)??{runData:{}},executionData:(m=t.data)==null?void 0:m.executionData};if(((S=this.workflowsStore.workflowExecutionData)==null?void 0:S.workflowId)===t.workflowId){const l=(E=(y=(x=this.workflowsStore.workflowExecutionData)==null?void 0:x.data)==null?void 0:y.resultData)==null?void 0:E.runData;if(l)for(const w of Object.keys(l))c.resultData.runData[w]=l[w]}const p={data:c,finished:t.finished,mode:t.mode,waitTill:(T=t.data)==null?void 0:T.waitTill,startedAt:t.startedAt,stoppedAt:t.stoppedAt,status:"crashed"};t.data&&(h={executionId:t.id,data:p})}}}if(e.type==="workflowFailedToActivate"&&this.workflowsStore.workflowId===e.data.workflowId)return this.workflowsStore.setWorkflowInactive(e.data.workflowId),this.workflowsStore.setActive(!1),this.showError(new Error(e.data.errorMessage),this.$locale.baseText("workflowActivator.showError.title",{interpolate:{newStateName:"activated"}})+":"),!0;if(e.type==="workflowActivated")return this.workflowsStore.setWorkflowActive(e.data.workflowId),!0;if(e.type==="workflowDeactivated")return this.workflowsStore.setWorkflowInactive(e.data.workflowId),!0;if(e.type==="executionFinished"||e.type==="executionRecovered"){let o;e.type==="executionRecovered"&&h!==void 0?o=h:o=e.data;const{activeExecutionId:d}=this.workflowsStore;if(d===o.executionId){const s=(v=(N=(I=this.workflowsStore.workflowExecutionData)==null?void 0:I.data)==null?void 0:N.resultData)==null?void 0:v.runData;if(s)for(const a of Object.keys(s))((C=(R=(b=(A=(W=(M=(D=o.data.data.resultData.runData[a])==null?void 0:D[0])==null?void 0:M.data)==null?void 0:W.main)==null?void 0:A[0])==null?void 0:b[0])==null?void 0:R.json)==null?void 0:C.isArtificialRecoveredEventItem)===!0&&s[a].length>0&&(o.data.data.resultData.runData[a]=s[a]);this.workflowsStore.finishActiveExecution(o)}if(!this.uiStore.isActionActive("workflowRunning"))return!1;if(d!==o.executionId)return r!==!0&&this.queuePushMessage(event,5),!1;const t=o.data;let c=this.getExecutionError(t.data);t.status==="crashed"?c=this.$locale.baseText("pushConnection.executionFailed.message"):t.status==="canceled"&&(c=this.$locale.baseText("executionsList.showMessage.stopExecution.message",{interpolate:{activeExecutionId:d}}));const p=(H=(_=(L=t==null?void 0:t.data)==null?void 0:L.resultData)==null?void 0:_.error)==null?void 0:H.lineNumber;oe.emit("error-line-number",p||"final");const l=this.workflowHelpers.getCurrentWorkflow();if(t.waitTill!==void 0){const s=this.workflowsStore.workflowSettings,a=this.rootStore.saveManualExecutions,i=s.saveManualExecutions===void 0?a:s.saveManualExecutions;let u;i?u=`<a href="/workflow/${l.id}/executions/${d}">View the execution</a> to see what happened after this node.`:(re.emit("registerGlobalLinkAction",{key:"open-settings",action:async()=>{this.workflowsStore.isNewWorkflow&&await this.workflowHelpers.saveAsNewWorkflow(),this.uiStore.openModal(ae)}}),u='<a data-action="open-settings">Turn on saving manual executions</a> and run again to see what happened after this node.'),this.titleSet(l.name,"IDLE"),this.showToast({title:"Workflow started waiting",message:`${u} <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/" target="_blank">More info</a>`,type:"success",duration:0})}else if(t.finished!==!0){if(this.titleSet(l.name,"ERROR"),(($=t.data.resultData.error)==null?void 0:$.name)==="ExpressionError"&&t.data.resultData.error.context.functionality==="pairedItem"){const s=t.data.resultData.error;this.workflowHelpers.getWorkflowDataToSave().then(a=>{const i={caused_by_credential:!1,error_message:s.description,error_title:s.message,error_type:s.context.type,node_graph_string:JSON.stringify(ie(a,this.workflowHelpers.getNodeTypes()).nodeGraph),workflow_id:this.workflowsStore.workflowId};if(s.context.nodeCause&&["paired_item_no_info","paired_item_invalid_info"].includes(s.context.type)){const u=l.getNode(s.context.nodeCause);u&&(i.is_pinned=!!l.getPinDataOfNode(u.name),i.mode=u.parameters.mode,i.node_type=u.type,i.operation=u.parameters.operation,i.resource=u.parameters.resource)}this.$telemetry.track("Instance FE emitted paired item error",i,{withPostHog:!0})})}if(((O=t.data.resultData.error)==null?void 0:O.name)==="SubworkflowOperationError"){const s=t.data.resultData.error;this.workflowsStore.subWorkflowExecutionError=s,this.showMessage({title:s.message,message:s.description,type:"error",duration:0})}else if(((P=t.data.resultData.error)==null?void 0:P.name)==="NodeOperationError"&&t.data.resultData.error.functionality==="configuration-node"){let s;const a=t.data.resultData.error;a.node.name?s=`Error in sub-node ‘${a.node.name}‘`:s="Problem executing workflow",this.showMessage({title:s,message:((a==null?void 0:a.description)??c)+this.$locale.baseText("pushConnection.executionError.openNode",{interpolate:{node:a.node.name}}),type:"error",duration:0,dangerouslyUseHTMLString:!0})}else{let s;t.mode==="manual"&&t.status==="canceled"?this.showMessage({title:this.$locale.baseText("nodeView.showMessage.stopExecutionTry.title"),type:"success"}):(t.data.resultData.lastNodeExecuted?s=`Problem in node ‘${t.data.resultData.lastNodeExecuted}‘`:s="Problem executing workflow",this.showMessage({title:s,message:c,type:"error",duration:0,dangerouslyUseHTMLString:!0}))}}else{this.titleSet(l.name,"IDLE");const s=this.workflowsStore.getWorkflowExecution;if(s!=null&&s.executedNode){const a=this.workflowsStore.getNodeByName(s.executedNode),i=a&&this.nodeTypesStore.getNodeType(a.type,a.typeVersion),u=s&&s.executedNode&&((B=(F=(U=s.data)==null?void 0:U.resultData)==null?void 0:F.runData)==null?void 0:B[s.executedNode]);i!=null&&i.polling&&!u?this.showMessage({title:this.$locale.baseText("pushConnection.pollingNode.dataNotFound",{interpolate:{service:Q(i)}}),message:this.$locale.baseText("pushConnection.pollingNode.dataNotFound.message",{interpolate:{service:Q(i)}}),type:"success"}):this.showMessage({title:this.$locale.baseText("pushConnection.nodeExecutedSuccessfully"),type:"success"})}else this.showMessage({title:this.$locale.baseText("pushConnection.workflowExecutedSuccessfully"),type:"success"})}this.workflowsStore.getWorkflowRunData&&(t.data.resultData.runData=this.workflowsStore.getWorkflowRunData),this.workflowsStore.executingNode.length=0,this.workflowsStore.setWorkflowExecutionData(t),this.uiStore.removeActiveAction("workflowRunning"),this.nodeHelpers.updateNodesExecutionIssues();const w=t.data.resultData.lastNodeExecuted;let G=0;w&&t.data.resultData.runData[w]&&!c&&(G=t.data.resultData.runData[w][0].data.main[0].length),ne().run("pushConnection.executionFinished",{itemsCount:G,nodeName:t.data.resultData.lastNodeExecuted,errorMessage:c,runDataExecutedStartData:t.data.startData,resultDataError:t.data.resultData.error}),t.data.resultData.error||this.segmentStore.trackSuccessfulWorkflowExecution(t)}else if(e.type==="executionStarted"){const o=e.data,d={id:o.executionId,finished:!1,mode:o.mode,startedAt:o.startedAt,retryOf:o.retryOf,workflowId:o.workflowId,workflowName:o.workflowName};this.workflowsStore.addActiveExecution(d)}else if(e.type==="nodeExecuteAfter"){const o=e.data;this.workflowsStore.addNodeExecutionData(o),this.workflowsStore.removeExecutingNode(o.nodeName)}else if(e.type==="nodeExecuteBefore"){const o=e.data;this.workflowsStore.addExecutingNode(o.nodeName)}else if(e.type==="testWebhookDeleted")e.data.workflowId===this.workflowsStore.workflowId&&(this.workflowsStore.executionWaitingForWebhook=!1,this.uiStore.removeActiveAction("workflowRunning"));else if(e.type==="testWebhookReceived"){const o=e.data;o.workflowId===this.workflowsStore.workflowId&&(this.workflowsStore.executionWaitingForWebhook=!1,this.workflowsStore.activeExecutionId=o.executionId),this.processWaitingPushMessages()}else if(e.type==="reloadNodeType")await this.nodeTypesStore.getNodeTypes(),await this.nodeTypesStore.getFullNodesProperties([e.data]);else if(e.type==="removeNodeType"){const d=[e.data];await this.credentialsStore.fetchCredentialTypes(!1).then(()=>{this.nodeTypesStore.removeNodeTypes(d)})}else e.type==="nodeDescriptionUpdated"&&(await this.nodeTypesStore.getNodeTypes(),await this.credentialsStore.fetchCredentialTypes(!0));return!0},getExecutionError(e){const r=e.resultData.error;let n;if(e.resultData.lastNodeExecuted&&r)n=r.message||r.description;else if(n=this.$locale.baseText("pushConnection.executionError",{interpolate:{error:"!"}}),r!=null&&r.message){let h;"node"in r&&(h=typeof r.node=="string"?r.node:r.node.name);const f=h?`${h}: ${r.message}`:r.message;n=this.$locale.baseText("pushConnection.executionError",{interpolate:{error:`.${this.$locale.baseText("pushConnection.executionError.details",{interpolate:{details:f}})}`}})}return n}}});export{ge as W,ve as p,Se as u};
|
|
2
|
+
//# sourceMappingURL=pushConnection-oi9TyCK6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pushConnection-Nsi8KY7W.js","sources":["../../src/api/orchestration.ts","../../src/stores/orchestration.store.ts","../../src/mixins/pushConnection.ts"],"sourcesContent":["import type { IRestApiContext } from '@/Interface';\nimport { makeRestApiRequest } from '@/utils/apiUtils';\n\nconst GET_STATUS_ENDPOINT = '/orchestration/worker/status';\n\nexport const sendGetWorkerStatus = async (context: IRestApiContext): Promise<void> => {\n\tawait makeRestApiRequest(context, 'POST', GET_STATUS_ENDPOINT);\n};\n","import { defineStore } from 'pinia';\nimport type { IPushDataWorkerStatusPayload } from '../Interface';\nimport { useRootStore } from './n8nRoot.store';\nimport { sendGetWorkerStatus } from '../api/orchestration';\n\nexport const WORKER_HISTORY_LENGTH = 100;\nconst STALE_SECONDS = 120 * 1000;\n\nexport interface IOrchestrationStoreState {\n\tinitialStatusReceived: boolean;\n\tworkers: { [id: string]: IPushDataWorkerStatusPayload };\n\tworkersHistory: {\n\t\t[id: string]: IWorkerHistoryItem[];\n\t};\n\tworkersLastUpdated: { [id: string]: number };\n\tstatusInterval: NodeJS.Timer | null;\n}\n\nexport interface IWorkerHistoryItem {\n\ttimestamp: number;\n\tdata: IPushDataWorkerStatusPayload;\n}\n\nexport const useOrchestrationStore = defineStore('orchestrationManager', {\n\tstate: (): IOrchestrationStoreState => ({\n\t\tinitialStatusReceived: false,\n\t\tworkers: {},\n\t\tworkersHistory: {},\n\t\tworkersLastUpdated: {},\n\t\tstatusInterval: null,\n\t}),\n\tactions: {\n\t\tupdateWorkerStatus(data: IPushDataWorkerStatusPayload) {\n\t\t\tthis.workers[data.workerId] = data;\n\t\t\tif (!this.workersHistory[data.workerId]) {\n\t\t\t\tthis.workersHistory[data.workerId] = [];\n\t\t\t}\n\t\t\tthis.workersHistory[data.workerId].push({ data, timestamp: Date.now() });\n\t\t\tif (this.workersHistory[data.workerId].length > WORKER_HISTORY_LENGTH) {\n\t\t\t\tthis.workersHistory[data.workerId].shift();\n\t\t\t}\n\t\t\tthis.workersLastUpdated[data.workerId] = Date.now();\n\n\t\t\tthis.initialStatusReceived = true;\n\t\t},\n\t\tremoveStaleWorkers() {\n\t\t\tfor (const id in this.workersLastUpdated) {\n\t\t\t\tif (this.workersLastUpdated[id] + STALE_SECONDS < Date.now()) {\n\t\t\t\t\tdelete this.workers[id];\n\t\t\t\t\tdelete this.workersHistory[id];\n\t\t\t\t\tdelete this.workersLastUpdated[id];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tstartWorkerStatusPolling() {\n\t\t\tconst rootStore = useRootStore();\n\t\t\tif (!this.statusInterval) {\n\t\t\t\tthis.statusInterval = setInterval(async () => {\n\t\t\t\t\tawait sendGetWorkerStatus(rootStore.getRestApiContext);\n\t\t\t\t\tthis.removeStaleWorkers();\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t},\n\t\tstopWorkerStatusPolling() {\n\t\t\tif (this.statusInterval) {\n\t\t\t\tclearInterval(this.statusInterval);\n\t\t\t\tthis.statusInterval = null;\n\t\t\t}\n\t\t},\n\t\tgetWorkerLastUpdated(workerId: string): number {\n\t\t\treturn this.workersLastUpdated[workerId] ?? 0;\n\t\t},\n\t\tgetWorkerStatus(workerId: string): IPushDataWorkerStatusPayload | undefined {\n\t\t\treturn this.workers[workerId];\n\t\t},\n\t\tgetWorkerStatusHistory(workerId: string): IWorkerHistoryItem[] {\n\t\t\treturn this.workersHistory[workerId] ?? [];\n\t\t},\n\t},\n});\n","import type {\n\tIExecutionResponse,\n\tIExecutionsCurrentSummaryExtended,\n\tIPushData,\n\tIPushDataExecutionFinished,\n} from '@/Interface';\n\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useTitleChange } from '@/composables/useTitleChange';\nimport { useToast } from '@/composables/useToast';\n\nimport type {\n\tExpressionError,\n\tIDataObject,\n\tINodeTypeNameVersion,\n\tIRun,\n\tIRunExecutionData,\n\tIWorkflowBase,\n\tSubworkflowOperationError,\n\tIExecuteContextData,\n\tNodeOperationError,\n} from 'n8n-workflow';\nimport { TelemetryHelpers } from 'n8n-workflow';\n\nimport { WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants';\nimport { getTriggerNodeServiceName } from '@/utils/nodeTypesUtils';\nimport { codeNodeEditorEventBus, globalLinkActionsEventBus } from '@/event-bus';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { parse } from 'flatted';\nimport { useSegment } from '@/stores/segment.store';\nimport { defineComponent } from 'vue';\nimport { useOrchestrationStore } from '@/stores/orchestration.store';\nimport { usePushConnectionStore } from '@/stores/pushConnection.store';\nimport { useCollaborationStore } from '@/stores/collaboration.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\n\nexport const pushConnection = defineComponent({\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\treturn {\n\t\t\t...useTitleChange(),\n\t\t\t...useToast(),\n\t\t\tnodeHelpers,\n\t\t\tworkflowHelpers,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tretryTimeout: null as NodeJS.Timeout | null,\n\t\t\tpushMessageQueue: [] as Array<{ message: IPushData; retriesLeft: number }>,\n\t\t\tremoveEventListener: null as (() => void) | null,\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.removeEventListener = this.pushStore.addEventListener((message) => {\n\t\t\tvoid this.pushMessageReceived(message);\n\t\t});\n\t},\n\tunmounted() {\n\t\tif (typeof this.removeEventListener === 'function') {\n\t\t\tthis.removeEventListener();\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseCredentialsStore,\n\t\t\tuseNodeTypesStore,\n\t\t\tuseUIStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseSettingsStore,\n\t\t\tuseSegment,\n\t\t\tuseOrchestrationStore,\n\t\t\tusePushConnectionStore,\n\t\t\tuseCollaborationStore,\n\t\t),\n\t\tsessionId(): string {\n\t\t\treturn this.rootStore.sessionId;\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Sometimes the push message is faster as the result from\n\t\t * the REST API so we do not know yet what execution ID\n\t\t * is currently active. So internally resend the message\n\t\t * a few more times\n\t\t */\n\t\tqueuePushMessage(event: IPushData, retryAttempts: number) {\n\t\t\tthis.pushMessageQueue.push({ message: event, retriesLeft: retryAttempts });\n\n\t\t\tif (this.retryTimeout === null) {\n\t\t\t\tthis.retryTimeout = setTimeout(this.processWaitingPushMessages, 20);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the push messages which are waiting in the queue\n\t\t */\n\t\tasync processWaitingPushMessages() {\n\t\t\tif (this.retryTimeout !== null) {\n\t\t\t\tclearTimeout(this.retryTimeout);\n\t\t\t\tthis.retryTimeout = null;\n\t\t\t}\n\n\t\t\tconst queueLength = this.pushMessageQueue.length;\n\t\t\tfor (let i = 0; i < queueLength; i++) {\n\t\t\t\tconst messageData = this.pushMessageQueue.shift();\n\n\t\t\t\tconst result = await this.pushMessageReceived(messageData!.message, true);\n\t\t\t\tif (!result) {\n\t\t\t\t\t// Was not successful\n\t\t\t\t\tmessageData!.retriesLeft -= 1;\n\n\t\t\t\t\tif (messageData!.retriesLeft > 0) {\n\t\t\t\t\t\t// If still retries are left add it back and stop execution\n\t\t\t\t\t\tthis.pushMessageQueue.unshift(messageData!);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.pushMessageQueue.length !== 0 && this.retryTimeout === null) {\n\t\t\t\tthis.retryTimeout = setTimeout(this.processWaitingPushMessages, 25);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process a newly received message\n\t\t */\n\t\tasync pushMessageReceived(receivedData: IPushData, isRetry?: boolean): Promise<boolean> {\n\t\t\tconst retryAttempts = 5;\n\n\t\t\tif (receivedData.type === 'sendWorkerStatusMessage') {\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tthis.orchestrationManagerStore.updateWorkerStatus(pushData.status);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'sendConsoleMessage') {\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tconsole.log(pushData.source, ...pushData.messages);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!['testWebhookReceived'].includes(receivedData.type) &&\n\t\t\t\tisRetry !== true &&\n\t\t\t\tthis.pushMessageQueue.length\n\t\t\t) {\n\t\t\t\t// If there are already messages in the queue add the new one that all of them\n\t\t\t\t// get executed in order\n\t\t\t\tthis.queuePushMessage(receivedData, retryAttempts);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'nodeExecuteAfter' || receivedData.type === 'nodeExecuteBefore') {\n\t\t\t\tif (!this.uiStore.isActionActive('workflowRunning')) {\n\t\t\t\t\t// No workflow is running so ignore the messages\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tif (this.workflowsStore.activeExecutionId !== pushData.executionId) {\n\t\t\t\t\t// The data is not for the currently active execution or\n\t\t\t\t\t// we do not have the execution id yet.\n\t\t\t\t\tif (isRetry !== true) {\n\t\t\t\t\t\tthis.queuePushMessage(event, retryAttempts);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// recovered execution data is handled like executionFinished data, however for security reasons\n\t\t\t// we need to fetch the data from the server again rather than push it to all clients\n\t\t\tlet recoveredPushData: IPushDataExecutionFinished | undefined = undefined;\n\t\t\tif (receivedData.type === 'executionRecovered') {\n\t\t\t\tconst recoveredExecutionId = receivedData.data?.executionId;\n\t\t\t\tconst isWorkflowRunning = this.uiStore.isActionActive('workflowRunning');\n\t\t\t\tif (isWorkflowRunning && this.workflowsStore.activeExecutionId === recoveredExecutionId) {\n\t\t\t\t\t// pull execution data for the recovered execution from the server\n\t\t\t\t\tconst executionData = await this.workflowsStore.fetchExecutionDataById(\n\t\t\t\t\t\tthis.workflowsStore.activeExecutionId,\n\t\t\t\t\t);\n\t\t\t\t\tif (executionData?.data) {\n\t\t\t\t\t\t// data comes in as 'flatten' object, so we need to parse it\n\t\t\t\t\t\texecutionData.data = parse(\n\t\t\t\t\t\t\texecutionData.data as unknown as string,\n\t\t\t\t\t\t) as IRunExecutionData;\n\t\t\t\t\t\tconst iRunExecutionData: IRunExecutionData = {\n\t\t\t\t\t\t\tstartData: executionData.data?.startData,\n\t\t\t\t\t\t\tresultData: executionData.data?.resultData ?? { runData: {} },\n\t\t\t\t\t\t\texecutionData: executionData.data?.executionData,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.workflowsStore.workflowExecutionData?.workflowId === executionData.workflowId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst activeRunData =\n\t\t\t\t\t\t\t\tthis.workflowsStore.workflowExecutionData?.data?.resultData?.runData;\n\t\t\t\t\t\t\tif (activeRunData) {\n\t\t\t\t\t\t\t\tfor (const key of Object.keys(activeRunData)) {\n\t\t\t\t\t\t\t\t\tiRunExecutionData.resultData.runData[key] = activeRunData[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst iRun: IRun = {\n\t\t\t\t\t\t\tdata: iRunExecutionData,\n\t\t\t\t\t\t\tfinished: executionData.finished,\n\t\t\t\t\t\t\tmode: executionData.mode,\n\t\t\t\t\t\t\twaitTill: executionData.data?.waitTill,\n\t\t\t\t\t\t\tstartedAt: executionData.startedAt,\n\t\t\t\t\t\t\tstoppedAt: executionData.stoppedAt,\n\t\t\t\t\t\t\tstatus: 'crashed',\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (executionData.data) {\n\t\t\t\t\t\t\trecoveredPushData = {\n\t\t\t\t\t\t\t\texecutionId: executionData.id,\n\t\t\t\t\t\t\t\tdata: iRun,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\treceivedData.type === 'workflowFailedToActivate' &&\n\t\t\t\tthis.workflowsStore.workflowId === receivedData.data.workflowId\n\t\t\t) {\n\t\t\t\tthis.workflowsStore.setWorkflowInactive(receivedData.data.workflowId);\n\t\t\t\tthis.workflowsStore.setActive(false);\n\n\t\t\t\tthis.showError(\n\t\t\t\t\tnew Error(receivedData.data.errorMessage),\n\t\t\t\t\tthis.$locale.baseText('workflowActivator.showError.title', {\n\t\t\t\t\t\tinterpolate: { newStateName: 'activated' },\n\t\t\t\t\t}) + ':',\n\t\t\t\t);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'workflowActivated') {\n\t\t\t\tthis.workflowsStore.setWorkflowActive(receivedData.data.workflowId);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'workflowDeactivated') {\n\t\t\t\tthis.workflowsStore.setWorkflowInactive(receivedData.data.workflowId);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'executionFinished' || receivedData.type === 'executionRecovered') {\n\t\t\t\t// The workflow finished executing\n\t\t\t\tlet pushData: IPushDataExecutionFinished;\n\t\t\t\tif (receivedData.type === 'executionRecovered' && recoveredPushData !== undefined) {\n\t\t\t\t\tpushData = recoveredPushData;\n\t\t\t\t} else {\n\t\t\t\t\tpushData = receivedData.data as IPushDataExecutionFinished;\n\t\t\t\t}\n\n\t\t\t\tconst { activeExecutionId } = this.workflowsStore;\n\t\t\t\tif (activeExecutionId === pushData.executionId) {\n\t\t\t\t\tconst activeRunData =\n\t\t\t\t\t\tthis.workflowsStore.workflowExecutionData?.data?.resultData?.runData;\n\t\t\t\t\tif (activeRunData) {\n\t\t\t\t\t\tfor (const key of Object.keys(activeRunData)) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tpushData.data.data.resultData.runData[key]?.[0]?.data?.main?.[0]?.[0]?.json\n\t\t\t\t\t\t\t\t\t?.isArtificialRecoveredEventItem === true &&\n\t\t\t\t\t\t\t\tactiveRunData[key].length > 0\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tpushData.data.data.resultData.runData[key] = activeRunData[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.workflowsStore.finishActiveExecution(pushData);\n\t\t\t\t}\n\n\t\t\t\tif (!this.uiStore.isActionActive('workflowRunning')) {\n\t\t\t\t\t// No workflow is running so ignore the messages\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (activeExecutionId !== pushData.executionId) {\n\t\t\t\t\t// The workflow which did finish execution did either not get started\n\t\t\t\t\t// by this session or we do not have the execution id yet.\n\t\t\t\t\tif (isRetry !== true) {\n\t\t\t\t\t\tthis.queuePushMessage(event, retryAttempts);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst runDataExecuted = pushData.data;\n\n\t\t\t\tlet runDataExecutedErrorMessage = this.getExecutionError(runDataExecuted.data);\n\n\t\t\t\tif (runDataExecuted.status === 'crashed') {\n\t\t\t\t\trunDataExecutedErrorMessage = this.$locale.baseText(\n\t\t\t\t\t\t'pushConnection.executionFailed.message',\n\t\t\t\t\t);\n\t\t\t\t} else if (runDataExecuted.status === 'canceled') {\n\t\t\t\t\trunDataExecutedErrorMessage = this.$locale.baseText(\n\t\t\t\t\t\t'executionsList.showMessage.stopExecution.message',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinterpolate: { activeExecutionId },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst lineNumber = runDataExecuted?.data?.resultData?.error?.lineNumber;\n\n\t\t\t\tcodeNodeEditorEventBus.emit('error-line-number', lineNumber || 'final');\n\n\t\t\t\tconst workflow = this.workflowHelpers.getCurrentWorkflow();\n\t\t\t\tif (runDataExecuted.waitTill !== undefined) {\n\t\t\t\t\tconst workflowSettings = this.workflowsStore.workflowSettings;\n\t\t\t\t\tconst saveManualExecutions = this.rootStore.saveManualExecutions;\n\n\t\t\t\t\tconst isSavingExecutions =\n\t\t\t\t\t\tworkflowSettings.saveManualExecutions === undefined\n\t\t\t\t\t\t\t? saveManualExecutions\n\t\t\t\t\t\t\t: workflowSettings.saveManualExecutions;\n\n\t\t\t\t\tlet action;\n\t\t\t\t\tif (!isSavingExecutions) {\n\t\t\t\t\t\tglobalLinkActionsEventBus.emit('registerGlobalLinkAction', {\n\t\t\t\t\t\t\tkey: 'open-settings',\n\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\tif (this.workflowsStore.isNewWorkflow)\n\t\t\t\t\t\t\t\t\tawait this.workflowHelpers.saveAsNewWorkflow();\n\t\t\t\t\t\t\t\tthis.uiStore.openModal(WORKFLOW_SETTINGS_MODAL_KEY);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\taction =\n\t\t\t\t\t\t\t'<a data-action=\"open-settings\">Turn on saving manual executions</a> and run again to see what happened after this node.';\n\t\t\t\t\t} else {\n\t\t\t\t\t\taction = `<a href=\"/workflow/${workflow.id}/executions/${activeExecutionId}\">View the execution</a> to see what happened after this node.`;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workflow did start but had been put to wait\n\t\t\t\t\tthis.titleSet(workflow.name as string, 'IDLE');\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: 'Workflow started waiting',\n\t\t\t\t\t\tmessage: `${action} <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/\" target=\"_blank\">More info</a>`,\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t});\n\t\t\t\t} else if (runDataExecuted.finished !== true) {\n\t\t\t\t\tthis.titleSet(workflow.name as string, 'ERROR');\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trunDataExecuted.data.resultData.error?.name === 'ExpressionError' &&\n\t\t\t\t\t\t(runDataExecuted.data.resultData.error as ExpressionError).context.functionality ===\n\t\t\t\t\t\t\t'pairedItem'\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst error = runDataExecuted.data.resultData.error as ExpressionError;\n\n\t\t\t\t\t\tvoid this.workflowHelpers.getWorkflowDataToSave().then((workflowData) => {\n\t\t\t\t\t\t\tconst eventData: IDataObject = {\n\t\t\t\t\t\t\t\tcaused_by_credential: false,\n\t\t\t\t\t\t\t\terror_message: error.description,\n\t\t\t\t\t\t\t\terror_title: error.message,\n\t\t\t\t\t\t\t\terror_type: error.context.type,\n\t\t\t\t\t\t\t\tnode_graph_string: JSON.stringify(\n\t\t\t\t\t\t\t\t\tTelemetryHelpers.generateNodesGraph(\n\t\t\t\t\t\t\t\t\t\tworkflowData as IWorkflowBase,\n\t\t\t\t\t\t\t\t\t\tthis.workflowHelpers.getNodeTypes(),\n\t\t\t\t\t\t\t\t\t).nodeGraph,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\terror.context.nodeCause &&\n\t\t\t\t\t\t\t\t['paired_item_no_info', 'paired_item_invalid_info'].includes(\n\t\t\t\t\t\t\t\t\terror.context.type as string,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst node = workflow.getNode(error.context.nodeCause as string);\n\n\t\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\t\teventData.is_pinned = !!workflow.getPinDataOfNode(node.name);\n\t\t\t\t\t\t\t\t\teventData.mode = node.parameters.mode;\n\t\t\t\t\t\t\t\t\teventData.node_type = node.type;\n\t\t\t\t\t\t\t\t\teventData.operation = node.parameters.operation;\n\t\t\t\t\t\t\t\t\teventData.resource = node.parameters.resource;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.$telemetry.track('Instance FE emitted paired item error', eventData, {\n\t\t\t\t\t\t\t\twithPostHog: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (runDataExecuted.data.resultData.error?.name === 'SubworkflowOperationError') {\n\t\t\t\t\t\tconst error = runDataExecuted.data.resultData.error as SubworkflowOperationError;\n\n\t\t\t\t\t\tthis.workflowsStore.subWorkflowExecutionError = error;\n\n\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\ttitle: error.message,\n\t\t\t\t\t\t\tmessage: error.description,\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (\n\t\t\t\t\t\trunDataExecuted.data.resultData.error?.name === 'NodeOperationError' &&\n\t\t\t\t\t\t(runDataExecuted.data.resultData.error as NodeOperationError).functionality ===\n\t\t\t\t\t\t\t'configuration-node'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// If the error is a configuration error of the node itself doesn't get executed so we can't use lastNodeExecuted for the title\n\t\t\t\t\t\tlet title: string;\n\t\t\t\t\t\tconst nodeError = runDataExecuted.data.resultData.error as NodeOperationError;\n\t\t\t\t\t\tif (nodeError.node.name) {\n\t\t\t\t\t\t\ttitle = `Error in sub-node ‘${nodeError.node.name}‘`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttitle = 'Problem executing workflow';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t(nodeError?.description ?? runDataExecutedErrorMessage) +\n\t\t\t\t\t\t\t\tthis.$locale.baseText('pushConnection.executionError.openNode', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tnode: nodeError.node.name,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet title: string;\n\t\t\t\t\t\tconst isManualExecutionCancelled =\n\t\t\t\t\t\t\trunDataExecuted.mode === 'manual' && runDataExecuted.status === 'canceled';\n\n\t\t\t\t\t\t// Do not show the error message if the workflow got canceled manually\n\t\t\t\t\t\tif (isManualExecutionCancelled) {\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle: this.$locale.baseText('nodeView.showMessage.stopExecutionTry.title'),\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (runDataExecuted.data.resultData.lastNodeExecuted) {\n\t\t\t\t\t\t\t\ttitle = `Problem in node ‘${runDataExecuted.data.resultData.lastNodeExecuted}‘`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttitle = 'Problem executing workflow';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tmessage: runDataExecutedErrorMessage,\n\t\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Workflow did execute without a problem\n\t\t\t\t\tthis.titleSet(workflow.name as string, 'IDLE');\n\n\t\t\t\t\tconst execution = this.workflowsStore.getWorkflowExecution;\n\t\t\t\t\tif (execution?.executedNode) {\n\t\t\t\t\t\tconst node = this.workflowsStore.getNodeByName(execution.executedNode);\n\t\t\t\t\t\tconst nodeType = node && this.nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\t\t\t\t\t\tconst nodeOutput =\n\t\t\t\t\t\t\texecution &&\n\t\t\t\t\t\t\texecution.executedNode &&\n\t\t\t\t\t\t\texecution.data?.resultData?.runData?.[execution.executedNode];\n\t\t\t\t\t\tif (nodeType?.polling && !nodeOutput) {\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle: this.$locale.baseText('pushConnection.pollingNode.dataNotFound', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tservice: getTriggerNodeServiceName(nodeType),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tmessage: this.$locale.baseText('pushConnection.pollingNode.dataNotFound.message', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tservice: getTriggerNodeServiceName(nodeType),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle: this.$locale.baseText('pushConnection.nodeExecutedSuccessfully'),\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\ttitle: this.$locale.baseText('pushConnection.workflowExecutedSuccessfully'),\n\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// It does not push the runData as it got already pushed with each\n\t\t\t\t// node that did finish. For that reason copy in here the data\n\t\t\t\t// which we already have.\n\t\t\t\tif (this.workflowsStore.getWorkflowRunData) {\n\t\t\t\t\trunDataExecuted.data.resultData.runData = this.workflowsStore.getWorkflowRunData;\n\t\t\t\t}\n\n\t\t\t\tthis.workflowsStore.executingNode.length = 0;\n\t\t\t\tthis.workflowsStore.setWorkflowExecutionData(runDataExecuted as IExecutionResponse);\n\t\t\t\tthis.uiStore.removeActiveAction('workflowRunning');\n\n\t\t\t\t// Set the node execution issues on all the nodes which produced an error so that\n\t\t\t\t// it can be displayed in the node-view\n\t\t\t\tthis.nodeHelpers.updateNodesExecutionIssues();\n\n\t\t\t\tconst lastNodeExecuted: string | undefined =\n\t\t\t\t\trunDataExecuted.data.resultData.lastNodeExecuted;\n\t\t\t\tlet itemsCount = 0;\n\t\t\t\tif (\n\t\t\t\t\tlastNodeExecuted &&\n\t\t\t\t\trunDataExecuted.data.resultData.runData[lastNodeExecuted] &&\n\t\t\t\t\t!runDataExecutedErrorMessage\n\t\t\t\t) {\n\t\t\t\t\titemsCount =\n\t\t\t\t\t\trunDataExecuted.data.resultData.runData[lastNodeExecuted][0].data!.main[0]!.length;\n\t\t\t\t}\n\n\t\t\t\tvoid useExternalHooks().run('pushConnection.executionFinished', {\n\t\t\t\t\titemsCount,\n\t\t\t\t\tnodeName: runDataExecuted.data.resultData.lastNodeExecuted,\n\t\t\t\t\terrorMessage: runDataExecutedErrorMessage,\n\t\t\t\t\trunDataExecutedStartData: runDataExecuted.data.startData,\n\t\t\t\t\tresultDataError: runDataExecuted.data.resultData.error,\n\t\t\t\t});\n\t\t\t\tif (!runDataExecuted.data.resultData.error) {\n\t\t\t\t\tthis.segmentStore.trackSuccessfulWorkflowExecution(runDataExecuted);\n\t\t\t\t}\n\t\t\t} else if (receivedData.type === 'executionStarted') {\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tconst executionData: IExecutionsCurrentSummaryExtended = {\n\t\t\t\t\tid: pushData.executionId,\n\t\t\t\t\tfinished: false,\n\t\t\t\t\tmode: pushData.mode,\n\t\t\t\t\tstartedAt: pushData.startedAt,\n\t\t\t\t\tretryOf: pushData.retryOf,\n\t\t\t\t\tworkflowId: pushData.workflowId,\n\t\t\t\t\tworkflowName: pushData.workflowName,\n\t\t\t\t};\n\n\t\t\t\tthis.workflowsStore.addActiveExecution(executionData);\n\t\t\t} else if (receivedData.type === 'nodeExecuteAfter') {\n\t\t\t\t// A node finished to execute. Add its data\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tthis.workflowsStore.addNodeExecutionData(pushData);\n\t\t\t\tthis.workflowsStore.removeExecutingNode(pushData.nodeName);\n\t\t\t} else if (receivedData.type === 'nodeExecuteBefore') {\n\t\t\t\t// A node started to be executed. Set it as executing.\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tthis.workflowsStore.addExecutingNode(pushData.nodeName);\n\t\t\t} else if (receivedData.type === 'testWebhookDeleted') {\n\t\t\t\t// A test-webhook was deleted\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tif (pushData.workflowId === this.workflowsStore.workflowId) {\n\t\t\t\t\tthis.workflowsStore.executionWaitingForWebhook = false;\n\t\t\t\t\tthis.uiStore.removeActiveAction('workflowRunning');\n\t\t\t\t}\n\t\t\t} else if (receivedData.type === 'testWebhookReceived') {\n\t\t\t\t// A test-webhook did get called\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tif (pushData.workflowId === this.workflowsStore.workflowId) {\n\t\t\t\t\tthis.workflowsStore.executionWaitingForWebhook = false;\n\t\t\t\t\tthis.workflowsStore.activeExecutionId = pushData.executionId;\n\t\t\t\t}\n\n\t\t\t\tvoid this.processWaitingPushMessages();\n\t\t\t} else if (receivedData.type === 'reloadNodeType') {\n\t\t\t\tawait this.nodeTypesStore.getNodeTypes();\n\t\t\t\tawait this.nodeTypesStore.getFullNodesProperties([receivedData.data]);\n\t\t\t} else if (receivedData.type === 'removeNodeType') {\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tconst nodesToBeRemoved: INodeTypeNameVersion[] = [pushData];\n\n\t\t\t\t// Force reload of all credential types\n\t\t\t\tawait this.credentialsStore.fetchCredentialTypes(false).then(() => {\n\t\t\t\t\tthis.nodeTypesStore.removeNodeTypes(nodesToBeRemoved);\n\t\t\t\t});\n\t\t\t} else if (receivedData.type === 'nodeDescriptionUpdated') {\n\t\t\t\tawait this.nodeTypesStore.getNodeTypes();\n\t\t\t\tawait this.credentialsStore.fetchCredentialTypes(true);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tgetExecutionError(data: IRunExecutionData | IExecuteContextData) {\n\t\t\tconst error = data.resultData.error;\n\n\t\t\tlet errorMessage: string;\n\n\t\t\tif (data.resultData.lastNodeExecuted && error) {\n\t\t\t\terrorMessage = error.message || error.description;\n\t\t\t} else {\n\t\t\t\terrorMessage = this.$locale.baseText('pushConnection.executionError', {\n\t\t\t\t\tinterpolate: { error: '!' },\n\t\t\t\t});\n\n\t\t\t\tif (error?.message) {\n\t\t\t\t\tlet nodeName: string | undefined;\n\t\t\t\t\tif ('node' in error) {\n\t\t\t\t\t\tnodeName = typeof error.node === 'string' ? error.node : error.node!.name;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receivedError = nodeName ? `${nodeName}: ${error.message}` : error.message;\n\t\t\t\t\terrorMessage = this.$locale.baseText('pushConnection.executionError', {\n\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\terror: `.${this.$locale.baseText('pushConnection.executionError.details', {\n\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\tdetails: receivedError,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errorMessage;\n\t\t},\n\t},\n});\n"],"names":["GET_STATUS_ENDPOINT","sendGetWorkerStatus","context","makeRestApiRequest","WORKER_HISTORY_LENGTH","STALE_SECONDS","useOrchestrationStore","defineStore","data","id","rootStore","useRootStore","workerId","pushConnection","defineComponent","router","useRouter","workflowHelpers","useWorkflowHelpers","nodeHelpers","useNodeHelpers","useTitleChange","useToast","message","mapStores","useCredentialsStore","useNodeTypesStore","useUIStore","useWorkflowsStore","useSettingsStore","useSegment","usePushConnectionStore","useCollaborationStore","event","retryAttempts","queueLength","i","messageData","receivedData","isRetry","pushData","recoveredPushData","recoveredExecutionId","_a","executionData","parse","iRunExecutionData","_b","_c","_d","_e","activeRunData","_h","_g","_f","key","iRun","_i","activeExecutionId","_l","_k","_j","_s","_r","_q","_p","_o","_n","_m","runDataExecuted","runDataExecutedErrorMessage","lineNumber","_v","_u","_t","codeNodeEditorEventBus","workflow","workflowSettings","saveManualExecutions","isSavingExecutions","action","globalLinkActionsEventBus","WORKFLOW_SETTINGS_MODAL_KEY","_w","error","workflowData","eventData","TelemetryHelpers.generateNodesGraph","node","_x","_y","title","nodeError","execution","nodeType","nodeOutput","_B","_A","_z","getTriggerNodeServiceName","lastNodeExecuted","itemsCount","useExternalHooks","nodesToBeRemoved","errorMessage","nodeName","receivedError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pushConnection-oi9TyCK6.js","sources":["../../src/api/orchestration.ts","../../src/stores/orchestration.store.ts","../../src/mixins/pushConnection.ts"],"sourcesContent":["import type { IRestApiContext } from '@/Interface';\nimport { makeRestApiRequest } from '@/utils/apiUtils';\n\nconst GET_STATUS_ENDPOINT = '/orchestration/worker/status';\n\nexport const sendGetWorkerStatus = async (context: IRestApiContext): Promise<void> => {\n\tawait makeRestApiRequest(context, 'POST', GET_STATUS_ENDPOINT);\n};\n","import { defineStore } from 'pinia';\nimport type { IPushDataWorkerStatusPayload } from '../Interface';\nimport { useRootStore } from './n8nRoot.store';\nimport { sendGetWorkerStatus } from '../api/orchestration';\n\nexport const WORKER_HISTORY_LENGTH = 100;\nconst STALE_SECONDS = 120 * 1000;\n\nexport interface IOrchestrationStoreState {\n\tinitialStatusReceived: boolean;\n\tworkers: { [id: string]: IPushDataWorkerStatusPayload };\n\tworkersHistory: {\n\t\t[id: string]: IWorkerHistoryItem[];\n\t};\n\tworkersLastUpdated: { [id: string]: number };\n\tstatusInterval: NodeJS.Timer | null;\n}\n\nexport interface IWorkerHistoryItem {\n\ttimestamp: number;\n\tdata: IPushDataWorkerStatusPayload;\n}\n\nexport const useOrchestrationStore = defineStore('orchestrationManager', {\n\tstate: (): IOrchestrationStoreState => ({\n\t\tinitialStatusReceived: false,\n\t\tworkers: {},\n\t\tworkersHistory: {},\n\t\tworkersLastUpdated: {},\n\t\tstatusInterval: null,\n\t}),\n\tactions: {\n\t\tupdateWorkerStatus(data: IPushDataWorkerStatusPayload) {\n\t\t\tthis.workers[data.workerId] = data;\n\t\t\tif (!this.workersHistory[data.workerId]) {\n\t\t\t\tthis.workersHistory[data.workerId] = [];\n\t\t\t}\n\t\t\tthis.workersHistory[data.workerId].push({ data, timestamp: Date.now() });\n\t\t\tif (this.workersHistory[data.workerId].length > WORKER_HISTORY_LENGTH) {\n\t\t\t\tthis.workersHistory[data.workerId].shift();\n\t\t\t}\n\t\t\tthis.workersLastUpdated[data.workerId] = Date.now();\n\n\t\t\tthis.initialStatusReceived = true;\n\t\t},\n\t\tremoveStaleWorkers() {\n\t\t\tfor (const id in this.workersLastUpdated) {\n\t\t\t\tif (this.workersLastUpdated[id] + STALE_SECONDS < Date.now()) {\n\t\t\t\t\tdelete this.workers[id];\n\t\t\t\t\tdelete this.workersHistory[id];\n\t\t\t\t\tdelete this.workersLastUpdated[id];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tstartWorkerStatusPolling() {\n\t\t\tconst rootStore = useRootStore();\n\t\t\tif (!this.statusInterval) {\n\t\t\t\tthis.statusInterval = setInterval(async () => {\n\t\t\t\t\tawait sendGetWorkerStatus(rootStore.getRestApiContext);\n\t\t\t\t\tthis.removeStaleWorkers();\n\t\t\t\t}, 1000);\n\t\t\t}\n\t\t},\n\t\tstopWorkerStatusPolling() {\n\t\t\tif (this.statusInterval) {\n\t\t\t\tclearInterval(this.statusInterval);\n\t\t\t\tthis.statusInterval = null;\n\t\t\t}\n\t\t},\n\t\tgetWorkerLastUpdated(workerId: string): number {\n\t\t\treturn this.workersLastUpdated[workerId] ?? 0;\n\t\t},\n\t\tgetWorkerStatus(workerId: string): IPushDataWorkerStatusPayload | undefined {\n\t\t\treturn this.workers[workerId];\n\t\t},\n\t\tgetWorkerStatusHistory(workerId: string): IWorkerHistoryItem[] {\n\t\t\treturn this.workersHistory[workerId] ?? [];\n\t\t},\n\t},\n});\n","import type {\n\tIExecutionResponse,\n\tIExecutionsCurrentSummaryExtended,\n\tIPushData,\n\tIPushDataExecutionFinished,\n} from '@/Interface';\n\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useTitleChange } from '@/composables/useTitleChange';\nimport { useToast } from '@/composables/useToast';\n\nimport type {\n\tExpressionError,\n\tIDataObject,\n\tINodeTypeNameVersion,\n\tIRun,\n\tIRunExecutionData,\n\tIWorkflowBase,\n\tSubworkflowOperationError,\n\tIExecuteContextData,\n\tNodeOperationError,\n} from 'n8n-workflow';\nimport { TelemetryHelpers } from 'n8n-workflow';\n\nimport { WORKFLOW_SETTINGS_MODAL_KEY } from '@/constants';\nimport { getTriggerNodeServiceName } from '@/utils/nodeTypesUtils';\nimport { codeNodeEditorEventBus, globalLinkActionsEventBus } from '@/event-bus';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { parse } from 'flatted';\nimport { useSegment } from '@/stores/segment.store';\nimport { defineComponent } from 'vue';\nimport { useOrchestrationStore } from '@/stores/orchestration.store';\nimport { usePushConnectionStore } from '@/stores/pushConnection.store';\nimport { useCollaborationStore } from '@/stores/collaboration.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\n\nexport const pushConnection = defineComponent({\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\treturn {\n\t\t\t...useTitleChange(),\n\t\t\t...useToast(),\n\t\t\tnodeHelpers,\n\t\t\tworkflowHelpers,\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tretryTimeout: null as NodeJS.Timeout | null,\n\t\t\tpushMessageQueue: [] as Array<{ message: IPushData; retriesLeft: number }>,\n\t\t\tremoveEventListener: null as (() => void) | null,\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.removeEventListener = this.pushStore.addEventListener((message) => {\n\t\t\tvoid this.pushMessageReceived(message);\n\t\t});\n\t},\n\tunmounted() {\n\t\tif (typeof this.removeEventListener === 'function') {\n\t\t\tthis.removeEventListener();\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseCredentialsStore,\n\t\t\tuseNodeTypesStore,\n\t\t\tuseUIStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseSettingsStore,\n\t\t\tuseSegment,\n\t\t\tuseOrchestrationStore,\n\t\t\tusePushConnectionStore,\n\t\t\tuseCollaborationStore,\n\t\t),\n\t\tsessionId(): string {\n\t\t\treturn this.rootStore.sessionId;\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Sometimes the push message is faster as the result from\n\t\t * the REST API so we do not know yet what execution ID\n\t\t * is currently active. So internally resend the message\n\t\t * a few more times\n\t\t */\n\t\tqueuePushMessage(event: IPushData, retryAttempts: number) {\n\t\t\tthis.pushMessageQueue.push({ message: event, retriesLeft: retryAttempts });\n\n\t\t\tif (this.retryTimeout === null) {\n\t\t\t\tthis.retryTimeout = setTimeout(this.processWaitingPushMessages, 20);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the push messages which are waiting in the queue\n\t\t */\n\t\tasync processWaitingPushMessages() {\n\t\t\tif (this.retryTimeout !== null) {\n\t\t\t\tclearTimeout(this.retryTimeout);\n\t\t\t\tthis.retryTimeout = null;\n\t\t\t}\n\n\t\t\tconst queueLength = this.pushMessageQueue.length;\n\t\t\tfor (let i = 0; i < queueLength; i++) {\n\t\t\t\tconst messageData = this.pushMessageQueue.shift();\n\n\t\t\t\tconst result = await this.pushMessageReceived(messageData!.message, true);\n\t\t\t\tif (!result) {\n\t\t\t\t\t// Was not successful\n\t\t\t\t\tmessageData!.retriesLeft -= 1;\n\n\t\t\t\t\tif (messageData!.retriesLeft > 0) {\n\t\t\t\t\t\t// If still retries are left add it back and stop execution\n\t\t\t\t\t\tthis.pushMessageQueue.unshift(messageData!);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.pushMessageQueue.length !== 0 && this.retryTimeout === null) {\n\t\t\t\tthis.retryTimeout = setTimeout(this.processWaitingPushMessages, 25);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process a newly received message\n\t\t */\n\t\tasync pushMessageReceived(receivedData: IPushData, isRetry?: boolean): Promise<boolean> {\n\t\t\tconst retryAttempts = 5;\n\n\t\t\tif (receivedData.type === 'sendWorkerStatusMessage') {\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tthis.orchestrationManagerStore.updateWorkerStatus(pushData.status);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'sendConsoleMessage') {\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tconsole.log(pushData.source, ...pushData.messages);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!['testWebhookReceived'].includes(receivedData.type) &&\n\t\t\t\tisRetry !== true &&\n\t\t\t\tthis.pushMessageQueue.length\n\t\t\t) {\n\t\t\t\t// If there are already messages in the queue add the new one that all of them\n\t\t\t\t// get executed in order\n\t\t\t\tthis.queuePushMessage(receivedData, retryAttempts);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'nodeExecuteAfter' || receivedData.type === 'nodeExecuteBefore') {\n\t\t\t\tif (!this.uiStore.isActionActive('workflowRunning')) {\n\t\t\t\t\t// No workflow is running so ignore the messages\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tif (this.workflowsStore.activeExecutionId !== pushData.executionId) {\n\t\t\t\t\t// The data is not for the currently active execution or\n\t\t\t\t\t// we do not have the execution id yet.\n\t\t\t\t\tif (isRetry !== true) {\n\t\t\t\t\t\tthis.queuePushMessage(event, retryAttempts);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// recovered execution data is handled like executionFinished data, however for security reasons\n\t\t\t// we need to fetch the data from the server again rather than push it to all clients\n\t\t\tlet recoveredPushData: IPushDataExecutionFinished | undefined = undefined;\n\t\t\tif (receivedData.type === 'executionRecovered') {\n\t\t\t\tconst recoveredExecutionId = receivedData.data?.executionId;\n\t\t\t\tconst isWorkflowRunning = this.uiStore.isActionActive('workflowRunning');\n\t\t\t\tif (isWorkflowRunning && this.workflowsStore.activeExecutionId === recoveredExecutionId) {\n\t\t\t\t\t// pull execution data for the recovered execution from the server\n\t\t\t\t\tconst executionData = await this.workflowsStore.fetchExecutionDataById(\n\t\t\t\t\t\tthis.workflowsStore.activeExecutionId,\n\t\t\t\t\t);\n\t\t\t\t\tif (executionData?.data) {\n\t\t\t\t\t\t// data comes in as 'flatten' object, so we need to parse it\n\t\t\t\t\t\texecutionData.data = parse(\n\t\t\t\t\t\t\texecutionData.data as unknown as string,\n\t\t\t\t\t\t) as IRunExecutionData;\n\t\t\t\t\t\tconst iRunExecutionData: IRunExecutionData = {\n\t\t\t\t\t\t\tstartData: executionData.data?.startData,\n\t\t\t\t\t\t\tresultData: executionData.data?.resultData ?? { runData: {} },\n\t\t\t\t\t\t\texecutionData: executionData.data?.executionData,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tthis.workflowsStore.workflowExecutionData?.workflowId === executionData.workflowId\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst activeRunData =\n\t\t\t\t\t\t\t\tthis.workflowsStore.workflowExecutionData?.data?.resultData?.runData;\n\t\t\t\t\t\t\tif (activeRunData) {\n\t\t\t\t\t\t\t\tfor (const key of Object.keys(activeRunData)) {\n\t\t\t\t\t\t\t\t\tiRunExecutionData.resultData.runData[key] = activeRunData[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst iRun: IRun = {\n\t\t\t\t\t\t\tdata: iRunExecutionData,\n\t\t\t\t\t\t\tfinished: executionData.finished,\n\t\t\t\t\t\t\tmode: executionData.mode,\n\t\t\t\t\t\t\twaitTill: executionData.data?.waitTill,\n\t\t\t\t\t\t\tstartedAt: executionData.startedAt,\n\t\t\t\t\t\t\tstoppedAt: executionData.stoppedAt,\n\t\t\t\t\t\t\tstatus: 'crashed',\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (executionData.data) {\n\t\t\t\t\t\t\trecoveredPushData = {\n\t\t\t\t\t\t\t\texecutionId: executionData.id,\n\t\t\t\t\t\t\t\tdata: iRun,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\treceivedData.type === 'workflowFailedToActivate' &&\n\t\t\t\tthis.workflowsStore.workflowId === receivedData.data.workflowId\n\t\t\t) {\n\t\t\t\tthis.workflowsStore.setWorkflowInactive(receivedData.data.workflowId);\n\t\t\t\tthis.workflowsStore.setActive(false);\n\n\t\t\t\tthis.showError(\n\t\t\t\t\tnew Error(receivedData.data.errorMessage),\n\t\t\t\t\tthis.$locale.baseText('workflowActivator.showError.title', {\n\t\t\t\t\t\tinterpolate: { newStateName: 'activated' },\n\t\t\t\t\t}) + ':',\n\t\t\t\t);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'workflowActivated') {\n\t\t\t\tthis.workflowsStore.setWorkflowActive(receivedData.data.workflowId);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'workflowDeactivated') {\n\t\t\t\tthis.workflowsStore.setWorkflowInactive(receivedData.data.workflowId);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (receivedData.type === 'executionFinished' || receivedData.type === 'executionRecovered') {\n\t\t\t\t// The workflow finished executing\n\t\t\t\tlet pushData: IPushDataExecutionFinished;\n\t\t\t\tif (receivedData.type === 'executionRecovered' && recoveredPushData !== undefined) {\n\t\t\t\t\tpushData = recoveredPushData;\n\t\t\t\t} else {\n\t\t\t\t\tpushData = receivedData.data as IPushDataExecutionFinished;\n\t\t\t\t}\n\n\t\t\t\tconst { activeExecutionId } = this.workflowsStore;\n\t\t\t\tif (activeExecutionId === pushData.executionId) {\n\t\t\t\t\tconst activeRunData =\n\t\t\t\t\t\tthis.workflowsStore.workflowExecutionData?.data?.resultData?.runData;\n\t\t\t\t\tif (activeRunData) {\n\t\t\t\t\t\tfor (const key of Object.keys(activeRunData)) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tpushData.data.data.resultData.runData[key]?.[0]?.data?.main?.[0]?.[0]?.json\n\t\t\t\t\t\t\t\t\t?.isArtificialRecoveredEventItem === true &&\n\t\t\t\t\t\t\t\tactiveRunData[key].length > 0\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tpushData.data.data.resultData.runData[key] = activeRunData[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.workflowsStore.finishActiveExecution(pushData);\n\t\t\t\t}\n\n\t\t\t\tif (!this.uiStore.isActionActive('workflowRunning')) {\n\t\t\t\t\t// No workflow is running so ignore the messages\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (activeExecutionId !== pushData.executionId) {\n\t\t\t\t\t// The workflow which did finish execution did either not get started\n\t\t\t\t\t// by this session or we do not have the execution id yet.\n\t\t\t\t\tif (isRetry !== true) {\n\t\t\t\t\t\tthis.queuePushMessage(event, retryAttempts);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst runDataExecuted = pushData.data;\n\n\t\t\t\tlet runDataExecutedErrorMessage = this.getExecutionError(runDataExecuted.data);\n\n\t\t\t\tif (runDataExecuted.status === 'crashed') {\n\t\t\t\t\trunDataExecutedErrorMessage = this.$locale.baseText(\n\t\t\t\t\t\t'pushConnection.executionFailed.message',\n\t\t\t\t\t);\n\t\t\t\t} else if (runDataExecuted.status === 'canceled') {\n\t\t\t\t\trunDataExecutedErrorMessage = this.$locale.baseText(\n\t\t\t\t\t\t'executionsList.showMessage.stopExecution.message',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinterpolate: { activeExecutionId },\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst lineNumber = runDataExecuted?.data?.resultData?.error?.lineNumber;\n\n\t\t\t\tcodeNodeEditorEventBus.emit('error-line-number', lineNumber || 'final');\n\n\t\t\t\tconst workflow = this.workflowHelpers.getCurrentWorkflow();\n\t\t\t\tif (runDataExecuted.waitTill !== undefined) {\n\t\t\t\t\tconst workflowSettings = this.workflowsStore.workflowSettings;\n\t\t\t\t\tconst saveManualExecutions = this.rootStore.saveManualExecutions;\n\n\t\t\t\t\tconst isSavingExecutions =\n\t\t\t\t\t\tworkflowSettings.saveManualExecutions === undefined\n\t\t\t\t\t\t\t? saveManualExecutions\n\t\t\t\t\t\t\t: workflowSettings.saveManualExecutions;\n\n\t\t\t\t\tlet action;\n\t\t\t\t\tif (!isSavingExecutions) {\n\t\t\t\t\t\tglobalLinkActionsEventBus.emit('registerGlobalLinkAction', {\n\t\t\t\t\t\t\tkey: 'open-settings',\n\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\tif (this.workflowsStore.isNewWorkflow)\n\t\t\t\t\t\t\t\t\tawait this.workflowHelpers.saveAsNewWorkflow();\n\t\t\t\t\t\t\t\tthis.uiStore.openModal(WORKFLOW_SETTINGS_MODAL_KEY);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\taction =\n\t\t\t\t\t\t\t'<a data-action=\"open-settings\">Turn on saving manual executions</a> and run again to see what happened after this node.';\n\t\t\t\t\t} else {\n\t\t\t\t\t\taction = `<a href=\"/workflow/${workflow.id}/executions/${activeExecutionId}\">View the execution</a> to see what happened after this node.`;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workflow did start but had been put to wait\n\t\t\t\t\tthis.titleSet(workflow.name as string, 'IDLE');\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: 'Workflow started waiting',\n\t\t\t\t\t\tmessage: `${action} <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/\" target=\"_blank\">More info</a>`,\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t});\n\t\t\t\t} else if (runDataExecuted.finished !== true) {\n\t\t\t\t\tthis.titleSet(workflow.name as string, 'ERROR');\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trunDataExecuted.data.resultData.error?.name === 'ExpressionError' &&\n\t\t\t\t\t\t(runDataExecuted.data.resultData.error as ExpressionError).context.functionality ===\n\t\t\t\t\t\t\t'pairedItem'\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst error = runDataExecuted.data.resultData.error as ExpressionError;\n\n\t\t\t\t\t\tvoid this.workflowHelpers.getWorkflowDataToSave().then((workflowData) => {\n\t\t\t\t\t\t\tconst eventData: IDataObject = {\n\t\t\t\t\t\t\t\tcaused_by_credential: false,\n\t\t\t\t\t\t\t\terror_message: error.description,\n\t\t\t\t\t\t\t\terror_title: error.message,\n\t\t\t\t\t\t\t\terror_type: error.context.type,\n\t\t\t\t\t\t\t\tnode_graph_string: JSON.stringify(\n\t\t\t\t\t\t\t\t\tTelemetryHelpers.generateNodesGraph(\n\t\t\t\t\t\t\t\t\t\tworkflowData as IWorkflowBase,\n\t\t\t\t\t\t\t\t\t\tthis.workflowHelpers.getNodeTypes(),\n\t\t\t\t\t\t\t\t\t).nodeGraph,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\terror.context.nodeCause &&\n\t\t\t\t\t\t\t\t['paired_item_no_info', 'paired_item_invalid_info'].includes(\n\t\t\t\t\t\t\t\t\terror.context.type as string,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst node = workflow.getNode(error.context.nodeCause as string);\n\n\t\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\t\teventData.is_pinned = !!workflow.getPinDataOfNode(node.name);\n\t\t\t\t\t\t\t\t\teventData.mode = node.parameters.mode;\n\t\t\t\t\t\t\t\t\teventData.node_type = node.type;\n\t\t\t\t\t\t\t\t\teventData.operation = node.parameters.operation;\n\t\t\t\t\t\t\t\t\teventData.resource = node.parameters.resource;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.$telemetry.track('Instance FE emitted paired item error', eventData, {\n\t\t\t\t\t\t\t\twithPostHog: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (runDataExecuted.data.resultData.error?.name === 'SubworkflowOperationError') {\n\t\t\t\t\t\tconst error = runDataExecuted.data.resultData.error as SubworkflowOperationError;\n\n\t\t\t\t\t\tthis.workflowsStore.subWorkflowExecutionError = error;\n\n\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\ttitle: error.message,\n\t\t\t\t\t\t\tmessage: error.description,\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (\n\t\t\t\t\t\trunDataExecuted.data.resultData.error?.name === 'NodeOperationError' &&\n\t\t\t\t\t\t(runDataExecuted.data.resultData.error as NodeOperationError).functionality ===\n\t\t\t\t\t\t\t'configuration-node'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// If the error is a configuration error of the node itself doesn't get executed so we can't use lastNodeExecuted for the title\n\t\t\t\t\t\tlet title: string;\n\t\t\t\t\t\tconst nodeError = runDataExecuted.data.resultData.error as NodeOperationError;\n\t\t\t\t\t\tif (nodeError.node.name) {\n\t\t\t\t\t\t\ttitle = `Error in sub-node ‘${nodeError.node.name}‘`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttitle = 'Problem executing workflow';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t(nodeError?.description ?? runDataExecutedErrorMessage) +\n\t\t\t\t\t\t\t\tthis.$locale.baseText('pushConnection.executionError.openNode', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tnode: nodeError.node.name,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet title: string;\n\t\t\t\t\t\tconst isManualExecutionCancelled =\n\t\t\t\t\t\t\trunDataExecuted.mode === 'manual' && runDataExecuted.status === 'canceled';\n\n\t\t\t\t\t\t// Do not show the error message if the workflow got canceled manually\n\t\t\t\t\t\tif (isManualExecutionCancelled) {\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle: this.$locale.baseText('nodeView.showMessage.stopExecutionTry.title'),\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (runDataExecuted.data.resultData.lastNodeExecuted) {\n\t\t\t\t\t\t\t\ttitle = `Problem in node ‘${runDataExecuted.data.resultData.lastNodeExecuted}‘`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttitle = 'Problem executing workflow';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tmessage: runDataExecutedErrorMessage,\n\t\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Workflow did execute without a problem\n\t\t\t\t\tthis.titleSet(workflow.name as string, 'IDLE');\n\n\t\t\t\t\tconst execution = this.workflowsStore.getWorkflowExecution;\n\t\t\t\t\tif (execution?.executedNode) {\n\t\t\t\t\t\tconst node = this.workflowsStore.getNodeByName(execution.executedNode);\n\t\t\t\t\t\tconst nodeType = node && this.nodeTypesStore.getNodeType(node.type, node.typeVersion);\n\t\t\t\t\t\tconst nodeOutput =\n\t\t\t\t\t\t\texecution &&\n\t\t\t\t\t\t\texecution.executedNode &&\n\t\t\t\t\t\t\texecution.data?.resultData?.runData?.[execution.executedNode];\n\t\t\t\t\t\tif (nodeType?.polling && !nodeOutput) {\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle: this.$locale.baseText('pushConnection.pollingNode.dataNotFound', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tservice: getTriggerNodeServiceName(nodeType),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tmessage: this.$locale.baseText('pushConnection.pollingNode.dataNotFound.message', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tservice: getTriggerNodeServiceName(nodeType),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\t\ttitle: this.$locale.baseText('pushConnection.nodeExecutedSuccessfully'),\n\t\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\t\ttitle: this.$locale.baseText('pushConnection.workflowExecutedSuccessfully'),\n\t\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// It does not push the runData as it got already pushed with each\n\t\t\t\t// node that did finish. For that reason copy in here the data\n\t\t\t\t// which we already have.\n\t\t\t\tif (this.workflowsStore.getWorkflowRunData) {\n\t\t\t\t\trunDataExecuted.data.resultData.runData = this.workflowsStore.getWorkflowRunData;\n\t\t\t\t}\n\n\t\t\t\tthis.workflowsStore.executingNode.length = 0;\n\t\t\t\tthis.workflowsStore.setWorkflowExecutionData(runDataExecuted as IExecutionResponse);\n\t\t\t\tthis.uiStore.removeActiveAction('workflowRunning');\n\n\t\t\t\t// Set the node execution issues on all the nodes which produced an error so that\n\t\t\t\t// it can be displayed in the node-view\n\t\t\t\tthis.nodeHelpers.updateNodesExecutionIssues();\n\n\t\t\t\tconst lastNodeExecuted: string | undefined =\n\t\t\t\t\trunDataExecuted.data.resultData.lastNodeExecuted;\n\t\t\t\tlet itemsCount = 0;\n\t\t\t\tif (\n\t\t\t\t\tlastNodeExecuted &&\n\t\t\t\t\trunDataExecuted.data.resultData.runData[lastNodeExecuted] &&\n\t\t\t\t\t!runDataExecutedErrorMessage\n\t\t\t\t) {\n\t\t\t\t\titemsCount =\n\t\t\t\t\t\trunDataExecuted.data.resultData.runData[lastNodeExecuted][0].data!.main[0]!.length;\n\t\t\t\t}\n\n\t\t\t\tvoid useExternalHooks().run('pushConnection.executionFinished', {\n\t\t\t\t\titemsCount,\n\t\t\t\t\tnodeName: runDataExecuted.data.resultData.lastNodeExecuted,\n\t\t\t\t\terrorMessage: runDataExecutedErrorMessage,\n\t\t\t\t\trunDataExecutedStartData: runDataExecuted.data.startData,\n\t\t\t\t\tresultDataError: runDataExecuted.data.resultData.error,\n\t\t\t\t});\n\t\t\t\tif (!runDataExecuted.data.resultData.error) {\n\t\t\t\t\tthis.segmentStore.trackSuccessfulWorkflowExecution(runDataExecuted);\n\t\t\t\t}\n\t\t\t} else if (receivedData.type === 'executionStarted') {\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tconst executionData: IExecutionsCurrentSummaryExtended = {\n\t\t\t\t\tid: pushData.executionId,\n\t\t\t\t\tfinished: false,\n\t\t\t\t\tmode: pushData.mode,\n\t\t\t\t\tstartedAt: pushData.startedAt,\n\t\t\t\t\tretryOf: pushData.retryOf,\n\t\t\t\t\tworkflowId: pushData.workflowId,\n\t\t\t\t\tworkflowName: pushData.workflowName,\n\t\t\t\t};\n\n\t\t\t\tthis.workflowsStore.addActiveExecution(executionData);\n\t\t\t} else if (receivedData.type === 'nodeExecuteAfter') {\n\t\t\t\t// A node finished to execute. Add its data\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tthis.workflowsStore.addNodeExecutionData(pushData);\n\t\t\t\tthis.workflowsStore.removeExecutingNode(pushData.nodeName);\n\t\t\t} else if (receivedData.type === 'nodeExecuteBefore') {\n\t\t\t\t// A node started to be executed. Set it as executing.\n\t\t\t\tconst pushData = receivedData.data;\n\t\t\t\tthis.workflowsStore.addExecutingNode(pushData.nodeName);\n\t\t\t} else if (receivedData.type === 'testWebhookDeleted') {\n\t\t\t\t// A test-webhook was deleted\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tif (pushData.workflowId === this.workflowsStore.workflowId) {\n\t\t\t\t\tthis.workflowsStore.executionWaitingForWebhook = false;\n\t\t\t\t\tthis.uiStore.removeActiveAction('workflowRunning');\n\t\t\t\t}\n\t\t\t} else if (receivedData.type === 'testWebhookReceived') {\n\t\t\t\t// A test-webhook did get called\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tif (pushData.workflowId === this.workflowsStore.workflowId) {\n\t\t\t\t\tthis.workflowsStore.executionWaitingForWebhook = false;\n\t\t\t\t\tthis.workflowsStore.activeExecutionId = pushData.executionId;\n\t\t\t\t}\n\n\t\t\t\tvoid this.processWaitingPushMessages();\n\t\t\t} else if (receivedData.type === 'reloadNodeType') {\n\t\t\t\tawait this.nodeTypesStore.getNodeTypes();\n\t\t\t\tawait this.nodeTypesStore.getFullNodesProperties([receivedData.data]);\n\t\t\t} else if (receivedData.type === 'removeNodeType') {\n\t\t\t\tconst pushData = receivedData.data;\n\n\t\t\t\tconst nodesToBeRemoved: INodeTypeNameVersion[] = [pushData];\n\n\t\t\t\t// Force reload of all credential types\n\t\t\t\tawait this.credentialsStore.fetchCredentialTypes(false).then(() => {\n\t\t\t\t\tthis.nodeTypesStore.removeNodeTypes(nodesToBeRemoved);\n\t\t\t\t});\n\t\t\t} else if (receivedData.type === 'nodeDescriptionUpdated') {\n\t\t\t\tawait this.nodeTypesStore.getNodeTypes();\n\t\t\t\tawait this.credentialsStore.fetchCredentialTypes(true);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tgetExecutionError(data: IRunExecutionData | IExecuteContextData) {\n\t\t\tconst error = data.resultData.error;\n\n\t\t\tlet errorMessage: string;\n\n\t\t\tif (data.resultData.lastNodeExecuted && error) {\n\t\t\t\terrorMessage = error.message || error.description;\n\t\t\t} else {\n\t\t\t\terrorMessage = this.$locale.baseText('pushConnection.executionError', {\n\t\t\t\t\tinterpolate: { error: '!' },\n\t\t\t\t});\n\n\t\t\t\tif (error?.message) {\n\t\t\t\t\tlet nodeName: string | undefined;\n\t\t\t\t\tif ('node' in error) {\n\t\t\t\t\t\tnodeName = typeof error.node === 'string' ? error.node : error.node!.name;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst receivedError = nodeName ? `${nodeName}: ${error.message}` : error.message;\n\t\t\t\t\terrorMessage = this.$locale.baseText('pushConnection.executionError', {\n\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\terror: `.${this.$locale.baseText('pushConnection.executionError.details', {\n\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\tdetails: receivedError,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errorMessage;\n\t\t},\n\t},\n});\n"],"names":["GET_STATUS_ENDPOINT","sendGetWorkerStatus","context","makeRestApiRequest","WORKER_HISTORY_LENGTH","STALE_SECONDS","useOrchestrationStore","defineStore","data","id","rootStore","useRootStore","workerId","pushConnection","defineComponent","router","useRouter","workflowHelpers","useWorkflowHelpers","nodeHelpers","useNodeHelpers","useTitleChange","useToast","message","mapStores","useCredentialsStore","useNodeTypesStore","useUIStore","useWorkflowsStore","useSettingsStore","useSegment","usePushConnectionStore","useCollaborationStore","event","retryAttempts","queueLength","i","messageData","receivedData","isRetry","pushData","recoveredPushData","recoveredExecutionId","_a","executionData","parse","iRunExecutionData","_b","_c","_d","_e","activeRunData","_h","_g","_f","key","iRun","_i","activeExecutionId","_l","_k","_j","_s","_r","_q","_p","_o","_n","_m","runDataExecuted","runDataExecutedErrorMessage","lineNumber","_v","_u","_t","codeNodeEditorEventBus","workflow","workflowSettings","saveManualExecutions","isSavingExecutions","action","globalLinkActionsEventBus","WORKFLOW_SETTINGS_MODAL_KEY","_w","error","workflowData","eventData","TelemetryHelpers.generateNodesGraph","node","_x","_y","title","nodeError","execution","nodeType","nodeOutput","_B","_A","_z","getTriggerNodeServiceName","lastNodeExecuted","itemsCount","useExternalHooks","nodesToBeRemoved","errorMessage","nodeName","receivedError"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{fO as f,V as w,aa as m,fQ as u}from"./n8n-oSulVm5C.js";import{aF as T,aG as k,aH as y,U as E}from"./index-
|
|
2
|
-
//# sourceMappingURL=templateActions-
|
|
1
|
+
import{fO as f,V as w,aa as m,fQ as u}from"./n8n-oSulVm5C.js";import{aF as T,aG as k,aH as y,U as E}from"./index-36CdMZUz.js";async function C(e){const{credentialOverrides:o,nodeTypeProvider:t,rootStore:n,template:a,workflowsStore:s}=e,r=await u(n.getRestApiContext,a.name),l=y(t,a.workflow.nodes,o),i=E(l),d=a.workflow.connections,p={name:r.name,nodes:i,connections:d,active:!1,meta:{templateId:a.id.toString()}};return await s.createNewWorkflow(p)}async function N(e){const{router:o,templateId:t,inNewBrowserTab:n=!1,telemetry:a,source:s}=e;a.track("User opened cred setup",{source:s},{withPostHog:!0});const r={name:w.TEMPLATE_SETUP,params:{id:t}};if(n){const l=o.resolve(r);window.open(l.href,"_blank")}else await o.push(r)}async function c(e){const{externalHooks:o,templateId:t,templatesStore:n,inNewBrowserTab:a,router:s}=e,r={name:w.TEMPLATE_IMPORT,params:{id:t}},l={source:"workflow",template_id:m(t),wf_template_repo_session_id:n.currentSessionId};if(await o.run("templatesWorkflowView.openWorkflow",l),a){const i=s.resolve(r);window.open(i.href,"_blank")}else await s.push(r)}function P(e,o){return o.workflow.nodes.some(t=>k(e,t))}async function S(e,o){const t=e.getFullTemplateById(o);return t||(await e.fetchTemplateById(o),e.getFullTemplateById(o))}async function g(e){const{nodeTypesStore:o,posthogStore:t,templateId:n,templatesStore:a}=e;if(!t.isFeatureEnabled(f)){await c(e);return}const[r]=await Promise.all([S(a,n),o.loadNodeTypesIfNotLoaded()]);T(r),P(o,r)?await N(e):await c(e)}export{C as c,g as u};
|
|
2
|
+
//# sourceMappingURL=templateActions-EUfdPNqc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateActions-
|
|
1
|
+
{"version":3,"file":"templateActions-EUfdPNqc.js","sources":["../../src/utils/templates/templateActions.ts"],"sourcesContent":["import type {\n\tINodeUi,\n\tITemplatesWorkflowFull,\n\tIWorkflowData,\n\tIWorkflowTemplate,\n} from '@/Interface';\nimport { getNewWorkflow } from '@/api/workflows';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport type { useRootStore } from '@/stores/n8nRoot.store';\nimport type { PosthogStore } from '@/stores/posthog.store';\nimport type { useWorkflowsStore } from '@/stores/workflows.store';\nimport { getFixedNodesList } from '@/utils/nodeViewUtils';\nimport type { NodeTypeProvider } from '@/utils/nodeTypes/nodeTypeTransforms';\nimport type { TemplateCredentialKey } from '@/utils/templates/templateTransforms';\nimport { replaceAllTemplateNodeCredentials } from '@/utils/templates/templateTransforms';\nimport type { INodeCredentialsDetails } from 'n8n-workflow';\nimport type { RouteLocationRaw, Router } from 'vue-router';\nimport type { TemplatesStore } from '@/stores/templates.store';\nimport type { NodeTypesStore } from '@/stores/nodeTypes.store';\nimport type { Telemetry } from '@/plugins/telemetry';\nimport type { useExternalHooks } from '@/composables/useExternalHooks';\nimport { assert } from '@/utils/assert';\nimport { doesNodeHaveCredentialsToFill } from '@/utils/nodes/nodeTransforms';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\ntype ExternalHooks = ReturnType<typeof useExternalHooks>;\n\n/**\n * Creates a new workflow from a template\n */\nexport async function createWorkflowFromTemplate(opts: {\n\ttemplate: IWorkflowTemplate;\n\tcredentialOverrides: Record<TemplateCredentialKey, INodeCredentialsDetails>;\n\trootStore: ReturnType<typeof useRootStore>;\n\tworkflowsStore: ReturnType<typeof useWorkflowsStore>;\n\tnodeTypeProvider: NodeTypeProvider;\n}) {\n\tconst { credentialOverrides, nodeTypeProvider, rootStore, template, workflowsStore } = opts;\n\n\tconst workflowData = await getNewWorkflow(rootStore.getRestApiContext, template.name);\n\tconst nodesWithCreds = replaceAllTemplateNodeCredentials(\n\t\tnodeTypeProvider,\n\t\ttemplate.workflow.nodes,\n\t\tcredentialOverrides,\n\t);\n\tconst nodes = getFixedNodesList(nodesWithCreds) as INodeUi[];\n\tconst connections = template.workflow.connections;\n\n\tconst workflowToCreate: IWorkflowData = {\n\t\tname: workflowData.name,\n\t\tnodes,\n\t\tconnections,\n\t\tactive: false,\n\t\tmeta: {\n\t\t\ttemplateId: template.id.toString(),\n\t\t},\n\t\t// Ignored: pinData, settings, tags, versionId\n\t};\n\n\tconst createdWorkflow = await workflowsStore.createNewWorkflow(workflowToCreate);\n\n\treturn createdWorkflow;\n}\n\n/**\n * Opens the template credential setup view\n */\nasync function openTemplateCredentialSetup(opts: {\n\ttemplateId: string;\n\trouter: Router;\n\tinNewBrowserTab?: boolean;\n\ttelemetry: Telemetry;\n\tsource: string;\n}) {\n\tconst { router, templateId, inNewBrowserTab = false, telemetry, source } = opts;\n\n\ttelemetry.track('User opened cred setup', { source }, { withPostHog: true });\n\n\tconst routeLocation: RouteLocationRaw = {\n\t\tname: VIEWS.TEMPLATE_SETUP,\n\t\tparams: { id: templateId },\n\t};\n\n\tif (inNewBrowserTab) {\n\t\tconst route = router.resolve(routeLocation);\n\t\twindow.open(route.href, '_blank');\n\t} else {\n\t\tawait router.push(routeLocation);\n\t}\n}\n\n/**\n * Opens the given template's workflow on NodeView. Fires necessary\n * telemetry events.\n */\nasync function openTemplateWorkflowOnNodeView(opts: {\n\texternalHooks: ExternalHooks;\n\ttemplateId: string;\n\ttemplatesStore: TemplatesStore;\n\trouter: Router;\n\tinNewBrowserTab?: boolean;\n}) {\n\tconst { externalHooks, templateId, templatesStore, inNewBrowserTab, router } = opts;\n\tconst routeLocation: RouteLocationRaw = {\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId },\n\t};\n\tconst telemetryPayload = {\n\t\tsource: 'workflow',\n\t\ttemplate_id: tryToParseNumber(templateId),\n\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t};\n\n\tawait externalHooks.run('templatesWorkflowView.openWorkflow', telemetryPayload);\n\n\tif (inNewBrowserTab) {\n\t\tconst route = router.resolve(routeLocation);\n\t\twindow.open(route.href, '_blank');\n\t} else {\n\t\tawait router.push(routeLocation);\n\t}\n}\n\nfunction hasTemplateCredentials(\n\tnodeTypeProvider: NodeTypeProvider,\n\ttemplate: ITemplatesWorkflowFull,\n) {\n\treturn template.workflow.nodes.some((node) =>\n\t\tdoesNodeHaveCredentialsToFill(nodeTypeProvider, node),\n\t);\n}\n\nasync function getFullTemplate(templatesStore: TemplatesStore, templateId: string) {\n\tconst template = templatesStore.getFullTemplateById(templateId);\n\tif (template) {\n\t\treturn template;\n\t}\n\n\tawait templatesStore.fetchTemplateById(templateId);\n\treturn templatesStore.getFullTemplateById(templateId);\n}\n\n/**\n * Uses the given template by opening the template workflow on NodeView\n * or the template credential setup view. Fires necessary telemetry events.\n */\nexport async function useTemplateWorkflow(opts: {\n\texternalHooks: ExternalHooks;\n\tnodeTypesStore: NodeTypesStore;\n\tposthogStore: PosthogStore;\n\ttemplateId: string;\n\ttemplatesStore: TemplatesStore;\n\trouter: Router;\n\tinNewBrowserTab?: boolean;\n\ttelemetry: Telemetry;\n\tsource: string;\n}) {\n\tconst { nodeTypesStore, posthogStore, templateId, templatesStore } = opts;\n\n\tconst openCredentialSetup = posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT);\n\tif (!openCredentialSetup) {\n\t\tawait openTemplateWorkflowOnNodeView(opts);\n\t\treturn;\n\t}\n\n\tconst [template] = await Promise.all([\n\t\tgetFullTemplate(templatesStore, templateId),\n\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t]);\n\tassert(template);\n\n\tif (hasTemplateCredentials(nodeTypesStore, template)) {\n\t\tawait openTemplateCredentialSetup(opts);\n\t} else {\n\t\tawait openTemplateWorkflowOnNodeView(opts);\n\t}\n}\n"],"names":["createWorkflowFromTemplate","opts","credentialOverrides","nodeTypeProvider","rootStore","template","workflowsStore","workflowData","getNewWorkflow","nodesWithCreds","replaceAllTemplateNodeCredentials","nodes","getFixedNodesList","connections","workflowToCreate","openTemplateCredentialSetup","router","templateId","inNewBrowserTab","telemetry","source","routeLocation","VIEWS","route","openTemplateWorkflowOnNodeView","externalHooks","templatesStore","telemetryPayload","tryToParseNumber","hasTemplateCredentials","node","doesNodeHaveCredentialsToFill","getFullTemplate","useTemplateWorkflow","nodeTypesStore","posthogStore","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","assert"],"mappings":"8HA8BA,eAAsBA,EAA2BC,EAM9C,CACF,KAAM,CAAE,oBAAAC,EAAqB,iBAAAC,EAAkB,UAAAC,EAAW,SAAAC,EAAU,eAAAC,CAAmB,EAAAL,EAEjFM,EAAe,MAAMC,EAAeJ,EAAU,kBAAmBC,EAAS,IAAI,EAC9EI,EAAiBC,EACtBP,EACAE,EAAS,SAAS,MAClBH,CAAA,EAEKS,EAAQC,EAAkBH,CAAc,EACxCI,EAAcR,EAAS,SAAS,YAEhCS,EAAkC,CACvC,KAAMP,EAAa,KACnB,MAAAI,EACA,YAAAE,EACA,OAAQ,GACR,KAAM,CACL,WAAYR,EAAS,GAAG,SAAS,CAClC,CAAA,EAMM,OAFiB,MAAMC,EAAe,kBAAkBQ,CAAgB,CAGhF,CAKA,eAAeC,EAA4Bd,EAMxC,CACF,KAAM,CAAE,OAAAe,EAAQ,WAAAC,EAAY,gBAAAC,EAAkB,GAAO,UAAAC,EAAW,OAAAC,CAAW,EAAAnB,EAEjEkB,EAAA,MAAM,yBAA0B,CAAE,OAAAC,GAAU,CAAE,YAAa,GAAM,EAE3E,MAAMC,EAAkC,CACvC,KAAMC,EAAM,eACZ,OAAQ,CAAE,GAAIL,CAAW,CAAA,EAG1B,GAAIC,EAAiB,CACd,MAAAK,EAAQP,EAAO,QAAQK,CAAa,EACnC,OAAA,KAAKE,EAAM,KAAM,QAAQ,CAAA,MAE1B,MAAAP,EAAO,KAAKK,CAAa,CAEjC,CAMA,eAAeG,EAA+BvB,EAM3C,CACF,KAAM,CAAE,cAAAwB,EAAe,WAAAR,EAAY,eAAAS,EAAgB,gBAAAR,EAAiB,OAAAF,CAAW,EAAAf,EACzEoB,EAAkC,CACvC,KAAMC,EAAM,gBACZ,OAAQ,CAAE,GAAIL,CAAW,CAAA,EAEpBU,EAAmB,CACxB,OAAQ,WACR,YAAaC,EAAiBX,CAAU,EACxC,4BAA6BS,EAAe,gBAAA,EAK7C,GAFM,MAAAD,EAAc,IAAI,qCAAsCE,CAAgB,EAE1ET,EAAiB,CACd,MAAAK,EAAQP,EAAO,QAAQK,CAAa,EACnC,OAAA,KAAKE,EAAM,KAAM,QAAQ,CAAA,MAE1B,MAAAP,EAAO,KAAKK,CAAa,CAEjC,CAEA,SAASQ,EACR1B,EACAE,EACC,CACM,OAAAA,EAAS,SAAS,MAAM,KAAMyB,GACpCC,EAA8B5B,EAAkB2B,CAAI,CAAA,CAEtD,CAEA,eAAeE,EAAgBN,EAAgCT,EAAoB,CAC5E,MAAAZ,EAAWqB,EAAe,oBAAoBT,CAAU,EAC9D,OAAIZ,IAIE,MAAAqB,EAAe,kBAAkBT,CAAU,EAC1CS,EAAe,oBAAoBT,CAAU,EACrD,CAMA,eAAsBgB,EAAoBhC,EAUvC,CACF,KAAM,CAAE,eAAAiC,EAAgB,aAAAC,EAAc,WAAAlB,EAAY,eAAAS,GAAmBzB,EAGrE,GAAI,CADwBkC,EAAa,iBAAiBC,CAAoC,EACpE,CACzB,MAAMZ,EAA+BvB,CAAI,EACzC,MACD,CAEA,KAAM,CAACI,CAAQ,EAAI,MAAM,QAAQ,IAAI,CACpC2B,EAAgBN,EAAgBT,CAAU,EAC1CiB,EAAe,yBAAyB,CAAA,CACxC,EACDG,EAAOhC,CAAQ,EAEXwB,EAAuBK,EAAgB7B,CAAQ,EAClD,MAAMU,EAA4Bd,CAAI,EAEtC,MAAMuB,EAA+BvB,CAAI,CAE3C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{aE as _,e as V,af as l}from"./vendor-e5jTRqqt.js";import{e as S,v as W,l as B,u as C,t as I,a9 as L,V as P,m as v,dL as h,O,x as U}from"./n8n-oSulVm5C.js";import{b as A}from"./index-
|
|
2
|
-
//# sourceMappingURL=useExecutionDebugging-
|
|
1
|
+
import{aE as _,e as V,af as l}from"./vendor-e5jTRqqt.js";import{e as S,v as W,l as B,u as C,t as I,a9 as L,V as P,m as v,dL as h,O,x as U}from"./n8n-oSulVm5C.js";import{b as A}from"./index-36CdMZUz.js";const G=()=>{const E=O(),T=_(),t=U(),N=A(),g=S(),s=W(),M=B(),d=C(),k=V(()=>M.isEnterpriseFeatureEnabled(I.DebugInEditor));return{applyExecutionData:async o=>{var D;const a=await s.getExecution(o),m=s.getCurrentWorkflow(),f=s.getNodes();if(!((D=a==null?void 0:a.data)!=null&&D.resultData))return;const{runData:b}=a.data.resultData,p=Object.keys(b),c=p.filter(e=>!f.some(i=>i.name===e)),y=Object.keys(s.workflow.pinData??{}),u=p.filter(e=>y.includes(e));if(u.length>0){const e=l("p",[t.baseText("nodeView.confirmMessage.debug.message"),l("ul",{class:"mt-l ml-l"},u.map(n=>l("li",n)))]);if(await N.confirm(e,t.baseText("nodeView.confirmMessage.debug.headline"),{type:"warning",confirmButtonText:t.baseText("nodeView.confirmMessage.debug.confirmButtonText"),cancelButtonText:t.baseText("nodeView.confirmMessage.debug.cancelButtonText"),dangerouslyUseHTMLString:!0,customClass:"matching-pinned-nodes-confirmation"})===L)u.forEach(n=>{const r=s.getNodeByName(n);r&&s.unpinData({node:r})});else{await T.push({name:P.EXECUTION_PREVIEW,params:{name:m.id,executionId:o}});return}}s.setWorkflowExecutionData(a);const w=f.filter(e=>!m.getParentNodes(e.name).length);let x=0;w.forEach(e=>{var n,r;const i=(r=(n=b[e.name])==null?void 0:n[0].data)==null?void 0:r.main[0];i&&(x++,s.pinData({node:e,data:i}))}),g.showToast({title:t.baseText("nodeView.showMessage.debug.title"),message:t.baseText("nodeView.showMessage.debug.content"),type:"info"}),c.length&&g.showToast({title:t.baseText("nodeView.showMessage.debug.missingNodes.title"),message:t.baseText("nodeView.showMessage.debug.missingNodes.content",{interpolate:{nodeNames:c.join(", ")}}),type:"warning"}),E.track("User clicked debug execution button",{instance_id:v().instanceId,exec_status:a.status,override_pinned_data:w.length===x,all_exec_data_imported:c.length===0})},handleDebugLinkClick:o=>{if(!k.value){d.openModalWithData({name:h,data:{title:t.baseText(d.contextBasedTranslationKeys.feature.unavailable.title),footerButtonAction:()=>{d.closeModal(h),d.goToUpgrade("debug","upgrade-debug")}}}),o.preventDefault(),o.stopPropagation();return}s.isInDebugMode=!1}}};export{G as u};
|
|
2
|
+
//# sourceMappingURL=useExecutionDebugging-986Mdc3C.js.map
|
package/dist/assets/{useExecutionDebugging-io4M-GfO.js.map → useExecutionDebugging-986Mdc3C.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExecutionDebugging-
|
|
1
|
+
{"version":3,"file":"useExecutionDebugging-986Mdc3C.js","sources":["../../src/composables/useExecutionDebugging.ts"],"sourcesContent":["import { h, computed } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useI18n } from '@/composables/useI18n';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport {\n\tDEBUG_PAYWALL_MODAL_KEY,\n\tEnterpriseEditionFeature,\n\tMODAL_CONFIRM,\n\tVIEWS,\n} from '@/constants';\nimport type { INodeUi } from '@/Interface';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useTelemetry } from './useTelemetry';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nexport const useExecutionDebugging = () => {\n\tconst telemetry = useTelemetry();\n\n\tconst router = useRouter();\n\tconst i18n = useI18n();\n\tconst message = useMessage();\n\tconst toast = useToast();\n\tconst workflowsStore = useWorkflowsStore();\n\tconst settingsStore = useSettingsStore();\n\tconst uiStore = useUIStore();\n\n\tconst isDebugEnabled = computed(() =>\n\t\tsettingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.DebugInEditor),\n\t);\n\n\tconst applyExecutionData = async (executionId: string): Promise<void> => {\n\t\tconst execution = await workflowsStore.getExecution(executionId);\n\t\tconst workflow = workflowsStore.getCurrentWorkflow();\n\t\tconst workflowNodes = workflowsStore.getNodes();\n\n\t\tif (!execution?.data?.resultData) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { runData } = execution.data.resultData;\n\n\t\tconst executionNodeNames = Object.keys(runData);\n\t\tconst missingNodeNames = executionNodeNames.filter(\n\t\t\t(name) => !workflowNodes.some((node) => node.name === name),\n\t\t);\n\n\t\t// Using the pinned data of the workflow to check if the node is pinned\n\t\t// because workflowsStore.getCurrentWorkflow() returns a cached workflow without the updated pinned data\n\t\tconst workflowPinnedNodeNames = Object.keys(workflowsStore.workflow.pinData ?? {});\n\t\tconst matchingPinnedNodeNames = executionNodeNames.filter((name) =>\n\t\t\tworkflowPinnedNodeNames.includes(name),\n\t\t);\n\n\t\tif (matchingPinnedNodeNames.length > 0) {\n\t\t\tconst confirmMessage = h('p', [\n\t\t\t\ti18n.baseText('nodeView.confirmMessage.debug.message'),\n\t\t\t\th(\n\t\t\t\t\t'ul',\n\t\t\t\t\t{ class: 'mt-l ml-l' },\n\t\t\t\t\tmatchingPinnedNodeNames.map((name) => h('li', name)),\n\t\t\t\t),\n\t\t\t]);\n\n\t\t\tconst overWritePinnedDataConfirm = await message.confirm(\n\t\t\t\tconfirmMessage,\n\t\t\t\ti18n.baseText('nodeView.confirmMessage.debug.headline'),\n\t\t\t\t{\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\tconfirmButtonText: i18n.baseText('nodeView.confirmMessage.debug.confirmButtonText'),\n\t\t\t\t\tcancelButtonText: i18n.baseText('nodeView.confirmMessage.debug.cancelButtonText'),\n\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\tcustomClass: 'matching-pinned-nodes-confirmation',\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (overWritePinnedDataConfirm === MODAL_CONFIRM) {\n\t\t\t\tmatchingPinnedNodeNames.forEach((name) => {\n\t\t\t\t\tconst node = workflowsStore.getNodeByName(name);\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tworkflowsStore.unpinData({ node });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tawait router.push({\n\t\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\t\tparams: { name: workflow.id, executionId },\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Set execution data\n\t\tworkflowsStore.setWorkflowExecutionData(execution);\n\n\t\t// Pin data of all nodes which do not have a parent node\n\t\tconst pinnableNodes = workflowNodes.filter(\n\t\t\t(node: INodeUi) => !workflow.getParentNodes(node.name).length,\n\t\t);\n\n\t\tlet pinnings = 0;\n\n\t\tpinnableNodes.forEach((node: INodeUi) => {\n\t\t\tconst nodeData = runData[node.name]?.[0].data?.main[0];\n\t\t\tif (nodeData) {\n\t\t\t\tpinnings++;\n\t\t\t\tworkflowsStore.pinData({\n\t\t\t\t\tnode,\n\t\t\t\t\tdata: nodeData,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\ttoast.showToast({\n\t\t\ttitle: i18n.baseText('nodeView.showMessage.debug.title'),\n\t\t\tmessage: i18n.baseText('nodeView.showMessage.debug.content'),\n\t\t\ttype: 'info',\n\t\t});\n\n\t\tif (missingNodeNames.length) {\n\t\t\ttoast.showToast({\n\t\t\t\ttitle: i18n.baseText('nodeView.showMessage.debug.missingNodes.title'),\n\t\t\t\tmessage: i18n.baseText('nodeView.showMessage.debug.missingNodes.content', {\n\t\t\t\t\tinterpolate: { nodeNames: missingNodeNames.join(', ') },\n\t\t\t\t}),\n\t\t\t\ttype: 'warning',\n\t\t\t});\n\t\t}\n\n\t\ttelemetry.track('User clicked debug execution button', {\n\t\t\tinstance_id: useRootStore().instanceId,\n\t\t\texec_status: execution.status,\n\t\t\toverride_pinned_data: pinnableNodes.length === pinnings,\n\t\t\tall_exec_data_imported: missingNodeNames.length === 0,\n\t\t});\n\t};\n\n\tconst handleDebugLinkClick = (event: Event): void => {\n\t\tif (!isDebugEnabled.value) {\n\t\t\tuiStore.openModalWithData({\n\t\t\t\tname: DEBUG_PAYWALL_MODAL_KEY,\n\t\t\t\tdata: {\n\t\t\t\t\ttitle: i18n.baseText(uiStore.contextBasedTranslationKeys.feature.unavailable.title),\n\t\t\t\t\tfooterButtonAction: () => {\n\t\t\t\t\t\tuiStore.closeModal(DEBUG_PAYWALL_MODAL_KEY);\n\t\t\t\t\t\tvoid uiStore.goToUpgrade('debug', 'upgrade-debug');\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn;\n\t\t}\n\t\tworkflowsStore.isInDebugMode = false;\n\t};\n\n\treturn {\n\t\tapplyExecutionData,\n\t\thandleDebugLinkClick,\n\t};\n};\n"],"names":["useExecutionDebugging","telemetry","useTelemetry","router","useRouter","i18n","useI18n","message","useMessage","toast","useToast","workflowsStore","useWorkflowsStore","settingsStore","useSettingsStore","uiStore","useUIStore","isDebugEnabled","computed","EnterpriseEditionFeature","executionId","execution","workflow","workflowNodes","_a","runData","executionNodeNames","missingNodeNames","name","node","workflowPinnedNodeNames","matchingPinnedNodeNames","confirmMessage","h","MODAL_CONFIRM","VIEWS","pinnableNodes","pinnings","nodeData","_b","useRootStore","event","DEBUG_PAYWALL_MODAL_KEY"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{m as c}from"./pinia-jQLgEt_L.js";import{e as k,v as d,u as h,l as v,a3 as p,a8 as l,d6 as W,d5 as g,d9 as m}from"./n8n-oSulVm5C.js";import{G as A,aE as I}from"./vendor-e5jTRqqt.js";import{a as E}from"./index-
|
|
2
|
-
//# sourceMappingURL=workflowActivate-
|
|
1
|
+
import{m as c}from"./pinia-jQLgEt_L.js";import{e as k,v as d,u as h,l as v,a3 as p,a8 as l,d6 as W,d5 as g,d9 as m}from"./n8n-oSulVm5C.js";import{G as A,aE as I}from"./vendor-e5jTRqqt.js";import{a as E}from"./index-36CdMZUz.js";const O=A({setup(){const s=I();return{workflowHelpers:E({router:s}),...k()}},data(){return{updatingWorkflowActivation:!1}},computed:{...c(v,h,d)},methods:{async activateCurrentWorkflow(s){const o=this.workflowsStore.workflowId;return await this.updateWorkflowActivation(o,!0,s)},async updateWorkflowActivation(s,o,w){this.updatingWorkflowActivation=!0;const f=this.workflowsStore.nodesIssuesExist;let t=s;if(!t||t===p){if(!await this.workflowHelpers.saveCurrentWorkflow()){this.updatingWorkflowActivation=!1;return}t=this.workflowsStore.workflowId}const e=t===this.workflowsStore.workflowId,r=this.workflowsStore.activeWorkflows.includes(t),a={workflow_id:t,is_active:o,previous_status:r,ndv_input:w==="ndv"};this.$telemetry.track("User set workflow active status",a),l().run("workflowActivate.updateWorkflowActivation",a);try{if(r&&o){this.showMessage({title:this.$locale.baseText("workflowActivator.workflowIsActive"),type:"success"}),this.updatingWorkflowActivation=!1;return}if(e&&f&&o){this.showMessage({title:this.$locale.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title"),message:this.$locale.baseText("workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.message"),type:"error"}),this.updatingWorkflowActivation=!1;return}await this.workflowHelpers.updateWorkflow({workflowId:t,active:o},!this.uiStore.stateIsDirty)}catch(i){const u=o?"activated":"deactivated";this.showError(i,this.$locale.baseText("workflowActivator.showError.title",{interpolate:{newStateName:u}})+":"),this.updatingWorkflowActivation=!1;return}const n=e?"workflow.activeChangeCurrent":"workflow.activeChange";l().run(n,{workflowId:t,active:o}),this.$emit("workflowActiveChanged",{id:t,active:o}),this.updatingWorkflowActivation=!1,e&&(o&&W(m).value!=="true"?this.uiStore.openModal(g):await this.settingsStore.fetchPromptsData())}}});export{O as w};
|
|
2
|
+
//# sourceMappingURL=workflowActivate-v05HQ2xy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflowActivate-
|
|
1
|
+
{"version":3,"file":"workflowActivate-v05HQ2xy.js","sources":["../../src/mixins/workflowActivate.ts"],"sourcesContent":["import { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useStorage } from '@/composables/useStorage';\n\nimport { useToast } from '@/composables/useToast';\n\nimport {\n\tLOCAL_STORAGE_ACTIVATION_FLAG,\n\tPLACEHOLDER_EMPTY_WORKFLOW_ID,\n\tWORKFLOW_ACTIVE_MODAL_KEY,\n} from '@/constants';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useRouter } from 'vue-router';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\n\nexport const workflowActivate = defineComponent({\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\treturn {\n\t\t\tworkflowHelpers,\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tupdatingWorkflowActivation: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useSettingsStore, useUIStore, useWorkflowsStore),\n\t},\n\tmethods: {\n\t\tasync activateCurrentWorkflow(telemetrySource?: string) {\n\t\t\tconst workflowId = this.workflowsStore.workflowId;\n\t\t\treturn await this.updateWorkflowActivation(workflowId, true, telemetrySource);\n\t\t},\n\t\tasync updateWorkflowActivation(\n\t\t\tworkflowId: string | undefined,\n\t\t\tnewActiveState: boolean,\n\t\t\ttelemetrySource?: string,\n\t\t) {\n\t\t\tthis.updatingWorkflowActivation = true;\n\t\t\tconst nodesIssuesExist = this.workflowsStore.nodesIssuesExist;\n\n\t\t\tlet currWorkflowId: string | undefined = workflowId;\n\t\t\tif (!currWorkflowId || currWorkflowId === PLACEHOLDER_EMPTY_WORKFLOW_ID) {\n\t\t\t\tconst saved = await this.workflowHelpers.saveCurrentWorkflow();\n\t\t\t\tif (!saved) {\n\t\t\t\t\tthis.updatingWorkflowActivation = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrWorkflowId = this.workflowsStore.workflowId;\n\t\t\t}\n\t\t\tconst isCurrentWorkflow = currWorkflowId === this.workflowsStore.workflowId;\n\n\t\t\tconst activeWorkflows = this.workflowsStore.activeWorkflows;\n\t\t\tconst isWorkflowActive = activeWorkflows.includes(currWorkflowId);\n\n\t\t\tconst telemetryPayload = {\n\t\t\t\tworkflow_id: currWorkflowId,\n\t\t\t\tis_active: newActiveState,\n\t\t\t\tprevious_status: isWorkflowActive,\n\t\t\t\tndv_input: telemetrySource === 'ndv',\n\t\t\t};\n\t\t\tthis.$telemetry.track('User set workflow active status', telemetryPayload);\n\t\t\tvoid useExternalHooks().run('workflowActivate.updateWorkflowActivation', telemetryPayload);\n\n\t\t\ttry {\n\t\t\t\tif (isWorkflowActive && newActiveState) {\n\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\ttitle: this.$locale.baseText('workflowActivator.workflowIsActive'),\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t});\n\t\t\t\t\tthis.updatingWorkflowActivation = false;\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (isCurrentWorkflow && nodesIssuesExist && newActiveState) {\n\t\t\t\t\tthis.showMessage({\n\t\t\t\t\t\ttitle: this.$locale.baseText(\n\t\t\t\t\t\t\t'workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmessage: this.$locale.baseText(\n\t\t\t\t\t\t\t'workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.message',\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.updatingWorkflowActivation = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.workflowHelpers.updateWorkflow(\n\t\t\t\t\t{ workflowId: currWorkflowId, active: newActiveState },\n\t\t\t\t\t!this.uiStore.stateIsDirty,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconst newStateName = newActiveState ? 'activated' : 'deactivated';\n\t\t\t\tthis.showError(\n\t\t\t\t\terror,\n\t\t\t\t\tthis.$locale.baseText('workflowActivator.showError.title', {\n\t\t\t\t\t\tinterpolate: { newStateName },\n\t\t\t\t\t}) + ':',\n\t\t\t\t);\n\t\t\t\tthis.updatingWorkflowActivation = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst activationEventName = isCurrentWorkflow\n\t\t\t\t? 'workflow.activeChangeCurrent'\n\t\t\t\t: 'workflow.activeChange';\n\t\t\tvoid useExternalHooks().run(activationEventName, {\n\t\t\t\tworkflowId: currWorkflowId,\n\t\t\t\tactive: newActiveState,\n\t\t\t});\n\n\t\t\tthis.$emit('workflowActiveChanged', { id: currWorkflowId, active: newActiveState });\n\t\t\tthis.updatingWorkflowActivation = false;\n\n\t\t\tif (isCurrentWorkflow) {\n\t\t\t\tif (newActiveState && useStorage(LOCAL_STORAGE_ACTIVATION_FLAG).value !== 'true') {\n\t\t\t\t\tthis.uiStore.openModal(WORKFLOW_ACTIVE_MODAL_KEY);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.settingsStore.fetchPromptsData();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n"],"names":["workflowActivate","defineComponent","router","useRouter","useWorkflowHelpers","useToast","mapStores","useSettingsStore","useUIStore","useWorkflowsStore","telemetrySource","workflowId","newActiveState","nodesIssuesExist","currWorkflowId","PLACEHOLDER_EMPTY_WORKFLOW_ID","isCurrentWorkflow","isWorkflowActive","telemetryPayload","useExternalHooks","error","newStateName","activationEventName","useStorage","LOCAL_STORAGE_ACTIVATION_FLAG","WORKFLOW_ACTIVE_MODAL_KEY"],"mappings":"oOAkBO,MAAMA,EAAmBC,EAAgB,CAC/C,OAAQ,CACP,MAAMC,EAASC,IAER,MAAA,CACN,gBAFuBC,EAAmB,CAAE,OAAAF,CAAQ,CAAA,EAGpD,GAAGG,EAAS,CAAA,CAEd,EACA,MAAO,CACC,MAAA,CACN,2BAA4B,EAAA,CAE9B,EACA,SAAU,CACT,GAAGC,EAAUC,EAAkBC,EAAYC,CAAiB,CAC7D,EACA,QAAS,CACR,MAAM,wBAAwBC,EAA0B,CACjD,MAAAC,EAAa,KAAK,eAAe,WACvC,OAAO,MAAM,KAAK,yBAAyBA,EAAY,GAAMD,CAAe,CAC7E,EACA,MAAM,yBACLC,EACAC,EACAF,EACC,CACD,KAAK,2BAA6B,GAC5B,MAAAG,EAAmB,KAAK,eAAe,iBAE7C,IAAIC,EAAqCH,EACrC,GAAA,CAACG,GAAkBA,IAAmBC,EAA+B,CAExE,GAAI,CADU,MAAM,KAAK,gBAAgB,oBAAoB,EACjD,CACX,KAAK,2BAA6B,GAClC,MACD,CACAD,EAAiB,KAAK,eAAe,UACtC,CACM,MAAAE,EAAoBF,IAAmB,KAAK,eAAe,WAG3DG,EADkB,KAAK,eAAe,gBACH,SAASH,CAAc,EAE1DI,EAAmB,CACxB,YAAaJ,EACb,UAAWF,EACX,gBAAiBK,EACjB,UAAWP,IAAoB,KAAA,EAE3B,KAAA,WAAW,MAAM,kCAAmCQ,CAAgB,EACpEC,EAAiB,EAAE,IAAI,4CAA6CD,CAAgB,EAErF,GAAA,CACH,GAAID,GAAoBL,EAAgB,CACvC,KAAK,YAAY,CAChB,MAAO,KAAK,QAAQ,SAAS,oCAAoC,EACjE,KAAM,SAAA,CACN,EACD,KAAK,2BAA6B,GAElC,MACD,CAEI,GAAAI,GAAqBH,GAAoBD,EAAgB,CAC5D,KAAK,YAAY,CAChB,MAAO,KAAK,QAAQ,SACnB,uEACD,EACA,QAAS,KAAK,QAAQ,SACrB,yEACD,EACA,KAAM,OAAA,CACN,EAED,KAAK,2BAA6B,GAClC,MACD,CAEA,MAAM,KAAK,gBAAgB,eAC1B,CAAE,WAAYE,EAAgB,OAAQF,CAAe,EACrD,CAAC,KAAK,QAAQ,YAAA,QAEPQ,EAAO,CACT,MAAAC,EAAeT,EAAiB,YAAc,cAC/C,KAAA,UACJQ,EACA,KAAK,QAAQ,SAAS,oCAAqC,CAC1D,YAAa,CAAE,aAAAC,CAAa,CAC5B,CAAA,EAAI,GAAA,EAEN,KAAK,2BAA6B,GAClC,MACD,CAEM,MAAAC,EAAsBN,EACzB,+BACA,wBACEG,EAAA,EAAmB,IAAIG,EAAqB,CAChD,WAAYR,EACZ,OAAQF,CAAA,CACR,EAED,KAAK,MAAM,wBAAyB,CAAE,GAAIE,EAAgB,OAAQF,EAAgB,EAClF,KAAK,2BAA6B,GAE9BI,IACCJ,GAAkBW,EAAWC,CAA6B,EAAE,QAAU,OACpE,KAAA,QAAQ,UAAUC,CAAyB,EAE1C,MAAA,KAAK,cAAc,mBAG5B,CACD,CACD,CAAC"}
|
package/dist/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<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>
|
|
13
13
|
|
|
14
14
|
<title>n8n.io - Workflow Automation</title>
|
|
15
|
-
<script type="module" crossorigin src="/%7B%7BBASE_PATH%7D%7D/assets/index-
|
|
15
|
+
<script type="module" crossorigin src="/%7B%7BBASE_PATH%7D%7D/assets/index-36CdMZUz.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/vendor-e5jTRqqt.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/lodash-es-JdX4GWLn.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/axios-s2RMMPhA.js">
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/vue3-touch-events-_RfbPMOD.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/chart.js-JtqvIvkt.js">
|
|
43
43
|
<link rel="stylesheet" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/n8n-y89D68g9.css">
|
|
44
|
-
<link rel="stylesheet" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/index-
|
|
44
|
+
<link rel="stylesheet" crossorigin href="/%7B%7BBASE_PATH%7D%7D/assets/index-wl9S8xQJ.css">
|
|
45
45
|
</head>
|
|
46
46
|
<body>
|
|
47
47
|
<noscript>
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionParameter-Zf8DWdFO.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|