mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Add new injectable for create KubeJsonApi and JsonApi instances
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
5f612dd595
commit
4bef236f8c
26
src/common/k8s-api/create-json-api.injectable.ts
Normal file
26
src/common/k8s-api/create-json-api.injectable.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* 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 type { RequestInit } from "node-fetch";
|
||||||
|
import fetchInjectable from "../fetch/fetch.injectable";
|
||||||
|
import loggerInjectable from "../logger.injectable";
|
||||||
|
import type { JsonApiConfig, JsonApiData, JsonApiDependencies, JsonApiParams } from "./json-api";
|
||||||
|
import { JsonApi } from "./json-api";
|
||||||
|
|
||||||
|
export type CreateJsonApi = <Data = JsonApiData, Params extends JsonApiParams<Data> = JsonApiParams<Data>>(config: JsonApiConfig, reqInit?: RequestInit) => JsonApi<Data, Params>;
|
||||||
|
|
||||||
|
const createJsonApiInjectable = getInjectable({
|
||||||
|
id: "create-json-api",
|
||||||
|
instantiate: (di): CreateJsonApi => {
|
||||||
|
const deps: JsonApiDependencies = {
|
||||||
|
fetch: di.inject(fetchInjectable),
|
||||||
|
logger: di.inject(loggerInjectable),
|
||||||
|
};
|
||||||
|
|
||||||
|
return (config, reqInit) => new JsonApi(deps, config, reqInit);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default createJsonApiInjectable;
|
||||||
@ -3,15 +3,12 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import fetchInjectable from "../fetch/fetch.injectable";
|
|
||||||
import loggerInjectable from "../logger.injectable";
|
|
||||||
import { apiKubePrefix } from "../vars";
|
import { apiKubePrefix } from "../vars";
|
||||||
import isDevelopmentInjectable from "../vars/is-development.injectable";
|
import isDevelopmentInjectable from "../vars/is-development.injectable";
|
||||||
import { apiBaseInjectionToken } from "./api-base";
|
import { apiBaseInjectionToken } from "./api-base";
|
||||||
import type { JsonApiDependencies } from "./json-api";
|
import createKubeJsonApiInjectable from "./create-kube-json-api.injectable";
|
||||||
import type { KubeApiOptions } from "./kube-api";
|
import type { KubeApiOptions } from "./kube-api";
|
||||||
import { KubeApi } from "./kube-api";
|
import { KubeApi } from "./kube-api";
|
||||||
import { KubeJsonApi } from "./kube-json-api";
|
|
||||||
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "./kube-object";
|
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "./kube-object";
|
||||||
|
|
||||||
export interface CreateKubeApiForLocalClusterConfig {
|
export interface CreateKubeApiForLocalClusterConfig {
|
||||||
@ -38,28 +35,28 @@ const createKubeApiForClusterInjectable = getInjectable({
|
|||||||
instantiate: (di): CreateKubeApiForCluster => {
|
instantiate: (di): CreateKubeApiForCluster => {
|
||||||
const apiBase = di.inject(apiBaseInjectionToken);
|
const apiBase = di.inject(apiBaseInjectionToken);
|
||||||
const isDevelopment = di.inject(isDevelopmentInjectable);
|
const isDevelopment = di.inject(isDevelopmentInjectable);
|
||||||
const dependencies: JsonApiDependencies = {
|
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
|
||||||
fetch: di.inject(fetchInjectable),
|
|
||||||
logger: di.inject(loggerInjectable),
|
|
||||||
};
|
|
||||||
|
|
||||||
return (cluster: CreateKubeApiForLocalClusterConfig, kubeClass: KubeObjectConstructor<KubeObject, KubeJsonApiDataFor<KubeObject>>, apiClass = KubeApi) => {
|
return (
|
||||||
const url = new URL(apiBase.config.serverAddress);
|
cluster: CreateKubeApiForLocalClusterConfig,
|
||||||
const request = new KubeJsonApi(dependencies, {
|
kubeClass: KubeObjectConstructor<KubeObject, KubeJsonApiDataFor<KubeObject>>,
|
||||||
serverAddress: apiBase.config.serverAddress,
|
apiClass = KubeApi,
|
||||||
apiBase: apiKubePrefix,
|
) => (
|
||||||
debug: isDevelopment,
|
new apiClass({
|
||||||
}, {
|
|
||||||
headers: {
|
|
||||||
"Host": `${cluster.metadata.uid}.localhost:${url.port}`,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return new apiClass({
|
|
||||||
objectConstructor: kubeClass,
|
objectConstructor: kubeClass,
|
||||||
request,
|
request: createKubeJsonApi(
|
||||||
});
|
{
|
||||||
};
|
serverAddress: apiBase.config.serverAddress,
|
||||||
|
apiBase: apiKubePrefix,
|
||||||
|
debug: isDevelopment,
|
||||||
|
}, {
|
||||||
|
headers: {
|
||||||
|
"Host": `${cluster.metadata.uid}.localhost:${new URL(apiBase.config.serverAddress).port}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
})
|
||||||
|
);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -6,13 +6,10 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import type { AgentOptions } from "https";
|
import type { AgentOptions } from "https";
|
||||||
import { Agent } from "https";
|
import { Agent } from "https";
|
||||||
import type { RequestInit } from "node-fetch";
|
import type { RequestInit } from "node-fetch";
|
||||||
import fetchInjectable from "../fetch/fetch.injectable";
|
|
||||||
import loggerInjectable from "../logger.injectable";
|
|
||||||
import isDevelopmentInjectable from "../vars/is-development.injectable";
|
import isDevelopmentInjectable from "../vars/is-development.injectable";
|
||||||
import type { JsonApiDependencies } from "./json-api";
|
import createKubeJsonApiInjectable from "./create-kube-json-api.injectable";
|
||||||
import type { KubeApiOptions } from "./kube-api";
|
import type { KubeApiOptions } from "./kube-api";
|
||||||
import { KubeApi } from "./kube-api";
|
import { KubeApi } from "./kube-api";
|
||||||
import { KubeJsonApi } from "./kube-json-api";
|
|
||||||
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "./kube-object";
|
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "./kube-object";
|
||||||
|
|
||||||
export interface CreateKubeApiForRemoteClusterConfig {
|
export interface CreateKubeApiForRemoteClusterConfig {
|
||||||
@ -52,10 +49,7 @@ const createKubeApiForRemoteClusterInjectable = getInjectable({
|
|||||||
id: "create-kube-api-for-remote-cluster",
|
id: "create-kube-api-for-remote-cluster",
|
||||||
instantiate: (di): CreateKubeApiForRemoteCluster => {
|
instantiate: (di): CreateKubeApiForRemoteCluster => {
|
||||||
const isDevelopment = di.inject(isDevelopmentInjectable);
|
const isDevelopment = di.inject(isDevelopmentInjectable);
|
||||||
const dependencies: JsonApiDependencies = {
|
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
|
||||||
fetch: di.inject(fetchInjectable),
|
|
||||||
logger: di.inject(loggerInjectable),
|
|
||||||
};
|
|
||||||
|
|
||||||
return (config: CreateKubeApiForRemoteClusterConfig, kubeClass: KubeObjectConstructor<KubeObject, KubeJsonApiDataFor<KubeObject>>, apiClass = KubeApi) => {
|
return (config: CreateKubeApiForRemoteClusterConfig, kubeClass: KubeObjectConstructor<KubeObject, KubeJsonApiDataFor<KubeObject>>, apiClass = KubeApi) => {
|
||||||
const reqInit: RequestInit = {};
|
const reqInit: RequestInit = {};
|
||||||
@ -86,7 +80,7 @@ const createKubeApiForRemoteClusterInjectable = getInjectable({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const token = config.user.token;
|
const token = config.user.token;
|
||||||
const request = new KubeJsonApi(dependencies, {
|
const request = createKubeJsonApi({
|
||||||
serverAddress: config.cluster.server,
|
serverAddress: config.cluster.server,
|
||||||
apiBase: "",
|
apiBase: "",
|
||||||
debug: isDevelopment,
|
debug: isDevelopment,
|
||||||
|
|||||||
@ -3,12 +3,10 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import fetchInjectable from "../fetch/fetch.injectable";
|
|
||||||
import loggerInjectable from "../logger.injectable";
|
|
||||||
import { apiKubePrefix, isDebugging } from "../vars";
|
import { apiKubePrefix, isDebugging } from "../vars";
|
||||||
import { apiBaseInjectionToken } from "./api-base";
|
import { apiBaseInjectionToken } from "./api-base";
|
||||||
import type { JsonApiDependencies } from "./json-api";
|
import createKubeJsonApiInjectable from "./create-kube-json-api.injectable";
|
||||||
import { KubeJsonApi } from "./kube-json-api";
|
import type { KubeJsonApi } from "./kube-json-api";
|
||||||
|
|
||||||
export type CreateKubeJsonApiForCluster = (clusterId: string) => KubeJsonApi;
|
export type CreateKubeJsonApiForCluster = (clusterId: string) => KubeJsonApi;
|
||||||
|
|
||||||
@ -16,24 +14,20 @@ const createKubeJsonApiForClusterInjectable = getInjectable({
|
|||||||
id: "create-kube-json-api-for-cluster",
|
id: "create-kube-json-api-for-cluster",
|
||||||
instantiate: (di): CreateKubeJsonApiForCluster => {
|
instantiate: (di): CreateKubeJsonApiForCluster => {
|
||||||
const apiBase = di.inject(apiBaseInjectionToken);
|
const apiBase = di.inject(apiBaseInjectionToken);
|
||||||
const dependencies: JsonApiDependencies = {
|
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
|
||||||
fetch: di.inject(fetchInjectable),
|
|
||||||
logger: di.inject(loggerInjectable),
|
|
||||||
};
|
|
||||||
|
|
||||||
return (clusterId) => {
|
return (clusterId) => createKubeJsonApi(
|
||||||
const url = new URL(apiBase.config.serverAddress);
|
{
|
||||||
|
|
||||||
return new KubeJsonApi(dependencies, {
|
|
||||||
serverAddress: apiBase.config.serverAddress,
|
serverAddress: apiBase.config.serverAddress,
|
||||||
apiBase: apiKubePrefix,
|
apiBase: apiKubePrefix,
|
||||||
debug: isDebugging,
|
debug: isDebugging,
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
headers: {
|
headers: {
|
||||||
"Host": `${clusterId}.localhost:${url.port}`,
|
"Host": `${clusterId}.localhost:${new URL(apiBase.config.serverAddress).port}`,
|
||||||
},
|
},
|
||||||
});
|
},
|
||||||
};
|
);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
26
src/common/k8s-api/create-kube-json-api.injectable.ts
Normal file
26
src/common/k8s-api/create-kube-json-api.injectable.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* 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 type { RequestInit } from "node-fetch";
|
||||||
|
import fetchInjectable from "../fetch/fetch.injectable";
|
||||||
|
import loggerInjectable from "../logger.injectable";
|
||||||
|
import type { JsonApiConfig, JsonApiDependencies } from "./json-api";
|
||||||
|
import { KubeJsonApi } from "./kube-json-api";
|
||||||
|
|
||||||
|
export type CreateKubeJsonApi = (config: JsonApiConfig, reqInit?: RequestInit) => KubeJsonApi;
|
||||||
|
|
||||||
|
const createKubeJsonApiInjectable = getInjectable({
|
||||||
|
id: "create-kube-json-api",
|
||||||
|
instantiate: (di): CreateKubeJsonApi => {
|
||||||
|
const dependencies: JsonApiDependencies = {
|
||||||
|
fetch: di.inject(fetchInjectable),
|
||||||
|
logger: di.inject(loggerInjectable),
|
||||||
|
};
|
||||||
|
|
||||||
|
return (config, reqInit) => new KubeJsonApi(dependencies, config, reqInit);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default createKubeJsonApiInjectable;
|
||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { apiBaseInjectionToken } from "../../common/k8s-api/api-base";
|
import { apiBaseInjectionToken } from "../../common/k8s-api/api-base";
|
||||||
import { JsonApi } from "../../common/k8s-api/json-api";
|
import createJsonApiInjectable from "../../common/k8s-api/create-json-api.injectable";
|
||||||
import { apiPrefix, isDebugging } from "../../common/vars";
|
import { apiPrefix, isDebugging } from "../../common/vars";
|
||||||
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
|
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
|
||||||
import lensProxyPortInjectable from "../lens-proxy/lens-proxy-port.injectable";
|
import lensProxyPortInjectable from "../lens-proxy/lens-proxy-port.injectable";
|
||||||
@ -13,8 +13,9 @@ const apiBaseInjectable = getInjectable({
|
|||||||
id: "api-base",
|
id: "api-base",
|
||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const proxyPort = di.inject(lensProxyPortInjectable);
|
const proxyPort = di.inject(lensProxyPortInjectable);
|
||||||
|
const createJsonApi = di.inject(createJsonApiInjectable);
|
||||||
|
|
||||||
return new JsonApi({
|
return createJsonApi({
|
||||||
serverAddress: `http://127.0.0.1:${proxyPort.get()}`,
|
serverAddress: `http://127.0.0.1:${proxyPort.get()}`,
|
||||||
apiBase: apiPrefix,
|
apiBase: apiPrefix,
|
||||||
debug: di.inject(isDevelopmentInjectable) || isDebugging,
|
debug: di.inject(isDevelopmentInjectable) || isDebugging,
|
||||||
|
|||||||
@ -4,21 +4,28 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { apiBaseInjectionToken } from "../../common/k8s-api/api-base";
|
import { apiBaseInjectionToken } from "../../common/k8s-api/api-base";
|
||||||
import { JsonApi } from "../../common/k8s-api/json-api";
|
import createJsonApiInjectable from "../../common/k8s-api/create-json-api.injectable";
|
||||||
import { apiPrefix, isDebugging } from "../../common/vars";
|
import { apiPrefix, isDebugging } from "../../common/vars";
|
||||||
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
|
import isDevelopmentInjectable from "../../common/vars/is-development.injectable";
|
||||||
|
|
||||||
const apiBaseInjectable = getInjectable({
|
const apiBaseInjectable = getInjectable({
|
||||||
id: "api-base",
|
id: "api-base",
|
||||||
instantiate: (di) => new JsonApi({
|
instantiate: (di) => {
|
||||||
serverAddress: `http://127.0.0.1:${window.location.port}`,
|
const createJsonApi = di.inject(createJsonApiInjectable);
|
||||||
apiBase: apiPrefix,
|
|
||||||
debug: di.inject(isDevelopmentInjectable) || isDebugging,
|
return createJsonApi(
|
||||||
}, {
|
{
|
||||||
headers: {
|
serverAddress: `http://127.0.0.1:${window.location.port}`,
|
||||||
"Host": window.location.host,
|
apiBase: apiPrefix,
|
||||||
},
|
debug: di.inject(isDevelopmentInjectable) || isDebugging,
|
||||||
}),
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"Host": window.location.host,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
injectionToken: apiBaseInjectionToken,
|
injectionToken: apiBaseInjectionToken,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user