Skip to content

Commit fcd320a

Browse files
Merge pull request #112 from voidzero/fix/dev-proxy-base-path
2 parents 36a4295 + 360b0af commit fcd320a

3 files changed

Lines changed: 43 additions & 2 deletions

File tree

‎packages/web/package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"preview": "vite preview",
1010
"lint": "biome check src/",
1111
"lint:fix": "biome check --write src/",
12-
"test": "vitest run --passWithNoTests",
12+
"test": "vitest run --passWithNoTests && node scripts/test-dev-proxy.mjs",
1313
"test:coverage": "vitest run --coverage",
1414
"test:e2e": "playwright test",
1515
"generate:api": "openapi-typescript openapi.json -o src/api/schema.d.ts"
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Run: node packages/web/scripts/test-dev-proxy.mjs
2+
import assert from "node:assert/strict";
3+
import { once } from "node:events";
4+
import { createServer as createHttpServer } from "node:http";
5+
import { test } from "node:test";
6+
import { fileURLToPath } from "node:url";
7+
import { createServer, loadConfigFromFile } from "vite";
8+
9+
const root = fileURLToPath(new URL("../", import.meta.url));
10+
const loaded = await loadConfigFromFile(
11+
{ command: "serve", mode: "development" },
12+
`${root}vite.config.ts`,
13+
);
14+
const proxy = loaded.config.plugins.find((plugin) => plugin.name === "honcho-api-proxy");
15+
16+
for (const base of ["/", "/honcho/"]) {
17+
test(`dev proxy forwards requests under ${base}`, async () => {
18+
const upstream = createHttpServer((req, res) => res.end(req.url));
19+
upstream.listen(0, "127.0.0.1");
20+
await once(upstream, "listening");
21+
const vite = await createServer({
22+
configFile: false,
23+
root,
24+
base,
25+
plugins: [proxy],
26+
optimizeDeps: { noDiscovery: true, include: [] },
27+
server: { host: "127.0.0.1", port: 0, strictPort: false },
28+
});
29+
try {
30+
await vite.listen();
31+
const response = await fetch(
32+
`http://127.0.0.1:${vite.httpServer.address().port}${base}api/v3/workspaces/list?limit=1`,
33+
{ headers: { "X-Honcho-Upstream": `http://127.0.0.1:${upstream.address().port}` } },
34+
);
35+
assert.equal(await response.text(), "/v3/workspaces/list?limit=1");
36+
} finally {
37+
await vite.close();
38+
await new Promise((resolve) => upstream.close(resolve));
39+
}
40+
});
41+
}

‎packages/web/vite.config.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function honchoApiProxy(): Plugin {
3434
return {
3535
name: "honcho-api-proxy",
3636
configureServer(server) {
37-
server.middlewares.use("/api", async (req, res) => {
37+
server.middlewares.use(`${server.config.base.replace(/\/+$/, "")}/api`, async (req, res) => {
3838
const upstream = req.headers[HEADER];
3939
if (typeof upstream !== "string" || upstream.trim() === "") {
4040
res.statusCode = 421;

0 commit comments

Comments
 (0)