Add order page with real API calls
This commit is contained in:
@@ -25,6 +25,9 @@ class ApiClient {
|
||||
private tenantId: string | null = null;
|
||||
private refreshToken: string | null = null;
|
||||
private isRefreshing: boolean = false;
|
||||
private refreshAttempts: number = 0;
|
||||
private maxRefreshAttempts: number = 3;
|
||||
private lastRefreshAttempt: number = 0;
|
||||
private failedQueue: Array<{
|
||||
resolve: (value?: any) => void;
|
||||
reject: (error?: any) => void;
|
||||
@@ -72,6 +75,14 @@ class ApiClient {
|
||||
|
||||
// Check if error is 401 and we have a refresh token
|
||||
if (error.response?.status === 401 && this.refreshToken && !originalRequest._retry) {
|
||||
// Check if we've exceeded max refresh attempts in a short time
|
||||
const now = Date.now();
|
||||
if (this.refreshAttempts >= this.maxRefreshAttempts && (now - this.lastRefreshAttempt) < 30000) {
|
||||
console.log('Max refresh attempts exceeded, logging out');
|
||||
await this.handleAuthFailure();
|
||||
return Promise.reject(this.handleError(error));
|
||||
}
|
||||
|
||||
if (this.isRefreshing) {
|
||||
// If already refreshing, queue this request
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -81,8 +92,12 @@ class ApiClient {
|
||||
|
||||
originalRequest._retry = true;
|
||||
this.isRefreshing = true;
|
||||
this.refreshAttempts++;
|
||||
this.lastRefreshAttempt = now;
|
||||
|
||||
try {
|
||||
console.log(`Attempting token refresh (attempt ${this.refreshAttempts})...`);
|
||||
|
||||
// Attempt to refresh the token
|
||||
const response = await this.client.post('/auth/refresh', {
|
||||
refresh_token: this.refreshToken
|
||||
@@ -90,6 +105,11 @@ class ApiClient {
|
||||
|
||||
const { access_token, refresh_token } = response.data;
|
||||
|
||||
console.log('Token refresh successful');
|
||||
|
||||
// Reset refresh attempts on success
|
||||
this.refreshAttempts = 0;
|
||||
|
||||
// Update tokens
|
||||
this.setAuthToken(access_token);
|
||||
if (refresh_token) {
|
||||
@@ -107,6 +127,7 @@ class ApiClient {
|
||||
return this.client(originalRequest);
|
||||
|
||||
} catch (refreshError) {
|
||||
console.error(`Token refresh failed (attempt ${this.refreshAttempts}):`, refreshError);
|
||||
// Refresh failed, clear tokens and redirect to login
|
||||
this.processQueue(refreshError, null);
|
||||
await this.handleAuthFailure();
|
||||
@@ -165,13 +186,14 @@ class ApiClient {
|
||||
try {
|
||||
// Dynamically import to avoid circular dependency
|
||||
const { useAuthStore } = await import('../../stores/auth.store');
|
||||
const store = useAuthStore.getState();
|
||||
const setState = useAuthStore.setState;
|
||||
|
||||
// Update the store with new tokens
|
||||
store.token = accessToken;
|
||||
if (refreshToken) {
|
||||
store.refreshToken = refreshToken;
|
||||
}
|
||||
setState(state => ({
|
||||
...state,
|
||||
token: accessToken,
|
||||
refreshToken: refreshToken || state.refreshToken,
|
||||
}));
|
||||
} catch (error) {
|
||||
console.warn('Failed to update auth store:', error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user