diff options
| author | Adam <[email protected]> | 2026-02-12 13:41:22 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-02-12 13:41:22 -0600 |
| commit | 958320f9c1572841c6c4b7aeba4559a79693002d (patch) | |
| tree | 8bfdd5d101d2ba1ac22f11aac02727cdb8e7d4eb | |
| parent | d1ee4c8dca7ec88a608cc640dd11ecb1b0ceb347 (diff) | |
| download | opencode-958320f9c1572841c6c4b7aeba4559a79693002d.tar.gz opencode-958320f9c1572841c6c4b7aeba4559a79693002d.zip | |
fix(app): remote http server connections
| -rw-r--r-- | packages/app/src/context/global-sdk.tsx | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/packages/app/src/context/global-sdk.tsx b/packages/app/src/context/global-sdk.tsx index 8c50a8878..346657e2f 100644 --- a/packages/app/src/context/global-sdk.tsx +++ b/packages/app/src/context/global-sdk.tsx @@ -12,19 +12,32 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo const platform = usePlatform() const abort = new AbortController() + const password = typeof window === "undefined" ? undefined : window.__OPENCODE__?.serverPassword + const auth = (() => { - if (typeof window === "undefined") return - const password = window.__OPENCODE__?.serverPassword if (!password) return + if (!server.isLocal()) return return { Authorization: `Basic ${btoa(`opencode:${password}`)}`, } })() + const eventFetch = (() => { + if (!platform.fetch) return + try { + const url = new URL(server.url) + const loopback = url.hostname === "localhost" || url.hostname === "127.0.0.1" || url.hostname === "::1" + if (url.protocol === "http:" && !loopback) return platform.fetch + } catch { + return + } + })() + const eventSdk = createOpencodeClient({ baseUrl: server.url, signal: abort.signal, - headers: auth, + fetch: eventFetch, + headers: eventFetch ? undefined : auth, }) const emitter = createGlobalEmitter<{ [key: string]: Event @@ -80,7 +93,17 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo let streamErrorLogged = false void (async () => { - const events = await eventSdk.global.event() + const events = await eventSdk.global.event({ + onSseError: (error) => { + if (streamErrorLogged) return + streamErrorLogged = true + console.error("[global-sdk] event stream error", { + url: server.url, + fetch: eventFetch ? "platform" : "webview", + error, + }) + }, + }) let yielded = Date.now() for await (const event of events.stream) { const directory = event.directory ?? "global" @@ -106,7 +129,11 @@ export const { use: useGlobalSDK, provider: GlobalSDKProvider } = createSimpleCo .catch((error) => { if (streamErrorLogged) return streamErrorLogged = true - console.error("[global-sdk] event stream failed", error) + console.error("[global-sdk] event stream failed", { + url: server.url, + fetch: eventFetch ? "platform" : "webview", + error, + }) }) onCleanup(() => { |
