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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) 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/translations/en-us.yaml +22 -5
  56. package/chart/monitoring/index.vue +10 -1
  57. package/components/ActionDropdownShell.vue +2 -1
  58. package/components/CruResourceFooter.vue +9 -5
  59. package/components/ExplorerProjectsNamespaces.vue +1 -1
  60. package/components/InstallHelmCharts.vue +2 -2
  61. package/components/LandingPagePreference.vue +14 -5
  62. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
  63. package/components/Resource/Detail/Metadata/index.vue +6 -0
  64. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  65. package/components/Resource/Detail/SpacedRow.vue +3 -1
  66. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  67. package/components/ResourceList/Masthead.vue +12 -8
  68. package/components/SelectIconGrid.vue +0 -10
  69. package/components/SingleClusterInfo.vue +1 -0
  70. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  71. package/components/SortableTable/index.vue +6 -9
  72. package/components/SortableTable/selection.js +23 -5
  73. package/components/SortableTable/sorting.js +6 -3
  74. package/components/Wizard.vue +14 -13
  75. package/components/fleet/FleetBundles.vue +100 -12
  76. package/components/fleet/FleetClusterTargets/index.vue +37 -15
  77. package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
  78. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  79. package/components/form/LabeledSelect.vue +20 -3
  80. package/components/form/NameNsDescription.vue +11 -0
  81. package/components/form/Security.vue +6 -2
  82. package/components/form/WorkloadPorts.vue +2 -7
  83. package/components/form/__tests__/Security.test.ts +76 -0
  84. package/components/formatter/Autoscaler.vue +4 -4
  85. package/components/formatter/ClusterKubeVersion.vue +27 -0
  86. package/components/formatter/ClusterLink.vue +1 -7
  87. package/components/formatter/ClusterProvider.vue +6 -10
  88. package/components/formatter/FleetSummaryGraph.vue +0 -3
  89. package/components/formatter/MachineSummaryGraph.vue +1 -1
  90. package/components/formatter/PodsUsage.vue +2 -2
  91. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  92. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  93. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  94. package/components/nav/NamespaceFilter.vue +2 -2
  95. package/components/nav/TopLevelMenu.helper.ts +15 -3
  96. package/components/nav/TopLevelMenu.vue +16 -5
  97. package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
  98. package/components/templates/home.vue +18 -0
  99. package/components/templates/plain.vue +18 -0
  100. package/components/templates/standalone.vue +17 -0
  101. package/composables/useFormValidation.ts +93 -0
  102. package/composables/useVeeValidateField.test.ts +159 -0
  103. package/composables/useVeeValidateField.ts +67 -0
  104. package/config/pagination-table-headers.js +18 -1
  105. package/config/product/manager.js +82 -21
  106. package/config/router/routes.js +6 -0
  107. package/config/table-headers.js +20 -1
  108. package/config/types.js +2 -1
  109. package/core/__tests__/plugin-products.test.ts +904 -20
  110. package/core/plugin-products-base.ts +107 -7
  111. package/core/plugin-products.ts +4 -0
  112. package/core/plugin-types.ts +111 -1
  113. package/core/plugin.ts +15 -7
  114. package/core/productDebugger.js +9 -4
  115. package/core/types-provisioning.ts +43 -30
  116. package/core/types.ts +57 -20
  117. package/detail/__tests__/pod.test.ts +41 -0
  118. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  119. package/detail/pod.vue +1 -1
  120. package/detail/provisioning.cattle.io.cluster.vue +4 -10
  121. package/edit/auth/__tests__/azuread.test.ts +217 -34
  122. package/edit/auth/azuread.vue +122 -14
  123. package/edit/auth/oidc.vue +2 -2
  124. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  125. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  126. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  127. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  128. package/edit/provisioning.cattle.io.cluster/index.vue +11 -7
  129. package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
  130. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
  131. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  132. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  133. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  134. package/edit/secret/__tests__/ssh.test.ts +5 -6
  135. package/edit/secret/basic.vue +31 -0
  136. package/edit/secret/index.vue +68 -17
  137. package/edit/secret/registry.vue +38 -0
  138. package/edit/secret/ssh.vue +29 -0
  139. package/edit/secret/tls.vue +30 -0
  140. package/edit/service.vue +4 -4
  141. package/edit/workload/Upgrading.vue +3 -3
  142. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  143. package/edit/workload/mixins/workload.js +2 -1
  144. package/list/fleet.cattle.io.bundle.vue +7 -104
  145. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  146. package/list/provisioning.cattle.io.cluster.vue +262 -180
  147. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  148. package/mixins/__tests__/chart.test.ts +112 -0
  149. package/mixins/brand.js +2 -1
  150. package/mixins/chart.js +12 -8
  151. package/mixins/resource-fetch-api-pagination.js +41 -5
  152. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  153. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  154. package/models/__tests__/management.cattle.io.node.ts +6 -5
  155. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  156. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
  157. package/models/base-cluster.x-k8s.io.js +26 -0
  158. package/models/cluster.js +1 -1
  159. package/models/cluster.x-k8s.io.machine.js +4 -22
  160. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  161. package/models/cluster.x-k8s.io.machineset.js +2 -20
  162. package/models/compliance.cattle.io.clusterscan.js +130 -2
  163. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  164. package/models/fleet-application.js +3 -1
  165. package/models/management.cattle.io.cluster.js +417 -40
  166. package/models/management.cattle.io.node.js +6 -4
  167. package/models/management.cattle.io.nodepool.js +1 -1
  168. package/models/networking.k8s.io.ingress.js +12 -4
  169. package/models/provisioning.cattle.io.cluster.js +47 -330
  170. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  171. package/package.json +11 -29
  172. package/pages/__tests__/readme.test.ts +49 -0
  173. package/pages/auth/setup.vue +2 -3
  174. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +76 -0
  175. package/pages/c/_cluster/apps/charts/chart.vue +60 -8
  176. package/pages/c/_cluster/apps/charts/install.vue +10 -7
  177. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  178. package/pages/c/_cluster/explorer/index.vue +5 -49
  179. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  180. package/pages/c/_cluster/istio/index.vue +21 -6
  181. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -0
  182. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +719 -2
  183. package/pages/c/_cluster/uiplugins/index.vue +203 -197
  184. package/pages/diagnostic.vue +13 -17
  185. package/pages/fail-whale.vue +18 -0
  186. package/pages/home.vue +77 -260
  187. package/pages/readme.vue +88 -0
  188. package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
  189. package/plugins/dashboard-store/actions.js +40 -18
  190. package/plugins/dashboard-store/resource-class.js +5 -2
  191. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  192. package/plugins/steve/steve-pagination-utils.ts +11 -3
  193. package/plugins/steve/subscribe.js +35 -5
  194. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +10 -4
  195. package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -52
  196. package/rancher-components/RcButton/RcButton.test.ts +37 -1
  197. package/rancher-components/RcButton/RcButton.vue +38 -8
  198. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  199. package/store/__tests__/catalog.test.ts +115 -1
  200. package/store/__tests__/type-map.test.ts +556 -1
  201. package/store/action-menu.js +8 -3
  202. package/store/auth.js +1 -1
  203. package/store/aws.js +27 -16
  204. package/store/catalog.js +27 -3
  205. package/store/digitalocean.js +20 -38
  206. package/store/index.js +2 -0
  207. package/store/linode.js +25 -40
  208. package/store/pnap.js +1 -0
  209. package/store/type-map.js +111 -29
  210. package/tsconfig.paths.json +8 -8
  211. package/types/kube/kube-api.ts +14 -1
  212. package/types/rancher/steve.api.ts +12 -12
  213. package/types/resources/settings.d.ts +2 -1
  214. package/types/shell/index.d.ts +102 -2
  215. package/types/store/dashboard-store.types.ts +108 -11
  216. package/types/store/pagination.types.ts +6 -3
  217. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  218. package/utils/__tests__/async.test.ts +87 -0
  219. package/utils/__tests__/aws.test.ts +140 -0
  220. package/utils/__tests__/banners.test.ts +176 -0
  221. package/utils/__tests__/chart.test.ts +64 -1
  222. package/utils/__tests__/color.test.ts +226 -0
  223. package/utils/__tests__/duration.test.ts +140 -0
  224. package/utils/__tests__/fleet.test.ts +340 -0
  225. package/utils/__tests__/ingress.test.ts +553 -0
  226. package/utils/__tests__/kube.test.ts +68 -0
  227. package/utils/__tests__/namespace-filter.test.ts +109 -0
  228. package/utils/__tests__/pagination-utils.test.ts +361 -0
  229. package/utils/__tests__/parse-externalid.test.ts +137 -0
  230. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  231. package/utils/__tests__/poller-sequential.test.ts +177 -0
  232. package/utils/__tests__/poller.test.ts +170 -0
  233. package/utils/__tests__/promise.test.ts +346 -0
  234. package/utils/__tests__/settings.test.ts +140 -0
  235. package/utils/__tests__/sort-utils.test.ts +301 -0
  236. package/utils/__tests__/string-utils.test.ts +798 -0
  237. package/utils/__tests__/string.test.ts +23 -1
  238. package/utils/__tests__/style.test.ts +154 -0
  239. package/utils/__tests__/svg-filter.test.ts +184 -0
  240. package/utils/__tests__/units.test.ts +417 -0
  241. package/utils/__tests__/versions.test.ts +128 -0
  242. package/utils/__tests__/xccdf.test.ts +391 -0
  243. package/utils/chart.js +36 -0
  244. package/utils/fleet.ts +13 -3
  245. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  246. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  247. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  248. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  249. package/utils/gc/__tests__/gc.test.ts +487 -0
  250. package/utils/ingress.ts +9 -1
  251. package/utils/pagination-utils.ts +2 -1
  252. package/utils/string.js +25 -2
  253. package/utils/uiplugins.ts +5 -5
  254. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  255. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  256. package/utils/validators/__tests__/index.test.ts +481 -0
  257. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  258. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  259. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  260. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  261. package/utils/validators/__tests__/role-template.test.ts +149 -0
  262. package/utils/validators/__tests__/service.test.ts +283 -0
  263. package/utils/validators/__tests__/setting.test.js +32 -0
  264. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  265. package/utils/validators/formRules/index.ts +5 -5
  266. package/utils/validators/machine-pool.ts +1 -1
  267. package/utils/validators/setting.js +18 -3
  268. package/utils/xccdf.ts +418 -0
  269. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  270. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  271. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  272. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
