@sentry/node 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/cjs/cron/common.js +56 -0
  2. package/cjs/cron/common.js.map +1 -0
  3. package/cjs/cron/cron.js +112 -0
  4. package/cjs/cron/cron.js.map +1 -0
  5. package/cjs/cron/index.js +15 -0
  6. package/cjs/cron/index.js.map +1 -0
  7. package/cjs/cron/node-cron.js +72 -0
  8. package/cjs/cron/node-cron.js.map +1 -0
  9. package/cjs/cron/node-schedule.js +69 -0
  10. package/cjs/cron/node-schedule.js.map +1 -0
  11. package/cjs/debug-build.js +11 -0
  12. package/cjs/debug-build.js.map +1 -0
  13. package/cjs/index.js +85 -4018
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/integrations/anr/index.js +211 -0
  16. package/cjs/integrations/anr/index.js.map +1 -0
  17. package/cjs/integrations/console.js +40 -0
  18. package/cjs/integrations/console.js.map +1 -0
  19. package/cjs/integrations/context.js +435 -0
  20. package/cjs/integrations/context.js.map +1 -0
  21. package/cjs/integrations/contextlines.js +137 -0
  22. package/cjs/integrations/contextlines.js.map +1 -0
  23. package/cjs/integrations/http.js +161 -0
  24. package/cjs/integrations/http.js.map +1 -0
  25. package/cjs/integrations/local-variables/common.js +87 -0
  26. package/cjs/integrations/local-variables/common.js.map +1 -0
  27. package/cjs/integrations/local-variables/index.js +12 -0
  28. package/cjs/integrations/local-variables/index.js.map +1 -0
  29. package/cjs/integrations/local-variables/local-variables-async.js +149 -0
  30. package/cjs/integrations/local-variables/local-variables-async.js.map +1 -0
  31. package/cjs/integrations/local-variables/local-variables-sync.js +376 -0
  32. package/cjs/integrations/local-variables/local-variables-sync.js.map +1 -0
  33. package/cjs/integrations/modules.js +99 -0
  34. package/cjs/integrations/modules.js.map +1 -0
  35. package/cjs/integrations/node-fetch.js +81 -0
  36. package/cjs/integrations/node-fetch.js.map +1 -0
  37. package/cjs/integrations/onuncaughtexception.js +135 -0
  38. package/cjs/integrations/onuncaughtexception.js.map +1 -0
  39. package/cjs/integrations/onunhandledrejection.js +90 -0
  40. package/cjs/integrations/onunhandledrejection.js.map +1 -0
  41. package/cjs/integrations/spotlight.js +109 -0
  42. package/cjs/integrations/spotlight.js.map +1 -0
  43. package/cjs/integrations/tracing/connect.js +41 -0
  44. package/cjs/integrations/tracing/connect.js.map +1 -0
  45. package/cjs/integrations/tracing/express.js +127 -0
  46. package/cjs/integrations/tracing/express.js.map +1 -0
  47. package/cjs/integrations/tracing/fastify.js +84 -0
  48. package/cjs/integrations/tracing/fastify.js.map +1 -0
  49. package/cjs/integrations/tracing/graphql.js +32 -0
  50. package/cjs/integrations/tracing/graphql.js.map +1 -0
  51. package/cjs/integrations/tracing/hapi/index.js +106 -0
  52. package/cjs/integrations/tracing/hapi/index.js.map +1 -0
  53. package/cjs/integrations/tracing/index.js +43 -0
  54. package/cjs/integrations/tracing/index.js.map +1 -0
  55. package/cjs/integrations/tracing/koa.js +60 -0
  56. package/cjs/integrations/tracing/koa.js.map +1 -0
  57. package/cjs/integrations/tracing/mongo.js +31 -0
  58. package/cjs/integrations/tracing/mongo.js.map +1 -0
  59. package/cjs/integrations/tracing/mongoose.js +31 -0
  60. package/cjs/integrations/tracing/mongoose.js.map +1 -0
  61. package/cjs/integrations/tracing/mysql.js +24 -0
  62. package/cjs/integrations/tracing/mysql.js.map +1 -0
  63. package/cjs/integrations/tracing/mysql2.js +31 -0
  64. package/cjs/integrations/tracing/mysql2.js.map +1 -0
  65. package/cjs/integrations/tracing/nest.js +69 -0
  66. package/cjs/integrations/tracing/nest.js.map +1 -0
  67. package/cjs/integrations/tracing/postgres.js +32 -0
  68. package/cjs/integrations/tracing/postgres.js.map +1 -0
  69. package/cjs/integrations/tracing/prisma.js +48 -0
  70. package/cjs/integrations/tracing/prisma.js.map +1 -0
  71. package/cjs/integrations/tracing/redis.js +29 -0
  72. package/cjs/integrations/tracing/redis.js.map +1 -0
  73. package/cjs/nodeVersion.js +10 -0
  74. package/cjs/nodeVersion.js.map +1 -0
  75. package/cjs/otel/contextManager.js +16 -0
  76. package/cjs/otel/contextManager.js.map +1 -0
  77. package/cjs/proxy/base.js +127 -0
  78. package/cjs/proxy/base.js.map +1 -0
  79. package/cjs/proxy/index.js +178 -0
  80. package/cjs/proxy/index.js.map +1 -0
  81. package/cjs/proxy/parse-proxy-response.js +104 -0
  82. package/cjs/proxy/parse-proxy-response.js.map +1 -0
  83. package/cjs/sdk/api.js +45 -0
  84. package/cjs/sdk/api.js.map +1 -0
  85. package/cjs/sdk/client.js +63 -0
  86. package/cjs/sdk/client.js.map +1 -0
  87. package/cjs/sdk/init.js +318 -0
  88. package/cjs/sdk/init.js.map +1 -0
  89. package/cjs/sdk/initOtel.js +58 -0
  90. package/cjs/sdk/initOtel.js.map +1 -0
  91. package/cjs/sdk/scope.js +18 -0
  92. package/cjs/sdk/scope.js.map +1 -0
  93. package/cjs/transports/http.js +163 -0
  94. package/cjs/transports/http.js.map +1 -0
  95. package/cjs/utils/addOriginToSpan.js +11 -0
  96. package/cjs/utils/addOriginToSpan.js.map +1 -0
  97. package/cjs/utils/errorhandling.js +44 -0
  98. package/cjs/utils/errorhandling.js.map +1 -0
  99. package/cjs/utils/getRequestUrl.js +18 -0
  100. package/cjs/utils/getRequestUrl.js.map +1 -0
  101. package/cjs/utils/module.js +62 -0
  102. package/cjs/utils/module.js.map +1 -0
  103. package/esm/cron/common.js +54 -0
  104. package/esm/cron/common.js.map +1 -0
  105. package/esm/cron/cron.js +110 -0
  106. package/esm/cron/cron.js.map +1 -0
  107. package/esm/cron/index.js +13 -0
  108. package/esm/cron/index.js.map +1 -0
  109. package/esm/cron/node-cron.js +67 -0
  110. package/esm/cron/node-cron.js.map +1 -0
  111. package/esm/cron/node-schedule.js +64 -0
  112. package/esm/cron/node-schedule.js.map +1 -0
  113. package/esm/debug-build.js +9 -0
  114. package/esm/debug-build.js.map +1 -0
  115. package/esm/index.js +35 -3973
  116. package/esm/index.js.map +1 -1
  117. package/esm/integrations/anr/index.js +204 -0
  118. package/esm/integrations/anr/index.js.map +1 -0
  119. package/esm/integrations/anr/worker-script.js +2 -2
  120. package/esm/integrations/console.js +38 -0
  121. package/esm/integrations/console.js.map +1 -0
  122. package/esm/integrations/context.js +427 -0
  123. package/esm/integrations/context.js.map +1 -0
  124. package/esm/integrations/contextlines.js +131 -0
  125. package/esm/integrations/contextlines.js.map +1 -0
  126. package/esm/integrations/http.js +156 -0
  127. package/esm/integrations/http.js.map +1 -0
  128. package/esm/integrations/local-variables/common.js +81 -0
  129. package/esm/integrations/local-variables/common.js.map +1 -0
  130. package/esm/integrations/local-variables/index.js +10 -0
  131. package/esm/integrations/local-variables/index.js.map +1 -0
  132. package/esm/integrations/local-variables/local-variables-async.js +143 -0
  133. package/esm/integrations/local-variables/local-variables-async.js.map +1 -0
  134. package/esm/integrations/local-variables/local-variables-sync.js +370 -0
  135. package/esm/integrations/local-variables/local-variables-sync.js.map +1 -0
  136. package/esm/integrations/local-variables/worker-script.js +1 -1
  137. package/esm/integrations/modules.js +97 -0
  138. package/esm/integrations/modules.js.map +1 -0
  139. package/esm/integrations/node-fetch.js +79 -0
  140. package/esm/integrations/node-fetch.js.map +1 -0
  141. package/esm/integrations/onuncaughtexception.js +132 -0
  142. package/esm/integrations/onuncaughtexception.js.map +1 -0
  143. package/esm/integrations/onunhandledrejection.js +87 -0
  144. package/esm/integrations/onunhandledrejection.js.map +1 -0
  145. package/esm/integrations/spotlight.js +106 -0
  146. package/esm/integrations/spotlight.js.map +1 -0
  147. package/esm/integrations/tracing/connect.js +38 -0
  148. package/esm/integrations/tracing/connect.js.map +1 -0
  149. package/esm/integrations/tracing/express.js +120 -0
  150. package/esm/integrations/tracing/express.js.map +1 -0
  151. package/esm/integrations/tracing/fastify.js +78 -0
  152. package/esm/integrations/tracing/fastify.js.map +1 -0
  153. package/esm/integrations/tracing/graphql.js +30 -0
  154. package/esm/integrations/tracing/graphql.js.map +1 -0
  155. package/esm/integrations/tracing/hapi/index.js +99 -0
  156. package/esm/integrations/tracing/hapi/index.js.map +1 -0
  157. package/esm/integrations/tracing/index.js +41 -0
  158. package/esm/integrations/tracing/index.js.map +1 -0
  159. package/esm/integrations/tracing/koa.js +57 -0
  160. package/esm/integrations/tracing/koa.js.map +1 -0
  161. package/esm/integrations/tracing/mongo.js +29 -0
  162. package/esm/integrations/tracing/mongo.js.map +1 -0
  163. package/esm/integrations/tracing/mongoose.js +29 -0
  164. package/esm/integrations/tracing/mongoose.js.map +1 -0
  165. package/esm/integrations/tracing/mysql.js +22 -0
  166. package/esm/integrations/tracing/mysql.js.map +1 -0
  167. package/esm/integrations/tracing/mysql2.js +29 -0
  168. package/esm/integrations/tracing/mysql2.js.map +1 -0
  169. package/esm/integrations/tracing/nest.js +63 -0
  170. package/esm/integrations/tracing/nest.js.map +1 -0
  171. package/esm/integrations/tracing/postgres.js +30 -0
  172. package/esm/integrations/tracing/postgres.js.map +1 -0
  173. package/esm/integrations/tracing/prisma.js +43 -0
  174. package/esm/integrations/tracing/prisma.js.map +1 -0
  175. package/esm/integrations/tracing/redis.js +27 -0
  176. package/esm/integrations/tracing/redis.js.map +1 -0
  177. package/esm/nodeVersion.js +7 -0
  178. package/esm/nodeVersion.js.map +1 -0
  179. package/esm/otel/contextManager.js +14 -0
  180. package/esm/otel/contextManager.js.map +1 -0
  181. package/esm/proxy/base.js +122 -0
  182. package/esm/proxy/base.js.map +1 -0
  183. package/esm/proxy/index.js +172 -0
  184. package/esm/proxy/index.js.map +1 -0
  185. package/esm/proxy/parse-proxy-response.js +102 -0
  186. package/esm/proxy/parse-proxy-response.js.map +1 -0
  187. package/esm/sdk/api.js +42 -0
  188. package/esm/sdk/api.js.map +1 -0
  189. package/esm/sdk/client.js +58 -0
  190. package/esm/sdk/client.js.map +1 -0
  191. package/esm/sdk/init.js +312 -0
  192. package/esm/sdk/init.js.map +1 -0
  193. package/esm/sdk/initOtel.js +55 -0
  194. package/esm/sdk/initOtel.js.map +1 -0
  195. package/esm/sdk/scope.js +16 -0
  196. package/esm/sdk/scope.js.map +1 -0
  197. package/esm/transports/http.js +158 -0
  198. package/esm/transports/http.js.map +1 -0
  199. package/esm/utils/addOriginToSpan.js +9 -0
  200. package/esm/utils/addOriginToSpan.js.map +1 -0
  201. package/esm/utils/errorhandling.js +42 -0
  202. package/esm/utils/errorhandling.js.map +1 -0
  203. package/esm/utils/getRequestUrl.js +16 -0
  204. package/esm/utils/getRequestUrl.js.map +1 -0
  205. package/esm/utils/module.js +60 -0
  206. package/esm/utils/module.js.map +1 -0
  207. package/package.json +16 -16
  208. package/types/index.d.ts +2 -2
  209. package/types/index.d.ts.map +1 -1
  210. package/types/integrations/tracing/hapi/index.d.ts.map +1 -1
  211. package/types/integrations/tracing/koa.d.ts.map +1 -1
  212. package/types/sdk/init.d.ts +4 -0
  213. package/types/sdk/init.d.ts.map +1 -1
  214. package/types-ts3.8/index.d.ts +2 -2
  215. package/types-ts3.8/sdk/init.d.ts +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sources":["../../../../src/integrations/tracing/express.ts"],"sourcesContent":["import type * as http from 'http';\nimport { ExpressInstrumentation } from '@opentelemetry/instrumentation-express';\nimport { defineIntegration, getDefaultIsolationScope, isEnabled } from '@sentry/core';\nimport { captureException, getClient, getIsolationScope } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\n\nimport { isWrapped } from '@opentelemetry/core';\nimport { consoleSandbox, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { NodeClient } from '../../sdk/client';\nimport { addOriginToSpan } from '../../utils/addOriginToSpan';\n\nconst _expressIntegration = (() => {\n return {\n name: 'Express',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new ExpressInstrumentation({\n requestHook(span) {\n addOriginToSpan(span, 'auto.http.otel.express');\n },\n spanNameHook(info, defaultName) {\n if (getIsolationScope() === getDefaultIsolationScope()) {\n DEBUG_BUILD &&\n logger.warn('Isolation scope is still default isolation scope - skipping setting transactionName');\n return defaultName;\n }\n if (info.layerType === 'request_handler') {\n // type cast b/c Otel unfortunately types info.request as any :(\n const req = info.request as { method?: string };\n const method = req.method ? req.method.toUpperCase() : 'GET';\n getIsolationScope().setTransactionName(`${method} ${info.route}`);\n }\n return defaultName;\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Express integration\n *\n * Capture tracing data for express.\n * In order to capture exceptions, you have to call `setupExpressErrorHandler(app)` before any other middleware and after all controllers.\n */\nexport const expressIntegration = defineIntegration(_expressIntegration);\n\ninterface MiddlewareError extends Error {\n status?: number | string;\n statusCode?: number | string;\n status_code?: number | string;\n output?: {\n statusCode?: number | string;\n };\n}\n\ntype ExpressMiddleware = (\n error: MiddlewareError,\n req: http.IncomingMessage,\n res: http.ServerResponse,\n next: (error: MiddlewareError) => void,\n) => void;\n\n/**\n * An Express-compatible error handler.\n */\nexport function expressErrorHandler(options?: {\n /**\n * Callback method deciding whether error should be captured and sent to Sentry\n * @param error Captured middleware error\n */\n shouldHandleError?(this: void, error: MiddlewareError): boolean;\n}): ExpressMiddleware {\n return function sentryErrorMiddleware(\n error: MiddlewareError,\n _req: http.IncomingMessage,\n res: http.ServerResponse,\n next: (error: MiddlewareError) => void,\n ): void {\n const shouldHandleError = options?.shouldHandleError || defaultShouldHandleError;\n\n if (shouldHandleError(error)) {\n const client = getClient<NodeClient>();\n if (client && client.getOptions().autoSessionTracking) {\n // Check if the `SessionFlusher` is instantiated on the client to go into this branch that marks the\n // `requestSession.status` as `Crashed`, and this check is necessary because the `SessionFlusher` is only\n // instantiated when the the`requestHandler` middleware is initialised, which indicates that we should be\n // running in SessionAggregates mode\n const isSessionAggregatesMode = client['_sessionFlusher'] !== undefined;\n if (isSessionAggregatesMode) {\n const requestSession = getIsolationScope().getRequestSession();\n // If an error bubbles to the `errorHandler`, then this is an unhandled error, and should be reported as a\n // Crashed session. The `_requestSession.status` is checked to ensure that this error is happening within\n // the bounds of a request, and if so the status is updated\n if (requestSession && requestSession.status !== undefined) {\n requestSession.status = 'crashed';\n }\n }\n }\n\n const eventId = captureException(error, { mechanism: { type: 'middleware', handled: false } });\n (res as { sentry?: string }).sentry = eventId;\n next(error);\n\n return;\n }\n\n next(error);\n };\n}\n\n/**\n * Setup an error handler for Express.\n * The error handler must be before any other middleware and after all controllers.\n */\nexport function setupExpressErrorHandler(app: { use: (middleware: ExpressMiddleware) => unknown }): void {\n app.use(expressErrorHandler());\n\n if (!isWrapped(app.use) && isEnabled()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Express is not instrumented. This is likely because you required/imported express before calling `Sentry.init()`.',\n );\n });\n }\n}\n\nfunction getStatusCodeFromResponse(error: MiddlewareError): number {\n const statusCode = error.status || error.statusCode || error.status_code || (error.output && error.output.statusCode);\n return statusCode ? parseInt(statusCode as string, 10) : 500;\n}\n\n/** Returns true if response code is internal server error */\nfunction defaultShouldHandleError(error: MiddlewareError): boolean {\n const status = getStatusCodeFromResponse(error);\n return status >= 500;\n}\n"],"names":[],"mappings":";;;;;;;;;AAaA,CAAM,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAuB,CAAM,EAAA,CAAA,EAAA;EACjC,CAAO,CAAA,CAAA,CAAA,CAAA,EAAA;IACL,CAAA,CAAA,CAAA,CAAI,EAAE,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACf,SAAS,CAAG,EAAA;MACV,CAA+B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAC7B,CAAA,CAAA,EAAI,sBAAsB,CAAC;UACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE;YAChB,eAAe,CAAC,CAAA,CAAA,CAAA,CAAI,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAC;UAChD,CAAA;UACD,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,EAAE,WAAW,EAAE;YAC9B,IAAI,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,EAAE,EAAE;cACtD,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;gBACV,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqF,CAAC;cACpG,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,WAAW;YACpB;YACA,IAAI,CAAI,CAAA,CAAA,CAAA,CAAC,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAI,iBAAiB,EAAE;cACtD,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;cACc,MAAM,CAAA,CAAA,EAAA,EAAM,CAAI,CAAA,CAAA,CAAA,CAAC,QAAQ;cACzB,CAAM,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,EAAA,CAAA,CAAA,CAAG,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,EAAA,EAAE,CAAG,CAAA,CAAA,CAAC,MAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,EAAA,EAAI,KAAK;cAC5D,iBAAiB,CAAE,CAAA,CAAC,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA;YACA;YACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,WAAA;UACA,CAAA;QACA,CAAA,CAAA;MACA,CAAA;IACA,CAAA;EACA,CAAA;AACA,CAAA,EAAA;;AAEA,CAAA,CAAA;CACA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACA;CACA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,mBAAA,CAAA;;AAkBA,CAAA,CAAA;CACA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAMA,EAAA;EACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA;EACA,EAAA;IACA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,cAAA,CAAA,CAAA,OAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,wBAAA;;IAEA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;MACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;MACA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;QACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;QACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA;QACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;QACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;QACA,CAAA,CAAA,CAAA,CAAA,EAAA,wBAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACA,CAAA,EAAA,CAAA,uBAAA,EAAA;UACA,CAAA,CAAA,CAAA,CAAA,EAAA,eAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;UACA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA;UACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UACA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UACA,CAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,CAAA;IACA,CAAA,CAAA;EACA;AACA;;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;EACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA;AACA;;AAEA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;EACA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,yBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA;AACA;;"}
@@ -0,0 +1,78 @@
1
+ import { _optionalChain } from '@sentry/utils';
2
+ import { isWrapped } from '@opentelemetry/core';
3
+ import { FastifyInstrumentation } from '@opentelemetry/instrumentation-fastify';
4
+ import { defineIntegration, captureException, getIsolationScope, isEnabled } from '@sentry/core';
5
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
6
+ import { consoleSandbox } from '@sentry/utils';
7
+ import { addOriginToSpan } from '../../utils/addOriginToSpan.js';
8
+
9
+ const _fastifyIntegration = (() => {
10
+ return {
11
+ name: 'Fastify',
12
+ setupOnce() {
13
+ addOpenTelemetryInstrumentation(
14
+ new FastifyInstrumentation({
15
+ requestHook(span) {
16
+ addOriginToSpan(span, 'auto.http.otel.fastify');
17
+ },
18
+ }),
19
+ );
20
+ },
21
+ };
22
+ }) ;
23
+
24
+ /**
25
+ * Express integration
26
+ *
27
+ * Capture tracing data for fastify.
28
+ */
29
+ const fastifyIntegration = defineIntegration(_fastifyIntegration);
30
+
31
+ // We inline the types we care about here
32
+
33
+ /**
34
+ * Setup an error handler for Fastify.
35
+ */
36
+ function setupFastifyErrorHandler(fastify) {
37
+ const plugin = Object.assign(
38
+ function (fastify, _options, done) {
39
+ fastify.addHook('onError', async (_request, _reply, error) => {
40
+ captureException(error);
41
+ });
42
+
43
+ // registering `onRequest` hook here instead of using Otel `onRequest` callback b/c `onRequest` hook
44
+ // is ironically called in the fastify `preHandler` hook which is called later in the lifecycle:
45
+ // https://fastify.dev/docs/latest/Reference/Lifecycle/
46
+ fastify.addHook('onRequest', async (request, _reply) => {
47
+ const reqWithRouteInfo = request ;
48
+
49
+ // Taken from Otel Fastify instrumentation:
50
+ // https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts#L94-L96
51
+ const routeName = _optionalChain([reqWithRouteInfo, 'access', _ => _.routeOptions, 'optionalAccess', _2 => _2.url]) || reqWithRouteInfo.routerPath;
52
+ const method = _optionalChain([reqWithRouteInfo, 'access', _3 => _3.routeOptions, 'optionalAccess', _4 => _4.method]) || 'GET';
53
+
54
+ getIsolationScope().setTransactionName(`${method} ${routeName}`);
55
+ });
56
+
57
+ done();
58
+ },
59
+ {
60
+ [Symbol.for('skip-override')]: true,
61
+ [Symbol.for('fastify.display-name')]: 'sentry-fastify-error-handler',
62
+ },
63
+ );
64
+
65
+ fastify.register(plugin);
66
+
67
+ if (!isWrapped(fastify.addHook) && isEnabled()) {
68
+ consoleSandbox(() => {
69
+ // eslint-disable-next-line no-console
70
+ console.warn(
71
+ '[Sentry] Fastify is not instrumented. This is likely because you required/imported fastify before calling `Sentry.init()`.',
72
+ );
73
+ });
74
+ }
75
+ }
76
+
77
+ export { fastifyIntegration, setupFastifyErrorHandler };
78
+ //# sourceMappingURL=fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.js","sources":["../../../../src/integrations/tracing/fastify.ts"],"sourcesContent":["import { isWrapped } from '@opentelemetry/core';\nimport { FastifyInstrumentation } from '@opentelemetry/instrumentation-fastify';\nimport { captureException, defineIntegration, getIsolationScope, isEnabled } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\nimport { consoleSandbox } from '@sentry/utils';\n\nimport { addOriginToSpan } from '../../utils/addOriginToSpan';\n\nconst _fastifyIntegration = (() => {\n return {\n name: 'Fastify',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new FastifyInstrumentation({\n requestHook(span) {\n addOriginToSpan(span, 'auto.http.otel.fastify');\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Express integration\n *\n * Capture tracing data for fastify.\n */\nexport const fastifyIntegration = defineIntegration(_fastifyIntegration);\n\n// We inline the types we care about here\ninterface Fastify {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register: (plugin: any) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n addHook: (hook: string, handler: (request: any, reply: any, error: Error) => void) => void;\n}\n\n/**\n * Minimal request type containing properties around route information.\n * Works for Fastify 3, 4 and presumably 5.\n */\ninterface FastifyRequestRouteInfo {\n // since fastify@4.10.0\n routeOptions?: {\n url?: string;\n method?: string;\n };\n routerPath?: string;\n}\n\n/**\n * Setup an error handler for Fastify.\n */\nexport function setupFastifyErrorHandler(fastify: Fastify): void {\n const plugin = Object.assign(\n function (fastify: Fastify, _options: unknown, done: () => void): void {\n fastify.addHook('onError', async (_request, _reply, error) => {\n captureException(error);\n });\n\n // registering `onRequest` hook here instead of using Otel `onRequest` callback b/c `onRequest` hook\n // is ironically called in the fastify `preHandler` hook which is called later in the lifecycle:\n // https://fastify.dev/docs/latest/Reference/Lifecycle/\n fastify.addHook('onRequest', async (request, _reply) => {\n const reqWithRouteInfo = request as FastifyRequestRouteInfo;\n\n // Taken from Otel Fastify instrumentation:\n // https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts#L94-L96\n const routeName = reqWithRouteInfo.routeOptions?.url || reqWithRouteInfo.routerPath;\n const method = reqWithRouteInfo.routeOptions?.method || 'GET';\n\n getIsolationScope().setTransactionName(`${method} ${routeName}`);\n });\n\n done();\n },\n {\n [Symbol.for('skip-override')]: true,\n [Symbol.for('fastify.display-name')]: 'sentry-fastify-error-handler',\n },\n );\n\n fastify.register(plugin);\n\n if (!isWrapped(fastify.addHook) && isEnabled()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Fastify is not instrumented. This is likely because you required/imported fastify before calling `Sentry.init()`.',\n );\n });\n }\n}\n"],"names":[],"mappings":"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CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC;MAC/B,CAAO,CAAC;;MAER,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;MACA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA;MACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,CAAA;IACA,CAAA,CAAA;EACA;AACA;;"}
@@ -0,0 +1,30 @@
1
+ import { GraphQLInstrumentation } from '@opentelemetry/instrumentation-graphql';
2
+ import { defineIntegration } from '@sentry/core';
3
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
4
+ import { addOriginToSpan } from '../../utils/addOriginToSpan.js';
5
+
6
+ const _graphqlIntegration = (() => {
7
+ return {
8
+ name: 'Graphql',
9
+ setupOnce() {
10
+ addOpenTelemetryInstrumentation(
11
+ new GraphQLInstrumentation({
12
+ ignoreTrivialResolveSpans: true,
13
+ responseHook(span) {
14
+ addOriginToSpan(span, 'auto.graphql.otel.graphql');
15
+ },
16
+ }),
17
+ );
18
+ },
19
+ };
20
+ }) ;
21
+
22
+ /**
23
+ * GraphQL integration
24
+ *
25
+ * Capture tracing data for GraphQL.
26
+ */
27
+ const graphqlIntegration = defineIntegration(_graphqlIntegration);
28
+
29
+ export { graphqlIntegration };
30
+ //# sourceMappingURL=graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.js","sources":["../../../../src/integrations/tracing/graphql.ts"],"sourcesContent":["import { GraphQLInstrumentation } from '@opentelemetry/instrumentation-graphql';\nimport { defineIntegration } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\n\nimport { addOriginToSpan } from '../../utils/addOriginToSpan';\n\nconst _graphqlIntegration = (() => {\n return {\n name: 'Graphql',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new GraphQLInstrumentation({\n ignoreTrivialResolveSpans: true,\n responseHook(span) {\n addOriginToSpan(span, 'auto.graphql.otel.graphql');\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * GraphQL integration\n *\n * Capture tracing data for GraphQL.\n */\nexport const graphqlIntegration = defineIntegration(_graphqlIntegration);\n"],"names":[],"mappings":";;;;;AAOA,MAAM,mBAAoB,IAAG,MAAM;AACnC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,SAAS;AACnB,IAAI,SAAS,GAAG;AAChB,MAAM,+BAA+B;AACrC,QAAQ,IAAI,sBAAsB,CAAC;AACnC,UAAU,yBAAyB,EAAE,IAAI;AACzC,UAAU,YAAY,CAAC,IAAI,EAAE;AAC7B,YAAY,eAAe,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAA;AAC9D,WAAW;AACX,SAAS,CAAC;AACV,OAAO,CAAA;AACP,KAAK;AACL,GAAG,CAAA;AACH,CAAC,CAAE,EAAA;AACH;AACA;AACA;AACA;AACA;AACA;MACa,kBAAmB,GAAE,iBAAiB,CAAC,mBAAmB;;;;"}
@@ -0,0 +1,99 @@
1
+ import { _optionalChain } from '@sentry/utils';
2
+ import { isWrapped } from '@opentelemetry/core';
3
+ import { HapiInstrumentation } from '@opentelemetry/instrumentation-hapi';
4
+ import { defineIntegration, isEnabled, SDK_VERSION, getIsolationScope, getDefaultIsolationScope, getActiveSpan, getRootSpan, SPAN_STATUS_ERROR, captureException } from '@sentry/core';
5
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
6
+ import { consoleSandbox, logger } from '@sentry/utils';
7
+ import { DEBUG_BUILD } from '../../../debug-build.js';
8
+
9
+ const _hapiIntegration = (() => {
10
+ return {
11
+ name: 'Hapi',
12
+ setupOnce() {
13
+ addOpenTelemetryInstrumentation(new HapiInstrumentation());
14
+ },
15
+ };
16
+ }) ;
17
+
18
+ /**
19
+ * Hapi integration
20
+ *
21
+ * Capture tracing data for Hapi.
22
+ * If you also want to capture errors, you need to call `setupHapiErrorHandler(server)` after you set up your server.
23
+ */
24
+ const hapiIntegration = defineIntegration(_hapiIntegration);
25
+
26
+ function isBoomObject(response) {
27
+ return response && (response ).isBoom !== undefined;
28
+ }
29
+
30
+ function isErrorEvent(event) {
31
+ return event && (event ).error !== undefined;
32
+ }
33
+
34
+ function sendErrorToSentry(errorData) {
35
+ captureException(errorData, {
36
+ mechanism: {
37
+ type: 'hapi',
38
+ handled: false,
39
+ data: {
40
+ function: 'hapiErrorPlugin',
41
+ },
42
+ },
43
+ });
44
+ }
45
+
46
+ const hapiErrorPlugin = {
47
+ name: 'SentryHapiErrorPlugin',
48
+ version: SDK_VERSION,
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ register: async function (serverArg) {
51
+ const server = serverArg ;
52
+
53
+ server.events.on('request', (request, event) => {
54
+ if (getIsolationScope() !== getDefaultIsolationScope()) {
55
+ const route = request.route;
56
+ if (route && route.path) {
57
+ getIsolationScope().setTransactionName(`${_optionalChain([route, 'access', _ => _.method, 'optionalAccess', _2 => _2.toUpperCase, 'call', _3 => _3()]) || 'GET'} ${route.path}`);
58
+ }
59
+ } else {
60
+ DEBUG_BUILD &&
61
+ logger.warn('Isolation scope is still the default isolation scope - skipping setting transactionName');
62
+ }
63
+
64
+ const activeSpan = getActiveSpan();
65
+ const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;
66
+
67
+ if (request.response && isBoomObject(request.response)) {
68
+ sendErrorToSentry(request.response);
69
+ } else if (isErrorEvent(event)) {
70
+ sendErrorToSentry(event.error);
71
+ }
72
+
73
+ if (rootSpan) {
74
+ rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });
75
+ rootSpan.end();
76
+ }
77
+ });
78
+ },
79
+ };
80
+
81
+ /**
82
+ * Add a Hapi plugin to capture errors to Sentry.
83
+ */
84
+ async function setupHapiErrorHandler(server) {
85
+ await server.register(hapiErrorPlugin);
86
+
87
+ // eslint-disable-next-line @typescript-eslint/unbound-method
88
+ if (!isWrapped(server.register) && isEnabled()) {
89
+ consoleSandbox(() => {
90
+ // eslint-disable-next-line no-console
91
+ console.warn(
92
+ '[Sentry] Hapi is not instrumented. This is likely because you required/imported hapi before calling `Sentry.init()`.',
93
+ );
94
+ });
95
+ }
96
+ }
97
+
98
+ export { hapiErrorPlugin, hapiIntegration, setupHapiErrorHandler };
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/hapi/index.ts"],"sourcesContent":["import { isWrapped } from '@opentelemetry/core';\nimport { HapiInstrumentation } from '@opentelemetry/instrumentation-hapi';\nimport {\n SDK_VERSION,\n SPAN_STATUS_ERROR,\n captureException,\n defineIntegration,\n getActiveSpan,\n getDefaultIsolationScope,\n getIsolationScope,\n getRootSpan,\n isEnabled,\n} from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\nimport { consoleSandbox, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport type { Boom, RequestEvent, ResponseObject, Server } from './types';\n\nconst _hapiIntegration = (() => {\n return {\n name: 'Hapi',\n setupOnce() {\n addOpenTelemetryInstrumentation(new HapiInstrumentation());\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Hapi integration\n *\n * Capture tracing data for Hapi.\n * If you also want to capture errors, you need to call `setupHapiErrorHandler(server)` after you set up your server.\n */\nexport const hapiIntegration = defineIntegration(_hapiIntegration);\n\nfunction isBoomObject(response: ResponseObject | Boom): response is Boom {\n return response && (response as Boom).isBoom !== undefined;\n}\n\nfunction isErrorEvent(event: RequestEvent): event is RequestEvent {\n return event && (event as RequestEvent).error !== undefined;\n}\n\nfunction sendErrorToSentry(errorData: object): void {\n captureException(errorData, {\n mechanism: {\n type: 'hapi',\n handled: false,\n data: {\n function: 'hapiErrorPlugin',\n },\n },\n });\n}\n\nexport const hapiErrorPlugin = {\n name: 'SentryHapiErrorPlugin',\n version: SDK_VERSION,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register: async function (serverArg: Record<any, any>) {\n const server = serverArg as unknown as Server;\n\n server.events.on('request', (request, event) => {\n if (getIsolationScope() !== getDefaultIsolationScope()) {\n const route = request.route;\n if (route && route.path) {\n getIsolationScope().setTransactionName(`${route.method?.toUpperCase() || 'GET'} ${route.path}`);\n }\n } else {\n DEBUG_BUILD &&\n logger.warn('Isolation scope is still the default isolation scope - skipping setting transactionName');\n }\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n if (request.response && isBoomObject(request.response)) {\n sendErrorToSentry(request.response);\n } else if (isErrorEvent(event)) {\n sendErrorToSentry(event.error);\n }\n\n if (rootSpan) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n rootSpan.end();\n }\n });\n },\n};\n\n/**\n * Add a Hapi plugin to capture errors to Sentry.\n */\nexport async function setupHapiErrorHandler(server: Server): Promise<void> {\n await server.register(hapiErrorPlugin);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (!isWrapped(server.register) && isEnabled()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Hapi is not instrumented. This is likely because you required/imported hapi before calling `Sentry.init()`.',\n );\n });\n }\n}\n"],"names":[],"mappings":"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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QACA;MACA,EAAA,CAAA,CAAA,CAAA,EAAA;QACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;UACA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA;;MAEA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;MACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;MAEA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA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"}
@@ -0,0 +1,41 @@
1
+ import { connectIntegration } from './connect.js';
2
+ import { expressIntegration } from './express.js';
3
+ import { fastifyIntegration } from './fastify.js';
4
+ import { graphqlIntegration } from './graphql.js';
5
+ import { hapiIntegration } from './hapi/index.js';
6
+ import { koaIntegration } from './koa.js';
7
+ import { mongoIntegration } from './mongo.js';
8
+ import { mongooseIntegration } from './mongoose.js';
9
+ import { mysqlIntegration } from './mysql.js';
10
+ import { mysql2Integration } from './mysql2.js';
11
+ import { nestIntegration } from './nest.js';
12
+ import { postgresIntegration } from './postgres.js';
13
+ import { redisIntegration } from './redis.js';
14
+
15
+ /**
16
+ * With OTEL, all performance integrations will be added, as OTEL only initializes them when the patched package is actually required.
17
+ */
18
+ function getAutoPerformanceIntegrations() {
19
+ return [
20
+ expressIntegration(),
21
+ fastifyIntegration(),
22
+ graphqlIntegration(),
23
+ mongoIntegration(),
24
+ mongooseIntegration(),
25
+ mysqlIntegration(),
26
+ mysql2Integration(),
27
+ redisIntegration(),
28
+ postgresIntegration(),
29
+ // For now, we do not include prisma by default because it has ESM issues
30
+ // See https://github.com/prisma/prisma/issues/23410
31
+ // TODO v8: Figure out a better solution for this, maybe only disable in ESM mode?
32
+ // prismaIntegration(),
33
+ nestIntegration(),
34
+ hapiIntegration(),
35
+ koaIntegration(),
36
+ connectIntegration(),
37
+ ];
38
+ }
39
+
40
+ export { getAutoPerformanceIntegrations };
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/integrations/tracing/index.ts"],"sourcesContent":["import type { Integration } from '@sentry/types';\n\nimport { connectIntegration } from './connect';\nimport { expressIntegration } from './express';\nimport { fastifyIntegration } from './fastify';\nimport { graphqlIntegration } from './graphql';\nimport { hapiIntegration } from './hapi';\nimport { koaIntegration } from './koa';\nimport { mongoIntegration } from './mongo';\nimport { mongooseIntegration } from './mongoose';\nimport { mysqlIntegration } from './mysql';\nimport { mysql2Integration } from './mysql2';\nimport { nestIntegration } from './nest';\nimport { postgresIntegration } from './postgres';\nimport { redisIntegration } from './redis';\n\n/**\n * With OTEL, all performance integrations will be added, as OTEL only initializes them when the patched package is actually required.\n */\nexport function getAutoPerformanceIntegrations(): Integration[] {\n return [\n expressIntegration(),\n fastifyIntegration(),\n graphqlIntegration(),\n mongoIntegration(),\n mongooseIntegration(),\n mysqlIntegration(),\n mysql2Integration(),\n redisIntegration(),\n postgresIntegration(),\n // For now, we do not include prisma by default because it has ESM issues\n // See https://github.com/prisma/prisma/issues/23410\n // TODO v8: Figure out a better solution for this, maybe only disable in ESM mode?\n // prismaIntegration(),\n nestIntegration(),\n hapiIntegration(),\n koaIntegration(),\n connectIntegration(),\n ];\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAgBA;AACA;AACA;AACO,SAAS,8BAA8B,GAAkB;AAChE,EAAE,OAAO;AACT,IAAI,kBAAkB,EAAE;AACxB,IAAI,kBAAkB,EAAE;AACxB,IAAI,kBAAkB,EAAE;AACxB,IAAI,gBAAgB,EAAE;AACtB,IAAI,mBAAmB,EAAE;AACzB,IAAI,gBAAgB,EAAE;AACtB,IAAI,iBAAiB,EAAE;AACvB,IAAI,gBAAgB,EAAE;AACtB,IAAI,mBAAmB,EAAE;AACzB;AACA;AACA;AACA;AACA,IAAI,eAAe,EAAE;AACrB,IAAI,eAAe,EAAE;AACrB,IAAI,cAAc,EAAE;AACpB,IAAI,kBAAkB,EAAE;AACxB,GAAG,CAAA;AACH;;;;"}
@@ -0,0 +1,57 @@
1
+ import { isWrapped } from '@opentelemetry/core';
2
+ import { KoaInstrumentation } from '@opentelemetry/instrumentation-koa';
3
+ import { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';
4
+ import { defineIntegration, getIsolationScope, getDefaultIsolationScope, spanToJSON, captureException, isEnabled } from '@sentry/core';
5
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
6
+ import { logger, consoleSandbox } from '@sentry/utils';
7
+ import { DEBUG_BUILD } from '../../debug-build.js';
8
+
9
+ const _koaIntegration = (() => {
10
+ return {
11
+ name: 'Koa',
12
+ setupOnce() {
13
+ addOpenTelemetryInstrumentation(
14
+ new KoaInstrumentation({
15
+ requestHook(span, info) {
16
+ if (getIsolationScope() === getDefaultIsolationScope()) {
17
+ DEBUG_BUILD &&
18
+ logger.warn('Isolation scope is default isolation scope - skipping setting transactionName');
19
+ return;
20
+ }
21
+ const attributes = spanToJSON(span).data;
22
+ const route = attributes && attributes[SEMATTRS_HTTP_ROUTE];
23
+ const method = info.context.request.method.toUpperCase() || 'GET';
24
+ if (route) {
25
+ getIsolationScope().setTransactionName(`${method} ${route}`);
26
+ }
27
+ },
28
+ }),
29
+ );
30
+ },
31
+ };
32
+ }) ;
33
+
34
+ const koaIntegration = defineIntegration(_koaIntegration);
35
+
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ const setupKoaErrorHandler = (app) => {
38
+ app.use(async (ctx, next) => {
39
+ try {
40
+ await next();
41
+ } catch (error) {
42
+ captureException(error);
43
+ }
44
+ });
45
+
46
+ if (!isWrapped(app.use) && isEnabled()) {
47
+ consoleSandbox(() => {
48
+ // eslint-disable-next-line no-console
49
+ console.warn(
50
+ '[Sentry] Koa is not instrumented. This is likely because you required/imported koa before calling `Sentry.init()`.',
51
+ );
52
+ });
53
+ }
54
+ };
55
+
56
+ export { koaIntegration, setupKoaErrorHandler };
57
+ //# sourceMappingURL=koa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koa.js","sources":["../../../../src/integrations/tracing/koa.ts"],"sourcesContent":["import { isWrapped } from '@opentelemetry/core';\nimport { KoaInstrumentation } from '@opentelemetry/instrumentation-koa';\nimport { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport {\n captureException,\n defineIntegration,\n getDefaultIsolationScope,\n getIsolationScope,\n isEnabled,\n spanToJSON,\n} from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\nimport { consoleSandbox, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../../debug-build';\n\nconst _koaIntegration = (() => {\n return {\n name: 'Koa',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new KoaInstrumentation({\n requestHook(span, info) {\n if (getIsolationScope() === getDefaultIsolationScope()) {\n DEBUG_BUILD &&\n logger.warn('Isolation scope is default isolation scope - skipping setting transactionName');\n return;\n }\n const attributes = spanToJSON(span).data;\n const route = attributes && attributes[SEMATTRS_HTTP_ROUTE];\n const method = info.context.request.method.toUpperCase() || 'GET';\n if (route) {\n getIsolationScope().setTransactionName(`${method} ${route}`);\n }\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\nexport const koaIntegration = defineIntegration(_koaIntegration);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setupKoaErrorHandler = (app: { use: (arg0: (ctx: any, next: any) => Promise<void>) => void }): void => {\n app.use(async (ctx, next) => {\n try {\n await next();\n } catch (error) {\n captureException(error);\n }\n });\n\n if (!isWrapped(app.use) && isEnabled()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] Koa is not instrumented. This is likely because you required/imported koa before calling `Sentry.init()`.',\n );\n });\n }\n};\n"],"names":[],"mappings":";;;;;;;;AAgBA,MAAM,eAAgB,IAAG,MAAM;AAC/B,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,SAAS,GAAG;AAChB,MAAM,+BAA+B;AACrC,QAAQ,IAAI,kBAAkB,CAAC;AAC/B,UAAU,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE;AAClC,YAAY,IAAI,iBAAiB,OAAO,wBAAwB,EAAE,EAAE;AACpE,cAAc,WAAY;AAC1B,gBAAgB,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;AAC5G,cAAc,OAAM;AACpB,aAAY;AACZ,YAAY,MAAM,aAAa,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;AACpD,YAAY,MAAM,QAAQ,UAAA,IAAc,UAAU,CAAC,mBAAmB,CAAC,CAAA;AACvE,YAAY,MAAM,MAAA,GAAS,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAC,IAAK,KAAK,CAAA;AAC7E,YAAY,IAAI,KAAK,EAAE;AACvB,cAAc,iBAAiB,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAA,MAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AACA,aAAA;AACA,WAAA;AACA,SAAA,CAAA;AACA,OAAA,CAAA;AACA,KAAA;AACA,GAAA,CAAA;AACA,CAAA,CAAA,EAAA;AACA;AACA,MAAA,cAAA,GAAA,iBAAA,CAAA,eAAA,EAAA;AACA;AACA;AACA,MAAA,oBAAA,GAAA,CAAA,GAAA,KAAA;AACA,EAAA,GAAA,CAAA,GAAA,CAAA,OAAA,GAAA,EAAA,IAAA,KAAA;AACA,IAAA,IAAA;AACA,MAAA,MAAA,IAAA,EAAA,CAAA;AACA,KAAA,CAAA,OAAA,KAAA,EAAA;AACA,MAAA,gBAAA,CAAA,KAAA,CAAA,CAAA;AACA,KAAA;AACA,GAAA,CAAA,CAAA;AACA;AACA,EAAA,IAAA,CAAA,SAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IAAA,SAAA,EAAA,EAAA;AACA,IAAA,cAAA,CAAA,MAAA;AACA;AACA,MAAA,OAAA,CAAA,IAAA;AACA,QAAA,oHAAA;AACA,OAAA,CAAA;AACA,KAAA,CAAA,CAAA;AACA,GAAA;AACA;;;;"}
@@ -0,0 +1,29 @@
1
+ import { MongoDBInstrumentation } from '@opentelemetry/instrumentation-mongodb';
2
+ import { defineIntegration } from '@sentry/core';
3
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
4
+ import { addOriginToSpan } from '../../utils/addOriginToSpan.js';
5
+
6
+ const _mongoIntegration = (() => {
7
+ return {
8
+ name: 'Mongo',
9
+ setupOnce() {
10
+ addOpenTelemetryInstrumentation(
11
+ new MongoDBInstrumentation({
12
+ responseHook(span) {
13
+ addOriginToSpan(span, 'auto.db.otel.mongo');
14
+ },
15
+ }),
16
+ );
17
+ },
18
+ };
19
+ }) ;
20
+
21
+ /**
22
+ * MongoDB integration
23
+ *
24
+ * Capture tracing data for MongoDB.
25
+ */
26
+ const mongoIntegration = defineIntegration(_mongoIntegration);
27
+
28
+ export { mongoIntegration };
29
+ //# sourceMappingURL=mongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.js","sources":["../../../../src/integrations/tracing/mongo.ts"],"sourcesContent":["import { MongoDBInstrumentation } from '@opentelemetry/instrumentation-mongodb';\nimport { defineIntegration } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\n\nimport { addOriginToSpan } from '../../utils/addOriginToSpan';\n\nconst _mongoIntegration = (() => {\n return {\n name: 'Mongo',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new MongoDBInstrumentation({\n responseHook(span) {\n addOriginToSpan(span, 'auto.db.otel.mongo');\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * MongoDB integration\n *\n * Capture tracing data for MongoDB.\n */\nexport const mongoIntegration = defineIntegration(_mongoIntegration);\n"],"names":[],"mappings":";;;;;AAOA,MAAM,iBAAkB,IAAG,MAAM;AACjC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,SAAS,GAAG;AAChB,MAAM,+BAA+B;AACrC,QAAQ,IAAI,sBAAsB,CAAC;AACnC,UAAU,YAAY,CAAC,IAAI,EAAE;AAC7B,YAAY,eAAe,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;AACvD,WAAW;AACX,SAAS,CAAC;AACV,OAAO,CAAA;AACP,KAAK;AACL,GAAG,CAAA;AACH,CAAC,CAAE,EAAA;AACH;AACA;AACA;AACA;AACA;AACA;MACa,gBAAiB,GAAE,iBAAiB,CAAC,iBAAiB;;;;"}
@@ -0,0 +1,29 @@
1
+ import { MongooseInstrumentation } from '@opentelemetry/instrumentation-mongoose';
2
+ import { defineIntegration } from '@sentry/core';
3
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
4
+ import { addOriginToSpan } from '../../utils/addOriginToSpan.js';
5
+
6
+ const _mongooseIntegration = (() => {
7
+ return {
8
+ name: 'Mongoose',
9
+ setupOnce() {
10
+ addOpenTelemetryInstrumentation(
11
+ new MongooseInstrumentation({
12
+ responseHook(span) {
13
+ addOriginToSpan(span, 'auto.db.otel.mongoose');
14
+ },
15
+ }),
16
+ );
17
+ },
18
+ };
19
+ }) ;
20
+
21
+ /**
22
+ * Mongoose integration
23
+ *
24
+ * Capture tracing data for Mongoose.
25
+ */
26
+ const mongooseIntegration = defineIntegration(_mongooseIntegration);
27
+
28
+ export { mongooseIntegration };
29
+ //# sourceMappingURL=mongoose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose.js","sources":["../../../../src/integrations/tracing/mongoose.ts"],"sourcesContent":["import { MongooseInstrumentation } from '@opentelemetry/instrumentation-mongoose';\nimport { defineIntegration } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\n\nimport { addOriginToSpan } from '../../utils/addOriginToSpan';\n\nconst _mongooseIntegration = (() => {\n return {\n name: 'Mongoose',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new MongooseInstrumentation({\n responseHook(span) {\n addOriginToSpan(span, 'auto.db.otel.mongoose');\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Mongoose integration\n *\n * Capture tracing data for Mongoose.\n */\nexport const mongooseIntegration = defineIntegration(_mongooseIntegration);\n"],"names":[],"mappings":";;;;;AAOA,MAAM,oBAAqB,IAAG,MAAM;AACpC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,UAAU;AACpB,IAAI,SAAS,GAAG;AAChB,MAAM,+BAA+B;AACrC,QAAQ,IAAI,uBAAuB,CAAC;AACpC,UAAU,YAAY,CAAC,IAAI,EAAE;AAC7B,YAAY,eAAe,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;AAC1D,WAAW;AACX,SAAS,CAAC;AACV,OAAO,CAAA;AACP,KAAK;AACL,GAAG,CAAA;AACH,CAAC,CAAE,EAAA;AACH;AACA;AACA;AACA;AACA;AACA;MACa,mBAAoB,GAAE,iBAAiB,CAAC,oBAAoB;;;;"}
@@ -0,0 +1,22 @@
1
+ import { MySQLInstrumentation } from '@opentelemetry/instrumentation-mysql';
2
+ import { defineIntegration } from '@sentry/core';
3
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
4
+
5
+ const _mysqlIntegration = (() => {
6
+ return {
7
+ name: 'Mysql',
8
+ setupOnce() {
9
+ addOpenTelemetryInstrumentation(new MySQLInstrumentation({}));
10
+ },
11
+ };
12
+ }) ;
13
+
14
+ /**
15
+ * MySQL integration
16
+ *
17
+ * Capture tracing data for mysql.
18
+ */
19
+ const mysqlIntegration = defineIntegration(_mysqlIntegration);
20
+
21
+ export { mysqlIntegration };
22
+ //# sourceMappingURL=mysql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql.js","sources":["../../../../src/integrations/tracing/mysql.ts"],"sourcesContent":["import { MySQLInstrumentation } from '@opentelemetry/instrumentation-mysql';\nimport { defineIntegration } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\n\nconst _mysqlIntegration = (() => {\n return {\n name: 'Mysql',\n setupOnce() {\n addOpenTelemetryInstrumentation(new MySQLInstrumentation({}));\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * MySQL integration\n *\n * Capture tracing data for mysql.\n */\nexport const mysqlIntegration = defineIntegration(_mysqlIntegration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,iBAAkB,IAAG,MAAM;AACjC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,SAAS,GAAG;AAChB,MAAM,+BAA+B,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAA;AACnE,KAAK;AACL,GAAG,CAAA;AACH,CAAC,CAAE,EAAA;AACH;AACA;AACA;AACA;AACA;AACA;MACa,gBAAiB,GAAE,iBAAiB,CAAC,iBAAiB;;;;"}
@@ -0,0 +1,29 @@
1
+ import { MySQL2Instrumentation } from '@opentelemetry/instrumentation-mysql2';
2
+ import { defineIntegration } from '@sentry/core';
3
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
4
+ import { addOriginToSpan } from '../../utils/addOriginToSpan.js';
5
+
6
+ const _mysql2Integration = (() => {
7
+ return {
8
+ name: 'Mysql2',
9
+ setupOnce() {
10
+ addOpenTelemetryInstrumentation(
11
+ new MySQL2Instrumentation({
12
+ responseHook(span) {
13
+ addOriginToSpan(span, 'auto.db.otel.mysql2');
14
+ },
15
+ }),
16
+ );
17
+ },
18
+ };
19
+ }) ;
20
+
21
+ /**
22
+ * MySQL2 integration
23
+ *
24
+ * Capture tracing data for mysql2
25
+ */
26
+ const mysql2Integration = defineIntegration(_mysql2Integration);
27
+
28
+ export { mysql2Integration };
29
+ //# sourceMappingURL=mysql2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql2.js","sources":["../../../../src/integrations/tracing/mysql2.ts"],"sourcesContent":["import { MySQL2Instrumentation } from '@opentelemetry/instrumentation-mysql2';\nimport { defineIntegration } from '@sentry/core';\nimport { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';\nimport type { IntegrationFn } from '@sentry/types';\n\nimport { addOriginToSpan } from '../../utils/addOriginToSpan';\n\nconst _mysql2Integration = (() => {\n return {\n name: 'Mysql2',\n setupOnce() {\n addOpenTelemetryInstrumentation(\n new MySQL2Instrumentation({\n responseHook(span) {\n addOriginToSpan(span, 'auto.db.otel.mysql2');\n },\n }),\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * MySQL2 integration\n *\n * Capture tracing data for mysql2\n */\nexport const mysql2Integration = defineIntegration(_mysql2Integration);\n"],"names":[],"mappings":";;;;;AAOA,MAAM,kBAAmB,IAAG,MAAM;AAClC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,SAAS,GAAG;AAChB,MAAM,+BAA+B;AACrC,QAAQ,IAAI,qBAAqB,CAAC;AAClC,UAAU,YAAY,CAAC,IAAI,EAAE;AAC7B,YAAY,eAAe,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAA;AACxD,WAAW;AACX,SAAS,CAAC;AACV,OAAO,CAAA;AACP,KAAK;AACL,GAAG,CAAA;AACH,CAAC,CAAE,EAAA;AACH;AACA;AACA;AACA;AACA;AACA;MACa,iBAAkB,GAAE,iBAAiB,CAAC,kBAAkB;;;;"}
@@ -0,0 +1,63 @@
1
+ import { _optionalChain } from '@sentry/utils';
2
+ import { NestInstrumentation } from '@opentelemetry/instrumentation-nestjs-core';
3
+ import { defineIntegration, getIsolationScope, getDefaultIsolationScope, captureException } from '@sentry/core';
4
+ import { addOpenTelemetryInstrumentation } from '@sentry/opentelemetry';
5
+ import { logger } from '@sentry/utils';
6
+
7
+ const _nestIntegration = (() => {
8
+ return {
9
+ name: 'Nest',
10
+ setupOnce() {
11
+ addOpenTelemetryInstrumentation(new NestInstrumentation({}));
12
+ },
13
+ };
14
+ }) ;
15
+
16
+ /**
17
+ * Nest framework integration
18
+ *
19
+ * Capture tracing data for nest.
20
+ */
21
+ const nestIntegration = defineIntegration(_nestIntegration);
22
+
23
+ /**
24
+ * Setup an error handler for Nest.
25
+ */
26
+ function setupNestErrorHandler(app, baseFilter) {
27
+ app.useGlobalInterceptors({
28
+ intercept(context, next) {
29
+ if (getIsolationScope() === getDefaultIsolationScope()) {
30
+ logger.warn('Isolation scope is still the default isolation scope, skipping setting transactionName.');
31
+ return next.handle();
32
+ }
33
+
34
+ if (context.getType() === 'http') {
35
+ const req = context.switchToHttp().getRequest();
36
+ if (req.route) {
37
+ getIsolationScope().setTransactionName(`${_optionalChain([req, 'access', _ => _.method, 'optionalAccess', _2 => _2.toUpperCase, 'call', _3 => _3()]) || 'GET'} ${req.route.path}`);
38
+ }
39
+ }
40
+
41
+ return next.handle();
42
+ },
43
+ });
44
+
45
+ const wrappedFilter = new Proxy(baseFilter, {
46
+ get(target, prop, receiver) {
47
+ if (prop === 'catch') {
48
+ const originalCatch = Reflect.get(target, prop, receiver);
49
+
50
+ return (exception, host) => {
51
+ captureException(exception);
52
+ return originalCatch.apply(target, [exception, host]);
53
+ };
54
+ }
55
+ return Reflect.get(target, prop, receiver);
56
+ },
57
+ });
58
+
59
+ app.useGlobalFilters(wrappedFilter);
60
+ }
61
+
62
+ export { nestIntegration, setupNestErrorHandler };
63
+ //# sourceMappingURL=nest.js.map