n8n-editor-ui 1.47.1 → 1.47.2

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 (150) hide show
  1. package/.turbo/turbo-build.log +76 -76
  2. package/dist/assets/{AuthView-CMxdNKZJ.js → AuthView-B_jZMnGj.js} +2 -2
  3. package/dist/assets/{AuthView-CMxdNKZJ.js.map → AuthView-B_jZMnGj.js.map} +1 -1
  4. package/dist/assets/{CanvasControls-3FMjwMqA.js → CanvasControls-ns1B0A0j.js} +2 -2
  5. package/dist/assets/{CanvasControls-3FMjwMqA.js.map → CanvasControls-ns1B0A0j.js.map} +1 -1
  6. package/dist/assets/{ChangePasswordView-_NkkcUVb.js → ChangePasswordView-BDsuHv0B.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-_NkkcUVb.js.map → ChangePasswordView-BDsuHv0B.js.map} +1 -1
  8. package/dist/assets/{CollectionParameter-BXMOfisf.js → CollectionParameter-Br-xtutZ.js} +2 -2
  9. package/dist/assets/CollectionParameter-Br-xtutZ.js.map +1 -0
  10. package/dist/assets/{CredentialsView-B2UF3tK_.js → CredentialsView-DnJ_jhDo.js} +2 -2
  11. package/dist/assets/{CredentialsView-B2UF3tK_.js.map → CredentialsView-DnJ_jhDo.js.map} +1 -1
  12. package/dist/assets/{ErrorView-B_lpOlen.js → ErrorView-BfV5e5ko.js} +2 -2
  13. package/dist/assets/{ErrorView-B_lpOlen.js.map → ErrorView-BfV5e5ko.js.map} +1 -1
  14. package/dist/assets/{ExecutionsFilter-dNFZor7l.js → ExecutionsFilter-0XcXH83H.js} +2 -2
  15. package/dist/assets/{ExecutionsFilter-dNFZor7l.js.map → ExecutionsFilter-0XcXH83H.js.map} +1 -1
  16. package/dist/assets/{ExecutionsView-BYe-KERG.js → ExecutionsView-aFiZuLVt.js} +2 -2
  17. package/dist/assets/{ExecutionsView-BYe-KERG.js.map → ExecutionsView-aFiZuLVt.js.map} +1 -1
  18. package/dist/assets/{ForgotMyPasswordView-D97J06wc.js → ForgotMyPasswordView-64X9tXq4.js} +2 -2
  19. package/dist/assets/{ForgotMyPasswordView-D97J06wc.js.map → ForgotMyPasswordView-64X9tXq4.js.map} +1 -1
  20. package/dist/assets/{MainHeader-CT4nF2mY.js → MainHeader-Ch0Iz_7s.js} +2 -2
  21. package/dist/assets/{MainHeader-CT4nF2mY.js.map → MainHeader-Ch0Iz_7s.js.map} +1 -1
  22. package/dist/assets/{MainSidebar-CTg5wPzP.js → MainSidebar-3ee-tTgz.js} +2 -2
  23. package/dist/assets/{MainSidebar-CTg5wPzP.js.map → MainSidebar-3ee-tTgz.js.map} +1 -1
  24. package/dist/assets/{NodeCreation-BF_L2-99.js → NodeCreation-PrQGENrl.js} +3 -3
  25. package/dist/assets/{NodeCreation-BF_L2-99.js.map → NodeCreation-PrQGENrl.js.map} +1 -1
  26. package/dist/assets/{NodeCreator-B_yCtSu6.js → NodeCreator-DlK1669m.js} +2 -2
  27. package/dist/assets/{NodeCreator-B_yCtSu6.js.map → NodeCreator-DlK1669m.js.map} +1 -1
  28. package/dist/assets/{NodeDetailsView-ggolOsHM.js → NodeDetailsView-DcV7LI-g.js} +4 -4
  29. package/dist/assets/{NodeDetailsView-ggolOsHM.js.map → NodeDetailsView-DcV7LI-g.js.map} +1 -1
  30. package/dist/assets/{NodeView-B2MlTl6g.js → NodeView-D_kbUfVN.js} +3 -3
  31. package/dist/assets/{NodeView-B2MlTl6g.js.map → NodeView-D_kbUfVN.js.map} +1 -1
  32. package/dist/assets/{NodeView.v2-D_CKj9CS.js → NodeView.v2-D_Wbnl01.js} +3 -3
  33. package/dist/assets/{NodeView.v2-D_CKj9CS.js.map → NodeView.v2-D_Wbnl01.js.map} +1 -1
  34. package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-DdHOM703.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js} +2 -2
  35. package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-DdHOM703.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js.map} +1 -1
  36. package/dist/assets/{ProjectSettings-DpJesEZX.js → ProjectSettings-CfcplqBX.js} +2 -2
  37. package/dist/assets/{ProjectSettings-DpJesEZX.js.map → ProjectSettings-CfcplqBX.js.map} +1 -1
  38. package/dist/assets/{ProjectTabs-D7nNxtFO.js → ProjectTabs-5ZO9YR8J.js} +2 -2
  39. package/dist/assets/{ProjectTabs-D7nNxtFO.js.map → ProjectTabs-5ZO9YR8J.js.map} +1 -1
  40. package/dist/assets/{PushConnectionTracker-YJuy57g2.js → PushConnectionTracker-Bp-RjnYr.js} +2 -2
  41. package/dist/assets/{PushConnectionTracker-YJuy57g2.js.map → PushConnectionTracker-Bp-RjnYr.js.map} +1 -1
  42. package/dist/assets/{ResourcesListLayout-mZ4ijKRB.js → ResourcesListLayout-B4W1PSHT.js} +2 -2
  43. package/dist/assets/{ResourcesListLayout-mZ4ijKRB.js.map → ResourcesListLayout-B4W1PSHT.js.map} +1 -1
  44. package/dist/assets/{RunDataAi-D0m0Vg_p.js → RunDataAi-C3XiqNZa.js} +2 -2
  45. package/dist/assets/{RunDataAi-D0m0Vg_p.js.map → RunDataAi-C3XiqNZa.js.map} +1 -1
  46. package/dist/assets/{RunDataJson-DkHNIqVj.js → RunDataJson-CMcOD-78.js} +3 -3
  47. package/dist/assets/{RunDataJson-DkHNIqVj.js.map → RunDataJson-CMcOD-78.js.map} +1 -1
  48. package/dist/assets/{RunDataJsonActions-Cgxcpw8t.js → RunDataJsonActions-BQBpmtOi.js} +2 -2
  49. package/dist/assets/{RunDataJsonActions-Cgxcpw8t.js.map → RunDataJsonActions-BQBpmtOi.js.map} +1 -1
  50. package/dist/assets/{RunDataSchema-C6aZoC0a.js → RunDataSchema-CF4YH-8y.js} +2 -2
  51. package/dist/assets/{RunDataSchema-C6aZoC0a.js.map → RunDataSchema-CF4YH-8y.js.map} +1 -1
  52. package/dist/assets/{RunDataSearch-D2CDg21N.js → RunDataSearch-DwB8g_cE.js} +2 -2
  53. package/dist/assets/{RunDataSearch-D2CDg21N.js.map → RunDataSearch-DwB8g_cE.js.map} +1 -1
  54. package/dist/assets/{RunDataTable-D597NRFD.js → RunDataTable-BVAuNDP9.js} +2 -2
  55. package/dist/assets/{RunDataTable-D597NRFD.js.map → RunDataTable-BVAuNDP9.js.map} +1 -1
  56. package/dist/assets/{SamlOnboarding-Me669myi.js → SamlOnboarding-Csd8l-7T.js} +2 -2
  57. package/dist/assets/{SamlOnboarding-Me669myi.js.map → SamlOnboarding-Csd8l-7T.js.map} +1 -1
  58. package/dist/assets/{SettingsApiView-DV8pIHDw.js → SettingsApiView-DnvdV7dx.js} +2 -2
  59. package/dist/assets/{SettingsApiView-DV8pIHDw.js.map → SettingsApiView-DnvdV7dx.js.map} +1 -1
  60. package/dist/assets/{SettingsCommunityNodesView-D_gtSdk3.js → SettingsCommunityNodesView-C11a_Ybs.js} +2 -2
  61. package/dist/assets/{SettingsCommunityNodesView-D_gtSdk3.js.map → SettingsCommunityNodesView-C11a_Ybs.js.map} +1 -1
  62. package/dist/assets/{SettingsExternalSecrets-xprYKjAW.js → SettingsExternalSecrets-IIReUcRG.js} +2 -2
  63. package/dist/assets/{SettingsExternalSecrets-xprYKjAW.js.map → SettingsExternalSecrets-IIReUcRG.js.map} +1 -1
  64. package/dist/assets/{SettingsFakeDoorView-CKaSOYh5.js → SettingsFakeDoorView-BOUfBJS8.js} +2 -2
  65. package/dist/assets/{SettingsFakeDoorView-CKaSOYh5.js.map → SettingsFakeDoorView-BOUfBJS8.js.map} +1 -1
  66. package/dist/assets/{SettingsLdapView-BBCv2tmk.js → SettingsLdapView-BaSjQ4cy.js} +2 -2
  67. package/dist/assets/{SettingsLdapView-BBCv2tmk.js.map → SettingsLdapView-BaSjQ4cy.js.map} +1 -1
  68. package/dist/assets/{SettingsLogStreamingView-HRIp8kyL.js → SettingsLogStreamingView-COGhA1hN.js} +2 -2
  69. package/dist/assets/{SettingsLogStreamingView-HRIp8kyL.js.map → SettingsLogStreamingView-COGhA1hN.js.map} +1 -1
  70. package/dist/assets/{SettingsPersonalView-CsUb3SvK.js → SettingsPersonalView-BJGgPTwa.js} +2 -2
  71. package/dist/assets/{SettingsPersonalView-CsUb3SvK.js.map → SettingsPersonalView-BJGgPTwa.js.map} +1 -1
  72. package/dist/assets/{SettingsSourceControl-BkPpVGsk.js → SettingsSourceControl-DkdSLuvp.js} +2 -2
  73. package/dist/assets/{SettingsSourceControl-BkPpVGsk.js.map → SettingsSourceControl-DkdSLuvp.js.map} +1 -1
  74. package/dist/assets/{SettingsSso-BueUV3RH.js → SettingsSso-DA9AOKH5.js} +2 -2
  75. package/dist/assets/{SettingsSso-BueUV3RH.js.map → SettingsSso-DA9AOKH5.js.map} +1 -1
  76. package/dist/assets/{SettingsUsageAndPlan-DzDC9m54.js → SettingsUsageAndPlan-BVPtlthH.js} +2 -2
  77. package/dist/assets/{SettingsUsageAndPlan-DzDC9m54.js.map → SettingsUsageAndPlan-BVPtlthH.js.map} +1 -1
  78. package/dist/assets/{SettingsUsersView-CTd5MQLw.js → SettingsUsersView-BuKt4ZDO.js} +2 -2
  79. package/dist/assets/{SettingsUsersView-CTd5MQLw.js.map → SettingsUsersView-BuKt4ZDO.js.map} +1 -1
  80. package/dist/assets/{SettingsView-DMxqsNh0.js → SettingsView-DJ78VuiY.js} +2 -2
  81. package/dist/assets/{SettingsView-DMxqsNh0.js.map → SettingsView-DJ78VuiY.js.map} +1 -1
  82. package/dist/assets/{SetupView-tkyttChl.js → SetupView-C70Dkfed.js} +2 -2
  83. package/dist/assets/{SetupView-tkyttChl.js.map → SetupView-C70Dkfed.js.map} +1 -1
  84. package/dist/assets/{SetupWorkflowCredentialsButton-B3HZvKQp.js → SetupWorkflowCredentialsButton-CEQ1LrFl.js} +2 -2
  85. package/dist/assets/{SetupWorkflowCredentialsButton-B3HZvKQp.js.map → SetupWorkflowCredentialsButton-CEQ1LrFl.js.map} +1 -1
  86. package/dist/assets/{SetupWorkflowFromTemplateView-DL3b-TZS.js → SetupWorkflowFromTemplateView-BUzzXtBr.js} +2 -2
  87. package/dist/assets/{SetupWorkflowFromTemplateView-DL3b-TZS.js.map → SetupWorkflowFromTemplateView-BUzzXtBr.js.map} +1 -1
  88. package/dist/assets/{SigninView-BPLGsvzz.js → SigninView-B3CNL-yp.js} +2 -2
  89. package/dist/assets/{SigninView-BPLGsvzz.js.map → SigninView-B3CNL-yp.js.map} +1 -1
  90. package/dist/assets/{SignoutView-BySf9D7k.js → SignoutView-svcLavkC.js} +2 -2
  91. package/dist/assets/{SignoutView-BySf9D7k.js.map → SignoutView-svcLavkC.js.map} +1 -1
  92. package/dist/assets/{SignupView-EU3JWt4T.js → SignupView-DJWRTPKF.js} +2 -2
  93. package/dist/assets/{SignupView-EU3JWt4T.js.map → SignupView-DJWRTPKF.js.map} +1 -1
  94. package/dist/assets/{TemplateDetails-Cemx-ozB.js → TemplateDetails-BnbiWxo-.js} +2 -2
  95. package/dist/assets/{TemplateDetails-Cemx-ozB.js.map → TemplateDetails-BnbiWxo-.js.map} +1 -1
  96. package/dist/assets/{TemplateList-h3b91b7e.js → TemplateList-By-t2s0M.js} +2 -2
  97. package/dist/assets/{TemplateList-h3b91b7e.js.map → TemplateList-By-t2s0M.js.map} +1 -1
  98. package/dist/assets/{TemplatesCollectionView-aBX3f7Pp.js → TemplatesCollectionView-D2L1fmSc.js} +2 -2
  99. package/dist/assets/{TemplatesCollectionView-aBX3f7Pp.js.map → TemplatesCollectionView-D2L1fmSc.js.map} +1 -1
  100. package/dist/assets/{TemplatesSearchView-DyoC9WUR.js → TemplatesSearchView-Bmr6Nd6g.js} +2 -2
  101. package/dist/assets/{TemplatesSearchView-DyoC9WUR.js.map → TemplatesSearchView-Bmr6Nd6g.js.map} +1 -1
  102. package/dist/assets/{TemplatesView-GQmC_sY8.js → TemplatesView-BbunSn-s.js} +2 -2
  103. package/dist/assets/{TemplatesView-GQmC_sY8.js.map → TemplatesView-BbunSn-s.js.map} +1 -1
  104. package/dist/assets/{TemplatesWorkflowView-C-0pXdDh.js → TemplatesWorkflowView-XxBIlMWY.js} +2 -2
  105. package/dist/assets/{TemplatesWorkflowView-C-0pXdDh.js.map → TemplatesWorkflowView-XxBIlMWY.js.map} +1 -1
  106. package/dist/assets/{VariablesView-BO5fdkwt.js → VariablesView-ZY5xLmKI.js} +2 -2
  107. package/dist/assets/{VariablesView-BO5fdkwt.js.map → VariablesView-ZY5xLmKI.js.map} +1 -1
  108. package/dist/assets/{WorkerView-C3Rdbsfq.js → WorkerView-DV19-i1-.js} +2 -2
  109. package/dist/assets/{WorkerView-C3Rdbsfq.js.map → WorkerView-DV19-i1-.js.map} +1 -1
  110. package/dist/assets/{WorkflowActivator-DQXSsw0V.js → WorkflowActivator-BXWURYao.js} +2 -2
  111. package/dist/assets/{WorkflowActivator-DQXSsw0V.js.map → WorkflowActivator-BXWURYao.js.map} +1 -1
  112. package/dist/assets/{WorkflowExecutionsInfoAccordion-DJPF47om.js → WorkflowExecutionsInfoAccordion-aldNazgt.js} +2 -2
  113. package/dist/assets/{WorkflowExecutionsInfoAccordion-DJPF47om.js.map → WorkflowExecutionsInfoAccordion-aldNazgt.js.map} +1 -1
  114. package/dist/assets/{WorkflowExecutionsLandingPage-DoSsHWxH.js → WorkflowExecutionsLandingPage-CaAameTk.js} +2 -2
  115. package/dist/assets/{WorkflowExecutionsLandingPage-DoSsHWxH.js.map → WorkflowExecutionsLandingPage-CaAameTk.js.map} +1 -1
  116. package/dist/assets/{WorkflowExecutionsPreview-Dt23N5A4.js → WorkflowExecutionsPreview-Bb-wJtr-.js} +2 -2
  117. package/dist/assets/{WorkflowExecutionsPreview-Dt23N5A4.js.map → WorkflowExecutionsPreview-Bb-wJtr-.js.map} +1 -1
  118. package/dist/assets/{WorkflowExecutionsView-CpAIVxYQ.js → WorkflowExecutionsView-D7nlOP1-.js} +2 -2
  119. package/dist/assets/{WorkflowExecutionsView-CpAIVxYQ.js.map → WorkflowExecutionsView-D7nlOP1-.js.map} +1 -1
  120. package/dist/assets/{WorkflowHistory-D1-E_J_s.js → WorkflowHistory-C6zCGFoY.js} +2 -2
  121. package/dist/assets/{WorkflowHistory-D1-E_J_s.js.map → WorkflowHistory-C6zCGFoY.js.map} +1 -1
  122. package/dist/assets/{WorkflowOnboardingView-fzAZuVh5.js → WorkflowOnboardingView-Bu_Oqtr7.js} +2 -2
  123. package/dist/assets/{WorkflowOnboardingView-fzAZuVh5.js.map → WorkflowOnboardingView-Bu_Oqtr7.js.map} +1 -1
  124. package/dist/assets/{WorkflowPreview-BkL2jDRm.js → WorkflowPreview-CVwpKdpj.js} +2 -2
  125. package/dist/assets/{WorkflowPreview-BkL2jDRm.js.map → WorkflowPreview-CVwpKdpj.js.map} +1 -1
  126. package/dist/assets/{WorkflowsView-rbygROmM.js → WorkflowsView-DVeAZ2zW.js} +2 -2
  127. package/dist/assets/{WorkflowsView-rbygROmM.js.map → WorkflowsView-DVeAZ2zW.js.map} +1 -1
  128. package/dist/assets/{cloud-B90x0-JC.js → cloud-BRhZDk2r.js} +2 -2
  129. package/dist/assets/{cloud-B90x0-JC.js.map → cloud-BRhZDk2r.js.map} +1 -1
  130. package/dist/assets/{collaboration.store-ElxCV91F.js → collaboration.store-Ol7bcCFc.js} +2 -2
  131. package/dist/assets/{collaboration.store-ElxCV91F.js.map → collaboration.store-Ol7bcCFc.js.map} +1 -1
  132. package/dist/assets/{index-BE0Xl-jy.js → index-1OxaEeO3.js} +4 -4
  133. package/dist/assets/{index-BE0Xl-jy.js.map → index-1OxaEeO3.js.map} +1 -1
  134. package/dist/assets/{nodeCreator.store-Q1T99YCl.js → nodeCreator.store-FIsc3SCx.js} +2 -2
  135. package/dist/assets/{nodeCreator.store-Q1T99YCl.js.map → nodeCreator.store-FIsc3SCx.js.map} +1 -1
  136. package/dist/assets/{templateActions-B7R6qRak.js → templateActions-w_1vSarr.js} +2 -2
  137. package/dist/assets/{templateActions-B7R6qRak.js.map → templateActions-w_1vSarr.js.map} +1 -1
  138. package/dist/assets/{useExecutionDebugging-BJ0CgMh8.js → useExecutionDebugging-EHinBq_u.js} +2 -2
  139. package/dist/assets/{useExecutionDebugging-BJ0CgMh8.js.map → useExecutionDebugging-EHinBq_u.js.map} +1 -1
  140. package/dist/assets/{useExecutionHelpers-D3294Pbg.js → useExecutionHelpers-LeKoU_T-.js} +2 -2
  141. package/dist/assets/{useExecutionHelpers-D3294Pbg.js.map → useExecutionHelpers-LeKoU_T-.js.map} +1 -1
  142. package/dist/assets/{usePushConnection-CsYeEXN4.js → usePushConnection-PQgFeT_8.js} +2 -2
  143. package/dist/assets/{usePushConnection-CsYeEXN4.js.map → usePushConnection-PQgFeT_8.js.map} +1 -1
  144. package/dist/assets/{useUserHelpers-CzNhI0vP.js → useUserHelpers-DZtbUAMm.js} +2 -2
  145. package/dist/assets/{useUserHelpers-CzNhI0vP.js.map → useUserHelpers-DZtbUAMm.js.map} +1 -1
  146. package/dist/assets/{useWorkflowActivate-D8iK20ua.js → useWorkflowActivate-npf1npdP.js} +2 -2
  147. package/dist/assets/{useWorkflowActivate-D8iK20ua.js.map → useWorkflowActivate-npf1npdP.js.map} +1 -1
  148. package/dist/index.html +1 -1
  149. package/package.json +1 -1
  150. package/dist/assets/CollectionParameter-BXMOfisf.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{G as d,aH as g,az as v,ag as a,l as _,m as h,U as n,O as l,p as r,S,T as m,I as o,r as R,b as $,K as C}from"./vendor-Dv5OeN6t.js";import{e as I,b as f,l as y,V as e,t as U,a2 as O,a1 as w,cK as G}from"./index-BE0Xl-jy.js";import{m as k}from"./pinia-sugP77Im.js";import{u as B}from"./useUserHelpers-CzNhI0vP.js";import{_ as b}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const L=d({name:"SettingsSidebar",setup(){const t=g(),s=v();return{...B(t,s)}},computed:{...k(y,f,I),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(),route:{to:{name:e.USAGE}}},{id:"settings-personal",icon:"user-circle",label:this.$locale.baseText("settings.personal"),position:"top",available:this.canAccessPersonalSettings(),route:{to:{name:e.PERSONAL_SETTINGS}}},{id:"settings-users",icon:"user-friends",label:this.$locale.baseText("settings.users"),position:"top",available:this.canAccessUsersSettings(),route:{to:{name:e.USERS_SETTINGS}}},{id:"settings-api",icon:"plug",label:this.$locale.baseText("settings.n8napi"),position:"top",available:this.canAccessApiSettings(),route:{to:{name:e.API_SETTINGS}}},{id:"settings-external-secrets",icon:"vault",label:this.$locale.baseText("settings.externalSecrets.title"),position:"top",available:this.canAccessExternalSecrets(),route:{to:{name:e.EXTERNAL_SECRETS_SETTINGS}}},{id:"settings-source-control",icon:"code-branch",label:this.$locale.baseText("settings.sourceControl.title"),position:"top",available:this.canAccessSourceControl(),route:{to:{name:e.SOURCE_CONTROL}}},{id:"settings-sso",icon:"user-lock",label:this.$locale.baseText("settings.sso"),position:"top",available:this.canAccessSso(),route:{to:{name:e.SSO_SETTINGS}}},{id:"settings-ldap",icon:"network-wired",label:this.$locale.baseText("settings.ldap"),position:"top",available:this.canAccessLdapSettings(),route:{to:{name:e.LDAP_SETTINGS}}},{id:"settings-workersview",icon:"project-diagram",label:this.$locale.baseText("mainSidebar.workersView"),position:"top",available:this.settingsStore.isQueueModeEnabled&&U(["rbac"],{rbac:{scope:"workersView:manage"}}),route:{to:{name: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(),route:{to:{name:e.LOG_STREAMING_SETTINGS}}}),t.push({id:"settings-community-nodes",icon:"cube",label:this.$locale.baseText("settings.communityNodes"),position:"top",available:this.canAccessCommunityNodes(),route:{to:{name: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.settingsStore.isPublicApiEnabled&&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)},canAccessSso(){return this.canUserAccessRouteByName(e.SSO_SETTINGS)},onVersionClick(){this.uiStore.openModal(O)},openUpdatesPanel(){this.uiStore.openModal(w)},async handleSelect(t){switch(t){case"users":case"logging":this.$router.push({name:e.FAKE_DOOR,params:{featureId:t}}).catch(()=>{});break}}}}),M="_container_w9grj_1",P="_returnButton_w9grj_10",V="_versionContainer_w9grj_18",x={container:M,returnButton:P,versionContainer:V},D={class:"mr-xs"};function F(t,s,c,p,i,T){const u=a("font-awesome-icon"),A=a("n8n-heading"),E=a("n8n-link"),N=a("n8n-menu");return _(),h("div",{class:o(t.$style.container)},[n(N,{items:t.sidebarMenuItems,onSelect:t.handleSelect},{header:l(()=>[r("div",{class:o(t.$style.returnButton),"data-test-id":"settings-back",onClick:s[0]||(s[0]=Q=>t.$emit("return"))},[r("i",D,[n(u,{icon:"arrow-left"})]),n(A,{size:"large",bold:!0},{default:l(()=>[S(m(t.$locale.baseText("settings")),1)]),_:1})],2)]),menuSuffix:l(()=>[r("div",{class:o(t.$style.versionContainer)},[n(E,{size:"small",onClick:t.onVersionClick},{default:l(()=>[S(m(t.$locale.baseText("settings.version"))+" "+m(t.rootStore.versionCli),1)]),_:1},8,["onClick"])],2)]),_:1},8,["items","onSelect"])],2)}const K={$style:x},j=b(L,[["render",F],["__cssModules",K]]),z=d({__name:"SettingsView",setup(t){const s=g(),c=R();function p(){s.push(G(c.value)?c.value:{name:e.HOMEPAGE})}return $(()=>{c.value=s.options.history.state.back}),(i,T)=>{const u=a("router-view");return _(),h("div",{class:o(i.$style.container)},[n(j,{onReturn:p}),r("div",{class:o(i.$style.contentContainer)},[r("div",{class:o(i.$style.content)},[n(u,C({name:"settingsView"},i.$attrs),null,16)],2)],2)],2)}}}),Y="_container_11adc_1",H="_contentContainer_11adc_8 _container_11adc_1",W="_content_11adc_8",X={container:Y,contentContainer:H,content:W},q={$style:X},fe=b(z,[["__cssModules",q]]);export{fe as default};
2
- //# sourceMappingURL=SettingsView-DMxqsNh0.js.map
1
+ import{G as d,aH as g,az as v,ag as a,l as _,m as h,U as n,O as l,p as r,S,T as m,I as o,r as R,b as $,K as C}from"./vendor-Dv5OeN6t.js";import{e as I,b as f,l as y,V as e,t as U,a2 as O,a1 as w,cK as G}from"./index-1OxaEeO3.js";import{m as k}from"./pinia-sugP77Im.js";import{u as B}from"./useUserHelpers-DZtbUAMm.js";import{_ as b}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const L=d({name:"SettingsSidebar",setup(){const t=g(),s=v();return{...B(t,s)}},computed:{...k(y,f,I),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(),route:{to:{name:e.USAGE}}},{id:"settings-personal",icon:"user-circle",label:this.$locale.baseText("settings.personal"),position:"top",available:this.canAccessPersonalSettings(),route:{to:{name:e.PERSONAL_SETTINGS}}},{id:"settings-users",icon:"user-friends",label:this.$locale.baseText("settings.users"),position:"top",available:this.canAccessUsersSettings(),route:{to:{name:e.USERS_SETTINGS}}},{id:"settings-api",icon:"plug",label:this.$locale.baseText("settings.n8napi"),position:"top",available:this.canAccessApiSettings(),route:{to:{name:e.API_SETTINGS}}},{id:"settings-external-secrets",icon:"vault",label:this.$locale.baseText("settings.externalSecrets.title"),position:"top",available:this.canAccessExternalSecrets(),route:{to:{name:e.EXTERNAL_SECRETS_SETTINGS}}},{id:"settings-source-control",icon:"code-branch",label:this.$locale.baseText("settings.sourceControl.title"),position:"top",available:this.canAccessSourceControl(),route:{to:{name:e.SOURCE_CONTROL}}},{id:"settings-sso",icon:"user-lock",label:this.$locale.baseText("settings.sso"),position:"top",available:this.canAccessSso(),route:{to:{name:e.SSO_SETTINGS}}},{id:"settings-ldap",icon:"network-wired",label:this.$locale.baseText("settings.ldap"),position:"top",available:this.canAccessLdapSettings(),route:{to:{name:e.LDAP_SETTINGS}}},{id:"settings-workersview",icon:"project-diagram",label:this.$locale.baseText("mainSidebar.workersView"),position:"top",available:this.settingsStore.isQueueModeEnabled&&U(["rbac"],{rbac:{scope:"workersView:manage"}}),route:{to:{name: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(),route:{to:{name:e.LOG_STREAMING_SETTINGS}}}),t.push({id:"settings-community-nodes",icon:"cube",label:this.$locale.baseText("settings.communityNodes"),position:"top",available:this.canAccessCommunityNodes(),route:{to:{name: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.settingsStore.isPublicApiEnabled&&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)},canAccessSso(){return this.canUserAccessRouteByName(e.SSO_SETTINGS)},onVersionClick(){this.uiStore.openModal(O)},openUpdatesPanel(){this.uiStore.openModal(w)},async handleSelect(t){switch(t){case"users":case"logging":this.$router.push({name:e.FAKE_DOOR,params:{featureId:t}}).catch(()=>{});break}}}}),M="_container_w9grj_1",P="_returnButton_w9grj_10",V="_versionContainer_w9grj_18",x={container:M,returnButton:P,versionContainer:V},D={class:"mr-xs"};function F(t,s,c,p,i,T){const u=a("font-awesome-icon"),A=a("n8n-heading"),E=a("n8n-link"),N=a("n8n-menu");return _(),h("div",{class:o(t.$style.container)},[n(N,{items:t.sidebarMenuItems,onSelect:t.handleSelect},{header:l(()=>[r("div",{class:o(t.$style.returnButton),"data-test-id":"settings-back",onClick:s[0]||(s[0]=Q=>t.$emit("return"))},[r("i",D,[n(u,{icon:"arrow-left"})]),n(A,{size:"large",bold:!0},{default:l(()=>[S(m(t.$locale.baseText("settings")),1)]),_:1})],2)]),menuSuffix:l(()=>[r("div",{class:o(t.$style.versionContainer)},[n(E,{size:"small",onClick:t.onVersionClick},{default:l(()=>[S(m(t.$locale.baseText("settings.version"))+" "+m(t.rootStore.versionCli),1)]),_:1},8,["onClick"])],2)]),_:1},8,["items","onSelect"])],2)}const K={$style:x},j=b(L,[["render",F],["__cssModules",K]]),z=d({__name:"SettingsView",setup(t){const s=g(),c=R();function p(){s.push(G(c.value)?c.value:{name:e.HOMEPAGE})}return $(()=>{c.value=s.options.history.state.back}),(i,T)=>{const u=a("router-view");return _(),h("div",{class:o(i.$style.container)},[n(j,{onReturn:p}),r("div",{class:o(i.$style.contentContainer)},[r("div",{class:o(i.$style.content)},[n(u,C({name:"settingsView"},i.$attrs),null,16)],2)],2)],2)}}}),Y="_container_11adc_1",H="_contentContainer_11adc_8 _container_11adc_1",W="_content_11adc_8",X={container:Y,contentContainer:H,content:W},q={$style:X},fe=b(z,[["__cssModules",q]]);export{fe as default};
2
+ //# sourceMappingURL=SettingsView-DJ78VuiY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsView-DMxqsNh0.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\" data-test-id=\"settings-back\" @click=\"$emit('return')\">\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 size=\"small\" @click=\"onVersionClick\">\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 { useUserHelpers } from '@/composables/useUserHelpers';\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/root.store';\nimport { hasPermission } from '@/utils/rbac/permissions';\nimport { useRoute, useRouter } from 'vue-router';\n\nexport default defineComponent({\n\tname: 'SettingsSidebar',\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst route = useRoute();\n\t\treturn {\n\t\t\t...useUserHelpers(router, route),\n\t\t};\n\t},\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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: VIEWS.EXTERNAL_SECRETS_SETTINGS } },\n\t\t\t\t},\n\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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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 &&\n\t\t\t\t\t\thasPermission(['rbac'], { rbac: { scope: 'workersView:manage' } }),\n\t\t\t\t\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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 (\n\t\t\t\tthis.settingsStore.isPublicApiEnabled && this.canUserAccessRouteByName(VIEWS.API_SETTINGS)\n\t\t\t);\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\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 handleSelect(key: string) {\n\t\t\tswitch (key) {\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\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","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue';\nimport type { HistoryState } from 'vue-router';\nimport { useRouter } from 'vue-router';\nimport { VIEWS } from '@/constants';\nimport SettingsSidebar from '@/components/SettingsSidebar.vue';\nimport { isRouteLocationRaw } from '@/utils/typeGuards';\n\nconst router = useRouter();\n\nconst previousRoute = ref<HistoryState[string] | undefined>();\n\nfunction onReturn() {\n\tvoid router.push(\n\t\tisRouteLocationRaw(previousRoute.value) ? previousRoute.value : { name: VIEWS.HOMEPAGE },\n\t);\n}\n\nonMounted(() => {\n\tpreviousRoute.value = router.options.history.state.back;\n});\n</script>\n\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<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","router","useRouter","route","useRoute","useUserHelpers","mapStores","useRootStore","useSettingsStore","useUIStore","menuItems","VIEWS","hasPermission","item","ABOUT_MODAL_KEY","VERSIONS_MODAL_KEY","key","_resolveComponent","_normalizeClass","_ctx","handleSelect","_withCtx","_createElementVNode","$emit","_cache","$event","_createVNode","_component_font_awesome_icon","_component_n8n_heading","_createTextVNode","_toDisplayString","$style","onVersionClick","previousRoute","ref","onReturn","isRouteLocationRaw","onMounted"],"mappings":"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"}
1
+ {"version":3,"file":"SettingsView-DJ78VuiY.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\" data-test-id=\"settings-back\" @click=\"$emit('return')\">\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 size=\"small\" @click=\"onVersionClick\">\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 { useUserHelpers } from '@/composables/useUserHelpers';\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/root.store';\nimport { hasPermission } from '@/utils/rbac/permissions';\nimport { useRoute, useRouter } from 'vue-router';\n\nexport default defineComponent({\n\tname: 'SettingsSidebar',\n\tsetup() {\n\t\tconst router = useRouter();\n\t\tconst route = useRoute();\n\t\treturn {\n\t\t\t...useUserHelpers(router, route),\n\t\t};\n\t},\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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: VIEWS.EXTERNAL_SECRETS_SETTINGS } },\n\t\t\t\t},\n\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\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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 &&\n\t\t\t\t\t\thasPermission(['rbac'], { rbac: { scope: 'workersView:manage' } }),\n\t\t\t\t\troute: { to: { name: 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\troute: { to: { name: 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\troute: { to: { name: 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 (\n\t\t\t\tthis.settingsStore.isPublicApiEnabled && this.canUserAccessRouteByName(VIEWS.API_SETTINGS)\n\t\t\t);\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\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 handleSelect(key: string) {\n\t\t\tswitch (key) {\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\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","<script lang=\"ts\" setup>\nimport { onMounted, ref } from 'vue';\nimport type { HistoryState } from 'vue-router';\nimport { useRouter } from 'vue-router';\nimport { VIEWS } from '@/constants';\nimport SettingsSidebar from '@/components/SettingsSidebar.vue';\nimport { isRouteLocationRaw } from '@/utils/typeGuards';\n\nconst router = useRouter();\n\nconst previousRoute = ref<HistoryState[string] | undefined>();\n\nfunction onReturn() {\n\tvoid router.push(\n\t\tisRouteLocationRaw(previousRoute.value) ? previousRoute.value : { name: VIEWS.HOMEPAGE },\n\t);\n}\n\nonMounted(() => {\n\tpreviousRoute.value = router.options.history.state.back;\n});\n</script>\n\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<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","router","useRouter","route","useRoute","useUserHelpers","mapStores","useRootStore","useSettingsStore","useUIStore","menuItems","VIEWS","hasPermission","item","ABOUT_MODAL_KEY","VERSIONS_MODAL_KEY","key","_resolveComponent","_normalizeClass","_ctx","handleSelect","_withCtx","_createElementVNode","$emit","_cache","$event","_createVNode","_component_font_awesome_icon","_component_n8n_heading","_createTextVNode","_toDisplayString","$style","onVersionClick","previousRoute","ref","onReturn","isRouteLocationRaw","onMounted"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{A as o}from"./AuthView-CMxdNKZJ.js";import{u as i,a as s,e as m,b as p,V as a}from"./index-BE0Xl-jy.js";import{m as l}from"./pinia-sugP77Im.js";import{G as n,ag as u,l as c,M as h}from"./vendor-Dv5OeN6t.js";import{_ as d}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const f=n({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=u("AuthView");return c(),h(r,{form:e.FORM_CONFIG,"form-loading":e.loading,"data-test-id":"setup-form",onSubmit:e.onSubmit},null,8,["form","form-loading","onSubmit"])}const X=d(f,[["render",S]]);export{X as default};
2
- //# sourceMappingURL=SetupView-tkyttChl.js.map
1
+ import{A as o}from"./AuthView-B_jZMnGj.js";import{u as i,a as s,e as m,b as p,V as a}from"./index-1OxaEeO3.js";import{m as l}from"./pinia-sugP77Im.js";import{G as n,ag as u,l as c,M as h}from"./vendor-Dv5OeN6t.js";import{_ as d}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const f=n({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=u("AuthView");return c(),h(r,{form:e.FORM_CONFIG,"form-loading":e.loading,"data-test-id":"setup-form",onSubmit:e.onSubmit},null,8,["form","form-loading","onSubmit"])}const X=d(f,[["render",S]]);export{X as default};
2
+ //# sourceMappingURL=SetupView-C70Dkfed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetupView-tkyttChl.js","sources":["../../src/views/SetupView.vue"],"sourcesContent":["<template>\n\t<AuthView\n\t\t:form=\"FORM_CONFIG\"\n\t\t:form-loading=\"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","onSubmit"],"mappings":"woCAqBA,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,EAAqBC,EAAAC,EAAA,CACtB,KAAAC,EAAA,YACC,eAAQC,EAAAA,QAAAA,eAAAA"}
1
+ {"version":3,"file":"SetupView-C70Dkfed.js","sources":["../../src/views/SetupView.vue"],"sourcesContent":["<template>\n\t<AuthView\n\t\t:form=\"FORM_CONFIG\"\n\t\t:form-loading=\"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","onSubmit"],"mappings":"woCAqBA,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,EAAqBC,EAAAC,EAAA,CACtB,KAAAC,EAAA,YACC,eAAQC,EAAAA,QAAAA,eAAAA"}
@@ -1,2 +1,2 @@
1
- import{j as _,a4 as E,e as S,bG as T,ep as w,dd as b,eq as i,x as k}from"./index-BE0Xl-jy.js";import{G as v,e as n,d as y,y as M,ag as N,l as g,M as I,u as x,R as A}from"./vendor-Dv5OeN6t.js";import"./pinia-sugP77Im.js";import"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const pe=v({__name:"SetupWorkflowCredentialsButton",setup(B){const o=_(),m=E(),a=S(),u=T(),d=k(),p=n(()=>{var e,t;return!!((t=(e=o.workflow)==null?void 0:e.meta)!=null&&t.templateCredsSetupCompleted)}),l=n(()=>{if(p.value)return!0;const e=o.getNodes();return e.length?e.every(t=>w(m,t)):!1}),c=n(()=>{var r,s;const e=u.isFeatureEnabled(b),t=!!((s=(r=o.workflow)==null?void 0:r.meta)!=null&&s.templateId);return!e||!t||p.value?!1:!l.value}),f=y(l,e=>{e&&(o.addToWorkflowMetadata({templateCredsSetupCompleted:!0}),f())}),C=()=>{a.openModal(i)};return M(()=>{a.closeModal(i)}),(e,t)=>{const r=N("n8n-button");return c.value?(g(),I(r,{key:0,label:x(d).baseText("nodeView.setupTemplate"),size:"large",icon:"box-open",type:"secondary",onClick:t[0]||(t[0]=s=>C())},null,8,["label"])):A("",!0)}}});export{pe as default};
2
- //# sourceMappingURL=SetupWorkflowCredentialsButton-B3HZvKQp.js.map
1
+ import{j as _,a4 as E,e as S,bG as T,ep as w,dd as b,eq as i,x as k}from"./index-1OxaEeO3.js";import{G as v,e as n,d as y,y as M,ag as N,l as g,M as I,u as x,R as A}from"./vendor-Dv5OeN6t.js";import"./pinia-sugP77Im.js";import"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const pe=v({__name:"SetupWorkflowCredentialsButton",setup(B){const o=_(),m=E(),a=S(),u=T(),d=k(),p=n(()=>{var e,t;return!!((t=(e=o.workflow)==null?void 0:e.meta)!=null&&t.templateCredsSetupCompleted)}),l=n(()=>{if(p.value)return!0;const e=o.getNodes();return e.length?e.every(t=>w(m,t)):!1}),c=n(()=>{var r,s;const e=u.isFeatureEnabled(b),t=!!((s=(r=o.workflow)==null?void 0:r.meta)!=null&&s.templateId);return!e||!t||p.value?!1:!l.value}),f=y(l,e=>{e&&(o.addToWorkflowMetadata({templateCredsSetupCompleted:!0}),f())}),C=()=>{a.openModal(i)};return M(()=>{a.closeModal(i)}),(e,t)=>{const r=N("n8n-button");return c.value?(g(),I(r,{key:0,label:x(d).baseText("nodeView.setupTemplate"),size:"large",icon:"box-open",type:"secondary",onClick:t[0]||(t[0]=s=>C())},null,8,["label"])):A("",!0)}}});export{pe as default};
2
+ //# sourceMappingURL=SetupWorkflowCredentialsButton-CEQ1LrFl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetupWorkflowCredentialsButton-B3HZvKQp.js","sources":["../../src/components/SetupWorkflowCredentialsButton/SetupWorkflowCredentialsButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, watch } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { SETUP_CREDENTIALS_MODAL_KEY, TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT } from '@/constants';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { usePostHog } from '@/stores/posthog.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { doesNodeHaveAllCredentialsFilled } from '@/utils/nodes/nodeTransforms';\n\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst uiStore = useUIStore();\nconst posthogStore = usePostHog();\nconst i18n = useI18n();\n\nconst isTemplateSetupCompleted = computed(() => {\n\treturn !!workflowsStore.workflow?.meta?.templateCredsSetupCompleted;\n});\n\nconst allCredentialsFilled = computed(() => {\n\tif (isTemplateSetupCompleted.value) {\n\t\treturn true;\n\t}\n\n\tconst nodes = workflowsStore.getNodes();\n\tif (!nodes.length) {\n\t\treturn false;\n\t}\n\n\treturn nodes.every((node) => doesNodeHaveAllCredentialsFilled(nodeTypesStore, node));\n});\n\nconst showButton = computed(() => {\n\tconst isFeatureEnabled = posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT);\n\tconst isCreatedFromTemplate = !!workflowsStore.workflow?.meta?.templateId;\n\tif (!isFeatureEnabled || !isCreatedFromTemplate || isTemplateSetupCompleted.value) {\n\t\treturn false;\n\t}\n\n\treturn !allCredentialsFilled.value;\n});\n\nconst unsubscribe = watch(allCredentialsFilled, (newValue) => {\n\tif (newValue) {\n\t\tworkflowsStore.addToWorkflowMetadata({\n\t\t\ttemplateCredsSetupCompleted: true,\n\t\t});\n\n\t\tunsubscribe();\n\t}\n});\n\nconst handleClick = () => {\n\tuiStore.openModal(SETUP_CREDENTIALS_MODAL_KEY);\n};\n\nonBeforeUnmount(() => {\n\tuiStore.closeModal(SETUP_CREDENTIALS_MODAL_KEY);\n});\n</script>\n\n<template>\n\t<n8n-button\n\t\tv-if=\"showButton\"\n\t\t:label=\"i18n.baseText('nodeView.setupTemplate')\"\n\t\tsize=\"large\"\n\t\ticon=\"box-open\"\n\t\ttype=\"secondary\"\n\t\t@click=\"handleClick()\"\n\t/>\n</template>\n"],"names":["workflowsStore","useWorkflowsStore","nodeTypesStore","useNodeTypesStore","uiStore","useUIStore","posthogStore","usePostHog","i18n","useI18n","isTemplateSetupCompleted","computed","_b","_a","allCredentialsFilled","nodes","node","doesNodeHaveAllCredentialsFilled","showButton","isFeatureEnabled","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","isCreatedFromTemplate","unsubscribe","watch","newValue","handleClick","SETUP_CREDENTIALS_MODAL_KEY","onBeforeUnmount"],"mappings":"+rCAUA,MAAMA,EAAiBC,IACjBC,EAAiBC,IACjBC,EAAUC,IACVC,EAAeC,IACfC,EAAOC,IAEPC,EAA2BC,EAAS,IAAM,SAC/C,MAAO,CAAC,GAACC,GAAAC,EAAAb,EAAe,WAAf,YAAAa,EAAyB,OAAzB,MAAAD,EAA+B,4BAAA,CACxC,EAEKE,EAAuBH,EAAS,IAAM,CAC3C,GAAID,EAAyB,MACrB,MAAA,GAGF,MAAAK,EAAQf,EAAe,WACzB,OAACe,EAAM,OAIJA,EAAM,MAAOC,GAASC,EAAiCf,EAAgBc,CAAI,CAAC,EAH3E,EAG2E,CACnF,EAEKE,EAAaP,EAAS,IAAM,SAC3B,MAAAQ,EAAmBb,EAAa,iBAAiBc,CAAoC,EACrFC,EAAwB,CAAC,GAACT,GAAAC,EAAAb,EAAe,WAAf,YAAAa,EAAyB,OAAzB,MAAAD,EAA+B,YAC/D,MAAI,CAACO,GAAoB,CAACE,GAAyBX,EAAyB,MACpE,GAGD,CAACI,EAAqB,KAAA,CAC7B,EAEKQ,EAAcC,EAAMT,EAAuBU,GAAa,CACzDA,IACHxB,EAAe,sBAAsB,CACpC,4BAA6B,EAAA,CAC7B,EAEWsB,IACb,CACA,EAEKG,EAAc,IAAM,CACzBrB,EAAQ,UAAUsB,CAA2B,CAAA,EAG9C,OAAAC,EAAgB,IAAM,CACrBvB,EAAQ,WAAWsB,CAA2B,CAAA,CAC9C"}
1
+ {"version":3,"file":"SetupWorkflowCredentialsButton-CEQ1LrFl.js","sources":["../../src/components/SetupWorkflowCredentialsButton/SetupWorkflowCredentialsButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, watch } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { SETUP_CREDENTIALS_MODAL_KEY, TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT } from '@/constants';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { usePostHog } from '@/stores/posthog.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { doesNodeHaveAllCredentialsFilled } from '@/utils/nodes/nodeTransforms';\n\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst uiStore = useUIStore();\nconst posthogStore = usePostHog();\nconst i18n = useI18n();\n\nconst isTemplateSetupCompleted = computed(() => {\n\treturn !!workflowsStore.workflow?.meta?.templateCredsSetupCompleted;\n});\n\nconst allCredentialsFilled = computed(() => {\n\tif (isTemplateSetupCompleted.value) {\n\t\treturn true;\n\t}\n\n\tconst nodes = workflowsStore.getNodes();\n\tif (!nodes.length) {\n\t\treturn false;\n\t}\n\n\treturn nodes.every((node) => doesNodeHaveAllCredentialsFilled(nodeTypesStore, node));\n});\n\nconst showButton = computed(() => {\n\tconst isFeatureEnabled = posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT);\n\tconst isCreatedFromTemplate = !!workflowsStore.workflow?.meta?.templateId;\n\tif (!isFeatureEnabled || !isCreatedFromTemplate || isTemplateSetupCompleted.value) {\n\t\treturn false;\n\t}\n\n\treturn !allCredentialsFilled.value;\n});\n\nconst unsubscribe = watch(allCredentialsFilled, (newValue) => {\n\tif (newValue) {\n\t\tworkflowsStore.addToWorkflowMetadata({\n\t\t\ttemplateCredsSetupCompleted: true,\n\t\t});\n\n\t\tunsubscribe();\n\t}\n});\n\nconst handleClick = () => {\n\tuiStore.openModal(SETUP_CREDENTIALS_MODAL_KEY);\n};\n\nonBeforeUnmount(() => {\n\tuiStore.closeModal(SETUP_CREDENTIALS_MODAL_KEY);\n});\n</script>\n\n<template>\n\t<n8n-button\n\t\tv-if=\"showButton\"\n\t\t:label=\"i18n.baseText('nodeView.setupTemplate')\"\n\t\tsize=\"large\"\n\t\ticon=\"box-open\"\n\t\ttype=\"secondary\"\n\t\t@click=\"handleClick()\"\n\t/>\n</template>\n"],"names":["workflowsStore","useWorkflowsStore","nodeTypesStore","useNodeTypesStore","uiStore","useUIStore","posthogStore","usePostHog","i18n","useI18n","isTemplateSetupCompleted","computed","_b","_a","allCredentialsFilled","nodes","node","doesNodeHaveAllCredentialsFilled","showButton","isFeatureEnabled","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","isCreatedFromTemplate","unsubscribe","watch","newValue","handleClick","SETUP_CREDENTIALS_MODAL_KEY","onBeforeUnmount"],"mappings":"+rCAUA,MAAMA,EAAiBC,IACjBC,EAAiBC,IACjBC,EAAUC,IACVC,EAAeC,IACfC,EAAOC,IAEPC,EAA2BC,EAAS,IAAM,SAC/C,MAAO,CAAC,GAACC,GAAAC,EAAAb,EAAe,WAAf,YAAAa,EAAyB,OAAzB,MAAAD,EAA+B,4BAAA,CACxC,EAEKE,EAAuBH,EAAS,IAAM,CAC3C,GAAID,EAAyB,MACrB,MAAA,GAGF,MAAAK,EAAQf,EAAe,WACzB,OAACe,EAAM,OAIJA,EAAM,MAAOC,GAASC,EAAiCf,EAAgBc,CAAI,CAAC,EAH3E,EAG2E,CACnF,EAEKE,EAAaP,EAAS,IAAM,SAC3B,MAAAQ,EAAmBb,EAAa,iBAAiBc,CAAoC,EACrFC,EAAwB,CAAC,GAACT,GAAAC,EAAAb,EAAe,WAAf,YAAAa,EAAyB,OAAzB,MAAAD,EAA+B,YAC/D,MAAI,CAACO,GAAoB,CAACE,GAAyBX,EAAyB,MACpE,GAGD,CAACI,EAAqB,KAAA,CAC7B,EAEKQ,EAAcC,EAAMT,EAAuBU,GAAa,CACzDA,IACHxB,EAAe,sBAAsB,CACpC,4BAA6B,EAAA,CAC7B,EAEWsB,IACb,CACA,EAEKG,EAAc,IAAM,CACzBrB,EAAQ,UAAUsB,CAA2B,CAAA,EAG9C,OAAAC,EAAgB,IAAM,CACrBvB,EAAQ,WAAWsB,CAA2B,CAAA,CAC9C"}
@@ -1,2 +1,2 @@
1
- import{r as U,e as k,G as D,az as K,aH as z,d as G,D as q,b as j,ag as W,l as o,M as f,O as C,u as a,S as x,T as $,p as h,I as u,m as A,F as Q,a7 as X,U as g}from"./vendor-Dv5OeN6t.js";import{d as J}from"./pinia-sugP77Im.js";import{$ as Y,a4 as Z,aR as ee,l as te,j as ae,dc as se,V as E,b4 as V,a3 as oe,G as H,bG as le,dd as re,de as ne,x as ie,df as de}from"./index-BE0Xl-jy.js";import{c as pe}from"./templateActions-B7R6qRak.js";import{a9 as ue,ar as ce,_ as me}from"./n8n-4UEsHtUL.js";import{T as fe}from"./TemplatesView-GQmC_sY8.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const ye=J("setupTemplate",()=>{const l=U(""),e=U(!0),d=U(!1),c=Y(),y=Z(),i=ee(),v=te(),N=ae(),r=k(()=>l.value?c.getFullTemplateById(l.value):null),R=k(()=>{var s;return((s=r.value)==null?void 0:s.workflow.nodes)??[]}),{appCredentials:P,credentialOverrides:b,credentialUsages:t,credentialsByKey:n,nodesRequiringCredentialsSorted:m,numFilledCredentials:I,selectedCredentialIdByKey:T,setSelectedCredentialId:p,unsetSelectedCredential:F}=se(R),w=s=>{l.value=s},O=new Set(["httpBasicAuth","httpCustomAuth","httpDigestAuth","httpHeaderAuth","oAuth1Api","oAuth2Api","httpQueryAuth"]),L=()=>{for(const s of t.value){if(O.has(s.credentialType))continue;const _=i.getCredentialsByType(s.credentialType);_.length===1&&(T.value[s.key]=_[0].id)}},B=async()=>{r.value||!l.value||(await c.fetchTemplateById(l.value),L())};return{credentialsByKey:n,isLoading:e,isSaving:d,appCredentials:P,nodesRequiringCredentialsSorted:m,template:r,credentialUsages:t,selectedCredentialIdByKey:T,credentialOverrides:b,numFilledCredentials:I,createWorkflow:async s=>{const{router:_}=s,S=H();if(r.value)try{d.value=!0;const M=await pe({template:r.value,credentialOverrides:b.value,rootStore:v,workflowsStore:N,nodeTypeProvider:y});S.track("User closed cred setup",{completed:!0,creds_filled:I.value,creds_needed:t.value.length,workflow_id:M.id}),S.track("User inserted workflow template",{source:"workflow",template_id:V(l.value),wf_template_repo_session_id:c.currentSessionId},{withPostHog:!0}),S.track("User saved new workflow from template",{template_id:V(l.value),workflow_id:M.id,wf_template_repo_session_id:c.currentSessionId}),await _.replace({name:E.WORKFLOW,params:{name:M.id}})}finally{d.value=!1}},skipSetup:async({router:s})=>{const _=oe(),S=H();await _.run("templatesWorkflowView.openWorkflow",{source:"workflow",template_id:l.value,wf_template_repo_session_id:c.currentSessionId}),S.track("User closed cred setup",{completed:!1,creds_filled:0,creds_needed:t.value.length,workflow_id:null}),await s.replace({name:E.TEMPLATE_IMPORT,params:{id:l.value}})},init:async()=>{e.value=!0;try{T.value={},await Promise.all([i.fetchAllCredentials(),i.fetchCredentialTypes(!1),y.loadNodeTypesIfNotLoaded(),B()]),L()}finally{e.value=!1}},loadTemplateIfNeeded:B,setInitialCredentialSelection:L,setTemplateId:w,setSelectedCredentialId:p,unsetSelectedCredential:F}}),ve={key:1},we=D({__name:"SetupWorkflowFromTemplateView",setup(l){const e=ye(),d=ie(),c=le(),y=K(),i=z(),v=k(()=>Array.isArray(y.params.id)?y.params.id[0]:y.params.id),N=k(()=>{var t;return((t=e.template)==null?void 0:t.name)??"unknown"}),r=k(()=>!e.isLoading),R=k(()=>i.resolve({name:E.TEMPLATE_IMPORT,params:{id:v.value}}).fullPath);G(v,async t=>{e.setTemplateId(t),await e.loadTemplateIfNeeded()});const P=async t=>{t.preventDefault(),await e.skipSetup({router:i})},b=async()=>!e.template?!1:e.credentialUsages.length===0?(await e.skipSetup({router:i}),!0):!1;return e.setTemplateId(v.value),q(async()=>{c.isFeatureEnabled(re)||i.replace({name:E.TEMPLATE_IMPORT,params:{id:v.value}})}),j(async()=>{await e.init(),await b()}),(t,n)=>{const m=W("n8n-loading"),I=W("n8n-button"),T=W("n8n-tooltip");return o(),f(fe,{"go-back-enabled":!0},{header:C(()=>[r.value?(o(),f(a(ue),{key:0,tag:"h1",size:"2xlarge"},{default:C(()=>[x($(a(d).baseText("templateSetup.title",{interpolate:{name:N.value}})),1)]),_:1})):(o(),f(m,{key:1,variant:"h1"}))]),content:C(()=>[h("div",{class:u(t.$style.grid)},[h("div",{class:u(t.$style.notice),"data-test-id":"info-callout"},[r.value?(o(),f(ne,{key:0,"app-credentials":a(e).appCredentials},null,8,["app-credentials"])):(o(),f(m,{key:1,variant:"p"}))],2),h("div",null,[r.value?(o(),A("ol",{key:0,class:u(t.$style.appCredentialsContainer)},[(o(!0),A(Q,null,X(a(e).credentialUsages,(p,F)=>(o(),f(de,{key:p.key,class:u(t.$style.appCredential),order:F+1,credentials:p,"selected-credential-id":a(e).selectedCredentialIdByKey[p.key],onCredentialSelected:n[0]||(n[0]=w=>a(e).setSelectedCredentialId(w.credentialUsageKey,w.credentialId)),onCredentialDeselected:n[1]||(n[1]=w=>a(e).unsetSelectedCredential(w.credentialUsageKey))},null,8,["class","order","credentials","selected-credential-id"]))),128))],2)):(o(),A("div",{key:1,class:u(t.$style.appCredentialsContainer)},[g(m,{class:u(t.$style.appCredential),variant:"p",rows:3},null,8,["class"]),g(m,{class:u(t.$style.appCredential),variant:"p",rows:3},null,8,["class"])],2))]),h("div",{class:u(t.$style.actions)},[g(a(ce),{href:R.value,"new-window":!1,onClick:n[2]||(n[2]=p=>P(p))},{default:C(()=>[x($(a(d).baseText("templateSetup.skip")),1)]),_:1},8,["href"]),r.value?(o(),f(T,{key:0,content:a(d).baseText("templateSetup.continue.button.fillRemaining"),disabled:a(e).numFilledCredentials>0},{default:C(()=>[g(I,{size:"large",label:a(d).baseText("templateSetup.continue.button"),disabled:a(e).isSaving||a(e).numFilledCredentials===0,"data-test-id":"continue-button",onClick:n[3]||(n[3]=p=>a(e).createWorkflow({router:a(i)}))},null,8,["label","disabled"])]),_:1},8,["content","disabled"])):(o(),A("div",ve,[g(m,{variant:"button"})]))],2)],2)]),_:1})}}}),_e="_grid_6bgsx_1",ke="_notice_6bgsx_9",Te="_appCredentialsContainer_6bgsx_13",Se="_appCredential_6bgsx_13",Ce="_actions_6bgsx_24",ge={grid:_e,notice:ke,appCredentialsContainer:Te,appCredential:Se,actions:Ce},be={$style:ge},lt=me(we,[["__cssModules",be]]);export{lt as default};
2
- //# sourceMappingURL=SetupWorkflowFromTemplateView-DL3b-TZS.js.map
1
+ import{r as U,e as k,G as D,az as K,aH as z,d as G,D as q,b as j,ag as W,l as o,M as f,O as C,u as a,S as x,T as $,p as h,I as u,m as A,F as Q,a7 as X,U as g}from"./vendor-Dv5OeN6t.js";import{d as J}from"./pinia-sugP77Im.js";import{$ as Y,a4 as Z,aR as ee,l as te,j as ae,dc as se,V as E,b4 as V,a3 as oe,G as H,bG as le,dd as re,de as ne,x as ie,df as de}from"./index-1OxaEeO3.js";import{c as pe}from"./templateActions-w_1vSarr.js";import{a9 as ue,ar as ce,_ as me}from"./n8n-4UEsHtUL.js";import{T as fe}from"./TemplatesView-BbunSn-s.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const ye=J("setupTemplate",()=>{const l=U(""),e=U(!0),d=U(!1),c=Y(),y=Z(),i=ee(),v=te(),N=ae(),r=k(()=>l.value?c.getFullTemplateById(l.value):null),R=k(()=>{var s;return((s=r.value)==null?void 0:s.workflow.nodes)??[]}),{appCredentials:P,credentialOverrides:b,credentialUsages:t,credentialsByKey:n,nodesRequiringCredentialsSorted:m,numFilledCredentials:I,selectedCredentialIdByKey:T,setSelectedCredentialId:p,unsetSelectedCredential:F}=se(R),w=s=>{l.value=s},O=new Set(["httpBasicAuth","httpCustomAuth","httpDigestAuth","httpHeaderAuth","oAuth1Api","oAuth2Api","httpQueryAuth"]),L=()=>{for(const s of t.value){if(O.has(s.credentialType))continue;const _=i.getCredentialsByType(s.credentialType);_.length===1&&(T.value[s.key]=_[0].id)}},B=async()=>{r.value||!l.value||(await c.fetchTemplateById(l.value),L())};return{credentialsByKey:n,isLoading:e,isSaving:d,appCredentials:P,nodesRequiringCredentialsSorted:m,template:r,credentialUsages:t,selectedCredentialIdByKey:T,credentialOverrides:b,numFilledCredentials:I,createWorkflow:async s=>{const{router:_}=s,S=H();if(r.value)try{d.value=!0;const M=await pe({template:r.value,credentialOverrides:b.value,rootStore:v,workflowsStore:N,nodeTypeProvider:y});S.track("User closed cred setup",{completed:!0,creds_filled:I.value,creds_needed:t.value.length,workflow_id:M.id}),S.track("User inserted workflow template",{source:"workflow",template_id:V(l.value),wf_template_repo_session_id:c.currentSessionId},{withPostHog:!0}),S.track("User saved new workflow from template",{template_id:V(l.value),workflow_id:M.id,wf_template_repo_session_id:c.currentSessionId}),await _.replace({name:E.WORKFLOW,params:{name:M.id}})}finally{d.value=!1}},skipSetup:async({router:s})=>{const _=oe(),S=H();await _.run("templatesWorkflowView.openWorkflow",{source:"workflow",template_id:l.value,wf_template_repo_session_id:c.currentSessionId}),S.track("User closed cred setup",{completed:!1,creds_filled:0,creds_needed:t.value.length,workflow_id:null}),await s.replace({name:E.TEMPLATE_IMPORT,params:{id:l.value}})},init:async()=>{e.value=!0;try{T.value={},await Promise.all([i.fetchAllCredentials(),i.fetchCredentialTypes(!1),y.loadNodeTypesIfNotLoaded(),B()]),L()}finally{e.value=!1}},loadTemplateIfNeeded:B,setInitialCredentialSelection:L,setTemplateId:w,setSelectedCredentialId:p,unsetSelectedCredential:F}}),ve={key:1},we=D({__name:"SetupWorkflowFromTemplateView",setup(l){const e=ye(),d=ie(),c=le(),y=K(),i=z(),v=k(()=>Array.isArray(y.params.id)?y.params.id[0]:y.params.id),N=k(()=>{var t;return((t=e.template)==null?void 0:t.name)??"unknown"}),r=k(()=>!e.isLoading),R=k(()=>i.resolve({name:E.TEMPLATE_IMPORT,params:{id:v.value}}).fullPath);G(v,async t=>{e.setTemplateId(t),await e.loadTemplateIfNeeded()});const P=async t=>{t.preventDefault(),await e.skipSetup({router:i})},b=async()=>!e.template?!1:e.credentialUsages.length===0?(await e.skipSetup({router:i}),!0):!1;return e.setTemplateId(v.value),q(async()=>{c.isFeatureEnabled(re)||i.replace({name:E.TEMPLATE_IMPORT,params:{id:v.value}})}),j(async()=>{await e.init(),await b()}),(t,n)=>{const m=W("n8n-loading"),I=W("n8n-button"),T=W("n8n-tooltip");return o(),f(fe,{"go-back-enabled":!0},{header:C(()=>[r.value?(o(),f(a(ue),{key:0,tag:"h1",size:"2xlarge"},{default:C(()=>[x($(a(d).baseText("templateSetup.title",{interpolate:{name:N.value}})),1)]),_:1})):(o(),f(m,{key:1,variant:"h1"}))]),content:C(()=>[h("div",{class:u(t.$style.grid)},[h("div",{class:u(t.$style.notice),"data-test-id":"info-callout"},[r.value?(o(),f(ne,{key:0,"app-credentials":a(e).appCredentials},null,8,["app-credentials"])):(o(),f(m,{key:1,variant:"p"}))],2),h("div",null,[r.value?(o(),A("ol",{key:0,class:u(t.$style.appCredentialsContainer)},[(o(!0),A(Q,null,X(a(e).credentialUsages,(p,F)=>(o(),f(de,{key:p.key,class:u(t.$style.appCredential),order:F+1,credentials:p,"selected-credential-id":a(e).selectedCredentialIdByKey[p.key],onCredentialSelected:n[0]||(n[0]=w=>a(e).setSelectedCredentialId(w.credentialUsageKey,w.credentialId)),onCredentialDeselected:n[1]||(n[1]=w=>a(e).unsetSelectedCredential(w.credentialUsageKey))},null,8,["class","order","credentials","selected-credential-id"]))),128))],2)):(o(),A("div",{key:1,class:u(t.$style.appCredentialsContainer)},[g(m,{class:u(t.$style.appCredential),variant:"p",rows:3},null,8,["class"]),g(m,{class:u(t.$style.appCredential),variant:"p",rows:3},null,8,["class"])],2))]),h("div",{class:u(t.$style.actions)},[g(a(ce),{href:R.value,"new-window":!1,onClick:n[2]||(n[2]=p=>P(p))},{default:C(()=>[x($(a(d).baseText("templateSetup.skip")),1)]),_:1},8,["href"]),r.value?(o(),f(T,{key:0,content:a(d).baseText("templateSetup.continue.button.fillRemaining"),disabled:a(e).numFilledCredentials>0},{default:C(()=>[g(I,{size:"large",label:a(d).baseText("templateSetup.continue.button"),disabled:a(e).isSaving||a(e).numFilledCredentials===0,"data-test-id":"continue-button",onClick:n[3]||(n[3]=p=>a(e).createWorkflow({router:a(i)}))},null,8,["label","disabled"])]),_:1},8,["content","disabled"])):(o(),A("div",ve,[g(m,{variant:"button"})]))],2)],2)]),_:1})}}}),_e="_grid_6bgsx_1",ke="_notice_6bgsx_9",Te="_appCredentialsContainer_6bgsx_13",Se="_appCredential_6bgsx_13",Ce="_actions_6bgsx_24",ge={grid:_e,notice:ke,appCredentialsContainer:Te,appCredential:Se,actions:Ce},be={$style:ge},lt=me(we,[["__cssModules",be]]);export{lt as default};
2
+ //# sourceMappingURL=SetupWorkflowFromTemplateView-BUzzXtBr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetupWorkflowFromTemplateView-DL3b-TZS.js","sources":["../../src/views/SetupWorkflowFromTemplateView/setupTemplate.store.ts","../../src/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useRootStore } from '@/stores/root.store';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport type { INodeUi } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { createWorkflowFromTemplate } from '@/utils/templates/templateActions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useCredentialSetupState } from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\nexport type NodeAndType = {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n};\n\nexport type RequiredCredentials = {\n\tnode: INodeUi;\n\tcredentialName: string;\n\tcredentialType: string;\n};\n\nexport type AppCredentialCount = {\n\tappName: string;\n\tcount: number;\n};\n\n/**\n * Store for managing the state of the SetupWorkflowFromTemplateView\n */\nexport const useSetupTemplateStore = defineStore('setupTemplate', () => {\n\t//#region State\n\n\tconst templateId = ref<string>('');\n\tconst isLoading = ref(true);\n\tconst isSaving = ref(false);\n\n\t//#endregion State\n\n\tconst templatesStore = useTemplatesStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst credentialsStore = useCredentialsStore();\n\tconst rootStore = useRootStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\t//#region Getters\n\n\tconst template = computed(() => {\n\t\treturn templateId.value ? templatesStore.getFullTemplateById(templateId.value) : null;\n\t});\n\n\tconst templateNodes = computed(() => {\n\t\treturn template.value?.workflow.nodes ?? [];\n\t});\n\n\tconst {\n\t\tappCredentials,\n\t\tcredentialOverrides,\n\t\tcredentialUsages,\n\t\tcredentialsByKey,\n\t\tnodesRequiringCredentialsSorted,\n\t\tnumFilledCredentials,\n\t\tselectedCredentialIdByKey,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t} = useCredentialSetupState(templateNodes);\n\n\t//#endregion Getters\n\n\t//#region Actions\n\n\tconst setTemplateId = (id: string) => {\n\t\ttemplateId.value = id;\n\t};\n\n\tconst ignoredAutoFillCredentialTypes = new Set([\n\t\t'httpBasicAuth',\n\t\t'httpCustomAuth',\n\t\t'httpDigestAuth',\n\t\t'httpHeaderAuth',\n\t\t'oAuth1Api',\n\t\t'oAuth2Api',\n\t\t'httpQueryAuth',\n\t]);\n\n\t/**\n\t * Selects initial credentials for the template. Credentials\n\t * need to be loaded before this.\n\t */\n\tconst setInitialCredentialSelection = () => {\n\t\tfor (const credUsage of credentialUsages.value) {\n\t\t\tif (ignoredAutoFillCredentialTypes.has(credUsage.credentialType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst availableCreds = credentialsStore.getCredentialsByType(credUsage.credentialType);\n\n\t\t\tif (availableCreds.length === 1) {\n\t\t\t\tselectedCredentialIdByKey.value[credUsage.key] = availableCreds[0].id;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Loads the template if it hasn't been loaded yet.\n\t */\n\tconst loadTemplateIfNeeded = async () => {\n\t\tif (!!template.value || !templateId.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait templatesStore.fetchTemplateById(templateId.value);\n\n\t\tsetInitialCredentialSelection();\n\t};\n\n\t/**\n\t * Initializes the store for a specific template.\n\t */\n\tconst init = async () => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tselectedCredentialIdByKey.value = {};\n\n\t\t\tawait Promise.all([\n\t\t\t\tcredentialsStore.fetchAllCredentials(),\n\t\t\t\tcredentialsStore.fetchCredentialTypes(false),\n\t\t\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tloadTemplateIfNeeded(),\n\t\t\t]);\n\n\t\t\tsetInitialCredentialSelection();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\t/**\n\t * Skips the setup and goes directly to the workflow view.\n\t */\n\tconst skipSetup = async ({ router }: { router: Router }) => {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst telemetry = useTelemetry();\n\n\t\tawait externalHooks.run('templatesWorkflowView.openWorkflow', {\n\t\t\tsource: 'workflow',\n\t\t\ttemplate_id: templateId.value,\n\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t});\n\n\t\ttelemetry.track('User closed cred setup', {\n\t\t\tcompleted: false,\n\t\t\tcreds_filled: 0,\n\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\tworkflow_id: null,\n\t\t});\n\n\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\tawait router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t};\n\n\t/**\n\t * Creates a workflow from the template and navigates to the workflow view.\n\t */\n\tconst createWorkflow = async (opts: { router: Router }) => {\n\t\tconst { router } = opts;\n\t\tconst telemetry = useTelemetry();\n\n\t\tif (!template.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tisSaving.value = true;\n\n\t\t\tconst createdWorkflow = await createWorkflowFromTemplate({\n\t\t\t\ttemplate: template.value,\n\t\t\t\tcredentialOverrides: credentialOverrides.value,\n\t\t\t\trootStore,\n\t\t\t\tworkflowsStore,\n\t\t\t\tnodeTypeProvider: nodeTypesStore,\n\t\t\t});\n\n\t\t\ttelemetry.track('User closed cred setup', {\n\t\t\t\tcompleted: true,\n\t\t\t\tcreds_filled: numFilledCredentials.value,\n\t\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t});\n\n\t\t\ttelemetry.track(\n\t\t\t\t'User inserted workflow template',\n\t\t\t\t{\n\t\t\t\t\tsource: 'workflow',\n\t\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t\t},\n\t\t\t\t{ withPostHog: true },\n\t\t\t);\n\n\t\t\ttelemetry.track('User saved new workflow from template', {\n\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t});\n\n\t\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW,\n\t\t\t\tparams: { name: createdWorkflow.id },\n\t\t\t});\n\t\t} finally {\n\t\t\tisSaving.value = false;\n\t\t}\n\t};\n\n\t//#endregion Actions\n\n\treturn {\n\t\tcredentialsByKey,\n\t\tisLoading,\n\t\tisSaving,\n\t\tappCredentials,\n\t\tnodesRequiringCredentialsSorted,\n\t\ttemplate,\n\t\tcredentialUsages,\n\t\tselectedCredentialIdByKey,\n\t\tcredentialOverrides,\n\t\tnumFilledCredentials,\n\t\tcreateWorkflow,\n\t\tskipSetup,\n\t\tinit,\n\t\tloadTemplateIfNeeded,\n\t\tsetInitialCredentialSelection,\n\t\tsetTemplateId,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { computed, onBeforeMount, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useSetupTemplateStore } from './setupTemplate.store';\nimport N8nHeading from 'n8n-design-system/components/N8nHeading';\nimport N8nLink from 'n8n-design-system/components/N8nLink';\nimport AppsRequiringCredsNotice from './AppsRequiringCredsNotice.vue';\nimport SetupTemplateFormStep from './SetupTemplateFormStep.vue';\nimport TemplatesView from '../TemplatesView.vue';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { usePostHog } from '@/stores/posthog.store';\n\n// Store\nconst setupTemplateStore = useSetupTemplateStore();\nconst i18n = useI18n();\nconst posthogStore = usePostHog();\n\n// Router\nconst route = useRoute();\nconst router = useRouter();\n\n//#region Computed\n\nconst templateId = computed(() =>\n\tArray.isArray(route.params.id) ? route.params.id[0] : route.params.id,\n);\nconst title = computed(() => setupTemplateStore.template?.name ?? 'unknown');\nconst isReady = computed(() => !setupTemplateStore.isLoading);\n\nconst skipSetupUrl = computed(() => {\n\tconst resolvedRoute = router.resolve({\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId.value },\n\t});\n\treturn resolvedRoute.fullPath;\n});\n\n//#endregion Computed\n\n//#region Watchers\n\nwatch(templateId, async (newTemplateId) => {\n\tsetupTemplateStore.setTemplateId(newTemplateId);\n\tawait setupTemplateStore.loadTemplateIfNeeded();\n});\n\n//#endregion Watchers\n\n//#region Methods\n\nconst onSkipSetup = async (event: MouseEvent) => {\n\tevent.preventDefault();\n\n\tawait setupTemplateStore.skipSetup({\n\t\trouter,\n\t});\n};\n\nconst skipIfTemplateHasNoCreds = async () => {\n\tconst isTemplateLoaded = !!setupTemplateStore.template;\n\tif (!isTemplateLoaded) {\n\t\treturn false;\n\t}\n\n\tif (setupTemplateStore.credentialUsages.length === 0) {\n\t\tawait setupTemplateStore.skipSetup({\n\t\t\trouter,\n\t\t});\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//#endregion Methods\n\n//#region Lifecycle hooks\n\nsetupTemplateStore.setTemplateId(templateId.value);\n\nonBeforeMount(async () => {\n\tif (!posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT)) {\n\t\tvoid router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t}\n});\n\nonMounted(async () => {\n\tawait setupTemplateStore.init();\n\tawait skipIfTemplateHasNoCreds();\n});\n\n//#endregion Lifecycle hooks\n</script>\n\n<template>\n\t<TemplatesView :go-back-enabled=\"true\">\n\t\t<template #header>\n\t\t\t<N8nHeading v-if=\"isReady\" tag=\"h1\" size=\"2xlarge\"\n\t\t\t\t>{{ i18n.baseText('templateSetup.title', { interpolate: { name: title } }) }}\n\t\t\t</N8nHeading>\n\t\t\t<n8n-loading v-else variant=\"h1\" />\n\t\t</template>\n\n\t\t<template #content>\n\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t<div :class=\"$style.notice\" data-test-id=\"info-callout\">\n\t\t\t\t\t<AppsRequiringCredsNotice\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:app-credentials=\"setupTemplateStore.appCredentials\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-loading v-else variant=\"p\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<ol v-if=\"isReady\" :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<SetupTemplateFormStep\n\t\t\t\t\t\t\tv-for=\"(credentials, index) in setupTemplateStore.credentialUsages\"\n\t\t\t\t\t\t\t:key=\"credentials.key\"\n\t\t\t\t\t\t\t:class=\"$style.appCredential\"\n\t\t\t\t\t\t\t:order=\"index + 1\"\n\t\t\t\t\t\t\t:credentials=\"credentials\"\n\t\t\t\t\t\t\t:selected-credential-id=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.selectedCredentialIdByKey[credentials.key]\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-selected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.setSelectedCredentialId(\n\t\t\t\t\t\t\t\t\t$event.credentialUsageKey,\n\t\t\t\t\t\t\t\t\t$event.credentialId,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-deselected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.unsetSelectedCredential($event.credentialUsageKey)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ol>\n\t\t\t\t\t<div v-else :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.actions\">\n\t\t\t\t\t<N8nLink :href=\"skipSetupUrl\" :new-window=\"false\" @click=\"onSkipSetup($event)\">{{\n\t\t\t\t\t\ti18n.baseText('templateSetup.skip')\n\t\t\t\t\t}}</N8nLink>\n\n\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:content=\"i18n.baseText('templateSetup.continue.button.fillRemaining')\"\n\t\t\t\t\t\t:disabled=\"setupTemplateStore.numFilledCredentials > 0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t:label=\"i18n.baseText('templateSetup.continue.button')\"\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.isSaving || setupTemplateStore.numFilledCredentials === 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tdata-test-id=\"continue-button\"\n\t\t\t\t\t\t\t@click=\"setupTemplateStore.createWorkflow({ router })\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t<n8n-loading variant=\"button\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</TemplatesView>\n</template>\n\n<style lang=\"scss\" module>\n.grid {\n\tmargin: 0 auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmax-width: 768px;\n}\n\n.notice {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.appCredentialsContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-2xl);\n}\n\n.appCredential:not(:last-of-type) {\n\tpadding-bottom: var(--spacing-2xl);\n\tborder-bottom: 1px solid var(--color-foreground-light);\n}\n\n.actions {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-top: var(--spacing-3xl);\n\tmargin-bottom: var(--spacing-3xl);\n}\n</style>\n"],"names":["useSetupTemplateStore","defineStore","templateId","ref","isLoading","isSaving","templatesStore","useTemplatesStore","nodeTypesStore","useNodeTypesStore","credentialsStore","useCredentialsStore","rootStore","useRootStore","workflowsStore","useWorkflowsStore","template","computed","templateNodes","_a","appCredentials","credentialOverrides","credentialUsages","credentialsByKey","nodesRequiringCredentialsSorted","numFilledCredentials","selectedCredentialIdByKey","setSelectedCredentialId","unsetSelectedCredential","useCredentialSetupState","setTemplateId","id","ignoredAutoFillCredentialTypes","setInitialCredentialSelection","credUsage","availableCreds","loadTemplateIfNeeded","opts","router","telemetry","useTelemetry","createdWorkflow","createWorkflowFromTemplate","tryToParseNumber","VIEWS","externalHooks","useExternalHooks","setupTemplateStore","i18n","useI18n","posthogStore","usePostHog","route","useRoute","useRouter","title","isReady","skipSetupUrl","watch","newTemplateId","onSkipSetup","event","skipIfTemplateHasNoCreds","onBeforeMount","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","onMounted"],"mappings":"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"}
1
+ {"version":3,"file":"SetupWorkflowFromTemplateView-BUzzXtBr.js","sources":["../../src/views/SetupWorkflowFromTemplateView/setupTemplate.store.ts","../../src/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useRootStore } from '@/stores/root.store';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport type { INodeUi } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { createWorkflowFromTemplate } from '@/utils/templates/templateActions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useCredentialSetupState } from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\nexport type NodeAndType = {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n};\n\nexport type RequiredCredentials = {\n\tnode: INodeUi;\n\tcredentialName: string;\n\tcredentialType: string;\n};\n\nexport type AppCredentialCount = {\n\tappName: string;\n\tcount: number;\n};\n\n/**\n * Store for managing the state of the SetupWorkflowFromTemplateView\n */\nexport const useSetupTemplateStore = defineStore('setupTemplate', () => {\n\t//#region State\n\n\tconst templateId = ref<string>('');\n\tconst isLoading = ref(true);\n\tconst isSaving = ref(false);\n\n\t//#endregion State\n\n\tconst templatesStore = useTemplatesStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst credentialsStore = useCredentialsStore();\n\tconst rootStore = useRootStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\t//#region Getters\n\n\tconst template = computed(() => {\n\t\treturn templateId.value ? templatesStore.getFullTemplateById(templateId.value) : null;\n\t});\n\n\tconst templateNodes = computed(() => {\n\t\treturn template.value?.workflow.nodes ?? [];\n\t});\n\n\tconst {\n\t\tappCredentials,\n\t\tcredentialOverrides,\n\t\tcredentialUsages,\n\t\tcredentialsByKey,\n\t\tnodesRequiringCredentialsSorted,\n\t\tnumFilledCredentials,\n\t\tselectedCredentialIdByKey,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t} = useCredentialSetupState(templateNodes);\n\n\t//#endregion Getters\n\n\t//#region Actions\n\n\tconst setTemplateId = (id: string) => {\n\t\ttemplateId.value = id;\n\t};\n\n\tconst ignoredAutoFillCredentialTypes = new Set([\n\t\t'httpBasicAuth',\n\t\t'httpCustomAuth',\n\t\t'httpDigestAuth',\n\t\t'httpHeaderAuth',\n\t\t'oAuth1Api',\n\t\t'oAuth2Api',\n\t\t'httpQueryAuth',\n\t]);\n\n\t/**\n\t * Selects initial credentials for the template. Credentials\n\t * need to be loaded before this.\n\t */\n\tconst setInitialCredentialSelection = () => {\n\t\tfor (const credUsage of credentialUsages.value) {\n\t\t\tif (ignoredAutoFillCredentialTypes.has(credUsage.credentialType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst availableCreds = credentialsStore.getCredentialsByType(credUsage.credentialType);\n\n\t\t\tif (availableCreds.length === 1) {\n\t\t\t\tselectedCredentialIdByKey.value[credUsage.key] = availableCreds[0].id;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Loads the template if it hasn't been loaded yet.\n\t */\n\tconst loadTemplateIfNeeded = async () => {\n\t\tif (!!template.value || !templateId.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait templatesStore.fetchTemplateById(templateId.value);\n\n\t\tsetInitialCredentialSelection();\n\t};\n\n\t/**\n\t * Initializes the store for a specific template.\n\t */\n\tconst init = async () => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tselectedCredentialIdByKey.value = {};\n\n\t\t\tawait Promise.all([\n\t\t\t\tcredentialsStore.fetchAllCredentials(),\n\t\t\t\tcredentialsStore.fetchCredentialTypes(false),\n\t\t\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tloadTemplateIfNeeded(),\n\t\t\t]);\n\n\t\t\tsetInitialCredentialSelection();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\t/**\n\t * Skips the setup and goes directly to the workflow view.\n\t */\n\tconst skipSetup = async ({ router }: { router: Router }) => {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst telemetry = useTelemetry();\n\n\t\tawait externalHooks.run('templatesWorkflowView.openWorkflow', {\n\t\t\tsource: 'workflow',\n\t\t\ttemplate_id: templateId.value,\n\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t});\n\n\t\ttelemetry.track('User closed cred setup', {\n\t\t\tcompleted: false,\n\t\t\tcreds_filled: 0,\n\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\tworkflow_id: null,\n\t\t});\n\n\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\tawait router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t};\n\n\t/**\n\t * Creates a workflow from the template and navigates to the workflow view.\n\t */\n\tconst createWorkflow = async (opts: { router: Router }) => {\n\t\tconst { router } = opts;\n\t\tconst telemetry = useTelemetry();\n\n\t\tif (!template.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tisSaving.value = true;\n\n\t\t\tconst createdWorkflow = await createWorkflowFromTemplate({\n\t\t\t\ttemplate: template.value,\n\t\t\t\tcredentialOverrides: credentialOverrides.value,\n\t\t\t\trootStore,\n\t\t\t\tworkflowsStore,\n\t\t\t\tnodeTypeProvider: nodeTypesStore,\n\t\t\t});\n\n\t\t\ttelemetry.track('User closed cred setup', {\n\t\t\t\tcompleted: true,\n\t\t\t\tcreds_filled: numFilledCredentials.value,\n\t\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t});\n\n\t\t\ttelemetry.track(\n\t\t\t\t'User inserted workflow template',\n\t\t\t\t{\n\t\t\t\t\tsource: 'workflow',\n\t\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t\t},\n\t\t\t\t{ withPostHog: true },\n\t\t\t);\n\n\t\t\ttelemetry.track('User saved new workflow from template', {\n\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t});\n\n\t\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW,\n\t\t\t\tparams: { name: createdWorkflow.id },\n\t\t\t});\n\t\t} finally {\n\t\t\tisSaving.value = false;\n\t\t}\n\t};\n\n\t//#endregion Actions\n\n\treturn {\n\t\tcredentialsByKey,\n\t\tisLoading,\n\t\tisSaving,\n\t\tappCredentials,\n\t\tnodesRequiringCredentialsSorted,\n\t\ttemplate,\n\t\tcredentialUsages,\n\t\tselectedCredentialIdByKey,\n\t\tcredentialOverrides,\n\t\tnumFilledCredentials,\n\t\tcreateWorkflow,\n\t\tskipSetup,\n\t\tinit,\n\t\tloadTemplateIfNeeded,\n\t\tsetInitialCredentialSelection,\n\t\tsetTemplateId,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { computed, onBeforeMount, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useSetupTemplateStore } from './setupTemplate.store';\nimport N8nHeading from 'n8n-design-system/components/N8nHeading';\nimport N8nLink from 'n8n-design-system/components/N8nLink';\nimport AppsRequiringCredsNotice from './AppsRequiringCredsNotice.vue';\nimport SetupTemplateFormStep from './SetupTemplateFormStep.vue';\nimport TemplatesView from '../TemplatesView.vue';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { usePostHog } from '@/stores/posthog.store';\n\n// Store\nconst setupTemplateStore = useSetupTemplateStore();\nconst i18n = useI18n();\nconst posthogStore = usePostHog();\n\n// Router\nconst route = useRoute();\nconst router = useRouter();\n\n//#region Computed\n\nconst templateId = computed(() =>\n\tArray.isArray(route.params.id) ? route.params.id[0] : route.params.id,\n);\nconst title = computed(() => setupTemplateStore.template?.name ?? 'unknown');\nconst isReady = computed(() => !setupTemplateStore.isLoading);\n\nconst skipSetupUrl = computed(() => {\n\tconst resolvedRoute = router.resolve({\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId.value },\n\t});\n\treturn resolvedRoute.fullPath;\n});\n\n//#endregion Computed\n\n//#region Watchers\n\nwatch(templateId, async (newTemplateId) => {\n\tsetupTemplateStore.setTemplateId(newTemplateId);\n\tawait setupTemplateStore.loadTemplateIfNeeded();\n});\n\n//#endregion Watchers\n\n//#region Methods\n\nconst onSkipSetup = async (event: MouseEvent) => {\n\tevent.preventDefault();\n\n\tawait setupTemplateStore.skipSetup({\n\t\trouter,\n\t});\n};\n\nconst skipIfTemplateHasNoCreds = async () => {\n\tconst isTemplateLoaded = !!setupTemplateStore.template;\n\tif (!isTemplateLoaded) {\n\t\treturn false;\n\t}\n\n\tif (setupTemplateStore.credentialUsages.length === 0) {\n\t\tawait setupTemplateStore.skipSetup({\n\t\t\trouter,\n\t\t});\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//#endregion Methods\n\n//#region Lifecycle hooks\n\nsetupTemplateStore.setTemplateId(templateId.value);\n\nonBeforeMount(async () => {\n\tif (!posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT)) {\n\t\tvoid router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t}\n});\n\nonMounted(async () => {\n\tawait setupTemplateStore.init();\n\tawait skipIfTemplateHasNoCreds();\n});\n\n//#endregion Lifecycle hooks\n</script>\n\n<template>\n\t<TemplatesView :go-back-enabled=\"true\">\n\t\t<template #header>\n\t\t\t<N8nHeading v-if=\"isReady\" tag=\"h1\" size=\"2xlarge\"\n\t\t\t\t>{{ i18n.baseText('templateSetup.title', { interpolate: { name: title } }) }}\n\t\t\t</N8nHeading>\n\t\t\t<n8n-loading v-else variant=\"h1\" />\n\t\t</template>\n\n\t\t<template #content>\n\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t<div :class=\"$style.notice\" data-test-id=\"info-callout\">\n\t\t\t\t\t<AppsRequiringCredsNotice\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:app-credentials=\"setupTemplateStore.appCredentials\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-loading v-else variant=\"p\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<ol v-if=\"isReady\" :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<SetupTemplateFormStep\n\t\t\t\t\t\t\tv-for=\"(credentials, index) in setupTemplateStore.credentialUsages\"\n\t\t\t\t\t\t\t:key=\"credentials.key\"\n\t\t\t\t\t\t\t:class=\"$style.appCredential\"\n\t\t\t\t\t\t\t:order=\"index + 1\"\n\t\t\t\t\t\t\t:credentials=\"credentials\"\n\t\t\t\t\t\t\t:selected-credential-id=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.selectedCredentialIdByKey[credentials.key]\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-selected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.setSelectedCredentialId(\n\t\t\t\t\t\t\t\t\t$event.credentialUsageKey,\n\t\t\t\t\t\t\t\t\t$event.credentialId,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-deselected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.unsetSelectedCredential($event.credentialUsageKey)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ol>\n\t\t\t\t\t<div v-else :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.actions\">\n\t\t\t\t\t<N8nLink :href=\"skipSetupUrl\" :new-window=\"false\" @click=\"onSkipSetup($event)\">{{\n\t\t\t\t\t\ti18n.baseText('templateSetup.skip')\n\t\t\t\t\t}}</N8nLink>\n\n\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:content=\"i18n.baseText('templateSetup.continue.button.fillRemaining')\"\n\t\t\t\t\t\t:disabled=\"setupTemplateStore.numFilledCredentials > 0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t:label=\"i18n.baseText('templateSetup.continue.button')\"\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.isSaving || setupTemplateStore.numFilledCredentials === 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tdata-test-id=\"continue-button\"\n\t\t\t\t\t\t\t@click=\"setupTemplateStore.createWorkflow({ router })\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t<n8n-loading variant=\"button\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</TemplatesView>\n</template>\n\n<style lang=\"scss\" module>\n.grid {\n\tmargin: 0 auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmax-width: 768px;\n}\n\n.notice {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.appCredentialsContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-2xl);\n}\n\n.appCredential:not(:last-of-type) {\n\tpadding-bottom: var(--spacing-2xl);\n\tborder-bottom: 1px solid var(--color-foreground-light);\n}\n\n.actions {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-top: var(--spacing-3xl);\n\tmargin-bottom: var(--spacing-3xl);\n}\n</style>\n"],"names":["useSetupTemplateStore","defineStore","templateId","ref","isLoading","isSaving","templatesStore","useTemplatesStore","nodeTypesStore","useNodeTypesStore","credentialsStore","useCredentialsStore","rootStore","useRootStore","workflowsStore","useWorkflowsStore","template","computed","templateNodes","_a","appCredentials","credentialOverrides","credentialUsages","credentialsByKey","nodesRequiringCredentialsSorted","numFilledCredentials","selectedCredentialIdByKey","setSelectedCredentialId","unsetSelectedCredential","useCredentialSetupState","setTemplateId","id","ignoredAutoFillCredentialTypes","setInitialCredentialSelection","credUsage","availableCreds","loadTemplateIfNeeded","opts","router","telemetry","useTelemetry","createdWorkflow","createWorkflowFromTemplate","tryToParseNumber","VIEWS","externalHooks","useExternalHooks","setupTemplateStore","i18n","useI18n","posthogStore","usePostHog","route","useRoute","useRouter","title","isReady","skipSetupUrl","watch","newTemplateId","onSkipSetup","event","skipIfTemplateHasNoCreds","onBeforeMount","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","onMounted"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{L as H,A as W}from"./AuthView-CMxdNKZJ.js";import{x as q,d4 as y,d5 as Q,M as N,d6 as B,u as Y,U as K,e as X,b as J,a as Z,V as ee,d7 as te}from"./index-BE0Xl-jy.js";import{h as oe}from"./@vueuse/core-BBHtM40w.js";import{G as L,r as m,b as re,ag as l,l as n,m as F,p as f,U as b,I as p,O as T,S as R,T as v,u as a,M as k,R as h}from"./vendor-Dv5OeN6t.js";import{_ as D}from"./n8n-4UEsHtUL.js";import{m as ae}from"./pinia-sugP77Im.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const se=L({__name:"MfaView",props:{reportError:{}},emits:["onFormChanged","onBackClick","submit"],setup(e,{emit:t}){const i=e,c=m(!1),M=m(Q),u=m(null),s=m(!1),_=m(!1),S=m(""),{reportError:O}=oe(i),r=q(),w=t,A=(o,E,d,C,g=!0)=>({name:o,initialValue:"",properties:{label:E,placeholder:d,maxlength:C,capitalize:!0,validateOnBlur:!1,focusInitially:g}}),V=()=>{S.value="",s.value=!0,c.value=!1,u.value=[z()],w("onFormChanged",y.MFA_RECOVERY_CODE)},U=()=>{if(!s.value){w("onBackClick",y.MFA_TOKEN);return}s.value=!1,c.value=!0,u.value=[I()],w("onBackClick",y.MFA_RECOVERY_CODE)},$=async o=>{S.value=s.value?r.baseText("mfa.recovery.invalid"):r.baseText("mfa.code.invalid"),w("submit",o)},P=({target:{value:o,name:E}})=>{const d=E==="token",C=d?N:B;if(o.length!==C){c.value=!1;return}_.value=!0,c.value=!0,$(d?{token:o,recoveryCode:""}:{token:"",recoveryCode:o}).catch(()=>{}).finally(()=>_.value=!1)},z=()=>A("recoveryCode",r.baseText("mfa.recovery.input.label"),r.baseText("mfa.recovery.input.placeholder"),B),I=()=>A("token",r.baseText("mfa.code.input.label"),r.baseText("mfa.code.input.placeholder"),N),j=()=>{M.value.emit("submit")};return re(()=>{u.value=[I()]}),(o,E)=>{const d=l("n8n-heading"),C=l("n8n-form-inputs"),g=l("n8n-text"),x=l("n8n-button"),G=l("n8n-card");return n(),F("div",{class:p(o.$style.container)},[f("div",{class:p(o.$style.logoContainer)},[b(H)],2),b(G,null,{default:T(()=>[f("div",{class:p(o.$style.headerContainer)},[b(d,{size:"xlarge",color:"text-dark"},{default:T(()=>[R(v(s.value?a(r).baseText("mfa.recovery.modal.title"):a(r).baseText("mfa.code.modal.title")),1)]),_:1})],2),f("div",{class:p([o.$style.formContainer,a(O)?o.$style.formError:""])},[u.value?(n(),k(C,{key:0,"data-test-id":"mfa-login-form",inputs:u.value,"event-bus":M.value,onInput:P,onSubmit:$},null,8,["inputs","event-bus"])):h("",!0),f("div",{class:p(o.$style.infoBox)},[!s.value&&!a(O)?(n(),k(g,{key:0,size:"small",color:"text-base",bold:!1},{default:T(()=>[R(v(a(r).baseText("mfa.code.input.info"))+" ",1),f("a",{"data-test-id":"mfa-enter-recovery-code-button",onClick:V},v(a(r).baseText("mfa.code.input.info.action")),1)]),_:1})):h("",!0),a(O)?(n(),k(g,{key:1,color:"danger",size:"small"},{default:T(()=>[R(v(S.value)+" ",1),s.value?h("",!0):(n(),F("a",{key:0,class:p(o.$style.recoveryCodeLink),onClick:V},v(a(r).baseText("mfa.recovery.input.info.action")),3))]),_:1})):h("",!0)],2)],2),f("div",null,[b(x,{float:"right",loading:_.value,label:s.value?a(r).baseText("mfa.recovery.button.verify"):a(r).baseText("mfa.code.button.continue"),size:"large",disabled:!c.value,onClick:j},null,8,["loading","label","disabled"]),b(x,{float:"left",label:a(r).baseText("mfa.button.back"),size:"large",type:"tertiary",onClick:U},null,8,["label"])])]),_:1})],2)}}}),ie="_container_1mdjt_5",ne="_logoContainer_1mdjt_16",le="_formContainer_1mdjt_21",ce="_headerContainer_1mdjt_25",ue="_formError_1mdjt_30",de="_recoveryCodeLink_1mdjt_34",me="_infoBox_1mdjt_38",fe={container:ie,logoContainer:ne,formContainer:le,headerContainer:ce,formError:ue,recoveryCodeLink:de,infoBox:me},pe={$style:fe},he=D(se,[["__cssModules",pe]]),_e=L({name:"SigninView",components:{AuthView:W,MfaView:he},setup(){return{...Y()}},data(){return{FORM_CONFIG:{},loading:!1,showMfaView:!1,email:"",password:"",reportError:!1}},computed:{...ae(Z,J,X,K),userHasMfaEnabled(){var e;return!!((e=this.usersStore.currentUser)!=null&&e.mfaEnabled)}},mounted(){let e=this.$locale.baseText("auth.email");const t=this.settingsStore.ldapLoginLabel,i=this.settingsStore.isLdapLoginEnabled;i&&t&&(e=t),this.FORM_CONFIG={title:this.$locale.baseText("auth.signin"),buttonText:this.$locale.baseText("auth.signin"),redirectText:this.$locale.baseText("forgotPassword"),inputs:[{name:"email",properties:{label:e,type:"email",required:!0,...!i&&{validationRules:[{name:"VALID_EMAIL"}]},showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"email",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",required:!0,showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"current-password",capitalize:!0}}]},this.settingsStore.isDesktopDeployment||(this.FORM_CONFIG.redirectLink="/forgot-password")},methods:{async onMFASubmitted(e){await this.login({email:this.email,password:this.password,token:e.token,recoveryCode:e.recoveryCode})},async onEmailPasswordSubmitted(e){await this.login(e)},isRedirectSafe(){const e=this.getRedirectQueryParameter();return e.startsWith("/")||e.startsWith(window.location.origin)},getRedirectQueryParameter(){var t,i;let e="";return typeof((t=this.$route.query)==null?void 0:t.redirect)=="string"&&(e=decodeURIComponent((i=this.$route.query)==null?void 0:i.redirect)),e},async login(e){try{if(this.loading=!0,await this.usersStore.loginWithCreds({email:e.email,password:e.password,mfaToken:e.token,mfaRecoveryCode:e.recoveryCode}),this.loading=!1,this.settingsStore.isCloudDeployment)try{await this.cloudPlanStore.checkForCloudPlanData()}catch(t){console.warn("Failed to check for cloud plan data",t)}if(await this.settingsStore.getSettings(),this.clearAllStickyNotifications(),this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_success":"success"}),this.isRedirectSafe()){const t=this.getRedirectQueryParameter();if(t.startsWith("http")){window.location.href=t;return}this.$router.push(t);return}await this.$router.push({name:ee.HOMEPAGE})}catch(t){if(t.errorCode===te){this.showMfaView=!0,this.cacheCredentials(e);return}if(this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_token_rejected":"credentials_error"}),!this.showMfaView){this.showError(t,this.$locale.baseText("auth.signin.error")),this.loading=!1;return}this.reportError=!0}},onBackClick(e){this.reportError=!1,e===y.MFA_TOKEN&&(this.showMfaView=!1,this.loading=!1)},onFormChanged(e){e===y.MFA_RECOVERY_CODE&&(this.reportError=!1)},cacheCredentials(e){this.email=e.email,this.password=e.password}}});function Ce(e,t,i,c,M,u){const s=l("AuthView"),_=l("MfaView");return n(),F("div",null,[e.showMfaView?h("",!0):(n(),k(s,{key:0,form:e.FORM_CONFIG,"form-loading":e.loading,"with-sso":!0,"data-test-id":"signin-form",onSubmit:e.onEmailPasswordSubmitted},null,8,["form","form-loading","onSubmit"])),e.showMfaView?(n(),k(_,{key:1,"report-error":e.reportError,onSubmit:e.onMFASubmitted,onOnBackClick:e.onBackClick,onOnFormChanged:e.onFormChanged},null,8,["report-error","onSubmit","onOnBackClick","onOnFormChanged"])):h("",!0)])}const Qe=D(_e,[["render",Ce]]);export{Qe as default};
2
- //# sourceMappingURL=SigninView-BPLGsvzz.js.map
1
+ import{L as H,A as W}from"./AuthView-B_jZMnGj.js";import{x as q,d4 as y,d5 as Q,M as N,d6 as B,u as Y,U as K,e as X,b as J,a as Z,V as ee,d7 as te}from"./index-1OxaEeO3.js";import{h as oe}from"./@vueuse/core-BBHtM40w.js";import{G as L,r as m,b as re,ag as l,l as n,m as F,p as f,U as b,I as p,O as T,S as R,T as v,u as a,M as k,R as h}from"./vendor-Dv5OeN6t.js";import{_ as D}from"./n8n-4UEsHtUL.js";import{m as ae}from"./pinia-sugP77Im.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const se=L({__name:"MfaView",props:{reportError:{}},emits:["onFormChanged","onBackClick","submit"],setup(e,{emit:t}){const i=e,c=m(!1),M=m(Q),u=m(null),s=m(!1),_=m(!1),S=m(""),{reportError:O}=oe(i),r=q(),w=t,A=(o,E,d,C,g=!0)=>({name:o,initialValue:"",properties:{label:E,placeholder:d,maxlength:C,capitalize:!0,validateOnBlur:!1,focusInitially:g}}),V=()=>{S.value="",s.value=!0,c.value=!1,u.value=[z()],w("onFormChanged",y.MFA_RECOVERY_CODE)},U=()=>{if(!s.value){w("onBackClick",y.MFA_TOKEN);return}s.value=!1,c.value=!0,u.value=[I()],w("onBackClick",y.MFA_RECOVERY_CODE)},$=async o=>{S.value=s.value?r.baseText("mfa.recovery.invalid"):r.baseText("mfa.code.invalid"),w("submit",o)},P=({target:{value:o,name:E}})=>{const d=E==="token",C=d?N:B;if(o.length!==C){c.value=!1;return}_.value=!0,c.value=!0,$(d?{token:o,recoveryCode:""}:{token:"",recoveryCode:o}).catch(()=>{}).finally(()=>_.value=!1)},z=()=>A("recoveryCode",r.baseText("mfa.recovery.input.label"),r.baseText("mfa.recovery.input.placeholder"),B),I=()=>A("token",r.baseText("mfa.code.input.label"),r.baseText("mfa.code.input.placeholder"),N),j=()=>{M.value.emit("submit")};return re(()=>{u.value=[I()]}),(o,E)=>{const d=l("n8n-heading"),C=l("n8n-form-inputs"),g=l("n8n-text"),x=l("n8n-button"),G=l("n8n-card");return n(),F("div",{class:p(o.$style.container)},[f("div",{class:p(o.$style.logoContainer)},[b(H)],2),b(G,null,{default:T(()=>[f("div",{class:p(o.$style.headerContainer)},[b(d,{size:"xlarge",color:"text-dark"},{default:T(()=>[R(v(s.value?a(r).baseText("mfa.recovery.modal.title"):a(r).baseText("mfa.code.modal.title")),1)]),_:1})],2),f("div",{class:p([o.$style.formContainer,a(O)?o.$style.formError:""])},[u.value?(n(),k(C,{key:0,"data-test-id":"mfa-login-form",inputs:u.value,"event-bus":M.value,onInput:P,onSubmit:$},null,8,["inputs","event-bus"])):h("",!0),f("div",{class:p(o.$style.infoBox)},[!s.value&&!a(O)?(n(),k(g,{key:0,size:"small",color:"text-base",bold:!1},{default:T(()=>[R(v(a(r).baseText("mfa.code.input.info"))+" ",1),f("a",{"data-test-id":"mfa-enter-recovery-code-button",onClick:V},v(a(r).baseText("mfa.code.input.info.action")),1)]),_:1})):h("",!0),a(O)?(n(),k(g,{key:1,color:"danger",size:"small"},{default:T(()=>[R(v(S.value)+" ",1),s.value?h("",!0):(n(),F("a",{key:0,class:p(o.$style.recoveryCodeLink),onClick:V},v(a(r).baseText("mfa.recovery.input.info.action")),3))]),_:1})):h("",!0)],2)],2),f("div",null,[b(x,{float:"right",loading:_.value,label:s.value?a(r).baseText("mfa.recovery.button.verify"):a(r).baseText("mfa.code.button.continue"),size:"large",disabled:!c.value,onClick:j},null,8,["loading","label","disabled"]),b(x,{float:"left",label:a(r).baseText("mfa.button.back"),size:"large",type:"tertiary",onClick:U},null,8,["label"])])]),_:1})],2)}}}),ie="_container_1mdjt_5",ne="_logoContainer_1mdjt_16",le="_formContainer_1mdjt_21",ce="_headerContainer_1mdjt_25",ue="_formError_1mdjt_30",de="_recoveryCodeLink_1mdjt_34",me="_infoBox_1mdjt_38",fe={container:ie,logoContainer:ne,formContainer:le,headerContainer:ce,formError:ue,recoveryCodeLink:de,infoBox:me},pe={$style:fe},he=D(se,[["__cssModules",pe]]),_e=L({name:"SigninView",components:{AuthView:W,MfaView:he},setup(){return{...Y()}},data(){return{FORM_CONFIG:{},loading:!1,showMfaView:!1,email:"",password:"",reportError:!1}},computed:{...ae(Z,J,X,K),userHasMfaEnabled(){var e;return!!((e=this.usersStore.currentUser)!=null&&e.mfaEnabled)}},mounted(){let e=this.$locale.baseText("auth.email");const t=this.settingsStore.ldapLoginLabel,i=this.settingsStore.isLdapLoginEnabled;i&&t&&(e=t),this.FORM_CONFIG={title:this.$locale.baseText("auth.signin"),buttonText:this.$locale.baseText("auth.signin"),redirectText:this.$locale.baseText("forgotPassword"),inputs:[{name:"email",properties:{label:e,type:"email",required:!0,...!i&&{validationRules:[{name:"VALID_EMAIL"}]},showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"email",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",required:!0,showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"current-password",capitalize:!0}}]},this.settingsStore.isDesktopDeployment||(this.FORM_CONFIG.redirectLink="/forgot-password")},methods:{async onMFASubmitted(e){await this.login({email:this.email,password:this.password,token:e.token,recoveryCode:e.recoveryCode})},async onEmailPasswordSubmitted(e){await this.login(e)},isRedirectSafe(){const e=this.getRedirectQueryParameter();return e.startsWith("/")||e.startsWith(window.location.origin)},getRedirectQueryParameter(){var t,i;let e="";return typeof((t=this.$route.query)==null?void 0:t.redirect)=="string"&&(e=decodeURIComponent((i=this.$route.query)==null?void 0:i.redirect)),e},async login(e){try{if(this.loading=!0,await this.usersStore.loginWithCreds({email:e.email,password:e.password,mfaToken:e.token,mfaRecoveryCode:e.recoveryCode}),this.loading=!1,this.settingsStore.isCloudDeployment)try{await this.cloudPlanStore.checkForCloudPlanData()}catch(t){console.warn("Failed to check for cloud plan data",t)}if(await this.settingsStore.getSettings(),this.clearAllStickyNotifications(),this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_success":"success"}),this.isRedirectSafe()){const t=this.getRedirectQueryParameter();if(t.startsWith("http")){window.location.href=t;return}this.$router.push(t);return}await this.$router.push({name:ee.HOMEPAGE})}catch(t){if(t.errorCode===te){this.showMfaView=!0,this.cacheCredentials(e);return}if(this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_token_rejected":"credentials_error"}),!this.showMfaView){this.showError(t,this.$locale.baseText("auth.signin.error")),this.loading=!1;return}this.reportError=!0}},onBackClick(e){this.reportError=!1,e===y.MFA_TOKEN&&(this.showMfaView=!1,this.loading=!1)},onFormChanged(e){e===y.MFA_RECOVERY_CODE&&(this.reportError=!1)},cacheCredentials(e){this.email=e.email,this.password=e.password}}});function Ce(e,t,i,c,M,u){const s=l("AuthView"),_=l("MfaView");return n(),F("div",null,[e.showMfaView?h("",!0):(n(),k(s,{key:0,form:e.FORM_CONFIG,"form-loading":e.loading,"with-sso":!0,"data-test-id":"signin-form",onSubmit:e.onEmailPasswordSubmitted},null,8,["form","form-loading","onSubmit"])),e.showMfaView?(n(),k(_,{key:1,"report-error":e.reportError,onSubmit:e.onMFASubmitted,onOnBackClick:e.onBackClick,onOnFormChanged:e.onFormChanged},null,8,["report-error","onSubmit","onOnBackClick","onOnFormChanged"])):h("",!0)])}const Qe=D(_e,[["render",Ce]]);export{Qe as default};
2
+ //# sourceMappingURL=SigninView-B3CNL-yp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SigninView-BPLGsvzz.js","sources":["../../src/views/MfaView.vue","../../src/views/SigninView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div :class=\"$style.logoContainer\">\n\t\t\t<Logo />\n\t\t</div>\n\t\t<n8n-card>\n\t\t\t<div :class=\"$style.headerContainer\">\n\t\t\t\t<n8n-heading size=\"xlarge\" color=\"text-dark\">{{\n\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t? i18.baseText('mfa.recovery.modal.title')\n\t\t\t\t\t\t: i18.baseText('mfa.code.modal.title')\n\t\t\t\t}}</n8n-heading>\n\t\t\t</div>\n\t\t\t<div :class=\"[$style.formContainer, reportError ? $style.formError : '']\">\n\t\t\t\t<n8n-form-inputs\n\t\t\t\t\tv-if=\"formInputs\"\n\t\t\t\t\tdata-test-id=\"mfa-login-form\"\n\t\t\t\t\t:inputs=\"formInputs\"\n\t\t\t\t\t:event-bus=\"formBus\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t/>\n\t\t\t\t<div :class=\"$style.infoBox\">\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm && !reportError\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\t\t>{{ i18.baseText('mfa.code.input.info') }}\n\t\t\t\t\t\t<a data-test-id=\"mfa-enter-recovery-code-button\" @click=\"onRecoveryCodeClick\">{{\n\t\t\t\t\t\t\ti18.baseText('mfa.code.input.info.action')\n\t\t\t\t\t\t}}</a></n8n-text\n\t\t\t\t\t>\n\t\t\t\t\t<n8n-text v-if=\"reportError\" color=\"danger\" size=\"small\"\n\t\t\t\t\t\t>{{ formError }}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm\"\n\t\t\t\t\t\t\t:class=\"$style.recoveryCodeLink\"\n\t\t\t\t\t\t\t@click=\"onRecoveryCodeClick\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ i18.baseText('mfa.recovery.input.info.action') }}</a\n\t\t\t\t\t\t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"right\"\n\t\t\t\t\t:loading=\"verifyingMfaToken\"\n\t\t\t\t\t:label=\"\n\t\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t\t? i18.baseText('mfa.recovery.button.verify')\n\t\t\t\t\t\t\t: i18.baseText('mfa.code.button.continue')\n\t\t\t\t\t\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:disabled=\"!hasAnyChanges\"\n\t\t\t\t\t@click=\"onSaveClick\"\n\t\t\t\t/>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"left\"\n\t\t\t\t\t:label=\"i18.baseText('mfa.button.back')\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t@click=\"onBackClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-card>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFormInputs } from '@/Interface';\nimport Logo from '../components/Logo.vue';\nimport {\n\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\tMFA_FORM,\n} from '@/constants';\nimport { mfaEventBus } from '@/event-bus';\nimport { onMounted, ref } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { toRefs } from '@vueuse/core';\n\n// ---------------------------------------------------------------------------\n// #region Props\n// ---------------------------------------------------------------------------\n\nconst props = defineProps<{\n\treportError: Boolean;\n}>();\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Reactive properties\n// ---------------------------------------------------------------------------\n\nconst hasAnyChanges = ref(false);\nconst formBus = ref(mfaEventBus);\nconst formInputs = ref<null | IFormInputs>(null);\nconst showRecoveryCodeForm = ref(false);\nconst verifyingMfaToken = ref(false);\nconst formError = ref('');\nconst { reportError } = toRefs(props);\n\n// ---------------------------------------------------------------------------\n// #region Composable\n// ---------------------------------------------------------------------------\n\nconst i18 = useI18n();\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Emit\n// ---------------------------------------------------------------------------\n\nconst emit = defineEmits(['onFormChanged', 'onBackClick', 'submit']);\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Methods\n// ---------------------------------------------------------------------------\n\nconst formField = (\n\tname: string,\n\tlabel: string,\n\tplaceholder: string,\n\tmaxlength: number,\n\tfocus = true,\n) => {\n\treturn {\n\t\tname,\n\t\tinitialValue: '',\n\t\tproperties: {\n\t\t\tlabel,\n\t\t\tplaceholder,\n\t\t\tmaxlength,\n\t\t\tcapitalize: true,\n\t\t\tvalidateOnBlur: false,\n\t\t\tfocusInitially: focus,\n\t\t},\n\t};\n};\n\nconst onRecoveryCodeClick = () => {\n\tformError.value = '';\n\tshowRecoveryCodeForm.value = true;\n\thasAnyChanges.value = false;\n\tformInputs.value = [mfaRecoveryCodeFieldWithDefaults()];\n\temit('onFormChanged', MFA_FORM.MFA_RECOVERY_CODE);\n};\n\nconst onBackClick = () => {\n\tif (!showRecoveryCodeForm.value) {\n\t\temit('onBackClick', MFA_FORM.MFA_TOKEN);\n\t\treturn;\n\t}\n\n\tshowRecoveryCodeForm.value = false;\n\thasAnyChanges.value = true;\n\tformInputs.value = [mfaTokenFieldWithDefaults()];\n\temit('onBackClick', MFA_FORM.MFA_RECOVERY_CODE);\n};\n\nconst onSubmit = async (form: { token: string; recoveryCode: string }) => {\n\tformError.value = !showRecoveryCodeForm.value\n\t\t? i18.baseText('mfa.code.invalid')\n\t\t: i18.baseText('mfa.recovery.invalid');\n\temit('submit', form);\n};\n\nconst onInput = ({ target: { value, name } }: { target: { value: string; name: string } }) => {\n\tconst isSubmittingMfaToken = name === 'token';\n\tconst inputValidLength = isSubmittingMfaToken\n\t\t? MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH\n\t\t: MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH;\n\n\tif (value.length !== inputValidLength) {\n\t\thasAnyChanges.value = false;\n\t\treturn;\n\t}\n\n\tverifyingMfaToken.value = true;\n\thasAnyChanges.value = true;\n\n\tconst dataToSubmit = isSubmittingMfaToken\n\t\t? { token: value, recoveryCode: '' }\n\t\t: { token: '', recoveryCode: value };\n\n\tonSubmit(dataToSubmit)\n\t\t.catch(() => {})\n\t\t.finally(() => (verifyingMfaToken.value = false));\n};\n\nconst mfaRecoveryCodeFieldWithDefaults = () => {\n\treturn formField(\n\t\t'recoveryCode',\n\t\ti18.baseText('mfa.recovery.input.label'),\n\t\ti18.baseText('mfa.recovery.input.placeholder'),\n\t\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\t);\n};\n\nconst mfaTokenFieldWithDefaults = () => {\n\treturn formField(\n\t\t'token',\n\t\ti18.baseText('mfa.code.input.label'),\n\t\ti18.baseText('mfa.code.input.placeholder'),\n\t\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\t);\n};\n\nconst onSaveClick = () => {\n\tformBus.value.emit('submit');\n};\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Lifecycle hooks\n// ---------------------------------------------------------------------------\n\nonMounted(() => {\n\tformInputs.value = [mfaTokenFieldWithDefaults()];\n});\n\n// #endregion\n</script>\n\n<style lang=\"scss\" module>\nbody {\n\tbackground-color: var(--color-background-light);\n}\n\n.container {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\tpadding-top: var(--spacing-2xl);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-l);\n\t\twidth: 352px;\n\t}\n}\n\n.logoContainer {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.formContainer {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.headerContainer {\n\ttext-align: center;\n\tmargin-bottom: var(--spacing-xl);\n}\n\n.formError input {\n\tborder-color: var(--color-danger);\n}\n\n.recoveryCodeLink {\n\ttext-decoration: underline;\n}\n\n.infoBox {\n\tpadding-top: var(--spacing-4xs);\n}\n</style>\n","<template>\n\t<div>\n\t\t<AuthView\n\t\t\tv-if=\"!showMfaView\"\n\t\t\t:form=\"FORM_CONFIG\"\n\t\t\t:form-loading=\"loading\"\n\t\t\t:with-sso=\"true\"\n\t\t\tdata-test-id=\"signin-form\"\n\t\t\t@submit=\"onEmailPasswordSubmitted\"\n\t\t/>\n\t\t<MfaView\n\t\t\tv-if=\"showMfaView\"\n\t\t\t:report-error=\"reportError\"\n\t\t\t@submit=\"onMFASubmitted\"\n\t\t\t@on-back-click=\"onBackClick\"\n\t\t\t@on-form-changed=\"onFormChanged\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport AuthView from './AuthView.vue';\nimport MfaView from './MfaView.vue';\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { MFA_AUTHENTICATION_REQUIRED_ERROR_CODE, VIEWS, MFA_FORM } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'SigninView',\n\tcomponents: {\n\t\tAuthView,\n\t\tMfaView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFORM_CONFIG: {} as IFormBoxConfig,\n\t\t\tloading: false,\n\t\t\tshowMfaView: false,\n\t\t\temail: '',\n\t\t\tpassword: '',\n\t\t\treportError: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore, useSettingsStore, useUIStore, useCloudPlanStore),\n\t\tuserHasMfaEnabled() {\n\t\t\treturn !!this.usersStore.currentUser?.mfaEnabled;\n\t\t},\n\t},\n\tmounted() {\n\t\tlet emailLabel = this.$locale.baseText('auth.email');\n\t\tconst ldapLoginLabel = this.settingsStore.ldapLoginLabel;\n\t\tconst isLdapLoginEnabled = this.settingsStore.isLdapLoginEnabled;\n\t\tif (isLdapLoginEnabled && ldapLoginLabel) {\n\t\t\temailLabel = ldapLoginLabel;\n\t\t}\n\t\tthis.FORM_CONFIG = {\n\t\t\ttitle: this.$locale.baseText('auth.signin'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signin'),\n\t\t\tredirectText: this.$locale.baseText('forgotPassword'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: emailLabel,\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t...(!isLdapLoginEnabled && { validationRules: [{ name: 'VALID_EMAIL' }] }),\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (!this.settingsStore.isDesktopDeployment) {\n\t\t\tthis.FORM_CONFIG.redirectLink = '/forgot-password';\n\t\t}\n\t},\n\tmethods: {\n\t\tasync onMFASubmitted(form: { token?: string; recoveryCode?: string }) {\n\t\t\tawait this.login({\n\t\t\t\temail: this.email,\n\t\t\t\tpassword: this.password,\n\t\t\t\ttoken: form.token,\n\t\t\t\trecoveryCode: form.recoveryCode,\n\t\t\t});\n\t\t},\n\t\tasync onEmailPasswordSubmitted(form: { email: string; password: string }) {\n\t\t\tawait this.login(form);\n\t\t},\n\t\tisRedirectSafe() {\n\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\treturn redirect.startsWith('/') || redirect.startsWith(window.location.origin);\n\t\t},\n\t\tgetRedirectQueryParameter() {\n\t\t\tlet redirect = '';\n\t\t\tif (typeof this.$route.query?.redirect === 'string') {\n\t\t\t\tredirect = decodeURIComponent(this.$route.query?.redirect);\n\t\t\t}\n\t\t\treturn redirect;\n\t\t},\n\t\tasync login(form: { email: string; password: string; token?: string; recoveryCode?: string }) {\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.loginWithCreds({\n\t\t\t\t\temail: form.email,\n\t\t\t\t\tpassword: form.password,\n\t\t\t\t\tmfaToken: form.token,\n\t\t\t\t\tmfaRecoveryCode: form.recoveryCode,\n\t\t\t\t});\n\t\t\t\tthis.loading = false;\n\t\t\t\tif (this.settingsStore.isCloudDeployment) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.cloudPlanStore.checkForCloudPlanData();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('Failed to check for cloud plan data', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.settingsStore.getSettings();\n\t\t\t\tthis.clearAllStickyNotifications();\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_success' : 'success',\n\t\t\t\t});\n\n\t\t\t\tif (this.isRedirectSafe()) {\n\t\t\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\t\t\tif (redirect.startsWith('http')) {\n\t\t\t\t\t\twindow.location.href = redirect;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvoid this.$router.push(redirect);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.HOMEPAGE });\n\t\t\t} catch (error) {\n\t\t\t\tif (error.errorCode === MFA_AUTHENTICATION_REQUIRED_ERROR_CODE) {\n\t\t\t\t\tthis.showMfaView = true;\n\t\t\t\t\tthis.cacheCredentials(form);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_token_rejected' : 'credentials_error',\n\t\t\t\t});\n\n\t\t\t\tif (!this.showMfaView) {\n\t\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signin.error'));\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reportError = true;\n\t\t\t}\n\t\t},\n\t\tonBackClick(fromForm: string) {\n\t\t\tthis.reportError = false;\n\t\t\tif (fromForm === MFA_FORM.MFA_TOKEN) {\n\t\t\t\tthis.showMfaView = false;\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t\tonFormChanged(toForm: string) {\n\t\t\tif (toForm === MFA_FORM.MFA_RECOVERY_CODE) {\n\t\t\t\tthis.reportError = false;\n\t\t\t}\n\t\t},\n\t\tcacheCredentials(form: { email: string; password: string }) {\n\t\t\tthis.email = form.email;\n\t\t\tthis.password = form.password;\n\t\t},\n\t},\n});\n</script>\n"],"names":["props","__props","hasAnyChanges","ref","formBus","mfaEventBus","formInputs","showRecoveryCodeForm","verifyingMfaToken","formError","reportError","toRefs","i18","useI18n","emit","__emit","formField","name","label","placeholder","maxlength","focus","onRecoveryCodeClick","mfaRecoveryCodeFieldWithDefaults","MFA_FORM","onBackClick","mfaTokenFieldWithDefaults","onSubmit","form","onInput","value","isSubmittingMfaToken","inputValidLength","MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH","MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH","onSaveClick","onMounted","_sfc_main","defineComponent","AuthView","MfaView","useToast","mapStores","useUsersStore","useSettingsStore","useUIStore","useCloudPlanStore","_a","emailLabel","ldapLoginLabel","isLdapLoginEnabled","redirect","_b","error","VIEWS","MFA_AUTHENTICATION_REQUIRED_ERROR_CODE","fromForm","toForm","_resolveComponent","_createElementBlock","_ctx","_createBlock","_component_AuthView","onEmailPasswordSubmitted","showMfaView","_openBlock","_createCommentVNode"],"mappings":"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"}
1
+ {"version":3,"file":"SigninView-B3CNL-yp.js","sources":["../../src/views/MfaView.vue","../../src/views/SigninView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div :class=\"$style.logoContainer\">\n\t\t\t<Logo />\n\t\t</div>\n\t\t<n8n-card>\n\t\t\t<div :class=\"$style.headerContainer\">\n\t\t\t\t<n8n-heading size=\"xlarge\" color=\"text-dark\">{{\n\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t? i18.baseText('mfa.recovery.modal.title')\n\t\t\t\t\t\t: i18.baseText('mfa.code.modal.title')\n\t\t\t\t}}</n8n-heading>\n\t\t\t</div>\n\t\t\t<div :class=\"[$style.formContainer, reportError ? $style.formError : '']\">\n\t\t\t\t<n8n-form-inputs\n\t\t\t\t\tv-if=\"formInputs\"\n\t\t\t\t\tdata-test-id=\"mfa-login-form\"\n\t\t\t\t\t:inputs=\"formInputs\"\n\t\t\t\t\t:event-bus=\"formBus\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t/>\n\t\t\t\t<div :class=\"$style.infoBox\">\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm && !reportError\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\t\t>{{ i18.baseText('mfa.code.input.info') }}\n\t\t\t\t\t\t<a data-test-id=\"mfa-enter-recovery-code-button\" @click=\"onRecoveryCodeClick\">{{\n\t\t\t\t\t\t\ti18.baseText('mfa.code.input.info.action')\n\t\t\t\t\t\t}}</a></n8n-text\n\t\t\t\t\t>\n\t\t\t\t\t<n8n-text v-if=\"reportError\" color=\"danger\" size=\"small\"\n\t\t\t\t\t\t>{{ formError }}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm\"\n\t\t\t\t\t\t\t:class=\"$style.recoveryCodeLink\"\n\t\t\t\t\t\t\t@click=\"onRecoveryCodeClick\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ i18.baseText('mfa.recovery.input.info.action') }}</a\n\t\t\t\t\t\t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"right\"\n\t\t\t\t\t:loading=\"verifyingMfaToken\"\n\t\t\t\t\t:label=\"\n\t\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t\t? i18.baseText('mfa.recovery.button.verify')\n\t\t\t\t\t\t\t: i18.baseText('mfa.code.button.continue')\n\t\t\t\t\t\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:disabled=\"!hasAnyChanges\"\n\t\t\t\t\t@click=\"onSaveClick\"\n\t\t\t\t/>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"left\"\n\t\t\t\t\t:label=\"i18.baseText('mfa.button.back')\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t@click=\"onBackClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-card>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFormInputs } from '@/Interface';\nimport Logo from '../components/Logo.vue';\nimport {\n\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\tMFA_FORM,\n} from '@/constants';\nimport { mfaEventBus } from '@/event-bus';\nimport { onMounted, ref } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { toRefs } from '@vueuse/core';\n\n// ---------------------------------------------------------------------------\n// #region Props\n// ---------------------------------------------------------------------------\n\nconst props = defineProps<{\n\treportError: Boolean;\n}>();\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Reactive properties\n// ---------------------------------------------------------------------------\n\nconst hasAnyChanges = ref(false);\nconst formBus = ref(mfaEventBus);\nconst formInputs = ref<null | IFormInputs>(null);\nconst showRecoveryCodeForm = ref(false);\nconst verifyingMfaToken = ref(false);\nconst formError = ref('');\nconst { reportError } = toRefs(props);\n\n// ---------------------------------------------------------------------------\n// #region Composable\n// ---------------------------------------------------------------------------\n\nconst i18 = useI18n();\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Emit\n// ---------------------------------------------------------------------------\n\nconst emit = defineEmits(['onFormChanged', 'onBackClick', 'submit']);\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Methods\n// ---------------------------------------------------------------------------\n\nconst formField = (\n\tname: string,\n\tlabel: string,\n\tplaceholder: string,\n\tmaxlength: number,\n\tfocus = true,\n) => {\n\treturn {\n\t\tname,\n\t\tinitialValue: '',\n\t\tproperties: {\n\t\t\tlabel,\n\t\t\tplaceholder,\n\t\t\tmaxlength,\n\t\t\tcapitalize: true,\n\t\t\tvalidateOnBlur: false,\n\t\t\tfocusInitially: focus,\n\t\t},\n\t};\n};\n\nconst onRecoveryCodeClick = () => {\n\tformError.value = '';\n\tshowRecoveryCodeForm.value = true;\n\thasAnyChanges.value = false;\n\tformInputs.value = [mfaRecoveryCodeFieldWithDefaults()];\n\temit('onFormChanged', MFA_FORM.MFA_RECOVERY_CODE);\n};\n\nconst onBackClick = () => {\n\tif (!showRecoveryCodeForm.value) {\n\t\temit('onBackClick', MFA_FORM.MFA_TOKEN);\n\t\treturn;\n\t}\n\n\tshowRecoveryCodeForm.value = false;\n\thasAnyChanges.value = true;\n\tformInputs.value = [mfaTokenFieldWithDefaults()];\n\temit('onBackClick', MFA_FORM.MFA_RECOVERY_CODE);\n};\n\nconst onSubmit = async (form: { token: string; recoveryCode: string }) => {\n\tformError.value = !showRecoveryCodeForm.value\n\t\t? i18.baseText('mfa.code.invalid')\n\t\t: i18.baseText('mfa.recovery.invalid');\n\temit('submit', form);\n};\n\nconst onInput = ({ target: { value, name } }: { target: { value: string; name: string } }) => {\n\tconst isSubmittingMfaToken = name === 'token';\n\tconst inputValidLength = isSubmittingMfaToken\n\t\t? MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH\n\t\t: MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH;\n\n\tif (value.length !== inputValidLength) {\n\t\thasAnyChanges.value = false;\n\t\treturn;\n\t}\n\n\tverifyingMfaToken.value = true;\n\thasAnyChanges.value = true;\n\n\tconst dataToSubmit = isSubmittingMfaToken\n\t\t? { token: value, recoveryCode: '' }\n\t\t: { token: '', recoveryCode: value };\n\n\tonSubmit(dataToSubmit)\n\t\t.catch(() => {})\n\t\t.finally(() => (verifyingMfaToken.value = false));\n};\n\nconst mfaRecoveryCodeFieldWithDefaults = () => {\n\treturn formField(\n\t\t'recoveryCode',\n\t\ti18.baseText('mfa.recovery.input.label'),\n\t\ti18.baseText('mfa.recovery.input.placeholder'),\n\t\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\t);\n};\n\nconst mfaTokenFieldWithDefaults = () => {\n\treturn formField(\n\t\t'token',\n\t\ti18.baseText('mfa.code.input.label'),\n\t\ti18.baseText('mfa.code.input.placeholder'),\n\t\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\t);\n};\n\nconst onSaveClick = () => {\n\tformBus.value.emit('submit');\n};\n\n// #endregion\n\n// ---------------------------------------------------------------------------\n// #region Lifecycle hooks\n// ---------------------------------------------------------------------------\n\nonMounted(() => {\n\tformInputs.value = [mfaTokenFieldWithDefaults()];\n});\n\n// #endregion\n</script>\n\n<style lang=\"scss\" module>\nbody {\n\tbackground-color: var(--color-background-light);\n}\n\n.container {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\tpadding-top: var(--spacing-2xl);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-l);\n\t\twidth: 352px;\n\t}\n}\n\n.logoContainer {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.formContainer {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.headerContainer {\n\ttext-align: center;\n\tmargin-bottom: var(--spacing-xl);\n}\n\n.formError input {\n\tborder-color: var(--color-danger);\n}\n\n.recoveryCodeLink {\n\ttext-decoration: underline;\n}\n\n.infoBox {\n\tpadding-top: var(--spacing-4xs);\n}\n</style>\n","<template>\n\t<div>\n\t\t<AuthView\n\t\t\tv-if=\"!showMfaView\"\n\t\t\t:form=\"FORM_CONFIG\"\n\t\t\t:form-loading=\"loading\"\n\t\t\t:with-sso=\"true\"\n\t\t\tdata-test-id=\"signin-form\"\n\t\t\t@submit=\"onEmailPasswordSubmitted\"\n\t\t/>\n\t\t<MfaView\n\t\t\tv-if=\"showMfaView\"\n\t\t\t:report-error=\"reportError\"\n\t\t\t@submit=\"onMFASubmitted\"\n\t\t\t@on-back-click=\"onBackClick\"\n\t\t\t@on-form-changed=\"onFormChanged\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport AuthView from './AuthView.vue';\nimport MfaView from './MfaView.vue';\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { MFA_AUTHENTICATION_REQUIRED_ERROR_CODE, VIEWS, MFA_FORM } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'SigninView',\n\tcomponents: {\n\t\tAuthView,\n\t\tMfaView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFORM_CONFIG: {} as IFormBoxConfig,\n\t\t\tloading: false,\n\t\t\tshowMfaView: false,\n\t\t\temail: '',\n\t\t\tpassword: '',\n\t\t\treportError: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore, useSettingsStore, useUIStore, useCloudPlanStore),\n\t\tuserHasMfaEnabled() {\n\t\t\treturn !!this.usersStore.currentUser?.mfaEnabled;\n\t\t},\n\t},\n\tmounted() {\n\t\tlet emailLabel = this.$locale.baseText('auth.email');\n\t\tconst ldapLoginLabel = this.settingsStore.ldapLoginLabel;\n\t\tconst isLdapLoginEnabled = this.settingsStore.isLdapLoginEnabled;\n\t\tif (isLdapLoginEnabled && ldapLoginLabel) {\n\t\t\temailLabel = ldapLoginLabel;\n\t\t}\n\t\tthis.FORM_CONFIG = {\n\t\t\ttitle: this.$locale.baseText('auth.signin'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signin'),\n\t\t\tredirectText: this.$locale.baseText('forgotPassword'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: emailLabel,\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t...(!isLdapLoginEnabled && { validationRules: [{ name: 'VALID_EMAIL' }] }),\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (!this.settingsStore.isDesktopDeployment) {\n\t\t\tthis.FORM_CONFIG.redirectLink = '/forgot-password';\n\t\t}\n\t},\n\tmethods: {\n\t\tasync onMFASubmitted(form: { token?: string; recoveryCode?: string }) {\n\t\t\tawait this.login({\n\t\t\t\temail: this.email,\n\t\t\t\tpassword: this.password,\n\t\t\t\ttoken: form.token,\n\t\t\t\trecoveryCode: form.recoveryCode,\n\t\t\t});\n\t\t},\n\t\tasync onEmailPasswordSubmitted(form: { email: string; password: string }) {\n\t\t\tawait this.login(form);\n\t\t},\n\t\tisRedirectSafe() {\n\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\treturn redirect.startsWith('/') || redirect.startsWith(window.location.origin);\n\t\t},\n\t\tgetRedirectQueryParameter() {\n\t\t\tlet redirect = '';\n\t\t\tif (typeof this.$route.query?.redirect === 'string') {\n\t\t\t\tredirect = decodeURIComponent(this.$route.query?.redirect);\n\t\t\t}\n\t\t\treturn redirect;\n\t\t},\n\t\tasync login(form: { email: string; password: string; token?: string; recoveryCode?: string }) {\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.loginWithCreds({\n\t\t\t\t\temail: form.email,\n\t\t\t\t\tpassword: form.password,\n\t\t\t\t\tmfaToken: form.token,\n\t\t\t\t\tmfaRecoveryCode: form.recoveryCode,\n\t\t\t\t});\n\t\t\t\tthis.loading = false;\n\t\t\t\tif (this.settingsStore.isCloudDeployment) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.cloudPlanStore.checkForCloudPlanData();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('Failed to check for cloud plan data', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.settingsStore.getSettings();\n\t\t\t\tthis.clearAllStickyNotifications();\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_success' : 'success',\n\t\t\t\t});\n\n\t\t\t\tif (this.isRedirectSafe()) {\n\t\t\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\t\t\tif (redirect.startsWith('http')) {\n\t\t\t\t\t\twindow.location.href = redirect;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvoid this.$router.push(redirect);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.HOMEPAGE });\n\t\t\t} catch (error) {\n\t\t\t\tif (error.errorCode === MFA_AUTHENTICATION_REQUIRED_ERROR_CODE) {\n\t\t\t\t\tthis.showMfaView = true;\n\t\t\t\t\tthis.cacheCredentials(form);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_token_rejected' : 'credentials_error',\n\t\t\t\t});\n\n\t\t\t\tif (!this.showMfaView) {\n\t\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signin.error'));\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reportError = true;\n\t\t\t}\n\t\t},\n\t\tonBackClick(fromForm: string) {\n\t\t\tthis.reportError = false;\n\t\t\tif (fromForm === MFA_FORM.MFA_TOKEN) {\n\t\t\t\tthis.showMfaView = false;\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t\tonFormChanged(toForm: string) {\n\t\t\tif (toForm === MFA_FORM.MFA_RECOVERY_CODE) {\n\t\t\t\tthis.reportError = false;\n\t\t\t}\n\t\t},\n\t\tcacheCredentials(form: { email: string; password: string }) {\n\t\t\tthis.email = form.email;\n\t\t\tthis.password = form.password;\n\t\t},\n\t},\n});\n</script>\n"],"names":["props","__props","hasAnyChanges","ref","formBus","mfaEventBus","formInputs","showRecoveryCodeForm","verifyingMfaToken","formError","reportError","toRefs","i18","useI18n","emit","__emit","formField","name","label","placeholder","maxlength","focus","onRecoveryCodeClick","mfaRecoveryCodeFieldWithDefaults","MFA_FORM","onBackClick","mfaTokenFieldWithDefaults","onSubmit","form","onInput","value","isSubmittingMfaToken","inputValidLength","MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH","MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH","onSaveClick","onMounted","_sfc_main","defineComponent","AuthView","MfaView","useToast","mapStores","useUsersStore","useSettingsStore","useUIStore","useCloudPlanStore","_a","emailLabel","ldapLoginLabel","isLdapLoginEnabled","redirect","_b","error","VIEWS","MFA_AUTHENTICATION_REQUIRED_ERROR_CODE","fromForm","toForm","_resolveComponent","_createElementBlock","_ctx","_createBlock","_component_AuthView","onEmailPasswordSubmitted","showMfaView","_openBlock","_createCommentVNode"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as t,a as r,V as i}from"./index-BE0Xl-jy.js";import{m as e}from"./pinia-sugP77Im.js";import{G as m,l as p,m as s}from"./vendor-Dv5OeN6t.js";import{_ as a}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const n=m({name:"SignoutView",setup(){return{...t()}},computed:{...e(r)},mounted(){this.logout()},methods:{async logout(){try{await this.usersStore.logout(),window.location.href=this.$router.resolve({name:i.SIGNIN}).href}catch(o){this.showError(o,this.$locale.baseText("auth.signout.error"))}}}});function u(o,c,f,h,l,d){return p(),s("div")}const L=a(n,[["render",u]]);export{L as default};
2
- //# sourceMappingURL=SignoutView-BySf9D7k.js.map
1
+ import{u as t,a as r,V as i}from"./index-1OxaEeO3.js";import{m as e}from"./pinia-sugP77Im.js";import{G as m,l as p,m as s}from"./vendor-Dv5OeN6t.js";import{_ as a}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const n=m({name:"SignoutView",setup(){return{...t()}},computed:{...e(r)},mounted(){this.logout()},methods:{async logout(){try{await this.usersStore.logout(),window.location.href=this.$router.resolve({name:i.SIGNIN}).href}catch(o){this.showError(o,this.$locale.baseText("auth.signout.error"))}}}});function u(o,c,f,h,l,d){return p(),s("div")}const L=a(n,[["render",u]]);export{L as default};
2
+ //# sourceMappingURL=SignoutView-svcLavkC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignoutView-BySf9D7k.js","sources":["../../src/views/SignoutView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport default defineComponent({\n\tname: 'SignoutView',\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmounted() {\n\t\tvoid this.logout();\n\t},\n\tmethods: {\n\t\tasync logout() {\n\t\t\ttry {\n\t\t\t\tawait this.usersStore.logout();\n\t\t\t\twindow.location.href = this.$router.resolve({ name: VIEWS.SIGNIN }).href;\n\t\t\t} catch (e) {\n\t\t\t\tthis.showError(e, this.$locale.baseText('auth.signout.error'));\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div />\n</template>\n"],"names":["_sfc_main","defineComponent","useToast","mapStores","useUsersStore","VIEWS","e"],"mappings":"ukCAOA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,cACN,OAAQ,CACA,MAAA,CACN,GAAGC,EAAS,CAAA,CAEd,EACA,SAAU,CACT,GAAGC,EAAUC,CAAa,CAC3B,EACA,SAAU,CACJ,KAAK,QACX,EACA,QAAS,CACR,MAAM,QAAS,CACV,GAAA,CACG,MAAA,KAAK,WAAW,SACf,OAAA,SAAS,KAAO,KAAK,QAAQ,QAAQ,CAAE,KAAMC,EAAM,MAAQ,CAAA,EAAE,WAC5DC,EAAG,CACX,KAAK,UAAUA,EAAG,KAAK,QAAQ,SAAS,oBAAoB,CAAC,CAC9D,CACD,CACD,CACD,CAAC"}
1
+ {"version":3,"file":"SignoutView-svcLavkC.js","sources":["../../src/views/SignoutView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport default defineComponent({\n\tname: 'SignoutView',\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmounted() {\n\t\tvoid this.logout();\n\t},\n\tmethods: {\n\t\tasync logout() {\n\t\t\ttry {\n\t\t\t\tawait this.usersStore.logout();\n\t\t\t\twindow.location.href = this.$router.resolve({ name: VIEWS.SIGNIN }).href;\n\t\t\t} catch (e) {\n\t\t\t\tthis.showError(e, this.$locale.baseText('auth.signout.error'));\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div />\n</template>\n"],"names":["_sfc_main","defineComponent","useToast","mapStores","useUsersStore","VIEWS","e"],"mappings":"ukCAOA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,cACN,OAAQ,CACA,MAAA,CACN,GAAGC,EAAS,CAAA,CAEd,EACA,SAAU,CACT,GAAGC,EAAUC,CAAa,CAC3B,EACA,SAAU,CACJ,KAAK,QACX,EACA,QAAS,CACR,MAAM,QAAS,CACV,GAAA,CACG,MAAA,KAAK,WAAW,SACf,OAAA,SAAS,KAAO,KAAK,QAAQ,QAAQ,CAAE,KAAMC,EAAM,MAAQ,CAAA,EAAE,WAC5DC,EAAG,CACX,KAAK,UAAUA,EAAG,KAAK,QAAQ,SAAS,oBAAoB,CAAC,CAC9D,CACD,CACD,CACD,CAAC"}
@@ -1,2 +1,2 @@
1
- import{A as x}from"./AuthView-CMxdNKZJ.js";import{e as I,a as T,u as w,V as d,x as E}from"./index-BE0Xl-jy.js";import{G as S,aH as N,az as _,r as n,e as y,b as A,l as R,M as q}from"./vendor-Dv5OeN6t.js";import"./pinia-sugP77Im.js";import"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const ue=S({__name:"SignupView",setup(V){const f=I(),l=T(),s=w(),e=E(),c=N(),u=_(),g={title:e.baseText("auth.signup.setupYourAccount"),buttonText:e.baseText("auth.signup.finishAccountSetup"),inputs:[{name:"firstName",properties:{label:e.baseText("auth.firstName"),maxlength:32,required:!0,autocomplete:"given-name",capitalize:!0}},{name:"lastName",properties:{label:e.baseText("auth.lastName"),maxlength:32,required:!0,autocomplete:"family-name",capitalize:!0}},{name:"password",properties:{label:e.baseText("auth.password"),type:"password",validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],required:!0,infoText:e.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"agree",properties:{label:e.baseText("auth.agreement.label"),type:"checkbox"}}]},p=n(!1),a=n(null),i=n(null),o=n(null),h=y(()=>a.value?e.baseText("settings.signup.signUpInviterInfo",{interpolate:{firstName:a.value.firstName,lastName:a.value.lastName}}):"");A(async()=>{const t=v("inviterId"),r=v("inviteeId");try{if(!t||!r)throw new Error(e.baseText("auth.signup.missingTokenError"));i.value=t,o.value=r;const m=await l.validateSignupToken({inviteeId:o.value,inviterId:i.value});a.value=m.inviter}catch(m){s.showError(m,e.baseText("auth.signup.tokenValidationError")),c.replace({name:d.SIGNIN})}});async function b(t){if(!i.value||!o.value){s.showError(new Error(e.baseText("auth.signup.tokenValidationError")),e.baseText("auth.signup.setupYourAccountError"));return}try{if(p.value=!0,await l.acceptInvitation({...t,inviterId:i.value,inviteeId:o.value}),t.agree===!0)try{await f.submitContactEmail(t.email.toString(),t.agree)}catch{}await c.push({name:d.NEW_WORKFLOW})}catch(r){s.showError(r,e.baseText("auth.signup.setupYourAccountError"))}p.value=!1}function v(t){return!u.query[t]||typeof u.query[t]!="string"?null:u.query[t]}return(t,r)=>(R(),q(x,{form:g,"form-loading":p.value,subtitle:h.value,onSubmit:b},null,8,["form-loading","subtitle"]))}});export{ue as default};
2
- //# sourceMappingURL=SignupView-EU3JWt4T.js.map
1
+ import{A as x}from"./AuthView-B_jZMnGj.js";import{e as I,a as T,u as w,V as d,x as E}from"./index-1OxaEeO3.js";import{G as S,aH as N,az as _,r as n,e as y,b as A,l as R,M as q}from"./vendor-Dv5OeN6t.js";import"./pinia-sugP77Im.js";import"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const ue=S({__name:"SignupView",setup(V){const f=I(),l=T(),s=w(),e=E(),c=N(),u=_(),g={title:e.baseText("auth.signup.setupYourAccount"),buttonText:e.baseText("auth.signup.finishAccountSetup"),inputs:[{name:"firstName",properties:{label:e.baseText("auth.firstName"),maxlength:32,required:!0,autocomplete:"given-name",capitalize:!0}},{name:"lastName",properties:{label:e.baseText("auth.lastName"),maxlength:32,required:!0,autocomplete:"family-name",capitalize:!0}},{name:"password",properties:{label:e.baseText("auth.password"),type:"password",validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],required:!0,infoText:e.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"agree",properties:{label:e.baseText("auth.agreement.label"),type:"checkbox"}}]},p=n(!1),a=n(null),i=n(null),o=n(null),h=y(()=>a.value?e.baseText("settings.signup.signUpInviterInfo",{interpolate:{firstName:a.value.firstName,lastName:a.value.lastName}}):"");A(async()=>{const t=v("inviterId"),r=v("inviteeId");try{if(!t||!r)throw new Error(e.baseText("auth.signup.missingTokenError"));i.value=t,o.value=r;const m=await l.validateSignupToken({inviteeId:o.value,inviterId:i.value});a.value=m.inviter}catch(m){s.showError(m,e.baseText("auth.signup.tokenValidationError")),c.replace({name:d.SIGNIN})}});async function b(t){if(!i.value||!o.value){s.showError(new Error(e.baseText("auth.signup.tokenValidationError")),e.baseText("auth.signup.setupYourAccountError"));return}try{if(p.value=!0,await l.acceptInvitation({...t,inviterId:i.value,inviteeId:o.value}),t.agree===!0)try{await f.submitContactEmail(t.email.toString(),t.agree)}catch{}await c.push({name:d.NEW_WORKFLOW})}catch(r){s.showError(r,e.baseText("auth.signup.setupYourAccountError"))}p.value=!1}function v(t){return!u.query[t]||typeof u.query[t]!="string"?null:u.query[t]}return(t,r)=>(R(),q(x,{form:g,"form-loading":p.value,subtitle:h.value,onSubmit:b},null,8,["form-loading","subtitle"]))}});export{ue as default};
2
+ //# sourceMappingURL=SignupView-DJWRTPKF.js.map