fix: ensureBridge rileva Firefox già attivo su 9222 (isPortOpen) e avvia solo il bridge

- isPortOpen(): check TCP su 127.0.0.1:9222 (Firefox Remote Agent non espone /json/version)
- ensureBridge: ciclo 0 senza forceRestart → se porta aperta avvia solo il bridge, altrimenti startFirefox; cicli successivi riavviano Firefox (sessione orfana)
- risolve il caso 'Firefox già attivo' (istanza --no-remote non agganciabile)
This commit is contained in:
enne2
2026-08-13 17:40:56 +02:00
parent 59bb49c106
commit 598491067b
2 changed files with 2062 additions and 1 deletions
+31 -1
View File
@@ -29,6 +29,7 @@ import { spawn, execFile } from "node:child_process";
import { readFileSync } from "node:fs";
import { homedir } from "node:os";
import { join } from "node:path";
import { Socket } from "node:net";
import { promisify } from "node:util";
const execFileAsync = promisify(execFile);
@@ -253,6 +254,31 @@ async function waitBridgeReady(timeoutMs = 15_000): Promise<boolean> {
* senza session.end), riavvia Firefox e riprova fino a MAX_BRIDGE_CYCLES.
* Con forceRestart=true riavvia comunque (usato dopo errori di sessione).
*/
/**
* Verifica se Firefox Remote Agent è già in ascolto sulla porta BiDi (9222).
* Usato da ensureBridge per NON riavviare un Firefox già attivo (istanza
* --no-remote non agganciabile dallo script di start).
*/
function isPortOpen(port: number, host = "127.0.0.1"): Promise<boolean> {
return new Promise((resolve) => {
const sock = new Socket();
sock.setTimeout(2_000);
sock.once("connect", () => {
sock.destroy();
resolve(true);
});
sock.once("timeout", () => {
sock.destroy();
resolve(false);
});
sock.once("error", () => {
sock.destroy();
resolve(false);
});
sock.connect(port, host);
});
}
async function ensureBridge(
profile: "dedicated" | "main" = "dedicated",
opts: { forceRestart?: boolean } = {},
@@ -263,8 +289,12 @@ async function ensureBridge(
log(`ciclo ${cycle}: riavvio Firefox (possibile sessione BiDi orfana)`);
await execFileAsync(SCRIPT, ["stop"]).catch(() => {});
await new Promise((r) => setTimeout(r, 1_500));
await startFirefox(profile);
} else if (!(await isPortOpen(9222))) {
await startFirefox(profile);
} else {
log("Firefox già attivo su 9222: avvio solo il bridge");
}
await startFirefox(profile);
await startBridgeProcess();
if (await waitBridgeReady()) return;
log(`ciclo ${cycle}: bridge non pronto, kill processo`);
+2031
View File
File diff suppressed because it is too large Load Diff