Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
7.2 KiB
Plaintext
1 line
7.2 KiB
Plaintext
{"version":3,"file":"wrapRouteHandlerWithSentry.js","sources":["../../../src/common/wrapRouteHandlerWithSentry.ts"],"sourcesContent":["import type { RequestEventData } from '@sentry/core';\nimport {\n captureException,\n getActiveSpan,\n getCapturedScopesOnSpan,\n getIsolationScope,\n getRootSpan,\n handleCallbackErrors,\n propagationContextFromHeaders,\n Scope,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n setCapturedScopesOnSpan,\n setHttpStatus,\n winterCGHeadersToDict,\n withIsolationScope,\n withScope,\n} from '@sentry/core';\nimport { isNotFoundNavigationError, isRedirectNavigationError } from './nextNavigationErrorUtils';\nimport type { RouteHandlerContext } from './types';\nimport { flushSafelyWithTimeout, waitUntil } from './utils/responseEnd';\nimport { commonObjectToIsolationScope } from './utils/tracingUtils';\n\n/**\n * Wraps a Next.js App Router Route handler with Sentry error and performance instrumentation.\n *\n * NOTICE: This wrapper is for App Router API routes. If you are looking to wrap Pages Router API routes use `wrapApiHandlerWithSentry` instead.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function wrapRouteHandlerWithSentry<F extends (...args: any[]) => any>(\n routeHandler: F,\n context: RouteHandlerContext,\n): (...args: Parameters<F>) => ReturnType<F> extends Promise<unknown> ? ReturnType<F> : Promise<ReturnType<F>> {\n const { method, parameterizedRoute, headers } = context;\n\n return new Proxy(routeHandler, {\n apply: async (originalFunction, thisArg, args) => {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n let edgeRuntimeIsolationScopeOverride: Scope | undefined;\n if (rootSpan && process.env.NEXT_RUNTIME === 'edge') {\n const isolationScope = commonObjectToIsolationScope(headers);\n const { scope } = getCapturedScopesOnSpan(rootSpan);\n setCapturedScopesOnSpan(rootSpan, scope ?? new Scope(), isolationScope);\n\n edgeRuntimeIsolationScopeOverride = isolationScope;\n\n rootSpan.updateName(`${method} ${parameterizedRoute}`);\n rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route');\n rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_OP, 'http.server');\n }\n\n return withIsolationScope(\n process.env.NEXT_RUNTIME === 'edge' ? edgeRuntimeIsolationScopeOverride : getIsolationScope(),\n () => {\n return withScope(async scope => {\n scope.setTransactionName(`${method} ${parameterizedRoute}`);\n\n if (process.env.NEXT_RUNTIME === 'edge') {\n const completeHeadersDict: Record<string, string> = headers ? winterCGHeadersToDict(headers) : {};\n const incomingPropagationContext = propagationContextFromHeaders(\n completeHeadersDict['sentry-trace'],\n completeHeadersDict['baggage'],\n );\n scope.setPropagationContext(incomingPropagationContext);\n scope.setSDKProcessingMetadata({\n normalizedRequest: {\n method,\n headers: completeHeadersDict,\n } satisfies RequestEventData,\n });\n }\n\n const response: Response = await handleCallbackErrors(\n () => originalFunction.apply(thisArg, args),\n error => {\n // Next.js throws errors when calling `redirect()`. We don't wanna report these.\n if (isRedirectNavigationError(error)) {\n // Don't do anything\n } else if (isNotFoundNavigationError(error)) {\n if (activeSpan) {\n setHttpStatus(activeSpan, 404);\n }\n if (rootSpan) {\n setHttpStatus(rootSpan, 404);\n }\n } else {\n captureException(error, {\n mechanism: {\n handled: false,\n type: 'auto.function.nextjs.route_handler',\n },\n });\n }\n },\n () => {\n waitUntil(flushSafelyWithTimeout());\n },\n );\n\n try {\n if (response.status) {\n if (activeSpan) {\n setHttpStatus(activeSpan, response.status);\n }\n if (rootSpan) {\n setHttpStatus(rootSpan, response.status);\n }\n }\n } catch {\n // best effort - response may be undefined?\n }\n\n return response;\n });\n },\n );\n },\n });\n}\n"],"names":[],"mappings":"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"} |