From abe003a5d661718ef8479e5af4aa9d27877b767b Mon Sep 17 00:00:00 2001 From: Stevche Radevski Date: Tue, 22 Oct 2024 10:42:55 +0200 Subject: [PATCH] fix: Don't store token in SDK by default (#9704) --- .../core/js-sdk/src/__tests__/client.spec.ts | 16 +++++++++++-- packages/core/js-sdk/src/client.ts | 3 ++- packages/core/js-sdk/src/types.ts | 24 +++++++++++-------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/packages/core/js-sdk/src/__tests__/client.spec.ts b/packages/core/js-sdk/src/__tests__/client.spec.ts index f4a99a86a6..3a619a9fbb 100644 --- a/packages/core/js-sdk/src/__tests__/client.spec.ts +++ b/packages/core/js-sdk/src/__tests__/client.spec.ts @@ -82,6 +82,18 @@ const server = setupServer( statusText: "Internal Server Error", }) }), + http.get(`${baseUrl}/nostore`, ({ request }) => { + if (!request.headers.get("authorization")) { + return HttpResponse.json({ + test: "test", + }) + } + + return new HttpResponse(null, { + status: 500, + statusText: "Internal Server Error", + }) + }), http.all("*", ({ request, params, cookies }) => { return new HttpResponse(null, { status: 404, @@ -185,11 +197,11 @@ describe("Client", () => { }) describe("Authrized requests", () => { - it("should set the token in memory by default", async () => { + it("should not store the token by default", async () => { const token = "token-123" // Eg. from a response after a successful authentication client.setToken(token) - const resp = await client.fetch("jwt") + const resp = await client.fetch("nostore") expect(resp).toEqual({ test: "test" }) }) diff --git a/packages/core/js-sdk/src/client.ts b/packages/core/js-sdk/src/client.ts index b3a0f5fac1..03b8ca558b 100644 --- a/packages/core/js-sdk/src/client.ts +++ b/packages/core/js-sdk/src/client.ts @@ -301,7 +301,8 @@ export class Client { const hasSession = hasStorage("sessionStorage") const storageMethod = - this.config.auth?.jwtTokenStorageMethod || (hasLocal ? "local" : "memory") + this.config.auth?.jwtTokenStorageMethod || + (hasLocal ? "local" : "nostore") const storageKey = this.config.auth?.jwtTokenStorageKey || this.DEFAULT_JWT_STORAGE_KEY diff --git a/packages/core/js-sdk/src/types.ts b/packages/core/js-sdk/src/types.ts index 866c80b745..af935549ea 100644 --- a/packages/core/js-sdk/src/types.ts +++ b/packages/core/js-sdk/src/types.ts @@ -13,7 +13,7 @@ export type Config = { auth?: { type?: "jwt" | "session" jwtTokenStorageKey?: string - jwtTokenStorageMethod?: "local" | "session" | "memory" + jwtTokenStorageMethod?: "local" | "session" | "memory" | "nostore" } logger?: Logger debug?: boolean @@ -21,15 +21,19 @@ export type Config = { export type FetchParams = Parameters -export type ClientHeaders = - Record +export type ClientHeaders = Record< + string, + | string + | null + | { + /** + * Tags to cache data under for Next.js applications. + * + * Learn more in [Next.js's documentation](https://nextjs.org/docs/app/building-your-application/caching#fetch-optionsnexttags-and-revalidatetag). + */ + tags: string[] + } +> export type FetchInput = FetchParams[0]