fix: Support relative path in SDK (#9942)
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/js-sdk": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: Add support for relative base URL to js-sdk
|
||||||
@@ -94,6 +94,11 @@ const server = setupServer(
|
|||||||
statusText: "Internal Server Error",
|
statusText: "Internal Server Error",
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
|
http.get(`https://test.com/baseUrl`, ({ request, params, cookies }) => {
|
||||||
|
return HttpResponse.json({
|
||||||
|
test: "test",
|
||||||
|
})
|
||||||
|
}),
|
||||||
http.all("*", ({ request, params, cookies }) => {
|
http.all("*", ({ request, params, cookies }) => {
|
||||||
return new HttpResponse(null, {
|
return new HttpResponse(null, {
|
||||||
status: 404,
|
status: 404,
|
||||||
@@ -114,7 +119,7 @@ describe("Client", () => {
|
|||||||
afterEach(() => server.resetHandlers())
|
afterEach(() => server.resetHandlers())
|
||||||
afterAll(() => server.close())
|
afterAll(() => server.close())
|
||||||
|
|
||||||
describe("header configuration", () => {
|
describe("configuration", () => {
|
||||||
it("should allow passing custom request headers while the defaults are preserved", async () => {
|
it("should allow passing custom request headers while the defaults are preserved", async () => {
|
||||||
const resp = await client.fetch<any>("header", {
|
const resp = await client.fetch<any>("header", {
|
||||||
headers: { "X-custom-header": "test" },
|
headers: { "X-custom-header": "test" },
|
||||||
@@ -162,6 +167,23 @@ describe("Client", () => {
|
|||||||
const resp = await pubClient.fetch<any>("pubkey")
|
const resp = await pubClient.fetch<any>("pubkey")
|
||||||
expect(resp).toEqual({ test: "test" })
|
expect(resp).toEqual({ test: "test" })
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should gracefully handle a root base URL", async () => {
|
||||||
|
global.window = {
|
||||||
|
location: {
|
||||||
|
origin: "https://test.com",
|
||||||
|
},
|
||||||
|
} as any
|
||||||
|
|
||||||
|
const pubClient = new Client({
|
||||||
|
baseUrl: "/",
|
||||||
|
})
|
||||||
|
|
||||||
|
const resp = await pubClient.fetch<any>("baseUrl")
|
||||||
|
expect(resp).toEqual({ test: "test" })
|
||||||
|
|
||||||
|
global.window = undefined as any
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("GET requests", () => {
|
describe("GET requests", () => {
|
||||||
|
|||||||
@@ -11,6 +11,20 @@ import {
|
|||||||
|
|
||||||
export const PUBLISHABLE_KEY_HEADER = "x-publishable-api-key"
|
export const PUBLISHABLE_KEY_HEADER = "x-publishable-api-key"
|
||||||
|
|
||||||
|
// We want to explicitly retrieve the base URL instead of relying on relative paths that differ in behavior between browsers.
|
||||||
|
const getBaseUrl = (passedBaseUrl: string) => {
|
||||||
|
if (typeof window === "undefined") {
|
||||||
|
return passedBaseUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the passed base URL is empty or "/", we use the current origin from the browser.
|
||||||
|
if (passedBaseUrl === "" || passedBaseUrl === "/") {
|
||||||
|
return window.location.origin
|
||||||
|
}
|
||||||
|
|
||||||
|
return passedBaseUrl
|
||||||
|
}
|
||||||
|
|
||||||
const hasStorage = (storage: "localStorage" | "sessionStorage") => {
|
const hasStorage = (storage: "localStorage" | "sessionStorage") => {
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
return storage in window
|
return storage in window
|
||||||
@@ -90,7 +104,7 @@ export class Client {
|
|||||||
private token = ""
|
private token = ""
|
||||||
|
|
||||||
constructor(config: Config) {
|
constructor(config: Config) {
|
||||||
this.config = config
|
this.config = { ...config, baseUrl: getBaseUrl(config.baseUrl) }
|
||||||
const logger = config.logger || {
|
const logger = config.logger || {
|
||||||
error: console.error,
|
error: console.error,
|
||||||
warn: console.warn,
|
warn: console.warn,
|
||||||
|
|||||||
Reference in New Issue
Block a user