Skip to content

Commit 9340495

Browse files
committed
feat: auto-connect to CDP browser on server startup
Adds automatic browser connection when the server starts, eliminating the need to manually reconnect after restarts. Respects the existing autoConnect config setting and includes retry logic for concurrent PM2 startup scenarios.
1 parent 6702a74 commit 9340495

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

‎server/src/index.ts‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { pathRoutes } from './routes/path.routes.js';
1010
import { indexerRoutes } from './routes/indexer.routes.js';
1111
import { exportRoutes } from './routes/export.routes.js';
1212
import { browserRouter } from './routes/browser.routes.js';
13+
import { browserService } from './services/browser.service.js';
1314
import { augmentationRouter } from './routes/augmentation.routes.js';
1415
import { genealogyProviderRouter } from './routes/genealogy-provider.routes.js';
1516
import { providerRouter } from './routes/provider.routes.js';
@@ -79,4 +80,7 @@ app.use(errorHandler);
7980

8081
httpServer.listen(PORT, '0.0.0.0', () => {
8182
console.log(`🚀 Server running on http://localhost:${PORT}`);
83+
84+
// Auto-connect to browser if enabled and browser is running
85+
browserService.autoConnectIfEnabled();
8286
});

‎server/src/services/browser.service.ts‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,45 @@ export const browserService = {
248248
return checkBrowserProcessRunning();
249249
},
250250

251+
async autoConnectIfEnabled(): Promise<void> {
252+
if (!browserConfig.autoConnect) {
253+
console.log('[browser] Auto-connect disabled in config');
254+
return;
255+
}
256+
257+
if (connectedBrowser?.isConnected()) {
258+
console.log('[browser] Already connected');
259+
return;
260+
}
261+
262+
// Wait briefly for browser process to be ready (handles concurrent startup)
263+
const maxAttempts = 5;
264+
const delayMs = 2000;
265+
266+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
267+
const isRunning = await checkBrowserProcessRunning();
268+
269+
if (isRunning) {
270+
console.log('[browser] Auto-connecting to CDP...');
271+
await this.connect().catch(err => {
272+
console.log(`[browser] Auto-connect attempt ${attempt} failed: ${err.message}`);
273+
});
274+
275+
if (connectedBrowser?.isConnected()) {
276+
console.log('[browser] Auto-connect successful');
277+
return;
278+
}
279+
}
280+
281+
if (attempt < maxAttempts) {
282+
console.log(`[browser] Browser not ready, retrying in ${delayMs}ms (attempt ${attempt}/${maxAttempts})`);
283+
await new Promise(resolve => setTimeout(resolve, delayMs));
284+
}
285+
}
286+
287+
console.log('[browser] Auto-connect: browser process not available after retries');
288+
},
289+
251290
async getFamilySearchToken(): Promise<{ token: string | null; cookies: Array<{ name: string; value: string }> }> {
252291
if (!connectedBrowser?.isConnected()) {
253292
return { token: null, cookies: [] };

0 commit comments

Comments
 (0)