aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/api')
-rw-r--r--src/client/api/client.test.ts21
-rw-r--r--src/client/api/client.ts28
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();
}