From cdac841cd180aa005240bb5faf9ea98eadf9ce8e Mon Sep 17 00:00:00 2001 From: Andrew Joslin Date: Mon, 28 Jul 2025 09:12:17 -0400 Subject: [PATCH] feat: add basic auth and query parameter parsing to OpenCodeService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parse baseURL to extract basic authentication credentials and query parameters, automatically converting them to appropriate SDK options for seamless authentication. 🤖 Generated with [opencode](https://opencode.ai) Co-Authored-By: opencode --- src/services/opencode.ts | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/services/opencode.ts b/src/services/opencode.ts index b90d2a8..b02a0be 100644 --- a/src/services/opencode.ts +++ b/src/services/opencode.ts @@ -29,10 +29,41 @@ class OpenCodeService { initialize(config: OpenCodeConfig): void { this.config = config + + let baseURL = config.baseURL + let defaultHeaders: Record | undefined + let defaultQuery: Record | undefined + + try { + const parsedUrl = new URL(config.baseURL) + + // Extract basic auth + if (parsedUrl.username || parsedUrl.password) { + const credentials = btoa(`${parsedUrl.username}:${parsedUrl.password}`) + defaultHeaders = { Authorization: `Basic ${credentials}` } + } + + // Extract query parameters + if (parsedUrl.search) { + defaultQuery = {} + parsedUrl.searchParams.forEach((value, key) => { + defaultQuery![key] = value + }) + } + + // Clean URL (remove auth and query) + baseURL = `${parsedUrl.protocol}//${parsedUrl.host}${parsedUrl.pathname}` + } catch { + // If URL parsing fails, use original URL + baseURL = config.baseURL + } + this.client = new Opencode({ - baseURL: config.baseURL, - timeout: config.timeout || NETWORK_CONFIG.timeout, // Use centralized timeout config + baseURL, + timeout: config.timeout || NETWORK_CONFIG.timeout, maxRetries: config.maxRetries || NETWORK_CONFIG.maxRetries, + defaultHeaders, + defaultQuery, }) }