Skip to content

Commit 7a0ce95

Browse files
committed
feat: refactor API URLs to use dynamic base URL retrieval for improved flexibility
1 parent 62067e8 commit 7a0ce95

File tree

9 files changed

+29
-10
lines changed

9 files changed

+29
-10
lines changed

src/tools/testmanagement-utils/add-test-result.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { getBrowserStackAuth } from "../../lib/get-auth.js";
33
import { z } from "zod";
44
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
55
import { BrowserStackConfig } from "../../lib/types.js";
6+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
67

78
/**
89
* Schema for adding a test result to a test run.
@@ -37,7 +38,8 @@ export async function addTestResult(
3738
): Promise<CallToolResult> {
3839
try {
3940
const args = AddTestResultSchema.parse(rawArgs);
40-
const url = `https://test-management.browserstack.com/api/v2/projects/${encodeURIComponent(
41+
const tmBaseUrl = await getTMBaseURL();
42+
const url = `${tmBaseUrl}/api/v2/projects/${encodeURIComponent(
4143
args.project_identifier,
4244
)}/test-runs/${encodeURIComponent(args.test_run_id)}/results`;
4345

src/tools/testmanagement-utils/create-lca-steps.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { pollLCAStatus } from "./poll-lca-status.js";
99
import { getBrowserStackAuth } from "../../lib/get-auth.js";
1010
import { BrowserStackConfig } from "../../lib/types.js";
11+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
1112

1213
/**
1314
* Schema for creating LCA steps for a test case
@@ -81,7 +82,8 @@ export async function createLCASteps(
8182
config,
8283
);
8384

84-
const url = `https://test-management.browserstack.com/api/v1/projects/${projectId}/test-cases/${testCaseId}/lcnc`;
85+
const tmBaseUrl = await getTMBaseURL();
86+
const url = `${tmBaseUrl}/api/v1/projects/${projectId}/test-cases/${testCaseId}/lcnc`;
8587

8688
const payload = {
8789
base_url: args.base_url,

src/tools/testmanagement-utils/create-project-folder.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { formatAxiosError } from "../../lib/error.js";
55
import { projectIdentifierToId } from "../testmanagement-utils/TCG-utils/api.js";
66
import { getBrowserStackAuth } from "../../lib/get-auth.js";
77
import { BrowserStackConfig } from "../../lib/types.js";
8+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
89

910
// Schema for combined project/folder creation
1011
export const CreateProjFoldSchema = z.object({
@@ -65,8 +66,9 @@ export async function createProjectOrFolder(
6566
try {
6667
const authString = getBrowserStackAuth(config);
6768
const [username, password] = authString.split(":");
69+
const tmBaseUrl = await getTMBaseURL();
6870
const res = await apiClient.post({
69-
url: "https://test-management.browserstack.com/api/v2/projects",
71+
url: `${tmBaseUrl}/api/v2/projects`,
7072
headers: {
7173
"Content-Type": "application/json",
7274
Authorization:
@@ -95,8 +97,9 @@ export async function createProjectOrFolder(
9597
if (!projId)
9698
throw new Error("Cannot create folder without project_identifier.");
9799
try {
100+
const tmBaseUrl = await getTMBaseURL();
98101
const res = await apiClient.post({
99-
url: `https://test-management.browserstack.com/api/v2/projects/${encodeURIComponent(
102+
url: `${tmBaseUrl}/api/v2/projects/${encodeURIComponent(
100103
projId,
101104
)}/folders`,
102105
headers: {

src/tools/testmanagement-utils/list-testcases.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
44
import { formatAxiosError } from "../../lib/error.js";
55
import { getBrowserStackAuth } from "../../lib/get-auth.js";
66
import { BrowserStackConfig } from "../../lib/types.js";
7+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
78

89
/**
910
* Schema for listing test cases with optional filters.
@@ -49,7 +50,8 @@ export async function listTestCases(
4950
if (args.priority) params.append("priority", args.priority);
5051
if (args.p !== undefined) params.append("p", args.p.toString());
5152

52-
const url = `https://test-management.browserstack.com/api/v2/projects/${encodeURIComponent(
53+
const tmBaseUrl = await getTMBaseURL();
54+
const url = `${tmBaseUrl}/api/v2/projects/${encodeURIComponent(
5355
args.project_identifier,
5456
)}/test-cases?${params.toString()}`;
5557

src/tools/testmanagement-utils/list-testruns.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
44
import { formatAxiosError } from "../../lib/error.js";
55
import { getBrowserStackAuth } from "../../lib/get-auth.js";
66
import { BrowserStackConfig } from "../../lib/types.js";
7+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
78

89
/**
910
* Schema for listing test runs with optional filters.
@@ -35,8 +36,9 @@ export async function listTestRuns(
3536
params.set("run_state", args.run_state);
3637
}
3738

39+
const tmBaseUrl = await getTMBaseURL();
3840
const url =
39-
`https://test-management.browserstack.com/api/v2/projects/${encodeURIComponent(
41+
`${tmBaseUrl}/api/v2/projects/${encodeURIComponent(
4042
args.project_identifier,
4143
)}/test-runs?` + params.toString();
4244

src/tools/testmanagement-utils/poll-lca-status.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { apiClient } from "../../lib/apiClient.js";
22
import { getBrowserStackAuth } from "../../lib/get-auth.js";
33
import { BrowserStackConfig } from "../../lib/types.js";
4+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
45

56
/**
67
* Interface for the test case response structure
@@ -39,7 +40,8 @@ export async function pollLCAStatus(
3940
pollIntervalMs: number = 10 * 1000, // 10 seconds interval
4041
config: BrowserStackConfig,
4142
): Promise<{ resource_path: string; status: string } | null> {
42-
const url = `https://test-management.browserstack.com/api/v1/projects/${projectId}/folder/${folderId}/test-cases/${testCaseId}`;
43+
const tmBaseUrl = await getTMBaseURL();
44+
const url = `${tmBaseUrl}/api/v1/projects/${projectId}/folder/${folderId}/test-cases/${testCaseId}`;
4345

4446
const startTime = Date.now();
4547

src/tools/testmanagement-utils/testcase-from-file.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { signedUrlMap } from "../../lib/inmemory-store.js";
1414
import logger from "../../logger.js";
1515
import { projectIdentifierToId } from "./TCG-utils/api.js";
1616
import { BrowserStackConfig } from "../../lib/types.js";
17+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
1718

1819
export async function createTestCasesFromFile(
1920
args: CreateTestCasesFromFileArgs,
@@ -87,7 +88,8 @@ export async function createTestCasesFromFile(
8788

8889
signedUrlMap.delete(args.documentId);
8990

90-
const dashboardURL = `https://test-management.browserstack.com/projects/${args.projectReferenceId}/folder/${args.folderId}/test-cases`;
91+
const tmBaseUrl = await getTMBaseURL();
92+
const dashboardURL = `${tmBaseUrl}/projects/${args.projectReferenceId}/folder/${args.folderId}/test-cases`;
9193

9294
return {
9395
content: [

src/tools/testmanagement-utils/update-testrun.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { z } from "zod";
44
import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
55
import { formatAxiosError } from "../../lib/error.js";
66
import { BrowserStackConfig } from "../../lib/types.js";
7+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
78

89
/**
910
* Schema for updating a test run with partial fields.
@@ -40,7 +41,8 @@ export async function updateTestRun(
4041
): Promise<CallToolResult> {
4142
try {
4243
const body = { test_run: args.test_run };
43-
const url = `https://test-management.browserstack.com/api/v2/projects/${encodeURIComponent(
44+
const tmBaseUrl = await getTMBaseURL();
45+
const url = `${tmBaseUrl}/api/v2/projects/${encodeURIComponent(
4446
args.project_identifier,
4547
)}/test-runs/${encodeURIComponent(args.test_run_id)}/update`;
4648

src/tools/testmanagement-utils/upload-file.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { getBrowserStackAuth } from "../../lib/get-auth.js";
99
import { signedUrlMap } from "../../lib/inmemory-store.js";
1010
import { projectIdentifierToId } from "./TCG-utils/api.js";
1111
import { BrowserStackConfig } from "../../lib/types.js";
12+
import { getTMBaseURL } from "../../lib/tm-base-url.js";
1213

1314
/**
1415
* Schema for the upload file tool
@@ -56,7 +57,8 @@ export async function uploadFile(
5657
const formData = new FormData();
5758
formData.append("attachments[]", fs.createReadStream(file_path));
5859

59-
const uploadUrl = `https://test-management.browserstack.com/api/v1/projects/${projectIdResponse}/generic/attachments/ai_uploads`;
60+
const tmBaseUrl = await getTMBaseURL();
61+
const uploadUrl = `${tmBaseUrl}/api/v1/projects/${projectIdResponse}/generic/attachments/ai_uploads`;
6062

6163
const response = await apiClient.post({
6264
url: uploadUrl,

0 commit comments

Comments
 (0)