1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Make response of route typed

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen 2022-02-14 08:47:42 +02:00
parent 4b76327489
commit 79587514d8
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
24 changed files with 92 additions and 89 deletions

View File

@ -3,7 +3,7 @@
* 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 type { LensApiRequest, LensApiResult } from "../router"; import type { LensApiRequest, Route } from "../router";
import staticFileRouteInjectable from "../routes/static-file-route.injectable"; import staticFileRouteInjectable from "../routes/static-file-route.injectable";
import { getDiForUnitTesting } from "../getDiForUnitTesting"; import { getDiForUnitTesting } from "../getDiForUnitTesting";
@ -24,14 +24,14 @@ jest.mock("electron", () => ({
})); }));
describe("Router", () => { describe("Router", () => {
let handleStaticFile: (request: LensApiRequest) => Promise<LensApiResult>; let handleStaticFileRoute: Route<Buffer>;
beforeEach(async () => { beforeEach(async () => {
const di = getDiForUnitTesting({ doGeneralOverrides: true }); const di = getDiForUnitTesting({ doGeneralOverrides: true });
await di.runSetups(); await di.runSetups();
handleStaticFile = di.inject(staticFileRouteInjectable).handler; handleStaticFileRoute = di.inject(staticFileRouteInjectable);
}); });
it("blocks path traversal attacks", async () => { it("blocks path traversal attacks", async () => {
@ -48,7 +48,7 @@ describe("Router", () => {
raw: {}, raw: {},
} as LensApiRequest<any>; } as LensApiRequest<any>;
await handleStaticFile(request); await handleStaticFileRoute.handler(request);
expect(response.statusCode).toEqual(404); expect(response.statusCode).toEqual(404);
}); });
@ -73,7 +73,7 @@ describe("Router", () => {
raw: { req }, raw: { req },
} as LensApiRequest<any>; } as LensApiRequest<any>;
await handleStaticFile(request); await handleStaticFileRoute.handler(request);
expect(response.statusCode).toEqual(200); expect(response.statusCode).toEqual(200);
}); });

View File

