/// <reference types="node" />
import { Agent } from "https";
import type { KubeApiOptions } from "./kube-api";
import { KubeApi } from "./kube-api";
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "@openlens/kube-object";
export interface CreateKubeApiForRemoteClusterConfig {
    cluster: {
        server: string;
        caData?: string;
        skipTLSVerify?: boolean;
    };
    user: {
        token?: string | (() => Promise<string>);
        clientCertificateData?: string;
        clientKeyData?: string;
    };
    /**
     * Custom instance of https.agent to use for the requests
     *
     * @remarks the custom agent replaced default agent, options skipTLSVerify,
     * clientCertificateData, clientKeyData and caData are ignored.
     */
    agent?: Agent;
}
export type KubeApiConstructor<Object extends KubeObject, Api extends KubeApi<Object>> = new (apiOpts: KubeApiOptions<Object>) => Api;
export interface CreateKubeApiForRemoteCluster {
    <Object extends KubeObject, Api extends KubeApi<Object>, Data extends KubeJsonApiDataFor<Object>>(config: CreateKubeApiForRemoteClusterConfig, kubeClass: KubeObjectConstructor<Object, Data>, apiClass: KubeApiConstructor<Object, Api>): Api;
    <Object extends KubeObject, Data extends KubeJsonApiDataFor<Object>>(config: CreateKubeApiForRemoteClusterConfig, kubeClass: KubeObjectConstructor<Object, Data>, apiClass?: KubeApiConstructor<Object, KubeApi<Object>>): KubeApi<Object>;
}
declare const createKubeApiForRemoteClusterInjectable: import("@ogre-tools/injectable").Injectable<CreateKubeApiForRemoteCluster, unknown, void>;
export default createKubeApiForRemoteClusterInjectable;
