|
| 1 | +import { createServer } from "node:http"; |
| 2 | +import { once } from "node:events"; |
1 | 3 | import { test } from "node:test"; |
2 | 4 | import assert from "node:assert/strict"; |
3 | 5 | import { mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs"; |
@@ -183,3 +185,49 @@ test("heygenAuthHeaders says to fix an unreadable credentials path, and to log i |
183 | 185 | } |
184 | 186 | }); |
185 | 187 | }); |
| 188 | + |
| 189 | +test("host-managed OAuth reaches its paired API host in both distributed helpers", async () => { |
| 190 | + const originalFetch = globalThis.fetch; |
| 191 | + const previousHost = process.env.HEYGEN_API_URL; |
| 192 | + const previousToken = process.env.HEYGEN_ACCESS_TOKEN; |
| 193 | + const calls = []; |
| 194 | + const server = createServer((request, response) => { |
| 195 | + calls.push({ path: request.url, authorization: request.headers.authorization }); |
| 196 | + response.setHeader("content-type", "application/json"); |
| 197 | + response.end(JSON.stringify({ ok: true })); |
| 198 | + }); |
| 199 | + server.listen(0, "127.0.0.1"); |
| 200 | + await once(server, "listening"); |
| 201 | + try { |
| 202 | + process.env.HEYGEN_API_URL = `http://127.0.0.1:${server.address().port}///`; |
| 203 | + process.env.HEYGEN_ACCESS_TOKEN = "fixture-token"; |
| 204 | + const origin = new URL(process.env.HEYGEN_API_URL).origin; |
| 205 | + globalThis.fetch = (url, options) => { |
| 206 | + assert.equal(new URL(url).origin, origin, "this test must never reach the internet"); |
| 207 | + return originalFetch(url, options); |
| 208 | + }; |
| 209 | + for (const file of [ |
| 210 | + "./heygen.mjs?paired-host", |
| 211 | + "../../../../../packages/cli/src/audio/scripts/lib/heygen.mjs?paired-host", |
| 212 | + ]) { |
| 213 | + const helper = await import(new URL(file, import.meta.url)); |
| 214 | + assert.deepEqual( |
| 215 | + await helper.heygenJSON("/voices", { headers: helper.heygenAuthHeaders() }), |
| 216 | + { |
| 217 | + ok: true, |
| 218 | + }, |
| 219 | + ); |
| 220 | + } |
| 221 | + assert.deepEqual(calls, [ |
| 222 | + { path: "/v3/voices", authorization: "Bearer fixture-token" }, |
| 223 | + { path: "/v3/voices", authorization: "Bearer fixture-token" }, |
| 224 | + ]); |
| 225 | + } finally { |
| 226 | + globalThis.fetch = originalFetch; |
| 227 | + if (previousHost === undefined) delete process.env.HEYGEN_API_URL; |
| 228 | + else process.env.HEYGEN_API_URL = previousHost; |
| 229 | + if (previousToken === undefined) delete process.env.HEYGEN_ACCESS_TOKEN; |
| 230 | + else process.env.HEYGEN_ACCESS_TOKEN = previousToken; |
| 231 | + await new Promise((resolve) => server.close(resolve)); |
| 232 | + } |
| 233 | +}); |
0 commit comments