|
@@ -19,7 +19,7 @@ export function getAccessToken(): string | null {
|
|
|
* @returns Новый access-токен
|
|
* @returns Новый access-токен
|
|
|
* @throws Ошибка, если refresh-токен недействителен
|
|
* @throws Ошибка, если refresh-токен недействителен
|
|
|
*/
|
|
*/
|
|
|
-async function refreshAccessToken(): Promise<string> {
|
|
|
|
|
|
|
+export async function refreshAccessToken(): Promise<string> {
|
|
|
if (refreshPromise) return refreshPromise
|
|
if (refreshPromise) return refreshPromise
|
|
|
|
|
|
|
|
refreshPromise = (async () => {
|
|
refreshPromise = (async () => {
|
|
@@ -69,6 +69,10 @@ async function request<T>(
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
const noRefreshPaths = ['/auth/login', '/auth/register', '/auth/refresh', '/auth/logout']
|
|
const noRefreshPaths = ['/auth/login', '/auth/register', '/auth/refresh', '/auth/logout']
|
|
|
|
|
+ if (res.status === 429 && !isRetry) {
|
|
|
|
|
+ await new Promise(r => setTimeout(r, 1000))
|
|
|
|
|
+ return request<T>(path, options, true)
|
|
|
|
|
+ }
|
|
|
if (res.status === 401 && !isRetry && !noRefreshPaths.includes(path)) {
|
|
if (res.status === 401 && !isRetry && !noRefreshPaths.includes(path)) {
|
|
|
try {
|
|
try {
|
|
|
const newToken = await refreshAccessToken()
|
|
const newToken = await refreshAccessToken()
|