@monoes/monobrowse 1.0.25 → 1.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,8 +5,9 @@
5
5
  * launchBrowser would ever exec a browser binary, so these run fast and
6
6
  * don't depend on Chrome being installed in CI.
7
7
  *
8
- * Fixed port range (23470-23479) chosen to avoid colliding with real
9
- * services; each test binds/tears down its own listeners.
8
+ * Fixed port range (23460-23489) chosen to avoid colliding with real
9
+ * services and with reap-idle-browser.test.ts's 23490-23499, which runs in a
10
+ * parallel worker; each test binds/tears down its own listeners.
10
11
  */
11
12
  export {};
12
13
  //# sourceMappingURL=browser-launch.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-launch.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/browser-launch.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
1
+ {"version":3,"file":"browser-launch.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/browser-launch.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -5,11 +5,12 @@
5
5
  * launchBrowser would ever exec a browser binary, so these run fast and
6
6
  * don't depend on Chrome being installed in CI.
7
7
  *
8
- * Fixed port range (23470-23479) chosen to avoid colliding with real
9
- * services; each test binds/tears down its own listeners.
8
+ * Fixed port range (23460-23489) chosen to avoid colliding with real
9
+ * services and with reap-idle-browser.test.ts's 23490-23499, which runs in a
10
+ * parallel worker; each test binds/tears down its own listeners.
10
11
  */
11
12
  import { execFileSync } from 'node:child_process';
12
- import { chmodSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
13
+ import { chmodSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
13
14
  import { createServer as createHttpServer } from 'node:http';
14
15
  import { createServer as createTcpServer } from 'node:net';
15
16
  import { tmpdir } from 'node:os';
@@ -284,25 +285,33 @@ describe.skipIf(process.platform === 'win32')('launchBrowser — port 0 (Chrome
284
285
  // port too — see cli/commands.ts's `port` option default). If the bind
285
286
  // fails (another process already has it), it exits the way real Chrome does
286
287
  // when a concurrent launch wins the same "free-looking" port: before its
287
- // CDP endpoint ever opens.
288
+ // CDP endpoint ever opens. Like real Chrome on a fixed port, it writes no
289
+ // DevToolsActivePort; it announces its browser websocket on stderr, with an
290
+ // id unique to this process that /json/version reports too.
288
291
  const FAKE_CHROME_FIXED_PORT = `#!/usr/bin/env node
289
292
  ${FIXTURE_WATCHDOG}const { createServer } = require('node:http');
293
+ const { randomUUID } = require('node:crypto');
290
294
  const { writeFileSync, mkdirSync } = require('node:fs');
291
295
  const { join } = require('node:path');
292
296
  const port = Number(
293
297
  process.argv.find((a) => a.startsWith('--remote-debugging-port=')).slice('--remote-debugging-port='.length),
294
298
  );
295
299
  const dir = process.argv.find((a) => a.startsWith('--user-data-dir=')).slice('--user-data-dir='.length);
300
+ const ws = 'ws://127.0.0.1:' + port + '/devtools/browser/' + randomUUID();
296
301
  const server = createServer((req, res) => {
297
302
  res.writeHead(200, { 'Content-Type': 'application/json' });
298
- res.end(req.url === '/json/version' ? JSON.stringify({ Browser: 'Chrome/999.0.0.0' }) : '[]');
303
+ res.end(
304
+ req.url === '/json/version'
305
+ ? JSON.stringify({ Browser: 'Chrome/999.0.0.0', webSocketDebuggerUrl: ws })
306
+ : '[]',
307
+ );
299
308
  });
300
309
  server.on('error', () => {
301
310
  process.exit(21);
302
311
  });
303
312
  server.listen(port, '127.0.0.1', () => {
304
313
  mkdirSync(dir, { recursive: true });
305
- writeFileSync(join(dir, 'DevToolsActivePort'), port + '\\n/devtools/browser/fake');
314
+ process.stderr.write('\\nDevTools listening on ' + ws + '\\n');
306
315
  });
307
316
  `;
308
317
  describe.skipIf(process.platform === 'win32')('launchBrowser — concurrent launches with no explicit --port (TOCTOU race)', () => {
@@ -358,5 +367,61 @@ describe.skipIf(process.platform === 'win32')('launchBrowser — concurrent laun
358
367
  expect(dirs[0]).toBeTruthy();
359
368
  expect(dirs[1]).toBeTruthy();
360
369
  }, 15000);
370
+ it('a launch whose Chrome is still booting does not adopt a concurrent launch that took the port', async () => {
371
+ // The loaded-machine shape of the race above, made deterministic: both
372
+ // launches probe the port as free, the "fast" Chrome binds it first,
373
+ // and the "slow" one is still starting when its poll finds a Chrome
374
+ // answering there. That Chrome is not the slow launch's own, so it
375
+ // must not be returned — nor may the slow launch record its own pid
376
+ // (about to exit on the lost bind) under the fast launch's port.
377
+ const dir = fixtureDir('monobrowse-adopt-');
378
+ const fast = join(dir, 'fast-chrome.cjs');
379
+ const slow = join(dir, 'slow-chrome.cjs');
380
+ writeFileSync(fast, fixedPortChrome(500));
381
+ writeFileSync(slow, fixedPortChrome(2500));
382
+ chmodSync(fast, 0o755);
383
+ chmodSync(slow, 0o755);
384
+ // Below BASE: this file's fixed ports, clear of the kernel's
385
+ // ephemeral range, where another test's listen(0) server can land on
386
+ // the candidate the slow launch scans on to.
387
+ const port = BASE - 10;
388
+ let results = [];
389
+ try {
390
+ results = await Promise.allSettled([
391
+ launchBrowser({ port, executablePath: fast, launchTimeoutMs: 10_000 }),
392
+ launchBrowser({ port, executablePath: slow, launchTimeoutMs: 10_000 }),
393
+ ]);
394
+ }
395
+ finally {
396
+ for (const r of results) {
397
+ const pid = r.status === 'fulfilled' ? getLaunchedPid(r.value) : undefined;
398
+ if (pid) {
399
+ try {
400
+ process.kill(pid, 'SIGKILL');
401
+ }
402
+ catch {
403
+ /* already gone */
404
+ }
405
+ }
406
+ }
407
+ }
408
+ const [fastResult, slowResult] = results;
409
+ expect(fastResult).toEqual({ status: 'fulfilled', value: port });
410
+ if (slowResult.status === 'rejected')
411
+ throw slowResult.reason;
412
+ expect(slowResult.value).not.toBe(port);
413
+ // The pid tracked for the port is the Chrome that actually serves it.
414
+ const fastDir = getLaunchedUserDataDir(port);
415
+ expect(fastDir).toBeTruthy();
416
+ expect(getLaunchedPid(port)).toBe(Number(readFileSync(join(fastDir, 'pid'), 'utf8')));
417
+ }, 20_000);
361
418
  });
419
+ /** FAKE_CHROME_FIXED_PORT that waits `delayMs` before binding, and records
420
+ * its own pid in its profile dir. */
421
+ function fixedPortChrome(delayMs) {
422
+ return FAKE_CHROME_FIXED_PORT.replace('mkdirSync(dir, { recursive: true });', `mkdirSync(dir, { recursive: true });
423
+ writeFileSync(join(dir, 'pid'), String(process.pid));`)
424
+ .replace("server.listen(port, '127.0.0.1', () => {", "setTimeout(() => server.listen(port, '127.0.0.1', () => {")
425
+ .replace(/\}\);\n$/, `}), ${delayMs});\n`);
426
+ }
362
427
  //# sourceMappingURL=browser-launch.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-launch.test.js","sourceRoot":"","sources":["../../../src/__tests__/browser-launch.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-launch.test.js","sourceRoot":"","sources":["../../../src/__tests__/browser-launch.test.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,12 @@
27
27
  * manual repro. vi.useFakeTimers() (used throughout close-browser.test.ts)
28
28
  * cannot catch this class of bug, because fake timers do not model real
29
29
  * event-loop-drain semantics — hence a dedicated, real-timer test here.
30
+ *
31
+ * Ports come from the OS (listen on 0), never a fixed number (#351): these
32
+ * tests used 23495-23497, inside reap-idle-browser.test.ts's 23490-23499
33
+ * range, whose fake Chrome endpoints run in a parallel worker. A spawn that
34
+ * failed on 23495 while that file had 23495 bound looked like a lost launch
35
+ * race to launchBrowser, which moved on and reported port 23496 instead.
30
36
  */
31
37
  export {};
32
38
  //# sourceMappingURL=launch-close-settle.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch-close-settle.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/launch-close-settle.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG"}
1
+ {"version":3,"file":"launch-close-settle.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/launch-close-settle.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG"}
@@ -27,10 +27,17 @@
27
27
  * manual repro. vi.useFakeTimers() (used throughout close-browser.test.ts)
28
28
  * cannot catch this class of bug, because fake timers do not model real
29
29
  * event-loop-drain semantics — hence a dedicated, real-timer test here.
30
+ *
31
+ * Ports come from the OS (listen on 0), never a fixed number (#351): these
32
+ * tests used 23495-23497, inside reap-idle-browser.test.ts's 23490-23499
33
+ * range, whose fake Chrome endpoints run in a parallel worker. A spawn that
34
+ * failed on 23495 while that file had 23495 bound looked like a lost launch
35
+ * race to launchBrowser, which moved on and reported port 23496 instead.
30
36
  */
31
37
  import { spawn } from 'node:child_process';
32
38
  import { chmodSync, writeFileSync } from 'node:fs';
33
39
  import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
40
+ import { createServer } from 'node:net';
34
41
  import { tmpdir } from 'node:os';
35
42
  import { join } from 'node:path';
36
43
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
@@ -85,6 +92,18 @@ afterEach(async () => {
85
92
  }
86
93
  await rm(tempDir, { recursive: true, force: true });
87
94
  });
95
+ /** A port nothing is listening on, picked by the kernel from its ephemeral
96
+ * range — which the fixed-port fixtures of other test files stay below. */
97
+ function freePort() {
98
+ return new Promise((resolve, reject) => {
99
+ const server = createServer();
100
+ server.once('error', reject);
101
+ server.listen(0, '127.0.0.1', () => {
102
+ const { port } = server.address();
103
+ server.close(() => resolve(port));
104
+ });
105
+ });
106
+ }
88
107
  async function writePersistedPort(port, pid, savedAt) {
89
108
  const dir = join(tempDir, '.monomind', 'monobrowse');
90
109
  await mkdir(dir, { recursive: true });
@@ -109,32 +128,34 @@ describe('#314: launchBrowser settles instead of hanging when Chrome fails to st
109
128
  // "file not found" that launchBrowser would reject before ever exec'ing.
110
129
  writeFileSync(fake, 'not an executable\n');
111
130
  chmodSync(fake, 0o644);
131
+ const port = await freePort();
112
132
  const start = Date.now();
113
- await expect(launchBrowser({ executablePath: fake, port: 23495, launchTimeoutMs: 3000 })).rejects.toThrow(/Chrome failed to start on port 23495/);
133
+ await expect(launchBrowser({ executablePath: fake, port, launchTimeoutMs: 10_000 })).rejects.toThrow(`Chrome failed to start on port ${port}: `);
114
134
  // Without a child 'error' listener, this used to depend entirely on
115
135
  // whether something outside this function happened to intercept the
116
136
  // resulting uncaught exception (a bare node:test process has nothing
117
137
  // that does — see the module doc comment); where it happened not to
118
138
  // crash the process outright, the promise still only ever settled by
119
139
  // burning the full launchTimeoutMs. The fix rejects as soon as the
120
- // spawn error fires, so this must land in well under a second, not
121
- // ride the 3000ms timeout out.
122
- expect(Date.now() - start).toBeLessThan(1000);
123
- }, 8000);
140
+ // spawn error fires, so this must land well inside the 10s timeout
141
+ // rather than ride it out — with room for a loaded machine.
142
+ expect(Date.now() - start).toBeLessThan(5000);
143
+ }, 20_000);
124
144
  it('rejects with a clear message when Chrome exits immediately instead of opening its CDP port', async () => {
125
145
  vi.resetModules();
126
146
  const { launchBrowser } = await import('../browser/browser.js');
127
147
  const fake = join(tempDir, 'chrome.sh');
128
148
  writeFileSync(fake, '#!/bin/sh\nexit 1\n');
129
149
  chmodSync(fake, 0o755);
130
- await expect(launchBrowser({ executablePath: fake, port: 23496, launchTimeoutMs: 3000 })).rejects.toThrow(/Chrome exited before the CDP endpoint opened on port 23496/);
131
- }, 8000);
150
+ const port = await freePort();
151
+ await expect(launchBrowser({ executablePath: fake, port, launchTimeoutMs: 10_000 })).rejects.toThrow(`Chrome exited before the CDP endpoint opened on port ${port} `);
152
+ }, 20_000);
132
153
  });
