From 5c6402b60a1ab2b8315c9c8a6a85c61cd503ea9a Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 16 Dec 2022 13:13:57 -0800 Subject: [PATCH] Make apiBase not an InjectionToken and make openNodeShellSession not special (#6774) * Replace apiBaseInjectionToken with tokens for configuration instead Signed-off-by: Sebastian Malton * Use new ordering to make openNodeShellSession non-special Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- src/common/k8s-api/api-base-configs.ts | 14 ++++++++ src/common/k8s-api/api-base.injectable.ts | 33 +++++++++++++++++ src/common/k8s-api/api-base.ts | 11 ------ .../create-kube-api-for-cluster.injectable.ts | 4 +-- ...te-kube-json-api-for-cluster.injectable.ts | 7 ++-- .../request-charts.injectable.ts | 4 +-- .../request-readme.injectable.ts | 4 +-- .../request-values.injectable.ts | 4 +-- .../request-versions.injectable.ts | 4 +-- .../request-configuration.injectable.ts | 4 +-- .../request-create.injectable.ts | 4 +-- .../request-delete.injectable.ts | 4 +-- .../request-details.injectable.ts | 4 +-- .../request-history.injectable.ts | 4 +-- .../request-releases.injectable.ts | 4 +-- .../request-rollback.injectable.ts | 4 +-- .../request-update.injectable.ts | 4 +-- .../request-values.injectable.ts | 4 +-- .../metrics.api/request-metrics.injectable.ts | 4 +-- .../request-providers.injectable.ts | 4 +-- .../request-patch.injectable.ts | 4 +-- .../request-update.injectable.ts | 4 +-- .../k8s/api-base-host-header.injectable.ts | 19 ++++++++++ .../k8s/api-base-server-address.injectable.ts | 19 ++++++++++ src/main/k8s/api-base.injectable.ts | 33 ----------------- .../create-shell-session.injectable.ts | 3 +- .../node-shell-session/open.injectable.ts | 17 +++++---- ...e-account-kube-config-dialog.injectable.ts | 2 +- .../k8s/api-base-host-header.injectable.ts | 15 ++++++++ .../k8s/api-base-server-address.injectable.ts | 19 ++++++++++ src/renderer/k8s/api-base.injectable.ts | 36 ------------------- .../port-forward-store.injectable.ts | 4 +-- .../request-active-port-forward.injectable.ts | 4 +-- 33 files changed, 175 insertions(+), 133 deletions(-) create mode 100644 src/common/k8s-api/api-base-configs.ts create mode 100644 src/common/k8s-api/api-base.injectable.ts delete mode 100644 src/common/k8s-api/api-base.ts create mode 100644 src/main/k8s/api-base-host-header.injectable.ts create mode 100644 src/main/k8s/api-base-server-address.injectable.ts delete mode 100644 src/main/k8s/api-base.injectable.ts create mode 100644 src/renderer/k8s/api-base-host-header.injectable.ts create mode 100644 src/renderer/k8s/api-base-server-address.injectable.ts delete mode 100644 src/renderer/k8s/api-base.injectable.ts diff --git a/src/common/k8s-api/api-base-configs.ts b/src/common/k8s-api/api-base-configs.ts new file mode 100644 index 0000000000..5ac67229ec --- /dev/null +++ b/src/common/k8s-api/api-base-configs.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getInjectionToken } from "@ogre-tools/injectable"; + +export const apiBaseServerAddressInjectionToken = getInjectionToken({ + id: "api-base-config-server-address-token", +}); + +export const apiBaseHostHeaderInjectionToken = getInjectionToken({ + id: "api-base-host-header-token", +}); diff --git a/src/common/k8s-api/api-base.injectable.ts b/src/common/k8s-api/api-base.injectable.ts new file mode 100644 index 0000000000..b340882672 --- /dev/null +++ b/src/common/k8s-api/api-base.injectable.ts @@ -0,0 +1,33 @@ +/** + * 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 { apiPrefix } from "../vars"; +import isDebuggingInjectable from "../vars/is-debugging.injectable"; +import isDevelopmentInjectable from "../vars/is-development.injectable"; +import { apiBaseHostHeaderInjectionToken, apiBaseServerAddressInjectionToken } from "./api-base-configs"; +import createJsonApiInjectable from "./create-json-api.injectable"; + +const apiBaseInjectable = getInjectable({ + id: "api-base", + instantiate: (di) => { + const createJsonApi = di.inject(createJsonApiInjectable); + const isDebugging = di.inject(isDebuggingInjectable); + const isDevelopment = di.inject(isDevelopmentInjectable); + const serverAddress = di.inject(apiBaseServerAddressInjectionToken); + const hostHeaderValue = di.inject(apiBaseHostHeaderInjectionToken); + + return createJsonApi({ + serverAddress, + apiBase: apiPrefix, + debug: isDevelopment || isDebugging, + }, { + headers: { + "Host": hostHeaderValue, + }, + }); + }, +}); + +export default apiBaseInjectable; diff --git a/src/common/k8s-api/api-base.ts b/src/common/k8s-api/api-base.ts deleted file mode 100644 index 9544e4f60c..0000000000 --- a/src/common/k8s-api/api-base.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import type { JsonApi } from "./json-api"; -import { getInjectionToken } from "@ogre-tools/injectable"; - -export const apiBaseInjectionToken = getInjectionToken({ - id: "api-base-token", -}); diff --git a/src/common/k8s-api/create-kube-api-for-cluster.injectable.ts b/src/common/k8s-api/create-kube-api-for-cluster.injectable.ts index e7509dcbc7..eec3752e3a 100644 --- a/src/common/k8s-api/create-kube-api-for-cluster.injectable.ts +++ b/src/common/k8s-api/create-kube-api-for-cluster.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { apiKubePrefix } from "../vars"; import isDevelopmentInjectable from "../vars/is-development.injectable"; -import { apiBaseInjectionToken } from "./api-base"; +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"; @@ -33,7 +33,7 @@ export interface CreateKubeApiForCluster { const createKubeApiForClusterInjectable = getInjectable({ id: "create-kube-api-for-cluster", instantiate: (di): CreateKubeApiForCluster => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); const isDevelopment = di.inject(isDevelopmentInjectable); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); diff --git a/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts b/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts index 9901731c94..799b0bf963 100644 --- a/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts +++ b/src/common/k8s-api/create-kube-json-api-for-cluster.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { apiKubePrefix } from "../vars"; import isDebuggingInjectable from "../vars/is-debugging.injectable"; -import { apiBaseInjectionToken } from "./api-base"; +import { apiBaseHostHeaderInjectionToken, apiBaseServerAddressInjectionToken } from "./api-base-configs"; import createKubeJsonApiInjectable from "./create-kube-json-api.injectable"; import type { KubeJsonApi } from "./kube-json-api"; @@ -14,19 +14,18 @@ export type CreateKubeJsonApiForCluster = (clusterId: string) => KubeJsonApi; const createKubeJsonApiForClusterInjectable = getInjectable({ id: "create-kube-json-api-for-cluster", instantiate: (di): CreateKubeJsonApiForCluster => { - const apiBase = di.inject(apiBaseInjectionToken); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); const isDebugging = di.inject(isDebuggingInjectable); return (clusterId) => createKubeJsonApi( { - serverAddress: apiBase.config.serverAddress, + serverAddress: di.inject(apiBaseServerAddressInjectionToken), apiBase: apiKubePrefix, debug: isDebugging, }, { headers: { - "Host": `${clusterId}.localhost:${new URL(apiBase.config.serverAddress).port}`, + "Host": `${clusterId}.${di.inject(apiBaseHostHeaderInjectionToken)}`, }, }, ); diff --git a/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts b/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts index 89de5f9d17..4d9bfc55b1 100644 --- a/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts @@ -3,10 +3,10 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { apiBaseInjectionToken } from "../../api-base"; import type { RawHelmChart } from "../helm-charts.api"; import { HelmChart } from "../helm-charts.api"; import { isDefined } from "../../../utils"; +import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmCharts = () => Promise; export type RepoHelmChartList = Record; @@ -17,7 +17,7 @@ export type RepoHelmChartList = Record; const requestHelmChartsInjectable = getInjectable({ id: "request-helm-charts", instantiate: (di) => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return async () => { const data = await apiBase.get>("/v2/charts"); diff --git a/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts b/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts index c6815c4b93..4314d68578 100644 --- a/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; const requestReadmeEndpoint = urlBuilderFor("/v2/charts/:repo/:name/readme"); @@ -13,7 +13,7 @@ export type RequestHelmChartReadme = (repo: string, name: string, version?: stri const requestHelmChartReadmeInjectable = getInjectable({ id: "request-helm-chart-readme", instantiate: (di): RequestHelmChartReadme => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (repo, name, version) => ( apiBase.get(requestReadmeEndpoint.compile({ name, repo }, { version })) diff --git a/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts b/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts index ec927fc37a..c48461bba5 100644 --- a/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; const requestValuesEndpoint = urlBuilderFor("/v2/charts/:repo/:name/values"); @@ -13,7 +13,7 @@ export type RequestHelmChartValues = (repo: string, name: string, version: strin const requestHelmChartValuesInjectable = getInjectable({ id: "request-helm-chart-values", instantiate: (di): RequestHelmChartValues => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (repo, name, version) => ( apiBase.get(requestValuesEndpoint.compile({ repo, name }, { version })) diff --git a/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts b/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts index 410d8ea596..ab85594ec6 100644 --- a/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts @@ -4,10 +4,10 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; import { HelmChart } from "../helm-charts.api"; import type { RawHelmChart } from "../helm-charts.api"; import { isDefined } from "../../../utils"; +import apiBaseInjectable from "../../api-base.injectable"; const requestVersionsEndpoint = urlBuilderFor("/v2/charts/:repo/:name/versions"); @@ -16,7 +16,7 @@ export type RequestHelmChartVersions = (repo: string, chartName: string) => Prom const requestHelmChartVersionsInjectable = getInjectable({ id: "request-helm-chart-versions", instantiate: (di): RequestHelmChartVersions => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return async (repo, name) => { const rawVersions = await apiBase.get(requestVersionsEndpoint.compile({ name, repo })) as RawHelmChart[]; diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts index 1bfe168b11..e1581c5d76 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseConfiguration = ( name: string, @@ -18,7 +18,7 @@ const requestHelmReleaseConfigurationInjectable = getInjectable({ id: "request-helm-release-configuration", instantiate: (di): RequestHelmReleaseConfiguration => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (name, namespace, all: boolean) => ( apiBase.get(requestConfigurationEnpoint.compile({ name, namespace }, { all })) diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts index bad802d3cc..c1cd09d40f 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts @@ -5,8 +5,8 @@ import yaml from "js-yaml"; import { getInjectable } from "@ogre-tools/injectable"; import type { HelmReleaseUpdateDetails } from "../helm-releases.api"; -import { apiBaseInjectionToken } from "../../api-base"; import { urlBuilderFor } from "../../../utils/buildUrl"; +import apiBaseInjectable from "../../api-base.injectable"; interface HelmReleaseCreatePayload { name?: string; @@ -25,7 +25,7 @@ const requestCreateHelmReleaseInjectable = getInjectable({ id: "request-create-helm-release", instantiate: (di): RequestCreateHelmRelease => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return ({ repo, chart, values, ...data }) => { return apiBase.post(requestCreateEndpoint.compile({}), { diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts index 66b2013770..44af4311a9 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; export type RequestDeleteHelmRelease = (name: string, namespace: string) => Promise; @@ -13,7 +13,7 @@ const requestDeleteEndpoint = urlBuilderFor("/v2/releases/:namespace/:name"); const requestDeleteHelmReleaseInjectable = getInjectable({ id: "request-delete-helm-release", instantiate: (di): RequestDeleteHelmRelease => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (name, namespace) => apiBase.del(requestDeleteEndpoint.compile({ name, namespace })); }, diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts index 0b712cd78e..37f2287377 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts @@ -4,8 +4,8 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { KubeJsonApiData } from "../../kube-json-api"; -import { apiBaseInjectionToken } from "../../api-base"; import { urlBuilderFor } from "../../../utils/buildUrl"; +import apiBaseInjectable from "../../api-base.injectable"; export interface HelmReleaseDetails { resources: KubeJsonApiData[]; @@ -32,7 +32,7 @@ const requestHelmReleaseDetailsInjectable = getInjectable({ id: "call-for-helm-release-details", instantiate: (di): CallForHelmReleaseDetails => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (name, namespace) => apiBase.get(requestDetailsEnpoint.compile({ name, namespace })); }, diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts index b6e9794fe7..58b6a37dbb 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; export interface HelmReleaseRevision { revision: number; @@ -22,7 +22,7 @@ const requestHistoryEnpoint = urlBuilderFor("/v2/releases/:namespace/:name/histo const requestHelmReleaseHistoryInjectable = getInjectable({ id: "request-helm-release-history", instantiate: (di): RequestHelmReleaseHistory => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (name, namespace) => apiBase.get(requestHistoryEnpoint.compile({ name, namespace })); }, diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts index 2619e289c6..ee6503ca99 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; import type { HelmReleaseDto } from "../helm-releases.api"; export type RequestHelmReleases = (namespace?: string) => Promise; @@ -15,7 +15,7 @@ const requestHelmReleasesInjectable = getInjectable({ id: "request-helm-releases", instantiate: (di): RequestHelmReleases => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (namespace) => apiBase.get(requestHelmReleasesEndpoint.compile({ namespace })); }, diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts index 1a9229b73a..036b399ef2 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseRollback = (name: string, namespace: string, revision: number) => Promise; @@ -13,7 +13,7 @@ const requestRollbackEndpoint = urlBuilderFor("/v2/releases/:namespace/:name"); const requestHelmReleaseRollbackInjectable = getInjectable({ id: "request-helm-release-rollback", instantiate: (di): RequestHelmReleaseRollback => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return async (name, namespace, revision) => { await apiBase.put( diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts index 8f46a3a210..715a21cea9 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts @@ -3,9 +3,9 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { apiBaseInjectionToken } from "../../api-base"; import { urlBuilderFor } from "../../../utils/buildUrl"; import type { AsyncResult } from "../../../utils/async-result"; +import apiBaseInjectable from "../../api-base.injectable"; interface HelmReleaseUpdatePayload { repo: string; @@ -26,7 +26,7 @@ const requestHelmReleaseUpdateInjectable = getInjectable({ id: "request-helm-release-update", instantiate: (di): RequestHelmReleaseUpdate => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return async (name, namespace, { repo, chart, values, version }) => { try { diff --git a/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts b/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts index d30f9973c4..99f1cc17d0 100644 --- a/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts +++ b/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { urlBuilderFor } from "../../../utils/buildUrl"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseValues = (name: string, namespace: string, all?: boolean) => Promise; @@ -13,7 +13,7 @@ const requestValuesEndpoint = urlBuilderFor("/v2/release/:namespace/:name/values const requestHelmReleaseValuesInjectable = getInjectable({ id: "request-helm-release-values", instantiate: (di): RequestHelmReleaseValues => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (name, namespace, all) => apiBase.get(requestValuesEndpoint.compile({ name, namespace }, { all })); }, diff --git a/src/common/k8s-api/endpoints/metrics.api/request-metrics.injectable.ts b/src/common/k8s-api/endpoints/metrics.api/request-metrics.injectable.ts index 0da0bc95ec..e83c52b9aa 100644 --- a/src/common/k8s-api/endpoints/metrics.api/request-metrics.injectable.ts +++ b/src/common/k8s-api/endpoints/metrics.api/request-metrics.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { getSecondsFromUnixEpoch } from "../../../utils/date/get-current-date-time"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; import type { MetricData } from "../metrics.api"; @@ -46,7 +46,7 @@ export interface RequestMetrics { const requestMetricsInjectable = getInjectable({ id: "request-metrics", instantiate: (di) => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (async (query: object, params: RequestMetricsParams = {}) => { const { range = 3600, step = 60, namespace } = params; diff --git a/src/common/k8s-api/endpoints/metrics.api/request-providers.injectable.ts b/src/common/k8s-api/endpoints/metrics.api/request-providers.injectable.ts index 4711333ca6..0c74c4d58d 100644 --- a/src/common/k8s-api/endpoints/metrics.api/request-providers.injectable.ts +++ b/src/common/k8s-api/endpoints/metrics.api/request-providers.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; export interface MetricProviderInfo { name: string; @@ -17,7 +17,7 @@ export type RequestMetricsProviders = () => Promise; const requestMetricsProvidersInjectable = getInjectable({ id: "request-metrics-providers", instantiate: (di): RequestMetricsProviders => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return () => apiBase.get("/metrics/providers"); }, diff --git a/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts b/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts index c8ad3435fd..7290263a41 100644 --- a/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts +++ b/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { Patch } from "rfc6902"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; import type { KubeJsonApiData } from "../../kube-json-api"; export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => Promise; @@ -12,7 +12,7 @@ export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | u const requestKubeObjectPatchInjectable = getInjectable({ id: "request-kube-object-patch", instantiate: (di): RequestKubeObjectPatch => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (name, kind, ns, patch) => ( apiBase.patch("/stack", { diff --git a/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts b/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts index 52824cd86c..7d996253ee 100644 --- a/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts +++ b/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { apiBaseInjectionToken } from "../../api-base"; +import apiBaseInjectable from "../../api-base.injectable"; import type { KubeJsonApiData } from "../../kube-json-api"; export type RequestKubeObjectCreation = (resourceDescriptor: string) => Promise; @@ -11,7 +11,7 @@ export type RequestKubeObjectCreation = (resourceDescriptor: string) => Promise< const requestKubeObjectCreationInjectable = getInjectable({ id: "request-kube-object-creation", instantiate: (di): RequestKubeObjectCreation => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); return (data) => apiBase.post("/stack", { data }); }, diff --git a/src/main/k8s/api-base-host-header.injectable.ts b/src/main/k8s/api-base-host-header.injectable.ts new file mode 100644 index 0000000000..281c4fda84 --- /dev/null +++ b/src/main/k8s/api-base-host-header.injectable.ts @@ -0,0 +1,19 @@ +/** + * 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 { apiBaseHostHeaderInjectionToken } from "../../common/k8s-api/api-base-configs"; +import lensProxyPortInjectable from "../lens-proxy/lens-proxy-port.injectable"; + +const apiBaseHostHeaderInjectable = getInjectable({ + id: "api-base-host-header", + instantiate: (di) => { + const lensProxyPort = di.inject(lensProxyPortInjectable); + + return `localhost:${lensProxyPort.get()}`; + }, + injectionToken: apiBaseHostHeaderInjectionToken, +}); + +export default apiBaseHostHeaderInjectable; diff --git a/src/main/k8s/api-base-server-address.injectable.ts b/src/main/k8s/api-base-server-address.injectable.ts new file mode 100644 index 0000000000..ae217cb3e2 --- /dev/null +++ b/src/main/k8s/api-base-server-address.injectable.ts @@ -0,0 +1,19 @@ +/** + * 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 { apiBaseServerAddressInjectionToken } from "../../common/k8s-api/api-base-configs"; +import lensProxyPortInjectable from "../lens-proxy/lens-proxy-port.injectable"; + +const apiBaseServerAddressInjectable = getInjectable({ + id: "api-base-server-address", + instantiate: (di) => { + const lensProxyPort = di.inject(lensProxyPortInjectable); + + return `http://127.0.0.1:${lensProxyPort.get()}`; + }, + injectionToken: apiBaseServerAddressInjectionToken, +}); + +export default apiBaseServerAddressInjectable; diff --git a/src/main/k8s/api-base.injectable.ts b/src/main/k8s/api-base.injectable.ts deleted file mode 100644 index 07a9424993..0000000000 --- a/src/main/k8s/api-base.injectable.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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 { apiBaseInjectionToken } from "../../common/k8s-api/api-base"; -import createJsonApiInjectable from "../../common/k8s-api/create-json-api.injectable"; -import { apiPrefix } from "../../common/vars"; -import isDebuggingInjectable from "../../common/vars/is-debugging.injectable"; -import isDevelopmentInjectable from "../../common/vars/is-development.injectable"; -import lensProxyPortInjectable from "../lens-proxy/lens-proxy-port.injectable"; - -const apiBaseInjectable = getInjectable({ - id: "api-base", - instantiate: (di) => { - const proxyPort = di.inject(lensProxyPortInjectable); - const createJsonApi = di.inject(createJsonApiInjectable); - const isDebugging = di.inject(isDebuggingInjectable); - - return createJsonApi({ - serverAddress: `http://127.0.0.1:${proxyPort.get()}`, - apiBase: apiPrefix, - debug: di.inject(isDevelopmentInjectable) || isDebugging, - }, { - headers: { - "Host": `localhost:${proxyPort.get()}`, - }, - }); - }, - injectionToken: apiBaseInjectionToken, -}); - -export default apiBaseInjectable; diff --git a/src/main/shell-session/create-shell-session.injectable.ts b/src/main/shell-session/create-shell-session.injectable.ts index 49ba44cb67..6af65dc908 100644 --- a/src/main/shell-session/create-shell-session.injectable.ts +++ b/src/main/shell-session/create-shell-session.injectable.ts @@ -22,10 +22,11 @@ const openShellSessionInjectable = getInjectable({ instantiate: (di): OpenShellSession => { const openLocalShellSession = di.inject(openLocalShellSessionInjectable); + const openNodeShellSession = di.inject(openNodeShellSessionInjectable); return ({ nodeName, ...args }) => ( nodeName - ? di.inject(openNodeShellSessionInjectable, { nodeName, ...args }) + ? openNodeShellSession({ nodeName, ...args }) : openLocalShellSession(args) ); }, diff --git a/src/main/shell-session/node-shell-session/open.injectable.ts b/src/main/shell-session/node-shell-session/open.injectable.ts index 739bd7497c..47b97994b7 100644 --- a/src/main/shell-session/node-shell-session/open.injectable.ts +++ b/src/main/shell-session/node-shell-session/open.injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; +import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../../common/cluster/cluster"; import type WebSocket from "ws"; import createKubectlInjectable from "../../kubectl/create-kubectl.injectable"; @@ -27,9 +27,11 @@ export interface NodeShellSessionArgs { nodeName: string; } +export type OpenNodeShellSession = (args: NodeShellSessionArgs) => Promise; + const openNodeShellSessionInjectable = getInjectable({ id: "open-node-shell-session", - instantiate: (di, params: NodeShellSessionArgs) => { + instantiate: (di): OpenNodeShellSession => { const createKubectl = di.inject(createKubectlInjectable); const dependencies: NodeShellSessionDependencies = { isMac: di.inject(isMacInjectable), @@ -44,13 +46,14 @@ const openNodeShellSessionInjectable = getInjectable({ emitAppEvent: di.inject(emitAppEventInjectable), stat: di.inject(statInjectable), }; - const kubectl = createKubectl(params.cluster.version); - const session = new NodeShellSession(dependencies, { kubectl, ...params }); - return session.open(); + return async (args) => { + const kubectl = createKubectl(args.cluster.version); + const session = new NodeShellSession(dependencies, { kubectl, ...args }); + + return session.open(); + }; }, - // NOTE: this must be transient to bypass the circular dependency of `createKubeJsonApiForClusterInjectable` on the lens proxy port - lifecycle: lifecycleEnum.transient, }); export default openNodeShellSessionInjectable; diff --git a/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts b/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts index 3a612dec2e..4c0e4255b1 100644 --- a/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts +++ b/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts @@ -3,9 +3,9 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; +import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; import type { ServiceAccount } from "../../../common/k8s-api/endpoints"; import { urlBuilderFor } from "../../../common/utils/buildUrl"; -import apiBaseInjectable from "../../k8s/api-base.injectable"; import openKubeconfigDialogInjectable from "./open.injectable"; export type OpenServiceAccountKubeConfigDialog = (account: ServiceAccount) => void; diff --git a/src/renderer/k8s/api-base-host-header.injectable.ts b/src/renderer/k8s/api-base-host-header.injectable.ts new file mode 100644 index 0000000000..6ca954c85c --- /dev/null +++ b/src/renderer/k8s/api-base-host-header.injectable.ts @@ -0,0 +1,15 @@ +/** + * 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 { apiBaseHostHeaderInjectionToken } from "../../common/k8s-api/api-base-configs"; +import windowLocationInjectable from "../../common/k8s-api/window-location.injectable"; + +const apiBaseHostHeaderInjectable = getInjectable({ + id: "api-base-host-header", + instantiate: (di) => di.inject(windowLocationInjectable).host, + injectionToken: apiBaseHostHeaderInjectionToken, +}); + +export default apiBaseHostHeaderInjectable; diff --git a/src/renderer/k8s/api-base-server-address.injectable.ts b/src/renderer/k8s/api-base-server-address.injectable.ts new file mode 100644 index 0000000000..acb1f525d3 --- /dev/null +++ b/src/renderer/k8s/api-base-server-address.injectable.ts @@ -0,0 +1,19 @@ +/** + * 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 { apiBaseServerAddressInjectionToken } from "../../common/k8s-api/api-base-configs"; +import windowLocationInjectable from "../../common/k8s-api/window-location.injectable"; + +const apiBaseServerAddressInjectable = getInjectable({ + id: "api-base-server-address", + instantiate: (di) => { + const { port } = di.inject(windowLocationInjectable); + + return `http://127.0.0.1:${port}`; + }, + injectionToken: apiBaseServerAddressInjectionToken, +}); + +export default apiBaseServerAddressInjectable; diff --git a/src/renderer/k8s/api-base.injectable.ts b/src/renderer/k8s/api-base.injectable.ts deleted file mode 100644 index 9ce5ab5f98..0000000000 --- a/src/renderer/k8s/api-base.injectable.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * 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 { apiBaseInjectionToken } from "../../common/k8s-api/api-base"; -import createJsonApiInjectable from "../../common/k8s-api/create-json-api.injectable"; -import windowLocationInjectable from "../../common/k8s-api/window-location.injectable"; -import { apiPrefix } from "../../common/vars"; -import isDebuggingInjectable from "../../common/vars/is-debugging.injectable"; -import isDevelopmentInjectable from "../../common/vars/is-development.injectable"; - -const apiBaseInjectable = getInjectable({ - id: "api-base", - instantiate: (di) => { - const createJsonApi = di.inject(createJsonApiInjectable); - const isDebugging = di.inject(isDebuggingInjectable); - const { port, host } = di.inject(windowLocationInjectable); - - return createJsonApi( - { - serverAddress: `http://127.0.0.1:${port}`, - apiBase: apiPrefix, - debug: di.inject(isDevelopmentInjectable) || isDebugging, - }, - { - headers: { - "Host": host, - }, - }, - ); - }, - injectionToken: apiBaseInjectionToken, -}); - -export default apiBaseInjectable; diff --git a/src/renderer/port-forward/port-forward-store/port-forward-store.injectable.ts b/src/renderer/port-forward/port-forward-store/port-forward-store.injectable.ts index 5339a3e4e7..2d309c315d 100644 --- a/src/renderer/port-forward/port-forward-store/port-forward-store.injectable.ts +++ b/src/renderer/port-forward/port-forward-store/port-forward-store.injectable.ts @@ -7,8 +7,8 @@ import { PortForwardStore } from "./port-forward-store"; import type { ForwardedPort } from "../port-forward-item"; import createStorageInjectable from "../../utils/create-storage/create-storage.injectable"; import notifyErrorPortForwardingInjectable from "../notify-error-port-forwarding.injectable"; -import { apiBaseInjectionToken } from "../../../common/k8s-api/api-base"; import requestActivePortForwardInjectable from "./request-active-port-forward.injectable"; +import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; const portForwardStoreInjectable = getInjectable({ id: "port-forward-store", @@ -22,7 +22,7 @@ const portForwardStoreInjectable = getInjectable({ undefined, ), notifyErrorPortForwarding: di.inject(notifyErrorPortForwardingInjectable), - apiBase: di.inject(apiBaseInjectionToken), + apiBase: di.inject(apiBaseInjectable), requestActivePortForward: di.inject(requestActivePortForwardInjectable), }); }, diff --git a/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts b/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts index 4939f4d955..90f91320c8 100644 --- a/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts +++ b/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; -import { apiBaseInjectionToken } from "../../../common/k8s-api/api-base"; +import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import { urlBuilderFor } from "../../../common/utils/buildUrl"; import type { ForwardedPort } from "../port-forward-item"; @@ -16,7 +16,7 @@ const requestActiveEndpoint = urlBuilderFor("/pods/port-forward/:namespace/:kind const requestActivePortForwardInjectable = getInjectable({ id: "request-active-port-forward", instantiate: (di): RequestActivePortForward => { - const apiBase = di.inject(apiBaseInjectionToken); + const apiBase = di.inject(apiBaseInjectable); const logger = di.inject(loggerInjectable); return async ({ port, forwardPort, namespace, kind, name, ...rest }) => {