@backstage/plugin-kubernetes-node 0.4.7 → 0.4.8-next.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @backstage/plugin-kubernetes-node
2
2
 
3
+ ## 0.4.8-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - d9a57de: Add `KubernetesWatcher` interface for streaming Kubernetes resource changes via an async iterator. The watcher is separated from `KubernetesFetcher` because watching is a long-lived streaming connection that only works with server-side auth providers. Watch supports all event types (ADDED, MODIFIED, DELETED, BOOKMARK, ERROR) with errors yielded as data rather than thrown.
8
+ - Updated dependencies
9
+ - @backstage/plugin-kubernetes-common@0.9.13-next.0
10
+
3
11
  ## 0.4.7
4
12
 
5
13
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { BackstageCredentials, LoggerService } from '@backstage/backend-plugin-a
3
3
  import { AuthenticationStrategy as AuthenticationStrategy$1, KubernetesClustersSupplier as KubernetesClustersSupplier$1, KubernetesFetcher as KubernetesFetcher$1, KubernetesObjectsProvider as KubernetesObjectsProvider$1, KubernetesServiceLocator as KubernetesServiceLocator$1, CustomResource as CustomResource$1, ObjectToFetch as ObjectToFetch$1 } from '@backstage/plugin-kubernetes-node';
4
4
  import express from 'express';
5
5
  import { Entity } from '@backstage/catalog-model';
