Ctrl K
ComunidadGuías…

scripts/verify-browser-live.ts

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

Archivo original ↗Preguntar a KiBot
// Actual browser + actual BrowserPanel, always in a disposable fixture HOME.
import { readFileSync } from "node:fs";
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import { launchVerificationServer, runControlOmb } from "./control-omb.ts";
import { mountPreview, parkUntilSignal, type MountedPreview } from "./testing/preview-fixture.ts";


const binaryPath = process.env.OMB_VERIFY_BROWSER_BINARY;
const executablePath = process.env.OMB_VERIFY_BROWSER_CHROME;
if (!binaryPath || !executablePath) throw new Error("Set OMB_VERIFY_BROWSER_BINARY and OMB_VERIFY_BROWSER_CHROME to explicit installed binaries.");
const fixture = await launchVerificationServer(process.env, undefined, undefined, { binaryPath, executablePath });
let ui: MountedPreview | undefined;
try {
  await runControlOmb(["new-bot", "--name", "Pepper", "--url", fixture.info.url]);
  const { bots } = await (await fetch(`${fixture.info.url}/api/bots`)).json() as any;
  await fetch(`${fixture.info.url}/api/config`, { method: "PATCH", headers: { "content-type": "application/json" }, body: JSON.stringify({ features: { browser: true } }) });
  await fetch(`${fixture.info.url}/api/bots/${bots[0].id}`, { method: "PATCH", headers: { "content-type": "application/json" }, body: JSON.stringify({ browser: true }) });
  ui = await mountPreview(fixture, {
    entry: "/scripts/testing/browser-preview.tsx", route: "/__browser-preview.html", title: "Isolated Browser Preview",
    extraRoutes: [{
      path: "/__browser-test-page",
      handler(_req, res) {
        res.setHeader("content-type", "text/html");
        res.end(readFileSync(new URL("./testing/browser-test-page.html", import.meta.url), "utf8"));
      },
    }],
  });
  console.log(JSON.stringify({ ...fixture.info, botId: bots[0].id, previewUrl: ui.previewUrl, testPage: new URL("/__browser-test-page", ui.previewUrl).href }, null, 2));
  if (process.argv.includes("--recovery")) {
    const { verifyBrowserRecovery } = await import("./testing/browser-recovery-smoke.ts");
    await verifyBrowserRecovery({ binaryPath, executablePath, dataDir: fixture.info.dataDir,
      previewUrl: ui.previewUrl, testPage: new URL("/__browser-test-page", ui.previewUrl).href,
      screenshotPath: fixture.info.logPath.replace(/\.log$/, "-browser.png") });
  } else await parkUntilSignal();
} finally {
  await ui?.close();
  // close --all is scoped to this fixture's HOME, never the operator's.
  await promisify(execFile)(binaryPath, ["close", "--all"], { env: { HOME: fixture.info.dataDir, USERPROFILE: fixture.info.dataDir, PATH: process.env.PATH }, timeout: 15_000 }).catch(() => {});
  await fixture.close();
}