You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
/**
|
|
* API error handling utilities for the application.
|
|
* Provides centralized error handling for API requests with platform-specific logging.
|
|
*
|
|
* @module api
|
|
*/
|
|
|
|
import { AxiosError } from "axios";
|
|
import { logger } from "../utils/logger";
|
|
|
|
/**
|
|
* Handles API errors with platform-specific logging and error processing.
|
|
*
|
|
* @param error - The Axios error object from the failed request
|
|
* @param endpoint - The API endpoint that was called
|
|
* @returns null for rate limit errors (400), throws the error otherwise
|
|
* @throws The original error for non-rate-limit cases
|
|
*
|
|
* @remarks
|
|
* Special handling includes:
|
|
* - Enhanced logging for Capacitor platform
|
|
* - Rate limit detection and handling
|
|
* - Detailed error information logging including:
|
|
* - Error message
|
|
* - HTTP status
|
|
* - Response data
|
|
* - Request configuration (URL, method, headers)
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* try {
|
|
* await api.getData();
|
|
* } catch (error) {
|
|
* handleApiError(error as AxiosError, '/api/data');
|
|
* }
|
|
* ```
|
|
*/
|
|
export const handleApiError = (error: AxiosError, endpoint: string) => {
|
|
if (process.env.VITE_PLATFORM === "capacitor") {
|
|
logger.error(`[Capacitor API Error] ${endpoint}:`, {
|
|
message: error.message,
|
|
status: error.response?.status,
|
|
data: error.response?.data,
|
|
config: {
|
|
url: error.config?.url,
|
|
method: error.config?.method,
|
|
headers: error.config?.headers,
|
|
},
|
|
});
|
|
}
|
|
|
|
// Specific handling for rate limits
|
|
if (error.response?.status === 400) {
|
|
logger.warn(`[Rate Limit] ${endpoint}`);
|
|
return null;
|
|
}
|
|
|
|
throw error;
|
|
};
|
|
|