dashboard-shell-shell 3.0.2-test.20250913 → 3.0.5-logTest.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/assets/brand/csp/favicon.png +0 -0
  2. package/assets/data/aws-regions.json +3 -0
  3. package/assets/icons/demo.css:Zone.Identifier +0 -0
  4. package/assets/icons/demo_index.html:Zone.Identifier +0 -0
  5. package/assets/icons/iconfont.css +4 -1
  6. package/assets/icons/iconfont.css:Zone.Identifier +0 -0
  7. package/assets/icons/iconfont.js:Zone.Identifier +0 -0
  8. package/assets/icons/iconfont.json:Zone.Identifier +0 -0
  9. package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
  10. package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
  11. package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
  12. package/assets/iconsNew/demo.css +539 -0
  13. package/assets/iconsNew/demo.css:Zone.Identifier +0 -0
  14. package/assets/iconsNew/demo_index.html +303 -0
  15. package/assets/iconsNew/demo_index.html:Zone.Identifier +0 -0
  16. package/assets/iconsNew/iconfont.css +43 -0
  17. package/assets/iconsNew/iconfont.css:Zone.Identifier +0 -0
  18. package/assets/iconsNew/iconfont.js +1 -0
  19. package/assets/iconsNew/iconfont.js:Zone.Identifier +0 -0
  20. package/assets/iconsNew/iconfont.json +44 -0
  21. package/assets/iconsNew/iconfont.json:Zone.Identifier +0 -0
  22. package/assets/iconsNew/iconfont.ttf +0 -0
  23. package/assets/iconsNew/iconfont.ttf:Zone.Identifier +0 -0
  24. package/assets/iconsNew/iconfont.woff +0 -0
  25. package/assets/iconsNew/iconfont.woff2 +0 -0
  26. package/assets/iconsNew/iconfont.woff2:Zone.Identifier +0 -0
  27. package/assets/iconsNew/iconfont.woff:Zone.Identifier +0 -0
  28. package/assets/images/icons/document.svg +3 -0
  29. package/assets/images/key.svg +17 -0
  30. package/assets/images/pl/dark/logo.png +0 -0
  31. package/assets/images/providers/sks.svg +1 -0
  32. package/assets/images/vendor/cognito.svg +1 -0
  33. package/assets/styles/all.scss +23 -3
  34. package/assets/styles/app.scss +4 -0
  35. package/assets/styles/base/_basic.scss +10 -0
  36. package/assets/styles/base/_helpers.scss +1 -1
  37. package/assets/styles/base/_spacing.scss +29 -0
  38. package/assets/styles/base/_variables.scss +21 -15
  39. package/assets/styles/fonts/_icons.scss +3 -2
  40. package/assets/styles/global/_button.scss +8 -8
  41. package/assets/styles/global/_form.scss +1 -0
  42. package/assets/styles/global/_labeled-input.scss +1 -1
  43. package/assets/styles/global/_layout.scss +1 -1
  44. package/assets/styles/global/_select.scss +1 -1
  45. package/assets/styles/global/_tooltip.scss +9 -5
  46. package/assets/styles/themes/_dark.scss +30 -0
  47. package/assets/styles/themes/_light.scss +85 -5
  48. package/assets/styles/vendor/vue-select.scss +2 -1
  49. package/assets/translations/en-us.yaml +886 -105
  50. package/assets/translations/zh-hans.yaml +298 -25
  51. package/chart/__tests__/S3.test.ts +2 -1
  52. package/chart/monitoring/index.vue +1 -1
  53. package/cloud-credential/gcp.vue +9 -1
  54. package/components/ActionDropdown.vue +1 -1
  55. package/components/ActionMenuShell.vue +3 -7
  56. package/components/AppModal.vue +9 -28
  57. package/components/AsyncButton.vue +2 -0
  58. package/components/BrandImage.vue +0 -21
  59. package/components/ButtonDropdown.vue +3 -1
  60. package/components/Certificates.vue +5 -0
  61. package/components/ClusterIconMenu.vue +1 -1
  62. package/components/CodeMirror.vue +9 -7
  63. package/components/CommunityLinks.vue +3 -58
  64. package/components/ConfigMapSettings/Settings.vue +377 -0
  65. package/components/ConfigMapSettings/index.vue +354 -0
  66. package/components/ConsumptionGauge.vue +1 -1
  67. package/components/ContainerResourceLimit.vue +2 -2
  68. package/components/CopyToClipboard.vue +15 -0
  69. package/components/CruResource.vue +106 -18
  70. package/components/DetailText.vue +61 -11
  71. package/components/Drawer/Chrome.vue +115 -0
  72. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +64 -0
  73. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  74. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  75. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  76. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
  77. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  78. package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
  79. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  80. package/components/Drawer/ResourceDetailDrawer/index.vue +124 -0
  81. package/components/ExplorerMembers.vue +28 -4
  82. package/components/ExplorerProjectsNamespaces.vue +46 -29
  83. package/components/FilterPanel.vue +156 -0
  84. package/components/FixedBanner.vue +19 -5
  85. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  86. package/components/GlobalRoleBindings.vue +69 -114
  87. package/components/GrowlManager.vue +16 -15
  88. package/components/IconOrSvg.vue +19 -35
  89. package/components/KeyValueView.vue +1 -1
  90. package/components/LandingPagePreference.vue +2 -0
  91. package/components/Loading.vue +1 -1
  92. package/components/LocaleSelector.vue +10 -2
  93. package/components/PaginatedResourceTable.vue +53 -1
  94. package/components/PodSecurityAdmission.vue +2 -2
  95. package/components/ProgressBarMulti.vue +1 -0
  96. package/components/PromptModal.vue +38 -7
  97. package/components/PromptRemove.vue +28 -2
  98. package/components/PromptRestore.vue +22 -44
  99. package/components/RelatedResources.vue +7 -12
  100. package/components/Resource/Detail/Additional.vue +46 -0
  101. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  102. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  103. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  104. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  105. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  106. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  107. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  108. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  109. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  110. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  111. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  112. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  113. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  114. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  115. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  116. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  117. package/components/Resource/Detail/Card/index.vue +56 -0
  118. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  119. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  120. package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
  121. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  122. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  123. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +72 -0
  124. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
  125. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +138 -0
  126. package/components/Resource/Detail/Metadata/KeyValue.vue +144 -0
  127. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  128. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  129. package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
  130. package/components/Resource/Detail/Metadata/Rectangle.vue +34 -0
  131. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  132. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  133. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  134. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  135. package/components/Resource/Detail/Metadata/composables.ts +81 -0
  136. package/components/Resource/Detail/Metadata/index.vue +90 -0
  137. package/components/Resource/Detail/Page.vue +37 -0
  138. package/components/Resource/Detail/PercentageBar.vue +40 -0
  139. package/components/Resource/Detail/ResourceRow.vue +138 -0
  140. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  141. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  142. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  143. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  144. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  145. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  146. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  147. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  148. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  149. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  150. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  151. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  152. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  153. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  154. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  155. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  156. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  157. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  158. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  159. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  160. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  161. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  162. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  163. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  164. package/components/Resource/Detail/SpacedRow.vue +14 -0
  165. package/components/Resource/Detail/StatusBar.vue +59 -0
  166. package/components/Resource/Detail/StatusRow.vue +61 -0
  167. package/components/Resource/Detail/TitleBar/Title.vue +15 -0
  168. package/components/Resource/Detail/TitleBar/Top.vue +16 -0
  169. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  170. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  171. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  172. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  173. package/components/Resource/Detail/TitleBar/composables.ts +61 -0
  174. package/components/Resource/Detail/TitleBar/index.vue +302 -0
  175. package/components/Resource/Detail/Top/index.vue +34 -0
  176. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  177. package/components/Resource/Detail/composables.ts +45 -0
  178. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  179. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  180. package/components/ResourceDetail/Masthead/index.vue +65 -0
  181. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  182. package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +240 -169
  183. package/components/ResourceDetail/__tests__/index.test.ts +135 -0
  184. package/components/ResourceDetail/index.vue +75 -575
  185. package/components/ResourceDetail/legacy.vue +580 -0
  186. package/components/ResourceList/Masthead.vue +74 -29
  187. package/components/ResourceList/index.vue +3 -2
  188. package/components/ResourceTable.vue +75 -85
  189. package/components/ResourceYaml.vue +15 -2
  190. package/components/RichTranslation.vue +106 -0
  191. package/components/SideNav.vue +21 -21
  192. package/components/SingleClusterInfo.vue +2 -1
  193. package/components/SlideInPanelManager.vue +116 -14
  194. package/components/SortableTable/THead.vue +46 -1
  195. package/components/SortableTable/index.vue +66 -22
  196. package/components/SortableTable/paging.js +15 -16
  197. package/components/SortableTable/selection.js +22 -10
  198. package/components/StateDot/index.vue +28 -0
  199. package/components/StatusBadge.vue +6 -4
  200. package/components/SubtleLink.vue +25 -0
  201. package/components/Tabbed/index.vue +43 -22
  202. package/components/Wizard.vue +16 -3
  203. package/components/YamlEditor.vue +1 -2
  204. package/components/__tests__/AsyncButton.test.ts +39 -0
  205. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  206. package/components/__tests__/CruResource.test.ts +63 -0
  207. package/components/__tests__/FilterPanel.test.ts +81 -0
  208. package/components/__tests__/GrowlManager.test.ts +0 -25
  209. package/components/__tests__/PromptModal.test.ts +146 -0
  210. package/components/__tests__/PromptRestore.test.ts +1 -65
  211. package/components/__tests__/RichTranslation.test.ts +115 -0
  212. package/components/auth/AuthBanner.vue +15 -14
  213. package/components/auth/Principal.vue +50 -19
  214. package/components/auth/RoleDetailEdit.vue +55 -11
  215. package/components/auth/login/ldap.vue +2 -2
  216. package/components/auth/login/oidc.vue +6 -1
  217. package/components/breadcrumb/index.vue +119 -0
  218. package/components/fleet/FleetApplications.vue +174 -0
  219. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  220. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  221. package/components/fleet/FleetClusters.vue +25 -6
  222. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  223. package/components/fleet/FleetHelmOps.vue +123 -0
  224. package/components/fleet/FleetIntro.vue +58 -28
  225. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  226. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  227. package/components/fleet/FleetRepos.vue +37 -80
  228. package/components/fleet/FleetResources.vue +69 -27
  229. package/components/fleet/FleetSummary.vue +26 -51
  230. package/components/fleet/FleetValuesFrom.vue +295 -0
  231. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  232. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  233. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  234. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  235. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  236. package/components/fleet/dashboard/Empty.vue +73 -0
  237. package/components/fleet/dashboard/ResourceCard.vue +184 -0
  238. package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
  239. package/components/fleet/dashboard/ResourceDetails.vue +194 -0
  240. package/components/fleet/dashboard/ResourcePanel.vue +384 -0
  241. package/components/form/ArrayList.vue +187 -142
  242. package/components/form/ArrayListGrouped.vue +5 -3
  243. package/components/form/BannerSettings.vue +117 -50
  244. package/components/form/ChangePassword.vue +4 -2
  245. package/components/form/ClusterAppearance.vue +4 -3
  246. package/components/form/ColorInput.vue +35 -6
  247. package/components/form/Command.vue +4 -5
  248. package/components/form/Conditions.vue +15 -1
  249. package/components/form/FileImageSelector.vue +1 -1
  250. package/components/form/Footer.vue +11 -4
  251. package/components/form/HealthCheck.vue +0 -2
  252. package/components/form/HookOption.vue +87 -58
  253. package/components/form/InputWithSelect.vue +8 -7
  254. package/components/form/KeyValue.vue +112 -53
  255. package/components/form/LabeledSelect.vue +76 -55
  256. package/components/form/Labels.vue +92 -22
  257. package/components/form/MatchExpressions.vue +59 -12
  258. package/components/form/Members/ClusterMembershipEditor.vue +1 -1
  259. package/components/form/Members/ClusterPermissionsEditor.vue +60 -41
  260. package/components/form/Members/MembershipEditor.vue +4 -4
  261. package/components/form/Members/ProjectMembershipEditor.vue +1 -1
  262. package/components/form/NameNsDescription.vue +15 -10
  263. package/components/form/Networking.vue +30 -28
  264. package/components/form/NodeAffinity.vue +29 -28
  265. package/components/form/NotificationSettings.vue +15 -1
  266. package/components/form/PodAffinity.vue +23 -23
  267. package/components/form/Probe.vue +15 -11
  268. package/components/form/ProjectMemberEditor.vue +66 -48
  269. package/components/form/ResourceLabeledSelect.vue +22 -8
  270. package/components/form/ResourceQuota/Namespace.vue +4 -4
  271. package/components/form/ResourceQuota/NamespaceRow.vue +11 -9
  272. package/components/form/ResourceQuota/Project.vue +4 -4
  273. package/components/form/ResourceQuota/ProjectRow.vue +36 -30
  274. package/components/form/ResourceSelector.vue +28 -24
  275. package/components/form/ResourceTabs/index.vue +7 -1
  276. package/components/form/SSHKnownHosts/index.vue +14 -11
  277. package/components/form/SecretSelector.vue +40 -23
  278. package/components/form/Security.vue +1 -3
  279. package/components/form/Select.vue +64 -27
  280. package/components/form/SelectOrCreateAuthSecret.vue +6 -3
  281. package/components/form/ServiceNameSelect.vue +2 -5
  282. package/components/form/ServicePorts.vue +149 -75
  283. package/components/form/SimpleSecretSelector.vue +17 -4
  284. package/components/form/Taints.vue +23 -3
  285. package/components/form/Tolerations.vue +13 -9
  286. package/components/form/UnitInput.vue +21 -0
  287. package/components/form/ValueFromResource.vue +136 -110
  288. package/components/form/WorkloadPorts.vue +143 -123
  289. package/components/form/__tests__/ArrayList.test.ts +32 -0
  290. package/components/form/__tests__/ColorInput.test.ts +35 -0
  291. package/components/form/__tests__/KeyValue.test.ts +36 -0
  292. package/components/form/__tests__/LabeledSelect.test.ts +79 -2
  293. package/components/form/__tests__/Labels.test.ts +360 -0
  294. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  295. package/components/form/__tests__/Networking.test.ts +116 -0
  296. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
  297. package/components/form/__tests__/Select.test.ts +37 -1
  298. package/components/form/__tests__/UnitInput.test.ts +23 -1
  299. package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
  300. package/components/formatter/ClusterLink.vue +5 -8
  301. package/components/formatter/Description.vue +30 -0
  302. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  303. package/components/formatter/FleetApplicationSource.vue +79 -0
  304. package/components/formatter/FleetSummaryGraph.vue +7 -0
  305. package/components/formatter/PodImages.vue +1 -1
  306. package/components/formatter/WorkloadHealthScale.vue +5 -4
  307. package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
  308. package/components/formatter/__tests__/LiveDate.test.ts +10 -2
  309. package/components/google/AccountAccess.vue +209 -0
  310. package/components/google/types/gcp.d.ts +136 -0
  311. package/components/google/types/index.d.ts +101 -0
  312. package/components/google/util/__mocks__/gcp.ts +465 -0
  313. package/components/google/util/formatter.ts +82 -0
  314. package/components/google/util/gcp.ts +134 -0
  315. package/components/google/util/index.d.ts +11 -0
  316. package/components/nav/Favorite.vue +1 -1
  317. package/components/nav/Group.vue +13 -1
  318. package/components/nav/Header.vue +44 -179
  319. package/components/nav/NamespaceFilter.vue +126 -75
  320. package/components/nav/NotificationCenter/Notification.vue +484 -0
  321. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  322. package/components/nav/NotificationCenter/index.vue +148 -0
  323. package/components/nav/TopLevelMenu.helper.ts +55 -34
  324. package/components/nav/TopLevelMenu.vue +110 -125
  325. package/components/nav/Type.vue +15 -4
  326. package/components/nav/WindowManager/ContainerLogs.vue +87 -61
  327. package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
  328. package/components/nav/WindowManager/index.vue +3 -2
  329. package/components/templates/default.vue +0 -3
  330. package/components/templates/plain.vue +0 -3
  331. package/composables/drawer.ts +26 -0
  332. package/composables/focusTrap.ts +3 -3
  333. package/composables/resources.test.ts +63 -0
  334. package/composables/resources.ts +38 -0
  335. package/composables/useI18n.ts +12 -11
  336. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  337. package/config/labels-annotations.js +22 -11
  338. package/config/menuRouteMap.js +10 -0
  339. package/config/pagination-table-headers.js +8 -1
  340. package/config/private-label.js +0 -1
  341. package/config/product/auth.js +20 -3
  342. package/config/product/{cis.js → compliance.js} +23 -26
  343. package/config/product/explorer.js +80 -26
  344. package/config/product/fleet.js +77 -17
  345. package/config/product/manager.js +29 -46
  346. package/config/product/settings.js +23 -11
  347. package/config/product/uiplugins.js +13 -10
  348. package/config/query-params.js +16 -1
  349. package/config/roles.ts +2 -1
  350. package/config/router/navigation-guards/authentication.js +51 -2
  351. package/config/router/navigation-guards/index.js +16 -20
  352. package/config/router/routes.js +65 -31
  353. package/config/secret.ts +15 -0
  354. package/config/settings.ts +33 -16
  355. package/config/store.js +2 -0
  356. package/config/system-namespaces.js +1 -1
  357. package/config/table-headers.js +91 -30
  358. package/config/types.js +18 -7
  359. package/config/version.js +1 -1
  360. package/core/plugin-helpers.ts +3 -2
  361. package/core/plugin.ts +32 -7
  362. package/core/types.ts +25 -7
  363. package/detail/catalog.cattle.io.app.vue +5 -1
  364. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  365. package/detail/fleet.cattle.io.bundle.vue +70 -6
  366. package/detail/fleet.cattle.io.cluster.vue +28 -15
  367. package/detail/fleet.cattle.io.gitrepo.vue +11 -2
  368. package/detail/fleet.cattle.io.helmop.vue +157 -0
  369. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  370. package/detail/management.cattle.io.oidcclient.vue +369 -0
  371. package/detail/namespace.vue +0 -3
  372. package/detail/node.vue +48 -39
  373. package/detail/pod.vue +2 -2
  374. package/detail/provisioning.cattle.io.cluster.vue +16 -50
  375. package/detail/service.vue +10 -2
  376. package/detail/workload/index.vue +48 -39
  377. package/dialog/AddCustomBadgeDialog.vue +17 -10
  378. package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
  379. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  380. package/dialog/AssignToDialog.vue +176 -0
  381. package/dialog/ChangePasswordDialog.vue +106 -0
  382. package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
  383. package/dialog/DisableAuthProviderDialog.vue +101 -0
  384. package/dialog/DrainNode.vue +1 -1
  385. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
  386. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +87 -66
  387. package/dialog/FeatureFlagListDialog.vue +288 -0
  388. package/dialog/ForceMachineRemoveDialog.vue +1 -1
  389. package/dialog/GenericPrompt.vue +1 -1
  390. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  391. package/{components/Import.vue → dialog/ImportDialog.vue} +8 -13
  392. package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
  393. package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
  394. package/dialog/MoveNamespaceDialog.vue +157 -0
  395. package/dialog/OidcClientSecretDialog.vue +117 -0
  396. package/dialog/RedeployWorkloadDialog.vue +164 -0
  397. package/dialog/RollbackWorkloadDialog.vue +1 -1
  398. package/dialog/RotateEncryptionKeyDialog.vue +10 -30
  399. package/dialog/ScalePoolDownDialog.vue +1 -1
  400. package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
  401. package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
  402. package/dialog/WechatDialog.vue +57 -0
  403. package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +15 -34
  404. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  405. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
  406. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  407. package/edit/__tests__/service.test.ts +2 -1
  408. package/edit/auth/ldap/__tests__/config.test.ts +14 -0
  409. package/edit/auth/ldap/config.vue +24 -0
  410. package/edit/auth/oidc.vue +159 -93
  411. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +1 -1
  412. package/edit/autoscaling.horizontalpodautoscaler/hpa-scaling-rule.vue +9 -6
  413. package/edit/autoscaling.horizontalpodautoscaler/index.vue +7 -2
  414. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +2 -2
  415. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +7 -5
  416. package/edit/autoscaling.horizontalpodautoscaler/metric-target.vue +5 -3
  417. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +2 -2
  418. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  419. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +1 -1
  420. package/edit/autoscaling.horizontalpodautoscaler/resource-metric.vue +2 -2
  421. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  422. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  423. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  424. package/edit/configmap.vue +12 -2
  425. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  426. package/edit/fleet.cattle.io.gitrepo.vue +70 -256
  427. package/edit/fleet.cattle.io.helmop.vue +786 -0
  428. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  429. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  430. package/edit/logging-flow/index.vue +2 -2
  431. package/edit/logging.banzaicloud.io.output/index.vue +2 -1
  432. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +8 -9
  433. package/edit/logging.banzaicloud.io.output/providers/azurestorage.vue +19 -19
  434. package/edit/logging.banzaicloud.io.output/providers/cloudwatch.vue +23 -23
  435. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +19 -19
  436. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +14 -14
  437. package/edit/logging.banzaicloud.io.output/providers/forward.vue +12 -12
  438. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +23 -23
  439. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +6 -6
  440. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +10 -10
  441. package/edit/logging.banzaicloud.io.output/providers/kinesisStream.vue +8 -8
  442. package/edit/logging.banzaicloud.io.output/providers/logdna.vue +17 -17
  443. package/edit/logging.banzaicloud.io.output/providers/logz.vue +7 -7
  444. package/edit/logging.banzaicloud.io.output/providers/loki.vue +12 -12
  445. package/edit/logging.banzaicloud.io.output/providers/newrelic.vue +3 -3
  446. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +14 -14
  447. package/edit/logging.banzaicloud.io.output/providers/redis.vue +6 -6
  448. package/edit/logging.banzaicloud.io.output/providers/s3.vue +23 -23
  449. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +13 -13
  450. package/edit/logging.banzaicloud.io.output/providers/sumologic.vue +2 -2
  451. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +54 -54
  452. package/edit/management.cattle.io.fleetworkspace.vue +44 -10
  453. package/edit/management.cattle.io.oidcclient.vue +162 -0
  454. package/edit/management.cattle.io.project.vue +4 -1
  455. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  456. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  457. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  458. package/edit/monitoring.coreos.com.receiver/auth.vue +3 -3
  459. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  460. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  461. package/edit/monitoring.coreos.com.route.vue +1 -0
  462. package/edit/namespace.vue +2 -4
  463. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  464. package/edit/networking.k8s.io.ingress/Certificate.vue +25 -8
  465. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  466. package/edit/networking.k8s.io.ingress/Rule.vue +5 -11
  467. package/edit/networking.k8s.io.ingress/RulePath.vue +105 -96
  468. package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +37 -0
  469. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  470. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +6 -17
  471. package/edit/networking.k8s.io.networkpolicy/PolicyRulePort.vue +4 -2
  472. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +69 -73
  473. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +10 -16
  474. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
  475. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
  476. package/edit/networking.k8s.io.networkpolicy/index.vue +24 -32
  477. package/edit/node.vue +1 -0
  478. package/edit/persistentvolume/index.vue +7 -2
  479. package/edit/persistentvolumeclaim.vue +2 -0
  480. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
  481. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +69 -2
  482. package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
  483. package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
  484. package/edit/provisioning.cattle.io.cluster/rke2.vue +535 -428
  485. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +49 -40
  486. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
  487. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  488. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
  489. package/edit/resources.cattle.io.restore.vue +1 -1
  490. package/edit/secret/basic.vue +1 -0
  491. package/edit/secret/index.vue +129 -17
  492. package/edit/service.vue +21 -30
  493. package/edit/serviceaccount.vue +4 -1
  494. package/edit/storage.k8s.io.storageclass/index.vue +14 -9
  495. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/aws-ebs.vue +34 -27
  496. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/gce-pd.vue +15 -13
  497. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/vsphere-volume.vue +41 -39
  498. package/edit/workload/Job.vue +31 -34
  499. package/edit/workload/Upgrading.vue +5 -5
  500. package/edit/workload/index.vue +32 -32
  501. package/edit/workload/mixins/workload.js +0 -2
  502. package/edit/workload/storage/Mount.vue +1 -0
  503. package/edit/workload/storage/awsElasticBlockStore.vue +9 -7
  504. package/edit/workload/storage/azureDisk.vue +14 -10
  505. package/edit/workload/storage/azureFile.vue +9 -7
  506. package/edit/workload/storage/csi/index.vue +6 -9
  507. package/edit/workload/storage/emptyDir.vue +7 -5
  508. package/edit/workload/storage/gcePersistentDisk.vue +9 -7
  509. package/edit/workload/storage/hostPath.vue +7 -5
  510. package/edit/workload/storage/nfs.vue +8 -6
  511. package/edit/workload/storage/persistentVolumeClaim/index.vue +12 -10
  512. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +20 -15
  513. package/edit/workload/storage/secret.vue +9 -6
  514. package/edit/workload/storage/vsphereVolume.vue +11 -7
  515. package/initialize/app-extended.js +7 -1
  516. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  517. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  518. package/list/fleet.cattle.io.helmop.vue +108 -0
  519. package/list/harvesterhci.io.management.cluster.vue +0 -17
  520. package/list/management.cattle.io.feature.vue +4 -288
  521. package/list/management.cattle.io.oidcclient.vue +108 -0
  522. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +8 -6
  523. package/list/management.cattle.io.user.vue +13 -20
  524. package/list/namespace.vue +6 -2
  525. package/list/node.vue +2 -0
  526. package/list/projectsecret.vue +345 -0
  527. package/list/secret.vue +109 -0
  528. package/list/workload.vue +6 -2
  529. package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
  530. package/machine-config/amazonec2.vue +3 -24
  531. package/machine-config/components/GCEImage.vue +374 -0
  532. package/machine-config/google.vue +617 -0
  533. package/machine-config/vmwarevsphere.vue +7 -17
  534. package/mixins/__tests__/brand.spec.ts +170 -0
  535. package/mixins/auth-config.js +8 -1
  536. package/mixins/brand.js +16 -17
  537. package/mixins/create-edit-view/impl.js +20 -1
  538. package/mixins/create-edit-view/index.js +5 -0
  539. package/mixins/preset.js +100 -0
  540. package/mixins/resource-fetch-api-pagination.js +73 -44
  541. package/mixins/resource-fetch.js +18 -8
  542. package/mixins/resource-table-watch.js +45 -0
  543. package/mixins/vue-select-overrides.js +1 -4
  544. package/models/__tests__/chart.test.ts +296 -0
  545. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  546. package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  547. package/models/__tests__/node.test.ts +7 -63
  548. package/models/__tests__/workload.test.ts +1 -0
  549. package/models/chart.js +157 -2
  550. package/models/cluster/node.js +2 -1
  551. package/models/cluster.js +32 -2
  552. package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
  553. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  554. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  555. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  556. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  557. package/models/fleet-application.js +297 -0
  558. package/models/fleet.cattle.io.bundle.js +9 -8
  559. package/models/fleet.cattle.io.cluster.js +21 -4
  560. package/models/fleet.cattle.io.gitrepo.js +46 -382
  561. package/models/fleet.cattle.io.helmop.js +202 -0
  562. package/models/management.cattle.io.authconfig.js +1 -0
  563. package/models/management.cattle.io.cluster.js +0 -20
  564. package/models/management.cattle.io.feature.js +7 -1
  565. package/models/management.cattle.io.fleetworkspace.js +14 -1
  566. package/models/management.cattle.io.node.js +7 -22
  567. package/models/management.cattle.io.nodepool.js +12 -0
  568. package/models/management.cattle.io.oidcclient.js +18 -0
  569. package/models/management.cattle.io.registration.js +3 -0
  570. package/models/management.cattle.io.setting.js +0 -1
  571. package/models/namespace.js +12 -1
  572. package/models/provisioning.cattle.io.cluster.js +79 -115
  573. package/models/secret.js +157 -2
  574. package/models/service.js +28 -9
  575. package/models/storage.k8s.io.storageclass.js +2 -2
  576. package/models/workload.js +93 -53
  577. package/package.json +6 -5
  578. package/pages/about.vue +17 -61
  579. package/pages/account/index.vue +105 -116
  580. package/pages/auth/login.vue +2 -3
  581. package/pages/auth/setup.vue +36 -17
  582. package/pages/auth/verify.vue +13 -1
  583. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
  584. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  585. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +57 -0
  586. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  587. package/pages/c/_cluster/apps/charts/index.vue +501 -468
  588. package/pages/c/_cluster/apps/charts/install.vue +0 -1
  589. package/pages/c/_cluster/auth/roles/index.vue +72 -44
  590. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  591. package/pages/c/_cluster/explorer/ConfigBadge.vue +1 -1
  592. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  593. package/pages/c/_cluster/explorer/index.vue +16 -4
  594. package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
  595. package/pages/c/_cluster/explorer/tools/index.vue +6 -6
  596. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  597. package/pages/c/_cluster/fleet/__tests__/index.test.ts +720 -0
  598. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  599. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  600. package/pages/c/_cluster/fleet/application/create.vue +341 -0
  601. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  602. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  603. package/pages/c/_cluster/fleet/index.vue +866 -328
  604. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  605. package/pages/c/_cluster/longhorn/index.vue +5 -2
  606. package/pages/c/_cluster/settings/banners.vue +56 -2
  607. package/pages/c/_cluster/settings/brand.vue +2 -1
  608. package/pages/c/_cluster/settings/performance.vue +7 -26
  609. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  610. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  611. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
  612. package/pages/c/_cluster/uiplugins/index.vue +98 -55
  613. package/pages/explorer/resource/detail/configmap.vue +42 -0
  614. package/pages/explorer/resource/detail/projectsecret.vue +9 -0
  615. package/pages/explorer/resource/detail/secret.vue +63 -0
  616. package/pages/home.vue +63 -117
  617. package/pages/prefs.vue +0 -1
  618. package/pages/support/index.vue +4 -6
  619. package/pkg/tsconfig.json +9 -9
  620. package/pkg/vue.config.js +1 -1
  621. package/plugins/clean-html.js +2 -0
  622. package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
  623. package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
  624. package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
  625. package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
  626. package/plugins/dashboard-store/actions.js +213 -56
  627. package/plugins/dashboard-store/getters.js +112 -24
  628. package/plugins/dashboard-store/mutations.js +61 -12
  629. package/plugins/dashboard-store/normalize.js +29 -19
  630. package/plugins/dashboard-store/resource-class.js +105 -21
  631. package/plugins/steve/__tests__/getters.test.ts +19 -12
  632. package/plugins/steve/__tests__/steve-class.test.ts +1 -0
  633. package/plugins/steve/__tests__/subscribe.spec.ts +324 -1
  634. package/plugins/steve/actions.js +37 -24
  635. package/plugins/steve/getters.js +47 -12
  636. package/plugins/steve/resourceWatcher.js +10 -3
  637. package/plugins/steve/steve-class.js +5 -0
  638. package/plugins/steve/steve-pagination-utils.ts +225 -43
  639. package/plugins/steve/subscribe.js +418 -53
  640. package/plugins/steve/worker/web-worker.advanced.js +5 -1
  641. package/rancher-components/BadgeState/BadgeState.vue +33 -52
  642. package/rancher-components/Banner/Banner.test.ts +51 -3
  643. package/rancher-components/Banner/Banner.vue +53 -10
  644. package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
  645. package/rancher-components/Form/Checkbox/Checkbox.vue +27 -9
  646. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
  647. package/rancher-components/Form/LabeledInput/LabeledInput.vue +21 -3
  648. package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
  649. package/rancher-components/Form/Radio/RadioButton.vue +21 -5
  650. package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
  651. package/rancher-components/Form/Radio/RadioGroup.vue +90 -39
  652. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +4 -0
  653. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +22 -1
  654. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +32 -2
  655. package/rancher-components/RcButton/RcButton.vue +1 -1
  656. package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
  657. package/rancher-components/RcDropdown/RcDropdown.vue +6 -0
  658. package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -55
  659. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +69 -0
  660. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +93 -0
  661. package/rancher-components/RcDropdown/index.ts +2 -0
  662. package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
  663. package/rancher-components/RcDropdown/useDropdownItem.ts +92 -0
  664. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  665. package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
  666. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  667. package/rancher-components/RcItemCard/index.ts +2 -0
  668. package/rancher-components/StringList/StringList.vue +1 -1
  669. package/scripts/build-pkg.sh +18 -23
  670. package/scripts/extension/publish +1 -1
  671. package/scripts/publish-shell.sh +1 -1
  672. package/static/loading-indicator.html +1 -1
  673. package/store/action-menu.js +26 -56
  674. package/store/auth.js +3 -0
  675. package/store/catalog.js +85 -25
  676. package/store/features.js +0 -1
  677. package/store/growl.js +97 -8
  678. package/store/i18n.js +5 -1
  679. package/store/index.js +48 -18
  680. package/store/notifications.ts +426 -0
  681. package/store/prefs.js +2 -8
  682. package/store/slideInPanel.ts +6 -0
  683. package/store/type-map.js +35 -20
  684. package/store/type-map.utils.ts +49 -6
  685. package/store/uiplugins.ts +15 -1
  686. package/types/fleet.d.ts +60 -1
  687. package/types/kube/kube-api.ts +34 -0
  688. package/types/notifications/index.ts +74 -0
  689. package/types/resources/fleet.d.ts +43 -0
  690. package/types/resources/pod-security-admission.ts +36 -0
  691. package/types/resources/settings.d.ts +107 -0
  692. package/types/resources/userPreferences.d.ts +13 -0
  693. package/types/shell/index.d.ts +949 -741
  694. package/types/store/dashboard-store.types.ts +57 -4
  695. package/types/store/pagination.types.ts +41 -9
  696. package/types/store/subscribe.types.ts +50 -0
  697. package/utils/__mocks__/tabbable.js +13 -0
  698. package/utils/__tests__/back-off.test.ts +354 -0
  699. package/utils/__tests__/create-yaml.test.ts +235 -0
  700. package/utils/__tests__/fleet.test.ts +148 -0
  701. package/utils/__tests__/kontainer.test.ts +19 -0
  702. package/utils/__tests__/object.test.ts +54 -1
  703. package/utils/__tests__/string.test.ts +273 -1
  704. package/utils/__tests__/time.test.ts +31 -0
  705. package/utils/auth.js +41 -6
  706. package/utils/back-off.ts +176 -0
  707. package/utils/cluster.js +24 -20
  708. package/utils/create-yaml.js +103 -9
  709. package/utils/crypto/encryption.ts +103 -0
  710. package/utils/cspAdaptor.ts +51 -0
  711. package/utils/error.js +26 -9
  712. package/utils/errorTranslate.json +410 -6
  713. package/utils/errorTranslateNew.json +39 -0
  714. package/utils/fleet-types.ts +0 -0
  715. package/utils/fleet.ts +204 -74
  716. package/utils/grafana.js +1 -0
  717. package/utils/kontainer.ts +3 -5
  718. package/utils/object.js +36 -12
  719. package/utils/pagination-utils.ts +50 -3
  720. package/utils/pagination-wrapper.ts +132 -50
  721. package/utils/perf-setting.utils.ts +28 -0
  722. package/utils/release-notes.ts +48 -0
  723. package/utils/roleFiltering.js +33 -0
  724. package/utils/selector-typed.ts +210 -0
  725. package/utils/selector.js +29 -6
  726. package/utils/settings.ts +4 -1
  727. package/utils/string.js +24 -0
  728. package/utils/style.ts +39 -0
  729. package/utils/{time.js → time.ts} +25 -6
  730. package/utils/uiplugins.ts +41 -8
  731. package/utils/v-sphere.ts +5 -1
  732. package/utils/validators/formRules/__tests__/index.test.ts +76 -6
  733. package/utils/validators/formRules/index.ts +99 -4
  734. package/utils/window.js +11 -7
  735. package/vue.config.js +1 -1
  736. package/.DS_Store +0 -0
  737. package/components/AssignTo.vue +0 -199
  738. package/components/DisableAuthProviderModal.vue +0 -115
  739. package/components/MoveModal.vue +0 -167
  740. package/components/PromptChangePassword.vue +0 -123
  741. package/components/ResourceList/Masthead-btn.vue +0 -225
  742. package/components/__tests__/ApplicationCard.test.ts +0 -27
  743. package/components/cards/ApplicationCard.vue +0 -145
  744. package/components/fleet/FleetBundleResources.vue +0 -86
  745. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  746. package/components/formatter/RKETemplateName.vue +0 -37
  747. package/config/product/legacy.js +0 -62
  748. package/config/secret.js +0 -14
  749. package/dialog/SaveAsRKETemplateDialog.vue +0 -139
  750. package/models/etcdbackup.js +0 -45
  751. package/pages/auth copy/login.vue +0 -595
  752. package/pages/auth copy/logout.vue +0 -47
  753. package/pages/auth copy/setup.vue +0 -523
  754. package/pages/auth copy/verify.vue +0 -203
  755. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  756. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  757. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  758. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  759. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
