From 0c44185d0dd88c6decae4547b5956690a018417f Mon Sep 17 00:00:00 2001 From: Mourad Maatoug Date: Mon, 18 May 2026 16:43:09 +0200 Subject: [PATCH] fix(@omniroute/opencode-provider): address gemini-code-assist review - fetchJSON: consolidate all ops inside try, handle non-Error throws, catch JSON parse errors - fetchLiveModels: null-safe data-envelope check - listCombos: null-safe combos-envelope check - createOmniRouteComboConfig: omit providers key when filtered list empty --- @omniroute/opencode-provider/src/index.ts | 31 ++++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/@omniroute/opencode-provider/src/index.ts b/@omniroute/opencode-provider/src/index.ts index 38d060f688..d13b50afd9 100644 --- a/@omniroute/opencode-provider/src/index.ts +++ b/@omniroute/opencode-provider/src/index.ts @@ -330,25 +330,23 @@ async function fetchJSON(url: string, apiKey: string, timeoutMs: number): Pro const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); - let response: Response; try { - response = await fetch(url, { + const response = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` }, signal: controller.signal, }); + + if (!response.ok) { + throw new Error(`received HTTP ${response.status}`); + } + + return (await response.json()) as T; } catch (err) { - throw new Error( - `@omniroute/opencode-provider: request to ${url} failed: ${(err as Error).message}` - ); + const message = err instanceof Error ? err.message : String(err); + throw new Error(`@omniroute/opencode-provider: request to ${url} failed: ${message}`); } finally { clearTimeout(timer); } - - if (!response.ok) { - throw new Error(`@omniroute/opencode-provider: received HTTP ${response.status} from ${url}`); - } - - return response.json() as Promise; } /** @@ -403,7 +401,7 @@ export async function fetchLiveModels( const rawList: unknown[] = Array.isArray(body) ? body - : Array.isArray((body as { data?: unknown[] }).data) + : body && typeof body === "object" && Array.isArray((body as { data?: unknown[] }).data) ? ((body as { data: unknown[] }).data as unknown[]) : []; @@ -498,7 +496,7 @@ export async function listCombos( const body = await fetchJSON(url, key, timeoutMs); const rawList: unknown[] = Array.isArray(body) ? body - : Array.isArray((body as { combos?: unknown[] }).combos) + : body && typeof body === "object" && Array.isArray((body as { combos?: unknown[] }).combos) ? ((body as { combos: unknown[] }).combos as unknown[]) : []; @@ -586,8 +584,11 @@ export function createOmniRouteComboConfig( payload.compressionOverride = options.compressionOverride; } - if (options.providers !== undefined && options.providers.length > 0) { - payload.providers = options.providers.filter((p) => typeof p === "string" && p.trim()); + if (options.providers !== undefined) { + const providers = options.providers.filter((p) => typeof p === "string" && p.trim()); + if (providers.length > 0) { + payload.providers = providers; + } } return payload;