@rancher/shell 3.0.12-rc.2 → 3.0.12-rc.4

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 (473) hide show
  1. package/apis/impl/apis.ts +6 -0
  2. package/apis/index.ts +26 -0
  3. package/apis/intf/resources-api/cluster-api.ts +18 -0
  4. package/apis/intf/resources-api/mgmt-api.ts +15 -0
  5. package/apis/intf/resources-api/resource-base.ts +107 -0
  6. package/apis/intf/resources-api/resource-constants.ts +147 -0
  7. package/apis/intf/resources-api/resources-api.ts +143 -0
  8. package/apis/intf/resources.ts +49 -0
  9. package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
  10. package/apis/intf/shell-api/proxy.ts +216 -0
  11. package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
  12. package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
  13. package/apis/intf/shell.ts +12 -6
  14. package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
  15. package/apis/resources/index.ts +22 -0
  16. package/apis/resources/resources-api-class.ts +187 -0
  17. package/apis/shell/__tests__/proxy.test.ts +369 -0
  18. package/apis/shell/index.ts +8 -1
  19. package/apis/shell/modal.ts +4 -1
  20. package/apis/shell/notifications.ts +9 -6
  21. package/apis/shell/proxy.ts +256 -0
  22. package/apis/shell/slide-in.ts +4 -1
  23. package/apis/vue-shim.d.ts +2 -1
  24. package/assets/data/aws-regions.json +4 -0
  25. package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
  26. package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
  27. package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
  28. package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
  29. package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
  30. package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
  31. package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
  32. package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
  33. package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
  34. package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
  35. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
  36. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
  37. package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
  38. package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
  39. package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
  40. package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
  41. package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
  42. package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
  43. package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
  44. package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
  45. package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
  46. package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
  47. package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
  48. package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
  49. package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
  50. package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
  51. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
  52. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
  53. package/assets/styles/base/_variables.scss +2 -0
  54. package/assets/styles/fonts/_fontstack.scss +132 -8
  55. package/assets/styles/global/_layout.scss +4 -0
  56. package/assets/translations/en-us.yaml +165 -45
  57. package/assets/translations/zh-hans.yaml +1 -7
  58. package/chart/monitoring/ClusterSelector.vue +0 -21
  59. package/chart/monitoring/index.vue +10 -1
  60. package/chart/monitoring/prometheus/index.vue +6 -3
  61. package/components/ActionDropdownShell.vue +2 -1
  62. package/components/CruResource.vue +161 -14
  63. package/components/CruResourceFooter.vue +9 -5
  64. package/components/ExplorerMembers.vue +8 -4
  65. package/components/ExplorerProjectsNamespaces.vue +11 -7
  66. package/components/GrowlManager.vue +4 -0
  67. package/components/InstallHelmCharts.vue +2 -2
  68. package/components/LandingPagePreference.vue +14 -5
  69. package/components/MgmtNodeList.vue +184 -0
  70. package/components/Resource/Detail/Card/StateCard/__tests__/composables.test.ts +90 -1
  71. package/components/Resource/Detail/Card/StateCard/composables.ts +57 -87
  72. package/components/Resource/Detail/Card/StatusCard/__tests__/StatusCard.test.ts +61 -0
  73. package/components/Resource/Detail/Card/StatusCard/index.vue +61 -15
  74. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +17 -1
  75. package/components/Resource/Detail/Metadata/KeyValue.vue +5 -2
  76. package/components/Resource/Detail/Metadata/KeyValueRow.vue +2 -6
  77. package/components/Resource/Detail/Metadata/index.vue +6 -0
  78. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  79. package/components/Resource/Detail/SpacedRow.vue +3 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  81. package/components/ResourceDetail/index.vue +1 -1
  82. package/components/ResourceList/Masthead.vue +19 -9
  83. package/components/ResourceList/index.vue +82 -1
  84. package/components/RichTranslation.vue +5 -2
  85. package/components/SelectIconGrid.vue +0 -10
  86. package/components/Setting.vue +1 -0
  87. package/components/SingleClusterInfo.vue +1 -0
  88. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  89. package/components/SortableTable/index.vue +6 -9
  90. package/components/SortableTable/selection.js +23 -5
  91. package/components/SortableTable/sorting.js +6 -3
  92. package/components/SubtleLink.vue +31 -6
  93. package/components/Tabbed/Tab.vue +29 -3
  94. package/components/Tabbed/index.vue +25 -3
  95. package/components/TableOfContents/TableOfContents.vue +109 -0
  96. package/components/TableOfContents/composables.ts +258 -0
  97. package/components/Window/ContainerShell.vue +21 -11
  98. package/components/Window/__tests__/ContainerShell.test.ts +107 -37
  99. package/components/Wizard.vue +23 -17
  100. package/components/fleet/AppCoChartGrid.vue +401 -0
  101. package/components/fleet/AppCoEmptyState.vue +127 -0
  102. package/components/fleet/AppCoPageHeader.vue +119 -0
  103. package/components/fleet/AppCoVersionSelect.vue +70 -0
  104. package/components/fleet/FleetBundles.vue +100 -12
  105. package/components/fleet/FleetClusterTargets/ClusterSelectionFields.vue +217 -0
  106. package/components/fleet/FleetClusterTargets/TargetsList.vue +123 -35
  107. package/components/fleet/FleetClusterTargets/index.vue +226 -161
  108. package/components/fleet/FleetIntro.vue +7 -3
  109. package/components/fleet/FleetNoWorkspaces.vue +7 -3
  110. package/components/fleet/FleetSecretSelector.vue +5 -3
  111. package/components/fleet/FleetValuesFrom.vue +8 -2
  112. package/components/fleet/GitRepoTargetTab.vue +0 -2
  113. package/components/fleet/HelmOpAdvancedTab.vue +19 -53
  114. package/components/fleet/HelmOpAppCoConfigTab.vue +593 -0
  115. package/components/fleet/HelmOpAppCoResourcesSection.vue +162 -0
  116. package/components/fleet/HelmOpResourcesSection.vue +82 -0
  117. package/components/fleet/HelmOpTargetOptionsSection.vue +89 -0
  118. package/components/fleet/HelmOpTargetTab.vue +64 -60
  119. package/components/fleet/HelmOpValuesTab.vue +129 -105
  120. package/components/fleet/__tests__/AppCoEmptyState.test.ts +71 -0
  121. package/components/fleet/__tests__/AppCoVersionSelect.test.ts +36 -0
  122. package/components/fleet/__tests__/ClusterSelectionFields.test.ts +62 -0
  123. package/components/fleet/__tests__/FleetClusterTargets.test.ts +402 -115
  124. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  125. package/components/fleet/__tests__/FleetSecretSelector.test.ts +16 -0
  126. package/components/fleet/__tests__/FleetValuesFrom.test.ts +44 -0
  127. package/components/fleet/__tests__/HelmOpAppCoConfigTab.test.ts +59 -0
  128. package/components/fleet/__tests__/HelmOpAppCoResourcesSection.test.ts +62 -0
  129. package/components/fleet/__tests__/HelmOpResourcesSection.test.ts +43 -0
  130. package/components/fleet/__tests__/HelmOpTargetOptionsSection.test.ts +34 -0
  131. package/components/fleet/__tests__/HelmOpValuesTab.test.ts +39 -0
  132. package/components/fleet/__tests__/__snapshots__/AppCoEmptyState.test.ts.snap +97 -0
  133. package/components/fleet/__tests__/__snapshots__/AppCoVersionSelect.test.ts.snap +30 -0
  134. package/components/fleet/__tests__/__snapshots__/ClusterSelectionFields.test.ts.snap +209 -0
  135. package/components/fleet/__tests__/__snapshots__/HelmOpTargetOptionsSection.test.ts.snap +140 -0
  136. package/components/fleet/dashboard/Empty.vue +8 -4
  137. package/components/fleet/dashboard/ResourceCard.vue +28 -0
  138. package/components/fleet/dashboard/ResourceDetails.vue +28 -0
  139. package/components/fleet/dashboard/__tests__/ResourceCard.test.ts +87 -0
  140. package/components/form/ArrayList.vue +61 -4
  141. package/components/form/KeyValue.vue +23 -2
  142. package/components/form/LabeledSelect.vue +59 -4
  143. package/components/form/Labels.vue +22 -3
  144. package/components/form/NameNsDescription.vue +24 -5
  145. package/components/form/ResourceTabs/index.vue +1 -0
  146. package/components/form/Security.vue +6 -2
  147. package/components/form/WorkloadPorts.vue +2 -7
  148. package/components/form/__tests__/NameNsDescription.test.ts +75 -0
  149. package/components/form/__tests__/Security.test.ts +76 -0
  150. package/components/formatter/Autoscaler.vue +4 -4
  151. package/components/formatter/ClusterKubeVersion.vue +27 -0
  152. package/components/formatter/ClusterLink.vue +1 -7
  153. package/components/formatter/ClusterProvider.vue +6 -10
  154. package/components/formatter/FleetSummaryGraph.vue +0 -3
  155. package/components/formatter/InternalExternalIP.vue +10 -4
  156. package/components/formatter/MachineSummaryGraph.vue +1 -1
  157. package/components/formatter/PodsUsage.vue +2 -2
  158. package/components/formatter/ServiceTargets.vue +26 -7
  159. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  160. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  161. package/components/formatter/__tests__/InternalExternalIP.test.ts +132 -0
  162. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  163. package/components/formatter/__tests__/ServiceTargets.test.ts +412 -0
  164. package/components/nav/Header.vue +4 -0
  165. package/components/nav/NamespaceFilter.vue +2 -2
  166. package/components/nav/TopLevelMenu.helper.ts +15 -3
  167. package/components/nav/TopLevelMenu.vue +22 -6
  168. package/components/nav/__tests__/Header.test.ts +15 -0
  169. package/components/nav/__tests__/TopLevelMenu.test.ts +263 -21
  170. package/components/templates/default.vue +9 -4
  171. package/components/templates/home.vue +23 -0
  172. package/components/templates/plain.vue +23 -0
  173. package/components/templates/standalone.vue +17 -0
  174. package/composables/useFormValidation.ts +93 -0
  175. package/composables/useHelmOpResources.test.ts +56 -0
  176. package/composables/useHelmOpResources.ts +32 -0
  177. package/composables/useStateColor.test.ts +325 -0
  178. package/composables/useStateColor.ts +128 -0
  179. package/composables/useVeeValidateField.test.ts +159 -0
  180. package/composables/useVeeValidateField.ts +67 -0
  181. package/config/home-links.js +1 -1
  182. package/config/labels-annotations.js +1 -0
  183. package/config/pagination-table-headers.js +18 -1
  184. package/config/product/explorer.js +17 -4
  185. package/config/product/manager.js +84 -21
  186. package/config/router/index.js +16 -0
  187. package/config/router/navigation-guards/__tests__/authentication.test.ts +130 -0
  188. package/config/router/navigation-guards/authentication.js +10 -4
  189. package/config/router/routes.js +26 -6
  190. package/config/settings.ts +0 -2
  191. package/config/table-headers.js +23 -5
  192. package/config/types.js +11 -1
  193. package/core/__tests__/plugin-products.test.ts +904 -20
  194. package/core/plugin-products-base.ts +110 -10
  195. package/core/plugin-products.ts +4 -0
  196. package/core/plugin-types.ts +194 -31
  197. package/core/plugin.ts +18 -7
  198. package/core/productDebugger.js +9 -4
  199. package/core/types-provisioning.ts +77 -31
  200. package/core/types.ts +72 -22
  201. package/detail/__tests__/pod.test.ts +41 -0
  202. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +114 -0
  203. package/detail/__tests__/workload.test.ts +3 -152
  204. package/detail/catalog.cattle.io.clusterrepo.vue +1 -1
  205. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  206. package/detail/pod.vue +1 -1
  207. package/detail/provisioning.cattle.io.cluster.vue +34 -14
  208. package/detail/workload/index.vue +12 -55
  209. package/edit/__tests__/catalog.cattle.io.clusterrepo.test.ts +248 -0
  210. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +105 -0
  211. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
  212. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/index.test.ts.snap +1 -0
  213. package/edit/auth/__tests__/azuread.test.ts +247 -39
  214. package/edit/auth/__tests__/github.test.ts +234 -0
  215. package/edit/auth/__tests__/oidc.test.ts +26 -6
  216. package/edit/auth/__tests__/saml.test.ts +196 -0
  217. package/edit/auth/azuread.vue +197 -56
  218. package/edit/auth/github.vue +72 -13
  219. package/edit/auth/ldap/__tests__/index.test.ts +206 -0
  220. package/edit/auth/ldap/config.vue +8 -0
  221. package/edit/auth/ldap/index.vue +75 -1
  222. package/edit/auth/oidc.vue +119 -73
  223. package/edit/auth/saml.vue +76 -12
  224. package/edit/catalog.cattle.io.clusterrepo.vue +140 -32
  225. package/edit/fleet.cattle.io.helmop.vue +491 -136
  226. package/edit/management.cattle.io.user.vue +5 -2
  227. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  228. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  229. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  230. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  231. package/edit/provisioning.cattle.io.cluster/index.vue +11 -7
  232. package/edit/provisioning.cattle.io.cluster/rke2.vue +92 -14
  233. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +22 -0
  234. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  235. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  236. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  237. package/edit/secret/__tests__/ssh.test.ts +5 -6
  238. package/edit/secret/basic.vue +31 -0
  239. package/edit/secret/index.vue +68 -17
  240. package/edit/secret/registry.vue +38 -0
  241. package/edit/secret/ssh.vue +29 -0
  242. package/edit/secret/tls.vue +30 -0
  243. package/edit/service.vue +4 -4
  244. package/edit/workload/Upgrading.vue +3 -3
  245. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  246. package/edit/workload/mixins/workload.js +2 -1
  247. package/list/fleet.cattle.io.bundle.vue +7 -104
  248. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  249. package/list/group.principal.vue +5 -4
  250. package/list/harvesterhci.io.management.cluster.vue +8 -9
  251. package/list/management.cattle.io.user.vue +12 -9
  252. package/list/provisioning.cattle.io.cluster.vue +268 -180
  253. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  254. package/mixins/__tests__/auth-config.test.ts +90 -0
  255. package/mixins/__tests__/chart.test.ts +206 -0
  256. package/mixins/__tests__/resource-fetch-api-pagination.test.ts +48 -0
  257. package/mixins/auth-config.js +7 -0
  258. package/mixins/brand.js +2 -1
  259. package/mixins/chart.js +22 -9
  260. package/mixins/child-hook.js +12 -6
  261. package/mixins/create-edit-view/impl.js +5 -3
  262. package/mixins/resource-fetch-api-pagination.js +62 -6
  263. package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +57 -0
  264. package/models/__tests__/compliance.cattle.io.clusterscan.test.ts +144 -0
  265. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  266. package/models/__tests__/fleet-application.test.ts +175 -0
  267. package/models/__tests__/fleet.cattle.io.bundle.test.ts +169 -0
  268. package/models/__tests__/fleet.cattle.io.helmop.test.ts +84 -0
  269. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  270. package/models/__tests__/management.cattle.io.node.ts +28 -5
  271. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  272. package/models/__tests__/namespace.test.ts +36 -0
  273. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +81 -11
  274. package/models/__tests__/workload.test.ts +401 -26
  275. package/models/base-cluster.x-k8s.io.js +26 -0
  276. package/models/catalog.cattle.io.clusterrepo.js +28 -4
  277. package/models/cluster.js +1 -1
  278. package/models/cluster.x-k8s.io.machine.js +4 -22
  279. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  280. package/models/cluster.x-k8s.io.machineset.js +2 -20
  281. package/models/compliance.cattle.io.clusterscan.js +165 -2
  282. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  283. package/models/fleet-application.js +7 -1
  284. package/models/fleet.cattle.io.helmop.js +20 -1
  285. package/models/management.cattle.io.cluster.js +434 -41
  286. package/models/management.cattle.io.node.js +50 -7
  287. package/models/management.cattle.io.nodepool.js +1 -1
  288. package/models/namespace.js +1 -1
  289. package/models/networking.k8s.io.ingress.js +12 -4
  290. package/models/pod.js +33 -1
  291. package/models/provisioning.cattle.io.cluster.js +51 -334
  292. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  293. package/models/workload.js +108 -13
  294. package/models/workload.service.js +5 -0
  295. package/package.json +22 -39
  296. package/pages/__tests__/readme.test.ts +49 -0
  297. package/pages/about.vue +5 -6
  298. package/pages/auth/login.vue +0 -35
  299. package/pages/auth/setup.vue +13 -3
  300. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +2 -2
  301. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +10 -1
  302. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +76 -0
  303. package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +93 -0
  304. package/pages/c/_cluster/apps/charts/chart.vue +62 -9
  305. package/pages/c/_cluster/apps/charts/index.vue +48 -10
  306. package/pages/c/_cluster/apps/charts/install.vue +122 -113
  307. package/pages/c/_cluster/auth/roles/index.vue +5 -4
  308. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  309. package/pages/c/_cluster/explorer/index.vue +5 -49
  310. package/pages/c/_cluster/explorer/workload-dashboard/ByNamespaceSection.vue +31 -0
  311. package/pages/c/_cluster/explorer/workload-dashboard/ByStateSection.vue +138 -0
  312. package/pages/c/_cluster/explorer/workload-dashboard/ByTypeSection.vue +30 -0
  313. package/pages/c/_cluster/explorer/workload-dashboard/WorkloadCard.vue +155 -0
  314. package/pages/c/_cluster/explorer/workload-dashboard/WorkloadNamespaceCard.vue +142 -0
  315. package/pages/c/_cluster/explorer/workload-dashboard/WorkloadTypeCard.vue +159 -0
  316. package/pages/c/_cluster/explorer/workload-dashboard/__tests__/composable.test.ts +561 -0
  317. package/pages/c/_cluster/explorer/workload-dashboard/composable.ts +440 -0
  318. package/pages/c/_cluster/explorer/workload-dashboard/index.vue +187 -0
  319. package/pages/c/_cluster/explorer/workload-dashboard/types.ts +80 -0
  320. package/pages/c/_cluster/fleet/application/create.vue +187 -136
  321. package/pages/c/_cluster/fleet/application/index.vue +5 -3
  322. package/pages/c/_cluster/fleet/application/suse-app-collection/ChartDetailBody.vue +338 -0
  323. package/pages/c/_cluster/fleet/application/suse-app-collection/ChartDetailHeader.vue +121 -0
  324. package/pages/c/_cluster/fleet/application/suse-app-collection/chart.vue +369 -0
  325. package/pages/c/_cluster/fleet/application/suse-app-collection/charts.vue +248 -0
  326. package/pages/c/_cluster/fleet/application/suse-app-collection/credentials.vue +310 -0
  327. package/pages/c/_cluster/fleet/index.vue +2 -2
  328. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  329. package/pages/c/_cluster/istio/index.vue +21 -6
  330. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -0
  331. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +815 -2
  332. package/pages/c/_cluster/uiplugins/index.vue +218 -197
  333. package/pages/diagnostic.vue +13 -17
  334. package/pages/fail-whale.vue +30 -7
  335. package/pages/home.vue +93 -306
  336. package/pages/readme.vue +88 -0
  337. package/plugins/clean-html.d.ts +9 -0
  338. package/plugins/dashboard-store/__tests__/resource-class.test.ts +181 -0
  339. package/plugins/dashboard-store/actions.js +40 -18
  340. package/plugins/dashboard-store/resource-class.js +67 -9
  341. package/plugins/steve/__tests__/actions.test.ts +212 -0
  342. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  343. package/plugins/steve/actions.js +96 -0
  344. package/plugins/steve/steve-pagination-utils.ts +12 -4
  345. package/plugins/steve/subscribe.js +35 -5
  346. package/rancher-components/Accordion/Accordion.vue +53 -9
  347. package/rancher-components/Form/Checkbox/Checkbox.vue +14 -0
  348. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +10 -4
  349. package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -52
  350. package/rancher-components/Form/Radio/RadioButton.vue +17 -1
  351. package/rancher-components/Form/Radio/RadioGroup.vue +10 -0
  352. package/rancher-components/Pill/RcTag/RcTag.vue +3 -2
  353. package/rancher-components/RcButton/RcButton.test.ts +140 -1
  354. package/rancher-components/RcButton/RcButton.vue +126 -17
  355. package/rancher-components/RcButton/types.ts +3 -0
  356. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  357. package/rancher-components/RcItemCard/RcItemCard.test.ts +18 -0
  358. package/rancher-components/RcItemCard/RcItemCard.vue +2 -2
  359. package/rancher-components/RcSection/RcSection.vue +28 -3
  360. package/scripts/extension/helm/package/Dockerfile +1 -1
  361. package/scripts/test-plugins-build.sh +2 -1
  362. package/store/__tests__/catalog.test.ts +115 -1
  363. package/store/__tests__/notifications.test.ts +434 -0
  364. package/store/__tests__/type-map.test.ts +556 -1
  365. package/store/action-menu.js +8 -3
  366. package/store/auth.js +1 -1
  367. package/store/aws.js +27 -16
  368. package/store/catalog.js +84 -3
  369. package/store/digitalocean.js +20 -38
  370. package/store/index.js +2 -0
  371. package/store/linode.js +25 -40
  372. package/store/plugins.js +7 -4
  373. package/store/pnap.js +1 -0
  374. package/store/type-map.js +111 -29
  375. package/tsconfig.paths.json +8 -8
  376. package/types/components/buttonGroup.ts +5 -0
  377. package/types/kube/kube-api.ts +14 -1
  378. package/types/rancher/steve.api.ts +12 -12
  379. package/types/resources/settings.d.ts +2 -1
  380. package/types/shell/index.d.ts +206 -72
  381. package/types/store/dashboard-store.types.ts +108 -11
  382. package/types/store/pagination.types.ts +6 -3
  383. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  384. package/utils/__tests__/async.test.ts +87 -0
  385. package/utils/__tests__/auth.test.ts +273 -0
  386. package/utils/__tests__/aws.test.ts +140 -0
  387. package/utils/__tests__/banners.test.ts +176 -0
  388. package/utils/__tests__/chart.test.ts +64 -1
  389. package/utils/__tests__/color.test.ts +226 -0
  390. package/utils/__tests__/computed.test.ts +193 -0
  391. package/utils/__tests__/cspAdaptor.test.ts +163 -0
  392. package/utils/__tests__/dom.test.ts +81 -0
  393. package/utils/__tests__/duration.test.ts +176 -0
  394. package/utils/__tests__/dynamic-importer.test.ts +102 -0
  395. package/utils/__tests__/fleet-appco.test.ts +312 -0
  396. package/utils/__tests__/fleet.test.ts +340 -0
  397. package/utils/__tests__/ingress.test.ts +553 -0
  398. package/utils/__tests__/kube.test.ts +68 -0
  399. package/utils/__tests__/monitoring.test.ts +130 -0
  400. package/utils/__tests__/namespace-filter.test.ts +109 -0
  401. package/utils/__tests__/object.test.ts +22 -0
  402. package/utils/__tests__/pagination-utils.test.ts +361 -0
  403. package/utils/__tests__/parse-externalid.test.ts +137 -0
  404. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  405. package/utils/__tests__/platform.test.ts +91 -0
  406. package/utils/__tests__/poller-sequential.test.ts +177 -0
  407. package/utils/__tests__/poller.test.ts +170 -0
  408. package/utils/__tests__/position.test.ts +237 -0
  409. package/utils/__tests__/promise.test.ts +346 -0
  410. package/utils/__tests__/provider.test.ts +51 -1
  411. package/utils/__tests__/queue.test.ts +232 -0
  412. package/utils/__tests__/release-notes.test.ts +221 -0
  413. package/utils/__tests__/router.test.js +254 -1
  414. package/utils/__tests__/select.test.ts +208 -0
  415. package/utils/__tests__/settings.test.ts +140 -0
  416. package/utils/__tests__/sort-utils.test.ts +301 -0
  417. package/utils/__tests__/string-utils.test.ts +798 -0
  418. package/utils/__tests__/string.test.ts +23 -1
  419. package/utils/__tests__/style.test.ts +154 -0
  420. package/utils/__tests__/svg-filter.test.ts +184 -0
  421. package/utils/__tests__/time.test.ts +265 -1
  422. package/utils/__tests__/title.test.ts +47 -0
  423. package/utils/__tests__/units.test.ts +417 -0
  424. package/utils/__tests__/versions.test.ts +128 -0
  425. package/utils/__tests__/width.test.ts +53 -0
  426. package/utils/__tests__/window.test.ts +158 -0
  427. package/utils/__tests__/xccdf.test.ts +511 -0
  428. package/utils/chart.js +36 -0
  429. package/utils/crypto/__tests__/browserHashUtils.test.ts +98 -0
  430. package/utils/crypto/__tests__/index.test.ts +144 -0
  431. package/utils/duration.ts +104 -0
  432. package/utils/dynamic-content/__tests__/notification-handler.test.ts +196 -0
  433. package/utils/dynamic-content/info.ts +2 -1
  434. package/utils/error.js +13 -0
  435. package/utils/fleet-appco.ts +323 -0
  436. package/utils/fleet.ts +13 -3
  437. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  438. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  439. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  440. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  441. package/utils/gc/__tests__/gc.test.ts +487 -0
  442. package/utils/ingress.ts +9 -1
  443. package/utils/object.js +22 -2
  444. package/utils/pagination-utils.ts +2 -1
  445. package/utils/provider.ts +12 -0
  446. package/utils/string.js +25 -2
  447. package/utils/uiplugins.ts +5 -5
  448. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  449. package/utils/validators/__tests__/container-images.test.ts +104 -0
  450. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  451. package/utils/validators/__tests__/flow-output.test.ts +91 -0
  452. package/utils/validators/__tests__/index.test.ts +481 -0
  453. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  454. package/utils/validators/__tests__/logging-outputs.test.ts +58 -0
  455. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  456. package/utils/validators/__tests__/monitoring-route.test.ts +119 -0
  457. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  458. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  459. package/utils/validators/__tests__/role-template.test.ts +149 -0
  460. package/utils/validators/__tests__/service.test.ts +283 -0
  461. package/utils/validators/__tests__/setting.test.js +32 -0
  462. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  463. package/utils/validators/formRules/index.ts +5 -5
  464. package/utils/validators/machine-pool.ts +1 -1
  465. package/utils/validators/setting.js +18 -3
  466. package/utils/xccdf.ts +415 -0
  467. package/vue.config.js +1 -1
  468. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  469. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  470. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  471. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  472. package/pages/support/index.vue +0 -264
  473. package/utils/duration.js +0 -43