133
154
  describe('#314: closeBrowser settles under the real event loop, not fake timers', () => {
134
155
  it('resolves promptly when nothing else is pinning the event loop', async () => {
135
156
  vi.resetModules();
136
157
  const { closeBrowser } = await import('../browser/browser.js');
137
- const port = 23497;
158
+ const port = await freePort();
138
159
  // A real, short-lived child — not Chrome, just something with a genuine,
139
160
  // observable exit so process.kill(pid, 0) behaves for real and there is
140
161
  // no other handle (socket, ref'd timer) left to accidentally keep the
@@ -1 +1 @@
1
- {"version":3,"file":"launch-close-settle.test.js","sourceRoot":"","sources":["../../../src/__tests__/launch-close-settle.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,yEAAyE;AACzE,0EAA0E;AAC1E,wEAAwE;AACxE,+BAA+B;AAC/B,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,MAAM,MAAM;IAES,GAAG;IADtB,QAAQ,GAAG,IAAI,GAAG,EAA4C,CAAC;IAC/D,YAAmB,GAAW;mBAAX,GAAG;QACpB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,EAAE,CAAC,KAAa,EAAE,EAA6B;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,KAAa,EAAE,GAAG,IAAe;QACpC,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,IAAY;QACf,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;QAClD,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,KAAU,CAAC;IAChB,OAAO,CAAC,GAAY;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAED,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAE7C,IAAI,OAAe,CAAC;AACpB,MAAM,QAAQ,GAAoC,EAAE,CAAC;AAErD,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC;IACpE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,EAAE,CAAC,eAAe,EAAE,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,GAAW,EAAE,OAAe;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,SAAS,CACb,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAC7B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EACtD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,EAAE,CAAC,YAAY,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAClE,UAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,CAAC,CAAC;IACR,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,QAAQ,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACzF,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,qEAAqE;QACrE,qEAAqE;QACrE,yEAAyE;QACzE,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,CACV,aAAa,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAC5E,CAAC,OAAO,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAC1D,oEAAoE;QACpE,oEAAoE;QACpE,qEAAqE;QACrE,oEAAoE;QACpE,qEAAqE;QACrE,mEAAmE;QACnE,mEAAmE;QACnE,+BAA+B;QAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC1G,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxC,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvB,MAAM,MAAM,CACV,aAAa,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAC5E,CAAC,OAAO,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uEAAuE,EAAE,GAAG,EAAE;IACrF,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,KAAK,CAAC;QAEnB,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,yCAAyC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,2BAA2B,CAAC,EAAE;YACzE,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,GAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QAEvC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAkB,CAAC;YACzD,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;SAChF,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"launch-close-settle.test.js","sourceRoot":"","sources":["../../../src/__tests__/launch-close-settle.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/browser/browser.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAgC,MAAM,UAAU,CAAC;AASnE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA8B3D,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvE;AA0BD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAyDD,wBAAsB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyF/E;AAgMD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9F;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BtE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EjF;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOtE;AA6DD,wBAAsB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9F;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAM,GAAG,aAAa,GAAG,kBAA2B,EAC/D,OAAO,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAyCf;AAiFD,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUzF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU3F"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/browser/browser.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAgC,MAAM,UAAU,CAAC;AASnE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA8B3D,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvE;AA0BD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAyDD,wBAAsB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyF/E;AAyPD,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9F;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BtE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EjF;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOtE;AA6DD,wBAAsB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU9F;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAM,GAAG,aAAa,GAAG,kBAA2B,EAC/D,OAAO,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAyCf;AAiFD,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUzF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU3F"}
@@ -1,4 +1,5 @@
1
1
  import { execSync, spawn } from 'node:child_process';
2
+ import { randomUUID } from 'node:crypto';
2
3
  import { existsSync, readFileSync, rmSync } from 'node:fs';
3
4
  import { connect } from 'node:net';
4
5
  import { tmpdir } from 'node:os';
@@ -237,18 +238,26 @@ function readDevToolsActivePort(file) {
237
238
  * for a free port at bind time — atomic, nothing to collide on — and writes
238
239
  * the port it got to DevToolsActivePort in its own (caller-dedicated) profile
239
240
  * directory, which is proof the endpoint is the process we spawned.
241
+ *
242
+ * A fixed port needs its own proof, since Chrome writes DevToolsActivePort
243
+ * only for port 0. Once listening, Chrome prints `DevTools listening on
244
+ * ws://…/devtools/browser/<id>` to stderr, and `<id>` is unique to that
245
+ * browser process, the same one `/json/version` reports. An endpoint is
246
+ * adopted only when it reports the id our own child printed. Without that
247
+ * check, a launch whose Chrome was still booting found a concurrent
248
+ * launch's Chrome on the shared port and returned it, recording its own
249
+ * doomed pid there. It also covers Chrome's [::1] fallback described above.
240
250
  */
241
251
  async function launchOnFreePort(config, port) {
242
252
  const chromePath = findChrome(config.executablePath);
243
- // Suffixed with our own pid: two concurrent launches that both probe the
244
- // same candidate port as free (the race this function exists to survive —
245
- // see the retry-on-collision caller above) briefly run Chrome with
246
- // *identical* --user-data-dir values if it were derived from the port
247
- // alone, sharing a profile directory (lock files, preferences, the
248
- // DevToolsActivePort file itself) between two unrelated Chrome processes
249
- // for as long as the loser stays alive. Different processes always have
250
- // different pids, so this can never collide even when the port does.
251
- const userDataDir = config.userDataDir ?? join(tmpdir(), `monomind-browser-${port}-${process.pid}`);
253
+ // Unique per launch, not just per port and pid: two concurrent launches
254
+ // that both probe the same candidate port as free (the race this function
255
+ // exists to survive — see the retry-on-collision caller above) would
256
+ // otherwise share one profile directory (lock files, preferences, the
257
+ // DevToolsActivePort file itself) — including two launches from the same
258
+ // process, where a pid suffix alone is identical.
259
+ const userDataDir = config.userDataDir ??
260
+ join(tmpdir(), `monomind-browser-${port}-${process.pid}-${randomUUID().slice(0, 8)}`);
252
261
  const activePortFile = join(userDataDir, 'DevToolsActivePort');
253
262
  // A reused profile dir may hold a previous run's file naming a port some
254
263
  // other process now owns.
@@ -292,8 +301,25 @@ async function launchOnFreePort(config, port) {
292
301
  const args = [...defaultArgs, ...callerArgs];
293
302
  const child = spawn(chromePath, args, {
294
303
  detached: true,
295
- stdio: 'ignore',
304
+ // stderr carries the fixed-port ownership proof (see above). The pipe is
305
+ // closed as soon as this launch settles, so a Chrome that outlives us
306
+ // never blocks writing to it.
307
+ stdio: port === 0 ? 'ignore' : ['ignore', 'ignore', 'pipe'],
296
308
  });
309
+ let announcedBrowserId = null;
310
+ if (child.stderr) {
311
+ let stderrTail = '';
312
+ child.stderr.setEncoding('utf8');
313
+ child.stderr.on('data', (chunk) => {
314
+ if (announcedBrowserId)
315
+ return;
316
+ stderrTail = (stderrTail + chunk).slice(-4096);
317
+ announcedBrowserId = browserIdOf(/DevTools listening on (ws:\/\/\S+)\r?\n/.exec(stderrTail)?.[1]);
318
+ });
319
+ child.stderr.on('error', () => {
320
+ /* closed under us — nothing to read */
321
+ });
322
+ }
297
323
  // Without this, a spawn failure (e.g. EACCES/ENOENT — chromePath exists per
298
324
  // findChrome()'s existsSync check but isn't actually executable, or is
299
325
  // removed between the check and exec) fires Node's 'error' event on the
@@ -333,8 +359,8 @@ async function launchOnFreePort(config, port) {
333
359
  // map entry with its own pid — including the LOSING, about-to-exit
334
360
  // process's pid overwriting the real winner's, corrupting the very map
335
361
  // closeBrowser()'s kill fallback depends on.
336
- // With port 0 a refused or timed-out launch is not tracked under any port,
337
- // so no closeBrowser() could ever reach it — stop it rather than leave it
362
+ // A refused or timed-out launch is not tracked under any port, so no
363
+ // closeBrowser() could ever reach it — stop it rather than leave it
338
364
  // running.
339
365
  const killUntracked = () => {
340
366
  try {
@@ -345,47 +371,76 @@ async function launchOnFreePort(config, port) {
345
371
  /* already gone */
346
372
  }
347
373
  };
374
+ // Our own Chrome, not just some Chrome, is serving `boundPort`. For port 0
375
+ // the port came from our own profile's DevToolsActivePort, so it is.
376
+ const isOwnEndpoint = async (boundPort) => {
377
+ if (port === 0)
378
+ return true;
379
+ if (!announcedBrowserId)
380
+ return false;
381
+ const wsUrl = await fetchBrowserWebSocketUrl(boundPort).catch(() => null);
382
+ return browserIdOf(wsUrl ?? undefined) === announcedBrowserId;
383
+ };
348
384
  const launchTimeout = config.launchTimeoutMs ?? LAUNCH_TIMEOUT;
349
385
  const deadline = Date.now() + launchTimeout;
350
- while (Date.now() < deadline) {
351
- if (earlyFailure)
352
- throw earlyFailure;
353
- await sleep(POLL_INTERVAL);
354
- if (earlyFailure)
355
- throw earlyFailure;
356
- const boundPort = port === 0 ? readDevToolsActivePort(activePortFile) : port;
357
- if (boundPort !== null && (await isPortOpen(boundPort))) {
358
- const identity = await chromeIdentity(boundPort);
359
- if (identity === 'chrome') {
360
- track(boundPort);
361
- return boundPort;
362
- }
363
- // A Chrome that has only just opened its endpoint, on a loaded
364
- // machine, can answer /json/list (no timeout) yet miss the identity
365
- // check's 1 s timeout on /json/version. That says nothing about who is
366
- // listening — keep polling rather than refuse our own Chrome.
367
- if (identity === 'unknown')
368
- continue;
369
- if (port === 0)
386
+ try {
387
+ while (Date.now() < deadline) {
388
+ if (earlyFailure)
389
+ throw earlyFailure;
390
+ await sleep(POLL_INTERVAL);
391
+ if (earlyFailure)
392
+ throw earlyFailure;
393
+ const boundPort = port === 0 ? readDevToolsActivePort(activePortFile) : port;
394
+ if (boundPort !== null && (await isPortOpen(boundPort))) {
395
+ const identity = await chromeIdentity(boundPort);
396
+ if (identity === 'chrome') {
397
+ if (await isOwnEndpoint(boundPort)) {
398
+ track(boundPort);
399
+ return boundPort;
400
+ }
401
+ // Some Chrome answers on the port, but not the one we started: a
402
+ // concurrent launch's, or ours before its stderr line arrived. Our
403
+ // child exiting (it lost the bind) or the deadline decides.
404
+ continue;
405
+ }
406
+ // A Chrome that has only just opened its endpoint, on a loaded
407
+ // machine, can answer /json/list (no timeout) yet miss the identity
408
+ // check's 1 s timeout on /json/version. That says nothing about who is
409
+ // listening — keep polling rather than refuse our own Chrome.
410
+ if (identity === 'unknown')
411
+ continue;
370
412
  killUntracked();
371
- throw new Error(`Port ${boundPort} is occupied by a CDP-speaking process that does not identify as Chrome/Chromium. ` +
372
- `Refusing to attach — pass a different port or free port ${boundPort}.`);
413
+ throw new Error(`Port ${boundPort} is occupied by a CDP-speaking process that does not identify as Chrome/Chromium. ` +
414
+ `Refusing to attach — pass a different port or free port ${boundPort}.`);
415
+ }
373
416
  }
374
- }
375
- if (earlyFailure)
376
- throw earlyFailure;
377
- if (port === 0) {
417
+ if (earlyFailure)
418
+ throw earlyFailure;
378
419
  killUntracked();
379
- throw new Error(`Chrome did not report a CDP port in ${activePortFile} within ${launchTimeout}ms`);
420
+ if (port === 0) {
421
+ throw new Error(`Chrome did not report a CDP port in ${activePortFile} within ${launchTimeout}ms`);
422
+ }
423
+ // Timed out waiting for our Chrome to come up on the port. Distinguish
424
+ // "another Chrome holds it", "nothing is listening" (real launch failure)
425
+ // and "something non-CDP is squatting the port" (confusing generic
426
+ // timeout otherwise).
427
+ if (await isChromeIdentity(port)) {
428
+ throw new Error(`Port ${port} is held by a Chrome/Chromium this launch did not start (a concurrent launch took it).`);
429
+ }
430
+ if (await isTcpPortOpen(port)) {
431
+ throw new Error(`Port ${port} is occupied by a non-Chrome process (TCP connection succeeds but no CDP response within ${launchTimeout}ms). ` +
432
+ `Free the port or pass a different one.`);
433
+ }
434
+ throw new Error(`Chrome failed to start on port ${port} within ${launchTimeout}ms`);
380
435
  }
381
- // Timed out waiting for our Chrome to come up on the port. Distinguish
382
- // "nothing is listening" (real launch failure) from "something non-CDP is
383
- // squatting the port" (confusing generic timeout otherwise) via a raw TCP probe.
384
- if (await isTcpPortOpen(port)) {
385
- throw new Error(`Port ${port} is occupied by a non-Chrome process (TCP connection succeeds but no CDP response within ${launchTimeout}ms). ` +
386
- `Free the port or pass a different one.`);
436
+ finally {
437
+ child.stderr?.destroy();
387
438
  }
388
- throw new Error(`Chrome failed to start on port ${port} within ${launchTimeout}ms`);
439
+ }
440
+ /** The per-process id in a browser-level CDP websocket URL
441
+ * (`ws://host:port/devtools/browser/<id>`), or null. */
442
+ function browserIdOf(wsUrl) {
443
+ return wsUrl?.match(/\/devtools\/browser\/([^/?#\s]+)/)?.[1] ?? null;
389
444
  }
390
445
  export async function enableSessionDomains(client, sessionId) {
391
446
  await Promise.all([