diff --git a/packages/ui-default/sentry.ts b/packages/ui-default/sentry.ts index 37a22a5f2..dd0d5e4c9 100644 --- a/packages/ui-default/sentry.ts +++ b/packages/ui-default/sentry.ts @@ -17,6 +17,7 @@ init({ tracePropagationTargets: ['localhost', /^\//, window.location.host], replaysSessionSampleRate: 0.01, replaysOnErrorSampleRate: 0.1, + beforeSend: (event, hint) => ((hint.originalException as { isUserFacingError?: boolean } | undefined)?.isUserFacingError ? null : event), }); setTag('host', window.location.host); setTag('page_name', document.documentElement.getAttribute('data-page')); diff --git a/packages/ui-default/utils/base.ts b/packages/ui-default/utils/base.ts index 1f3c0bf22..f4fe52af5 100644 --- a/packages/ui-default/utils/base.ts +++ b/packages/ui-default/utils/base.ts @@ -114,15 +114,17 @@ export const request = { reject(err); } else if (typeof jqXHR.responseJSON === 'object' && jqXHR.responseJSON.error) { const { error } = jqXHR.responseJSON; + let err: any; if (error.params) { const message = i18n(error.message, ...error.params); - const err = new Error(message === error.message && error.params.length + err = new Error(message === error.message && error.params.length ? `${error.message}: ${error.params.join(' ')}` - : message) as any; + : message); err.rawMessage = error.message; err.params = error.params; - reject(err); - } else reject(new Error(jqXHR.responseJSON.error.message)); + } else err = new Error(error.message); + if (jqXHR.status >= 400 && jqXHR.status < 500) err.isUserFacingError = true; + reject(err); } else if (errorThrown instanceof Error) { reject(errorThrown); } else {