diff --git a/src/main/router.ts b/src/main/router.ts index b0b51a1b2f..5be10cc888 100644 --- a/src/main/router.ts +++ b/src/main/router.ts @@ -145,6 +145,12 @@ export class Router { } } + addRoute = (route: Route) => { + this.router.add({ method: route.method, path: route.path }, (request: LensApiRequest) => { + route.handler(request); + }); + }; + protected addRoutes() { // Static assets if (this.dependencies.httpProxy) { @@ -195,3 +201,9 @@ export class Router { this.router.add({ method: "patch", path: `${apiPrefix}/stack` }, ResourceApplierApiRoute.patchResource); } } + +export interface Route { + path: string; + method: "get" | "post" | "put" | "patch" | "delete"; + handler: (request: LensApiRequest) => Promise; +} diff --git a/src/main/router/router.injectable.ts b/src/main/router/router.injectable.ts index ce27c27995..ed14516aee 100644 --- a/src/main/router/router.injectable.ts +++ b/src/main/router/router.injectable.ts @@ -2,12 +2,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 { getInjectable, getInjectionToken } from "@ogre-tools/injectable"; +import { Router, Route } from "../router"; +import routePortForwardInjectable from "../routes/port-forward/route-port-forward/route-port-forward.injectable"; import isDevelopmentInjectable from "../../common/vars/is-development.injectable"; import httpProxy from "http-proxy"; -import { Router } from "../router"; -import routePortForwardInjectable - from "../routes/port-forward/route-port-forward/route-port-forward.injectable"; + +export const routeInjectionToken = getInjectionToken({ + id: "route-injection-token", +}); const routerInjectable = getInjectable({ id: "router", @@ -16,10 +19,18 @@ const routerInjectable = getInjectable({ const isDevelopment = di.inject(isDevelopmentInjectable); const proxy = isDevelopment ? httpProxy.createProxy() : undefined; - return new Router({ + const router = new Router({ routePortForward: di.inject(routePortForwardInjectable), httpProxy: proxy, }); + + const routes = di.injectMany(routeInjectionToken); + + routes.forEach(route => { + router.addRoute(route); + }); + + return router; }, });