/**
 * Copyright (c) OpenLens Maintainers. All rights reserved.
 * Licensed under MIT License. See LICENSE in root directory for more information.
 */
import type { ResourceApplyingStack } from "../../common/k8s/resource-stack";
import type { KubernetesCluster } from "./catalog";
import type { KubeApiDataFrom, KubeObjectStoreOptions } from "../../common/k8s-api/kube-object.store";
import { KubeObjectStore as InternalKubeObjectStore } from "../../common/k8s-api/kube-object.store";
import type { KubeJsonApiDataFor, KubeObject } from "@openlens/kube-object";
import type { DerivedKubeApiOptions, KubeApiOptions } from "../../common/k8s-api/kube-api";
import { KubeApi as InternalKubeApi } from "../../common/k8s-api/kube-api";
import type { ClusterContext } from "../../renderer/cluster-frame-context/cluster-frame-context";
import { DeploymentApi as InternalDeploymentApi, IngressApi as InternalIngressApi, NodeApi, PersistentVolumeClaimApi, PodApi } from "../../common/k8s-api/endpoints";
import type { JsonApiConfig } from "@openlens/json-api";
import type { KubeJsonApi as InternalKubeJsonApi } from "../../common/k8s-api/kube-json-api";
import type { RequestInit } from "@openlens/node-fetch";
export declare const apiManager: import("../../common/k8s-api/api-manager").ApiManager;
export declare const forCluster: import("../../common/k8s-api/create-kube-api-for-cluster.injectable").CreateKubeApiForCluster;
export declare const forRemoteCluster: import("../../common/k8s-api/create-kube-api-for-remote-cluster.injectable").CreateKubeApiForRemoteCluster;
export declare const createResourceStack: import("../../common/k8s/create-resource-stack.injectable").CreateResourceStack;
export declare const getPodsByOwnerId: import("../../renderer/components/workloads-pods/get-pods-by-owner-id.injectable").GetPodsByOwnerId;
export interface ExternalKubeApiOptions {
    /**
     * If `true` then on creation of the `KubeApi`instance a call to `apiManager.registerApi` will be
     * made. This is `true` by default to maintain backwards compatibility.
     *
     * Setting this to `false` might make `KubeObject`'s details drawer stop working.
     *
     * @default true
     */
    autoRegister?: boolean;
}
export type KubeApi<Object extends KubeObject = KubeObject, Data extends KubeJsonApiDataFor<Object> = KubeJsonApiDataFor<Object>> = InternalKubeApi<Object, Data>;
export declare const KubeApi: new <Object_1 extends KubeObject<import("@openlens/kube-object").KubeObjectMetadata<import("@openlens/kube-object").KubeObjectScope>, unknown, unknown> = KubeObject<import("@openlens/kube-object").KubeObjectMetadata<import("@openlens/kube-object").KubeObjectScope>, unknown, unknown>, Data extends KubeJsonApiDataFor<Object_1> = KubeJsonApiDataFor<Object_1>>(opts: KubeApiOptions<Object_1, Data> & ExternalKubeApiOptions) => InternalKubeApi<Object_1, Data>;
/**
 * @deprecated Switch to using `Common.createResourceStack` instead
 */
export declare class ResourceStack implements ResourceApplyingStack {
    private readonly impl;
    constructor(cluster: KubernetesCluster, name: string);
    kubectlApplyFolder(folderPath: string, templateContext?: any, extraArgs?: string[] | undefined): Promise<string>;
    kubectlDeleteFolder(folderPath: string, templateContext?: any, extraArgs?: string[] | undefined): Promise<string>;
}
/**
 * @deprecated This type is unused
 */
