mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-11 17:52:31 +03:00
* fix(web-search): bind each search provider attempt to its connection proxy (#9201) The search path resolved credentials but never resolved the connection proxy, so the upstream fetch always egressed directly. The connection-test path already used the proxy correctly, proving the gap was in the data-plane transport binding. - Resolve the connection proxy before each upstream attempt using the existing resolveProxyForConnection(connectionId, apiKeyId, providerId) precedence chain, then wrap the fetch in runWithProxyContext so the patched globalThis.fetch routes through the configured proxy. - Resolve and bind the alternate connection proxy independently during failover, so the primary account's context never leaks into the fallback. - Carry connectionId and apiKeyId through SearchHandlerOptions into the route and executeWebSearch callers. - Add connectionId to all saveCallLog entries in tryProvider, so the regular call log identifies the account. - Emit a sanitized logProxyEvent per real upstream search attempt with provider, connection ID, proxy level, status, duration, and target origin/path (no query, API key, or proxy credentials). - Cover both POST /v1/search and executeWebSearch() consumers (MCP, internal, skills) since both bypassed the same proxy binding. * fix(sse): extract search proxy binding into leaf module to fit file-size cap Move the per-attempt proxy resolution, proxied fetch, sanitized proxy-event emission, and response handling for web search providers out of open-sse/handlers/search.ts into a new open-sse/handlers/search/searchProxy.ts, so the provider-dispatch chokepoint (tryProvider) stays a thin wiring call and search.ts fits back under the frozen file-size cap (1536 lines). --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>