import * as Sentry from '@sentry/react'; import {ResponseMeta} from 'sentry/api'; export default function handleXhrErrorResponse(message: string) { return (resp: ResponseMeta) => { if (!resp) { return; } if (!resp.responseJSON) { return; } const {responseJSON} = resp; // If this is a string then just capture it as error if (typeof responseJSON.detail === 'string') { Sentry.withScope(scope => { scope.setExtra('status', resp.status); scope.setExtra('detail', responseJSON.detail); Sentry.captureException(new Error(message)); }); return; } // Ignore sudo-required errors if (responseJSON.detail && responseJSON.detail.code === 'sudo-required') { return; } if (responseJSON.detail && typeof responseJSON.detail.message === 'string') { Sentry.withScope(scope => { scope.setExtra('status', resp.status); scope.setExtra('detail', responseJSON.detail); scope.setExtra('code', responseJSON.detail.code); Sentry.captureException(new Error(message)); }); return; } }; }