@@ -14,7 +14,6 @@ import { logger, vercelWaitUntil } from '@sentry/utils';
14
14
import { DEBUG_BUILD } from './debug-build' ;
15
15
import { isNotFoundNavigationError , isRedirectNavigationError } from './nextNavigationErrorUtils' ;
16
16
import { flushSafelyWithTimeout } from './utils/responseEnd' ;
17
- import { dropNextjsRootContext , escapeNextjsTracing } from './utils/tracingUtils' ;
18
17
19
18
interface Options {
20
19
formData ?: FormData ;
@@ -68,89 +67,86 @@ async function withServerActionInstrumentationImplementation<A extends (...args:
68
67
options : Options ,
69
68
callback : A ,
70
69
) : Promise < ReturnType < A > > {
71
- dropNextjsRootContext ( ) ;
72
- return escapeNextjsTracing ( ( ) => {
73
- return withIsolationScope ( async isolationScope => {
74
- const sendDefaultPii = getClient ( ) ?. getOptions ( ) . sendDefaultPii ;
70
+ return withIsolationScope ( async isolationScope => {
71
+ const sendDefaultPii = getClient ( ) ?. getOptions ( ) . sendDefaultPii ;
75
72
76
- let sentryTraceHeader ;
77
- let baggageHeader ;
78
- const fullHeadersObject : Record < string , string > = { } ;
79
- try {
80
- const awaitedHeaders : Headers = await options . headers ;
81
- sentryTraceHeader = awaitedHeaders ?. get ( 'sentry-trace' ) ?? undefined ;
82
- baggageHeader = awaitedHeaders ?. get ( 'baggage' ) ;
83
- awaitedHeaders ?. forEach ( ( value , key ) => {
84
- fullHeadersObject [ key ] = value ;
85
- } ) ;
86
- } catch ( e ) {
87
- DEBUG_BUILD &&
88
- logger . warn (
89
- "Sentry wasn't able to extract the tracing headers for a server action. Will not trace this request." ,
90
- ) ;
91
- }
92
-
93
- isolationScope . setTransactionName ( `serverAction/${ serverActionName } ` ) ;
94
- isolationScope . setSDKProcessingMetadata ( {
95
- request : {
96
- headers : fullHeadersObject ,
97
- } ,
73
+ let sentryTraceHeader ;
74
+ let baggageHeader ;
75
+ const fullHeadersObject : Record < string , string > = { } ;
76
+ try {
77
+ const awaitedHeaders : Headers = await options . headers ;
78
+ sentryTraceHeader = awaitedHeaders ?. get ( 'sentry-trace' ) ?? undefined ;
79
+ baggageHeader = awaitedHeaders ?. get ( 'baggage' ) ;
80
+ awaitedHeaders ?. forEach ( ( value , key ) => {
81
+ fullHeadersObject [ key ] = value ;
98
82
} ) ;
83
+ } catch ( e ) {
84
+ DEBUG_BUILD &&
85
+ logger . warn (
86
+ "Sentry wasn't able to extract the tracing headers for a server action. Will not trace this request." ,
87
+ ) ;
88
+ }
99
89
100
- return continueTrace (
101
- {
102
- sentryTrace : sentryTraceHeader ,
103
- baggage : baggageHeader ,
104
- } ,
105
- async ( ) => {
106
- try {
107
- return await startSpan (
108
- {
109
- op : 'function.server_action' ,
110
- name : `serverAction/${ serverActionName } ` ,
111
- forceTransaction : true ,
112
- attributes : {
113
- [ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE ] : 'route' ,
114
- } ,
115
- } ,
116
- async span => {
117
- const result = await handleCallbackErrors ( callback , error => {
118
- if ( isNotFoundNavigationError ( error ) ) {
119
- // We don't want to report "not-found"s
120
- span . setStatus ( { code : SPAN_STATUS_ERROR , message : 'not_found' } ) ;
121
- } else if ( isRedirectNavigationError ( error ) ) {
122
- // Don't do anything for redirects
123
- } else {
124
- span . setStatus ( { code : SPAN_STATUS_ERROR , message : 'internal_error' } ) ;
125
- captureException ( error , {
126
- mechanism : {
127
- handled : false ,
128
- } ,
129
- } ) ;
130
- }
131
- } ) ;
132
-
133
- if ( options . recordResponse !== undefined ? options . recordResponse : sendDefaultPii ) {
134
- getIsolationScope ( ) . setExtra ( 'server_action_result' , result ) ;
135
- }
90
+ isolationScope . setTransactionName ( `serverAction/${ serverActionName } ` ) ;
91
+ isolationScope . setSDKProcessingMetadata ( {
92
+ request : {
93
+ headers : fullHeadersObject ,
94
+ } ,
95
+ } ) ;
136
96
137
- if ( options . formData ) {
138
- options . formData . forEach ( ( value , key ) => {
139
- getIsolationScope ( ) . setExtra (
140
- `server_action_form_data.${ key } ` ,
141
- typeof value === 'string' ? value : '[non-string value]' ,
142
- ) ;
97
+ return continueTrace (
98
+ {
99
+ sentryTrace : sentryTraceHeader ,
100
+ baggage : baggageHeader ,
101
+ } ,
102
+ async ( ) => {
103
+ try {
104
+ return await startSpan (
105
+ {
106
+ op : 'function.server_action' ,
107
+ name : `serverAction/${ serverActionName } ` ,
108
+ forceTransaction : true ,
109
+ attributes : {
110
+ [ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE ] : 'route' ,
111
+ } ,
112
+ } ,
113
+ async span => {
114
+ const result = await handleCallbackErrors ( callback , error => {
115
+ if ( isNotFoundNavigationError ( error ) ) {
116
+ // We don't want to report "not-found"s
117
+ span . setStatus ( { code : SPAN_STATUS_ERROR , message : 'not_found' } ) ;
118
+ } else if ( isRedirectNavigationError ( error ) ) {
119
+ // Don't do anything for redirects
120
+ } else {
121
+ span . setStatus ( { code : SPAN_STATUS_ERROR , message : 'internal_error' } ) ;
122
+ captureException ( error , {
123
+ mechanism : {
124
+ handled : false ,
125
+ } ,
143
126
} ) ;
144
127
}
128
+ } ) ;
145
129
146
- return result ;
147
- } ,
148
- ) ;
149
- } finally {
150
- vercelWaitUntil ( flushSafelyWithTimeout ( ) ) ;
151
- }
152
- } ,
153
- ) ;
154
- } ) ;
130
+ if ( options . recordResponse !== undefined ? options . recordResponse : sendDefaultPii ) {
131
+ getIsolationScope ( ) . setExtra ( 'server_action_result' , result ) ;
132
+ }
133
+
134
+ if ( options . formData ) {
135
+ options . formData . forEach ( ( value , key ) => {
136
+ getIsolationScope ( ) . setExtra (
137
+ `server_action_form_data.${ key } ` ,
138
+ typeof value === 'string' ? value : '[non-string value]' ,
139
+ ) ;
140
+ } ) ;
141
+ }
142
+
143
+ return result ;
144
+ } ,
145
+ ) ;
146
+ } finally {
147
+ vercelWaitUntil ( flushSafelyWithTimeout ( ) ) ;
148
+ }
149
+ } ,
150
+ ) ;
155
151
} ) ;
156
152
}
0 commit comments