Skip to content

Commit 8868f23

Browse files
committed
fix: add 5s timeout to target.page() and reduce protocolTimeout to 30s
1 parent 19ce7af commit 8868f23

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

src/McpContext.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,20 @@ export class McpContext implements Context {
578578
const pageResults = await Promise.all(
579579
pageTargets.map(async target => {
580580
try {
581-
return await target.page();
581+
const page = await Promise.race([
582+
target.page(),
583+
new Promise<null>(resolve =>
584+
setTimeout(() => resolve(null), DEFAULT_TIMEOUT),
585+
),
586+
]);
587+
if (!page) {
588+
this.logger(
589+
'Timed out attaching to target at',
590+
target.url(),
591+
'— likely frozen or discarded',
592+
);
593+
}
594+
return page;
582595
} catch (err) {
583596
this.logger(
584597
'Skipping frozen/discarded target at',
@@ -599,7 +612,12 @@ export class McpContext implements Context {
599612

600613
for (const target of extensionTargets) {
601614
// Right now target.page() returns null for popup and side panel pages.
602-
let page = await target.page();
615+
let page = await Promise.race([
616+
target.page(),
617+
new Promise<null>(resolve =>
618+
setTimeout(() => resolve(null), DEFAULT_TIMEOUT),
619+
),
620+
]);
603621
if (!page) {
604622
// We need to cache pages instances for targets because target.asPage()
605623
// returns a new page instance every time.

src/browser.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export async function ensureBrowserConnected(options: {
6161
targetFilter: makeTargetFilter(enableExtensions),
6262
defaultViewport: null,
6363
handleDevToolsAsPage: true,
64+
protocolTimeout: 30_000,
6465
};
6566

6667
let autoConnect = false;
@@ -229,6 +230,7 @@ export async function launch(options: McpLaunchOptions): Promise<Browser> {
229230
acceptInsecureCerts: options.acceptInsecureCerts,
230231
handleDevToolsAsPage: true,
231232
enableExtensions: options.enableExtensions,
233+
protocolTimeout: 30_000,
232234
});
233235
if (options.logFile) {
234236
// FIXME: we are probably subscribing too late to catch startup logs. We

0 commit comments

Comments
 (0)