@@ -6,6 +6,41 @@ import { FetchInputType, FetchInitType } from "./types/fetch-params";
66import useLanguage from "../i18n/use-language" ;
77import { getTokensInfo , setTokensInfo } from "../auth/auth-tokens-info" ;
88
9+ let refreshPromise : Promise < void > | null = null ;
10+
11+ async function refreshTokens ( ) : Promise < void > {
12+ if ( refreshPromise ) return refreshPromise ;
13+
14+ refreshPromise = ( async ( ) => {
15+ try {
16+ const tokens = getTokensInfo ( ) ;
17+ const response = await fetch ( AUTH_REFRESH_URL , {
18+ method : "POST" ,
19+ headers : {
20+ "Content-Type" : "application/json" ,
21+ Authorization : `Bearer ${ tokens ?. refreshToken } ` ,
22+ } ,
23+ } ) ;
24+
25+ const newTokens = await response . json ( ) ;
26+
27+ if ( newTokens . token ) {
28+ setTokensInfo ( {
29+ token : newTokens . token ,
30+ refreshToken : newTokens . refreshToken ,
31+ tokenExpires : newTokens . tokenExpires ,
32+ } ) ;
33+ }
34+ } catch {
35+ // Refresh failed — callers will proceed with current token
36+ } finally {
37+ refreshPromise = null ;
38+ }
39+ } ) ( ) ;
40+
41+ return refreshPromise ;
42+ }
43+
944function useFetch ( ) {
1045 const language = useLanguage ( ) ;
1146
@@ -32,24 +67,12 @@ function useFetch() {
3267 }
3368
3469 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-
70+ await refreshTokens ( ) ;
71+ const refreshedTokens = getTokensInfo ( ) ;
72+ if ( refreshedTokens ?. token ) {
5073 headers = {
5174 ...headers ,
52- Authorization : `Bearer ${ newTokens . token } ` ,
75+ Authorization : `Bearer ${ refreshedTokens . token } ` ,
5376 } ;
5477 }
5578 }
0 commit comments