From 2e5b02e7532df9478d7dfa14139cd14386e0c8b8 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Tue, 7 Apr 2026 22:48:17 +0300 Subject: [PATCH] test: cover external OpenCode proxy routing - Expose external OpenCode base URL to proxy runtime - Add regression coverage for provider requests through external OpenCode hosts --- packages/web/server/index.js | 1 + packages/web/server/opencode-proxy.test.js | 35 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/packages/web/server/index.js b/packages/web/server/index.js index 5c517146..c9d4fc33 100644 --- a/packages/web/server/index.js +++ b/packages/web/server/index.js @@ -596,6 +596,7 @@ const serverUtilsRuntime = createServerUtilsRuntime({ longRequestTimeoutMs: LONG_REQUEST_TIMEOUT_MS, getRuntime: () => ({ openCodePort, + openCodeBaseUrl, openCodeNotReadySince, isOpenCodeReady, isRestartingOpenCode, diff --git a/packages/web/server/opencode-proxy.test.js b/packages/web/server/opencode-proxy.test.js index b2c2490b..4521a699 100644 --- a/packages/web/server/opencode-proxy.test.js +++ b/packages/web/server/opencode-proxy.test.js @@ -80,4 +80,39 @@ describe('OpenCode proxy SSE forwarding', () => { expect(await response.text()).toBe('data: {"ok":true}\n\n'); expect(seenAuthorization).toBe('Bearer test-token'); }); + + it('routes generic API requests through external OpenCode base URL', async () => { + const upstream = express(); + upstream.get('/config/providers', (_req, res) => { + res.json({ ok: true, source: 'external-host' }); + }); + upstreamServer = await listen(upstream); + const upstreamPort = upstreamServer.address().port; + const externalBaseUrl = `http://127.0.0.1:${upstreamPort}`; + + const app = express(); + registerOpenCodeProxy(app, { + fs: {}, + os: {}, + path, + OPEN_CODE_READY_GRACE_MS: 0, + getRuntime: () => ({ + openCodePort: 3902, + openCodeBaseUrl: externalBaseUrl, + isOpenCodeReady: true, + openCodeNotReadySince: 0, + isRestartingOpenCode: false, + }), + getOpenCodeAuthHeaders: () => ({}), + buildOpenCodeUrl: (requestPath) => `${externalBaseUrl}${requestPath}`, + ensureOpenCodeApiPrefix: () => {}, + }); + proxyServer = await listen(app); + const proxyPort = proxyServer.address().port; + + const response = await fetch(`http://127.0.0.1:${proxyPort}/api/config/providers`); + + expect(response.status).toBe(200); + expect(await response.json()).toEqual({ ok: true, source: 'external-host' }); + }); });