From c72d0320f40562c6da2fcd3fc71c6cf8d9386e4c Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Thu, 24 Jul 2025 10:25:13 -0700 Subject: [PATCH] chore(extension): use free port (#735) --- src/browserContextFactory.ts | 2 +- src/extension/cdpRelay.ts | 6 +++--- src/extension/main.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/browserContextFactory.ts b/src/browserContextFactory.ts index c548bba..7e17b78 100644 --- a/src/browserContextFactory.ts +++ b/src/browserContextFactory.ts @@ -217,7 +217,7 @@ async function injectCdpPort(browserConfig: FullConfig['browser']) { (browserConfig.launchOptions as any).cdpPort = await findFreePort(); } -async function findFreePort() { +async function findFreePort(): Promise { return new Promise((resolve, reject) => { const server = net.createServer(); server.listen(0, () => { diff --git a/src/extension/cdpRelay.ts b/src/extension/cdpRelay.ts index 5366167..d14fdda 100644 --- a/src/extension/cdpRelay.ts +++ b/src/extension/cdpRelay.ts @@ -28,10 +28,10 @@ import { WebSocket, WebSocketServer } from 'ws'; import debug from 'debug'; import * as playwright from 'playwright'; import { httpAddressToString, startHttpServer } from '../transport.js'; -import { BrowserContextFactory } from '../browserContextFactory.js'; // @ts-ignore const { registry } = await import('playwright-core/lib/server/registry/index'); +import type { BrowserContextFactory } from '../browserContextFactory.js'; import type websocket from 'ws'; const debugLogger = debug('pw:mcp:relay'); @@ -324,8 +324,8 @@ class ExtensionContextFactory implements BrowserContextFactory { } } -export async function startCDPRelayServer(port: number, browserChannel: string) { - const httpServer = await startHttpServer({ port }); +export async function startCDPRelayServer(browserChannel: string) { + const httpServer = await startHttpServer({}); const cdpRelayServer = new CDPRelayServer(httpServer, browserChannel); process.on('exit', () => cdpRelayServer.stop()); debugLogger(`CDP relay server started, extension endpoint: ${cdpRelayServer.extensionEndpoint()}.`); diff --git a/src/extension/main.ts b/src/extension/main.ts index 1e20cbd..c3fc6f6 100644 --- a/src/extension/main.ts +++ b/src/extension/main.ts @@ -22,7 +22,7 @@ import { filteredTools } from '../tools.js'; import type { FullConfig } from '../config.js'; export async function runWithExtension(config: FullConfig) { - const contextFactory = await startCDPRelayServer(9225, config.browser.launchOptions.channel || 'chrome'); + const contextFactory = await startCDPRelayServer(config.browser.launchOptions.channel || 'chrome'); const server = new Server(config, filteredTools(config), contextFactory); server.setupExitWatchdog();