@@ -2,21 +2,68 @@ import { KubeLabelSelector } from '@shell/types/kube/kube-api';
2
2
  import { PaginationArgs, StorePagination } from '@shell/types/store/pagination.types';
3
3
 
4
4
  /**
5
- * Properties on all findX actions
5
+ * @internal
6
+ * Core properties on all findX actions
6
7
  */
7
- export type ActionCoreFindArgs = {
8
+ export type ActionCoreFindOptions = {
9
+ /**
10
+ * Use this to override URL instead of looking up the URL for the type/id
11
+ */
8
12
  url?: string,
13
+ /**
14
+ * Force the request to go to the server instead of checking for a cached value first
15
+ */
9
16
  force?: boolean,
10
17
  }
11
18
 
12
19
  /**
20
+ * @internal
21
+ * Args used for find action
22
+ */
23
+ export interface ActionFindArgs extends ActionCoreFindOptions {
24
+ /**
25
+ * Watch for changes
26
+ *
27
+ * false = no, all other values = yes
28
+ */
29
+ watch?: boolean,
30
+ /**
31
+ * @internal
32
+ * Whether to invalidate the page cache (default: false)
33
+ */
34
+ invalidatePageCache?: boolean,
35
+ /**
36
+ * XHR request verbs `get`, `post`, `put`, `delete` (default: get)
37
+ */
38
+ method?: string,
39
+ /**
40
+ * Used if we want to specify custom headers for the request
41
+ */
42
+ headers?: object,
43
+ /**
44
+ * Use this to override URL instead of looking up the URL for the type/id
45
+ */
46
+ url?: string,
47
+ }
48
+
49
+ /**
50
+ * @internal
13
51
  * Args used for findAll action
14
52
  */
15
- export interface ActionFindAllArgs extends ActionCoreFindArgs {
53
+ export interface ActionFindAllArgs extends ActionCoreFindOptions {
54
+ /**
55
+ * Watch for changes
56
+ *
57
+ * false = no, all other values = yes
58
+ */
16
59
  watch?: boolean,
60
+ /**
61
+ * Array of namespaces to filter by (used in url path, not part of pagination params)
62
+ */
17
63
  namespaced?: string[],
18
64
  /**
19
- * Should resources be fetched in increments?
65
+ * @internal
66
+ * Properties that determine and control if resources should be fetched in increments
20
67
  */
21
68
  incremental?: {
22
69
  /**
@@ -38,24 +85,32 @@ export interface ActionFindAllArgs extends ActionCoreFindArgs {
38
85
  */
39
86
  pageByNumber: boolean,
40
87
  },
88
+ /**
89
+ * @internal
90
+ * Flag to indicate if this request is coming from a list with manual refresh, which may require different handling in the store
91
+ */
41
92
  hasManualRefresh?: boolean,
93
+ /**
94
+ * Number of records to return per page
95
+ */
42
96
  limit?: number,
43
97
  /**
44
- * Iterate over all pages and return all resources.
45
- *
46
- * This is done via the native kube pagination api, not steve
98
+ * @internal
99
+ * Iterate over all pages and return all resources. This is done via the native kube pagination api, not Steve
47
100
  */
48
101
  depaginate?: boolean,
49
102
  /**
103
+ * @internal
50
104
  * Specifies the name to use if we should save the count returned in the paginated request
51
105
  */
52
106
  saveCountAs?: string,
53
107
  }
54
108
 
55
109
  /**
110
+ * @internal
56
111
  * Args used for findPage action
57
112
  */
58
- export interface ActionFindPageArgs extends ActionCoreFindArgs {
113
+ export interface ActionFindPageArgs extends ActionCoreFindOptions {
59
114
  /**
60
115
  * Set of pagination settings that creates the url.
61
116
  *
@@ -73,6 +128,7 @@ export interface ActionFindPageArgs extends ActionCoreFindArgs {
73
128
  */
74
129
  watch?: boolean,
75
130
  /**
131
+ * @internal
76
132
  * Does this request stem from a list with manual refresh?
77
133
  */
78
134
  hasManualRefresh?: boolean,
@@ -81,6 +137,10 @@ export interface ActionFindPageArgs extends ActionCoreFindArgs {
81
137
  */
82
138
  transient?: boolean,
83
139
 
140
+ /**
141
+ * @internal
142
+ * Specifies the name to use if we should save the count returned in the paginated request
143
+ */
84
144
  saveCountAs?: string,
85
145
 
86
146
  /**
@@ -97,6 +157,14 @@ export interface ActionFindPageArgs extends ActionCoreFindArgs {
97
157
  }
98
158
 
99
159
  /**
160
+ * @internal
161
+ * Response to the find action
162
+ * resource object returned by the API, or null if not found
163
+ */
164
+ export type ActionFindResponse<T = any> = T;
165
+
166
+ /**
167
+ * @internal
100
168
  * Response to a transient (not stored in cache) findPage action
101
169
  */
102
170
  export type ActionFindPageTransientResponse<T = any> = {
@@ -105,6 +173,7 @@ export type ActionFindPageTransientResponse<T = any> = {
105
173
  };
106
174
 
107
175
  /**
176
+ * @internal
108
177
  * Response to the findPage action
109
178
  *
110
179
  * If the request was transient (not stored in cache) this will be an object contain all the details of the request
@@ -114,20 +183,48 @@ export type ActionFindPageTransientResponse<T = any> = {
114
183
  export type ActionFindPageResponse<T = any> = ActionFindPageTransientResponse | T[];
115
184
 
116
185
  /**
117
- * Args used for findPage action
186
+ * Args used for findMatching action
118
187
  */
119
- export interface ActionFindMatchingArgs extends ActionCoreFindArgs {
188
+ export interface ActionFindMatchingArgs extends ActionCoreFindOptions {
189
+ /**
190
+ * Represents the label selector to filter by
191
+ * @example
192
+ * ```
193
+ * {
194
+ * matchLabels: {
195
+ * app: 'my-app',
196
+ * tier: 'frontend'
197
+ * },
198
+ * matchExpressions: [
199
+ * {
200
+ * key: 'environment',
201
+ * operator: 'In',
202
+ * values: ['production', 'staging']
203
+ * }
204
+ * ]
205
+ * }
206
+ * ```
207
+ */
120
208
  labelSelector: KubeLabelSelector,
209
+ /**
210
+ * The single namespace to filter by (used in url path, not part of pagination params)
211
+ */
121
212
  namespaced?: string,
213
+ /**
214
+ * @internal
215
+ * Iterate over all pages and return all resources.
216
+ */
122
217
  depaginate?: boolean
123
218
  }
124
219
 
125
220
  /**
221
+ * @internal
126
222
  * Response to the findMatching action
127
223
  */
128
224
  export type ActionFindMatchingResponse<T = any> = ActionFindPageResponse<T>
129
225
 
130
226
  /**
227
+ * @internal
131
228
  * Args used for findLabelSelector action
132
229
  */
133
- export type ActionFindLabelSelectorArgs = ActionFindPageArgs | ActionFindMatchingArgs;
230
+ export type ActionFindLabelSelectorArgs = Omit<ActionFindPageArgs, 'pagination' | 'namespace'> | ActionFindMatchingArgs;
@@ -44,13 +44,16 @@ export interface PaginationSort {
44
44
  * Name of field within the object to sort by
45
45
  */
46
46
  field: string,
47
+ /**
48
+ * Sort direction. `true` for ascending, `false` for descending
49
+ */
47
50
  asc: boolean
48
51
  }
49
52
 
50
53
  /**
51
54
  * Equalities that can be used with a `filter` query param
52
55
  *
53
- * filter=<field><equality><values>
56
+ * `filter=<field><equality><values>`
54
57
  *
55
58
  * For example
56
59
  * - filter=a=b
@@ -143,14 +146,14 @@ type FilterFieldCtorArgs = {
143
146
  /**
144
147
  * Filter the pagination result by these specific fields
145
148
  *
146
- * In format of <field><equality><value>
149
+ * In format of `<field><equality><value>`
147
150
  *
148
151
  * For example
149
152
  *
150
153
  * - metadata.name=test
151
154
  * - metadata.namespace!=system
152
155
  *
153
- * These are sub items for @PaginationParam, for example filter=<PaginationFilterField>
156
+ * These are sub items for {@link PaginationParam}, for example `filter=<PaginationFilterField>`
154
157
  *
155
158
  * For more information regarding the API see https://github.com/rancher/steve?tab=readme-ov-file#query-parameters
156
159
  */
@@ -0,0 +1,117 @@
1
+ import { Buffer } from 'buffer';
2
+ import { areRoutesSupportedFormat, canCreate, createDefaultRouteName } from '@shell/utils/alertmanagerconfig';
3
+
4
+ function makeSecret(yaml: string | null): { data: Record<string, string> } {
5
+ if (yaml === null) {
6
+ return { data: {} };
7
+ }
8
+
9
+ return { data: { 'alertmanager.yaml': Buffer.from(yaml).toString('base64') } };
10
+ }
11
+
12
+ describe('alertmanagerconfig utils', () => {
13
+ describe('createDefaultRouteName', () => {
14
+ it.each([
15
+ {
16
+ desc: 'index 0',
17
+ index: 0,
18
+ expected: 'route-0',
19
+ },
20
+ {
21
+ desc: 'index 1',
22
+ index: 1,
23
+ expected: 'route-1',
24
+ },
25
+ {
26
+ desc: 'index 99',
27
+ index: 99,
28
+ expected: 'route-99',
29
+ },
30
+ ])('returns $expected for $desc', ({ index, expected }) => {
31
+ expect(createDefaultRouteName(index)).toStrictEqual(expected);
32
+ });
33
+ });
34
+
35
+ describe('areRoutesSupportedFormat', () => {
36
+ it('returns true when secret has no data', () => {
37
+ const secret = makeSecret(null);
38
+
39
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(true);
40
+ });
41
+
42
+ it('returns true when config has no routes', () => {
43
+ const secret = makeSecret('receivers: []\nroute: {}');
44
+
45
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(true);
46
+ });
47
+
48
+ it('returns true when all routes are non-empty', () => {
49
+ const yaml = `
50
+ receivers: []
51
+ route:
52
+ routes:
53
+ - receiver: team-a
54
+ match:
55
+ severity: critical
56
+ `;
57
+ const secret = makeSecret(yaml);
58
+
59
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(true);
60
+ });
61
+
62
+ it('returns false when any route is an empty object', () => {
63
+ const yaml = `
64
+ receivers: []
65
+ route:
66
+ routes:
67
+ - {}
68
+ `;
69
+ const secret = makeSecret(yaml);
70
+
71
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(false);
72
+ });
73
+
74
+ it('returns false when the yaml is invalid', () => {
75
+ const secret = { data: { 'alertmanager.yaml': Buffer.from(': invalid: yaml: {').toString('base64') } };
76
+
77
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(false);
78
+ });
79
+
80
+ it('returns true when routes array is empty', () => {
81
+ const yaml = `
82
+ route:
83
+ routes: []
84
+ `;
85
+ const secret = makeSecret(yaml);
86
+
87
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(true);
88
+ });
89
+
90
+ it('returns false when one of multiple routes is empty', () => {
91
+ const yaml = `
92
+ receivers: []
93
+ route:
94
+ routes:
95
+ - receiver: team-a
96
+ - {}
97
+ `;
98
+ const secret = makeSecret(yaml);
99
+
100
+ expect(areRoutesSupportedFormat(secret)).toStrictEqual(false);
101
+ });
102
+ });
103
+
104
+ describe('canCreate', () => {
105
+ it('returns true when secret type is creatable', () => {
106
+ const rootGetters = { 'type-map/optionsFor': () => ({ isCreatable: true }) };
107
+
108
+ expect(canCreate(rootGetters)).toStrictEqual(true);
109
+ });
110
+
111
+ it('returns false when secret type is not creatable', () => {
112
+ const rootGetters = { 'type-map/optionsFor': () => ({ isCreatable: false }) };
113
+
114
+ expect(canCreate(rootGetters)).toStrictEqual(false);
115
+ });
116
+ });
117
+ });
@@ -0,0 +1,87 @@
1
+ import { waitFor, wait } from '@shell/utils/async';
2
+
3
+ describe('wait', () => {
4
+ it('resolves after the specified delay', async() => {
5
+ jest.useFakeTimers();
6
+
7
+ const p = wait(1000);
8
+
9
+ jest.advanceTimersByTime(1000);
10
+ await expect(p).resolves.toBeUndefined();
11
+
12
+ jest.useRealTimers();
13
+ });
14
+
15
+ it('does not resolve before the delay elapses', async() => {
16
+ jest.useFakeTimers();
17
+
18
+ let resolved = false;
19
+ const p = wait(500).then(() => {
20
+ resolved = true;
21
+ });
22
+
23
+ jest.advanceTimersByTime(499);
24
+ expect(resolved).toBe(false);
25
+
26
+ jest.advanceTimersByTime(1);
27
+ await p;
28
+ expect(resolved).toBe(true);
29
+
30
+ jest.useRealTimers();
31
+ });
32
+ });
33
+
34
+ describe('waitFor', () => {
35
+ afterEach(() => {
36
+ jest.useRealTimers();
37
+ });
38
+
39
+ it('resolves immediately when testFn returns true on first call', async() => {
40
+ jest.useFakeTimers();
41
+ const testFn = jest.fn().mockReturnValue(true);
42
+
43
+ const p = waitFor(testFn, 'ready');
44
+
45
+ await expect(p).resolves.toBeDefined();
46
+ expect(testFn).toHaveBeenCalledTimes(1);
47
+ });
48
+
49
+ it('resolves after testFn eventually returns true', async() => {
50
+ jest.useFakeTimers();
51
+ let count = 0;
52
+ const testFn = jest.fn().mockImplementation(() => {
53
+ count++;
54
+
55
+ return count >= 3;
56
+ });
57
+
58
+ const p = waitFor(testFn, 'ready', 10000, 500);
59
+
60
+ // first call returns false (immediate check), then intervals fire
61
+ jest.advanceTimersByTime(500); // interval 1 → count=2, false
62
+ jest.advanceTimersByTime(500); // interval 2 → count=3, true
63
+ await p;
64
+
65
+ expect(testFn).toHaveBeenCalledTimes(3);
66
+ });
67
+
68
+ it('rejects with msg when timeout elapses', async() => {
69
+ jest.useFakeTimers();
70
+ const testFn = jest.fn().mockReturnValue(false);
71
+
72
+ const p = waitFor(testFn, 'some condition', 1000, 500);
73
+
74
+ jest.advanceTimersByTime(1001);
75
+ await expect(p).rejects.toThrow('Failed waiting for: some condition');
76
+ });
77
+
78
+ it('rejects with generic message when no msg provided and timeout elapses', async() => {
79
+ jest.useFakeTimers();
80
+ const testFn = jest.fn().mockReturnValue(false);
81
+
82
+ const p = waitFor(testFn, '', 2000, 500);
83
+
84
+ jest.advanceTimersByTime(2001);
85
+ await expect(p).rejects.toThrow('waitFor timed out after 2 seconds');
86
+ });
87
+ });