[V0.1 WORKING] Added chat, profile, & calendar screen implementations.
This commit is contained in:
@@ -54,8 +54,8 @@ apiClient.interceptors.response.use(
|
||||
async (error: AxiosError) => { // Explicitly type error as AxiosError
|
||||
const originalRequest = error.config;
|
||||
|
||||
// Check if the error has a response object (i.e., server responded with error status)
|
||||
if (error.response) {
|
||||
// Check if the error has a response object AND an original request config
|
||||
if (error.response && originalRequest) { // <-- Added check for originalRequest
|
||||
// Server responded with an error status code (4xx, 5xx)
|
||||
console.error('[API Client] Response Error Status:', error.response.status);
|
||||
console.error('[API Client] Response Error Data:', error.response.data);
|
||||
@@ -64,39 +64,58 @@ apiClient.interceptors.response.use(
|
||||
if (error.response.status === 401) {
|
||||
console.warn('[API Client] Unauthorized (401). Token might be expired or invalid.');
|
||||
|
||||
if (!originalRequest?._retry) {
|
||||
originalRequest._retry = true; // Mark the request as retried to avoid infinite loops
|
||||
if (originalRequest.url === '/auth/refresh') {
|
||||
console.error('[API Client] Refresh token attempt failed with 401. Not retrying.');
|
||||
// Clear token and reject without retry
|
||||
if (Platform.OS === 'web') {
|
||||
await AsyncStorage.removeItem(TOKEN_KEY);
|
||||
} else {
|
||||
await SecureStore.deleteItemAsync(TOKEN_KEY).catch(() => {}); // Ignore delete error
|
||||
}
|
||||
delete apiClient.defaults.headers.common['Authorization'];
|
||||
return Promise.reject(error); // Reject immediately
|
||||
}
|
||||
|
||||
// Proceed with refresh logic only if it wasn't the refresh endpoint that failed
|
||||
// and if originalRequest exists (already checked above)
|
||||
if (!originalRequest._retry) { // Now TS knows _retry exists due to declaration file
|
||||
originalRequest._retry = true;
|
||||
|
||||
try {
|
||||
console.log('[API Client] Attempting token refresh...');
|
||||
const refreshResponse = await apiClient.post('/auth/refresh', {}, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (refreshResponse.status === 200) {
|
||||
const newToken = refreshResponse.data?.accessToken;
|
||||
if (refreshResponse.status === 200) {
|
||||
const newToken = refreshResponse.data?.access_token;
|
||||
|
||||
if (newToken) {
|
||||
console.log('[API Client] Token refreshed successfully.');
|
||||
console.log('[API Client] Token refreshed successfully.');
|
||||
// Save the new token
|
||||
if (Platform.OS === 'web') {
|
||||
await AsyncStorage.setItem(TOKEN_KEY, newToken);
|
||||
} else {
|
||||
await SecureStore.setItemAsync(TOKEN_KEY, newToken);
|
||||
}
|
||||
|
||||
// Save the new token
|
||||
if (Platform.OS === 'web') {
|
||||
await AsyncStorage.setItem(TOKEN_KEY, newToken);
|
||||
} else {
|
||||
await SecureStore.setItemAsync(TOKEN_KEY, newToken);
|
||||
}
|
||||
// Update the Authorization header for future requests
|
||||
apiClient.defaults.headers.common['Authorization'] = `Bearer ${newToken}`;
|
||||
// Safely update original request headers
|
||||
if (originalRequest.headers) {
|
||||
originalRequest.headers['Authorization'] = `Bearer ${newToken}`;
|
||||
}
|
||||
|
||||
// Update the Authorization header for future requests
|
||||
apiClient.defaults.headers.common['Authorization'] = `Bearer ${newToken}`;
|
||||
originalRequest.headers['Authorization'] = `Bearer ${newToken}`;
|
||||
|
||||
// Retry the original request with the new token
|
||||
return apiClient(originalRequest);
|
||||
// Retry the original request (originalRequest is guaranteed to exist here)
|
||||
return apiClient(originalRequest);
|
||||
} else {
|
||||
console.error('[API Client] Invalid token structure received during refresh:', refreshResponse.data);
|
||||
throw new Error('Invalid token received from server.');
|
||||
}
|
||||
}
|
||||
} catch (refreshError) {
|
||||
} catch (refreshError: any) {
|
||||
console.error('[API Client] Token refresh failed:', refreshError);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user