package/apis/impl/apis.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { throttle } from 'lodash';
2
2
  import { createExtensionManager } from '@shell/core/extension-manager-impl';
3
3
  import { ShellApiImpl } from '@shell/apis/shell';
4
+ import { ResourcesApiImpl } from '@shell/apis/resources';
4
5
 
5
6
  /**
6
7
  * Initialise the APIs that are available in the shell
@@ -21,6 +22,11 @@ export function initUiApis(context: any, inject: any, vueApp: any) {
21
22
  // Shell API
22
23
  // ======================================================================================================================
23
24
  registerApi('shell', new ShellApiImpl(context.store), inject, vueApp);
25
+
26
+ // ======================================================================================================================
27
+ // Resources API
28
+ // ======================================================================================================================
29
+ registerApi('resources', new ResourcesApiImpl(context.store), inject, vueApp);
24
30
  }
25
31
 
26
32
  // ======================================================================================================================
package/apis/index.ts CHANGED
@@ -3,11 +3,16 @@
3
3
  import { inject } from 'vue';
4
4
  import { ExtensionManager } from '@shell/types/extension-manager';
5
5
  import { ShellApi as ShellApiImport } from '@shell/apis/intf/shell';
6
+ import { ResourcesApiProvider as ResourcesApiProviderImport } from '@shell/apis/intf/resources';
6
7
 
7
8
  // Re-export the types for the APIs, so they appear in this module
8
9
  export type ShellApi = ShellApiImport;
10
+ export type ResourcesApiProvider = ResourcesApiProviderImport;
9
11
  export type ExtensionManagerApi = ExtensionManager;
10
12
 
13
+ // Re-export resource types and constants
14
+ export * from '@shell/apis/intf/resources';
15
+
11
16
  /**
12
17
  * Returns an object that can be used to access the registered extension manager instance.
13
18
  *
@@ -26,6 +31,27 @@ export const useShell = (): ShellApi => {
26
31
  return getApi<ShellApi>('$shell', 'useShell');
27
32
  };
28
33
 
34
+ /**
35
+ * Returns an object that implements the ResourcesApiProvider interface.
36
+ * Provides type-safe access to cluster and management resources.
37
+ *
38
+ * @returns Returns an object that implements the ResourcesApiProvider interface
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * import { useResources, K8S } from '@shell/apis';
43
+ *
44
+ * // Cluster-scoped resources (current cluster context)
45
+ * const pod = await resources.cluster.find(K8S.POD, 'default/my-pod-123');
46
+ *
47
+ * // Management/global resources
48
+ * const user = await resources.mgmt.find(K8S.USER, 'u-xyz789');
49
+ * ```
50
+ */
51
+ export const useResources = (): ResourcesApiProvider => {
52
+ return getApi<ResourcesApiProvider>('$resources', 'useResources');
53
+ };
54
+
29
55
  // =================================================================================================================
