@sentry/node 10.55.0 → 10.57.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 (185) 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/index.js.map +1 -1
  22. package/build/cjs/integrations/tracing/google-genai/instrumentation.js +2 -1
  23. package/build/cjs/integrations/tracing/google-genai/instrumentation.js.map +1 -1
  24. package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js +4 -3
  25. package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
  26. package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js +2 -5
  27. package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
  28. package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +3 -2
  29. package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
  30. package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +3 -4
  31. package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
  32. package/build/cjs/integrations/tracing/langchain/index.js.map +1 -1
  33. package/build/cjs/integrations/tracing/langchain/instrumentation.js +3 -2
  34. package/build/cjs/integrations/tracing/langchain/instrumentation.js.map +1 -1
  35. package/build/cjs/integrations/tracing/langgraph/index.js.map +1 -1
  36. package/build/cjs/integrations/tracing/langgraph/instrumentation.js +7 -5
  37. package/build/cjs/integrations/tracing/langgraph/instrumentation.js.map +1 -1
  38. package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js +8 -11
  39. package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
  40. package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js +7 -6
  41. package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
  42. package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +3 -2
  43. package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
  44. package/build/cjs/integrations/tracing/openai/index.js.map +1 -1
  45. package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js +5 -5
  46. package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js.map +1 -1
  47. package/build/cjs/integrations/tracing/postgresjs.js +3 -2
  48. package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
  49. package/build/cjs/integrations/tracing/redis/index.js +3 -2
  50. package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
  51. package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +1 -1
  52. package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
  53. package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +4 -3
  54. package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
  55. package/build/cjs/integrations/tracing/utils/sql-common.js.map +1 -1
  56. package/build/cjs/integrations/tracing/vercelai/instrumentation.js +6 -5
  57. package/build/cjs/integrations/tracing/vercelai/instrumentation.js.map +1 -1
  58. package/build/cjs/utils/setHttpServerSpanRouteAttribute.js +21 -0
  59. package/build/cjs/utils/setHttpServerSpanRouteAttribute.js.map +1 -0
  60. package/build/esm/integrations/node-fetch/vendored/undici.js +3 -4
  61. package/build/esm/integrations/node-fetch/vendored/undici.js.map +1 -1
  62. package/build/esm/integrations/tracing/InstrumentationNodeModuleFile.js +13 -0
  63. package/build/esm/integrations/tracing/InstrumentationNodeModuleFile.js.map +1 -0
  64. package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js +7 -7
  65. package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
  66. package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
  67. package/build/esm/integrations/tracing/anthropic-ai/index.js.map +1 -1
  68. package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +3 -5
  69. package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
  70. package/build/esm/integrations/tracing/express.js +3 -5
  71. package/build/esm/integrations/tracing/express.js.map +1 -1
  72. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +3 -4
  73. package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
  74. package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js +3 -4
  75. package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
  76. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +2 -1
  77. package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
  78. package/build/esm/integrations/tracing/firebase/otel/patches/functions.js +2 -1
  79. package/build/esm/integrations/tracing/firebase/otel/patches/functions.js.map +1 -1
  80. package/build/esm/integrations/tracing/google-genai/index.js.map +1 -1
  81. package/build/esm/integrations/tracing/google-genai/instrumentation.js +2 -1
  82. package/build/esm/integrations/tracing/google-genai/instrumentation.js.map +1 -1
  83. package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js +2 -1
  84. package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
  85. package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js +2 -5
  86. package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
  87. package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +2 -1
  88. package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
  89. package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +3 -4
  90. package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
  91. package/build/esm/integrations/tracing/langchain/index.js.map +1 -1
  92. package/build/esm/integrations/tracing/langchain/instrumentation.js +2 -1
  93. package/build/esm/integrations/tracing/langchain/instrumentation.js.map +1 -1
  94. package/build/esm/integrations/tracing/langgraph/index.js.map +1 -1
  95. package/build/esm/integrations/tracing/langgraph/instrumentation.js +5 -3
  96. package/build/esm/integrations/tracing/langgraph/instrumentation.js.map +1 -1
  97. package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js +8 -11
  98. package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
  99. package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js +2 -1
  100. package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
  101. package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +2 -1
  102. package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
  103. package/build/esm/integrations/tracing/openai/index.js.map +1 -1
  104. package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js +5 -5
  105. package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js.map +1 -1
  106. package/build/esm/integrations/tracing/postgresjs.js +3 -2
  107. package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
  108. package/build/esm/integrations/tracing/redis/index.js +3 -2
  109. package/build/esm/integrations/tracing/redis/index.js.map +1 -1
  110. package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +1 -1
  111. package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
  112. package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +2 -1
  113. package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
  114. package/build/esm/integrations/tracing/utils/sql-common.js.map +1 -1
  115. package/build/esm/integrations/tracing/vercelai/instrumentation.js +6 -5
  116. package/build/esm/integrations/tracing/vercelai/instrumentation.js.map +1 -1
  117. package/build/esm/package.json +1 -1
  118. package/build/esm/utils/setHttpServerSpanRouteAttribute.js +19 -0
  119. package/build/esm/utils/setHttpServerSpanRouteAttribute.js.map +1 -0
  120. package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +1 -1
  121. package/build/types/integrations/tracing/InstrumentationNodeModuleFile.d.ts +9 -0
  122. package/build/types/integrations/tracing/InstrumentationNodeModuleFile.d.ts.map +1 -0
  123. package/build/types/integrations/tracing/amqplib/vendored/amqplib.d.ts.map +1 -1
  124. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts +2 -2
  125. package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
  126. package/build/types/integrations/tracing/anthropic-ai/index.d.ts +8 -7
  127. package/build/types/integrations/tracing/anthropic-ai/index.d.ts.map +1 -1
  128. package/build/types/integrations/tracing/connect/vendored/instrumentation.d.ts.map +1 -1
  129. package/build/types/integrations/tracing/express.d.ts.map +1 -1
  130. package/build/types/integrations/tracing/fastify/v3/instrumentation.d.ts.map +1 -1
  131. package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +1 -1
  132. package/build/types/integrations/tracing/firebase/otel/patches/firestore.d.ts.map +1 -1
  133. package/build/types/integrations/tracing/firebase/otel/patches/functions.d.ts.map +1 -1
  134. package/build/types/integrations/tracing/google-genai/index.d.ts +8 -7
  135. package/build/types/integrations/tracing/google-genai/index.d.ts.map +1 -1
  136. package/build/types/integrations/tracing/google-genai/instrumentation.d.ts.map +1 -1
  137. package/build/types/integrations/tracing/graphql/vendored/instrumentation.d.ts.map +1 -1
  138. package/build/types/integrations/tracing/hapi/vendored/instrumentation.d.ts.map +1 -1
  139. package/build/types/integrations/tracing/knex/vendored/instrumentation.d.ts.map +1 -1
  140. package/build/types/integrations/tracing/koa/vendored/instrumentation.d.ts.map +1 -1
  141. package/build/types/integrations/tracing/langchain/index.d.ts +9 -8
  142. package/build/types/integrations/tracing/langchain/index.d.ts.map +1 -1
  143. package/build/types/integrations/tracing/langchain/instrumentation.d.ts.map +1 -1
  144. package/build/types/integrations/tracing/langgraph/index.d.ts +8 -7
  145. package/build/types/integrations/tracing/langgraph/index.d.ts.map +1 -1
  146. package/build/types/integrations/tracing/langgraph/instrumentation.d.ts.map +1 -1
  147. package/build/types/integrations/tracing/lrumemoizer/vendored/instrumentation.d.ts +2 -2
  148. package/build/types/integrations/tracing/lrumemoizer/vendored/instrumentation.d.ts.map +1 -1
  149. package/build/types/integrations/tracing/mongo/vendored/instrumentation.d.ts.map +1 -1
  150. package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
  151. package/build/types/integrations/tracing/openai/index.d.ts +8 -7
  152. package/build/types/integrations/tracing/openai/index.d.ts.map +1 -1
  153. package/build/types/integrations/tracing/postgres/vendored/instrumentation.d.ts.map +1 -1
  154. package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
  155. package/build/types/integrations/tracing/redis/index.d.ts +4 -1
  156. package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
  157. package/build/types/integrations/tracing/redis/vendored/redis-instrumentation.d.ts.map +1 -1
  158. package/build/types/integrations/tracing/utils/sql-common.d.ts +1 -1
  159. package/build/types/integrations/tracing/utils/sql-common.d.ts.map +1 -1
  160. package/build/types/integrations/tracing/vercelai/instrumentation.d.ts +2 -2
  161. package/build/types/integrations/tracing/vercelai/instrumentation.d.ts.map +1 -1
  162. package/build/types/integrations/tracing/vercelai/types.d.ts +6 -4
  163. package/build/types/integrations/tracing/vercelai/types.d.ts.map +1 -1
  164. package/build/types/utils/setHttpServerSpanRouteAttribute.d.ts +9 -0
  165. package/build/types/utils/setHttpServerSpanRouteAttribute.d.ts.map +1 -0
  166. package/build/types-ts3.8/integrations/tracing/InstrumentationNodeModuleFile.d.ts +9 -0
  167. package/build/types-ts3.8/integrations/tracing/amqplib/vendored/utils.d.ts +2 -2
  168. package/build/types-ts3.8/integrations/tracing/anthropic-ai/index.d.ts +8 -7
  169. package/build/types-ts3.8/integrations/tracing/google-genai/index.d.ts +8 -7
  170. package/build/types-ts3.8/integrations/tracing/langchain/index.d.ts +9 -8
  171. package/build/types-ts3.8/integrations/tracing/langgraph/index.d.ts +8 -7
  172. package/build/types-ts3.8/integrations/tracing/lrumemoizer/vendored/instrumentation.d.ts +2 -2
  173. package/build/types-ts3.8/integrations/tracing/openai/index.d.ts +8 -7
  174. package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +4 -1
  175. package/build/types-ts3.8/integrations/tracing/vercelai/instrumentation.d.ts +2 -2
  176. package/build/types-ts3.8/integrations/tracing/vercelai/types.d.ts +6 -4
  177. package/build/types-ts3.8/utils/setHttpServerSpanRouteAttribute.d.ts +9 -0
  178. package/package.json +5 -4
  179. package/build/cjs/integrations/tracing/redis/redis-dc-subscriber.js +0 -151
  180. package/build/cjs/integrations/tracing/redis/redis-dc-subscriber.js.map +0 -1
  181. package/build/esm/integrations/tracing/redis/redis-dc-subscriber.js +0 -149
  182. package/build/esm/integrations/tracing/redis/redis-dc-subscriber.js.map +0 -1
  183. package/build/types/integrations/tracing/redis/redis-dc-subscriber.d.ts +0 -17
  184. package/build/types/integrations/tracing/redis/redis-dc-subscriber.d.ts.map +0 -1
  185. package/build/types-ts3.8/integrations/tracing/redis/redis-dc-subscriber.d.ts +0 -17
@@ -1,9 +1,9 @@
1
1
  import * as dc from 'node:diagnostics_channel';
2
2
  import { diag, propagation, context, trace, SpanStatusCode } from '@opentelemetry/api';
3
- import { getRPCMetadata, RPCType } from '@opentelemetry/core';
4
3
  import { ATTR_HTTP_ROUTE, ATTR_URL_PATH, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE } from '@opentelemetry/semantic-conventions';
5
4
  import { InstrumentationBase } from '@opentelemetry/instrumentation';
6
5
  import { SDK_VERSION } from '@sentry/core';
