From b82015005a896c5048e0ef2bd21127a6bb8d228e Mon Sep 17 00:00:00 2001 From: typescreep Date: Sun, 29 Jun 2025 16:37:47 +0300 Subject: [PATCH] bff integration --- .env | 1 + .env.options.dist | 1 + package-lock.json | 8 ++++---- package.json | 2 +- server/index.ts | 16 ++++++++++++++++ src/App.tsx | 16 ++-------------- vite.config.ts | 6 ++++++ 7 files changed, 31 insertions(+), 19 deletions(-) diff --git a/.env b/.env index 7e23104..e7b7e38 100644 --- a/.env +++ b/.env @@ -8,3 +8,4 @@ VITE_MARKETPLACE_KIND=MarketplacePanel VITE_INSTANCES_API_GROUP=incloud.io VITE_INSTANCES_VERSION=v1alpha1 VITE_INSTANCES_RESOURCE_NAME=v1alpha1 +VITE_BFF_URL= diff --git a/.env.options.dist b/.env.options.dist index 7f4a5af..e902edf 100644 --- a/.env.options.dist +++ b/.env.options.dist @@ -9,3 +9,4 @@ MARKETPLACE_KIND= INSTANCES_API_GROUP= INSTANCES_VERSION= INSTANCES_RESOURCE_NAME= +BFF_URL= diff --git a/package-lock.json b/package-lock.json index c063437..db5a323 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@ant-design/icons": "5.6.0", "@monaco-editor/react": "4.6.0", "@originjs/vite-plugin-federation": "1.3.6", - "@prorobotech/openapi-k8s-toolkit": "^0.0.1-alpha.38", + "@prorobotech/openapi-k8s-toolkit": "^0.0.1-alpha.39", "@readme/openapi-parser": "4.0.0", "@reduxjs/toolkit": "2.2.5", "@tanstack/react-query": "5.62.2", @@ -2807,9 +2807,9 @@ } }, "node_modules/@prorobotech/openapi-k8s-toolkit": { - "version": "0.0.1-alpha.38", - "resolved": "https://registry.npmjs.org/@prorobotech/openapi-k8s-toolkit/-/openapi-k8s-toolkit-0.0.1-alpha.38.tgz", - "integrity": "sha512-frJPlCm1SWyep3YQcAGGSua94Tgrm6oqXCctkKD+29q+B2oHi05rSbSbsAmIKG3HAQrmUGbWtD3Zg8C/+RJ99g==", + "version": "0.0.1-alpha.39", + "resolved": "https://registry.npmjs.org/@prorobotech/openapi-k8s-toolkit/-/openapi-k8s-toolkit-0.0.1-alpha.39.tgz", + "integrity": "sha512-goiUea/bDtE55KVvmrQ6aX1CSSSkHMM4BavO1oZmEj3uAtiPNVEJ67jqCNjxK2dWoLRKH//Neu/9tF8XrOu/0Q==", "license": "MIT", "dependencies": { "@monaco-editor/react": "4.6.0", diff --git a/package.json b/package.json index bb34284..3a1a085 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@ant-design/icons": "5.6.0", "@monaco-editor/react": "4.6.0", "@originjs/vite-plugin-federation": "1.3.6", - "@prorobotech/openapi-k8s-toolkit": "0.0.1-alpha.38", + "@prorobotech/openapi-k8s-toolkit": "0.0.1-alpha.39", "@readme/openapi-parser": "4.0.0", "@reduxjs/toolkit": "2.2.5", "@tanstack/react-query": "5.62.2", diff --git a/server/index.ts b/server/index.ts index bc334a4..029ac14 100644 --- a/server/index.ts +++ b/server/index.ts @@ -32,6 +32,7 @@ const INSTANCES_API_GROUP = const INSTANCES_VERSION = process.env.LOCAL === 'true' ? options?.INSTANCES_VERSION : process.env.INSTANCES_VERSION const INSTANCES_RESOURCE_NAME = process.env.LOCAL === 'true' ? options?.INSTANCES_RESOURCE_NAME : process.env.INSTANCES_RESOURCE_NAME +const BFF_URL = process.env.LOCAL === 'true' ? options?.BFF_URL : process.env.BFF_URL const healthcheck = require('express-healthcheck') const promBundle = require('express-prom-bundle') @@ -98,6 +99,21 @@ if (process.env.LOCAL === 'true') { // }, }), ) + + // Proxy: /openapi-bff + app.use( + '/openapi-bff', + createProxyMiddleware({ + target: BFF_URL, + changeOrigin: true, + secure: false, + // pathRewrite: (path, req) => path.replace(/^\/bff/, ''), + // logLevel: 'debug', + // onProxyReq: (proxyReq, req, res) => { + // console.debug(`[PROXY] ${req.method} ${req.originalUrl} -> ${proxyReq.getHeader('host')}${proxyReq.path}`) + // }, + }), + ) } else { console.log('🚫 Proxies are disabled.') } diff --git a/src/App.tsx b/src/App.tsx index b4369e3..7f1aa1c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,8 +4,6 @@ import React, { FC, useEffect } from 'react' import { BrowserRouter, Routes, Route } from 'react-router-dom' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' -import { dereference } from '@readme/openapi-parser' -import { OpenAPIV2 } from 'openapi-types' import { ConfigProvider, theme as antdtheme } from 'antd' import { getSwagger } from '@prorobotech/openapi-k8s-toolkit' import { useSelector, useDispatch } from 'react-redux' @@ -62,19 +60,9 @@ export const App: FC = ({ isFederation, forcedTheme }) => { } getSwagger({ clusterName: cluster }) .then(({ data }) => { - dereference(data, { - dereference: { - circular: 'ignore', - }, - }) - .then(data => { - // deference is a cruel thing - dispatch(setSwagger(data as OpenAPIV2.Document)) - }) - .catch(error => { - console.log('Swagger: deref error', error) - }) + dispatch(setSwagger(data)) }) + .catch(error => { console.log('Swagger: fetch error', error) }) diff --git a/vite.config.ts b/vite.config.ts index c93a099..a5125c3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -78,6 +78,12 @@ export default defineConfig({ secure: false, rewrite: path => path.replace(/^\/clusterlist/, ''), }, + '/openapi-bff': { + target: options?.BFF_URL, + changeOrigin: true, + secure: false, + // rewrite: path => path.replace(/^\/bff/, ''), + }, }, }, })