n8n-editor-ui 1.32.0 → 1.32.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 +61 -61
- package/dist/assets/{AuthView-WS0zqkdS.js → AuthView-XJQTAppn.js} +2 -2
- package/dist/assets/{AuthView-WS0zqkdS.js.map → AuthView-XJQTAppn.js.map} +1 -1
- package/dist/assets/{CanvasControls-tmVe2elM.js → CanvasControls-nkm_s3NJ.js} +2 -2
- package/dist/assets/{CanvasControls-tmVe2elM.js.map → CanvasControls-nkm_s3NJ.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-u6wexPI8.js → ChangePasswordView-LJP0GGhW.js} +2 -2
- package/dist/assets/{ChangePasswordView-u6wexPI8.js.map → ChangePasswordView-LJP0GGhW.js.map} +1 -1
- package/dist/assets/{CollectionParameter-ix5yo0BD.js → CollectionParameter-WomdLuIg.js} +2 -2
- package/dist/assets/CollectionParameter-WomdLuIg.js.map +1 -0
- package/dist/assets/{CredentialsView-d-2fVzNy.js → CredentialsView-eWc7OhDm.js} +2 -2
- package/dist/assets/{CredentialsView-d-2fVzNy.js.map → CredentialsView-eWc7OhDm.js.map} +1 -1
- package/dist/assets/{ExecutionFilter-Kg4fhYje.js → ExecutionFilter-PMU0Na0k.js} +2 -2
- package/dist/assets/{ExecutionFilter-Kg4fhYje.js.map → ExecutionFilter-PMU0Na0k.js.map} +1 -1
- package/dist/assets/{ExecutionPreview-Z16KTdFl.js → ExecutionPreview-HbKLO92J.js} +2 -2
- package/dist/assets/{ExecutionPreview-Z16KTdFl.js.map → ExecutionPreview-HbKLO92J.js.map} +1 -1
- package/dist/assets/{ExecutionsInfoAccordion-UocBSgxb.js → ExecutionsInfoAccordion-bUnNtFv2.js} +2 -2
- package/dist/assets/{ExecutionsInfoAccordion-UocBSgxb.js.map → ExecutionsInfoAccordion-bUnNtFv2.js.map} +1 -1
- package/dist/assets/{ExecutionsLandingPage--EwoSMiA.js → ExecutionsLandingPage-T60dbSux.js} +2 -2
- package/dist/assets/{ExecutionsLandingPage--EwoSMiA.js.map → ExecutionsLandingPage-T60dbSux.js.map} +1 -1
- package/dist/assets/{ExecutionsList-9MEhhn56.js → ExecutionsList-XJRM7Cqr.js} +2 -2
- package/dist/assets/{ExecutionsList-9MEhhn56.js.map → ExecutionsList-XJRM7Cqr.js.map} +1 -1
- package/dist/assets/{ExecutionsView-dOO1b5pZ.js → ExecutionsView-1aQVikJo.js} +2 -2
- package/dist/assets/{ExecutionsView-dOO1b5pZ.js.map → ExecutionsView-1aQVikJo.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-P3MqS20s.js → ForgotMyPasswordView-7wj-yAwY.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-P3MqS20s.js.map → ForgotMyPasswordView-7wj-yAwY.js.map} +1 -1
- package/dist/assets/{MainHeader-A43lnXDH.js → MainHeader-DUYaLAFd.js} +2 -2
- package/dist/assets/{MainHeader-A43lnXDH.js.map → MainHeader-DUYaLAFd.js.map} +1 -1
- package/dist/assets/{MainSidebar-_TrEfGUX.js → MainSidebar-AwOXawEk.js} +2 -2
- package/dist/assets/{MainSidebar-_TrEfGUX.js.map → MainSidebar-AwOXawEk.js.map} +1 -1
- package/dist/assets/{NodeCreation-d5MgZecP.js → NodeCreation-KwIDuMQX.js} +3 -3
- package/dist/assets/{NodeCreation-d5MgZecP.js.map → NodeCreation-KwIDuMQX.js.map} +1 -1
- package/dist/assets/{NodeCreator-HX7vFQ36.js → NodeCreator-6iz29Jwh.js} +2 -2
- package/dist/assets/{NodeCreator-HX7vFQ36.js.map → NodeCreator-6iz29Jwh.js.map} +1 -1
- package/dist/assets/{NodeList-Av_5l31V.js → NodeList-oe8SSQ2g.js} +2 -2
- package/dist/assets/{NodeList-Av_5l31V.js.map → NodeList-oe8SSQ2g.js.map} +1 -1
- package/dist/assets/{NodeView-xSCHk5Gm.js → NodeView-JV8BP6TJ.js} +3 -3
- package/dist/assets/{NodeView-xSCHk5Gm.js.map → NodeView-JV8BP6TJ.js.map} +1 -1
- package/dist/assets/{RunDataAi-lf7VU0w1.js → RunDataAi--C9ACRTm.js} +2 -2
- package/dist/assets/{RunDataAi-lf7VU0w1.js.map → RunDataAi--C9ACRTm.js.map} +1 -1
- package/dist/assets/{RunDataJson-hLAWizOD.js → RunDataJson-hcKGDyJz.js} +3 -3
- package/dist/assets/{RunDataJson-hLAWizOD.js.map → RunDataJson-hcKGDyJz.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-GrJTnQ3y.js → RunDataJsonActions-pkATA7DE.js} +2 -2
- package/dist/assets/{RunDataJsonActions-GrJTnQ3y.js.map → RunDataJsonActions-pkATA7DE.js.map} +1 -1
- package/dist/assets/{RunDataSchema-ZI0MG5I5.js → RunDataSchema-fPAFgFi6.js} +2 -2
- package/dist/assets/{RunDataSchema-ZI0MG5I5.js.map → RunDataSchema-fPAFgFi6.js.map} +1 -1
- package/dist/assets/{RunDataTable-th0cgEkH.js → RunDataTable-Xbkzwy5h.js} +2 -2
- package/dist/assets/{RunDataTable-th0cgEkH.js.map → RunDataTable-Xbkzwy5h.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-1z7rskrY.js → SamlOnboarding-tMxkYuyc.js} +2 -2
- package/dist/assets/{SamlOnboarding-1z7rskrY.js.map → SamlOnboarding-tMxkYuyc.js.map} +1 -1
- package/dist/assets/{SettingsApiView-y-RxfWUk.js → SettingsApiView-iLhcZ_Ad.js} +2 -2
- package/dist/assets/{SettingsApiView-y-RxfWUk.js.map → SettingsApiView-iLhcZ_Ad.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-eB9yXqkR.js → SettingsCommunityNodesView-kCmnDZXU.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-eB9yXqkR.js.map → SettingsCommunityNodesView-kCmnDZXU.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-F8cAkZ70.js → SettingsExternalSecrets-QTCx-DCR.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-F8cAkZ70.js.map → SettingsExternalSecrets-QTCx-DCR.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-vORcl2KE.js → SettingsFakeDoorView-3ZAyfMNZ.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-vORcl2KE.js.map → SettingsFakeDoorView-3ZAyfMNZ.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-HLdSAg7l.js → SettingsLdapView-9EURrpDL.js} +2 -2
- package/dist/assets/{SettingsLdapView-HLdSAg7l.js.map → SettingsLdapView-9EURrpDL.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-k8W4YRkq.js → SettingsLogStreamingView-eE9RDUjN.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-k8W4YRkq.js.map → SettingsLogStreamingView-eE9RDUjN.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-zQ3hu1Xb.js → SettingsSourceControl-bMzlo6t4.js} +2 -2
- package/dist/assets/{SettingsSourceControl-zQ3hu1Xb.js.map → SettingsSourceControl-bMzlo6t4.js.map} +1 -1
- package/dist/assets/{SettingsSso-ZDaKZSAz.js → SettingsSso-f8qqkUbH.js} +2 -2
- package/dist/assets/{SettingsSso-ZDaKZSAz.js.map → SettingsSso-f8qqkUbH.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-qhA0XufK.js → SettingsUsageAndPlan-Smr5GpEg.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-qhA0XufK.js.map → SettingsUsageAndPlan-Smr5GpEg.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-MpwADpXX.js → SettingsUsersView-VvvWispo.js} +2 -2
- package/dist/assets/{SettingsUsersView-MpwADpXX.js.map → SettingsUsersView-VvvWispo.js.map} +1 -1
- package/dist/assets/{SettingsView-0oD4eR43.js → SettingsView-rRURYQHa.js} +2 -2
- package/dist/assets/{SettingsView-0oD4eR43.js.map → SettingsView-rRURYQHa.js.map} +1 -1
- package/dist/assets/{SetupView-BgoIEBSe.js → SetupView-Pgc80gpk.js} +2 -2
- package/dist/assets/{SetupView-BgoIEBSe.js.map → SetupView-Pgc80gpk.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-lgz8EmNk.js → SetupWorkflowCredentialsButton-13o0FsxU.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-lgz8EmNk.js.map → SetupWorkflowCredentialsButton-13o0FsxU.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-oupB9su8.js → SetupWorkflowFromTemplateView-j2kVEUDy.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-oupB9su8.js.map → SetupWorkflowFromTemplateView-j2kVEUDy.js.map} +1 -1
- package/dist/assets/{SigninView-NkydbvAT.js → SigninView-uMLwylSB.js} +2 -2
- package/dist/assets/{SigninView-NkydbvAT.js.map → SigninView-uMLwylSB.js.map} +1 -1
- package/dist/assets/{SignupView-_1SYATx9.js → SignupView-D81TqUjs.js} +2 -2
- package/dist/assets/{SignupView-_1SYATx9.js.map → SignupView-D81TqUjs.js.map} +1 -1
- package/dist/assets/{TemplateDetails-1Snx23Yf.js → TemplateDetails-VIO9zkEg.js} +2 -2
- package/dist/assets/{TemplateDetails-1Snx23Yf.js.map → TemplateDetails-VIO9zkEg.js.map} +1 -1
- package/dist/assets/{TemplateList-EnEI8gDE.js → TemplateList-HB8hUr_8.js} +2 -2
- package/dist/assets/{TemplateList-EnEI8gDE.js.map → TemplateList-HB8hUr_8.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-n34DkMyr.js → TemplatesCollectionView-NFkj_TcY.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-n34DkMyr.js.map → TemplatesCollectionView-NFkj_TcY.js.map} +1 -1
- package/dist/assets/{TemplatesInfoCarousel-f6mATm4z.js → TemplatesInfoCarousel-d4FjKWjW.js} +2 -2
- package/dist/assets/{TemplatesInfoCarousel-f6mATm4z.js.map → TemplatesInfoCarousel-d4FjKWjW.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-Zux67gUG.js → TemplatesSearchView-W0D9cTjN.js} +2 -2
- package/dist/assets/{TemplatesSearchView-Zux67gUG.js.map → TemplatesSearchView-W0D9cTjN.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-dSvK0QBs.js → TemplatesWorkflowView-vHpI2Rpl.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-dSvK0QBs.js.map → TemplatesWorkflowView-vHpI2Rpl.js.map} +1 -1
- package/dist/assets/{VariablesView-BftXbT8z.js → VariablesView-nF0EArdS.js} +2 -2
- package/dist/assets/{VariablesView-BftXbT8z.js.map → VariablesView-nF0EArdS.js.map} +1 -1
- package/dist/assets/{WorkerView-7Ib0flYZ.js → WorkerView-GubNFvBv.js} +2 -2
- package/dist/assets/{WorkerView-7Ib0flYZ.js.map → WorkerView-GubNFvBv.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-Pbw1i_AI.js → WorkflowActivator-ySuj7uJI.js} +2 -2
- package/dist/assets/{WorkflowActivator-Pbw1i_AI.js.map → WorkflowActivator-ySuj7uJI.js.map} +1 -1
- package/dist/assets/{WorkflowHistory-_c2_b4mu.js → WorkflowHistory-gufVg7PC.js} +2 -2
- package/dist/assets/{WorkflowHistory-_c2_b4mu.js.map → WorkflowHistory-gufVg7PC.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-IqgW-M7B.js → WorkflowOnboardingView-sWTN3TK2.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-IqgW-M7B.js.map → WorkflowOnboardingView-sWTN3TK2.js.map} +1 -1
- package/dist/assets/{WorkflowsView-K1vknxJ3.js → WorkflowsView-9qPyA8du.js} +2 -2
- package/dist/assets/{WorkflowsView-K1vknxJ3.js.map → WorkflowsView-9qPyA8du.js.map} +1 -1
- package/dist/assets/{cloud-39Y_KZne.js → cloud-mOwwKpjz.js} +2 -2
- package/dist/assets/{cloud-39Y_KZne.js.map → cloud-mOwwKpjz.js.map} +1 -1
- package/dist/assets/{index-lUr8MiJ2.js → index-9xnnd4cn.js} +66 -66
- package/dist/assets/index-9xnnd4cn.js.map +1 -0
- package/dist/assets/{index-wl9S8xQJ.css → index-ED3b68TP.css} +1 -1
- package/dist/assets/{pushConnection-9MR6fwUT.js → pushConnection-6aRCrIsi.js} +2 -2
- package/dist/assets/{pushConnection-9MR6fwUT.js.map → pushConnection-6aRCrIsi.js.map} +1 -1
- package/dist/assets/{templateActions-MTyOknNV.js → templateActions-MRmcczkP.js} +2 -2
- package/dist/assets/{templateActions-MTyOknNV.js.map → templateActions-MRmcczkP.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-rwa9vby_.js → useExecutionDebugging-Z2R2TujJ.js} +2 -2
- package/dist/assets/{useExecutionDebugging-rwa9vby_.js.map → useExecutionDebugging-Z2R2TujJ.js.map} +1 -1
- package/dist/assets/{workflowActivate-iOg_mrLc.js → workflowActivate-rRmpx9AQ.js} +2 -2
- package/dist/assets/{workflowActivate-iOg_mrLc.js.map → workflowActivate-rRmpx9AQ.js.map} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-ix5yo0BD.js.map +0 -1
- package/dist/assets/index-lUr8MiJ2.js.map +0 -1
package/dist/assets/{SettingsLogStreamingView-k8W4YRkq.js → SettingsLogStreamingView-eE9RDUjN.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{m as N}from"./pinia-e-gLcRJ1.js";import{t as M,o as D,dt as T,a9 as z,_ as I,k as F,B as R,u as j,v as x,l as K,h as q,dr as A}from"./n8n-uKoDE8Qf.js";import{b as G,az as O}from"./index-lUr8MiJ2.js";import{v as H,f as s,D as g,E as i,i as n,K as r,J as S,I as m,y as c,a6 as a,n as J,h as l,F as v,H as _,_ as Y}from"./vendor-3VD3vVJy.js";import{v as Q}from"./uuid-McvpxQtQ.js";import"./lodash-es-JdX4GWLn.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-lH03nmRE.js";import"./vue-i18n-MkmfYvll.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-feLn5IS9.js";import"./@lezer/common-1hBQ1gIF.js";import"./codemirror-lang-html-n8n-wWQLhhqk.js";import"./prettier-s3fE3Qyr.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-n8n-expression-HpIZnV_9.js";import"./fast-json-stable-stringify-LPGjnXm6.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-B6sLPrrf.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const y={OPEN:"open",DELETE:"delete"},X=H({components:{},setup(){return{...G()}},data(){return{EnterpriseEditionFeature:M,nodeParameters:{}}},props:{eventBus:{type:Object},destination:{type:Object,required:!0,default:D(T)},readonly:Boolean},mounted(){var e;this.nodeParameters=Object.assign(D(T),this.destination),(e=this.eventBus)==null||e.on("destinationWasSaved",this.onDestinationWasSaved)},beforeUnmount(){var e;(e=this.eventBus)==null||e.off("destinationWasSaved",this.onDestinationWasSaved)},computed:{...N(O),actions(){const e=[{label:this.$locale.baseText("workflows.item.open"),value:y.OPEN}];return this.readonly||e.push({label:this.$locale.baseText("workflows.item.delete"),value:y.DELETE}),e},typeLabelName(){return`settings.log-streaming.${this.destination.__type}`}},methods:{onDestinationWasSaved(){this.logStreamingStore.getDestination(this.destination.id)&&(this.nodeParameters=Object.assign(D(T),this.destination))},async onClick(e){var t,o;this.$refs.cardActions===e.target||(t=this.$refs.cardActions)!=null&&t.contains(e.target)||(o=e.target)!=null&&o.contains(this.$refs.cardActions)||this.$emit("edit",this.destination.id)},onEnabledSwitched(e,t){this.nodeParameters.enabled=e,this.saveDestination()},async saveDestination(){await this.logStreamingStore.saveDestination(this.nodeParameters)},async onAction(e){if(e===y.OPEN)this.$emit("edit",this.destination.id);else if(e===y.DELETE){if(await this.confirm(this.$locale.baseText("settings.log-streaming.destinationDelete.message",{interpolate:{destinationName:this.destination.label}}),this.$locale.baseText("settings.log-streaming.destinationDelete.headline"),{type:"warning",confirmButtonText:this.$locale.baseText("settings.log-streaming.destinationDelete.confirmButtonText"),cancelButtonText:this.$locale.baseText("settings.log-streaming.destinationDelete.cancelButtonText")})!==z)return;this.$emit("remove",this.destination.id)}}}}),Z="_cardLink_ump6w_5",ee="_activeStatusText_ump6w_15",te="_cardHeading_ump6w_23",ne="_cardDescription_ump6w_29",se="_cardActions_ump6w_36",ie={cardLink:Z,activeStatusText:ee,cardHeading:te,cardDescription:ne,cardActions:se};function oe(e,t,o,u,W,P){const k=a("n8n-heading"),h=a("n8n-text"),b=a("el-switch"),$=a("n8n-action-toggle"),w=a("n8n-card");return s(),g(w,{class:c(e.$style.cardLink),"data-test-id":"destination-card",onClick:e.onClick},{header:i(()=>[n("div",null,[r(k,{tag:"h2",bold:"",class:c(e.$style.cardHeading)},{default:i(()=>[S(m(e.destination.label),1)]),_:1},8,["class"]),n("div",{class:c(e.$style.cardDescription)},[r(h,{color:"text-light",size:"small"},{default:i(()=>[n("span",null,m(e.$locale.baseText(e.typeLabelName)),1)]),_:1})],2)])]),append:i(()=>[n("div",{ref:"cardActions",class:c(e.$style.cardActions)},[n("div",{class:c(e.$style.activeStatusText),"data-test-id":"destination-activator-status"},[e.nodeParameters.enabled?(s(),g(h,{key:0,color:"success",size:"small",bold:""},{default:i(()=>[S(m(e.$locale.baseText("workflowActivator.active")),1)]),_:1})):(s(),g(h,{key:1,color:"text-base",size:"small",bold:""},{default:i(()=>[S(m(e.$locale.baseText("workflowActivator.inactive")),1)]),_:1}))],2),r(b,{class:"mr-s",disabled:e.readonly,"model-value":e.nodeParameters.enabled,title:e.nodeParameters.enabled?e.$locale.baseText("workflowActivator.deactivateWorkflow"):e.$locale.baseText("workflowActivator.activateWorkflow"),"active-color":"#13ce66","inactive-color":"#8899AA","data-test-id":"workflow-activate-switch","onUpdate:modelValue":t[0]||(t[0]=L=>e.onEnabledSwitched(L,e.destination.id))},null,8,["disabled","model-value","title"]),r($,{actions:e.actions,theme:"dark",onAction:e.onAction},null,8,["actions","onAction"])],2)]),_:1},8,["class","onClick"])}const ae={$style:ie},re=I(X,[["render",oe],["__cssModules",ae]]),le=H({name:"SettingsLogStreamingView",components:{EventDestinationCard:re},props:{},data(){return{eventBus:F(),destinations:Array,disableLicense:!1,allDestinations:[]}},async mounted(){this.isLicensed&&(await this.credentialsStore.fetchCredentialTypes(!1),await this.credentialsStore.fetchAllCredentials(),this.uiStore.nodeViewInitialized=!1,await this.getDestinationDataFromBackend(),this.logStreamingStore.$onAction(({name:e,after:t})=>{(e==="removeDestination"||e==="updateDestination")&&t(async()=>{this.$forceUpdate()})}),this.eventBus.on("destinationWasSaved",this.onDestinationWasSaved),this.eventBus.on("remove",this.onRemove),this.eventBus.on("closing",this.onBusClosing))},beforeUnmount(){this.eventBus.off("destinationWasSaved",this.onDestinationWasSaved),this.eventBus.off("remove",this.onRemove),this.eventBus.off("closing",this.onBusClosing)},computed:{...N(K,O,x,j,R),sortedItemKeysByLabel(){var t;const e=[];for(const[o,u]of Object.entries(this.logStreamingStore.items))e.push({key:o,label:((t=u.destination)==null?void 0:t.label)??"Destination"});return e.sort((o,u)=>o.label.localeCompare(u.label))},environment(){return"production"},isLicensed(){return this.disableLicense?!1:this.settingsStore.isEnterpriseFeatureEnabled(M.LogStreaming)},canManageLogStreaming(){return q(["rbac"],{rbac:{scope:"logStreaming:manage"}})}},methods:{onDestinationWasSaved(){this.$forceUpdate()},onBusClosing(){this.workflowsStore.removeAllNodes({setStateDirty:!1,removePinData:!0}),this.uiStore.stateIsDirty=!1},async getDestinationDataFromBackend(){this.logStreamingStore.clearEventNames(),this.logStreamingStore.clearDestinationItemTrees(),this.allDestinations=[];const e=await this.logStreamingStore.fetchEventNames();if(e)for(const o of e)this.logStreamingStore.addEventName(o);const t=await this.logStreamingStore.fetchDestinations();if(t)for(const o of t)this.logStreamingStore.addDestination(o),this.allDestinations.push(o);this.$forceUpdate()},goToUpgrade(){this.uiStore.goToUpgrade("log-streaming","upgrade-log-streaming")},storeHasItems(){return this.logStreamingStore.items&&Object.keys(this.logStreamingStore.items).length>0},async addDestination(){const e=D(T);e.id=Q(),this.logStreamingStore.addDestination(e),await J(),this.uiStore.openModalWithData({name:A,data:{destination:e,isNew:!0,eventBus:this.eventBus}})},async onRemove(e){if(!e)return;await this.logStreamingStore.deleteDestination(e);const t=this.workflowsStore.getNodeByName(e);t&&this.workflowsStore.removeNode(t)},async onEdit(e){if(!e)return;const t=this.logStreamingStore.getDestination(e);t&&this.uiStore.openModalWithData({name:A,data:{destination:t,isNew:!1,eventBus:this.eventBus}})}}}),de="_header_1lkg8_5",ce="_destinationItem_1lkg8_15",me={header:de,destinationItem:ce},ge={class:"mb-2xl"},ue={class:"ml-m"},he={class:"mb-l"},pe=["innerHTML"],fe={class:"mt-m text-right"},ve={key:1,"data-test-id":"action-box-licensed"},Se=["innerHTML"],be={key:0,class:"mb-l"},_e=["innerHTML"],ye={"data-test-id":"action-box-unlicensed"},De=["innerHTML"];function Te(e,t,o,u,W,P){const k=a("n8n-heading"),h=a("el-switch"),b=a("n8n-info-tip"),$=a("EventDestinationCard"),w=a("el-col"),L=a("el-row"),U=a("n8n-button"),B=a("n8n-action-box");return s(),l("div",null,[n("div",{class:c(e.$style.header)},[n("div",ge,[r(k,{size:"2xlarge"},{default:i(()=>[S(m(e.$locale.baseText("settings.log-streaming.heading")),1)]),_:1}),e.environment!=="production"?(s(),l(v,{key:0},[n("strong",ue,"Disable License ("+m(e.environment)+") ",1),r(h,{modelValue:e.disableLicense,"onUpdate:modelValue":t[0]||(t[0]=d=>e.disableLicense=d),size:"large","data-test-id":"disable-license-toggle"},null,8,["modelValue"])],64)):_("",!0)])],2),e.isLicensed?(s(),l(v,{key:0},[n("div",he,[r(b,{theme:"info",type:"note"},{default:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.infoText")},null,8,pe)]),_:1})]),e.storeHasItems()?(s(),l(v,{key:0},[(s(!0),l(v,null,Y(e.sortedItemKeysByLabel,d=>(s(),g(L,{key:d.key,gutter:10,class:c(e.$style.destinationItem)},{default:i(()=>{var E;return[(E=e.logStreamingStore.items[d.key])!=null&&E.destination?(s(),g(w,{key:0},{default:i(()=>{var C;return[r($,{destination:(C=e.logStreamingStore.items[d.key])==null?void 0:C.destination,"event-bus":e.eventBus,readonly:!e.canManageLogStreaming,onRemove:V=>{var p,f;return e.onRemove((f=(p=e.logStreamingStore.items[d.key])==null?void 0:p.destination)==null?void 0:f.id)},onEdit:V=>{var p,f;return e.onEdit((f=(p=e.logStreamingStore.items[d.key])==null?void 0:p.destination)==null?void 0:f.id)}},null,8,["destination","event-bus","readonly","onRemove","onEdit"])]}),_:2},1024)):_("",!0)]}),_:2},1032,["class"]))),128)),n("div",fe,[e.canManageLogStreaming?(s(),g(U,{key:0,size:"large",onClick:e.addDestination},{default:i(()=>[S(m(e.$locale.baseText("settings.log-streaming.add")),1)]),_:1},8,["onClick"])):_("",!0)])],64)):(s(),l("div",ve,[r(B,{"button-text":e.$locale.baseText("settings.log-streaming.add"),"onClick:button":e.addDestination},{heading:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.addFirstTitle")},null,8,Se)]),_:1},8,["button-text","onClick:button"])]))],64)):(s(),l(v,{key:1},[e.$locale.baseText("settings.log-streaming.infoText")?(s(),l("div",be,[r(b,{theme:"info",type:"note"},{default:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.infoText")},null,8,_e)]),_:1})])):_("",!0),n("div",ye,[r(B,{description:e.$locale.baseText("settings.log-streaming.actionBox.description"),"button-text":e.$locale.baseText("settings.log-streaming.actionBox.button"),"onClick:button":e.goToUpgrade},{heading:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.actionBox.title")},null,8,De)]),_:1},8,["description","button-text","onClick:button"])])],64))])}const ke={$style:me},Ze=I(le,[["render",Te],["__cssModules",ke]]);export{Ze as default};
|
|
2
|
-
//# sourceMappingURL=SettingsLogStreamingView-
|
|
1
|
+
import{m as N}from"./pinia-e-gLcRJ1.js";import{t as M,o as D,dt as T,a9 as z,_ as I,k as F,B as R,u as j,v as x,l as K,h as q,dr as A}from"./n8n-uKoDE8Qf.js";import{b as G,az as O}from"./index-9xnnd4cn.js";import{v as H,f as s,D as g,E as i,i as n,K as r,J as S,I as m,y as c,a6 as a,n as J,h as l,F as v,H as _,_ as Y}from"./vendor-3VD3vVJy.js";import{v as Q}from"./uuid-McvpxQtQ.js";import"./lodash-es-JdX4GWLn.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-lH03nmRE.js";import"./vue-i18n-MkmfYvll.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-feLn5IS9.js";import"./@lezer/common-1hBQ1gIF.js";import"./codemirror-lang-html-n8n-wWQLhhqk.js";import"./prettier-s3fE3Qyr.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-n8n-expression-HpIZnV_9.js";import"./fast-json-stable-stringify-LPGjnXm6.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-B6sLPrrf.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const y={OPEN:"open",DELETE:"delete"},X=H({components:{},setup(){return{...G()}},data(){return{EnterpriseEditionFeature:M,nodeParameters:{}}},props:{eventBus:{type:Object},destination:{type:Object,required:!0,default:D(T)},readonly:Boolean},mounted(){var e;this.nodeParameters=Object.assign(D(T),this.destination),(e=this.eventBus)==null||e.on("destinationWasSaved",this.onDestinationWasSaved)},beforeUnmount(){var e;(e=this.eventBus)==null||e.off("destinationWasSaved",this.onDestinationWasSaved)},computed:{...N(O),actions(){const e=[{label:this.$locale.baseText("workflows.item.open"),value:y.OPEN}];return this.readonly||e.push({label:this.$locale.baseText("workflows.item.delete"),value:y.DELETE}),e},typeLabelName(){return`settings.log-streaming.${this.destination.__type}`}},methods:{onDestinationWasSaved(){this.logStreamingStore.getDestination(this.destination.id)&&(this.nodeParameters=Object.assign(D(T),this.destination))},async onClick(e){var t,o;this.$refs.cardActions===e.target||(t=this.$refs.cardActions)!=null&&t.contains(e.target)||(o=e.target)!=null&&o.contains(this.$refs.cardActions)||this.$emit("edit",this.destination.id)},onEnabledSwitched(e,t){this.nodeParameters.enabled=e,this.saveDestination()},async saveDestination(){await this.logStreamingStore.saveDestination(this.nodeParameters)},async onAction(e){if(e===y.OPEN)this.$emit("edit",this.destination.id);else if(e===y.DELETE){if(await this.confirm(this.$locale.baseText("settings.log-streaming.destinationDelete.message",{interpolate:{destinationName:this.destination.label}}),this.$locale.baseText("settings.log-streaming.destinationDelete.headline"),{type:"warning",confirmButtonText:this.$locale.baseText("settings.log-streaming.destinationDelete.confirmButtonText"),cancelButtonText:this.$locale.baseText("settings.log-streaming.destinationDelete.cancelButtonText")})!==z)return;this.$emit("remove",this.destination.id)}}}}),Z="_cardLink_ump6w_5",ee="_activeStatusText_ump6w_15",te="_cardHeading_ump6w_23",ne="_cardDescription_ump6w_29",se="_cardActions_ump6w_36",ie={cardLink:Z,activeStatusText:ee,cardHeading:te,cardDescription:ne,cardActions:se};function oe(e,t,o,u,W,P){const k=a("n8n-heading"),h=a("n8n-text"),b=a("el-switch"),$=a("n8n-action-toggle"),w=a("n8n-card");return s(),g(w,{class:c(e.$style.cardLink),"data-test-id":"destination-card",onClick:e.onClick},{header:i(()=>[n("div",null,[r(k,{tag:"h2",bold:"",class:c(e.$style.cardHeading)},{default:i(()=>[S(m(e.destination.label),1)]),_:1},8,["class"]),n("div",{class:c(e.$style.cardDescription)},[r(h,{color:"text-light",size:"small"},{default:i(()=>[n("span",null,m(e.$locale.baseText(e.typeLabelName)),1)]),_:1})],2)])]),append:i(()=>[n("div",{ref:"cardActions",class:c(e.$style.cardActions)},[n("div",{class:c(e.$style.activeStatusText),"data-test-id":"destination-activator-status"},[e.nodeParameters.enabled?(s(),g(h,{key:0,color:"success",size:"small",bold:""},{default:i(()=>[S(m(e.$locale.baseText("workflowActivator.active")),1)]),_:1})):(s(),g(h,{key:1,color:"text-base",size:"small",bold:""},{default:i(()=>[S(m(e.$locale.baseText("workflowActivator.inactive")),1)]),_:1}))],2),r(b,{class:"mr-s",disabled:e.readonly,"model-value":e.nodeParameters.enabled,title:e.nodeParameters.enabled?e.$locale.baseText("workflowActivator.deactivateWorkflow"):e.$locale.baseText("workflowActivator.activateWorkflow"),"active-color":"#13ce66","inactive-color":"#8899AA","data-test-id":"workflow-activate-switch","onUpdate:modelValue":t[0]||(t[0]=L=>e.onEnabledSwitched(L,e.destination.id))},null,8,["disabled","model-value","title"]),r($,{actions:e.actions,theme:"dark",onAction:e.onAction},null,8,["actions","onAction"])],2)]),_:1},8,["class","onClick"])}const ae={$style:ie},re=I(X,[["render",oe],["__cssModules",ae]]),le=H({name:"SettingsLogStreamingView",components:{EventDestinationCard:re},props:{},data(){return{eventBus:F(),destinations:Array,disableLicense:!1,allDestinations:[]}},async mounted(){this.isLicensed&&(await this.credentialsStore.fetchCredentialTypes(!1),await this.credentialsStore.fetchAllCredentials(),this.uiStore.nodeViewInitialized=!1,await this.getDestinationDataFromBackend(),this.logStreamingStore.$onAction(({name:e,after:t})=>{(e==="removeDestination"||e==="updateDestination")&&t(async()=>{this.$forceUpdate()})}),this.eventBus.on("destinationWasSaved",this.onDestinationWasSaved),this.eventBus.on("remove",this.onRemove),this.eventBus.on("closing",this.onBusClosing))},beforeUnmount(){this.eventBus.off("destinationWasSaved",this.onDestinationWasSaved),this.eventBus.off("remove",this.onRemove),this.eventBus.off("closing",this.onBusClosing)},computed:{...N(K,O,x,j,R),sortedItemKeysByLabel(){var t;const e=[];for(const[o,u]of Object.entries(this.logStreamingStore.items))e.push({key:o,label:((t=u.destination)==null?void 0:t.label)??"Destination"});return e.sort((o,u)=>o.label.localeCompare(u.label))},environment(){return"production"},isLicensed(){return this.disableLicense?!1:this.settingsStore.isEnterpriseFeatureEnabled(M.LogStreaming)},canManageLogStreaming(){return q(["rbac"],{rbac:{scope:"logStreaming:manage"}})}},methods:{onDestinationWasSaved(){this.$forceUpdate()},onBusClosing(){this.workflowsStore.removeAllNodes({setStateDirty:!1,removePinData:!0}),this.uiStore.stateIsDirty=!1},async getDestinationDataFromBackend(){this.logStreamingStore.clearEventNames(),this.logStreamingStore.clearDestinationItemTrees(),this.allDestinations=[];const e=await this.logStreamingStore.fetchEventNames();if(e)for(const o of e)this.logStreamingStore.addEventName(o);const t=await this.logStreamingStore.fetchDestinations();if(t)for(const o of t)this.logStreamingStore.addDestination(o),this.allDestinations.push(o);this.$forceUpdate()},goToUpgrade(){this.uiStore.goToUpgrade("log-streaming","upgrade-log-streaming")},storeHasItems(){return this.logStreamingStore.items&&Object.keys(this.logStreamingStore.items).length>0},async addDestination(){const e=D(T);e.id=Q(),this.logStreamingStore.addDestination(e),await J(),this.uiStore.openModalWithData({name:A,data:{destination:e,isNew:!0,eventBus:this.eventBus}})},async onRemove(e){if(!e)return;await this.logStreamingStore.deleteDestination(e);const t=this.workflowsStore.getNodeByName(e);t&&this.workflowsStore.removeNode(t)},async onEdit(e){if(!e)return;const t=this.logStreamingStore.getDestination(e);t&&this.uiStore.openModalWithData({name:A,data:{destination:t,isNew:!1,eventBus:this.eventBus}})}}}),de="_header_1lkg8_5",ce="_destinationItem_1lkg8_15",me={header:de,destinationItem:ce},ge={class:"mb-2xl"},ue={class:"ml-m"},he={class:"mb-l"},pe=["innerHTML"],fe={class:"mt-m text-right"},ve={key:1,"data-test-id":"action-box-licensed"},Se=["innerHTML"],be={key:0,class:"mb-l"},_e=["innerHTML"],ye={"data-test-id":"action-box-unlicensed"},De=["innerHTML"];function Te(e,t,o,u,W,P){const k=a("n8n-heading"),h=a("el-switch"),b=a("n8n-info-tip"),$=a("EventDestinationCard"),w=a("el-col"),L=a("el-row"),U=a("n8n-button"),B=a("n8n-action-box");return s(),l("div",null,[n("div",{class:c(e.$style.header)},[n("div",ge,[r(k,{size:"2xlarge"},{default:i(()=>[S(m(e.$locale.baseText("settings.log-streaming.heading")),1)]),_:1}),e.environment!=="production"?(s(),l(v,{key:0},[n("strong",ue,"Disable License ("+m(e.environment)+") ",1),r(h,{modelValue:e.disableLicense,"onUpdate:modelValue":t[0]||(t[0]=d=>e.disableLicense=d),size:"large","data-test-id":"disable-license-toggle"},null,8,["modelValue"])],64)):_("",!0)])],2),e.isLicensed?(s(),l(v,{key:0},[n("div",he,[r(b,{theme:"info",type:"note"},{default:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.infoText")},null,8,pe)]),_:1})]),e.storeHasItems()?(s(),l(v,{key:0},[(s(!0),l(v,null,Y(e.sortedItemKeysByLabel,d=>(s(),g(L,{key:d.key,gutter:10,class:c(e.$style.destinationItem)},{default:i(()=>{var E;return[(E=e.logStreamingStore.items[d.key])!=null&&E.destination?(s(),g(w,{key:0},{default:i(()=>{var C;return[r($,{destination:(C=e.logStreamingStore.items[d.key])==null?void 0:C.destination,"event-bus":e.eventBus,readonly:!e.canManageLogStreaming,onRemove:V=>{var p,f;return e.onRemove((f=(p=e.logStreamingStore.items[d.key])==null?void 0:p.destination)==null?void 0:f.id)},onEdit:V=>{var p,f;return e.onEdit((f=(p=e.logStreamingStore.items[d.key])==null?void 0:p.destination)==null?void 0:f.id)}},null,8,["destination","event-bus","readonly","onRemove","onEdit"])]}),_:2},1024)):_("",!0)]}),_:2},1032,["class"]))),128)),n("div",fe,[e.canManageLogStreaming?(s(),g(U,{key:0,size:"large",onClick:e.addDestination},{default:i(()=>[S(m(e.$locale.baseText("settings.log-streaming.add")),1)]),_:1},8,["onClick"])):_("",!0)])],64)):(s(),l("div",ve,[r(B,{"button-text":e.$locale.baseText("settings.log-streaming.add"),"onClick:button":e.addDestination},{heading:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.addFirstTitle")},null,8,Se)]),_:1},8,["button-text","onClick:button"])]))],64)):(s(),l(v,{key:1},[e.$locale.baseText("settings.log-streaming.infoText")?(s(),l("div",be,[r(b,{theme:"info",type:"note"},{default:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.infoText")},null,8,_e)]),_:1})])):_("",!0),n("div",ye,[r(B,{description:e.$locale.baseText("settings.log-streaming.actionBox.description"),"button-text":e.$locale.baseText("settings.log-streaming.actionBox.button"),"onClick:button":e.goToUpgrade},{heading:i(()=>[n("span",{innerHTML:e.$locale.baseText("settings.log-streaming.actionBox.title")},null,8,De)]),_:1},8,["description","button-text","onClick:button"])])],64))])}const ke={$style:me},Ze=I(le,[["render",Te],["__cssModules",ke]]);export{Ze as default};
|
|
2
|
+
//# sourceMappingURL=SettingsLogStreamingView-eE9RDUjN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsLogStreamingView-k8W4YRkq.js","sources":["../../src/components/SettingsLogStreaming/EventDestinationCard.ee.vue","../../src/views/SettingsLogStreamingView.vue"],"sourcesContent":["<template>\n\t<n8n-card :class=\"$style.cardLink\" data-test-id=\"destination-card\" @click=\"onClick\">\n\t\t<template #header>\n\t\t\t<div>\n\t\t\t\t<n8n-heading tag=\"h2\" bold :class=\"$style.cardHeading\">\n\t\t\t\t\t{{ destination.label }}\n\t\t\t\t</n8n-heading>\n\t\t\t\t<div :class=\"$style.cardDescription\">\n\t\t\t\t\t<n8n-text color=\"text-light\" size=\"small\">\n\t\t\t\t\t\t<span>{{ $locale.baseText(typeLabelName) }}</span>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #append>\n\t\t\t<div ref=\"cardActions\" :class=\"$style.cardActions\">\n\t\t\t\t<div :class=\"$style.activeStatusText\" data-test-id=\"destination-activator-status\">\n\t\t\t\t\t<n8n-text v-if=\"nodeParameters.enabled\" :color=\"'success'\" size=\"small\" bold>\n\t\t\t\t\t\t{{ $locale.baseText('workflowActivator.active') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t\t<n8n-text v-else color=\"text-base\" size=\"small\" bold>\n\t\t\t\t\t\t{{ $locale.baseText('workflowActivator.inactive') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\n\t\t\t\t<el-switch\n\t\t\t\t\tclass=\"mr-s\"\n\t\t\t\t\t:disabled=\"readonly\"\n\t\t\t\t\t:model-value=\"nodeParameters.enabled\"\n\t\t\t\t\t:title=\"\n\t\t\t\t\t\tnodeParameters.enabled\n\t\t\t\t\t\t\t? $locale.baseText('workflowActivator.deactivateWorkflow')\n\t\t\t\t\t\t\t: $locale.baseText('workflowActivator.activateWorkflow')\n\t\t\t\t\t\"\n\t\t\t\t\tactive-color=\"#13ce66\"\n\t\t\t\t\tinactive-color=\"#8899AA\"\n\t\t\t\t\tdata-test-id=\"workflow-activate-switch\"\n\t\t\t\t\t@update:modelValue=\"onEnabledSwitched($event, destination.id)\"\n\t\t\t\t>\n\t\t\t\t</el-switch>\n\n\t\t\t\t<n8n-action-toggle :actions=\"actions\" theme=\"dark\" @action=\"onAction\" />\n\t\t\t</div>\n\t\t</template>\n\t</n8n-card>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { EnterpriseEditionFeature, MODAL_CONFIRM } from '@/constants';\nimport { useMessage } from '@/composables/useMessage';\nimport { useLogStreamingStore } from '@/stores/logStreaming.store';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport type { MessageEventBusDestinationOptions } from 'n8n-workflow';\nimport { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow';\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { EventBus } from 'n8n-design-system';\n\nexport const DESTINATION_LIST_ITEM_ACTIONS = {\n\tOPEN: 'open',\n\tDELETE: 'delete',\n};\n\nexport default defineComponent({\n\tcomponents: {},\n\tsetup() {\n\t\treturn {\n\t\t\t...useMessage(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEnterpriseEditionFeature,\n\t\t\tnodeParameters: {} as MessageEventBusDestinationOptions,\n\t\t};\n\t},\n\tprops: {\n\t\teventBus: {\n\t\t\ttype: Object as PropType<EventBus>,\n\t\t},\n\t\tdestination: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: deepCopy(defaultMessageEventBusDestinationOptions),\n\t\t},\n\t\treadonly: Boolean,\n\t},\n\tmounted() {\n\t\tthis.nodeParameters = Object.assign(\n\t\t\tdeepCopy(defaultMessageEventBusDestinationOptions),\n\t\t\tthis.destination,\n\t\t);\n\t\tthis.eventBus?.on('destinationWasSaved', this.onDestinationWasSaved);\n\t},\n\tbeforeUnmount() {\n\t\tthis.eventBus?.off('destinationWasSaved', this.onDestinationWasSaved);\n\t},\n\tcomputed: {\n\t\t...mapStores(useLogStreamingStore),\n\t\tactions(): Array<{ label: string; value: string }> {\n\t\t\tconst actions = [\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('workflows.item.open'),\n\t\t\t\t\tvalue: DESTINATION_LIST_ITEM_ACTIONS.OPEN,\n\t\t\t\t},\n\t\t\t];\n\t\t\tif (!this.readonly) {\n\t\t\t\tactions.push({\n\t\t\t\t\tlabel: this.$locale.baseText('workflows.item.delete'),\n\t\t\t\t\tvalue: DESTINATION_LIST_ITEM_ACTIONS.DELETE,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn actions;\n\t\t},\n\t\ttypeLabelName(): BaseTextKey {\n\t\t\treturn `settings.log-streaming.${this.destination.__type}` as BaseTextKey;\n\t\t},\n\t},\n\tmethods: {\n\t\tonDestinationWasSaved() {\n\t\t\tconst updatedDestination = this.logStreamingStore.getDestination(this.destination.id);\n\t\t\tif (updatedDestination) {\n\t\t\t\tthis.nodeParameters = Object.assign(\n\t\t\t\t\tdeepCopy(defaultMessageEventBusDestinationOptions),\n\t\t\t\t\tthis.destination,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onClick(event: Event) {\n\t\t\tif (\n\t\t\t\tthis.$refs.cardActions === event.target ||\n\t\t\t\tthis.$refs.cardActions?.contains(event.target) ||\n\t\t\t\tevent.target?.contains(this.$refs.cardActions)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$emit('edit', this.destination.id);\n\t\t},\n\t\tonEnabledSwitched(state: boolean, destinationId: string) {\n\t\t\tthis.nodeParameters.enabled = state;\n\t\t\tvoid this.saveDestination();\n\t\t},\n\t\tasync saveDestination() {\n\t\t\tawait this.logStreamingStore.saveDestination(this.nodeParameters);\n\t\t},\n\t\tasync onAction(action: string) {\n\t\t\tif (action === DESTINATION_LIST_ITEM_ACTIONS.OPEN) {\n\t\t\t\tthis.$emit('edit', this.destination.id);\n\t\t\t} else if (action === DESTINATION_LIST_ITEM_ACTIONS.DELETE) {\n\t\t\t\tconst deleteConfirmed = await this.confirm(\n\t\t\t\t\tthis.$locale.baseText('settings.log-streaming.destinationDelete.message', {\n\t\t\t\t\t\tinterpolate: { destinationName: this.destination.label },\n\t\t\t\t\t}),\n\t\t\t\t\tthis.$locale.baseText('settings.log-streaming.destinationDelete.headline'),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\tconfirmButtonText: this.$locale.baseText(\n\t\t\t\t\t\t\t'settings.log-streaming.destinationDelete.confirmButtonText',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcancelButtonText: this.$locale.baseText(\n\t\t\t\t\t\t\t'settings.log-streaming.destinationDelete.cancelButtonText',\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tif (deleteConfirmed !== MODAL_CONFIRM) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$emit('remove', this.destination.id);\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.cardLink {\n\ttransition: box-shadow 0.3s ease;\n\tcursor: pointer;\n\tpadding: 0 0 0 var(--spacing-s);\n\talign-items: stretch;\n\n\t&:hover {\n\t\tbox-shadow: 0 2px 8px rgba(#441c17, 0.1);\n\t}\n}\n\n.activeStatusText {\n\twidth: 64px; // Required to avoid jumping when changing active state\n\tpadding-right: var(--spacing-2xs);\n\tbox-sizing: border-box;\n\tdisplay: inline-block;\n\ttext-align: right;\n}\n\n.cardHeading {\n\tfont-size: var(--font-size-s);\n\tword-break: break-word;\n\tpadding: var(--spacing-s) 0 0 var(--spacing-s);\n}\n\n.cardDescription {\n\tmin-height: 19px;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 0 var(--spacing-s) var(--spacing-s);\n}\n\n.cardActions {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\talign-items: center;\n\tpadding: 0 var(--spacing-s) 0 0;\n\tcursor: default;\n}\n</style>\n","<template>\n\t<div>\n\t\t<div :class=\"$style.header\">\n\t\t\t<div class=\"mb-2xl\">\n\t\t\t\t<n8n-heading size=\"2xlarge\">\n\t\t\t\t\t{{ $locale.baseText(`settings.log-streaming.heading`) }}\n\t\t\t\t</n8n-heading>\n\t\t\t\t<template v-if=\"environment !== 'production'\">\n\t\t\t\t\t<strong class=\"ml-m\">Disable License ({{ environment }}) </strong>\n\t\t\t\t\t<el-switch v-model=\"disableLicense\" size=\"large\" data-test-id=\"disable-license-toggle\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\t\t<template v-if=\"isLicensed\">\n\t\t\t<div class=\"mb-l\">\n\t\t\t\t<n8n-info-tip theme=\"info\" type=\"note\">\n\t\t\t\t\t<span v-html=\"$locale.baseText('settings.log-streaming.infoText')\"></span>\n\t\t\t\t</n8n-info-tip>\n\t\t\t</div>\n\t\t\t<template v-if=\"storeHasItems()\">\n\t\t\t\t<el-row\n\t\t\t\t\tv-for=\"item in sortedItemKeysByLabel\"\n\t\t\t\t\t:key=\"item.key\"\n\t\t\t\t\t:gutter=\"10\"\n\t\t\t\t\t:class=\"$style.destinationItem\"\n\t\t\t\t>\n\t\t\t\t\t<el-col v-if=\"logStreamingStore.items[item.key]?.destination\">\n\t\t\t\t\t\t<EventDestinationCard\n\t\t\t\t\t\t\t:destination=\"logStreamingStore.items[item.key]?.destination\"\n\t\t\t\t\t\t\t:event-bus=\"eventBus\"\n\t\t\t\t\t\t\t:readonly=\"!canManageLogStreaming\"\n\t\t\t\t\t\t\t@remove=\"onRemove(logStreamingStore.items[item.key]?.destination?.id)\"\n\t\t\t\t\t\t\t@edit=\"onEdit(logStreamingStore.items[item.key]?.destination?.id)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</el-col>\n\t\t\t\t</el-row>\n\t\t\t\t<div class=\"mt-m text-right\">\n\t\t\t\t\t<n8n-button v-if=\"canManageLogStreaming\" size=\"large\" @click=\"addDestination\">\n\t\t\t\t\t\t{{ $locale.baseText(`settings.log-streaming.add`) }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<div v-else data-test-id=\"action-box-licensed\">\n\t\t\t\t<n8n-action-box\n\t\t\t\t\t:button-text=\"$locale.baseText(`settings.log-streaming.add`)\"\n\t\t\t\t\t@click:button=\"addDestination\"\n\t\t\t\t>\n\t\t\t\t\t<template #heading>\n\t\t\t\t\t\t<span v-html=\"$locale.baseText(`settings.log-streaming.addFirstTitle`)\" />\n\t\t\t\t\t</template>\n\t\t\t\t</n8n-action-box>\n\t\t\t</div>\n\t\t</template>\n\t\t<template v-else>\n\t\t\t<div v-if=\"$locale.baseText('settings.log-streaming.infoText')\" class=\"mb-l\">\n\t\t\t\t<n8n-info-tip theme=\"info\" type=\"note\">\n\t\t\t\t\t<span v-html=\"$locale.baseText('settings.log-streaming.infoText')\"></span>\n\t\t\t\t</n8n-info-tip>\n\t\t\t</div>\n\t\t\t<div data-test-id=\"action-box-unlicensed\">\n\t\t\t\t<n8n-action-box\n\t\t\t\t\t:description=\"$locale.baseText('settings.log-streaming.actionBox.description')\"\n\t\t\t\t\t:button-text=\"$locale.baseText('settings.log-streaming.actionBox.button')\"\n\t\t\t\t\t@click:button=\"goToUpgrade\"\n\t\t\t\t>\n\t\t\t\t\t<template #heading>\n\t\t\t\t\t\t<span v-html=\"$locale.baseText('settings.log-streaming.actionBox.title')\" />\n\t\t\t\t\t</template>\n\t\t\t\t</n8n-action-box>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, nextTick } from 'vue';\nimport { mapStores } from 'pinia';\nimport { v4 as uuid } from 'uuid';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { hasPermission } from '@/rbac/permissions';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useLogStreamingStore } from '@/stores/logStreaming.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { LOG_STREAM_MODAL_KEY, EnterpriseEditionFeature } from '@/constants';\nimport type { MessageEventBusDestinationOptions } from 'n8n-workflow';\nimport { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow';\nimport EventDestinationCard from '@/components/SettingsLogStreaming/EventDestinationCard.ee.vue';\nimport { createEventBus } from 'n8n-design-system/utils';\n\nexport default defineComponent({\n\tname: 'SettingsLogStreamingView',\n\tcomponents: {\n\t\tEventDestinationCard,\n\t},\n\tprops: {},\n\tdata() {\n\t\treturn {\n\t\t\teventBus: createEventBus(),\n\t\t\tdestinations: Array<MessageEventBusDestinationOptions>,\n\t\t\tdisableLicense: false,\n\t\t\tallDestinations: [] as MessageEventBusDestinationOptions[],\n\t\t};\n\t},\n\tasync mounted() {\n\t\tif (!this.isLicensed) return;\n\n\t\t// Prepare credentialsStore so modals can pick up credentials\n\t\tawait this.credentialsStore.fetchCredentialTypes(false);\n\t\tawait this.credentialsStore.fetchAllCredentials();\n\t\tthis.uiStore.nodeViewInitialized = false;\n\n\t\t// fetch Destination data from the backend\n\t\tawait this.getDestinationDataFromBackend();\n\n\t\t// since we are not really integrated into the hooks, we listen to the store and refresh the destinations\n\t\tthis.logStreamingStore.$onAction(({ name, after }) => {\n\t\t\tif (name === 'removeDestination' || name === 'updateDestination') {\n\t\t\t\tafter(async () => {\n\t\t\t\t\tthis.$forceUpdate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// refresh when a modal closes\n\t\tthis.eventBus.on('destinationWasSaved', this.onDestinationWasSaved);\n\t\t// listen to remove emission\n\t\tthis.eventBus.on('remove', this.onRemove);\n\t\t// listen to modal closing and remove nodes from store\n\t\tthis.eventBus.on('closing', this.onBusClosing);\n\t},\n\tbeforeUnmount() {\n\t\tthis.eventBus.off('destinationWasSaved', this.onDestinationWasSaved);\n\t\tthis.eventBus.off('remove', this.onRemove);\n\t\tthis.eventBus.off('closing', this.onBusClosing);\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseSettingsStore,\n\t\t\tuseLogStreamingStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseUIStore,\n\t\t\tuseCredentialsStore,\n\t\t),\n\t\tsortedItemKeysByLabel() {\n\t\t\tconst sortedKeys: Array<{ label: string; key: string }> = [];\n\t\t\tfor (const [key, value] of Object.entries(this.logStreamingStore.items)) {\n\t\t\t\tsortedKeys.push({ key, label: value.destination?.label ?? 'Destination' });\n\t\t\t}\n\t\t\treturn sortedKeys.sort((a, b) => a.label.localeCompare(b.label));\n\t\t},\n\t\tenvironment() {\n\t\t\treturn process.env.NODE_ENV;\n\t\t},\n\t\tisLicensed(): boolean {\n\t\t\tif (this.disableLicense) return false;\n\t\t\treturn this.settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.LogStreaming);\n\t\t},\n\t\tcanManageLogStreaming(): boolean {\n\t\t\treturn hasPermission(['rbac'], { rbac: { scope: 'logStreaming:manage' } });\n\t\t},\n\t},\n\tmethods: {\n\t\tonDestinationWasSaved() {\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t\tonBusClosing() {\n\t\t\tthis.workflowsStore.removeAllNodes({ setStateDirty: false, removePinData: true });\n\t\t\tthis.uiStore.stateIsDirty = false;\n\t\t},\n\t\tasync getDestinationDataFromBackend(): Promise<void> {\n\t\t\tthis.logStreamingStore.clearEventNames();\n\t\t\tthis.logStreamingStore.clearDestinationItemTrees();\n\t\t\tthis.allDestinations = [];\n\t\t\tconst eventNamesData = await this.logStreamingStore.fetchEventNames();\n\t\t\tif (eventNamesData) {\n\t\t\t\tfor (const eventName of eventNamesData) {\n\t\t\t\t\tthis.logStreamingStore.addEventName(eventName);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst destinationData: MessageEventBusDestinationOptions[] =\n\t\t\t\tawait this.logStreamingStore.fetchDestinations();\n\t\t\tif (destinationData) {\n\t\t\t\tfor (const destination of destinationData) {\n\t\t\t\t\tthis.logStreamingStore.addDestination(destination);\n\t\t\t\t\tthis.allDestinations.push(destination);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t\tgoToUpgrade() {\n\t\t\tvoid this.uiStore.goToUpgrade('log-streaming', 'upgrade-log-streaming');\n\t\t},\n\t\tstoreHasItems(): boolean {\n\t\t\treturn this.logStreamingStore.items && Object.keys(this.logStreamingStore.items).length > 0;\n\t\t},\n\t\tasync addDestination() {\n\t\t\tconst newDestination = deepCopy(defaultMessageEventBusDestinationOptions);\n\t\t\tnewDestination.id = uuid();\n\t\t\tthis.logStreamingStore.addDestination(newDestination);\n\t\t\tawait nextTick();\n\t\t\tthis.uiStore.openModalWithData({\n\t\t\t\tname: LOG_STREAM_MODAL_KEY,\n\t\t\t\tdata: {\n\t\t\t\t\tdestination: newDestination,\n\t\t\t\t\tisNew: true,\n\t\t\t\t\teventBus: this.eventBus,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tasync onRemove(destinationId?: string) {\n\t\t\tif (!destinationId) return;\n\t\t\tawait this.logStreamingStore.deleteDestination(destinationId);\n\t\t\tconst foundNode = this.workflowsStore.getNodeByName(destinationId);\n\t\t\tif (foundNode) {\n\t\t\t\tthis.workflowsStore.removeNode(foundNode);\n\t\t\t}\n\t\t},\n\t\tasync onEdit(destinationId?: string) {\n\t\t\tif (!destinationId) return;\n\t\t\tconst editDestination = this.logStreamingStore.getDestination(destinationId);\n\t\t\tif (editDestination) {\n\t\t\t\tthis.uiStore.openModalWithData({\n\t\t\t\t\tname: LOG_STREAM_MODAL_KEY,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tdestination: editDestination,\n\t\t\t\t\t\tisNew: false,\n\t\t\t\t\t\teventBus: this.eventBus,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.header {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n\twhite-space: nowrap;\n\n\t*:first-child {\n\t\tflex-grow: 1;\n\t}\n}\n\n.destinationItem {\n\tmargin-bottom: 0.5em;\n}\n</style>\n"],"names":["DESTINATION_LIST_ITEM_ACTIONS","_sfc_main$1","defineComponent","useMessage","EnterpriseEditionFeature","deepCopy","defaultMessageEventBusDestinationOptions","_a","mapStores","useLogStreamingStore","actions","event","_b","state","destinationId","action","MODAL_CONFIRM","_resolveComponent","_openBlock","_createBlock","_component_n8n_card","_normalizeClass","_ctx","_withCtx","_createElementVNode","_createVNode","_component_n8n_heading","_component_n8n_text","_component_el_switch","_cache","$event","_component_n8n_action_toggle","_sfc_main","EventDestinationCard","createEventBus","name","after","useSettingsStore","useWorkflowsStore","useUIStore","useCredentialsStore","sortedKeys","key","value","a","b","hasPermission","eventNamesData","eventName","destinationData","destination","newDestination","uuid","nextTick","LOG_STREAM_MODAL_KEY","foundNode","editDestination","_hoisted_1","_hoisted_6","_hoisted_8","_createElementBlock","_Fragment","_hoisted_2","_toDisplayString","_hoisted_3","_component_n8n_info_tip","_renderList","item","_component_el_row","_component_el_col","_component_EventDestinationCard","_hoisted_5","_component_n8n_button","_component_n8n_action_box","_createCommentVNode","_hoisted_10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsLogStreamingView-eE9RDUjN.js","sources":["../../src/components/SettingsLogStreaming/EventDestinationCard.ee.vue","../../src/views/SettingsLogStreamingView.vue"],"sourcesContent":["<template>\n\t<n8n-card :class=\"$style.cardLink\" data-test-id=\"destination-card\" @click=\"onClick\">\n\t\t<template #header>\n\t\t\t<div>\n\t\t\t\t<n8n-heading tag=\"h2\" bold :class=\"$style.cardHeading\">\n\t\t\t\t\t{{ destination.label }}\n\t\t\t\t</n8n-heading>\n\t\t\t\t<div :class=\"$style.cardDescription\">\n\t\t\t\t\t<n8n-text color=\"text-light\" size=\"small\">\n\t\t\t\t\t\t<span>{{ $locale.baseText(typeLabelName) }}</span>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #append>\n\t\t\t<div ref=\"cardActions\" :class=\"$style.cardActions\">\n\t\t\t\t<div :class=\"$style.activeStatusText\" data-test-id=\"destination-activator-status\">\n\t\t\t\t\t<n8n-text v-if=\"nodeParameters.enabled\" :color=\"'success'\" size=\"small\" bold>\n\t\t\t\t\t\t{{ $locale.baseText('workflowActivator.active') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t\t<n8n-text v-else color=\"text-base\" size=\"small\" bold>\n\t\t\t\t\t\t{{ $locale.baseText('workflowActivator.inactive') }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\n\t\t\t\t<el-switch\n\t\t\t\t\tclass=\"mr-s\"\n\t\t\t\t\t:disabled=\"readonly\"\n\t\t\t\t\t:model-value=\"nodeParameters.enabled\"\n\t\t\t\t\t:title=\"\n\t\t\t\t\t\tnodeParameters.enabled\n\t\t\t\t\t\t\t? $locale.baseText('workflowActivator.deactivateWorkflow')\n\t\t\t\t\t\t\t: $locale.baseText('workflowActivator.activateWorkflow')\n\t\t\t\t\t\"\n\t\t\t\t\tactive-color=\"#13ce66\"\n\t\t\t\t\tinactive-color=\"#8899AA\"\n\t\t\t\t\tdata-test-id=\"workflow-activate-switch\"\n\t\t\t\t\t@update:modelValue=\"onEnabledSwitched($event, destination.id)\"\n\t\t\t\t>\n\t\t\t\t</el-switch>\n\n\t\t\t\t<n8n-action-toggle :actions=\"actions\" theme=\"dark\" @action=\"onAction\" />\n\t\t\t</div>\n\t\t</template>\n\t</n8n-card>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { EnterpriseEditionFeature, MODAL_CONFIRM } from '@/constants';\nimport { useMessage } from '@/composables/useMessage';\nimport { useLogStreamingStore } from '@/stores/logStreaming.store';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport type { MessageEventBusDestinationOptions } from 'n8n-workflow';\nimport { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow';\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { EventBus } from 'n8n-design-system';\n\nexport const DESTINATION_LIST_ITEM_ACTIONS = {\n\tOPEN: 'open',\n\tDELETE: 'delete',\n};\n\nexport default defineComponent({\n\tcomponents: {},\n\tsetup() {\n\t\treturn {\n\t\t\t...useMessage(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEnterpriseEditionFeature,\n\t\t\tnodeParameters: {} as MessageEventBusDestinationOptions,\n\t\t};\n\t},\n\tprops: {\n\t\teventBus: {\n\t\t\ttype: Object as PropType<EventBus>,\n\t\t},\n\t\tdestination: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: deepCopy(defaultMessageEventBusDestinationOptions),\n\t\t},\n\t\treadonly: Boolean,\n\t},\n\tmounted() {\n\t\tthis.nodeParameters = Object.assign(\n\t\t\tdeepCopy(defaultMessageEventBusDestinationOptions),\n\t\t\tthis.destination,\n\t\t);\n\t\tthis.eventBus?.on('destinationWasSaved', this.onDestinationWasSaved);\n\t},\n\tbeforeUnmount() {\n\t\tthis.eventBus?.off('destinationWasSaved', this.onDestinationWasSaved);\n\t},\n\tcomputed: {\n\t\t...mapStores(useLogStreamingStore),\n\t\tactions(): Array<{ label: string; value: string }> {\n\t\t\tconst actions = [\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('workflows.item.open'),\n\t\t\t\t\tvalue: DESTINATION_LIST_ITEM_ACTIONS.OPEN,\n\t\t\t\t},\n\t\t\t];\n\t\t\tif (!this.readonly) {\n\t\t\t\tactions.push({\n\t\t\t\t\tlabel: this.$locale.baseText('workflows.item.delete'),\n\t\t\t\t\tvalue: DESTINATION_LIST_ITEM_ACTIONS.DELETE,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn actions;\n\t\t},\n\t\ttypeLabelName(): BaseTextKey {\n\t\t\treturn `settings.log-streaming.${this.destination.__type}` as BaseTextKey;\n\t\t},\n\t},\n\tmethods: {\n\t\tonDestinationWasSaved() {\n\t\t\tconst updatedDestination = this.logStreamingStore.getDestination(this.destination.id);\n\t\t\tif (updatedDestination) {\n\t\t\t\tthis.nodeParameters = Object.assign(\n\t\t\t\t\tdeepCopy(defaultMessageEventBusDestinationOptions),\n\t\t\t\t\tthis.destination,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tasync onClick(event: Event) {\n\t\t\tif (\n\t\t\t\tthis.$refs.cardActions === event.target ||\n\t\t\t\tthis.$refs.cardActions?.contains(event.target) ||\n\t\t\t\tevent.target?.contains(this.$refs.cardActions)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$emit('edit', this.destination.id);\n\t\t},\n\t\tonEnabledSwitched(state: boolean, destinationId: string) {\n\t\t\tthis.nodeParameters.enabled = state;\n\t\t\tvoid this.saveDestination();\n\t\t},\n\t\tasync saveDestination() {\n\t\t\tawait this.logStreamingStore.saveDestination(this.nodeParameters);\n\t\t},\n\t\tasync onAction(action: string) {\n\t\t\tif (action === DESTINATION_LIST_ITEM_ACTIONS.OPEN) {\n\t\t\t\tthis.$emit('edit', this.destination.id);\n\t\t\t} else if (action === DESTINATION_LIST_ITEM_ACTIONS.DELETE) {\n\t\t\t\tconst deleteConfirmed = await this.confirm(\n\t\t\t\t\tthis.$locale.baseText('settings.log-streaming.destinationDelete.message', {\n\t\t\t\t\t\tinterpolate: { destinationName: this.destination.label },\n\t\t\t\t\t}),\n\t\t\t\t\tthis.$locale.baseText('settings.log-streaming.destinationDelete.headline'),\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\tconfirmButtonText: this.$locale.baseText(\n\t\t\t\t\t\t\t'settings.log-streaming.destinationDelete.confirmButtonText',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcancelButtonText: this.$locale.baseText(\n\t\t\t\t\t\t\t'settings.log-streaming.destinationDelete.cancelButtonText',\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tif (deleteConfirmed !== MODAL_CONFIRM) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$emit('remove', this.destination.id);\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.cardLink {\n\ttransition: box-shadow 0.3s ease;\n\tcursor: pointer;\n\tpadding: 0 0 0 var(--spacing-s);\n\talign-items: stretch;\n\n\t&:hover {\n\t\tbox-shadow: 0 2px 8px rgba(#441c17, 0.1);\n\t}\n}\n\n.activeStatusText {\n\twidth: 64px; // Required to avoid jumping when changing active state\n\tpadding-right: var(--spacing-2xs);\n\tbox-sizing: border-box;\n\tdisplay: inline-block;\n\ttext-align: right;\n}\n\n.cardHeading {\n\tfont-size: var(--font-size-s);\n\tword-break: break-word;\n\tpadding: var(--spacing-s) 0 0 var(--spacing-s);\n}\n\n.cardDescription {\n\tmin-height: 19px;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 0 var(--spacing-s) var(--spacing-s);\n}\n\n.cardActions {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\talign-items: center;\n\tpadding: 0 var(--spacing-s) 0 0;\n\tcursor: default;\n}\n</style>\n","<template>\n\t<div>\n\t\t<div :class=\"$style.header\">\n\t\t\t<div class=\"mb-2xl\">\n\t\t\t\t<n8n-heading size=\"2xlarge\">\n\t\t\t\t\t{{ $locale.baseText(`settings.log-streaming.heading`) }}\n\t\t\t\t</n8n-heading>\n\t\t\t\t<template v-if=\"environment !== 'production'\">\n\t\t\t\t\t<strong class=\"ml-m\">Disable License ({{ environment }}) </strong>\n\t\t\t\t\t<el-switch v-model=\"disableLicense\" size=\"large\" data-test-id=\"disable-license-toggle\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\t\t<template v-if=\"isLicensed\">\n\t\t\t<div class=\"mb-l\">\n\t\t\t\t<n8n-info-tip theme=\"info\" type=\"note\">\n\t\t\t\t\t<span v-html=\"$locale.baseText('settings.log-streaming.infoText')\"></span>\n\t\t\t\t</n8n-info-tip>\n\t\t\t</div>\n\t\t\t<template v-if=\"storeHasItems()\">\n\t\t\t\t<el-row\n\t\t\t\t\tv-for=\"item in sortedItemKeysByLabel\"\n\t\t\t\t\t:key=\"item.key\"\n\t\t\t\t\t:gutter=\"10\"\n\t\t\t\t\t:class=\"$style.destinationItem\"\n\t\t\t\t>\n\t\t\t\t\t<el-col v-if=\"logStreamingStore.items[item.key]?.destination\">\n\t\t\t\t\t\t<EventDestinationCard\n\t\t\t\t\t\t\t:destination=\"logStreamingStore.items[item.key]?.destination\"\n\t\t\t\t\t\t\t:event-bus=\"eventBus\"\n\t\t\t\t\t\t\t:readonly=\"!canManageLogStreaming\"\n\t\t\t\t\t\t\t@remove=\"onRemove(logStreamingStore.items[item.key]?.destination?.id)\"\n\t\t\t\t\t\t\t@edit=\"onEdit(logStreamingStore.items[item.key]?.destination?.id)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</el-col>\n\t\t\t\t</el-row>\n\t\t\t\t<div class=\"mt-m text-right\">\n\t\t\t\t\t<n8n-button v-if=\"canManageLogStreaming\" size=\"large\" @click=\"addDestination\">\n\t\t\t\t\t\t{{ $locale.baseText(`settings.log-streaming.add`) }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<div v-else data-test-id=\"action-box-licensed\">\n\t\t\t\t<n8n-action-box\n\t\t\t\t\t:button-text=\"$locale.baseText(`settings.log-streaming.add`)\"\n\t\t\t\t\t@click:button=\"addDestination\"\n\t\t\t\t>\n\t\t\t\t\t<template #heading>\n\t\t\t\t\t\t<span v-html=\"$locale.baseText(`settings.log-streaming.addFirstTitle`)\" />\n\t\t\t\t\t</template>\n\t\t\t\t</n8n-action-box>\n\t\t\t</div>\n\t\t</template>\n\t\t<template v-else>\n\t\t\t<div v-if=\"$locale.baseText('settings.log-streaming.infoText')\" class=\"mb-l\">\n\t\t\t\t<n8n-info-tip theme=\"info\" type=\"note\">\n\t\t\t\t\t<span v-html=\"$locale.baseText('settings.log-streaming.infoText')\"></span>\n\t\t\t\t</n8n-info-tip>\n\t\t\t</div>\n\t\t\t<div data-test-id=\"action-box-unlicensed\">\n\t\t\t\t<n8n-action-box\n\t\t\t\t\t:description=\"$locale.baseText('settings.log-streaming.actionBox.description')\"\n\t\t\t\t\t:button-text=\"$locale.baseText('settings.log-streaming.actionBox.button')\"\n\t\t\t\t\t@click:button=\"goToUpgrade\"\n\t\t\t\t>\n\t\t\t\t\t<template #heading>\n\t\t\t\t\t\t<span v-html=\"$locale.baseText('settings.log-streaming.actionBox.title')\" />\n\t\t\t\t\t</template>\n\t\t\t\t</n8n-action-box>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, nextTick } from 'vue';\nimport { mapStores } from 'pinia';\nimport { v4 as uuid } from 'uuid';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { hasPermission } from '@/rbac/permissions';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useLogStreamingStore } from '@/stores/logStreaming.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { LOG_STREAM_MODAL_KEY, EnterpriseEditionFeature } from '@/constants';\nimport type { MessageEventBusDestinationOptions } from 'n8n-workflow';\nimport { deepCopy, defaultMessageEventBusDestinationOptions } from 'n8n-workflow';\nimport EventDestinationCard from '@/components/SettingsLogStreaming/EventDestinationCard.ee.vue';\nimport { createEventBus } from 'n8n-design-system/utils';\n\nexport default defineComponent({\n\tname: 'SettingsLogStreamingView',\n\tcomponents: {\n\t\tEventDestinationCard,\n\t},\n\tprops: {},\n\tdata() {\n\t\treturn {\n\t\t\teventBus: createEventBus(),\n\t\t\tdestinations: Array<MessageEventBusDestinationOptions>,\n\t\t\tdisableLicense: false,\n\t\t\tallDestinations: [] as MessageEventBusDestinationOptions[],\n\t\t};\n\t},\n\tasync mounted() {\n\t\tif (!this.isLicensed) return;\n\n\t\t// Prepare credentialsStore so modals can pick up credentials\n\t\tawait this.credentialsStore.fetchCredentialTypes(false);\n\t\tawait this.credentialsStore.fetchAllCredentials();\n\t\tthis.uiStore.nodeViewInitialized = false;\n\n\t\t// fetch Destination data from the backend\n\t\tawait this.getDestinationDataFromBackend();\n\n\t\t// since we are not really integrated into the hooks, we listen to the store and refresh the destinations\n\t\tthis.logStreamingStore.$onAction(({ name, after }) => {\n\t\t\tif (name === 'removeDestination' || name === 'updateDestination') {\n\t\t\t\tafter(async () => {\n\t\t\t\t\tthis.$forceUpdate();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// refresh when a modal closes\n\t\tthis.eventBus.on('destinationWasSaved', this.onDestinationWasSaved);\n\t\t// listen to remove emission\n\t\tthis.eventBus.on('remove', this.onRemove);\n\t\t// listen to modal closing and remove nodes from store\n\t\tthis.eventBus.on('closing', this.onBusClosing);\n\t},\n\tbeforeUnmount() {\n\t\tthis.eventBus.off('destinationWasSaved', this.onDestinationWasSaved);\n\t\tthis.eventBus.off('remove', this.onRemove);\n\t\tthis.eventBus.off('closing', this.onBusClosing);\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseSettingsStore,\n\t\t\tuseLogStreamingStore,\n\t\t\tuseWorkflowsStore,\n\t\t\tuseUIStore,\n\t\t\tuseCredentialsStore,\n\t\t),\n\t\tsortedItemKeysByLabel() {\n\t\t\tconst sortedKeys: Array<{ label: string; key: string }> = [];\n\t\t\tfor (const [key, value] of Object.entries(this.logStreamingStore.items)) {\n\t\t\t\tsortedKeys.push({ key, label: value.destination?.label ?? 'Destination' });\n\t\t\t}\n\t\t\treturn sortedKeys.sort((a, b) => a.label.localeCompare(b.label));\n\t\t},\n\t\tenvironment() {\n\t\t\treturn process.env.NODE_ENV;\n\t\t},\n\t\tisLicensed(): boolean {\n\t\t\tif (this.disableLicense) return false;\n\t\t\treturn this.settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.LogStreaming);\n\t\t},\n\t\tcanManageLogStreaming(): boolean {\n\t\t\treturn hasPermission(['rbac'], { rbac: { scope: 'logStreaming:manage' } });\n\t\t},\n\t},\n\tmethods: {\n\t\tonDestinationWasSaved() {\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t\tonBusClosing() {\n\t\t\tthis.workflowsStore.removeAllNodes({ setStateDirty: false, removePinData: true });\n\t\t\tthis.uiStore.stateIsDirty = false;\n\t\t},\n\t\tasync getDestinationDataFromBackend(): Promise<void> {\n\t\t\tthis.logStreamingStore.clearEventNames();\n\t\t\tthis.logStreamingStore.clearDestinationItemTrees();\n\t\t\tthis.allDestinations = [];\n\t\t\tconst eventNamesData = await this.logStreamingStore.fetchEventNames();\n\t\t\tif (eventNamesData) {\n\t\t\t\tfor (const eventName of eventNamesData) {\n\t\t\t\t\tthis.logStreamingStore.addEventName(eventName);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst destinationData: MessageEventBusDestinationOptions[] =\n\t\t\t\tawait this.logStreamingStore.fetchDestinations();\n\t\t\tif (destinationData) {\n\t\t\t\tfor (const destination of destinationData) {\n\t\t\t\t\tthis.logStreamingStore.addDestination(destination);\n\t\t\t\t\tthis.allDestinations.push(destination);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$forceUpdate();\n\t\t},\n\t\tgoToUpgrade() {\n\t\t\tvoid this.uiStore.goToUpgrade('log-streaming', 'upgrade-log-streaming');\n\t\t},\n\t\tstoreHasItems(): boolean {\n\t\t\treturn this.logStreamingStore.items && Object.keys(this.logStreamingStore.items).length > 0;\n\t\t},\n\t\tasync addDestination() {\n\t\t\tconst newDestination = deepCopy(defaultMessageEventBusDestinationOptions);\n\t\t\tnewDestination.id = uuid();\n\t\t\tthis.logStreamingStore.addDestination(newDestination);\n\t\t\tawait nextTick();\n\t\t\tthis.uiStore.openModalWithData({\n\t\t\t\tname: LOG_STREAM_MODAL_KEY,\n\t\t\t\tdata: {\n\t\t\t\t\tdestination: newDestination,\n\t\t\t\t\tisNew: true,\n\t\t\t\t\teventBus: this.eventBus,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tasync onRemove(destinationId?: string) {\n\t\t\tif (!destinationId) return;\n\t\t\tawait this.logStreamingStore.deleteDestination(destinationId);\n\t\t\tconst foundNode = this.workflowsStore.getNodeByName(destinationId);\n\t\t\tif (foundNode) {\n\t\t\t\tthis.workflowsStore.removeNode(foundNode);\n\t\t\t}\n\t\t},\n\t\tasync onEdit(destinationId?: string) {\n\t\t\tif (!destinationId) return;\n\t\t\tconst editDestination = this.logStreamingStore.getDestination(destinationId);\n\t\t\tif (editDestination) {\n\t\t\t\tthis.uiStore.openModalWithData({\n\t\t\t\t\tname: LOG_STREAM_MODAL_KEY,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tdestination: editDestination,\n\t\t\t\t\t\tisNew: false,\n\t\t\t\t\t\teventBus: this.eventBus,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.header {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n\twhite-space: nowrap;\n\n\t*:first-child {\n\t\tflex-grow: 1;\n\t}\n}\n\n.destinationItem {\n\tmargin-bottom: 0.5em;\n}\n</style>\n"],"names":["DESTINATION_LIST_ITEM_ACTIONS","_sfc_main$1","defineComponent","useMessage","EnterpriseEditionFeature","deepCopy","defaultMessageEventBusDestinationOptions","_a","mapStores","useLogStreamingStore","actions","event","_b","state","destinationId","action","MODAL_CONFIRM","_resolveComponent","_openBlock","_createBlock","_component_n8n_card","_normalizeClass","_ctx","_withCtx","_createElementVNode","_createVNode","_component_n8n_heading","_component_n8n_text","_component_el_switch","_cache","$event","_component_n8n_action_toggle","_sfc_main","EventDestinationCard","createEventBus","name","after","useSettingsStore","useWorkflowsStore","useUIStore","useCredentialsStore","sortedKeys","key","value","a","b","hasPermission","eventNamesData","eventName","destinationData","destination","newDestination","uuid","nextTick","LOG_STREAM_MODAL_KEY","foundNode","editDestination","_hoisted_1","_hoisted_6","_hoisted_8","_createElementBlock","_Fragment","_hoisted_2","_toDisplayString","_hoisted_3","_component_n8n_info_tip","_renderList","item","_component_el_row","_component_el_col","_component_EventDestinationCard","_hoisted_5","_component_n8n_button","_component_n8n_action_box","_createCommentVNode","_hoisted_10"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as W,e as X,x as j,a9 as U,_ as Y}from"./n8n-uKoDE8Qf.js";import{d as ee,f as te,C as se,b as oe}from"./index-lUr8MiJ2.js";import{v as ne,r as re,e as V,b as ae,P as ce,f as m,h as C,K as c,E as a,J as y,I as r,u as s,i as n,y as l,D as _,H as h,a6 as g}from"./vendor-3VD3vVJy.js";import"./lodash-es-JdX4GWLn.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./pinia-e-gLcRJ1.js";import"./@vueuse/core-lH03nmRE.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-MkmfYvll.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-feLn5IS9.js";import"./@lezer/common-1hBQ1gIF.js";import"./codemirror-lang-html-n8n-wWQLhhqk.js";import"./prettier-s3fE3Qyr.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-n8n-expression-HpIZnV_9.js";import"./fast-json-stable-stringify-LPGjnXm6.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-B6sLPrrf.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const le={key:0,"data-test-id":"source-control-content-licensed"},ie=["href"],ue={for:"repoUrl"},de=["href"],pe={key:2,"data-test-id":"source-control-connected-content"},ge=n("hr",null,null,-1),me=["href"],ye=ne({__name:"SettingsSourceControl",setup(we){const e=j(),o=ee(),w=W(),d=X(),S=oe(),b=te(),p=re(!1),K=V(()=>o.preferences.branches.map(t=>({value:t,label:t}))),E=async()=>{b.startLoading(),b.setLoadingText(e.baseText("settings.sourceControl.loading.connecting"));try{await o.savePreferences({repositoryUrl:o.preferences.repositoryUrl}),await o.getBranches(),p.value=!0,d.showMessage({title:e.baseText("settings.sourceControl.toast.connected.title"),message:e.baseText("settings.sourceControl.toast.connected.message"),type:"success"})}catch(t){d.showError(t,e.baseText("settings.sourceControl.toast.connected.error"))}b.stopLoading()},I=async()=>{try{await S.confirm(e.baseText("settings.sourceControl.modals.disconnect.message"),e.baseText("settings.sourceControl.modals.disconnect.title"),{confirmButtonText:e.baseText("settings.sourceControl.modals.disconnect.confirm"),cancelButtonText:e.baseText("settings.sourceControl.modals.disconnect.cancel")})===U&&(b.startLoading(),await o.disconnect(!0),p.value=!1,d.showMessage({title:e.baseText("settings.sourceControl.toast.disconnected.title"),message:e.baseText("settings.sourceControl.toast.disconnected.message"),type:"success"}))}catch(t){d.showError(t,e.baseText("settings.sourceControl.toast.disconnected.error"))}b.stopLoading()},$=async()=>{b.startLoading();try{await o.updatePreferences({branchName:o.preferences.branchName,branchReadOnly:o.preferences.branchReadOnly,branchColor:o.preferences.branchColor}),d.showMessage({title:e.baseText("settings.sourceControl.saved.title"),type:"success"})}catch(t){d.showError(t,"Error setting branch")}b.stopLoading()},z=async t=>{t!==o.preferences.branchName&&(o.preferences.branchName=t)},N=()=>{w.goToUpgrade("source-control","upgrade-source-control")},R=async()=>{await o.getPreferences(),o.preferences.connected&&(p.value=!0,o.getBranches())};ae(async()=>{await R()});const B=ce({repoUrl:!1,keyGeneratorType:!1});function T(t,i){B[t]=i}const q=[{name:"REQUIRED"},{name:"MATCH_REGEX",config:{regex:/^(ssh:\/\/)?git@(?:\[[0-9a-fA-F:]+\]|(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+)(?::[0-9]+)*:(?:v[0-9]+\/)?[a-zA-Z0-9_.\-\/]+(\.git)?(?:\/[a-zA-Z0-9_.\-\/]+)*$/,message:e.baseText("settings.sourceControl.repoUrlInvalid")}}],M=[{name:"REQUIRED"}],L=V(()=>B.repoUrl),O=[{name:"REQUIRED"}];async function G(){try{await S.confirm(e.baseText("settings.sourceControl.modals.refreshSshKey.message"),e.baseText("settings.sourceControl.modals.refreshSshKey.title"),{confirmButtonText:e.baseText("settings.sourceControl.modals.refreshSshKey.confirm"),cancelButtonText:e.baseText("settings.sourceControl.modals.refreshSshKey.cancel")})===U&&(await o.generateKeyPair(o.preferences.keyGeneratorType),d.showMessage({title:e.baseText("settings.sourceControl.refreshSshKey.successful.title"),type:"success"}))}catch(t){d.showError(t,e.baseText("settings.sourceControl.refreshSshKey.error.title"))}}const D=async()=>{try{await o.getBranches(),d.showMessage({title:e.baseText("settings.sourceControl.refreshBranches.success"),type:"success"})}catch(t){d.showError(t,e.baseText("settings.sourceControl.refreshBranches.error"))}},A=async t=>{t!==o.preferences.keyGeneratorType&&(o.preferences.keyGeneratorType=t)};return(t,i)=>{const x=g("n8n-heading"),v=g("i18n-t"),F=g("n8n-callout"),k=g("n8n-form-input"),f=g("n8n-button"),P=g("n8n-notice"),Z=g("n8n-tooltip"),Q=g("n8n-checkbox"),H=g("n8n-color-picker"),J=g("n8n-action-box");return m(),C("div",null,[c(x,{size:"2xlarge",tag:"h1"},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.title")),1)]),_:1}),s(o).isEnterpriseSourceControlEnabled?(m(),C("div",le,[c(F,{theme:"secondary",icon:"info-circle",class:"mt-2xl mb-l"},{default:a(()=>[c(v,{keypath:"settings.sourceControl.description",tag:"span"},{link:a(()=>[n("a",{href:s(e).baseText("settings.sourceControl.docs.url"),target:"_blank"},r(s(e).baseText("settings.sourceControl.description.link")),9,ie)]),_:1})]),_:1}),c(x,{size:"xlarge",tag:"h2",class:"mb-s"},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.gitConfig")),1)]),_:1}),n("div",{class:l(t.$style.group)},[n("label",ue,r(s(e).baseText("settings.sourceControl.repoUrl")),1),n("div",{class:l(t.$style.groupFlex)},[c(k,{id:"repoUrl",modelValue:s(o).preferences.repositoryUrl,"onUpdate:modelValue":i[0]||(i[0]=u=>s(o).preferences.repositoryUrl=u),label:"",class:"ml-0",name:"repoUrl","validate-on-blur":"","validation-rules":q,disabled:p.value,placeholder:s(e).baseText("settings.sourceControl.repoUrlPlaceholder"),onValidate:i[1]||(i[1]=u=>T("repoUrl",u))},null,8,["modelValue","disabled","placeholder"]),p.value?(m(),_(f,{key:0,class:l(t.$style.disconnectButton),type:"tertiary",size:"large",icon:"trash","data-test-id":"source-control-disconnect-button",onClick:I},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.button.disconnect")),1)]),_:1},8,["class"])):h("",!0)],2)],2),s(o).preferences.publicKey?(m(),C("div",{key:0,class:l(t.$style.group)},[n("label",null,r(s(e).baseText("settings.sourceControl.sshKey")),1),n("div",{class:l({[t.$style.sshInput]:!p.value})},[p.value?h("",!0):(m(),_(k,{key:0,id:"keyGeneratorType",class:l(t.$style.sshKeyTypeSelect),label:"",type:"select",name:"keyGeneratorType","data-test-id":"source-control-ssh-key-type-select","validate-on-blur":"","validation-rules":M,options:s(o).sshKeyTypesWithLabel,"model-value":s(o).preferences.keyGeneratorType,onValidate:i[2]||(i[2]=u=>T("keyGeneratorType",u)),"onUpdate:modelValue":A},null,8,["class","options","model-value"])),c(se,{class:l(t.$style.copyInput),collapse:"",size:"medium",value:s(o).preferences.publicKey,"copy-button-text":s(e).baseText("generic.clickToCopy")},null,8,["class","value","copy-button-text"]),p.value?h("",!0):(m(),_(f,{key:1,size:"large",type:"tertiary",icon:"sync","data-test-id":"source-control-refresh-ssh-key-button",onClick:G},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.refreshSshKey")),1)]),_:1}))],2),c(P,{type:"info",class:"mt-s"},{default:a(()=>[c(v,{keypath:"settings.sourceControl.sshKeyDescription",tag:"span"},{link:a(()=>[n("a",{href:s(e).baseText("settings.sourceControl.docs.setup.ssh.url"),target:"_blank"},r(s(e).baseText("settings.sourceControl.sshKeyDescriptionLink")),9,de)]),_:1})]),_:1})],2)):h("",!0),p.value?h("",!0):(m(),_(f,{key:1,size:"large",disabled:!L.value,class:l(t.$style.connect),"data-test-id":"source-control-connect-button",onClick:E},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.button.connect")),1)]),_:1},8,["disabled","class"])),p.value?(m(),C("div",pe,[n("div",{class:l(t.$style.group)},[ge,c(x,{size:"xlarge",tag:"h2",class:"mb-s"},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.instanceSettings")),1)]),_:1}),n("label",null,r(s(e).baseText("settings.sourceControl.branches")),1),n("div",{class:l(t.$style.branchSelection)},[c(k,{id:"branchName",label:"",type:"select",name:"branchName",class:"mb-s","data-test-id":"source-control-branch-select","validate-on-blur":"","validation-rules":O,options:K.value,"model-value":s(o).preferences.branchName,onValidate:i[3]||(i[3]=u=>T("branchName",u)),"onUpdate:modelValue":z},null,8,["options","model-value"]),c(Z,{placement:"top"},{content:a(()=>[n("span",null,r(s(e).baseText("settings.sourceControl.refreshBranches.tooltip")),1)]),default:a(()=>[c(f,{size:"small",type:"tertiary",icon:"sync",square:"",class:l(t.$style.refreshBranches),"data-test-id":"source-control-refresh-branches-button",onClick:D},null,8,["class"])]),_:1})],2),c(Q,{modelValue:s(o).preferences.branchReadOnly,"onUpdate:modelValue":i[4]||(i[4]=u=>s(o).preferences.branchReadOnly=u),class:l(t.$style.readOnly)},{default:a(()=>[c(v,{keypath:"settings.sourceControl.protected",tag:"span"},{bold:a(()=>[n("strong",null,r(s(e).baseText("settings.sourceControl.protected.bold")),1)]),_:1})]),_:1},8,["modelValue","class"])],2),n("div",{class:l(t.$style.group)},[n("label",null,r(s(e).baseText("settings.sourceControl.color")),1),n("div",null,[c(H,{modelValue:s(o).preferences.branchColor,"onUpdate:modelValue":i[5]||(i[5]=u=>s(o).preferences.branchColor=u),size:"small"},null,8,["modelValue"])])],2),n("div",{class:l([t.$style.group,"pt-s"])},[c(f,{size:"large",disabled:!s(o).preferences.branchName,"data-test-id":"source-control-save-settings-button",onClick:$},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.button.save")),1)]),_:1},8,["disabled"])],2)])):h("",!0)])):(m(),_(J,{key:1,"data-test-id":"source-control-content-unlicensed",class:l(t.$style.actionBox),description:s(e).baseText("settings.sourceControl.actionBox.description"),"button-text":s(e).baseText("settings.sourceControl.actionBox.buttonText"),"onClick:button":N},{heading:a(()=>[n("span",null,r(s(e).baseText("settings.sourceControl.actionBox.title")),1)]),description:a(()=>[y(r(s(e).baseText("settings.sourceControl.actionBox.description"))+" ",1),n("a",{href:s(e).baseText("settings.sourceControl.docs.url"),target:"_blank"},r(s(e).baseText("settings.sourceControl.actionBox.description.link")),9,me)]),_:1},8,["class","description","button-text"]))])}}}),be="_group_1qvoi_5",he="_readOnly_1qvoi_26",fe="_groupFlex_1qvoi_30",_e="_connect_1qvoi_44",Ce="_disconnectButton_1qvoi_48",Te="_actionBox_1qvoi_53",xe="_sshInput_1qvoi_57",ve="_copyInput_1qvoi_68",ke="_sshKeyTypeSelect_1qvoi_72",Se="_branchSelection_1qvoi_80",Be="_refreshBranches_1qvoi_89",Ue={group:be,readOnly:he,groupFlex:fe,connect:_e,disconnectButton:Ce,actionBox:Te,sshInput:xe,copyInput:ve,sshKeyTypeSelect:ke,branchSelection:Se,refreshBranches:Be},Ve={$style:Ue},nt=Y(ye,[["__cssModules",Ve]]);export{nt as default};
|
|
2
|
-
//# sourceMappingURL=SettingsSourceControl-
|
|
1
|
+
import{u as W,e as X,x as j,a9 as U,_ as Y}from"./n8n-uKoDE8Qf.js";import{d as ee,f as te,C as se,b as oe}from"./index-9xnnd4cn.js";import{v as ne,r as re,e as V,b as ae,P as ce,f as m,h as C,K as c,E as a,J as y,I as r,u as s,i as n,y as l,D as _,H as h,a6 as g}from"./vendor-3VD3vVJy.js";import"./lodash-es-JdX4GWLn.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./pinia-e-gLcRJ1.js";import"./@vueuse/core-lH03nmRE.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-MkmfYvll.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-feLn5IS9.js";import"./@lezer/common-1hBQ1gIF.js";import"./codemirror-lang-html-n8n-wWQLhhqk.js";import"./prettier-s3fE3Qyr.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-n8n-expression-HpIZnV_9.js";import"./fast-json-stable-stringify-LPGjnXm6.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-B6sLPrrf.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const le={key:0,"data-test-id":"source-control-content-licensed"},ie=["href"],ue={for:"repoUrl"},de=["href"],pe={key:2,"data-test-id":"source-control-connected-content"},ge=n("hr",null,null,-1),me=["href"],ye=ne({__name:"SettingsSourceControl",setup(we){const e=j(),o=ee(),w=W(),d=X(),S=oe(),b=te(),p=re(!1),K=V(()=>o.preferences.branches.map(t=>({value:t,label:t}))),E=async()=>{b.startLoading(),b.setLoadingText(e.baseText("settings.sourceControl.loading.connecting"));try{await o.savePreferences({repositoryUrl:o.preferences.repositoryUrl}),await o.getBranches(),p.value=!0,d.showMessage({title:e.baseText("settings.sourceControl.toast.connected.title"),message:e.baseText("settings.sourceControl.toast.connected.message"),type:"success"})}catch(t){d.showError(t,e.baseText("settings.sourceControl.toast.connected.error"))}b.stopLoading()},I=async()=>{try{await S.confirm(e.baseText("settings.sourceControl.modals.disconnect.message"),e.baseText("settings.sourceControl.modals.disconnect.title"),{confirmButtonText:e.baseText("settings.sourceControl.modals.disconnect.confirm"),cancelButtonText:e.baseText("settings.sourceControl.modals.disconnect.cancel")})===U&&(b.startLoading(),await o.disconnect(!0),p.value=!1,d.showMessage({title:e.baseText("settings.sourceControl.toast.disconnected.title"),message:e.baseText("settings.sourceControl.toast.disconnected.message"),type:"success"}))}catch(t){d.showError(t,e.baseText("settings.sourceControl.toast.disconnected.error"))}b.stopLoading()},$=async()=>{b.startLoading();try{await o.updatePreferences({branchName:o.preferences.branchName,branchReadOnly:o.preferences.branchReadOnly,branchColor:o.preferences.branchColor}),d.showMessage({title:e.baseText("settings.sourceControl.saved.title"),type:"success"})}catch(t){d.showError(t,"Error setting branch")}b.stopLoading()},z=async t=>{t!==o.preferences.branchName&&(o.preferences.branchName=t)},N=()=>{w.goToUpgrade("source-control","upgrade-source-control")},R=async()=>{await o.getPreferences(),o.preferences.connected&&(p.value=!0,o.getBranches())};ae(async()=>{await R()});const B=ce({repoUrl:!1,keyGeneratorType:!1});function T(t,i){B[t]=i}const q=[{name:"REQUIRED"},{name:"MATCH_REGEX",config:{regex:/^(ssh:\/\/)?git@(?:\[[0-9a-fA-F:]+\]|(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+)(?::[0-9]+)*:(?:v[0-9]+\/)?[a-zA-Z0-9_.\-\/]+(\.git)?(?:\/[a-zA-Z0-9_.\-\/]+)*$/,message:e.baseText("settings.sourceControl.repoUrlInvalid")}}],M=[{name:"REQUIRED"}],L=V(()=>B.repoUrl),O=[{name:"REQUIRED"}];async function G(){try{await S.confirm(e.baseText("settings.sourceControl.modals.refreshSshKey.message"),e.baseText("settings.sourceControl.modals.refreshSshKey.title"),{confirmButtonText:e.baseText("settings.sourceControl.modals.refreshSshKey.confirm"),cancelButtonText:e.baseText("settings.sourceControl.modals.refreshSshKey.cancel")})===U&&(await o.generateKeyPair(o.preferences.keyGeneratorType),d.showMessage({title:e.baseText("settings.sourceControl.refreshSshKey.successful.title"),type:"success"}))}catch(t){d.showError(t,e.baseText("settings.sourceControl.refreshSshKey.error.title"))}}const D=async()=>{try{await o.getBranches(),d.showMessage({title:e.baseText("settings.sourceControl.refreshBranches.success"),type:"success"})}catch(t){d.showError(t,e.baseText("settings.sourceControl.refreshBranches.error"))}},A=async t=>{t!==o.preferences.keyGeneratorType&&(o.preferences.keyGeneratorType=t)};return(t,i)=>{const x=g("n8n-heading"),v=g("i18n-t"),F=g("n8n-callout"),k=g("n8n-form-input"),f=g("n8n-button"),P=g("n8n-notice"),Z=g("n8n-tooltip"),Q=g("n8n-checkbox"),H=g("n8n-color-picker"),J=g("n8n-action-box");return m(),C("div",null,[c(x,{size:"2xlarge",tag:"h1"},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.title")),1)]),_:1}),s(o).isEnterpriseSourceControlEnabled?(m(),C("div",le,[c(F,{theme:"secondary",icon:"info-circle",class:"mt-2xl mb-l"},{default:a(()=>[c(v,{keypath:"settings.sourceControl.description",tag:"span"},{link:a(()=>[n("a",{href:s(e).baseText("settings.sourceControl.docs.url"),target:"_blank"},r(s(e).baseText("settings.sourceControl.description.link")),9,ie)]),_:1})]),_:1}),c(x,{size:"xlarge",tag:"h2",class:"mb-s"},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.gitConfig")),1)]),_:1}),n("div",{class:l(t.$style.group)},[n("label",ue,r(s(e).baseText("settings.sourceControl.repoUrl")),1),n("div",{class:l(t.$style.groupFlex)},[c(k,{id:"repoUrl",modelValue:s(o).preferences.repositoryUrl,"onUpdate:modelValue":i[0]||(i[0]=u=>s(o).preferences.repositoryUrl=u),label:"",class:"ml-0",name:"repoUrl","validate-on-blur":"","validation-rules":q,disabled:p.value,placeholder:s(e).baseText("settings.sourceControl.repoUrlPlaceholder"),onValidate:i[1]||(i[1]=u=>T("repoUrl",u))},null,8,["modelValue","disabled","placeholder"]),p.value?(m(),_(f,{key:0,class:l(t.$style.disconnectButton),type:"tertiary",size:"large",icon:"trash","data-test-id":"source-control-disconnect-button",onClick:I},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.button.disconnect")),1)]),_:1},8,["class"])):h("",!0)],2)],2),s(o).preferences.publicKey?(m(),C("div",{key:0,class:l(t.$style.group)},[n("label",null,r(s(e).baseText("settings.sourceControl.sshKey")),1),n("div",{class:l({[t.$style.sshInput]:!p.value})},[p.value?h("",!0):(m(),_(k,{key:0,id:"keyGeneratorType",class:l(t.$style.sshKeyTypeSelect),label:"",type:"select",name:"keyGeneratorType","data-test-id":"source-control-ssh-key-type-select","validate-on-blur":"","validation-rules":M,options:s(o).sshKeyTypesWithLabel,"model-value":s(o).preferences.keyGeneratorType,onValidate:i[2]||(i[2]=u=>T("keyGeneratorType",u)),"onUpdate:modelValue":A},null,8,["class","options","model-value"])),c(se,{class:l(t.$style.copyInput),collapse:"",size:"medium",value:s(o).preferences.publicKey,"copy-button-text":s(e).baseText("generic.clickToCopy")},null,8,["class","value","copy-button-text"]),p.value?h("",!0):(m(),_(f,{key:1,size:"large",type:"tertiary",icon:"sync","data-test-id":"source-control-refresh-ssh-key-button",onClick:G},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.refreshSshKey")),1)]),_:1}))],2),c(P,{type:"info",class:"mt-s"},{default:a(()=>[c(v,{keypath:"settings.sourceControl.sshKeyDescription",tag:"span"},{link:a(()=>[n("a",{href:s(e).baseText("settings.sourceControl.docs.setup.ssh.url"),target:"_blank"},r(s(e).baseText("settings.sourceControl.sshKeyDescriptionLink")),9,de)]),_:1})]),_:1})],2)):h("",!0),p.value?h("",!0):(m(),_(f,{key:1,size:"large",disabled:!L.value,class:l(t.$style.connect),"data-test-id":"source-control-connect-button",onClick:E},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.button.connect")),1)]),_:1},8,["disabled","class"])),p.value?(m(),C("div",pe,[n("div",{class:l(t.$style.group)},[ge,c(x,{size:"xlarge",tag:"h2",class:"mb-s"},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.instanceSettings")),1)]),_:1}),n("label",null,r(s(e).baseText("settings.sourceControl.branches")),1),n("div",{class:l(t.$style.branchSelection)},[c(k,{id:"branchName",label:"",type:"select",name:"branchName",class:"mb-s","data-test-id":"source-control-branch-select","validate-on-blur":"","validation-rules":O,options:K.value,"model-value":s(o).preferences.branchName,onValidate:i[3]||(i[3]=u=>T("branchName",u)),"onUpdate:modelValue":z},null,8,["options","model-value"]),c(Z,{placement:"top"},{content:a(()=>[n("span",null,r(s(e).baseText("settings.sourceControl.refreshBranches.tooltip")),1)]),default:a(()=>[c(f,{size:"small",type:"tertiary",icon:"sync",square:"",class:l(t.$style.refreshBranches),"data-test-id":"source-control-refresh-branches-button",onClick:D},null,8,["class"])]),_:1})],2),c(Q,{modelValue:s(o).preferences.branchReadOnly,"onUpdate:modelValue":i[4]||(i[4]=u=>s(o).preferences.branchReadOnly=u),class:l(t.$style.readOnly)},{default:a(()=>[c(v,{keypath:"settings.sourceControl.protected",tag:"span"},{bold:a(()=>[n("strong",null,r(s(e).baseText("settings.sourceControl.protected.bold")),1)]),_:1})]),_:1},8,["modelValue","class"])],2),n("div",{class:l(t.$style.group)},[n("label",null,r(s(e).baseText("settings.sourceControl.color")),1),n("div",null,[c(H,{modelValue:s(o).preferences.branchColor,"onUpdate:modelValue":i[5]||(i[5]=u=>s(o).preferences.branchColor=u),size:"small"},null,8,["modelValue"])])],2),n("div",{class:l([t.$style.group,"pt-s"])},[c(f,{size:"large",disabled:!s(o).preferences.branchName,"data-test-id":"source-control-save-settings-button",onClick:$},{default:a(()=>[y(r(s(e).baseText("settings.sourceControl.button.save")),1)]),_:1},8,["disabled"])],2)])):h("",!0)])):(m(),_(J,{key:1,"data-test-id":"source-control-content-unlicensed",class:l(t.$style.actionBox),description:s(e).baseText("settings.sourceControl.actionBox.description"),"button-text":s(e).baseText("settings.sourceControl.actionBox.buttonText"),"onClick:button":N},{heading:a(()=>[n("span",null,r(s(e).baseText("settings.sourceControl.actionBox.title")),1)]),description:a(()=>[y(r(s(e).baseText("settings.sourceControl.actionBox.description"))+" ",1),n("a",{href:s(e).baseText("settings.sourceControl.docs.url"),target:"_blank"},r(s(e).baseText("settings.sourceControl.actionBox.description.link")),9,me)]),_:1},8,["class","description","button-text"]))])}}}),be="_group_1qvoi_5",he="_readOnly_1qvoi_26",fe="_groupFlex_1qvoi_30",_e="_connect_1qvoi_44",Ce="_disconnectButton_1qvoi_48",Te="_actionBox_1qvoi_53",xe="_sshInput_1qvoi_57",ve="_copyInput_1qvoi_68",ke="_sshKeyTypeSelect_1qvoi_72",Se="_branchSelection_1qvoi_80",Be="_refreshBranches_1qvoi_89",Ue={group:be,readOnly:he,groupFlex:fe,connect:_e,disconnectButton:Ce,actionBox:Te,sshInput:xe,copyInput:ve,sshKeyTypeSelect:ke,branchSelection:Se,refreshBranches:Be},Ve={$style:Ue},nt=Y(ye,[["__cssModules",Ve]]);export{nt as default};
|
|
2
|
+
//# sourceMappingURL=SettingsSourceControl-bMzlo6t4.js.map
|
package/dist/assets/{SettingsSourceControl-zQ3hu1Xb.js.map → SettingsSourceControl-bMzlo6t4.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSourceControl-zQ3hu1Xb.js","sources":["../../src/views/SettingsSourceControl.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, reactive, ref, onMounted } from 'vue';\nimport type { Rule, RuleGroup } from 'n8n-design-system/types';\nimport { MODAL_CONFIRM } from '@/constants';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useToast } from '@/composables/useToast';\nimport { useLoadingService } from '@/composables/useLoadingService';\nimport { useI18n } from '@/composables/useI18n';\nimport { useMessage } from '@/composables/useMessage';\nimport CopyInput from '@/components/CopyInput.vue';\nimport type { TupleToUnion } from '@/utils/typeHelpers';\nimport type { SshKeyTypes } from '@/Interface';\n\nconst locale = useI18n();\nconst sourceControlStore = useSourceControlStore();\nconst uiStore = useUIStore();\nconst toast = useToast();\nconst message = useMessage();\nconst loadingService = useLoadingService();\n\nconst isConnected = ref(false);\nconst branchNameOptions = computed(() =>\n\tsourceControlStore.preferences.branches.map((branch) => ({\n\t\tvalue: branch,\n\t\tlabel: branch,\n\t})),\n);\n\nconst onConnect = async () => {\n\tloadingService.startLoading();\n\tloadingService.setLoadingText(locale.baseText('settings.sourceControl.loading.connecting'));\n\ttry {\n\t\tawait sourceControlStore.savePreferences({\n\t\t\trepositoryUrl: sourceControlStore.preferences.repositoryUrl,\n\t\t});\n\t\tawait sourceControlStore.getBranches();\n\t\tisConnected.value = true;\n\t\ttoast.showMessage({\n\t\t\ttitle: locale.baseText('settings.sourceControl.toast.connected.title'),\n\t\t\tmessage: locale.baseText('settings.sourceControl.toast.connected.message'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.toast.connected.error'));\n\t}\n\tloadingService.stopLoading();\n};\n\nconst onDisconnect = async () => {\n\ttry {\n\t\tconst confirmation = await message.confirm(\n\t\t\tlocale.baseText('settings.sourceControl.modals.disconnect.message'),\n\t\t\tlocale.baseText('settings.sourceControl.modals.disconnect.title'),\n\t\t\t{\n\t\t\t\tconfirmButtonText: locale.baseText('settings.sourceControl.modals.disconnect.confirm'),\n\t\t\t\tcancelButtonText: locale.baseText('settings.sourceControl.modals.disconnect.cancel'),\n\t\t\t},\n\t\t);\n\n\t\tif (confirmation === MODAL_CONFIRM) {\n\t\t\tloadingService.startLoading();\n\t\t\tawait sourceControlStore.disconnect(true);\n\t\t\tisConnected.value = false;\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('settings.sourceControl.toast.disconnected.title'),\n\t\t\t\tmessage: locale.baseText('settings.sourceControl.toast.disconnected.message'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.toast.disconnected.error'));\n\t}\n\tloadingService.stopLoading();\n};\n\nconst onSave = async () => {\n\tloadingService.startLoading();\n\ttry {\n\t\tawait sourceControlStore.updatePreferences({\n\t\t\tbranchName: sourceControlStore.preferences.branchName,\n\t\t\tbranchReadOnly: sourceControlStore.preferences.branchReadOnly,\n\t\t\tbranchColor: sourceControlStore.preferences.branchColor,\n\t\t});\n\t\ttoast.showMessage({\n\t\t\ttitle: locale.baseText('settings.sourceControl.saved.title'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, 'Error setting branch');\n\t}\n\tloadingService.stopLoading();\n};\n\nconst onSelect = async (b: string) => {\n\tif (b === sourceControlStore.preferences.branchName) {\n\t\treturn;\n\t}\n\tsourceControlStore.preferences.branchName = b;\n};\n\nconst goToUpgrade = () => {\n\tvoid uiStore.goToUpgrade('source-control', 'upgrade-source-control');\n};\n\nconst initialize = async () => {\n\tawait sourceControlStore.getPreferences();\n\tif (sourceControlStore.preferences.connected) {\n\t\tisConnected.value = true;\n\t\tvoid sourceControlStore.getBranches();\n\t}\n};\n\nonMounted(async () => {\n\tawait initialize();\n});\n\nconst formValidationStatus = reactive<Record<string, boolean>>({\n\trepoUrl: false,\n\tkeyGeneratorType: false,\n});\n\nfunction onValidate(key: string, value: boolean) {\n\tformValidationStatus[key] = value;\n}\n\nconst repoUrlValidationRules: Array<Rule | RuleGroup> = [\n\t{ name: 'REQUIRED' },\n\t{\n\t\tname: 'MATCH_REGEX',\n\t\tconfig: {\n\t\t\tregex:\n\t\t\t\t/^(ssh:\\/\\/)?git@(?:\\[[0-9a-fA-F:]+\\]|(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+)(?::[0-9]+)*:(?:v[0-9]+\\/)?[a-zA-Z0-9_.\\-\\/]+(\\.git)?(?:\\/[a-zA-Z0-9_.\\-\\/]+)*$/,\n\t\t\tmessage: locale.baseText('settings.sourceControl.repoUrlInvalid'),\n\t\t},\n\t},\n];\n\nconst keyGeneratorTypeValidationRules: Array<Rule | RuleGroup> = [{ name: 'REQUIRED' }];\n\nconst validForConnection = computed(() => formValidationStatus.repoUrl);\nconst branchNameValidationRules: Array<Rule | RuleGroup> = [{ name: 'REQUIRED' }];\n\nasync function refreshSshKey() {\n\ttry {\n\t\tconst confirmation = await message.confirm(\n\t\t\tlocale.baseText('settings.sourceControl.modals.refreshSshKey.message'),\n\t\t\tlocale.baseText('settings.sourceControl.modals.refreshSshKey.title'),\n\t\t\t{\n\t\t\t\tconfirmButtonText: locale.baseText('settings.sourceControl.modals.refreshSshKey.confirm'),\n\t\t\t\tcancelButtonText: locale.baseText('settings.sourceControl.modals.refreshSshKey.cancel'),\n\t\t\t},\n\t\t);\n\n\t\tif (confirmation === MODAL_CONFIRM) {\n\t\t\tawait sourceControlStore.generateKeyPair(sourceControlStore.preferences.keyGeneratorType);\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('settings.sourceControl.refreshSshKey.successful.title'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.refreshSshKey.error.title'));\n\t}\n}\n\nconst refreshBranches = async () => {\n\ttry {\n\t\tawait sourceControlStore.getBranches();\n\t\ttoast.showMessage({\n\t\t\ttitle: locale.baseText('settings.sourceControl.refreshBranches.success'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.refreshBranches.error'));\n\t}\n};\n\nconst onSelectSshKeyType = async (sshKeyType: TupleToUnion<SshKeyTypes>) => {\n\tif (sshKeyType === sourceControlStore.preferences.keyGeneratorType) {\n\t\treturn;\n\t}\n\tsourceControlStore.preferences.keyGeneratorType = sshKeyType;\n};\n</script>\n\n<template>\n\t<div>\n\t\t<n8n-heading size=\"2xlarge\" tag=\"h1\">{{\n\t\t\tlocale.baseText('settings.sourceControl.title')\n\t\t}}</n8n-heading>\n\t\t<div\n\t\t\tv-if=\"sourceControlStore.isEnterpriseSourceControlEnabled\"\n\t\t\tdata-test-id=\"source-control-content-licensed\"\n\t\t>\n\t\t\t<n8n-callout theme=\"secondary\" icon=\"info-circle\" class=\"mt-2xl mb-l\">\n\t\t\t\t<i18n-t keypath=\"settings.sourceControl.description\" tag=\"span\">\n\t\t\t\t\t<template #link>\n\t\t\t\t\t\t<a :href=\"locale.baseText('settings.sourceControl.docs.url')\" target=\"_blank\">\n\t\t\t\t\t\t\t{{ locale.baseText('settings.sourceControl.description.link') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</template>\n\t\t\t\t</i18n-t>\n\t\t\t</n8n-callout>\n\t\t\t<n8n-heading size=\"xlarge\" tag=\"h2\" class=\"mb-s\">{{\n\t\t\t\tlocale.baseText('settings.sourceControl.gitConfig')\n\t\t\t}}</n8n-heading>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label for=\"repoUrl\">{{ locale.baseText('settings.sourceControl.repoUrl') }}</label>\n\t\t\t\t<div :class=\"$style.groupFlex\">\n\t\t\t\t\t<n8n-form-input\n\t\t\t\t\t\tid=\"repoUrl\"\n\t\t\t\t\t\tv-model=\"sourceControlStore.preferences.repositoryUrl\"\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tclass=\"ml-0\"\n\t\t\t\t\t\tname=\"repoUrl\"\n\t\t\t\t\t\tvalidate-on-blur\n\t\t\t\t\t\t:validation-rules=\"repoUrlValidationRules\"\n\t\t\t\t\t\t:disabled=\"isConnected\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('settings.sourceControl.repoUrlPlaceholder')\"\n\t\t\t\t\t\t@validate=\"(value) => onValidate('repoUrl', value)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tv-if=\"isConnected\"\n\t\t\t\t\t\t:class=\"$style.disconnectButton\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\tdata-test-id=\"source-control-disconnect-button\"\n\t\t\t\t\t\t@click=\"onDisconnect\"\n\t\t\t\t\t\t>{{ locale.baseText('settings.sourceControl.button.disconnect') }}</n8n-button\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"sourceControlStore.preferences.publicKey\" :class=\"$style.group\">\n\t\t\t\t<label>{{ locale.baseText('settings.sourceControl.sshKey') }}</label>\n\t\t\t\t<div :class=\"{ [$style.sshInput]: !isConnected }\">\n\t\t\t\t\t<n8n-form-input\n\t\t\t\t\t\tv-if=\"!isConnected\"\n\t\t\t\t\t\tid=\"keyGeneratorType\"\n\t\t\t\t\t\t:class=\"$style.sshKeyTypeSelect\"\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\ttype=\"select\"\n\t\t\t\t\t\tname=\"keyGeneratorType\"\n\t\t\t\t\t\tdata-test-id=\"source-control-ssh-key-type-select\"\n\t\t\t\t\t\tvalidate-on-blur\n\t\t\t\t\t\t:validation-rules=\"keyGeneratorTypeValidationRules\"\n\t\t\t\t\t\t:options=\"sourceControlStore.sshKeyTypesWithLabel\"\n\t\t\t\t\t\t:model-value=\"sourceControlStore.preferences.keyGeneratorType\"\n\t\t\t\t\t\t@validate=\"(value) => onValidate('keyGeneratorType', value)\"\n\t\t\t\t\t\t@update:modelValue=\"onSelectSshKeyType\"\n\t\t\t\t\t/>\n\t\t\t\t\t<CopyInput\n\t\t\t\t\t\t:class=\"$style.copyInput\"\n\t\t\t\t\t\tcollapse\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t:value=\"sourceControlStore.preferences.publicKey\"\n\t\t\t\t\t\t:copy-button-text=\"locale.baseText('generic.clickToCopy')\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tv-if=\"!isConnected\"\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\ticon=\"sync\"\n\t\t\t\t\t\tdata-test-id=\"source-control-refresh-ssh-key-button\"\n\t\t\t\t\t\t@click=\"refreshSshKey\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ locale.baseText('settings.sourceControl.refreshSshKey') }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</div>\n\t\t\t\t<n8n-notice type=\"info\" class=\"mt-s\">\n\t\t\t\t\t<i18n-t keypath=\"settings.sourceControl.sshKeyDescription\" tag=\"span\">\n\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t:href=\"locale.baseText('settings.sourceControl.docs.setup.ssh.url')\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t>{{ locale.baseText('settings.sourceControl.sshKeyDescriptionLink') }}</a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</n8n-notice>\n\t\t\t</div>\n\t\t\t<n8n-button\n\t\t\t\tv-if=\"!isConnected\"\n\t\t\t\tsize=\"large\"\n\t\t\t\t:disabled=\"!validForConnection\"\n\t\t\t\t:class=\"$style.connect\"\n\t\t\t\tdata-test-id=\"source-control-connect-button\"\n\t\t\t\t@click=\"onConnect\"\n\t\t\t\t>{{ locale.baseText('settings.sourceControl.button.connect') }}</n8n-button\n\t\t\t>\n\t\t\t<div v-if=\"isConnected\" data-test-id=\"source-control-connected-content\">\n\t\t\t\t<div :class=\"$style.group\">\n\t\t\t\t\t<hr />\n\t\t\t\t\t<n8n-heading size=\"xlarge\" tag=\"h2\" class=\"mb-s\">{{\n\t\t\t\t\t\tlocale.baseText('settings.sourceControl.instanceSettings')\n\t\t\t\t\t}}</n8n-heading>\n\t\t\t\t\t<label>{{ locale.baseText('settings.sourceControl.branches') }}</label>\n\t\t\t\t\t<div :class=\"$style.branchSelection\">\n\t\t\t\t\t\t<n8n-form-input\n\t\t\t\t\t\t\tid=\"branchName\"\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\ttype=\"select\"\n\t\t\t\t\t\t\tname=\"branchName\"\n\t\t\t\t\t\t\tclass=\"mb-s\"\n\t\t\t\t\t\t\tdata-test-id=\"source-control-branch-select\"\n\t\t\t\t\t\t\tvalidate-on-blur\n\t\t\t\t\t\t\t:validation-rules=\"branchNameValidationRules\"\n\t\t\t\t\t\t\t:options=\"branchNameOptions\"\n\t\t\t\t\t\t\t:model-value=\"sourceControlStore.preferences.branchName\"\n\t\t\t\t\t\t\t@validate=\"(value) => onValidate('branchName', value)\"\n\t\t\t\t\t\t\t@update:modelValue=\"onSelect\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<n8n-tooltip placement=\"top\">\n\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{{ locale.baseText('settings.sourceControl.refreshBranches.tooltip') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\ticon=\"sync\"\n\t\t\t\t\t\t\t\tsquare\n\t\t\t\t\t\t\t\t:class=\"$style.refreshBranches\"\n\t\t\t\t\t\t\t\tdata-test-id=\"source-control-refresh-branches-button\"\n\t\t\t\t\t\t\t\t@click=\"refreshBranches\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t</div>\n\t\t\t\t\t<n8n-checkbox\n\t\t\t\t\t\tv-model=\"sourceControlStore.preferences.branchReadOnly\"\n\t\t\t\t\t\t:class=\"$style.readOnly\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i18n-t keypath=\"settings.sourceControl.protected\" tag=\"span\">\n\t\t\t\t\t\t\t<template #bold>\n\t\t\t\t\t\t\t\t<strong>{{ locale.baseText('settings.sourceControl.protected.bold') }}</strong>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t</n8n-checkbox>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"$style.group\">\n\t\t\t\t\t<label>{{ locale.baseText('settings.sourceControl.color') }}</label>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<n8n-color-picker v-model=\"sourceControlStore.preferences.branchColor\" size=\"small\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"[$style.group, 'pt-s']\">\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t:disabled=\"!sourceControlStore.preferences.branchName\"\n\t\t\t\t\t\tdata-test-id=\"source-control-save-settings-button\"\n\t\t\t\t\t\t@click=\"onSave\"\n\t\t\t\t\t\t>{{ locale.baseText('settings.sourceControl.button.save') }}</n8n-button\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<n8n-action-box\n\t\t\tv-else\n\t\t\tdata-test-id=\"source-control-content-unlicensed\"\n\t\t\t:class=\"$style.actionBox\"\n\t\t\t:description=\"locale.baseText('settings.sourceControl.actionBox.description')\"\n\t\t\t:button-text=\"locale.baseText('settings.sourceControl.actionBox.buttonText')\"\n\t\t\t@click:button=\"goToUpgrade\"\n\t\t>\n\t\t\t<template #heading>\n\t\t\t\t<span>{{ locale.baseText('settings.sourceControl.actionBox.title') }}</span>\n\t\t\t</template>\n\t\t\t<template #description>\n\t\t\t\t{{ locale.baseText('settings.sourceControl.actionBox.description') }}\n\t\t\t\t<a :href=\"locale.baseText('settings.sourceControl.docs.url')\" target=\"_blank\">\n\t\t\t\t\t{{ locale.baseText('settings.sourceControl.actionBox.description.link') }}\n\t\t\t\t</a>\n\t\t\t</template>\n\t\t</n8n-action-box>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.group {\n\tpadding: 0 0 var(--spacing-s);\n\twidth: 100%;\n\tdisplay: block;\n\n\thr {\n\t\tmargin: 0 0 var(--spacing-xl);\n\t\tborder: 1px solid var(--color-foreground-light);\n\t}\n\n\tlabel {\n\t\tdisplay: inline-block;\n\t\tpadding: 0 0 var(--spacing-2xs);\n\t\tfont-size: var(--font-size-s);\n\t}\n\n\tsmall {\n\t\tdisplay: inline-block;\n\t\tpadding: var(--spacing-2xs) 0 0;\n\t\tfont-size: var(--font-size-2xs);\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n.readOnly {\n\tspan {\n\t\tfont-size: var(--font-size-s) !important;\n\t}\n}\n\n.groupFlex {\n\tdisplay: flex;\n\talign-items: flex-start;\n\n\t> div {\n\t\tflex: 1;\n\n\t\t&:last-child {\n\t\t\tmargin-left: var(--spacing-2xs);\n\t\t}\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t}\n}\n\n.connect {\n\tmargin: calc(var(--spacing-2xs) * -1) 0 var(--spacing-2xs);\n}\n\n.disconnectButton {\n\tmargin: 0 0 0 var(--spacing-2xs);\n\theight: 40px;\n}\n\n.actionBox {\n\tmargin: var(--spacing-2xl) 0 0;\n}\n\n.sshInput {\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\n\t> div {\n\t\tflex: 1 1 auto;\n\t}\n\n\t> button {\n\t\theight: 42px;\n\t}\n\n\t.copyInput {\n\t\tmargin: 0 var(--spacing-2xs);\n\t}\n}\n\n.sshKeyTypeSelect {\n\tmin-width: 120px;\n}\n\n.copyInput {\n\toverflow: auto;\n}\n\n.branchSelection {\n\tdisplay: flex;\n\n\t> div:first-child {\n\t\tflex: 1;\n\n\t\tinput {\n\t\t\theight: 36px;\n\t\t}\n\t}\n\n\tbutton.refreshBranches {\n\t\theight: 36px;\n\t\twidth: 36px;\n\t\tmargin-left: var(--spacing-xs);\n\t}\n}\n</style>\n"],"names":["locale","useI18n","sourceControlStore","useSourceControlStore","uiStore","useUIStore","toast","useToast","message","useMessage","loadingService","useLoadingService","isConnected","ref","branchNameOptions","computed","branch","onConnect","error","onDisconnect","MODAL_CONFIRM","onSave","onSelect","b","goToUpgrade","initialize","onMounted","formValidationStatus","reactive","onValidate","key","value","repoUrlValidationRules","keyGeneratorTypeValidationRules","validForConnection","branchNameValidationRules","refreshSshKey","refreshBranches","onSelectSshKeyType","sshKeyType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsSourceControl-bMzlo6t4.js","sources":["../../src/views/SettingsSourceControl.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, reactive, ref, onMounted } from 'vue';\nimport type { Rule, RuleGroup } from 'n8n-design-system/types';\nimport { MODAL_CONFIRM } from '@/constants';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useToast } from '@/composables/useToast';\nimport { useLoadingService } from '@/composables/useLoadingService';\nimport { useI18n } from '@/composables/useI18n';\nimport { useMessage } from '@/composables/useMessage';\nimport CopyInput from '@/components/CopyInput.vue';\nimport type { TupleToUnion } from '@/utils/typeHelpers';\nimport type { SshKeyTypes } from '@/Interface';\n\nconst locale = useI18n();\nconst sourceControlStore = useSourceControlStore();\nconst uiStore = useUIStore();\nconst toast = useToast();\nconst message = useMessage();\nconst loadingService = useLoadingService();\n\nconst isConnected = ref(false);\nconst branchNameOptions = computed(() =>\n\tsourceControlStore.preferences.branches.map((branch) => ({\n\t\tvalue: branch,\n\t\tlabel: branch,\n\t})),\n);\n\nconst onConnect = async () => {\n\tloadingService.startLoading();\n\tloadingService.setLoadingText(locale.baseText('settings.sourceControl.loading.connecting'));\n\ttry {\n\t\tawait sourceControlStore.savePreferences({\n\t\t\trepositoryUrl: sourceControlStore.preferences.repositoryUrl,\n\t\t});\n\t\tawait sourceControlStore.getBranches();\n\t\tisConnected.value = true;\n\t\ttoast.showMessage({\n\t\t\ttitle: locale.baseText('settings.sourceControl.toast.connected.title'),\n\t\t\tmessage: locale.baseText('settings.sourceControl.toast.connected.message'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.toast.connected.error'));\n\t}\n\tloadingService.stopLoading();\n};\n\nconst onDisconnect = async () => {\n\ttry {\n\t\tconst confirmation = await message.confirm(\n\t\t\tlocale.baseText('settings.sourceControl.modals.disconnect.message'),\n\t\t\tlocale.baseText('settings.sourceControl.modals.disconnect.title'),\n\t\t\t{\n\t\t\t\tconfirmButtonText: locale.baseText('settings.sourceControl.modals.disconnect.confirm'),\n\t\t\t\tcancelButtonText: locale.baseText('settings.sourceControl.modals.disconnect.cancel'),\n\t\t\t},\n\t\t);\n\n\t\tif (confirmation === MODAL_CONFIRM) {\n\t\t\tloadingService.startLoading();\n\t\t\tawait sourceControlStore.disconnect(true);\n\t\t\tisConnected.value = false;\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('settings.sourceControl.toast.disconnected.title'),\n\t\t\t\tmessage: locale.baseText('settings.sourceControl.toast.disconnected.message'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.toast.disconnected.error'));\n\t}\n\tloadingService.stopLoading();\n};\n\nconst onSave = async () => {\n\tloadingService.startLoading();\n\ttry {\n\t\tawait sourceControlStore.updatePreferences({\n\t\t\tbranchName: sourceControlStore.preferences.branchName,\n\t\t\tbranchReadOnly: sourceControlStore.preferences.branchReadOnly,\n\t\t\tbranchColor: sourceControlStore.preferences.branchColor,\n\t\t});\n\t\ttoast.showMessage({\n\t\t\ttitle: locale.baseText('settings.sourceControl.saved.title'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, 'Error setting branch');\n\t}\n\tloadingService.stopLoading();\n};\n\nconst onSelect = async (b: string) => {\n\tif (b === sourceControlStore.preferences.branchName) {\n\t\treturn;\n\t}\n\tsourceControlStore.preferences.branchName = b;\n};\n\nconst goToUpgrade = () => {\n\tvoid uiStore.goToUpgrade('source-control', 'upgrade-source-control');\n};\n\nconst initialize = async () => {\n\tawait sourceControlStore.getPreferences();\n\tif (sourceControlStore.preferences.connected) {\n\t\tisConnected.value = true;\n\t\tvoid sourceControlStore.getBranches();\n\t}\n};\n\nonMounted(async () => {\n\tawait initialize();\n});\n\nconst formValidationStatus = reactive<Record<string, boolean>>({\n\trepoUrl: false,\n\tkeyGeneratorType: false,\n});\n\nfunction onValidate(key: string, value: boolean) {\n\tformValidationStatus[key] = value;\n}\n\nconst repoUrlValidationRules: Array<Rule | RuleGroup> = [\n\t{ name: 'REQUIRED' },\n\t{\n\t\tname: 'MATCH_REGEX',\n\t\tconfig: {\n\t\t\tregex:\n\t\t\t\t/^(ssh:\\/\\/)?git@(?:\\[[0-9a-fA-F:]+\\]|(?:[a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+)(?::[0-9]+)*:(?:v[0-9]+\\/)?[a-zA-Z0-9_.\\-\\/]+(\\.git)?(?:\\/[a-zA-Z0-9_.\\-\\/]+)*$/,\n\t\t\tmessage: locale.baseText('settings.sourceControl.repoUrlInvalid'),\n\t\t},\n\t},\n];\n\nconst keyGeneratorTypeValidationRules: Array<Rule | RuleGroup> = [{ name: 'REQUIRED' }];\n\nconst validForConnection = computed(() => formValidationStatus.repoUrl);\nconst branchNameValidationRules: Array<Rule | RuleGroup> = [{ name: 'REQUIRED' }];\n\nasync function refreshSshKey() {\n\ttry {\n\t\tconst confirmation = await message.confirm(\n\t\t\tlocale.baseText('settings.sourceControl.modals.refreshSshKey.message'),\n\t\t\tlocale.baseText('settings.sourceControl.modals.refreshSshKey.title'),\n\t\t\t{\n\t\t\t\tconfirmButtonText: locale.baseText('settings.sourceControl.modals.refreshSshKey.confirm'),\n\t\t\t\tcancelButtonText: locale.baseText('settings.sourceControl.modals.refreshSshKey.cancel'),\n\t\t\t},\n\t\t);\n\n\t\tif (confirmation === MODAL_CONFIRM) {\n\t\t\tawait sourceControlStore.generateKeyPair(sourceControlStore.preferences.keyGeneratorType);\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('settings.sourceControl.refreshSshKey.successful.title'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.refreshSshKey.error.title'));\n\t}\n}\n\nconst refreshBranches = async () => {\n\ttry {\n\t\tawait sourceControlStore.getBranches();\n\t\ttoast.showMessage({\n\t\t\ttitle: locale.baseText('settings.sourceControl.refreshBranches.success'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('settings.sourceControl.refreshBranches.error'));\n\t}\n};\n\nconst onSelectSshKeyType = async (sshKeyType: TupleToUnion<SshKeyTypes>) => {\n\tif (sshKeyType === sourceControlStore.preferences.keyGeneratorType) {\n\t\treturn;\n\t}\n\tsourceControlStore.preferences.keyGeneratorType = sshKeyType;\n};\n</script>\n\n<template>\n\t<div>\n\t\t<n8n-heading size=\"2xlarge\" tag=\"h1\">{{\n\t\t\tlocale.baseText('settings.sourceControl.title')\n\t\t}}</n8n-heading>\n\t\t<div\n\t\t\tv-if=\"sourceControlStore.isEnterpriseSourceControlEnabled\"\n\t\t\tdata-test-id=\"source-control-content-licensed\"\n\t\t>\n\t\t\t<n8n-callout theme=\"secondary\" icon=\"info-circle\" class=\"mt-2xl mb-l\">\n\t\t\t\t<i18n-t keypath=\"settings.sourceControl.description\" tag=\"span\">\n\t\t\t\t\t<template #link>\n\t\t\t\t\t\t<a :href=\"locale.baseText('settings.sourceControl.docs.url')\" target=\"_blank\">\n\t\t\t\t\t\t\t{{ locale.baseText('settings.sourceControl.description.link') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</template>\n\t\t\t\t</i18n-t>\n\t\t\t</n8n-callout>\n\t\t\t<n8n-heading size=\"xlarge\" tag=\"h2\" class=\"mb-s\">{{\n\t\t\t\tlocale.baseText('settings.sourceControl.gitConfig')\n\t\t\t}}</n8n-heading>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label for=\"repoUrl\">{{ locale.baseText('settings.sourceControl.repoUrl') }}</label>\n\t\t\t\t<div :class=\"$style.groupFlex\">\n\t\t\t\t\t<n8n-form-input\n\t\t\t\t\t\tid=\"repoUrl\"\n\t\t\t\t\t\tv-model=\"sourceControlStore.preferences.repositoryUrl\"\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\tclass=\"ml-0\"\n\t\t\t\t\t\tname=\"repoUrl\"\n\t\t\t\t\t\tvalidate-on-blur\n\t\t\t\t\t\t:validation-rules=\"repoUrlValidationRules\"\n\t\t\t\t\t\t:disabled=\"isConnected\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('settings.sourceControl.repoUrlPlaceholder')\"\n\t\t\t\t\t\t@validate=\"(value) => onValidate('repoUrl', value)\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tv-if=\"isConnected\"\n\t\t\t\t\t\t:class=\"$style.disconnectButton\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\tdata-test-id=\"source-control-disconnect-button\"\n\t\t\t\t\t\t@click=\"onDisconnect\"\n\t\t\t\t\t\t>{{ locale.baseText('settings.sourceControl.button.disconnect') }}</n8n-button\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"sourceControlStore.preferences.publicKey\" :class=\"$style.group\">\n\t\t\t\t<label>{{ locale.baseText('settings.sourceControl.sshKey') }}</label>\n\t\t\t\t<div :class=\"{ [$style.sshInput]: !isConnected }\">\n\t\t\t\t\t<n8n-form-input\n\t\t\t\t\t\tv-if=\"!isConnected\"\n\t\t\t\t\t\tid=\"keyGeneratorType\"\n\t\t\t\t\t\t:class=\"$style.sshKeyTypeSelect\"\n\t\t\t\t\t\tlabel\n\t\t\t\t\t\ttype=\"select\"\n\t\t\t\t\t\tname=\"keyGeneratorType\"\n\t\t\t\t\t\tdata-test-id=\"source-control-ssh-key-type-select\"\n\t\t\t\t\t\tvalidate-on-blur\n\t\t\t\t\t\t:validation-rules=\"keyGeneratorTypeValidationRules\"\n\t\t\t\t\t\t:options=\"sourceControlStore.sshKeyTypesWithLabel\"\n\t\t\t\t\t\t:model-value=\"sourceControlStore.preferences.keyGeneratorType\"\n\t\t\t\t\t\t@validate=\"(value) => onValidate('keyGeneratorType', value)\"\n\t\t\t\t\t\t@update:modelValue=\"onSelectSshKeyType\"\n\t\t\t\t\t/>\n\t\t\t\t\t<CopyInput\n\t\t\t\t\t\t:class=\"$style.copyInput\"\n\t\t\t\t\t\tcollapse\n\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t:value=\"sourceControlStore.preferences.publicKey\"\n\t\t\t\t\t\t:copy-button-text=\"locale.baseText('generic.clickToCopy')\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tv-if=\"!isConnected\"\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\ticon=\"sync\"\n\t\t\t\t\t\tdata-test-id=\"source-control-refresh-ssh-key-button\"\n\t\t\t\t\t\t@click=\"refreshSshKey\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ locale.baseText('settings.sourceControl.refreshSshKey') }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</div>\n\t\t\t\t<n8n-notice type=\"info\" class=\"mt-s\">\n\t\t\t\t\t<i18n-t keypath=\"settings.sourceControl.sshKeyDescription\" tag=\"span\">\n\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t:href=\"locale.baseText('settings.sourceControl.docs.setup.ssh.url')\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t>{{ locale.baseText('settings.sourceControl.sshKeyDescriptionLink') }}</a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</n8n-notice>\n\t\t\t</div>\n\t\t\t<n8n-button\n\t\t\t\tv-if=\"!isConnected\"\n\t\t\t\tsize=\"large\"\n\t\t\t\t:disabled=\"!validForConnection\"\n\t\t\t\t:class=\"$style.connect\"\n\t\t\t\tdata-test-id=\"source-control-connect-button\"\n\t\t\t\t@click=\"onConnect\"\n\t\t\t\t>{{ locale.baseText('settings.sourceControl.button.connect') }}</n8n-button\n\t\t\t>\n\t\t\t<div v-if=\"isConnected\" data-test-id=\"source-control-connected-content\">\n\t\t\t\t<div :class=\"$style.group\">\n\t\t\t\t\t<hr />\n\t\t\t\t\t<n8n-heading size=\"xlarge\" tag=\"h2\" class=\"mb-s\">{{\n\t\t\t\t\t\tlocale.baseText('settings.sourceControl.instanceSettings')\n\t\t\t\t\t}}</n8n-heading>\n\t\t\t\t\t<label>{{ locale.baseText('settings.sourceControl.branches') }}</label>\n\t\t\t\t\t<div :class=\"$style.branchSelection\">\n\t\t\t\t\t\t<n8n-form-input\n\t\t\t\t\t\t\tid=\"branchName\"\n\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\ttype=\"select\"\n\t\t\t\t\t\t\tname=\"branchName\"\n\t\t\t\t\t\t\tclass=\"mb-s\"\n\t\t\t\t\t\t\tdata-test-id=\"source-control-branch-select\"\n\t\t\t\t\t\t\tvalidate-on-blur\n\t\t\t\t\t\t\t:validation-rules=\"branchNameValidationRules\"\n\t\t\t\t\t\t\t:options=\"branchNameOptions\"\n\t\t\t\t\t\t\t:model-value=\"sourceControlStore.preferences.branchName\"\n\t\t\t\t\t\t\t@validate=\"(value) => onValidate('branchName', value)\"\n\t\t\t\t\t\t\t@update:modelValue=\"onSelect\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<n8n-tooltip placement=\"top\">\n\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{{ locale.baseText('settings.sourceControl.refreshBranches.tooltip') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\ticon=\"sync\"\n\t\t\t\t\t\t\t\tsquare\n\t\t\t\t\t\t\t\t:class=\"$style.refreshBranches\"\n\t\t\t\t\t\t\t\tdata-test-id=\"source-control-refresh-branches-button\"\n\t\t\t\t\t\t\t\t@click=\"refreshBranches\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t</div>\n\t\t\t\t\t<n8n-checkbox\n\t\t\t\t\t\tv-model=\"sourceControlStore.preferences.branchReadOnly\"\n\t\t\t\t\t\t:class=\"$style.readOnly\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<i18n-t keypath=\"settings.sourceControl.protected\" tag=\"span\">\n\t\t\t\t\t\t\t<template #bold>\n\t\t\t\t\t\t\t\t<strong>{{ locale.baseText('settings.sourceControl.protected.bold') }}</strong>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t</n8n-checkbox>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"$style.group\">\n\t\t\t\t\t<label>{{ locale.baseText('settings.sourceControl.color') }}</label>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<n8n-color-picker v-model=\"sourceControlStore.preferences.branchColor\" size=\"small\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div :class=\"[$style.group, 'pt-s']\">\n\t\t\t\t\t<n8n-button\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t:disabled=\"!sourceControlStore.preferences.branchName\"\n\t\t\t\t\t\tdata-test-id=\"source-control-save-settings-button\"\n\t\t\t\t\t\t@click=\"onSave\"\n\t\t\t\t\t\t>{{ locale.baseText('settings.sourceControl.button.save') }}</n8n-button\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<n8n-action-box\n\t\t\tv-else\n\t\t\tdata-test-id=\"source-control-content-unlicensed\"\n\t\t\t:class=\"$style.actionBox\"\n\t\t\t:description=\"locale.baseText('settings.sourceControl.actionBox.description')\"\n\t\t\t:button-text=\"locale.baseText('settings.sourceControl.actionBox.buttonText')\"\n\t\t\t@click:button=\"goToUpgrade\"\n\t\t>\n\t\t\t<template #heading>\n\t\t\t\t<span>{{ locale.baseText('settings.sourceControl.actionBox.title') }}</span>\n\t\t\t</template>\n\t\t\t<template #description>\n\t\t\t\t{{ locale.baseText('settings.sourceControl.actionBox.description') }}\n\t\t\t\t<a :href=\"locale.baseText('settings.sourceControl.docs.url')\" target=\"_blank\">\n\t\t\t\t\t{{ locale.baseText('settings.sourceControl.actionBox.description.link') }}\n\t\t\t\t</a>\n\t\t\t</template>\n\t\t</n8n-action-box>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.group {\n\tpadding: 0 0 var(--spacing-s);\n\twidth: 100%;\n\tdisplay: block;\n\n\thr {\n\t\tmargin: 0 0 var(--spacing-xl);\n\t\tborder: 1px solid var(--color-foreground-light);\n\t}\n\n\tlabel {\n\t\tdisplay: inline-block;\n\t\tpadding: 0 0 var(--spacing-2xs);\n\t\tfont-size: var(--font-size-s);\n\t}\n\n\tsmall {\n\t\tdisplay: inline-block;\n\t\tpadding: var(--spacing-2xs) 0 0;\n\t\tfont-size: var(--font-size-2xs);\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n.readOnly {\n\tspan {\n\t\tfont-size: var(--font-size-s) !important;\n\t}\n}\n\n.groupFlex {\n\tdisplay: flex;\n\talign-items: flex-start;\n\n\t> div {\n\t\tflex: 1;\n\n\t\t&:last-child {\n\t\t\tmargin-left: var(--spacing-2xs);\n\t\t}\n\t}\n\n\tinput {\n\t\twidth: 100%;\n\t}\n}\n\n.connect {\n\tmargin: calc(var(--spacing-2xs) * -1) 0 var(--spacing-2xs);\n}\n\n.disconnectButton {\n\tmargin: 0 0 0 var(--spacing-2xs);\n\theight: 40px;\n}\n\n.actionBox {\n\tmargin: var(--spacing-2xl) 0 0;\n}\n\n.sshInput {\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\n\t> div {\n\t\tflex: 1 1 auto;\n\t}\n\n\t> button {\n\t\theight: 42px;\n\t}\n\n\t.copyInput {\n\t\tmargin: 0 var(--spacing-2xs);\n\t}\n}\n\n.sshKeyTypeSelect {\n\tmin-width: 120px;\n}\n\n.copyInput {\n\toverflow: auto;\n}\n\n.branchSelection {\n\tdisplay: flex;\n\n\t> div:first-child {\n\t\tflex: 1;\n\n\t\tinput {\n\t\t\theight: 36px;\n\t\t}\n\t}\n\n\tbutton.refreshBranches {\n\t\theight: 36px;\n\t\twidth: 36px;\n\t\tmargin-left: var(--spacing-xs);\n\t}\n}\n</style>\n"],"names":["locale","useI18n","sourceControlStore","useSourceControlStore","uiStore","useUIStore","toast","useToast","message","useMessage","loadingService","useLoadingService","isConnected","ref","branchNameOptions","computed","branch","onConnect","error","onDisconnect","MODAL_CONFIRM","onSave","onSelect","b","goToUpgrade","initialize","onMounted","formValidationStatus","reactive","onValidate","key","value","repoUrlValidationRules","keyGeneratorTypeValidationRules","validForConnection","branchNameValidationRules","refreshSshKey","refreshBranches","onSelectSshKeyType","sshKeyType"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{v as G,e as f,r as v,b as Q,f as y,h as V,K as u,E as d,J as x,I as o,u as s,i as a,D as k,y as c,H as W,M as B,L as z,a6 as p}from"./vendor-3VD3vVJy.js";import{ax as Y,C as I,b as Z}from"./index-
|
|
2
|
-
//# sourceMappingURL=SettingsSso-
|
|
1
|
+
import{v as G,e as f,r as v,b as Q,f as y,h as V,K as u,E as d,J as x,I as o,u as s,i as a,D as k,y as c,H as W,M as B,L as z,a6 as p}from"./vendor-3VD3vVJy.js";import{ax as Y,C as I,b as Z}from"./index-9xnnd4cn.js";import{m as tt,u as et,e as st,x as at,O as ot,_ as nt}from"./n8n-uKoDE8Qf.js";import"./pinia-e-gLcRJ1.js";import"./@n8n/codemirror-lang-sql-feLn5IS9.js";import"./@lezer/common-1hBQ1gIF.js";import"./codemirror-lang-html-n8n-wWQLhhqk.js";import"./prettier-s3fE3Qyr.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./lodash-es-JdX4GWLn.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-lH03nmRE.js";import"./codemirror-lang-n8n-expression-HpIZnV_9.js";import"./fast-json-stable-stringify-LPGjnXm6.js";import"./esprima-next-ulPLCZ1Z.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-B6sLPrrf.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./vue-i18n-MkmfYvll.js";import"./@n8n/permissions-8yMqUF1Y.js";const lt={class:"pb-3xl"},it={href:"https://docs.n8n.io/user-management/saml/",target:"_blank"},rt={key:0,"data-test-id":"sso-content-licensed"},ut={class:"mt-2xs mb-s"},dt=G({__name:"SettingsSso",setup(xt){const l={URL:"url",XML:"xml"},e=at(),M=ot(),R=tt(),n=Y(),$=et(),X=Z(),T=st(),D=f(()=>n.isSamlLoginEnabled?e.baseText("settings.sso.activated"):e.baseText("settings.sso.deactivated")),_=v(!1),S=v(),U=v(),N=v([{label:e.baseText("settings.sso.settings.ips.options.url"),value:l.URL},{label:e.baseText("settings.sso.settings.ips.options.xml"),value:l.XML}]),i=v(l.URL),m=v(),g=v(),O=f(()=>{var t,r;return i.value===l.URL?!!m.value&&m.value!==((t=n.samlConfig)==null?void 0:t.metadataUrl):i.value===l.XML?!!g.value&&g.value!==((r=n.samlConfig)==null?void 0:r.metadata):!1}),A=f(()=>i.value===l.URL?!!m.value&&_.value:i.value===l.XML?!!g.value&&_.value:!1),h=async()=>{const t=await n.getSamlConfig();U.value=t==null?void 0:t.entityID,S.value=t==null?void 0:t.returnUrl,t!=null&&t.metadataUrl?i.value=l.URL:t!=null&&t.metadata&&(i.value=l.XML),g.value=t==null?void 0:t.metadata,m.value=t==null?void 0:t.metadataUrl,_.value=!!(t!=null&&t.metadata)},H=async()=>{try{const t=i.value===l.URL?{metadataUrl:m.value}:{metadata:g.value};await n.saveSamlConfig(t),n.isSamlLoginEnabled||await X.confirm(e.baseText("settings.sso.settings.save.activate.message"),e.baseText("settings.sso.settings.save.activate.title"),{confirmButtonText:e.baseText("settings.sso.settings.save.activate.test"),cancelButtonText:e.baseText("settings.sso.settings.save.activate.cancel")})==="confirm"&&await w(),M.track("User updated single sign on settings",{instance_id:R.instanceId,identity_provider:i.value==="url"?"metadata":"xml",is_active:n.isSamlLoginEnabled})}catch(t){T.showError(t,e.baseText("settings.sso.settings.save.error"));return}finally{await h()}},w=async()=>{try{const t=await n.testSamlConfig();typeof window<"u"&&window.open(t,"_blank")}catch(t){T.showError(t,"error")}},J=()=>{$.goToUpgrade("sso","upgrade-sso")};return Q(async()=>{if(n.isEnterpriseSamlEnabled)try{await h()}catch(t){T.showError(t,"error")}}),(t,r)=>{const L=p("n8n-heading"),K=p("el-switch"),P=p("n8n-tooltip"),j=p("n8n-info-tip"),q=p("n8n-radio-buttons"),E=p("n8n-input"),C=p("n8n-button"),F=p("n8n-action-box");return y(),V("div",lt,[u(L,{size:"2xlarge"},{default:d(()=>[x(o(s(e).baseText("settings.sso.title")),1)]),_:1}),a("div",{class:c(t.$style.top)},[u(L,{size:"xlarge"},{default:d(()=>[x(o(s(e).baseText("settings.sso.subtitle")),1)]),_:1}),s(n).isEnterpriseSamlEnabled?(y(),k(P,{key:0,disabled:s(n).isSamlLoginEnabled||_.value},{content:d(()=>[a("span",null,o(s(e).baseText("settings.sso.activation.tooltip")),1)]),default:d(()=>[u(K,{modelValue:s(n).isSamlLoginEnabled,"onUpdate:modelValue":r[0]||(r[0]=b=>s(n).isSamlLoginEnabled=b),disabled:!_.value,class:c(t.$style.switch),"inactive-text":D.value},null,8,["modelValue","disabled","class","inactive-text"])]),_:1},8,["disabled"])):W("",!0)],2),u(j,null,{default:d(()=>[x(o(s(e).baseText("settings.sso.info"))+" ",1),a("a",it,o(s(e).baseText("settings.sso.info.link")),1)]),_:1}),s(n).isEnterpriseSamlEnabled?(y(),V("div",rt,[a("div",{class:c(t.$style.group)},[a("label",null,o(s(e).baseText("settings.sso.settings.redirectUrl.label")),1),u(I,{value:S.value,"copy-button-text":s(e).baseText("generic.clickToCopy"),"toast-title":s(e).baseText("settings.sso.settings.redirectUrl.copied")},null,8,["value","copy-button-text","toast-title"]),a("small",null,o(s(e).baseText("settings.sso.settings.redirectUrl.help")),1)],2),a("div",{class:c(t.$style.group)},[a("label",null,o(s(e).baseText("settings.sso.settings.entityId.label")),1),u(I,{value:U.value,"copy-button-text":s(e).baseText("generic.clickToCopy"),"toast-title":s(e).baseText("settings.sso.settings.entityId.copied")},null,8,["value","copy-button-text","toast-title"]),a("small",null,o(s(e).baseText("settings.sso.settings.entityId.help")),1)],2),a("div",{class:c(t.$style.group)},[a("label",null,o(s(e).baseText("settings.sso.settings.ips.label")),1),a("div",ut,[u(q,{modelValue:i.value,"onUpdate:modelValue":r[1]||(r[1]=b=>i.value=b),options:N.value},null,8,["modelValue","options"])]),B(a("div",null,[u(E,{modelValue:m.value,"onUpdate:modelValue":r[2]||(r[2]=b=>m.value=b),type:"text",name:"metadataUrl",size:"large",placeholder:s(e).baseText("settings.sso.settings.ips.url.placeholder")},null,8,["modelValue","placeholder"]),a("small",null,o(s(e).baseText("settings.sso.settings.ips.url.help")),1)],512),[[z,i.value===l.URL]]),B(a("div",null,[u(E,{modelValue:g.value,"onUpdate:modelValue":r[3]||(r[3]=b=>g.value=b),type:"textarea",name:"metadata",rows:4},null,8,["modelValue"]),a("small",null,o(s(e).baseText("settings.sso.settings.ips.xml.help")),1)],512),[[z,i.value===l.XML]])],2),a("div",{class:c(t.$style.buttons)},[u(C,{disabled:!O.value,size:"large","data-test-id":"sso-save",onClick:H},{default:d(()=>[x(o(s(e).baseText("settings.sso.settings.save")),1)]),_:1},8,["disabled"]),u(C,{disabled:!A.value,size:"large",type:"tertiary","data-test-id":"sso-test",onClick:w},{default:d(()=>[x(o(s(e).baseText("settings.sso.settings.test")),1)]),_:1},8,["disabled"])],2),a("footer",{class:c(t.$style.footer)},o(s(e).baseText("settings.sso.settings.footer.hint")),3)])):(y(),k(F,{key:1,"data-test-id":"sso-content-unlicensed",class:c(t.$style.actionBox),description:s(e).baseText("settings.sso.actionBox.description"),"button-text":s(e).baseText("settings.sso.actionBox.buttonText"),"onClick:button":J},{heading:d(()=>[a("span",null,o(s(e).baseText("settings.sso.actionBox.title")),1)]),_:1},8,["class","description","button-text"]))])}}}),ct="_top_1891z_5",pt="_buttons_1891z_18",mt="_group_1891z_27",gt="_actionBox_1891z_43",bt="_footer_1891z_47",vt={top:ct,switch:"_switch_1891z_12",buttons:pt,group:mt,actionBox:gt,footer:bt},_t={$style:vt},qt=nt(dt,[["__cssModules",_t]]);export{qt as default};
|
|
2
|
+
//# sourceMappingURL=SettingsSso-f8qqkUbH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsSso-ZDaKZSAz.js","sources":["../../src/views/SettingsSso.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, onMounted } from 'vue';\nimport { useSSOStore } from '@/stores/sso.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport CopyInput from '@/components/CopyInput.vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nconst IdentityProviderSettingsType = {\n\tURL: 'url',\n\tXML: 'xml',\n};\n\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\nconst rootStore = useRootStore();\nconst ssoStore = useSSOStore();\nconst uiStore = useUIStore();\nconst message = useMessage();\nconst toast = useToast();\n\nconst ssoActivatedLabel = computed(() =>\n\tssoStore.isSamlLoginEnabled\n\t\t? i18n.baseText('settings.sso.activated')\n\t\t: i18n.baseText('settings.sso.deactivated'),\n);\nconst ssoSettingsSaved = ref(false);\n\nconst redirectUrl = ref();\nconst entityId = ref();\n\nconst ipsOptions = ref([\n\t{\n\t\tlabel: i18n.baseText('settings.sso.settings.ips.options.url'),\n\t\tvalue: IdentityProviderSettingsType.URL,\n\t},\n\t{\n\t\tlabel: i18n.baseText('settings.sso.settings.ips.options.xml'),\n\t\tvalue: IdentityProviderSettingsType.XML,\n\t},\n]);\nconst ipsType = ref(IdentityProviderSettingsType.URL);\n\nconst metadataUrl = ref();\nconst metadata = ref();\n\nconst isSaveEnabled = computed(() => {\n\tif (ipsType.value === IdentityProviderSettingsType.URL) {\n\t\treturn !!metadataUrl.value && metadataUrl.value !== ssoStore.samlConfig?.metadataUrl;\n\t} else if (ipsType.value === IdentityProviderSettingsType.XML) {\n\t\treturn !!metadata.value && metadata.value !== ssoStore.samlConfig?.metadata;\n\t}\n\treturn false;\n});\n\nconst isTestEnabled = computed(() => {\n\tif (ipsType.value === IdentityProviderSettingsType.URL) {\n\t\treturn !!metadataUrl.value && ssoSettingsSaved.value;\n\t} else if (ipsType.value === IdentityProviderSettingsType.XML) {\n\t\treturn !!metadata.value && ssoSettingsSaved.value;\n\t}\n\treturn false;\n});\n\nconst getSamlConfig = async () => {\n\tconst config = await ssoStore.getSamlConfig();\n\n\tentityId.value = config?.entityID;\n\tredirectUrl.value = config?.returnUrl;\n\n\tif (config?.metadataUrl) {\n\t\tipsType.value = IdentityProviderSettingsType.URL;\n\t} else if (config?.metadata) {\n\t\tipsType.value = IdentityProviderSettingsType.XML;\n\t}\n\n\tmetadata.value = config?.metadata;\n\tmetadataUrl.value = config?.metadataUrl;\n\tssoSettingsSaved.value = !!config?.metadata;\n};\n\nconst onSave = async () => {\n\ttry {\n\t\tconst config =\n\t\t\tipsType.value === IdentityProviderSettingsType.URL\n\t\t\t\t? { metadataUrl: metadataUrl.value }\n\t\t\t\t: { metadata: metadata.value };\n\t\tawait ssoStore.saveSamlConfig(config);\n\n\t\tif (!ssoStore.isSamlLoginEnabled) {\n\t\t\tconst answer = await message.confirm(\n\t\t\t\ti18n.baseText('settings.sso.settings.save.activate.message'),\n\t\t\t\ti18n.baseText('settings.sso.settings.save.activate.title'),\n\t\t\t\t{\n\t\t\t\t\tconfirmButtonText: i18n.baseText('settings.sso.settings.save.activate.test'),\n\t\t\t\t\tcancelButtonText: i18n.baseText('settings.sso.settings.save.activate.cancel'),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (answer === 'confirm') {\n\t\t\t\tawait onTest();\n\t\t\t}\n\t\t}\n\n\t\ttelemetry.track('User updated single sign on settings', {\n\t\t\tinstance_id: rootStore.instanceId,\n\t\t\tidentity_provider: ipsType.value === 'url' ? 'metadata' : 'xml',\n\t\t\tis_active: ssoStore.isSamlLoginEnabled,\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('settings.sso.settings.save.error'));\n\t\treturn;\n\t} finally {\n\t\tawait getSamlConfig();\n\t}\n};\n\nconst onTest = async () => {\n\ttry {\n\t\tconst url = await ssoStore.testSamlConfig();\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.open(url, '_blank');\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, 'error');\n\t}\n};\n\nconst goToUpgrade = () => {\n\tvoid uiStore.goToUpgrade('sso', 'upgrade-sso');\n};\n\nonMounted(async () => {\n\tif (!ssoStore.isEnterpriseSamlEnabled) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait getSamlConfig();\n\t} catch (error) {\n\t\ttoast.showError(error, 'error');\n\t}\n});\n</script>\n\n<template>\n\t<div class=\"pb-3xl\">\n\t\t<n8n-heading size=\"2xlarge\">{{ i18n.baseText('settings.sso.title') }}</n8n-heading>\n\t\t<div :class=\"$style.top\">\n\t\t\t<n8n-heading size=\"xlarge\">{{ i18n.baseText('settings.sso.subtitle') }}</n8n-heading>\n\t\t\t<n8n-tooltip\n\t\t\t\tv-if=\"ssoStore.isEnterpriseSamlEnabled\"\n\t\t\t\t:disabled=\"ssoStore.isSamlLoginEnabled || ssoSettingsSaved\"\n\t\t\t>\n\t\t\t\t<template #content>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ i18n.baseText('settings.sso.activation.tooltip') }}\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t\t<el-switch\n\t\t\t\t\tv-model=\"ssoStore.isSamlLoginEnabled\"\n\t\t\t\t\t:disabled=\"!ssoSettingsSaved\"\n\t\t\t\t\t:class=\"$style.switch\"\n\t\t\t\t\t:inactive-text=\"ssoActivatedLabel\"\n\t\t\t\t/>\n\t\t\t</n8n-tooltip>\n\t\t</div>\n\t\t<n8n-info-tip>\n\t\t\t{{ i18n.baseText('settings.sso.info') }}\n\t\t\t<a href=\"https://docs.n8n.io/user-management/saml/\" target=\"_blank\">\n\t\t\t\t{{ i18n.baseText('settings.sso.info.link') }}\n\t\t\t</a>\n\t\t</n8n-info-tip>\n\t\t<div v-if=\"ssoStore.isEnterpriseSamlEnabled\" data-test-id=\"sso-content-licensed\">\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label>{{ i18n.baseText('settings.sso.settings.redirectUrl.label') }}</label>\n\t\t\t\t<CopyInput\n\t\t\t\t\t:value=\"redirectUrl\"\n\t\t\t\t\t:copy-button-text=\"i18n.baseText('generic.clickToCopy')\"\n\t\t\t\t\t:toast-title=\"i18n.baseText('settings.sso.settings.redirectUrl.copied')\"\n\t\t\t\t/>\n\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.redirectUrl.help') }}</small>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label>{{ i18n.baseText('settings.sso.settings.entityId.label') }}</label>\n\t\t\t\t<CopyInput\n\t\t\t\t\t:value=\"entityId\"\n\t\t\t\t\t:copy-button-text=\"i18n.baseText('generic.clickToCopy')\"\n\t\t\t\t\t:toast-title=\"i18n.baseText('settings.sso.settings.entityId.copied')\"\n\t\t\t\t/>\n\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.entityId.help') }}</small>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label>{{ i18n.baseText('settings.sso.settings.ips.label') }}</label>\n\t\t\t\t<div class=\"mt-2xs mb-s\">\n\t\t\t\t\t<n8n-radio-buttons v-model=\"ipsType\" :options=\"ipsOptions\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-show=\"ipsType === IdentityProviderSettingsType.URL\">\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tv-model=\"metadataUrl\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tname=\"metadataUrl\"\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t:placeholder=\"i18n.baseText('settings.sso.settings.ips.url.placeholder')\"\n\t\t\t\t\t/>\n\t\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.ips.url.help') }}</small>\n\t\t\t\t</div>\n\t\t\t\t<div v-show=\"ipsType === IdentityProviderSettingsType.XML\">\n\t\t\t\t\t<n8n-input v-model=\"metadata\" type=\"textarea\" name=\"metadata\" :rows=\"4\" />\n\t\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.ips.xml.help') }}</small>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t<n8n-button :disabled=\"!isSaveEnabled\" size=\"large\" data-test-id=\"sso-save\" @click=\"onSave\">\n\t\t\t\t\t{{ i18n.baseText('settings.sso.settings.save') }}\n\t\t\t\t</n8n-button>\n\t\t\t\t<n8n-button\n\t\t\t\t\t:disabled=\"!isTestEnabled\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tdata-test-id=\"sso-test\"\n\t\t\t\t\t@click=\"onTest\"\n\t\t\t\t>\n\t\t\t\t\t{{ i18n.baseText('settings.sso.settings.test') }}\n\t\t\t\t</n8n-button>\n\t\t\t</div>\n\t\t\t<footer :class=\"$style.footer\">\n\t\t\t\t{{ i18n.baseText('settings.sso.settings.footer.hint') }}\n\t\t\t</footer>\n\t\t</div>\n\t\t<n8n-action-box\n\t\t\tv-else\n\t\t\tdata-test-id=\"sso-content-unlicensed\"\n\t\t\t:class=\"$style.actionBox\"\n\t\t\t:description=\"i18n.baseText('settings.sso.actionBox.description')\"\n\t\t\t:button-text=\"i18n.baseText('settings.sso.actionBox.buttonText')\"\n\t\t\t@click:button=\"goToUpgrade\"\n\t\t>\n\t\t\t<template #heading>\n\t\t\t\t<span>{{ i18n.baseText('settings.sso.actionBox.title') }}</span>\n\t\t\t</template>\n\t\t</n8n-action-box>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.top {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: var(--spacing-2xl) 0 var(--spacing-xl);\n}\n\n.switch {\n\tspan {\n\t\tfont-size: var(--font-size-2xs);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\tpadding: var(--spacing-2xl) 0 var(--spacing-2xs);\n\n\tbutton {\n\t\tmargin: 0 var(--spacing-s) 0 0;\n\t}\n}\n\n.group {\n\tpadding: var(--spacing-xl) 0 0;\n\n\t> label {\n\t\tdisplay: inline-block;\n\t\tfont-size: var(--font-size-s);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tpadding: 0 0 var(--spacing-2xs);\n\t}\n\n\tsmall {\n\t\tdisplay: block;\n\t\tpadding: var(--spacing-2xs) 0 0;\n\t\tfont-size: var(--font-size-2xs);\n\t\tcolor: var(--color-text-base);\n\t}\n}\n\n.actionBox {\n\tmargin: var(--spacing-2xl) 0 0;\n}\n\n.footer {\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-2xs);\n}\n</style>\n"],"names":["IdentityProviderSettingsType","i18n","useI18n","telemetry","useTelemetry","rootStore","useRootStore","ssoStore","useSSOStore","uiStore","useUIStore","message","useMessage","toast","useToast","ssoActivatedLabel","computed","ssoSettingsSaved","ref","redirectUrl","entityId","ipsOptions","ipsType","metadataUrl","metadata","isSaveEnabled","_a","_b","isTestEnabled","getSamlConfig","config","onSave","onTest","error","url","goToUpgrade","onMounted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SettingsSso-f8qqkUbH.js","sources":["../../src/views/SettingsSso.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, onMounted } from 'vue';\nimport { useSSOStore } from '@/stores/sso.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport CopyInput from '@/components/CopyInput.vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nconst IdentityProviderSettingsType = {\n\tURL: 'url',\n\tXML: 'xml',\n};\n\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\nconst rootStore = useRootStore();\nconst ssoStore = useSSOStore();\nconst uiStore = useUIStore();\nconst message = useMessage();\nconst toast = useToast();\n\nconst ssoActivatedLabel = computed(() =>\n\tssoStore.isSamlLoginEnabled\n\t\t? i18n.baseText('settings.sso.activated')\n\t\t: i18n.baseText('settings.sso.deactivated'),\n);\nconst ssoSettingsSaved = ref(false);\n\nconst redirectUrl = ref();\nconst entityId = ref();\n\nconst ipsOptions = ref([\n\t{\n\t\tlabel: i18n.baseText('settings.sso.settings.ips.options.url'),\n\t\tvalue: IdentityProviderSettingsType.URL,\n\t},\n\t{\n\t\tlabel: i18n.baseText('settings.sso.settings.ips.options.xml'),\n\t\tvalue: IdentityProviderSettingsType.XML,\n\t},\n]);\nconst ipsType = ref(IdentityProviderSettingsType.URL);\n\nconst metadataUrl = ref();\nconst metadata = ref();\n\nconst isSaveEnabled = computed(() => {\n\tif (ipsType.value === IdentityProviderSettingsType.URL) {\n\t\treturn !!metadataUrl.value && metadataUrl.value !== ssoStore.samlConfig?.metadataUrl;\n\t} else if (ipsType.value === IdentityProviderSettingsType.XML) {\n\t\treturn !!metadata.value && metadata.value !== ssoStore.samlConfig?.metadata;\n\t}\n\treturn false;\n});\n\nconst isTestEnabled = computed(() => {\n\tif (ipsType.value === IdentityProviderSettingsType.URL) {\n\t\treturn !!metadataUrl.value && ssoSettingsSaved.value;\n\t} else if (ipsType.value === IdentityProviderSettingsType.XML) {\n\t\treturn !!metadata.value && ssoSettingsSaved.value;\n\t}\n\treturn false;\n});\n\nconst getSamlConfig = async () => {\n\tconst config = await ssoStore.getSamlConfig();\n\n\tentityId.value = config?.entityID;\n\tredirectUrl.value = config?.returnUrl;\n\n\tif (config?.metadataUrl) {\n\t\tipsType.value = IdentityProviderSettingsType.URL;\n\t} else if (config?.metadata) {\n\t\tipsType.value = IdentityProviderSettingsType.XML;\n\t}\n\n\tmetadata.value = config?.metadata;\n\tmetadataUrl.value = config?.metadataUrl;\n\tssoSettingsSaved.value = !!config?.metadata;\n};\n\nconst onSave = async () => {\n\ttry {\n\t\tconst config =\n\t\t\tipsType.value === IdentityProviderSettingsType.URL\n\t\t\t\t? { metadataUrl: metadataUrl.value }\n\t\t\t\t: { metadata: metadata.value };\n\t\tawait ssoStore.saveSamlConfig(config);\n\n\t\tif (!ssoStore.isSamlLoginEnabled) {\n\t\t\tconst answer = await message.confirm(\n\t\t\t\ti18n.baseText('settings.sso.settings.save.activate.message'),\n\t\t\t\ti18n.baseText('settings.sso.settings.save.activate.title'),\n\t\t\t\t{\n\t\t\t\t\tconfirmButtonText: i18n.baseText('settings.sso.settings.save.activate.test'),\n\t\t\t\t\tcancelButtonText: i18n.baseText('settings.sso.settings.save.activate.cancel'),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (answer === 'confirm') {\n\t\t\t\tawait onTest();\n\t\t\t}\n\t\t}\n\n\t\ttelemetry.track('User updated single sign on settings', {\n\t\t\tinstance_id: rootStore.instanceId,\n\t\t\tidentity_provider: ipsType.value === 'url' ? 'metadata' : 'xml',\n\t\t\tis_active: ssoStore.isSamlLoginEnabled,\n\t\t});\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('settings.sso.settings.save.error'));\n\t\treturn;\n\t} finally {\n\t\tawait getSamlConfig();\n\t}\n};\n\nconst onTest = async () => {\n\ttry {\n\t\tconst url = await ssoStore.testSamlConfig();\n\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.open(url, '_blank');\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, 'error');\n\t}\n};\n\nconst goToUpgrade = () => {\n\tvoid uiStore.goToUpgrade('sso', 'upgrade-sso');\n};\n\nonMounted(async () => {\n\tif (!ssoStore.isEnterpriseSamlEnabled) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait getSamlConfig();\n\t} catch (error) {\n\t\ttoast.showError(error, 'error');\n\t}\n});\n</script>\n\n<template>\n\t<div class=\"pb-3xl\">\n\t\t<n8n-heading size=\"2xlarge\">{{ i18n.baseText('settings.sso.title') }}</n8n-heading>\n\t\t<div :class=\"$style.top\">\n\t\t\t<n8n-heading size=\"xlarge\">{{ i18n.baseText('settings.sso.subtitle') }}</n8n-heading>\n\t\t\t<n8n-tooltip\n\t\t\t\tv-if=\"ssoStore.isEnterpriseSamlEnabled\"\n\t\t\t\t:disabled=\"ssoStore.isSamlLoginEnabled || ssoSettingsSaved\"\n\t\t\t>\n\t\t\t\t<template #content>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t{{ i18n.baseText('settings.sso.activation.tooltip') }}\n\t\t\t\t\t</span>\n\t\t\t\t</template>\n\t\t\t\t<el-switch\n\t\t\t\t\tv-model=\"ssoStore.isSamlLoginEnabled\"\n\t\t\t\t\t:disabled=\"!ssoSettingsSaved\"\n\t\t\t\t\t:class=\"$style.switch\"\n\t\t\t\t\t:inactive-text=\"ssoActivatedLabel\"\n\t\t\t\t/>\n\t\t\t</n8n-tooltip>\n\t\t</div>\n\t\t<n8n-info-tip>\n\t\t\t{{ i18n.baseText('settings.sso.info') }}\n\t\t\t<a href=\"https://docs.n8n.io/user-management/saml/\" target=\"_blank\">\n\t\t\t\t{{ i18n.baseText('settings.sso.info.link') }}\n\t\t\t</a>\n\t\t</n8n-info-tip>\n\t\t<div v-if=\"ssoStore.isEnterpriseSamlEnabled\" data-test-id=\"sso-content-licensed\">\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label>{{ i18n.baseText('settings.sso.settings.redirectUrl.label') }}</label>\n\t\t\t\t<CopyInput\n\t\t\t\t\t:value=\"redirectUrl\"\n\t\t\t\t\t:copy-button-text=\"i18n.baseText('generic.clickToCopy')\"\n\t\t\t\t\t:toast-title=\"i18n.baseText('settings.sso.settings.redirectUrl.copied')\"\n\t\t\t\t/>\n\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.redirectUrl.help') }}</small>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label>{{ i18n.baseText('settings.sso.settings.entityId.label') }}</label>\n\t\t\t\t<CopyInput\n\t\t\t\t\t:value=\"entityId\"\n\t\t\t\t\t:copy-button-text=\"i18n.baseText('generic.clickToCopy')\"\n\t\t\t\t\t:toast-title=\"i18n.baseText('settings.sso.settings.entityId.copied')\"\n\t\t\t\t/>\n\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.entityId.help') }}</small>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label>{{ i18n.baseText('settings.sso.settings.ips.label') }}</label>\n\t\t\t\t<div class=\"mt-2xs mb-s\">\n\t\t\t\t\t<n8n-radio-buttons v-model=\"ipsType\" :options=\"ipsOptions\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-show=\"ipsType === IdentityProviderSettingsType.URL\">\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tv-model=\"metadataUrl\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tname=\"metadataUrl\"\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t:placeholder=\"i18n.baseText('settings.sso.settings.ips.url.placeholder')\"\n\t\t\t\t\t/>\n\t\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.ips.url.help') }}</small>\n\t\t\t\t</div>\n\t\t\t\t<div v-show=\"ipsType === IdentityProviderSettingsType.XML\">\n\t\t\t\t\t<n8n-input v-model=\"metadata\" type=\"textarea\" name=\"metadata\" :rows=\"4\" />\n\t\t\t\t\t<small>{{ i18n.baseText('settings.sso.settings.ips.xml.help') }}</small>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t<n8n-button :disabled=\"!isSaveEnabled\" size=\"large\" data-test-id=\"sso-save\" @click=\"onSave\">\n\t\t\t\t\t{{ i18n.baseText('settings.sso.settings.save') }}\n\t\t\t\t</n8n-button>\n\t\t\t\t<n8n-button\n\t\t\t\t\t:disabled=\"!isTestEnabled\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tdata-test-id=\"sso-test\"\n\t\t\t\t\t@click=\"onTest\"\n\t\t\t\t>\n\t\t\t\t\t{{ i18n.baseText('settings.sso.settings.test') }}\n\t\t\t\t</n8n-button>\n\t\t\t</div>\n\t\t\t<footer :class=\"$style.footer\">\n\t\t\t\t{{ i18n.baseText('settings.sso.settings.footer.hint') }}\n\t\t\t</footer>\n\t\t</div>\n\t\t<n8n-action-box\n\t\t\tv-else\n\t\t\tdata-test-id=\"sso-content-unlicensed\"\n\t\t\t:class=\"$style.actionBox\"\n\t\t\t:description=\"i18n.baseText('settings.sso.actionBox.description')\"\n\t\t\t:button-text=\"i18n.baseText('settings.sso.actionBox.buttonText')\"\n\t\t\t@click:button=\"goToUpgrade\"\n\t\t>\n\t\t\t<template #heading>\n\t\t\t\t<span>{{ i18n.baseText('settings.sso.actionBox.title') }}</span>\n\t\t\t</template>\n\t\t</n8n-action-box>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.top {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: var(--spacing-2xl) 0 var(--spacing-xl);\n}\n\n.switch {\n\tspan {\n\t\tfont-size: var(--font-size-2xs);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\tpadding: var(--spacing-2xl) 0 var(--spacing-2xs);\n\n\tbutton {\n\t\tmargin: 0 var(--spacing-s) 0 0;\n\t}\n}\n\n.group {\n\tpadding: var(--spacing-xl) 0 0;\n\n\t> label {\n\t\tdisplay: inline-block;\n\t\tfont-size: var(--font-size-s);\n\t\tfont-weight: var(--font-weight-bold);\n\t\tpadding: 0 0 var(--spacing-2xs);\n\t}\n\n\tsmall {\n\t\tdisplay: block;\n\t\tpadding: var(--spacing-2xs) 0 0;\n\t\tfont-size: var(--font-size-2xs);\n\t\tcolor: var(--color-text-base);\n\t}\n}\n\n.actionBox {\n\tmargin: var(--spacing-2xl) 0 0;\n}\n\n.footer {\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-2xs);\n}\n</style>\n"],"names":["IdentityProviderSettingsType","i18n","useI18n","telemetry","useTelemetry","rootStore","useRootStore","ssoStore","useSSOStore","uiStore","useUIStore","message","useMessage","toast","useToast","ssoActivatedLabel","computed","ssoSettingsSaved","ref","redirectUrl","entityId","ipsOptions","ipsType","metadataUrl","metadata","isSaveEnabled","_a","_b","isTestEnabled","getSamlConfig","config","onSave","onTest","error","url","goToUpgrade","onMounted"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{v as H,aw as J,ar as Q,r as b,e as A,b as X,f as i,h as d,K as l,E as s,J as p,I as o,u as t,D as h,y as r,H as k,i as g,z as Y,V as Z,a6 as u}from"./vendor-3VD3vVJy.js";import{e as ee}from"./index-
|
|
2
|
-
//# sourceMappingURL=SettingsUsageAndPlan-
|
|
1
|
+
import{v as H,aw as J,ar as Q,r as b,e as A,b as X,f as i,h as d,K as l,E as s,J as p,I as o,u as t,D as h,y as r,H as k,i as g,z as Y,V as Z,a6 as u}from"./vendor-3VD3vVJy.js";import{e as ee}from"./index-9xnnd4cn.js";import{u as te,e as ae,h as ne,bn as se,b as n,fV as oe,fW as ie,_ as le}from"./n8n-uKoDE8Qf.js";import"./pinia-e-gLcRJ1.js";import"./@n8n/codemirror-lang-sql-feLn5IS9.js";import"./@lezer/common-1hBQ1gIF.js";import"./codemirror-lang-html-n8n-wWQLhhqk.js";import"./prettier-s3fE3Qyr.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./lodash-es-JdX4GWLn.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-lH03nmRE.js";import"./codemirror-lang-n8n-expression-HpIZnV_9.js";import"./fast-json-stable-stringify-LPGjnXm6.js";import"./esprima-next-ulPLCZ1Z.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-B6sLPrrf.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./vue-i18n-MkmfYvll.js";import"./@n8n/permissions-8yMqUF1Y.js";const ce={class:"settings-usage-and-plan"},re={key:1},ue={key:0},de={key:1},pe={key:0},ge={key:1},_e=["href"],me=["href"],ye=H({__name:"SettingsUsageAndPlan",setup(Ce){const a=ee(),P=J(),B=Q(),I=te(),x=ae(),w=b(`callback=${encodeURIComponent(`${window.location.origin}${window.location.pathname}`)}`),j=A(()=>`${a.viewPlansUrl}&${w.value}&source=usage_page`),q=A(()=>`${a.managePlanUrl}&${w.value}`),_=b(!1),y=b(""),T=b(null),$=A(()=>ne(["role"],{role:[se.Owner]})),L=()=>{x.showMessage({type:"success",title:n.baseText("settings.usageAndPlan.license.activation.success.title"),message:n.baseText("settings.usageAndPlan.license.activation.success.message",{interpolate:{name:a.planName,type:a.planId?n.baseText("settings.usageAndPlan.plan"):n.baseText("settings.usageAndPlan.edition")}})})},C=e=>{x.showError(e,n.baseText("settings.usageAndPlan.license.activation.error.title"),e.message)},z=async()=>{try{await a.activateLicense(y.value),_.value=!1,L()}catch(e){C(e)}};X(async()=>{if(!a.isDesktop){if(a.setLoading(!0),P.query.key)try{await a.activateLicense(P.query.key),await B.replace({query:{}}),L(),a.setLoading(!1);return}catch(e){C(e)}try{!P.query.key&&$.value?await a.refreshLicenseManagementToken():await a.getLicenseInfo(),a.setLoading(!1)}catch(e){e.name||(e.name=n.baseText("settings.usageAndPlan.error")),x.showError(e,e.name,e.message)}}});const v=e=>{const c=a.telemetryPayload;c.action=e,ie.track("User clicked button on usage page",c)},N=()=>{_.value=!0,v("add_activation_key")},S=()=>{I.goToUpgrade("usage_page","open"),v("view_plans")},M=()=>{v("manage_plan")},D=()=>{y.value=""},E=()=>{var e;(e=T.value)==null||e.focus()},K=()=>{v("desktop_view_plans"),window.open(oe,"_blank")};return(e,c)=>{const U=u("n8n-heading"),R=u("n8n-action-box"),V=u("i18n-t"),W=u("n8n-text"),O=u("n8n-info-tip"),m=u("n8n-button"),F=u("n8n-input"),G=u("el-dialog");return i(),d("div",ce,[l(U,{size:"2xlarge"},{default:s(()=>[p(o(t(n).baseText("settings.usageAndPlan.title")),1)]),_:1}),t(a).isDesktop?(i(),h(R,{key:0,class:r(e.$style.actionBox),heading:t(n).baseText("settings.usageAndPlan.desktop.title"),description:t(n).baseText("settings.usageAndPlan.desktop.description"),"button-text":t(n).baseText("settings.usageAndPlan.button.plans"),"onClick:button":K},null,8,["class","heading","description","button-text"])):k("",!0),!t(a).isDesktop&&!t(a).isLoading?(i(),d("div",re,[l(U,{class:r(e.$style.title),size:"large"},{default:s(()=>[l(V,{keypath:"settings.usageAndPlan.description",tag:"span"},{name:s(()=>[p(o(t(a).planName),1)]),type:s(()=>[t(a).planId?(i(),d("span",ue,o(t(n).baseText("settings.usageAndPlan.plan")),1)):(i(),d("span",de,o(t(n).baseText("settings.usageAndPlan.edition")),1))]),_:1})]),_:1},8,["class"]),g("div",{class:r(e.$style.quota)},[l(W,{size:"medium",color:"text-light"},{default:s(()=>[p(o(t(n).baseText("settings.usageAndPlan.activeWorkflows")),1)]),_:1}),g("div",{class:r(e.$style.chart)},[t(a).executionLimit>0?(i(),d("span",{key:0,class:r(e.$style.chartLine)},[g("span",{class:r(e.$style.chartBar),style:Y({width:`${t(a).executionPercentage}%`})},null,6)],2)):k("",!0),l(V,{tag:"span",class:r(e.$style.count),keypath:"settings.usageAndPlan.activeWorkflows.count"},{count:s(()=>[p(o(t(a).executionCount),1)]),limit:s(()=>[t(a).executionLimit<0?(i(),d("span",pe,o(t(n).baseText("settings.usageAndPlan.activeWorkflows.unlimited")),1)):(i(),d("span",ge,o(t(a).executionLimit),1))]),_:1},8,["class"])],2)],2),l(O,null,{default:s(()=>[p(o(t(n).baseText("settings.usageAndPlan.activeWorkflows.hint")),1)]),_:1}),g("div",{class:r(e.$style.buttons)},[$.value?(i(),h(m,{key:0,class:r(e.$style.buttonTertiary),type:"tertiary",size:"large",onClick:N},{default:s(()=>[g("span",null,o(t(n).baseText("settings.usageAndPlan.button.activation")),1)]),_:1},8,["class"])):k("",!0),t(a).managementToken?(i(),h(m,{key:1,size:"large",onClick:M},{default:s(()=>[g("a",{href:q.value,target:"_blank"},o(t(n).baseText("settings.usageAndPlan.button.manage")),9,_e)]),_:1})):(i(),h(m,{key:2,size:"large",onClick:Z(S,["prevent"])},{default:s(()=>[g("a",{href:j.value,target:"_blank"},o(t(n).baseText("settings.usageAndPlan.button.plans")),9,me)]),_:1}))],2),l(G,{modelValue:_.value,"onUpdate:modelValue":c[2]||(c[2]=f=>_.value=f),width:"480px",top:"0",title:t(n).baseText("settings.usageAndPlan.dialog.activation.title"),"modal-class":e.$style.center,onClosed:D,onOpened:E},{default:s(()=>[l(F,{ref_key:"activationKeyInput",ref:T,modelValue:y.value,"onUpdate:modelValue":c[0]||(c[0]=f=>y.value=f),placeholder:t(n).baseText("settings.usageAndPlan.dialog.activation.label")},null,8,["modelValue","placeholder"])]),footer:s(()=>[l(m,{type:"secondary",onClick:c[1]||(c[1]=f=>_.value=!1)},{default:s(()=>[p(o(t(n).baseText("settings.usageAndPlan.dialog.activation.cancel")),1)]),_:1}),l(m,{onClick:z},{default:s(()=>[p(o(t(n).baseText("settings.usageAndPlan.dialog.activation.activate")),1)]),_:1})]),_:1},8,["modelValue","title","modal-class"])])):k("",!0)])}}}),ve="_center_iajr8_5",fe="_actionBox_iajr8_9",be="_spacedFlex_iajr8_13",he="_title_iajr8_19",ke="_quota_iajr8_24",Pe="_count_iajr8_36",xe="_buttons_iajr8_41",Ae="_chart_iajr8_57",we="_chartLine_iajr8_64",Te="_chartBar_iajr8_74",$e={center:ve,actionBox:fe,spacedFlex:be,title:he,quota:ke,count:Pe,buttons:xe,chart:Ae,chartLine:we,chartBar:Te},Le={$style:$e},st=le(ye,[["__cssModules",Le],["__scopeId","data-v-fd69aaff"]]);export{st as default};
|
|
2
|
+
//# sourceMappingURL=SettingsUsageAndPlan-Smr5GpEg.js.map
|