6
+ import { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute.js';
7
7
 
8
8
  var _a, _b;
9
9
  const PACKAGE_VERSION = SDK_VERSION;
@@ -178,9 +178,8 @@ class FastifyOtelInstrumentation extends (_b = InstrumentationBase, _a = kRecord
178
178
  if (trace.getSpan(ctx) == null) {
179
179
  ctx = propagation.extract(ctx, request.headers);
180
180
  }
181
- const rpcMetadata = getRPCMetadata(ctx);
182
- if (request.routeOptions.url != null && rpcMetadata?.type === RPCType.HTTP) {
183
- rpcMetadata.route = request.routeOptions.url;
181
+ if (request.routeOptions.url != null) {
182
+ setHttpServerSpanRouteAttribute(request.routeOptions.url);
184
183
  }
185
184
  const attributes = {
186
185
  [ATTRIBUTE_NAMES.ROOT]: PACKAGE_NAME,
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/vendored/instrumentation.ts"],"sourcesContent":["/*\n * MIT License\n *\n * Copyright (c) 2024-present The Fastify team <https://github.com/fastify/fastify#team>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/fastify/otel/tree/bae80d6caef4287e7f01ff3c8dc753243706ea86\n * - Upstream version: @fastify/otel@0.18.1\n * - Converted from JavaScript to TypeScript with minimal type annotations\n * - Removed `ignorePaths` / `minimatch` support (not used by the Sentry integration)\n */\n/* eslint-disable */\n\nimport * as dc from 'node:diagnostics_channel';\nimport { context, trace, SpanStatusCode, propagation, diag, type Span } from '@opentelemetry/api';\nimport { getRPCMetadata, RPCType } from '@opentelemetry/core';\nimport {\n ATTR_HTTP_ROUTE,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_URL_PATH,\n} from '@opentelemetry/semantic-conventions';\nimport { InstrumentationBase, type InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\n\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify';\n\nconst SUPPORTED_VERSIONS = '>=4.0.0 <6';\nconst FASTIFY_HOOKS = [\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preHandler',\n 'preSerialization',\n 'onSend',\n 'onResponse',\n 'onError',\n];\nconst ATTRIBUTE_NAMES = {\n HOOK_NAME: 'hook.name',\n FASTIFY_TYPE: 'fastify.type',\n HOOK_CALLBACK_NAME: 'hook.callback.name',\n ROOT: 'fastify.root',\n};\nconst HOOK_TYPES = {\n ROUTE: 'route-hook',\n INSTANCE: 'hook',\n HANDLER: 'request-handler',\n};\nconst ANONYMOUS_FUNCTION_NAME = 'anonymous';\n\nconst kInstrumentation = Symbol('fastify otel instance');\nconst kRequestSpan = Symbol('fastify otel request spans');\nconst kRequestContext = Symbol('fastify otel request context');\nconst kAddHookOriginal = Symbol('fastify otel addhook original');\nconst kSetNotFoundOriginal = Symbol('fastify otel setnotfound original');\nconst kRecordExceptions = Symbol('fastify otel record exceptions');\n\nexport interface FastifyOtelInstrumentationOpts extends InstrumentationConfig {\n registerOnInitialization?: boolean;\n requestHook?: (span: Span, request: any) => void;\n lifecycleHook?: (span: Span, info: { hookName: string; request: any; handler?: string }) => void;\n recordExceptions?: boolean;\n}\n\nexport class FastifyOtelInstrumentation extends InstrumentationBase<FastifyOtelInstrumentationOpts> {\n _otelLogger: any = null;\n _requestHook: ((span: Span, request: any) => void) | null = null;\n _lifecycleHook: ((span: Span, info: any) => void) | null = null;\n _handleInitialization: ((message: any) => void) | undefined = undefined;\n\n [kRecordExceptions]: boolean = true;\n\n constructor(config: FastifyOtelInstrumentationOpts = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._otelLogger = diag.createComponentLogger({ namespace: PACKAGE_NAME });\n this[kRecordExceptions] = true;\n\n if (config?.recordExceptions != null) {\n if (typeof config.recordExceptions !== 'boolean') {\n throw new TypeError('recordExceptions must be a boolean');\n }\n\n this[kRecordExceptions] = config.recordExceptions;\n }\n if (typeof config?.requestHook === 'function') {\n this._requestHook = config.requestHook;\n }\n if (typeof config?.lifecycleHook === 'function') {\n this._lifecycleHook = config.lifecycleHook;\n }\n }\n\n enable(): any {\n if (this._handleInitialization === undefined && this.getConfig().registerOnInitialization) {\n this._handleInitialization = (message: any) => {\n this.plugin()(message.fastify, undefined, () => {});\n const emptyPlugin: any = (_: any, __: any, done: () => void) => {\n done();\n };\n emptyPlugin[Symbol.for('skip-override')] = true;\n emptyPlugin[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n message.fastify.register(emptyPlugin);\n };\n dc.subscribe('fastify.initialization', this._handleInitialization);\n }\n return super.enable();\n }\n\n disable(): any {\n if (this._handleInitialization) {\n dc.unsubscribe('fastify.initialization', this._handleInitialization);\n this._handleInitialization = undefined;\n }\n return super.disable();\n }\n\n init() {\n return [];\n }\n\n plugin(): any {\n const instrumentation = this;\n\n const pluginAny = FastifyInstrumentationPlugin as any;\n pluginAny[Symbol.for('skip-override')] = true;\n pluginAny[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n pluginAny[Symbol.for('plugin-meta')] = {\n fastify: SUPPORTED_VERSIONS,\n name: PACKAGE_NAME,\n };\n\n return FastifyInstrumentationPlugin;\n\n function FastifyInstrumentationPlugin(instance: any, _opts: any, done: () => void) {\n instance.decorate(kInstrumentation, instrumentation);\n instance.decorate(kAddHookOriginal, instance.addHook);\n instance.decorate(kSetNotFoundOriginal, instance.setNotFoundHandler);\n instance.decorateRequest('opentelemetry', function opentelemetry(this: any) {\n const ctx = this[kRequestContext];\n const span = this[kRequestSpan];\n\n return {\n enabled: this.routeOptions.config?.otel !== false,\n span,\n tracer: instrumentation.tracer,\n context: ctx,\n inject: (carrier: any, setter?: any) => {\n return propagation.inject(ctx, carrier, setter);\n },\n extract: (carrier: any, getter?: any) => {\n return propagation.extract(ctx, carrier, getter);\n },\n };\n });\n instance.decorateRequest(kRequestSpan, null);\n instance.decorateRequest(kRequestContext, null);\n\n instance.addHook('onRoute', function otelWireRoute(this: any, routeOptions: any) {\n if (routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${routeOptions.method} ${routeOptions.url} because it is disabled`,\n );\n\n return;\n }\n\n for (const hook of FASTIFY_HOOKS) {\n if (routeOptions[hook] != null) {\n const handlerLike = routeOptions[hook];\n\n if (typeof handlerLike === 'function') {\n routeOptions[hook] = handlerWrapper(handlerLike, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handlerLike.name?.length > 0 ? handlerLike.name : ANONYMOUS_FUNCTION_NAME,\n });\n } else if (Array.isArray(handlerLike)) {\n const wrappedHandlers: any[] = [];\n\n for (const handler of handlerLike) {\n wrappedHandlers.push(\n handlerWrapper(handler, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n }\n\n routeOptions[hook] = wrappedHandlers;\n }\n }\n }\n\n if (routeOptions.onSend != null) {\n routeOptions.onSend = Array.isArray(routeOptions.onSend)\n ? [...routeOptions.onSend, finalizeResponseSpanHook]\n : [routeOptions.onSend, finalizeResponseSpanHook];\n } else {\n routeOptions.onSend = finalizeResponseSpanHook;\n }\n\n if (routeOptions.onError != null) {\n routeOptions.onError = Array.isArray(routeOptions.onError)\n ? [...routeOptions.onError, recordErrorInSpanHook]\n : [routeOptions.onError, recordErrorInSpanHook];\n } else {\n routeOptions.onError = recordErrorInSpanHook;\n }\n\n routeOptions.handler = handlerWrapper(routeOptions.handler, 'handler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.HANDLER,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n routeOptions.handler.name.length > 0 ? routeOptions.handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n });\n\n instance.addHook(\n 'onRequest',\n function startRequestSpanHook(this: any, request: any, _reply: any, hookDone: () => void) {\n if (this[kInstrumentation].isEnabled() === false || request.routeOptions.config?.otel === false) {\n return hookDone();\n }\n\n let ctx = context.active();\n\n if (trace.getSpan(ctx) == null) {\n ctx = propagation.extract(ctx, request.headers);\n }\n\n const rpcMetadata = getRPCMetadata(ctx);\n\n if (request.routeOptions.url != null && rpcMetadata?.type === RPCType.HTTP) {\n rpcMetadata.route = request.routeOptions.url;\n }\n\n const attributes: Record<string, string> = {\n [ATTRIBUTE_NAMES.ROOT]: PACKAGE_NAME,\n [ATTR_HTTP_REQUEST_METHOD]: request.method,\n [ATTR_URL_PATH]: request.url,\n };\n\n if (request.routeOptions.url != null) {\n attributes[ATTR_HTTP_ROUTE] = request.routeOptions.url;\n }\n\n const span = this[kInstrumentation].tracer.startSpan('request', { attributes }, ctx);\n\n try {\n this[kInstrumentation]._requestHook?.(span, request);\n } catch (err) {\n this[kInstrumentation]._otelLogger.error({ err }, 'requestHook threw');\n }\n\n request[kRequestContext] = trace.setSpan(ctx, span);\n request[kRequestSpan] = span;\n\n context.with(request[kRequestContext], () => {\n hookDone();\n });\n },\n );\n\n instance.addHook('onResponse', function finalizeNotFoundSpanHook(request: any, reply: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone();\n });\n\n instance.addHook = addHookPatched;\n instance.setNotFoundHandler = setNotFoundHandlerPatched;\n\n done();\n\n function finalizeResponseSpanHook(\n request: any,\n reply: any,\n payload: any,\n hookDone: (err: null, payload: any) => void,\n ) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n if (reply.statusCode >= 500) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone(null, payload);\n }\n\n function recordErrorInSpanHook(request: any, _reply: any, error: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n }\n\n hookDone();\n }\n\n function addHookPatched(this: any, name: string, hook: (...args: any[]) => any) {\n const addHookOriginal = this[kAddHookOriginal];\n\n if (FASTIFY_HOOKS.includes(name)) {\n return addHookOriginal.call(\n this,\n name,\n handlerWrapper(hook, name, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - ${name}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hook.name?.length > 0 ? hook.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n } else {\n return addHookOriginal.call(this, name, hook);\n }\n }\n\n function setNotFoundHandlerPatched(this: any, hooks: any, handler?: any) {\n const setNotFoundHandlerOriginal = this[kSetNotFoundOriginal];\n if (typeof hooks === 'function') {\n handler = handlerWrapper(hooks, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hooks.name?.length > 0 ? hooks.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, handler);\n } else {\n if (hooks.preValidation != null) {\n hooks.preValidation = handlerWrapper(hooks.preValidation, 'notFoundHandler - preValidation', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preValidation`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preValidation.name?.length > 0 ? hooks.preValidation.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n if (hooks.preHandler != null) {\n hooks.preHandler = handlerWrapper(hooks.preHandler, 'notFoundHandler - preHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preHandler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preHandler.name?.length > 0 ? hooks.preHandler.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n handler = handlerWrapper(handler, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, hooks, handler);\n }\n }\n\n function getRequestFromArgs(args: any[]) {\n for (const arg of args) {\n if (arg?.routeOptions && arg.url && arg.method) {\n return arg;\n }\n }\n return null;\n }\n\n function handlerWrapper(\n handler: (...args: any[]) => any,\n hookName: string,\n spanAttributes: Record<string, string> = {},\n ) {\n return function handlerWrapped(this: any, ...args: any[]) {\n const instrumentation: FastifyOtelInstrumentation = this[kInstrumentation];\n\n const request = getRequestFromArgs(args);\n if (request === null) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation because ${hookName} was called without a Fastify request argument`,\n );\n return handler.call(this, ...args);\n }\n\n if (instrumentation.isEnabled() === false || request.routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${request.routeOptions.method} ${request.routeOptions.url} because it is disabled`,\n );\n return handler.call(this, ...args);\n }\n\n const ctx = request[kRequestContext] ?? context.active();\n const handlerName = handler.name?.length > 0 ? handler.name : (this.pluginName ?? ANONYMOUS_FUNCTION_NAME);\n\n const span = instrumentation.tracer.startSpan(\n `${hookName} - ${handlerName}`,\n {\n attributes: spanAttributes,\n },\n ctx,\n );\n\n if (instrumentation._lifecycleHook != null) {\n try {\n instrumentation._lifecycleHook(span, {\n hookName,\n request,\n handler: handlerName,\n });\n } catch (err) {\n instrumentation._otelLogger.error({ err }, 'Execution of lifecycleHook failed');\n }\n }\n\n return context.with(\n trace.setSpan(ctx, span),\n function (this: any) {\n try {\n const res = handler.call(this, ...args);\n\n if (typeof res?.then === 'function') {\n return res.then(\n (result: any) => {\n span.end();\n return result;\n },\n (error: any) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n return Promise.reject(error);\n },\n );\n }\n\n span.end();\n return res;\n } catch (error: any) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n throw error;\n }\n },\n this,\n );\n };\n }\n }\n }\n}\n"],"names":["instrumentation"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/vendored/instrumentation.ts"],"sourcesContent":["/*\n * MIT License\n *\n * Copyright (c) 2024-present The Fastify team <https://github.com/fastify/fastify#team>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/fastify/otel/tree/bae80d6caef4287e7f01ff3c8dc753243706ea86\n * - Upstream version: @fastify/otel@0.18.1\n * - Converted from JavaScript to TypeScript with minimal type annotations\n * - Removed `ignorePaths` / `minimatch` support (not used by the Sentry integration)\n */\n/* eslint-disable */\n\nimport * as dc from 'node:diagnostics_channel';\nimport { context, trace, SpanStatusCode, propagation, diag, type Span } from '@opentelemetry/api';\nimport {\n ATTR_HTTP_ROUTE,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_URL_PATH,\n} from '@opentelemetry/semantic-conventions';\nimport { InstrumentationBase, type InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\n\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify';\n\nconst SUPPORTED_VERSIONS = '>=4.0.0 <6';\nconst FASTIFY_HOOKS = [\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preHandler',\n 'preSerialization',\n 'onSend',\n 'onResponse',\n 'onError',\n];\nconst ATTRIBUTE_NAMES = {\n HOOK_NAME: 'hook.name',\n FASTIFY_TYPE: 'fastify.type',\n HOOK_CALLBACK_NAME: 'hook.callback.name',\n ROOT: 'fastify.root',\n};\nconst HOOK_TYPES = {\n ROUTE: 'route-hook',\n INSTANCE: 'hook',\n HANDLER: 'request-handler',\n};\nconst ANONYMOUS_FUNCTION_NAME = 'anonymous';\n\nconst kInstrumentation = Symbol('fastify otel instance');\nconst kRequestSpan = Symbol('fastify otel request spans');\nconst kRequestContext = Symbol('fastify otel request context');\nconst kAddHookOriginal = Symbol('fastify otel addhook original');\nconst kSetNotFoundOriginal = Symbol('fastify otel setnotfound original');\nconst kRecordExceptions = Symbol('fastify otel record exceptions');\n\nexport interface FastifyOtelInstrumentationOpts extends InstrumentationConfig {\n registerOnInitialization?: boolean;\n requestHook?: (span: Span, request: any) => void;\n lifecycleHook?: (span: Span, info: { hookName: string; request: any; handler?: string }) => void;\n recordExceptions?: boolean;\n}\n\nexport class FastifyOtelInstrumentation extends InstrumentationBase<FastifyOtelInstrumentationOpts> {\n _otelLogger: any = null;\n _requestHook: ((span: Span, request: any) => void) | null = null;\n _lifecycleHook: ((span: Span, info: any) => void) | null = null;\n _handleInitialization: ((message: any) => void) | undefined = undefined;\n\n [kRecordExceptions]: boolean = true;\n\n constructor(config: FastifyOtelInstrumentationOpts = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._otelLogger = diag.createComponentLogger({ namespace: PACKAGE_NAME });\n this[kRecordExceptions] = true;\n\n if (config?.recordExceptions != null) {\n if (typeof config.recordExceptions !== 'boolean') {\n throw new TypeError('recordExceptions must be a boolean');\n }\n\n this[kRecordExceptions] = config.recordExceptions;\n }\n if (typeof config?.requestHook === 'function') {\n this._requestHook = config.requestHook;\n }\n if (typeof config?.lifecycleHook === 'function') {\n this._lifecycleHook = config.lifecycleHook;\n }\n }\n\n enable(): any {\n if (this._handleInitialization === undefined && this.getConfig().registerOnInitialization) {\n this._handleInitialization = (message: any) => {\n this.plugin()(message.fastify, undefined, () => {});\n const emptyPlugin: any = (_: any, __: any, done: () => void) => {\n done();\n };\n emptyPlugin[Symbol.for('skip-override')] = true;\n emptyPlugin[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n message.fastify.register(emptyPlugin);\n };\n dc.subscribe('fastify.initialization', this._handleInitialization);\n }\n return super.enable();\n }\n\n disable(): any {\n if (this._handleInitialization) {\n dc.unsubscribe('fastify.initialization', this._handleInitialization);\n this._handleInitialization = undefined;\n }\n return super.disable();\n }\n\n init() {\n return [];\n }\n\n plugin(): any {\n const instrumentation = this;\n\n const pluginAny = FastifyInstrumentationPlugin as any;\n pluginAny[Symbol.for('skip-override')] = true;\n pluginAny[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n pluginAny[Symbol.for('plugin-meta')] = {\n fastify: SUPPORTED_VERSIONS,\n name: PACKAGE_NAME,\n };\n\n return FastifyInstrumentationPlugin;\n\n function FastifyInstrumentationPlugin(instance: any, _opts: any, done: () => void) {\n instance.decorate(kInstrumentation, instrumentation);\n instance.decorate(kAddHookOriginal, instance.addHook);\n instance.decorate(kSetNotFoundOriginal, instance.setNotFoundHandler);\n instance.decorateRequest('opentelemetry', function opentelemetry(this: any) {\n const ctx = this[kRequestContext];\n const span = this[kRequestSpan];\n\n return {\n enabled: this.routeOptions.config?.otel !== false,\n span,\n tracer: instrumentation.tracer,\n context: ctx,\n inject: (carrier: any, setter?: any) => {\n return propagation.inject(ctx, carrier, setter);\n },\n extract: (carrier: any, getter?: any) => {\n return propagation.extract(ctx, carrier, getter);\n },\n };\n });\n instance.decorateRequest(kRequestSpan, null);\n instance.decorateRequest(kRequestContext, null);\n\n instance.addHook('onRoute', function otelWireRoute(this: any, routeOptions: any) {\n if (routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${routeOptions.method} ${routeOptions.url} because it is disabled`,\n );\n\n return;\n }\n\n for (const hook of FASTIFY_HOOKS) {\n if (routeOptions[hook] != null) {\n const handlerLike = routeOptions[hook];\n\n if (typeof handlerLike === 'function') {\n routeOptions[hook] = handlerWrapper(handlerLike, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handlerLike.name?.length > 0 ? handlerLike.name : ANONYMOUS_FUNCTION_NAME,\n });\n } else if (Array.isArray(handlerLike)) {\n const wrappedHandlers: any[] = [];\n\n for (const handler of handlerLike) {\n wrappedHandlers.push(\n handlerWrapper(handler, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n }\n\n routeOptions[hook] = wrappedHandlers;\n }\n }\n }\n\n if (routeOptions.onSend != null) {\n routeOptions.onSend = Array.isArray(routeOptions.onSend)\n ? [...routeOptions.onSend, finalizeResponseSpanHook]\n : [routeOptions.onSend, finalizeResponseSpanHook];\n } else {\n routeOptions.onSend = finalizeResponseSpanHook;\n }\n\n if (routeOptions.onError != null) {\n routeOptions.onError = Array.isArray(routeOptions.onError)\n ? [...routeOptions.onError, recordErrorInSpanHook]\n : [routeOptions.onError, recordErrorInSpanHook];\n } else {\n routeOptions.onError = recordErrorInSpanHook;\n }\n\n routeOptions.handler = handlerWrapper(routeOptions.handler, 'handler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.HANDLER,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n routeOptions.handler.name.length > 0 ? routeOptions.handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n });\n\n instance.addHook(\n 'onRequest',\n function startRequestSpanHook(this: any, request: any, _reply: any, hookDone: () => void) {\n if (this[kInstrumentation].isEnabled() === false || request.routeOptions.config?.otel === false) {\n return hookDone();\n }\n\n let ctx = context.active();\n\n if (trace.getSpan(ctx) == null) {\n ctx = propagation.extract(ctx, request.headers);\n }\n\n if (request.routeOptions.url != null) {\n setHttpServerSpanRouteAttribute(request.routeOptions.url);\n }\n\n const attributes: Record<string, string> = {\n [ATTRIBUTE_NAMES.ROOT]: PACKAGE_NAME,\n [ATTR_HTTP_REQUEST_METHOD]: request.method,\n [ATTR_URL_PATH]: request.url,\n };\n\n if (request.routeOptions.url != null) {\n attributes[ATTR_HTTP_ROUTE] = request.routeOptions.url;\n }\n\n const span = this[kInstrumentation].tracer.startSpan('request', { attributes }, ctx);\n\n try {\n this[kInstrumentation]._requestHook?.(span, request);\n } catch (err) {\n this[kInstrumentation]._otelLogger.error({ err }, 'requestHook threw');\n }\n\n request[kRequestContext] = trace.setSpan(ctx, span);\n request[kRequestSpan] = span;\n\n context.with(request[kRequestContext], () => {\n hookDone();\n });\n },\n );\n\n instance.addHook('onResponse', function finalizeNotFoundSpanHook(request: any, reply: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone();\n });\n\n instance.addHook = addHookPatched;\n instance.setNotFoundHandler = setNotFoundHandlerPatched;\n\n done();\n\n function finalizeResponseSpanHook(\n request: any,\n reply: any,\n payload: any,\n hookDone: (err: null, payload: any) => void,\n ) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n if (reply.statusCode >= 500) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone(null, payload);\n }\n\n function recordErrorInSpanHook(request: any, _reply: any, error: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n }\n\n hookDone();\n }\n\n function addHookPatched(this: any, name: string, hook: (...args: any[]) => any) {\n const addHookOriginal = this[kAddHookOriginal];\n\n if (FASTIFY_HOOKS.includes(name)) {\n return addHookOriginal.call(\n this,\n name,\n handlerWrapper(hook, name, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - ${name}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hook.name?.length > 0 ? hook.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n } else {\n return addHookOriginal.call(this, name, hook);\n }\n }\n\n function setNotFoundHandlerPatched(this: any, hooks: any, handler?: any) {\n const setNotFoundHandlerOriginal = this[kSetNotFoundOriginal];\n if (typeof hooks === 'function') {\n handler = handlerWrapper(hooks, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hooks.name?.length > 0 ? hooks.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, handler);\n } else {\n if (hooks.preValidation != null) {\n hooks.preValidation = handlerWrapper(hooks.preValidation, 'notFoundHandler - preValidation', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preValidation`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preValidation.name?.length > 0 ? hooks.preValidation.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n if (hooks.preHandler != null) {\n hooks.preHandler = handlerWrapper(hooks.preHandler, 'notFoundHandler - preHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preHandler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preHandler.name?.length > 0 ? hooks.preHandler.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n handler = handlerWrapper(handler, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, hooks, handler);\n }\n }\n\n function getRequestFromArgs(args: any[]) {\n for (const arg of args) {\n if (arg?.routeOptions && arg.url && arg.method) {\n return arg;\n }\n }\n return null;\n }\n\n function handlerWrapper(\n handler: (...args: any[]) => any,\n hookName: string,\n spanAttributes: Record<string, string> = {},\n ) {\n return function handlerWrapped(this: any, ...args: any[]) {\n const instrumentation: FastifyOtelInstrumentation = this[kInstrumentation];\n\n const request = getRequestFromArgs(args);\n if (request === null) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation because ${hookName} was called without a Fastify request argument`,\n );\n return handler.call(this, ...args);\n }\n\n if (instrumentation.isEnabled() === false || request.routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${request.routeOptions.method} ${request.routeOptions.url} because it is disabled`,\n );\n return handler.call(this, ...args);\n }\n\n const ctx = request[kRequestContext] ?? context.active();\n const handlerName = handler.name?.length > 0 ? handler.name : (this.pluginName ?? ANONYMOUS_FUNCTION_NAME);\n\n const span = instrumentation.tracer.startSpan(\n `${hookName} - ${handlerName}`,\n {\n attributes: spanAttributes,\n },\n ctx,\n );\n\n if (instrumentation._lifecycleHook != null) {\n try {\n instrumentation._lifecycleHook(span, {\n hookName,\n request,\n handler: handlerName,\n });\n } catch (err) {\n instrumentation._otelLogger.error({ err }, 'Execution of lifecycleHook failed');\n }\n }\n\n return context.with(\n trace.setSpan(ctx, span),\n function (this: any) {\n try {\n const res = handler.call(this, ...args);\n\n if (typeof res?.then === 'function') {\n return res.then(\n (result: any) => {\n span.end();\n return result;\n },\n (error: any) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n return Promise.reject(error);\n },\n );\n }\n\n span.end();\n return res;\n } catch (error: any) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n throw error;\n }\n },\n this,\n );\n };\n }\n }\n }\n}\n"],"names":["instrumentation"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as net from 'node:net';
2
2
  import { SpanKind, context, trace, diag } from '@opentelemetry/api';
3
- import { InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
3
+ import { InstrumentationNodeModuleDefinition, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
4
+ import { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile.js';
4
5
  import { ATTR_DB_OPERATION_NAME, ATTR_DB_NAMESPACE, ATTR_DB_COLLECTION_NAME, ATTR_DB_SYSTEM_NAME, ATTR_SERVER_ADDRESS, ATTR_SERVER_PORT } from '@opentelemetry/semantic-conventions';
5
6
 
6
7
  function patchFirestore(tracer, firestoreSupportedVersions, wrap, unwrap, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.js","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/firestore.ts"],"sourcesContent":["import * as net from 'node:net';\nimport type { Span, Tracer } from '@opentelemetry/api';\nimport { context, diag, SpanKind, trace } from '@opentelemetry/api';\nimport {\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_DB_COLLECTION_NAME,\n ATTR_DB_NAMESPACE,\n ATTR_DB_OPERATION_NAME,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n AddDocType,\n CollectionReference,\n DeleteDocType,\n DocumentData,\n DocumentReference,\n FirebaseApp,\n FirebaseInstrumentationConfig,\n FirebaseOptions,\n FirestoreSettings,\n FirestoreSpanCreationHook,\n GetDocsType,\n PartialWithFieldValue,\n QuerySnapshot,\n SetDocType,\n SetOptions,\n WithFieldValue,\n} from '../types';\n\n// Inline minimal types used from `shimmer` to avoid importing shimmer's types directly.\n// We only need the shape for `wrap` and `unwrap` used in this file.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerWrap = (target: any, name: string, wrapper: (...args: any[]) => any) => void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerUnwrap = (target: any, name: string) => void;\n\n/**\n *\n * @param tracer - Opentelemetry Tracer\n * @param firestoreSupportedVersions - supported version of firebase/firestore\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation wrap function\n */\nexport function patchFirestore(\n tracer: Tracer,\n firestoreSupportedVersions: string[],\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n config: FirebaseInstrumentationConfig,\n): InstrumentationNodeModuleDefinition {\n const defaultFirestoreSpanCreationHook: FirestoreSpanCreationHook = () => {};\n\n let firestoreSpanCreationHook: FirestoreSpanCreationHook = defaultFirestoreSpanCreationHook;\n const configFirestoreSpanCreationHook = config.firestoreSpanCreationHook;\n\n if (typeof configFirestoreSpanCreationHook === 'function') {\n firestoreSpanCreationHook = (span: Span) => {\n safeExecuteInTheMiddle(\n () => configFirestoreSpanCreationHook(span),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n\n const moduleFirestoreCJS = new InstrumentationNodeModuleDefinition(\n '@firebase/firestore',\n firestoreSupportedVersions,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (moduleExports: any) => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),\n );\n const files: string[] = [\n '@firebase/firestore/dist/lite/index.node.cjs.js',\n '@firebase/firestore/dist/lite/index.node.mjs.js',\n '@firebase/firestore/dist/lite/index.rn.esm2017.js',\n '@firebase/firestore/dist/lite/index.cjs.js',\n ];\n\n for (const file of files) {\n moduleFirestoreCJS.files.push(\n new InstrumentationNodeModuleFile(\n file,\n firestoreSupportedVersions,\n moduleExports => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),\n moduleExports => unwrapMethods(moduleExports, unwrap),\n ),\n );\n }\n\n return moduleFirestoreCJS;\n}\n\nfunction wrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n unwrapMethods(moduleExports, unwrap);\n\n wrap(moduleExports, 'addDoc', patchAddDoc(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'getDocs', patchGetDocs(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'setDoc', patchSetDoc(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'deleteDoc', patchDeleteDoc(tracer, firestoreSpanCreationHook));\n\n return moduleExports;\n}\n\nfunction unwrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n unwrap: ShimmerUnwrap,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n for (const method of ['addDoc', 'getDocs', 'setDoc', 'deleteDoc']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isWrapped(moduleExports[method])) {\n unwrap(moduleExports, method);\n }\n }\n return moduleExports;\n}\n\nfunction patchAddDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: AddDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n) => Promise<DocumentReference<AppModelType, DbModelType>> {\n return function addDoc(original: AddDocType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n ): Promise<DocumentReference<AppModelType, DbModelType>> {\n const span = startDBSpan(tracer, 'addDoc', reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<DocumentReference<AppModelType, DbModelType>>>(span, () => {\n return original(reference, data);\n });\n };\n };\n}\n\nfunction patchDeleteDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: DeleteDocType<AppModelType, DbModelType>,\n) => (this: FirebaseInstrumentation, reference: DocumentReference<AppModelType, DbModelType>) => Promise<void> {\n return function deleteDoc(original: DeleteDocType<AppModelType, DbModelType>) {\n return function (reference: DocumentReference<AppModelType, DbModelType>): Promise<void> {\n const span = startDBSpan(tracer, 'deleteDoc', reference.parent || reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<void>>(span, () => {\n return original(reference);\n });\n };\n };\n}\n\nfunction patchGetDocs<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: GetDocsType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n) => Promise<QuerySnapshot<AppModelType, DbModelType>> {\n return function getDocs(original: GetDocsType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n ): Promise<QuerySnapshot<AppModelType, DbModelType>> {\n const span = startDBSpan(tracer, 'getDocs', reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<QuerySnapshot<AppModelType, DbModelType>>>(span, () => {\n return original(reference);\n });\n };\n };\n}\n\nfunction patchSetDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: SetDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n) => Promise<void> {\n return function setDoc(original: SetDocType<AppModelType, DbModelType>) {\n return function (\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n ): Promise<void> {\n const span = startDBSpan(tracer, 'setDoc', reference.parent || reference);\n firestoreSpanCreationHook(span);\n\n return executeContextWithSpan<Promise<void>>(span, () => {\n return typeof options !== 'undefined' ? original(reference, data, options) : original(reference, data);\n });\n };\n };\n}\n\nfunction executeContextWithSpan<T>(span: Span, callback: () => T): T {\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle(\n (): T => {\n return callback();\n },\n err => {\n if (err) {\n span.recordException(err);\n }\n span.end();\n },\n true,\n );\n });\n}\n\nfunction startDBSpan<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n spanName: string,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): Span {\n const span = tracer.startSpan(`${spanName} ${reference.path}`, { kind: SpanKind.CLIENT });\n addAttributes(span, reference);\n span.setAttribute(ATTR_DB_OPERATION_NAME, spanName);\n return span;\n}\n\n/**\n * Gets the server address and port attributes from the Firestore settings.\n * It's best effort to extract the address and port from the settings, especially for IPv6.\n * @param span - The span to set attributes on.\n * @param settings - The Firestore settings containing host information.\n */\nexport function getPortAndAddress(settings: FirestoreSettings): {\n address?: string;\n port?: number;\n} {\n let address: string | undefined;\n let port: string | undefined;\n\n if (typeof settings.host === 'string') {\n if (settings.host.startsWith('[')) {\n // IPv6 addresses can be enclosed in square brackets, e.g., [2001:db8::1]:8080\n if (settings.host.endsWith(']')) {\n // IPv6 with square brackets without port\n address = settings.host.replace(/^\\[|\\]$/g, '');\n } else if (settings.host.includes(']:')) {\n // IPv6 with square brackets with port\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(1, lastColonIndex).replace(/^\\[|\\]$/g, '');\n port = settings.host.slice(lastColonIndex + 1);\n }\n }\n } else {\n // IPv4 or IPv6 without square brackets\n // If it's an IPv6 address without square brackets, we assume it does not have a port.\n if (net.isIPv6(settings.host)) {\n address = settings.host;\n }\n // If it's an IPv4 address, we can extract the port if it exists.\n else {\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(0, lastColonIndex);\n port = settings.host.slice(lastColonIndex + 1);\n } else {\n address = settings.host;\n }\n }\n }\n }\n return {\n address: address,\n port: port ? parseInt(port, 10) : undefined,\n };\n}\n\nfunction addAttributes<AppModelType, DbModelType extends DocumentData>(\n span: Span,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): void {\n const firestoreApp: FirebaseApp = reference.firestore.app;\n const firestoreOptions: FirebaseOptions = firestoreApp.options;\n const json: { settings?: FirestoreSettings } = reference.firestore.toJSON() || {};\n const settings: FirestoreSettings = json.settings || {};\n\n const attributes: SpanAttributes = {\n [ATTR_DB_COLLECTION_NAME]: reference.path,\n [ATTR_DB_NAMESPACE]: firestoreApp.name,\n [ATTR_DB_SYSTEM_NAME]: 'firebase.firestore',\n 'firebase.firestore.type': reference.type,\n 'firebase.firestore.options.projectId': firestoreOptions.projectId,\n 'firebase.firestore.options.appId': firestoreOptions.appId,\n 'firebase.firestore.options.messagingSenderId': firestoreOptions.messagingSenderId,\n 'firebase.firestore.options.storageBucket': firestoreOptions.storageBucket,\n };\n\n const { address, port } = getPortAndAddress(settings);\n\n if (address) {\n attributes[ATTR_SERVER_ADDRESS] = address;\n }\n if (port) {\n attributes[ATTR_SERVER_PORT] = port;\n }\n\n span.setAttributes(attributes);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestore.js","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/firestore.ts"],"sourcesContent":["import * as net from 'node:net';\nimport type { Span, Tracer } from '@opentelemetry/api';\nimport { context, diag, SpanKind, trace } from '@opentelemetry/api';\nimport { InstrumentationNodeModuleDefinition, isWrapped, safeExecuteInTheMiddle } 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_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n} from '@opentelemetry/semantic-conventions';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n AddDocType,\n CollectionReference,\n DeleteDocType,\n DocumentData,\n DocumentReference,\n FirebaseApp,\n FirebaseInstrumentationConfig,\n FirebaseOptions,\n FirestoreSettings,\n FirestoreSpanCreationHook,\n GetDocsType,\n PartialWithFieldValue,\n QuerySnapshot,\n SetDocType,\n SetOptions,\n WithFieldValue,\n} from '../types';\n\n// Inline minimal types used from `shimmer` to avoid importing shimmer's types directly.\n// We only need the shape for `wrap` and `unwrap` used in this file.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerWrap = (target: any, name: string, wrapper: (...args: any[]) => any) => void;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ShimmerUnwrap = (target: any, name: string) => void;\n\n/**\n *\n * @param tracer - Opentelemetry Tracer\n * @param firestoreSupportedVersions - supported version of firebase/firestore\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation wrap function\n */\nexport function patchFirestore(\n tracer: Tracer,\n firestoreSupportedVersions: string[],\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n config: FirebaseInstrumentationConfig,\n): InstrumentationNodeModuleDefinition {\n const defaultFirestoreSpanCreationHook: FirestoreSpanCreationHook = () => {};\n\n let firestoreSpanCreationHook: FirestoreSpanCreationHook = defaultFirestoreSpanCreationHook;\n const configFirestoreSpanCreationHook = config.firestoreSpanCreationHook;\n\n if (typeof configFirestoreSpanCreationHook === 'function') {\n firestoreSpanCreationHook = (span: Span) => {\n safeExecuteInTheMiddle(\n () => configFirestoreSpanCreationHook(span),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n\n const moduleFirestoreCJS = new InstrumentationNodeModuleDefinition(\n '@firebase/firestore',\n firestoreSupportedVersions,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (moduleExports: any) => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),\n );\n const files: string[] = [\n '@firebase/firestore/dist/lite/index.node.cjs.js',\n '@firebase/firestore/dist/lite/index.node.mjs.js',\n '@firebase/firestore/dist/lite/index.rn.esm2017.js',\n '@firebase/firestore/dist/lite/index.cjs.js',\n ];\n\n for (const file of files) {\n moduleFirestoreCJS.files.push(\n new InstrumentationNodeModuleFile(\n file,\n firestoreSupportedVersions,\n moduleExports => wrapMethods(moduleExports, wrap, unwrap, tracer, firestoreSpanCreationHook),\n moduleExports => unwrapMethods(moduleExports, unwrap),\n ),\n );\n }\n\n return moduleFirestoreCJS;\n}\n\nfunction wrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n wrap: ShimmerWrap,\n unwrap: ShimmerUnwrap,\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n unwrapMethods(moduleExports, unwrap);\n\n wrap(moduleExports, 'addDoc', patchAddDoc(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'getDocs', patchGetDocs(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'setDoc', patchSetDoc(tracer, firestoreSpanCreationHook));\n wrap(moduleExports, 'deleteDoc', patchDeleteDoc(tracer, firestoreSpanCreationHook));\n\n return moduleExports;\n}\n\nfunction unwrapMethods(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleExports: any,\n unwrap: ShimmerUnwrap,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\n for (const method of ['addDoc', 'getDocs', 'setDoc', 'deleteDoc']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (isWrapped(moduleExports[method])) {\n unwrap(moduleExports, method);\n }\n }\n return moduleExports;\n}\n\nfunction patchAddDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: AddDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n) => Promise<DocumentReference<AppModelType, DbModelType>> {\n return function addDoc(original: AddDocType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType>,\n ): Promise<DocumentReference<AppModelType, DbModelType>> {\n const span = startDBSpan(tracer, 'addDoc', reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<DocumentReference<AppModelType, DbModelType>>>(span, () => {\n return original(reference, data);\n });\n };\n };\n}\n\nfunction patchDeleteDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: DeleteDocType<AppModelType, DbModelType>,\n) => (this: FirebaseInstrumentation, reference: DocumentReference<AppModelType, DbModelType>) => Promise<void> {\n return function deleteDoc(original: DeleteDocType<AppModelType, DbModelType>) {\n return function (reference: DocumentReference<AppModelType, DbModelType>): Promise<void> {\n const span = startDBSpan(tracer, 'deleteDoc', reference.parent || reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<void>>(span, () => {\n return original(reference);\n });\n };\n };\n}\n\nfunction patchGetDocs<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: GetDocsType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: CollectionReference<AppModelType, DbModelType>,\n) => Promise<QuerySnapshot<AppModelType, DbModelType>> {\n return function getDocs(original: GetDocsType<AppModelType, DbModelType>) {\n return function (\n reference: CollectionReference<AppModelType, DbModelType>,\n ): Promise<QuerySnapshot<AppModelType, DbModelType>> {\n const span = startDBSpan(tracer, 'getDocs', reference);\n firestoreSpanCreationHook(span);\n return executeContextWithSpan<Promise<QuerySnapshot<AppModelType, DbModelType>>>(span, () => {\n return original(reference);\n });\n };\n };\n}\n\nfunction patchSetDoc<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n firestoreSpanCreationHook: FirestoreSpanCreationHook,\n): (\n original: SetDocType<AppModelType, DbModelType>,\n) => (\n this: FirebaseInstrumentation,\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n) => Promise<void> {\n return function setDoc(original: SetDocType<AppModelType, DbModelType>) {\n return function (\n reference: DocumentReference<AppModelType, DbModelType>,\n data: WithFieldValue<AppModelType> & PartialWithFieldValue<AppModelType>,\n options?: SetOptions,\n ): Promise<void> {\n const span = startDBSpan(tracer, 'setDoc', reference.parent || reference);\n firestoreSpanCreationHook(span);\n\n return executeContextWithSpan<Promise<void>>(span, () => {\n return typeof options !== 'undefined' ? original(reference, data, options) : original(reference, data);\n });\n };\n };\n}\n\nfunction executeContextWithSpan<T>(span: Span, callback: () => T): T {\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle(\n (): T => {\n return callback();\n },\n err => {\n if (err) {\n span.recordException(err);\n }\n span.end();\n },\n true,\n );\n });\n}\n\nfunction startDBSpan<AppModelType, DbModelType extends DocumentData>(\n tracer: Tracer,\n spanName: string,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): Span {\n const span = tracer.startSpan(`${spanName} ${reference.path}`, { kind: SpanKind.CLIENT });\n addAttributes(span, reference);\n span.setAttribute(ATTR_DB_OPERATION_NAME, spanName);\n return span;\n}\n\n/**\n * Gets the server address and port attributes from the Firestore settings.\n * It's best effort to extract the address and port from the settings, especially for IPv6.\n * @param span - The span to set attributes on.\n * @param settings - The Firestore settings containing host information.\n */\nexport function getPortAndAddress(settings: FirestoreSettings): {\n address?: string;\n port?: number;\n} {\n let address: string | undefined;\n let port: string | undefined;\n\n if (typeof settings.host === 'string') {\n if (settings.host.startsWith('[')) {\n // IPv6 addresses can be enclosed in square brackets, e.g., [2001:db8::1]:8080\n if (settings.host.endsWith(']')) {\n // IPv6 with square brackets without port\n address = settings.host.replace(/^\\[|\\]$/g, '');\n } else if (settings.host.includes(']:')) {\n // IPv6 with square brackets with port\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(1, lastColonIndex).replace(/^\\[|\\]$/g, '');\n port = settings.host.slice(lastColonIndex + 1);\n }\n }\n } else {\n // IPv4 or IPv6 without square brackets\n // If it's an IPv6 address without square brackets, we assume it does not have a port.\n if (net.isIPv6(settings.host)) {\n address = settings.host;\n }\n // If it's an IPv4 address, we can extract the port if it exists.\n else {\n const lastColonIndex = settings.host.lastIndexOf(':');\n if (lastColonIndex !== -1) {\n address = settings.host.slice(0, lastColonIndex);\n port = settings.host.slice(lastColonIndex + 1);\n } else {\n address = settings.host;\n }\n }\n }\n }\n return {\n address: address,\n port: port ? parseInt(port, 10) : undefined,\n };\n}\n\nfunction addAttributes<AppModelType, DbModelType extends DocumentData>(\n span: Span,\n reference: CollectionReference<AppModelType, DbModelType> | DocumentReference<AppModelType, DbModelType>,\n): void {\n const firestoreApp: FirebaseApp = reference.firestore.app;\n const firestoreOptions: FirebaseOptions = firestoreApp.options;\n const json: { settings?: FirestoreSettings } = reference.firestore.toJSON() || {};\n const settings: FirestoreSettings = json.settings || {};\n\n const attributes: SpanAttributes = {\n [ATTR_DB_COLLECTION_NAME]: reference.path,\n [ATTR_DB_NAMESPACE]: firestoreApp.name,\n [ATTR_DB_SYSTEM_NAME]: 'firebase.firestore',\n 'firebase.firestore.type': reference.type,\n 'firebase.firestore.options.projectId': firestoreOptions.projectId,\n 'firebase.firestore.options.appId': firestoreOptions.appId,\n 'firebase.firestore.options.messagingSenderId': firestoreOptions.messagingSenderId,\n 'firebase.firestore.options.storageBucket': firestoreOptions.storageBucket,\n };\n\n const { address, port } = getPortAndAddress(settings);\n\n if (address) {\n attributes[ATTR_SERVER_ADDRESS] = address;\n }\n if (port) {\n attributes[ATTR_SERVER_PORT] = port;\n }\n\n span.setAttributes(attributes);\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { SpanKind, context, trace, diag } from '@opentelemetry/api';
2
- import { InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
2
+ import { InstrumentationNodeModuleDefinition, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
3
+ import { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile.js';
3
4
 
4
5
  function patchFunctions(tracer, functionsSupportedVersions, wrap, unwrap, config) {
5
6
  let requestHook = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/functions.ts"],"sourcesContent":["import type { Span, Tracer } from '@opentelemetry/api';\nimport { context, diag, SpanKind, trace } from '@opentelemetry/api';\nimport type { InstrumentationBase } from '@opentelemetry/instrumentation';\nimport {\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n isWrapped,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n AvailableFirebaseFunctions,\n FirebaseFunctions,\n FirebaseInstrumentationConfig,\n OverloadedParameters,\n RequestHook,\n ResponseHook,\n} from '../types';\n\n/**\n * Patches Firebase Functions v2 to add OpenTelemetry instrumentation\n * @param tracer - Opentelemetry Tracer\n * @param functionsSupportedVersions - supported versions of firebase-functions\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation unwrap function\n * @param config - Firebase instrumentation config\n */\nexport function patchFunctions(\n tracer: Tracer,\n functionsSupportedVersions: string[],\n wrap: InstrumentationBase['_wrap'],\n unwrap: InstrumentationBase['_unwrap'],\n config: FirebaseInstrumentationConfig,\n): InstrumentationNodeModuleDefinition {\n let requestHook: RequestHook = () => {};\n let responseHook: ResponseHook = () => {};\n const errorHook = config.functions?.errorHook;\n const configRequestHook = config.functions?.requestHook;\n const configResponseHook = config.functions?.responseHook;\n\n if (typeof configResponseHook === 'function') {\n responseHook = (span: Span, err: unknown) => {\n safeExecuteInTheMiddle(\n () => configResponseHook(span, err),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n if (typeof configRequestHook === 'function') {\n requestHook = (span: Span) => {\n safeExecuteInTheMiddle(\n () => configRequestHook(span),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n\n const moduleFunctionsCJS = new InstrumentationNodeModuleDefinition('firebase-functions', functionsSupportedVersions);\n const modulesToInstrument = [\n { name: 'firebase-functions/lib/v2/providers/https.js', triggerType: 'function' },\n { name: 'firebase-functions/lib/v2/providers/firestore.js', triggerType: 'firestore' },\n { name: 'firebase-functions/lib/v2/providers/scheduler.js', triggerType: 'scheduler' },\n { name: 'firebase-functions/lib/v2/storage.js', triggerType: 'storage' },\n ] as const;\n\n modulesToInstrument.forEach(({ name, triggerType }) => {\n moduleFunctionsCJS.files.push(\n new InstrumentationNodeModuleFile(\n name,\n functionsSupportedVersions,\n moduleExports =>\n wrapCommonFunctions(\n moduleExports,\n wrap,\n unwrap,\n tracer,\n { requestHook, responseHook, errorHook },\n triggerType,\n ),\n moduleExports => unwrapCommonFunctions(moduleExports, unwrap),\n ),\n );\n });\n\n return moduleFunctionsCJS;\n}\n\n/**\n * Patches Cloud Functions for Firebase (v2) to add OpenTelemetry instrumentation\n *\n * @param tracer - Opentelemetry Tracer\n * @param functionsConfig - Firebase instrumentation config\n * @param triggerType - Type of trigger\n * @returns A function that patches the function\n */\nexport function patchV2Functions<T extends FirebaseFunctions = FirebaseFunctions>(\n tracer: Tracer,\n functionsConfig: FirebaseInstrumentationConfig['functions'],\n triggerType: string,\n): (original: T) => (...args: OverloadedParameters<T>) => ReturnType<T> {\n return function v2FunctionsWrapper(original: T): (...args: OverloadedParameters<T>) => ReturnType<T> {\n return function (this: FirebaseInstrumentation, ...args: OverloadedParameters<T>): ReturnType<T> {\n const handler = typeof args[0] === 'function' ? args[0] : args[1];\n const documentOrOptions = typeof args[0] === 'function' ? undefined : args[0];\n\n if (!handler) {\n return original.call(this, ...args);\n }\n\n const wrappedHandler = async function (this: unknown, ...handlerArgs: unknown[]): Promise<unknown> {\n const functionName = process.env.FUNCTION_TARGET || process.env.K_SERVICE || 'unknown';\n const span = tracer.startSpan(`firebase.function.${triggerType}`, {\n kind: SpanKind.SERVER,\n });\n\n const attributes: SpanAttributes = {\n 'faas.name': functionName,\n 'faas.trigger': triggerType,\n 'faas.provider': 'firebase',\n };\n\n if (process.env.GCLOUD_PROJECT) {\n attributes['cloud.project_id'] = process.env.GCLOUD_PROJECT;\n }\n\n if (process.env.EVENTARC_CLOUD_EVENT_SOURCE) {\n attributes['cloud.event_source'] = process.env.EVENTARC_CLOUD_EVENT_SOURCE;\n }\n\n span.setAttributes(attributes);\n functionsConfig?.requestHook?.(span);\n\n // Can be changed to safeExecuteInTheMiddleAsync once following is merged and released\n // https://github.com/open-telemetry/opentelemetry-js/pull/6032\n return context.with(trace.setSpan(context.active(), span), async () => {\n let error: Error | undefined;\n let result: T | undefined;\n\n try {\n result = await handler.apply(this, handlerArgs);\n } catch (e) {\n error = e as Error;\n }\n\n functionsConfig?.responseHook?.(span, error);\n\n if (error) {\n span.recordException(error);\n }\n\n span.end();\n\n if (error) {\n await functionsConfig?.errorHook?.(span, error);\n throw error;\n }\n\n return result;\n });\n };\n\n if (documentOrOptions) {\n return original.call(this, documentOrOptions, wrappedHandler);\n } else {\n return original.call(this, wrappedHandler);\n }\n };\n };\n}\n\nfunction wrapCommonFunctions(\n moduleExports: AvailableFirebaseFunctions,\n wrap: InstrumentationBase<FirebaseInstrumentationConfig>['_wrap'],\n unwrap: InstrumentationBase<FirebaseInstrumentationConfig>['_unwrap'],\n tracer: Tracer,\n functionsConfig: FirebaseInstrumentationConfig['functions'],\n triggerType: 'function' | 'firestore' | 'scheduler' | 'storage',\n): AvailableFirebaseFunctions {\n unwrapCommonFunctions(moduleExports, unwrap);\n\n switch (triggerType) {\n case 'function':\n wrap(moduleExports, 'onRequest', patchV2Functions(tracer, functionsConfig, 'http.request'));\n wrap(moduleExports, 'onCall', patchV2Functions(tracer, functionsConfig, 'http.call'));\n break;\n\n case 'firestore':\n wrap(moduleExports, 'onDocumentCreated', patchV2Functions(tracer, functionsConfig, 'firestore.document.created'));\n wrap(moduleExports, 'onDocumentUpdated', patchV2Functions(tracer, functionsConfig, 'firestore.document.updated'));\n wrap(moduleExports, 'onDocumentDeleted', patchV2Functions(tracer, functionsConfig, 'firestore.document.deleted'));\n wrap(moduleExports, 'onDocumentWritten', patchV2Functions(tracer, functionsConfig, 'firestore.document.written'));\n wrap(\n moduleExports,\n 'onDocumentCreatedWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.created'),\n );\n wrap(\n moduleExports,\n 'onDocumentUpdatedWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.updated'),\n );\n\n wrap(\n moduleExports,\n 'onDocumentDeletedWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.deleted'),\n );\n\n wrap(\n moduleExports,\n 'onDocumentWrittenWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.written'),\n );\n break;\n\n case 'scheduler':\n wrap(moduleExports, 'onSchedule', patchV2Functions(tracer, functionsConfig, 'scheduler.scheduled'));\n break;\n\n case 'storage':\n wrap(moduleExports, 'onObjectFinalized', patchV2Functions(tracer, functionsConfig, 'storage.object.finalized'));\n wrap(moduleExports, 'onObjectArchived', patchV2Functions(tracer, functionsConfig, 'storage.object.archived'));\n wrap(moduleExports, 'onObjectDeleted', patchV2Functions(tracer, functionsConfig, 'storage.object.deleted'));\n wrap(\n moduleExports,\n 'onObjectMetadataUpdated',\n patchV2Functions(tracer, functionsConfig, 'storage.object.metadataUpdated'),\n );\n break;\n }\n\n return moduleExports;\n}\n\nfunction unwrapCommonFunctions(\n moduleExports: AvailableFirebaseFunctions,\n unwrap: InstrumentationBase<FirebaseInstrumentationConfig>['_unwrap'],\n): AvailableFirebaseFunctions {\n const methods: (keyof AvailableFirebaseFunctions)[] = [\n 'onSchedule',\n 'onRequest',\n 'onCall',\n 'onObjectFinalized',\n 'onObjectArchived',\n 'onObjectDeleted',\n 'onObjectMetadataUpdated',\n 'onDocumentCreated',\n 'onDocumentUpdated',\n 'onDocumentDeleted',\n 'onDocumentWritten',\n 'onDocumentCreatedWithAuthContext',\n 'onDocumentUpdatedWithAuthContext',\n 'onDocumentDeletedWithAuthContext',\n 'onDocumentWrittenWithAuthContext',\n ];\n\n for (const method of methods) {\n if (isWrapped(moduleExports[method])) {\n unwrap(moduleExports, method);\n }\n }\n return moduleExports;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.js","sources":["../../../../../../../src/integrations/tracing/firebase/otel/patches/functions.ts"],"sourcesContent":["import type { Span, Tracer } from '@opentelemetry/api';\nimport { context, diag, SpanKind, trace } from '@opentelemetry/api';\nimport type { InstrumentationBase } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleDefinition, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../../InstrumentationNodeModuleFile';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FirebaseInstrumentation } from '../firebaseInstrumentation';\nimport type {\n AvailableFirebaseFunctions,\n FirebaseFunctions,\n FirebaseInstrumentationConfig,\n OverloadedParameters,\n RequestHook,\n ResponseHook,\n} from '../types';\n\n/**\n * Patches Firebase Functions v2 to add OpenTelemetry instrumentation\n * @param tracer - Opentelemetry Tracer\n * @param functionsSupportedVersions - supported versions of firebase-functions\n * @param wrap - reference to native instrumentation wrap function\n * @param unwrap - reference to native instrumentation unwrap function\n * @param config - Firebase instrumentation config\n */\nexport function patchFunctions(\n tracer: Tracer,\n functionsSupportedVersions: string[],\n wrap: InstrumentationBase['_wrap'],\n unwrap: InstrumentationBase['_unwrap'],\n config: FirebaseInstrumentationConfig,\n): InstrumentationNodeModuleDefinition {\n let requestHook: RequestHook = () => {};\n let responseHook: ResponseHook = () => {};\n const errorHook = config.functions?.errorHook;\n const configRequestHook = config.functions?.requestHook;\n const configResponseHook = config.functions?.responseHook;\n\n if (typeof configResponseHook === 'function') {\n responseHook = (span: Span, err: unknown) => {\n safeExecuteInTheMiddle(\n () => configResponseHook(span, err),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n if (typeof configRequestHook === 'function') {\n requestHook = (span: Span) => {\n safeExecuteInTheMiddle(\n () => configRequestHook(span),\n error => {\n if (!error) {\n return;\n }\n diag.error(error?.message);\n },\n true,\n );\n };\n }\n\n const moduleFunctionsCJS = new InstrumentationNodeModuleDefinition('firebase-functions', functionsSupportedVersions);\n const modulesToInstrument = [\n { name: 'firebase-functions/lib/v2/providers/https.js', triggerType: 'function' },\n { name: 'firebase-functions/lib/v2/providers/firestore.js', triggerType: 'firestore' },\n { name: 'firebase-functions/lib/v2/providers/scheduler.js', triggerType: 'scheduler' },\n { name: 'firebase-functions/lib/v2/storage.js', triggerType: 'storage' },\n ] as const;\n\n modulesToInstrument.forEach(({ name, triggerType }) => {\n moduleFunctionsCJS.files.push(\n new InstrumentationNodeModuleFile(\n name,\n functionsSupportedVersions,\n moduleExports =>\n wrapCommonFunctions(\n moduleExports,\n wrap,\n unwrap,\n tracer,\n { requestHook, responseHook, errorHook },\n triggerType,\n ),\n moduleExports => unwrapCommonFunctions(moduleExports, unwrap),\n ),\n );\n });\n\n return moduleFunctionsCJS;\n}\n\n/**\n * Patches Cloud Functions for Firebase (v2) to add OpenTelemetry instrumentation\n *\n * @param tracer - Opentelemetry Tracer\n * @param functionsConfig - Firebase instrumentation config\n * @param triggerType - Type of trigger\n * @returns A function that patches the function\n */\nexport function patchV2Functions<T extends FirebaseFunctions = FirebaseFunctions>(\n tracer: Tracer,\n functionsConfig: FirebaseInstrumentationConfig['functions'],\n triggerType: string,\n): (original: T) => (...args: OverloadedParameters<T>) => ReturnType<T> {\n return function v2FunctionsWrapper(original: T): (...args: OverloadedParameters<T>) => ReturnType<T> {\n return function (this: FirebaseInstrumentation, ...args: OverloadedParameters<T>): ReturnType<T> {\n const handler = typeof args[0] === 'function' ? args[0] : args[1];\n const documentOrOptions = typeof args[0] === 'function' ? undefined : args[0];\n\n if (!handler) {\n return original.call(this, ...args);\n }\n\n const wrappedHandler = async function (this: unknown, ...handlerArgs: unknown[]): Promise<unknown> {\n const functionName = process.env.FUNCTION_TARGET || process.env.K_SERVICE || 'unknown';\n const span = tracer.startSpan(`firebase.function.${triggerType}`, {\n kind: SpanKind.SERVER,\n });\n\n const attributes: SpanAttributes = {\n 'faas.name': functionName,\n 'faas.trigger': triggerType,\n 'faas.provider': 'firebase',\n };\n\n if (process.env.GCLOUD_PROJECT) {\n attributes['cloud.project_id'] = process.env.GCLOUD_PROJECT;\n }\n\n if (process.env.EVENTARC_CLOUD_EVENT_SOURCE) {\n attributes['cloud.event_source'] = process.env.EVENTARC_CLOUD_EVENT_SOURCE;\n }\n\n span.setAttributes(attributes);\n functionsConfig?.requestHook?.(span);\n\n // Can be changed to safeExecuteInTheMiddleAsync once following is merged and released\n // https://github.com/open-telemetry/opentelemetry-js/pull/6032\n return context.with(trace.setSpan(context.active(), span), async () => {\n let error: Error | undefined;\n let result: T | undefined;\n\n try {\n result = await handler.apply(this, handlerArgs);\n } catch (e) {\n error = e as Error;\n }\n\n functionsConfig?.responseHook?.(span, error);\n\n if (error) {\n span.recordException(error);\n }\n\n span.end();\n\n if (error) {\n await functionsConfig?.errorHook?.(span, error);\n throw error;\n }\n\n return result;\n });\n };\n\n if (documentOrOptions) {\n return original.call(this, documentOrOptions, wrappedHandler);\n } else {\n return original.call(this, wrappedHandler);\n }\n };\n };\n}\n\nfunction wrapCommonFunctions(\n moduleExports: AvailableFirebaseFunctions,\n wrap: InstrumentationBase<FirebaseInstrumentationConfig>['_wrap'],\n unwrap: InstrumentationBase<FirebaseInstrumentationConfig>['_unwrap'],\n tracer: Tracer,\n functionsConfig: FirebaseInstrumentationConfig['functions'],\n triggerType: 'function' | 'firestore' | 'scheduler' | 'storage',\n): AvailableFirebaseFunctions {\n unwrapCommonFunctions(moduleExports, unwrap);\n\n switch (triggerType) {\n case 'function':\n wrap(moduleExports, 'onRequest', patchV2Functions(tracer, functionsConfig, 'http.request'));\n wrap(moduleExports, 'onCall', patchV2Functions(tracer, functionsConfig, 'http.call'));\n break;\n\n case 'firestore':\n wrap(moduleExports, 'onDocumentCreated', patchV2Functions(tracer, functionsConfig, 'firestore.document.created'));\n wrap(moduleExports, 'onDocumentUpdated', patchV2Functions(tracer, functionsConfig, 'firestore.document.updated'));\n wrap(moduleExports, 'onDocumentDeleted', patchV2Functions(tracer, functionsConfig, 'firestore.document.deleted'));\n wrap(moduleExports, 'onDocumentWritten', patchV2Functions(tracer, functionsConfig, 'firestore.document.written'));\n wrap(\n moduleExports,\n 'onDocumentCreatedWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.created'),\n );\n wrap(\n moduleExports,\n 'onDocumentUpdatedWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.updated'),\n );\n\n wrap(\n moduleExports,\n 'onDocumentDeletedWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.deleted'),\n );\n\n wrap(\n moduleExports,\n 'onDocumentWrittenWithAuthContext',\n patchV2Functions(tracer, functionsConfig, 'firestore.document.written'),\n );\n break;\n\n case 'scheduler':\n wrap(moduleExports, 'onSchedule', patchV2Functions(tracer, functionsConfig, 'scheduler.scheduled'));\n break;\n\n case 'storage':\n wrap(moduleExports, 'onObjectFinalized', patchV2Functions(tracer, functionsConfig, 'storage.object.finalized'));\n wrap(moduleExports, 'onObjectArchived', patchV2Functions(tracer, functionsConfig, 'storage.object.archived'));\n wrap(moduleExports, 'onObjectDeleted', patchV2Functions(tracer, functionsConfig, 'storage.object.deleted'));\n wrap(\n moduleExports,\n 'onObjectMetadataUpdated',\n patchV2Functions(tracer, functionsConfig, 'storage.object.metadataUpdated'),\n );\n break;\n }\n\n return moduleExports;\n}\n\nfunction unwrapCommonFunctions(\n moduleExports: AvailableFirebaseFunctions,\n unwrap: InstrumentationBase<FirebaseInstrumentationConfig>['_unwrap'],\n): AvailableFirebaseFunctions {\n const methods: (keyof AvailableFirebaseFunctions)[] = [\n 'onSchedule',\n 'onRequest',\n 'onCall',\n 'onObjectFinalized',\n 'onObjectArchived',\n 'onObjectDeleted',\n 'onObjectMetadataUpdated',\n 'onDocumentCreated',\n 'onDocumentUpdated',\n 'onDocumentDeleted',\n 'onDocumentWritten',\n 'onDocumentCreatedWithAuthContext',\n 'onDocumentUpdatedWithAuthContext',\n 'onDocumentDeletedWithAuthContext',\n 'onDocumentWrittenWithAuthContext',\n ];\n\n for (const method of methods) {\n if (isWrapped(moduleExports[method])) {\n unwrap(moduleExports, method);\n }\n }\n return moduleExports;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/google-genai/index.ts"],"sourcesContent":["import type { GoogleGenAIOptions, IntegrationFn } from '@sentry/core';\nimport { defineIntegration, GOOGLE_GENAI_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryGoogleGenAiInstrumentation } from './instrumentation';\n\nexport const instrumentGoogleGenAI = generateInstrumentOnce<GoogleGenAIOptions>(\n GOOGLE_GENAI_INTEGRATION_NAME,\n options => new SentryGoogleGenAiInstrumentation(options),\n);\n\nconst _googleGenAIIntegration = ((options: GoogleGenAIOptions = {}) => {\n return {\n name: GOOGLE_GENAI_INTEGRATION_NAME,\n setupOnce() {\n instrumentGoogleGenAI(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the Google Generative AI SDK.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments Google GenAI SDK client 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.googleGenAiIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record prompt 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.googleGenAiIntegration({\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.googleGenAiIntegration({\n * recordInputs: false,\n * recordOutputs: false\n * })\n * ],\n * });\n * ```\n *\n */\nexport const googleGenAIIntegration = defineIntegration(_googleGenAIIntegration);\n"],"names":[],"mappings":";;;;AAKO,MAAM,qBAAA,GAAwB,sBAAA;AAAA,EACnC,6BAAA;AAAA,EACA,CAAA,OAAA,KAAW,IAAI,gCAAA,CAAiC,OAAO;AACzD;AAEA,MAAM,uBAAA,IAA2B,CAAC,OAAA,GAA8B,EAAC,KAAM;AACrE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,6BAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,qBAAA,CAAsB,OAAO,CAAA;AAAA,IAC/B;AAAA,GACF;AACF,CAAA,CAAA;AAuDO,MAAM,sBAAA,GAAyB,kBAAkB,uBAAuB;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/google-genai/index.ts"],"sourcesContent":["import type { GoogleGenAIOptions, IntegrationFn } from '@sentry/core';\nimport { defineIntegration, GOOGLE_GENAI_INTEGRATION_NAME } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { SentryGoogleGenAiInstrumentation } from './instrumentation';\n\nexport const instrumentGoogleGenAI = generateInstrumentOnce<GoogleGenAIOptions>(\n GOOGLE_GENAI_INTEGRATION_NAME,\n options => new SentryGoogleGenAiInstrumentation(options),\n);\n\nconst _googleGenAIIntegration = ((options: GoogleGenAIOptions = {}) => {\n return {\n name: GOOGLE_GENAI_INTEGRATION_NAME,\n setupOnce() {\n instrumentGoogleGenAI(options);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the Google Generative AI SDK.\n *\n * This integration is enabled by default.\n *\n * When configured, this integration automatically instruments Google GenAI SDK client 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.googleGenAiIntegration()],\n * });\n * ```\n *\n * ## Options\n *\n * - `recordInputs`: Whether to record prompt messages (default: follows `dataCollection.genAI.inputs`)\n * - `recordOutputs`: Whether to record response text (default: follows `dataCollection.genAI.outputs`)\n *\n * ### Default Behavior\n *\n * By default, the integration will:\n * - Record inputs and outputs based on `dataCollection.genAI` in your Sentry client options\n * (or the deprecated `sendDefaultPii` option, for backwards compatibility)\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.googleGenAiIntegration({\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.googleGenAiIntegration({\n * recordInputs: false,\n * recordOutputs: false\n * })\n * ],\n * });\n * ```\n *\n */\nexport const googleGenAIIntegration = defineIntegration(_googleGenAIIntegration);\n"],"names":[],"mappings":";;;;AAKO,MAAM,qBAAA,GAAwB,sBAAA;AAAA,EACnC,6BAAA;AAAA,EACA,CAAA,OAAA,KAAW,IAAI,gCAAA,CAAiC,OAAO;AACzD;AAEA,MAAM,uBAAA,IAA2B,CAAC,OAAA,GAA8B,EAAC,KAAM;AACrE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,6BAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,qBAAA,CAAsB,OAAO,CAAA;AAAA,IAC/B;AAAA,GACF;AACF,CAAA,CAAA;AAwDO,MAAM,sBAAA,GAAyB,kBAAkB,uBAAuB;;;;"}
@@ -1,4 +1,5 @@
1
- import { InstrumentationBase, InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile } from '@opentelemetry/instrumentation';
1
+ import { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';
2
+ import { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile.js';
2
3
  import { SDK_VERSION, replaceExports, _INTERNAL_shouldSkipAiProviderWrapping, GOOGLE_GENAI_INTEGRATION_NAME, instrumentGoogleGenAIClient } from '@sentry/core';
3
4
 
4
5
  const supportedVersions = [">=0.10.0 <2"];
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/google-genai/instrumentation.ts"],"sourcesContent":["import type { InstrumentationConfig, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n} from '@opentelemetry/instrumentation';\nimport type { GoogleGenAIClient, GoogleGenAIOptions } from '@sentry/core';\nimport {\n _INTERNAL_shouldSkipAiProviderWrapping,\n GOOGLE_GENAI_INTEGRATION_NAME,\n instrumentGoogleGenAIClient,\n replaceExports,\n SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.10.0 <2'];\n\n/**\n * Represents the patched shape of the Google GenAI module export.\n */\ninterface PatchedModuleExports {\n [key: string]: unknown;\n GoogleGenAI?: unknown;\n}\n\ntype GoogleGenAIInstrumentationOptions = GoogleGenAIOptions & InstrumentationConfig;\n\n/**\n * Sentry Google GenAI instrumentation using OpenTelemetry.\n */\nexport class SentryGoogleGenAiInstrumentation extends InstrumentationBase<GoogleGenAIInstrumentationOptions> {\n public constructor(config: GoogleGenAIInstrumentationOptions = {}) {\n super('@sentry/instrumentation-google-genai', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n '@google/genai',\n supportedVersions,\n exports => this._patch(exports),\n exports => exports,\n // In CJS, @google/genai re-exports from (dist/node/index.cjs) file.\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 new InstrumentationNodeModuleFile(\n '@google/genai/dist/node/index.cjs',\n supportedVersions,\n exports => this._patch(exports),\n exports => exports,\n ),\n ],\n );\n return module;\n }\n\n /**\n * Core patch logic applying instrumentation to the Google GenAI client constructor.\n */\n private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n const Original = exports.GoogleGenAI;\n const config = this.getConfig();\n\n if (typeof Original !== 'function') {\n return exports;\n }\n\n const WrappedGoogleGenAI = function (this: unknown, ...args: unknown[]): GoogleGenAIClient {\n // Check if wrapping should be skipped (e.g., when LangChain is handling instrumentation)\n if (_INTERNAL_shouldSkipAiProviderWrapping(GOOGLE_GENAI_INTEGRATION_NAME)) {\n return Reflect.construct(Original, args) as GoogleGenAIClient;\n }\n\n const instance = Reflect.construct(Original, args);\n\n return instrumentGoogleGenAIClient(instance, config);\n };\n\n // Preserve static and prototype chains\n Object.setPrototypeOf(WrappedGoogleGenAI, Original);\n Object.setPrototypeOf(WrappedGoogleGenAI.prototype, Original.prototype);\n\n for (const key of Object.getOwnPropertyNames(Original)) {\n if (!['length', 'name', 'prototype'].includes(key)) {\n const descriptor = Object.getOwnPropertyDescriptor(Original, key);\n if (descriptor) {\n Object.defineProperty(WrappedGoogleGenAI, key, descriptor);\n }\n }\n }\n\n // Replace google genai exports with the wrapped constructor\n replaceExports(exports, 'GoogleGenAI', WrappedGoogleGenAI);\n\n return exports;\n }\n}\n"],"names":[],"mappings":";;;AAeA,MAAM,iBAAA,GAAoB,CAAC,aAAa,CAAA;AAejC,MAAM,yCAAyC,mBAAA,CAAuD;AAAA,EACpG,WAAA,CAAY,MAAA,GAA4C,EAAC,EAAG;AACjE,IAAA,KAAA,CAAM,sCAAA,EAAwC,aAAa,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAAwC;AAC7C,IAAA,MAAM,SAAS,IAAI,mCAAA;AAAA,MACjB,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,CAAA,OAAA,KAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,MAC9B,CAAA,OAAA,KAAW,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKX;AAAA,QACE,IAAI,6BAAA;AAAA,UACF,mCAAA;AAAA,UACA,iBAAA;AAAA,UACA,CAAA,OAAA,KAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,UAC9B,CAAA,OAAA,KAAW;AAAA;AACb;AACF,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,OAAO,OAAA,EAA4D;AACzE,IAAA,MAAM,WAAW,OAAA,CAAQ,WAAA;AACzB,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,kBAAA,GAAqB,YAA4B,IAAA,EAAoC;AAEzF,MAAA,IAAI,sCAAA,CAAuC,6BAA6B,CAAA,EAAG;AACzE,QAAA,OAAO,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAEjD,MAAA,OAAO,2BAAA,CAA4B,UAAU,MAAM,CAAA;AAAA,IACrD,CAAA;AAGA,IAAA,MAAA,CAAO,cAAA,CAAe,oBAAoB,QAAQ,CAAA;AAClD,IAAA,MAAA,CAAO,cAAA,CAAe,kBAAA,CAAmB,SAAA,EAAW,QAAA,CAAS,SAAS,CAAA;AAEtE,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,mBAAA,CAAoB,QAAQ,CAAA,EAAG;AACtD,MAAA,IAAI,CAAC,CAAC,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAClD,QAAA,MAAM,UAAA,GAAa,MAAA,CAAO,wBAAA,CAAyB,QAAA,EAAU,GAAG,CAAA;AAChE,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAA,CAAO,cAAA,CAAe,kBAAA,EAAoB,GAAA,EAAK,UAAU,CAAA;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,cAAA,CAAe,OAAA,EAAS,eAAe,kBAAkB,CAAA;AAEzD,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;;"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../src/integrations/tracing/google-genai/instrumentation.ts"],"sourcesContent":["import type { InstrumentationConfig, InstrumentationModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../InstrumentationNodeModuleFile';\nimport type { GoogleGenAIClient, GoogleGenAIOptions } from '@sentry/core';\nimport {\n _INTERNAL_shouldSkipAiProviderWrapping,\n GOOGLE_GENAI_INTEGRATION_NAME,\n instrumentGoogleGenAIClient,\n replaceExports,\n SDK_VERSION,\n} from '@sentry/core';\n\nconst supportedVersions = ['>=0.10.0 <2'];\n\n/**\n * Represents the patched shape of the Google GenAI module export.\n */\ninterface PatchedModuleExports {\n [key: string]: unknown;\n GoogleGenAI?: unknown;\n}\n\ntype GoogleGenAIInstrumentationOptions = GoogleGenAIOptions & InstrumentationConfig;\n\n/**\n * Sentry Google GenAI instrumentation using OpenTelemetry.\n */\nexport class SentryGoogleGenAiInstrumentation extends InstrumentationBase<GoogleGenAIInstrumentationOptions> {\n public constructor(config: GoogleGenAIInstrumentationOptions = {}) {\n super('@sentry/instrumentation-google-genai', SDK_VERSION, config);\n }\n\n /**\n * Initializes the instrumentation by defining the modules to be patched.\n */\n public init(): InstrumentationModuleDefinition {\n const module = new InstrumentationNodeModuleDefinition(\n '@google/genai',\n supportedVersions,\n exports => this._patch(exports),\n exports => exports,\n // In CJS, @google/genai re-exports from (dist/node/index.cjs) file.\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 new InstrumentationNodeModuleFile(\n '@google/genai/dist/node/index.cjs',\n supportedVersions,\n exports => this._patch(exports),\n exports => exports,\n ),\n ],\n );\n return module;\n }\n\n /**\n * Core patch logic applying instrumentation to the Google GenAI client constructor.\n */\n private _patch(exports: PatchedModuleExports): PatchedModuleExports | void {\n const Original = exports.GoogleGenAI;\n const config = this.getConfig();\n\n if (typeof Original !== 'function') {\n return exports;\n }\n\n const WrappedGoogleGenAI = function (this: unknown, ...args: unknown[]): GoogleGenAIClient {\n // Check if wrapping should be skipped (e.g., when LangChain is handling instrumentation)\n if (_INTERNAL_shouldSkipAiProviderWrapping(GOOGLE_GENAI_INTEGRATION_NAME)) {\n return Reflect.construct(Original, args) as GoogleGenAIClient;\n }\n\n const instance = Reflect.construct(Original, args);\n\n return instrumentGoogleGenAIClient(instance, config);\n };\n\n // Preserve static and prototype chains\n Object.setPrototypeOf(WrappedGoogleGenAI, Original);\n Object.setPrototypeOf(WrappedGoogleGenAI.prototype, Original.prototype);\n\n for (const key of Object.getOwnPropertyNames(Original)) {\n if (!['length', 'name', 'prototype'].includes(key)) {\n const descriptor = Object.getOwnPropertyDescriptor(Original, key);\n if (descriptor) {\n Object.defineProperty(WrappedGoogleGenAI, key, descriptor);\n }\n }\n }\n\n // Replace google genai exports with the wrapped constructor\n replaceExports(exports, 'GoogleGenAI', WrappedGoogleGenAI);\n\n return exports;\n }\n}\n"],"names":[],"mappings":";;;;AAYA,MAAM,iBAAA,GAAoB,CAAC,aAAa,CAAA;AAejC,MAAM,yCAAyC,mBAAA,CAAuD;AAAA,EACpG,WAAA,CAAY,MAAA,GAA4C,EAAC,EAAG;AACjE,IAAA,KAAA,CAAM,sCAAA,EAAwC,aAAa,MAAM,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAAwC;AAC7C,IAAA,MAAM,SAAS,IAAI,mCAAA;AAAA,MACjB,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,CAAA,OAAA,KAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,MAC9B,CAAA,OAAA,KAAW,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKX;AAAA,QACE,IAAI,6BAAA;AAAA,UACF,mCAAA;AAAA,UACA,iBAAA;AAAA,UACA,CAAA,OAAA,KAAW,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,UAC9B,CAAA,OAAA,KAAW;AAAA;AACb;AACF,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,OAAO,OAAA,EAA4D;AACzE,IAAA,MAAM,WAAW,OAAA,CAAQ,WAAA;AACzB,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,kBAAA,GAAqB,YAA4B,IAAA,EAAoC;AAEzF,MAAA,IAAI,sCAAA,CAAuC,6BAA6B,CAAA,EAAG;AACzE,QAAA,OAAO,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAAA,MACzC;AAEA,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAEjD,MAAA,OAAO,2BAAA,CAA4B,UAAU,MAAM,CAAA;AAAA,IACrD,CAAA;AAGA,IAAA,MAAA,CAAO,cAAA,CAAe,oBAAoB,QAAQ,CAAA;AAClD,IAAA,MAAA,CAAO,cAAA,CAAe,kBAAA,CAAmB,SAAA,EAAW,QAAA,CAAS,SAAS,CAAA;AAEtE,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,mBAAA,CAAoB,QAAQ,CAAA,EAAG;AACtD,MAAA,IAAI,CAAC,CAAC,QAAA,EAAU,MAAA,EAAQ,WAAW,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAClD,QAAA,MAAM,UAAA,GAAa,MAAA,CAAO,wBAAA,CAAyB,QAAA,EAAU,GAAG,CAAA;AAChE,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAA,CAAO,cAAA,CAAe,kBAAA,EAAoB,GAAA,EAAK,UAAU,CAAA;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAGA,IAAA,cAAA,CAAe,OAAA,EAAS,eAAe,kBAAkB,CAAA;AAEzD,IAAA,OAAO,OAAA;AAAA,EACT;AACF;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { context, trace } from '@opentelemetry/api';
2
- import { InstrumentationBase, InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
2
+ import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped, safeExecuteInTheMiddle } from '@opentelemetry/instrumentation';
3
+ import { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile.js';
3
4
  import { SpanNames } from './enum.js';
4
5
  import { AttributeNames } from './enums/AttributeNames.js';
5
6
  import { OTEL_GRAPHQL_DATA_SYMBOL } from './symbols.js';
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/graphql/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-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n */\n/* eslint-disable */\n\nimport { context, trace } from '@opentelemetry/api';\nimport {\n isWrapped,\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n InstrumentationNodeModuleFile,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport type {\n DefinitionNode,\n DocumentNode,\n ExecutionArgs,\n ExecutionResult,\n GraphQLError,\n GraphQLFieldResolver,\n GraphQLSchema,\n GraphQLTypeResolver,\n OperationDefinitionNode,\n ParseOptions,\n PromiseOrValue,\n Source,\n TypeInfo,\n ValidationRule,\n} from './graphql-types';\nimport type { Maybe } from './graphql-types';\nimport { SpanNames } from './enum';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { OTEL_GRAPHQL_DATA_SYMBOL } from './symbols';\n\nimport {\n executeFunctionWithObj,\n executeArgumentsArray,\n executeType,\n parseType,\n validateType,\n OtelExecutionArgs,\n ObjectWithGraphQLData,\n OPERATION_NOT_SUPPORTED,\n} from './internal-types';\nimport {\n addInputVariableAttributes,\n addSpanSource,\n endSpan,\n getOperation,\n isPromise,\n wrapFieldResolver,\n wrapFields,\n} from './utils';\n\nimport { SDK_VERSION } from '@sentry/core';\nimport * as api from '@opentelemetry/api';\nimport { GraphQLInstrumentationConfig, GraphQLInstrumentationParsedConfig } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-graphql';\n\nconst DEFAULT_CONFIG: GraphQLInstrumentationParsedConfig = {\n mergeItems: false,\n depth: -1,\n allowValues: false,\n ignoreResolveSpans: false,\n};\n\nconst supportedVersions = ['>=14.0.0 <17'];\n\nexport class GraphQLInstrumentation extends InstrumentationBase<GraphQLInstrumentationParsedConfig> {\n constructor(config: GraphQLInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, { ...DEFAULT_CONFIG, ...config });\n }\n\n override setConfig(config: GraphQLInstrumentationConfig = {}) {\n super.setConfig({ ...DEFAULT_CONFIG, ...config });\n }\n\n protected init() {\n const module = new InstrumentationNodeModuleDefinition('graphql', supportedVersions);\n module.files.push(this._addPatchingExecute());\n module.files.push(this._addPatchingParser());\n module.files.push(this._addPatchingValidate());\n\n return module;\n }\n\n private _addPatchingExecute(): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n 'graphql/execution/execute.js',\n supportedVersions,\n // cannot make it work with appropriate type as execute function has 2\n //types and/cannot import function but only types\n (moduleExports: any) => {\n if (isWrapped(moduleExports.execute)) {\n this._unwrap(moduleExports, 'execute');\n }\n this._wrap(moduleExports, 'execute', this._patchExecute(moduleExports.defaultFieldResolver));\n return moduleExports;\n },\n moduleExports => {\n if (moduleExports) {\n this._unwrap(moduleExports, 'execute');\n }\n },\n );\n }\n\n private _addPatchingParser(): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n 'graphql/language/parser.js',\n supportedVersions,\n (moduleExports: { parse: parseType; [key: string]: any }) => {\n if (isWrapped(moduleExports.parse)) {\n this._unwrap(moduleExports, 'parse');\n }\n this._wrap(moduleExports, 'parse', this._patchParse());\n return moduleExports;\n },\n (moduleExports: { parse: parseType; [key: string]: any }) => {\n if (moduleExports) {\n this._unwrap(moduleExports, 'parse');\n }\n },\n );\n }\n\n private _addPatchingValidate(): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n 'graphql/validation/validate.js',\n supportedVersions,\n moduleExports => {\n if (isWrapped(moduleExports.validate)) {\n this._unwrap(moduleExports, 'validate');\n }\n this._wrap(moduleExports, 'validate', this._patchValidate());\n return moduleExports;\n },\n moduleExports => {\n if (moduleExports) {\n this._unwrap(moduleExports, 'validate');\n }\n },\n );\n }\n\n private _patchExecute(defaultFieldResolved: GraphQLFieldResolver<any, any>): (original: executeType) => executeType {\n const instrumentation = this;\n return function execute(original) {\n return function patchExecute(this: executeType): PromiseOrValue<ExecutionResult> {\n let processedArgs: OtelExecutionArgs;\n\n // case when apollo server is used for example\n if (arguments.length >= 2) {\n const args = arguments as unknown as executeArgumentsArray;\n processedArgs = instrumentation._wrapExecuteArgs(\n args[0],\n args[1],\n args[2],\n args[3],\n args[4],\n args[5],\n args[6],\n args[7],\n defaultFieldResolved,\n );\n } else {\n const args = arguments[0] as ExecutionArgs;\n processedArgs = instrumentation._wrapExecuteArgs(\n args.schema,\n args.document,\n args.rootValue,\n args.contextValue,\n args.variableValues,\n args.operationName,\n args.fieldResolver,\n args.typeResolver,\n defaultFieldResolved,\n );\n }\n\n const operation = getOperation(processedArgs.document, processedArgs.operationName);\n\n const span = instrumentation._createExecuteSpan(operation, processedArgs);\n\n processedArgs.contextValue[OTEL_GRAPHQL_DATA_SYMBOL] = {\n source: processedArgs.document\n ? processedArgs.document || (processedArgs.document as ObjectWithGraphQLData)[OTEL_GRAPHQL_DATA_SYMBOL]\n : undefined,\n span,\n fields: {},\n };\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle<PromiseOrValue<ExecutionResult>>(\n () => {\n return (original as executeFunctionWithObj).apply(this, [processedArgs]);\n },\n (err, result) => {\n instrumentation._handleExecutionResult(span, err, result);\n },\n );\n });\n };\n };\n }\n\n private _handleExecutionResult(span: api.Span, err?: Error, result?: PromiseOrValue<ExecutionResult>) {\n const config = this.getConfig();\n if (result === undefined || err) {\n endSpan(span, err);\n return;\n }\n\n if (isPromise(result)) {\n (result as Promise<ExecutionResult>).then(\n resultData => {\n if (typeof config.responseHook !== 'function') {\n endSpan(span);\n return;\n }\n this._executeResponseHook(span, resultData);\n },\n error => {\n endSpan(span, error);\n },\n );\n } else {\n if (typeof config.responseHook !== 'function') {\n endSpan(span);\n return;\n }\n this._executeResponseHook(span, result as ExecutionResult);\n }\n }\n\n private _executeResponseHook(span: api.Span, result: ExecutionResult) {\n const { responseHook } = this.getConfig();\n if (!responseHook) {\n return;\n }\n\n safeExecuteInTheMiddle(\n () => {\n responseHook(span, result);\n },\n err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n\n endSpan(span, undefined);\n },\n true,\n );\n }\n\n private _patchParse(): (original: parseType) => parseType {\n const instrumentation = this;\n return function parse(original) {\n return function patchParse(this: parseType, source: string | Source, options?: ParseOptions): DocumentNode {\n return instrumentation._parse(this, original, source, options);\n };\n };\n }\n\n private _patchValidate(): (original: validateType) => validateType {\n const instrumentation = this;\n return function validate(original: validateType) {\n return function patchValidate(\n this: validateType,\n schema: GraphQLSchema,\n documentAST: DocumentNode,\n rules?: ReadonlyArray<ValidationRule>,\n options?: { maxErrors?: number },\n typeInfo?: TypeInfo,\n ): ReadonlyArray<GraphQLError> {\n return instrumentation._validate(this, original, schema, documentAST, rules, typeInfo, options);\n };\n };\n }\n\n private _parse(obj: parseType, original: parseType, source: string | Source, options?: ParseOptions): DocumentNode {\n const config = this.getConfig();\n const span = this.tracer.startSpan(SpanNames.PARSE);\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle<DocumentNode & ObjectWithGraphQLData>(\n () => {\n return original.call(obj, source, options);\n },\n (err, result) => {\n if (result) {\n const operation = getOperation(result);\n if (!operation) {\n span.updateName(SpanNames.SCHEMA_PARSE);\n } else if (result.loc) {\n addSpanSource(span, result.loc, config.allowValues);\n }\n }\n endSpan(span, err);\n },\n );\n });\n }\n\n private _validate(\n obj: validateType,\n original: validateType,\n schema: GraphQLSchema,\n documentAST: DocumentNode,\n rules?: ReadonlyArray<ValidationRule>,\n typeInfo?: TypeInfo,\n options?: { maxErrors?: number },\n ): ReadonlyArray<GraphQLError> {\n const span = this.tracer.startSpan(SpanNames.VALIDATE, {});\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle<ReadonlyArray<GraphQLError>>(\n () => {\n return original.call(obj, schema, documentAST, rules, options, typeInfo);\n },\n (err, errors) => {\n if (!documentAST.loc) {\n span.updateName(SpanNames.SCHEMA_VALIDATE);\n }\n if (errors && errors.length) {\n span.recordException({\n name: AttributeNames.ERROR_VALIDATION_NAME,\n message: JSON.stringify(errors),\n });\n }\n endSpan(span, err);\n },\n );\n });\n }\n\n private _createExecuteSpan(operation: DefinitionNode | undefined, processedArgs: ExecutionArgs): api.Span {\n const config = this.getConfig();\n\n const span = this.tracer.startSpan(SpanNames.EXECUTE, {});\n if (operation) {\n const { operation: operationType, name: nameNode } = operation as OperationDefinitionNode;\n\n span.setAttribute(AttributeNames.OPERATION_TYPE, operationType);\n\n const operationName = nameNode?.value;\n\n // https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/instrumentation/graphql/\n // > The span name MUST be of the format <graphql.operation.type> <graphql.operation.name> provided that graphql.operation.type and graphql.operation.name are available.\n // > If graphql.operation.name is not available, the span SHOULD be named <graphql.operation.type>.\n if (operationName) {\n span.setAttribute(AttributeNames.OPERATION_NAME, operationName);\n span.updateName(`${operationType} ${operationName}`);\n } else {\n span.updateName(operationType);\n }\n } else {\n let operationName = ' ';\n if (processedArgs.operationName) {\n operationName = ` \"${processedArgs.operationName}\" `;\n }\n operationName = OPERATION_NOT_SUPPORTED.replace('$operationName$', operationName);\n span.setAttribute(AttributeNames.OPERATION_NAME, operationName);\n }\n\n if (processedArgs.document?.loc) {\n addSpanSource(span, processedArgs.document.loc, config.allowValues);\n }\n\n if (processedArgs.variableValues && config.allowValues) {\n addInputVariableAttributes(span, processedArgs.variableValues);\n }\n\n return span;\n }\n\n private _wrapExecuteArgs(\n schema: GraphQLSchema,\n document: DocumentNode,\n rootValue: any,\n contextValue: any,\n variableValues: Maybe<{ [key: string]: any }>,\n operationName: Maybe<string>,\n fieldResolver: Maybe<GraphQLFieldResolver<any, any>>,\n typeResolver: Maybe<GraphQLTypeResolver<any, any>>,\n defaultFieldResolved: GraphQLFieldResolver<any, any>,\n ): OtelExecutionArgs {\n if (!contextValue) {\n contextValue = {};\n }\n\n if (contextValue[OTEL_GRAPHQL_DATA_SYMBOL] || this.getConfig().ignoreResolveSpans) {\n return {\n schema,\n document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n };\n }\n\n const isUsingDefaultResolver = fieldResolver == null;\n // follows graphql implementation here:\n // https://github.com/graphql/graphql-js/blob/0b7daed9811731362c71900e12e5ea0d1ecc7f1f/src/execution/execute.ts#L494\n const fieldResolverForExecute = fieldResolver ?? defaultFieldResolved;\n fieldResolver = wrapFieldResolver(\n this.tracer,\n () => this.getConfig(),\n fieldResolverForExecute,\n isUsingDefaultResolver,\n );\n\n if (schema) {\n wrapFields(schema.getQueryType() as any, this.tracer, () => this.getConfig());\n wrapFields(schema.getMutationType() as any, this.tracer, () => this.getConfig());\n }\n\n return {\n schema,\n document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/graphql/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-graphql\n * - Upstream version: @opentelemetry/instrumentation-graphql@0.66.0\n * - Types from `graphql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments\n */\n/* eslint-disable */\n\nimport { context, trace } from '@opentelemetry/api';\nimport {\n isWrapped,\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport type {\n DefinitionNode,\n DocumentNode,\n ExecutionArgs,\n ExecutionResult,\n GraphQLError,\n GraphQLFieldResolver,\n GraphQLSchema,\n GraphQLTypeResolver,\n OperationDefinitionNode,\n ParseOptions,\n PromiseOrValue,\n Source,\n TypeInfo,\n ValidationRule,\n} from './graphql-types';\nimport type { Maybe } from './graphql-types';\nimport { SpanNames } from './enum';\nimport { AttributeNames } from './enums/AttributeNames';\nimport { OTEL_GRAPHQL_DATA_SYMBOL } from './symbols';\n\nimport {\n executeFunctionWithObj,\n executeArgumentsArray,\n executeType,\n parseType,\n validateType,\n OtelExecutionArgs,\n ObjectWithGraphQLData,\n OPERATION_NOT_SUPPORTED,\n} from './internal-types';\nimport {\n addInputVariableAttributes,\n addSpanSource,\n endSpan,\n getOperation,\n isPromise,\n wrapFieldResolver,\n wrapFields,\n} from './utils';\n\nimport { SDK_VERSION } from '@sentry/core';\nimport * as api from '@opentelemetry/api';\nimport { GraphQLInstrumentationConfig, GraphQLInstrumentationParsedConfig } from './types';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-graphql';\n\nconst DEFAULT_CONFIG: GraphQLInstrumentationParsedConfig = {\n mergeItems: false,\n depth: -1,\n allowValues: false,\n ignoreResolveSpans: false,\n};\n\nconst supportedVersions = ['>=14.0.0 <17'];\n\nexport class GraphQLInstrumentation extends InstrumentationBase<GraphQLInstrumentationParsedConfig> {\n constructor(config: GraphQLInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, { ...DEFAULT_CONFIG, ...config });\n }\n\n override setConfig(config: GraphQLInstrumentationConfig = {}) {\n super.setConfig({ ...DEFAULT_CONFIG, ...config });\n }\n\n protected init() {\n const module = new InstrumentationNodeModuleDefinition('graphql', supportedVersions);\n module.files.push(this._addPatchingExecute());\n module.files.push(this._addPatchingParser());\n module.files.push(this._addPatchingValidate());\n\n return module;\n }\n\n private _addPatchingExecute(): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n 'graphql/execution/execute.js',\n supportedVersions,\n // cannot make it work with appropriate type as execute function has 2\n //types and/cannot import function but only types\n (moduleExports: any) => {\n if (isWrapped(moduleExports.execute)) {\n this._unwrap(moduleExports, 'execute');\n }\n this._wrap(moduleExports, 'execute', this._patchExecute(moduleExports.defaultFieldResolver));\n return moduleExports;\n },\n moduleExports => {\n if (moduleExports) {\n this._unwrap(moduleExports, 'execute');\n }\n },\n );\n }\n\n private _addPatchingParser(): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n 'graphql/language/parser.js',\n supportedVersions,\n (moduleExports: { parse: parseType; [key: string]: any }) => {\n if (isWrapped(moduleExports.parse)) {\n this._unwrap(moduleExports, 'parse');\n }\n this._wrap(moduleExports, 'parse', this._patchParse());\n return moduleExports;\n },\n (moduleExports: { parse: parseType; [key: string]: any }) => {\n if (moduleExports) {\n this._unwrap(moduleExports, 'parse');\n }\n },\n );\n }\n\n private _addPatchingValidate(): InstrumentationNodeModuleFile {\n return new InstrumentationNodeModuleFile(\n 'graphql/validation/validate.js',\n supportedVersions,\n moduleExports => {\n if (isWrapped(moduleExports.validate)) {\n this._unwrap(moduleExports, 'validate');\n }\n this._wrap(moduleExports, 'validate', this._patchValidate());\n return moduleExports;\n },\n moduleExports => {\n if (moduleExports) {\n this._unwrap(moduleExports, 'validate');\n }\n },\n );\n }\n\n private _patchExecute(defaultFieldResolved: GraphQLFieldResolver<any, any>): (original: executeType) => executeType {\n const instrumentation = this;\n return function execute(original) {\n return function patchExecute(this: executeType): PromiseOrValue<ExecutionResult> {\n let processedArgs: OtelExecutionArgs;\n\n // case when apollo server is used for example\n if (arguments.length >= 2) {\n const args = arguments as unknown as executeArgumentsArray;\n processedArgs = instrumentation._wrapExecuteArgs(\n args[0],\n args[1],\n args[2],\n args[3],\n args[4],\n args[5],\n args[6],\n args[7],\n defaultFieldResolved,\n );\n } else {\n const args = arguments[0] as ExecutionArgs;\n processedArgs = instrumentation._wrapExecuteArgs(\n args.schema,\n args.document,\n args.rootValue,\n args.contextValue,\n args.variableValues,\n args.operationName,\n args.fieldResolver,\n args.typeResolver,\n defaultFieldResolved,\n );\n }\n\n const operation = getOperation(processedArgs.document, processedArgs.operationName);\n\n const span = instrumentation._createExecuteSpan(operation, processedArgs);\n\n processedArgs.contextValue[OTEL_GRAPHQL_DATA_SYMBOL] = {\n source: processedArgs.document\n ? processedArgs.document || (processedArgs.document as ObjectWithGraphQLData)[OTEL_GRAPHQL_DATA_SYMBOL]\n : undefined,\n span,\n fields: {},\n };\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle<PromiseOrValue<ExecutionResult>>(\n () => {\n return (original as executeFunctionWithObj).apply(this, [processedArgs]);\n },\n (err, result) => {\n instrumentation._handleExecutionResult(span, err, result);\n },\n );\n });\n };\n };\n }\n\n private _handleExecutionResult(span: api.Span, err?: Error, result?: PromiseOrValue<ExecutionResult>) {\n const config = this.getConfig();\n if (result === undefined || err) {\n endSpan(span, err);\n return;\n }\n\n if (isPromise(result)) {\n (result as Promise<ExecutionResult>).then(\n resultData => {\n if (typeof config.responseHook !== 'function') {\n endSpan(span);\n return;\n }\n this._executeResponseHook(span, resultData);\n },\n error => {\n endSpan(span, error);\n },\n );\n } else {\n if (typeof config.responseHook !== 'function') {\n endSpan(span);\n return;\n }\n this._executeResponseHook(span, result as ExecutionResult);\n }\n }\n\n private _executeResponseHook(span: api.Span, result: ExecutionResult) {\n const { responseHook } = this.getConfig();\n if (!responseHook) {\n return;\n }\n\n safeExecuteInTheMiddle(\n () => {\n responseHook(span, result);\n },\n err => {\n if (err) {\n this._diag.error('Error running response hook', err);\n }\n\n endSpan(span, undefined);\n },\n true,\n );\n }\n\n private _patchParse(): (original: parseType) => parseType {\n const instrumentation = this;\n return function parse(original) {\n return function patchParse(this: parseType, source: string | Source, options?: ParseOptions): DocumentNode {\n return instrumentation._parse(this, original, source, options);\n };\n };\n }\n\n private _patchValidate(): (original: validateType) => validateType {\n const instrumentation = this;\n return function validate(original: validateType) {\n return function patchValidate(\n this: validateType,\n schema: GraphQLSchema,\n documentAST: DocumentNode,\n rules?: ReadonlyArray<ValidationRule>,\n options?: { maxErrors?: number },\n typeInfo?: TypeInfo,\n ): ReadonlyArray<GraphQLError> {\n return instrumentation._validate(this, original, schema, documentAST, rules, typeInfo, options);\n };\n };\n }\n\n private _parse(obj: parseType, original: parseType, source: string | Source, options?: ParseOptions): DocumentNode {\n const config = this.getConfig();\n const span = this.tracer.startSpan(SpanNames.PARSE);\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle<DocumentNode & ObjectWithGraphQLData>(\n () => {\n return original.call(obj, source, options);\n },\n (err, result) => {\n if (result) {\n const operation = getOperation(result);\n if (!operation) {\n span.updateName(SpanNames.SCHEMA_PARSE);\n } else if (result.loc) {\n addSpanSource(span, result.loc, config.allowValues);\n }\n }\n endSpan(span, err);\n },\n );\n });\n }\n\n private _validate(\n obj: validateType,\n original: validateType,\n schema: GraphQLSchema,\n documentAST: DocumentNode,\n rules?: ReadonlyArray<ValidationRule>,\n typeInfo?: TypeInfo,\n options?: { maxErrors?: number },\n ): ReadonlyArray<GraphQLError> {\n const span = this.tracer.startSpan(SpanNames.VALIDATE, {});\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddle<ReadonlyArray<GraphQLError>>(\n () => {\n return original.call(obj, schema, documentAST, rules, options, typeInfo);\n },\n (err, errors) => {\n if (!documentAST.loc) {\n span.updateName(SpanNames.SCHEMA_VALIDATE);\n }\n if (errors && errors.length) {\n span.recordException({\n name: AttributeNames.ERROR_VALIDATION_NAME,\n message: JSON.stringify(errors),\n });\n }\n endSpan(span, err);\n },\n );\n });\n }\n\n private _createExecuteSpan(operation: DefinitionNode | undefined, processedArgs: ExecutionArgs): api.Span {\n const config = this.getConfig();\n\n const span = this.tracer.startSpan(SpanNames.EXECUTE, {});\n if (operation) {\n const { operation: operationType, name: nameNode } = operation as OperationDefinitionNode;\n\n span.setAttribute(AttributeNames.OPERATION_TYPE, operationType);\n\n const operationName = nameNode?.value;\n\n // https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/instrumentation/graphql/\n // > The span name MUST be of the format <graphql.operation.type> <graphql.operation.name> provided that graphql.operation.type and graphql.operation.name are available.\n // > If graphql.operation.name is not available, the span SHOULD be named <graphql.operation.type>.\n if (operationName) {\n span.setAttribute(AttributeNames.OPERATION_NAME, operationName);\n span.updateName(`${operationType} ${operationName}`);\n } else {\n span.updateName(operationType);\n }\n } else {\n let operationName = ' ';\n if (processedArgs.operationName) {\n operationName = ` \"${processedArgs.operationName}\" `;\n }\n operationName = OPERATION_NOT_SUPPORTED.replace('$operationName$', operationName);\n span.setAttribute(AttributeNames.OPERATION_NAME, operationName);\n }\n\n if (processedArgs.document?.loc) {\n addSpanSource(span, processedArgs.document.loc, config.allowValues);\n }\n\n if (processedArgs.variableValues && config.allowValues) {\n addInputVariableAttributes(span, processedArgs.variableValues);\n }\n\n return span;\n }\n\n private _wrapExecuteArgs(\n schema: GraphQLSchema,\n document: DocumentNode,\n rootValue: any,\n contextValue: any,\n variableValues: Maybe<{ [key: string]: any }>,\n operationName: Maybe<string>,\n fieldResolver: Maybe<GraphQLFieldResolver<any, any>>,\n typeResolver: Maybe<GraphQLTypeResolver<any, any>>,\n defaultFieldResolved: GraphQLFieldResolver<any, any>,\n ): OtelExecutionArgs {\n if (!contextValue) {\n contextValue = {};\n }\n\n if (contextValue[OTEL_GRAPHQL_DATA_SYMBOL] || this.getConfig().ignoreResolveSpans) {\n return {\n schema,\n document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n };\n }\n\n const isUsingDefaultResolver = fieldResolver == null;\n // follows graphql implementation here:\n // https://github.com/graphql/graphql-js/blob/0b7daed9811731362c71900e12e5ea0d1ecc7f1f/src/execution/execute.ts#L494\n const fieldResolverForExecute = fieldResolver ?? defaultFieldResolved;\n fieldResolver = wrapFieldResolver(\n this.tracer,\n () => this.getConfig(),\n fieldResolverForExecute,\n isUsingDefaultResolver,\n );\n\n if (schema) {\n wrapFields(schema.getQueryType() as any, this.tracer, () => this.getConfig());\n wrapFields(schema.getMutationType() as any, this.tracer, () => this.getConfig());\n }\n\n return {\n schema,\n document,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as api from '@opentelemetry/api';
2
- import { getRPCMetadata, RPCType } from '@opentelemetry/core';
2
+ import { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute.js';
3
3
  import { InstrumentationBase, semconvStabilityFromStr, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
4
4
  import { SDK_VERSION } from '@sentry/core';
5
5
  import { HapiComponentName, handlerPatched } from './internal-types.js';
@@ -226,10 +226,7 @@ class HapiInstrumentation extends InstrumentationBase {
226
226
  if (api.trace.getSpan(api.context.active()) === void 0) {
227
227
  return await oldHandler.call(this, ...params);
228
228
  }
229
- const rpcMetadata = getRPCMetadata(api.context.active());
230
- if (rpcMetadata?.type === RPCType.HTTP) {
231
- rpcMetadata.route = route.path;
232
- }
229
+ setHttpServerSpanRouteAttribute(route.path);
233
230
  const metadata = getRouteMetadata(route, instrumentation._semconvStability, pluginName);
234
231
  const span = instrumentation.tracer.startSpan(metadata.name, {
235
232
  attributes: metadata.attributes