n8n-editor-ui 1.19.1 → 1.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/.turbo/turbo-build.log +60 -60
  2. package/dist/assets/{AuthView-pnWQAK0S.js → AuthView-KzKyZSHz.js} +2 -2
  3. package/dist/assets/{AuthView-pnWQAK0S.js.map → AuthView-KzKyZSHz.js.map} +1 -1
  4. package/dist/assets/{CanvasControls-kb3__O2G.js → CanvasControls-6jR1_mnm.js} +2 -2
  5. package/dist/assets/{CanvasControls-kb3__O2G.js.map → CanvasControls-6jR1_mnm.js.map} +1 -1
  6. package/dist/assets/{ChangePasswordView-w8ZDdsHs.js → ChangePasswordView-TW8EQPS0.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-w8ZDdsHs.js.map → ChangePasswordView-TW8EQPS0.js.map} +1 -1
  8. package/dist/assets/{CredentialsView-9EPVLguD.js → CredentialsView-AVQZL_tm.js} +2 -2
  9. package/dist/assets/{CredentialsView-9EPVLguD.js.map → CredentialsView-AVQZL_tm.js.map} +1 -1
  10. package/dist/assets/{ExecutionFilter-xWjqUjz0.js → ExecutionFilter-tcX3bN8y.js} +2 -2
  11. package/dist/assets/{ExecutionFilter-xWjqUjz0.js.map → ExecutionFilter-tcX3bN8y.js.map} +1 -1
  12. package/dist/assets/{ExecutionPreview-IQ7v5u01.js → ExecutionPreview-OuL-2qRR.js} +2 -2
  13. package/dist/assets/{ExecutionPreview-IQ7v5u01.js.map → ExecutionPreview-OuL-2qRR.js.map} +1 -1
  14. package/dist/assets/{ExecutionsInfoAccordion-GNoSEKPt.js → ExecutionsInfoAccordion-J0VUGzOg.js} +2 -2
  15. package/dist/assets/{ExecutionsInfoAccordion-GNoSEKPt.js.map → ExecutionsInfoAccordion-J0VUGzOg.js.map} +1 -1
  16. package/dist/assets/{ExecutionsLandingPage-bMbJUz4X.js → ExecutionsLandingPage-LNx1ct-F.js} +2 -2
  17. package/dist/assets/{ExecutionsLandingPage-bMbJUz4X.js.map → ExecutionsLandingPage-LNx1ct-F.js.map} +1 -1
  18. package/dist/assets/{ExecutionsList-VqMNpnno.js → ExecutionsList-1jr8ziaw.js} +2 -2
  19. package/dist/assets/ExecutionsList-1jr8ziaw.js.map +1 -0
  20. package/dist/assets/{ExecutionsView-cib3hepc.js → ExecutionsView-vfalxf-N.js} +2 -2
  21. package/dist/assets/{ExecutionsView-cib3hepc.js.map → ExecutionsView-vfalxf-N.js.map} +1 -1
  22. package/dist/assets/{FixedCollectionParameter-2NZhE0YP.js → FixedCollectionParameter-i4v0_RBC.js} +3 -3
  23. package/dist/assets/{FixedCollectionParameter-2NZhE0YP.js.map → FixedCollectionParameter-i4v0_RBC.js.map} +1 -1
  24. package/dist/assets/{ForgotMyPasswordView-JpQD0IzR.js → ForgotMyPasswordView-n-WXfUXB.js} +2 -2
  25. package/dist/assets/{ForgotMyPasswordView-JpQD0IzR.js.map → ForgotMyPasswordView-n-WXfUXB.js.map} +1 -1
  26. package/dist/assets/{MainHeader-_EB1A67D.js → MainHeader-it41_mme.js} +2 -2
  27. package/dist/assets/{MainHeader-_EB1A67D.js.map → MainHeader-it41_mme.js.map} +1 -1
  28. package/dist/assets/{MainSidebar-QaJ5uvnW.js → MainSidebar-K22ttpb5.js} +2 -2
  29. package/dist/assets/{MainSidebar-QaJ5uvnW.js.map → MainSidebar-K22ttpb5.js.map} +1 -1
  30. package/dist/assets/{NodeCreation-OxTpBRfP.js → NodeCreation-3pcb_BwC.js} +3 -3
  31. package/dist/assets/{NodeCreation-OxTpBRfP.js.map → NodeCreation-3pcb_BwC.js.map} +1 -1
  32. package/dist/assets/{NodeCreator-_GxUysbY.js → NodeCreator-r6gxY14d.js} +2 -2
  33. package/dist/assets/{NodeCreator-_GxUysbY.js.map → NodeCreator-r6gxY14d.js.map} +1 -1
  34. package/dist/assets/{NodeView-CdR2fi_x.js → NodeView-LzPrYfwG.js} +3 -3
  35. package/dist/assets/{NodeView-CdR2fi_x.js.map → NodeView-LzPrYfwG.js.map} +1 -1
  36. package/dist/assets/{ResourcesListLayout-XUIQQpyB.js → ResourcesListLayout-XbNZXU-j.js} +2 -2
  37. package/dist/assets/{ResourcesListLayout-XUIQQpyB.js.map → ResourcesListLayout-XbNZXU-j.js.map} +1 -1
  38. package/dist/assets/{RunDataAi-4m1wWDUf.js → RunDataAi-ueFTZBht.js} +2 -2
  39. package/dist/assets/{RunDataAi-4m1wWDUf.js.map → RunDataAi-ueFTZBht.js.map} +1 -1
  40. package/dist/assets/{RunDataJson-FZZoF8ao.js → RunDataJson-VFzb6R4m.js} +3 -3
  41. package/dist/assets/{RunDataJson-FZZoF8ao.js.map → RunDataJson-VFzb6R4m.js.map} +1 -1
  42. package/dist/assets/{RunDataJsonActions-LZGsgNyW.js → RunDataJsonActions-LDR8SlAW.js} +2 -2
  43. package/dist/assets/{RunDataJsonActions-LZGsgNyW.js.map → RunDataJsonActions-LDR8SlAW.js.map} +1 -1
  44. package/dist/assets/{RunDataSchema-wjyR7MiY.js → RunDataSchema-BB0j0bVA.js} +2 -2
  45. package/dist/assets/{RunDataSchema-wjyR7MiY.js.map → RunDataSchema-BB0j0bVA.js.map} +1 -1
  46. package/dist/assets/{RunDataTable-690SZ7_1.js → RunDataTable-Qas85Wnj.js} +2 -2
  47. package/dist/assets/{RunDataTable-690SZ7_1.js.map → RunDataTable-Qas85Wnj.js.map} +1 -1
  48. package/dist/assets/{SamlOnboarding-9tSVzIi2.js → SamlOnboarding-4D4QjACf.js} +2 -2
  49. package/dist/assets/{SamlOnboarding-9tSVzIi2.js.map → SamlOnboarding-4D4QjACf.js.map} +1 -1
  50. package/dist/assets/{SettingsApiView-95Wb-oA5.js → SettingsApiView-0Ne2kemN.js} +2 -2
  51. package/dist/assets/{SettingsApiView-95Wb-oA5.js.map → SettingsApiView-0Ne2kemN.js.map} +1 -1
  52. package/dist/assets/{SettingsCommunityNodesView-WW65T1Gl.js → SettingsCommunityNodesView-zzzz0aj6.js} +2 -2
  53. package/dist/assets/{SettingsCommunityNodesView-WW65T1Gl.js.map → SettingsCommunityNodesView-zzzz0aj6.js.map} +1 -1
  54. package/dist/assets/{SettingsExternalSecrets-6YJbQ8LH.js → SettingsExternalSecrets-bsdr9nMJ.js} +2 -2
  55. package/dist/assets/{SettingsExternalSecrets-6YJbQ8LH.js.map → SettingsExternalSecrets-bsdr9nMJ.js.map} +1 -1
  56. package/dist/assets/{SettingsFakeDoorView-6ZiGYnHw.js → SettingsFakeDoorView-0ioWE56l.js} +2 -2
  57. package/dist/assets/{SettingsFakeDoorView-6ZiGYnHw.js.map → SettingsFakeDoorView-0ioWE56l.js.map} +1 -1
  58. package/dist/assets/{SettingsLdapView-G9lNDLq4.js → SettingsLdapView-nV_D5CDp.js} +2 -2
  59. package/dist/assets/{SettingsLdapView-G9lNDLq4.js.map → SettingsLdapView-nV_D5CDp.js.map} +1 -1
  60. package/dist/assets/{SettingsLogStreamingView-hOxp5upg.js → SettingsLogStreamingView-GPC6oqoB.js} +2 -2
  61. package/dist/assets/{SettingsLogStreamingView-hOxp5upg.js.map → SettingsLogStreamingView-GPC6oqoB.js.map} +1 -1
  62. package/dist/assets/{SettingsSourceControl-A4p6uSTm.js → SettingsSourceControl-YlWPbedb.js} +2 -2
  63. package/dist/assets/{SettingsSourceControl-A4p6uSTm.js.map → SettingsSourceControl-YlWPbedb.js.map} +1 -1
  64. package/dist/assets/{SettingsSso-kXl38iOM.js → SettingsSso-o3FTQjpW.js} +2 -2
  65. package/dist/assets/{SettingsSso-kXl38iOM.js.map → SettingsSso-o3FTQjpW.js.map} +1 -1
  66. package/dist/assets/{SettingsUsageAndPlan-E00t5N2Z.js → SettingsUsageAndPlan-lypv7X6a.js} +2 -2
  67. package/dist/assets/{SettingsUsageAndPlan-E00t5N2Z.js.map → SettingsUsageAndPlan-lypv7X6a.js.map} +1 -1
  68. package/dist/assets/{SettingsUsersView-4PoSbZc_.js → SettingsUsersView-BP40GKuA.js} +2 -2
  69. package/dist/assets/{SettingsUsersView-4PoSbZc_.js.map → SettingsUsersView-BP40GKuA.js.map} +1 -1
  70. package/dist/assets/{SettingsView-ITSZzUOy.js → SettingsView-UI5wnO8B.js} +2 -2
  71. package/dist/assets/{SettingsView-ITSZzUOy.js.map → SettingsView-UI5wnO8B.js.map} +1 -1
  72. package/dist/assets/{SetupView-iFHyYLKM.js → SetupView-jUHcBldc.js} +2 -2
  73. package/dist/assets/{SetupView-iFHyYLKM.js.map → SetupView-jUHcBldc.js.map} +1 -1
  74. package/dist/assets/{SetupWorkflowFromTemplateView-1mq-ZIl2.js → SetupWorkflowFromTemplateView-xZok8Ro-.js} +2 -2
  75. package/dist/assets/{SetupWorkflowFromTemplateView-1mq-ZIl2.js.map → SetupWorkflowFromTemplateView-xZok8Ro-.js.map} +1 -1
  76. package/dist/assets/{SigninView-eqdMLCtk.js → SigninView-jH2VFMFu.js} +2 -2
  77. package/dist/assets/{SigninView-eqdMLCtk.js.map → SigninView-jH2VFMFu.js.map} +1 -1
  78. package/dist/assets/{SignupView-a26ywVgy.js → SignupView-cQJowW7M.js} +2 -2
  79. package/dist/assets/{SignupView-a26ywVgy.js.map → SignupView-cQJowW7M.js.map} +1 -1
  80. package/dist/assets/{TemplateDetails-neZvQLcE.js → TemplateDetails-FXwRGgg3.js} +2 -2
  81. package/dist/assets/{TemplateDetails-neZvQLcE.js.map → TemplateDetails-FXwRGgg3.js.map} +1 -1
  82. package/dist/assets/{TemplateList-apw79EVp.js → TemplateList-ygiFPwW5.js} +2 -2
  83. package/dist/assets/{TemplateList-apw79EVp.js.map → TemplateList-ygiFPwW5.js.map} +1 -1
  84. package/dist/assets/{TemplatesCollectionView-2NGTxXTg.js → TemplatesCollectionView-iJK5C7dQ.js} +2 -2
  85. package/dist/assets/{TemplatesCollectionView-2NGTxXTg.js.map → TemplatesCollectionView-iJK5C7dQ.js.map} +1 -1
  86. package/dist/assets/{TemplatesSearchView-0FL2pP83.js → TemplatesSearchView-HA2xad9U.js} +2 -2
  87. package/dist/assets/{TemplatesSearchView-0FL2pP83.js.map → TemplatesSearchView-HA2xad9U.js.map} +1 -1
  88. package/dist/assets/{TemplatesWorkflowView-D4Lnmnhg.js → TemplatesWorkflowView-KdHMuTUs.js} +2 -2
  89. package/dist/assets/{TemplatesWorkflowView-D4Lnmnhg.js.map → TemplatesWorkflowView-KdHMuTUs.js.map} +1 -1
  90. package/dist/assets/{VariablesView-tzHYYMLV.js → VariablesView-BGFOVdr1.js} +2 -2
  91. package/dist/assets/{VariablesView-tzHYYMLV.js.map → VariablesView-BGFOVdr1.js.map} +1 -1
  92. package/dist/assets/{WorkerView-AmUPKGBk.js → WorkerView-FnskutaO.js} +2 -2
  93. package/dist/assets/{WorkerView-AmUPKGBk.js.map → WorkerView-FnskutaO.js.map} +1 -1
  94. package/dist/assets/{WorkflowActivator-haTVfR4g.js → WorkflowActivator-B2Cg8gE_.js} +2 -2
  95. package/dist/assets/{WorkflowActivator-haTVfR4g.js.map → WorkflowActivator-B2Cg8gE_.js.map} +1 -1
  96. package/dist/assets/{WorkflowOnboardingView-azyuxv8R.js → WorkflowOnboardingView-ZBFcAyXB.js} +2 -2
  97. package/dist/assets/{WorkflowOnboardingView-azyuxv8R.js.map → WorkflowOnboardingView-ZBFcAyXB.js.map} +1 -1
  98. package/dist/assets/{WorkflowsView-oE-PnjgI.js → WorkflowsView-ZCzM_7eW.js} +2 -2
  99. package/dist/assets/{WorkflowsView-oE-PnjgI.js.map → WorkflowsView-ZCzM_7eW.js.map} +1 -1
  100. package/dist/assets/{cloud-TMu3mk45.js → cloud-B6sgy7jV.js} +2 -2
  101. package/dist/assets/{cloud-TMu3mk45.js.map → cloud-B6sgy7jV.js.map} +1 -1
  102. package/dist/assets/{executionsHelpers-jpam7Sff.js → executionsHelpers-8_uqSfWi.js} +2 -2
  103. package/dist/assets/{executionsHelpers-jpam7Sff.js.map → executionsHelpers-8_uqSfWi.js.map} +1 -1
  104. package/dist/assets/{index-hMVAffQ3.js → index-sMRiWGJS.js} +4 -4
  105. package/dist/assets/{index-hMVAffQ3.js.map → index-sMRiWGJS.js.map} +1 -1
  106. package/dist/assets/{pushConnection-NKwmlD0l.js → pushConnection-SP3wVlD4.js} +2 -2
  107. package/dist/assets/{pushConnection-NKwmlD0l.js.map → pushConnection-SP3wVlD4.js.map} +1 -1
  108. package/dist/assets/{useExecutionDebugging-WpRAbEhr.js → useExecutionDebugging-vYjc-e7j.js} +2 -2
  109. package/dist/assets/{useExecutionDebugging-WpRAbEhr.js.map → useExecutionDebugging-vYjc-e7j.js.map} +1 -1
  110. package/dist/assets/{workflowActivate-UB1_xc5U.js → workflowActivate-FonyQsS3.js} +2 -2
  111. package/dist/assets/{workflowActivate-UB1_xc5U.js.map → workflowActivate-FonyQsS3.js.map} +1 -1
  112. package/dist/index.html +1 -1
  113. package/package.json +1 -1
  114. package/dist/assets/ExecutionsList-VqMNpnno.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{G as F,e as f,r as v,b as H,ag as d,l as T,m as V,T as u,O as p,p as a,u as s,M as k,Q as J,I as c,R as o,V as B,U as z,S as x}from"./vendor-2CfOYFi2.js";import{aN as K,U as M,a as W}from"./index-hMVAffQ3.js";import{l as Y,u as Z,as as tt,_ as et}from"./n8n-NE7NqrvB.js";import"./pinia-IhuTtYiV.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./lodash-es-s_m9YyW7.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-QL7QI0sV.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";const st={class:"pb-3xl"},at={href:"https://docs.n8n.io/user-management/saml/",target:"_blank"},ot={key:0,"data-test-id":"sso-content-licensed"},nt={class:"mt-2xs mb-s"},lt=F({__name:"SettingsSso",setup(bt){const l={URL:"url",XML:"xml"},e=tt(),n=K(),I=Y(),R=W(),y=Z(),$=f(()=>n.isSamlLoginEnabled?e.baseText("settings.sso.activated"):e.baseText("settings.sso.deactivated")),_=v(!1),S=v(),U=v(),X=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}]),r=v(l.URL),m=v(),b=v(),N=f(()=>{var t,i;return r.value===l.URL?!!m.value&&m.value!==((t=n.samlConfig)==null?void 0:t.metadataUrl):r.value===l.XML?!!b.value&&b.value!==((i=n.samlConfig)==null?void 0:i.metadata):!1}),D=f(()=>r.value===l.URL?!!m.value&&_.value:r.value===l.XML?!!b.value&&_.value:!1),w=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?r.value=l.URL:t!=null&&t.metadata&&(r.value=l.XML),b.value=t==null?void 0:t.metadata,m.value=t==null?void 0:t.metadataUrl,_.value=!!(t!=null&&t.metadata)},O=async()=>{try{const t=r.value===l.URL?{metadataUrl:m.value}:{metadata:b.value};await n.saveSamlConfig(t),n.isSamlLoginEnabled||await R.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 h()}catch(t){y.showError(t,e.baseText("settings.sso.settings.save.error"));return}finally{await w()}},h=async()=>{try{const t=await n.testSamlConfig();typeof window<"u"&&window.open(t,"_blank")}catch(t){y.showError(t,"error")}},A=()=>{I.goToUpgrade("sso","upgrade-sso")};return H(async()=>{if(n.isEnterpriseSamlEnabled)try{await w()}catch(t){y.showError(t,"error")}}),(t,i)=>{const L=d("n8n-heading"),G=d("el-switch"),P=d("n8n-tooltip"),Q=d("n8n-info-tip"),j=d("n8n-radio-buttons"),C=d("n8n-input"),E=d("n8n-button"),q=d("n8n-action-box");return T(),V("div",st,[u(L,{size:"2xlarge"},{default:p(()=>[x(o(s(e).baseText("settings.sso.title")),1)]),_:1}),a("div",{class:c(t.$style.top)},[u(L,{size:"xlarge"},{default:p(()=>[x(o(s(e).baseText("settings.sso.subtitle")),1)]),_:1}),s(n).isEnterpriseSamlEnabled?(T(),k(P,{key:0,disabled:s(n).isSamlLoginEnabled||_.value},{content:p(()=>[a("span",null,o(s(e).baseText("settings.sso.activation.tooltip")),1)]),default:p(()=>[u(G,{modelValue:s(n).isSamlLoginEnabled,"onUpdate:modelValue":i[0]||(i[0]=g=>s(n).isSamlLoginEnabled=g),disabled:!_.value,class:c(t.$style.switch),"inactive-text":$.value},null,8,["modelValue","disabled","class","inactive-text"])]),_:1},8,["disabled"])):J("",!0)],2),u(Q,null,{default:p(()=>[x(o(s(e).baseText("settings.sso.info"))+" ",1),a("a",at,o(s(e).baseText("settings.sso.info.link")),1)]),_:1}),s(n).isEnterpriseSamlEnabled?(T(),V("div",ot,[a("div",{class:c(t.$style.group)},[a("label",null,o(s(e).baseText("settings.sso.settings.redirectUrl.label")),1),u(M,{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(M,{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",nt,[u(j,{options:X.value,modelValue:r.value,"onUpdate:modelValue":i[1]||(i[1]=g=>r.value=g)},null,8,["options","modelValue"])]),B(a("div",null,[u(C,{modelValue:m.value,"onUpdate:modelValue":i[2]||(i[2]=g=>m.value=g),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,r.value===l.URL]]),B(a("div",null,[u(C,{modelValue:b.value,"onUpdate:modelValue":i[3]||(i[3]=g=>b.value=g),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,r.value===l.XML]])],2),a("div",{class:c(t.$style.buttons)},[u(E,{disabled:!N.value,onClick:O,size:"large","data-test-id":"sso-save"},{default:p(()=>[x(o(s(e).baseText("settings.sso.settings.save")),1)]),_:1},8,["disabled"]),u(E,{disabled:!D.value,size:"large",type:"tertiary",onClick:h,"data-test-id":"sso-test"},{default:p(()=>[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)])):(T(),k(q,{key:1,"data-test-id":"sso-content-unlicensed",class:c(t.$style.actionBox),description:s(e).baseText("settings.sso.actionBox.description"),buttonText:s(e).baseText("settings.sso.actionBox.buttonText"),"onClick:button":A},{heading:p(()=>[a("span",null,o(s(e).baseText("settings.sso.actionBox.title")),1)]),_:1},8,["class","description","buttonText"]))])}}}),it="_top_1891z_5",rt="_buttons_1891z_18",ut="_group_1891z_27",dt="_actionBox_1891z_43",pt="_footer_1891z_47",ct={top:it,switch:"_switch_1891z_12",buttons:rt,group:ut,actionBox:dt,footer:pt},mt={$style:ct},qt=et(lt,[["__cssModules",mt]]);export{qt as default};
2
- //# sourceMappingURL=SettingsSso-kXl38iOM.js.map
1
+ import{G as F,e as f,r as v,b as H,ag as d,l as T,m as V,T as u,O as p,p as a,u as s,M as k,Q as J,I as c,R as o,V as B,U as z,S as x}from"./vendor-2CfOYFi2.js";import{aN as K,U as M,a as W}from"./index-sMRiWGJS.js";import{l as Y,u as Z,as as tt,_ as et}from"./n8n-NE7NqrvB.js";import"./pinia-IhuTtYiV.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./lodash-es-s_m9YyW7.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-QL7QI0sV.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";const st={class:"pb-3xl"},at={href:"https://docs.n8n.io/user-management/saml/",target:"_blank"},ot={key:0,"data-test-id":"sso-content-licensed"},nt={class:"mt-2xs mb-s"},lt=F({__name:"SettingsSso",setup(bt){const l={URL:"url",XML:"xml"},e=tt(),n=K(),I=Y(),R=W(),y=Z(),$=f(()=>n.isSamlLoginEnabled?e.baseText("settings.sso.activated"):e.baseText("settings.sso.deactivated")),_=v(!1),S=v(),U=v(),X=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}]),r=v(l.URL),m=v(),b=v(),N=f(()=>{var t,i;return r.value===l.URL?!!m.value&&m.value!==((t=n.samlConfig)==null?void 0:t.metadataUrl):r.value===l.XML?!!b.value&&b.value!==((i=n.samlConfig)==null?void 0:i.metadata):!1}),D=f(()=>r.value===l.URL?!!m.value&&_.value:r.value===l.XML?!!b.value&&_.value:!1),w=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?r.value=l.URL:t!=null&&t.metadata&&(r.value=l.XML),b.value=t==null?void 0:t.metadata,m.value=t==null?void 0:t.metadataUrl,_.value=!!(t!=null&&t.metadata)},O=async()=>{try{const t=r.value===l.URL?{metadataUrl:m.value}:{metadata:b.value};await n.saveSamlConfig(t),n.isSamlLoginEnabled||await R.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 h()}catch(t){y.showError(t,e.baseText("settings.sso.settings.save.error"));return}finally{await w()}},h=async()=>{try{const t=await n.testSamlConfig();typeof window<"u"&&window.open(t,"_blank")}catch(t){y.showError(t,"error")}},A=()=>{I.goToUpgrade("sso","upgrade-sso")};return H(async()=>{if(n.isEnterpriseSamlEnabled)try{await w()}catch(t){y.showError(t,"error")}}),(t,i)=>{const L=d("n8n-heading"),G=d("el-switch"),P=d("n8n-tooltip"),Q=d("n8n-info-tip"),j=d("n8n-radio-buttons"),C=d("n8n-input"),E=d("n8n-button"),q=d("n8n-action-box");return T(),V("div",st,[u(L,{size:"2xlarge"},{default:p(()=>[x(o(s(e).baseText("settings.sso.title")),1)]),_:1}),a("div",{class:c(t.$style.top)},[u(L,{size:"xlarge"},{default:p(()=>[x(o(s(e).baseText("settings.sso.subtitle")),1)]),_:1}),s(n).isEnterpriseSamlEnabled?(T(),k(P,{key:0,disabled:s(n).isSamlLoginEnabled||_.value},{content:p(()=>[a("span",null,o(s(e).baseText("settings.sso.activation.tooltip")),1)]),default:p(()=>[u(G,{modelValue:s(n).isSamlLoginEnabled,"onUpdate:modelValue":i[0]||(i[0]=g=>s(n).isSamlLoginEnabled=g),disabled:!_.value,class:c(t.$style.switch),"inactive-text":$.value},null,8,["modelValue","disabled","class","inactive-text"])]),_:1},8,["disabled"])):J("",!0)],2),u(Q,null,{default:p(()=>[x(o(s(e).baseText("settings.sso.info"))+" ",1),a("a",at,o(s(e).baseText("settings.sso.info.link")),1)]),_:1}),s(n).isEnterpriseSamlEnabled?(T(),V("div",ot,[a("div",{class:c(t.$style.group)},[a("label",null,o(s(e).baseText("settings.sso.settings.redirectUrl.label")),1),u(M,{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(M,{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",nt,[u(j,{options:X.value,modelValue:r.value,"onUpdate:modelValue":i[1]||(i[1]=g=>r.value=g)},null,8,["options","modelValue"])]),B(a("div",null,[u(C,{modelValue:m.value,"onUpdate:modelValue":i[2]||(i[2]=g=>m.value=g),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,r.value===l.URL]]),B(a("div",null,[u(C,{modelValue:b.value,"onUpdate:modelValue":i[3]||(i[3]=g=>b.value=g),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,r.value===l.XML]])],2),a("div",{class:c(t.$style.buttons)},[u(E,{disabled:!N.value,onClick:O,size:"large","data-test-id":"sso-save"},{default:p(()=>[x(o(s(e).baseText("settings.sso.settings.save")),1)]),_:1},8,["disabled"]),u(E,{disabled:!D.value,size:"large",type:"tertiary",onClick:h,"data-test-id":"sso-test"},{default:p(()=>[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)])):(T(),k(q,{key:1,"data-test-id":"sso-content-unlicensed",class:c(t.$style.actionBox),description:s(e).baseText("settings.sso.actionBox.description"),buttonText:s(e).baseText("settings.sso.actionBox.buttonText"),"onClick:button":A},{heading:p(()=>[a("span",null,o(s(e).baseText("settings.sso.actionBox.title")),1)]),_:1},8,["class","description","buttonText"]))])}}}),it="_top_1891z_5",rt="_buttons_1891z_18",ut="_group_1891z_27",dt="_actionBox_1891z_43",pt="_footer_1891z_47",ct={top:it,switch:"_switch_1891z_12",buttons:rt,group:ut,actionBox:dt,footer:pt},mt={$style:ct},qt=et(lt,[["__cssModules",mt]]);export{qt as default};
2
+ //# sourceMappingURL=SettingsSso-o3FTQjpW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsSso-kXl38iOM.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';\n\nconst IdentityProviderSettingsType = {\n\tURL: 'url',\n\tXML: 'xml',\n};\n\nconst i18n = useI18n();\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\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 :options=\"ipsOptions\" v-model=\"ipsType\" />\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\" @click=\"onSave\" size=\"large\" data-test-id=\"sso-save\">\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\t@click=\"onTest\"\n\t\t\t\t\tdata-test-id=\"sso-test\"\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:buttonText=\"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","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":"ujDASA,MAAMA,EAA+B,CACpC,IAAK,MACL,IAAK,KAAA,EAGAC,EAAOC,KACPC,EAAWC,IACXC,EAAUC,IACVC,EAAUC,IACVC,EAAQC,IAERC,EAAoBC,EAAS,IAClCT,EAAS,mBACNF,EAAK,SAAS,wBAAwB,EACtCA,EAAK,SAAS,0BAA0B,CAAA,EAEtCY,EAAmBC,EAAI,EAAK,EAE5BC,EAAcD,IACdE,EAAWF,IAEXG,EAAaH,EAAI,CACtB,CACC,MAAOb,EAAK,SAAS,uCAAuC,EAC5D,MAAOD,EAA6B,GACrC,EACA,CACC,MAAOC,EAAK,SAAS,uCAAuC,EAC5D,MAAOD,EAA6B,GACrC,CAAA,CACA,EACKkB,EAAUJ,EAAId,EAA6B,GAAG,EAE9CmB,EAAcL,IACdM,EAAWN,IAEXO,EAAgBT,EAAS,IAAM,SAChC,OAAAM,EAAQ,QAAUlB,EAA6B,IAC3C,CAAC,CAACmB,EAAY,OAASA,EAAY,UAAUG,EAAAnB,EAAS,aAAT,YAAAmB,EAAqB,aAC/DJ,EAAQ,QAAUlB,EAA6B,IAClD,CAAC,CAACoB,EAAS,OAASA,EAAS,UAAUG,EAAApB,EAAS,aAAT,YAAAoB,EAAqB,UAE7D,EAAA,CACP,EAEKC,EAAgBZ,EAAS,IAC1BM,EAAQ,QAAUlB,EAA6B,IAC3C,CAAC,CAACmB,EAAY,OAASN,EAAiB,MACrCK,EAAQ,QAAUlB,EAA6B,IAClD,CAAC,CAACoB,EAAS,OAASP,EAAiB,MAEtC,EACP,EAEKY,EAAgB,SAAY,CAC3B,MAAAC,EAAS,MAAMvB,EAAS,gBAE9Ba,EAAS,MAAQU,GAAA,YAAAA,EAAQ,SACzBX,EAAY,MAAQW,GAAA,YAAAA,EAAQ,UAExBA,GAAA,MAAAA,EAAQ,YACXR,EAAQ,MAAQlB,EAA6B,IACnC0B,GAAA,MAAAA,EAAQ,WAClBR,EAAQ,MAAQlB,EAA6B,KAG9CoB,EAAS,MAAQM,GAAA,YAAAA,EAAQ,SACzBP,EAAY,MAAQO,GAAA,YAAAA,EAAQ,YACXb,EAAA,MAAQ,CAAC,EAACa,GAAA,MAAAA,EAAQ,SAAA,EAG9BC,EAAS,SAAY,CACtB,GAAA,CACH,MAAMD,EACLR,EAAQ,QAAUlB,EAA6B,IAC5C,CAAE,YAAamB,EAAY,KAAM,EACjC,CAAE,SAAUC,EAAS,KAAM,EACzB,MAAAjB,EAAS,eAAeuB,CAAM,EAE/BvB,EAAS,oBACE,MAAMI,EAAQ,QAC5BN,EAAK,SAAS,6CAA6C,EAC3DA,EAAK,SAAS,2CAA2C,EACzD,CACC,kBAAmBA,EAAK,SAAS,0CAA0C,EAC3E,iBAAkBA,EAAK,SAAS,4CAA4C,CAC7E,CAAA,IAGc,WACd,MAAM2B,EAAO,QAGPC,EAAO,CACfpB,EAAM,UAAUoB,EAAO5B,EAAK,SAAS,kCAAkC,CAAC,EACxE,MAAA,QACC,CACD,MAAMwB,EAAc,CACrB,CAAA,EAGKG,EAAS,SAAY,CACtB,GAAA,CACG,MAAAE,EAAM,MAAM3B,EAAS,iBAEvB,OAAO,OAAW,KACd,OAAA,KAAK2B,EAAK,QAAQ,QAElBD,EAAO,CACTpB,EAAA,UAAUoB,EAAO,OAAO,CAC/B,CAAA,EAGKE,EAAc,IAAM,CACpB1B,EAAQ,YAAY,MAAO,aAAa,CAAA,EAG9C,OAAA2B,EAAU,SAAY,CACjB,GAAC7B,EAAS,wBAGV,GAAA,CACH,MAAMsB,EAAc,QACZI,EAAO,CACTpB,EAAA,UAAUoB,EAAO,OAAO,CAC/B,CAAA,CACA"}
1
+ {"version":3,"file":"SettingsSso-o3FTQjpW.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';\n\nconst IdentityProviderSettingsType = {\n\tURL: 'url',\n\tXML: 'xml',\n};\n\nconst i18n = useI18n();\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\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 :options=\"ipsOptions\" v-model=\"ipsType\" />\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\" @click=\"onSave\" size=\"large\" data-test-id=\"sso-save\">\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\t@click=\"onTest\"\n\t\t\t\t\tdata-test-id=\"sso-test\"\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:buttonText=\"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","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":"ujDASA,MAAMA,EAA+B,CACpC,IAAK,MACL,IAAK,KAAA,EAGAC,EAAOC,KACPC,EAAWC,IACXC,EAAUC,IACVC,EAAUC,IACVC,EAAQC,IAERC,EAAoBC,EAAS,IAClCT,EAAS,mBACNF,EAAK,SAAS,wBAAwB,EACtCA,EAAK,SAAS,0BAA0B,CAAA,EAEtCY,EAAmBC,EAAI,EAAK,EAE5BC,EAAcD,IACdE,EAAWF,IAEXG,EAAaH,EAAI,CACtB,CACC,MAAOb,EAAK,SAAS,uCAAuC,EAC5D,MAAOD,EAA6B,GACrC,EACA,CACC,MAAOC,EAAK,SAAS,uCAAuC,EAC5D,MAAOD,EAA6B,GACrC,CAAA,CACA,EACKkB,EAAUJ,EAAId,EAA6B,GAAG,EAE9CmB,EAAcL,IACdM,EAAWN,IAEXO,EAAgBT,EAAS,IAAM,SAChC,OAAAM,EAAQ,QAAUlB,EAA6B,IAC3C,CAAC,CAACmB,EAAY,OAASA,EAAY,UAAUG,EAAAnB,EAAS,aAAT,YAAAmB,EAAqB,aAC/DJ,EAAQ,QAAUlB,EAA6B,IAClD,CAAC,CAACoB,EAAS,OAASA,EAAS,UAAUG,EAAApB,EAAS,aAAT,YAAAoB,EAAqB,UAE7D,EAAA,CACP,EAEKC,EAAgBZ,EAAS,IAC1BM,EAAQ,QAAUlB,EAA6B,IAC3C,CAAC,CAACmB,EAAY,OAASN,EAAiB,MACrCK,EAAQ,QAAUlB,EAA6B,IAClD,CAAC,CAACoB,EAAS,OAASP,EAAiB,MAEtC,EACP,EAEKY,EAAgB,SAAY,CAC3B,MAAAC,EAAS,MAAMvB,EAAS,gBAE9Ba,EAAS,MAAQU,GAAA,YAAAA,EAAQ,SACzBX,EAAY,MAAQW,GAAA,YAAAA,EAAQ,UAExBA,GAAA,MAAAA,EAAQ,YACXR,EAAQ,MAAQlB,EAA6B,IACnC0B,GAAA,MAAAA,EAAQ,WAClBR,EAAQ,MAAQlB,EAA6B,KAG9CoB,EAAS,MAAQM,GAAA,YAAAA,EAAQ,SACzBP,EAAY,MAAQO,GAAA,YAAAA,EAAQ,YACXb,EAAA,MAAQ,CAAC,EAACa,GAAA,MAAAA,EAAQ,SAAA,EAG9BC,EAAS,SAAY,CACtB,GAAA,CACH,MAAMD,EACLR,EAAQ,QAAUlB,EAA6B,IAC5C,CAAE,YAAamB,EAAY,KAAM,EACjC,CAAE,SAAUC,EAAS,KAAM,EACzB,MAAAjB,EAAS,eAAeuB,CAAM,EAE/BvB,EAAS,oBACE,MAAMI,EAAQ,QAC5BN,EAAK,SAAS,6CAA6C,EAC3DA,EAAK,SAAS,2CAA2C,EACzD,CACC,kBAAmBA,EAAK,SAAS,0CAA0C,EAC3E,iBAAkBA,EAAK,SAAS,4CAA4C,CAC7E,CAAA,IAGc,WACd,MAAM2B,EAAO,QAGPC,EAAO,CACfpB,EAAM,UAAUoB,EAAO5B,EAAK,SAAS,kCAAkC,CAAC,EACxE,MAAA,QACC,CACD,MAAMwB,EAAc,CACrB,CAAA,EAGKG,EAAS,SAAY,CACtB,GAAA,CACG,MAAAE,EAAM,MAAM3B,EAAS,iBAEvB,OAAO,OAAW,KACd,OAAA,KAAK2B,EAAK,QAAQ,QAElBD,EAAO,CACTpB,EAAA,UAAUoB,EAAO,OAAO,CAC/B,CAAA,EAGKE,EAAc,IAAM,CACpB1B,EAAQ,YAAY,MAAO,aAAa,CAAA,EAG9C,OAAA2B,EAAU,SAAY,CACjB,GAAC7B,EAAS,wBAGV,GAAA,CACH,MAAMsB,EAAc,QACZI,EAAO,CACTpB,EAAA,UAAUoB,EAAO,OAAO,CAC/B,CAAA,CACA"}
@@ -1,2 +1,2 @@
1
- import{G as H,aG as J,aH as Q,r as b,e as A,b as X,ag as u,l as i,m as d,T as l,O as s,u as t,M as k,I as r,Q as h,p,J as Y,a2 as Z,S as g,R as o}from"./vendor-2CfOYFi2.js";import{c as ee,i as te}from"./index-hMVAffQ3.js";import{l as ae,u as ne,n,fm as se,bp as oe,fn as ie,_ as le}from"./n8n-NE7NqrvB.js";import"./pinia-IhuTtYiV.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./lodash-es-s_m9YyW7.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-QL7QI0sV.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.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(),I=Q(),V=ae(),x=ne(),T=b(`callback=${encodeURIComponent(`${window.location.origin}${window.location.pathname}`)}`),j=A(()=>`${a.viewPlansUrl}&${T.value}&source=usage_page`),S=A(()=>`${a.managePlanUrl}&${T.value}`),_=b(!1),y=b(""),w=b(null),$=A(()=>te(["role"],{role:[oe.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)},q=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 I.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)},M=()=>{_.value=!0,v("add_activation_key")},N=()=>{V.goToUpgrade("usage_page","open"),v("view_plans")},z=()=>{v("manage_plan")},R=()=>{y.value=""},D=()=>{var e;(e=w.value)==null||e.focus()},E=()=>{v("desktop_view_plans"),window.open(se,"_blank")};return(e,c)=>{const U=u("n8n-heading"),K=u("n8n-action-box"),B=u("i18n-t"),O=u("n8n-text"),G=u("n8n-info-tip"),m=u("n8n-button"),W=u("n8n-input"),F=u("el-dialog");return i(),d("div",ce,[l(U,{size:"2xlarge"},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.title")),1)]),_:1}),t(a).isDesktop?(i(),k(K,{key:0,class:r(e.$style.actionBox),heading:t(n).baseText("settings.usageAndPlan.desktop.title"),description:t(n).baseText("settings.usageAndPlan.desktop.description"),buttonText:t(n).baseText("settings.usageAndPlan.button.plans"),"onClick:button":E},null,8,["class","heading","description","buttonText"])):h("",!0),!t(a).isDesktop&&!t(a).isLoading?(i(),d("div",re,[l(U,{class:r(e.$style.title),size:"large"},{default:s(()=>[l(B,{keypath:"settings.usageAndPlan.description",tag:"span"},{name:s(()=>[g(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"]),p("div",{class:r(e.$style.quota)},[l(O,{size:"medium",color:"text-light"},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.activeWorkflows")),1)]),_:1}),p("div",{class:r(e.$style.chart)},[t(a).executionLimit>0?(i(),d("span",{key:0,class:r(e.$style.chartLine)},[p("span",{class:r(e.$style.chartBar),style:Y({width:`${t(a).executionPercentage}%`})},null,6)],2)):h("",!0),l(B,{tag:"span",class:r(e.$style.count),keypath:"settings.usageAndPlan.activeWorkflows.count"},{count:s(()=>[g(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(G,null,{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.activeWorkflows.hint")),1)]),_:1}),p("div",{class:r(e.$style.buttons)},[$.value?(i(),k(m,{key:0,class:r(e.$style.buttonTertiary),onClick:M,type:"tertiary",size:"large"},{default:s(()=>[p("span",null,o(t(n).baseText("settings.usageAndPlan.button.activation")),1)]),_:1},8,["class"])):h("",!0),t(a).managementToken?(i(),k(m,{key:1,onClick:z,size:"large"},{default:s(()=>[p("a",{href:S.value,target:"_blank"},o(t(n).baseText("settings.usageAndPlan.button.manage")),9,_e)]),_:1})):(i(),k(m,{key:2,onClick:Z(N,["prevent"]),size:"large"},{default:s(()=>[p("a",{href:j.value,target:"_blank"},o(t(n).baseText("settings.usageAndPlan.button.plans")),9,me)]),_:1},8,["onClick"]))],2),l(F,{width:"480px",top:"0",onClosed:R,onOpened:D,modelValue:_.value,"onUpdate:modelValue":c[2]||(c[2]=f=>_.value=f),title:t(n).baseText("settings.usageAndPlan.dialog.activation.title"),"modal-class":e.$style.center},{default:s(()=>[l(W,{ref_key:"activationKeyInput",ref:w,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,{onClick:c[1]||(c[1]=f=>_.value=!1),type:"secondary"},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.dialog.activation.cancel")),1)]),_:1}),l(m,{onClick:q},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.dialog.activation.activate")),1)]),_:1})]),_:1},8,["modelValue","title","modal-class"])])):h("",!0)])}}}),ve="_center_iajr8_5",fe="_actionBox_iajr8_9",be="_spacedFlex_iajr8_13",ke="_title_iajr8_19",he="_quota_iajr8_24",Pe="_count_iajr8_36",xe="_buttons_iajr8_41",Ae="_chart_iajr8_57",Te="_chartLine_iajr8_64",we="_chartBar_iajr8_74",$e={center:ve,actionBox:fe,spacedFlex:be,title:ke,quota:he,count:Pe,buttons:xe,chart:Ae,chartLine:Te,chartBar:we},Le={$style:$e},lt=le(ye,[["__cssModules",Le],["__scopeId","data-v-5ef3d243"]]);export{lt as default};
2
- //# sourceMappingURL=SettingsUsageAndPlan-E00t5N2Z.js.map
1
+ import{G as H,aG as J,aH as Q,r as b,e as A,b as X,ag as u,l as i,m as d,T as l,O as s,u as t,M as k,I as r,Q as h,p,J as Y,a2 as Z,S as g,R as o}from"./vendor-2CfOYFi2.js";import{c as ee,i as te}from"./index-sMRiWGJS.js";import{l as ae,u as ne,n,fm as se,bp as oe,fn as ie,_ as le}from"./n8n-NE7NqrvB.js";import"./pinia-IhuTtYiV.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./lodash-es-s_m9YyW7.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-QL7QI0sV.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.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(),I=Q(),V=ae(),x=ne(),T=b(`callback=${encodeURIComponent(`${window.location.origin}${window.location.pathname}`)}`),j=A(()=>`${a.viewPlansUrl}&${T.value}&source=usage_page`),S=A(()=>`${a.managePlanUrl}&${T.value}`),_=b(!1),y=b(""),w=b(null),$=A(()=>te(["role"],{role:[oe.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)},q=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 I.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)},M=()=>{_.value=!0,v("add_activation_key")},N=()=>{V.goToUpgrade("usage_page","open"),v("view_plans")},z=()=>{v("manage_plan")},R=()=>{y.value=""},D=()=>{var e;(e=w.value)==null||e.focus()},E=()=>{v("desktop_view_plans"),window.open(se,"_blank")};return(e,c)=>{const U=u("n8n-heading"),K=u("n8n-action-box"),B=u("i18n-t"),O=u("n8n-text"),G=u("n8n-info-tip"),m=u("n8n-button"),W=u("n8n-input"),F=u("el-dialog");return i(),d("div",ce,[l(U,{size:"2xlarge"},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.title")),1)]),_:1}),t(a).isDesktop?(i(),k(K,{key:0,class:r(e.$style.actionBox),heading:t(n).baseText("settings.usageAndPlan.desktop.title"),description:t(n).baseText("settings.usageAndPlan.desktop.description"),buttonText:t(n).baseText("settings.usageAndPlan.button.plans"),"onClick:button":E},null,8,["class","heading","description","buttonText"])):h("",!0),!t(a).isDesktop&&!t(a).isLoading?(i(),d("div",re,[l(U,{class:r(e.$style.title),size:"large"},{default:s(()=>[l(B,{keypath:"settings.usageAndPlan.description",tag:"span"},{name:s(()=>[g(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"]),p("div",{class:r(e.$style.quota)},[l(O,{size:"medium",color:"text-light"},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.activeWorkflows")),1)]),_:1}),p("div",{class:r(e.$style.chart)},[t(a).executionLimit>0?(i(),d("span",{key:0,class:r(e.$style.chartLine)},[p("span",{class:r(e.$style.chartBar),style:Y({width:`${t(a).executionPercentage}%`})},null,6)],2)):h("",!0),l(B,{tag:"span",class:r(e.$style.count),keypath:"settings.usageAndPlan.activeWorkflows.count"},{count:s(()=>[g(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(G,null,{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.activeWorkflows.hint")),1)]),_:1}),p("div",{class:r(e.$style.buttons)},[$.value?(i(),k(m,{key:0,class:r(e.$style.buttonTertiary),onClick:M,type:"tertiary",size:"large"},{default:s(()=>[p("span",null,o(t(n).baseText("settings.usageAndPlan.button.activation")),1)]),_:1},8,["class"])):h("",!0),t(a).managementToken?(i(),k(m,{key:1,onClick:z,size:"large"},{default:s(()=>[p("a",{href:S.value,target:"_blank"},o(t(n).baseText("settings.usageAndPlan.button.manage")),9,_e)]),_:1})):(i(),k(m,{key:2,onClick:Z(N,["prevent"]),size:"large"},{default:s(()=>[p("a",{href:j.value,target:"_blank"},o(t(n).baseText("settings.usageAndPlan.button.plans")),9,me)]),_:1},8,["onClick"]))],2),l(F,{width:"480px",top:"0",onClosed:R,onOpened:D,modelValue:_.value,"onUpdate:modelValue":c[2]||(c[2]=f=>_.value=f),title:t(n).baseText("settings.usageAndPlan.dialog.activation.title"),"modal-class":e.$style.center},{default:s(()=>[l(W,{ref_key:"activationKeyInput",ref:w,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,{onClick:c[1]||(c[1]=f=>_.value=!1),type:"secondary"},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.dialog.activation.cancel")),1)]),_:1}),l(m,{onClick:q},{default:s(()=>[g(o(t(n).baseText("settings.usageAndPlan.dialog.activation.activate")),1)]),_:1})]),_:1},8,["modelValue","title","modal-class"])])):h("",!0)])}}}),ve="_center_iajr8_5",fe="_actionBox_iajr8_9",be="_spacedFlex_iajr8_13",ke="_title_iajr8_19",he="_quota_iajr8_24",Pe="_count_iajr8_36",xe="_buttons_iajr8_41",Ae="_chart_iajr8_57",Te="_chartLine_iajr8_64",we="_chartBar_iajr8_74",$e={center:ve,actionBox:fe,spacedFlex:be,title:ke,quota:he,count:Pe,buttons:xe,chart:Ae,chartLine:Te,chartBar:we},Le={$style:$e},lt=le(ye,[["__cssModules",Le],["__scopeId","data-v-5ef3d243"]]);export{lt as default};
2
+ //# sourceMappingURL=SettingsUsageAndPlan-lypv7X6a.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsUsageAndPlan-E00t5N2Z.js","sources":["../../src/views/SettingsUsageAndPlan.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onMounted, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport type { UsageTelemetry } from '@/stores/usage.store';\nimport { useUsageStore } from '@/stores/usage.store';\nimport { telemetry } from '@/plugins/telemetry';\nimport { i18n as locale } from '@/plugins/i18n';\nimport { useUIStore } from '@/stores/ui.store';\nimport { N8N_PRICING_PAGE_URL } from '@/constants';\nimport { useToast } from '@/composables/useToast';\nimport { ROLE } from '@/utils/userUtils';\nimport { hasPermission } from '@/rbac/permissions';\n\nconst usageStore = useUsageStore();\nconst route = useRoute();\nconst router = useRouter();\nconst uiStore = useUIStore();\nconst toast = useToast();\n\nconst queryParamCallback = ref<string>(\n\t`callback=${encodeURIComponent(`${window.location.origin}${window.location.pathname}`)}`,\n);\nconst viewPlansUrl = computed(\n\t() => `${usageStore.viewPlansUrl}&${queryParamCallback.value}&source=usage_page`,\n);\nconst managePlanUrl = computed(() => `${usageStore.managePlanUrl}&${queryParamCallback.value}`);\nconst activationKeyModal = ref(false);\nconst activationKey = ref('');\nconst activationKeyInput = ref<HTMLInputElement | null>(null);\n\nconst canUserActivateLicense = computed(() =>\n\thasPermission(['role'], {\n\t\trole: [ROLE.Owner],\n\t}),\n);\n\nconst showActivationSuccess = () => {\n\ttoast.showMessage({\n\t\ttype: 'success',\n\t\ttitle: locale.baseText('settings.usageAndPlan.license.activation.success.title'),\n\t\tmessage: locale.baseText('settings.usageAndPlan.license.activation.success.message', {\n\t\t\tinterpolate: {\n\t\t\t\tname: usageStore.planName,\n\t\t\t\ttype: usageStore.planId\n\t\t\t\t\t? locale.baseText('settings.usageAndPlan.plan')\n\t\t\t\t\t: locale.baseText('settings.usageAndPlan.edition'),\n\t\t\t},\n\t\t}),\n\t});\n};\n\nconst showActivationError = (error: Error) => {\n\ttoast.showError(\n\t\terror,\n\t\tlocale.baseText('settings.usageAndPlan.license.activation.error.title'),\n\t\terror.message,\n\t);\n};\n\nconst onLicenseActivation = async () => {\n\ttry {\n\t\tawait usageStore.activateLicense(activationKey.value);\n\t\tactivationKeyModal.value = false;\n\t\tshowActivationSuccess();\n\t} catch (error) {\n\t\tshowActivationError(error);\n\t}\n};\n\nonMounted(async () => {\n\tif (usageStore.isDesktop) {\n\t\treturn;\n\t}\n\n\tusageStore.setLoading(true);\n\tif (route.query.key) {\n\t\ttry {\n\t\t\tawait usageStore.activateLicense(route.query.key as string);\n\t\t\tawait router.replace({ query: {} });\n\t\t\tshowActivationSuccess();\n\t\t\tusageStore.setLoading(false);\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tshowActivationError(error);\n\t\t}\n\t}\n\ttry {\n\t\tif (!route.query.key && canUserActivateLicense.value) {\n\t\t\tawait usageStore.refreshLicenseManagementToken();\n\t\t} else {\n\t\t\tawait usageStore.getLicenseInfo();\n\t\t}\n\t\tusageStore.setLoading(false);\n\t} catch (error) {\n\t\tif (!error.name) {\n\t\t\terror.name = locale.baseText('settings.usageAndPlan.error');\n\t\t}\n\t\ttoast.showError(error, error.name, error.message);\n\t}\n});\n\nconst sendUsageTelemetry = (action: UsageTelemetry['action']) => {\n\tconst telemetryPayload = usageStore.telemetryPayload;\n\ttelemetryPayload.action = action;\n\ttelemetry.track('User clicked button on usage page', telemetryPayload);\n};\n\nconst onAddActivationKey = () => {\n\tactivationKeyModal.value = true;\n\tsendUsageTelemetry('add_activation_key');\n};\n\nconst onViewPlans = () => {\n\tvoid uiStore.goToUpgrade('usage_page', 'open');\n\tsendUsageTelemetry('view_plans');\n};\n\nconst onManagePlan = () => {\n\tsendUsageTelemetry('manage_plan');\n};\n\nconst onDialogClosed = () => {\n\tactivationKey.value = '';\n};\n\nconst onDialogOpened = () => {\n\tactivationKeyInput.value?.focus();\n};\n\nconst openPricingPage = () => {\n\tsendUsageTelemetry('desktop_view_plans');\n\twindow.open(N8N_PRICING_PAGE_URL, '_blank');\n};\n</script>\n\n<template>\n\t<div class=\"settings-usage-and-plan\">\n\t\t<n8n-heading size=\"2xlarge\">{{ locale.baseText('settings.usageAndPlan.title') }}</n8n-heading>\n\t\t<n8n-action-box\n\t\t\tv-if=\"usageStore.isDesktop\"\n\t\t\t:class=\"$style.actionBox\"\n\t\t\t:heading=\"locale.baseText('settings.usageAndPlan.desktop.title')\"\n\t\t\t:description=\"locale.baseText('settings.usageAndPlan.desktop.description')\"\n\t\t\t:buttonText=\"locale.baseText('settings.usageAndPlan.button.plans')\"\n\t\t\t@click:button=\"openPricingPage\"\n\t\t/>\n\t\t<div v-if=\"!usageStore.isDesktop && !usageStore.isLoading\">\n\t\t\t<n8n-heading :class=\"$style.title\" size=\"large\">\n\t\t\t\t<i18n-t keypath=\"settings.usageAndPlan.description\" tag=\"span\">\n\t\t\t\t\t<template #name>{{ usageStore.planName }}</template>\n\t\t\t\t\t<template #type>\n\t\t\t\t\t\t<span v-if=\"usageStore.planId\">{{\n\t\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.plan')\n\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t<span v-else>{{ locale.baseText('settings.usageAndPlan.edition') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t</i18n-t>\n\t\t\t</n8n-heading>\n\n\t\t\t<div :class=\"$style.quota\">\n\t\t\t\t<n8n-text size=\"medium\" color=\"text-light\">\n\t\t\t\t\t{{ locale.baseText('settings.usageAndPlan.activeWorkflows') }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<div :class=\"$style.chart\">\n\t\t\t\t\t<span v-if=\"usageStore.executionLimit > 0\" :class=\"$style.chartLine\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t:class=\"$style.chartBar\"\n\t\t\t\t\t\t\t:style=\"{ width: `${usageStore.executionPercentage}%` }\"\n\t\t\t\t\t\t></span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<i18n-t\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t:class=\"$style.count\"\n\t\t\t\t\t\tkeypath=\"settings.usageAndPlan.activeWorkflows.count\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #count>{{ usageStore.executionCount }}</template>\n\t\t\t\t\t\t<template #limit>\n\t\t\t\t\t\t\t<span v-if=\"usageStore.executionLimit < 0\">{{\n\t\t\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.activeWorkflows.unlimited')\n\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t<span v-else>{{ usageStore.executionLimit }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<n8n-info-tip>{{\n\t\t\t\tlocale.baseText('settings.usageAndPlan.activeWorkflows.hint')\n\t\t\t}}</n8n-info-tip>\n\n\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t<n8n-button\n\t\t\t\t\t:class=\"$style.buttonTertiary\"\n\t\t\t\t\t@click=\"onAddActivationKey\"\n\t\t\t\t\tv-if=\"canUserActivateLicense\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t>\n\t\t\t\t\t<span>{{ locale.baseText('settings.usageAndPlan.button.activation') }}</span>\n\t\t\t\t</n8n-button>\n\t\t\t\t<n8n-button v-if=\"usageStore.managementToken\" @click=\"onManagePlan\" size=\"large\">\n\t\t\t\t\t<a :href=\"managePlanUrl\" target=\"_blank\">{{\n\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.button.manage')\n\t\t\t\t\t}}</a>\n\t\t\t\t</n8n-button>\n\t\t\t\t<n8n-button v-else @click.prevent=\"onViewPlans\" size=\"large\">\n\t\t\t\t\t<a :href=\"viewPlansUrl\" target=\"_blank\">{{\n\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.button.plans')\n\t\t\t\t\t}}</a>\n\t\t\t\t</n8n-button>\n\t\t\t</div>\n\n\t\t\t<el-dialog\n\t\t\t\twidth=\"480px\"\n\t\t\t\ttop=\"0\"\n\t\t\t\t@closed=\"onDialogClosed\"\n\t\t\t\t@opened=\"onDialogOpened\"\n\t\t\t\tv-model=\"activationKeyModal\"\n\t\t\t\t:title=\"locale.baseText('settings.usageAndPlan.dialog.activation.title')\"\n\t\t\t\t:modal-class=\"$style.center\"\n\t\t\t>\n\t\t\t\t<template #default>\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tref=\"activationKeyInput\"\n\t\t\t\t\t\tv-model=\"activationKey\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('settings.usageAndPlan.dialog.activation.label')\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #footer>\n\t\t\t\t\t<n8n-button @click=\"activationKeyModal = false\" type=\"secondary\">\n\t\t\t\t\t\t{{ locale.baseText('settings.usageAndPlan.dialog.activation.cancel') }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t\t<n8n-button @click=\"onLicenseActivation\">\n\t\t\t\t\t\t{{ locale.baseText('settings.usageAndPlan.dialog.activation.activate') }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</template>\n\t\t\t</el-dialog>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n@import '@/styles/css-animation-helpers.scss';\n\n.center > div {\n\tjustify-content: center;\n}\n\n.actionBox {\n\tmargin: var(--spacing-2xl) 0 0;\n}\n\n.spacedFlex {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n\n.title {\n\tdisplay: block;\n\tpadding: var(--spacing-2xl) 0 var(--spacing-m);\n}\n\n.quota {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\theight: 54px;\n\tpadding: 0 var(--spacing-s);\n\tmargin: 0 0 var(--spacing-xs);\n\tbackground: var(--color-background-xlight);\n\tborder-radius: var(--border-radius-large);\n\tborder: 1px solid var(--color-foreground-base);\n\twhite-space: nowrap;\n\n\t.count {\n\t\ttext-transform: lowercase;\n\t\tfont-size: var(--font-size-s);\n\t}\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tpadding: var(--spacing-xl) 0 0;\n\n\tbutton {\n\t\tmargin-left: var(--spacing-xs);\n\n\t\ta {\n\t\t\tdisplay: inline-block;\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: none;\n\t\t\tpadding: var(--spacing-xs) var(--spacing-m);\n\t\t\tmargin: calc(var(--spacing-xs) * -1) calc(var(--spacing-m) * -1);\n\t\t}\n\t}\n}\n\n.chart {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tflex-grow: 1;\n}\n\n.chartLine {\n\tdisplay: block;\n\theight: 10px;\n\twidth: 100%;\n\tmax-width: 260px;\n\tmargin: 0 var(--spacing-m);\n\tborder-radius: 10px;\n\tbackground: var(--color-background-base);\n}\n\n.chartBar {\n\tfloat: left;\n\theight: 100%;\n\tmax-width: 100%;\n\tbackground: var(--color-secondary);\n\tborder-radius: 10px;\n\ttransition: width 0.2s $ease-out-expo;\n}\n\ndiv[class*='info'] > span > span:last-child {\n\tline-height: 1.4;\n\tpadding: 0 0 0 var(--spacing-4xs);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.settings-usage-and-plan {\n\t:deep(.el-dialog__wrapper) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\t.el-dialog {\n\t\t\tmargin: 0;\n\n\t\t\t.el-dialog__footer {\n\t\t\t\tbutton {\n\t\t\t\t\tmargin-left: var(--spacing-xs);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"],"names":["usageStore","useUsageStore","route","useRoute","router","useRouter","uiStore","useUIStore","toast","useToast","queryParamCallback","ref","viewPlansUrl","computed","managePlanUrl","activationKeyModal","activationKey","activationKeyInput","canUserActivateLicense","hasPermission","ROLE","showActivationSuccess","locale","showActivationError","error","onLicenseActivation","onMounted","sendUsageTelemetry","action","telemetryPayload","telemetry","onAddActivationKey","onViewPlans","onManagePlan","onDialogClosed","onDialogOpened","_a","openPricingPage","N8N_PRICING_PAGE_URL"],"mappings":"4iDAaA,MAAMA,EAAaC,KACbC,EAAQC,IACRC,EAASC,IACTC,EAAUC,KACVC,EAAQC,KAERC,EAAqBC,EAC1B,YAAY,mBAAmB,GAAG,OAAO,SAAS,MAAM,GAAG,OAAO,SAAS,QAAQ,EAAE,CAAC,EAAA,EAEjFC,EAAeC,EACpB,IAAM,GAAGb,EAAW,YAAY,IAAIU,EAAmB,KAAK,oBAAA,EAEvDI,EAAgBD,EAAS,IAAM,GAAGb,EAAW,aAAa,IAAIU,EAAmB,KAAK,EAAE,EACxFK,EAAqBJ,EAAI,EAAK,EAC9BK,EAAgBL,EAAI,EAAE,EACtBM,EAAqBN,EAA6B,IAAI,EAEtDO,EAAyBL,EAAS,IACvCM,GAAc,CAAC,MAAM,EAAG,CACvB,KAAM,CAACC,GAAK,KAAK,CAAA,CACjB,CAAA,EAGIC,EAAwB,IAAM,CACnCb,EAAM,YAAY,CACjB,KAAM,UACN,MAAOc,EAAO,SAAS,wDAAwD,EAC/E,QAASA,EAAO,SAAS,2DAA4D,CACpF,YAAa,CACZ,KAAMtB,EAAW,SACjB,KAAMA,EAAW,OACdsB,EAAO,SAAS,4BAA4B,EAC5CA,EAAO,SAAS,+BAA+B,CACnD,CAAA,CACA,CAAA,CACD,CAAA,EAGIC,EAAuBC,GAAiB,CACvChB,EAAA,UACLgB,EACAF,EAAO,SAAS,sDAAsD,EACtEE,EAAM,OAAA,CACP,EAGKC,EAAsB,SAAY,CACnC,GAAA,CACG,MAAAzB,EAAW,gBAAgBgB,EAAc,KAAK,EACpDD,EAAmB,MAAQ,GACLM,UACdG,EAAO,CACfD,EAAoBC,CAAK,CAC1B,CAAA,EAGDE,EAAU,SAAY,CACrB,GAAI,CAAA1B,EAAW,UAKX,IADJA,EAAW,WAAW,EAAI,EACtBE,EAAM,MAAM,IACX,GAAA,CACH,MAAMF,EAAW,gBAAgBE,EAAM,MAAM,GAAa,EAC1D,MAAME,EAAO,QAAQ,CAAE,MAAO,CAAA,CAAI,CAAA,EACZiB,IACtBrB,EAAW,WAAW,EAAK,EAC3B,aACQwB,EAAO,CACfD,EAAoBC,CAAK,CAC1B,CAEG,GAAA,CACC,CAACtB,EAAM,MAAM,KAAOgB,EAAuB,MAC9C,MAAMlB,EAAW,gCAEjB,MAAMA,EAAW,iBAElBA,EAAW,WAAW,EAAK,QACnBwB,EAAO,CACVA,EAAM,OACJA,EAAA,KAAOF,EAAO,SAAS,6BAA6B,GAE3Dd,EAAM,UAAUgB,EAAOA,EAAM,KAAMA,EAAM,OAAO,CACjD,EAAA,CACA,EAEK,MAAAG,EAAsBC,GAAqC,CAChE,MAAMC,EAAmB7B,EAAW,iBACpC6B,EAAiB,OAASD,EAChBE,GAAA,MAAM,oCAAqCD,CAAgB,CAAA,EAGhEE,EAAqB,IAAM,CAChChB,EAAmB,MAAQ,GAC3BY,EAAmB,oBAAoB,CAAA,EAGlCK,EAAc,IAAM,CACpB1B,EAAQ,YAAY,aAAc,MAAM,EAC7CqB,EAAmB,YAAY,CAAA,EAG1BM,EAAe,IAAM,CAC1BN,EAAmB,aAAa,CAAA,EAG3BO,EAAiB,IAAM,CAC5BlB,EAAc,MAAQ,EAAA,EAGjBmB,EAAiB,IAAM,QAC5BC,EAAAnB,EAAmB,QAAnB,MAAAmB,EAA0B,OAAM,EAG3BC,EAAkB,IAAM,CAC7BV,EAAmB,oBAAoB,EAChC,OAAA,KAAKW,GAAsB,QAAQ,CAAA"}
1
+ {"version":3,"file":"SettingsUsageAndPlan-lypv7X6a.js","sources":["../../src/views/SettingsUsageAndPlan.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onMounted, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport type { UsageTelemetry } from '@/stores/usage.store';\nimport { useUsageStore } from '@/stores/usage.store';\nimport { telemetry } from '@/plugins/telemetry';\nimport { i18n as locale } from '@/plugins/i18n';\nimport { useUIStore } from '@/stores/ui.store';\nimport { N8N_PRICING_PAGE_URL } from '@/constants';\nimport { useToast } from '@/composables/useToast';\nimport { ROLE } from '@/utils/userUtils';\nimport { hasPermission } from '@/rbac/permissions';\n\nconst usageStore = useUsageStore();\nconst route = useRoute();\nconst router = useRouter();\nconst uiStore = useUIStore();\nconst toast = useToast();\n\nconst queryParamCallback = ref<string>(\n\t`callback=${encodeURIComponent(`${window.location.origin}${window.location.pathname}`)}`,\n);\nconst viewPlansUrl = computed(\n\t() => `${usageStore.viewPlansUrl}&${queryParamCallback.value}&source=usage_page`,\n);\nconst managePlanUrl = computed(() => `${usageStore.managePlanUrl}&${queryParamCallback.value}`);\nconst activationKeyModal = ref(false);\nconst activationKey = ref('');\nconst activationKeyInput = ref<HTMLInputElement | null>(null);\n\nconst canUserActivateLicense = computed(() =>\n\thasPermission(['role'], {\n\t\trole: [ROLE.Owner],\n\t}),\n);\n\nconst showActivationSuccess = () => {\n\ttoast.showMessage({\n\t\ttype: 'success',\n\t\ttitle: locale.baseText('settings.usageAndPlan.license.activation.success.title'),\n\t\tmessage: locale.baseText('settings.usageAndPlan.license.activation.success.message', {\n\t\t\tinterpolate: {\n\t\t\t\tname: usageStore.planName,\n\t\t\t\ttype: usageStore.planId\n\t\t\t\t\t? locale.baseText('settings.usageAndPlan.plan')\n\t\t\t\t\t: locale.baseText('settings.usageAndPlan.edition'),\n\t\t\t},\n\t\t}),\n\t});\n};\n\nconst showActivationError = (error: Error) => {\n\ttoast.showError(\n\t\terror,\n\t\tlocale.baseText('settings.usageAndPlan.license.activation.error.title'),\n\t\terror.message,\n\t);\n};\n\nconst onLicenseActivation = async () => {\n\ttry {\n\t\tawait usageStore.activateLicense(activationKey.value);\n\t\tactivationKeyModal.value = false;\n\t\tshowActivationSuccess();\n\t} catch (error) {\n\t\tshowActivationError(error);\n\t}\n};\n\nonMounted(async () => {\n\tif (usageStore.isDesktop) {\n\t\treturn;\n\t}\n\n\tusageStore.setLoading(true);\n\tif (route.query.key) {\n\t\ttry {\n\t\t\tawait usageStore.activateLicense(route.query.key as string);\n\t\t\tawait router.replace({ query: {} });\n\t\t\tshowActivationSuccess();\n\t\t\tusageStore.setLoading(false);\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tshowActivationError(error);\n\t\t}\n\t}\n\ttry {\n\t\tif (!route.query.key && canUserActivateLicense.value) {\n\t\t\tawait usageStore.refreshLicenseManagementToken();\n\t\t} else {\n\t\t\tawait usageStore.getLicenseInfo();\n\t\t}\n\t\tusageStore.setLoading(false);\n\t} catch (error) {\n\t\tif (!error.name) {\n\t\t\terror.name = locale.baseText('settings.usageAndPlan.error');\n\t\t}\n\t\ttoast.showError(error, error.name, error.message);\n\t}\n});\n\nconst sendUsageTelemetry = (action: UsageTelemetry['action']) => {\n\tconst telemetryPayload = usageStore.telemetryPayload;\n\ttelemetryPayload.action = action;\n\ttelemetry.track('User clicked button on usage page', telemetryPayload);\n};\n\nconst onAddActivationKey = () => {\n\tactivationKeyModal.value = true;\n\tsendUsageTelemetry('add_activation_key');\n};\n\nconst onViewPlans = () => {\n\tvoid uiStore.goToUpgrade('usage_page', 'open');\n\tsendUsageTelemetry('view_plans');\n};\n\nconst onManagePlan = () => {\n\tsendUsageTelemetry('manage_plan');\n};\n\nconst onDialogClosed = () => {\n\tactivationKey.value = '';\n};\n\nconst onDialogOpened = () => {\n\tactivationKeyInput.value?.focus();\n};\n\nconst openPricingPage = () => {\n\tsendUsageTelemetry('desktop_view_plans');\n\twindow.open(N8N_PRICING_PAGE_URL, '_blank');\n};\n</script>\n\n<template>\n\t<div class=\"settings-usage-and-plan\">\n\t\t<n8n-heading size=\"2xlarge\">{{ locale.baseText('settings.usageAndPlan.title') }}</n8n-heading>\n\t\t<n8n-action-box\n\t\t\tv-if=\"usageStore.isDesktop\"\n\t\t\t:class=\"$style.actionBox\"\n\t\t\t:heading=\"locale.baseText('settings.usageAndPlan.desktop.title')\"\n\t\t\t:description=\"locale.baseText('settings.usageAndPlan.desktop.description')\"\n\t\t\t:buttonText=\"locale.baseText('settings.usageAndPlan.button.plans')\"\n\t\t\t@click:button=\"openPricingPage\"\n\t\t/>\n\t\t<div v-if=\"!usageStore.isDesktop && !usageStore.isLoading\">\n\t\t\t<n8n-heading :class=\"$style.title\" size=\"large\">\n\t\t\t\t<i18n-t keypath=\"settings.usageAndPlan.description\" tag=\"span\">\n\t\t\t\t\t<template #name>{{ usageStore.planName }}</template>\n\t\t\t\t\t<template #type>\n\t\t\t\t\t\t<span v-if=\"usageStore.planId\">{{\n\t\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.plan')\n\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t<span v-else>{{ locale.baseText('settings.usageAndPlan.edition') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t</i18n-t>\n\t\t\t</n8n-heading>\n\n\t\t\t<div :class=\"$style.quota\">\n\t\t\t\t<n8n-text size=\"medium\" color=\"text-light\">\n\t\t\t\t\t{{ locale.baseText('settings.usageAndPlan.activeWorkflows') }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<div :class=\"$style.chart\">\n\t\t\t\t\t<span v-if=\"usageStore.executionLimit > 0\" :class=\"$style.chartLine\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t:class=\"$style.chartBar\"\n\t\t\t\t\t\t\t:style=\"{ width: `${usageStore.executionPercentage}%` }\"\n\t\t\t\t\t\t></span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<i18n-t\n\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t:class=\"$style.count\"\n\t\t\t\t\t\tkeypath=\"settings.usageAndPlan.activeWorkflows.count\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #count>{{ usageStore.executionCount }}</template>\n\t\t\t\t\t\t<template #limit>\n\t\t\t\t\t\t\t<span v-if=\"usageStore.executionLimit < 0\">{{\n\t\t\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.activeWorkflows.unlimited')\n\t\t\t\t\t\t\t}}</span>\n\t\t\t\t\t\t\t<span v-else>{{ usageStore.executionLimit }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</i18n-t>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<n8n-info-tip>{{\n\t\t\t\tlocale.baseText('settings.usageAndPlan.activeWorkflows.hint')\n\t\t\t}}</n8n-info-tip>\n\n\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t<n8n-button\n\t\t\t\t\t:class=\"$style.buttonTertiary\"\n\t\t\t\t\t@click=\"onAddActivationKey\"\n\t\t\t\t\tv-if=\"canUserActivateLicense\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t>\n\t\t\t\t\t<span>{{ locale.baseText('settings.usageAndPlan.button.activation') }}</span>\n\t\t\t\t</n8n-button>\n\t\t\t\t<n8n-button v-if=\"usageStore.managementToken\" @click=\"onManagePlan\" size=\"large\">\n\t\t\t\t\t<a :href=\"managePlanUrl\" target=\"_blank\">{{\n\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.button.manage')\n\t\t\t\t\t}}</a>\n\t\t\t\t</n8n-button>\n\t\t\t\t<n8n-button v-else @click.prevent=\"onViewPlans\" size=\"large\">\n\t\t\t\t\t<a :href=\"viewPlansUrl\" target=\"_blank\">{{\n\t\t\t\t\t\tlocale.baseText('settings.usageAndPlan.button.plans')\n\t\t\t\t\t}}</a>\n\t\t\t\t</n8n-button>\n\t\t\t</div>\n\n\t\t\t<el-dialog\n\t\t\t\twidth=\"480px\"\n\t\t\t\ttop=\"0\"\n\t\t\t\t@closed=\"onDialogClosed\"\n\t\t\t\t@opened=\"onDialogOpened\"\n\t\t\t\tv-model=\"activationKeyModal\"\n\t\t\t\t:title=\"locale.baseText('settings.usageAndPlan.dialog.activation.title')\"\n\t\t\t\t:modal-class=\"$style.center\"\n\t\t\t>\n\t\t\t\t<template #default>\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tref=\"activationKeyInput\"\n\t\t\t\t\t\tv-model=\"activationKey\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('settings.usageAndPlan.dialog.activation.label')\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #footer>\n\t\t\t\t\t<n8n-button @click=\"activationKeyModal = false\" type=\"secondary\">\n\t\t\t\t\t\t{{ locale.baseText('settings.usageAndPlan.dialog.activation.cancel') }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t\t<n8n-button @click=\"onLicenseActivation\">\n\t\t\t\t\t\t{{ locale.baseText('settings.usageAndPlan.dialog.activation.activate') }}\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</template>\n\t\t\t</el-dialog>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n@import '@/styles/css-animation-helpers.scss';\n\n.center > div {\n\tjustify-content: center;\n}\n\n.actionBox {\n\tmargin: var(--spacing-2xl) 0 0;\n}\n\n.spacedFlex {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n\n.title {\n\tdisplay: block;\n\tpadding: var(--spacing-2xl) 0 var(--spacing-m);\n}\n\n.quota {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\theight: 54px;\n\tpadding: 0 var(--spacing-s);\n\tmargin: 0 0 var(--spacing-xs);\n\tbackground: var(--color-background-xlight);\n\tborder-radius: var(--border-radius-large);\n\tborder: 1px solid var(--color-foreground-base);\n\twhite-space: nowrap;\n\n\t.count {\n\t\ttext-transform: lowercase;\n\t\tfont-size: var(--font-size-s);\n\t}\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\tpadding: var(--spacing-xl) 0 0;\n\n\tbutton {\n\t\tmargin-left: var(--spacing-xs);\n\n\t\ta {\n\t\t\tdisplay: inline-block;\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: none;\n\t\t\tpadding: var(--spacing-xs) var(--spacing-m);\n\t\t\tmargin: calc(var(--spacing-xs) * -1) calc(var(--spacing-m) * -1);\n\t\t}\n\t}\n}\n\n.chart {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: flex-end;\n\tflex-grow: 1;\n}\n\n.chartLine {\n\tdisplay: block;\n\theight: 10px;\n\twidth: 100%;\n\tmax-width: 260px;\n\tmargin: 0 var(--spacing-m);\n\tborder-radius: 10px;\n\tbackground: var(--color-background-base);\n}\n\n.chartBar {\n\tfloat: left;\n\theight: 100%;\n\tmax-width: 100%;\n\tbackground: var(--color-secondary);\n\tborder-radius: 10px;\n\ttransition: width 0.2s $ease-out-expo;\n}\n\ndiv[class*='info'] > span > span:last-child {\n\tline-height: 1.4;\n\tpadding: 0 0 0 var(--spacing-4xs);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.settings-usage-and-plan {\n\t:deep(.el-dialog__wrapper) {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\t.el-dialog {\n\t\t\tmargin: 0;\n\n\t\t\t.el-dialog__footer {\n\t\t\t\tbutton {\n\t\t\t\t\tmargin-left: var(--spacing-xs);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n"],"names":["usageStore","useUsageStore","route","useRoute","router","useRouter","uiStore","useUIStore","toast","useToast","queryParamCallback","ref","viewPlansUrl","computed","managePlanUrl","activationKeyModal","activationKey","activationKeyInput","canUserActivateLicense","hasPermission","ROLE","showActivationSuccess","locale","showActivationError","error","onLicenseActivation","onMounted","sendUsageTelemetry","action","telemetryPayload","telemetry","onAddActivationKey","onViewPlans","onManagePlan","onDialogClosed","onDialogOpened","_a","openPricingPage","N8N_PRICING_PAGE_URL"],"mappings":"4iDAaA,MAAMA,EAAaC,KACbC,EAAQC,IACRC,EAASC,IACTC,EAAUC,KACVC,EAAQC,KAERC,EAAqBC,EAC1B,YAAY,mBAAmB,GAAG,OAAO,SAAS,MAAM,GAAG,OAAO,SAAS,QAAQ,EAAE,CAAC,EAAA,EAEjFC,EAAeC,EACpB,IAAM,GAAGb,EAAW,YAAY,IAAIU,EAAmB,KAAK,oBAAA,EAEvDI,EAAgBD,EAAS,IAAM,GAAGb,EAAW,aAAa,IAAIU,EAAmB,KAAK,EAAE,EACxFK,EAAqBJ,EAAI,EAAK,EAC9BK,EAAgBL,EAAI,EAAE,EACtBM,EAAqBN,EAA6B,IAAI,EAEtDO,EAAyBL,EAAS,IACvCM,GAAc,CAAC,MAAM,EAAG,CACvB,KAAM,CAACC,GAAK,KAAK,CAAA,CACjB,CAAA,EAGIC,EAAwB,IAAM,CACnCb,EAAM,YAAY,CACjB,KAAM,UACN,MAAOc,EAAO,SAAS,wDAAwD,EAC/E,QAASA,EAAO,SAAS,2DAA4D,CACpF,YAAa,CACZ,KAAMtB,EAAW,SACjB,KAAMA,EAAW,OACdsB,EAAO,SAAS,4BAA4B,EAC5CA,EAAO,SAAS,+BAA+B,CACnD,CAAA,CACA,CAAA,CACD,CAAA,EAGIC,EAAuBC,GAAiB,CACvChB,EAAA,UACLgB,EACAF,EAAO,SAAS,sDAAsD,EACtEE,EAAM,OAAA,CACP,EAGKC,EAAsB,SAAY,CACnC,GAAA,CACG,MAAAzB,EAAW,gBAAgBgB,EAAc,KAAK,EACpDD,EAAmB,MAAQ,GACLM,UACdG,EAAO,CACfD,EAAoBC,CAAK,CAC1B,CAAA,EAGDE,EAAU,SAAY,CACrB,GAAI,CAAA1B,EAAW,UAKX,IADJA,EAAW,WAAW,EAAI,EACtBE,EAAM,MAAM,IACX,GAAA,CACH,MAAMF,EAAW,gBAAgBE,EAAM,MAAM,GAAa,EAC1D,MAAME,EAAO,QAAQ,CAAE,MAAO,CAAA,CAAI,CAAA,EACZiB,IACtBrB,EAAW,WAAW,EAAK,EAC3B,aACQwB,EAAO,CACfD,EAAoBC,CAAK,CAC1B,CAEG,GAAA,CACC,CAACtB,EAAM,MAAM,KAAOgB,EAAuB,MAC9C,MAAMlB,EAAW,gCAEjB,MAAMA,EAAW,iBAElBA,EAAW,WAAW,EAAK,QACnBwB,EAAO,CACVA,EAAM,OACJA,EAAA,KAAOF,EAAO,SAAS,6BAA6B,GAE3Dd,EAAM,UAAUgB,EAAOA,EAAM,KAAMA,EAAM,OAAO,CACjD,EAAA,CACA,EAEK,MAAAG,EAAsBC,GAAqC,CAChE,MAAMC,EAAmB7B,EAAW,iBACpC6B,EAAiB,OAASD,EAChBE,GAAA,MAAM,oCAAqCD,CAAgB,CAAA,EAGhEE,EAAqB,IAAM,CAChChB,EAAmB,MAAQ,GAC3BY,EAAmB,oBAAoB,CAAA,EAGlCK,EAAc,IAAM,CACpB1B,EAAQ,YAAY,aAAc,MAAM,EAC7CqB,EAAmB,YAAY,CAAA,EAG1BM,EAAe,IAAM,CAC1BN,EAAmB,aAAa,CAAA,EAG3BO,EAAiB,IAAM,CAC5BlB,EAAc,MAAQ,EAAA,EAGjBmB,EAAiB,IAAM,QAC5BC,EAAAnB,EAAmB,QAAnB,MAAAmB,EAA0B,OAAM,EAG3BC,EAAkB,IAAM,CAC7BV,EAAmB,oBAAoB,EAChC,OAAA,KAAKW,GAAsB,QAAQ,CAAA"}
@@ -1,2 +1,2 @@
1
- import{m as y}from"./pinia-IhuTtYiV.js";import{u as T,p as v,l as U,t as L,z as C,bp as p,B as $,bo as f,_ as M}from"./n8n-NE7NqrvB.js";import{I as O,aN as I,c as k,i as c}from"./index-hMVAffQ3.js";import{G as R,ag as t,l as i,m as a,p as l,T as o,O as u,I as r,Q as g,S as E,R as S}from"./vendor-2CfOYFi2.js";import"./lodash-es-s_m9YyW7.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-viEZCtbZ.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";import"./uuid-McvpxQtQ.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.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-QL7QI0sV.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";const B=R({name:"SettingsUsersView",mixins:[O],setup(){return{...T()}},async mounted(){this.showUMSetupWarning||await this.usersStore.fetchUsers()},computed:{...y(L,U,v,k,I),isSharingEnabled(){return this.settingsStore.isEnterpriseFeatureEnabled(C.Sharing)},showUMSetupWarning(){return c(["defaultUser"])},usersListActions(){return[{label:this.$locale.baseText("settings.users.actions.copyInviteLink"),value:"copyInviteLink",guard:e=>this.settingsStore.isBelowUserQuota&&!e.firstName&&!!e.inviteAcceptUrl},{label:this.$locale.baseText("settings.users.actions.reinvite"),value:"reinvite",guard:e=>this.settingsStore.isBelowUserQuota&&!e.firstName&&this.settingsStore.isSmtpSetup},{label:this.$locale.baseText("settings.users.actions.delete"),value:"delete"},{label:this.$locale.baseText("settings.users.actions.copyPasswordResetLink"),value:"copyPasswordResetLink",guard:()=>this.settingsStore.isBelowUserQuota},{label:this.$locale.baseText("settings.users.actions.allowSSOManualLogin"),value:"allowSSOManualLogin",guard:e=>{var s;return this.settingsStore.isSamlLoginEnabled&&!((s=e.settings)!=null&&s.allowSSOManualLogin)}},{label:this.$locale.baseText("settings.users.actions.disallowSSOManualLogin"),value:"disallowSSOManualLogin",guard:e=>{var s;return this.settingsStore.isSamlLoginEnabled&&((s=e.settings)==null?void 0:s.allowSSOManualLogin)===!0}}]},userRoles(){return[{value:p.Member,label:this.$locale.baseText("auth.roles.member")},{value:p.Admin,label:this.$locale.baseText("auth.roles.admin")}]},canUpdateRole(){return c(["rbac"],{rbac:{scope:"user:update"}})}},methods:{redirectToSetup(){this.$router.push({name:$.SETUP})},onInvite(){this.uiStore.openModal(f)},async onDelete(e){this.usersStore.getUserById(e)&&this.uiStore.openDeleteUserModal(e)},async onReinvite(e){const s=this.usersStore.getUserById(e);if(s!=null&&s.email)try{await this.usersStore.reinviteUser({email:s.email}),this.showToast({type:"success",title:this.$locale.baseText("settings.users.inviteResent"),message:this.$locale.baseText("settings.users.emailSentTo",{interpolate:{email:s.email??""}})})}catch(n){this.showError(n,this.$locale.baseText("settings.users.userReinviteError"))}},async onCopyInviteLink(e){const s=this.usersStore.getUserById(e);s!=null&&s.inviteAcceptUrl&&(this.copyToClipboard(s.inviteAcceptUrl),this.showToast({type:"success",title:this.$locale.baseText("settings.users.inviteUrlCreated"),message:this.$locale.baseText("settings.users.inviteUrlCreated.message")}))},async onCopyPasswordResetLink(e){const s=this.usersStore.getUserById(e);if(s){const n=await this.usersStore.getUserPasswordResetLink(s);this.copyToClipboard(n.link),this.showToast({type:"success",title:this.$locale.baseText("settings.users.passwordResetUrlCreated"),message:this.$locale.baseText("settings.users.passwordResetUrlCreated.message")})}},async onAllowSSOManualLogin(e){const s=this.usersStore.getUserById(e);s&&(s.settings||(s.settings={}),s.settings.allowSSOManualLogin=!0,await this.usersStore.updateOtherUserSettings(e,s.settings),this.showToast({type:"success",title:this.$locale.baseText("settings.users.allowSSOManualLogin"),message:this.$locale.baseText("settings.users.allowSSOManualLogin.message")}))},async onDisallowSSOManualLogin(e){const s=this.usersStore.getUserById(e);s!=null&&s.settings&&(s.settings.allowSSOManualLogin=!1,await this.usersStore.updateOtherUserSettings(e,s.settings),this.showToast({type:"success",title:this.$locale.baseText("settings.users.disallowSSOManualLogin"),message:this.$locale.baseText("settings.users.disallowSSOManualLogin.message")}))},goToUpgrade(){this.uiStore.goToUpgrade("settings-users","upgrade-users")},async onRoleChange(e,s){await this.usersStore.updateRole({id:e.id,role:{scope:"global",name:s}})}}}),_="_container_n5y84_5",A="_usersContainer_n5y84_13",D="_buttonContainer_n5y84_17",P="_setupInfoContainer_n5y84_23",N="_alert_n5y84_27",V={container:_,usersContainer:A,buttonContainer:D,setupInfoContainer:P,alert:N};function x(e,s,n,z,K,W){const d=t("n8n-heading"),m=t("n8n-button"),h=t("n8n-tooltip"),b=t("n8n-action-box"),w=t("n8n-users-list");return i(),a("div",{class:r(e.$style.container)},[l("div",null,[o(d,{size:"2xlarge"},{default:u(()=>[E(S(e.$locale.baseText("settings.users")),1)]),_:1}),e.showUMSetupWarning?g("",!0):(i(),a("div",{key:0,class:r(e.$style.buttonContainer)},[o(h,{disabled:!e.ssoStore.isSamlLoginEnabled},{content:u(()=>[l("span",null,S(e.$locale.baseText("settings.users.invite.tooltip")),1)]),default:u(()=>[l("div",null,[o(m,{disabled:e.ssoStore.isSamlLoginEnabled||!e.settingsStore.isBelowUserQuota,label:e.$locale.baseText("settings.users.invite"),onClick:e.onInvite,size:"large","data-test-id":"settings-users-invite-button"},null,8,["disabled","label","onClick"])])]),_:1},8,["disabled"])],2))]),e.settingsStore.isBelowUserQuota?g("",!0):(i(),a("div",{key:0,class:r(e.$style.setupInfoContainer)},[o(b,{heading:e.$locale.baseText(e.uiStore.contextBasedTranslationKeys.users.settings.unavailable.title),description:e.$locale.baseText(e.uiStore.contextBasedTranslationKeys.users.settings.unavailable.description),buttonText:e.$locale.baseText(e.uiStore.contextBasedTranslationKeys.users.settings.unavailable.button),"onClick:button":e.goToUpgrade},null,8,["heading","description","buttonText","onClick:button"])],2)),e.settingsStore.isBelowUserQuota||e.usersStore.allUsers.length>1?(i(),a("div",{key:1,class:r(e.$style.usersContainer)},[o(w,{actions:e.usersListActions,users:e.usersStore.allUsers,currentUserId:e.usersStore.currentUserId,isSamlLoginEnabled:e.ssoStore.isSamlLoginEnabled,onDelete:e.onDelete,onReinvite:e.onReinvite,onCopyInviteLink:e.onCopyInviteLink,onCopyPasswordResetLink:e.onCopyPasswordResetLink,onAllowSSOManualLogin:e.onAllowSSOManualLogin,onDisallowSSOManualLogin:e.onDisallowSSOManualLogin},null,8,["actions","users","currentUserId","isSamlLoginEnabled","onDelete","onReinvite","onCopyInviteLink","onCopyPasswordResetLink","onAllowSSOManualLogin","onDisallowSSOManualLogin"])],2)):g("",!0)],2)}const Q={$style:V},Ue=M(B,[["render",x],["__cssModules",Q]]);export{Ue as default};
2
- //# sourceMappingURL=SettingsUsersView-4PoSbZc_.js.map
1
+ import{m as y}from"./pinia-IhuTtYiV.js";import{u as T,p as v,l as U,t as L,z as C,bp as p,B as $,bo as f,_ as M}from"./n8n-NE7NqrvB.js";import{I as O,aN as I,c as k,i as c}from"./index-sMRiWGJS.js";import{G as R,ag as t,l as i,m as a,p as l,T as o,O as u,I as r,Q as g,S as E,R as S}from"./vendor-2CfOYFi2.js";import"./lodash-es-s_m9YyW7.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-viEZCtbZ.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";import"./uuid-McvpxQtQ.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.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-QL7QI0sV.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";const B=R({name:"SettingsUsersView",mixins:[O],setup(){return{...T()}},async mounted(){this.showUMSetupWarning||await this.usersStore.fetchUsers()},computed:{...y(L,U,v,k,I),isSharingEnabled(){return this.settingsStore.isEnterpriseFeatureEnabled(C.Sharing)},showUMSetupWarning(){return c(["defaultUser"])},usersListActions(){return[{label:this.$locale.baseText("settings.users.actions.copyInviteLink"),value:"copyInviteLink",guard:e=>this.settingsStore.isBelowUserQuota&&!e.firstName&&!!e.inviteAcceptUrl},{label:this.$locale.baseText("settings.users.actions.reinvite"),value:"reinvite",guard:e=>this.settingsStore.isBelowUserQuota&&!e.firstName&&this.settingsStore.isSmtpSetup},{label:this.$locale.baseText("settings.users.actions.delete"),value:"delete"},{label:this.$locale.baseText("settings.users.actions.copyPasswordResetLink"),value:"copyPasswordResetLink",guard:()=>this.settingsStore.isBelowUserQuota},{label:this.$locale.baseText("settings.users.actions.allowSSOManualLogin"),value:"allowSSOManualLogin",guard:e=>{var s;return this.settingsStore.isSamlLoginEnabled&&!((s=e.settings)!=null&&s.allowSSOManualLogin)}},{label:this.$locale.baseText("settings.users.actions.disallowSSOManualLogin"),value:"disallowSSOManualLogin",guard:e=>{var s;return this.settingsStore.isSamlLoginEnabled&&((s=e.settings)==null?void 0:s.allowSSOManualLogin)===!0}}]},userRoles(){return[{value:p.Member,label:this.$locale.baseText("auth.roles.member")},{value:p.Admin,label:this.$locale.baseText("auth.roles.admin")}]},canUpdateRole(){return c(["rbac"],{rbac:{scope:"user:update"}})}},methods:{redirectToSetup(){this.$router.push({name:$.SETUP})},onInvite(){this.uiStore.openModal(f)},async onDelete(e){this.usersStore.getUserById(e)&&this.uiStore.openDeleteUserModal(e)},async onReinvite(e){const s=this.usersStore.getUserById(e);if(s!=null&&s.email)try{await this.usersStore.reinviteUser({email:s.email}),this.showToast({type:"success",title:this.$locale.baseText("settings.users.inviteResent"),message:this.$locale.baseText("settings.users.emailSentTo",{interpolate:{email:s.email??""}})})}catch(n){this.showError(n,this.$locale.baseText("settings.users.userReinviteError"))}},async onCopyInviteLink(e){const s=this.usersStore.getUserById(e);s!=null&&s.inviteAcceptUrl&&(this.copyToClipboard(s.inviteAcceptUrl),this.showToast({type:"success",title:this.$locale.baseText("settings.users.inviteUrlCreated"),message:this.$locale.baseText("settings.users.inviteUrlCreated.message")}))},async onCopyPasswordResetLink(e){const s=this.usersStore.getUserById(e);if(s){const n=await this.usersStore.getUserPasswordResetLink(s);this.copyToClipboard(n.link),this.showToast({type:"success",title:this.$locale.baseText("settings.users.passwordResetUrlCreated"),message:this.$locale.baseText("settings.users.passwordResetUrlCreated.message")})}},async onAllowSSOManualLogin(e){const s=this.usersStore.getUserById(e);s&&(s.settings||(s.settings={}),s.settings.allowSSOManualLogin=!0,await this.usersStore.updateOtherUserSettings(e,s.settings),this.showToast({type:"success",title:this.$locale.baseText("settings.users.allowSSOManualLogin"),message:this.$locale.baseText("settings.users.allowSSOManualLogin.message")}))},async onDisallowSSOManualLogin(e){const s=this.usersStore.getUserById(e);s!=null&&s.settings&&(s.settings.allowSSOManualLogin=!1,await this.usersStore.updateOtherUserSettings(e,s.settings),this.showToast({type:"success",title:this.$locale.baseText("settings.users.disallowSSOManualLogin"),message:this.$locale.baseText("settings.users.disallowSSOManualLogin.message")}))},goToUpgrade(){this.uiStore.goToUpgrade("settings-users","upgrade-users")},async onRoleChange(e,s){await this.usersStore.updateRole({id:e.id,role:{scope:"global",name:s}})}}}),_="_container_n5y84_5",A="_usersContainer_n5y84_13",D="_buttonContainer_n5y84_17",P="_setupInfoContainer_n5y84_23",N="_alert_n5y84_27",V={container:_,usersContainer:A,buttonContainer:D,setupInfoContainer:P,alert:N};function x(e,s,n,z,K,W){const d=t("n8n-heading"),m=t("n8n-button"),h=t("n8n-tooltip"),b=t("n8n-action-box"),w=t("n8n-users-list");return i(),a("div",{class:r(e.$style.container)},[l("div",null,[o(d,{size:"2xlarge"},{default:u(()=>[E(S(e.$locale.baseText("settings.users")),1)]),_:1}),e.showUMSetupWarning?g("",!0):(i(),a("div",{key:0,class:r(e.$style.buttonContainer)},[o(h,{disabled:!e.ssoStore.isSamlLoginEnabled},{content:u(()=>[l("span",null,S(e.$locale.baseText("settings.users.invite.tooltip")),1)]),default:u(()=>[l("div",null,[o(m,{disabled:e.ssoStore.isSamlLoginEnabled||!e.settingsStore.isBelowUserQuota,label:e.$locale.baseText("settings.users.invite"),onClick:e.onInvite,size:"large","data-test-id":"settings-users-invite-button"},null,8,["disabled","label","onClick"])])]),_:1},8,["disabled"])],2))]),e.settingsStore.isBelowUserQuota?g("",!0):(i(),a("div",{key:0,class:r(e.$style.setupInfoContainer)},[o(b,{heading:e.$locale.baseText(e.uiStore.contextBasedTranslationKeys.users.settings.unavailable.title),description:e.$locale.baseText(e.uiStore.contextBasedTranslationKeys.users.settings.unavailable.description),buttonText:e.$locale.baseText(e.uiStore.contextBasedTranslationKeys.users.settings.unavailable.button),"onClick:button":e.goToUpgrade},null,8,["heading","description","buttonText","onClick:button"])],2)),e.settingsStore.isBelowUserQuota||e.usersStore.allUsers.length>1?(i(),a("div",{key:1,class:r(e.$style.usersContainer)},[o(w,{actions:e.usersListActions,users:e.usersStore.allUsers,currentUserId:e.usersStore.currentUserId,isSamlLoginEnabled:e.ssoStore.isSamlLoginEnabled,onDelete:e.onDelete,onReinvite:e.onReinvite,onCopyInviteLink:e.onCopyInviteLink,onCopyPasswordResetLink:e.onCopyPasswordResetLink,onAllowSSOManualLogin:e.onAllowSSOManualLogin,onDisallowSSOManualLogin:e.onDisallowSSOManualLogin},null,8,["actions","users","currentUserId","isSamlLoginEnabled","onDelete","onReinvite","onCopyInviteLink","onCopyPasswordResetLink","onAllowSSOManualLogin","onDisallowSSOManualLogin"])],2)):g("",!0)],2)}const Q={$style:V},Ue=M(B,[["render",x],["__cssModules",Q]]);export{Ue as default};
2
+ //# sourceMappingURL=SettingsUsersView-BP40GKuA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsUsersView-4PoSbZc_.js","sources":["../../src/views/SettingsUsersView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div>\n\t\t\t<n8n-heading size=\"2xlarge\">{{ $locale.baseText('settings.users') }}</n8n-heading>\n\t\t\t<div :class=\"$style.buttonContainer\" v-if=\"!showUMSetupWarning\">\n\t\t\t\t<n8n-tooltip :disabled=\"!ssoStore.isSamlLoginEnabled\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<span> {{ $locale.baseText('settings.users.invite.tooltip') }} </span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t:disabled=\"ssoStore.isSamlLoginEnabled || !settingsStore.isBelowUserQuota\"\n\t\t\t\t\t\t\t:label=\"$locale.baseText('settings.users.invite')\"\n\t\t\t\t\t\t\t@click=\"onInvite\"\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\tdata-test-id=\"settings-users-invite-button\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"!settingsStore.isBelowUserQuota\" :class=\"$style.setupInfoContainer\">\n\t\t\t<n8n-action-box\n\t\t\t\t:heading=\"\n\t\t\t\t\t$locale.baseText(uiStore.contextBasedTranslationKeys.users.settings.unavailable.title)\n\t\t\t\t\"\n\t\t\t\t:description=\"\n\t\t\t\t\t$locale.baseText(\n\t\t\t\t\t\tuiStore.contextBasedTranslationKeys.users.settings.unavailable.description,\n\t\t\t\t\t)\n\t\t\t\t\"\n\t\t\t\t:buttonText=\"\n\t\t\t\t\t$locale.baseText(uiStore.contextBasedTranslationKeys.users.settings.unavailable.button)\n\t\t\t\t\"\n\t\t\t\t@click:button=\"goToUpgrade\"\n\t\t\t/>\n\t\t</div>\n\t\t<!-- If there's more than 1 user it means the account quota was more than 1 in the past. So we need to allow instance owner to be able to delete users and transfer workflows.\n\t\t-->\n\t\t<div\n\t\t\t:class=\"$style.usersContainer\"\n\t\t\tv-if=\"settingsStore.isBelowUserQuota || usersStore.allUsers.length > 1\"\n\t\t>\n\t\t\t<n8n-users-list\n\t\t\t\t:actions=\"usersListActions\"\n\t\t\t\t:users=\"usersStore.allUsers\"\n\t\t\t\t:currentUserId=\"usersStore.currentUserId\"\n\t\t\t\t:isSamlLoginEnabled=\"ssoStore.isSamlLoginEnabled\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@reinvite=\"onReinvite\"\n\t\t\t\t@copyInviteLink=\"onCopyInviteLink\"\n\t\t\t\t@copyPasswordResetLink=\"onCopyPasswordResetLink\"\n\t\t\t\t@allowSSOManualLogin=\"onAllowSSOManualLogin\"\n\t\t\t\t@disallowSSOManualLogin=\"onDisallowSSOManualLogin\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { EnterpriseEditionFeature, INVITE_USER_MODAL_KEY, VIEWS } from '@/constants';\n\nimport type { IRole, IUser, IUserListAction } from '@/Interface';\nimport { useToast } from '@/composables/useToast';\nimport { copyPaste } from '@/mixins/copyPaste';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useUsageStore } from '@/stores/usage.store';\nimport { useSSOStore } from '@/stores/sso.store';\nimport { hasPermission } from '@/rbac/permissions';\nimport { ROLE } from '@/utils/userUtils';\n\nexport default defineComponent({\n\tname: 'SettingsUsersView',\n\tmixins: [copyPaste],\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tasync mounted() {\n\t\tif (!this.showUMSetupWarning) {\n\t\t\tawait this.usersStore.fetchUsers();\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapStores(useSettingsStore, useUIStore, useUsersStore, useUsageStore, useSSOStore),\n\t\tisSharingEnabled() {\n\t\t\treturn this.settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.Sharing);\n\t\t},\n\t\tshowUMSetupWarning() {\n\t\t\treturn hasPermission(['defaultUser']);\n\t\t},\n\t\tusersListActions(): IUserListAction[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.copyInviteLink'),\n\t\t\t\t\tvalue: 'copyInviteLink',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isBelowUserQuota && !user.firstName && !!user.inviteAcceptUrl,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.reinvite'),\n\t\t\t\t\tvalue: 'reinvite',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isBelowUserQuota &&\n\t\t\t\t\t\t!user.firstName &&\n\t\t\t\t\t\tthis.settingsStore.isSmtpSetup,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.delete'),\n\t\t\t\t\tvalue: 'delete',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.copyPasswordResetLink'),\n\t\t\t\t\tvalue: 'copyPasswordResetLink',\n\t\t\t\t\tguard: () => this.settingsStore.isBelowUserQuota,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.allowSSOManualLogin'),\n\t\t\t\t\tvalue: 'allowSSOManualLogin',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isSamlLoginEnabled && !user.settings?.allowSSOManualLogin,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.disallowSSOManualLogin'),\n\t\t\t\t\tvalue: 'disallowSSOManualLogin',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isSamlLoginEnabled && user.settings?.allowSSOManualLogin === true,\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tuserRoles(): Array<{ value: IRole; label: string }> {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: ROLE.Member,\n\t\t\t\t\tlabel: this.$locale.baseText('auth.roles.member'),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ROLE.Admin,\n\t\t\t\t\tlabel: this.$locale.baseText('auth.roles.admin'),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tcanUpdateRole(): boolean {\n\t\t\treturn hasPermission(['rbac'], { rbac: { scope: 'user:update' } });\n\t\t},\n\t},\n\tmethods: {\n\t\tredirectToSetup() {\n\t\t\tvoid this.$router.push({ name: VIEWS.SETUP });\n\t\t},\n\t\tonInvite() {\n\t\t\tthis.uiStore.openModal(INVITE_USER_MODAL_KEY);\n\t\t},\n\t\tasync onDelete(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user) {\n\t\t\t\tthis.uiStore.openDeleteUserModal(userId);\n\t\t\t}\n\t\t},\n\t\tasync onReinvite(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user?.email) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.usersStore.reinviteUser({ email: user.email });\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\ttitle: this.$locale.baseText('settings.users.inviteResent'),\n\t\t\t\t\t\tmessage: this.$locale.baseText('settings.users.emailSentTo', {\n\t\t\t\t\t\t\tinterpolate: { email: user.email ?? '' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthis.showError(e, this.$locale.baseText('settings.users.userReinviteError'));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync onCopyInviteLink(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user?.inviteAcceptUrl) {\n\t\t\t\tthis.copyToClipboard(user.inviteAcceptUrl);\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.inviteUrlCreated'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.inviteUrlCreated.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onCopyPasswordResetLink(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user) {\n\t\t\t\tconst url = await this.usersStore.getUserPasswordResetLink(user);\n\t\t\t\tthis.copyToClipboard(url.link);\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.passwordResetUrlCreated'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.passwordResetUrlCreated.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onAllowSSOManualLogin(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user) {\n\t\t\t\tif (!user.settings) {\n\t\t\t\t\tuser.settings = {};\n\t\t\t\t}\n\t\t\t\tuser.settings.allowSSOManualLogin = true;\n\t\t\t\tawait this.usersStore.updateOtherUserSettings(userId, user.settings);\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.allowSSOManualLogin'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.allowSSOManualLogin.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onDisallowSSOManualLogin(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user?.settings) {\n\t\t\t\tuser.settings.allowSSOManualLogin = false;\n\t\t\t\tawait this.usersStore.updateOtherUserSettings(userId, user.settings);\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.disallowSSOManualLogin'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.disallowSSOManualLogin.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgoToUpgrade() {\n\t\t\tvoid this.uiStore.goToUpgrade('settings-users', 'upgrade-users');\n\t\t},\n\t\tasync onRoleChange(user: IUser, name: IRole) {\n\t\t\tawait this.usersStore.updateRole({ id: user.id, role: { scope: 'global', name } });\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\theight: 100%;\n\tpadding-right: var(--spacing-2xs);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xl);\n\t}\n}\n\n.usersContainer {\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.buttonContainer {\n\tdisplay: inline-block;\n\tfloat: right;\n\tmargin-bottom: var(--spacing-l);\n}\n\n.setupInfoContainer {\n\tmax-width: 728px;\n}\n\n.alert {\n\tleft: calc(50% + 100px);\n}\n</style>\n"],"names":["_sfc_main","defineComponent","copyPaste","useToast","mapStores","useSettingsStore","useUIStore","useUsersStore","useUsageStore","useSSOStore","EnterpriseEditionFeature","hasPermission","user","_a","ROLE","VIEWS","INVITE_USER_MODAL_KEY","userId","e","url","name","_resolveComponent","_normalizeClass","_ctx","_createElementVNode","_createVNode","_component_n8n_heading","_withCtx","_createCommentVNode","_openBlock","_createElementBlock","_toDisplayString","_component_n8n_button","_component_n8n_action_box","_component_n8n_users_list"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsUsersView-BP40GKuA.js","sources":["../../src/views/SettingsUsersView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div>\n\t\t\t<n8n-heading size=\"2xlarge\">{{ $locale.baseText('settings.users') }}</n8n-heading>\n\t\t\t<div :class=\"$style.buttonContainer\" v-if=\"!showUMSetupWarning\">\n\t\t\t\t<n8n-tooltip :disabled=\"!ssoStore.isSamlLoginEnabled\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<span> {{ $locale.baseText('settings.users.invite.tooltip') }} </span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t:disabled=\"ssoStore.isSamlLoginEnabled || !settingsStore.isBelowUserQuota\"\n\t\t\t\t\t\t\t:label=\"$locale.baseText('settings.users.invite')\"\n\t\t\t\t\t\t\t@click=\"onInvite\"\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\tdata-test-id=\"settings-users-invite-button\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"!settingsStore.isBelowUserQuota\" :class=\"$style.setupInfoContainer\">\n\t\t\t<n8n-action-box\n\t\t\t\t:heading=\"\n\t\t\t\t\t$locale.baseText(uiStore.contextBasedTranslationKeys.users.settings.unavailable.title)\n\t\t\t\t\"\n\t\t\t\t:description=\"\n\t\t\t\t\t$locale.baseText(\n\t\t\t\t\t\tuiStore.contextBasedTranslationKeys.users.settings.unavailable.description,\n\t\t\t\t\t)\n\t\t\t\t\"\n\t\t\t\t:buttonText=\"\n\t\t\t\t\t$locale.baseText(uiStore.contextBasedTranslationKeys.users.settings.unavailable.button)\n\t\t\t\t\"\n\t\t\t\t@click:button=\"goToUpgrade\"\n\t\t\t/>\n\t\t</div>\n\t\t<!-- If there's more than 1 user it means the account quota was more than 1 in the past. So we need to allow instance owner to be able to delete users and transfer workflows.\n\t\t-->\n\t\t<div\n\t\t\t:class=\"$style.usersContainer\"\n\t\t\tv-if=\"settingsStore.isBelowUserQuota || usersStore.allUsers.length > 1\"\n\t\t>\n\t\t\t<n8n-users-list\n\t\t\t\t:actions=\"usersListActions\"\n\t\t\t\t:users=\"usersStore.allUsers\"\n\t\t\t\t:currentUserId=\"usersStore.currentUserId\"\n\t\t\t\t:isSamlLoginEnabled=\"ssoStore.isSamlLoginEnabled\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@reinvite=\"onReinvite\"\n\t\t\t\t@copyInviteLink=\"onCopyInviteLink\"\n\t\t\t\t@copyPasswordResetLink=\"onCopyPasswordResetLink\"\n\t\t\t\t@allowSSOManualLogin=\"onAllowSSOManualLogin\"\n\t\t\t\t@disallowSSOManualLogin=\"onDisallowSSOManualLogin\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { EnterpriseEditionFeature, INVITE_USER_MODAL_KEY, VIEWS } from '@/constants';\n\nimport type { IRole, IUser, IUserListAction } from '@/Interface';\nimport { useToast } from '@/composables/useToast';\nimport { copyPaste } from '@/mixins/copyPaste';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useUsageStore } from '@/stores/usage.store';\nimport { useSSOStore } from '@/stores/sso.store';\nimport { hasPermission } from '@/rbac/permissions';\nimport { ROLE } from '@/utils/userUtils';\n\nexport default defineComponent({\n\tname: 'SettingsUsersView',\n\tmixins: [copyPaste],\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tasync mounted() {\n\t\tif (!this.showUMSetupWarning) {\n\t\t\tawait this.usersStore.fetchUsers();\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapStores(useSettingsStore, useUIStore, useUsersStore, useUsageStore, useSSOStore),\n\t\tisSharingEnabled() {\n\t\t\treturn this.settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.Sharing);\n\t\t},\n\t\tshowUMSetupWarning() {\n\t\t\treturn hasPermission(['defaultUser']);\n\t\t},\n\t\tusersListActions(): IUserListAction[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.copyInviteLink'),\n\t\t\t\t\tvalue: 'copyInviteLink',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isBelowUserQuota && !user.firstName && !!user.inviteAcceptUrl,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.reinvite'),\n\t\t\t\t\tvalue: 'reinvite',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isBelowUserQuota &&\n\t\t\t\t\t\t!user.firstName &&\n\t\t\t\t\t\tthis.settingsStore.isSmtpSetup,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.delete'),\n\t\t\t\t\tvalue: 'delete',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.copyPasswordResetLink'),\n\t\t\t\t\tvalue: 'copyPasswordResetLink',\n\t\t\t\t\tguard: () => this.settingsStore.isBelowUserQuota,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.allowSSOManualLogin'),\n\t\t\t\t\tvalue: 'allowSSOManualLogin',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isSamlLoginEnabled && !user.settings?.allowSSOManualLogin,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users.actions.disallowSSOManualLogin'),\n\t\t\t\t\tvalue: 'disallowSSOManualLogin',\n\t\t\t\t\tguard: (user) =>\n\t\t\t\t\t\tthis.settingsStore.isSamlLoginEnabled && user.settings?.allowSSOManualLogin === true,\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tuserRoles(): Array<{ value: IRole; label: string }> {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tvalue: ROLE.Member,\n\t\t\t\t\tlabel: this.$locale.baseText('auth.roles.member'),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tvalue: ROLE.Admin,\n\t\t\t\t\tlabel: this.$locale.baseText('auth.roles.admin'),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\tcanUpdateRole(): boolean {\n\t\t\treturn hasPermission(['rbac'], { rbac: { scope: 'user:update' } });\n\t\t},\n\t},\n\tmethods: {\n\t\tredirectToSetup() {\n\t\t\tvoid this.$router.push({ name: VIEWS.SETUP });\n\t\t},\n\t\tonInvite() {\n\t\t\tthis.uiStore.openModal(INVITE_USER_MODAL_KEY);\n\t\t},\n\t\tasync onDelete(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user) {\n\t\t\t\tthis.uiStore.openDeleteUserModal(userId);\n\t\t\t}\n\t\t},\n\t\tasync onReinvite(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user?.email) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.usersStore.reinviteUser({ email: user.email });\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\ttitle: this.$locale.baseText('settings.users.inviteResent'),\n\t\t\t\t\t\tmessage: this.$locale.baseText('settings.users.emailSentTo', {\n\t\t\t\t\t\t\tinterpolate: { email: user.email ?? '' },\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthis.showError(e, this.$locale.baseText('settings.users.userReinviteError'));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tasync onCopyInviteLink(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user?.inviteAcceptUrl) {\n\t\t\t\tthis.copyToClipboard(user.inviteAcceptUrl);\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.inviteUrlCreated'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.inviteUrlCreated.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onCopyPasswordResetLink(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user) {\n\t\t\t\tconst url = await this.usersStore.getUserPasswordResetLink(user);\n\t\t\t\tthis.copyToClipboard(url.link);\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.passwordResetUrlCreated'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.passwordResetUrlCreated.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onAllowSSOManualLogin(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user) {\n\t\t\t\tif (!user.settings) {\n\t\t\t\t\tuser.settings = {};\n\t\t\t\t}\n\t\t\t\tuser.settings.allowSSOManualLogin = true;\n\t\t\t\tawait this.usersStore.updateOtherUserSettings(userId, user.settings);\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.allowSSOManualLogin'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.allowSSOManualLogin.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tasync onDisallowSSOManualLogin(userId: string) {\n\t\t\tconst user = this.usersStore.getUserById(userId);\n\t\t\tif (user?.settings) {\n\t\t\t\tuser.settings.allowSSOManualLogin = false;\n\t\t\t\tawait this.usersStore.updateOtherUserSettings(userId, user.settings);\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\ttitle: this.$locale.baseText('settings.users.disallowSSOManualLogin'),\n\t\t\t\t\tmessage: this.$locale.baseText('settings.users.disallowSSOManualLogin.message'),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgoToUpgrade() {\n\t\t\tvoid this.uiStore.goToUpgrade('settings-users', 'upgrade-users');\n\t\t},\n\t\tasync onRoleChange(user: IUser, name: IRole) {\n\t\t\tawait this.usersStore.updateRole({ id: user.id, role: { scope: 'global', name } });\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\theight: 100%;\n\tpadding-right: var(--spacing-2xs);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xl);\n\t}\n}\n\n.usersContainer {\n\t> * {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t}\n}\n\n.buttonContainer {\n\tdisplay: inline-block;\n\tfloat: right;\n\tmargin-bottom: var(--spacing-l);\n}\n\n.setupInfoContainer {\n\tmax-width: 728px;\n}\n\n.alert {\n\tleft: calc(50% + 100px);\n}\n</style>\n"],"names":["_sfc_main","defineComponent","copyPaste","useToast","mapStores","useSettingsStore","useUIStore","useUsersStore","useUsageStore","useSSOStore","EnterpriseEditionFeature","hasPermission","user","_a","ROLE","VIEWS","INVITE_USER_MODAL_KEY","userId","e","url","name","_resolveComponent","_normalizeClass","_ctx","_createElementVNode","_createVNode","_component_n8n_heading","_withCtx","_createCommentVNode","_openBlock","_createElementBlock","_toDisplayString","_component_n8n_button","_component_n8n_action_box","_component_n8n_users_list"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{l as b,t as A,v,B as e,A as O,V as $,_ as g}from"./n8n-NE7NqrvB.js";import{m as I}from"./pinia-IhuTtYiV.js";import{h as C}from"./index-hMVAffQ3.js";import{G as d,ag as n,l as T,m as _,T as a,O as r,p as o,S as p,R as m,I as i,K as G}from"./vendor-2CfOYFi2.js";import"./lodash-es-s_m9YyW7.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-viEZCtbZ.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";import"./uuid-McvpxQtQ.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.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-QL7QI0sV.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";const U=d({name:"SettingsSidebar",mixins:[C],computed:{...I(v,A,b),settingsFakeDoorFeatures(){return this.uiStore.getFakeDoorByLocation("settings")},sidebarMenuItems(){const t=[{id:"settings-usage-and-plan",icon:"chart-bar",label:this.$locale.baseText("settings.usageAndPlan.title"),position:"top",available:this.canAccessUsageAndPlan(),activateOnRouteNames:[e.USAGE]},{id:"settings-personal",icon:"user-circle",label:this.$locale.baseText("settings.personal"),position:"top",available:this.canAccessPersonalSettings(),activateOnRouteNames:[e.PERSONAL_SETTINGS]},{id:"settings-users",icon:"user-friends",label:this.$locale.baseText("settings.users"),position:"top",available:this.canAccessUsersSettings(),activateOnRouteNames:[e.USERS_SETTINGS]},{id:"settings-api",icon:"plug",label:this.$locale.baseText("settings.n8napi"),position:"top",available:this.canAccessApiSettings(),activateOnRouteNames:[e.API_SETTINGS]},{id:"settings-external-secrets",icon:"vault",label:this.$locale.baseText("settings.externalSecrets.title"),position:"top",available:this.canAccessExternalSecrets(),activateOnRouteNames:[e.EXTERNAL_SECRETS_SETTINGS,e.EXTERNAL_SECRETS_PROVIDER_SETTINGS]},{id:"settings-audit-logs",icon:"clipboard-list",label:this.$locale.baseText("settings.auditLogs.title"),position:"top",available:this.canAccessAuditLogs(),activateOnRouteNames:[e.AUDIT_LOGS]},{id:"settings-source-control",icon:"code-branch",label:this.$locale.baseText("settings.sourceControl.title"),position:"top",available:this.canAccessSourceControl(),activateOnRouteNames:[e.SOURCE_CONTROL]},{id:"settings-sso",icon:"user-lock",label:this.$locale.baseText("settings.sso"),position:"top",available:this.canAccessSso(),activateOnRouteNames:[e.SSO_SETTINGS]},{id:"settings-ldap",icon:"network-wired",label:this.$locale.baseText("settings.ldap"),position:"top",available:this.canAccessLdapSettings(),activateOnRouteNames:[e.LDAP_SETTINGS]},{id:"settings-workersview",icon:"project-diagram",label:this.$locale.baseText("mainSidebar.workersView"),position:"top",available:this.settingsStore.isQueueModeEnabled&&this.settingsStore.isWorkerViewAvailable,activateOnRouteNames:[e.WORKER_VIEW]}];for(const s of this.settingsFakeDoorFeatures)s.uiLocations.includes("settings")&&t.push({id:s.id,icon:s.icon||"question",label:this.$locale.baseText(s.featureName),position:"top",available:!0,activateOnRoutePaths:[`/settings/coming-soon/${s.id}`]});return t.push({id:"settings-log-streaming",icon:"sign-in-alt",label:this.$locale.baseText("settings.log-streaming"),position:"top",available:this.canAccessLogStreamingSettings(),activateOnRouteNames:[e.LOG_STREAMING_SETTINGS]}),t.push({id:"settings-community-nodes",icon:"cube",label:this.$locale.baseText("settings.communityNodes"),position:"top",available:this.canAccessCommunityNodes(),activateOnRouteNames:[e.COMMUNITY_NODES]}),t}},methods:{canAccessPersonalSettings(){return this.canUserAccessRouteByName(e.PERSONAL_SETTINGS)},canAccessUsersSettings(){return this.canUserAccessRouteByName(e.USERS_SETTINGS)},canAccessCommunityNodes(){return this.canUserAccessRouteByName(e.COMMUNITY_NODES)},canAccessApiSettings(){return this.canUserAccessRouteByName(e.API_SETTINGS)},canAccessLdapSettings(){return this.canUserAccessRouteByName(e.LDAP_SETTINGS)},canAccessLogStreamingSettings(){return this.canUserAccessRouteByName(e.LOG_STREAMING_SETTINGS)},canAccessUsageAndPlan(){return this.canUserAccessRouteByName(e.USAGE)},canAccessExternalSecrets(){return this.canUserAccessRouteByName(e.EXTERNAL_SECRETS_SETTINGS)},canAccessSourceControl(){return this.canUserAccessRouteByName(e.SOURCE_CONTROL)},canAccessAuditLogs(){return this.canUserAccessRouteByName(e.AUDIT_LOGS)},canAccessSso(){return this.canUserAccessRouteByName(e.SSO_SETTINGS)},onVersionClick(){this.uiStore.openModal(O)},openUpdatesPanel(){this.uiStore.openModal($)},async navigateTo(t){this.$router.currentRoute.name!==t&&await this.$router.push({name:t})},async handleSelect(t){switch(t){case"settings-personal":await this.navigateTo(e.PERSONAL_SETTINGS);break;case"settings-users":await this.navigateTo(e.USERS_SETTINGS);break;case"settings-api":await this.navigateTo(e.API_SETTINGS);break;case"settings-ldap":await this.navigateTo(e.LDAP_SETTINGS);break;case"settings-log-streaming":await this.navigateTo(e.LOG_STREAMING_SETTINGS);break;case"users":case"logging":this.$router.push({name:e.FAKE_DOOR,params:{featureId:t}}).catch(()=>{});break;case"settings-community-nodes":await this.navigateTo(e.COMMUNITY_NODES);break;case"settings-usage-and-plan":await this.navigateTo(e.USAGE);break;case"settings-sso":await this.navigateTo(e.SSO_SETTINGS);break;case"settings-external-secrets":await this.navigateTo(e.EXTERNAL_SECRETS_SETTINGS);break;case"settings-source-control":this.$router.currentRoute.name!==e.SOURCE_CONTROL&&this.$router.push({name:e.SOURCE_CONTROL});break;case"settings-audit-logs":this.$router.currentRoute.name!==e.AUDIT_LOGS&&this.$router.push({name:e.AUDIT_LOGS});break;case"settings-workersview":{await this.navigateTo(e.WORKER_VIEW);break}}}}}),f="_container_1ljnu_5",L="_returnButton_1ljnu_14",k="_versionContainer_1ljnu_22",w={container:f,returnButton:L,versionContainer:k},y={class:"mr-xs"};function B(t,s,c,l,h,E){const u=n("font-awesome-icon"),S=n("n8n-heading"),N=n("n8n-link"),R=n("n8n-menu");return T(),_("div",{class:i(t.$style.container)},[a(R,{items:t.sidebarMenuItems,onSelect:t.handleSelect},{header:r(()=>[o("div",{class:i(t.$style.returnButton),onClick:s[0]||(s[0]=X=>t.$emit("return")),"data-test-id":"settings-back"},[o("i",y,[a(u,{icon:"arrow-left"})]),a(S,{size:"large",bold:!0},{default:r(()=>[p(m(t.$locale.baseText("settings")),1)]),_:1})],2)]),menuSuffix:r(()=>[o("div",{class:i(t.$style.versionContainer)},[a(N,{onClick:t.onVersionClick,size:"small"},{default:r(()=>[p(m(t.$locale.baseText("settings.version"))+" "+m(t.rootStore.versionCli),1)]),_:1},8,["onClick"])],2)]),_:1},8,["items","onSelect"])],2)}const M={$style:w},P=g(U,[["render",B],["__cssModules",M]]),D=d({name:"SettingsView",components:{SettingsSidebar:P},beforeRouteEnter(t,s,c){c(l=>{l.previousRoute=s})},data(){return{previousRoute:null}},methods:{onReturn(){this.$router.push(this.previousRoute?this.previousRoute.path:{name:e.HOMEPAGE})}}}),V=D,x="_container_f1dvd_5",F="_contentContainer_f1dvd_12 _container_f1dvd_5",K="_content_f1dvd_12",W={container:x,contentContainer:F,content:K};function Y(t,s,c,l,h,E){const u=n("SettingsSidebar"),S=n("router-view");return T(),_("div",{class:i(t.$style.container)},[a(u,{onReturn:t.onReturn},null,8,["onReturn"]),o("div",{class:i(t.$style.contentContainer)},[o("div",{class:i(t.$style.content)},[a(S,G({name:"settingsView"},t.$attrs),null,16)],2)],2)],2)}const j={$style:W},Oe=g(V,[["render",Y],["__cssModules",j]]);export{Oe as default};
2
- //# sourceMappingURL=SettingsView-ITSZzUOy.js.map
1
+ import{l as b,t as A,v,B as e,A as O,V as $,_ as g}from"./n8n-NE7NqrvB.js";import{m as I}from"./pinia-IhuTtYiV.js";import{h as C}from"./index-sMRiWGJS.js";import{G as d,ag as n,l as T,m as _,T as a,O as r,p as o,S as p,R as m,I as i,K as G}from"./vendor-2CfOYFi2.js";import"./lodash-es-s_m9YyW7.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-viEZCtbZ.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";import"./uuid-McvpxQtQ.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.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-QL7QI0sV.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";const U=d({name:"SettingsSidebar",mixins:[C],computed:{...I(v,A,b),settingsFakeDoorFeatures(){return this.uiStore.getFakeDoorByLocation("settings")},sidebarMenuItems(){const t=[{id:"settings-usage-and-plan",icon:"chart-bar",label:this.$locale.baseText("settings.usageAndPlan.title"),position:"top",available:this.canAccessUsageAndPlan(),activateOnRouteNames:[e.USAGE]},{id:"settings-personal",icon:"user-circle",label:this.$locale.baseText("settings.personal"),position:"top",available:this.canAccessPersonalSettings(),activateOnRouteNames:[e.PERSONAL_SETTINGS]},{id:"settings-users",icon:"user-friends",label:this.$locale.baseText("settings.users"),position:"top",available:this.canAccessUsersSettings(),activateOnRouteNames:[e.USERS_SETTINGS]},{id:"settings-api",icon:"plug",label:this.$locale.baseText("settings.n8napi"),position:"top",available:this.canAccessApiSettings(),activateOnRouteNames:[e.API_SETTINGS]},{id:"settings-external-secrets",icon:"vault",label:this.$locale.baseText("settings.externalSecrets.title"),position:"top",available:this.canAccessExternalSecrets(),activateOnRouteNames:[e.EXTERNAL_SECRETS_SETTINGS,e.EXTERNAL_SECRETS_PROVIDER_SETTINGS]},{id:"settings-audit-logs",icon:"clipboard-list",label:this.$locale.baseText("settings.auditLogs.title"),position:"top",available:this.canAccessAuditLogs(),activateOnRouteNames:[e.AUDIT_LOGS]},{id:"settings-source-control",icon:"code-branch",label:this.$locale.baseText("settings.sourceControl.title"),position:"top",available:this.canAccessSourceControl(),activateOnRouteNames:[e.SOURCE_CONTROL]},{id:"settings-sso",icon:"user-lock",label:this.$locale.baseText("settings.sso"),position:"top",available:this.canAccessSso(),activateOnRouteNames:[e.SSO_SETTINGS]},{id:"settings-ldap",icon:"network-wired",label:this.$locale.baseText("settings.ldap"),position:"top",available:this.canAccessLdapSettings(),activateOnRouteNames:[e.LDAP_SETTINGS]},{id:"settings-workersview",icon:"project-diagram",label:this.$locale.baseText("mainSidebar.workersView"),position:"top",available:this.settingsStore.isQueueModeEnabled&&this.settingsStore.isWorkerViewAvailable,activateOnRouteNames:[e.WORKER_VIEW]}];for(const s of this.settingsFakeDoorFeatures)s.uiLocations.includes("settings")&&t.push({id:s.id,icon:s.icon||"question",label:this.$locale.baseText(s.featureName),position:"top",available:!0,activateOnRoutePaths:[`/settings/coming-soon/${s.id}`]});return t.push({id:"settings-log-streaming",icon:"sign-in-alt",label:this.$locale.baseText("settings.log-streaming"),position:"top",available:this.canAccessLogStreamingSettings(),activateOnRouteNames:[e.LOG_STREAMING_SETTINGS]}),t.push({id:"settings-community-nodes",icon:"cube",label:this.$locale.baseText("settings.communityNodes"),position:"top",available:this.canAccessCommunityNodes(),activateOnRouteNames:[e.COMMUNITY_NODES]}),t}},methods:{canAccessPersonalSettings(){return this.canUserAccessRouteByName(e.PERSONAL_SETTINGS)},canAccessUsersSettings(){return this.canUserAccessRouteByName(e.USERS_SETTINGS)},canAccessCommunityNodes(){return this.canUserAccessRouteByName(e.COMMUNITY_NODES)},canAccessApiSettings(){return this.canUserAccessRouteByName(e.API_SETTINGS)},canAccessLdapSettings(){return this.canUserAccessRouteByName(e.LDAP_SETTINGS)},canAccessLogStreamingSettings(){return this.canUserAccessRouteByName(e.LOG_STREAMING_SETTINGS)},canAccessUsageAndPlan(){return this.canUserAccessRouteByName(e.USAGE)},canAccessExternalSecrets(){return this.canUserAccessRouteByName(e.EXTERNAL_SECRETS_SETTINGS)},canAccessSourceControl(){return this.canUserAccessRouteByName(e.SOURCE_CONTROL)},canAccessAuditLogs(){return this.canUserAccessRouteByName(e.AUDIT_LOGS)},canAccessSso(){return this.canUserAccessRouteByName(e.SSO_SETTINGS)},onVersionClick(){this.uiStore.openModal(O)},openUpdatesPanel(){this.uiStore.openModal($)},async navigateTo(t){this.$router.currentRoute.name!==t&&await this.$router.push({name:t})},async handleSelect(t){switch(t){case"settings-personal":await this.navigateTo(e.PERSONAL_SETTINGS);break;case"settings-users":await this.navigateTo(e.USERS_SETTINGS);break;case"settings-api":await this.navigateTo(e.API_SETTINGS);break;case"settings-ldap":await this.navigateTo(e.LDAP_SETTINGS);break;case"settings-log-streaming":await this.navigateTo(e.LOG_STREAMING_SETTINGS);break;case"users":case"logging":this.$router.push({name:e.FAKE_DOOR,params:{featureId:t}}).catch(()=>{});break;case"settings-community-nodes":await this.navigateTo(e.COMMUNITY_NODES);break;case"settings-usage-and-plan":await this.navigateTo(e.USAGE);break;case"settings-sso":await this.navigateTo(e.SSO_SETTINGS);break;case"settings-external-secrets":await this.navigateTo(e.EXTERNAL_SECRETS_SETTINGS);break;case"settings-source-control":this.$router.currentRoute.name!==e.SOURCE_CONTROL&&this.$router.push({name:e.SOURCE_CONTROL});break;case"settings-audit-logs":this.$router.currentRoute.name!==e.AUDIT_LOGS&&this.$router.push({name:e.AUDIT_LOGS});break;case"settings-workersview":{await this.navigateTo(e.WORKER_VIEW);break}}}}}),f="_container_1ljnu_5",L="_returnButton_1ljnu_14",k="_versionContainer_1ljnu_22",w={container:f,returnButton:L,versionContainer:k},y={class:"mr-xs"};function B(t,s,c,l,h,E){const u=n("font-awesome-icon"),S=n("n8n-heading"),N=n("n8n-link"),R=n("n8n-menu");return T(),_("div",{class:i(t.$style.container)},[a(R,{items:t.sidebarMenuItems,onSelect:t.handleSelect},{header:r(()=>[o("div",{class:i(t.$style.returnButton),onClick:s[0]||(s[0]=X=>t.$emit("return")),"data-test-id":"settings-back"},[o("i",y,[a(u,{icon:"arrow-left"})]),a(S,{size:"large",bold:!0},{default:r(()=>[p(m(t.$locale.baseText("settings")),1)]),_:1})],2)]),menuSuffix:r(()=>[o("div",{class:i(t.$style.versionContainer)},[a(N,{onClick:t.onVersionClick,size:"small"},{default:r(()=>[p(m(t.$locale.baseText("settings.version"))+" "+m(t.rootStore.versionCli),1)]),_:1},8,["onClick"])],2)]),_:1},8,["items","onSelect"])],2)}const M={$style:w},P=g(U,[["render",B],["__cssModules",M]]),D=d({name:"SettingsView",components:{SettingsSidebar:P},beforeRouteEnter(t,s,c){c(l=>{l.previousRoute=s})},data(){return{previousRoute:null}},methods:{onReturn(){this.$router.push(this.previousRoute?this.previousRoute.path:{name:e.HOMEPAGE})}}}),V=D,x="_container_f1dvd_5",F="_contentContainer_f1dvd_12 _container_f1dvd_5",K="_content_f1dvd_12",W={container:x,contentContainer:F,content:K};function Y(t,s,c,l,h,E){const u=n("SettingsSidebar"),S=n("router-view");return T(),_("div",{class:i(t.$style.container)},[a(u,{onReturn:t.onReturn},null,8,["onReturn"]),o("div",{class:i(t.$style.contentContainer)},[o("div",{class:i(t.$style.content)},[a(S,G({name:"settingsView"},t.$attrs),null,16)],2)],2)],2)}const j={$style:W},Oe=g(V,[["render",Y],["__cssModules",j]]);export{Oe as default};
2
+ //# sourceMappingURL=SettingsView-UI5wnO8B.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsView-ITSZzUOy.js","sources":["../../src/components/SettingsSidebar.vue","../../src/views/SettingsView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<n8n-menu :items=\"sidebarMenuItems\" @select=\"handleSelect\">\n\t\t\t<template #header>\n\t\t\t\t<div :class=\"$style.returnButton\" @click=\"$emit('return')\" data-test-id=\"settings-back\">\n\t\t\t\t\t<i class=\"mr-xs\">\n\t\t\t\t\t\t<font-awesome-icon icon=\"arrow-left\" />\n\t\t\t\t\t</i>\n\t\t\t\t\t<n8n-heading size=\"large\" :bold=\"true\">{{ $locale.baseText('settings') }}</n8n-heading>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template #menuSuffix>\n\t\t\t\t<div :class=\"$style.versionContainer\">\n\t\t\t\t\t<n8n-link @click=\"onVersionClick\" size=\"small\">\n\t\t\t\t\t\t{{ $locale.baseText('settings.version') }} {{ rootStore.versionCli }}\n\t\t\t\t\t</n8n-link>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</n8n-menu>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { ABOUT_MODAL_KEY, VERSIONS_MODAL_KEY, VIEWS } from '@/constants';\nimport { userHelpers } from '@/mixins/userHelpers';\nimport type { IFakeDoor } from '@/Interface';\nimport type { IMenuItem } from 'n8n-design-system';\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nexport default defineComponent({\n\tname: 'SettingsSidebar',\n\tmixins: [userHelpers],\n\tcomputed: {\n\t\t...mapStores(useRootStore, useSettingsStore, useUIStore),\n\t\tsettingsFakeDoorFeatures(): IFakeDoor[] {\n\t\t\treturn this.uiStore.getFakeDoorByLocation('settings');\n\t\t},\n\t\tsidebarMenuItems(): IMenuItem[] {\n\t\t\tconst menuItems: IMenuItem[] = [\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-usage-and-plan',\n\t\t\t\t\ticon: 'chart-bar',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.usageAndPlan.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessUsageAndPlan(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.USAGE],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-personal',\n\t\t\t\t\ticon: 'user-circle',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.personal'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessPersonalSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.PERSONAL_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-users',\n\t\t\t\t\ticon: 'user-friends',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessUsersSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.USERS_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-api',\n\t\t\t\t\ticon: 'plug',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.n8napi'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessApiSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.API_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-external-secrets',\n\t\t\t\t\ticon: 'vault',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.externalSecrets.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessExternalSecrets(),\n\t\t\t\t\tactivateOnRouteNames: [\n\t\t\t\t\t\tVIEWS.EXTERNAL_SECRETS_SETTINGS,\n\t\t\t\t\t\tVIEWS.EXTERNAL_SECRETS_PROVIDER_SETTINGS,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-audit-logs',\n\t\t\t\t\ticon: 'clipboard-list',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.auditLogs.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessAuditLogs(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.AUDIT_LOGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-source-control',\n\t\t\t\t\ticon: 'code-branch',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.sourceControl.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessSourceControl(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.SOURCE_CONTROL],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-sso',\n\t\t\t\t\ticon: 'user-lock',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.sso'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessSso(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.SSO_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-ldap',\n\t\t\t\t\ticon: 'network-wired',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.ldap'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessLdapSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.LDAP_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-workersview',\n\t\t\t\t\ticon: 'project-diagram',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.workersView'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable:\n\t\t\t\t\t\tthis.settingsStore.isQueueModeEnabled && this.settingsStore.isWorkerViewAvailable,\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.WORKER_VIEW],\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tfor (const item of this.settingsFakeDoorFeatures) {\n\t\t\t\tif (item.uiLocations.includes('settings')) {\n\t\t\t\t\tmenuItems.push({\n\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\ticon: item.icon || 'question',\n\t\t\t\t\t\tlabel: this.$locale.baseText(item.featureName as BaseTextKey),\n\t\t\t\t\t\tposition: 'top',\n\t\t\t\t\t\tavailable: true,\n\t\t\t\t\t\tactivateOnRoutePaths: [`/settings/coming-soon/${item.id}`],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmenuItems.push({\n\t\t\t\tid: 'settings-log-streaming',\n\t\t\t\ticon: 'sign-in-alt',\n\t\t\t\tlabel: this.$locale.baseText('settings.log-streaming'),\n\t\t\t\tposition: 'top',\n\t\t\t\tavailable: this.canAccessLogStreamingSettings(),\n\t\t\t\tactivateOnRouteNames: [VIEWS.LOG_STREAMING_SETTINGS],\n\t\t\t});\n\n\t\t\tmenuItems.push({\n\t\t\t\tid: 'settings-community-nodes',\n\t\t\t\ticon: 'cube',\n\t\t\t\tlabel: this.$locale.baseText('settings.communityNodes'),\n\t\t\t\tposition: 'top',\n\t\t\t\tavailable: this.canAccessCommunityNodes(),\n\t\t\t\tactivateOnRouteNames: [VIEWS.COMMUNITY_NODES],\n\t\t\t});\n\n\t\t\treturn menuItems;\n\t\t},\n\t},\n\tmethods: {\n\t\tcanAccessPersonalSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.PERSONAL_SETTINGS);\n\t\t},\n\t\tcanAccessUsersSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.USERS_SETTINGS);\n\t\t},\n\t\tcanAccessCommunityNodes(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.COMMUNITY_NODES);\n\t\t},\n\t\tcanAccessApiSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.API_SETTINGS);\n\t\t},\n\t\tcanAccessLdapSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.LDAP_SETTINGS);\n\t\t},\n\t\tcanAccessLogStreamingSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.LOG_STREAMING_SETTINGS);\n\t\t},\n\t\tcanAccessUsageAndPlan(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.USAGE);\n\t\t},\n\t\tcanAccessExternalSecrets(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.EXTERNAL_SECRETS_SETTINGS);\n\t\t},\n\t\tcanAccessSourceControl(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.SOURCE_CONTROL);\n\t\t},\n\t\tcanAccessAuditLogs(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.AUDIT_LOGS);\n\t\t},\n\t\tcanAccessSso(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.SSO_SETTINGS);\n\t\t},\n\t\tonVersionClick() {\n\t\t\tthis.uiStore.openModal(ABOUT_MODAL_KEY);\n\t\t},\n\t\topenUpdatesPanel() {\n\t\t\tthis.uiStore.openModal(VERSIONS_MODAL_KEY);\n\t\t},\n\t\tasync navigateTo(routeName: (typeof VIEWS)[keyof typeof VIEWS]) {\n\t\t\tif (this.$router.currentRoute.name !== routeName) {\n\t\t\t\tawait this.$router.push({ name: routeName });\n\t\t\t}\n\t\t},\n\t\tasync handleSelect(key: string) {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'settings-personal':\n\t\t\t\t\tawait this.navigateTo(VIEWS.PERSONAL_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-users':\n\t\t\t\t\tawait this.navigateTo(VIEWS.USERS_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-api':\n\t\t\t\t\tawait this.navigateTo(VIEWS.API_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-ldap':\n\t\t\t\t\tawait this.navigateTo(VIEWS.LDAP_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-log-streaming':\n\t\t\t\t\tawait this.navigateTo(VIEWS.LOG_STREAMING_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'users': // Fakedoor feature added via hooks when user management is disabled on cloud\n\t\t\t\tcase 'logging':\n\t\t\t\t\tthis.$router.push({ name: VIEWS.FAKE_DOOR, params: { featureId: key } }).catch(() => {});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-community-nodes':\n\t\t\t\t\tawait this.navigateTo(VIEWS.COMMUNITY_NODES);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-usage-and-plan':\n\t\t\t\t\tawait this.navigateTo(VIEWS.USAGE);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-sso':\n\t\t\t\t\tawait this.navigateTo(VIEWS.SSO_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-external-secrets':\n\t\t\t\t\tawait this.navigateTo(VIEWS.EXTERNAL_SECRETS_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-source-control':\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.SOURCE_CONTROL) {\n\t\t\t\t\t\tvoid this.$router.push({ name: VIEWS.SOURCE_CONTROL });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-audit-logs':\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.AUDIT_LOGS) {\n\t\t\t\t\t\tvoid this.$router.push({ name: VIEWS.AUDIT_LOGS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-workersview': {\n\t\t\t\t\tawait this.navigateTo(VIEWS.WORKER_VIEW);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\tmin-width: $sidebar-expanded-width;\n\theight: 100%;\n\tbackground-color: var(--color-background-xlight);\n\tborder-right: var(--border-base);\n\tposition: relative;\n\toverflow: auto;\n}\n\n.returnButton {\n\tpadding: var(--spacing-s) var(--spacing-l);\n\tcursor: pointer;\n\t&:hover {\n\t\tcolor: var(--color-primary);\n\t}\n}\n\n.versionContainer {\n\tpadding: var(--spacing-xs) var(--spacing-l);\n}\n\n@media screen and (max-height: 420px) {\n\t.versionContainer {\n\t\tdisplay: none;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<SettingsSidebar @return=\"onReturn\" />\n\t\t<div :class=\"$style.contentContainer\">\n\t\t\t<div :class=\"$style.content\">\n\t\t\t\t<!--\n\t\t\t\t\tBecause we're using nested routes the props are going to be bind to the top level route\n\t\t\t\t\tso we need to pass them down to the child component\n\t\t\t\t-->\n\t\t\t\t<router-view name=\"settingsView\" v-bind=\"$attrs\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { Route } from 'vue-router';\n\nimport { VIEWS } from '@/constants';\nimport SettingsSidebar from '@/components/SettingsSidebar.vue';\n\nconst SettingsView = defineComponent({\n\tname: 'SettingsView',\n\tcomponents: {\n\t\tSettingsSidebar,\n\t},\n\tbeforeRouteEnter(to, from, next) {\n\t\tnext((vm) => {\n\t\t\t(vm as unknown as InstanceType<typeof SettingsView>).previousRoute = from;\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreviousRoute: null as Route | null,\n\t\t};\n\t},\n\tmethods: {\n\t\tonReturn() {\n\t\t\tvoid this.$router.push(\n\t\t\t\tthis.previousRoute ? this.previousRoute.path : { name: VIEWS.HOMEPAGE },\n\t\t\t);\n\t\t},\n\t},\n});\n\nexport default SettingsView;\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\theight: 100%;\n\twidth: 100%;\n\tdisplay: flex;\n\toverflow: hidden;\n}\n\n.contentContainer {\n\tcomposes: container;\n\tjustify-content: center;\n\tpadding-top: 70.5px;\n\theight: 100%;\n\toverflow: auto;\n\tbackground-color: var(--color-background-light);\n}\n\n.content {\n\theight: 100%;\n\twidth: 100%;\n\tmax-width: 800px;\n\tpadding: 0 var(--spacing-2xl);\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","userHelpers","mapStores","useRootStore","useSettingsStore","useUIStore","menuItems","VIEWS","item","ABOUT_MODAL_KEY","VERSIONS_MODAL_KEY","routeName","key","_resolveComponent","_normalizeClass","_ctx","_component_n8n_menu","_withCtx","_createElementVNode","_cache","$event","_createVNode","_component_font_awesome_icon","_component_n8n_heading","_component_n8n_link","SettingsView","SettingsSidebar","to","from","next","vm","_sfc_main","_component_SettingsSidebar"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsView-UI5wnO8B.js","sources":["../../src/components/SettingsSidebar.vue","../../src/views/SettingsView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<n8n-menu :items=\"sidebarMenuItems\" @select=\"handleSelect\">\n\t\t\t<template #header>\n\t\t\t\t<div :class=\"$style.returnButton\" @click=\"$emit('return')\" data-test-id=\"settings-back\">\n\t\t\t\t\t<i class=\"mr-xs\">\n\t\t\t\t\t\t<font-awesome-icon icon=\"arrow-left\" />\n\t\t\t\t\t</i>\n\t\t\t\t\t<n8n-heading size=\"large\" :bold=\"true\">{{ $locale.baseText('settings') }}</n8n-heading>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template #menuSuffix>\n\t\t\t\t<div :class=\"$style.versionContainer\">\n\t\t\t\t\t<n8n-link @click=\"onVersionClick\" size=\"small\">\n\t\t\t\t\t\t{{ $locale.baseText('settings.version') }} {{ rootStore.versionCli }}\n\t\t\t\t\t</n8n-link>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</n8n-menu>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { ABOUT_MODAL_KEY, VERSIONS_MODAL_KEY, VIEWS } from '@/constants';\nimport { userHelpers } from '@/mixins/userHelpers';\nimport type { IFakeDoor } from '@/Interface';\nimport type { IMenuItem } from 'n8n-design-system';\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\nexport default defineComponent({\n\tname: 'SettingsSidebar',\n\tmixins: [userHelpers],\n\tcomputed: {\n\t\t...mapStores(useRootStore, useSettingsStore, useUIStore),\n\t\tsettingsFakeDoorFeatures(): IFakeDoor[] {\n\t\t\treturn this.uiStore.getFakeDoorByLocation('settings');\n\t\t},\n\t\tsidebarMenuItems(): IMenuItem[] {\n\t\t\tconst menuItems: IMenuItem[] = [\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-usage-and-plan',\n\t\t\t\t\ticon: 'chart-bar',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.usageAndPlan.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessUsageAndPlan(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.USAGE],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-personal',\n\t\t\t\t\ticon: 'user-circle',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.personal'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessPersonalSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.PERSONAL_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-users',\n\t\t\t\t\ticon: 'user-friends',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.users'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessUsersSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.USERS_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-api',\n\t\t\t\t\ticon: 'plug',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.n8napi'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessApiSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.API_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-external-secrets',\n\t\t\t\t\ticon: 'vault',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.externalSecrets.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessExternalSecrets(),\n\t\t\t\t\tactivateOnRouteNames: [\n\t\t\t\t\t\tVIEWS.EXTERNAL_SECRETS_SETTINGS,\n\t\t\t\t\t\tVIEWS.EXTERNAL_SECRETS_PROVIDER_SETTINGS,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-audit-logs',\n\t\t\t\t\ticon: 'clipboard-list',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.auditLogs.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessAuditLogs(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.AUDIT_LOGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-source-control',\n\t\t\t\t\ticon: 'code-branch',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.sourceControl.title'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessSourceControl(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.SOURCE_CONTROL],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-sso',\n\t\t\t\t\ticon: 'user-lock',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.sso'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessSso(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.SSO_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-ldap',\n\t\t\t\t\ticon: 'network-wired',\n\t\t\t\t\tlabel: this.$locale.baseText('settings.ldap'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable: this.canAccessLdapSettings(),\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.LDAP_SETTINGS],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'settings-workersview',\n\t\t\t\t\ticon: 'project-diagram',\n\t\t\t\t\tlabel: this.$locale.baseText('mainSidebar.workersView'),\n\t\t\t\t\tposition: 'top',\n\t\t\t\t\tavailable:\n\t\t\t\t\t\tthis.settingsStore.isQueueModeEnabled && this.settingsStore.isWorkerViewAvailable,\n\t\t\t\t\tactivateOnRouteNames: [VIEWS.WORKER_VIEW],\n\t\t\t\t},\n\t\t\t];\n\n\t\t\tfor (const item of this.settingsFakeDoorFeatures) {\n\t\t\t\tif (item.uiLocations.includes('settings')) {\n\t\t\t\t\tmenuItems.push({\n\t\t\t\t\t\tid: item.id,\n\t\t\t\t\t\ticon: item.icon || 'question',\n\t\t\t\t\t\tlabel: this.$locale.baseText(item.featureName as BaseTextKey),\n\t\t\t\t\t\tposition: 'top',\n\t\t\t\t\t\tavailable: true,\n\t\t\t\t\t\tactivateOnRoutePaths: [`/settings/coming-soon/${item.id}`],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmenuItems.push({\n\t\t\t\tid: 'settings-log-streaming',\n\t\t\t\ticon: 'sign-in-alt',\n\t\t\t\tlabel: this.$locale.baseText('settings.log-streaming'),\n\t\t\t\tposition: 'top',\n\t\t\t\tavailable: this.canAccessLogStreamingSettings(),\n\t\t\t\tactivateOnRouteNames: [VIEWS.LOG_STREAMING_SETTINGS],\n\t\t\t});\n\n\t\t\tmenuItems.push({\n\t\t\t\tid: 'settings-community-nodes',\n\t\t\t\ticon: 'cube',\n\t\t\t\tlabel: this.$locale.baseText('settings.communityNodes'),\n\t\t\t\tposition: 'top',\n\t\t\t\tavailable: this.canAccessCommunityNodes(),\n\t\t\t\tactivateOnRouteNames: [VIEWS.COMMUNITY_NODES],\n\t\t\t});\n\n\t\t\treturn menuItems;\n\t\t},\n\t},\n\tmethods: {\n\t\tcanAccessPersonalSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.PERSONAL_SETTINGS);\n\t\t},\n\t\tcanAccessUsersSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.USERS_SETTINGS);\n\t\t},\n\t\tcanAccessCommunityNodes(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.COMMUNITY_NODES);\n\t\t},\n\t\tcanAccessApiSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.API_SETTINGS);\n\t\t},\n\t\tcanAccessLdapSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.LDAP_SETTINGS);\n\t\t},\n\t\tcanAccessLogStreamingSettings(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.LOG_STREAMING_SETTINGS);\n\t\t},\n\t\tcanAccessUsageAndPlan(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.USAGE);\n\t\t},\n\t\tcanAccessExternalSecrets(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.EXTERNAL_SECRETS_SETTINGS);\n\t\t},\n\t\tcanAccessSourceControl(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.SOURCE_CONTROL);\n\t\t},\n\t\tcanAccessAuditLogs(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.AUDIT_LOGS);\n\t\t},\n\t\tcanAccessSso(): boolean {\n\t\t\treturn this.canUserAccessRouteByName(VIEWS.SSO_SETTINGS);\n\t\t},\n\t\tonVersionClick() {\n\t\t\tthis.uiStore.openModal(ABOUT_MODAL_KEY);\n\t\t},\n\t\topenUpdatesPanel() {\n\t\t\tthis.uiStore.openModal(VERSIONS_MODAL_KEY);\n\t\t},\n\t\tasync navigateTo(routeName: (typeof VIEWS)[keyof typeof VIEWS]) {\n\t\t\tif (this.$router.currentRoute.name !== routeName) {\n\t\t\t\tawait this.$router.push({ name: routeName });\n\t\t\t}\n\t\t},\n\t\tasync handleSelect(key: string) {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'settings-personal':\n\t\t\t\t\tawait this.navigateTo(VIEWS.PERSONAL_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-users':\n\t\t\t\t\tawait this.navigateTo(VIEWS.USERS_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-api':\n\t\t\t\t\tawait this.navigateTo(VIEWS.API_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-ldap':\n\t\t\t\t\tawait this.navigateTo(VIEWS.LDAP_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-log-streaming':\n\t\t\t\t\tawait this.navigateTo(VIEWS.LOG_STREAMING_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'users': // Fakedoor feature added via hooks when user management is disabled on cloud\n\t\t\t\tcase 'logging':\n\t\t\t\t\tthis.$router.push({ name: VIEWS.FAKE_DOOR, params: { featureId: key } }).catch(() => {});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-community-nodes':\n\t\t\t\t\tawait this.navigateTo(VIEWS.COMMUNITY_NODES);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-usage-and-plan':\n\t\t\t\t\tawait this.navigateTo(VIEWS.USAGE);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-sso':\n\t\t\t\t\tawait this.navigateTo(VIEWS.SSO_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-external-secrets':\n\t\t\t\t\tawait this.navigateTo(VIEWS.EXTERNAL_SECRETS_SETTINGS);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-source-control':\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.SOURCE_CONTROL) {\n\t\t\t\t\t\tvoid this.$router.push({ name: VIEWS.SOURCE_CONTROL });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-audit-logs':\n\t\t\t\t\tif (this.$router.currentRoute.name !== VIEWS.AUDIT_LOGS) {\n\t\t\t\t\t\tvoid this.$router.push({ name: VIEWS.AUDIT_LOGS });\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'settings-workersview': {\n\t\t\t\t\tawait this.navigateTo(VIEWS.WORKER_VIEW);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\tmin-width: $sidebar-expanded-width;\n\theight: 100%;\n\tbackground-color: var(--color-background-xlight);\n\tborder-right: var(--border-base);\n\tposition: relative;\n\toverflow: auto;\n}\n\n.returnButton {\n\tpadding: var(--spacing-s) var(--spacing-l);\n\tcursor: pointer;\n\t&:hover {\n\t\tcolor: var(--color-primary);\n\t}\n}\n\n.versionContainer {\n\tpadding: var(--spacing-xs) var(--spacing-l);\n}\n\n@media screen and (max-height: 420px) {\n\t.versionContainer {\n\t\tdisplay: none;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<SettingsSidebar @return=\"onReturn\" />\n\t\t<div :class=\"$style.contentContainer\">\n\t\t\t<div :class=\"$style.content\">\n\t\t\t\t<!--\n\t\t\t\t\tBecause we're using nested routes the props are going to be bind to the top level route\n\t\t\t\t\tso we need to pass them down to the child component\n\t\t\t\t-->\n\t\t\t\t<router-view name=\"settingsView\" v-bind=\"$attrs\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { Route } from 'vue-router';\n\nimport { VIEWS } from '@/constants';\nimport SettingsSidebar from '@/components/SettingsSidebar.vue';\n\nconst SettingsView = defineComponent({\n\tname: 'SettingsView',\n\tcomponents: {\n\t\tSettingsSidebar,\n\t},\n\tbeforeRouteEnter(to, from, next) {\n\t\tnext((vm) => {\n\t\t\t(vm as unknown as InstanceType<typeof SettingsView>).previousRoute = from;\n\t\t});\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreviousRoute: null as Route | null,\n\t\t};\n\t},\n\tmethods: {\n\t\tonReturn() {\n\t\t\tvoid this.$router.push(\n\t\t\t\tthis.previousRoute ? this.previousRoute.path : { name: VIEWS.HOMEPAGE },\n\t\t\t);\n\t\t},\n\t},\n});\n\nexport default SettingsView;\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\theight: 100%;\n\twidth: 100%;\n\tdisplay: flex;\n\toverflow: hidden;\n}\n\n.contentContainer {\n\tcomposes: container;\n\tjustify-content: center;\n\tpadding-top: 70.5px;\n\theight: 100%;\n\toverflow: auto;\n\tbackground-color: var(--color-background-light);\n}\n\n.content {\n\theight: 100%;\n\twidth: 100%;\n\tmax-width: 800px;\n\tpadding: 0 var(--spacing-2xl);\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","userHelpers","mapStores","useRootStore","useSettingsStore","useUIStore","menuItems","VIEWS","item","ABOUT_MODAL_KEY","VERSIONS_MODAL_KEY","routeName","key","_resolveComponent","_normalizeClass","_ctx","_component_n8n_menu","_withCtx","_createElementVNode","_cache","$event","_createVNode","_component_font_awesome_icon","_component_n8n_heading","_component_n8n_link","SettingsView","SettingsSidebar","to","from","next","vm","_sfc_main","_component_SettingsSidebar"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{A as o}from"./AuthView-pnWQAK0S.js";import{u as i,p as s,l as m,t as p,B as a,_ as n}from"./n8n-NE7NqrvB.js";import{m as l}from"./pinia-IhuTtYiV.js";import{G as u,ag as c,l as h,M as d}from"./vendor-2CfOYFi2.js";import"./index-hMVAffQ3.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./lodash-es-s_m9YyW7.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-QL7QI0sV.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";const f=u({name:"SetupView",components:{AuthView:o},setup(){return i()},data(){return{FORM_CONFIG:{title:this.$locale.baseText("auth.setup.setupOwner"),buttonText:this.$locale.baseText("auth.setup.next"),inputs:[{name:"email",properties:{label:this.$locale.baseText("auth.email"),type:"email",required:!0,validationRules:[{name:"VALID_EMAIL"}],autocomplete:"email",capitalize:!0}},{name:"firstName",properties:{label:this.$locale.baseText("auth.firstName"),maxlength:32,required:!0,autocomplete:"given-name",capitalize:!0}},{name:"lastName",properties:{label:this.$locale.baseText("auth.lastName"),maxlength:32,required:!0,autocomplete:"family-name",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",required:!0,validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],infoText:this.$locale.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"agree",properties:{label:this.$locale.baseText("auth.agreement.label"),type:"checkbox"}}]},loading:!1}},computed:{...l(p,m,s)},methods:{async onSubmit(e){try{const t=this.settingsStore.showSetupPage;if(this.loading=!0,await this.usersStore.createOwner(e),e.agree===!0)try{await this.uiStore.submitContactEmail(e.email.toString(),e.agree)}catch{}t?await this.$router.push({name:a.NEW_WORKFLOW}):await this.$router.push({name:a.USERS_SETTINGS})}catch(t){this.showError(t,this.$locale.baseText("auth.setup.settingUpOwnerError"))}this.loading=!1}}});function S(e,t,b,w,g,_){const r=c("AuthView");return h(),d(r,{form:e.FORM_CONFIG,formLoading:e.loading,"data-test-id":"setup-form",onSubmit:e.onSubmit},null,8,["form","formLoading","onSubmit"])}const Z=n(f,[["render",S]]);export{Z as default};
2
- //# sourceMappingURL=SetupView-iFHyYLKM.js.map
1
+ import{A as o}from"./AuthView-KzKyZSHz.js";import{u as i,p as s,l as m,t as p,B as a,_ as n}from"./n8n-NE7NqrvB.js";import{m as l}from"./pinia-IhuTtYiV.js";import{G as u,ag as c,l as h,M as d}from"./vendor-2CfOYFi2.js";import"./index-sMRiWGJS.js";import"./prettier-s3fE3Qyr.js";import"./codemirror-lang-html-n8n-qoVuUIQR.js";import"./@n8n/codemirror-lang-sql-zd5sOTQ9.js";import"./@lezer/common-aP6EPErF.js";import"./lodash-es-s_m9YyW7.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-QL7QI0sV.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./esprima-next-ulPLCZ1Z.js";import"./@vueuse/core-viEZCtbZ.js";import"./@fortawesome/vue-fontawesome-GVmvJ_gj.js";import"./@fortawesome/fontawesome-svg-core-xYGjsix9.js";import"./codemirror-lang-n8n-expression-qGXLqLTr.js";import"./fast-json-stable-stringify-gO4u4slB.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-f7Vn5Pkq.js";import"./vue3-touch-events-_RfbPMOD.js";import"./@fortawesome/free-solid-svg-icons-KH5RR_hW.js";import"./@fortawesome/free-regular-svg-icons-ipmEYOws.js";import"./chart.js-JtqvIvkt.js";import"./flatted-jPn12Tq4.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./vue-i18n-eiX0lGiQ.js";const f=u({name:"SetupView",components:{AuthView:o},setup(){return i()},data(){return{FORM_CONFIG:{title:this.$locale.baseText("auth.setup.setupOwner"),buttonText:this.$locale.baseText("auth.setup.next"),inputs:[{name:"email",properties:{label:this.$locale.baseText("auth.email"),type:"email",required:!0,validationRules:[{name:"VALID_EMAIL"}],autocomplete:"email",capitalize:!0}},{name:"firstName",properties:{label:this.$locale.baseText("auth.firstName"),maxlength:32,required:!0,autocomplete:"given-name",capitalize:!0}},{name:"lastName",properties:{label:this.$locale.baseText("auth.lastName"),maxlength:32,required:!0,autocomplete:"family-name",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",required:!0,validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],infoText:this.$locale.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"agree",properties:{label:this.$locale.baseText("auth.agreement.label"),type:"checkbox"}}]},loading:!1}},computed:{...l(p,m,s)},methods:{async onSubmit(e){try{const t=this.settingsStore.showSetupPage;if(this.loading=!0,await this.usersStore.createOwner(e),e.agree===!0)try{await this.uiStore.submitContactEmail(e.email.toString(),e.agree)}catch{}t?await this.$router.push({name:a.NEW_WORKFLOW}):await this.$router.push({name:a.USERS_SETTINGS})}catch(t){this.showError(t,this.$locale.baseText("auth.setup.settingUpOwnerError"))}this.loading=!1}}});function S(e,t,b,w,g,_){const r=c("AuthView");return h(),d(r,{form:e.FORM_CONFIG,formLoading:e.loading,"data-test-id":"setup-form",onSubmit:e.onSubmit},null,8,["form","formLoading","onSubmit"])}const Z=n(f,[["render",S]]);export{Z as default};
2
+ //# sourceMappingURL=SetupView-jUHcBldc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetupView-iFHyYLKM.js","sources":["../../src/views/SetupView.vue"],"sourcesContent":["<template>\n\t<AuthView\n\t\t:form=\"FORM_CONFIG\"\n\t\t:formLoading=\"loading\"\n\t\tdata-test-id=\"setup-form\"\n\t\t@submit=\"onSubmit\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport AuthView from './AuthView.vue';\nimport { defineComponent } from 'vue';\n\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUsersStore } from '@/stores/users.store';\n\nexport default defineComponent({\n\tname: 'SetupView',\n\tcomponents: {\n\t\tAuthView,\n\t},\n\tsetup() {\n\t\treturn useToast();\n\t},\n\tdata() {\n\t\tconst FORM_CONFIG: IFormBoxConfig = {\n\t\t\ttitle: this.$locale.baseText('auth.setup.setupOwner'),\n\t\t\tbuttonText: this.$locale.baseText('auth.setup.next'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.email'),\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tvalidationRules: [{ name: 'VALID_EMAIL' }],\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'firstName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.firstName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'given-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'lastName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.lastName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'family-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tvalidationRules: [{ name: 'DEFAULT_PASSWORD_RULES' }],\n\t\t\t\t\t\tinfoText: this.$locale.baseText('auth.defaultPasswordRequirements'),\n\t\t\t\t\t\tautocomplete: 'new-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'agree',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.agreement.label'),\n\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\treturn {\n\t\t\tFORM_CONFIG,\n\t\t\tloading: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useSettingsStore, useUIStore, useUsersStore),\n\t},\n\tmethods: {\n\t\tasync onSubmit(values: { [key: string]: string | boolean }) {\n\t\t\ttry {\n\t\t\t\tconst forceRedirectedHere = this.settingsStore.showSetupPage;\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.createOwner(\n\t\t\t\t\tvalues as { firstName: string; lastName: string; email: string; password: string },\n\t\t\t\t);\n\n\t\t\t\tif (values.agree === true) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.uiStore.submitContactEmail(values.email.toString(), values.agree);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\n\t\t\t\tif (forceRedirectedHere) {\n\t\t\t\t\tawait this.$router.push({ name: VIEWS.NEW_WORKFLOW });\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$router.push({ name: VIEWS.USERS_SETTINGS });\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('auth.setup.settingUpOwnerError'));\n\t\t\t}\n\t\t\tthis.loading = false;\n\t\t},\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","AuthView","useToast","mapStores","useSettingsStore","useUIStore","useUsersStore","values","forceRedirectedHere","VIEWS","error","_resolveComponent","_openBlock","_createBlock","_component_AuthView","_ctx"],"mappings":"6yCAqBA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,YACN,WAAY,CACX,SAAAC,CACD,EACA,OAAQ,CACP,OAAOC,EAAS,CACjB,EACA,MAAO,CA0DC,MAAA,CACN,YA1DmC,CACnC,MAAO,KAAK,QAAQ,SAAS,uBAAuB,EACpD,WAAY,KAAK,QAAQ,SAAS,iBAAiB,EACnD,OAAQ,CACP,CACC,KAAM,QACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,YAAY,EACzC,KAAM,QACN,SAAU,GACV,gBAAiB,CAAC,CAAE,KAAM,cAAe,EACzC,aAAc,QACd,WAAY,EACb,CACD,EACA,CACC,KAAM,YACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,gBAAgB,EAC7C,UAAW,GACX,SAAU,GACV,aAAc,aACd,WAAY,EACb,CACD,EACA,CACC,KAAM,WACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,eAAe,EAC5C,UAAW,GACX,SAAU,GACV,aAAc,cACd,WAAY,EACb,CACD,EACA,CACC,KAAM,WACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,eAAe,EAC5C,KAAM,WACN,SAAU,GACV,gBAAiB,CAAC,CAAE,KAAM,yBAA0B,EACpD,SAAU,KAAK,QAAQ,SAAS,kCAAkC,EAClE,aAAc,eACd,WAAY,EACb,CACD,EACA,CACC,KAAM,QACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,sBAAsB,EACnD,KAAM,UACP,CACD,CACD,CAAA,EAKA,QAAS,EAAA,CAEX,EACA,SAAU,CACT,GAAGC,EAAUC,EAAkBC,EAAYC,CAAa,CACzD,EACA,QAAS,CACR,MAAM,SAASC,EAA6C,CACvD,GAAA,CACG,MAAAC,EAAsB,KAAK,cAAc,cAM3C,GALJ,KAAK,QAAU,GACf,MAAM,KAAK,WAAW,YACrBD,CAAA,EAGGA,EAAO,QAAU,GAChB,GAAA,CACG,MAAA,KAAK,QAAQ,mBAAmBA,EAAO,MAAM,SAAS,EAAGA,EAAO,KAAK,CAAA,MACpE,CAAC,CAGNC,EACH,MAAM,KAAK,QAAQ,KAAK,CAAE,KAAMC,EAAM,aAAc,EAEpD,MAAM,KAAK,QAAQ,KAAK,CAAE,KAAMA,EAAM,eAAgB,QAE/CC,EAAO,CACf,KAAK,UAAUA,EAAO,KAAK,QAAQ,SAAS,gCAAgC,CAAC,CAC9E,CACA,KAAK,QAAU,EAChB,CACD,CACD,CAAC,kCAxHAC,EAKE,UAAA,EAHA,OAAAC,EAAA,EAAoBC,EAAAC,EAAA,CACrB,KAAAC,EAAA,YACC,YAAQA,EAAA,QAAA,eAAA"}
1
+ {"version":3,"file":"SetupView-jUHcBldc.js","sources":["../../src/views/SetupView.vue"],"sourcesContent":["<template>\n\t<AuthView\n\t\t:form=\"FORM_CONFIG\"\n\t\t:formLoading=\"loading\"\n\t\tdata-test-id=\"setup-form\"\n\t\t@submit=\"onSubmit\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport AuthView from './AuthView.vue';\nimport { defineComponent } from 'vue';\n\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUsersStore } from '@/stores/users.store';\n\nexport default defineComponent({\n\tname: 'SetupView',\n\tcomponents: {\n\t\tAuthView,\n\t},\n\tsetup() {\n\t\treturn useToast();\n\t},\n\tdata() {\n\t\tconst FORM_CONFIG: IFormBoxConfig = {\n\t\t\ttitle: this.$locale.baseText('auth.setup.setupOwner'),\n\t\t\tbuttonText: this.$locale.baseText('auth.setup.next'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.email'),\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tvalidationRules: [{ name: 'VALID_EMAIL' }],\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'firstName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.firstName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'given-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'lastName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.lastName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'family-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tvalidationRules: [{ name: 'DEFAULT_PASSWORD_RULES' }],\n\t\t\t\t\t\tinfoText: this.$locale.baseText('auth.defaultPasswordRequirements'),\n\t\t\t\t\t\tautocomplete: 'new-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'agree',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.agreement.label'),\n\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\treturn {\n\t\t\tFORM_CONFIG,\n\t\t\tloading: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useSettingsStore, useUIStore, useUsersStore),\n\t},\n\tmethods: {\n\t\tasync onSubmit(values: { [key: string]: string | boolean }) {\n\t\t\ttry {\n\t\t\t\tconst forceRedirectedHere = this.settingsStore.showSetupPage;\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.createOwner(\n\t\t\t\t\tvalues as { firstName: string; lastName: string; email: string; password: string },\n\t\t\t\t);\n\n\t\t\t\tif (values.agree === true) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.uiStore.submitContactEmail(values.email.toString(), values.agree);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\n\t\t\t\tif (forceRedirectedHere) {\n\t\t\t\t\tawait this.$router.push({ name: VIEWS.NEW_WORKFLOW });\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$router.push({ name: VIEWS.USERS_SETTINGS });\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('auth.setup.settingUpOwnerError'));\n\t\t\t}\n\t\t\tthis.loading = false;\n\t\t},\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","AuthView","useToast","mapStores","useSettingsStore","useUIStore","useUsersStore","values","forceRedirectedHere","VIEWS","error","_resolveComponent","_openBlock","_createBlock","_component_AuthView","_ctx"],"mappings":"6yCAqBA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,YACN,WAAY,CACX,SAAAC,CACD,EACA,OAAQ,CACP,OAAOC,EAAS,CACjB,EACA,MAAO,CA0DC,MAAA,CACN,YA1DmC,CACnC,MAAO,KAAK,QAAQ,SAAS,uBAAuB,EACpD,WAAY,KAAK,QAAQ,SAAS,iBAAiB,EACnD,OAAQ,CACP,CACC,KAAM,QACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,YAAY,EACzC,KAAM,QACN,SAAU,GACV,gBAAiB,CAAC,CAAE,KAAM,cAAe,EACzC,aAAc,QACd,WAAY,EACb,CACD,EACA,CACC,KAAM,YACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,gBAAgB,EAC7C,UAAW,GACX,SAAU,GACV,aAAc,aACd,WAAY,EACb,CACD,EACA,CACC,KAAM,WACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,eAAe,EAC5C,UAAW,GACX,SAAU,GACV,aAAc,cACd,WAAY,EACb,CACD,EACA,CACC,KAAM,WACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,eAAe,EAC5C,KAAM,WACN,SAAU,GACV,gBAAiB,CAAC,CAAE,KAAM,yBAA0B,EACpD,SAAU,KAAK,QAAQ,SAAS,kCAAkC,EAClE,aAAc,eACd,WAAY,EACb,CACD,EACA,CACC,KAAM,QACN,WAAY,CACX,MAAO,KAAK,QAAQ,SAAS,sBAAsB,EACnD,KAAM,UACP,CACD,CACD,CAAA,EAKA,QAAS,EAAA,CAEX,EACA,SAAU,CACT,GAAGC,EAAUC,EAAkBC,EAAYC,CAAa,CACzD,EACA,QAAS,CACR,MAAM,SAASC,EAA6C,CACvD,GAAA,CACG,MAAAC,EAAsB,KAAK,cAAc,cAM3C,GALJ,KAAK,QAAU,GACf,MAAM,KAAK,WAAW,YACrBD,CAAA,EAGGA,EAAO,QAAU,GAChB,GAAA,CACG,MAAA,KAAK,QAAQ,mBAAmBA,EAAO,MAAM,SAAS,EAAGA,EAAO,KAAK,CAAA,MACpE,CAAC,CAGNC,EACH,MAAM,KAAK,QAAQ,KAAK,CAAE,KAAMC,EAAM,aAAc,EAEpD,MAAM,KAAK,QAAQ,KAAK,CAAE,KAAMA,EAAM,eAAgB,QAE/CC,EAAO,CACf,KAAK,UAAUA,EAAO,KAAK,QAAQ,SAAS,gCAAgC,CAAC,CAC9E,CACA,KAAK,QAAU,EAChB,CACD,CACD,CAAC,kCAxHAC,EAKE,UAAA,EAHA,OAAAC,EAAA,EAAoBC,EAAAC,EAAA,CACrB,KAAAC,EAAA,YACC,YAAQA,EAAA,QAAA,eAAA"}