From 91ce3eb4195b5e4f973799dc8b81b5b3392866c5 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 21:23:33 +0000 Subject: [PATCH] fix: drop leading /api/ from CheckmarxClient paths to fix doubled segment after buildUrl() fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CheckmarxClient used absolute paths like /api/projects while checkmarx.baseUrl already ends with /api (e.g. https://tenant.cxone.cloud/api). After PR #284 correctly fixed buildUrl() to preserve base path segments, the combination produced /api/api/projects. Fix paths to be relative (projects, scans, results/summary) so they resolve correctly against the /api base — mirrors the same fix applied to Artifactory in BUG-4. Closes #285 Co-authored-by: Sunny Kolattukudy --- src/services/checkmarx/client.test.ts | 4 ++-- src/services/checkmarx/client.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/services/checkmarx/client.test.ts b/src/services/checkmarx/client.test.ts index 26aa50b..5e731f4 100644 --- a/src/services/checkmarx/client.test.ts +++ b/src/services/checkmarx/client.test.ts @@ -20,7 +20,7 @@ describe('CheckmarxClient', () => { }); await expect(client.listProjects()).resolves.toEqual([]); - expect(checkmarx).toHaveBeenCalledWith('/api/projects', { params: { limit: 100 } }); + expect(checkmarx).toHaveBeenCalledWith('projects', { params: { limit: 100 } }); }); it('returns an empty scan list when Checkmarx responds with null', async () => { @@ -31,7 +31,7 @@ describe('CheckmarxClient', () => { }); await expect(client.listScans({ projectId: 'project-id', last: 25 })).resolves.toEqual([]); - expect(checkmarx).toHaveBeenCalledWith('/api/scans', { + expect(checkmarx).toHaveBeenCalledWith('scans', { params: { limit: 25, 'project-id': 'project-id' } }); }); diff --git a/src/services/checkmarx/client.ts b/src/services/checkmarx/client.ts index 651139f..098480c 100644 --- a/src/services/checkmarx/client.ts +++ b/src/services/checkmarx/client.ts @@ -11,7 +11,7 @@ export class CheckmarxClient { constructor(private http: HttpClient) {} async listProjects(): Promise { - const res = await this.http.checkmarx('/api/projects', { params: { limit: 100 } }); + const res = await this.http.checkmarx('projects', { params: { limit: 100 } }); const projects = res.projects ?? []; if (res.filteredTotalCount > projects.length) { process.stderr.write(`warning: ${res.filteredTotalCount} projects found; only showing first ${projects.length}\n`); @@ -20,13 +20,13 @@ export class CheckmarxClient { } async getProject(id: string): Promise { - return this.http.checkmarx(`/api/projects/${id}`); + return this.http.checkmarx(`projects/${id}`); } async listScans(opts: { projectId?: string; last?: number } = {}): Promise { const params: Record = { limit: opts.last ?? 100 }; if (opts.projectId) params['project-id'] = opts.projectId; - const res = await this.http.checkmarx('/api/scans', { params }); + const res = await this.http.checkmarx('scans', { params }); const scans = res.scans ?? []; if (res.filteredTotalCount > scans.length) { process.stderr.write(`warning: ${res.filteredTotalCount} scans found; only showing first ${scans.length}\n`); @@ -35,11 +35,11 @@ export class CheckmarxClient { } async getScan(id: string): Promise { - return this.http.checkmarx(`/api/scans/${id}`); + return this.http.checkmarx(`scans/${id}`); } async getScanResultsStatistics(scanId: string): Promise { - return this.http.checkmarx('/api/results/summary', { + return this.http.checkmarx('results/summary', { params: { 'scan-id': scanId } }); }