@@ -1,9 +1,11 @@
1
- import { PaginationArgs } from '@shell/types/store/pagination.types';
1
+ import { KubeLabelSelector } from '@shell/types/kube/kube-api';
2
+ import { PaginationArgs, StorePagination } from '@shell/types/store/pagination.types';
2
3
 
3
4
  /**
4
5
  * Properties on all findX actions
5
6
  */
6
7
  export type ActionCoreFindArgs = {
8
+ url?: string,
7
9
  force?: boolean,
8
10
  }
9
11
 
@@ -13,7 +15,29 @@ export type ActionCoreFindArgs = {
13
15
  export interface ActionFindAllArgs extends ActionCoreFindArgs {
14
16
  watch?: boolean,
15
17
  namespaced?: string[],
16
- incremental?: boolean,
18
+ /**
19
+ * Should resources be fetched in increments?
20
+ */
21
+ incremental?: {
22
+ /**
23
+ * load this amount of info first, to show something quickly
24
+ *
25
+ * helpful if resources per increments turns out to be large
26
+ */
27
+ quickLoadCount: number,
28
+ /**
29
+ * Number of resources to fetch in each increment
30
+ */
31
+ resourcesPerIncrement: number,
32
+ /**
33
+ * Number of increments to fetch
34
+ */
35
+ increments: number,
36
+ /**
37
+ * Fetch increments by page size and number (instead of limit and next)
38
+ */
39
+ pageByNumber: boolean,
40
+ },
17
41
  hasManualRefresh?: boolean,
18
42
  limit?: number,
19
43
  /**
@@ -24,6 +48,11 @@ export interface ActionFindAllArgs extends ActionCoreFindArgs {
24
48
  depaginate?: boolean,
25
49
  }
26
50
 
51
+ export interface ActionFindPageTransientResult<T> {
52
+ pagination: StorePagination,
53
+ data: T[],
54
+ }
55
+
27
56
  /**
28
57
  * Args used for findPage action
29
58
  */
@@ -39,8 +68,32 @@ export interface ActionFindPageArgs extends ActionCoreFindArgs {
39
68
  */
40
69
  namespaced?: string,
41
70
  /**
42
- * Result of request is transient and not persisted to store
71
+ * Watch for changes
72
+ *
73
+ * false = no, all other values = yes
74
+ */
75
+ watch?: boolean,
76
+ /**
77
+ * Does this request stem from a list with manual refresh?
43
78
  */
44
- transient?: boolean,
45
79
  hasManualRefresh?: boolean,
80
+ /**
81
+ * If true don't persist the http response to the store, just pass it back
82
+ */
83
+ transient?: boolean,
46
84
  }
85
+
86
+ export type ActionFindPageResponse<T = any> = {
87
+ data: T[],
88
+ pagination?: StorePagination
89
+ } | T[];
90
+
91
+ export interface ActionFindMatchingArgs extends ActionCoreFindArgs {
92
+ labelSelector: KubeLabelSelector,
93
+ namespaced?: string,
94
+ depaginate?: boolean
95
+ }
96
+
97
+ export type ActionFindMatchingResponse<T = any> = ActionFindPageResponse<T>
98
+
99
+ export type ActionFindLabelSelectorArgs = ActionFindPageArgs | ActionFindMatchingArgs;
@@ -1,4 +1,5 @@
1
1
  import { NAMESPACE_FILTER_NS_FULL_PREFIX, NAMESPACE_FILTER_P_FULL_PREFIX } from '@shell/utils/namespace-filter';
2
+ import { KubeLabelSelector } from '@shell/types/kube/kube-api';
2
3
 
3
4
  // Pagination Typing
4
5
  // These structures are designed to offer both convenience and flexibility based on a common structure and are
@@ -63,12 +64,14 @@ export class PaginationFilterField {
63
64
  field?: string;
64
65
  /**
65
66
  * Value of field within the object to filter by for example the y of x=y
67
+ *
68
+ * This can be empty if `exists` is true
66
69
  */
67
- value: string;
70
+ value?: string;
68
71
  /**
69
72
  * Equality field within the object to filter by for example the `=` or `!=` of x=y
70
73
  */
71
- equals: boolean;
74
+ equals?: boolean;
72
75
  /**
73
76
  * Match the field exactly. False for partial matches
74
77
  *
@@ -76,18 +79,26 @@ export class PaginationFilterField {
76
79
  * Exact: true. "p" no, "pod", no, "pod1" yes
77
80
  * Exact: false. "p" yes, "pod", yes, "pod1" yes
78
81
  */
79
- exact: boolean;
82
+ exact?: boolean;
83
+
84
+ /**
85
+ * Check if the field/property exists, regardless of value
86
+ *
87
+ * If this is false it does not flip the expectation, just doesn't add the field
88
+ */
89
+ exists?: boolean;
80
90
 
81
91
  constructor(
82
92
  {
83
- field, value, equals = true, exact = true
93
+ field, value = '', equals = true, exact = true, exists = false
84
94
  }:
85
- { field?: string; value: string; equals?: boolean; exact?: boolean;}
95
+ { field?: string; value?: string; equals?: boolean; exact?: boolean; exists?:boolean;}
86
96
  ) {
87
97
  this.field = field;
88
98
  this.value = value;
89
99
  this.equals = equals;
90
100
  this.exact = exact;
101
+ this.exists = exists;
91
102
  }
92
103
  }
93
104
 
@@ -227,7 +238,7 @@ export class PaginationParamFilter extends PaginationParam {
227
238
  /**
228
239
  * Convenience method when you just want an instance of {@link PaginationParamFilter} with a simple `filter=x=y` param
229
240
  */
230
- static createSingleField(field: { field?: string; value: string; equals?: boolean; exact?: boolean }): PaginationParam {
241
+ static createSingleField(field: { field?: string; value?: string; equals?: boolean; exact?: boolean, exists?: boolean }): PaginationParam {
231
242
  return new PaginationParamFilter({ fields: [new PaginationFilterField(field)] });
232
243
  }
233
244
 
@@ -304,7 +315,7 @@ export class PaginationArgs {
304
315
  */
305
316
  sort: PaginationSort[];
306
317
  /**
307
- * A collection of `filter` params
318
+ * A collection of traditional `filter` params covering logic such as x is y, x is like y, x is not y
308
319
  *
309
320
  * For more info see {@link PaginationParamFilter}
310
321
  */
@@ -316,6 +327,11 @@ export class PaginationArgs {
316
327
  */
317
328
  projectsOrNamespaces: PaginationParamProjectOrNamespace[];
318
329
 
330
+ /**
331
+ * Traditional Kube labelSelector consisting of matchLabels and matchExpressions
332
+ */
333
+ labelSelector?: KubeLabelSelector;
334
+
319
335
  /**
320
336
  * Creates an instance of PaginationArgs.
321
337
  *
@@ -327,6 +343,7 @@ export class PaginationArgs {
327
343
  sort = [],
328
344
  filters = [],
329
345
  projectsOrNamespaces = [],
346
+ labelSelector = undefined,
330
347
  }:
331
348
  // This would be neater as just Partial<PaginationArgs> but we lose all jsdoc
332
349
  {
@@ -354,6 +371,10 @@ export class PaginationArgs {
354
371
  * For definition see {@link PaginationArgs} `projectsOrNamespaces`
355
372
  */
356
373
  projectsOrNamespaces?: PaginationParamProjectOrNamespace | PaginationParamProjectOrNamespace[],
374
+ /**
375
+ * Traditional Kube labelSelector consisting of matchLabels and matchExpressions
376
+ */
377
+ labelSelector?: KubeLabelSelector,
357
378
  }) {
358
379
  this.page = page;
359
380
  this.pageSize = pageSize;
@@ -368,6 +389,7 @@ export class PaginationArgs {
368
389
  } else {
369
390
  this.projectsOrNamespaces = [];
370
391
  }
392
+ this.labelSelector = labelSelector;
371
393
  }
372
394
  }
373
395
 
@@ -386,6 +408,7 @@ export class FilterArgs extends PaginationArgs {
386
408
  sort = [],
387
409
  filters = [],
388
410
  projectsOrNamespaces = [],
411
+ labelSelector = undefined,
389
412
  }:
390
413
  // This would be neater as just Partial<PaginationArgs> but we lose all jsdoc
391
414
  {
@@ -405,9 +428,13 @@ export class FilterArgs extends PaginationArgs {
405
428
  * For definition see {@link PaginationArgs} `projectsOrNamespaces`
406
429
  */
407
430
  projectsOrNamespaces?: PaginationParamProjectOrNamespace | PaginationParamProjectOrNamespace[],
431
+ /**
432
+ * Traditional Kube labelSelector consisting of matchLabels and matchExpressions
433
+ */
434
+ labelSelector?: KubeLabelSelector
408
435
  }) {
409
436
  super({
410
- page: null, pageSize: null, sort, filters, projectsOrNamespaces
437
+ page: null, pageSize: null, sort, filters, projectsOrNamespaces, labelSelector
411
438
  });
412
439
  }
413
440
  }
@@ -434,7 +461,12 @@ export interface StorePaginationRequest {
434
461
  /**
435
462
  * The set of pagination args used to create the request
436
463
  */
437
- pagination: PaginationArgs
464
+ pagination: PaginationArgs,
465
+
466
+ /**
467
+ * Does this request stem from a list with manual refresh?
468
+ */
469
+ hasManualRefresh?: boolean,
438
470
  }
439
471
 
440
472
  /**
@@ -0,0 +1,50 @@
1
+ /* eslint-disable no-unused-vars */
2
+ export enum STEVE_WATCH_MODE {
3
+ DEFAULT = '',
4
+ RESOURCE_CHANGES = 'resource.changes'
5
+ }
6
+ /* eslint-enable no-unused-vars */
7
+
8
+ /* eslint-disable no-unused-vars */
9
+ export enum STEVE_WATCH_EVENT {
10
+ START = 'resource.start',
11
+ CREATE = 'resource.create',
12
+ CHANGE = 'resource.change',
13
+ CHANGES = 'resource.changes',
14
+ REMOVE = 'resource.resource.remove',
15
+ ERROR = 'resource.error',
16
+ STOP = 'resource.stop',
17
+ }
18
+ /* eslint-enable no-unused-vars */
19
+
20
+ export interface STEVE_WATCH_PARAMS {
21
+ type: string,
22
+ selector?: string,
23
+ id?: string,
24
+ revision?: string,
25
+ namespace?: string,
26
+ stop?: boolean,
27
+ force?: boolean,
28
+ mode?: STEVE_WATCH_MODE
29
+ }
30
+
31
+ export type STEVE_WATCH_EVENT_LISTENER_CALLBACK = () => void
32
+ export interface STEVE_WATCH_EVENT_LISTENER {
33
+ params: STEVE_WATCH_PARAMS,
34
+ callbacks: { [id: string]: STEVE_WATCH_EVENT_LISTENER_CALLBACK},
35
+ }
36
+
37
+ export interface STEVE_WATCH_EVENT_PARAMS_COMMON {
38
+ event: STEVE_WATCH_EVENT,
39
+ id: string,
40
+ /**
41
+ * of type @STEVE_WATCH_PARAMS
42
+ */
43
+ params: STEVE_WATCH_PARAMS,
44
+ }
45
+
46
+ export interface STEVE_WATCH_EVENT_PARAMS extends STEVE_WATCH_EVENT_PARAMS_COMMON {
47
+ callback: STEVE_WATCH_EVENT_LISTENER_CALLBACK,
48
+ }
49
+
50
+ export type STEVE_UNWATCH_EVENT_PARAMS = STEVE_WATCH_EVENT_PARAMS_COMMON
@@ -0,0 +1,13 @@
1
+ // __mocks__/tabbable.js
2
+
3
+ const lib = jest.requireActual('tabbable');
4
+
5
+ const tabbable = {
6
+ ...lib,
7
+ tabbable: (node, options) => lib.tabbable(node, { ...options, displayCheck: 'none' }),
8
+ focusable: (node, options) => lib.focusable(node, { ...options, displayCheck: 'none' }),
9
+ isFocusable: (node, options) => lib.isFocusable(node, { ...options, displayCheck: 'none' }),
10
+ isTabbable: (node, options) => lib.isTabbable(node, { ...options, displayCheck: 'none' }),
11
+ };
12
+
13
+ module.exports = tabbable;
@@ -0,0 +1,354 @@
1
+ // Import the BackOff instance from your code.
2
+ // Assuming the file is named `backoff.ts` and the default export is the BackOff instance.
3
+ import backOff from '../back-off';
4
+
5
+ describe('backOff', () => {
6
+ // Use Jest's fake timers to control `setTimeout`. This is crucial for testing delays.
7
+ jest.useFakeTimers();
8
+
9
+ // Mock console.log to prevent test logs from cluttering the console output.
10
+ let consoleLogMock: jest.SpyInstance;
11
+ let consoleErrorMock: jest.SpyInstance;
12
+
13
+ beforeEach(() => {
14
+ // Before each test, reset the BackOff state.
15
+ backOff.resetAll();
16
+
17
+ // Create new mocks for each test to ensure a clean slate.
18
+ consoleLogMock = jest.spyOn(console, 'log').mockImplementation(() => {});
19
+ consoleErrorMock = jest.spyOn(console, 'error').mockImplementation(() => {});
20
+ });
21
+
22
+ afterEach(() => {
23
+ // Restore the original console functions after each test.
24
+ consoleLogMock.mockRestore();
25
+ consoleErrorMock.mockRestore();
26
+ });
27
+
28
+ // --- Test Suite for `execute` method ---
29
+
30
+ it('should execute the function immediately the first time without a delay', async() => {
31
+ const delayedFn = jest.fn();
32
+
33
+ // Call the function for the first time.
34
+ await backOff.execute({
35
+ id: 'test1', description: 'Test 1', delayedFn
36
+ });
37
+
38
+ // The function should have been called immediately, since the fake timer hasn't advanced.
39
+ expect(delayedFn).toHaveBeenCalledTimes(0);
40
+ expect(backOff.getBackOff('test1')).toBeDefined();
41
+ });
42
+
43
+ it('should back off and delay the second execution', async() => {
44
+ const delayedFn = jest.fn();
45
+ const id = 'backoff-test';
46
+
47
+ // First call, which should run immediately.
48
+ await backOff.execute({
49
+ id, description: 'Backoff Test', delayedFn,
50
+ });
51
+
52
+ jest.advanceTimersByTime(1);
53
+
54
+ // Expect the first call to be immediate.
55
+ expect(delayedFn).toHaveBeenCalledTimes(1);
56
+
57
+ // Call it a second time. This should initiate a backoff delay.
58
+ await backOff.execute({
59
+ id, description: 'Backoff Test', delayedFn
60
+ });
61
+
62
+ // The function should not have been called a second time yet.
63
+ expect(delayedFn).toHaveBeenCalledTimes(1);
64
+
65
+ // Advance the timer by less than the first backoff delay (250ms).
66
+ jest.advanceTimersByTime(200);
67
+ expect(delayedFn).toHaveBeenCalledTimes(1);
68
+
69
+ // Now, advance the timer by the required delay to trigger the second call.
70
+ jest.advanceTimersByTime(50);
71
+
72
+ // The function should have been called a second time.
73
+ await Promise.resolve();
74
+ expect(delayedFn).toHaveBeenCalledTimes(2);
75
+
76
+ // Verify the backoff entry was created correctly.
77
+ const backOffEntry = backOff.getBackOff(id);
78
+
79
+ expect(backOffEntry.try).toBe(2);
80
+ });
81
+
82
+ it('should implement exponential backoff on subsequent calls', async() => {
83
+ const delayedFn = jest.fn();
84
+ const id = 'exp-backoff';
85
+
86
+ // First call (immediate)
87
+ await backOff.execute({
88
+ id, description: 'Exponential Backoff Test', delayedFn
89
+ });
90
+
91
+ jest.advanceTimersByTime(1);
92
+ expect(delayedFn).toHaveBeenCalledTimes(1);
93
+
94
+ // Second call (should have a delay of 1^2 * 250 = 250ms)
95
+ await backOff.execute({
96
+ id, description: 'Exponential Backoff Test', delayedFn
97
+ });
98
+ jest.advanceTimersByTime(250);
99
+ await Promise.resolve();
100
+ expect(delayedFn).toHaveBeenCalledTimes(2);
101
+
102
+ // Third call (should have a delay of 2^2 * 250 = 1000ms)
103
+ await backOff.execute({
104
+ id, description: 'Exponential Backoff Test', delayedFn
105
+ });
106
+ jest.advanceTimersByTime(1000);
107
+ await Promise.resolve();
108
+ expect(delayedFn).toHaveBeenCalledTimes(3);
109
+
110
+ // Fourth call (should have a delay of 3^2 * 250 = 2250ms)
111
+ await backOff.execute({
112
+ id, description: 'Exponential Backoff Test', delayedFn
113
+ });
114
+ jest.advanceTimersByTime(2250);
115
+ await Promise.resolve();
116
+ expect(delayedFn).toHaveBeenCalledTimes(4);
117
+ });
118
+
119
+ it('should skip execution if a previous backoff process is already running', async() => {
120
+ const delayedFn = jest.fn();
121
+ const id = 'skip-test';
122
+
123
+ await backOff.execute({
124
+ id, description: 'Skip Test', delayedFn
125
+ });
126
+ expect(delayedFn).toHaveBeenCalledTimes(0);
127
+
128
+ // Second call, will be ignored
129
+ await backOff.execute({
130
+ id, description: 'Skip Test', delayedFn
131
+ });
132
+
133
+ expect(delayedFn).toHaveBeenCalledTimes(0);
134
+
135
+ // We should only have 1 call so far.
136
+ jest.advanceTimersByTime(1);
137
+ await Promise.resolve();
138
+ expect(delayedFn).toHaveBeenCalledTimes(1);
139
+
140
+ // A third call while the first is still pending.
141
+ // This call should be ignored and the delayedFn should not be executed.
142
+ await backOff.execute({
143
+ id, description: 'Skip Test', delayedFn
144
+ });
145
+
146
+ expect(delayedFn).toHaveBeenCalledTimes(1);
147
+
148
+ jest.advanceTimersByTime(300);
149
+ await Promise.resolve();
150
+ expect(delayedFn).toHaveBeenCalledTimes(2);
151
+
152
+ // Advance timers to complete the pending second call.
153
+ jest.advanceTimersByTime(1000);
154
+ await Promise.resolve();
155
+ // Now there should be 2 calls, not 3.
156
+ expect(delayedFn).toHaveBeenCalledTimes(2);
157
+ });
158
+
159
+ it('should not execute if the number of retries is exceeded', async() => {
160
+ const delayedFn = jest.fn();
161
+ const id = 'retries-test';
162
+
163
+ // Set retries to 2.
164
+ const retries = 2;
165
+
166
+ // Call 1 (immediate)
167
+ await backOff.execute({
168
+ id, description: 'Retries Test', retries, delayedFn
169
+ });
170
+ jest.advanceTimersByTime(1);
171
+ await Promise.resolve();
172
+ expect(delayedFn).toHaveBeenCalledTimes(1);
173
+
174
+ // Call 2 (after 250ms delay)
175
+ await backOff.execute({
176
+ id, description: 'Retries Test', retries, delayedFn
177
+ });
178
+ jest.advanceTimersByTime(250);
179
+ await Promise.resolve();
180
+ expect(delayedFn).toHaveBeenCalledTimes(2);
181
+
182
+ // Call 3 (should be ignored because it exceeds the `retries` limit of 2)
183
+ await backOff.execute({
184
+ id, description: 'Retries Test', retries, delayedFn
185
+ });
186
+ jest.advanceTimersByTime(250);
187
+ await Promise.resolve();
188
+
189
+ expect(delayedFn).toHaveBeenCalledTimes(2);
190
+ });
191
+
192
+ it('should skip execution if `canFn` returns false', async() => {
193
+ const delayedFn = jest.fn();
194
+ const canFn = jest.fn().mockResolvedValue(false);
195
+
196
+ await backOff.execute({
197
+ id: 'canfn-test', description: 'canFn Test', canFn, delayedFn
198
+ });
199
+
200
+ jest.advanceTimersByTime(250);
201
+ await Promise.resolve();
202
+
203
+ expect(delayedFn).not.toHaveBeenCalled();
204
+ });
205
+
206
+ it('should not clear backoff entry if the delayedFn throws an error', async() => {
207
+ const id = 'error-test';
208
+ const delayedFn = jest.fn().mockRejectedValue(new Error('Test Error'));
209
+
210
+ // Call the function for the first time.
211
+ await backOff.execute({
212
+ id, description: 'Error Test', delayedFn
213
+ });
214
+
215
+ // Wait for the immediate call to finish.
216
+ jest.advanceTimersByTime(1);
217
+ await Promise.resolve();
218
+ await Promise.resolve();
219
+ await Promise.resolve();
220
+
221
+ // The entry should be removed after success/failure.
222
+ expect(backOff.getBackOff(id).timeoutId).toBeUndefined();
223
+
224
+ // Call again to trigger a backoff delay and an error.
225
+ await backOff.execute({
226
+ id, description: 'Error Test', delayedFn
227
+ });
228
+
229
+ // Advance timers to trigger the delayed function.
230
+ jest.advanceTimersByTime(250);
231
+ await Promise.resolve();
232
+ await Promise.resolve();
233
+ await Promise.resolve();
234
+
235
+ // The timeoutId should be cleared, but the `try` count should be preserved on the next call.
236
+ expect(backOff.getBackOff(id).timeoutId).toBeUndefined();
237
+
238
+ // Check if the next call will still back off.
239
+ const newDelayedFn = jest.fn();
240
+
241
+ await backOff.execute({
242
+ id, description: 'Error Test', delayedFn: newDelayedFn
243
+ });
244
+ expect(newDelayedFn).not.toHaveBeenCalled(); // The next call should still be delayed
245
+ });
246
+
247
+ it('should save metadata', async() => {
248
+ const delayedFn = jest.fn();
249
+ const id = 'exp-backoff';
250
+ const metadata = { a: true };
251
+
252
+ // First call (immediate)
253
+ await backOff.execute({
254
+ id, description: 'Exponential Backoff Test', delayedFn, metadata
255
+ });
256
+
257
+ expect(backOff.getBackOff(id)).toBeDefined();
258
+ expect(backOff.getBackOff(id).metadata).toStrictEqual(metadata);
259
+ });
260
+
261
+ // --- Test Suite for Reset methods ---
262
+
263
+ it('should reset a specific backoff process', async() => {
264
+ const delayedFn = jest.fn();
265
+ const id = 'reset-test';
266
+
267
+ // Start a backoff process.
268
+ await backOff.execute({
269
+ id, description: 'Reset Test', delayedFn
270
+ });
271
+
272
+ expect(backOff.getBackOff(id)).toBeDefined();
273
+
274
+ // Reset the process.
275
+ backOff.reset(id);
276
+
277
+ // The entry should be deleted from the map.
278
+ expect(backOff.getBackOff(id)).toBeUndefined();
279
+
280
+ // Now, a new execution should not be delayed.
281
+ await backOff.execute({
282
+ id, description: 'Reset Test', delayedFn
283
+ });
284
+
285
+ jest.advanceTimersByTime(250);
286
+ await Promise.resolve();
287
+ expect(delayedFn).toHaveBeenCalledTimes(1);
288
+ });
289
+
290
+ it('should reset all backoff processes', async() => {
291
+ const delayedFn1 = jest.fn();
292
+ const delayedFn2 = jest.fn();
293
+
294
+ await backOff.execute({
295
+ id: 'all-1', description: 'All 1', delayedFn: delayedFn1
296
+ });
297
+ await backOff.execute({
298
+ id: 'all-1', description: 'All 1', delayedFn: delayedFn1
299
+ });
300
+
301
+ await backOff.execute({
302
+ id: 'all-2', description: 'All 2', delayedFn: delayedFn2
303
+ });
304
+ await backOff.execute({
305
+ id: 'all-2', description: 'All 2', delayedFn: delayedFn2
306
+ });
307
+
308
+ expect(backOff.getBackOff('all-1')).toBeDefined();
309
+ expect(backOff.getBackOff('all-2')).toBeDefined();
310
+
311
+ // Reset all processes.
312
+ backOff.resetAll();
313
+
314
+ expect(backOff.getBackOff('all-1')).toBeUndefined();
315
+ expect(backOff.getBackOff('all-2')).toBeUndefined();
316
+ });
317
+
318
+ it('should reset only processes with a specific prefix', async() => {
319
+ const delayedFn = jest.fn();
320
+
321
+ await backOff.execute({
322
+ id: 'prefix-test-1', description: 'Prefix Test 1', delayedFn
323
+ });
324
+ await backOff.execute({
325
+ id: 'prefix-test-1', description: 'Prefix Test 1', delayedFn
326
+ });
327
+
328
+ await backOff.execute({
329
+ id: 'prefix-test-2', description: 'Prefix Test 2', delayedFn
330
+ });
331
+ await backOff.execute({
332
+ id: 'prefix-test-2', description: 'Prefix Test 2', delayedFn
333
+ });
334
+
335
+ await backOff.execute({
336
+ id: 'other-test-1', description: 'Other Test 1', delayedFn
337
+ });
338
+ await backOff.execute({
339
+ id: 'other-test-1', description: 'Other Test 1', delayedFn
340
+ });
341
+
342
+ expect(backOff.getBackOff('prefix-test-1')).toBeDefined();
343
+ expect(backOff.getBackOff('prefix-test-2')).toBeDefined();
344
+ expect(backOff.getBackOff('other-test-1')).toBeDefined();
345
+
346
+ // Reset only the "prefix-test" processes.
347
+ backOff.resetPrefix('prefix-test');
348
+
349
+ expect(backOff.getBackOff('prefix-test-1')).toBeUndefined();
350
+ expect(backOff.getBackOff('prefix-test-2')).toBeUndefined();
351
+ // The other process should still exist.
352
+ expect(backOff.getBackOff('other-test-1')).toBeDefined();
353
+ });
354
+ });