mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 23:03:09 +00:00
* feat(media-use): use CLI free HeyGen usage * fix(media-use): address #2027 R1 nits — gate cli-source header to OAuth, export origin constant - X-HeyGen-Source is now sent only on OAuth (Bearer) requests, not API-key ones — the backend ignores it for API-key traffic (normal billing), so it was dead metadata there. buildAuthHeaders + heygenAuthHeaders + tests updated. - Export HEYGEN_CLI_ORIGIN_HEADER ("X-HeyGen-Client-Origin") for future cli:<origin> consumers. - Document the deliberate paid/X4 confirm-before-call decision on heygen.tts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H5k87mPZ4d6yiFwcWSb8Vv * refactor(cli): drop unused origin-header export, dedup auth-client tests Fallow flagged 5 findings on this PR: - major: HEYGEN_CLI_ORIGIN_HEADER was exported but never emitted or imported — speculative dead code ("future consumers"). Remove it; a real consumer can add the constant when one exists. - 4x minor duplication in client.test.ts: fold the repeated `.rejects.toSatisfy(auth-code)` assertion into expectAuthCode(), and the repeated try/catch scrubbed-message assertion into expectRejectionMessage(). No behavior change; auth/client tests still 17/17. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H5k87mPZ4d6yiFwcWSb8Vv --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { heygenAuthHeaders } from "./heygen.mjs";
|
|
|
|
function withCleanHeygenEnv(fn) {
|
|
const previousApiKey = process.env.HEYGEN_API_KEY;
|
|
const previousHyperframesApiKey = process.env.HYPERFRAMES_API_KEY;
|
|
const previousConfigDir = process.env.HEYGEN_CONFIG_DIR;
|
|
try {
|
|
delete process.env.HEYGEN_API_KEY;
|
|
delete process.env.HYPERFRAMES_API_KEY;
|
|
delete process.env.HEYGEN_CONFIG_DIR;
|
|
return fn();
|
|
} finally {
|
|
if (previousApiKey === undefined) delete process.env.HEYGEN_API_KEY;
|
|
else process.env.HEYGEN_API_KEY = previousApiKey;
|
|
if (previousHyperframesApiKey === undefined) delete process.env.HYPERFRAMES_API_KEY;
|
|
else process.env.HYPERFRAMES_API_KEY = previousHyperframesApiKey;
|
|
if (previousConfigDir === undefined) delete process.env.HEYGEN_CONFIG_DIR;
|
|
else process.env.HEYGEN_CONFIG_DIR = previousConfigDir;
|
|
}
|
|
}
|
|
|
|
test("heygenAuthHeaders does not tag API-key requests as CLI traffic", () => {
|
|
withCleanHeygenEnv(() => {
|
|
process.env.HEYGEN_API_KEY = "hg_test";
|
|
// API-key requests use normal billing; the backend ignores the cli-source
|
|
// header for them, so it's not sent.
|
|
assert.deepEqual(heygenAuthHeaders(), {
|
|
"X-Api-Key": "hg_test",
|
|
});
|
|
});
|
|
});
|
|
|
|
test("heygenAuthHeaders tags OAuth requests as CLI traffic", () => {
|
|
withCleanHeygenEnv(() => {
|
|
const dir = mkdtempSync(join(tmpdir(), "heygen-cred-"));
|
|
try {
|
|
process.env.HEYGEN_CONFIG_DIR = dir;
|
|
writeFileSync(
|
|
join(dir, "credentials"),
|
|
JSON.stringify({
|
|
oauth: {
|
|
access_token: "at_test",
|
|
expires_at: "2099-01-01T00:00:00Z",
|
|
},
|
|
}),
|
|
);
|
|
assert.deepEqual(heygenAuthHeaders(), {
|
|
Authorization: "Bearer at_test",
|
|
"X-HeyGen-Source": "cli",
|
|
});
|
|
} finally {
|
|
rmSync(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
});
|