fix(js-sdk): Preserve path in baseUrl (#10222)
**What** - Currently the `js-sdk` will discard the path in the `baseUrl` and only use the `origin`. As an example passing a `baseUrl` of `"http://localhost:9000/custom/path"`, will result in only `"http://localhost:9000"` being used. - This PR preserves the path, so using `sdk.admin.products()` will make a request to `"http://localhost:9000/custom/path/admin/products`. For an explanation of when this might be useful see this issue: https://github.com/medusajs/medusa/issues/10190#issuecomment-2492974845 Resolves CMRC-740
This commit is contained in:
committed by
GitHub
parent
60b13c191e
commit
d6ff8d7aa1
5
.changeset/proud-horses-add.md
Normal file
5
.changeset/proud-horses-add.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@medusajs/js-sdk": patch
|
||||
---
|
||||
|
||||
fix(js-sdk): Preserve path in baseUrl
|
||||
@@ -12,6 +12,11 @@ const server = setupServer(
|
||||
test: "test",
|
||||
})
|
||||
}),
|
||||
http.get(`${baseUrl}/some/path/test`, ({ request, params, cookies }) => {
|
||||
return HttpResponse.json({
|
||||
test: "test",
|
||||
})
|
||||
}),
|
||||
http.get(`${baseUrl}/throw`, ({ request, params, cookies }) => {
|
||||
return new HttpResponse(null, {
|
||||
status: 500,
|
||||
@@ -184,6 +189,42 @@ describe("Client", () => {
|
||||
|
||||
global.window = undefined as any
|
||||
})
|
||||
|
||||
it("should handle baseUrl with path correctly", async () => {
|
||||
const pathClient = new Client({
|
||||
baseUrl: `${baseUrl}/some/path`,
|
||||
})
|
||||
|
||||
const resp = await pathClient.fetch<any>("test")
|
||||
expect(resp).toEqual({ test: "test" })
|
||||
})
|
||||
|
||||
it("should handle baseUrl with trailing slash path correctly", async () => {
|
||||
const pathClient = new Client({
|
||||
baseUrl: `${baseUrl}/some/path/`,
|
||||
})
|
||||
|
||||
const resp = await pathClient.fetch<any>("test")
|
||||
expect(resp).toEqual({ test: "test" })
|
||||
})
|
||||
|
||||
it("should handle baseUrl with just origin", async () => {
|
||||
const originClient = new Client({
|
||||
baseUrl,
|
||||
})
|
||||
|
||||
const resp = await originClient.fetch<any>("test")
|
||||
expect(resp).toEqual({ test: "test" })
|
||||
})
|
||||
|
||||
it("should handle baseUrl with just origin and trailing slash", async () => {
|
||||
const originClient = new Client({
|
||||
baseUrl: `${baseUrl}/`,
|
||||
})
|
||||
|
||||
const resp = await originClient.fetch<any>("test")
|
||||
expect(resp).toEqual({ test: "test" })
|
||||
})
|
||||
})
|
||||
|
||||
describe("GET requests", () => {
|
||||
@@ -247,4 +288,6 @@ describe("Client", () => {
|
||||
global.window = undefined as any
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import qs from "qs"
|
||||
import { events } from "fetch-event-stream"
|
||||
import qs from "qs"
|
||||
import {
|
||||
ClientFetch,
|
||||
Config,
|
||||
@@ -224,7 +224,9 @@ export class Client {
|
||||
|
||||
let normalizedInput: RequestInfo | URL = input
|
||||
if (input instanceof URL || typeof input === "string") {
|
||||
normalizedInput = new URL(input, this.config.baseUrl)
|
||||
const baseUrl = new URL(this.config.baseUrl)
|
||||
const fullPath = `${baseUrl.pathname.replace(/\/$/, '')}/${input.toString().replace(/^\//, '')}`
|
||||
normalizedInput = new URL(fullPath, baseUrl.origin)
|
||||
if (init?.query) {
|
||||
const params = Object.fromEntries(
|
||||
normalizedInput.searchParams.entries()
|
||||
|
||||
Reference in New Issue
Block a user