@@ -64,32 +64,40 @@ export const transformPageChunk: NonNullable<ResolveOptions['transformPageChunk'
6464 * // export const handle = sequence(sentryHandle, yourCustomHandle);
6565 * ```
6666 */
67- export const sentryHandle : Handle = ( { event, resolve } ) => {
67+ export const sentryHandle : Handle = input => {
68+ // @ts -ignore domain.active exists if there is an active domain, TS just doesn't know
69+ if ( domain . active ) {
70+ return handleInDomain ( input ) ;
71+ }
6872 return domain . create ( ) . bind ( ( ) => {
69- const sentryTraceHeader = event . request . headers . get ( 'sentry-trace' ) ;
70- const baggageHeader = event . request . headers . get ( 'baggage' ) ;
71- const traceparentData = sentryTraceHeader ? extractTraceparentData ( sentryTraceHeader ) : undefined ;
72- const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext ( baggageHeader ) ;
73-
74- return trace (
75- {
76- op : 'http.server' ,
77- name : `${ event . request . method } ${ event . route . id } ` ,
78- status : 'ok' ,
79- ...traceparentData ,
80- metadata : {
81- source : 'route' ,
82- dynamicSamplingContext : traceparentData && ! dynamicSamplingContext ? { } : dynamicSamplingContext ,
83- } ,
84- } ,
85- async ( span ?: Span ) => {
86- const res = await resolve ( event , { transformPageChunk } ) ;
87- if ( span ) {
88- span . setHttpStatus ( res . status ) ;
89- }
90- return res ;
91- } ,
92- sendErrorToSentry ,
93- ) ;
73+ return handleInDomain ( input ) ;
9474 } ) ( ) ;
9575} ;
76+
77+ function handleInDomain ( { event, resolve } : Parameters < Handle > [ 0 ] ) : ReturnType < Handle > {
78+ const sentryTraceHeader = event . request . headers . get ( 'sentry-trace' ) ;
79+ const baggageHeader = event . request . headers . get ( 'baggage' ) ;
80+ const traceparentData = sentryTraceHeader ? extractTraceparentData ( sentryTraceHeader ) : undefined ;
81+ const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext ( baggageHeader ) ;
82+
83+ return trace (
84+ {
85+ op : 'http.server' ,
86+ name : `${ event . request . method } ${ event . route . id } ` ,
87+ status : 'ok' ,
88+ ...traceparentData ,
89+ metadata : {
90+ source : 'route' ,
91+ dynamicSamplingContext : traceparentData && ! dynamicSamplingContext ? { } : dynamicSamplingContext ,
92+ } ,
93+ } ,
94+ async ( span ?: Span ) => {
95+ const res = await resolve ( event , { transformPageChunk } ) ;
96+ if ( span ) {
97+ span . setHttpStatus ( res . status ) ;
98+ }
99+ return res ;
100+ } ,
101+ sendErrorToSentry ,
102+ ) ;
103+ }
0 commit comments