/** * transportUrl — read `transport.url` the way the runtime it is running in * would read it. * * ── Why ────────────────────────────────────────────────────────────────────── * `new URL('/py/mcp')` throws `TypeError: Invalid URL`. In Node that is the * right answer: there is no document, so there is no base, and a path on its * own names nothing. In a browser it is the wrong answer twice over — the page * HAS a base, and `/py/mcp` is the single most ordinary way to name a sidecar * behind the same origin (which is also how you avoid a CORS preflight * entirely). Before this, a browser consumer's first attempt died on a * `TypeError` from deep inside the transport constructor, with nothing in the * message naming the URL or the fix. * * ── The rule ───────────────────────────────────────────────────────────────── * An ABSOLUTE url takes the identical first branch it always took, so every * existing caller is byte-identical. A relative one resolves against * `globalThis.location.href` when there is one. With neither, the refusal says * which of the two worlds it is in, because "Invalid URL" does not. * * Pattern: pure function. Role: Layer-3 tool transport. */ /** * Resolve a transport URL, honouring a document base when the runtime has one. * * @param raw the `url` from an `http` or `gateway` transport descriptor * @param caller the function to name in the refusal, e.g. `'mcpClient'` * @throws when `raw` is neither absolute nor resolvable against a base */ export declare function transportUrl(raw: string, caller: string): URL; //# sourceMappingURL=transportUrl.d.ts.map