summaryrefslogtreecommitdiffhomepage
path: root/packages/sdk/js/src/client.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-26 13:41:22 -0500
committerGitHub <[email protected]>2026-03-26 13:41:22 -0500
commitc7760b433b1bdbcaed7e7cd55d53b5b331f0f0fa (patch)
tree4d1a865b8890dc30767b66293923c15e2b3f6d24 /packages/sdk/js/src/client.ts
parent2e6ac8ff49eabcb1b62c1bd504338e7449f80c6e (diff)
downloadopencode-c7760b433b1bdbcaed7e7cd55d53b5b331f0f0fa.tar.gz
opencode-c7760b433b1bdbcaed7e7cd55d53b5b331f0f0fa.zip
fix(app): more startup perf (#19288)
Diffstat (limited to 'packages/sdk/js/src/client.ts')
-rw-r--r--packages/sdk/js/src/client.ts25
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/sdk/js/src/client.ts b/packages/sdk/js/src/client.ts
index e0d20152b..05f463825 100644
--- a/packages/sdk/js/src/client.ts
+++ b/packages/sdk/js/src/client.ts
@@ -5,6 +5,30 @@ import { type Config } from "./gen/client/types.gen.js"
import { OpencodeClient } from "./gen/sdk.gen.js"
export { type Config as OpencodeClientConfig, OpencodeClient }
+function pick(value: string | null, fallback?: string) {
+ if (!value) return
+ if (!fallback) return value
+ if (value === fallback) return fallback
+ if (value === encodeURIComponent(fallback)) return fallback
+ return value
+}
+
+function rewrite(request: Request, directory?: string) {
+ if (request.method !== "GET" && request.method !== "HEAD") return request
+
+ const value = pick(request.headers.get("x-opencode-directory"), directory)
+ if (!value) return request
+
+ const url = new URL(request.url)
+ if (!url.searchParams.has("directory")) {
+ url.searchParams.set("directory", value)
+ }
+
+ const next = new Request(url, request)
+ next.headers.delete("x-opencode-directory")
+ return next
+}
+
export function createOpencodeClient(config?: Config & { directory?: string }) {
if (!config?.fetch) {
const customFetch: any = (req: any) => {
@@ -26,5 +50,6 @@ export function createOpencodeClient(config?: Config & { directory?: string }) {
}
const client = createClient(config)
+ client.interceptors.request.use((request) => rewrite(request, config?.directory))
return new OpencodeClient({ client })
}