diff --git a/package-lock.json b/package-lock.json index e0960be..292fa47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@browserstack/mcp-server", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@browserstack/mcp-server", - "version": "1.1.3", + "version": "1.1.4", "license": "ISC", "dependencies": { "@modelcontextprotocol/sdk": "^1.11.4", diff --git a/package.json b/package.json index d6a758c..f9da64e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@browserstack/mcp-server", - "version": "1.1.3", + "version": "1.1.4", "description": "BrowserStack's Official MCP Server", "main": "dist/index.js", "repository": { diff --git a/src/lib/local.ts b/src/lib/local.ts index a0faa0d..2472bb2 100644 --- a/src/lib/local.ts +++ b/src/lib/local.ts @@ -73,7 +73,9 @@ export async function killExistingBrowserStackLocalProcesses() { } } -export async function ensureLocalBinarySetup(localIdentifier?: string): Promise { +export async function ensureLocalBinarySetup( + localIdentifier?: string, +): Promise { logger.info( "Ensuring local binary setup as it is required for private URLs...", ); @@ -87,7 +89,7 @@ export async function ensureLocalBinarySetup(localIdentifier?: string): Promise< localIdentifier?: string; } = { key: config.browserstackAccessKey, - username: config.browserstackUsername + username: config.browserstackUsername, }; if (localIdentifier) { @@ -95,25 +97,22 @@ export async function ensureLocalBinarySetup(localIdentifier?: string): Promise< } return await new Promise((resolve, reject) => { - localBinary.start( - requestBody, - (error?: Error) => { - if (error) { - logger.error( - `Unable to start BrowserStack Local... please check your credentials and try again. Error: ${error}`, - ); + localBinary.start(requestBody, (error?: Error) => { + if (error) { + logger.error( + `Unable to start BrowserStack Local... please check your credentials and try again. Error: ${error}`, + ); - reject( - new Error( - `Unable to configure local tunnel binary, please check your credentials and try again. Error: ${error}`, - ), - ); - } else { - logger.info("Successfully started BrowserStack Local"); - resolve(); - } - }, - ); + reject( + new Error( + `Unable to configure local tunnel binary, please check your credentials and try again. Error: ${error}`, + ), + ); + } else { + logger.info("Successfully started BrowserStack Local"); + resolve(); + } + }); }); } diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index 6da16bc..eb9a6da 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -29,11 +29,10 @@ export class AccessibilityScanner { name: string, urlList: string[], ): Promise { - // Check if any URL is local const hasLocal = urlList.some(isLocalURL); const localIdentifier = crypto.randomUUID(); - const LOCAL_IP = "127.0.0.1"; + const localHosts = new Set(["127.0.0.1", "localhost", "0.0.0.0"]); const BS_LOCAL_DOMAIN = "bs-local.com"; if (hasLocal) { @@ -45,13 +44,13 @@ export class AccessibilityScanner { const transformedUrlList = urlList.map((url) => { try { const parsed = new URL(url); - if (parsed.hostname === LOCAL_IP) { + if (localHosts.has(parsed.hostname)) { parsed.hostname = BS_LOCAL_DOMAIN; return parsed.toString(); } return url; } catch (e) { - logger.warn(`[AccessibilityScan] Invalid URL skipped: ${url}`); + logger.warn(`[AccessibilityScan] Invalid URL skipped: ${e}`); return url; } }); @@ -68,7 +67,7 @@ export class AccessibilityScanner { localTestingInfo: { localIdentifier, localEnabled: true, - } + }, }; requestBody = { ...baseRequestBody, ...localConfig }; }