diff --git a/package.json b/package.json index 5ebcbd5..3e178f2 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "copy-to-clipboard": "^3.3.3", "highlight.js": "^11.7.0", + "http-proxy-middleware": "3.0.0-beta.1", "is-mobile": "^3.1.1", "markdown-it": "^13.0.1", "nanoid": "^4.0.1", diff --git a/server/middleware/apiProxy.ts b/server/middleware/apiProxy.ts index 65bd4e3..6b4a434 100644 --- a/server/middleware/apiProxy.ts +++ b/server/middleware/apiProxy.ts @@ -1,33 +1,14 @@ - -const PayloadMethods = new Set(["PATCH", "POST", "PUT", "DELETE"]); - +import { createProxyMiddleware } from 'http-proxy-middleware' export default defineEventHandler(async (event) => { - // @ts-ignore - if (event.node.req.url.startsWith('/api/')) { - // TODO: fix fetch failed - const target = (process.env.SERVER_DOMAIN || 'http://localhost:8000') + event.node.req.url - // Method - const method = getMethod(event) - // Body - let body; - if (PayloadMethods.has(method)) { - body = await readRawBody(event).catch(() => undefined); - } - // Headers - const headers = getProxyRequestHeaders(event); - - if (method === 'DELETE') { - delete headers['content-length'] - } - - return sendProxy(event, target, { - sendStream: event.node.req.url === '/api/conversation/', - fetchOptions: { - headers, - method, - body, - }, - }); - - } + await new Promise((resolve, reject) => { + createProxyMiddleware({ + target: 'http://localhost:8001', + pathFilter: '/api', + })(event.node.req, event.node.res, (err) => { + if (err) + reject(err) + else + resolve(true) + }) + }) }) diff --git a/yarn.lock b/yarn.lock index 6f46abf..dc13a83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -848,6 +848,18 @@ resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== +"@types/http-proxy@^1.17.10": + version "1.17.10" + resolved "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" + integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "18.15.11" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + "@types/resolve@1.20.2": version "1.20.2" resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" @@ -2363,6 +2375,18 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-proxy-middleware@3.0.0-beta.1: + version "3.0.0-beta.1" + resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-3.0.0-beta.1.tgz#aa5800c01d3cf340eeff89bb2de381ce67a8385f" + integrity sha512-hdiTlVVoaxncf239csnEpG5ew2lRWnoNR1PMWOO6kYulSphlrfLs5JFZtFVH3R5EUWSZNMkeUqvkvfctuWaK8A== + dependencies: + "@types/http-proxy" "^1.17.10" + debug "^4.3.4" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.5" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -2549,6 +2573,11 @@ is-number@^7.0.0: resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + is-primitive@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/is-primitive/-/is-primitive-3.0.1.tgz#98c4db1abff185485a657fc2905052b940524d05" @@ -2884,7 +2913,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==