diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index d2b01c333b..8cfe7a31b9 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -75,7 +75,6 @@ "express-promise-router": "^4.1.0", "fs-extra": "10.1.0", "helmet": "^6.0.0", - "http-proxy": "^1.18.1", "http-proxy-middleware": "^2.0.6", "lodash": "^4.17.21", "luxon": "^3.0.0", diff --git a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts index c9a88854b2..cf06be6bba 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesProxy.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesProxy.ts @@ -27,14 +27,12 @@ import { PermissionEvaluator, } from '@backstage/plugin-permission-common'; import { bufferFromFileOrString } from '@kubernetes/client-node'; -import { IncomingMessage, ServerResponse } from 'http'; -import Server from 'http-proxy'; -import { createProxyMiddleware } from 'http-proxy-middleware'; +import { createProxyMiddleware, RequestHandler } from 'http-proxy-middleware'; import { Logger } from 'winston'; import { AuthenticationStrategy } from '../auth'; import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; -import type { Request, RequestHandler } from 'express'; +import type { Request } from 'express'; export const APPLICATION_JSON: string = 'application/json'; @@ -123,22 +121,14 @@ export class KubernetesProxy { } const middleware = await this.getMiddleware(req); + + // If req is an upgrade handshake, use middleware upgrade instead of http request handler https://github.com/chimurai/http-proxy-middleware#external-websocket-upgrade if ( req.header('connection')?.toLowerCase() === 'upgrade' && req.header('upgrade')?.toLowerCase() === 'websocket' ) { - type IPartialUpgradeHandler = ( - ...args: Partial< - Parameters< - Server>['ws'] - > - > - ) => void; - ( - middleware as unknown as { - upgrade: IPartialUpgradeHandler; - } - ).upgrade(req, req.socket); + // Missing the `head`, since it's optional we pass undefined to avoid type issues + middleware.upgrade!(req, req.socket, undefined); } else { middleware(req, res, next); } diff --git a/yarn.lock b/yarn.lock index 177173d0ac..8258933b0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7650,7 +7650,6 @@ __metadata: express-promise-router: ^4.1.0 fs-extra: 10.1.0 helmet: ^6.0.0 - http-proxy: ^1.18.1 http-proxy-middleware: ^2.0.6 lodash: ^4.17.21 luxon: ^3.0.0