/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; import { apiKubePrefix } from "../vars"; import isDevelopmentInjectable from "../vars/is-development.injectable"; import apiBaseInjectable from "./api-base.injectable"; import createKubeJsonApiInjectable from "./create-kube-json-api.injectable"; import type { KubeApiOptions } from "./kube-api"; import { KubeApi } from "./kube-api"; import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "./kube-object"; export interface CreateKubeApiForLocalClusterConfig { metadata: { uid: string; }; } export interface CreateKubeApiForCluster { , Data extends KubeJsonApiDataFor>( cluster: CreateKubeApiForLocalClusterConfig, kubeClass: KubeObjectConstructor, apiClass: new (apiOpts: KubeApiOptions) => Api ): Api; >( cluster: CreateKubeApiForLocalClusterConfig, kubeClass: KubeObjectConstructor, apiClass?: new (apiOpts: KubeApiOptions) => KubeApi ): KubeApi; } const createKubeApiForClusterInjectable = getInjectable({ id: "create-kube-api-for-cluster", instantiate: (di): CreateKubeApiForCluster => { const apiBase = di.inject(apiBaseInjectable); const isDevelopment = di.inject(isDevelopmentInjectable); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); return ( cluster: CreateKubeApiForLocalClusterConfig, kubeClass: KubeObjectConstructor>, apiClass = KubeApi, ) => ( new apiClass({ objectConstructor: kubeClass, request: createKubeJsonApi( { serverAddress: apiBase.config.serverAddress, apiBase: apiKubePrefix, debug: isDevelopment, }, { headers: { "Host": `${cluster.metadata.uid}.lens.app:${new URL(apiBase.config.serverAddress).port}`, }, }, ), }) ); }, }); export default createKubeApiForClusterInjectable;