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..8308d5b 100644 --- a/src/lib/local.ts +++ b/src/lib/local.ts @@ -80,6 +80,24 @@ 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, 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; + } + const localBinary = new Local(); await killExistingBrowserStackLocalProcesses(); diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index ae73da8..3c4974e 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -35,6 +35,12 @@ 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 && 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.", + ); + } + if (hasLocal) { await ensureLocalBinarySetup(localIdentifier); } else {