@browserstack/mcp-server 1.1.8 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +71 -35
  2. package/dist/config.d.ts +13 -0
  3. package/dist/config.js +10 -6
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.js +20 -30
  6. package/dist/lib/api.d.ts +2 -0
  7. package/dist/lib/api.js +10 -5
  8. package/dist/lib/apiClient.d.ts +31 -0
  9. package/dist/lib/apiClient.js +108 -0
  10. package/dist/lib/constants.d.ts +17 -0
  11. package/dist/lib/device-cache.d.ts +9 -0
  12. package/dist/lib/device-cache.js +3 -3
  13. package/dist/lib/error.d.ts +7 -0
  14. package/dist/lib/fuzzy.d.ts +1 -0
  15. package/dist/lib/get-auth.d.ts +2 -0
  16. package/dist/lib/get-auth.js +8 -0
  17. package/dist/lib/inmemory-store.d.ts +1 -0
  18. package/dist/lib/instrumentation.d.ts +4 -0
  19. package/dist/lib/instrumentation.js +8 -7
  20. package/dist/lib/local.d.ts +3 -0
  21. package/dist/lib/local.js +12 -3
  22. package/dist/lib/types.d.ts +4 -0
  23. package/dist/lib/types.js +1 -0
  24. package/dist/lib/utils.d.ts +4 -0
  25. package/dist/lib/version-resolver.d.ts +6 -0
  26. package/dist/logger.d.ts +3 -0
  27. package/dist/logger.js +20 -4
  28. package/dist/oninitialized.d.ts +2 -0
  29. package/dist/oninitialized.js +2 -7
  30. package/dist/server-factory.d.ts +3 -0
  31. package/dist/server-factory.js +37 -0
  32. package/dist/tools/accessibility.d.ts +3 -0
  33. package/dist/tools/accessibility.js +17 -10
  34. package/dist/tools/accessiblity-utils/accessibility-rag.d.ts +12 -0
  35. package/dist/tools/accessiblity-utils/accessibility-rag.js +22 -12
  36. package/dist/tools/accessiblity-utils/report-fetcher.d.ts +8 -0
  37. package/dist/tools/accessiblity-utils/report-fetcher.js +26 -16
  38. package/dist/tools/accessiblity-utils/report-parser.d.ts +23 -0
  39. package/dist/tools/accessiblity-utils/report-parser.js +3 -3
  40. package/dist/tools/accessiblity-utils/scanner.d.ts +25 -0
  41. package/dist/tools/accessiblity-utils/scanner.js +46 -24
  42. package/dist/tools/appautomate-utils/appautomate.d.ts +42 -0
  43. package/dist/tools/appautomate-utils/appautomate.js +95 -9
  44. package/dist/tools/appautomate-utils/types.d.ts +5 -0
  45. package/dist/tools/appautomate-utils/types.js +6 -0
  46. package/dist/tools/appautomate.d.ts +3 -0
  47. package/dist/tools/appautomate.js +109 -13
  48. package/dist/tools/applive-utils/device-search.d.ts +6 -0
  49. package/dist/tools/applive-utils/start-session.d.ts +15 -0
  50. package/dist/tools/applive-utils/start-session.js +11 -4
  51. package/dist/tools/applive-utils/types.d.ts +7 -0
  52. package/dist/tools/applive-utils/upload-app.d.ts +5 -0
  53. package/dist/tools/applive-utils/upload-app.js +8 -12
  54. package/dist/tools/applive-utils/version-utils.d.ts +4 -0
  55. package/dist/tools/applive.d.ts +13 -0
  56. package/dist/tools/applive.js +6 -6
  57. package/dist/tools/automate-utils/fetch-screenshots.d.ts +6 -0
  58. package/dist/tools/automate-utils/fetch-screenshots.js +16 -12
  59. package/dist/tools/automate.d.ts +9 -0
  60. package/dist/tools/automate.js +6 -6
  61. package/dist/tools/bstack-sdk.d.ts +17 -0
  62. package/dist/tools/bstack-sdk.js +47 -20
  63. package/dist/tools/failurelogs-utils/app-automate.d.ts +7 -0
  64. package/dist/tools/failurelogs-utils/app-automate.js +29 -11
  65. package/dist/tools/failurelogs-utils/automate.d.ts +6 -0
  66. package/dist/tools/failurelogs-utils/automate.js +27 -12
  67. package/dist/tools/failurelogs-utils/utils.d.ts +30 -0
  68. package/dist/tools/getFailureLogs.d.ts +14 -0
  69. package/dist/tools/getFailureLogs.js +11 -11
  70. package/dist/tools/live-utils/desktop-filter.d.ts +2 -0
  71. package/dist/tools/live-utils/mobile-filter.d.ts +2 -0
  72. package/dist/tools/live-utils/start-session.d.ts +6 -0
  73. package/dist/tools/live-utils/start-session.js +18 -5
  74. package/dist/tools/live-utils/types.d.ts +33 -0
  75. package/dist/tools/live.d.ts +3 -0
  76. package/dist/tools/live.js +11 -11
  77. package/dist/tools/observability.d.ts +5 -0
  78. package/dist/tools/observability.js +14 -11
  79. package/dist/tools/sdk-utils/commands.d.ts +3 -0
  80. package/dist/tools/sdk-utils/commands.js +20 -5
  81. package/dist/tools/sdk-utils/constants.d.ts +2 -0
  82. package/dist/tools/sdk-utils/constants.js +284 -160
  83. package/dist/tools/sdk-utils/instructions.d.ts +6 -0
  84. package/dist/tools/sdk-utils/instructions.js +28 -6
  85. package/dist/tools/sdk-utils/percy/constants.d.ts +3 -0
  86. package/dist/tools/sdk-utils/percy/constants.js +36 -25
  87. package/dist/tools/sdk-utils/percy/instructions.d.ts +10 -0
  88. package/dist/tools/sdk-utils/percy/types.d.ts +5 -0
  89. package/dist/tools/sdk-utils/types.d.ts +39 -0
  90. package/dist/tools/sdk-utils/types.js +3 -0
  91. package/dist/tools/selfheal-utils/selfheal.d.ts +11 -0
  92. package/dist/tools/selfheal-utils/selfheal.js +10 -6
  93. package/dist/tools/selfheal.d.ts +7 -0
  94. package/dist/tools/selfheal.js +6 -6
  95. package/dist/tools/testmanagement-utils/TCG-utils/api.d.ts +34 -0
  96. package/dist/tools/testmanagement-utils/TCG-utils/api.js +57 -44
  97. package/dist/tools/testmanagement-utils/TCG-utils/config.d.ts +5 -0
  98. package/dist/tools/testmanagement-utils/TCG-utils/helpers.d.ts +13 -0
  99. package/dist/tools/testmanagement-utils/TCG-utils/helpers.js +2 -1
  100. package/dist/tools/testmanagement-utils/TCG-utils/types.d.ts +26 -0
  101. package/dist/tools/testmanagement-utils/add-test-result.d.ts +42 -0
  102. package/dist/tools/testmanagement-utils/add-test-result.js +23 -10
  103. package/dist/tools/testmanagement-utils/create-lca-steps.d.ts +100 -0
  104. package/dist/tools/testmanagement-utils/create-lca-steps.js +64 -55
  105. package/dist/tools/testmanagement-utils/create-project-folder.d.ts +31 -0
  106. package/dist/tools/testmanagement-utils/create-project-folder.js +31 -21
  107. package/dist/tools/testmanagement-utils/create-testcase.d.ts +122 -0
  108. package/dist/tools/testmanagement-utils/create-testcase.js +13 -10
  109. package/dist/tools/testmanagement-utils/create-testrun.d.ts +82 -0
  110. package/dist/tools/testmanagement-utils/create-testrun.js +11 -8
  111. package/dist/tools/testmanagement-utils/list-testcases.d.ts +30 -0
  112. package/dist/tools/testmanagement-utils/list-testcases.js +9 -7
  113. package/dist/tools/testmanagement-utils/list-testruns.d.ts +22 -0
  114. package/dist/tools/testmanagement-utils/list-testruns.js +9 -7
  115. package/dist/tools/testmanagement-utils/poll-lca-status.d.ts +11 -0
  116. package/dist/tools/testmanagement-utils/poll-lca-status.js +12 -8
  117. package/dist/tools/testmanagement-utils/testcase-from-file.d.ts +4 -0
  118. package/dist/tools/testmanagement-utils/testcase-from-file.js +6 -6
  119. package/dist/tools/testmanagement-utils/update-testrun.d.ts +40 -0
  120. package/dist/tools/testmanagement-utils/update-testrun.js +11 -7
  121. package/dist/tools/testmanagement-utils/upload-file.d.ts +20 -0
  122. package/dist/tools/testmanagement-utils/upload-file.js +8 -6
  123. package/dist/tools/testmanagement.d.ts +60 -0
  124. package/dist/tools/testmanagement.js +51 -53
  125. package/package.json +1 -1
