react-activity-tracker
Version:
A library to track user interactions and API activity in React apps
47 lines (43 loc) • 1.23 kB
JavaScript
import axios from 'axios';
export default function patchAxios(onTrack) {
axios.interceptors.request.use((config) => {
config.metadata = {
requestBody: config.data ? tryParseJSON(config.data) : null,
};
return config;
});
axios.interceptors.response.use(
(response) => {
onTrack({
type: 'api',
label: response.config.label || '',
url: response.config.url,
method: response.config.method,
requestBody: response.config.metadata?.requestBody || null,
responseBody: response.data,
status: response.status,
});
return response;
},
(error) => {
const config = error.config || {};
onTrack({
type: 'api',
label: config.label || '',
url: config.url,
method: config.method || 'UNKNOWN',
requestBody: config.metadata?.requestBody || null,
responseBody: { error: error.message },
status: error.response?.status || 'error',
});
return Promise.reject(error);
}
);
}
function tryParseJSON(data) {
try {
return typeof data === 'string' ? JSON.parse(data) : data;
} catch {
return data;
}
}