export interface IKubeApiCluster {
    metadata: {
        uid: string;
    };
}
export type { CreateKubeApiForRemoteClusterConfig as IRemoteKubeApiConfig } from "../../common/k8s-api/create-kube-api-for-remote-cluster.injectable";
export type { CreateKubeApiForLocalClusterConfig as ILocalKubeApiConfig } from "../../common/k8s-api/create-kube-api-for-cluster.injectable";
export { KubeObject, KubeStatus, isJsonApiData, isJsonApiDataList, isKubeJsonApiListMetadata, isKubeJsonApiMetadata, isKubeObjectNonSystem, isKubeStatusData, isPartialJsonApiData, isPartialJsonApiMetadata, createKubeObject, stringifyLabels, } from "@openlens/kube-object";
export type { OwnerReference, KubeObjectMetadata, NamespaceScopedMetadata, ClusterScopedMetadata, BaseKubeJsonApiObjectMetadata, KubeJsonApiObjectMetadata, KubeStatusData, KubeJsonApiDataFor, KubeJsonApiData, } from "@openlens/kube-object";
export type KubeJsonApi = InternalKubeJsonApi;
export declare const KubeJsonApi: (new (config: JsonApiConfig, reqInit?: RequestInit) => InternalKubeJsonApi) & {
    forCluster: import("../../common/k8s-api/create-kube-json-api-for-cluster.injectable").CreateKubeJsonApiForCluster;
};
export declare abstract class KubeObjectStore<K extends KubeObject = KubeObject, A extends InternalKubeApi<K, D> = InternalKubeApi<K, KubeJsonApiDataFor<K>>, D extends KubeJsonApiDataFor<K> = KubeApiDataFrom<K, A>> extends InternalKubeObjectStore<K, A, D> {
    /**
     * @deprecated This is no longer used and shouldn't have been every really used
     */
    static readonly context: {
        set: (ctx: ClusterContext) => void;
        get: () => ClusterContext;
    };
    get context(): ClusterContext;
    constructor(api: A, opts?: KubeObjectStoreOptions);
    /**
     * @deprecated Supply API instance through constructor
     */
    constructor();
}
export type { JsonPatch, KubeObjectStoreLoadAllParams, KubeObjectStoreLoadingParams, KubeObjectStoreSubscribeParams, } from "../../common/k8s-api/kube-object.store";
/**
 * @deprecated This type is only present for backwards compatible typescript support
 */
export interface IgnoredKubeApiOptions {
    /**
     * @deprecated this option is overridden and should not be used
     */
    objectConstructor?: any;
    /**
     * @deprecated this option is overridden and should not be used
     */
    kind?: any;
    /**
     * @deprecated this option is overridden and should not be used
     */
    isNamespaces?: any;
    /**
     * @deprecated this option is overridden and should not be used
     */
    apiBase?: any;
}
export type PodsApi = PodApi;
export declare const PodsApi: new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => PodApi;
export type NodesApi = NodeApi;
export declare const NodesApi: new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => NodeApi;
export type DeploymentApi = InternalDeploymentApi;
export declare const DeploymentApi: new (opts?: DerivedKubeApiOptions) => InternalDeploymentApi;
export type IngressApi = InternalIngressApi;
export declare const IngressApi: new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => InternalIngressApi;
export type PersistentVolumeClaimsApi = PersistentVolumeClaimApi;
export declare const PersistentVolumeClaimsApi: new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => PersistentVolumeClaimApi;
export { type Container as IPodContainer, type PodContainerStatus as IPodContainerStatus, Pod, Node, Deployment, DaemonSet, StatefulSet, Job, CronJob, ConfigMap, type SecretReference as ISecretRef, Secret, ReplicaSet, ResourceQuota, LimitRange, HorizontalPodAutoscaler, PodDisruptionBudget, PriorityClass, Service, Endpoints as Endpoint, Ingress, NetworkPolicy, PersistentVolume, PersistentVolumeClaim, StorageClass, Namespace, KubeEvent, ServiceAccount, Role, RoleBinding, ClusterRole, ClusterRoleBinding, CustomResourceDefinition, } from "@openlens/kube-object";
