@browserstack/mcp-server 1.0.10 → 1.0.12
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.
- package/dist/config.js +4 -2
- package/dist/lib/device-cache.js +52 -0
- package/dist/lib/instrumentation.js +51 -0
- package/dist/tools/accessibility.js +31 -28
- package/dist/tools/applive-utils/start-session.js +2 -2
- package/dist/tools/applive.js +6 -2
- package/dist/tools/automate.js +24 -13
- package/dist/tools/bstack-sdk.js +8 -9
- package/dist/tools/live-utils/desktop-filter.js +98 -0
- package/dist/tools/live-utils/mobile-filter.js +65 -0
- package/dist/tools/live-utils/start-session.js +64 -28
- package/dist/tools/live-utils/types.js +8 -0
- package/dist/tools/live-utils/version-resolver.js +48 -0
- package/dist/tools/live.js +68 -59
- package/dist/tools/observability.js +9 -1
- package/dist/tools/testmanagement-utils/create-testrun.js +90 -0
- package/dist/tools/testmanagement-utils/list-testcases.js +90 -0
- package/dist/tools/testmanagement-utils/list-testruns.js +68 -0
- package/dist/tools/testmanagement-utils/update-testrun.js +74 -0
- package/dist/tools/testmanagement.js +108 -0
- package/package.json +1 -1
- package/dist/tools/applive-utils/device-cache.js +0 -33
|
@@ -1,18 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.createProjectOrFolderTool = createProjectOrFolderTool;
|
|
4
7
|
exports.createTestCaseTool = createTestCaseTool;
|
|
8
|
+
exports.listTestCasesTool = listTestCasesTool;
|
|
9
|
+
exports.createTestRunTool = createTestRunTool;
|
|
10
|
+
exports.listTestRunsTool = listTestRunsTool;
|
|
11
|
+
exports.updateTestRunTool = updateTestRunTool;
|
|
5
12
|
exports.default = addTestManagementTools;
|
|
13
|
+
const instrumentation_1 = require("../lib/instrumentation");
|
|
14
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
6
15
|
const create_project_folder_1 = require("./testmanagement-utils/create-project-folder");
|
|
7
16
|
const create_testcase_1 = require("./testmanagement-utils/create-testcase");
|
|
17
|
+
let serverInstance;
|
|
18
|
+
const list_testcases_1 = require("./testmanagement-utils/list-testcases");
|
|
19
|
+
const create_testrun_1 = require("./testmanagement-utils/create-testrun");
|
|
20
|
+
const list_testruns_1 = require("./testmanagement-utils/list-testruns");
|
|
21
|
+
const update_testrun_1 = require("./testmanagement-utils/update-testrun");
|
|
22
|
+
//TODO: Moving the traceMCP and catch block to the parent(server) function
|
|
8
23
|
/**
|
|
9
24
|
* Wrapper to call createProjectOrFolder util.
|
|
10
25
|
*/
|
|
11
26
|
async function createProjectOrFolderTool(args) {
|
|
12
27
|
try {
|
|
28
|
+
(0, instrumentation_1.trackMCP)("createProjectOrFolder", serverInstance.server.getClientVersion());
|
|
13
29
|
return await (0, create_project_folder_1.createProjectOrFolder)(args);
|
|
14
30
|
}
|
|
15
31
|
catch (err) {
|
|
32
|
+
logger_1.default.error("Failed to create project/folder: %s", err);
|
|
33
|
+
(0, instrumentation_1.trackMCP)("createProjectOrFolder", serverInstance.server.getClientVersion(), err);
|
|
16
34
|
return {
|
|
17
35
|
content: [
|
|
18
36
|
{
|
|
@@ -32,9 +50,12 @@ async function createTestCaseTool(args) {
|
|
|
32
50
|
// Sanitize input arguments
|
|
33
51
|
const cleanedArgs = (0, create_testcase_1.sanitizeArgs)(args);
|
|
34
52
|
try {
|
|
53
|
+
(0, instrumentation_1.trackMCP)("createTestCase", serverInstance.server.getClientVersion());
|
|
35
54
|
return await (0, create_testcase_1.createTestCase)(cleanedArgs);
|
|
36
55
|
}
|
|
37
56
|
catch (err) {
|
|
57
|
+
logger_1.default.error("Failed to create test case: %s", err);
|
|
58
|
+
(0, instrumentation_1.trackMCP)("createTestCase", serverInstance.server.getClientVersion(), err);
|
|
38
59
|
return {
|
|
39
60
|
content: [
|
|
40
61
|
{
|
|
@@ -47,10 +68,97 @@ async function createTestCaseTool(args) {
|
|
|
47
68
|
};
|
|
48
69
|
}
|
|
49
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Lists test cases in a project with optional filters (status, priority, custom fields, etc.)
|
|
73
|
+
*/
|
|
74
|
+
async function listTestCasesTool(args) {
|
|
75
|
+
try {
|
|
76
|
+
return await (0, list_testcases_1.listTestCases)(args);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return {
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `Failed to list test cases: ${err instanceof Error ? err.message : "Unknown error"}. Please open an issue on GitHub if the problem persists`,
|
|
84
|
+
isError: true,
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
isError: true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates a test run in BrowserStack Test Management.
|
|
93
|
+
*/
|
|
94
|
+
async function createTestRunTool(args) {
|
|
95
|
+
try {
|
|
96
|
+
return await (0, create_testrun_1.createTestRun)(args);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return {
|
|
100
|
+
content: [
|
|
101
|
+
{
|
|
102
|
+
type: "text",
|
|
103
|
+
text: `Failed to create test run: ${err instanceof Error ? err.message : "Unknown error"}. Please open an issue on GitHub if the problem persists`,
|
|
104
|
+
isError: true,
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
isError: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Lists test runs in a project with optional filters (date ranges, assignee, state, etc.)
|
|
113
|
+
*/
|
|
114
|
+
async function listTestRunsTool(args) {
|
|
115
|
+
try {
|
|
116
|
+
return await (0, list_testruns_1.listTestRuns)(args);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return {
|
|
120
|
+
content: [
|
|
121
|
+
{
|
|
122
|
+
type: "text",
|
|
123
|
+
text: `Failed to list test runs: ${err instanceof Error ? err.message : "Unknown error"}. Please open an issue on GitHub if the problem persists`,
|
|
124
|
+
isError: true,
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
isError: true,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Updates a test run in BrowserStack Test Management.
|
|
133
|
+
* This function allows for partial updates to an existing test run.
|
|
134
|
+
* It takes the project identifier and test run ID as parameters.
|
|
135
|
+
*/
|
|
136
|
+
async function updateTestRunTool(args) {
|
|
137
|
+
try {
|
|
138
|
+
return await (0, update_testrun_1.updateTestRun)(args);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
return {
|
|
142
|
+
content: [
|
|
143
|
+
{
|
|
144
|
+
type: "text",
|
|
145
|
+
text: `Failed to update test run: ${err instanceof Error ? err.message : "Unknown error"}. Please open an issue on GitHub if the problem persists`,
|
|
146
|
+
isError: true,
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
isError: true,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
50
153
|
/**
|
|
51
154
|
* Registers both project/folder and test-case tools.
|
|
52
155
|
*/
|
|
53
156
|
function addTestManagementTools(server) {
|
|
157
|
+
serverInstance = server;
|
|
54
158
|
server.tool("createProjectOrFolder", "Create a project and/or folder in BrowserStack Test Management.", create_project_folder_1.CreateProjFoldSchema.shape, createProjectOrFolderTool);
|
|
55
159
|
server.tool("createTestCase", "Use this tool to create a test case in BrowserStack Test Management.", create_testcase_1.CreateTestCaseSchema.shape, createTestCaseTool);
|
|
160
|
+
server.tool("listTestCases", "List test cases in a project with optional filters (status, priority, custom fields, etc.)", list_testcases_1.ListTestCasesSchema.shape, listTestCasesTool);
|
|
161
|
+
server.tool("createTestRun", "Create a test run in BrowserStack Test Management.", create_testrun_1.CreateTestRunSchema.shape, createTestRunTool);
|
|
162
|
+
server.tool("listTestRuns", "List test runs in a project with optional filters (date ranges, assignee, state, etc.)", list_testruns_1.ListTestRunsSchema.shape, listTestRunsTool);
|
|
163
|
+
server.tool("updateTestRun", "Update a test run in BrowserStack Test Management.", update_testrun_1.UpdateTestRunSchema.shape, updateTestRunTool);
|
|
56
164
|
}
|
package/package.json
CHANGED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getAppLiveData = getAppLiveData;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const os_1 = __importDefault(require("os"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const CACHE_DIR = path_1.default.join(os_1.default.homedir(), ".browserstack", "app_live_cache");
|
|
11
|
-
const CACHE_FILE = path_1.default.join(CACHE_DIR, "app_live.json");
|
|
12
|
-
const TTL_MS = 24 * 60 * 60 * 1000; // 1 day
|
|
13
|
-
/**
|
|
14
|
-
* Fetches and caches the App Live devices JSON with a 1-day TTL.
|
|
15
|
-
*/
|
|
16
|
-
async function getAppLiveData() {
|
|
17
|
-
if (!fs_1.default.existsSync(CACHE_DIR)) {
|
|
18
|
-
fs_1.default.mkdirSync(CACHE_DIR, { recursive: true });
|
|
19
|
-
}
|
|
20
|
-
if (fs_1.default.existsSync(CACHE_FILE)) {
|
|
21
|
-
const stats = fs_1.default.statSync(CACHE_FILE);
|
|
22
|
-
if (Date.now() - stats.mtimeMs < TTL_MS) {
|
|
23
|
-
return JSON.parse(fs_1.default.readFileSync(CACHE_FILE, "utf8"));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const response = await fetch("https://www.browserstack.com/list-of-browsers-and-platforms/app_live.json");
|
|
27
|
-
if (!response.ok) {
|
|
28
|
-
throw new Error(`Failed to fetch app live list: ${response.statusText}`);
|
|
29
|
-
}
|
|
30
|
-
const data = await response.json();
|
|
31
|
-
fs_1.default.writeFileSync(CACHE_FILE, JSON.stringify(data), "utf8");
|
|
32
|
-
return data;
|
|
33
|
-
}
|