Skip to content

Commit a29dfc4

Browse files
committed
fix: sync tokens
1 parent aa7f9aa commit a29dfc4

File tree

8 files changed

+105
-202
lines changed

8 files changed

+105
-202
lines changed

src/services/api/services/auth.ts

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useCallback } from "react";
2-
import useFetchBase from "../use-fetch-base";
32
import useFetch from "../use-fetch";
43
import { API_URL } from "../config";
54
import { User } from "../types/user";
@@ -17,7 +16,7 @@ export type AuthLoginResponse = Tokens & {
1716
};
1817

1918
export function useAuthLoginService() {
20-
const fetchBase = useFetchBase();
19+
const fetchBase = useFetch();
2120

2221
return useCallback(
2322
(data: AuthLoginRequest) => {
@@ -39,7 +38,7 @@ export type AuthGoogleLoginResponse = Tokens & {
3938
};
4039

4140
export function useAuthGoogleLoginService() {
42-
const fetchBase = useFetchBase();
41+
const fetchBase = useFetch();
4342

4443
return useCallback(
4544
(data: AuthGoogleLoginRequest) => {
@@ -61,7 +60,7 @@ export type AuthFacebookLoginResponse = Tokens & {
6160
};
6261

6362
export function useAuthFacebookLoginService() {
64-
const fetchBase = useFetchBase();
63+
const fetchBase = useFetch();
6564

6665
return useCallback(
6766
(data: AuthFacebookLoginRequest, requestConfig?: RequestConfigType) => {
@@ -83,7 +82,7 @@ export type AuthSignUpRequest = {
8382
export type AuthSignUpResponse = void;
8483

8584
export function useAuthSignUpService() {
86-
const fetchBase = useFetchBase();
85+
const fetchBase = useFetch();
8786

8887
return useCallback(
8988
(data: AuthSignUpRequest, requestConfig?: RequestConfigType) => {
@@ -104,7 +103,7 @@ export type AuthConfirmEmailRequest = {
104103
export type AuthConfirmEmailResponse = void;
105104

106105
export function useAuthConfirmEmailService() {
107-
const fetchBase = useFetchBase();
106+
const fetchBase = useFetch();
108107

109108
return useCallback(
110109
(data: AuthConfirmEmailRequest, requestConfig?: RequestConfigType) => {
@@ -125,7 +124,7 @@ export type AuthConfirmNewEmailRequest = {
125124
export type AuthConfirmNewEmailResponse = void;
126125

127126
export function useAuthConfirmNewEmailService() {
128-
const fetchBase = useFetchBase();
127+
const fetchBase = useFetch();
129128

130129
return useCallback(
131130
(data: AuthConfirmNewEmailRequest, requestConfig?: RequestConfigType) => {
@@ -146,7 +145,7 @@ export type AuthForgotPasswordRequest = {
146145
export type AuthForgotPasswordResponse = void;
147146

148147
export function useAuthForgotPasswordService() {
149-
const fetchBase = useFetchBase();
148+
const fetchBase = useFetch();
150149

151150
return useCallback(
152151
(data: AuthForgotPasswordRequest, requestConfig?: RequestConfigType) => {
@@ -168,7 +167,7 @@ export type AuthResetPasswordRequest = {
168167
export type AuthResetPasswordResponse = void;
169168

170169
export function useAuthResetPasswordService() {
171-
const fetchBase = useFetchBase();
170+
const fetchBase = useFetch();
172171

173172
return useCallback(
174173
(data: AuthResetPasswordRequest, requestConfig?: RequestConfigType) => {

src/services/api/use-fetch-base.ts

-78
This file was deleted.

src/services/api/use-fetch.ts

+56-14
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,69 @@
11
"use client";
22

33
import { useCallback } from "react";
4-
import useFetchBase from "./use-fetch-base";
5-
import useAuthTokens from "../auth/use-auth-tokens";
6-
import { FetchInitType, FetchInputType } from "./types/fetch-params";
4+
import { AUTH_REFRESH_URL } from "./config";
5+
import { FetchInputType, FetchInitType } from "./types/fetch-params";
6+
import useLanguage from "../i18n/use-language";
7+
import { getTokensInfo, setTokensInfo } from "../auth/auth-tokens-info";
78

89
function useFetch() {
9-
const { tokensInfoRef, setTokensInfo } = useAuthTokens();
10-
const fetchBase = useFetchBase();
10+
const language = useLanguage();
1111

12-
const fetchWrapper = useCallback(
12+
return useCallback(
1313
async (input: FetchInputType, init?: FetchInitType) => {
14-
return fetchBase(input, init, {
15-
token: tokensInfoRef.current?.token,
16-
refreshToken: tokensInfoRef.current?.refreshToken,
17-
tokenExpires: tokensInfoRef.current?.tokenExpires,
18-
setTokensInfo,
14+
const tokens = getTokensInfo();
15+
16+
let headers: HeadersInit = {
17+
"x-custom-lang": language,
18+
};
19+
20+
if (!(init?.body instanceof FormData)) {
21+
headers = {
22+
...headers,
23+
"Content-Type": "application/json",
24+
};
25+
}
26+
27+
if (tokens?.token) {
28+
headers = {
29+
...headers,
30+
Authorization: `Bearer ${tokens.token}`,
31+
};
32+
}
33+
34+
if (tokens?.tokenExpires && tokens.tokenExpires - 60000 <= Date.now()) {
35+
const newTokens = await fetch(AUTH_REFRESH_URL, {
36+
method: "POST",
37+
headers: {
38+
"Content-Type": "application/json",
39+
Authorization: `Bearer ${tokens.refreshToken}`,
40+
},
41+
}).then((res) => res.json());
42+
43+
if (newTokens.token) {
44+
setTokensInfo({
45+
token: newTokens.token,
46+
refreshToken: newTokens.refreshToken,
47+
tokenExpires: newTokens.tokenExpires,
48+
});
49+
50+
headers = {
51+
...headers,
52+
Authorization: `Bearer ${newTokens.token}`,
53+
};
54+
}
55+
}
56+
57+
return fetch(input, {
58+
...init,
59+
headers: {
60+
...headers,
61+
...init?.headers,
62+
},
1963
});
2064
},
21-
[fetchBase, setTokensInfo, tokensInfoRef]
65+
[language]
2266
);
23-
24-
return fetchWrapper;
2567
}
2668

2769
export default useFetch;

src/services/auth/auth-context.ts

-8
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,7 @@ export const AuthActionsContext = createContext<{
2323
});
2424

2525
export const AuthTokensContext = createContext<{
26-
tokensInfoRef: React.MutableRefObject<Tokens>;
2726
setTokensInfo: (tokensInfo: TokensInfo) => void;
2827
}>({
29-
tokensInfoRef: {
30-
current: {
31-
token: null,
32-
refreshToken: null,
33-
tokenExpires: null,
34-
},
35-
},
3628
setTokensInfo: () => {},
3729
});

0 commit comments

Comments
 (0)