@@ -14,7 +14,12 @@ const queryParsedChannel = channel('apm:next:query-parsed')
14
14
const requests = new WeakSet ( )
15
15
const nodeNextRequestsToNextRequests = new WeakMap ( )
16
16
17
+ // Next.js <= 14.2.6
17
18
const MIDDLEWARE_HEADER = 'x-middleware-invoke'
19
+ // Next.js >= 14.2.7
20
+ const NEXT_REQUEST_META = Symbol . for ( 'NextInternalRequestMeta' )
21
+ const META_IS_MIDDLEWARE = 'middlewareInvoke'
22
+
18
23
19
24
function wrapHandleRequest ( handleRequest ) {
20
25
return function ( req , res , pathname , query ) {
@@ -111,6 +116,12 @@ function getPageFromPath (page, dynamicRoutes = []) {
111
116
return getPagePath ( page )
112
117
}
113
118
119
+ // https://github.com/vercel/next.js/blob/09ab728499b7a502de36a8397ef85ff30f5e4f6e/packages/next/src/server/request-meta.ts#L161
120
+ function getRequestMeta ( req , key ) {
121
+ const meta = req [ NEXT_REQUEST_META ] || { }
122
+ return typeof key === 'string' ? meta [ key ] : meta
123
+ }
124
+
114
125
function instrument ( req , res , error , handler ) {
115
126
if ( typeof error === 'function' ) {
116
127
handler = error
@@ -121,7 +132,7 @@ function instrument (req, res, error, handler) {
121
132
res = res . originalResponse || res
122
133
123
134
// TODO support middleware properly in the future?
124
- const isMiddleware = req . headers [ MIDDLEWARE_HEADER ]
135
+ const isMiddleware = req . headers [ MIDDLEWARE_HEADER ] || getRequestMeta ( req , META_IS_MIDDLEWARE )
125
136
if ( isMiddleware || requests . has ( req ) ) {
126
137
if ( error ) {
127
138
errorChannel . publish ( { error } )
@@ -188,7 +199,7 @@ function finish (ctx, result, err) {
188
199
// however, it is not provided as a class function or exported property
189
200
addHook ( {
190
201
name : 'next' ,
191
- versions : [ '>=13.3.0 <14.2.7' ] ,
202
+ versions : [ '>=13.3.0 <= 14.2.7' ] ,
192
203
file : 'dist/server/web/spec-extension/adapters/next-request.js'
193
204
} , NextRequestAdapter => {
194
205
shimmer . wrap ( NextRequestAdapter . NextRequestAdapter , 'fromNodeNextRequest' , fromNodeNextRequest => {
@@ -203,7 +214,7 @@ addHook({
203
214
204
215
addHook ( {
205
216
name : 'next' ,
206
- versions : [ '>=11.1 <14.2.7' ] ,
217
+ versions : [ '>=11.1 <= 14.2.7' ] ,
207
218
file : 'dist/server/serve-static.js'
208
219
} , serveStatic => shimmer . wrap ( serveStatic , 'serveStatic' , wrapServeStatic ) )
209
220
@@ -213,7 +224,7 @@ addHook({
213
224
file : 'dist/next-server/server/serve-static.js'
214
225
} , serveStatic => shimmer . wrap ( serveStatic , 'serveStatic' , wrapServeStatic ) )
215
226
216
- addHook ( { name : 'next' , versions : [ '>=11.1 <14.2.7' ] , file : 'dist/server/next-server.js' } , nextServer => {
227
+ addHook ( { name : 'next' , versions : [ '>=11.1 <= 14.2.7' ] , file : 'dist/server/next-server.js' } , nextServer => {
217
228
const Server = nextServer . default
218
229
219
230
shimmer . wrap ( Server . prototype , 'handleRequest' , wrapHandleRequest )
@@ -230,7 +241,7 @@ addHook({ name: 'next', versions: ['>=11.1 <14.2.7'], file: 'dist/server/next-se
230
241
} )
231
242
232
243
// `handleApiRequest` changes parameters/implementation at 13.2.0
233
- addHook ( { name : 'next' , versions : [ '>=13.2 <14.2.7' ] , file : 'dist/server/next-server.js' } , nextServer => {
244
+ addHook ( { name : 'next' , versions : [ '>=13.2 <= 14.2.7' ] , file : 'dist/server/next-server.js' } , nextServer => {
234
245
const Server = nextServer . default
235
246
shimmer . wrap ( Server . prototype , 'handleApiRequest' , wrapHandleApiRequestWithMatch )
236
247
return nextServer
@@ -264,7 +275,7 @@ addHook({
264
275
265
276
addHook ( {
266
277
name : 'next' ,
267
- versions : [ '>=13 <14.2.7' ] ,
278
+ versions : [ '>=13 <= 14.2.7' ] ,
268
279
file : 'dist/server/web/spec-extension/request.js'
269
280
} , request => {
270
281
const nextUrlDescriptor = Object . getOwnPropertyDescriptor ( request . NextRequest . prototype , 'nextUrl' )
0 commit comments