Files
OmniRoute/tests/unit/vnc-session.test.ts
backryun 7ed8ada432 feat(providers): restore ChatGPT Web via clean-room browser transport (#12239)
Restores ChatGPT Web on a clean-room browser transport, merged on the operator's explicit decision.

Worth stating precisely, because this touches a provenance decision: the PR does not revert #11754. It narrows RETIRED_COMMON_CHATGPT_WEB_PROVIDER_IDS to the single GPL-derived alias cgpt-web and registers chatgpt-web as a separate clean-room id. The old implementation stays retired and blocked; the retirement machinery, its error code and its 410 contract are untouched. All four retirement suites agree with that distinction and pass unchanged.

The 44 protected agent-instruction surfaces this PR touches (AGENTS.md, llm.txt and its 42 mirrors, README) were verified rather than trusted: masking digits and comparing the removed and added line sets gives 264 lines on each side, identical — every change is a provider-count substitution, with no sentence added, removed or reworded.

Reconciled on merge: clean against the tip, with the two chat chokepoints this PR grows (src/sse/handlers/chat.ts +40, open-sse/handlers/chatCore.ts +30) recorded in the file-size baseline under an annotation. Verified that exactly those two caps move and nothing else, so the #12411 ratchet holds. The rebaseline is carried on this branch rather than left in a validation worktree — the propagation mistake that put the 2026-09-02 merge waves base-red in #12434.

Verified: 504/504 across the PR's 44 test files plus all four chatgpt-web retirement suites, check:provider-consistency OK (272 REGISTRY entries, 355 canonical providers), check-file-size OK, and every changed TypeScript file parses.

Thanks @backryun — separating the clean-room id from the retired alias, instead of reopening the old one, is what made this reviewable.
2026-09-02 10:31:41 -03:00

94 lines
3.8 KiB
TypeScript

import { test } from "node:test";
import assert from "node:assert/strict";
import {
getVncProvider,
isVncProvider,
listVncProviders,
VNC_CONFIG,
} from "@/lib/vncSession/manifest";
import { harvestToCredentials, type HarvestResult } from "@/lib/vncSession/harvest";
test("manifest lookup resolves known providers and rejects unknown", () => {
assert.equal(isVncProvider("gemini-web"), true);
assert.equal(isVncProvider("chatgpt-web"), true);
assert.equal(isVncProvider("chatgpt-web-codex"), true);
assert.equal(isVncProvider("not-a-provider"), false);
assert.equal(getVncProvider(null), null);
assert.equal(getVncProvider("gemini-web")?.url, "https://gemini.google.com");
});
test("provider list has well-formed URLs, unique IDs, and canonical requirements", () => {
const providers = listVncProviders();
assert.ok(providers.length > 0);
assert.equal(new Set(providers.map((entry) => entry.id)).size, providers.length);
for (const entry of providers) {
assert.match(entry.url, /^https:\/\//, `bad url for ${entry.id}`);
assert.ok(["cookie", "token"].includes(entry.requirement.kind), `bad kind for ${entry.id}`);
assert.ok(
Array.isArray(entry.requirement.storageKeys),
`storageKeys not array for ${entry.id}`
);
assert.equal(getVncProvider(entry.id)?.id, entry.id);
}
});
test("VNC_CONFIG defaults to the bundled Chromium browser image", () => {
assert.equal(VNC_CONFIG.image, "omniroute-vnc-chromium:local");
assert.equal(VNC_CONFIG.containerVncPort, 3000);
assert.equal(VNC_CONFIG.containerCdpPort, 9223);
assert.equal(VNC_CONFIG.persistProfiles, false);
assert.match(VNC_CONFIG.chromiumArgs, /--remote-debugging-port=9222/);
});
test("harvestToCredentials builds a cookie header and allowlisted provider data", () => {
const provider = getVncProvider("claude-web")!;
const harvest: HarvestResult = {
cookies: [
{ name: "sessionKey", value: "abc123", domain: ".claude.ai", path: "/" },
{ name: "other", value: "zzz", domain: ".claude.ai", path: "/" },
],
localStorage: {},
cookieHeader: "sessionKey=abc123; other=zzz",
hasCredential: true,
};
const { providerSpecificData, apiKey } = harvestToCredentials(harvest, provider);
assert.equal(providerSpecificData.sessionKey, "abc123");
assert.equal(providerSpecificData.other, undefined);
assert.equal(providerSpecificData.cookie, "sessionKey=abc123; other=zzz");
assert.equal(apiKey, null);
});
test("harvestToCredentials extracts a token for token-kind providers", () => {
const provider = getVncProvider("deepseek-web")!;
const harvest: HarvestResult = {
cookies: [{ name: "userToken", value: "tok-xyz", domain: ".deepseek.com", path: "/" }],
localStorage: { userToken: "tok-xyz" },
cookieHeader: "",
hasCredential: true,
};
const { providerSpecificData, apiKey } = harvestToCredentials(harvest, provider);
assert.equal(apiKey, "tok-xyz");
assert.equal(providerSpecificData.token, "tok-xyz");
assert.equal(providerSpecificData.userToken, "tok-xyz");
});
test("harvestToCredentials preserves declared multi-cookie credentials", () => {
const provider = getVncProvider("grok-web")!;
const harvest: HarvestResult = {
cookies: [
{ name: "sso", value: "1", domain: ".grok.com", path: "/" },
{ name: "sso-rw", value: "2", domain: ".grok.com", path: "/" },
{ name: "unrelated", value: "3", domain: ".grok.com", path: "/" },
],
localStorage: {},
cookieHeader: "sso=1; sso-rw=2; unrelated=3",
hasCredential: true,
};
const { providerSpecificData } = harvestToCredentials(harvest, provider);
assert.equal(providerSpecificData.sso, "1");
assert.equal(providerSpecificData["sso-rw"], "2");
assert.equal(providerSpecificData.unrelated, undefined);
assert.equal(providerSpecificData.cookie, "sso=1; sso-rw=2; unrelated=3");
});