export const CDP_HTTP_REQUEST_TIMEOUT_MS = 1500; export const CDP_WS_HANDSHAKE_TIMEOUT_MS = 5000; export const CDP_JSON_NEW_TIMEOUT_MS = 1500; export const CHROME_REACHABILITY_TIMEOUT_MS = 500; export const CHROME_WS_READY_TIMEOUT_MS = 800; export const CHROME_BOOTSTRAP_PREFS_TIMEOUT_MS = 10_000; export const CHROME_BOOTSTRAP_EXIT_TIMEOUT_MS = 5000; export const CHROME_LAUNCH_READY_WINDOW_MS = 15_000; export const CHROME_LAUNCH_READY_POLL_MS = 200; export const CHROME_STOP_TIMEOUT_MS = 2500; export const CHROME_STOP_PROBE_TIMEOUT_MS = 200; export const CHROME_STDERR_HINT_MAX_CHARS = 2000; export const PROFILE_HTTP_REACHABILITY_TIMEOUT_MS = 300; export const PROFILE_WS_REACHABILITY_MIN_TIMEOUT_MS = 200; export const PROFILE_WS_REACHABILITY_MAX_TIMEOUT_MS = 2000; export const PROFILE_ATTACH_RETRY_TIMEOUT_MS = 1200; export const PROFILE_POST_RESTART_WS_TIMEOUT_MS = 600; function normalizeTimeoutMs(value: number | undefined): number | undefined { if (typeof value !== "number" || !Number.isFinite(value)) { return undefined; } return Math.max(1, Math.floor(value)); } export function resolveCdpReachabilityTimeouts(params: { profileIsLoopback: boolean; timeoutMs?: number; remoteHttpTimeoutMs: number; remoteHandshakeTimeoutMs: number; }): { httpTimeoutMs: number; wsTimeoutMs: number } { const normalized = normalizeTimeoutMs(params.timeoutMs); if (params.profileIsLoopback) { const httpTimeoutMs = normalized ?? PROFILE_HTTP_REACHABILITY_TIMEOUT_MS; const wsTimeoutMs = Math.max( PROFILE_WS_REACHABILITY_MIN_TIMEOUT_MS, Math.min(PROFILE_WS_REACHABILITY_MAX_TIMEOUT_MS, httpTimeoutMs * 2), ); return { httpTimeoutMs, wsTimeoutMs }; } if (normalized !== undefined) { return { httpTimeoutMs: Math.max(normalized, params.remoteHttpTimeoutMs), wsTimeoutMs: Math.max(normalized * 2, params.remoteHandshakeTimeoutMs), }; } return { httpTimeoutMs: params.remoteHttpTimeoutMs, wsTimeoutMs: params.remoteHandshakeTimeoutMs, }; }