diff options
Diffstat (limited to 'src/client/api')
| -rw-r--r-- | src/client/api/client.test.ts | 21 | ||||
| -rw-r--r-- | src/client/api/client.ts | 28 |
2 files changed, 15 insertions, 34 deletions
diff --git a/src/client/api/client.test.ts b/src/client/api/client.test.ts index 27c3a0a..e2d314f 100644 --- a/src/client/api/client.test.ts +++ b/src/client/api/client.test.ts @@ -119,27 +119,6 @@ describe("ApiClient", () => { }); }); - describe("isAuthenticated", () => { - it("returns true when tokens exist", () => { - const mockStorage = createMockTokenStorage(); - mockStorage.getTokens.mockReturnValue({ - accessToken: "token", - refreshToken: "refresh", - }); - const client = new ApiClient({ tokenStorage: mockStorage }); - - expect(client.isAuthenticated()).toBe(true); - }); - - it("returns false when no tokens", () => { - const mockStorage = createMockTokenStorage(); - mockStorage.getTokens.mockReturnValue(null); - const client = new ApiClient({ tokenStorage: mockStorage }); - - expect(client.isAuthenticated()).toBe(false); - }); - }); - describe("getAuthHeader", () => { it("returns auth header when tokens exist", () => { const mockStorage = createMockTokenStorage(); diff --git a/src/client/api/client.ts b/src/client/api/client.ts index fc718a2..539df8b 100644 --- a/src/client/api/client.ts +++ b/src/client/api/client.ts @@ -101,16 +101,22 @@ export class ApiClient { const response = await fetch(input, { ...init, headers }); - if (response.status === 401 && tokens?.refreshToken) { - // Try to refresh the token - const refreshed = await this.refreshToken(); - if (refreshed) { - // Retry with new token - const newTokens = this.tokenStorage.getTokens(); - if (newTokens?.accessToken) { - headers.set("Authorization", `Bearer ${newTokens.accessToken}`); + if (response.status === 401 && tokens?.accessToken) { + if (tokens.refreshToken) { + // Try to refresh the token + const refreshed = await this.refreshToken(); + if (refreshed) { + // Retry with new token + const newTokens = this.tokenStorage.getTokens(); + if (newTokens?.accessToken) { + headers.set("Authorization", `Bearer ${newTokens.accessToken}`); + } + return fetch(input, { ...init, headers }); } - return fetch(input, { ...init, headers }); + } else { + // No refresh token available — treat as session expiry + this.tokenStorage.clearTokens(); + this.sessionExpiredCallback?.(); } } @@ -205,10 +211,6 @@ export class ApiClient { this.tokenStorage.clearTokens(); } - isAuthenticated(): boolean { - return this.tokenStorage.getTokens() !== null; - } - getTokens(): Tokens | null { return this.tokenStorage.getTokens(); } |