30
56
  // Internal helper to get any API by key with error handling
31
57
  // =================================================================================================================
@@ -0,0 +1,18 @@
1
+ import { ResourcesApi } from './resources-api';
2
+
3
+ /**
4
+ * @interface
5
+ * Provides access to the Cluster API which can be used for managing cluster resources in Rancher UI
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { useResources, K8S } from '@shell/apis';
10
+ *
11
+ * // Cluster-scoped resources (current cluster context)
12
+ * const pod = await resources.cluster.find(K8S.POD, 'default/my-pod-123');
13
+ *
14
+ * // Management/global resources
15
+ * const user = await resources.mgmt.find(K8S.USER, 'u-xyz789');
16
+ * ```
17
+ */
18
+ export type ClusterApi = ResourcesApi
@@ -0,0 +1,15 @@
1
+ import { ResourcesApi } from './resources-api';
2
+
3
+ /**
4
+ * @interface
5
+ * Provides access to the Management layer in Rancher UI (users, global settings, etc.)
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { useResources, K8S } from '@shell/apis';
10
+ * const resources = useResources();
11
+ *
12
+ * const user = await resources.mgmt.find(K8S.USER, 'u-xyz789');
13
+ * ```
14
+ */
15
+ export type MgmtApi = ResourcesApi
@@ -0,0 +1,107 @@
1
+ import { K8SResourceType } from './resource-constants';
2
+ import {
3
+ ActionFindAllArgs, ActionFindArgs,
4
+ ActionFindMatchingArgs,
5
+ ActionFindPageArgs,
6
+ ActionFindPageResponse, ActionFindMatchingResponse
7
+ } from '@shell/types/store/dashboard-store.types';
8
+
9
+ /**
10
+ * @interface
11
+ * The type of the resource - can be a **string** (for CRDs) or a constant from **{@link K8S}**
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { K8S } from '@shell/apis';
16
+ *
17
+ * // Using constants (recommended)
18
+ * resources.cluster.findAll(K8S.POD);
19
+ *
20
+ * // Using strings (for CRDs or dynamic resources)
21
+ * resources.cluster.findAll('mycompany.io.customresource');
22
+ * ```
23
+ */
24
+ export type ResourceType = K8SResourceType | string;
25
+
26
+ /**
27
+ * @interface
28
+ * Resources API "findAll" options
29
+ */
30
+ export type FindAllMethodOptions = Omit<ActionFindAllArgs, 'hasManualRefresh' | 'depaginate' | 'saveCountAs' | 'incremental'>;
31
+
32
+ /**
33
+ * @interface
34
+ * Resources API "find" options
35
+ */
36
+ export type FindMethodOptions = Omit<ActionFindArgs, 'invalidatePageCache' | 'method' | 'headers'>;
37
+
38
+ /**
39
+ * @interface
40
+ * Options for `findFiltered` when using label selector matching (label selector mode).
41
+ *
42
+ * Filters resources by `labelSelector` (matchLabels / matchExpressions).
43
+ * The store automatically handles pagination:
44
+ * - If `ui-sql-cache` is enabled: uses server-side pagination
45
+ * - Otherwise: uses native Kubernetes API pagination
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * import { useResources, K8S } from '@shell/apis';
50
+ *
51
+ * const resources = useResources();
52
+ *
53
+ * const pods = await resources.cluster.findFiltered(K8S.POD, {
54
+ * labelSelector: { matchLabels: { type: 'my-type' } }
55
+ * });
56
+ * ```
57
+ */
58
+ export type FindFilteredLabelSelectorOptions = Omit<ActionFindMatchingArgs, 'depaginate'>;
59
+
60
+ /**
61
+ * @interface
62
+ * Options for `findFiltered` when using server-side pagination (pagination mode).
63
+ *
64
+ * Requires `pagination` settings for server-side filtering, sorting, and pagination
65
+ * via the Steve API's pagination cache. **Only available when `ui-sql-cache` is enabled.**
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * import { useResources, K8S } from '@shell/apis';
70
+ *
71
+ * const resources = useResources();
72
+ *
73
+ * const pods = await resources.cluster.findFiltered(K8S.POD, {
74
+ * pagination: {
75
+ * page: 1,
76
+ * pageSize: 10,
77
+ * projectsOrNamespaces: [],
78
+ * filters: [],
79
+ * sort: []
80
+ * }
81
+ * });
82
+ * ```
83
+ *
84
+ * See {@link ActionFindPageArgs} for complete pagination options.
85
+ */
86
+
87
+ // @internal We use an interface instead of a type alias so the documentation generator
88
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
89
+ export interface FindFilteredPageOptions extends ActionFindPageArgs {}
90
+
91
+ /**
92
+ * @interface
93
+ * Response type for `findFiltered` when using pagination mode.
94
+ *
95
+ * Aligns with the response type of the underlying `findPage` store action.
96
+ * Can be either a transient response object (with data and pagination) or an array of resources.
97
+ */
98
+ export type FindFilteredPageResponse<T = any> = ActionFindPageResponse<T>;
99
+
100
+ /**
101
+ * @interface
102
+ * Response type for `findFiltered` when using label selector mode.
103
+ *
104
+ * Aligns with the response type of the underlying `findMatching` store action via `findLabelSelector`.
105
+ * Can be either a transient response object (with data and pagination) or an array of resources.
106
+ */
107
+ export type FindFilteredLabelSelectorResponse<T = any> = ActionFindMatchingResponse<T>;
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Resource type constants for Kubernetes and Rancher resources.
3
+ * Use these constants instead of string literals for type safety and autocomplete.
4
+ *
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { useResources, K8S } from '@shell/apis';
9
+ *
10
+ * const resources = useResources();
11
+ *
12
+ * resources.cluster.find(K8S.POD, 'default/my-pod');
13
+ * resources.cluster.findAll(K8S.DEPLOYMENT);
14
+ * resources.mgmt.findAll(K8S.USER);
15
+ * ```
16
+ */
17
+
18
+ import {
19
+ POD,
20
+ SERVICE,
21
+ CONFIG_MAP,
22
+ SECRET,
23
+ NAMESPACE,
24
+ NODE,
25
+ PV,
26
+ PVC,
27
+ SERVICE_ACCOUNT,
28
+ EVENT,
29
+ ENDPOINTS,
30
+ LIMIT_RANGE,
31
+ RESOURCE_QUOTA,
32
+ WORKLOAD_TYPES,
33
+ HPA,
34
+ INGRESS,
35
+ NETWORK_POLICY,
36
+ INGRESS_CLASS,
37
+ RBAC,
38
+ STORAGE_CLASS,
39
+ CSI_DRIVER,
40
+ POD_DISRUPTION_BUDGET,
41
+ MANAGEMENT,
42
+ } from '@shell/config/types';
43
+
44
+ /**
45
+ * Kubernetes core and common resource types
46
+ */
47
+ export const K8S = {
48
+ // Core resources
49
+ /** Kubernetes Pod resource - `pod` */
50
+ POD,
51
+ /** Kubernetes Service resource - `service` */
52
+ SERVICE,
53
+ /** Kubernetes ConfigMap resource - `configmap` */
54
+ CONFIG_MAP,
55
+ /** Kubernetes Secret resource - `secret` */
56
+ SECRET,
57
+ /** Kubernetes Namespace resource - `namespace` */
58
+ NAMESPACE,
59
+ /** Kubernetes Node resource - `node` */
60
+ NODE,
61
+ /** Kubernetes PersistentVolume resource - `persistentvolume` */
62
+ PV,
63
+ /** Kubernetes PersistentVolumeClaim resource - `persistentvolumeclaim` */
64
+ PVC,
65
+ /** Kubernetes ServiceAccount resource - `serviceaccount` */
66
+ SERVICE_ACCOUNT,
67
+ /** Kubernetes Event resource - `event` */
68
+ EVENT,
69
+ /** Kubernetes Endpoints resource - `endpoints` */
70
+ ENDPOINTS,
71
+ /** Kubernetes LimitRange resource - `limitrange` */
72
+ LIMIT_RANGE,
73
+ /** Kubernetes ResourceQuota resource - `resourcequota` */
74
+ RESOURCE_QUOTA,
75
+
76
+ // Apps/Workloads
77
+ /** Kubernetes Deployment workload - `apps.deployment` */
78
+ DEPLOYMENT: WORKLOAD_TYPES.DEPLOYMENT,
79
+ /** Kubernetes StatefulSet workload - `apps.statefulset` */
80
+ STATEFUL_SET: WORKLOAD_TYPES.STATEFUL_SET,
81
+ /** Kubernetes DaemonSet workload - `apps.daemonset` */
82
+ DAEMON_SET: WORKLOAD_TYPES.DAEMON_SET,
83
+ /** Kubernetes ReplicaSet workload - `apps.replicaset` */
84
+ REPLICA_SET: WORKLOAD_TYPES.REPLICA_SET,
85
+ /** Kubernetes ReplicationController workload - `replicationcontroller` */
86
+ REPLICATION_CONTROLLER: WORKLOAD_TYPES.REPLICATION_CONTROLLER,
87
+
88
+ // Batch
89
+ /** Kubernetes Job batch resource - `batch.job` */
90
+ JOB: WORKLOAD_TYPES.JOB,
91
+ /** Kubernetes CronJob batch resource - `batch.cronjob` */
92
+ CRON_JOB: WORKLOAD_TYPES.CRON_JOB,
93
+
94
+ // Networking
95
+ /** Kubernetes Ingress networking resource - `networking.k8s.io.ingress` */
96
+ INGRESS,
97
+ /** Kubernetes NetworkPolicy resource - `networking.k8s.io.networkpolicy` */
98
+ NETWORK_POLICY,
99
+ /** Kubernetes IngressClass resource - `networking.k8s.io.ingressclass` */
100
+ INGRESS_CLASS,
101
+
102
+ // RBAC
103
+ /** Kubernetes Role RBAC resource - `rbac.authorization.k8s.io.role` */
104
+ ROLE: RBAC.ROLE,
105
+ /** Kubernetes RoleBinding RBAC resource - `rbac.authorization.k8s.io.rolebinding` */
106
+ ROLE_BINDING: RBAC.ROLE_BINDING,
107
+ /** Kubernetes ClusterRole RBAC resource - `rbac.authorization.k8s.io.clusterrole` */
108
+ CLUSTER_ROLE: RBAC.CLUSTER_ROLE,
109
+ /** Kubernetes ClusterRoleBinding RBAC resource - `rbac.authorization.k8s.io.clusterrolebinding` */
110
+ CLUSTER_ROLE_BINDING: RBAC.CLUSTER_ROLE_BINDING,
111
+
112
+ // Storage
113
+ /** Kubernetes StorageClass storage resource - `storage.k8s.io.storageclass` */
114
+ STORAGE_CLASS,
115
+ /** Kubernetes CSIDriver storage resource - `storage.k8s.io.csidriver` */
116
+ CSI_DRIVER,
117
+
118
+ // Policy
119
+ /** Kubernetes PodDisruptionBudget policy resource - `policy.poddisruptionbudget` */
120
+ POD_DISRUPTION_BUDGET,
121
+
122
+ // Autoscaling
123
+ /** Kubernetes HorizontalPodAutoscaler resource - `autoscaling.horizontalpodautoscaler` */
124
+ HPA,
125
+
126
+ // Management/Rancher resources (public API: https://ranchermanager.docs.rancher.com/api/api-reference)
127
+ /** Rancher User management resource - `management.cattle.io.user` */
128
+ USER: MANAGEMENT.USER,
129
+ /** Rancher Project management resource - `management.cattle.io.project` */
130
+ PROJECT: MANAGEMENT.PROJECT,
131
+ /** Rancher RoleTemplate management resource - `management.cattle.io.roletemplate` */
132
+ ROLE_TEMPLATE: MANAGEMENT.ROLE_TEMPLATE,
133
+ /** Rancher GlobalRole management resource - `management.cattle.io.globalrole` */
134
+ GLOBAL_ROLE: MANAGEMENT.GLOBAL_ROLE,
135
+ /** Rancher GlobalRoleBinding management resource - `management.cattle.io.globalrolebinding` */
136
+ GLOBAL_ROLE_BINDING: MANAGEMENT.GLOBAL_ROLE_BINDING,
137
+ /** Rancher ClusterRoleTemplateBinding management resource - `management.cattle.io.clusterroletemplatebinding` */
138
+ CLUSTER_ROLE_TEMPLATE_BINDING: MANAGEMENT.CLUSTER_ROLE_TEMPLATE_BINDING,
139
+ /** Rancher ProjectRoleTemplateBinding management resource - `management.cattle.io.projectroletemplatebinding` */
140
+ PROJECT_ROLE_TEMPLATE_BINDING: MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING,
141
+ } as const;
142
+
143
+ /**
144
+ * Type helper to extract resource type values from K8S constants.
145
+ * Check **{@link K8S}** constant documentation
146
+ */
147
+ export type K8SResourceType = typeof K8S[keyof typeof K8S];
@@ -0,0 +1,143 @@
1
+ import {
2
+ ResourceType, FindMethodOptions, FindAllMethodOptions, FindFilteredPageOptions, FindFilteredLabelSelectorOptions,
3
+ FindFilteredPageResponse, FindFilteredLabelSelectorResponse
4
+ } from './resource-base';
5
+ import { SteveListResponse, SteveGetResponse } from '@shell/types/rancher/steve.api';
6
+
7
+ /**
8
+ * Base interface for all resource API operations.
9
+ *
10
+ * Provides type-safe methods for interacting with Kubernetes and Rancher resources.
11
+ * Used by both cluster-scoped and management-scoped APIs, and can be extended
12
+ * by custom store implementations (e.g. Harvester, Epinio).
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { useResources, K8S } from '@shell/apis';
17
+ *
18
+ * const resources = useResources();
19
+ *
20
+ * const deployment = await resources.cluster.find(K8S.DEPLOYMENT, 'default/my-app');
21
+ * ```
22
+ */
23
+ export interface ResourcesApi {
24
+ /**
25
+ * Finds a specific resource by its type and ID.
26
+ *
27
+ * @template T - The type of the resource (defaults to SteveGetResponse)
28
+ * @param resourceType - The type of the resource to find (use **{@link K8S}** constant). See also {@link ResourceType}.
29
+ * @param resourceId - The unique identifier of the resource to find. If the resource is namespaced, this should be in the format `namespace/name`.
30
+ * @param options - Optional find arguments
31
+ * @returns The found resource item or null if not found.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { useResources, K8S } from '@shell/apis';
36
+ *
37
+ * const resources = useResources();
38
+ *
39
+ * // Namespaced resource - ID must be in "namespace/name" format
40
+ * const pod = await resources.cluster.find(K8S.POD, 'default/my-pod-123');
41
+ *
42
+ * // Cluster-scoped resource - ID is just the name
43
+ * const node = await resources.cluster.find(K8S.NODE, 'worker-1');
44
+ * ```
45
+ */
46
+ find<T = SteveGetResponse>(
47
+ resourceType: ResourceType,
48
+ resourceId: string,
49
+ options?: FindMethodOptions
50
+ ): Promise<T | null>;
51
+
52
+ /**
53
+ * Finds resources using pagination mode with server-side filtering, sorting, and pagination.
54
+ *
55
+ * Requires `ui-sql-cache` to be enabled.
56
+ *
57
+ * @template T - The type of the resources (defaults to SteveListResponse)
58
+ * @param resourceType - The type of the resources to find (use **{@link K8S}** constant). See also {@link ResourceType}.
59
+ * @param options - Pagination options with server-side filtering and sorting via the Steve API's pagination cache. See {@link FindFilteredPageOptions}.
60
+ * @returns Response containing resource items (may be transient if requested, otherwise cached array).
61
+ * @throws Error if pagination mode is requested but `ui-sql-cache` is not enabled.
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * import { useResources, K8S } from '@shell/apis';
66
+ *
67
+ * const resources = useResources();
68
+ *
69
+ * const pods = await resources.cluster.findFiltered(K8S.POD, {
70
+ * pagination: {
71
+ * page: 1,
72
+ * pageSize: 10,
73
+ * filters: [],
74
+ * sort: []
75
+ * }
76
+ * });
77
+ * ```
78
+ */
79
+ findFiltered<T = SteveListResponse>(
80
+ resourceType: ResourceType,
81
+ options: FindFilteredPageOptions
82
+ ): Promise<FindFilteredPageResponse<T>>;
83
+
84
+ /**
85
+ * Finds resources using label selector matching.
86
+ *
87
+ * Filters resources by Kubernetes labels. The store automatically handles pagination:
88
+ * - If `ui-sql-cache` is enabled: uses server-side pagination
89
+ * - Otherwise: uses native Kubernetes API pagination
90
+ *
91
+ * @template T - The type of the resources (defaults to SteveListResponse)
92
+ * @param resourceType - The type of the resources to find (use **{@link K8S}** constant). See also {@link ResourceType}.
93
+ * @param options - Label selector options for filtering. See {@link FindFilteredLabelSelectorOptions}.
94
+ * @returns Response containing resource items (may be transient if requested, otherwise cached array).
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * import { useResources, K8S } from '@shell/apis';
99
+ *
100
+ * const resources = useResources();
101
+ *
102
+ * const pods = await resources.cluster.findFiltered(K8S.POD, {
103
+ * labelSelector: { matchLabels: { type: 'my-type' } }
104
+ * });
105
+ * ```
106
+ */
107
+ findFiltered<T = SteveListResponse>(
108
+ resourceType: ResourceType,
109
+ options: FindFilteredLabelSelectorOptions
110
+ ): Promise<FindFilteredLabelSelectorResponse<T>>;
111
+
112
+ /**
113
+ * @internal Implementation - use one of the overloads above
114
+ */
115
+ findFiltered<T = SteveListResponse>(
116
+ resourceType: ResourceType,
117
+ options: FindFilteredPageOptions | FindFilteredLabelSelectorOptions
118
+ ): Promise<FindFilteredPageResponse<T> | FindFilteredLabelSelectorResponse<T>>;
119
+
120
+ /**
121
+ * Fetches all resources of a specific type with advanced options.
122
+ * This method provides additional capabilities like incremental loading and namespace filtering.
123
+ *
124
+ * @template T - The type of the resources (defaults to SteveListResponse)
125
+ * @param resourceType - The type of the resources to find (use **{@link K8S}** constant). See also {@link ResourceType}.
126
+ * @param options - Optional advanced fetch options (incremental loading, namespace filtering, etc.)
127
+ * @returns An array of resource items or an empty array if none are found.
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * import { useResources, K8S } from '@shell/apis';
132
+ *
133
+ * const resources = useResources();
134
+ * const allPods = await resources.cluster.findAll(K8S.POD, {
135
+ * namespaced: ['default', 'kube-system']
136
+ * });
137
+ * ```
138
+ */
139
+ findAll<T = SteveListResponse>(
140
+ resourceType: ResourceType,
141
+ options?: FindAllMethodOptions
142
+ ): Promise<T[]>;
143
+ }
@@ -0,0 +1,49 @@
1
+
2
+ import { ClusterApi } from '@shell/apis/intf/resources-api/cluster-api';
3
+ import { MgmtApi } from '@shell/apis/intf/resources-api/mgmt-api';
4
+
5
+ export * from '@shell/apis/intf/resources-api/resources-api';
6
+ export * from '@shell/apis/intf/resources-api/cluster-api';
7
+ export * from '@shell/apis/intf/resources-api/mgmt-api';
8
+ export {
9
+ ResourceType, FindMethodOptions, FindAllMethodOptions, FindFilteredPageOptions, FindFilteredLabelSelectorOptions,
10
+ FindFilteredPageResponse, FindFilteredLabelSelectorResponse
11
+ } from '@shell/apis/intf/resources-api/resource-base';
12
+ export * from '@shell/apis/intf/resources-api/resource-constants';
13
+
14
+ export { SteveGetResponse, SteveListResponse } from '@shell/types/rancher/steve.api';
15
+ export { KubeLabelSelector, KubeLabelSelectorExpression } from '@shell/types/kube/kube-api';
16
+ export {
17
+ PaginationSort, PaginationParamFilter, PaginationParamProjectOrNamespace, PaginationFilterField
18
+ } from '@shell/types/store/pagination.types';
19
+
20
+ /**
21
+ * @internal
22
+ * Top-level provider that exposes scoped resource API instances.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { useResources, K8S } from '@shell/apis';
27
+ *
28
+ * const resources = useResources();
29
+ *
30
+ * // Cluster-scoped resources (current cluster context)
31
+ * const pod = await resources.cluster.find(K8S.POD, 'default/my-pod-123');
32
+ *
33
+ * // Management/global resources
34
+ * const user = await resources.mgmt.find(K8S.USER, 'u-xyz789');
35
+ * ```
36
+ */
37
+ export interface ResourcesApiProvider {
38
+ /**
39
+ * Provides access to the Cluster API which can be used for managing Kubernetes cluster resources.
40
+ * This includes Kubernetes native resources like Pods, Deployments, Services, etc.
41
+ */
42
+ get cluster(): ClusterApi;
43
+
44
+ /**
45
+ * Provides access to the Management layer in Rancher UI.
46
+ * This includes global resources like Users, Clusters, Global Settings, etc.
47
+ */
48
+ get mgmt(): MgmtApi;
49
+ }
@@ -17,36 +17,29 @@ export interface ModalConfig {
17
17
  * Example with a callback function:
18
18
  *
19
19
  * ```ts
20
+ * import { useShell } from '@shell/apis';
20
21
  * import MyCustomModal from './MyCustomModal.vue';
21
22
  *
22
- * export default {
23
- * methods: {
24
- * myAction() {
25
- * console.log('Performed an action');
26
- * },
27
- * showModal() {
28
- * this.$shell.modal.open(MyCustomModal, {
29
- * props: { onConfirm: this.myAction }
30
- * });
31
- * }
32
- * }
23
+ * const shell = useShell();
24
+ *
25
+ * function myAction() {
26
+ * console.log('Performed an action');
27
+ * }
28
+ *
29
+ * function showModal() {
30
+ * shell.modal.open(MyCustomModal, {
31
+ * props: { onConfirm: myAction }
32
+ * });
33
33
  * }
34
34
  * ```
35
35
  *
36
36
  * ```ts
37
- * export default {
38
- * props: {
39
- * onConfirm: {
40
- * type: Function,
41
- * required: true
42
- * }
43
- * },
44
- * methods:.
45
- * confirm() {
46
- * this.onConfirm();
47
- * this.$emit('close');
48
- * }
49
- * }
37
+ * const props = defineProps<{ onConfirm: () => void }>();
38
+ * const emit = defineEmits<{ close: [] }>();
39
+ *
40
+ * function confirm() {
41
+ * props.onConfirm();
42
+ * emit('close');
50
43
  * }
51
44
  * ```
52
45
  */
@@ -108,13 +101,15 @@ export interface ModalApi {
108
101
  *
109
102
  * Example:
110
103
  * ```ts
104
+ * import { useShell } from '@shell/apis';
111
105
  * import MyCustomModal from '@/components/MyCustomModal.vue';
112
106
  *
113
- * this.$shell.modal.open(MyCustomModal, {
107
+ * const shell = useShell();
108
+ *
109
+ * shell.modal.open(MyCustomModal, {
114
110
  * props: { title: 'Hello Modal' }
115
111
  * });
116
112
  * ```
117
- * For usage with the Composition API check usage guide [here](../../shell-api#using-composition-api-in-vue).
118
113
  *
119
114
  * @param component
120
115
  * The Vue component to be displayed inside the modal.