From d3e9a08871f31efc306a1cf1a0141fec3c7e7aa4 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Wed, 17 Sep 2025 09:54:45 +0200 Subject: [PATCH 1/4] fix(remix): Actually capture exceptions for `HandleDocumentRequestFunction` --- packages/remix/src/server/errors.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/remix/src/server/errors.ts b/packages/remix/src/server/errors.ts index e622e743b74c..4afa0cbafc53 100644 --- a/packages/remix/src/server/errors.ts +++ b/packages/remix/src/server/errors.ts @@ -101,11 +101,10 @@ export function errorHandleDocumentRequestFunction( const { request, responseStatusCode, responseHeaders, context, loadContext } = requestContext; return handleCallbackErrors( - () => { - return origDocumentRequestFunction.call(this, request, responseStatusCode, responseHeaders, context, loadContext); - }, + () => origDocumentRequestFunction.call(this, request, responseStatusCode, responseHeaders, context, loadContext), err => { - throw err; + // eslint-disable-next-line @typescript-eslint/no-floating-promises + captureRemixServerException(err, 'HandleDocumentRequestFunction', request); }, ); } From e11807cb0db34a6bb31054e33c1fae1f582f3395 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Wed, 17 Sep 2025 10:35:29 +0200 Subject: [PATCH 2/4] drop it instead --- packages/remix/src/server/errors.ts | 39 +------------------ packages/remix/src/server/instrumentServer.ts | 6 +-- 2 files changed, 4 insertions(+), 41 deletions(-) diff --git a/packages/remix/src/server/errors.ts b/packages/remix/src/server/errors.ts index 4afa0cbafc53..0c078c6c6230 100644 --- a/packages/remix/src/server/errors.ts +++ b/packages/remix/src/server/errors.ts @@ -1,11 +1,4 @@ -import type { - ActionFunction, - ActionFunctionArgs, - EntryContext, - HandleDocumentRequestFunction, - LoaderFunction, - LoaderFunctionArgs, -} from '@remix-run/node'; +import type { ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs } from '@remix-run/node'; import { isRouteErrorResponse } from '@remix-run/router'; import type { RequestEventData, Span } from '@sentry/core'; import { @@ -79,36 +72,6 @@ export async function captureRemixServerException(err: unknown, name: string, re }); } -/** - * Wraps the original `HandleDocumentRequestFunction` with error handling. - * - * @param origDocumentRequestFunction The original `HandleDocumentRequestFunction`. - * @param requestContext The request context. - * - * @returns The wrapped `HandleDocumentRequestFunction`. - */ -export function errorHandleDocumentRequestFunction( - this: unknown, - origDocumentRequestFunction: HandleDocumentRequestFunction, - requestContext: { - request: Request; - responseStatusCode: number; - responseHeaders: Headers; - context: EntryContext; - loadContext?: Record; - }, -): HandleDocumentRequestFunction { - const { request, responseStatusCode, responseHeaders, context, loadContext } = requestContext; - - return handleCallbackErrors( - () => origDocumentRequestFunction.call(this, request, responseStatusCode, responseHeaders, context, loadContext), - err => { - // eslint-disable-next-line @typescript-eslint/no-floating-promises - captureRemixServerException(err, 'HandleDocumentRequestFunction', request); - }, - ); -} - /** * Wraps the original `DataFunction` with error handling. * This function also stores the form data keys if the action is being called. diff --git a/packages/remix/src/server/instrumentServer.ts b/packages/remix/src/server/instrumentServer.ts index 109c3e0f3672..720ede75f554 100644 --- a/packages/remix/src/server/instrumentServer.ts +++ b/packages/remix/src/server/instrumentServer.ts @@ -39,7 +39,7 @@ import { import { DEBUG_BUILD } from '../utils/debug-build'; import { createRoutes, getTransactionName } from '../utils/utils'; import { extractData, isResponse, json } from '../utils/vendor/response'; -import { captureRemixServerException, errorHandleDataFunction, errorHandleDocumentRequestFunction } from './errors'; +import { captureRemixServerException, errorHandleDataFunction } from './errors'; type AppData = unknown; type RemixRequest = Parameters[0]; @@ -155,11 +155,11 @@ function makeWrappedDocumentRequestFunction(instrumentTracing?: boolean) { }, }, () => { - return errorHandleDocumentRequestFunction.call(this, origDocumentRequestFunction, documentRequestContext); + return origDocumentRequestFunction.call(this, documentRequestContext); }, ); } else { - return errorHandleDocumentRequestFunction.call(this, origDocumentRequestFunction, documentRequestContext); + return origDocumentRequestFunction.call(this, documentRequestContext); } }; }; From 0286ca160f856b3612d54f100723db961a8adb26 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Wed, 17 Sep 2025 10:40:30 +0200 Subject: [PATCH 3/4] fix it --- packages/remix/src/server/instrumentServer.ts | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/packages/remix/src/server/instrumentServer.ts b/packages/remix/src/server/instrumentServer.ts index 720ede75f554..64c141e03b13 100644 --- a/packages/remix/src/server/instrumentServer.ts +++ b/packages/remix/src/server/instrumentServer.ts @@ -119,22 +119,7 @@ function getTraceAndBaggage(): { function makeWrappedDocumentRequestFunction(instrumentTracing?: boolean) { return function (origDocumentRequestFunction: HandleDocumentRequestFunction): HandleDocumentRequestFunction { - return async function ( - this: unknown, - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - context: EntryContext, - loadContext?: Record, - ): Promise { - const documentRequestContext = { - request, - responseStatusCode, - responseHeaders, - context, - loadContext, - }; - + return async function (this: unknown, request: Request, ...args: unknown[]): Promise { if (instrumentTracing) { const activeSpan = getActiveSpan(); const rootSpan = activeSpan && getRootSpan(activeSpan); @@ -155,11 +140,11 @@ function makeWrappedDocumentRequestFunction(instrumentTracing?: boolean) { }, }, () => { - return origDocumentRequestFunction.call(this, documentRequestContext); + return origDocumentRequestFunction.call(this, request, ...args); }, ); } else { - return origDocumentRequestFunction.call(this, documentRequestContext); + return origDocumentRequestFunction.call(this, request, ...args); } }; }; From 783d85d7a0d77a60cadd0eaceb67ae3764834863 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Wed, 17 Sep 2025 10:56:19 +0200 Subject: [PATCH 4/4] fix lint --- packages/remix/src/server/instrumentServer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/remix/src/server/instrumentServer.ts b/packages/remix/src/server/instrumentServer.ts index 64c141e03b13..fda9b3f10b75 100644 --- a/packages/remix/src/server/instrumentServer.ts +++ b/packages/remix/src/server/instrumentServer.ts @@ -6,7 +6,6 @@ import type { ActionFunctionArgs, AppLoadContext, CreateRequestHandlerFunction, - EntryContext, HandleDocumentRequestFunction, LoaderFunction, LoaderFunctionArgs,