@ -132,12 +132,12 @@ export const contentTypes: Record<SupportedFileExtension, LensApiResultContentTy
export class Router { export class Router {
protected router = new Call.Router(); protected router = new Call.Router();
static rootPath = path.resolve(__static); protected static rootPath = path.resolve(__static);
constructor(routes: Route[]) { constructor(routes: Route<any>[]) {
routes.forEach(route => { routes.forEach(route => {
this.router.add({ method: route.method, path: route.path }, async (request: LensApiRequest) => { this.router.add({ method: route.method, path: route.path }, async (request: LensApiRequest) => {
let result: LensApiResult | void; let result: LensApiResult<any> | void;
try { try {
result = await route.handler(request); result = await route.handler(request);
@ -220,17 +220,17 @@ interface LensApiResultContentType {
respond: (content: any, statusCode: number, response: http.ServerResponse) => void; respond: (content: any, statusCode: number, response: http.ServerResponse) => void;
} }
export interface LensApiResult { export interface LensApiResult<TResult> {
statusCode?: number; statusCode?: number;
response?: any; response?: TResult;
error?: any; error?: any;
contentType?: LensApiResultContentType; contentType?: LensApiResultContentType;
headers?: { Location: string }; headers?: { Location: string };
proxy?: httpProxy; proxy?: httpProxy;
} }
export interface Route { export interface Route<TResponse> {
path: string; path: string;
method: "get" | "post" | "put" | "patch" | "delete"; method: "get" | "post" | "put" | "patch" | "delete";
handler: (request: LensApiRequest) => LensApiResult | Promise<LensApiResult>; handler: (request: LensApiRequest) => LensApiResult<TResponse> | Promise<LensApiResult<TResponse>>;
} }

View File

@ -5,7 +5,7 @@
import { getInjectable, getInjectionToken } from "@ogre-tools/injectable"; import { getInjectable, getInjectionToken } from "@ogre-tools/injectable";
import { Route, Router } from "../router"; import { Route, Router } from "../router";
export const routeInjectionToken = getInjectionToken<Route>({ export const routeInjectionToken = getInjectionToken<Route<any>>({
id: "route-injection-token", id: "route-injection-token",
}); });

View File

@ -4,21 +4,24 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { RawHelmChart } from "../../../../common/k8s-api/endpoints/helm-charts.api";
interface GetChartResponse {
readme: string;
versions: RawHelmChart[];
}
const getChartRouteInjectable = getInjectable({ const getChartRouteInjectable = getInjectable({
id: "get-chart-route", id: "get-chart-route",
instantiate: () => ({ instantiate: (): Route<GetChartResponse> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/charts/{repo}/{chart}`, path: `${apiPrefix}/v2/charts/{repo}/{chart}`,
handler: async ({ handler: async ({ params, query }) => ({
params,
query,
}: LensApiRequest): Promise<LensApiResult> => ({
response: await helmService.getChart( response: await helmService.getChart(
params.repo, params.repo,
params.chart, params.chart,

View File

@ -4,21 +4,21 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
const getChartRouteValuesInjectable = getInjectable({ const getChartRouteValuesInjectable = getInjectable({
id: "get-chart-route-values", id: "get-chart-route-values",
instantiate: () => ({ instantiate: (): Route<string> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/charts/{repo}/{chart}/values`, path: `${apiPrefix}/v2/charts/{repo}/{chart}/values`,
handler: async ({ handler: async ({
params, params,
query, query,
}: LensApiRequest): Promise<LensApiResult> => ({ }) => ({
response: await helmService.getChartValues( response: await helmService.getChartValues(
params.repo, params.repo,
params.chart, params.chart,

View File

@ -4,19 +4,18 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
const listChartsRouteInjectable = getInjectable({ const listChartsRouteInjectable = getInjectable({
id: "list-charts-route", id: "list-charts-route",
instantiate: () => ({ instantiate: (): Route<any> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/charts`, path: `${apiPrefix}/v2/charts`,
// eslint-disable-next-line unused-imports/no-unused-vars-ts handler: async () => ({
handler: async (request: LensApiRequest): Promise<LensApiResult> => ({
response: await helmService.listCharts(), response: await helmService.listCharts(),
}), }),
}), }),

View File

@ -3,7 +3,7 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
const deleteReleaseRouteInjectable = getInjectable({ const deleteReleaseRouteInjectable = getInjectable({
id: "delete-release-route", id: "delete-release-route",
instantiate: () => ({ instantiate: (): Route<string> => ({
method: "delete", method: "delete",
path: `${apiPrefix}/v2/releases/{namespace}/{release}`, path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { cluster, params } = request; const { cluster, params } = request;
return { return {

View File

@ -3,7 +3,7 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
const getReleaseRouteHistoryInjectable = getInjectable({ const getReleaseRouteHistoryInjectable = getInjectable({
id: "get-release-history-route", id: "get-release-history-route",
instantiate: () => ({ instantiate: (): Route<any> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/releases/{namespace}/{release}/history`, path: `${apiPrefix}/v2/releases/{namespace}/{release}/history`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { cluster, params } = request; const { cluster, params } = request;
return { return {

View File

@ -3,7 +3,7 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
const getReleaseRouteInjectable = getInjectable({ const getReleaseRouteInjectable = getInjectable({
id: "get-release-route", id: "get-release-route",
instantiate: () => ({ instantiate: (): Route<any> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/releases/{namespace}/{release}`, path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { cluster, params } = request; const { cluster, params } = request;
return { return {

View File

@ -3,7 +3,7 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
@ -13,11 +13,11 @@ import { contentTypes } from "../../../router";
const getReleaseRouteValuesInjectable = getInjectable({ const getReleaseRouteValuesInjectable = getInjectable({
id: "get-release-values-route", id: "get-release-values-route",
instantiate: () => ({ instantiate: (): Route<string> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/releases/{namespace}/{release}/values`, path: `${apiPrefix}/v2/releases/{namespace}/{release}/values`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { cluster, params: { namespace, release }, query } = request; const { cluster, params: { namespace, release }, query } = request;
const all = getBoolean(query, "all"); const all = getBoolean(query, "all");

View File

@ -3,19 +3,24 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
interface InstallChartResponse {
log: string;
release: { name: string, namespace: string }
}
const installChartRouteInjectable = getInjectable({ const installChartRouteInjectable = getInjectable({
id: "install-chart-route", id: "install-chart-route",
instantiate: () => ({ instantiate: () : Route<InstallChartResponse> => ({
method: "post", method: "post",
path: `${apiPrefix}/v2/releases`, path: `${apiPrefix}/v2/releases`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { payload, cluster } = request; const { payload, cluster } = request;
return { return {

View File

@ -3,7 +3,7 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
@ -11,11 +11,11 @@ import { getInjectable } from "@ogre-tools/injectable";
const listReleasesRouteInjectable = getInjectable({ const listReleasesRouteInjectable = getInjectable({
id: "list-releases-route", id: "list-releases-route",
instantiate: () => ({ instantiate: (): Route<Record<string, any>> => ({
method: "get", method: "get",
path: `${apiPrefix}/v2/releases/{namespace?}`, path: `${apiPrefix}/v2/releases/{namespace?}`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { cluster, params } = request; const { cluster, params } = request;
return { return {

View File

@ -3,7 +3,7 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
@ -11,18 +11,17 @@ import { getInjectable } from "@ogre-tools/injectable";
const rollbackReleaseRouteInjectable = getInjectable({ const rollbackReleaseRouteInjectable = getInjectable({
id: "rollback-release-route", id: "rollback-release-route",
instantiate: () => ({ instantiate: (): Route<void> => ({
method: "put", method: "put",
path: `${apiPrefix}/v2/releases/{namespace}/{release}/rollback`, path: `${apiPrefix}/v2/releases/{namespace}/{release}/rollback`,
handler: async (request: LensApiRequest): Promise<void> => { handler: async (request) => {
const { cluster, params, payload } = request; const { cluster, params, payload } = request;
await helmService.rollback(cluster, params.release, params.namespace, payload.revision); await helmService.rollback(cluster, params.release, params.namespace, payload.revision);
}, },
}), }),
// @ts-ignore
injectionToken: routeInjectionToken, injectionToken: routeInjectionToken,
}); });

View File

@ -3,15 +3,20 @@
* 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 { apiPrefix } from "../../../../common/vars"; import { apiPrefix } from "../../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../../router"; import type { Route } from "../../../router";
import { helmService } from "../../../helm/helm-service"; import { helmService } from "../../../helm/helm-service";
import { routeInjectionToken } from "../../../router/router.injectable"; import { routeInjectionToken } from "../../../router/router.injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
interface UpdateReleaseResponse {
log: string;
release: { name: string, namespace: string }
}
const updateReleaseRouteInjectable = getInjectable({ const updateReleaseRouteInjectable = getInjectable({
id: "update-release-route", id: "update-release-route",
instantiate: () => ({ instantiate: (): Route<UpdateReleaseResponse> => ({
method: "put", method: "put",
path: `${apiPrefix}/v2/releases/{namespace}/{release}`, path: `${apiPrefix}/v2/releases/{namespace}/{release}`,
@ -19,7 +24,7 @@ const updateReleaseRouteInjectable = getInjectable({
cluster, cluster,
params, params,
payload, payload,
}: LensApiRequest): Promise<LensApiResult> => ({ }) => ({
response: await helmService.updateRelease( response: await helmService.updateRelease(
cluster, cluster,
params.release, params.release,

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { Route } from "../../router";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import type { Cluster } from "../../../common/cluster/cluster"; import type { Cluster } from "../../../common/cluster/cluster";
import { CoreV1Api, V1Secret } from "@kubernetes/client-node"; import { CoreV1Api, V1Secret } from "@kubernetes/client-node";
@ -13,11 +13,11 @@ import { CoreV1Api, V1Secret } from "@kubernetes/client-node";
const getServiceAccountRouteInjectable = getInjectable({ const getServiceAccountRouteInjectable = getInjectable({
id: "get-service-account-route", id: "get-service-account-route",
instantiate: () => ({ instantiate: (): Route<ReturnType<typeof generateKubeConfig>> => ({
method: "get", method: "get",
path: `${apiPrefix}/kubeconfig/service-account/{namespace}/{account}`, path: `${apiPrefix}/kubeconfig/service-account/{namespace}/{account}`,
handler: async (request: LensApiRequest): Promise<LensApiResult> => { handler: async (request) => {
const { params, cluster } = request; const { params, cluster } = request;
const client = (await cluster.getProxyKubeconfig()).makeApiClient(CoreV1Api); const client = (await cluster.getProxyKubeconfig()).makeApiClient(CoreV1Api);
const secretList = await client.listNamespacedSecret(params.namespace); const secretList = await client.listNamespacedSecret(params.namespace);

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { LensApiRequest, Route } from "../../router";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import { ClusterMetadataKey, ClusterPrometheusMetadata } from "../../../common/cluster-types"; import { ClusterMetadataKey, ClusterPrometheusMetadata } from "../../../common/cluster-types";
import logger from "../../logger"; import logger from "../../logger";
@ -42,7 +42,7 @@ async function loadMetrics(promQueries: string[], cluster: Cluster, prometheusPa
return Promise.all(queries.map(loadMetric)); return Promise.all(queries.map(loadMetric));
} }
const addMetricsRoute = async ({ cluster, payload, query }: LensApiRequest): Promise<LensApiResult> => { const addMetricsRoute = async ({ cluster, payload, query }: LensApiRequest) => {
const queryParams: IMetricsQuery = Object.fromEntries(query.entries()); const queryParams: IMetricsQuery = Object.fromEntries(query.entries());
const prometheusMetadata: ClusterPrometheusMetadata = {}; const prometheusMetadata: ClusterPrometheusMetadata = {};
@ -96,7 +96,7 @@ const addMetricsRoute = async ({ cluster, payload, query }: LensApiRequest): Pro
const addMetricsRouteInjectable = getInjectable({ const addMetricsRouteInjectable = getInjectable({
id: "add-metrics-route", id: "add-metrics-route",
instantiate: () => ({ instantiate: (): Route<any> => ({
method: "post", method: "post",
path: `${apiPrefix}/metrics`, path: `${apiPrefix}/metrics`,
handler: addMetricsRoute, handler: addMetricsRoute,

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { Route } from "../../router";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import { PrometheusProviderRegistry } from "../../prometheus"; import { PrometheusProviderRegistry } from "../../prometheus";
import type { MetricProviderInfo } from "../../../common/k8s-api/endpoints/metrics.api"; import type { MetricProviderInfo } from "../../../common/k8s-api/endpoints/metrics.api";
@ -13,12 +13,11 @@ import type { MetricProviderInfo } from "../../../common/k8s-api/endpoints/metri
const getMetricProvidersRouteInjectable = getInjectable({ const getMetricProvidersRouteInjectable = getInjectable({
id: "get-metric-providers-route", id: "get-metric-providers-route",
instantiate: () => ({ instantiate: (): Route<MetricProviderInfo[]> => ({
method: "get", method: "get",
path: `${apiPrefix}/metrics/providers`, path: `${apiPrefix}/metrics/providers`,
// eslint-disable-next-line unused-imports/no-unused-vars-ts handler: async () => {
handler: async (request: LensApiRequest) : Promise<LensApiResult> => {
const providers: MetricProviderInfo[] = []; const providers: MetricProviderInfo[] = [];
for (const { name, id, isConfigurable } of PrometheusProviderRegistry.getInstance().providers.values()) { for (const { name, id, isConfigurable } of PrometheusProviderRegistry.getInstance().providers.values()) {

View File

@ -4,11 +4,11 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { LensApiRequest, Route } from "../../router";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import { PortForward } from "./functionality/port-forward"; import { PortForward } from "./functionality/port-forward";
const getCurrentPortForward = async (request: LensApiRequest): Promise<LensApiResult> => { const getCurrentPortForward = async (request: LensApiRequest) => {
const { params, query, cluster } = request; const { params, query, cluster } = request;
const { namespace, resourceType, resourceName } = params; const { namespace, resourceType, resourceName } = params;
const port = Number(query.get("port")); const port = Number(query.get("port"));
@ -25,7 +25,7 @@ const getCurrentPortForward = async (request: LensApiRequest): Promise<LensApiRe
const getCurrentPortForwardRouteInjectable = getInjectable({ const getCurrentPortForwardRouteInjectable = getInjectable({
id: "get-current-port-forward-route", id: "get-current-port-forward-route",
instantiate: () => ({ instantiate: (): Route<{ port: number }> => ({
method: "get", method: "get",
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`, path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
handler: getCurrentPortForward, handler: getCurrentPortForward,

View File

@ -4,7 +4,7 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { LensApiRequest, Route } from "../../router";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import { PortForward, PortForwardArgs } from "./functionality/port-forward"; import { PortForward, PortForwardArgs } from "./functionality/port-forward";
import logger from "../../logger"; import logger from "../../logger";
@ -14,7 +14,7 @@ interface Dependencies {
createPortForward: (pathToKubeConfig: string, args: PortForwardArgs) => PortForward; createPortForward: (pathToKubeConfig: string, args: PortForwardArgs) => PortForward;
} }
const startPortForward = ({ createPortForward }: Dependencies) => async (request: LensApiRequest): Promise<LensApiResult> => { const startPortForward = ({ createPortForward }: Dependencies) => async (request: LensApiRequest) => {
const { params, query, cluster } = request; const { params, query, cluster } = request;
const { namespace, resourceType, resourceName } = params; const { namespace, resourceType, resourceName } = params;
const port = Number(query.get("port")); const port = Number(query.get("port"));
@ -85,7 +85,7 @@ const startPortForward = ({ createPortForward }: Dependencies) => async (request
const startPortForwardRouteInjectable = getInjectable({ const startPortForwardRouteInjectable = getInjectable({
id: "start-current-port-forward-route", id: "start-current-port-forward-route",
instantiate: (di) => ({ instantiate: (di): Route<{ port: number }> => ({
method: "post", method: "post",
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`, path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
handler: startPortForward({ createPortForward: di.inject(createPortForwardInjectable) }), handler: startPortForward({ createPortForward: di.inject(createPortForwardInjectable) }),

View File

@ -4,12 +4,12 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { LensApiRequest, Route } from "../../router";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import { PortForward } from "./functionality/port-forward"; import { PortForward } from "./functionality/port-forward";
import logger from "../../logger"; import logger from "../../logger";
const stopCurrentPortForward = async (request: LensApiRequest): Promise<LensApiResult> => { const stopCurrentPortForward = async (request: LensApiRequest) => {
const { params, query, cluster } = request; const { params, query, cluster } = request;
const { namespace, resourceType, resourceName } = params; const { namespace, resourceType, resourceName } = params;
const port = Number(query.get("port")); const port = Number(query.get("port"));
@ -39,7 +39,7 @@ const stopCurrentPortForward = async (request: LensApiRequest): Promise<LensApiR
const stopCurrentPortForwardRouteInjectable = getInjectable({ const stopCurrentPortForwardRouteInjectable = getInjectable({
id: "stop-current-port-forward-route", id: "stop-current-port-forward-route",
instantiate: () => ({ instantiate: (): Route<{ status: boolean }> => ({
method: "delete", method: "delete",
path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`, path: `${apiPrefix}/pods/port-forward/{namespace}/{resourceType}/{resourceName}`,
handler: stopCurrentPortForward, handler: stopCurrentPortForward,

View File

@ -4,21 +4,18 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { Route } from "../../router";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import { ResourceApplier } from "../../resource-applier"; import { ResourceApplier } from "../../resource-applier";
const applyResourceRouteInjectable = getInjectable({ const applyResourceRouteInjectable = getInjectable({
id: "apply-resource-route", id: "apply-resource-route",
instantiate: () => ({ instantiate: (): Route<string> => ({
method: "post", method: "post",
path: `${apiPrefix}/stack`, path: `${apiPrefix}/stack`,
handler: async ({ handler: async ({ cluster, payload }) => ({
cluster,
payload,
}: LensApiRequest): Promise<LensApiResult> => ({
response: await new ResourceApplier(cluster).apply(payload), response: await new ResourceApplier(cluster).apply(payload),
}), }),
}), }),

View File

@ -4,21 +4,18 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import type { LensApiRequest, LensApiResult } from "../../router"; import type { Route } from "../../router";
import { apiPrefix } from "../../../common/vars"; import { apiPrefix } from "../../../common/vars";
import { ResourceApplier } from "../../resource-applier"; import { ResourceApplier } from "../../resource-applier";
const patchResourceRouteInjectable = getInjectable({ const patchResourceRouteInjectable = getInjectable({
id: "patch-resource-route", id: "patch-resource-route",
instantiate: () => ({ instantiate: (): Route<string> => ({
method: "patch", method: "patch",
path: `${apiPrefix}/stack`, path: `${apiPrefix}/stack`,
handler: async ({ handler: async ({ cluster, payload }) => ({
cluster,
payload,
}: LensApiRequest): Promise<LensApiResult> => ({
response: await new ResourceApplier(cluster).patch( response: await new ResourceApplier(cluster).patch(
payload.name, payload.name,
payload.kind, payload.kind,

View File

@ -3,7 +3,7 @@
* 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 type { LensApiRequest, LensApiResult, SupportedFileExtension, Route } from "../router"; import type { LensApiRequest, SupportedFileExtension, Route } from "../router";
import { contentTypes } from "../router"; import { contentTypes } from "../router";
import logger from "../logger"; import logger from "../logger";
import { routeInjectionToken } from "../router/router.injectable"; import { routeInjectionToken } from "../router/router.injectable";
@ -19,7 +19,7 @@ interface ProductionDependencies {
const handleStaticFileInProduction = const handleStaticFileInProduction =
({ readFile }: ProductionDependencies) => ({ readFile }: ProductionDependencies) =>
async ({ params }: LensApiRequest): Promise<LensApiResult> => { async ({ params }: LensApiRequest) => {
const staticPath = path.resolve(__static); const staticPath = path.resolve(__static);
let filePath = params.path; let filePath = params.path;
@ -76,7 +76,7 @@ const handleStaticFileInDevelopment =
const staticFileRouteInjectable = getInjectable({ const staticFileRouteInjectable = getInjectable({
id: "static-file-route", id: "static-file-route",
instantiate: (di): Route => { instantiate: (di): Route<Buffer> => {
const isDevelopment = di.inject(isDevelopmentInjectable); const isDevelopment = di.inject(isDevelopmentInjectable);
return { return {

View File

@ -3,19 +3,18 @@
* 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 type { LensApiRequest, LensApiResult } from "../../router"; import type { Route } from "../../router";
import { routeInjectionToken } from "../../router/router.injectable"; import { routeInjectionToken } from "../../router/router.injectable";
import { getAppVersion } from "../../../common/utils"; import { getAppVersion } from "../../../common/utils";
const getVersionRouteInjectable = getInjectable({ const getVersionRouteInjectable = getInjectable({
id: "get-version-route", id: "get-version-route",
instantiate: () => ({ instantiate: (): Route<{ version: string }> => ({
method: "get", method: "get",
path: `/version`, path: `/version`,
// eslint-disable-next-line unused-imports/no-unused-vars-ts handler: async () => {
handler: async (request: LensApiRequest): Promise<LensApiResult> => {
return { response: { version: getAppVersion() }}; return { response: { version: getAppVersion() }};
}, },
}), }),