Ctrl K
ComunidadGuías…

scripts/verify-codex-token-refresh.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// Real Codex, synthetic credentials and a loopback Responses service; never touches a user's Codex home.
import assert from "node:assert/strict";
import { spawn } from "node:child_process";
import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
import { createServer } from "node:http";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { fileURLToPath } from "node:url";
import { startChatGptTokenBridge } from "../server/drivers/chatgpt-plan-token-bridge.ts";

const cli = process.env.PROBE_CODEX || "codex";
const helper = process.env.PROBE_HELPER || fileURLToPath(new URL("../server/drivers/chatgpt-plan-token-command.ts", import.meta.url));
const runtime = process.env.PROBE_RUNTIME || process.execPath;
const event = (type, data) => `event: ${type}\ndata: ${JSON.stringify(data)}\n\n`;
async function scenario(dynamic) {
  const dir = mkdtempSync(join(tmpdir(), "omb-codex-refresh-"));
  const marker = join(dir, "tool-count");
  let expired = false, requests = [];
  const bridge = dynamic ? await startChatGptTokenBridge(async () => expired ? "fake-B" : "fake-A") : null;
  const server = createServer((req, res) => {
    req.resume();
    req.on("end", () => {
      if (!req.url?.includes("/responses")) { res.writeHead(404); res.end(); return; }
      const token = (req.headers.authorization || "").replace("Bearer ", "");
      requests.push(token);
      if (requests.length > 1 && token === "fake-A") {
        expired = true;
        res.writeHead(401, { "content-type": "application/json" });
        res.end(JSON.stringify({ error: { code: "token_expired", message: "synthetic token expired" } }));
        return;
      }
      const item = requests.length === 1 ? {
        id: "fc_fixture", type: "function_call", status: "completed", name: "exec_command", call_id: "call_fixture",
        arguments: JSON.stringify({ cmd: `if [ -n "$OMB_CODEX_AUTH_SECRET" ]; then printf leak >> '${marker}'; else printf x >> '${marker}'; fi` }),
      } : { id: "msg_fixture", type: "message", status: "completed", role: "assistant", content: [{ type: "output_text", text: "fixture ok", annotations: [] }] };
      const id = `resp_fixture${requests.length}`;
      res.writeHead(200, { "content-type": "text/event-stream" });
      res.end(event("response.created", { type: "response.created", response: { id, status: "in_progress", output: [] } }) +
        event("response.output_item.added", { type: "response.output_item.added", output_index: 0, item }) +
        event("response.output_item.done", { type: "response.output_item.done", output_index: 0, item }) +
        event("response.completed", { type: "response.completed", response: { id, status: "completed", output: [item], usage: { input_tokens: 1, output_tokens: 1, total_tokens: 2 } } }));
    });
  });
  try {
    await new Promise((resolve, reject) => { server.once("error", reject); server.listen(0, "127.0.0.1", resolve); });
    const args = ["exec", "--skip-git-repo-check", "--ephemeral", "--sandbox", "workspace-write", "-m", "gpt-5",
      "-c", 'model_provider="fixture"', "-c", 'model_providers.fixture.name="Fixture"',
      "-c", `model_providers.fixture.base_url="http://127.0.0.1:${server.address().port}/v1"`,
      "-c", 'model_providers.fixture.wire_api="responses"', "-c", "model_providers.fixture.requires_openai_auth=false",
      "-c", "model_providers.fixture.supports_websockets=false", "-c", "model_providers.fixture.stream_max_retries=0",
      "-c", "model_providers.fixture.request_max_retries=0", "-c", "features.shell_snapshot=false",
      "-c", 'shell_environment_policy.exclude=["OMB_CODEX_AUTH_SECRET","OMB_CODEX_AUTH_SOCKET","ELECTRON_RUN_AS_NODE"]',
      ...(dynamic ? ["-c", `model_providers.fixture.auth.command=${JSON.stringify(runtime)}`,
        "-c", `model_providers.fixture.auth.args=[${JSON.stringify(helper)}]`, "-c", "model_providers.fixture.auth.refresh_interval_ms=30000",
        "-c", "model_providers.fixture.auth.timeout_ms=60000"] : ["-c", 'model_providers.fixture.env_key="FIXTURE_TOKEN"']), "Run fixture tool"];
    const env = { PATH: process.env.PATH, HOME: dir, CODEX_HOME: dir, NO_PROXY: "127.0.0.1,localhost", FIXTURE_TOKEN: "fake-A", ELECTRON_RUN_AS_NODE: "1", ...bridge?.env };
    const child = spawn(cli, args, { cwd: dir, env, stdio: ["ignore", "pipe", "pipe"] });
    let output = ""; child.stdout.on("data", x => { output += x; }); child.stderr.on("data", x => { output += x; });
    const timer = setTimeout(() => child.kill("SIGTERM"), 45000);
    const code = await new Promise((resolve, reject) => { child.on("error", reject); child.on("close", resolve); });
    clearTimeout(timer);
    assert.equal(existsSync(marker) ? readFileSync(marker, "utf8") : "", "x", `tool must run once without the bridge secret: ${output.slice(-1200)}`);
    assert.deepEqual(requests, dynamic ? ["fake-A", "fake-A", "fake-B"] : ["fake-A", "fake-A"]);
    assert.equal(code, dynamic ? 0 : 1, output.slice(-1200));
    console.log(`${dynamic ? "dynamic" : "static"}: ${dynamic ? "recovered" : "failed as expected"}; tool ran once`);
  } finally { bridge?.close(); server.close(); rmSync(dir, { recursive: true, force: true }); }
}
await scenario(false);
await scenario(true);