@sentry/node 10.55.0 → 10.56.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 (161) hide show
  1. package/build/cjs/integrations/node-fetch/vendored/undici.js +2 -3
  2. package/build/cjs/integrations/node-fetch/vendored/undici.js.map +1 -1
  3. package/build/cjs/integrations/tracing/InstrumentationNodeModuleFile.js +15 -0
  4. package/build/cjs/integrations/tracing/InstrumentationNodeModuleFile.js.map +1 -0
  5. package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js +9 -9
  6. package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
  7. package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  8. package/build/cjs/integrations/tracing/anthropic-ai/index.js.map +1 -1
  9. package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js +3 -5
  10. package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
  11. package/build/cjs/integrations/tracing/express.js +3 -5
  12. package/build/cjs/integrations/tracing/express.js.map +1 -1
  13. package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +10 -11
  14. package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  15. package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js +3 -4
  16. package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
  17. package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js +2 -1
  18. package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  19. package/build/cjs/integrations/tracing/firebase/otel/patches/functions.js +2 -1
  20. package/build/cjs/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
  21. package/build/cjs/integrations/tracing/google-genai/instrumentation.js +2 -1
  22. package/build/cjs/integrations/tracing/google-genai/instrumentation.js.map +1 -1
  23. package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js +4 -3
  24. package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
  25. package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js +2 -5
  26. package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
  27. package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +3 -2
  28. package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
  29. package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +3 -4
  30. package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
  31. package/build/cjs/integrations/tracing/langchain/instrumentation.js +3 -2
  32. package/build/cjs/integrations/tracing/langchain/instrumentation.js.map +1 -1
  33. package/build/cjs/integrations/tracing/langgraph/index.js.map +1 -1
  34. package/build/cjs/integrations/tracing/langgraph/instrumentation.js +7 -5
  35. package/build/cjs/integrations/tracing/langgraph/instrumentation.js.map +1 -1
  36. package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js +7 -6
  37. package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
  38. package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +3 -2
  39. package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
  40. package/build/cjs/integrations/tracing/openai/index.js.map +1 -1
  41. package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js +5 -5
  42. package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js.map +1 -1
  43. package/build/cjs/integrations/tracing/postgresjs.js +2 -1
  44. package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
  45. package/build/cjs/integrations/tracing/redis/index.js +3 -2
  46. package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
  47. package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +1 -1
  48. package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
  49. package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +4 -3
  50. package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
  51. package/build/cjs/integrations/tracing/vercelai/instrumentation.js +6 -5
  52. package/build/cjs/integrations/tracing/vercelai/instrumentation.js.map +1 -1
  53. package/build/cjs/utils/setHttpServerSpanRouteAttribute.js +21 -0
  54. package/build/cjs/utils/setHttpServerSpanRouteAttribute.js.map +1 -0
  55. package/build/esm/integrations/node-fetch/vendored/undici.js +3 -4
  56. package/build/esm/integrations/node-fetch/vendored/undici.js.map +1 -1
  57. package/build/esm/integrations/tracing/InstrumentationNodeModuleFile.js +13 -0
  58. package/build/esm/integrations/tracing/InstrumentationNodeModuleFile.js.map +1 -0
  59. package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js +7 -7
  60. package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
  61. package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  62. package/build/esm/integrations/tracing/anthropic-ai/index.js.map +1 -1
  63. package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +3 -5
  64. package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
  65. package/build/esm/integrations/tracing/express.js +3 -5
  66. package/build/esm/integrations/tracing/express.js.map +1 -1
  67. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +3 -4
  68. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  69. package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js +3 -4
  70. package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
  71. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +2 -1
  72. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  73. package/build/esm/integrations/tracing/firebase/otel/patches/functions.js +2 -1
  74. package/build/esm/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
  75. package/build/esm/integrations/tracing/google-genai/instrumentation.js +2 -1
  76. package/build/esm/integrations/tracing/google-genai/instrumentation.js.map +1 -1
  77. package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js +2 -1
  78. package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
  79. package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js +2 -5
  80. package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
  81. package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +2 -1
  82. package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
  83. package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +3 -4
  84. package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
  85. package/build/esm/integrations/tracing/langchain/instrumentation.js +2 -1
  86. package/build/esm/integrations/tracing/langchain/instrumentation.js.map +1 -1
  87. package/build/esm/integrations/tracing/langgraph/index.js.map +1 -1
  88. package/build/esm/integrations/tracing/langgraph/instrumentation.js +5 -3
  89. package/build/esm/integrations/tracing/langgraph/instrumentation.js.map +1 -1
  90. package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js +2 -1
  91. package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
  92. package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +2 -1
  93. package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
  94. package/build/esm/integrations/tracing/openai/index.js.map +1 -1
  95. package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js +5 -5
  96. package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js.map +1 -1
  97. package/build/esm/integrations/tracing/postgresjs.js +2 -1
  98. package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
  99. package/build/esm/integrations/tracing/redis/index.js +3 -2
  100. package/build/esm/integrations/tracing/redis/index.js.map +1 -1
  101. package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +1 -1
  102. package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
  103. package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +2 -1
  104. package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
  105. package/build/esm/integrations/tracing/vercelai/instrumentation.js +6 -5
  106. package/build/esm/integrations/tracing/vercelai/instrumentation.js.map +1 -1
  107. package/build/esm/package.json +1 -1
  108. package/build/esm/utils/setHttpServerSpanRouteAttribute.js +19 -0
  109. package/build/esm/utils/setHttpServerSpanRouteAttribute.js.map +1 -0
  110. package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +1 -1
  111. package/build/types/integrations/tracing/InstrumentationNodeModuleFile.d.ts +9 -0
  112. package/build/types/integrations/tracing/InstrumentationNodeModuleFile.d.ts.map +1 -0
  113. package/build/types/integrations/tracing/amqplib/vendored/amqplib.d.ts.map +1 -1
  114. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts +2 -2
  115. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
  116. package/build/types/integrations/tracing/anthropic-ai/index.d.ts +7 -7
  117. package/build/types/integrations/tracing/connect/vendored/instrumentation.d.ts.map +1 -1
  118. package/build/types/integrations/tracing/express.d.ts.map +1 -1
  119. package/build/types/integrations/tracing/fastify/v3/instrumentation.d.ts.map +1 -1
  120. package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +1 -1
  121. package/build/types/integrations/tracing/firebase/otel/patches/firestore.d.ts.map +1 -1
  122. package/build/types/integrations/tracing/firebase/otel/patches/functions.d.ts.map +1 -1
  123. package/build/types/integrations/tracing/google-genai/instrumentation.d.ts.map +1 -1
  124. package/build/types/integrations/tracing/graphql/vendored/instrumentation.d.ts.map +1 -1
  125. package/build/types/integrations/tracing/hapi/vendored/instrumentation.d.ts.map +1 -1
  126. package/build/types/integrations/tracing/knex/vendored/instrumentation.d.ts.map +1 -1
  127. package/build/types/integrations/tracing/koa/vendored/instrumentation.d.ts.map +1 -1
  128. package/build/types/integrations/tracing/langchain/instrumentation.d.ts.map +1 -1
  129. package/build/types/integrations/tracing/langgraph/index.d.ts +7 -7
  130. package/build/types/integrations/tracing/langgraph/instrumentation.d.ts.map +1 -1
  131. package/build/types/integrations/tracing/mongo/vendored/instrumentation.d.ts.map +1 -1
  132. package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
  133. package/build/types/integrations/tracing/openai/index.d.ts +7 -7
  134. package/build/types/integrations/tracing/postgres/vendored/instrumentation.d.ts.map +1 -1
  135. package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
  136. package/build/types/integrations/tracing/redis/index.d.ts +4 -1
  137. package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
  138. package/build/types/integrations/tracing/redis/vendored/redis-instrumentation.d.ts.map +1 -1
  139. package/build/types/integrations/tracing/vercelai/instrumentation.d.ts +2 -2
  140. package/build/types/integrations/tracing/vercelai/instrumentation.d.ts.map +1 -1
  141. package/build/types/integrations/tracing/vercelai/types.d.ts +6 -4
  142. package/build/types/integrations/tracing/vercelai/types.d.ts.map +1 -1
  143. package/build/types/utils/setHttpServerSpanRouteAttribute.d.ts +9 -0
  144. package/build/types/utils/setHttpServerSpanRouteAttribute.d.ts.map +1 -0
  145. package/build/types-ts3.8/integrations/tracing/InstrumentationNodeModuleFile.d.ts +9 -0
  146. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/utils.d.ts +2 -2
  147. package/build/types-ts3.8/integrations/tracing/anthropic-ai/index.d.ts +7 -7
  148. package/build/types-ts3.8/integrations/tracing/langgraph/index.d.ts +7 -7
  149. package/build/types-ts3.8/integrations/tracing/openai/index.d.ts +7 -7
  150. package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +4 -1
  151. package/build/types-ts3.8/integrations/tracing/vercelai/instrumentation.d.ts +2 -2
  152. package/build/types-ts3.8/integrations/tracing/vercelai/types.d.ts +6 -4
  153. package/build/types-ts3.8/utils/setHttpServerSpanRouteAttribute.d.ts +9 -0
  154. package/package.json +5 -4
  155. package/build/cjs/integrations/tracing/redis/redis-dc-subscriber.js +0 -151
  156. package/build/cjs/integrations/tracing/redis/redis-dc-subscriber.js.map +0 -1
  157. package/build/esm/integrations/tracing/redis/redis-dc-subscriber.js +0 -149
  158. package/build/esm/integrations/tracing/redis/redis-dc-subscriber.js.map +0 -1
  159. package/build/types/integrations/tracing/redis/redis-dc-subscriber.d.ts +0 -17
  160. package/build/types/integrations/tracing/redis/redis-dc-subscriber.d.ts.map +0 -1
  161. package/build/types-ts3.8/integrations/tracing/redis/redis-dc-subscriber.d.ts +0 -17
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/koa/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n/* eslint-disable */\n\nimport * as api from '@opentelemetry/api';\nimport {\n isWrapped,\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\n\nimport { KoaLayerType, KoaInstrumentationConfig } from './types';\nimport { SDK_VERSION } from '@sentry/core';\nimport { getMiddlewareMetadata, isLayerIgnored } from './utils';\nimport { getRPCMetadata, RPCType } from '@opentelemetry/core';\nimport { Next, kLayerPatched, KoaContext, KoaMiddleware, KoaPatchedMiddleware } from './internal-types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-koa';\n\n/** Koa instrumentation for OpenTelemetry */\nexport class KoaInstrumentation extends InstrumentationBase<KoaInstrumentationConfig> {\n constructor(config: KoaInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return new InstrumentationNodeModuleDefinition(\n 'koa',\n ['>=2.0.0 <4'],\n (module: any) => {\n const moduleExports: any =\n module[Symbol.toStringTag] === 'Module'\n ? module.default // ESM\n : module; // CommonJS\n if (moduleExports == null) {\n return moduleExports;\n }\n if (isWrapped(moduleExports.prototype.use)) {\n this._unwrap(moduleExports.prototype, 'use');\n }\n this._wrap(moduleExports.prototype, 'use', this._getKoaUsePatch.bind(this));\n return module;\n },\n (module: any) => {\n const moduleExports: any =\n module[Symbol.toStringTag] === 'Module'\n ? module.default // ESM\n : module; // CommonJS\n if (isWrapped(moduleExports.prototype.use)) {\n this._unwrap(moduleExports.prototype, 'use');\n }\n },\n );\n }\n\n /**\n * Patches the Koa.use function in order to instrument each original\n * middleware layer which is introduced\n * @param {KoaMiddleware} middleware - the original middleware function\n */\n private _getKoaUsePatch(original: (middleware: KoaMiddleware) => any) {\n const plugin = this;\n return function use(this: any, middlewareFunction: KoaMiddleware) {\n let patchedFunction: KoaMiddleware;\n if (middlewareFunction.router) {\n patchedFunction = plugin._patchRouterDispatch(middlewareFunction);\n } else {\n patchedFunction = plugin._patchLayer(middlewareFunction, false);\n }\n return original.apply(this, [patchedFunction]);\n };\n }\n\n /**\n * Patches the dispatch function used by @koa/router. This function\n * goes through each routed middleware and adds instrumentation via a call\n * to the @function _patchLayer function.\n * @param {KoaMiddleware} dispatchLayer - the original dispatch function which dispatches\n * routed middleware\n */\n private _patchRouterDispatch(dispatchLayer: KoaMiddleware): KoaMiddleware {\n api.diag.debug('Patching @koa/router dispatch');\n\n const router = dispatchLayer.router;\n\n const routesStack = router?.stack ?? [];\n for (const pathLayer of routesStack) {\n const path = pathLayer.path;\n // Type cast needed: router.stack comes from @types/koa@2.x but we use @types/koa@3.x\n // See internal-types.ts for full explanation\n const pathStack = pathLayer.stack as any;\n for (let j = 0; j < pathStack.length; j++) {\n const routedMiddleware: KoaMiddleware = pathStack[j];\n pathStack[j] = this._patchLayer(routedMiddleware, true, path);\n }\n }\n\n return dispatchLayer;\n }\n\n /**\n * Patches each individual @param middlewareLayer function in order to create the\n * span and propagate context. It does not create spans when there is no parent span.\n * @param {KoaMiddleware} middlewareLayer - the original middleware function.\n * @param {boolean} isRouter - tracks whether the original middleware function\n * was dispatched by the router originally\n * @param {string?} layerPath - if present, provides additional data from the\n * router about the routed path which the middleware is attached to\n */\n private _patchLayer(\n middlewareLayer: KoaPatchedMiddleware,\n isRouter: boolean,\n layerPath?: string | RegExp,\n ): KoaMiddleware {\n const layerType = isRouter ? KoaLayerType.ROUTER : KoaLayerType.MIDDLEWARE;\n // Skip patching layer if its ignored in the config\n if (middlewareLayer[kLayerPatched] === true || isLayerIgnored(layerType, this.getConfig())) return middlewareLayer;\n\n if (\n middlewareLayer.constructor.name === 'GeneratorFunction' ||\n middlewareLayer.constructor.name === 'AsyncGeneratorFunction'\n ) {\n api.diag.debug('ignoring generator-based Koa middleware layer');\n return middlewareLayer;\n }\n\n middlewareLayer[kLayerPatched] = true;\n\n api.diag.debug('patching Koa middleware layer');\n return async (context: KoaContext, next: Next) => {\n const parent = api.trace.getSpan(api.context.active());\n if (parent === undefined) {\n return middlewareLayer(context, next);\n }\n const metadata = getMiddlewareMetadata(context, middlewareLayer, isRouter, layerPath);\n const span = this.tracer.startSpan(metadata.name, {\n attributes: metadata.attributes,\n });\n\n const rpcMetadata = getRPCMetadata(api.context.active());\n\n if (rpcMetadata?.type === RPCType.HTTP && context._matchedRoute) {\n rpcMetadata.route = context._matchedRoute.toString();\n }\n\n const { requestHook } = this.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () =>\n requestHook(span, {\n context,\n middlewareLayer,\n layerType,\n }),\n e => {\n if (e) {\n api.diag.error('koa instrumentation: request hook failed', e);\n }\n },\n true,\n );\n }\n\n const newContext = api.trace.setSpan(api.context.active(), span);\n return api.context.with(newContext, async () => {\n try {\n return await middlewareLayer(context, next);\n } catch (err: any) {\n span.recordException(err);\n throw err;\n } finally {\n span.end();\n }\n });\n };\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","KoaLayerType","kLayerPatched","isLayerIgnored","getMiddlewareMetadata","getRPCMetadata","RPCType","safeExecuteInTheMiddle"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/koa/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-koa\n * - Upstream version: @opentelemetry/instrumentation-koa@0.66.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n/* eslint-disable */\n\nimport * as api from '@opentelemetry/api';\nimport {\n isWrapped,\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\n\nimport { KoaLayerType, KoaInstrumentationConfig } from './types';\nimport { SDK_VERSION } from '@sentry/core';\nimport { getMiddlewareMetadata, isLayerIgnored } from './utils';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport { Next, kLayerPatched, KoaContext, KoaMiddleware, KoaPatchedMiddleware } from './internal-types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-koa';\n\n/** Koa instrumentation for OpenTelemetry */\nexport class KoaInstrumentation extends InstrumentationBase<KoaInstrumentationConfig> {\n constructor(config: KoaInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return new InstrumentationNodeModuleDefinition(\n 'koa',\n ['>=2.0.0 <4'],\n (module: any) => {\n const moduleExports: any =\n module[Symbol.toStringTag] === 'Module'\n ? module.default // ESM\n : module; // CommonJS\n if (moduleExports == null) {\n return moduleExports;\n }\n if (isWrapped(moduleExports.prototype.use)) {\n this._unwrap(moduleExports.prototype, 'use');\n }\n this._wrap(moduleExports.prototype, 'use', this._getKoaUsePatch.bind(this));\n return module;\n },\n (module: any) => {\n const moduleExports: any =\n module[Symbol.toStringTag] === 'Module'\n ? module.default // ESM\n : module; // CommonJS\n if (isWrapped(moduleExports.prototype.use)) {\n this._unwrap(moduleExports.prototype, 'use');\n }\n },\n );\n }\n\n /**\n * Patches the Koa.use function in order to instrument each original\n * middleware layer which is introduced\n * @param {KoaMiddleware} middleware - the original middleware function\n */\n private _getKoaUsePatch(original: (middleware: KoaMiddleware) => any) {\n const plugin = this;\n return function use(this: any, middlewareFunction: KoaMiddleware) {\n let patchedFunction: KoaMiddleware;\n if (middlewareFunction.router) {\n patchedFunction = plugin._patchRouterDispatch(middlewareFunction);\n } else {\n patchedFunction = plugin._patchLayer(middlewareFunction, false);\n }\n return original.apply(this, [patchedFunction]);\n };\n }\n\n /**\n * Patches the dispatch function used by @koa/router. This function\n * goes through each routed middleware and adds instrumentation via a call\n * to the @function _patchLayer function.\n * @param {KoaMiddleware} dispatchLayer - the original dispatch function which dispatches\n * routed middleware\n */\n private _patchRouterDispatch(dispatchLayer: KoaMiddleware): KoaMiddleware {\n api.diag.debug('Patching @koa/router dispatch');\n\n const router = dispatchLayer.router;\n\n const routesStack = router?.stack ?? [];\n for (const pathLayer of routesStack) {\n const path = pathLayer.path;\n // Type cast needed: router.stack comes from @types/koa@2.x but we use @types/koa@3.x\n // See internal-types.ts for full explanation\n const pathStack = pathLayer.stack as any;\n for (let j = 0; j < pathStack.length; j++) {\n const routedMiddleware: KoaMiddleware = pathStack[j];\n pathStack[j] = this._patchLayer(routedMiddleware, true, path);\n }\n }\n\n return dispatchLayer;\n }\n\n /**\n * Patches each individual @param middlewareLayer function in order to create the\n * span and propagate context. It does not create spans when there is no parent span.\n * @param {KoaMiddleware} middlewareLayer - the original middleware function.\n * @param {boolean} isRouter - tracks whether the original middleware function\n * was dispatched by the router originally\n * @param {string?} layerPath - if present, provides additional data from the\n * router about the routed path which the middleware is attached to\n */\n private _patchLayer(\n middlewareLayer: KoaPatchedMiddleware,\n isRouter: boolean,\n layerPath?: string | RegExp,\n ): KoaMiddleware {\n const layerType = isRouter ? KoaLayerType.ROUTER : KoaLayerType.MIDDLEWARE;\n // Skip patching layer if its ignored in the config\n if (middlewareLayer[kLayerPatched] === true || isLayerIgnored(layerType, this.getConfig())) return middlewareLayer;\n\n if (\n middlewareLayer.constructor.name === 'GeneratorFunction' ||\n middlewareLayer.constructor.name === 'AsyncGeneratorFunction'\n ) {\n api.diag.debug('ignoring generator-based Koa middleware layer');\n return middlewareLayer;\n }\n\n middlewareLayer[kLayerPatched] = true;\n\n api.diag.debug('patching Koa middleware layer');\n return async (context: KoaContext, next: Next) => {\n const parent = api.trace.getSpan(api.context.active());\n if (parent === undefined) {\n return middlewareLayer(context, next);\n }\n const metadata = getMiddlewareMetadata(context, middlewareLayer, isRouter, layerPath);\n const span = this.tracer.startSpan(metadata.name, {\n attributes: metadata.attributes,\n });\n\n if (context._matchedRoute) {\n setHttpServerSpanRouteAttribute(context._matchedRoute.toString());\n }\n\n const { requestHook } = this.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () =>\n requestHook(span, {\n context,\n middlewareLayer,\n layerType,\n }),\n e => {\n if (e) {\n api.diag.error('koa instrumentation: request hook failed', e);\n }\n },\n true,\n );\n }\n\n const newContext = api.trace.setSpan(api.context.active(), span);\n return api.context.with(newContext, async () => {\n try {\n return await middlewareLayer(context, next);\n } catch (err: any) {\n span.recordException(err);\n throw err;\n } finally {\n span.end();\n }\n });\n };\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","isWrapped","KoaLayerType","kLayerPatched","isLayerIgnored","getMiddlewareMetadata","setHttpServerSpanRouteAttribute","safeExecuteInTheMiddle"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const instrumentation = require('@opentelemetry/instrumentation');
4
+ const InstrumentationNodeModuleFile = require('../InstrumentationNodeModuleFile.js');
4
5
  const core = require('@sentry/core');
5
6
 
6
7
  const supportedVersions = [">=0.1.0 <2.0.0"];
@@ -47,7 +48,7 @@ class SentryLangChainInstrumentation extends instrumentation.InstrumentationBase
47
48
  this._patch.bind(this),
48
49
  (exports) => exports,
49
50
  [
50
- new instrumentation.InstrumentationNodeModuleFile(
51
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
51
52
  `${packageName}/dist/index.cjs`,
52
53
  supportedVersions,
53
54
  this._patch.bind(this),
@@ -65,7 +66,7 @@ class SentryLangChainInstrumentation extends instrumentation.InstrumentationBase
65
66
  (exports) => exports,
66
67
  [
67
68
  // To catch the CJS build that contains ConfigurableModel / initChatModel for v1
68
- new instrumentation.InstrumentationNodeModuleFile(
69
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
69
70
  "langchain/dist/chat_models/universal.cjs",
70
71
  supportedVersions,
71
72
  this._patch.bind(this),
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/langchain/instrumentation.ts"],"sourcesContent":["import {\n InstrumentationBase,\n type InstrumentationConfig,\n type InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n} from '@opentelemetry/instrumentation';\nimport type { LangChainOptions } from '@sentry/core';\nimport {\n _INTERNAL_mergeLangChainCallbackHandler,\n _INTERNAL_skipAiProviderWrapping,\n ANTHROPIC_AI_INTEGRATION_NAME,\n createLangChainCallbackHandler,\n GOOGLE_GENAI_INTEGRATION_NAME,\n instrumentLangChainEmbeddings,\n OPENAI_INTEGRATION_NAME,\n SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.1.0 <2.0.0'];\n\ntype LangChainInstrumentationOptions = InstrumentationConfig & LangChainOptions;\n\n/**\n * Represents the patched shape of LangChain provider package exports\n */\ninterface PatchedLangChainExports {\n [key: string]: unknown;\n}\n\n/**\n * Wraps Runnable methods (invoke, stream, batch) to inject Sentry callbacks at request time\n * Uses a Proxy to intercept method calls and augment the options.callbacks\n */\nfunction wrapRunnableMethod(\n originalMethod: (...args: unknown[]) => unknown,\n sentryHandler: unknown,\n _methodName: string,\n): (...args: unknown[]) => unknown {\n return new Proxy(originalMethod, {\n apply(target, thisArg, args: unknown[]): unknown {\n // LangChain Runnable method signatures:\n // invoke(input, options?) - options contains callbacks\n // stream(input, options?) - options contains callbacks\n // batch(inputs, options?) - options contains callbacks\n\n // Options is typically the second argument\n const optionsIndex = 1;\n let options = args[optionsIndex] as Record<string, unknown> | undefined;\n\n // If options don't exist or aren't an object, create them\n if (!options || typeof options !== 'object' || Array.isArray(options)) {\n options = {};\n args[optionsIndex] = options;\n }\n\n // Inject our callback handler into options.callbacks (request time callbacks)\n options.callbacks = _INTERNAL_mergeLangChainCallbackHandler(options.callbacks, sentryHandler);\n\n // Call original method with augmented options\n return Reflect.apply(target, thisArg, args);\n },\n }) as (...args: unknown[]) => unknown;\n}\n\n/**\n * Sentry LangChain instrumentation using OpenTelemetry.\n */\nexport class SentryLangChainInstrumentation extends InstrumentationBase<LangChainInstrumentationOptions> {\n public constructor(config: LangChainInstrumentationOptions = {}) {\n super('@sentry/instrumentation-langchain', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n * We patch the BaseChatModel class methods to inject callbacks\n *\n * We hook into provider packages (@langchain/anthropic, @langchain/openai, etc.)\n * because @langchain/core is often bundled and not loaded as a separate module\n */\n public init(): InstrumentationModuleDefinition | InstrumentationModuleDefinition[] {\n const modules: InstrumentationModuleDefinition[] = [];\n\n // Hook into common LangChain provider packages\n const providerPackages = [\n '@langchain/anthropic',\n '@langchain/openai',\n '@langchain/google-genai',\n '@langchain/mistralai',\n '@langchain/google-vertexai',\n '@langchain/groq',\n ];\n\n for (const packageName of providerPackages) {\n // In CJS, LangChain packages re-export from dist/index.cjs files.\n // Patching only the root module sometimes misses the real implementation or\n // gets overwritten when that file is loaded. We add a file-level patch so that\n // _patch runs again on the concrete implementation\n modules.push(\n new InstrumentationNodeModuleDefinition(\n packageName,\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n new InstrumentationNodeModuleFile(\n `${packageName}/dist/index.cjs`,\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n );\n }\n\n // Hook into main 'langchain' package to catch initChatModel (v1+)\n modules.push(\n new InstrumentationNodeModuleDefinition(\n 'langchain',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n // To catch the CJS build that contains ConfigurableModel / initChatModel for v1\n new InstrumentationNodeModuleFile(\n 'langchain/dist/chat_models/universal.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n );\n\n return modules;\n }\n\n /**\n * Core patch logic - patches chat model and embedding methods\n * This is called when a LangChain provider package is loaded\n */\n private _patch(exports: PatchedLangChainExports): PatchedLangChainExports | void {\n // Skip AI provider wrapping now that LangChain is actually being used\n // This prevents duplicate spans from Anthropic/OpenAI/GoogleGenAI standalone integrations\n _INTERNAL_skipAiProviderWrapping([\n OPENAI_INTEGRATION_NAME,\n ANTHROPIC_AI_INTEGRATION_NAME,\n GOOGLE_GENAI_INTEGRATION_NAME,\n ]);\n\n const config = this.getConfig();\n\n // Create a shared handler instance for chat model callbacks\n const sentryHandler = createLangChainCallbackHandler(config);\n\n // Patch Runnable methods to inject callbacks at request time\n // This directly manipulates options.callbacks that LangChain uses\n this._patchRunnableMethods(exports, sentryHandler);\n\n // Patch embedding methods to create spans directly\n // Embeddings don't use the callback system, so we wrap the methods themselves\n this._patchEmbeddingsMethods(exports, config);\n\n return exports;\n }\n\n /**\n * Patches chat model methods (invoke, stream, batch) to inject Sentry callbacks\n * Finds a chat model class from the provider package exports and patches its prototype methods\n */\n private _patchRunnableMethods(exports: PatchedLangChainExports, sentryHandler: unknown): void {\n // Known chat model class names for each provider\n const knownChatModelNames = [\n 'ChatAnthropic',\n 'ChatOpenAI',\n 'ChatGoogleGenerativeAI',\n 'ChatMistralAI',\n 'ChatVertexAI',\n 'ChatGroq',\n 'ConfigurableModel',\n ];\n\n const exportsToPatch = (exports.universal_exports ?? exports) as Record<string, unknown>;\n\n const chatModelClass = Object.values(exportsToPatch).find(exp => {\n return typeof exp === 'function' && knownChatModelNames.includes(exp.name);\n }) as { prototype: unknown; name: string } | undefined;\n\n if (!chatModelClass) {\n return;\n }\n\n // Patch directly on chatModelClass.prototype\n const targetProto = chatModelClass.prototype as Record<string, unknown>;\n\n // Skip if already patched (both file-level and module-level hooks resolve to the same prototype)\n if (targetProto.__sentry_patched__) {\n return;\n }\n targetProto.__sentry_patched__ = true;\n\n // Patch the methods (invoke, stream, batch)\n // All chat model instances will inherit these patched methods\n const methodsToPatch = ['invoke', 'stream', 'batch'] as const;\n\n for (const methodName of methodsToPatch) {\n const method = targetProto[methodName];\n if (typeof method === 'function') {\n targetProto[methodName] = wrapRunnableMethod(\n method as (...args: unknown[]) => unknown,\n sentryHandler,\n methodName,\n );\n }\n }\n }\n\n /**\n * Patches embedding class methods (embedQuery, embedDocuments) to create Sentry spans.\n *\n * Unlike chat models which use LangChain's callback system, the Embeddings base class\n * has no callback support. We wrap the methods directly on the prototype.\n *\n * Instruments any exported class whose prototype has both embedQuery and embedDocuments as functions.\n */\n private _patchEmbeddingsMethods(exports: PatchedLangChainExports, options: LangChainOptions): void {\n const exportsToPatch = (exports.universal_exports ?? exports) as Record<string, unknown>;\n\n for (const exp of Object.values(exportsToPatch)) {\n if (typeof exp !== 'function' || !exp.prototype) {\n continue;\n }\n const proto = exp.prototype as Record<string, unknown>;\n if (typeof proto.embedQuery !== 'function' || typeof proto.embedDocuments !== 'function') {\n continue;\n }\n if (proto.__sentry_patched__) {\n continue;\n }\n proto.__sentry_patched__ = true;\n\n instrumentLangChainEmbeddings(proto, options);\n }\n }\n}\n"],"names":["_INTERNAL_mergeLangChainCallbackHandler","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","_INTERNAL_skipAiProviderWrapping","OPENAI_INTEGRATION_NAME","ANTHROPIC_AI_INTEGRATION_NAME","GOOGLE_GENAI_INTEGRATION_NAME","createLangChainCallbackHandler","instrumentLangChainEmbeddings"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/langchain/instrumentation.ts"],"sourcesContent":["import {\n InstrumentationBase,\n type InstrumentationConfig,\n type InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile';\nimport type { LangChainOptions } from '@sentry/core';\nimport {\n _INTERNAL_mergeLangChainCallbackHandler,\n _INTERNAL_skipAiProviderWrapping,\n ANTHROPIC_AI_INTEGRATION_NAME,\n createLangChainCallbackHandler,\n GOOGLE_GENAI_INTEGRATION_NAME,\n instrumentLangChainEmbeddings,\n OPENAI_INTEGRATION_NAME,\n SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.1.0 <2.0.0'];\n\ntype LangChainInstrumentationOptions = InstrumentationConfig & LangChainOptions;\n\n/**\n * Represents the patched shape of LangChain provider package exports\n */\ninterface PatchedLangChainExports {\n [key: string]: unknown;\n}\n\n/**\n * Wraps Runnable methods (invoke, stream, batch) to inject Sentry callbacks at request time\n * Uses a Proxy to intercept method calls and augment the options.callbacks\n */\nfunction wrapRunnableMethod(\n originalMethod: (...args: unknown[]) => unknown,\n sentryHandler: unknown,\n _methodName: string,\n): (...args: unknown[]) => unknown {\n return new Proxy(originalMethod, {\n apply(target, thisArg, args: unknown[]): unknown {\n // LangChain Runnable method signatures:\n // invoke(input, options?) - options contains callbacks\n // stream(input, options?) - options contains callbacks\n // batch(inputs, options?) - options contains callbacks\n\n // Options is typically the second argument\n const optionsIndex = 1;\n let options = args[optionsIndex] as Record<string, unknown> | undefined;\n\n // If options don't exist or aren't an object, create them\n if (!options || typeof options !== 'object' || Array.isArray(options)) {\n options = {};\n args[optionsIndex] = options;\n }\n\n // Inject our callback handler into options.callbacks (request time callbacks)\n options.callbacks = _INTERNAL_mergeLangChainCallbackHandler(options.callbacks, sentryHandler);\n\n // Call original method with augmented options\n return Reflect.apply(target, thisArg, args);\n },\n }) as (...args: unknown[]) => unknown;\n}\n\n/**\n * Sentry LangChain instrumentation using OpenTelemetry.\n */\nexport class SentryLangChainInstrumentation extends InstrumentationBase<LangChainInstrumentationOptions> {\n public constructor(config: LangChainInstrumentationOptions = {}) {\n super('@sentry/instrumentation-langchain', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n * We patch the BaseChatModel class methods to inject callbacks\n *\n * We hook into provider packages (@langchain/anthropic, @langchain/openai, etc.)\n * because @langchain/core is often bundled and not loaded as a separate module\n */\n public init(): InstrumentationModuleDefinition | InstrumentationModuleDefinition[] {\n const modules: InstrumentationModuleDefinition[] = [];\n\n // Hook into common LangChain provider packages\n const providerPackages = [\n '@langchain/anthropic',\n '@langchain/openai',\n '@langchain/google-genai',\n '@langchain/mistralai',\n '@langchain/google-vertexai',\n '@langchain/groq',\n ];\n\n for (const packageName of providerPackages) {\n // In CJS, LangChain packages re-export from dist/index.cjs files.\n // Patching only the root module sometimes misses the real implementation or\n // gets overwritten when that file is loaded. We add a file-level patch so that\n // _patch runs again on the concrete implementation\n modules.push(\n new InstrumentationNodeModuleDefinition(\n packageName,\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n new InstrumentationNodeModuleFile(\n `${packageName}/dist/index.cjs`,\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n );\n }\n\n // Hook into main 'langchain' package to catch initChatModel (v1+)\n modules.push(\n new InstrumentationNodeModuleDefinition(\n 'langchain',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n // To catch the CJS build that contains ConfigurableModel / initChatModel for v1\n new InstrumentationNodeModuleFile(\n 'langchain/dist/chat_models/universal.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n );\n\n return modules;\n }\n\n /**\n * Core patch logic - patches chat model and embedding methods\n * This is called when a LangChain provider package is loaded\n */\n private _patch(exports: PatchedLangChainExports): PatchedLangChainExports | void {\n // Skip AI provider wrapping now that LangChain is actually being used\n // This prevents duplicate spans from Anthropic/OpenAI/GoogleGenAI standalone integrations\n _INTERNAL_skipAiProviderWrapping([\n OPENAI_INTEGRATION_NAME,\n ANTHROPIC_AI_INTEGRATION_NAME,\n GOOGLE_GENAI_INTEGRATION_NAME,\n ]);\n\n const config = this.getConfig();\n\n // Create a shared handler instance for chat model callbacks\n const sentryHandler = createLangChainCallbackHandler(config);\n\n // Patch Runnable methods to inject callbacks at request time\n // This directly manipulates options.callbacks that LangChain uses\n this._patchRunnableMethods(exports, sentryHandler);\n\n // Patch embedding methods to create spans directly\n // Embeddings don't use the callback system, so we wrap the methods themselves\n this._patchEmbeddingsMethods(exports, config);\n\n return exports;\n }\n\n /**\n * Patches chat model methods (invoke, stream, batch) to inject Sentry callbacks\n * Finds a chat model class from the provider package exports and patches its prototype methods\n */\n private _patchRunnableMethods(exports: PatchedLangChainExports, sentryHandler: unknown): void {\n // Known chat model class names for each provider\n const knownChatModelNames = [\n 'ChatAnthropic',\n 'ChatOpenAI',\n 'ChatGoogleGenerativeAI',\n 'ChatMistralAI',\n 'ChatVertexAI',\n 'ChatGroq',\n 'ConfigurableModel',\n ];\n\n const exportsToPatch = (exports.universal_exports ?? exports) as Record<string, unknown>;\n\n const chatModelClass = Object.values(exportsToPatch).find(exp => {\n return typeof exp === 'function' && knownChatModelNames.includes(exp.name);\n }) as { prototype: unknown; name: string } | undefined;\n\n if (!chatModelClass) {\n return;\n }\n\n // Patch directly on chatModelClass.prototype\n const targetProto = chatModelClass.prototype as Record<string, unknown>;\n\n // Skip if already patched (both file-level and module-level hooks resolve to the same prototype)\n if (targetProto.__sentry_patched__) {\n return;\n }\n targetProto.__sentry_patched__ = true;\n\n // Patch the methods (invoke, stream, batch)\n // All chat model instances will inherit these patched methods\n const methodsToPatch = ['invoke', 'stream', 'batch'] as const;\n\n for (const methodName of methodsToPatch) {\n const method = targetProto[methodName];\n if (typeof method === 'function') {\n targetProto[methodName] = wrapRunnableMethod(\n method as (...args: unknown[]) => unknown,\n sentryHandler,\n methodName,\n );\n }\n }\n }\n\n /**\n * Patches embedding class methods (embedQuery, embedDocuments) to create Sentry spans.\n *\n * Unlike chat models which use LangChain's callback system, the Embeddings base class\n * has no callback support. We wrap the methods directly on the prototype.\n *\n * Instruments any exported class whose prototype has both embedQuery and embedDocuments as functions.\n */\n private _patchEmbeddingsMethods(exports: PatchedLangChainExports, options: LangChainOptions): void {\n const exportsToPatch = (exports.universal_exports ?? exports) as Record<string, unknown>;\n\n for (const exp of Object.values(exportsToPatch)) {\n if (typeof exp !== 'function' || !exp.prototype) {\n continue;\n }\n const proto = exp.prototype as Record<string, unknown>;\n if (typeof proto.embedQuery !== 'function' || typeof proto.embedDocuments !== 'function') {\n continue;\n }\n if (proto.__sentry_patched__) {\n continue;\n }\n proto.__sentry_patched__ = true;\n\n instrumentLangChainEmbeddings(proto, options);\n }\n }\n}\n"],"names":["_INTERNAL_mergeLangChainCallbackHandler","InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","_INTERNAL_skipAiProviderWrapping","OPENAI_INTEGRATION_NAME","ANTHROPIC_AI_INTEGRATION_NAME","GOOGLE_GENAI_INTEGRATION_NAME","createLangChainCallbackHandler","instrumentLangChainEmbeddings"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/langgraph/index.ts"],"sourcesContent":["import type { IntegrationFn, LangGraphOptions } from '@sentry/core';\nimport { defineIntegration, LANGGRAPH_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryLangGraphInstrumentation } from './instrumentation';\n\nexport const instrumentLangGraph = generateInstrumentOnce<LangGraphOptions>(\n LANGGRAPH_INTEGRATION_NAME,\n options => new SentryLangGraphInstrumentation(options),\n);\n\nconst _langGraphIntegration = ((options: LangGraphOptions = {}) => {\n return {\n name: LANGGRAPH_INTEGRATION_NAME,\n setupOnce() {\n instrumentLangGraph(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for LangGraph.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments LangGraph StateGraph and compiled graph instances\n * to capture telemetry data following OpenTelemetry Semantic Conventions for Generative AI.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n * integrations: [Sentry.langGraphIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record input messages (default: respects `sendDefaultPii` client option)\n * - `recordOutputs`: Whether to record response text (default: respects `sendDefaultPii` client option)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs ONLY if `sendDefaultPii` is set to `true` in your Sentry client options\n * - Otherwise, inputs and outputs are NOT recorded unless explicitly enabled\n *\n * @example\n * ```javascript\n * // Record inputs and outputs when sendDefaultPii is false\n * Sentry.init({\n * integrations: [\n * Sentry.langGraphIntegration({\n * recordInputs: true,\n * recordOutputs: true\n * })\n * ],\n * });\n *\n * // Never record inputs/outputs regardless of sendDefaultPii\n * Sentry.init({\n * sendDefaultPii: true,\n * integrations: [\n * Sentry.langGraphIntegration({\n * recordInputs: false,\n * recordOutputs: false\n * })\n * ],\n * });\n * ```\n *\n * ## Captured Operations\n *\n * The integration captures the following LangGraph operations:\n * - **Agent Creation** (`StateGraph.compile()`) - Creates a `gen_ai.create_agent` span\n * - **Agent Invocation** (`CompiledGraph.invoke()`) - Creates a `gen_ai.invoke_agent` span\n *\n * ## Captured Data\n *\n * When `recordInputs` and `recordOutputs` are enabled, the integration captures:\n * - Input messages from the graph state\n * - Output messages and LLM responses\n * - Tool calls made during agent execution\n * - Agent and graph names\n * - Available tools configured in the graph\n *\n */\nexport const langGraphIntegration = defineIntegration(_langGraphIntegration);\n"],"names":["generateInstrumentOnce","LANGGRAPH_INTEGRATION_NAME","SentryLangGraphInstrumentation","defineIntegration"],"mappings":";;;;;;AAKO,MAAM,mBAAA,GAAsBA,+BAAA;AAAA,EACjCC,+BAAA;AAAA,EACA,CAAA,OAAA,KAAW,IAAIC,8CAAA,CAA+B,OAAO;AACvD;AAEA,MAAM,qBAAA,IAAyB,CAAC,OAAA,GAA4B,EAAC,KAAM;AACjE,EAAA,OAAO;AAAA,IACL,IAAA,EAAMD,+BAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,IAC7B;AAAA,GACF;AACF,CAAA,CAAA;AAsEO,MAAM,oBAAA,GAAuBE,uBAAkB,qBAAqB;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/langgraph/index.ts"],"sourcesContent":["import type { IntegrationFn, LangGraphOptions } from '@sentry/core';\nimport { defineIntegration, LANGGRAPH_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryLangGraphInstrumentation } from './instrumentation';\n\nexport const instrumentLangGraph = generateInstrumentOnce<LangGraphOptions>(\n LANGGRAPH_INTEGRATION_NAME,\n options => new SentryLangGraphInstrumentation(options),\n);\n\nconst _langGraphIntegration = ((options: LangGraphOptions = {}) => {\n return {\n name: LANGGRAPH_INTEGRATION_NAME,\n setupOnce() {\n instrumentLangGraph(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for LangGraph.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments LangGraph StateGraph and compiled graph instances\n * to capture telemetry data following OpenTelemetry Semantic Conventions for Generative AI.\n *\n * @example\n * ```javascript\n * import * as Sentry from '@sentry/node';\n *\n * Sentry.init({\n * integrations: [Sentry.langGraphIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record prompt messages (default: follows `sendDefaultPii` or `dataCollection.genAI.inputs`)\n * - `recordOutputs`: Whether to record response text (default: follows `sendDefaultPii` or `dataCollection.genAI.outputs`)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `sendDefaultPii` or `dataCollection.genAI` in your Sentry client options\n * - Integration-level `recordInputs`/`recordOutputs` options take precedence over global config\n *\n * @example\n * ```javascript\n * // Always record inputs and outputs regardless of global dataCollection config\n * Sentry.init({\n * integrations: [\n * Sentry.langGraphIntegration({\n * recordInputs: true,\n * recordOutputs: true\n * })\n * ],\n * });\n *\n * // Never record inputs/outputs regardless of global dataCollection config\n * Sentry.init({\n * dataCollection: { genAI: { inputs: true, outputs: true } },\n * integrations: [\n * Sentry.langGraphIntegration({\n * recordInputs: false,\n * recordOutputs: false\n * })\n * ],\n * });\n * ```\n *\n * ## Captured Operations\n *\n * The integration captures the following LangGraph operations:\n * - **Agent Creation** (`StateGraph.compile()`) - Creates a `gen_ai.create_agent` span\n * - **Agent Invocation** (`CompiledGraph.invoke()`) - Creates a `gen_ai.invoke_agent` span\n *\n * ## Captured Data\n *\n * When `recordInputs` and `recordOutputs` are enabled, the integration captures:\n * - Input messages from the graph state\n * - Output messages and LLM responses\n * - Tool calls made during agent execution\n * - Agent and graph names\n * - Available tools configured in the graph\n *\n */\nexport const langGraphIntegration = defineIntegration(_langGraphIntegration);\n"],"names":["generateInstrumentOnce","LANGGRAPH_INTEGRATION_NAME","SentryLangGraphInstrumentation","defineIntegration"],"mappings":";;;;;;AAKO,MAAM,mBAAA,GAAsBA,+BAAA;AAAA,EACjCC,+BAAA;AAAA,EACA,CAAA,OAAA,KAAW,IAAIC,8CAAA,CAA+B,OAAO;AACvD;AAEA,MAAM,qBAAA,IAAyB,CAAC,OAAA,GAA4B,EAAC,KAAM;AACjE,EAAA,OAAO;AAAA,IACL,IAAA,EAAMD,+BAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,IAC7B;AAAA,GACF;AACF,CAAA,CAAA;AAsEO,MAAM,oBAAA,GAAuBE,uBAAkB,qBAAqB;;;;;"}
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const instrumentation = require('@opentelemetry/instrumentation');
4
+ const InstrumentationNodeModuleFile = require('../InstrumentationNodeModuleFile.js');
4
5
  const core = require('@sentry/core');
5
6
 
6
7
  const supportedVersions = [">=0.0.0 <2.0.0"];
@@ -19,7 +20,7 @@ class SentryLangGraphInstrumentation extends instrumentation.InstrumentationBase
19
20
  this._patch.bind(this),
20
21
  (exports) => exports,
21
22
  [
22
- new instrumentation.InstrumentationNodeModuleFile(
23
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
23
24
  /**
24
25
  * In CJS, LangGraph packages re-export from dist/index.cjs files.
25
26
  * Patching only the root module sometimes misses the real implementation or
@@ -31,7 +32,7 @@ class SentryLangGraphInstrumentation extends instrumentation.InstrumentationBase
31
32
  this._patch.bind(this),
32
33
  (exports) => exports
33
34
  ),
34
- new instrumentation.InstrumentationNodeModuleFile(
35
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
35
36
  /**
36
37
  * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.
37
38
  * We add a file-level patch under the main module so that CJS require()
@@ -50,7 +51,7 @@ class SentryLangGraphInstrumentation extends instrumentation.InstrumentationBase
50
51
  this._patch.bind(this),
51
52
  (exports) => exports,
52
53
  [
53
- new instrumentation.InstrumentationNodeModuleFile(
54
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
54
55
  /**
55
56
  * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.
56
57
  * We add file-level patches so _patch runs on the concrete implementation.
@@ -69,10 +70,11 @@ class SentryLangGraphInstrumentation extends instrumentation.InstrumentationBase
69
70
  */
70
71
  _patch(exports) {
71
72
  const client = core.getClient();
73
+ const genAI = client?.getDataCollectionOptions().genAI;
72
74
  const options = {
73
75
  ...this.getConfig(),
74
- recordInputs: this.getConfig().recordInputs ?? client?.getOptions().sendDefaultPii,
75
- recordOutputs: this.getConfig().recordOutputs ?? client?.getOptions().sendDefaultPii
76
+ recordInputs: this.getConfig().recordInputs ?? genAI?.inputs ?? false,
77
+ recordOutputs: this.getConfig().recordOutputs ?? genAI?.outputs ?? false
76
78
  };
77
79
  if (exports.StateGraph && typeof exports.StateGraph === "function") {
78
80
  core.instrumentLangGraph(exports.StateGraph.prototype, options);
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/langgraph/instrumentation.ts"],"sourcesContent":["import {\n InstrumentationBase,\n type InstrumentationConfig,\n type InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n} from '@opentelemetry/instrumentation';\nimport type { CompiledGraph, LangGraphOptions } from '@sentry/core';\nimport { getClient, instrumentCreateReactAgent, instrumentLangGraph, SDK_VERSION } from '@sentry/core';\n\nconst supportedVersions = ['>=0.0.0 <2.0.0'];\n\ntype LangGraphInstrumentationOptions = InstrumentationConfig & LangGraphOptions;\n\n/**\n * Represents the patched shape of the LangGraph module export.\n */\ninterface PatchedModuleExports {\n [key: string]: unknown;\n StateGraph?: abstract new (...args: unknown[]) => unknown;\n createReactAgent?: (...args: unknown[]) => CompiledGraph;\n}\n\n/**\n * Sentry LangGraph instrumentation using OpenTelemetry.\n */\nexport class SentryLangGraphInstrumentation extends InstrumentationBase<LangGraphInstrumentationOptions> {\n public constructor(config: LangGraphInstrumentationOptions = {}) {\n super('@sentry/instrumentation-langgraph', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition(\n '@langchain/langgraph',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n new InstrumentationNodeModuleFile(\n /**\n * In CJS, LangGraph packages re-export from dist/index.cjs files.\n * Patching only the root module sometimes misses the real implementation or\n * gets overwritten when that file is loaded. We add a file-level patch so that\n * _patch runs again on the concrete implementation\n */\n '@langchain/langgraph/dist/index.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n new InstrumentationNodeModuleFile(\n /**\n * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.\n * We add a file-level patch under the main module so that CJS require()\n * of @langchain/langgraph/prebuilt gets patched.\n */\n '@langchain/langgraph/dist/prebuilt/index.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n new InstrumentationNodeModuleDefinition(\n '@langchain/langgraph/prebuilt',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n new InstrumentationNodeModuleFile(\n /**\n * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.\n * We add file-level patches so _patch runs on the concrete implementation.\n */\n '@langchain/langgraph/dist/prebuilt/index.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n ];\n }\n\n /**\n * Core patch logic applying instrumentation to the LangGraph module.\n */\n private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n const client = getClient();\n const options = {\n ...this.getConfig(),\n recordInputs: this.getConfig().recordInputs ?? client?.getOptions().sendDefaultPii,\n recordOutputs: this.getConfig().recordOutputs ?? client?.getOptions().sendDefaultPii,\n };\n\n // Patch StateGraph.compile to instrument both compile() and invoke()\n if (exports.StateGraph && typeof exports.StateGraph === 'function') {\n instrumentLangGraph(exports.StateGraph.prototype as { compile: (...args: unknown[]) => unknown }, options);\n }\n\n // Patch createReactAgent to instrument agent creation and invocation\n if (exports.createReactAgent && typeof exports.createReactAgent === 'function') {\n const originalCreateReactAgent = exports.createReactAgent;\n Object.defineProperty(exports, 'createReactAgent', {\n value: instrumentCreateReactAgent(originalCreateReactAgent as (...args: unknown[]) => CompiledGraph, options),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n return exports;\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","getClient","instrumentLangGraph","instrumentCreateReactAgent"],"mappings":";;;;;AAUA,MAAM,iBAAA,GAAoB,CAAC,gBAAgB,CAAA;AAgBpC,MAAM,uCAAuCA,mCAAA,CAAqD;AAAA,EAChG,WAAA,CAAY,MAAA,GAA0C,EAAC,EAAG;AAC/D,IAAA,KAAA,CAAM,mCAAA,EAAqCC,kBAAa,MAAM,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAA0C;AAC/C,IAAA,OAAO;AAAA,MACL,IAAIC,mDAAA;AAAA,QACF,sBAAA;AAAA,QACA,iBAAA;AAAA,QACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,QACrB,CAAA,OAAA,KAAW,OAAA;AAAA,QACX;AAAA,UACE,IAAIC,6CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOF,qCAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,YACrB,CAAA,OAAA,KAAW;AAAA,WACb;AAAA,UACA,IAAIA,6CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMF,8CAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,YACrB,CAAA,OAAA,KAAW;AAAA;AACb;AACF,OACF;AAAA,MACA,IAAID,mDAAA;AAAA,QACF,+BAAA;AAAA,QACA,iBAAA;AAAA,QACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,QACrB,CAAA,OAAA,KAAW,OAAA;AAAA,QACX;AAAA,UACE,IAAIC,6CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAKF,8CAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,YACrB,CAAA,OAAA,KAAW;AAAA;AACb;AACF;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,OAAO,OAAA,EAA4D;AACzE,IAAA,MAAM,SAASC,cAAA,EAAU;AACzB,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,KAAK,SAAA,EAAU;AAAA,MAClB,cAAc,IAAA,CAAK,SAAA,GAAY,YAAA,IAAgB,MAAA,EAAQ,YAAW,CAAE,cAAA;AAAA,MACpE,eAAe,IAAA,CAAK,SAAA,GAAY,aAAA,IAAiB,MAAA,EAAQ,YAAW,CAAE;AAAA,KACxE;AAGA,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAO,OAAA,CAAQ,eAAe,UAAA,EAAY;AAClE,MAAAC,wBAAA,CAAoB,OAAA,CAAQ,UAAA,CAAW,SAAA,EAA2D,OAAO,CAAA;AAAA,IAC3G;AAGA,IAAA,IAAI,OAAA,CAAQ,gBAAA,IAAoB,OAAO,OAAA,CAAQ,qBAAqB,UAAA,EAAY;AAC9E,MAAA,MAAM,2BAA2B,OAAA,CAAQ,gBAAA;AACzC,MAAA,MAAA,CAAO,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,QACjD,KAAA,EAAOC,+BAAA,CAA2B,wBAAA,EAAmE,OAAO,CAAA;AAAA,QAC5G,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;;"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/langgraph/instrumentation.ts"],"sourcesContent":["import {\n InstrumentationBase,\n type InstrumentationConfig,\n type InstrumentationModuleDefinition,\n InstrumentationNodeModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile';\nimport type { CompiledGraph, LangGraphOptions } from '@sentry/core';\nimport { getClient, instrumentCreateReactAgent, instrumentLangGraph, SDK_VERSION } from '@sentry/core';\n\nconst supportedVersions = ['>=0.0.0 <2.0.0'];\n\ntype LangGraphInstrumentationOptions = InstrumentationConfig & LangGraphOptions;\n\n/**\n * Represents the patched shape of the LangGraph module export.\n */\ninterface PatchedModuleExports {\n [key: string]: unknown;\n StateGraph?: abstract new (...args: unknown[]) => unknown;\n createReactAgent?: (...args: unknown[]) => CompiledGraph;\n}\n\n/**\n * Sentry LangGraph instrumentation using OpenTelemetry.\n */\nexport class SentryLangGraphInstrumentation extends InstrumentationBase<LangGraphInstrumentationOptions> {\n public constructor(config: LangGraphInstrumentationOptions = {}) {\n super('@sentry/instrumentation-langgraph', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition(\n '@langchain/langgraph',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n new InstrumentationNodeModuleFile(\n /**\n * In CJS, LangGraph packages re-export from dist/index.cjs files.\n * Patching only the root module sometimes misses the real implementation or\n * gets overwritten when that file is loaded. We add a file-level patch so that\n * _patch runs again on the concrete implementation\n */\n '@langchain/langgraph/dist/index.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n new InstrumentationNodeModuleFile(\n /**\n * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.\n * We add a file-level patch under the main module so that CJS require()\n * of @langchain/langgraph/prebuilt gets patched.\n */\n '@langchain/langgraph/dist/prebuilt/index.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n new InstrumentationNodeModuleDefinition(\n '@langchain/langgraph/prebuilt',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n [\n new InstrumentationNodeModuleFile(\n /**\n * In CJS, the prebuilt submodule re-exports from dist/prebuilt/index.cjs.\n * We add file-level patches so _patch runs on the concrete implementation.\n */\n '@langchain/langgraph/dist/prebuilt/index.cjs',\n supportedVersions,\n this._patch.bind(this),\n exports => exports,\n ),\n ],\n ),\n ];\n }\n\n /**\n * Core patch logic applying instrumentation to the LangGraph module.\n */\n private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n const client = getClient();\n const genAI = client?.getDataCollectionOptions().genAI;\n const options = {\n ...this.getConfig(),\n recordInputs: this.getConfig().recordInputs ?? genAI?.inputs ?? false,\n recordOutputs: this.getConfig().recordOutputs ?? genAI?.outputs ?? false,\n };\n\n // Patch StateGraph.compile to instrument both compile() and invoke()\n if (exports.StateGraph && typeof exports.StateGraph === 'function') {\n instrumentLangGraph(exports.StateGraph.prototype as { compile: (...args: unknown[]) => unknown }, options);\n }\n\n // Patch createReactAgent to instrument agent creation and invocation\n if (exports.createReactAgent && typeof exports.createReactAgent === 'function') {\n const originalCreateReactAgent = exports.createReactAgent;\n Object.defineProperty(exports, 'createReactAgent', {\n value: instrumentCreateReactAgent(originalCreateReactAgent as (...args: unknown[]) => CompiledGraph, options),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n return exports;\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","getClient","instrumentLangGraph","instrumentCreateReactAgent"],"mappings":";;;;;;AAUA,MAAM,iBAAA,GAAoB,CAAC,gBAAgB,CAAA;AAgBpC,MAAM,uCAAuCA,mCAAA,CAAqD;AAAA,EAChG,WAAA,CAAY,MAAA,GAA0C,EAAC,EAAG;AAC/D,IAAA,KAAA,CAAM,mCAAA,EAAqCC,kBAAa,MAAM,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAA0C;AAC/C,IAAA,OAAO;AAAA,MACL,IAAIC,mDAAA;AAAA,QACF,sBAAA;AAAA,QACA,iBAAA;AAAA,QACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,QACrB,CAAA,OAAA,KAAW,OAAA;AAAA,QACX;AAAA,UACE,IAAIC,2DAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOF,qCAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,YACrB,CAAA,OAAA,KAAW;AAAA,WACb;AAAA,UACA,IAAIA,2DAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMF,8CAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,YACrB,CAAA,OAAA,KAAW;AAAA;AACb;AACF,OACF;AAAA,MACA,IAAID,mDAAA;AAAA,QACF,+BAAA;AAAA,QACA,iBAAA;AAAA,QACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,QACrB,CAAA,OAAA,KAAW,OAAA;AAAA,QACX;AAAA,UACE,IAAIC,2DAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAKF,8CAAA;AAAA,YACA,iBAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,YACrB,CAAA,OAAA,KAAW;AAAA;AACb;AACF;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,OAAO,OAAA,EAA4D;AACzE,IAAA,MAAM,SAASC,cAAA,EAAU;AACzB,IAAA,MAAM,KAAA,GAAQ,MAAA,EAAQ,wBAAA,EAAyB,CAAE,KAAA;AACjD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,KAAK,SAAA,EAAU;AAAA,MAClB,cAAc,IAAA,CAAK,SAAA,EAAU,CAAE,YAAA,IAAgB,OAAO,MAAA,IAAU,KAAA;AAAA,MAChE,eAAe,IAAA,CAAK,SAAA,EAAU,CAAE,aAAA,IAAiB,OAAO,OAAA,IAAW;AAAA,KACrE;AAGA,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAO,OAAA,CAAQ,eAAe,UAAA,EAAY;AAClE,MAAAC,wBAAA,CAAoB,OAAA,CAAQ,UAAA,CAAW,SAAA,EAA2D,OAAO,CAAA;AAAA,IAC3G;AAGA,IAAA,IAAI,OAAA,CAAQ,gBAAA,IAAoB,OAAO,OAAA,CAAQ,qBAAqB,UAAA,EAAY;AAC9E,MAAA,MAAM,2BAA2B,OAAA,CAAQ,gBAAA;AACzC,MAAA,MAAA,CAAO,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,QACjD,KAAA,EAAOC,+BAAA,CAA2B,wBAAA,EAAmE,OAAO,CAAA;AAAA,QAC5G,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY,IAAA;AAAA,QACZ,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;;"}
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const api = require('@opentelemetry/api');
4
4
  const instrumentation = require('@opentelemetry/instrumentation');
5
+ const InstrumentationNodeModuleFile = require('../../InstrumentationNodeModuleFile.js');
5
6
  const semanticConventions = require('@opentelemetry/semantic-conventions');
6
7
  const semconv = require('./semconv.js');
7
8
  const internalTypes = require('./internal-types.js');
@@ -46,7 +47,7 @@ class MongoDBInstrumentation extends instrumentation.InstrumentationBase {
46
47
  const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();
47
48
  return [
48
49
  new instrumentation.InstrumentationNodeModuleDefinition("mongodb", [">=3.3.0 <4"], void 0, void 0, [
49
- new instrumentation.InstrumentationNodeModuleFile(
50
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
50
51
  "mongodb/lib/core/wireprotocol/index.js",
51
52
  [">=3.3.0 <4"],
52
53
  v3PatchConnection,
@@ -54,31 +55,31 @@ class MongoDBInstrumentation extends instrumentation.InstrumentationBase {
54
55
  )
55
56
  ]),
56
57
  new instrumentation.InstrumentationNodeModuleDefinition("mongodb", [">=4.0.0 <8"], void 0, void 0, [
57
- new instrumentation.InstrumentationNodeModuleFile(
58
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
58
59
  "mongodb/lib/cmap/connection.js",
59
60
  [">=4.0.0 <6.4"],
60
61
  v4PatchConnectionCallback,
61
62
  v4UnpatchConnection
62
63
  ),
63
- new instrumentation.InstrumentationNodeModuleFile(
64
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
64
65
  "mongodb/lib/cmap/connection.js",
65
66
  [">=6.4.0 <8"],
66
67
  v4PatchConnectionPromise,
67
68
  v4UnpatchConnection
68
69
  ),
69
- new instrumentation.InstrumentationNodeModuleFile(
70
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
70
71
  "mongodb/lib/cmap/connection_pool.js",
71
72
  [">=4.0.0 <6.4"],
72
73
  v4PatchConnectionPool,
73
74
  v4UnpatchConnectionPool
74
75
  ),
75
- new instrumentation.InstrumentationNodeModuleFile(
76
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
76
77
  "mongodb/lib/cmap/connect.js",
77
78
  [">=4.0.0 <8"],
78
79
  v4PatchConnect,
79
80
  v4UnpatchConnect
80
81
  ),
81
- new instrumentation.InstrumentationNodeModuleFile(
82
+ new InstrumentationNodeModuleFile.InstrumentationNodeModuleFile(
82
83
  "mongodb/lib/sessions.js",
83
84
  [">=4.0.0 <8"],
84
85
  v4PatchSessions,
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n */\n/* eslint-disable */\n\nimport { context, trace, Span, SpanKind, SpanStatusCode, UpDownCounter, type Attributes } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_DB_COLLECTION_NAME,\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_MONGODB_COLLECTION,\n ATTR_DB_NAME,\n ATTR_DB_OPERATION,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_NAME_VALUE_MONGODB,\n DB_SYSTEM_VALUE_MONGODB,\n METRIC_DB_CLIENT_CONNECTIONS_USAGE,\n} from './semconv';\nimport { MongoDBInstrumentationConfig, CommandResult } from './types';\nimport {\n CursorState,\n ServerSession,\n MongodbCommandType,\n MongoInternalCommand,\n MongodbNamespace,\n MongoInternalTopology,\n WireProtocolInternal,\n V4Connection,\n V4ConnectionPool,\n Replacer,\n} from './internal-types';\nimport { V4Connect, V4Session } from './internal-types';\nimport { SDK_VERSION } from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mongodb';\n\nconst DEFAULT_CONFIG: MongoDBInstrumentationConfig = {\n requireParentSpan: true,\n};\n\n/** mongodb instrumentation plugin for OpenTelemetry */\nexport class MongoDBInstrumentation extends InstrumentationBase<MongoDBInstrumentationConfig> {\n private _netSemconvStability!: SemconvStability;\n private _dbSemconvStability!: SemconvStability;\n declare private _connectionsUsage: UpDownCounter;\n declare private _poolName: string;\n\n constructor(config: MongoDBInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, { ...DEFAULT_CONFIG, ...config });\n this._setSemconvStabilityFromEnv();\n }\n\n // Used for testing.\n private _setSemconvStabilityFromEnv() {\n this._netSemconvStability = semconvStabilityFromStr('http', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n this._dbSemconvStability = semconvStabilityFromStr('database', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n }\n\n override setConfig(config: MongoDBInstrumentationConfig = {}) {\n super.setConfig({ ...DEFAULT_CONFIG, ...config });\n }\n\n override _updateMetricInstruments() {\n this._connectionsUsage = this.meter.createUpDownCounter(METRIC_DB_CLIENT_CONNECTIONS_USAGE, {\n description: 'The number of connections that are currently in state described by the state attribute.',\n unit: '{connection}',\n });\n }\n\n /**\n * Convenience function for updating the `db.client.connections.usage` metric.\n * The name \"count\" comes from the eventual replacement for this metric per\n * https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/#database-client-connection-count\n */\n private _connCountAdd(n: number, poolName: string, state: string) {\n this._connectionsUsage?.add(n, { 'pool.name': poolName, state });\n }\n\n init() {\n const { v3PatchConnection: v3PatchConnection, v3UnpatchConnection: v3UnpatchConnection } =\n this._getV3ConnectionPatches();\n\n const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches();\n const { v4PatchConnectionCallback, v4PatchConnectionPromise, v4UnpatchConnection } = this._getV4ConnectionPatches();\n const { v4PatchConnectionPool, v4UnpatchConnectionPool } = this._getV4ConnectionPoolPatches();\n const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();\n\n return [\n new InstrumentationNodeModuleDefinition('mongodb', ['>=3.3.0 <4'], undefined, undefined, [\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/core/wireprotocol/index.js',\n ['>=3.3.0 <4'],\n v3PatchConnection,\n v3UnpatchConnection,\n ),\n ]),\n new InstrumentationNodeModuleDefinition('mongodb', ['>=4.0.0 <8'], undefined, undefined, [\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connection.js',\n ['>=4.0.0 <6.4'],\n v4PatchConnectionCallback,\n v4UnpatchConnection,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connection.js',\n ['>=6.4.0 <8'],\n v4PatchConnectionPromise,\n v4UnpatchConnection,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connection_pool.js',\n ['>=4.0.0 <6.4'],\n v4PatchConnectionPool,\n v4UnpatchConnectionPool,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connect.js',\n ['>=4.0.0 <8'],\n v4PatchConnect,\n v4UnpatchConnect,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/sessions.js',\n ['>=4.0.0 <8'],\n v4PatchSessions,\n v4UnpatchSessions,\n ),\n ]),\n ];\n }\n\n private _getV3ConnectionPatches<T extends WireProtocolInternal>() {\n return {\n v3PatchConnection: (moduleExports: T) => {\n // patch insert operation\n if (isWrapped(moduleExports.insert)) {\n this._unwrap(moduleExports, 'insert');\n }\n this._wrap(moduleExports, 'insert', this._getV3PatchOperation('insert'));\n // patch remove operation\n if (isWrapped(moduleExports.remove)) {\n this._unwrap(moduleExports, 'remove');\n }\n this._wrap(moduleExports, 'remove', this._getV3PatchOperation('remove'));\n // patch update operation\n if (isWrapped(moduleExports.update)) {\n this._unwrap(moduleExports, 'update');\n }\n this._wrap(moduleExports, 'update', this._getV3PatchOperation('update'));\n // patch other command\n if (isWrapped(moduleExports.command)) {\n this._unwrap(moduleExports, 'command');\n }\n this._wrap(moduleExports, 'command', this._getV3PatchCommand());\n // patch query\n if (isWrapped(moduleExports.query)) {\n this._unwrap(moduleExports, 'query');\n }\n this._wrap(moduleExports, 'query', this._getV3PatchFind());\n // patch get more operation on cursor\n if (isWrapped(moduleExports.getMore)) {\n this._unwrap(moduleExports, 'getMore');\n }\n this._wrap(moduleExports, 'getMore', this._getV3PatchCursor());\n return moduleExports;\n },\n v3UnpatchConnection: (moduleExports?: T) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports, 'insert');\n this._unwrap(moduleExports, 'remove');\n this._unwrap(moduleExports, 'update');\n this._unwrap(moduleExports, 'command');\n this._unwrap(moduleExports, 'query');\n this._unwrap(moduleExports, 'getMore');\n },\n };\n }\n\n private _getV4SessionsPatches<T extends V4Session>() {\n return {\n v4PatchSessions: (moduleExports: any) => {\n if (isWrapped(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'acquire', this._getV4AcquireCommand());\n\n if (isWrapped(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'release', this._getV4ReleaseCommand());\n return moduleExports;\n },\n v4UnpatchSessions: (moduleExports?: T) => {\n if (moduleExports === undefined) return;\n if (isWrapped(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n if (isWrapped(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n },\n };\n }\n\n private _getV4AcquireCommand() {\n const instrumentation = this;\n return (original: V4Session['acquire']) => {\n return function patchAcquire(this: any) {\n const nSessionsBeforeAcquire = this.sessions.length;\n const session = original.call(this);\n const nSessionsAfterAcquire = this.sessions.length;\n\n if (nSessionsBeforeAcquire === nSessionsAfterAcquire) {\n //no session in the pool. a new session was created and used\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n } else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) {\n //a session was already in the pool. remove it from the pool and use it.\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n }\n return session;\n };\n };\n }\n\n private _getV4ReleaseCommand() {\n const instrumentation = this;\n return (original: V4Session['release']) => {\n return function patchRelease(this: any, session: ServerSession) {\n const cmdPromise = original.call(this, session);\n\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'used');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'idle');\n return cmdPromise;\n };\n };\n }\n\n private _getV4ConnectionPoolPatches<T extends V4ConnectionPool>() {\n return {\n v4PatchConnectionPool: (moduleExports: any) => {\n const poolPrototype = moduleExports.ConnectionPool.prototype;\n\n if (isWrapped(poolPrototype.checkOut)) {\n this._unwrap(poolPrototype, 'checkOut');\n }\n\n this._wrap(poolPrototype, 'checkOut', this._getV4ConnectionPoolCheckOut());\n return moduleExports;\n },\n v4UnpatchConnectionPool: (moduleExports?: any) => {\n if (moduleExports === undefined) return;\n\n this._unwrap(moduleExports.ConnectionPool.prototype, 'checkOut');\n },\n };\n }\n\n private _getV4ConnectPatches<T extends V4Connect>() {\n return {\n v4PatchConnect: (moduleExports: any) => {\n if (isWrapped(moduleExports.connect)) {\n this._unwrap(moduleExports, 'connect');\n }\n\n this._wrap(moduleExports, 'connect', this._getV4ConnectCommand());\n return moduleExports;\n },\n v4UnpatchConnect: (moduleExports?: T) => {\n if (moduleExports === undefined) return;\n\n this._unwrap(moduleExports, 'connect');\n },\n };\n }\n\n // This patch will become unnecessary once\n // https://jira.mongodb.org/browse/NODE-5639 is done.\n private _getV4ConnectionPoolCheckOut() {\n return (original: V4ConnectionPool['checkOut']) => {\n return function patchedCheckout(this: unknown, callback: any) {\n const patchedCallback = context.bind(context.active(), callback);\n return original.call(this, patchedCallback);\n };\n };\n }\n\n private _getV4ConnectCommand() {\n const instrumentation = this;\n\n return (original: V4Connect['connectCallback'] | V4Connect['connectPromise']) => {\n return function patchedConnect(this: unknown, options: any, callback: any) {\n // from v6.4 `connect` method only accepts an options param and returns a promise\n // with the connection\n if (original.length === 1) {\n const result = (original as V4Connect['connectPromise']).call(this, options);\n if (result && typeof result.then === 'function') {\n result.then(\n () => instrumentation.setPoolName(options),\n // this handler is set to pass the lint rules\n () => undefined,\n );\n }\n return result;\n }\n\n // Earlier versions expects a callback param and return void\n const patchedCallback = function (err: any, conn: any) {\n if (err || !conn) {\n callback(err, conn);\n return;\n }\n instrumentation.setPoolName(options);\n callback(err, conn);\n };\n\n return (original as V4Connect['connectCallback']).call(this, options, patchedCallback);\n };\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _getV4ConnectionPatches<T extends V4Connection>() {\n return {\n v4PatchConnectionCallback: (moduleExports: any) => {\n // patch insert operation\n if (isWrapped(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandCallback());\n return moduleExports;\n },\n v4PatchConnectionPromise: (moduleExports: any) => {\n // patch insert operation\n if (isWrapped(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandPromise());\n return moduleExports;\n },\n v4UnpatchConnection: (moduleExports?: any) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports.Connection.prototype, 'command');\n },\n };\n }\n\n /** Creates spans for common operations */\n private _getV3PatchOperation(operationName: 'insert' | 'update' | 'remove') {\n const instrumentation = this;\n return (original: WireProtocolInternal[typeof operationName]) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation || typeof resultHandler !== 'function' || typeof ops !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n } else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n\n const attributes = instrumentation._getV3SpanAttributes(\n ns,\n server,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ops[0] as any,\n operationName,\n );\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n } else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for command operation */\n private _getV3PatchCommand() {\n const instrumentation = this;\n return (original: WireProtocolInternal['command']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (skipInstrumentation || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n } else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n\n const commandType = MongoDBInstrumentation._getCommandType(cmd);\n const operationName = commandType === MongodbCommandType.UNKNOWN ? undefined : commandType;\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, operationName);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for command operation */\n private _getV4PatchCommandCallback() {\n const instrumentation = this;\n return (original: V4Connection['commandCallback']) => {\n return function patchedV4ServerCommand(\n this: any,\n ns: MongodbNamespace,\n cmd: any,\n options: undefined | unknown,\n callback: any,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.call(this, ns, cmd, options, callback);\n }\n\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n\n return original.call(this, ns, cmd, options, patchedCallback);\n };\n };\n }\n\n private _getV4PatchCommandPromise() {\n const instrumentation = this;\n return (original: V4Connection['commandPromise']) => {\n return function patchedV4ServerCommand(this: any, ...args: Parameters<V4Connection['commandPromise']>) {\n const [ns, cmd] = args;\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const commandType = Object.keys(cmd)[0];\n const resultHandler = () => undefined;\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.apply(this, args);\n }\n\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n\n const result = original.apply(this, args);\n result.then(\n (res: any) => patchedCallback(null, res),\n (err: any) => patchedCallback(err),\n );\n\n return result;\n };\n };\n }\n\n /** Creates spans for find operation */\n private _getV3PatchFind() {\n const instrumentation = this;\n return (original: WireProtocolInternal['query']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (skipInstrumentation || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, callback);\n }\n }\n\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, 'find');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for find operation */\n private _getV3PatchCursor() {\n const instrumentation = this;\n return (original: WireProtocolInternal['getMore']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (skipInstrumentation || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, options);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, callback);\n }\n }\n\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n }\n };\n };\n }\n\n /**\n * Get the mongodb command type from the object.\n * @param command Internal mongodb command object\n */\n private static _getCommandType(command: MongoInternalCommand): MongodbCommandType {\n if (command.createIndexes !== undefined) {\n return MongodbCommandType.CREATE_INDEXES;\n } else if (command.findandmodify !== undefined) {\n return MongodbCommandType.FIND_AND_MODIFY;\n } else if (command.ismaster !== undefined) {\n return MongodbCommandType.IS_MASTER;\n } else if (command.count !== undefined) {\n return MongodbCommandType.COUNT;\n } else if (command.aggregate !== undefined) {\n return MongodbCommandType.AGGREGATE;\n } else {\n return MongodbCommandType.UNKNOWN;\n }\n }\n\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param connectionCtx mongodb internal connection context\n * @param ns mongodb namespace\n * @param command mongodb internal representation of a command\n */\n private _getV4SpanAttributes(\n connectionCtx: any,\n ns: MongodbNamespace,\n command?: any,\n operation?: string,\n ): Attributes {\n let host, port: undefined | string;\n if (connectionCtx) {\n const hostParts = typeof connectionCtx.address === 'string' ? connectionCtx.address.split(':') : '';\n if (hostParts.length === 2) {\n host = hostParts[0];\n port = hostParts[1];\n }\n }\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n let commandObj: Record<string, unknown>;\n if (command?.documents && command.documents[0]) {\n commandObj = command.documents[0];\n } else if (command?.cursors) {\n commandObj = command.cursors;\n } else {\n commandObj = command;\n }\n\n return this._getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation);\n }\n\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param ns mongodb namespace\n * @param topology mongodb internal representation of the network topology\n * @param command mongodb internal representation of a command\n */\n private _getV3SpanAttributes(\n ns: string,\n topology: MongoInternalTopology,\n command?: MongoInternalCommand,\n operation?: string | undefined,\n ): Attributes {\n // Extract host/port info.\n let host: undefined | string;\n let port: undefined | string;\n if (topology && topology.s) {\n host = topology.s.options?.host ?? topology.s.host;\n port = (topology.s.options?.port ?? topology.s.port)?.toString();\n if (host == null || port == null) {\n const address = topology.description?.address;\n if (address) {\n const addressSegments = address.split(':');\n host = addressSegments[0];\n port = addressSegments[1];\n }\n }\n }\n\n // The namespace is a combination of the database name and the name of the\n // collection or index, like so: [database-name].[collection-or-index-name].\n // It could be a string or an instance of MongoDBNamespace, as such we\n // always coerce to a string to extract db and collection.\n const [dbName, dbCollection] = ns.toString().split('.');\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n const commandObj = command?.query ?? command?.q ?? command;\n\n return this._getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation);\n }\n\n private _getSpanAttributes(\n dbName?: string,\n dbCollection?: string,\n host?: undefined | string,\n port?: undefined | string,\n commandObj?: any,\n operation?: string | undefined,\n ): Attributes {\n const attributes: Attributes = {};\n\n if (this._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_SYSTEM] = DB_SYSTEM_VALUE_MONGODB;\n attributes[ATTR_DB_NAME] = dbName;\n attributes[ATTR_DB_MONGODB_COLLECTION] = dbCollection;\n attributes[ATTR_DB_OPERATION] = operation;\n attributes[ATTR_DB_CONNECTION_STRING] = `mongodb://${host}:${port}/${dbName}`;\n }\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_SYSTEM_NAME] = DB_SYSTEM_NAME_VALUE_MONGODB;\n attributes[ATTR_DB_NAMESPACE] = dbName;\n attributes[ATTR_DB_OPERATION_NAME] = operation;\n attributes[ATTR_DB_COLLECTION_NAME] = dbCollection;\n }\n\n if (host && port) {\n if (this._netSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_NET_PEER_NAME] = host;\n }\n if (this._netSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_SERVER_ADDRESS] = host;\n }\n const portNumber = parseInt(port, 10);\n if (!isNaN(portNumber)) {\n if (this._netSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_NET_PEER_PORT] = portNumber;\n }\n if (this._netSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_SERVER_PORT] = portNumber;\n }\n }\n }\n\n if (commandObj) {\n const { dbStatementSerializer: configDbStatementSerializer } = this.getConfig();\n const dbStatementSerializer =\n typeof configDbStatementSerializer === 'function'\n ? configDbStatementSerializer\n : this._defaultDbStatementSerializer.bind(this);\n\n safeExecuteInTheMiddle(\n () => {\n const query = dbStatementSerializer(commandObj);\n if (this._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = query;\n }\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = query;\n }\n },\n err => {\n if (err) {\n this._diag.error('Error running dbStatementSerializer hook', err);\n }\n },\n true,\n );\n }\n\n return attributes;\n }\n\n private _spanNameFromAttrs(attributes: Attributes): string {\n let spanName;\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n // https://opentelemetry.io/docs/specs/semconv/database/database-spans/#name\n spanName =\n [attributes[ATTR_DB_OPERATION_NAME], attributes[ATTR_DB_COLLECTION_NAME]].filter(attr => attr).join(' ') ||\n DB_SYSTEM_NAME_VALUE_MONGODB;\n } else {\n spanName = `mongodb.${attributes[ATTR_DB_OPERATION] || 'command'}`;\n }\n return spanName;\n }\n\n private _getDefaultDbStatementReplacer(): Replacer {\n const seen = new WeakSet();\n return (_key, value) => {\n // undefined, boolean, number, bigint, string, symbol, function || null\n if (typeof value !== 'object' || !value) return '?';\n\n // objects (including arrays)\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n return value;\n };\n }\n\n private _defaultDbStatementSerializer(commandObj: Record<string, unknown>) {\n const { enhancedDatabaseReporting } = this.getConfig();\n\n if (enhancedDatabaseReporting) {\n return JSON.stringify(commandObj);\n }\n\n return JSON.stringify(commandObj, this._getDefaultDbStatementReplacer());\n }\n\n /**\n * Triggers the response hook in case it is defined.\n * @param span The span to add the results to.\n * @param result The command result\n */\n private _handleExecutionResult(span: Span, result: CommandResult) {\n const { responseHook } = this.getConfig();\n if (typeof responseHook === 'function') {\n safeExecuteInTheMiddle(\n () => {\n responseHook(span, { data: result });\n },\n err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n },\n true,\n );\n }\n }\n\n /**\n * Ends a created span.\n * @param span The created span to end.\n * @param resultHandler A callback function.\n * @param connectionId: The connection ID of the Command response.\n */\n private _patchEnd(\n span: Span | undefined,\n resultHandler: Function,\n connectionId?: number,\n commandType?: string,\n ): Function {\n // mongodb is using \"tick\" when calling a callback, this way the context\n // in final callback (resultHandler) is lost\n const activeContext = context.active();\n const instrumentation = this;\n let spanEnded = false;\n\n return function patchedEnd(this: {}, ...args: unknown[]) {\n if (!spanEnded) {\n spanEnded = true;\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n } else {\n const result = args[1] as CommandResult;\n instrumentation._handleExecutionResult(span, result);\n }\n span.end();\n }\n\n if (commandType === 'endSessions') {\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n }\n }\n\n return context.with(activeContext, () => {\n return resultHandler.apply(this, args);\n });\n };\n }\n private setPoolName(options: any) {\n const host = options.hostAddress?.host;\n const port = options.hostAddress?.port;\n const database = options.dbName;\n const poolName = `mongodb://${host}:${port}/${database}`;\n this._poolName = poolName;\n }\n\n private _checkSkipInstrumentation(currentSpan: Span | undefined) {\n const requireParentSpan = this.getConfig().requireParentSpan;\n const hasNoParentSpan = currentSpan === undefined;\n return requireParentSpan === true && hasNoParentSpan;\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","semconvStabilityFromStr","METRIC_DB_CLIENT_CONNECTIONS_USAGE","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","context","trace","SpanKind","MongodbCommandType","SemconvStability","ATTR_DB_SYSTEM","DB_SYSTEM_VALUE_MONGODB","ATTR_DB_NAME","ATTR_DB_MONGODB_COLLECTION","ATTR_DB_OPERATION","ATTR_DB_CONNECTION_STRING","ATTR_DB_SYSTEM_NAME","DB_SYSTEM_NAME_VALUE_MONGODB","ATTR_DB_NAMESPACE","ATTR_DB_OPERATION_NAME","ATTR_DB_COLLECTION_NAME","ATTR_NET_PEER_NAME","ATTR_SERVER_ADDRESS","ATTR_NET_PEER_PORT","ATTR_SERVER_PORT","safeExecuteInTheMiddle","ATTR_DB_STATEMENT","ATTR_DB_QUERY_TEXT","SpanStatusCode"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n */\n/* eslint-disable */\n\nimport { context, trace, Span, SpanKind, SpanStatusCode, UpDownCounter, type Attributes } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n isWrapped,\n safeExecuteInTheMiddle,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport {\n ATTR_DB_COLLECTION_NAME,\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_MONGODB_COLLECTION,\n ATTR_DB_NAME,\n ATTR_DB_OPERATION,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_NAME_VALUE_MONGODB,\n DB_SYSTEM_VALUE_MONGODB,\n METRIC_DB_CLIENT_CONNECTIONS_USAGE,\n} from './semconv';\nimport { MongoDBInstrumentationConfig, CommandResult } from './types';\nimport {\n CursorState,\n ServerSession,\n MongodbCommandType,\n MongoInternalCommand,\n MongodbNamespace,\n MongoInternalTopology,\n WireProtocolInternal,\n V4Connection,\n V4ConnectionPool,\n Replacer,\n} from './internal-types';\nimport { V4Connect, V4Session } from './internal-types';\nimport { SDK_VERSION } from '@sentry/core';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mongodb';\n\nconst DEFAULT_CONFIG: MongoDBInstrumentationConfig = {\n requireParentSpan: true,\n};\n\n/** mongodb instrumentation plugin for OpenTelemetry */\nexport class MongoDBInstrumentation extends InstrumentationBase<MongoDBInstrumentationConfig> {\n private _netSemconvStability!: SemconvStability;\n private _dbSemconvStability!: SemconvStability;\n declare private _connectionsUsage: UpDownCounter;\n declare private _poolName: string;\n\n constructor(config: MongoDBInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, { ...DEFAULT_CONFIG, ...config });\n this._setSemconvStabilityFromEnv();\n }\n\n // Used for testing.\n private _setSemconvStabilityFromEnv() {\n this._netSemconvStability = semconvStabilityFromStr('http', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n this._dbSemconvStability = semconvStabilityFromStr('database', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n }\n\n override setConfig(config: MongoDBInstrumentationConfig = {}) {\n super.setConfig({ ...DEFAULT_CONFIG, ...config });\n }\n\n override _updateMetricInstruments() {\n this._connectionsUsage = this.meter.createUpDownCounter(METRIC_DB_CLIENT_CONNECTIONS_USAGE, {\n description: 'The number of connections that are currently in state described by the state attribute.',\n unit: '{connection}',\n });\n }\n\n /**\n * Convenience function for updating the `db.client.connections.usage` metric.\n * The name \"count\" comes from the eventual replacement for this metric per\n * https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/#database-client-connection-count\n */\n private _connCountAdd(n: number, poolName: string, state: string) {\n this._connectionsUsage?.add(n, { 'pool.name': poolName, state });\n }\n\n init() {\n const { v3PatchConnection: v3PatchConnection, v3UnpatchConnection: v3UnpatchConnection } =\n this._getV3ConnectionPatches();\n\n const { v4PatchConnect, v4UnpatchConnect } = this._getV4ConnectPatches();\n const { v4PatchConnectionCallback, v4PatchConnectionPromise, v4UnpatchConnection } = this._getV4ConnectionPatches();\n const { v4PatchConnectionPool, v4UnpatchConnectionPool } = this._getV4ConnectionPoolPatches();\n const { v4PatchSessions, v4UnpatchSessions } = this._getV4SessionsPatches();\n\n return [\n new InstrumentationNodeModuleDefinition('mongodb', ['>=3.3.0 <4'], undefined, undefined, [\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/core/wireprotocol/index.js',\n ['>=3.3.0 <4'],\n v3PatchConnection,\n v3UnpatchConnection,\n ),\n ]),\n new InstrumentationNodeModuleDefinition('mongodb', ['>=4.0.0 <8'], undefined, undefined, [\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connection.js',\n ['>=4.0.0 <6.4'],\n v4PatchConnectionCallback,\n v4UnpatchConnection,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connection.js',\n ['>=6.4.0 <8'],\n v4PatchConnectionPromise,\n v4UnpatchConnection,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connection_pool.js',\n ['>=4.0.0 <6.4'],\n v4PatchConnectionPool,\n v4UnpatchConnectionPool,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/cmap/connect.js',\n ['>=4.0.0 <8'],\n v4PatchConnect,\n v4UnpatchConnect,\n ),\n new InstrumentationNodeModuleFile(\n 'mongodb/lib/sessions.js',\n ['>=4.0.0 <8'],\n v4PatchSessions,\n v4UnpatchSessions,\n ),\n ]),\n ];\n }\n\n private _getV3ConnectionPatches<T extends WireProtocolInternal>() {\n return {\n v3PatchConnection: (moduleExports: T) => {\n // patch insert operation\n if (isWrapped(moduleExports.insert)) {\n this._unwrap(moduleExports, 'insert');\n }\n this._wrap(moduleExports, 'insert', this._getV3PatchOperation('insert'));\n // patch remove operation\n if (isWrapped(moduleExports.remove)) {\n this._unwrap(moduleExports, 'remove');\n }\n this._wrap(moduleExports, 'remove', this._getV3PatchOperation('remove'));\n // patch update operation\n if (isWrapped(moduleExports.update)) {\n this._unwrap(moduleExports, 'update');\n }\n this._wrap(moduleExports, 'update', this._getV3PatchOperation('update'));\n // patch other command\n if (isWrapped(moduleExports.command)) {\n this._unwrap(moduleExports, 'command');\n }\n this._wrap(moduleExports, 'command', this._getV3PatchCommand());\n // patch query\n if (isWrapped(moduleExports.query)) {\n this._unwrap(moduleExports, 'query');\n }\n this._wrap(moduleExports, 'query', this._getV3PatchFind());\n // patch get more operation on cursor\n if (isWrapped(moduleExports.getMore)) {\n this._unwrap(moduleExports, 'getMore');\n }\n this._wrap(moduleExports, 'getMore', this._getV3PatchCursor());\n return moduleExports;\n },\n v3UnpatchConnection: (moduleExports?: T) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports, 'insert');\n this._unwrap(moduleExports, 'remove');\n this._unwrap(moduleExports, 'update');\n this._unwrap(moduleExports, 'command');\n this._unwrap(moduleExports, 'query');\n this._unwrap(moduleExports, 'getMore');\n },\n };\n }\n\n private _getV4SessionsPatches<T extends V4Session>() {\n return {\n v4PatchSessions: (moduleExports: any) => {\n if (isWrapped(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'acquire', this._getV4AcquireCommand());\n\n if (isWrapped(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n this._wrap(moduleExports.ServerSessionPool.prototype, 'release', this._getV4ReleaseCommand());\n return moduleExports;\n },\n v4UnpatchSessions: (moduleExports?: T) => {\n if (moduleExports === undefined) return;\n if (isWrapped(moduleExports.acquire)) {\n this._unwrap(moduleExports, 'acquire');\n }\n if (isWrapped(moduleExports.release)) {\n this._unwrap(moduleExports, 'release');\n }\n },\n };\n }\n\n private _getV4AcquireCommand() {\n const instrumentation = this;\n return (original: V4Session['acquire']) => {\n return function patchAcquire(this: any) {\n const nSessionsBeforeAcquire = this.sessions.length;\n const session = original.call(this);\n const nSessionsAfterAcquire = this.sessions.length;\n\n if (nSessionsBeforeAcquire === nSessionsAfterAcquire) {\n //no session in the pool. a new session was created and used\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n } else if (nSessionsBeforeAcquire - 1 === nSessionsAfterAcquire) {\n //a session was already in the pool. remove it from the pool and use it.\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'used');\n }\n return session;\n };\n };\n }\n\n private _getV4ReleaseCommand() {\n const instrumentation = this;\n return (original: V4Session['release']) => {\n return function patchRelease(this: any, session: ServerSession) {\n const cmdPromise = original.call(this, session);\n\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'used');\n instrumentation._connCountAdd(1, instrumentation._poolName, 'idle');\n return cmdPromise;\n };\n };\n }\n\n private _getV4ConnectionPoolPatches<T extends V4ConnectionPool>() {\n return {\n v4PatchConnectionPool: (moduleExports: any) => {\n const poolPrototype = moduleExports.ConnectionPool.prototype;\n\n if (isWrapped(poolPrototype.checkOut)) {\n this._unwrap(poolPrototype, 'checkOut');\n }\n\n this._wrap(poolPrototype, 'checkOut', this._getV4ConnectionPoolCheckOut());\n return moduleExports;\n },\n v4UnpatchConnectionPool: (moduleExports?: any) => {\n if (moduleExports === undefined) return;\n\n this._unwrap(moduleExports.ConnectionPool.prototype, 'checkOut');\n },\n };\n }\n\n private _getV4ConnectPatches<T extends V4Connect>() {\n return {\n v4PatchConnect: (moduleExports: any) => {\n if (isWrapped(moduleExports.connect)) {\n this._unwrap(moduleExports, 'connect');\n }\n\n this._wrap(moduleExports, 'connect', this._getV4ConnectCommand());\n return moduleExports;\n },\n v4UnpatchConnect: (moduleExports?: T) => {\n if (moduleExports === undefined) return;\n\n this._unwrap(moduleExports, 'connect');\n },\n };\n }\n\n // This patch will become unnecessary once\n // https://jira.mongodb.org/browse/NODE-5639 is done.\n private _getV4ConnectionPoolCheckOut() {\n return (original: V4ConnectionPool['checkOut']) => {\n return function patchedCheckout(this: unknown, callback: any) {\n const patchedCallback = context.bind(context.active(), callback);\n return original.call(this, patchedCallback);\n };\n };\n }\n\n private _getV4ConnectCommand() {\n const instrumentation = this;\n\n return (original: V4Connect['connectCallback'] | V4Connect['connectPromise']) => {\n return function patchedConnect(this: unknown, options: any, callback: any) {\n // from v6.4 `connect` method only accepts an options param and returns a promise\n // with the connection\n if (original.length === 1) {\n const result = (original as V4Connect['connectPromise']).call(this, options);\n if (result && typeof result.then === 'function') {\n result.then(\n () => instrumentation.setPoolName(options),\n // this handler is set to pass the lint rules\n () => undefined,\n );\n }\n return result;\n }\n\n // Earlier versions expects a callback param and return void\n const patchedCallback = function (err: any, conn: any) {\n if (err || !conn) {\n callback(err, conn);\n return;\n }\n instrumentation.setPoolName(options);\n callback(err, conn);\n };\n\n return (original as V4Connect['connectCallback']).call(this, options, patchedCallback);\n };\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _getV4ConnectionPatches<T extends V4Connection>() {\n return {\n v4PatchConnectionCallback: (moduleExports: any) => {\n // patch insert operation\n if (isWrapped(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandCallback());\n return moduleExports;\n },\n v4PatchConnectionPromise: (moduleExports: any) => {\n // patch insert operation\n if (isWrapped(moduleExports.Connection.prototype.command)) {\n this._unwrap(moduleExports.Connection.prototype, 'command');\n }\n\n this._wrap(moduleExports.Connection.prototype, 'command', this._getV4PatchCommandPromise());\n return moduleExports;\n },\n v4UnpatchConnection: (moduleExports?: any) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports.Connection.prototype, 'command');\n },\n };\n }\n\n /** Creates spans for common operations */\n private _getV3PatchOperation(operationName: 'insert' | 'update' | 'remove') {\n const instrumentation = this;\n return (original: WireProtocolInternal[typeof operationName]) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const resultHandler = typeof options === 'function' ? options : callback;\n if (skipInstrumentation || typeof resultHandler !== 'function' || typeof ops !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, options);\n } else {\n return original.call(this, server, ns, ops, options, callback);\n }\n }\n\n const attributes = instrumentation._getV3SpanAttributes(\n ns,\n server,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ops[0] as any,\n operationName,\n );\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, ops, patchedCallback);\n } else {\n return original.call(this, server, ns, ops, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for command operation */\n private _getV3PatchCommand() {\n const instrumentation = this;\n return (original: WireProtocolInternal['command']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (skipInstrumentation || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, options);\n } else {\n return original.call(this, server, ns, cmd, options, callback);\n }\n }\n\n const commandType = MongoDBInstrumentation._getCommandType(cmd);\n const operationName = commandType === MongodbCommandType.UNKNOWN ? undefined : commandType;\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, operationName);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for command operation */\n private _getV4PatchCommandCallback() {\n const instrumentation = this;\n return (original: V4Connection['commandCallback']) => {\n return function patchedV4ServerCommand(\n this: any,\n ns: MongodbNamespace,\n cmd: any,\n options: undefined | unknown,\n callback: any,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = callback;\n const commandType = Object.keys(cmd)[0];\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.call(this, ns, cmd, options, callback);\n }\n\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n\n return original.call(this, ns, cmd, options, patchedCallback);\n };\n };\n }\n\n private _getV4PatchCommandPromise() {\n const instrumentation = this;\n return (original: V4Connection['commandPromise']) => {\n return function patchedV4ServerCommand(this: any, ...args: Parameters<V4Connection['commandPromise']>) {\n const [ns, cmd] = args;\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const commandType = Object.keys(cmd)[0];\n const resultHandler = () => undefined;\n\n if (typeof cmd !== 'object' || cmd.ismaster || cmd.hello) {\n return original.apply(this, args);\n }\n\n let span = undefined;\n if (!skipInstrumentation) {\n const attributes = instrumentation._getV4SpanAttributes(this, ns, cmd, commandType);\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n }\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler, this.id, commandType);\n\n const result = original.apply(this, args);\n result.then(\n (res: any) => patchedCallback(null, res),\n (err: any) => patchedCallback(err),\n );\n\n return result;\n };\n };\n }\n\n /** Creates spans for find operation */\n private _getV3PatchFind() {\n const instrumentation = this;\n return (original: WireProtocolInternal['query']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (skipInstrumentation || typeof resultHandler !== 'function' || typeof cmd !== 'object') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, options);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, callback);\n }\n }\n\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cmd, 'find');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cmd, cursorState, patchedCallback);\n } else {\n return original.call(this, server, ns, cmd, cursorState, options, patchedCallback);\n }\n };\n };\n }\n\n /** Creates spans for find operation */\n private _getV3PatchCursor() {\n const instrumentation = this;\n return (original: WireProtocolInternal['getMore']) => {\n return function patchedServerCommand(\n this: unknown,\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function,\n ) {\n const currentSpan = trace.getSpan(context.active());\n const skipInstrumentation = instrumentation._checkSkipInstrumentation(currentSpan);\n\n const resultHandler = typeof options === 'function' ? options : callback;\n\n if (skipInstrumentation || typeof resultHandler !== 'function') {\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, options);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, callback);\n }\n }\n\n const attributes = instrumentation._getV3SpanAttributes(ns, server, cursorState.cmd, 'getMore');\n const spanName = instrumentation._spanNameFromAttrs(attributes);\n const span = instrumentation.tracer.startSpan(spanName, {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n const patchedCallback = instrumentation._patchEnd(span, resultHandler);\n // handle when options is the callback to send the correct number of args\n if (typeof options === 'function') {\n return original.call(this, server, ns, cursorState, batchSize, patchedCallback);\n } else {\n return original.call(this, server, ns, cursorState, batchSize, options, patchedCallback);\n }\n };\n };\n }\n\n /**\n * Get the mongodb command type from the object.\n * @param command Internal mongodb command object\n */\n private static _getCommandType(command: MongoInternalCommand): MongodbCommandType {\n if (command.createIndexes !== undefined) {\n return MongodbCommandType.CREATE_INDEXES;\n } else if (command.findandmodify !== undefined) {\n return MongodbCommandType.FIND_AND_MODIFY;\n } else if (command.ismaster !== undefined) {\n return MongodbCommandType.IS_MASTER;\n } else if (command.count !== undefined) {\n return MongodbCommandType.COUNT;\n } else if (command.aggregate !== undefined) {\n return MongodbCommandType.AGGREGATE;\n } else {\n return MongodbCommandType.UNKNOWN;\n }\n }\n\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param connectionCtx mongodb internal connection context\n * @param ns mongodb namespace\n * @param command mongodb internal representation of a command\n */\n private _getV4SpanAttributes(\n connectionCtx: any,\n ns: MongodbNamespace,\n command?: any,\n operation?: string,\n ): Attributes {\n let host, port: undefined | string;\n if (connectionCtx) {\n const hostParts = typeof connectionCtx.address === 'string' ? connectionCtx.address.split(':') : '';\n if (hostParts.length === 2) {\n host = hostParts[0];\n port = hostParts[1];\n }\n }\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n let commandObj: Record<string, unknown>;\n if (command?.documents && command.documents[0]) {\n commandObj = command.documents[0];\n } else if (command?.cursors) {\n commandObj = command.cursors;\n } else {\n commandObj = command;\n }\n\n return this._getSpanAttributes(ns.db, ns.collection, host, port, commandObj, operation);\n }\n\n /**\n * Determine a span's attributes by fetching related metadata from the context\n * @param ns mongodb namespace\n * @param topology mongodb internal representation of the network topology\n * @param command mongodb internal representation of a command\n */\n private _getV3SpanAttributes(\n ns: string,\n topology: MongoInternalTopology,\n command?: MongoInternalCommand,\n operation?: string | undefined,\n ): Attributes {\n // Extract host/port info.\n let host: undefined | string;\n let port: undefined | string;\n if (topology && topology.s) {\n host = topology.s.options?.host ?? topology.s.host;\n port = (topology.s.options?.port ?? topology.s.port)?.toString();\n if (host == null || port == null) {\n const address = topology.description?.address;\n if (address) {\n const addressSegments = address.split(':');\n host = addressSegments[0];\n port = addressSegments[1];\n }\n }\n }\n\n // The namespace is a combination of the database name and the name of the\n // collection or index, like so: [database-name].[collection-or-index-name].\n // It could be a string or an instance of MongoDBNamespace, as such we\n // always coerce to a string to extract db and collection.\n const [dbName, dbCollection] = ns.toString().split('.');\n // capture parameters within the query as well if enhancedDatabaseReporting is enabled.\n const commandObj = command?.query ?? command?.q ?? command;\n\n return this._getSpanAttributes(dbName, dbCollection, host, port, commandObj, operation);\n }\n\n private _getSpanAttributes(\n dbName?: string,\n dbCollection?: string,\n host?: undefined | string,\n port?: undefined | string,\n commandObj?: any,\n operation?: string | undefined,\n ): Attributes {\n const attributes: Attributes = {};\n\n if (this._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_SYSTEM] = DB_SYSTEM_VALUE_MONGODB;\n attributes[ATTR_DB_NAME] = dbName;\n attributes[ATTR_DB_MONGODB_COLLECTION] = dbCollection;\n attributes[ATTR_DB_OPERATION] = operation;\n attributes[ATTR_DB_CONNECTION_STRING] = `mongodb://${host}:${port}/${dbName}`;\n }\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_SYSTEM_NAME] = DB_SYSTEM_NAME_VALUE_MONGODB;\n attributes[ATTR_DB_NAMESPACE] = dbName;\n attributes[ATTR_DB_OPERATION_NAME] = operation;\n attributes[ATTR_DB_COLLECTION_NAME] = dbCollection;\n }\n\n if (host && port) {\n if (this._netSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_NET_PEER_NAME] = host;\n }\n if (this._netSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_SERVER_ADDRESS] = host;\n }\n const portNumber = parseInt(port, 10);\n if (!isNaN(portNumber)) {\n if (this._netSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_NET_PEER_PORT] = portNumber;\n }\n if (this._netSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_SERVER_PORT] = portNumber;\n }\n }\n }\n\n if (commandObj) {\n const { dbStatementSerializer: configDbStatementSerializer } = this.getConfig();\n const dbStatementSerializer =\n typeof configDbStatementSerializer === 'function'\n ? configDbStatementSerializer\n : this._defaultDbStatementSerializer.bind(this);\n\n safeExecuteInTheMiddle(\n () => {\n const query = dbStatementSerializer(commandObj);\n if (this._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_STATEMENT] = query;\n }\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_QUERY_TEXT] = query;\n }\n },\n err => {\n if (err) {\n this._diag.error('Error running dbStatementSerializer hook', err);\n }\n },\n true,\n );\n }\n\n return attributes;\n }\n\n private _spanNameFromAttrs(attributes: Attributes): string {\n let spanName;\n if (this._dbSemconvStability & SemconvStability.STABLE) {\n // https://opentelemetry.io/docs/specs/semconv/database/database-spans/#name\n spanName =\n [attributes[ATTR_DB_OPERATION_NAME], attributes[ATTR_DB_COLLECTION_NAME]].filter(attr => attr).join(' ') ||\n DB_SYSTEM_NAME_VALUE_MONGODB;\n } else {\n spanName = `mongodb.${attributes[ATTR_DB_OPERATION] || 'command'}`;\n }\n return spanName;\n }\n\n private _getDefaultDbStatementReplacer(): Replacer {\n const seen = new WeakSet();\n return (_key, value) => {\n // undefined, boolean, number, bigint, string, symbol, function || null\n if (typeof value !== 'object' || !value) return '?';\n\n // objects (including arrays)\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n return value;\n };\n }\n\n private _defaultDbStatementSerializer(commandObj: Record<string, unknown>) {\n const { enhancedDatabaseReporting } = this.getConfig();\n\n if (enhancedDatabaseReporting) {\n return JSON.stringify(commandObj);\n }\n\n return JSON.stringify(commandObj, this._getDefaultDbStatementReplacer());\n }\n\n /**\n * Triggers the response hook in case it is defined.\n * @param span The span to add the results to.\n * @param result The command result\n */\n private _handleExecutionResult(span: Span, result: CommandResult) {\n const { responseHook } = this.getConfig();\n if (typeof responseHook === 'function') {\n safeExecuteInTheMiddle(\n () => {\n responseHook(span, { data: result });\n },\n err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n },\n true,\n );\n }\n }\n\n /**\n * Ends a created span.\n * @param span The created span to end.\n * @param resultHandler A callback function.\n * @param connectionId: The connection ID of the Command response.\n */\n private _patchEnd(\n span: Span | undefined,\n resultHandler: Function,\n connectionId?: number,\n commandType?: string,\n ): Function {\n // mongodb is using \"tick\" when calling a callback, this way the context\n // in final callback (resultHandler) is lost\n const activeContext = context.active();\n const instrumentation = this;\n let spanEnded = false;\n\n return function patchedEnd(this: {}, ...args: unknown[]) {\n if (!spanEnded) {\n spanEnded = true;\n const error = args[0];\n if (span) {\n if (error instanceof Error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n } else {\n const result = args[1] as CommandResult;\n instrumentation._handleExecutionResult(span, result);\n }\n span.end();\n }\n\n if (commandType === 'endSessions') {\n instrumentation._connCountAdd(-1, instrumentation._poolName, 'idle');\n }\n }\n\n return context.with(activeContext, () => {\n return resultHandler.apply(this, args);\n });\n };\n }\n private setPoolName(options: any) {\n const host = options.hostAddress?.host;\n const port = options.hostAddress?.port;\n const database = options.dbName;\n const poolName = `mongodb://${host}:${port}/${database}`;\n this._poolName = poolName;\n }\n\n private _checkSkipInstrumentation(currentSpan: Span | undefined) {\n const requireParentSpan = this.getConfig().requireParentSpan;\n const hasNoParentSpan = currentSpan === undefined;\n return requireParentSpan === true && hasNoParentSpan;\n }\n}\n"],"names":["InstrumentationBase","SDK_VERSION","semconvStabilityFromStr","METRIC_DB_CLIENT_CONNECTIONS_USAGE","InstrumentationNodeModuleDefinition","InstrumentationNodeModuleFile","isWrapped","context","trace","SpanKind","MongodbCommandType","SemconvStability","ATTR_DB_SYSTEM","DB_SYSTEM_VALUE_MONGODB","ATTR_DB_NAME","ATTR_DB_MONGODB_COLLECTION","ATTR_DB_OPERATION","ATTR_DB_CONNECTION_STRING","ATTR_DB_SYSTEM_NAME","DB_SYSTEM_NAME_VALUE_MONGODB","ATTR_DB_NAMESPACE","ATTR_DB_OPERATION_NAME","ATTR_DB_COLLECTION_NAME","ATTR_NET_PEER_NAME","ATTR_SERVER_ADDRESS","ATTR_NET_PEER_PORT","ATTR_SERVER_PORT","safeExecuteInTheMiddle","ATTR_DB_STATEMENT","ATTR_DB_QUERY_TEXT","SpanStatusCode"],"mappings":"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"}