@@ -84,17 +84,23 @@ export const withSentry = (origHandler: NextApiHandler, parameterizedRoute?: str
84
84
const baggageHeader = req . headers && req . headers . baggage ;
85
85
const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext ( baggageHeader ) ;
86
86
87
- const url = `${ req . url } ` ;
88
- // pull off query string, if any
89
- let reqPath = stripUrlQueryAndFragment ( url ) ;
90
- // Replace with placeholder
91
- if ( req . query ) {
92
- // TODO get this from next if possible, to avoid accidentally replacing non-dynamic parts of the path if
93
- // they happen to match the values of any of the dynamic parts
94
- for ( const [ key , value ] of Object . entries ( req . query ) ) {
95
- reqPath = reqPath . replace ( `${ value } ` , `[${ key } ]` ) ;
87
+ // prefer the parameterized route, if we have it (which we will if we've auto-wrapped the route handler)
88
+ let reqPath = parameterizedRoute ;
89
+
90
+ // If not, fake it by just replacing parameter values with their names, hoping that none of them match either
91
+ // each other or any hard-coded parts of the path
92
+ if ( ! reqPath ) {
93
+ const url = `${ req . url } ` ;
94
+ // pull off query string, if any
95
+ reqPath = stripUrlQueryAndFragment ( url ) ;
96
+ // Replace with placeholder
97
+ if ( req . query ) {
98
+ for ( const [ key , value ] of Object . entries ( req . query ) ) {
99
+ reqPath = reqPath . replace ( `${ value } ` , `[${ key } ]` ) ;
100
+ }
96
101
}
97
102
}
103
+
98
104
const reqMethod = `${ ( req . method || 'GET' ) . toUpperCase ( ) } ` ;
99
105
100
106
const transaction = startTransaction (
0 commit comments