cdp-tunnel 3.3.1 → 3.3.2

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.1",
4
+ "version": "3.3.2",
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.1",
3
+ "version": "3.3.2",
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",
@@ -210,10 +210,11 @@ class PortPoolManager {
210
210
  try { msg = JSON.parse(data.toString()); } catch { return; }
211
211
 
212
212
  if (msg.id !== undefined) {
213
- // createTarget 串行化(避免并发 chrome.tabs.create 回调串)
213
+ // createTarget 串行化 + 标记 pending
214
214
  if (msg.method === 'Target.createTarget') {
215
215
  while (session.createTargetLock) { await session.createTargetLock; }
216
216
  session.createTargetLock = new Promise(r => { session._releaseCreateTarget = r; });
217
+ session.pendingCreate = true; // 标记:下一个 targetCreated 事件归属这个端口
217
218
  }
218
219
 
219
220
  // 合成输入命令:先 bringToFront + 等待,再发原命令
@@ -348,6 +349,19 @@ class PortPoolManager {
348
349
  return true;
349
350
  }
350
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; // 消费掉
361
+ this._broadcastToPort(pi, msg);
362
+ return true;
363
+ }
364
+ }
351
365
  }
352
366
 
353
367
  // sessionId 路由(Network/Screencast/Input 等 session 事件)