From 526b1c3011b64cc2ad216d50e06c36ffc2b2338c Mon Sep 17 00:00:00 2001 From: Sawyer Hood Date: Thu, 10 Sep 2026 21:41:15 -0700 Subject: [PATCH] Fix SDK response method dispatch for host installer events --- packages/sdk/src/areas/hosts.ts | 4 +- .../sdk/test/host-install-response.test.ts | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 packages/sdk/test/host-install-response.test.ts diff --git a/packages/sdk/src/areas/hosts.ts b/packages/sdk/src/areas/hosts.ts index 051642b2d3..9991e89ec2 100644 --- a/packages/sdk/src/areas/hosts.ts +++ b/packages/sdk/src/areas/hosts.ts @@ -144,7 +144,7 @@ export function createHostsArea(args: CreateSdkAreaArgs): HostsArea { ); }, async installProviderCli(input) { - const response = await transport.resolve( + const response: Response = await transport.resolve( transport.api.v1.hosts[":id"]["provider-clis"].install.$post({ param: { id: input.hostId }, json: { @@ -153,7 +153,7 @@ export function createHostsArea(args: CreateSdkAreaArgs): HostsArea { }, }), ); - const text = await Response.prototype.text.call(response); + const text = await response.text(); return text .split(/\r?\n/u) .filter((line) => line.trim().length > 0) diff --git a/packages/sdk/test/host-install-response.test.ts b/packages/sdk/test/host-install-response.test.ts new file mode 100644 index 0000000000..b5b292f4f0 --- /dev/null +++ b/packages/sdk/test/host-install-response.test.ts @@ -0,0 +1,48 @@ +import { afterEach, expect, it, vi } from "vitest"; +import { createBbSdk } from "../src/core.js"; +import { createHttpTransport } from "../src/transport-http.js"; + +afterEach(() => vi.unstubAllGlobals()); + +it("reads installer events using the transport response implementation", async () => { + const events = [ + { type: "started", provider: "test-provider", command: "installer" }, + { + type: "output", + provider: "test-provider", + stream: "stdout", + text: "ready", + }, + { + type: "completed", + provider: "test-provider", + exitCode: 0, + signal: null, + success: true, + }, + ]; + const response = new Response( + events.map((event) => JSON.stringify(event)).join("\r\n") + "\r\n\n", + ); + class ServerResponse extends Response { + #bodyText = "server-owned body"; + override async text() { + return this.#bodyText; + } + } + vi.stubGlobal("Response", ServerResponse); + const sdk = createBbSdk({ + transport: createHttpTransport({ + baseUrl: "http://bb.test", + runtime: "node", + fetch: async () => response, + }), + }); + await expect( + sdk.hosts.installProviderCli({ + hostId: "test-host", + provider: "test-provider", + actionKind: "update", + }), + ).resolves.toEqual(events); +});