diff --git a/package.json b/package.json index 736c09a..7dea866 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eppo/js-client-sdk-common", - "version": "4.13.3", + "version": "4.13.4", "description": "Common library for Eppo JavaScript SDKs (web, react native, and node)", "main": "dist/index.js", "files": [ diff --git a/src/http-client.ts b/src/http-client.ts index 61cace5..aa38637 100644 --- a/src/http-client.ts +++ b/src/http-client.ts @@ -46,6 +46,11 @@ export interface IBanditParametersResponse { bandits: Record; } +const urlWithNoTrailingSlash = (url: URL) => { + url.pathname = url.pathname.replace(/\/$/, ''); + return url.toString(); +}; + export interface IHttpClient { getUniversalFlagConfiguration(): Promise; getBanditParameters(): Promise; @@ -89,7 +94,7 @@ export default class FetchHttpClient implements IHttpClient { const controller = new AbortController(); const signal = controller.signal; const timeoutId = setTimeout(() => controller.abort(), this.timeout); - const response = await fetch(url.toString(), { signal }); + const response = await fetch(urlWithNoTrailingSlash(url), { signal }); // Clear timeout when response is received within the budget. clearTimeout(timeoutId); @@ -114,7 +119,7 @@ export default class FetchHttpClient implements IHttpClient { const signal = controller.signal; const timeoutId = setTimeout(() => controller.abort(), this.timeout); - const response = await fetch(url.toString(), { + const response = await fetch(urlWithNoTrailingSlash(url), { method: 'POST', headers: { 'Content-Type': 'application/json',