-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathauthApiClient.ts
32 lines (30 loc) · 1.01 KB
/
authApiClient.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { getTokensApi, refreshApi, removeTokensApi, setTokensApi } from "@/shared/api/auth/auth.route-handler";
import { UNAUTHORIZED_STATUS } from "@/shared/constants/auth";
import { apiClient } from "../apiClient";
export const authApiClient = apiClient.extend({
hooks: {
beforeRequest: [
async (request) => {
const { accessToken } = await getTokensApi();
request.headers.set("Authorization", `Bearer ${accessToken}`);
return request;
},
],
beforeRetry: [
async ({ request }) => {
try {
const { accessToken, refreshToken } = await getTokensApi();
if (!accessToken || !refreshToken) throw new Error();
const newTokens = await refreshApi({ accessToken, refreshToken });
await setTokensApi(newTokens);
request.headers.set("Authorization", `Bearer ${newTokens.accessToken}`);
} catch {
await removeTokensApi();
}
},
],
},
retry: {
statusCodes: [UNAUTHORIZED_STATUS],
},
});