diff --git a/packages/frontend-2/lib/common/helpers/error.ts b/packages/frontend-2/lib/common/helpers/error.ts new file mode 100644 index 000000000..b37c312d5 --- /dev/null +++ b/packages/frontend-2/lib/common/helpers/error.ts @@ -0,0 +1,4 @@ +import { H3Error } from 'h3' + +export const isH3Error = (error: unknown): error is H3Error => + !!(error && error instanceof H3Error) diff --git a/packages/frontend-2/plugins/002-rum.ts b/packages/frontend-2/plugins/002-rum.ts index 012392a7b..4536629b7 100644 --- a/packages/frontend-2/plugins/002-rum.ts +++ b/packages/frontend-2/plugins/002-rum.ts @@ -5,6 +5,7 @@ import { } from '~/lib/auth/composables/auth' import { useCreateErrorLoggingTransport } from '~/lib/core/composables/error' import type { Plugin } from 'nuxt/dist/app/nuxt' +import { isH3Error } from '~/lib/common/helpers/error' type PluginNuxtApp = Parameters[0] @@ -103,6 +104,16 @@ async function initRumClient(app: PluginNuxtApp) { window.DD_RUM_START_VIEW?.(realPath, routeName) }) + const resolveH3Data = (error: unknown) => + error && isH3Error(error) + ? { + statusCode: error.statusCode, + fatal: error.fatal, + statusMessage: error.statusMessage, + h3Data: error.data + } + : {} + registerErrorTransport({ onError: ({ args, firstError, firstString, otherData, nonObjectOtherData }) => { if (!datadog || !('addError' in datadog)) return @@ -110,6 +121,7 @@ async function initRumClient(app: PluginNuxtApp) { const error = firstError || firstString || args[0] datadog.addError(error, { ...otherData, + ...resolveH3Data(firstError), extraData: nonObjectOtherData, mainErrorMessage: firstString, isProperlySentError: true @@ -119,6 +131,7 @@ async function initRumClient(app: PluginNuxtApp) { if (!datadog || !('addError' in datadog)) return datadog.addError(error || message, { + ...resolveH3Data(error), isUnhandledRejection, message, mainErrorMessage: message,