UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

2 lines 35 kB
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.16.1`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`e9df50a0-2579-42ac-89fe-e7fcaeac4102`,e._sentryDebugIdIdentifier=`sentry-dbid-e9df50a0-2579-42ac-89fe-e7fcaeac4102`)})()}catch{}import{o as e}from"./chunk-CACdhNlC.js";import{$ as t,A as n,C as r,E as i,Ft as a,Ht as o,N as s,Nt as c,O as l,S as u,Sn as d,T as f,Wt as p,X as m,Z as h,_ as g,_n as _,gt as v,it as y,j as b,rt as x,tt as S,w as C,yt as w}from"./vue.runtime.esm-bundler-C3C09Zii.js";import{at as T,ot as E,t as D}from"./core-Bz5WjPxS.js";import{Di as O,Ii as k,Kt as A,Mt as j,Qi as M,Xi as N,Zi as P,lt as F,tt as I}from"./src-XqE2yCpG.js";import{t as L}from"./_plugin-vue_export-helper-CIL7EULb.js";import{Et as R,Hn as z,Hr as B,Pn as V,Pt as H,Qt as U,Tt as W,Vn as ee,aa as G,cr as te,d as K,fr as q,gr as J,ir as ne,it as re,lr as ie,oa as ae,qi as oe,qt as se,r as Y,ra as ce,rt as le,s as ue,w as X}from"./users.store-xP93bV7X.js";import{O as Z,t as de}from"./ParameterInputList-CnpfSyOD.js";import{$i as fe,Ci as pe,Eo as me,Ms as he,Oo as ge,Qo as _e,aa as ve,ba as ye,bc as be,eo as xe,hi as Se,ho as Ce,j as we,ja as Te,mi as Ee,na as De,no as Oe,ra as ke,xn as Ae}from"./constants-DuQbSl-q.js";import{t as je}from"./useClipboard-D2UtD35U.js";import{r as Me,t as Ne}from"./useCanvasOperations-BAcfYmDn.js";import{i as Pe}from"./nodeTransforms-lrtn9NPZ.js";import{t as Fe}from"./NodeIcon-T2UcO71E.js";import{r as Ie}from"./VirtualSchema-DSU3xfmx.js";import{t as Le}from"./KeyboardShortcutTooltip-D-xXdXqr.js";import{t as Re}from"./useExpressionResolveCtx-C0HlqAoX.js";var ze=e(ge(),1),Q={trackBulk:!1,trackHistory:!0};function Be(){let e=Y(),t=ue(),n=G(),r=X(),i=V(),a=F(),o=B(),s=Ne(),c=T(),l=q(),d=u(()=>Ee(n?.value?.connectionsBySourceNode??{})),f=u(()=>t.workflowObject);function p(e){i.showMessage({type:`error`,message:e,title:c.baseText(`workflowExtraction.error.failure`),duration:15*1e3})}function m(e){switch(e.errorCode){case`Input Edge To Non-Root Node`:return c.baseText(`workflowExtraction.error.selectionGraph.inputEdgeToNonRoot`,{interpolate:{node:e.node}});case`Output Edge From Non-Leaf Node`:return c.baseText(`workflowExtraction.error.selectionGraph.outputEdgeFromNonLeaf`,{interpolate:{node:e.node}});case`Multiple Input Nodes`:return c.baseText(`workflowExtraction.error.selectionGraph.multipleInputNodes`,{interpolate:{nodes:[...e.nodes].map(e=>`'${e}'`).join(`, `)}});case`Multiple Output Nodes`:return c.baseText(`workflowExtraction.error.selectionGraph.multipleOutputNodes`,{interpolate:{nodes:[...e.nodes].map(e=>`'${e}'`).join(`, `)}});case`No Continuous Path From Root To Leaf In Selection`:return c.baseText(`workflowExtraction.error.selectionGraph.noContinuousPathFromRootToLeaf`,{interpolate:{start:e.start,end:e.end}})}}function h(e,t,n,r){return{parameters:{workflowId:{__rl:!0,value:e,mode:`list`},workflowInputs:{mappingMode:`defineBelow`,value:Object.fromEntries(r.entries().map(([e,t])=>[e,`={{ ${t} }}`])),matchingColumns:[...r.keys()],schema:[...r.keys().map(e=>({id:e,displayName:e,required:!1,defaultMatch:!1,display:!0,canBeUsedToMatch:!0,removed:!1}))],attemptToConvertTypes:!1,convertFieldsToString:!0},options:{}},type:`n8n-nodes-base.executeWorkflow`,typeVersion:1.2,position:n,name:t}}function g(e,{start:t,end:i},a,o,s,c,l,u){let d=Object.fromEntries(Object.entries(o).filter(([e])=>a.some(t=>t.name===e)));i&&delete d[i];let f=a.find(e=>e.name===t),p=f??a.sort((e,t)=>e.position[1]-t.position[1])[0],m=[p.position[0]-U,p.position[1]],h=a.find(e=>e.name===i),g=h??a.sort((e,t)=>t.position[1]-e.position[1])[0],_=[g.position[0]+U,g.position[1]],v=c.size>0,y=r.getNodeType(p.type,p.typeVersion),b=f!==void 0||y&&ye(y,`main`)?{[l]:{main:[[{node:p.name,type:`main`,index:0}]]}}:{},x=h&&v?{[h.name]:{main:[[{node:u,type:`main`,index:0}]]}}:{},S=v?[{parameters:{assignments:{assignments:[...c.entries().map(e=>({id:me(),name:e[0],value:`={{ ${e[1]} }}`,type:`string`}))]},options:{}},type:`n8n-nodes-base.set`,typeVersion:3.4,position:_,id:me(),name:u}]:[],C=s.size===0?{inputSource:`passthrough`}:{workflowInputs:{values:[...s.keys().map(e=>({name:e,type:`any`}))]}},w={id:me(),typeVersion:1.1,name:l,type:Ce,position:m,parameters:C};return{name:e,nodes:[...a,...S,w],connections:{...d,...b,...x},settings:{executionOrder:`v1`},projectId:n?.value?.homeProject?.id,parentFolderId:n?.value?.parentFolder?.id??void 0}}function _(e){let t=e.reduce((e,t)=>[e[0]+t.position[0],e[1]+t.position[1],e[2]+1],[0,0,0]);return[t[0]/t[2],t[1]/t[2]]}async function v(e){try{let n=await t.createNewWorkflow(e);try{await t.publishWorkflow(n.id,{versionId:n.versionId})}catch(e){console.error(`Failed to activate extracted sub-workflow:`,e)}let{href:r}=a.resolve({name:_e.WORKFLOW,params:{name:n.id}});return i.showMessage({title:c.baseText(`workflowExtraction.success.title`),message:c.baseText(`workflowExtraction.success.message`,{interpolate:{url:r}}),type:`success`,duration:10*1e3}),n}catch(e){return i.showError(e,c.baseText(`workflowExtraction.error.subworkflowCreationFailed`)),null}}function y(e){if(Array.isArray(e))return p(c.baseText(`workflowExtraction.error.selectionGraph.listHeader`,{interpolate:{body:e.map(m).map(e=>`- ${e}`).join(`<br>`)}})),!1;let{start:n,end:r}=e,i=(e,n)=>{let r=t.getNodeByName(e);if(!r)return!0;let i=X().getNodeType(r.type,r.typeVersion);return i?n(f.value,r,i).filter(e=>typeof e==`string`?e===`main`:e.type===`main`).length<=1:!0};return n&&!i(n,De)?(p(c.baseText(`workflowExtraction.error.inputNodeHasMultipleInputBranches`,{interpolate:{node:n}})),!1):r&&!i(r,ke)?(p(c.baseText(`workflowExtraction.error.outputNodeHasMultipleOutputBranches`,{interpolate:{node:r}})),!1):!Array.isArray(e)}async function b(n,r,i,a,c){o.startRecordingUndo(),e.resetLastInteractedWith();let l=(await s.addNodes([n],{...Q,forcePosition:!0}))[0];i&&s.replaceNodeConnections(i,l.id,{...Q,replaceInputs:!1}),r&&s.replaceNodeConnections(r,l.id,{...Q,replaceOutputs:!1}),s.deleteNodes(a.map(e=>e.id),Q);for(let e of c){let n=t.workflow.nodes.find(t=>t.id===e.id);(0,ze.default)(e,n)||s.replaceNodeParameters(e.id,{...n?.parameters},{...e.parameters},Q)}e.markStateDirty(),o.stopRecordingUndo()}function x(n){let r=n.map(t.getNodeById).filter(e=>e!==void 0),i=r.filter(e=>X().getNodeType(e.type,e.typeVersion)?.group.includes(`trigger`));if(i.length>0)return p(c.baseText(`workflowExtraction.error.triggerSelected`,{interpolate:{nodes:i.map(e=>`'${e.name}'`).join(`, `)}})),!1;let a=Se(new Set(r.map(e=>e.name)),d.value);return y(a)?(e.openModalWithData({name:he,data:{subGraph:r,selection:a}}),!0):!1}async function S(e,r,i){let{start:a,end:o}=e,s=t.workflow.nodes.map(e=>e.name),c=`Start`,l=r.map(e=>e.name);for(;l.includes(c);)c+=`_1`;let u=`Return`;for(;l.includes(u);)u+=`_1`;let d=o?f.value.getChildNodes(o,`main`,1).map(e=>f.value.getNode(e)?.name).filter(e=>e!==void 0):[],p=o?f.value.getChildNodes(o,`ALL`).map(e=>f.value.getNode(e)).filter(e=>e!==null):[],{nodes:m,variables:y}=pe(r,s,c,a?[a]:void 0),x=`Call ${i}`;for(;s.includes(x);)x+=`_1`;let{nodes:S,variables:C}=pe(p,p.map(e=>e.name).concat(l),x,d),w=await v(g(i,e,m,n?.value?.connectionsBySourceNode??{},y,C,c,u));if(w===null)return!1;let T=_(r);return await b(h(w.id,x,T,y),r.find(e=>e.name===a)?.id,r.find(e=>e.name===o)?.id,r,S),!0}function C(e,t){l.track(`User started nodes to sub-workflow extraction`,{node_count:e,success:t})}function w(e,t){l.track(`User extracted nodes to sub-workflow`,{node_count:e,success:t})}async function E(e,t,n){let r=await S(e,t,n);w(t.length,r)}function D(e){let t=x(e);C(e.length,t)}return{adjacencyList:d,extractWorkflow:D,tryExtractNodesIntoSubworkflow:x,extractNodesIntoSubworkflow:E}}var $=c({customActions:{},delegatedClickHandler:null});function Ve(){function e({key:e,action:t}){$.customActions[e]=t}function t(e){let{[e]:t,...n}=$.customActions;$.customActions=n}function n(e){let t={};for(let n=0;n<e.attributes.length;n++){let r=e.attributes[n];r.name.startsWith(`data-action-parameter-`)&&(t[r.name.replace(`data-action-parameter-`,``)]=r.value)}return t}function r(e){let t=e.target;if(!(t instanceof Element)||t.tagName!==`A`)return;let r=t.getAttribute(`data-action`);if(r&&typeof a.value[r]==`function`){e.preventDefault();let i=n(t);a.value[r](i)}}function i(){window.top?window.top.location.reload():window.location.reload()}let a=u(()=>({reload:i,...$.customActions}));return m(()=>{$.delegatedClickHandler||($.delegatedClickHandler=r,window.addEventListener(`click`,r),H.on(`registerGlobalLinkAction`,e))}),h(()=>{window.removeEventListener(`click`,r),$.delegatedClickHandler=null,H.off(`registerGlobalLinkAction`,e)}),{registerCustomAction:e,unregisterCustomAction:t}}var He=L(s({__name:`TriggerExecuteButton`,props:{label:{},icon:{},disabled:{type:Boolean},loading:{type:Boolean},tooltipItems:{}},emits:[`click`],setup(e,{emit:n}){let r=e,a=n,o=u(()=>r.tooltipItems.length>0),s=async()=>{a(`click`)};return(n,r)=>(t(),C(p(O),{disabled:!o.value,placement:`top`},{content:w(()=>[(t(!0),i(g,null,x(e.tooltipItems,(e,r)=>(t(),i(`p`,{key:r,class:_(n.$style.tooltipItem)},d(e),3))),128))]),default:w(()=>[b(p(P),{"data-test-id":`trigger-execute-button`,label:e.label,disabled:e.disabled,loading:e.loading,icon:e.icon,size:`small`,onClick:s},null,8,[`label`,`disabled`,`loading`,`icon`])]),_:1},8,[`disabled`]))}}),[[`__cssModules`,{$style:{tooltipItem:`_tooltipItem_jpymr_125`}}]]),Ue=[`onClick`],We=s({__name:`WebhookUrlPreview`,props:{urls:{}},setup(e){let n=T(),o=je(),s=V(),c=a(!1);function l(e){o.copy(e),s.showMessage({title:n.baseText(`setupPanel.webhookUrl.copied`),type:`success`})}return(a,o)=>(t(),i(`div`,{"data-test-id":`webhook-url-preview`,class:_(a.$style.container)},[r(`div`,{class:_([a.$style.header,{[a.$style.expanded]:!c.value}]),onClick:o[0]||=e=>c.value=!c.value},[b(p(M),{icon:`chevron-right`,class:_(a.$style[`chevron-icon`])},null,8,[`class`]),r(`span`,{class:_(a.$style[`header-label`])},d(p(n).baseText(`setupPanel.webhookUrl.title`)),3)],2),b(p(A),null,{default:w(()=>[c.value?f(``,!0):(t(),i(`div`,{key:0,class:_(a.$style[`url-list`])},[(t(!0),i(g,null,x(e.urls,(e,o)=>(t(),C(p(O),{key:o,content:p(n).baseText(`setupPanel.webhookUrl.clickToCopy`),placement:`top`},{default:w(()=>[r(`div`,{"data-test-id":`webhook-url-item`,class:_(a.$style[`url-row`]),onClick:t=>l(e.url)},[e.isMethodVisible?(t(),i(`span`,{key:0,class:_(a.$style[`method-badge`])},d(e.httpMethod),3)):f(``,!0),r(`span`,{class:_(a.$style[`url-text`])},d(e.url),3)],10,Ue)]),_:2},1032,[`content`]))),128))],2))]),_:1})],2))}}),Ge=`_container_1w8i0_125`,Ke=`_header_1w8i0_129`,qe=`_expanded_1w8i0_141`,Je=L(We,[[`__cssModules`,{$style:{container:Ge,header:Ke,"chevron-icon":`_chevron-icon_1w8i0_137`,expanded:qe,"header-label":`_header-label_1w8i0_145`,"url-list":`_url-list_1w8i0_149`,"url-row":`_url-row_1w8i0_157`,"method-badge":`_method-badge_1w8i0_167`,"url-text":`_url-text_1w8i0_179`}}]]),Ye=s({__name:`SetupCardSection`,props:{state:{}},setup(e){let n=e;return S(be,Re(u(()=>n.state.node))),(e,n)=>(t(),i(`div`,null,[y(e.$slots,`default`)]))}}),Xe=e=>e===`n8n-nodes-base.httpRequest`||e===`n8n-nodes-base.httpRequestTool`;function Ze(e,t){let n=new Set,r=Pe(e,t);for(let e of r)n.add(e.name);let i=t.issues?.credentials??{};for(let e of Object.keys(i))n.add(e);if(t.credentials)for(let e of Object.keys(t.credentials))n.add(e);return Array.from(n)}function Qe(e,t){let n=e.getNodeType(t.type,t.typeVersion);if(!n)return{};let r={...t.parameters};for(let e of n.properties)!(e.name in r)&&e.default!==void 0&&(r[e.name]=e.default);let i={...t,parameters:r},a=ve(n.properties,i,n)?.parameters??{},o=new Map;for(let e of n.properties){let t=o.get(e.name);t?t.push(e):o.set(e.name,[e])}let s={};for(let[e,t]of Object.entries(a)){let a=o.get(e);a&&a.some(e=>!(e.type===`hidden`||e.displayOptions&&!fe(r,e,i,n)))&&(s[e]=t)}return s}function $e(e,t,n){let r=new Map;for(let{node:i,credentialTypes:a}of e)for(let e of a){let a=Xe(i.type),o=i.parameters.url,s;if(!a)s=e;else if(Oe(o)){let t=n?.(o,i.name)??null;s=t===null?`${e}:http:${i.name}`:`${e}:http:${t}`}else s=`${e}:http:${String(o??``)}`;let c=r.get(s);if(c){c.nodes.push(i);let t=i.issues?.credentials?.[e];if(t){let e=[t].flat();for(let t of e)c.issues.includes(t)||c.issues.push(t)}if(!c.selectedCredentialId){let t=i.credentials?.[e];typeof t!=`string`&&t?.id&&(c.selectedCredentialId=t.id)}}else{let n=i.credentials?.[e],a=typeof n==`string`?void 0:n?.id??void 0,o=[(i.issues?.credentials??{})[e]??[]].flat();r.set(s,{credentialType:e,credentialDisplayName:t(e),selectedCredentialId:a,issues:o,nodes:[i],isComplete:!1})}}for(let e of r.values())e.isComplete=!!e.selectedCredentialId&&e.issues.length===0;return Array.from(r.values())}function et(e,t){return!(e.credentialType&&(!e.selectedCredentialId||(e.issues?.length??0)>0||t.isCredentialTestedOk&&e.selectedCredentialId&&!t.isCredentialTestedOk(e.selectedCredentialId))||Object.keys(e.parameterIssues).length>0||t.hasUnfilledTemplateParams(e.node)||e.isTrigger&&e.node.name===t.firstTriggerName&&!t.hasTriggerExecuted(e.node.name))}function tt(e,t){return!(e.selectedCredentialId&&e.issues.length===0)||t.isCredentialTestedOk&&e.selectedCredentialId&&!t.isCredentialTestedOk(e.selectedCredentialId)?!1:e.nodes.filter(e=>t.isTriggerNode(e.type)&&e.name===t.firstTriggerName).every(e=>t.hasTriggerExecuted(e.name))}function nt(e,t,n,r){return{node:e,isComplete:t.every(e=>{let t=n.find(t=>t.credentialType===e);return t?!!t.selectedCredentialId&&t.issues.length===0:!0})&&r}}function rt(e){if(e.nodeGroup){let{parentState:t,subnodeCards:n}=e.nodeGroup;return(!t||t.isComplete)&&n.every(e=>e.isComplete)}return e.state.isComplete}function it(e){return!!e.nodeGroup}var at=L(s({__name:`SetupCardBody`,props:{state:{},stickyParameters:{},isWizard:{type:Boolean}},emits:[`credentialSelected`,`credentialDeselected`,`valueChanged`,`interacted`,`parametersDiscovered`],setup(e,{emit:r}){let a=new Set([`collection`,`fixedCollection`,`resourceMapper`,`filter`,`assignmentCollection`]),o=e,s=r,c=T(),m=X(),h=ie(),g=R(),y=J(),x=u(()=>m.getNodeType(o.state.node.type,o.state.node.typeVersion)),S=u(()=>Xe(o.state.node.type)),E=e=>a.has(e.type)||e.typeOptions?.multipleValues===!0,D=u(()=>{if(!x.value?.properties)return[];let e=Object.keys(o.state.parameterIssues),t=o.state.additionalParameterNames??[],n=new Set([...e,...t]);return x.value.properties.filter(e=>n.has(e.name)&&fe(o.state.node.parameters,e,o.state.node,x.value))});v(D,e=>{if(!o.stickyParameters)return;let t=e.filter(e=>!o.stickyParameters.includes(e));t.length>0&&s(`parametersDiscovered`,t)},{immediate:!0});let k=u(()=>o.stickyParameters??D.value),A=u(()=>k.value.filter(e=>!E(e))),j=u(()=>k.value.filter(E).length),M=u(()=>(o.state.allNodesUsingCredential??[]).map(e=>e.name)),P=u(()=>M.value.join(`, `)),F=()=>{y.setActiveNodeName(o.state.node.name,`other`)},L=e=>{if(!o.state.credentialType)return;s(`interacted`);let t=e.properties.credentials?.[o.state.credentialType],n=typeof t==`string`?void 0:t?.id;n?s(`credentialSelected`,{credentialType:o.state.credentialType,credentialId:n,nodeName:o.state.node.name}):s(`credentialDeselected`,{credentialType:o.state.credentialType,nodeName:o.state.node.name})},z=e=>{s(`interacted`);let t=o.isWizard?e.name.replace(/^parameters\./,``):e.name;g.updateNodeProperties({name:o.state.node.name,properties:{parameters:{...o.state.node.parameters,[t]:e.value}}}),h.updateNodesParameterIssues()};return(r,a)=>(t(),i(`div`,{class:_(r.$style.body)},[e.state.showCredentialPicker?(t(),i(`div`,{key:0,class:_(r.$style.credentialContainer)},[b(Z,{node:e.state.node,"override-cred-type":e.state.credentialType??``,"skip-auto-select":S.value,"hide-issues":``,onCredentialSelected:L},l({_:2},[M.value.length>1?{name:`label-postfix`,fn:w(()=>[b(p(O),{placement:`top`},{content:w(()=>[n(d(P.value),1)]),default:w(()=>[e.isWizard?(t(),C(p(N),{key:0,"data-test-id":`builder-setup-card-nodes-hint`,size:`small`,color:`text-light`},{default:w(()=>[n(d(p(c).baseText(`setupPanel.usedInNodes`,{interpolate:{count:String(M.value.length)}})),1)]),_:1})):(t(),i(`span`,{key:1,"data-test-id":`node-setup-card-nodes-hint`,class:_(r.$style.nodesHint)},d(p(c).baseText(`setupPanel.usedInNodes`,{interpolate:{count:String(M.value.length)}})),3))]),_:1})]),key:`0`}:void 0]),1032,[`node`,`override-cred-type`,`skip-auto-select`])],2)):f(``,!0),A.value.length>0?(t(),C(de,{key:1,parameters:A.value,"node-values":e.isWizard?{parameters:e.state.node.parameters}:e.state.node.parameters,"remove-first-parameter-margin":!0,"remove-last-parameter-margin":!0,node:e.state.node,"hide-delete":!0,path:e.isWizard?`parameters`:void 0,"options-overrides":{hideExpressionSelector:!0,hideFocusPanelButton:!0},onValueChanged:z},null,8,[`parameters`,`node-values`,`node`,`path`])):f(``,!0),j.value>0?(t(),C(p(I),{key:2,"data-test-id":`builder-setup-card-configure-link`,underline:!0,theme:`text`,size:`medium`,onClick:F},{default:w(()=>[n(d(p(c).baseText(`aiAssistant.builder.setupWizard.configureParameters`,{adjustToNumber:j.value,interpolate:{count:String(j.value)}})),1)]),_:1})):f(``,!0)],2))}}),[[`__cssModules`,{$style:{body:`_body_flk4k_125`,credentialContainer:`_credentialContainer_flk4k_131`,nodesHint:`_nodesHint_flk4k_139`}}]]);function ot(e,t){let n=T(),r=X(),i=ue(),a=Me(),{isExecuting:s,isListening:c,isListeningForWorkflowEvents:l,buttonLabel:d,buttonIcon:f,disabledReason:p,hasIssues:m,execute:h}=Ie(e,t),g=u(()=>o(e)),_=u(()=>g.value?r.getNodeType(g.value.type,g.value.typeVersion):null),v=u(()=>c.value||l.value?!0:_.value?.name===`@n8n/n8n-nodes-langchain.chatTrigger`&&a.isOpen&&i.chatPartialExecutionDestinationNode===g.value?.name),y=u(()=>{if(!v.value||!_.value)return``;if(_.value.eventTriggerDescription)return _.value.eventTriggerDescription;let e=oe(_.value);return n.baseText(`setupPanel.trigger.listeningHint`,{interpolate:{service:e}})}),b=u(()=>v.value?n.baseText(`ndv.execute.stopListening`):d.value),x=u(()=>g.value?i.workflowObject.getParentNodes(g.value.name,`ALL`).some(e=>{let t=i.getNodeByName(e);return t?.issues?.parameters||t?.issues?.credentials}):!1);return{isExecuting:s,isButtonDisabled:u(()=>s.value||m.value||x.value||!!p.value),label:b,buttonIcon:f,tooltipItems:u(()=>{if(!m.value&&!x.value)return p.value?[p.value]:[];let e=[],t=g.value?.issues;return t&&e.push(...Object.values(t.credentials??{}).flat(),...Object.values(t.parameters??{}).flat()),x.value&&e.push(n.baseText(`ndv.execute.upstreamNodeHasIssues`)),e.length>0?e:[n.baseText(`ndv.execute.requiredFieldsMissing`)]}),execute:h,isInListeningState:v,listeningHint:y}}function st(e){let t=X(),n=W(),r=u(()=>o(e)),i=u(()=>r.value?t.getNodeType(r.value.type,r.value.typeVersion):null),a=u(()=>i.value?.webhooks?i.value.webhooks.filter(e=>e.restartWebhook!==!0):[]);async function s(e,t,r){let i=e[t];if(typeof i==`string`)try{return!!await n.getWebhookExpressionValue(e,t,!0,r)}catch{return!1}return!!i}async function c(e,t){let r=!e.ndvHideMethod,i=``;try{let a=await n.getWebhookExpressionValue(e,`httpMethod`,!1,t);Array.isArray(a)&&a.length!==1?r=!1:(i=Array.isArray(a)?a[0]:a,typeof e.ndvHideMethod==`string`&&(r=!await s(e,`ndvHideMethod`,t)))}catch{}return{httpMethod:i,isMethodVisible:r}}return{webhookUrls:D(async()=>{let e=r.value;if(!e||a.value.length===0||i.value?.name===`@n8n/n8n-nodes-langchain.chatTrigger`)return[];e.parameters;let t=[];for(let r of a.value){let i=e.name;if(await s(r,`ndvHideUrl`,i))continue;let a=await n.getWebhookUrl(r,e,`test`),{httpMethod:o,isMethodVisible:l}=await c(r,i);t.push({url:a,httpMethod:o,isMethodVisible:l})}return t},[])}}var ct=e=>Object.keys(e.parameterIssues).length>0||(e.additionalParameterNames?.length??0)>0;function lt(e){let t=X(),n=u(()=>t.getNodeType(e.value.parentNode.type,e.value.parentNode.typeVersion)),r=u(()=>e.value.subnodeCards),i=u(()=>{let t=[];return e.value.parentState&&t.push(e.value.parentState),t.push(...r.value),t}),o=c({});function s(e){return o[e]||(o[e]=[]),o[e]}function l(e,t){s(e).push(...t)}let d=c({});function f(){for(let e of i.value)e.node.id in d||(d[e.node.id]=!1);let e=i.value.find(e=>!e.isComplete);e&&(d[e.node.id]=!0)}f();function p(e){d[e]=!d[e]}let m=new Map;v(i,e=>{for(let t of e){let n=m.get(t.node.id)??!1;if(t.isComplete&&!n&&!ct(t)){d[t.node.id]=!1;let n=e.find(e=>!e.isComplete&&e.node.id!==t.node.id);n&&(d[n.node.id]=!0)}}m.clear();for(let t of e)m.set(t.node.id,t.isComplete)},{deep:!0});let h=a(null);function g(e){h.value=e}function _(){h.value=null}function y(e){return t.getNodeType(e.node.type,e.node.typeVersion)}return{parentNodeType:n,subnodeSections:r,allSections:i,getStickyParameters:s,addStickyParameters:l,expandedSections:d,toggleSection:p,hoveredSection:h,onSectionMouseEnter:g,onSectionMouseLeave:_,getSectionNodeType:y}}function ut(e,t){let n=new Map;for(let r of e){let e=t[r.name];if(!e)continue;let i=new Set;for(let t of Object.keys(e))if(t!==xe.Main)for(let n of e[t]??[])for(let e of n??[])i.add(e.node);i.size>0&&n.set(r.name,i)}return n}function dt(e,t,n){let r=new Set,i=t.get(e);if(!i)return r;for(let e of i){if(n.has(e))continue;n.add(e),r.add(e);let i=dt(e,t,n);for(let e of i)r.add(e)}return r}function ft(e,t,n,r){let i=ut(t,n);if(i.size===0)return e;let a=new Set;for(let e of i.values())for(let t of e)a.add(t);let o=[];for(let e of i.keys())a.has(e)||o.push(e);if(o.length===0)return e;let s=new Set,c=new Map,l=[...o].sort((e,t)=>r.indexOf(e)-r.indexOf(t));for(let n of l){let r=t.find(e=>e.name===n);if(!r)continue;let a=dt(n,i,new Set);for(let e of[...a])s.has(e)&&a.delete(e);let o=[],l;for(let t of e){if(!t.state)continue;let e=t.state.node.name;a.has(e)&&!s.has(e)&&o.push(t.state),e===n&&!s.has(e)&&(l=t.state)}if(o.length!==0){for(let e of o)s.add(e.node.name);l&&s.add(r.name),c.set(n,{parentNode:r,parentState:l,subnodeCards:o})}}if(c.size===0)return e;let u=[],d=new Set;for(let t of e){let e=t.state.node.name;if(s.has(e)){let t=c.get(e);if(t&&!d.has(e)&&(u.push({nodeGroup:t}),d.add(e)),!t){for(let[t,n]of c)if(!d.has(t)&&(n.subnodeCards.some(t=>t.node.name===e)||n.parentState?.node.name===e)){u.push({nodeGroup:n}),d.add(t);break}}continue}u.push(t)}return u}var pt=(e,t)=>{let n=ue(),r=re(),i=X(),o=ie(),s=te(),c=se(),l=u(()=>n.workflowId?ae(ce(n.workflowId)):void 0),d=u(()=>e?.value??l.value?.allNodes??[]),f=u(()=>{if(!l?.value?.meta?.templateId)return new Map;let e=new Map;for(let t of d.value){let n=new Set,r=i.getNodeType(t.type,t.typeVersion);if(r)for(let e of r.properties)e.type===`resourceLocator`&&n.add(e.name);let a=e=>{for(let[t,r]of Object.entries(e))Te(r)?n.add(t):typeof r==`object`&&r&&!Array.isArray(r)&&a(r)};a(t.parameters),n.size>0&&e.set(t.name,Array.from(n))}return e}),p=a(new Map),m=u(()=>{let e=new Map,n=t=>{for(let[n,r]of t){let t=e.get(n);if(t){let i=new Set([...t,...r]);e.set(n,Array.from(i))}else e.set(n,[...r])}};for(let[t,n]of f.value)e.set(t,[...n]);n(p.value),t?.additionalParametersByNode?.value&&n(t.additionalParametersByNode.value);for(let[t,n]of k.value){let r=e.get(t);if(r){let i=new Set([...r,...n]);e.set(t,Array.from(i))}else e.set(t,Array.from(n))}return e}),h=e=>(m.value.get(e)?.length??0)>0,g=e=>{let t=m.value.get(e.name);if(!t||t.length===0)return!1;let n=new Set(t),r=e=>{for(let[t,i]of Object.entries(e)){if(n.has(t)){if(Te(i)){if(!i.value||z(i.value))return!0}else if(i===``||i==null||z(i))return!0;else if(typeof i==`object`&&i&&ee(i).length>0)return!0}if(typeof i==`object`&&i&&!Array.isArray(i)&&r(i))return!0}return!1};return r(e.parameters)};async function _(){let e=l?.value?.meta?.templateId;if(e)try{let t=c.getFullTemplateById(e)??await c.fetchTemplateById(e);if(!t?.workflow?.nodes)return;let n=new Map;for(let e of t.workflow.nodes){let t=Qe(i,e),r=Object.keys(t);r.length>0&&n.set(e.name,r)}p.value=n}catch{}}_();let y=e=>r.getCredentialTypeByName(e)?.displayName??e,b=e=>r.getCredentialTypeByName(e)?.test?!0:r.getNodesWithAccess(e).some(t=>t.credentials?.some(t=>t.name===e&&t.testedBy)),x=e=>i.isTriggerNode(e.type),S=e=>{let t=n.getWorkflowResultDataByNodeName(e);return t!==null&&t.length>0},C=a(new Set),w=(e,t)=>{try{let r=n.workflowObject.expression.getParameterValue(e,null,0,0,t,[],`manual`,{$execution:{id:we,mode:`test`,resumeUrl:we,resumeFormUrl:we},$vars:s.variablesAsObject});return typeof r==`string`?r:null}catch{return null}},T=a(new Set),E=a(new Set),D=a(new Set),O=a(new Set),k=a(new Map),A=u(()=>{let e=d.value.filter(e=>!e.disabled).map(e=>({node:e,credentialTypes:Ze(i,e),parameterIssues:Qe(i,e),isTrigger:x(e)})).filter(({credentialTypes:e,isTrigger:t,parameterIssues:n,node:r})=>T.value.has(r.id)||e.length>0||t||Object.keys(n).length>0||h(r.name)),t={};for(let e of d.value)t[e.name]=e.type;return ne(e,l.value?.connectionsBySourceNode??{},l.value?.connectionsByDestinationNode??{},t)});v(A,e=>{for(let{node:t,parameterIssues:n}of e){T.value.add(t.id);let e=Object.keys(n);if(e.length>0){let n=k.value.get(t.name);if(n)for(let t of e)n.add(t);else k.value.set(t.name,new Set(e))}}},{immediate:!0});let j=u(()=>A.value.find(({isTrigger:e})=>e)?.node.name??null),M=u(()=>A.value.filter(({credentialTypes:e})=>e.length>0)),N=u(()=>A.value.filter(({parameterIssues:e,node:t})=>E.value.has(t.id)||Object.keys(e).length>0||h(t.name)));v(N,e=>{for(let{node:t}of e)E.value.add(t.id)},{immediate:!0});let P=u(()=>{let e=new Set(O.value);for(let{credentialTypes:t,parameterIssues:n,node:r}of A.value)if(Object.keys(n).length>0||h(r.name))for(let n of t)e.add(n);return e});v(P,e=>{for(let t of e)O.value.add(t)},{immediate:!0});let F=e=>({firstTriggerName:j.value,hasTriggerExecuted:S,isTriggerNode:e=>i.isTriggerNode(e),isCredentialTestedOk:e&&b(e)?r.isCredentialTestedOk:void 0,hasUnfilledTemplateParams:g}),I=u(()=>$e(M.value.filter(({credentialTypes:e})=>!e.some(e=>P.value.has(e))).map(({node:e,credentialTypes:t})=>({node:e,credentialTypes:t})),y,w).map(e=>{let t=!!e.selectedCredentialId&&C.value.has(e.selectedCredentialId);return{...e,isComplete:tt(e,F(e.credentialType)),isAutoApplied:t}})),L=u(()=>{if(!j.value)return[];let e=A.value.find(({isTrigger:e,node:t})=>e&&t.name===j.value);if(!e||I.value.some(e=>e.nodes.some(e=>x(e)&&e.name===j.value)))return[];let{credentialTypes:t,parameterIssues:n,node:r}=e,a=Object.keys(n).length>0||h(r.name);if(t.length>0&&t.some(e=>P.value.has(e))||a)return[];let o=i.getNodeType(r.type,r.typeVersion);return!o?.webhooks?.length&&!o?.polling&&!o?.triggerPanel?[]:[nt(r,t,I.value,S(r.name))]}),R=u(()=>{let e=[];for(let t of N.value){if(t.credentialTypes.length>0)continue;let{node:n,parameterIssues:r,isTrigger:i}=t,a={node:n,parameterIssues:r,additionalParameterNames:m.value.get(n.name),isTrigger:i,isComplete:!1};a.isComplete=et(a,F()),e.push(a)}let t=new Map,n=new Map;for(let e of A.value){let{node:r,credentialTypes:i,parameterIssues:a}=e;if(i.length!==0)for(let o of i){if(!P.value.has(o))continue;t.has(o)||t.set(o,[]),t.get(o).some(e=>e.id===r.id)||t.get(o).push(r);let i=`${o}:${r.id}`,s=Object.keys(a).length>0,c=h(r.name),l=D.value.has(i);(s||c||l)&&(n.has(o)||n.set(o,[]),n.get(o).push(e))}}let r=new Set;for(let[i,a]of n){let n=!0,o=t.get(i)??[];for(let t of a){let{node:a,parameterIssues:s,isTrigger:c}=t,l=`${i}:${a.id}`;if(r.has(l))continue;r.add(l);let u=a.credentials?.[i],d=typeof u==`string`?void 0:u?.id??void 0,f=[(a.issues?.credentials??{})[i]??[]].flat(),p=!!d&&C.value.has(d),h={node:a,credentialType:i,credentialDisplayName:y(i),selectedCredentialId:d,issues:f,parameterIssues:s,additionalParameterNames:m.value.get(a.name),isTrigger:c,showCredentialPicker:n,isComplete:!1,allNodesUsingCredential:o,isAutoApplied:p};h.isComplete=et(h,F(i)),e.push(h),n=!1}}return e});v(R,e=>{for(let t of e)t.credentialType&&D.value.add(`${t.credentialType}:${t.node.id}`)},{immediate:!0});let B=u(()=>{let e=I.value.map(e=>({node:e.nodes[0],credentialType:e.credentialType,credentialDisplayName:e.credentialDisplayName,selectedCredentialId:e.selectedCredentialId,issues:e.issues,parameterIssues:{},isTrigger:x(e.nodes[0]),showCredentialPicker:!0,isComplete:e.isComplete,isAutoApplied:e.isAutoApplied,allNodesUsingCredential:e.nodes})),t=L.value.map(e=>({node:e.node,parameterIssues:{},isTrigger:!0,isComplete:e.isComplete})),r=[...e,...t,...R.value].filter(e=>e.node.type!==Ae).map(e=>({state:e})),i=A.value.map(({node:e})=>e.name);return r.sort((e,t)=>i.indexOf(e.state.node.name)-i.indexOf(t.state.node.name)),ft(r,d.value,n.connectionsByDestinationNode,i)}),V=u(()=>I.value.filter(e=>!e.isComplete).length),H=u(()=>B.value.length),U=u(()=>B.value.length>0&&B.value.every(e=>rt(e)));async function W(e,t,n){if(b(n)&&!(r.isCredentialTestedOk(e)||r.isCredentialTestPending(e)))try{let i=await r.getCredentialData({id:e});if(!i?.data||typeof i.data==`string`||r.isCredentialTestedOk(e)||r.isCredentialTestPending(e))return;let{ownedBy:a,sharedWithProjects:o,oauthTokenData:s,...c}=i.data;if(s){r.credentialTestResults.set(e,`success`);return}await r.testCredential({id:e,name:t,type:n,data:c})}catch{}}let G=(e,t)=>{let n=I.value,r=t?n.find(n=>n.credentialType===e&&n.nodes.some(e=>e.name===t)):n.find(t=>t.credentialType===e);if(r)return r.nodes.map(e=>e.name);if(!t)return[];let i=R.value.find(n=>n.credentialType===e&&n.node.name===t);return i?.allNodesUsingCredential?i.allNodesUsingCredential.map(e=>e.name):[t]},K=(e,t,n,i=!1)=>{let a=r.getCredentialById(t);if(!a)return;let s={id:t,name:a.name};W(t,a.name,e);for(let t of G(e,n)){let n=l?.value?.getNodeByName(t);if(!n||i&&Xe(n.type))continue;let r=n.credentials?.[e],a=typeof r==`string`?void 0:r?.id;a&&C.value.delete(a),l?.value?.updateNodeProperties({name:t,properties:{credentials:{...n.credentials,[e]:s}}})}o.updateNodesCredentialsIssues(),Y().markStateDirty()},q=(e,t)=>{for(let n of G(e,t)){let t=l?.value?.getNodeByName(n);if(!t)continue;let r={...t.credentials};delete r[e],l?.value?.updateNodeProperties({name:n,properties:{credentials:r}})}o.updateNodesCredentialsIssues(),Y().markStateDirty()},J=(e,t)=>{let n=r.getCredentialsByType(e);if(n.length===0)return;let i=n.reduce((e,t)=>e.updatedAt>t.updatedAt?e:t,n[0]);C.value.add(i.id),K(e,i.id,t,!0)},oe=()=>{let e=[...I.value],t=[...R.value];for(let t of e)t.selectedCredentialId||J(t.credentialType);for(let e of t)!e.credentialType||e.selectedCredentialId||J(e.credentialType,e.node.name)},Z=a(!1),de=!1;return v(A,e=>{if(de||e.length===0)return;de=!0,oe();let t=new Map;for(let{node:n,credentialTypes:i}of e)for(let e of i){let i=n.credentials?.[e],a=typeof i==`string`?void 0:i?.id;if(!a||t.has(a))continue;let o=r.getCredentialById(a);o&&t.set(a,{name:o.name,type:e})}let n=[];for(let[e,{name:r,type:i}]of t)n.push(W(e,r,i));n.length===0?Z.value=!0:Promise.allSettled(n).then(()=>{Z.value=!0})},{immediate:!0}),le({store:r,onCredentialDeleted:e=>{for(let{node:t,credentialTypes:n}of A.value)for(let r of n){let n=t.credentials?.[r];(typeof n==`string`?void 0:n?.id)===e&&q(r)}}}),{setupCards:B,credentialTypeStates:I,triggerStates:L,nodeStates:R,firstTriggerName:j,totalCredentialsMissing:V,totalCardsRequiringSetup:H,isAllComplete:U,isInitialCredentialTestingDone:Z,nodesWithMissingParameters:N,autoAppliedCredentialIds:C,setCredential:K,unsetCredential:q}},mt=L(s({__name:`CanvasRunWorkflowButton`,props:{selectedTriggerNodeName:{},triggerNodes:{},waitingForWebhook:{type:Boolean},executing:{type:Boolean},disabled:{type:Boolean},hideTooltip:{type:Boolean},label:{},size:{},includeChatTrigger:{type:Boolean},getNodeType:{type:Function}},emits:[`mouseenter`,`mouseleave`,`execute`,`selectTriggerNode`],setup(e,{emit:a}){let o=a,s=e,c=T(),l=u(()=>s.triggerNodes.filter(e=>!e.disabled&&(s.includeChatTrigger?!0:!K(e)))),m=u(()=>s.executing?s.waitingForWebhook?c.baseText(`nodeView.runButtonText.waitingForTriggerEvent`):c.baseText(`nodeView.runButtonText.executingWorkflow`):s.label??c.baseText(`nodeView.runButtonText.executeWorkflow`)),h=u(()=>s.triggerNodes.filter(e=>s.includeChatTrigger?!0:!K(e)).toSorted((e,t)=>{let[n,r]=e.position,[i,a]=t.position;return r===a?n-i:r-a}).map(e=>({label:k(e.name,50),disabled:!!e.disabled||s.executing,id:e.name,checked:s.selectedTriggerNodeName===e.name}))),v=u(()=>l.value.length>1&&s.selectedTriggerNodeName!==void 0);function y(e){let t=s.triggerNodes.find(t=>t.name===e);return t?s.getNodeType(t.type,t.typeVersion):null}return(a,l)=>(t(),i(`div`,{class:_([a.$style.component,v.value?a.$style.split:``])},[b(Le,{label:m.value,shortcut:{metaKey:!0,keys:[`↵`]},disabled:e.executing||e.hideTooltip},{default:w(()=>[b(p(P),{variant:`solid`,class:_(a.$style.button),loading:e.executing,iconOnly:e.executing,"aria-label":p(c).baseText(`nodeView.runButtonText.executeWorkflow`),disabled:e.disabled,size:e.size??`large`,icon:`flask-conical`,"data-test-id":`execute-workflow-button`,onMouseenter:l[0]||=e=>a.$emit(`mouseenter`,e),onMouseleave:l[1]||=e=>a.$emit(`mouseleave`,e),onClick:l[2]||=e=>o(`execute`)},{default:w(()=>[r(`span`,{class:_(a.$style.buttonContent)},[n(d(m.value)+` `,1),v.value?(t(),C(p(N),{key:0,class:_(a.$style.subText),bold:!1},{default:w(()=>[b(p(E),{keypath:`nodeView.runButtonText.from`,scope:`global`},{nodeName:w(()=>[b(p(N),{bold:``,size:`mini`},{default:w(()=>[n(d(p(k)(s.selectedTriggerNodeName??``,25)),1)]),_:1})]),_:1})]),_:1},8,[`class`])):f(``,!0)],2)]),_:1},8,[`class`,`loading`,`iconOnly`,`aria-label`,`disabled`,`size`])]),_:1},8,[`label`,`disabled`]),v.value?(t(),i(g,{key:0},[r(`div`,{role:`presentation`,class:_(a.$style.divider)},null,2),b(p(j),{class:_(a.$style.menu),items:h.value,disabled:e.disabled,placement:`top`,"extra-popper-class":a.$style.menuPopper,onSelect:l[3]||=e=>o(`selectTriggerNode`,e)},{activator:w(()=>[b(p(P),{variant:`solid`,"icon-size":`large`,disabled:e.disabled,class:_(a.$style.chevron),"aria-label":`Select trigger node`,icon:`chevron-down`},null,8,[`disabled`,`class`])]),menuItem:w(e=>[r(`div`,{class:_([a.$style.menuItem,e.disabled?a.$style.disabled:``])},[b(Fe,{class:_(a.$style.menuIcon),size:16,"node-type":y(e.id)},null,8,[`class`,`node-type`]),r(`span`,null,[b(p(E),{keypath:`nodeView.runButtonText.from`,scope:`global`},{nodeName:w(()=>[b(p(N),{bold:``,size:`small`},{default:w(()=>[n(d(e.label),1)]),_:2},1024)]),_:2},1024)])],2)]),_:1},8,[`class`,`items`,`disabled`,`extra-popper-class`])],64)):f(``,!0)],2))}}),[[`__cssModules`,{$style:{component:`_component_bmdz8_125`,split:`_split_bmdz8_131`,button:`_button_bmdz8_131`,divider:`_divider_bmdz8_143`,chevron:`_chevron_bmdz8_148`,menu:`_menu_bmdz8_155`,menuPopper:`_menuPopper_bmdz8_159`,menuItem:`_menuItem_bmdz8_163`,disabled:`_disabled_bmdz8_169`,menuIcon:`_menuIcon_bmdz8_169`,buttonContent:`_buttonContent_bmdz8_173`,subText:`_subText_bmdz8_180`}}]]);export{st as a,rt as c,Je as d,He as f,lt as i,it as l,Be as m,pt as n,ot as o,Ve as p,ct as r,at as s,mt as t,Ye as u}; //# sourceMappingURL=CanvasRunWorkflowButton-BS2xUyBn.js.map