Skip to content

Commit 5f1e85c

Browse files
authored
Merge pull request #399 from iceljc/features/refine-agent-rule
add max token renew limit
2 parents 5e94cf4 + e7b534c commit 5f1e85c

File tree

4 files changed

+20
-9
lines changed

4 files changed

+20
-9
lines changed

src/lib/helpers/http.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import axios from 'axios';
2-
import { getUserStore, globalErrorStore, loaderStore } from '$lib/helpers/store.js';
2+
import { getUserStore, globalErrorStore, loaderStore, userStore } from '$lib/helpers/store.js';
33
import { renewToken } from '$lib/services/auth-service';
44
import { 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(
115124
axios.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[]} */

src/lib/helpers/store.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@ export function getUserStore() {
4242
if (browser) {
4343
// Access localStorage only if in the browser context
4444
let json = sessionStorage.getItem(userKey);
45-
if (json)
45+
if (json) {
4646
return JSON.parse(json);
47-
else
47+
} else {
4848
return userStore;
49+
}
4950
} else {
5051
// Return a default value for SSR
5152
return userStore;

src/lib/helpers/types/userTypes.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @property {string} [color]
1919
* @property {string} [token]
2020
* @property {boolean} [open_detail]
21+
* @property {number?} [renew_token_count]
2122
*/
2223

2324
/**

src/lib/services/auth-service.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export async function getToken(email, password, onSucceed, onError) {
3232
const user = getUserStore();
3333
user.token = result.access_token;
3434
user.expires = result.expires;
35+
user.renew_token_count = 0;
3536
userStore.set(user);
3637
onSucceed();
3738
})

0 commit comments

Comments
 (0)