6
- import { CustomResourceMatcher, KubernetesRequestAuth, KubernetesFetchError, FetchResponse, ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common';
6
+ import { CustomResourceMatcher, KubernetesRequestAuth, KubernetesFetchError, FetchResponse, ObjectsByEntityResponse, KubernetesWatchOptions, KubernetesWatchEvent } from '@backstage/plugin-kubernetes-common';
7
7
  import { JsonObject } from '@backstage/types';
8
8
 
9
9
  /**
@@ -317,6 +317,22 @@ interface FetchResponseWrapper {
317
317
  errors: KubernetesFetchError[];
318
318
  responses: FetchResponse[];
319
319
  }
320
+ /**
321
+ * Parameters identifying the Kubernetes resource to watch
322
+ * @public
323
+ */
324
+ interface KubernetesWatchParams {
325
+ /** Cluster connection details */
326
+ clusterDetails: ClusterDetails;
327
+ /** Authentication credentials */
328
+ credential: KubernetesCredential;
329
+ /** API group (empty string for core resources) */
330
+ group: string;
331
+ /** API version (e.g., 'v1', 'v1beta1') */
332
+ apiVersion: string;
333
+ /** Resource plural name (e.g., 'pods', 'deployments') */
334
+ plural: string;
335
+ }
320
336
  /**
321
337
  * Fetches information from a kubernetes cluster using the cluster details object to target a specific cluster
322
338
  *
@@ -326,6 +342,32 @@ interface KubernetesFetcher {
326
342
  fetchObjectsForService(params: ObjectFetchParams): Promise<FetchResponseWrapper>;
327
343
  fetchPodMetricsByNamespaces(clusterDetails: ClusterDetails, credential: KubernetesCredential, namespaces: Set<string>, labelSelector?: string): Promise<FetchResponseWrapper>;
328
344
  }
345
+ /**
346
+ * Watches Kubernetes resources for changes.
347
+ *
348
+ * Separated from {@link KubernetesFetcher} because watching is a long-lived
349
+ * streaming connection that only works with server-side auth providers.
350
+ *
351
+ * @public
352
+ */
353
+ interface KubernetesWatcher {
354
+ /**
355
+ * Watch Kubernetes resources for changes.
356
+ *
357
+ * Returns an AsyncGenerator whose three type parameters are:
358
+ * - Yield (`KubernetesWatchEvent`): each `yield` produces a watch event.
359
+ * Errors are yielded as `{ type: 'ERROR', error }` (errors-as-data),
360
+ * not thrown, so consumers handle them in the same `for await` loop.
361
+ * - Return (`void`): the generator never produces a meaningful completion
362
+ * value — it ends with bare `return` or by exhausting the stream.
363
+ * - Next (`undefined`): the consumer cannot send values into the generator
364
+ * via `.next(value)`; this is a produce-only stream.
365
+ *
366
+ * @param params - Cluster, credentials, and resource identification
367
+ * @param options - Optional watch parameters (filters, signal, etc.)
368
+ */
369
+ watchResource(params: KubernetesWatchParams, options?: KubernetesWatchOptions): AsyncGenerator<KubernetesWatchEvent, void, undefined>;
370
+ }
329
371
  /**
330
372
  * @public
331
373
  */
@@ -381,4 +423,4 @@ declare class PinnipedHelper {
381
423
  }
382
424
 
383
425
  export { PinnipedHelper, kubernetesAuthStrategyExtensionPoint, kubernetesClusterSupplierExtensionPoint, kubernetesFetcherExtensionPoint, kubernetesObjectsProviderExtensionPoint, kubernetesRouterExtensionPoint, kubernetesServiceLocatorExtensionPoint };
384
- export type { AuthMetadata, AuthenticationStrategy, ClusterDetails, CustomResource, CustomResourcesByEntity, FetchResponseWrapper, KubernetesAuthStrategyExtensionPoint, KubernetesClusterSupplierExtensionPoint, KubernetesClusterSupplierFactory, KubernetesClustersSupplier, KubernetesCredential, KubernetesFetcher, KubernetesFetcherExtensionPoint, KubernetesFetcherFactory, KubernetesObjectTypes, KubernetesObjectsByEntity, KubernetesObjectsProvider, KubernetesObjectsProviderExtensionPoint, KubernetesObjectsProviderFactory, KubernetesRouterExtensionPoint, KubernetesRouterFactory, KubernetesServiceLocator, KubernetesServiceLocatorExtensionPoint, KubernetesServiceLocatorFactory, ObjectFetchParams, ObjectToFetch, PinnipedClientCerts, PinnipedParameters, ServiceLocatorRequestContext };
426
+ export type { AuthMetadata, AuthenticationStrategy, ClusterDetails, CustomResource, CustomResourcesByEntity, FetchResponseWrapper, KubernetesAuthStrategyExtensionPoint, KubernetesClusterSupplierExtensionPoint, KubernetesClusterSupplierFactory, KubernetesClustersSupplier, KubernetesCredential, KubernetesFetcher, KubernetesFetcherExtensionPoint, KubernetesFetcherFactory, KubernetesObjectTypes, KubernetesObjectsByEntity, KubernetesObjectsProvider, KubernetesObjectsProviderExtensionPoint, KubernetesObjectsProviderFactory, KubernetesRouterExtensionPoint, KubernetesRouterFactory, KubernetesServiceLocator, KubernetesServiceLocatorExtensionPoint, KubernetesServiceLocatorFactory, KubernetesWatchParams, KubernetesWatcher, ObjectFetchParams, ObjectToFetch, PinnipedClientCerts, PinnipedParameters, ServiceLocatorRequestContext };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-kubernetes-node",
3
- "version": "0.4.7",
3
+ "version": "0.4.8-next.0",
4
4
  "description": "Node.js library for the kubernetes plugin",
5
5
  "backstage": {
6
6
  "role": "node-library",
@@ -38,20 +38,20 @@
38
38
  "test": "backstage-cli package test"
39
39
  },
40
40
  "dependencies": {
41
- "@backstage/backend-plugin-api": "^1.10.0",
42
- "@backstage/catalog-model": "^1.10.0",
43
- "@backstage/plugin-kubernetes-common": "^0.9.12",
44
- "@backstage/types": "^1.2.2",
41
+ "@backstage/backend-plugin-api": "1.10.0",
42
+ "@backstage/catalog-model": "1.10.0",
43
+ "@backstage/plugin-kubernetes-common": "0.9.13-next.0",
44
+ "@backstage/types": "1.2.2",
45
45
  "@kubernetes/client-node": "1.4.0",
46
46
  "@types/express": "^4.17.6",
47
47
  "node-fetch": "^2.7.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@backstage/backend-app-api": "^1.7.3",
51
- "@backstage/backend-defaults": "^0.17.7",
52
- "@backstage/backend-test-utils": "^1.11.6",
53
- "@backstage/cli": "^0.36.5",
54
- "@backstage/plugin-kubernetes-backend": "^0.21.7",
50
+ "@backstage/backend-app-api": "1.7.3",
51
+ "@backstage/backend-defaults": "0.17.7",
52
+ "@backstage/backend-test-utils": "1.11.6",
53
+ "@backstage/cli": "0.36.6-next.0",
54
+ "@backstage/plugin-kubernetes-backend": "0.21.10-next.0",
55
55
  "msw": "^1.3.1",
56
56
  "supertest": "^7.0.0"
57
57
  },