From 1798a9371f3b0239d737c1a14b0cf16f452f7590 Mon Sep 17 00:00:00 2001 From: Ruturaj-Browserstack Date: Thu, 26 Jun 2025 18:03:54 +0530 Subject: [PATCH 1/5] feat: add USE_OWN_LOCAL_BINARY_PROCESS option to control local binary usage --- src/config.ts | 6 ++++++ src/lib/local.ts | 7 +++++++ src/tools/accessiblity-utils/scanner.ts | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/src/config.ts b/src/config.ts index a4a18a3..95136b8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -30,12 +30,17 @@ for (const key of BROWSERSTACK_LOCAL_OPTION_KEYS) { } } +/** + * USE_OWN_LOCAL_BINARY_PROCESS: + * If true, the system will not start a new local binary process, but will use the user's own process. + */ export class Config { constructor( public readonly browserstackUsername: string, public readonly browserstackAccessKey: string, public readonly DEV_MODE: boolean, public readonly browserstackLocalOptions: Record, + public readonly USE_OWN_LOCAL_BINARY_PROCESS: boolean, ) {} } @@ -44,6 +49,7 @@ const config = new Config( process.env.BROWSERSTACK_ACCESS_KEY!, process.env.DEV_MODE === "true", browserstackLocalOptions, + process.env.USE_OWN_LOCAL_BINARY_PROCESS === "true", ); export default config; diff --git a/src/lib/local.ts b/src/lib/local.ts index 4a99bad..ab4dc03 100644 --- a/src/lib/local.ts +++ b/src/lib/local.ts @@ -80,6 +80,13 @@ export async function ensureLocalBinarySetup( "Ensuring local binary setup as it is required for private URLs...", ); + if (config.USE_OWN_LOCAL_BINARY_PROCESS) { + logger.info( + "Using user's own BrowserStack Local binary process, skipping setup...", + ); + return; + } + const localBinary = new Local(); await killExistingBrowserStackLocalProcesses(); diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index ae73da8..896c3a0 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -41,6 +41,12 @@ export class AccessibilityScanner { await killExistingBrowserStackLocalProcesses(); } + if (config.USE_OWN_LOCAL_BINARY_PROCESS) { + throw new Error( + "Cannot start scan with local URLs when using own BrowserStack Local binary process. Please set USE_OWN_LOCAL_BINARY_PROCESS to false.", + ); + } + const transformedUrlList = urlList.map((url) => { try { const parsed = new URL(url); From dab0925adc2b78506eead3ce49079558b5dea66e Mon Sep 17 00:00:00 2001 From: Ruturaj-Browserstack Date: Thu, 26 Jun 2025 18:08:06 +0530 Subject: [PATCH 2/5] refactor: reorder local binary process checks for clarity --- src/tools/accessiblity-utils/scanner.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index 896c3a0..dba07bc 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -35,18 +35,19 @@ export class AccessibilityScanner { const localHosts = new Set(["127.0.0.1", "localhost", "0.0.0.0"]); const BS_LOCAL_DOMAIN = "bs-local.com"; - if (hasLocal) { - await ensureLocalBinarySetup(localIdentifier); - } else { - await killExistingBrowserStackLocalProcesses(); - } - if (config.USE_OWN_LOCAL_BINARY_PROCESS) { throw new Error( "Cannot start scan with local URLs when using own BrowserStack Local binary process. Please set USE_OWN_LOCAL_BINARY_PROCESS to false.", ); } + + if (hasLocal) { + await ensureLocalBinarySetup(localIdentifier); + } else { + await killExistingBrowserStackLocalProcesses(); + } + const transformedUrlList = urlList.map((url) => { try { const parsed = new URL(url); From 01ac654816903117d2ccdfd3e52b7df3f33223d0 Mon Sep 17 00:00:00 2001 From: Ruturaj-Browserstack Date: Thu, 26 Jun 2025 18:18:21 +0530 Subject: [PATCH 3/5] refactor: remove unnecessary blank lines in local binary setup functions --- src/lib/local.ts | 2 +- src/tools/accessiblity-utils/scanner.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/local.ts b/src/lib/local.ts index ab4dc03..bbb47d0 100644 --- a/src/lib/local.ts +++ b/src/lib/local.ts @@ -86,7 +86,7 @@ export async function ensureLocalBinarySetup( ); return; } - + const localBinary = new Local(); await killExistingBrowserStackLocalProcesses(); diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index dba07bc..f1e9864 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -41,7 +41,6 @@ export class AccessibilityScanner { ); } - if (hasLocal) { await ensureLocalBinarySetup(localIdentifier); } else { From 9ba166c86ada486d336b2b8dcaace26637c6626d Mon Sep 17 00:00:00 2001 From: Ruturaj-Browserstack Date: Thu, 26 Jun 2025 18:29:32 +0530 Subject: [PATCH 4/5] feat: enhance local binary process check when using user's own process --- src/lib/local.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lib/local.ts b/src/lib/local.ts index bbb47d0..8308d5b 100644 --- a/src/lib/local.ts +++ b/src/lib/local.ts @@ -82,7 +82,18 @@ export async function ensureLocalBinarySetup( if (config.USE_OWN_LOCAL_BINARY_PROCESS) { logger.info( - "Using user's own BrowserStack Local binary process, skipping setup...", + "Using user's own BrowserStack Local binary process, checking if it's running...", + ); + + const isRunning = await isBrowserStackLocalRunning(); + if (!isRunning) { + throw new Error( + "USE_OWN_LOCAL_BINARY_PROCESS is enabled but BrowserStack Local process is not running. Please start your BrowserStack Local binary process first.", + ); + } + + logger.info( + "BrowserStack Local process is running, proceeding with user's own process.", ); return; } From 241ac5f18f3b8b3e27d67dba8425702050bc4060 Mon Sep 17 00:00:00 2001 From: Ruturaj-Browserstack Date: Fri, 27 Jun 2025 15:27:40 +0530 Subject: [PATCH 5/5] fix: prevent scan start with local URLs when using own BrowserStack Local binary process --- src/tools/accessiblity-utils/scanner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index f1e9864..3c4974e 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -35,7 +35,7 @@ export class AccessibilityScanner { const localHosts = new Set(["127.0.0.1", "localhost", "0.0.0.0"]); const BS_LOCAL_DOMAIN = "bs-local.com"; - if (config.USE_OWN_LOCAL_BINARY_PROCESS) { + if (config.USE_OWN_LOCAL_BINARY_PROCESS && hasLocal) { throw new Error( "Cannot start scan with local URLs when using own BrowserStack Local binary process. Please set USE_OWN_LOCAL_BINARY_PROCESS to false.", );