From ac4a7708191f3e90ec52771a0cc6f1e9602dbd46 Mon Sep 17 00:00:00 2001 From: tech-sushant Date: Fri, 13 Jun 2025 15:38:10 +0530 Subject: [PATCH] fix: handle existing scan name error and improve WebDriver initialization error handling --- src/tools/accessiblity-utils/scanner.ts | 5 +++++ src/tools/appautomate.ts | 21 ++++++++++++++------- src/tools/applive-utils/start-session.ts | 4 ++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/tools/accessiblity-utils/scanner.ts b/src/tools/accessiblity-utils/scanner.ts index eb9a6da4..ae73da85 100644 --- a/src/tools/accessiblity-utils/scanner.ts +++ b/src/tools/accessiblity-utils/scanner.ts @@ -83,6 +83,11 @@ export class AccessibilityScanner { return data; } catch (err) { if (axios.isAxiosError(err) && err.response?.data) { + if (err.response.status === 422) { + throw new Error( + "A scan with this name already exists. please update the name and run again.", + ); + } const msg = (err.response.data as any).error || (err.response.data as any).message || diff --git a/src/tools/appautomate.ts b/src/tools/appautomate.ts index 786b9db0..a265e96b 100644 --- a/src/tools/appautomate.ts +++ b/src/tools/appautomate.ts @@ -104,13 +104,20 @@ async function takeAppScreenshot(args: { }; logger.info("Starting WebDriver session on BrowserStack..."); - driver = await remote({ - protocol: "https", - hostname: "hub.browserstack.com", - port: 443, - path: "/wd/hub", - capabilities, - }); + try { + driver = await remote({ + protocol: "https", + hostname: "hub.browserstack.com", + port: 443, + path: "/wd/hub", + capabilities, + }); + } catch (error) { + logger.error("Error initializing WebDriver:", error); + throw new Error( + "Failed to initialize the WebDriver or a timeout occurred. Please try again.", + ); + } const screenshotBase64 = await driver.takeScreenshot(); const compressed = await maybeCompressBase64(screenshotBase64); diff --git a/src/tools/applive-utils/start-session.ts b/src/tools/applive-utils/start-session.ts index 1b8af25a..5ba4b5fe 100644 --- a/src/tools/applive-utils/start-session.ts +++ b/src/tools/applive-utils/start-session.ts @@ -64,6 +64,10 @@ export async function startSession(args: StartSessionArgs): Promise { const { app_url } = await uploadApp(appPath); logger.info(`App uploaded: ${app_url}`); + if (!app_url) { + throw new Error("Failed to upload app. Please try again."); + } + // 7) Build URL & open const deviceParam = sanitizeUrlParam( selected.display_name.replace(/\s+/g, "+"),