@@ -2,19 +2,22 @@ import { z } from "zod";
2
2
  import { getLatestO11YBuildInfo } from "../lib/api.js";
3
3
  import { trackMCP } from "../lib/instrumentation.js";
4
4
  import logger from "../logger.js";
5
- export async function getFailuresInLastRun(buildName, projectName) {
6
- const buildsData = await getLatestO11YBuildInfo(buildName, projectName);
7
- const observabilityUrl = buildsData.observability_url;
5
+ export async function getFailuresInLastRun(buildName, projectName, config) {
6
+ const buildsData = await getLatestO11YBuildInfo(buildName, projectName, config);
7
+ if (!buildsData.data) {
8
+ throw new Error("No observability URL found in build data, this is likely because the build is not yet available on BrowserStack Observability.");
9
+ }
10
+ const observabilityUrl = buildsData.data.observability_url;
8
11
  if (!observabilityUrl) {
9
12
  throw new Error("No observability URL found in build data, this is likely because the build is not yet available on BrowserStack Observability.");
10
13
  }
11
14
  let overview = "No overview available";
12
- if (buildsData.unique_errors?.overview?.insight) {
13
- overview = buildsData.unique_errors.overview.insight;
15
+ if (buildsData.data.unique_errors?.overview?.insight) {
16
+ overview = buildsData.data.unique_errors.overview.insight;
14
17
  }
15
18
  let details = "No error details available";
16
- if (buildsData.unique_errors?.top_unique_errors?.length > 0) {
17
- details = buildsData.unique_errors.top_unique_errors
19
+ if (buildsData.data.unique_errors?.top_unique_errors?.length > 0) {
20
+ details = buildsData.data.unique_errors.top_unique_errors
18
21
  .map((error) => error.error)
19
22
  .filter(Boolean)
20
23
  .join("\n");
@@ -28,7 +31,7 @@ export async function getFailuresInLastRun(buildName, projectName) {
28
31
  ],
29
32
  };
30
33
  }
31
- export default function addObservabilityTools(server) {
34
+ export default function addObservabilityTools(server, config) {
32
35
  server.tool("getFailuresInLastRun", "Use this tool to debug failures in the last run of the test suite on BrowserStack. Use only when browserstack.yml file is present in the project root.", {
33
36
  buildName: z
34
37
  .string()
@@ -38,12 +41,12 @@ export default function addObservabilityTools(server) {
38
41
  .describe("Name of the project to get failures for. This is the 'projectName' key in the browserstack.yml file. If not sure, ask the user for the project name."),
39
42
  }, async (args) => {
40
43
  try {
41
- trackMCP("getFailuresInLastRun", server.server.getClientVersion());
42
- return await getFailuresInLastRun(args.buildName, args.projectName);
44
+ trackMCP("getFailuresInLastRun", server.server.getClientVersion(), undefined, config);
45
+ return await getFailuresInLastRun(args.buildName, args.projectName, config);
43
46
  }
44
47
  catch (error) {
45
48
  logger.error("Failed to get failures in the last run: %s", error);
46
- trackMCP("getFailuresInLastRun", server.server.getClientVersion(), error);
49
+ trackMCP("getFailuresInLastRun", server.server.getClientVersion(), error, config);
47
50
  return {
48
51
  content: [
49
52
  {
@@ -0,0 +1,3 @@
1
+ import { SDKSupportedLanguage } from "./types.js";
2
+ export declare function getSDKPrefixCommand(language: SDKSupportedLanguage, framework: string, username: string, accessKey: string): string;
3
+ export declare function getJavaFrameworkForMaven(framework: string): string;
@@ -4,6 +4,7 @@ const JAVA_FRAMEWORK_MAP = {
4
4
  junit5: "junit5",
5
5
  junit4: "junit4",
6
6
  cucumber: "cucumber-testng",
7
+ serenity: "serenity",
7
8
  };
8
9
  // Common Gradle setup instructions (platform-independent)
9
10
  const GRADLE_SETUP_INSTRUCTIONS = `
@@ -17,10 +18,21 @@ const GRADLE_SETUP_INSTRUCTIONS = `
17
18
  3. Add javaagent to gradle tasks:
18
19
  jvmArgs "-javaagent:\${browserstackSDKArtifact.file}"
19
20
  `;
20
- export function getSDKPrefixCommand(language, framework) {
21
+ export function getSDKPrefixCommand(language, framework, username, accessKey) {
21
22
  switch (language) {
22
23
  case "nodejs":
23
- return `Install BrowserStack Node SDK\nusing command | npm i -D browserstack-node-sdk@latest\n| and then run following command to setup browserstack sdk:\n npx setup --username ${process.env.BROWSERSTACK_USERNAME} --key ${process.env.BROWSERSTACK_ACCESS_KEY}\n\n. This will create browserstack.yml file in the project root. Edit the file to add your desired platforms and browsers. If the file is not created :\n`;
24
+ return `---STEP---
25
+ Install BrowserStack Node SDK using command:
26
+ \`\`\`bash
27
+ npm i -D browserstack-node-sdk@latest
28
+ \`\`\`
29
+ ---STEP---
30
+ Run the following command to setup browserstack sdk:
31
+ \`\`\`bash
32
+ npx setup --username ${username} --key ${accessKey}
33
+ \`\`\`
34
+ ---STEP---
35
+ Edit the browserstack.yml file that was created in the project root to add your desired platforms and browsers.`;
24
36
  case "java": {
25
37
  const mavenFramework = getJavaFrameworkForMaven(framework);
26
38
  const isWindows = process.platform === "win32";
@@ -29,15 +41,18 @@ export function getSDKPrefixCommand(language, framework) {
29
41
  : `mvn archetype:generate -B -DarchetypeGroupId=com.browserstack \\
30
42
  -DarchetypeArtifactId=browserstack-sdk-archetype-integrate -DarchetypeVersion=1.0 \\
31
43
  -DgroupId=com.browserstack -DartifactId=browserstack-sdk-archetype-integrate -Dversion=1.0 \\
32
- -DBROWSERSTACK_USERNAME="${process.env.BROWSERSTACK_USERNAME}" \\
33
- -DBROWSERSTACK_ACCESS_KEY="${process.env.BROWSERSTACK_ACCESS_KEY}" \\
44
+ -DBROWSERSTACK_USERNAME="${username}" \\
45
+ -DBROWSERSTACK_ACCESS_KEY="${accessKey}" \\
34
46
  -DBROWSERSTACK_FRAMEWORK="${mavenFramework}"`;
35
47
  const platformLabel = isWindows ? "Windows" : "macOS/Linux";
36
- return `Install BrowserStack Java SDK
48
+ return `---STEP---
49
+ Install BrowserStack Java SDK
37
50
 
38
51
  **Maven command for ${framework} (${platformLabel}):**
39
52
  Run the command, it is required to generate the browserstack-sdk-archetype-integrate project:
40
53
  ${mavenCommand}
54
+
55
+ Alternative setup for Gradle users:
41
56
  ${GRADLE_SETUP_INSTRUCTIONS}`;
42
57
  }
43
58
  // Add more languages as needed
@@ -0,0 +1,2 @@
1
+ import { ConfigMapping } from "./types.js";
2
+ export declare const SUPPORTED_CONFIGURATIONS: ConfigMapping;