11import axios from 'axios' ;
2- import { getUserStore , globalErrorStore , loaderStore } from '$lib/helpers/store.js' ;
2+ import { getUserStore , globalErrorStore , loaderStore , userStore } from '$lib/helpers/store.js' ;
33import { renewToken } from '$lib/services/auth-service' ;
44import { delay } from './utils/common' ;
55
@@ -14,6 +14,9 @@ const retryQueue = {
1414 /** @type {number } */
1515 timeout : 20 ,
1616
17+ /** @type {number } */
18+ maxRenewTokenCount : 30 ,
19+
1720 /**
1821 * refresh access token
1922 * @param {string } token
@@ -35,6 +38,9 @@ const retryQueue = {
3538 this . dequeue ( user . token ) ;
3639 } else {
3740 this . isRefreshingToken = true ;
41+ user . renew_token_count = ( user . renew_token_count || 0 ) + 1 ;
42+ // @ts -ignore
43+ userStore . set ( user ) ;
3844 this . refreshAccessToken ( user ?. token || '' )
3945 . then ( ( newToken ) => {
4046 this . isRefreshingToken = false ;
@@ -102,6 +108,9 @@ axios.interceptors.request.use(
102108 // Attach an authentication token to the request headers
103109 if ( user . token ) {
104110 config . headers . Authorization = `Bearer ${ user . token } ` ;
111+ } else {
112+ retryQueue . queue = [ ] ;
113+ redirectToLogin ( ) ;
105114 }
106115 return config ;
107116 } ,
@@ -115,17 +124,15 @@ axios.interceptors.request.use(
115124axios . interceptors . response . use (
116125 ( response ) => {
117126 loaderStore . set ( false ) ;
118- const user = getUserStore ( ) ;
119- if ( ! user ?. token ) {
120- redirectToLogin ( ) ;
121- }
122127 return response ;
123128 } ,
124129 ( error ) => {
125130 loaderStore . set ( false ) ;
126131 const originalRequest = error ?. config || { } ;
127132 const user = getUserStore ( ) ;
128- if ( ! user ?. token ) {
133+ console . log ( "renew token count." , user . renew_token_count ) ;
134+ if ( ! user ?. token || user . renew_token_count >= retryQueue . maxRenewTokenCount ) {
135+ retryQueue . queue = [ ] ;
129136 redirectToLogin ( ) ;
130137 return Promise . reject ( error ) ;
131138 }
@@ -180,7 +187,8 @@ function skipLoader(config) {
180187 new RegExp ( 'http(s*)://(.*?)/users' , 'g' ) ,
181188 new RegExp ( 'http(s*)://(.*?)/instruct/chat-completion' , 'g' ) ,
182189 new RegExp ( 'http(s*)://(.*?)/agent/(.*?)/code-scripts' , 'g' ) ,
183- new RegExp ( 'http(s*)://(.*?)/agent/(.*?)/code-script/generate' , 'g' )
190+ new RegExp ( 'http(s*)://(.*?)/agent/(.*?)/code-script/generate' , 'g' ) ,
191+ new RegExp ( 'http(s*)://(.*?)/renew-token' , 'g' )
184192 ] ;
185193
186194 /** @type {RegExp[] } */
0 commit comments