cdp-tunnel 3.3.2 → 3.3.3

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "CDP Bridge",
4
- "version": "3.3.2",
4
+ "version": "3.3.3",
5
5
  "description": "Chrome DevTools Protocol Bridge for Playwright/Puppeteer automation",
6
6
  "permissions": [
7
7
  "debugger",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdp-tunnel",
3
- "version": "3.3.2",
3
+ "version": "3.3.3",
4
4
  "description": "Bridge Chrome's debugger API to WebSocket — control your existing browser with Playwright/Puppeteer via CDP",
5
5
  "main": "server/proxy-server.js",
6
6
  "bin": "./cli/index.js",
@@ -349,18 +349,28 @@ class PortPoolManager {
349
349
  return true;
350
350
  }
351
351
  }
352
- // 竞态处理:targetCreated 在 createTarget 响应之前到达
353
- // 如果有 pendingCreate,把事件归属到对应端口
354
- for (let pi = 0; pi < this.portSessions.length; pi++) {
355
- const sess = this.portSessions[pi];
356
- if (sess && sess.pendingCreate) {
357
- sess.targetIds.add(targetId);
358
- sess.targetUrls.set(targetId, 'about:blank');
359
- this.targetToPort.set(targetId, pi);
360
- sess.pendingCreate = false; // 消费掉
352
+ // 竞态处理:targetCreated/attachedToTarget 在 createTarget 响应之前到达
353
+ // targetToPort 还没记录。检查 pendingCreate
354
+ // 同时也对 attachedToTarget 放行(它的 targetId targetCreated 一样)
355
+ if (msg.method === 'Target.targetCreated' || msg.method === 'Target.attachedToTarget') {
356
+ for (let pi = 0; pi < this.portSessions.length; pi++) {
357
+ const sess = this.portSessions[pi];
358
+ if (sess && sess.pendingCreate) {
359
+ // 提前注册
360
+ sess.targetIds.add(targetId);
361
+ sess.targetUrls.set(targetId, 'about:blank');
362
+ this.targetToPort.set(targetId, pi);
363
+ if (msg.method === 'Target.attachedToTarget') sess.pendingCreate = false;
364
+ this._broadcastToPort(pi, msg);
365
+ return true;
366
+ }
367
+ }
368
+ // 没有 pendingCreate——广播给所有端口(对齐直连 Chrome 的广播行为)
369
+ // 这样即使竞态导致没匹配到,客户端也能收到事件
370
+ for (let pi = 0; pi < this.portSessions.length; pi++) {
361
371
  this._broadcastToPort(pi, msg);
362
- return true;
363
372
  }
373
+ return true;
364
374
  }
365
375
  }
366
376