n8n-editor-ui 1.45.0 → 1.45.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 +75 -75
- package/dist/assets/{AuthView-sBgr4ab5.js → AuthView-Bpw90ooz.js} +2 -2
- package/dist/assets/{AuthView-sBgr4ab5.js.map → AuthView-Bpw90ooz.js.map} +1 -1
- package/dist/assets/{CanvasControls-WQFq3IW7.js → CanvasControls-CQPytmej.js} +2 -2
- package/dist/assets/{CanvasControls-WQFq3IW7.js.map → CanvasControls-CQPytmej.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-RoWelfJE.js → ChangePasswordView-tMFb4WIn.js} +2 -2
- package/dist/assets/{ChangePasswordView-RoWelfJE.js.map → ChangePasswordView-tMFb4WIn.js.map} +1 -1
- package/dist/assets/{CollectionParameter-o9-pyF-D.js → CollectionParameter-CwgJAh2M.js} +2 -2
- package/dist/assets/CollectionParameter-CwgJAh2M.js.map +1 -0
- package/dist/assets/{CredentialsView-loSi714I.js → CredentialsView-lvIyWvdA.js} +2 -2
- package/dist/assets/{CredentialsView-loSi714I.js.map → CredentialsView-lvIyWvdA.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-BwFUjELc.js → ExecutionsFilter-BSWo4-vK.js} +2 -2
- package/dist/assets/{ExecutionsFilter-BwFUjELc.js.map → ExecutionsFilter-BSWo4-vK.js.map} +1 -1
- package/dist/assets/{ExecutionsView-ClvBwy6K.js → ExecutionsView-Bztejjur.js} +2 -2
- package/dist/assets/{ExecutionsView-ClvBwy6K.js.map → ExecutionsView-Bztejjur.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-Da9ejE05.js → ForgotMyPasswordView-n_x-L3AV.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-Da9ejE05.js.map → ForgotMyPasswordView-n_x-L3AV.js.map} +1 -1
- package/dist/assets/{MainHeader-DCqd1GFf.js → MainHeader-P2afzgJI.js} +2 -2
- package/dist/assets/{MainHeader-DCqd1GFf.js.map → MainHeader-P2afzgJI.js.map} +1 -1
- package/dist/assets/{MainSidebar-D0hPq1hI.js → MainSidebar-CAwsaKp9.js} +2 -2
- package/dist/assets/{MainSidebar-D0hPq1hI.js.map → MainSidebar-CAwsaKp9.js.map} +1 -1
- package/dist/assets/{NodeCreation-Dv1vHhp7.js → NodeCreation-DHuCOx3T.js} +3 -3
- package/dist/assets/{NodeCreation-Dv1vHhp7.js.map → NodeCreation-DHuCOx3T.js.map} +1 -1
- package/dist/assets/{NodeCreator-CTyp0oWz.js → NodeCreator-CRVECYnB.js} +2 -2
- package/dist/assets/{NodeCreator-CTyp0oWz.js.map → NodeCreator-CRVECYnB.js.map} +1 -1
- package/dist/assets/{NodeView-D7js-jl0.js → NodeView-_cMwqhWw.js} +4 -4
- package/dist/assets/{NodeView-D7js-jl0.js.map → NodeView-_cMwqhWw.js.map} +1 -1
- package/dist/assets/{NodeView.v2-Db0N2ZpD.js → NodeView.v2-B5Hn0oJ1.js} +3 -3
- package/dist/assets/{NodeView.v2-Db0N2ZpD.js.map → NodeView.v2-B5Hn0oJ1.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-kI8CSFPH.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-BzALVLd6.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-kI8CSFPH.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-BzALVLd6.js.map} +1 -1
- package/dist/assets/{ProjectSettings-DV97_QgF.js → ProjectSettings-D3HQdHi6.js} +2 -2
- package/dist/assets/{ProjectSettings-DV97_QgF.js.map → ProjectSettings-D3HQdHi6.js.map} +1 -1
- package/dist/assets/{ProjectTabs-BiGImjZC.js → ProjectTabs-BjpVZIIc.js} +2 -2
- package/dist/assets/{ProjectTabs-BiGImjZC.js.map → ProjectTabs-BjpVZIIc.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-DzVbTLAw.js → PushConnectionTracker-Dt9-l7zj.js} +2 -2
- package/dist/assets/{PushConnectionTracker-DzVbTLAw.js.map → PushConnectionTracker-Dt9-l7zj.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-__5Cg0A9.js → ResourcesListLayout-CjzGJ-eS.js} +2 -2
- package/dist/assets/{ResourcesListLayout-__5Cg0A9.js.map → ResourcesListLayout-CjzGJ-eS.js.map} +1 -1
- package/dist/assets/{RunDataAi-BbEWhRis.js → RunDataAi-D3971Kwm.js} +2 -2
- package/dist/assets/{RunDataAi-BbEWhRis.js.map → RunDataAi-D3971Kwm.js.map} +1 -1
- package/dist/assets/{RunDataJson-7eRqOET2.js → RunDataJson-BLrjtyKU.js} +3 -3
- package/dist/assets/{RunDataJson-7eRqOET2.js.map → RunDataJson-BLrjtyKU.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-MHoSLGDw.js → RunDataJsonActions-CucOcrrR.js} +2 -2
- package/dist/assets/{RunDataJsonActions-MHoSLGDw.js.map → RunDataJsonActions-CucOcrrR.js.map} +1 -1
- package/dist/assets/{RunDataSchema-C2mrihIi.js → RunDataSchema-B-52gDNr.js} +2 -2
- package/dist/assets/{RunDataSchema-C2mrihIi.js.map → RunDataSchema-B-52gDNr.js.map} +1 -1
- package/dist/assets/{RunDataSearch-CzdgZA0H.js → RunDataSearch-ZA9rLECQ.js} +2 -2
- package/dist/assets/{RunDataSearch-CzdgZA0H.js.map → RunDataSearch-ZA9rLECQ.js.map} +1 -1
- package/dist/assets/{RunDataTable-DmxJXvGM.js → RunDataTable-DQx4IB1X.js} +2 -2
- package/dist/assets/{RunDataTable-DmxJXvGM.js.map → RunDataTable-DQx4IB1X.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-c0vvdXcj.js → SamlOnboarding-DS2hMTul.js} +2 -2
- package/dist/assets/{SamlOnboarding-c0vvdXcj.js.map → SamlOnboarding-DS2hMTul.js.map} +1 -1
- package/dist/assets/{SettingsApiView-BSPOTc-1.js → SettingsApiView-BEBQwqa4.js} +2 -2
- package/dist/assets/{SettingsApiView-BSPOTc-1.js.map → SettingsApiView-BEBQwqa4.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-3uiMscEF.js → SettingsCommunityNodesView-Zb5NN5TR.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-3uiMscEF.js.map → SettingsCommunityNodesView-Zb5NN5TR.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-C5fphQOi.js → SettingsExternalSecrets-BrQz9Rn5.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-C5fphQOi.js.map → SettingsExternalSecrets-BrQz9Rn5.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-Df4Rs6o0.js → SettingsFakeDoorView-BEtA0RJZ.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-Df4Rs6o0.js.map → SettingsFakeDoorView-BEtA0RJZ.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-C4lLeRwF.js → SettingsLdapView-BCqjlrE9.js} +2 -2
- package/dist/assets/{SettingsLdapView-C4lLeRwF.js.map → SettingsLdapView-BCqjlrE9.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-bLlhacNh.js → SettingsLogStreamingView-B3vDd25l.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-bLlhacNh.js.map → SettingsLogStreamingView-B3vDd25l.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-BgQQgYy0.js → SettingsPersonalView-BxS-VIeh.js} +2 -2
- package/dist/assets/{SettingsPersonalView-BgQQgYy0.js.map → SettingsPersonalView-BxS-VIeh.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-C2BP11mH.js → SettingsSourceControl-BBk56DIZ.js} +2 -2
- package/dist/assets/{SettingsSourceControl-C2BP11mH.js.map → SettingsSourceControl-BBk56DIZ.js.map} +1 -1
- package/dist/assets/{SettingsSso-CK7JB3Vy.js → SettingsSso-c-njHRi9.js} +2 -2
- package/dist/assets/{SettingsSso-CK7JB3Vy.js.map → SettingsSso-c-njHRi9.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-Cwa-TbVs.js → SettingsUsageAndPlan-DEnejDAt.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-Cwa-TbVs.js.map → SettingsUsageAndPlan-DEnejDAt.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-CbWtmro6.js → SettingsUsersView-CGkw80Ef.js} +2 -2
- package/dist/assets/{SettingsUsersView-CbWtmro6.js.map → SettingsUsersView-CGkw80Ef.js.map} +1 -1
- package/dist/assets/{SettingsView-Big9eFwZ.js → SettingsView-DGukO3mQ.js} +2 -2
- package/dist/assets/{SettingsView-Big9eFwZ.js.map → SettingsView-DGukO3mQ.js.map} +1 -1
- package/dist/assets/{SetupView-fjlw9brZ.js → SetupView-kY1bAskX.js} +2 -2
- package/dist/assets/{SetupView-fjlw9brZ.js.map → SetupView-kY1bAskX.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-Q123cR2R.js → SetupWorkflowCredentialsButton-DkvMQv2u.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-Q123cR2R.js.map → SetupWorkflowCredentialsButton-DkvMQv2u.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-BcaIdEbq.js → SetupWorkflowFromTemplateView-M7-z0Ko5.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-BcaIdEbq.js.map → SetupWorkflowFromTemplateView-M7-z0Ko5.js.map} +1 -1
- package/dist/assets/{SigninView-BqRZRDIW.js → SigninView-CsK0r98m.js} +2 -2
- package/dist/assets/{SigninView-BqRZRDIW.js.map → SigninView-CsK0r98m.js.map} +1 -1
- package/dist/assets/{SignoutView-Ds-XMHbB.js → SignoutView-BST1uR2G.js} +2 -2
- package/dist/assets/{SignoutView-Ds-XMHbB.js.map → SignoutView-BST1uR2G.js.map} +1 -1
- package/dist/assets/{SignupView-Du4cZWtz.js → SignupView-BKYxxBni.js} +2 -2
- package/dist/assets/{SignupView-Du4cZWtz.js.map → SignupView-BKYxxBni.js.map} +1 -1
- package/dist/assets/{TemplateDetails-DYa2o-Sg.js → TemplateDetails-D0r_U1xF.js} +2 -2
- package/dist/assets/{TemplateDetails-DYa2o-Sg.js.map → TemplateDetails-D0r_U1xF.js.map} +1 -1
- package/dist/assets/{TemplateList-BMaBMl6x.js → TemplateList-CDA5KNLL.js} +2 -2
- package/dist/assets/{TemplateList-BMaBMl6x.js.map → TemplateList-CDA5KNLL.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-g5_48W2g.js → TemplatesCollectionView-Sd-VkM2v.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-g5_48W2g.js.map → TemplatesCollectionView-Sd-VkM2v.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-CUEpPGLS.js → TemplatesSearchView-H6B_YHdj.js} +2 -2
- package/dist/assets/{TemplatesSearchView-CUEpPGLS.js.map → TemplatesSearchView-H6B_YHdj.js.map} +1 -1
- package/dist/assets/{TemplatesView-Dt7Yj05N.js → TemplatesView-C1e1VOA1.js} +2 -2
- package/dist/assets/{TemplatesView-Dt7Yj05N.js.map → TemplatesView-C1e1VOA1.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-NUQng_ec.js → TemplatesWorkflowView-EDlr8NNs.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-NUQng_ec.js.map → TemplatesWorkflowView-EDlr8NNs.js.map} +1 -1
- package/dist/assets/{VariablesView-CNbX7qiw.js → VariablesView-uUyY5gqA.js} +2 -2
- package/dist/assets/{VariablesView-CNbX7qiw.js.map → VariablesView-uUyY5gqA.js.map} +1 -1
- package/dist/assets/{WorkerView-6sYjvVRB.js → WorkerView-f9W1Yivk.js} +2 -2
- package/dist/assets/{WorkerView-6sYjvVRB.js.map → WorkerView-f9W1Yivk.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-BofJdorM.js → WorkflowActivator-Bh0oXchL.js} +2 -2
- package/dist/assets/{WorkflowActivator-BofJdorM.js.map → WorkflowActivator-Bh0oXchL.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-QgKEaHPH.js → WorkflowExecutionsInfoAccordion-DvgpWxaO.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-QgKEaHPH.js.map → WorkflowExecutionsInfoAccordion-DvgpWxaO.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-C8PoBPw1.js → WorkflowExecutionsLandingPage-DiqNejyi.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-C8PoBPw1.js.map → WorkflowExecutionsLandingPage-DiqNejyi.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-DXRMfRl4.js → WorkflowExecutionsPreview-BJqdf9CJ.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-DXRMfRl4.js.map → WorkflowExecutionsPreview-BJqdf9CJ.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsView-BFIJLItj.js → WorkflowExecutionsView-CY5alI5S.js} +2 -2
- package/dist/assets/{WorkflowExecutionsView-BFIJLItj.js.map → WorkflowExecutionsView-CY5alI5S.js.map} +1 -1
- package/dist/assets/{WorkflowHistory-DrJO6HE6.js → WorkflowHistory-BCAvzdJ2.js} +2 -2
- package/dist/assets/{WorkflowHistory-DrJO6HE6.js.map → WorkflowHistory-BCAvzdJ2.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-CWudc9OX.js → WorkflowOnboardingView-CZaNfPmP.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-CWudc9OX.js.map → WorkflowOnboardingView-CZaNfPmP.js.map} +1 -1
- package/dist/assets/{WorkflowPreview-CP6H-zD6.js → WorkflowPreview-CLfcNQ-Q.js} +2 -2
- package/dist/assets/{WorkflowPreview-CP6H-zD6.js.map → WorkflowPreview-CLfcNQ-Q.js.map} +1 -1
- package/dist/assets/{WorkflowsView-B8hr4JdS.js → WorkflowsView-BMDRVCFf.js} +2 -2
- package/dist/assets/{WorkflowsView-B8hr4JdS.js.map → WorkflowsView-BMDRVCFf.js.map} +1 -1
- package/dist/assets/{cloud-Nipuweza.js → cloud-D1wkxTEm.js} +2 -2
- package/dist/assets/{cloud-Nipuweza.js.map → cloud-D1wkxTEm.js.map} +1 -1
- package/dist/assets/{collaboration.store-CeJXF3gO.js → collaboration.store-zz8xH0zY.js} +2 -2
- package/dist/assets/{collaboration.store-CeJXF3gO.js.map → collaboration.store-zz8xH0zY.js.map} +1 -1
- package/dist/assets/{index-DeNtBxiT.js → index-DEwaaDne.js} +4 -4
- package/dist/assets/{index-DeNtBxiT.js.map → index-DEwaaDne.js.map} +1 -1
- package/dist/assets/{nodeCreator.store-D1MAzn2w.js → nodeCreator.store-DR3dfsvW.js} +2 -2
- package/dist/assets/{nodeCreator.store-D1MAzn2w.js.map → nodeCreator.store-DR3dfsvW.js.map} +1 -1
- package/dist/assets/{templateActions-DLB6SLyS.js → templateActions-DTyOnhvj.js} +2 -2
- package/dist/assets/{templateActions-DLB6SLyS.js.map → templateActions-DTyOnhvj.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-B_eoI-oc.js → useExecutionDebugging-vMuoV-iO.js} +2 -2
- package/dist/assets/{useExecutionDebugging-B_eoI-oc.js.map → useExecutionDebugging-vMuoV-iO.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-BAwOWjv8.js → useExecutionHelpers-C0lzavRV.js} +2 -2
- package/dist/assets/{useExecutionHelpers-BAwOWjv8.js.map → useExecutionHelpers-C0lzavRV.js.map} +1 -1
- package/dist/assets/{usePushConnection-1-1myIro.js → usePushConnection-3xfZ5wSJ.js} +2 -2
- package/dist/assets/{usePushConnection-1-1myIro.js.map → usePushConnection-3xfZ5wSJ.js.map} +1 -1
- package/dist/assets/{useViewStacks-D8rg90P0.js → useViewStacks-BSagsijV.js} +2 -2
- package/dist/assets/{useViewStacks-D8rg90P0.js.map → useViewStacks-BSagsijV.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-DrsL0BLR.js → useWorkflowActivate-BLjS7M0I.js} +2 -2
- package/dist/assets/{useWorkflowActivate-DrsL0BLR.js.map → useWorkflowActivate-BLjS7M0I.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-o9-pyF-D.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as U,e as k,G as D,az as K,aH as z,d as q,D as j,b as G,l as o,M as f,O as C,u as a,S as $,T as x,p as h,I as u,m as A,F as Q,a7 as X,U as g,ag as W}from"./vendor-Dv5OeN6t.js";import{d as J}from"./pinia-BAhPp3pQ.js";import{$ as Y,a4 as Z,ar as ee,l as te,j as ae,c_ as se,V as E,bF as V,a3 as oe,F as H,cf as le,c$ as re,d0 as ne,w as ie,d1 as de}from"./index-
|
|
2
|
-
//# sourceMappingURL=SetupWorkflowFromTemplateView-
|
|
1
|
+
import{r as U,e as k,G as D,az as K,aH as z,d as q,D as j,b as G,l as o,M as f,O as C,u as a,S as $,T as x,p as h,I as u,m as A,F as Q,a7 as X,U as g,ag as W}from"./vendor-Dv5OeN6t.js";import{d as J}from"./pinia-BAhPp3pQ.js";import{$ as Y,a4 as Z,ar as ee,l as te,j as ae,c_ as se,V as E,bF as V,a3 as oe,F as H,cf as le,c$ as re,d0 as ne,w as ie,d1 as de}from"./index-DEwaaDne.js";import{c as pe}from"./templateActions-DTyOnhvj.js";import{a8 as ue,av as ce,_ as me}from"./n8n-B6cfQsVX.js";import{T as fe}from"./TemplatesView-C1e1VOA1.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-9E8Shwsg.js";import"./lodash-es-BxV-E8rt.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-B9ocXky7.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-LluJPcs3.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const ye=J("setupTemplate",()=>{const l=U(""),e=U(!0),d=U(!1),c=Y(),y=Z(),i=ee(),v=te(),N=ae(),r=k(()=>l.value?c.getFullTemplateById(l.value):null),F=k(()=>{var s;return((s=r.value)==null?void 0:s.workflow.nodes)??[]}),{appCredentials:P,credentialOverrides:b,credentialUsages:t,credentialsByKey:n,nodesRequiringCredentialsSorted:m,numFilledCredentials:I,selectedCredentialIdByKey:T,setSelectedCredentialId:p,unsetSelectedCredential:R}=se(F),w=s=>{l.value=s},O=new Set(["httpBasicAuth","httpCustomAuth","httpDigestAuth","httpHeaderAuth","oAuth1Api","oAuth2Api","httpQueryAuth"]),L=()=>{for(const s of t.value){if(O.has(s.credentialType))continue;const _=i.getCredentialsByType(s.credentialType);_.length===1&&(T.value[s.key]=_[0].id)}},B=async()=>{r.value||!l.value||(await c.fetchTemplateById(l.value),L())};return{credentialsByKey:n,isLoading:e,isSaving:d,appCredentials:P,nodesRequiringCredentialsSorted:m,template:r,credentialUsages:t,selectedCredentialIdByKey:T,credentialOverrides:b,numFilledCredentials:I,createWorkflow:async s=>{const{router:_}=s,S=H();if(r.value)try{d.value=!0;const M=await pe({template:r.value,credentialOverrides:b.value,rootStore:v,workflowsStore:N,nodeTypeProvider:y});S.track("User closed cred setup",{completed:!0,creds_filled:I.value,creds_needed:t.value.length,workflow_id:M.id}),S.track("User inserted workflow template",{source:"workflow",template_id:V(l.value),wf_template_repo_session_id:c.currentSessionId},{withPostHog:!0}),S.track("User saved new workflow from template",{template_id:V(l.value),workflow_id:M.id,wf_template_repo_session_id:c.currentSessionId}),await _.replace({name:E.WORKFLOW,params:{name:M.id}})}finally{d.value=!1}},skipSetup:async({router:s})=>{const _=oe(),S=H();await _.run("templatesWorkflowView.openWorkflow",{source:"workflow",template_id:l.value,wf_template_repo_session_id:c.currentSessionId}),S.track("User closed cred setup",{completed:!1,creds_filled:0,creds_needed:t.value.length,workflow_id:null}),await s.replace({name:E.TEMPLATE_IMPORT,params:{id:l.value}})},init:async()=>{e.value=!0;try{T.value={},await Promise.all([i.fetchAllCredentials(),i.fetchCredentialTypes(!1),y.loadNodeTypesIfNotLoaded(),B()]),L()}finally{e.value=!1}},loadTemplateIfNeeded:B,setInitialCredentialSelection:L,setTemplateId:w,setSelectedCredentialId:p,unsetSelectedCredential:R}}),ve={key:1},we=D({__name:"SetupWorkflowFromTemplateView",setup(l){const e=ye(),d=ie(),c=le(),y=K(),i=z(),v=k(()=>Array.isArray(y.params.id)?y.params.id[0]:y.params.id),N=k(()=>{var t;return((t=e.template)==null?void 0:t.name)??"unknown"}),r=k(()=>!e.isLoading),F=k(()=>i.resolve({name:E.TEMPLATE_IMPORT,params:{id:v.value}}).fullPath);q(v,async t=>{e.setTemplateId(t),await e.loadTemplateIfNeeded()});const P=async t=>{t.preventDefault(),await e.skipSetup({router:i})},b=async()=>!e.template?!1:e.credentialUsages.length===0?(await e.skipSetup({router:i}),!0):!1;return e.setTemplateId(v.value),j(async()=>{c.isFeatureEnabled(re)||i.replace({name:E.TEMPLATE_IMPORT,params:{id:v.value}})}),G(async()=>{await e.init(),await b()}),(t,n)=>{const m=W("n8n-loading"),I=W("n8n-button"),T=W("n8n-tooltip");return o(),f(fe,{"go-back-enabled":!0},{header:C(()=>[r.value?(o(),f(a(ue),{key:0,tag:"h1",size:"2xlarge"},{default:C(()=>[$(x(a(d).baseText("templateSetup.title",{interpolate:{name:N.value}})),1)]),_:1})):(o(),f(m,{key:1,variant:"h1"}))]),content:C(()=>[h("div",{class:u(t.$style.grid)},[h("div",{class:u(t.$style.notice),"data-test-id":"info-callout"},[r.value?(o(),f(ne,{key:0,"app-credentials":a(e).appCredentials},null,8,["app-credentials"])):(o(),f(m,{key:1,variant:"p"}))],2),h("div",null,[r.value?(o(),A("ol",{key:0,class:u(t.$style.appCredentialsContainer)},[(o(!0),A(Q,null,X(a(e).credentialUsages,(p,R)=>(o(),f(de,{key:p.key,class:u(t.$style.appCredential),order:R+1,credentials:p,"selected-credential-id":a(e).selectedCredentialIdByKey[p.key],onCredentialSelected:n[0]||(n[0]=w=>a(e).setSelectedCredentialId(w.credentialUsageKey,w.credentialId)),onCredentialDeselected:n[1]||(n[1]=w=>a(e).unsetSelectedCredential(w.credentialUsageKey))},null,8,["class","order","credentials","selected-credential-id"]))),128))],2)):(o(),A("div",{key:1,class:u(t.$style.appCredentialsContainer)},[g(m,{class:u(t.$style.appCredential),variant:"p",rows:3},null,8,["class"]),g(m,{class:u(t.$style.appCredential),variant:"p",rows:3},null,8,["class"])],2))]),h("div",{class:u(t.$style.actions)},[g(a(ce),{href:F.value,"new-window":!1,onClick:n[2]||(n[2]=p=>P(p))},{default:C(()=>[$(x(a(d).baseText("templateSetup.skip")),1)]),_:1},8,["href"]),r.value?(o(),f(T,{key:0,content:a(d).baseText("templateSetup.continue.button.fillRemaining"),disabled:a(e).numFilledCredentials>0},{default:C(()=>[g(I,{size:"large",label:a(d).baseText("templateSetup.continue.button"),disabled:a(e).isSaving||a(e).numFilledCredentials===0,"data-test-id":"continue-button",onClick:n[3]||(n[3]=p=>a(e).createWorkflow({router:a(i)}))},null,8,["label","disabled"])]),_:1},8,["content","disabled"])):(o(),A("div",ve,[g(m,{variant:"button"})]))],2)],2)]),_:1})}}}),_e="_grid_6bgsx_1",ke="_notice_6bgsx_9",Te="_appCredentialsContainer_6bgsx_13",Se="_appCredential_6bgsx_13",Ce="_actions_6bgsx_24",ge={grid:_e,notice:ke,appCredentialsContainer:Te,appCredential:Se,actions:Ce},be={$style:ge},lt=me(we,[["__cssModules",be]]);export{lt as default};
|
|
2
|
+
//# sourceMappingURL=SetupWorkflowFromTemplateView-M7-z0Ko5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetupWorkflowFromTemplateView-BcaIdEbq.js","sources":["../../src/views/SetupWorkflowFromTemplateView/setupTemplate.store.ts","../../src/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport type { INodeUi } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { createWorkflowFromTemplate } from '@/utils/templates/templateActions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useCredentialSetupState } from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\nexport type NodeAndType = {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n};\n\nexport type RequiredCredentials = {\n\tnode: INodeUi;\n\tcredentialName: string;\n\tcredentialType: string;\n};\n\nexport type AppCredentialCount = {\n\tappName: string;\n\tcount: number;\n};\n\n/**\n * Store for managing the state of the SetupWorkflowFromTemplateView\n */\nexport const useSetupTemplateStore = defineStore('setupTemplate', () => {\n\t//#region State\n\n\tconst templateId = ref<string>('');\n\tconst isLoading = ref(true);\n\tconst isSaving = ref(false);\n\n\t//#endregion State\n\n\tconst templatesStore = useTemplatesStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst credentialsStore = useCredentialsStore();\n\tconst rootStore = useRootStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\t//#region Getters\n\n\tconst template = computed(() => {\n\t\treturn templateId.value ? templatesStore.getFullTemplateById(templateId.value) : null;\n\t});\n\n\tconst templateNodes = computed(() => {\n\t\treturn template.value?.workflow.nodes ?? [];\n\t});\n\n\tconst {\n\t\tappCredentials,\n\t\tcredentialOverrides,\n\t\tcredentialUsages,\n\t\tcredentialsByKey,\n\t\tnodesRequiringCredentialsSorted,\n\t\tnumFilledCredentials,\n\t\tselectedCredentialIdByKey,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t} = useCredentialSetupState(templateNodes);\n\n\t//#endregion Getters\n\n\t//#region Actions\n\n\tconst setTemplateId = (id: string) => {\n\t\ttemplateId.value = id;\n\t};\n\n\tconst ignoredAutoFillCredentialTypes = new Set([\n\t\t'httpBasicAuth',\n\t\t'httpCustomAuth',\n\t\t'httpDigestAuth',\n\t\t'httpHeaderAuth',\n\t\t'oAuth1Api',\n\t\t'oAuth2Api',\n\t\t'httpQueryAuth',\n\t]);\n\n\t/**\n\t * Selects initial credentials for the template. Credentials\n\t * need to be loaded before this.\n\t */\n\tconst setInitialCredentialSelection = () => {\n\t\tfor (const credUsage of credentialUsages.value) {\n\t\t\tif (ignoredAutoFillCredentialTypes.has(credUsage.credentialType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst availableCreds = credentialsStore.getCredentialsByType(credUsage.credentialType);\n\n\t\t\tif (availableCreds.length === 1) {\n\t\t\t\tselectedCredentialIdByKey.value[credUsage.key] = availableCreds[0].id;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Loads the template if it hasn't been loaded yet.\n\t */\n\tconst loadTemplateIfNeeded = async () => {\n\t\tif (!!template.value || !templateId.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait templatesStore.fetchTemplateById(templateId.value);\n\n\t\tsetInitialCredentialSelection();\n\t};\n\n\t/**\n\t * Initializes the store for a specific template.\n\t */\n\tconst init = async () => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tselectedCredentialIdByKey.value = {};\n\n\t\t\tawait Promise.all([\n\t\t\t\tcredentialsStore.fetchAllCredentials(),\n\t\t\t\tcredentialsStore.fetchCredentialTypes(false),\n\t\t\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tloadTemplateIfNeeded(),\n\t\t\t]);\n\n\t\t\tsetInitialCredentialSelection();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\t/**\n\t * Skips the setup and goes directly to the workflow view.\n\t */\n\tconst skipSetup = async ({ router }: { router: Router }) => {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst telemetry = useTelemetry();\n\n\t\tawait externalHooks.run('templatesWorkflowView.openWorkflow', {\n\t\t\tsource: 'workflow',\n\t\t\ttemplate_id: templateId.value,\n\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t});\n\n\t\ttelemetry.track('User closed cred setup', {\n\t\t\tcompleted: false,\n\t\t\tcreds_filled: 0,\n\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\tworkflow_id: null,\n\t\t});\n\n\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\tawait router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t};\n\n\t/**\n\t * Creates a workflow from the template and navigates to the workflow view.\n\t */\n\tconst createWorkflow = async (opts: { router: Router }) => {\n\t\tconst { router } = opts;\n\t\tconst telemetry = useTelemetry();\n\n\t\tif (!template.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tisSaving.value = true;\n\n\t\t\tconst createdWorkflow = await createWorkflowFromTemplate({\n\t\t\t\ttemplate: template.value,\n\t\t\t\tcredentialOverrides: credentialOverrides.value,\n\t\t\t\trootStore,\n\t\t\t\tworkflowsStore,\n\t\t\t\tnodeTypeProvider: nodeTypesStore,\n\t\t\t});\n\n\t\t\ttelemetry.track('User closed cred setup', {\n\t\t\t\tcompleted: true,\n\t\t\t\tcreds_filled: numFilledCredentials.value,\n\t\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t});\n\n\t\t\ttelemetry.track(\n\t\t\t\t'User inserted workflow template',\n\t\t\t\t{\n\t\t\t\t\tsource: 'workflow',\n\t\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t\t},\n\t\t\t\t{ withPostHog: true },\n\t\t\t);\n\n\t\t\ttelemetry.track('User saved new workflow from template', {\n\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t});\n\n\t\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW,\n\t\t\t\tparams: { name: createdWorkflow.id },\n\t\t\t});\n\t\t} finally {\n\t\t\tisSaving.value = false;\n\t\t}\n\t};\n\n\t//#endregion Actions\n\n\treturn {\n\t\tcredentialsByKey,\n\t\tisLoading,\n\t\tisSaving,\n\t\tappCredentials,\n\t\tnodesRequiringCredentialsSorted,\n\t\ttemplate,\n\t\tcredentialUsages,\n\t\tselectedCredentialIdByKey,\n\t\tcredentialOverrides,\n\t\tnumFilledCredentials,\n\t\tcreateWorkflow,\n\t\tskipSetup,\n\t\tinit,\n\t\tloadTemplateIfNeeded,\n\t\tsetInitialCredentialSelection,\n\t\tsetTemplateId,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { computed, onBeforeMount, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useSetupTemplateStore } from './setupTemplate.store';\nimport N8nHeading from 'n8n-design-system/components/N8nHeading';\nimport N8nLink from 'n8n-design-system/components/N8nLink';\nimport AppsRequiringCredsNotice from './AppsRequiringCredsNotice.vue';\nimport SetupTemplateFormStep from './SetupTemplateFormStep.vue';\nimport TemplatesView from '../TemplatesView.vue';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { usePostHog } from '@/stores/posthog.store';\n\n// Store\nconst setupTemplateStore = useSetupTemplateStore();\nconst i18n = useI18n();\nconst posthogStore = usePostHog();\n\n// Router\nconst route = useRoute();\nconst router = useRouter();\n\n//#region Computed\n\nconst templateId = computed(() =>\n\tArray.isArray(route.params.id) ? route.params.id[0] : route.params.id,\n);\nconst title = computed(() => setupTemplateStore.template?.name ?? 'unknown');\nconst isReady = computed(() => !setupTemplateStore.isLoading);\n\nconst skipSetupUrl = computed(() => {\n\tconst resolvedRoute = router.resolve({\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId.value },\n\t});\n\treturn resolvedRoute.fullPath;\n});\n\n//#endregion Computed\n\n//#region Watchers\n\nwatch(templateId, async (newTemplateId) => {\n\tsetupTemplateStore.setTemplateId(newTemplateId);\n\tawait setupTemplateStore.loadTemplateIfNeeded();\n});\n\n//#endregion Watchers\n\n//#region Methods\n\nconst onSkipSetup = async (event: MouseEvent) => {\n\tevent.preventDefault();\n\n\tawait setupTemplateStore.skipSetup({\n\t\trouter,\n\t});\n};\n\nconst skipIfTemplateHasNoCreds = async () => {\n\tconst isTemplateLoaded = !!setupTemplateStore.template;\n\tif (!isTemplateLoaded) {\n\t\treturn false;\n\t}\n\n\tif (setupTemplateStore.credentialUsages.length === 0) {\n\t\tawait setupTemplateStore.skipSetup({\n\t\t\trouter,\n\t\t});\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//#endregion Methods\n\n//#region Lifecycle hooks\n\nsetupTemplateStore.setTemplateId(templateId.value);\n\nonBeforeMount(async () => {\n\tif (!posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT)) {\n\t\tvoid router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t}\n});\n\nonMounted(async () => {\n\tawait setupTemplateStore.init();\n\tawait skipIfTemplateHasNoCreds();\n});\n\n//#endregion Lifecycle hooks\n</script>\n\n<template>\n\t<TemplatesView :go-back-enabled=\"true\">\n\t\t<template #header>\n\t\t\t<N8nHeading v-if=\"isReady\" tag=\"h1\" size=\"2xlarge\"\n\t\t\t\t>{{ i18n.baseText('templateSetup.title', { interpolate: { name: title } }) }}\n\t\t\t</N8nHeading>\n\t\t\t<n8n-loading v-else variant=\"h1\" />\n\t\t</template>\n\n\t\t<template #content>\n\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t<div :class=\"$style.notice\" data-test-id=\"info-callout\">\n\t\t\t\t\t<AppsRequiringCredsNotice\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:app-credentials=\"setupTemplateStore.appCredentials\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-loading v-else variant=\"p\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<ol v-if=\"isReady\" :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<SetupTemplateFormStep\n\t\t\t\t\t\t\tv-for=\"(credentials, index) in setupTemplateStore.credentialUsages\"\n\t\t\t\t\t\t\t:key=\"credentials.key\"\n\t\t\t\t\t\t\t:class=\"$style.appCredential\"\n\t\t\t\t\t\t\t:order=\"index + 1\"\n\t\t\t\t\t\t\t:credentials=\"credentials\"\n\t\t\t\t\t\t\t:selected-credential-id=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.selectedCredentialIdByKey[credentials.key]\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-selected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.setSelectedCredentialId(\n\t\t\t\t\t\t\t\t\t$event.credentialUsageKey,\n\t\t\t\t\t\t\t\t\t$event.credentialId,\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@credential-deselected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.unsetSelectedCredential($event.credentialUsageKey)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ol>\n\t\t\t\t\t<div v-else :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.actions\">\n\t\t\t\t\t<N8nLink :href=\"skipSetupUrl\" :new-window=\"false\" @click=\"onSkipSetup($event)\">{{\n\t\t\t\t\t\ti18n.baseText('templateSetup.skip')\n\t\t\t\t\t}}</N8nLink>\n\n\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:content=\"i18n.baseText('templateSetup.continue.button.fillRemaining')\"\n\t\t\t\t\t\t:disabled=\"setupTemplateStore.numFilledCredentials > 0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t:label=\"i18n.baseText('templateSetup.continue.button')\"\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.isSaving || setupTemplateStore.numFilledCredentials === 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tdata-test-id=\"continue-button\"\n\t\t\t\t\t\t\t@click=\"setupTemplateStore.createWorkflow({ router })\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t<n8n-loading variant=\"button\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</TemplatesView>\n</template>\n\n<style lang=\"scss\" module>\n.grid {\n\tmargin: 0 auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmax-width: 768px;\n}\n\n.notice {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.appCredentialsContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-2xl);\n}\n\n.appCredential:not(:last-of-type) {\n\tpadding-bottom: var(--spacing-2xl);\n\tborder-bottom: 1px solid var(--color-foreground-light);\n}\n\n.actions {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-top: var(--spacing-3xl);\n\tmargin-bottom: var(--spacing-3xl);\n}\n</style>\n"],"names":["useSetupTemplateStore","defineStore","templateId","ref","isLoading","isSaving","templatesStore","useTemplatesStore","nodeTypesStore","useNodeTypesStore","credentialsStore","useCredentialsStore","rootStore","useRootStore","workflowsStore","useWorkflowsStore","template","computed","templateNodes","_a","appCredentials","credentialOverrides","credentialUsages","credentialsByKey","nodesRequiringCredentialsSorted","numFilledCredentials","selectedCredentialIdByKey","setSelectedCredentialId","unsetSelectedCredential","useCredentialSetupState","setTemplateId","id","ignoredAutoFillCredentialTypes","setInitialCredentialSelection","credUsage","availableCreds","loadTemplateIfNeeded","opts","router","telemetry","useTelemetry","createdWorkflow","createWorkflowFromTemplate","tryToParseNumber","VIEWS","externalHooks","useExternalHooks","setupTemplateStore","i18n","useI18n","posthogStore","usePostHog","route","useRoute","useRouter","title","isReady","skipSetupUrl","watch","newTemplateId","onSkipSetup","event","skipIfTemplateHasNoCreds","onBeforeMount","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","onMounted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SetupWorkflowFromTemplateView-M7-z0Ko5.js","sources":["../../src/views/SetupWorkflowFromTemplateView/setupTemplate.store.ts","../../src/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport type { INodeUi } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { createWorkflowFromTemplate } from '@/utils/templates/templateActions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useCredentialSetupState } from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\nexport type NodeAndType = {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n};\n\nexport type RequiredCredentials = {\n\tnode: INodeUi;\n\tcredentialName: string;\n\tcredentialType: string;\n};\n\nexport type AppCredentialCount = {\n\tappName: string;\n\tcount: number;\n};\n\n/**\n * Store for managing the state of the SetupWorkflowFromTemplateView\n */\nexport const useSetupTemplateStore = defineStore('setupTemplate', () => {\n\t//#region State\n\n\tconst templateId = ref<string>('');\n\tconst isLoading = ref(true);\n\tconst isSaving = ref(false);\n\n\t//#endregion State\n\n\tconst templatesStore = useTemplatesStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst credentialsStore = useCredentialsStore();\n\tconst rootStore = useRootStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\t//#region Getters\n\n\tconst template = computed(() => {\n\t\treturn templateId.value ? templatesStore.getFullTemplateById(templateId.value) : null;\n\t});\n\n\tconst templateNodes = computed(() => {\n\t\treturn template.value?.workflow.nodes ?? [];\n\t});\n\n\tconst {\n\t\tappCredentials,\n\t\tcredentialOverrides,\n\t\tcredentialUsages,\n\t\tcredentialsByKey,\n\t\tnodesRequiringCredentialsSorted,\n\t\tnumFilledCredentials,\n\t\tselectedCredentialIdByKey,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t} = useCredentialSetupState(templateNodes);\n\n\t//#endregion Getters\n\n\t//#region Actions\n\n\tconst setTemplateId = (id: string) => {\n\t\ttemplateId.value = id;\n\t};\n\n\tconst ignoredAutoFillCredentialTypes = new Set([\n\t\t'httpBasicAuth',\n\t\t'httpCustomAuth',\n\t\t'httpDigestAuth',\n\t\t'httpHeaderAuth',\n\t\t'oAuth1Api',\n\t\t'oAuth2Api',\n\t\t'httpQueryAuth',\n\t]);\n\n\t/**\n\t * Selects initial credentials for the template. Credentials\n\t * need to be loaded before this.\n\t */\n\tconst setInitialCredentialSelection = () => {\n\t\tfor (const credUsage of credentialUsages.value) {\n\t\t\tif (ignoredAutoFillCredentialTypes.has(credUsage.credentialType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst availableCreds = credentialsStore.getCredentialsByType(credUsage.credentialType);\n\n\t\t\tif (availableCreds.length === 1) {\n\t\t\t\tselectedCredentialIdByKey.value[credUsage.key] = availableCreds[0].id;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Loads the template if it hasn't been loaded yet.\n\t */\n\tconst loadTemplateIfNeeded = async () => {\n\t\tif (!!template.value || !templateId.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait templatesStore.fetchTemplateById(templateId.value);\n\n\t\tsetInitialCredentialSelection();\n\t};\n\n\t/**\n\t * Initializes the store for a specific template.\n\t */\n\tconst init = async () => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tselectedCredentialIdByKey.value = {};\n\n\t\t\tawait Promise.all([\n\t\t\t\tcredentialsStore.fetchAllCredentials(),\n\t\t\t\tcredentialsStore.fetchCredentialTypes(false),\n\t\t\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tloadTemplateIfNeeded(),\n\t\t\t]);\n\n\t\t\tsetInitialCredentialSelection();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\t/**\n\t * Skips the setup and goes directly to the workflow view.\n\t */\n\tconst skipSetup = async ({ router }: { router: Router }) => {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst telemetry = useTelemetry();\n\n\t\tawait externalHooks.run('templatesWorkflowView.openWorkflow', {\n\t\t\tsource: 'workflow',\n\t\t\ttemplate_id: templateId.value,\n\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t});\n\n\t\ttelemetry.track('User closed cred setup', {\n\t\t\tcompleted: false,\n\t\t\tcreds_filled: 0,\n\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\tworkflow_id: null,\n\t\t});\n\n\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\tawait router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t};\n\n\t/**\n\t * Creates a workflow from the template and navigates to the workflow view.\n\t */\n\tconst createWorkflow = async (opts: { router: Router }) => {\n\t\tconst { router } = opts;\n\t\tconst telemetry = useTelemetry();\n\n\t\tif (!template.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tisSaving.value = true;\n\n\t\t\tconst createdWorkflow = await createWorkflowFromTemplate({\n\t\t\t\ttemplate: template.value,\n\t\t\t\tcredentialOverrides: credentialOverrides.value,\n\t\t\t\trootStore,\n\t\t\t\tworkflowsStore,\n\t\t\t\tnodeTypeProvider: nodeTypesStore,\n\t\t\t});\n\n\t\t\ttelemetry.track('User closed cred setup', {\n\t\t\t\tcompleted: true,\n\t\t\t\tcreds_filled: numFilledCredentials.value,\n\t\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t});\n\n\t\t\ttelemetry.track(\n\t\t\t\t'User inserted workflow template',\n\t\t\t\t{\n\t\t\t\t\tsource: 'workflow',\n\t\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t\t},\n\t\t\t\t{ withPostHog: true },\n\t\t\t);\n\n\t\t\ttelemetry.track('User saved new workflow from template', {\n\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t});\n\n\t\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW,\n\t\t\t\tparams: { name: createdWorkflow.id },\n\t\t\t});\n\t\t} finally {\n\t\t\tisSaving.value = false;\n\t\t}\n\t};\n\n\t//#endregion Actions\n\n\treturn {\n\t\tcredentialsByKey,\n\t\tisLoading,\n\t\tisSaving,\n\t\tappCredentials,\n\t\tnodesRequiringCredentialsSorted,\n\t\ttemplate,\n\t\tcredentialUsages,\n\t\tselectedCredentialIdByKey,\n\t\tcredentialOverrides,\n\t\tnumFilledCredentials,\n\t\tcreateWorkflow,\n\t\tskipSetup,\n\t\tinit,\n\t\tloadTemplateIfNeeded,\n\t\tsetInitialCredentialSelection,\n\t\tsetTemplateId,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { computed, onBeforeMount, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useSetupTemplateStore } from './setupTemplate.store';\nimport N8nHeading from 'n8n-design-system/components/N8nHeading';\nimport N8nLink from 'n8n-design-system/components/N8nLink';\nimport AppsRequiringCredsNotice from './AppsRequiringCredsNotice.vue';\nimport SetupTemplateFormStep from './SetupTemplateFormStep.vue';\nimport TemplatesView from '../TemplatesView.vue';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { usePostHog } from '@/stores/posthog.store';\n\n// Store\nconst setupTemplateStore = useSetupTemplateStore();\nconst i18n = useI18n();\nconst posthogStore = usePostHog();\n\n// Router\nconst route = useRoute();\nconst router = useRouter();\n\n//#region Computed\n\nconst templateId = computed(() =>\n\tArray.isArray(route.params.id) ? route.params.id[0] : route.params.id,\n);\nconst title = computed(() => setupTemplateStore.template?.name ?? 'unknown');\nconst isReady = computed(() => !setupTemplateStore.isLoading);\n\nconst skipSetupUrl = computed(() => {\n\tconst resolvedRoute = router.resolve({\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId.value },\n\t});\n\treturn resolvedRoute.fullPath;\n});\n\n//#endregion Computed\n\n//#region Watchers\n\nwatch(templateId, async (newTemplateId) => {\n\tsetupTemplateStore.setTemplateId(newTemplateId);\n\tawait setupTemplateStore.loadTemplateIfNeeded();\n});\n\n//#endregion Watchers\n\n//#region Methods\n\nconst onSkipSetup = async (event: MouseEvent) => {\n\tevent.preventDefault();\n\n\tawait setupTemplateStore.skipSetup({\n\t\trouter,\n\t});\n};\n\nconst skipIfTemplateHasNoCreds = async () => {\n\tconst isTemplateLoaded = !!setupTemplateStore.template;\n\tif (!isTemplateLoaded) {\n\t\treturn false;\n\t}\n\n\tif (setupTemplateStore.credentialUsages.length === 0) {\n\t\tawait setupTemplateStore.skipSetup({\n\t\t\trouter,\n\t\t});\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//#endregion Methods\n\n//#region Lifecycle hooks\n\nsetupTemplateStore.setTemplateId(templateId.value);\n\nonBeforeMount(async () => {\n\tif (!posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT)) {\n\t\tvoid router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t}\n});\n\nonMounted(async () => {\n\tawait setupTemplateStore.init();\n\tawait skipIfTemplateHasNoCreds();\n});\n\n//#endregion Lifecycle hooks\n</script>\n\n<template>\n\t<TemplatesView :go-back-enabled=\"true\">\n\t\t<template #header>\n\t\t\t<N8nHeading v-if=\"isReady\" tag=\"h1\" size=\"2xlarge\"\n\t\t\t\t>{{ i18n.baseText('templateSetup.title', { interpolate: { name: title } }) }}\n\t\t\t</N8nHeading>\n\t\t\t<n8n-loading v-else variant=\"h1\" />\n\t\t</template>\n\n\t\t<template #content>\n\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t<div :class=\"$style.notice\" data-test-id=\"info-callout\">\n\t\t\t\t\t<AppsRequiringCredsNotice\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:app-credentials=\"setupTemplateStore.appCredentials\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-loading v-else variant=\"p\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<ol v-if=\"isReady\" :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<SetupTemplateFormStep\n\t\t\t\t\t\t\tv-for=\"(credentials, index) in setupTemplateStore.credentialUsages\"\n\t\t\t\t\t\t\t:key=\"credentials.key\"\n\t\t\t\t\t\t\t:class=\"$style.appCredential\"\n\t\t\t\t\t\t\t:order=\"index + 1\"\n\t\t\t\t\t\t\t:credentials=\"credentials\"\n\t\t\t\t\t\t\t:selected-credential-id=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.selectedCredentialIdByKey[credentials.key]\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-selected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.setSelectedCredentialId(\n\t\t\t\t\t\t\t\t\t$event.credentialUsageKey,\n\t\t\t\t\t\t\t\t\t$event.credentialId,\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@credential-deselected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.unsetSelectedCredential($event.credentialUsageKey)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ol>\n\t\t\t\t\t<div v-else :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.actions\">\n\t\t\t\t\t<N8nLink :href=\"skipSetupUrl\" :new-window=\"false\" @click=\"onSkipSetup($event)\">{{\n\t\t\t\t\t\ti18n.baseText('templateSetup.skip')\n\t\t\t\t\t}}</N8nLink>\n\n\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:content=\"i18n.baseText('templateSetup.continue.button.fillRemaining')\"\n\t\t\t\t\t\t:disabled=\"setupTemplateStore.numFilledCredentials > 0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t:label=\"i18n.baseText('templateSetup.continue.button')\"\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.isSaving || setupTemplateStore.numFilledCredentials === 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tdata-test-id=\"continue-button\"\n\t\t\t\t\t\t\t@click=\"setupTemplateStore.createWorkflow({ router })\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t<n8n-loading variant=\"button\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</TemplatesView>\n</template>\n\n<style lang=\"scss\" module>\n.grid {\n\tmargin: 0 auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmax-width: 768px;\n}\n\n.notice {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.appCredentialsContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-2xl);\n}\n\n.appCredential:not(:last-of-type) {\n\tpadding-bottom: var(--spacing-2xl);\n\tborder-bottom: 1px solid var(--color-foreground-light);\n}\n\n.actions {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-top: var(--spacing-3xl);\n\tmargin-bottom: var(--spacing-3xl);\n}\n</style>\n"],"names":["useSetupTemplateStore","defineStore","templateId","ref","isLoading","isSaving","templatesStore","useTemplatesStore","nodeTypesStore","useNodeTypesStore","credentialsStore","useCredentialsStore","rootStore","useRootStore","workflowsStore","useWorkflowsStore","template","computed","templateNodes","_a","appCredentials","credentialOverrides","credentialUsages","credentialsByKey","nodesRequiringCredentialsSorted","numFilledCredentials","selectedCredentialIdByKey","setSelectedCredentialId","unsetSelectedCredential","useCredentialSetupState","setTemplateId","id","ignoredAutoFillCredentialTypes","setInitialCredentialSelection","credUsage","availableCreds","loadTemplateIfNeeded","opts","router","telemetry","useTelemetry","createdWorkflow","createWorkflowFromTemplate","tryToParseNumber","VIEWS","externalHooks","useExternalHooks","setupTemplateStore","i18n","useI18n","posthogStore","usePostHog","route","useRoute","useRouter","title","isReady","skipSetupUrl","watch","newTemplateId","onSkipSetup","event","skipIfTemplateHasNoCreds","onBeforeMount","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","onMounted"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{L as A,A as V}from"./AuthView-
|
|
2
|
-
//# sourceMappingURL=SigninView-
|
|
1
|
+
import{L as A,A as V}from"./AuthView-Bpw90ooz.js";import{u as T,cT as I,a as _,M as E,cU as v,R as B,i as N,b as L,V as D,cV as U}from"./index-DEwaaDne.js";import{m as R}from"./pinia-BAhPp3pQ.js";import{G as $,l as i,m as k,p as s,U as m,I as a,O as f,S as g,T as c,M as u,R as n,ag as r}from"./vendor-Dv5OeN6t.js";import{_ as F}from"./n8n-B6cfQsVX.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-9E8Shwsg.js";import"./lodash-es-BxV-E8rt.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-B9ocXky7.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-LluJPcs3.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const h={MFA_TOKEN:"MFA_TOKEN",MFA_RECOVERY_CODE:"MFA_RECOVERY_CODE"},P=$({name:"MfaView",components:{Logo:A},props:{reportError:Boolean},setup(){return{...T()}},data(){return{hasAnyChanges:!1,formBus:I,formInputs:null,showRecoveryCodeForm:!1,verifyingMfaToken:!1,formError:""}},async mounted(){this.formInputs=[this.mfaTokenFieldWithDefaults()]},computed:{...R(_)},methods:{onRecoveryCodeClick(){this.formError="",this.showRecoveryCodeForm=!0,this.hasAnyChanges=!1,this.formInputs=[this.mfaRecoveryCodeFieldWithDefaults()],this.$emit("onFormChanged",h.MFA_RECOVERY_CODE)},onBackClick(){if(!this.showRecoveryCodeForm){this.$emit("onBackClick",h.MFA_TOKEN);return}this.showRecoveryCodeForm=!1,this.hasAnyChanges=!0,this.formInputs=[this.mfaTokenFieldWithDefaults()],this.$emit("onBackClick",h.MFA_RECOVERY_CODE)},onInput({target:{value:e,name:o}}){const t=o==="token",l=t?E:v;if(e.length!==l){this.hasAnyChanges=!1;return}this.verifyingMfaToken=!0,this.hasAnyChanges=!0;const d=t?{token:e,recoveryCode:""}:{token:"",recoveryCode:e};this.onSubmit(d).catch(()=>{}).finally(()=>this.verifyingMfaToken=!1)},async onSubmit(e){this.formError=this.showRecoveryCodeForm?this.$locale.baseText("mfa.recovery.invalid"):this.$locale.baseText("mfa.code.invalid"),this.$emit("submit",e)},onSaveClick(){this.formBus.emit("submit")},mfaTokenFieldWithDefaults(){return this.formField("token",this.$locale.baseText("mfa.code.input.label"),this.$locale.baseText("mfa.code.input.placeholder"),E)},mfaRecoveryCodeFieldWithDefaults(){return this.formField("recoveryCode",this.$locale.baseText("mfa.recovery.input.label"),this.$locale.baseText("mfa.recovery.input.placeholder"),v)},formField(e,o,t,l,d=!0){return{name:e,initialValue:"",properties:{label:o,placeholder:t,maxlength:l,capitalize:!0,validateOnBlur:!1,focusInitially:d}}}}}),W="_container_1mdjt_5",z="_logoContainer_1mdjt_16",j="_formContainer_1mdjt_21",G="_headerContainer_1mdjt_25",H="_formError_1mdjt_30",q="_recoveryCodeLink_1mdjt_34",Y="_infoBox_1mdjt_38",K={container:W,logoContainer:z,formContainer:j,headerContainer:G,formError:H,recoveryCodeLink:q,infoBox:Y};function Q(e,o,t,l,d,M){const p=r("Logo"),C=r("n8n-heading"),O=r("n8n-form-inputs"),b=r("n8n-text"),w=r("n8n-button"),S=r("n8n-card");return i(),k("div",{class:a(e.$style.container)},[s("div",{class:a(e.$style.logoContainer)},[m(p)],2),m(S,null,{default:f(()=>[s("div",{class:a(e.$style.headerContainer)},[m(C,{size:"xlarge",color:"text-dark"},{default:f(()=>[g(c(e.showRecoveryCodeForm?e.$locale.baseText("mfa.recovery.modal.title"):e.$locale.baseText("mfa.code.modal.title")),1)]),_:1})],2),s("div",{class:a([e.$style.formContainer,e.reportError?e.$style.formError:""])},[e.formInputs?(i(),u(O,{key:0,"data-test-id":"mfa-login-form",inputs:e.formInputs,"event-bus":e.formBus,onInput:e.onInput,onSubmit:e.onSubmit},null,8,["inputs","event-bus","onInput","onSubmit"])):n("",!0),s("div",{class:a(e.$style.infoBox)},[!e.showRecoveryCodeForm&&!e.reportError?(i(),u(b,{key:0,size:"small",color:"text-base",bold:!1},{default:f(()=>[g(c(e.$locale.baseText("mfa.code.input.info"))+" ",1),s("a",{"data-test-id":"mfa-enter-recovery-code-button",onClick:o[0]||(o[0]=(...y)=>e.onRecoveryCodeClick&&e.onRecoveryCodeClick(...y))},c(e.$locale.baseText("mfa.code.input.info.action")),1)]),_:1})):n("",!0),e.reportError?(i(),u(b,{key:1,color:"danger",size:"small"},{default:f(()=>[g(c(e.formError)+" ",1),e.showRecoveryCodeForm?n("",!0):(i(),k("a",{key:0,class:a(e.$style.recoveryCodeLink),onClick:o[1]||(o[1]=(...y)=>e.onRecoveryCodeClick&&e.onRecoveryCodeClick(...y))},c(e.$locale.baseText("mfa.recovery.input.info.action")),3))]),_:1})):n("",!0)],2)],2),s("div",null,[m(w,{float:"right",loading:e.verifyingMfaToken,label:e.showRecoveryCodeForm?e.$locale.baseText("mfa.recovery.button.verify"):e.$locale.baseText("mfa.code.button.continue"),size:"large",disabled:!e.hasAnyChanges,onClick:e.onSaveClick},null,8,["loading","label","disabled","onClick"]),m(w,{float:"left",label:e.$locale.baseText("mfa.button.back"),size:"large",type:"tertiary",onClick:e.onBackClick},null,8,["label","onClick"])])]),_:1})],2)}const X={$style:K},J=F(P,[["render",Q],["__cssModules",X]]),Z=$({name:"SigninView",components:{AuthView:V,MfaView:J},setup(){return{...T()}},data(){return{FORM_CONFIG:{},loading:!1,showMfaView:!1,email:"",password:"",reportError:!1}},computed:{...R(_,L,N,B),userHasMfaEnabled(){var e;return!!((e=this.usersStore.currentUser)!=null&&e.mfaEnabled)}},mounted(){let e=this.$locale.baseText("auth.email");const o=this.settingsStore.ldapLoginLabel,t=this.settingsStore.isLdapLoginEnabled;t&&o&&(e=o),this.FORM_CONFIG={title:this.$locale.baseText("auth.signin"),buttonText:this.$locale.baseText("auth.signin"),redirectText:this.$locale.baseText("forgotPassword"),inputs:[{name:"email",properties:{label:e,type:"email",required:!0,...!t&&{validationRules:[{name:"VALID_EMAIL"}]},showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"email",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",required:!0,showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"current-password",capitalize:!0}}]},this.settingsStore.isDesktopDeployment||(this.FORM_CONFIG.redirectLink="/forgot-password")},methods:{async onMFASubmitted(e){await this.login({email:this.email,password:this.password,token:e.token,recoveryCode:e.recoveryCode})},async onEmailPasswordSubmitted(e){await this.login(e)},isRedirectSafe(){const e=this.getRedirectQueryParameter();return e.startsWith("/")||e.startsWith(window.location.origin)},getRedirectQueryParameter(){var o,t;let e="";return typeof((o=this.$route.query)==null?void 0:o.redirect)=="string"&&(e=decodeURIComponent((t=this.$route.query)==null?void 0:t.redirect)),e},async login(e){try{if(this.loading=!0,await this.usersStore.loginWithCreds({email:e.email,password:e.password,mfaToken:e.token,mfaRecoveryCode:e.recoveryCode}),this.loading=!1,this.settingsStore.isCloudDeployment)try{await this.cloudPlanStore.checkForCloudPlanData()}catch(o){console.warn("Failed to check for cloud plan data",o)}if(await this.settingsStore.getSettings(),this.clearAllStickyNotifications(),this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_success":"success"}),this.isRedirectSafe()){const o=this.getRedirectQueryParameter();if(o.startsWith("http")){window.location.href=o;return}this.$router.push(o);return}await this.$router.push({name:D.HOMEPAGE})}catch(o){if(o.errorCode===U){this.showMfaView=!0,this.cacheCredentials(e);return}if(this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_token_rejected":"credentials_error"}),!this.showMfaView){this.showError(o,this.$locale.baseText("auth.signin.error")),this.loading=!1;return}this.reportError=!0}},onBackClick(e){this.reportError=!1,e===h.MFA_TOKEN&&(this.showMfaView=!1,this.loading=!1)},onFormChanged(e){e===h.MFA_RECOVERY_CODE&&(this.reportError=!1)},cacheCredentials(e){this.email=e.email,this.password=e.password}}});function x(e,o,t,l,d,M){const p=r("AuthView"),C=r("MfaView");return i(),k("div",null,[e.showMfaView?n("",!0):(i(),u(p,{key:0,form:e.FORM_CONFIG,"form-loading":e.loading,"with-sso":!0,"data-test-id":"signin-form",onSubmit:e.onEmailPasswordSubmitted},null,8,["form","form-loading","onSubmit"])),e.showMfaView?(i(),u(C,{key:1,"report-error":e.reportError,onSubmit:e.onMFASubmitted,onOnBackClick:e.onBackClick,onOnFormChanged:e.onFormChanged},null,8,["report-error","onSubmit","onOnBackClick","onOnFormChanged"])):n("",!0)])}const Oe=F(Z,[["render",x]]);export{Oe as default};
|
|
2
|
+
//# sourceMappingURL=SigninView-CsK0r98m.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SigninView-BqRZRDIW.js","sources":["../../src/views/MfaView.vue","../../src/views/SigninView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div :class=\"$style.logoContainer\">\n\t\t\t<Logo />\n\t\t</div>\n\t\t<n8n-card>\n\t\t\t<div :class=\"$style.headerContainer\">\n\t\t\t\t<n8n-heading size=\"xlarge\" color=\"text-dark\">{{\n\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t? $locale.baseText('mfa.recovery.modal.title')\n\t\t\t\t\t\t: $locale.baseText('mfa.code.modal.title')\n\t\t\t\t}}</n8n-heading>\n\t\t\t</div>\n\t\t\t<div :class=\"[$style.formContainer, reportError ? $style.formError : '']\">\n\t\t\t\t<n8n-form-inputs\n\t\t\t\t\tv-if=\"formInputs\"\n\t\t\t\t\tdata-test-id=\"mfa-login-form\"\n\t\t\t\t\t:inputs=\"formInputs\"\n\t\t\t\t\t:event-bus=\"formBus\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t/>\n\t\t\t\t<div :class=\"$style.infoBox\">\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm && !reportError\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\t\t>{{ $locale.baseText('mfa.code.input.info') }}\n\t\t\t\t\t\t<a data-test-id=\"mfa-enter-recovery-code-button\" @click=\"onRecoveryCodeClick\">{{\n\t\t\t\t\t\t\t$locale.baseText('mfa.code.input.info.action')\n\t\t\t\t\t\t}}</a></n8n-text\n\t\t\t\t\t>\n\t\t\t\t\t<n8n-text v-if=\"reportError\" color=\"danger\" size=\"small\"\n\t\t\t\t\t\t>{{ formError }}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm\"\n\t\t\t\t\t\t\t:class=\"$style.recoveryCodeLink\"\n\t\t\t\t\t\t\t@click=\"onRecoveryCodeClick\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ $locale.baseText('mfa.recovery.input.info.action') }}</a\n\t\t\t\t\t\t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"right\"\n\t\t\t\t\t:loading=\"verifyingMfaToken\"\n\t\t\t\t\t:label=\"\n\t\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t\t? $locale.baseText('mfa.recovery.button.verify')\n\t\t\t\t\t\t\t: $locale.baseText('mfa.code.button.continue')\n\t\t\t\t\t\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:disabled=\"!hasAnyChanges\"\n\t\t\t\t\t@click=\"onSaveClick\"\n\t\t\t\t/>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"left\"\n\t\t\t\t\t:label=\"$locale.baseText('mfa.button.back')\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t@click=\"onBackClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-card>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { IFormInputs } from '@/Interface';\nimport Logo from '../components/Logo.vue';\nimport {\n\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n} from '@/constants';\nimport { useUsersStore } from '@/stores/users.store';\nimport { mapStores } from 'pinia';\nimport { mfaEventBus } from '@/event-bus';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport const FORM = {\n\tMFA_TOKEN: 'MFA_TOKEN',\n\tMFA_RECOVERY_CODE: 'MFA_RECOVERY_CODE',\n} as const;\n\nexport default defineComponent({\n\tname: 'MfaView',\n\tcomponents: {\n\t\tLogo,\n\t},\n\tprops: {\n\t\treportError: Boolean,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\thasAnyChanges: false,\n\t\t\tformBus: mfaEventBus,\n\t\t\tformInputs: null as null | IFormInputs,\n\t\t\tshowRecoveryCodeForm: false,\n\t\t\tverifyingMfaToken: false,\n\t\t\tformError: '',\n\t\t};\n\t},\n\tasync mounted() {\n\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmethods: {\n\t\tonRecoveryCodeClick() {\n\t\t\tthis.formError = '';\n\t\t\tthis.showRecoveryCodeForm = true;\n\t\t\tthis.hasAnyChanges = false;\n\t\t\tthis.formInputs = [this.mfaRecoveryCodeFieldWithDefaults()];\n\t\t\tthis.$emit('onFormChanged', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonBackClick() {\n\t\t\tif (!this.showRecoveryCodeForm) {\n\t\t\t\tthis.$emit('onBackClick', FORM.MFA_TOKEN);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showRecoveryCodeForm = false;\n\t\t\tthis.hasAnyChanges = true;\n\t\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t\t\tthis.$emit('onBackClick', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonInput({ target: { value, name } }: { target: { value: string; name: string } }) {\n\t\t\tconst isSubmittingMfaToken = name === 'token';\n\t\t\tconst inputValidLength = isSubmittingMfaToken\n\t\t\t\t? MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH\n\t\t\t\t: MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH;\n\n\t\t\tif (value.length !== inputValidLength) {\n\t\t\t\tthis.hasAnyChanges = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.verifyingMfaToken = true;\n\t\t\tthis.hasAnyChanges = true;\n\n\t\t\tconst dataToSubmit = isSubmittingMfaToken\n\t\t\t\t? { token: value, recoveryCode: '' }\n\t\t\t\t: { token: '', recoveryCode: value };\n\n\t\t\tthis.onSubmit(dataToSubmit)\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => (this.verifyingMfaToken = false));\n\t\t},\n\t\tasync onSubmit(form: { token: string; recoveryCode: string }) {\n\t\t\tthis.formError = !this.showRecoveryCodeForm\n\t\t\t\t? this.$locale.baseText('mfa.code.invalid')\n\t\t\t\t: this.$locale.baseText('mfa.recovery.invalid');\n\t\t\tthis.$emit('submit', form);\n\t\t},\n\t\tonSaveClick() {\n\t\t\tthis.formBus.emit('submit');\n\t\t},\n\t\tmfaTokenFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'token',\n\t\t\t\tthis.$locale.baseText('mfa.code.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.code.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tmfaRecoveryCodeFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'recoveryCode',\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tformField(name: string, label: string, placeholder: string, maxlength: number, focus = true) {\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tinitialValue: '',\n\t\t\t\tproperties: {\n\t\t\t\t\tlabel,\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tmaxlength,\n\t\t\t\t\tcapitalize: true,\n\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\tfocusInitially: focus,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\nbody {\n\tbackground-color: var(--color-background-light);\n}\n\n.container {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\tpadding-top: var(--spacing-2xl);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-l);\n\t\twidth: 352px;\n\t}\n}\n\n.logoContainer {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.formContainer {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.headerContainer {\n\ttext-align: center;\n\tmargin-bottom: var(--spacing-xl);\n}\n\n.formError input {\n\tborder-color: var(--color-danger);\n}\n\n.recoveryCodeLink {\n\ttext-decoration: underline;\n}\n\n.infoBox {\n\tpadding-top: var(--spacing-4xs);\n}\n</style>\n","<template>\n\t<div>\n\t\t<AuthView\n\t\t\tv-if=\"!showMfaView\"\n\t\t\t:form=\"FORM_CONFIG\"\n\t\t\t:form-loading=\"loading\"\n\t\t\t:with-sso=\"true\"\n\t\t\tdata-test-id=\"signin-form\"\n\t\t\t@submit=\"onEmailPasswordSubmitted\"\n\t\t/>\n\t\t<MfaView\n\t\t\tv-if=\"showMfaView\"\n\t\t\t:report-error=\"reportError\"\n\t\t\t@submit=\"onMFASubmitted\"\n\t\t\t@on-back-click=\"onBackClick\"\n\t\t\t@on-form-changed=\"onFormChanged\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport AuthView from './AuthView.vue';\nimport MfaView, { FORM } from './MfaView.vue';\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { MFA_AUTHENTICATION_REQUIRED_ERROR_CODE, VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'SigninView',\n\tcomponents: {\n\t\tAuthView,\n\t\tMfaView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFORM_CONFIG: {} as IFormBoxConfig,\n\t\t\tloading: false,\n\t\t\tshowMfaView: false,\n\t\t\temail: '',\n\t\t\tpassword: '',\n\t\t\treportError: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore, useSettingsStore, useUIStore, useCloudPlanStore),\n\t\tuserHasMfaEnabled() {\n\t\t\treturn !!this.usersStore.currentUser?.mfaEnabled;\n\t\t},\n\t},\n\tmounted() {\n\t\tlet emailLabel = this.$locale.baseText('auth.email');\n\t\tconst ldapLoginLabel = this.settingsStore.ldapLoginLabel;\n\t\tconst isLdapLoginEnabled = this.settingsStore.isLdapLoginEnabled;\n\t\tif (isLdapLoginEnabled && ldapLoginLabel) {\n\t\t\temailLabel = ldapLoginLabel;\n\t\t}\n\t\tthis.FORM_CONFIG = {\n\t\t\ttitle: this.$locale.baseText('auth.signin'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signin'),\n\t\t\tredirectText: this.$locale.baseText('forgotPassword'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: emailLabel,\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t...(!isLdapLoginEnabled && { validationRules: [{ name: 'VALID_EMAIL' }] }),\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (!this.settingsStore.isDesktopDeployment) {\n\t\t\tthis.FORM_CONFIG.redirectLink = '/forgot-password';\n\t\t}\n\t},\n\tmethods: {\n\t\tasync onMFASubmitted(form: { token?: string; recoveryCode?: string }) {\n\t\t\tawait this.login({\n\t\t\t\temail: this.email,\n\t\t\t\tpassword: this.password,\n\t\t\t\ttoken: form.token,\n\t\t\t\trecoveryCode: form.recoveryCode,\n\t\t\t});\n\t\t},\n\t\tasync onEmailPasswordSubmitted(form: { email: string; password: string }) {\n\t\t\tawait this.login(form);\n\t\t},\n\t\tisRedirectSafe() {\n\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\treturn redirect.startsWith('/') || redirect.startsWith(window.location.origin);\n\t\t},\n\t\tgetRedirectQueryParameter() {\n\t\t\tlet redirect = '';\n\t\t\tif (typeof this.$route.query?.redirect === 'string') {\n\t\t\t\tredirect = decodeURIComponent(this.$route.query?.redirect);\n\t\t\t}\n\t\t\treturn redirect;\n\t\t},\n\t\tasync login(form: { email: string; password: string; token?: string; recoveryCode?: string }) {\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.loginWithCreds({\n\t\t\t\t\temail: form.email,\n\t\t\t\t\tpassword: form.password,\n\t\t\t\t\tmfaToken: form.token,\n\t\t\t\t\tmfaRecoveryCode: form.recoveryCode,\n\t\t\t\t});\n\t\t\t\tthis.loading = false;\n\t\t\t\tif (this.settingsStore.isCloudDeployment) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.cloudPlanStore.checkForCloudPlanData();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('Failed to check for cloud plan data', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.settingsStore.getSettings();\n\t\t\t\tthis.clearAllStickyNotifications();\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_success' : 'success',\n\t\t\t\t});\n\n\t\t\t\tif (this.isRedirectSafe()) {\n\t\t\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\t\t\tif (redirect.startsWith('http')) {\n\t\t\t\t\t\twindow.location.href = redirect;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvoid this.$router.push(redirect);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.HOMEPAGE });\n\t\t\t} catch (error) {\n\t\t\t\tif (error.errorCode === MFA_AUTHENTICATION_REQUIRED_ERROR_CODE) {\n\t\t\t\t\tthis.showMfaView = true;\n\t\t\t\t\tthis.cacheCredentials(form);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_token_rejected' : 'credentials_error',\n\t\t\t\t});\n\n\t\t\t\tif (!this.showMfaView) {\n\t\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signin.error'));\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reportError = true;\n\t\t\t}\n\t\t},\n\t\tonBackClick(fromForm: string) {\n\t\t\tthis.reportError = false;\n\t\t\tif (fromForm === FORM.MFA_TOKEN) {\n\t\t\t\tthis.showMfaView = false;\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t\tonFormChanged(toForm: string) {\n\t\t\tif (toForm === FORM.MFA_RECOVERY_CODE) {\n\t\t\t\tthis.reportError = false;\n\t\t\t}\n\t\t},\n\t\tcacheCredentials(form: { email: string; password: string }) {\n\t\t\tthis.email = form.email;\n\t\t\tthis.password = form.password;\n\t\t},\n\t},\n});\n</script>\n"],"names":["FORM","_sfc_main$1","defineComponent","Logo","useToast","mfaEventBus","mapStores","useUsersStore","value","name","isSubmittingMfaToken","inputValidLength","MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH","MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH","dataToSubmit","form","label","placeholder","maxlength","focus","_resolveComponent","_normalizeClass","_ctx","_createVNode","_component_Logo","_component_n8n_card","_withCtx","_createElementVNode","_component_n8n_heading","$locale","_toDisplayString","formInputs","_openBlock","_component_n8n_form_inputs","formBus","onInput","onSubmit","_createCommentVNode","$style","showRecoveryCodeForm","reportError","_createBlock","_component_n8n_text","_createTextVNode","_cache","args","verifyingMfaToken","_sfc_main","AuthView","MfaView","useSettingsStore","useUIStore","useCloudPlanStore","_a","emailLabel","ldapLoginLabel","isLdapLoginEnabled","redirect","_b","error","VIEWS","MFA_AUTHENTICATION_REQUIRED_ERROR_CODE","fromForm","toForm","_createElementBlock","_component_AuthView","onEmailPasswordSubmitted","showMfaView","onBackClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SigninView-CsK0r98m.js","sources":["../../src/views/MfaView.vue","../../src/views/SigninView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div :class=\"$style.logoContainer\">\n\t\t\t<Logo />\n\t\t</div>\n\t\t<n8n-card>\n\t\t\t<div :class=\"$style.headerContainer\">\n\t\t\t\t<n8n-heading size=\"xlarge\" color=\"text-dark\">{{\n\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t? $locale.baseText('mfa.recovery.modal.title')\n\t\t\t\t\t\t: $locale.baseText('mfa.code.modal.title')\n\t\t\t\t}}</n8n-heading>\n\t\t\t</div>\n\t\t\t<div :class=\"[$style.formContainer, reportError ? $style.formError : '']\">\n\t\t\t\t<n8n-form-inputs\n\t\t\t\t\tv-if=\"formInputs\"\n\t\t\t\t\tdata-test-id=\"mfa-login-form\"\n\t\t\t\t\t:inputs=\"formInputs\"\n\t\t\t\t\t:event-bus=\"formBus\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t/>\n\t\t\t\t<div :class=\"$style.infoBox\">\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm && !reportError\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\t\t>{{ $locale.baseText('mfa.code.input.info') }}\n\t\t\t\t\t\t<a data-test-id=\"mfa-enter-recovery-code-button\" @click=\"onRecoveryCodeClick\">{{\n\t\t\t\t\t\t\t$locale.baseText('mfa.code.input.info.action')\n\t\t\t\t\t\t}}</a></n8n-text\n\t\t\t\t\t>\n\t\t\t\t\t<n8n-text v-if=\"reportError\" color=\"danger\" size=\"small\"\n\t\t\t\t\t\t>{{ formError }}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm\"\n\t\t\t\t\t\t\t:class=\"$style.recoveryCodeLink\"\n\t\t\t\t\t\t\t@click=\"onRecoveryCodeClick\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ $locale.baseText('mfa.recovery.input.info.action') }}</a\n\t\t\t\t\t\t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"right\"\n\t\t\t\t\t:loading=\"verifyingMfaToken\"\n\t\t\t\t\t:label=\"\n\t\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t\t? $locale.baseText('mfa.recovery.button.verify')\n\t\t\t\t\t\t\t: $locale.baseText('mfa.code.button.continue')\n\t\t\t\t\t\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:disabled=\"!hasAnyChanges\"\n\t\t\t\t\t@click=\"onSaveClick\"\n\t\t\t\t/>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"left\"\n\t\t\t\t\t:label=\"$locale.baseText('mfa.button.back')\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t@click=\"onBackClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-card>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { IFormInputs } from '@/Interface';\nimport Logo from '../components/Logo.vue';\nimport {\n\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n} from '@/constants';\nimport { useUsersStore } from '@/stores/users.store';\nimport { mapStores } from 'pinia';\nimport { mfaEventBus } from '@/event-bus';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport const FORM = {\n\tMFA_TOKEN: 'MFA_TOKEN',\n\tMFA_RECOVERY_CODE: 'MFA_RECOVERY_CODE',\n} as const;\n\nexport default defineComponent({\n\tname: 'MfaView',\n\tcomponents: {\n\t\tLogo,\n\t},\n\tprops: {\n\t\treportError: Boolean,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\thasAnyChanges: false,\n\t\t\tformBus: mfaEventBus,\n\t\t\tformInputs: null as null | IFormInputs,\n\t\t\tshowRecoveryCodeForm: false,\n\t\t\tverifyingMfaToken: false,\n\t\t\tformError: '',\n\t\t};\n\t},\n\tasync mounted() {\n\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmethods: {\n\t\tonRecoveryCodeClick() {\n\t\t\tthis.formError = '';\n\t\t\tthis.showRecoveryCodeForm = true;\n\t\t\tthis.hasAnyChanges = false;\n\t\t\tthis.formInputs = [this.mfaRecoveryCodeFieldWithDefaults()];\n\t\t\tthis.$emit('onFormChanged', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonBackClick() {\n\t\t\tif (!this.showRecoveryCodeForm) {\n\t\t\t\tthis.$emit('onBackClick', FORM.MFA_TOKEN);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showRecoveryCodeForm = false;\n\t\t\tthis.hasAnyChanges = true;\n\t\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t\t\tthis.$emit('onBackClick', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonInput({ target: { value, name } }: { target: { value: string; name: string } }) {\n\t\t\tconst isSubmittingMfaToken = name === 'token';\n\t\t\tconst inputValidLength = isSubmittingMfaToken\n\t\t\t\t? MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH\n\t\t\t\t: MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH;\n\n\t\t\tif (value.length !== inputValidLength) {\n\t\t\t\tthis.hasAnyChanges = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.verifyingMfaToken = true;\n\t\t\tthis.hasAnyChanges = true;\n\n\t\t\tconst dataToSubmit = isSubmittingMfaToken\n\t\t\t\t? { token: value, recoveryCode: '' }\n\t\t\t\t: { token: '', recoveryCode: value };\n\n\t\t\tthis.onSubmit(dataToSubmit)\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => (this.verifyingMfaToken = false));\n\t\t},\n\t\tasync onSubmit(form: { token: string; recoveryCode: string }) {\n\t\t\tthis.formError = !this.showRecoveryCodeForm\n\t\t\t\t? this.$locale.baseText('mfa.code.invalid')\n\t\t\t\t: this.$locale.baseText('mfa.recovery.invalid');\n\t\t\tthis.$emit('submit', form);\n\t\t},\n\t\tonSaveClick() {\n\t\t\tthis.formBus.emit('submit');\n\t\t},\n\t\tmfaTokenFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'token',\n\t\t\t\tthis.$locale.baseText('mfa.code.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.code.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tmfaRecoveryCodeFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'recoveryCode',\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tformField(name: string, label: string, placeholder: string, maxlength: number, focus = true) {\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tinitialValue: '',\n\t\t\t\tproperties: {\n\t\t\t\t\tlabel,\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tmaxlength,\n\t\t\t\t\tcapitalize: true,\n\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\tfocusInitially: focus,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\nbody {\n\tbackground-color: var(--color-background-light);\n}\n\n.container {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\tpadding-top: var(--spacing-2xl);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-l);\n\t\twidth: 352px;\n\t}\n}\n\n.logoContainer {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.formContainer {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.headerContainer {\n\ttext-align: center;\n\tmargin-bottom: var(--spacing-xl);\n}\n\n.formError input {\n\tborder-color: var(--color-danger);\n}\n\n.recoveryCodeLink {\n\ttext-decoration: underline;\n}\n\n.infoBox {\n\tpadding-top: var(--spacing-4xs);\n}\n</style>\n","<template>\n\t<div>\n\t\t<AuthView\n\t\t\tv-if=\"!showMfaView\"\n\t\t\t:form=\"FORM_CONFIG\"\n\t\t\t:form-loading=\"loading\"\n\t\t\t:with-sso=\"true\"\n\t\t\tdata-test-id=\"signin-form\"\n\t\t\t@submit=\"onEmailPasswordSubmitted\"\n\t\t/>\n\t\t<MfaView\n\t\t\tv-if=\"showMfaView\"\n\t\t\t:report-error=\"reportError\"\n\t\t\t@submit=\"onMFASubmitted\"\n\t\t\t@on-back-click=\"onBackClick\"\n\t\t\t@on-form-changed=\"onFormChanged\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport AuthView from './AuthView.vue';\nimport MfaView, { FORM } from './MfaView.vue';\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { MFA_AUTHENTICATION_REQUIRED_ERROR_CODE, VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'SigninView',\n\tcomponents: {\n\t\tAuthView,\n\t\tMfaView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFORM_CONFIG: {} as IFormBoxConfig,\n\t\t\tloading: false,\n\t\t\tshowMfaView: false,\n\t\t\temail: '',\n\t\t\tpassword: '',\n\t\t\treportError: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore, useSettingsStore, useUIStore, useCloudPlanStore),\n\t\tuserHasMfaEnabled() {\n\t\t\treturn !!this.usersStore.currentUser?.mfaEnabled;\n\t\t},\n\t},\n\tmounted() {\n\t\tlet emailLabel = this.$locale.baseText('auth.email');\n\t\tconst ldapLoginLabel = this.settingsStore.ldapLoginLabel;\n\t\tconst isLdapLoginEnabled = this.settingsStore.isLdapLoginEnabled;\n\t\tif (isLdapLoginEnabled && ldapLoginLabel) {\n\t\t\temailLabel = ldapLoginLabel;\n\t\t}\n\t\tthis.FORM_CONFIG = {\n\t\t\ttitle: this.$locale.baseText('auth.signin'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signin'),\n\t\t\tredirectText: this.$locale.baseText('forgotPassword'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: emailLabel,\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t...(!isLdapLoginEnabled && { validationRules: [{ name: 'VALID_EMAIL' }] }),\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (!this.settingsStore.isDesktopDeployment) {\n\t\t\tthis.FORM_CONFIG.redirectLink = '/forgot-password';\n\t\t}\n\t},\n\tmethods: {\n\t\tasync onMFASubmitted(form: { token?: string; recoveryCode?: string }) {\n\t\t\tawait this.login({\n\t\t\t\temail: this.email,\n\t\t\t\tpassword: this.password,\n\t\t\t\ttoken: form.token,\n\t\t\t\trecoveryCode: form.recoveryCode,\n\t\t\t});\n\t\t},\n\t\tasync onEmailPasswordSubmitted(form: { email: string; password: string }) {\n\t\t\tawait this.login(form);\n\t\t},\n\t\tisRedirectSafe() {\n\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\treturn redirect.startsWith('/') || redirect.startsWith(window.location.origin);\n\t\t},\n\t\tgetRedirectQueryParameter() {\n\t\t\tlet redirect = '';\n\t\t\tif (typeof this.$route.query?.redirect === 'string') {\n\t\t\t\tredirect = decodeURIComponent(this.$route.query?.redirect);\n\t\t\t}\n\t\t\treturn redirect;\n\t\t},\n\t\tasync login(form: { email: string; password: string; token?: string; recoveryCode?: string }) {\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.loginWithCreds({\n\t\t\t\t\temail: form.email,\n\t\t\t\t\tpassword: form.password,\n\t\t\t\t\tmfaToken: form.token,\n\t\t\t\t\tmfaRecoveryCode: form.recoveryCode,\n\t\t\t\t});\n\t\t\t\tthis.loading = false;\n\t\t\t\tif (this.settingsStore.isCloudDeployment) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.cloudPlanStore.checkForCloudPlanData();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('Failed to check for cloud plan data', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.settingsStore.getSettings();\n\t\t\t\tthis.clearAllStickyNotifications();\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_success' : 'success',\n\t\t\t\t});\n\n\t\t\t\tif (this.isRedirectSafe()) {\n\t\t\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\t\t\tif (redirect.startsWith('http')) {\n\t\t\t\t\t\twindow.location.href = redirect;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvoid this.$router.push(redirect);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.HOMEPAGE });\n\t\t\t} catch (error) {\n\t\t\t\tif (error.errorCode === MFA_AUTHENTICATION_REQUIRED_ERROR_CODE) {\n\t\t\t\t\tthis.showMfaView = true;\n\t\t\t\t\tthis.cacheCredentials(form);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_token_rejected' : 'credentials_error',\n\t\t\t\t});\n\n\t\t\t\tif (!this.showMfaView) {\n\t\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signin.error'));\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reportError = true;\n\t\t\t}\n\t\t},\n\t\tonBackClick(fromForm: string) {\n\t\t\tthis.reportError = false;\n\t\t\tif (fromForm === FORM.MFA_TOKEN) {\n\t\t\t\tthis.showMfaView = false;\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t\tonFormChanged(toForm: string) {\n\t\t\tif (toForm === FORM.MFA_RECOVERY_CODE) {\n\t\t\t\tthis.reportError = false;\n\t\t\t}\n\t\t},\n\t\tcacheCredentials(form: { email: string; password: string }) {\n\t\t\tthis.email = form.email;\n\t\t\tthis.password = form.password;\n\t\t},\n\t},\n});\n</script>\n"],"names":["FORM","_sfc_main$1","defineComponent","Logo","useToast","mfaEventBus","mapStores","useUsersStore","value","name","isSubmittingMfaToken","inputValidLength","MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH","MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH","dataToSubmit","form","label","placeholder","maxlength","focus","_resolveComponent","_normalizeClass","_ctx","_createVNode","_component_Logo","_component_n8n_card","_withCtx","_createElementVNode","_component_n8n_heading","$locale","_toDisplayString","formInputs","_openBlock","_component_n8n_form_inputs","formBus","onInput","onSubmit","_createCommentVNode","$style","showRecoveryCodeForm","reportError","_createBlock","_component_n8n_text","_createTextVNode","_cache","args","verifyingMfaToken","_sfc_main","AuthView","MfaView","useSettingsStore","useUIStore","useCloudPlanStore","_a","emailLabel","ldapLoginLabel","isLdapLoginEnabled","redirect","_b","error","VIEWS","MFA_AUTHENTICATION_REQUIRED_ERROR_CODE","fromForm","toForm","_createElementBlock","_component_AuthView","onEmailPasswordSubmitted","showMfaView","onBackClick"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as t,a as r,V as i}from"./index-
|
|
2
|
-
//# sourceMappingURL=SignoutView-
|
|
1
|
+
import{u as t,a as r,V as i}from"./index-DEwaaDne.js";import{m as e}from"./pinia-BAhPp3pQ.js";import{G as m,l as p,m as s}from"./vendor-Dv5OeN6t.js";import{_ as a}from"./n8n-B6cfQsVX.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-9E8Shwsg.js";import"./lodash-es-BxV-E8rt.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-B9ocXky7.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-LluJPcs3.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const n=m({name:"SignoutView",setup(){return{...t()}},computed:{...e(r)},mounted(){this.logout()},methods:{async logout(){try{await this.usersStore.logout(),window.location.href=this.$router.resolve({name:i.SIGNIN}).href}catch(o){this.showError(o,this.$locale.baseText("auth.signout.error"))}}}});function u(o,c,f,h,l,d){return p(),s("div")}const L=a(n,[["render",u]]);export{L as default};
|
|
2
|
+
//# sourceMappingURL=SignoutView-BST1uR2G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignoutView-
|
|
1
|
+
{"version":3,"file":"SignoutView-BST1uR2G.js","sources":["../../src/views/SignoutView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport default defineComponent({\n\tname: 'SignoutView',\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmounted() {\n\t\tvoid this.logout();\n\t},\n\tmethods: {\n\t\tasync logout() {\n\t\t\ttry {\n\t\t\t\tawait this.usersStore.logout();\n\t\t\t\twindow.location.href = this.$router.resolve({ name: VIEWS.SIGNIN }).href;\n\t\t\t} catch (e) {\n\t\t\t\tthis.showError(e, this.$locale.baseText('auth.signout.error'));\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div />\n</template>\n"],"names":["_sfc_main","defineComponent","useToast","mapStores","useUsersStore","VIEWS","e"],"mappings":"ukCAOA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,cACN,OAAQ,CACA,MAAA,CACN,GAAGC,EAAS,CAAA,CAEd,EACA,SAAU,CACT,GAAGC,EAAUC,CAAa,CAC3B,EACA,SAAU,CACJ,KAAK,QACX,EACA,QAAS,CACR,MAAM,QAAS,CACV,GAAA,CACG,MAAA,KAAK,WAAW,SACf,OAAA,SAAS,KAAO,KAAK,QAAQ,QAAQ,CAAE,KAAMC,EAAM,MAAQ,CAAA,EAAE,WAC5DC,EAAG,CACX,KAAK,UAAUA,EAAG,KAAK,QAAQ,SAAS,oBAAoB,CAAC,CAC9D,CACD,CACD,CACD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{A as a}from"./AuthView-
|
|
2
|
-
//# sourceMappingURL=SignupView-
|
|
1
|
+
import{A as a}from"./AuthView-Bpw90ooz.js";import{u as s,V as r,a as n,i as u}from"./index-DEwaaDne.js";import{m}from"./pinia-BAhPp3pQ.js";import{G as p,l,M as h,ag as c}from"./vendor-Dv5OeN6t.js";import{_ as d}from"./n8n-B6cfQsVX.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-9E8Shwsg.js";import"./lodash-es-BxV-E8rt.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-B9ocXky7.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-LluJPcs3.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const g=p({name:"SignupView",components:{AuthView:a},setup(){return{...s()}},data(){return{FORM_CONFIG:{title:this.$locale.baseText("auth.signup.setupYourAccount"),buttonText:this.$locale.baseText("auth.signup.finishAccountSetup"),inputs:[{name:"firstName",properties:{label:this.$locale.baseText("auth.firstName"),maxlength:32,required:!0,autocomplete:"given-name",capitalize:!0}},{name:"lastName",properties:{label:this.$locale.baseText("auth.lastName"),maxlength:32,required:!0,autocomplete:"family-name",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],required:!0,infoText:this.$locale.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"agree",properties:{label:this.$locale.baseText("auth.agreement.label"),type:"checkbox"}}]},loading:!1,inviter:null,inviterId:null,inviteeId:null}},async mounted(){const t=this.getQueryParameter("inviterId"),e=this.getQueryParameter("inviteeId");try{if(!t||!e)throw new Error(this.$locale.baseText("auth.signup.missingTokenError"));this.inviterId=t,this.inviteeId=e;const i=await this.usersStore.validateSignupToken({inviteeId:e,inviterId:t});this.inviter=i.inviter}catch(i){this.showError(i,this.$locale.baseText("auth.signup.tokenValidationError")),this.$router.replace({name:r.SIGNIN})}},computed:{...m(u,n),inviteMessage(){return this.inviter?this.$locale.baseText("settings.signup.signUpInviterInfo",{interpolate:{firstName:this.inviter.firstName,lastName:this.inviter.lastName}}):""}},methods:{async onSubmit(t){if(!this.inviterId||!this.inviteeId){this.showError(new Error(this.$locale.baseText("auth.signup.tokenValidationError")),this.$locale.baseText("auth.signup.setupYourAccountError"));return}try{if(this.loading=!0,await this.usersStore.acceptInvitation({...t,inviterId:this.inviterId,inviteeId:this.inviteeId}),t.agree===!0)try{await this.uiStore.submitContactEmail(t.email.toString(),t.agree)}catch{}await this.$router.push({name:r.NEW_WORKFLOW})}catch(e){this.showError(e,this.$locale.baseText("auth.signup.setupYourAccountError"))}this.loading=!1},getQueryParameter(t){return!this.$route.query[t]||typeof this.$route.query[t]!="string"?null:this.$route.query[t]}}});function f(t,e,i,b,v,I){const o=c("AuthView");return l(),h(o,{form:t.FORM_CONFIG,"form-loading":t.loading,subtitle:t.inviteMessage,onSubmit:t.onSubmit},null,8,["form","form-loading","subtitle","onSubmit"])}const H=d(g,[["render",f]]);export{H as default};
|
|
2
|
+
//# sourceMappingURL=SignupView-BKYxxBni.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignupView-
|
|
1
|
+
{"version":3,"file":"SignupView-BKYxxBni.js","sources":["../../src/views/SignupView.vue"],"sourcesContent":["<template>\n\t<AuthView\n\t\t:form=\"FORM_CONFIG\"\n\t\t:form-loading=\"loading\"\n\t\t:subtitle=\"inviteMessage\"\n\t\t@submit=\"onSubmit\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport AuthView from '@/views/AuthView.vue';\nimport { useToast } from '@/composables/useToast';\n\nimport { defineComponent } from 'vue';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useUsersStore } from '@/stores/users.store';\n\nexport default defineComponent({\n\tname: 'SignupView',\n\tcomponents: {\n\t\tAuthView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\tconst FORM_CONFIG: IFormBoxConfig = {\n\t\t\ttitle: this.$locale.baseText('auth.signup.setupYourAccount'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signup.finishAccountSetup'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'firstName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.firstName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'given-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'lastName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.lastName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'family-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\tvalidationRules: [{ name: 'DEFAULT_PASSWORD_RULES' }],\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tinfoText: this.$locale.baseText('auth.defaultPasswordRequirements'),\n\t\t\t\t\t\tautocomplete: 'new-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'agree',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.agreement.label'),\n\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\treturn {\n\t\t\tFORM_CONFIG,\n\t\t\tloading: false,\n\t\t\tinviter: null as null | { firstName: string; lastName: string },\n\t\t\tinviterId: null as string | null,\n\t\t\tinviteeId: null as string | null,\n\t\t};\n\t},\n\tasync mounted() {\n\t\tconst inviterId = this.getQueryParameter('inviterId');\n\t\tconst inviteeId = this.getQueryParameter('inviteeId');\n\t\ttry {\n\t\t\tif (!inviterId || !inviteeId) {\n\t\t\t\tthrow new Error(this.$locale.baseText('auth.signup.missingTokenError'));\n\t\t\t}\n\t\t\tthis.inviterId = inviterId;\n\t\t\tthis.inviteeId = inviteeId;\n\n\t\t\tconst invite = await this.usersStore.validateSignupToken({ inviteeId, inviterId });\n\t\t\tthis.inviter = invite.inviter as { firstName: string; lastName: string };\n\t\t} catch (e) {\n\t\t\tthis.showError(e, this.$locale.baseText('auth.signup.tokenValidationError'));\n\t\t\tvoid this.$router.replace({ name: VIEWS.SIGNIN });\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapStores(useUIStore, useUsersStore),\n\t\tinviteMessage(): string {\n\t\t\tif (!this.inviter) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn this.$locale.baseText('settings.signup.signUpInviterInfo', {\n\t\t\t\tinterpolate: { firstName: this.inviter.firstName, lastName: this.inviter.lastName },\n\t\t\t});\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onSubmit(values: { [key: string]: string | boolean }) {\n\t\t\tif (!this.inviterId || !this.inviteeId) {\n\t\t\t\tthis.showError(\n\t\t\t\t\tnew Error(this.$locale.baseText('auth.signup.tokenValidationError')),\n\t\t\t\t\tthis.$locale.baseText('auth.signup.setupYourAccountError'),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.acceptInvitation({\n\t\t\t\t\t...values,\n\t\t\t\t\tinviterId: this.inviterId,\n\t\t\t\t\tinviteeId: this.inviteeId,\n\t\t\t\t} as {\n\t\t\t\t\tinviteeId: string;\n\t\t\t\t\tinviterId: string;\n\t\t\t\t\tfirstName: string;\n\t\t\t\t\tlastName: string;\n\t\t\t\t\tpassword: string;\n\t\t\t\t});\n\n\t\t\t\tif (values.agree === true) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.uiStore.submitContactEmail(values.email.toString(), values.agree);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.NEW_WORKFLOW });\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signup.setupYourAccountError'));\n\t\t\t}\n\t\t\tthis.loading = false;\n\t\t},\n\t\tgetQueryParameter(key: 'inviterId' | 'inviteeId'): string | null {\n\t\t\treturn !this.$route.query[key] || typeof this.$route.query[key] !== 'string'\n\t\t\t\t? null\n\t\t\t\t: (this.$route.query[key] as string);\n\t\t},\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","AuthView","useToast","inviterId","inviteeId","invite","e","VIEWS","mapStores","useUIStore","useUsersStore","values","error","key","_resolveComponent","_openBlock","_createBlock","_component_AuthView","inviteMessage","onSubmit"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as T,l as t,m,p as c,U as r,O as l,S as p,T as s,I as a,H as S,ag as o,M as n,F as N,a7 as B,R as i}from"./vendor-Dv5OeN6t.js";import{_ as y}from"./n8n-B6cfQsVX.js";import{a9 as z,cX as D,$ as V,cY as I,cZ as M}from"./index-
|
|
2
|
-
//# sourceMappingURL=TemplateDetails-
|
|
1
|
+
import{G as T,l as t,m,p as c,U as r,O as l,S as p,T as s,I as a,H as S,ag as o,M as n,F as N,a7 as B,R as i}from"./vendor-Dv5OeN6t.js";import{_ as y}from"./n8n-B6cfQsVX.js";import{a9 as z,cX as D,$ as V,cY as I,cZ as M}from"./index-DEwaaDne.js";import{m as A}from"./pinia-BAhPp3pQ.js";const F=T({name:"TemplateDetailsBlock",props:{title:{type:String}}}),W="_block_czs8t_1",q="_header_czs8t_5",O="_content_czs8t_10",P={block:W,header:q,content:O};function j(e,f,k,b,h,_){const d=o("n8n-heading");return t(),m("div",{class:a(e.$style.block)},[c("div",{class:a(e.$style.header)},[r(d,{tag:"h3",size:"small",color:"text-base"},{default:l(()=>[p(s(e.title),1)]),_:1})],2),c("div",{class:a(e.$style.content)},[S(e.$slots,"default")],2)],2)}const E={$style:P},G=y(F,[["render",j],["__cssModules",E]]);function H(e){return!!e&&"totalViews"in e}function L(e){return!!e&&"description"in e&&"categories"in e}const R=T({name:"TemplateDetails",components:{NodeIcon:z,TemplateDetailsBlock:G,TimeAgo:D},props:{template:{type:Object,required:!0},blockTitle:{type:String,required:!0},loading:{type:Boolean}},computed:{...A(V)},methods:{abbreviateNumber:I,filterTemplateNodes:M,redirectToCategory(e){this.templatesStore.resetSessionId(),this.$router.push(`/templates?categories=${e}`)},redirectToSearchPage(e){this.templatesStore.resetSessionId(),this.$router.push(`/templates?search=${e.displayName}`)},isFullTemplatesCollection:L,isTemplatesWorkflow:H}}),U="_icons_1yw74_1",X="_icon_1yw74_1",Y="_text_1yw74_12",Z={icons:U,icon:X,text:Y};function J(e,f,k,b,h,_){const d=o("n8n-loading"),v=o("NodeIcon"),u=o("TemplateDetailsBlock"),w=o("n8n-tags"),C=o("TimeAgo"),$=o("n8n-text");return t(),m("div",null,[r(d,{loading:e.loading,rows:5,variant:"p"},null,8,["loading"]),!e.loading&&e.template&&e.template.nodes.length>0?(t(),n(u,{key:0,title:e.blockTitle},{default:l(()=>[c("div",{class:a(e.$style.icons)},[(t(!0),m(N,null,B(e.filterTemplateNodes(e.template.nodes),g=>(t(),m("div",{key:g.name,class:a(e.$style.icon)},[r(v,{"node-type":g,size:24,"show-tooltip":!0,onClick:Q=>e.redirectToSearchPage(g)},null,8,["node-type","onClick"])],2))),128))],2)]),_:1},8,["title"])):i("",!0),!e.loading&&e.isFullTemplatesCollection(e.template)&&e.template.categories.length>0?(t(),n(u,{key:1,title:e.$locale.baseText("template.details.categories")},{default:l(()=>[r(w,{tags:e.template.categories,"onClick:tag":e.redirectToCategory},null,8,["tags","onClick:tag"])]),_:1},8,["title"])):i("",!0),!e.loading&&e.template?(t(),n(u,{key:2,title:e.$locale.baseText("template.details.details")},{default:l(()=>[c("div",{class:a(e.$style.text)},[e.isTemplatesWorkflow(e.template)?(t(),n($,{key:0,size:"small",color:"text-base"},{default:l(()=>[p(s(e.$locale.baseText("template.details.created"))+" ",1),r(C,{date:e.template.createdAt},null,8,["date"]),p(" "+s(e.$locale.baseText("template.details.by"))+" "+s(e.template.user?e.template.user.username:"n8n team"),1)]),_:1})):i("",!0)],2),c("div",{class:a(e.$style.text)},[e.isTemplatesWorkflow(e.template)&&e.template.totalViews!==0?(t(),n($,{key:0,size:"small",color:"text-base"},{default:l(()=>[p(s(e.$locale.baseText("template.details.viewed"))+" "+s(e.abbreviateNumber(e.template.totalViews))+" "+s(e.$locale.baseText("template.details.times")),1)]),_:1})):i("",!0)],2)]),_:1},8,["title"])):i("",!0)])}const K={$style:Z},oe=y(R,[["render",J],["__cssModules",K]]);export{oe as T,L as i};
|
|
2
|
+
//# sourceMappingURL=TemplateDetails-D0r_U1xF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateDetails-
|
|
1
|
+
{"version":3,"file":"TemplateDetails-D0r_U1xF.js","sources":["../../src/components/TemplateDetailsBlock.vue","../../src/utils/templates/typeGuards.ts","../../src/components/TemplateDetails.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.block\">\n\t\t<div :class=\"$style.header\">\n\t\t\t<n8n-heading tag=\"h3\" size=\"small\" color=\"text-base\">{{ title }}</n8n-heading>\n\t\t</div>\n\t\t<div :class=\"$style.content\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'TemplateDetailsBlock',\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.block {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.header {\n\tpadding: 0 0 var(--spacing-4xs);\n\tborder-bottom: var(--border-base);\n}\n\n.content {\n\tpadding: var(--spacing-xs) 0 0;\n}\n</style>\n","import type {\n\tITemplatesCollection,\n\tITemplatesCollectionFull,\n\tITemplatesWorkflow,\n} from '@/Interface';\n\nexport function isTemplatesWorkflow(\n\ttemplate: ITemplatesWorkflow | ITemplatesCollection | ITemplatesCollectionFull | null,\n): template is ITemplatesWorkflow {\n\treturn !!template && 'totalViews' in template;\n}\n\nexport function isFullTemplatesCollection(\n\ttemplate: ITemplatesWorkflow | ITemplatesCollectionFull | ITemplatesCollection | null,\n): template is ITemplatesCollectionFull {\n\treturn !!template && 'description' in template && 'categories' in template;\n}\n","<template>\n\t<div>\n\t\t<n8n-loading :loading=\"loading\" :rows=\"5\" variant=\"p\" />\n\n\t\t<TemplateDetailsBlock\n\t\t\tv-if=\"!loading && template && template.nodes.length > 0\"\n\t\t\t:title=\"blockTitle\"\n\t\t>\n\t\t\t<div :class=\"$style.icons\">\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"node in filterTemplateNodes(template.nodes)\"\n\t\t\t\t\t:key=\"node.name\"\n\t\t\t\t\t:class=\"$style.icon\"\n\t\t\t\t>\n\t\t\t\t\t<NodeIcon\n\t\t\t\t\t\t:node-type=\"node\"\n\t\t\t\t\t\t:size=\"24\"\n\t\t\t\t\t\t:show-tooltip=\"true\"\n\t\t\t\t\t\t@click=\"redirectToSearchPage(node)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</TemplateDetailsBlock>\n\n\t\t<TemplateDetailsBlock\n\t\t\tv-if=\"!loading && isFullTemplatesCollection(template) && template.categories.length > 0\"\n\t\t\t:title=\"$locale.baseText('template.details.categories')\"\n\t\t>\n\t\t\t<n8n-tags :tags=\"template.categories\" @click:tag=\"redirectToCategory\" />\n\t\t</TemplateDetailsBlock>\n\n\t\t<TemplateDetailsBlock\n\t\t\tv-if=\"!loading && template\"\n\t\t\t:title=\"$locale.baseText('template.details.details')\"\n\t\t>\n\t\t\t<div :class=\"$style.text\">\n\t\t\t\t<n8n-text v-if=\"isTemplatesWorkflow(template)\" size=\"small\" color=\"text-base\">\n\t\t\t\t\t{{ $locale.baseText('template.details.created') }}\n\t\t\t\t\t<TimeAgo :date=\"template.createdAt\" />\n\t\t\t\t\t{{ $locale.baseText('template.details.by') }}\n\t\t\t\t\t{{ template.user ? template.user.username : 'n8n team' }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.text\">\n\t\t\t\t<n8n-text\n\t\t\t\t\tv-if=\"isTemplatesWorkflow(template) && template.totalViews !== 0\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t>\n\t\t\t\t\t{{ $locale.baseText('template.details.viewed') }}\n\t\t\t\t\t{{ abbreviateNumber(template.totalViews) }}\n\t\t\t\t\t{{ $locale.baseText('template.details.times') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</TemplateDetailsBlock>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport TemplateDetailsBlock from '@/components/TemplateDetailsBlock.vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport { filterTemplateNodes } from '@/utils/nodeTypesUtils';\nimport { abbreviateNumber } from '@/utils/typesUtils';\nimport type {\n\tITemplatesCollection,\n\tITemplatesCollectionFull,\n\tITemplatesNode,\n\tITemplatesWorkflow,\n} from '@/Interface';\nimport { mapStores } from 'pinia';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport TimeAgo from '@/components/TimeAgo.vue';\nimport { isFullTemplatesCollection, isTemplatesWorkflow } from '@/utils/templates/typeGuards';\n\nexport default defineComponent({\n\tname: 'TemplateDetails',\n\tcomponents: {\n\t\tNodeIcon,\n\t\tTemplateDetailsBlock,\n\t\tTimeAgo,\n\t},\n\tprops: {\n\t\ttemplate: {\n\t\t\ttype: Object as PropType<\n\t\t\t\tITemplatesWorkflow | ITemplatesCollection | ITemplatesCollectionFull | null\n\t\t\t>,\n\t\t\trequired: true,\n\t\t},\n\t\tblockTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useTemplatesStore),\n\t},\n\tmethods: {\n\t\tabbreviateNumber,\n\t\tfilterTemplateNodes,\n\t\tredirectToCategory(id: string) {\n\t\t\tthis.templatesStore.resetSessionId();\n\t\t\tvoid this.$router.push(`/templates?categories=${id}`);\n\t\t},\n\t\tredirectToSearchPage(node: ITemplatesNode) {\n\t\t\tthis.templatesStore.resetSessionId();\n\t\t\tvoid this.$router.push(`/templates?search=${node.displayName}`);\n\t\t},\n\t\tisFullTemplatesCollection,\n\t\tisTemplatesWorkflow,\n\t},\n});\n</script>\n<style lang=\"scss\" module>\n.icons {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n.icon {\n\tmargin-right: var(--spacing-xs);\n\tmargin-bottom: var(--spacing-xs);\n\tcursor: pointer;\n}\n.text {\n\tpadding-bottom: var(--spacing-xs);\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","_resolveComponent","_normalizeClass","_ctx","_component_n8n_heading","_createTextVNode","_toDisplayString","_createElementVNode","isTemplatesWorkflow","template","isFullTemplatesCollection","_sfc_main","NodeIcon","TemplateDetailsBlock","TimeAgo","mapStores","useTemplatesStore","abbreviateNumber","filterTemplateNodes","id","node","_openBlock","_createElementBlock","_createVNode","_component_n8n_loading","loading","_createBlock","_component_TemplateDetailsBlock","_withCtx","_Fragment","_renderList","_component_NodeIcon","_component_n8n_tags","redirectToCategory","_component_n8n_text","_component_TimeAgo","_createCommentVNode"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a9 as z,cZ as v,cX as W,cY as V}from"./index-
|
|
2
|
-
//# sourceMappingURL=TemplateList-
|
|
1
|
+
import{a9 as z,cZ as v,cX as W,cY as V}from"./index-DEwaaDne.js";import{G as g,l as o,m as t,F as y,a7 as _,I as l,T as u,R as n,ag as r,U as a,O as p,S as w,M as k,a2 as M,p as q}from"./vendor-Dv5OeN6t.js";import{_ as $}from"./n8n-B6cfQsVX.js";const E=g({name:"NodeList",components:{NodeIcon:z},props:{nodes:{type:Array},limit:{type:Number,default:4},size:{type:String,default:"sm"}},computed:{filteredCoreNodes(){return v(this.nodes)},hiddenNodes(){return this.filteredCoreNodes.length-this.countNodesToBeSliced(this.filteredCoreNodes)},slicedNodes(){return this.filteredCoreNodes.slice(0,this.countNodesToBeSliced(this.filteredCoreNodes))}},methods:{countNodesToBeSliced(e){return e.length>this.limit?this.limit-1:this.limit}}}),I="_list_10uzg_1",L="_container_10uzg_9",U="_sm_10uzg_14",A="_md_10uzg_18",H="_button_10uzg_22",O="_buttonSm_10uzg_36",R="_buttonMd_10uzg_43",F={list:I,container:L,sm:U,md:A,button:H,buttonSm:O,buttonMd:R};function j(e,s,h,C,b,B){const c=r("NodeIcon");return o(),t("div",{class:l(e.$style.list)},[(o(!0),t(y,null,_(e.slicedNodes,d=>(o(),t("div",{key:d.name,class:l([e.$style.container,e.$style[e.size]])},[a(c,{"node-type":d,size:e.size==="md"?24:18,"show-tooltip":!0},null,8,["node-type","size"])],2))),128)),e.filteredCoreNodes.length>e.limit+1?(o(),t("div",{key:0,class:l([e.$style.button,e.size==="md"?e.$style.buttonMd:e.$style.buttonSm])}," +"+u(e.hiddenNodes),3)):n("",!0)],2)}const D={$style:F},G=$(E,[["render",j],["__cssModules",D]]),X=g({name:"TemplateCard",components:{TimeAgo:W,NodeList:G},props:{workflow:{type:Object},lastItem:{type:Boolean,default:!1},firstItem:{type:Boolean,default:!1},useWorkflowButton:{type:Boolean},loading:{type:Boolean},simpleView:{type:Boolean,default:!1}},data(){return{nodesToBeShown:5}},methods:{filterTemplateNodes:v,abbreviateNumber:V,countNodesToBeSliced(e){return e.length>this.nodesToBeShown?this.nodesToBeShown-1:this.nodesToBeShown},onUseWorkflowClick(e){this.$emit("useWorkflow",e)},onCardClick(e){this.$emit("click",e)}}}),Y="_nodes_psqnp_1",Z="_icon_psqnp_8",J="_card_psqnp_12",K="_hideOnHover_psqnp_24",P="_buttonContainer_psqnp_27",Q="_loaded_psqnp_38",x="_first_psqnp_42",ee="_last_psqnp_48",oe="_content_psqnp_53",te="_line_psqnp_58",ne="_loading_psqnp_64",se="_nodesContainer_psqnp_69",le={nodes:Y,icon:Z,card:J,hideOnHover:K,buttonContainer:P,loaded:Q,first:x,last:ee,content:oe,line:te,loading:ne,nodesContainer:se},ie={key:1},re={key:0};function ae(e,s,h,C,b,B){const c=r("n8n-loading"),d=r("n8n-heading"),i=r("font-awesome-icon"),m=r("n8n-text"),f=r("TimeAgo"),N=r("NodeList"),T=r("n8n-button");return o(),t("div",{class:l([e.$style.card,e.lastItem&&e.$style.last,e.firstItem&&e.$style.first,!e.loading&&e.$style.loaded]),"data-test-id":"template-card",onClick:s[0]||(s[0]=(...S)=>e.onCardClick&&e.onCardClick(...S))},[e.loading?(o(),t("div",{key:0,class:l(e.$style.loading)},[a(c,{rows:2,"shrink-last":!1,loading:e.loading},null,8,["loading"])],2)):e.workflow?(o(),t("div",ie,[a(d,{bold:!0,size:"small"},{default:p(()=>[w(u(e.workflow.name),1)]),_:1}),e.simpleView?n("",!0):(o(),t("div",{key:0,class:l(e.$style.content)},[e.workflow.totalViews?(o(),t("span",re,[a(m,{size:"small",color:"text-light"},{default:p(()=>[a(i,{icon:"eye"}),w(" "+u(e.abbreviateNumber(e.workflow.totalViews)),1)]),_:1})])):n("",!0),e.workflow.totalViews?(o(),t("div",{key:1,class:l(e.$style.line),textContent:"|"},null,2)):n("",!0),a(m,{size:"small",color:"text-light"},{default:p(()=>[a(f,{date:e.workflow.createdAt},null,8,["date"])]),_:1}),e.workflow.user?(o(),t("div",{key:2,class:l(e.$style.line),textContent:"|"},null,2)):n("",!0),e.workflow.user?(o(),k(m,{key:3,size:"small",color:"text-light"},{default:p(()=>[w("By "+u(e.workflow.user.username),1)]),_:1})):n("",!0)],2))])):n("",!0),!e.loading&&e.workflow?(o(),t("div",{key:2,class:l([e.$style.nodesContainer,e.useWorkflowButton&&e.$style.hideOnHover])},[e.workflow.nodes?(o(),k(N,{key:0,nodes:e.workflow.nodes,limit:e.nodesToBeShown,size:"md"},null,8,["nodes","limit"])):n("",!0)],2)):n("",!0),e.useWorkflowButton?(o(),t("div",{key:3,class:l(e.$style.buttonContainer)},[e.useWorkflowButton?(o(),k(T,{key:0,outline:"",label:"Use workflow","data-test-id":"use-workflow-button",onClick:M(e.onUseWorkflowClick,["stop"])},null,8,["onClick"])):n("",!0)],2)):n("",!0)],2)}const de={$style:le},ue=$(X,[["render",ae],["__cssModules",de]]),me=g({name:"TemplateList",components:{TemplateCard:ue},props:{infiniteScrollEnabled:{type:Boolean,default:!1},loading:{type:Boolean},useWorkflowButton:{type:Boolean,default:!1},workflows:{type:Array,default:()=>[]},totalWorkflows:{type:Number,default:0},simpleView:{type:Boolean,default:!1},totalCount:{type:Number,default:0}},mounted(){if(this.infiniteScrollEnabled){const e=document.getElementById("content");e&&e.addEventListener("scroll",this.onScroll)}},beforeUnmount(){const e=document.getElementById("content");e&&e.removeEventListener("scroll",this.onScroll)},methods:{onScroll(){const e=this.$refs.loader;if(!e||this.loading)return;const s=e.getBoundingClientRect();s.top>=0&&s.left>=0&&s.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&s.right<=(window.innerWidth||document.documentElement.clientWidth)&&this.$emit("loadMore")},onCardClick(e,s){this.$emit("openTemplate",{event:e,id:s})},onUseWorkflow(e,s){this.$emit("useWorkflow",{event:e,id:s})}}}),ce="_header_1ivn7_1",fe="_workflowButton_1ivn7_5",pe="_button_1ivn7_5",we="_nodes_1ivn7_8",ke={header:ce,workflowButton:fe,button:pe,nodes:we},he={key:0,"data-test-id":"template-count-label"},ye=["textContent"],_e={key:0,ref:"loader"},ge={key:1,"data-test-id":"templates-loading-container"};function $e(e,s,h,C,b,B){const c=r("n8n-heading"),d=r("TemplateCard");return e.loading||e.workflows.length?(o(),t("div",{key:0,class:l(e.$style.list)},[e.simpleView?n("",!0):(o(),t("div",{key:0,class:l(e.$style.header)},[a(c,{bold:!0,size:"medium",color:"text-light"},{default:p(()=>[w(u(e.$locale.baseText("templates.workflows"))+" ",1),e.totalCount>0?(o(),t("span",he,"("+u(e.totalCount)+")",1)):n("",!0),!e.loading&&e.totalWorkflows?(o(),t("span",{key:1,textContent:u(`(${e.totalWorkflows})`)},null,8,ye)):n("",!0)]),_:1})],2)),q("div",{class:l(e.$style.container)},[(o(!0),t(y,null,_(e.workflows,(i,m)=>(o(),k(d,{key:i.id,workflow:i,"first-item":m===0,"simple-view":e.simpleView,"last-item":m===e.workflows.length-1&&!e.loading,"use-workflow-button":e.useWorkflowButton,onClick:f=>e.onCardClick(f,i.id),onUseWorkflow:f=>e.onUseWorkflow(f,i.id)},null,8,["workflow","first-item","simple-view","last-item","use-workflow-button","onClick","onUseWorkflow"]))),128)),e.infiniteScrollEnabled?(o(),t("div",_e,null,512)):n("",!0),e.loading?(o(),t("div",ge,[(o(),t(y,null,_(4,i=>a(d,{key:"index-"+i,loading:!0,"first-item":e.workflows.length===0&&i===1,"last-item":i===4},null,8,["first-item","last-item"])),64))])):n("",!0)],2)],2)):n("",!0)}const Ce={$style:ke},Ne=$(me,[["render",$e],["__cssModules",Ce]]);export{G as N,Ne as T};
|
|
2
|
+
//# sourceMappingURL=TemplateList-CDA5KNLL.js.map
|