dd-trace 6.17.0 → 6.18.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 (70) hide show
  1. package/index.d.ts +52 -9
  2. package/package.json +1 -1
  3. package/packages/datadog-instrumentations/src/cucumber.js +10 -5
  4. package/packages/datadog-instrumentations/src/cypress-config.js +27 -15
  5. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +6 -0
  6. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -1
  7. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -6
  8. package/packages/datadog-instrumentations/src/helpers/register.js +20 -0
  9. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +41 -4
  10. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentation-registry.js +15 -13
  11. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +43 -0
  12. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +13 -0
  13. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.js +28 -3
  14. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +4 -0
  15. package/packages/datadog-instrumentations/src/jest.js +27 -3
  16. package/packages/datadog-instrumentations/src/mocha/main.js +7 -5
  17. package/packages/datadog-instrumentations/src/mocha/utils.js +8 -8
  18. package/packages/datadog-instrumentations/src/playwright-reporter.js +3 -4
  19. package/packages/datadog-instrumentations/src/playwright.js +47 -6
  20. package/packages/datadog-instrumentations/src/undici.js +7 -3
  21. package/packages/datadog-instrumentations/src/vitest-main.js +91 -20
  22. package/packages/datadog-instrumentations/src/webdriverio.js +28 -12
  23. package/packages/datadog-instrumentations/src/ws.js +41 -1
  24. package/packages/datadog-plugin-cucumber/src/index.js +3 -4
  25. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +44 -14
  26. package/packages/datadog-plugin-cypress/src/index.js +3 -1
  27. package/packages/datadog-plugin-jest/src/index.js +3 -4
  28. package/packages/datadog-plugin-mocha/src/index.js +3 -4
  29. package/packages/datadog-plugin-playwright/src/index.js +11 -6
  30. package/packages/datadog-plugin-vitest/src/index.js +3 -4
  31. package/packages/datadog-plugin-ws/src/producer.js +1 -1
  32. package/packages/datadog-shimmer/src/shimmer.js +14 -10
  33. package/packages/datadog-turbopack/index.js +4 -1
  34. package/packages/datadog-turbopack/src/loader.js +6 -2
  35. package/packages/dd-trace/src/agent/info.js +5 -4
  36. package/packages/dd-trace/src/config/generated-config-types.d.ts +15 -15
  37. package/packages/dd-trace/src/config/index.js +7 -6
  38. package/packages/dd-trace/src/config/supported-configurations.json +11 -0
  39. package/packages/dd-trace/src/debugger/devtools_client/config.js +2 -1
  40. package/packages/dd-trace/src/debugger/devtools_client/send.js +1 -1
  41. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +5 -3
  42. package/packages/dd-trace/src/debugger/devtools_client/status.js +1 -1
  43. package/packages/dd-trace/src/debugger/index.js +1 -1
  44. package/packages/dd-trace/src/evp_proxy/constants.js +2 -0
  45. package/packages/dd-trace/src/evp_proxy/direct.js +17 -13
  46. package/packages/dd-trace/src/evp_proxy/discovery.js +14 -10
  47. package/packages/dd-trace/src/evp_proxy/path.js +21 -7
  48. package/packages/dd-trace/src/exporters/common/url.js +33 -2
  49. package/packages/dd-trace/src/llmobs/prompts/manager.js +10 -2
  50. package/packages/dd-trace/src/llmobs/prompts/prompt.js +77 -11
  51. package/packages/dd-trace/src/llmobs/tagger.js +9 -4
  52. package/packages/dd-trace/src/openfeature/configuration_source.js +4 -1
  53. package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -3
  54. package/packages/dd-trace/src/openfeature/index.js +6 -2
  55. package/packages/dd-trace/src/openfeature/writers/base.js +90 -17
  56. package/packages/dd-trace/src/openfeature/writers/exposures.js +4 -0
  57. package/packages/dd-trace/src/openfeature/writers/util.js +104 -33
  58. package/packages/dd-trace/src/opentracing/tracer.js +3 -3
  59. package/packages/dd-trace/src/plugin_manager.js +27 -8
  60. package/packages/dd-trace/src/plugins/ci_plugin.js +1 -1
  61. package/packages/dd-trace/src/plugins/util/test.js +9 -4
  62. package/packages/dd-trace/src/proxy.js +2 -2
  63. package/packages/dd-trace/src/telemetry/send-data.js +2 -1
  64. package/packages/dd-trace/src/telemetry/telemetry.js +1 -1
  65. package/packages/dd-trace/src/tracer.js +5 -4
  66. package/packages/datadog-instrumentations/src/azure-cosmos.js +0 -7
  67. package/packages/datadog-instrumentations/src/bullmq.js +0 -11
  68. package/packages/datadog-instrumentations/src/langchain.js +0 -7
  69. package/packages/datadog-instrumentations/src/langgraph.js +0 -7
  70. package/packages/datadog-instrumentations/src/mercurius.js +0 -11
@@ -2,6 +2,8 @@
2
2
 
3
3
  const {
4
4
  EVP_EVENT_PLATFORM_SUBDOMAIN,
5
+ EVP_ORIGIN_HEADER_NAME,
6
+ EVP_ORIGIN_VERSION_HEADER_NAME,
5
7
  EVP_PROXY_PATH_V2,
6
8
  EVP_PROXY_PATH_V4,
7
9
  EVP_SUBDOMAIN_HEADER_NAME,
@@ -10,6 +12,10 @@ const { createDirectEVPRoute } = require('../../evp_proxy/direct')
10
12
  const { discoverEVPProxy } = require('../../evp_proxy/discovery')
11
13
  const logger = require('../../log')
12
14
 
15
+ const ROUTE_DISCOVERY_COOLDOWN_MS = 60_000
16
+ const REQUIRED_LOCAL_HEADERS = [EVP_ORIGIN_HEADER_NAME, EVP_ORIGIN_VERSION_HEADER_NAME]
17
+ const STOP_NOOP = () => {}
18
+
13
19
  let missingRouteWarningLogged = false
14
20
 
15
21
  /**
@@ -26,7 +32,7 @@ function warnExposureDeliveryUnavailable () {
26
32
  }
27
33
 
28
34
  /**
29
- * Preserves Agent exposure delivery for the Remote Configuration source.
35
+ * Preserves the one-time EVP v2 capability check for the Remote Configuration source.
30
36
  *
31
37
  * @param {import('../../config')} config - Tracer configuration object
32
38
  * @param {Function} setWriterEnabledValue - Callback to set the writer enabled state
@@ -49,6 +55,7 @@ function setAgentStrategy (config, setWriterEnabledValue) {
49
55
  setWriterEnabledValue(false)
50
56
  }
51
57
  })
58
+ return STOP_NOOP
52
59
  }
53
60
 
54
61
  /**
@@ -62,54 +69,118 @@ function setAgentStrategy (config, setWriterEnabledValue) {
62
69
  */
63
70
  function setAgentlessStrategy (config, setWriterEnabledValue) {
64
71
  const directRoute = createDirectEVPRoute(config, EVP_EVENT_PLATFORM_SUBDOMAIN)
72
+ let discovering = false
73
+ let recoveryTimer
74
+ let state = 'unknown'
75
+ let stopped = false
65
76
 
66
- discoverEVPProxy(config.url, {
67
- supportedPaths: [EVP_PROXY_PATH_V4, EVP_PROXY_PATH_V2],
68
- }, (error, localRoute) => {
69
- if (localRoute) {
70
- const route = {
71
- ...localRoute,
72
- headers: {
73
- [EVP_SUBDOMAIN_HEADER_NAME]: EVP_EVENT_PLATFORM_SUBDOMAIN,
74
- },
75
- }
76
- if (directRoute) route.fallback = directRoute
77
- logger.debug('FFE Writer enabled with local EVP route %s', route.basePath)
78
- setWriterEnabledValue(true, route)
79
- return
77
+ const stop = () => {
78
+ stopped = true
79
+ clearTimeout(recoveryTimer)
80
+ recoveryTimer = undefined
81
+ }
82
+
83
+ const scheduleRecovery = () => {
84
+ if (stopped || state !== 'unavailable' || recoveryTimer !== undefined) return
85
+
86
+ recoveryTimer = setTimeout(discover, ROUTE_DISCOVERY_COOLDOWN_MS)
87
+ recoveryTimer.unref?.()
88
+ }
89
+
90
+ const markUnavailable = () => {
91
+ if (stopped || state === 'direct') return
92
+ if (state !== 'unavailable') {
93
+ state = 'unavailable'
94
+ setWriterEnabledValue(false)
80
95
  }
96
+ scheduleRecovery()
97
+ }
81
98
 
99
+ const activateDirect = () => {
100
+ if (stopped || state === 'direct' || directRoute === undefined) return
101
+ state = 'direct'
102
+ clearTimeout(recoveryTimer)
103
+ recoveryTimer = undefined
104
+ setWriterEnabledValue(true, directRoute)
105
+ }
106
+
107
+ /**
108
+ * @param {{url: URL, basePath: string}} localRoute - Discovered local route
109
+ */
110
+ const activateLocal = localRoute => {
111
+ state = 'local'
112
+ const route = {
113
+ ...localRoute,
114
+ headers: {
115
+ [EVP_SUBDOMAIN_HEADER_NAME]: EVP_EVENT_PLATFORM_SUBDOMAIN,
116
+ },
117
+ }
82
118
  if (directRoute) {
119
+ route.fallback = directRoute
120
+ route.onFallback = activateDirect
121
+ } else {
122
+ route.onUnavailable = markUnavailable
123
+ }
124
+ logger.debug('FFE Writer enabled with local EVP route %s', route.basePath)
125
+ setWriterEnabledValue(true, route)
126
+ }
127
+
128
+ function discover () {
129
+ recoveryTimer = undefined
130
+ if (stopped || state === 'direct' || discovering) return
131
+ discovering = true
132
+
133
+ discoverEVPProxy(config.url, {
134
+ requiredHeaders: REQUIRED_LOCAL_HEADERS,
135
+ supportedPaths: [EVP_PROXY_PATH_V4, EVP_PROXY_PATH_V2],
136
+ // Agentless owns fallback and unavailable-state recovery; do not delay them with HTTP retries.
137
+ retry: false,
138
+ }, (error, localRoute) => {
139
+ discovering = false
140
+ if (stopped || state === 'direct') return
141
+
142
+ if (localRoute) {
143
+ activateLocal(localRoute)
144
+ return
145
+ }
146
+
147
+ if (directRoute) {
148
+ if (error) {
149
+ logger.debug('FFE Writer using direct EVP intake after local discovery failed: %s', error.message)
150
+ } else {
151
+ logger.debug('FFE Writer using direct EVP intake because no compatible local route was advertised')
152
+ }
153
+ activateDirect()
154
+ return
155
+ }
156
+
83
157
  if (error) {
84
- logger.debug('FFE Writer using direct EVP intake after local discovery failed: %s', error.message)
85
- } else {
86
- logger.debug('FFE Writer using direct EVP intake because no compatible local route was advertised')
158
+ logger.debug('FFE Writer disabled - error getting local receiver info: %s', error.message)
87
159
  }
88
- setWriterEnabledValue(true, directRoute)
89
- return
90
- }
160
+ warnExposureDeliveryUnavailable()
161
+ markUnavailable()
162
+ })
163
+ }
91
164
 
92
- if (error) {
93
- logger.debug('FFE Writer disabled - error getting local receiver info: %s', error.message)
94
- }
95
- warnExposureDeliveryUnavailable()
96
- setWriterEnabledValue(false)
97
- })
165
+ discover()
166
+ return stop
98
167
  }
99
168
 
100
169
  /**
101
- * Applies the exposure-delivery strategy for the configured Feature Flags source.
170
+ * Applies one event-delivery strategy that can be shared by all Feature Flags writers.
102
171
  *
103
172
  * @param {import('../../config')} config - Tracer configuration object
104
173
  * @param {Function} setWriterEnabledValue - Callback to set the writer enabled state
105
174
  */
106
- function setExposureDeliveryStrategy (config, setWriterEnabledValue) {
175
+ function setEventDeliveryStrategy (config, setWriterEnabledValue) {
107
176
  if (config.featureFlags?.DD_FEATURE_FLAGS_CONFIGURATION_SOURCE === 'agentless') {
108
- setAgentlessStrategy(config, setWriterEnabledValue)
109
- return
177
+ return setAgentlessStrategy(config, setWriterEnabledValue)
110
178
  }
111
179
 
112
- setAgentStrategy(config, setWriterEnabledValue)
180
+ return setAgentStrategy(config, setWriterEnabledValue)
113
181
  }
114
182
 
115
- module.exports = { setExposureDeliveryStrategy }
183
+ module.exports = {
184
+ setEventDeliveryStrategy,
185
+ setExposureDeliveryStrategy: setEventDeliveryStrategy,
186
+ }
@@ -40,11 +40,11 @@ class DatadogTracer {
40
40
  // spans must reach the Electron SDK's IPC bridge, not an OTLP endpoint,
41
41
  // even when OTEL_* vars are set for unrelated telemetry.
42
42
  if (config.OTEL_TRACES_EXPORTER === 'otlp' && !config.isCiVisibility &&
43
- config.experimental.exporter !== 'electron') {
43
+ config.tracing.DD_TRACE_EXPERIMENTAL_EXPORTER !== 'electron') {
44
44
  const { createOtlpTraceExporter } = require('../opentelemetry/trace')
45
45
  this._exporter = createOtlpTraceExporter(config)
46
46
  } else {
47
- const Exporter = getExporter(config.experimental.exporter)
47
+ const Exporter = getExporter(config.tracing.DD_TRACE_EXPERIMENTAL_EXPORTER)
48
48
  this._exporter = new Exporter(config, this._prioritySampler)
49
49
  }
50
50
 
@@ -55,7 +55,7 @@ class DatadogTracer {
55
55
  }
56
56
  this._processor = new SpanProcessor(this._exporter, this._prioritySampler, config, otlpStatsExporter)
57
57
  this._url = this._exporter._url
58
- this._enableGetRumData = config.experimental.enableGetRumData
58
+ this._enableGetRumData = config.rum.DD_TRACE_EXPERIMENTAL_GET_RUM_DATA_ENABLED
59
59
  this._traceId128BitGenerationEnabled = config.traceId128BitGenerationEnabled
60
60
  this._propagators = {
61
61
  [formats.TEXT_MAP]: new TextMapPropagator(config),
@@ -36,7 +36,11 @@ const pluginClasses = {}
36
36
  // during instrumentation initialization (e.g. re-requires in bundler contexts)
37
37
  // are captured and populate pluginClasses correctly.
38
38
  loadChannel.subscribe(({ name }) => {
39
- maybeEnable(plugins[name])
39
+ try {
40
+ maybeEnable(plugins[name])
41
+ } catch (error) {
42
+ log.error('Error activating plugin %s', name, error)
43
+ }
40
44
  })
41
45
 
42
46
  // instrument everything that needs Plugin System V2 instrumentation
@@ -81,11 +85,15 @@ module.exports = class PluginManager {
81
85
  this._configsByName = {}
82
86
 
83
87
  this._loadedSubscriber = ({ name }) => {
84
- const Plugin = plugins[name]
88
+ try {
89
+ const Plugin = plugins[name]
85
90
 
86
- if (!Plugin || typeof Plugin !== 'function') return
91
+ if (!Plugin || typeof Plugin !== 'function') return
87
92
 
88
- this.loadPlugin(Plugin.id)
93
+ this.loadPlugin(Plugin.id)
94
+ } catch (error) {
95
+ log.error('Error activating plugin %s', name, error)
96
+ }
89
97
  }
90
98
 
91
99
  loadChannel.subscribe(this._loadedSubscriber)
@@ -112,10 +120,21 @@ module.exports = class PluginManager {
112
120
  }
113
121
 
114
122
  // extracts predetermined configuration from tracer and combines it with plugin-specific config
115
- this._pluginsByName[name].configure({
123
+ const config = {
116
124
  ...this.#getSharedConfig(name),
117
125
  ...pluginConfig,
118
- })
126
+ }
127
+ const plugin = this._pluginsByName[name]
128
+ try {
129
+ plugin.configure(config)
130
+ } catch (error) {
131
+ try {
132
+ plugin.configure({ enabled: false })
133
+ } catch (disableError) {
134
+ log.error('Error disabling plugin %s after failed activation', name, disableError)
135
+ }
136
+ throw error
137
+ }
119
138
  }
120
139
 
121
140
  // TODO: merge config instead of replacing
@@ -189,7 +208,7 @@ module.exports = class PluginManager {
189
208
  traceWebsocketMessagesEnabled,
190
209
  traceWebsocketMessagesInheritSampling,
191
210
  traceWebsocketMessagesSeparateTraces,
192
- experimental,
211
+ tracing,
193
212
  DD_TRACE_RESOURCE_RENAMING_ENABLED,
194
213
  } = /** @type {import('./config/config-base')} */ (this._tracerConfig)
195
214
 
@@ -212,7 +231,7 @@ module.exports = class PluginManager {
212
231
  traceWebsocketMessagesEnabled,
213
232
  traceWebsocketMessagesInheritSampling,
214
233
  traceWebsocketMessagesSeparateTraces,
215
- experimental,
234
+ tracing,
216
235
  resourceRenamingEnabled: DD_TRACE_RESOURCE_RENAMING_ENABLED,
217
236
  }
218
237
 
@@ -788,7 +788,7 @@ module.exports = class CiPlugin extends Plugin {
788
788
  return
789
789
  }
790
790
 
791
- const exporter = this.config.experimental?.exporter
791
+ const exporter = this.config.tracing.DD_TRACE_EXPERIMENTAL_EXPORTER
792
792
  const workerTestFramework = WORKER_EXPORTER_TO_TEST_FRAMEWORK[exporter]
793
793
  this.shouldSkipGitMetadataExtraction = workerTestFramework &&
794
794
  TEST_FRAMEWORKS_TO_SKIP_GIT_METADATA_EXTRACTION.has(workerTestFramework)
@@ -881,14 +881,19 @@ function setRumTestTags (testSpan, isRumActive, browserVersion) {
881
881
  }
882
882
 
883
883
  /**
884
- * Marks a successful test session that intentionally executed no tests.
884
+ * Marks a successful test session that did not execute any tests.
885
885
  *
886
886
  * @param {import('../../opentracing/span')} testSessionSpan
887
887
  * @param {import('../../opentracing/span')|undefined} testModuleSpan
888
- * @param {string} skipReason
889
- * @param {string} emptyReason
888
+ * @param {'zero_tests'|'all_tests_skipped'|'zero_test_shard'|'test_discovery'} emptyReason
890
889
  */
891
- function setExpectedEmptyTestSessionTags (testSessionSpan, testModuleSpan, skipReason, emptyReason) {
890
+ function setExpectedEmptyTestSessionTags (testSessionSpan, testModuleSpan, emptyReason) {
891
+ const skipReason = emptyReason === 'test_discovery'
892
+ ? 'Test discovery only (--list)'
893
+ : emptyReason === 'zero_test_shard'
894
+ ? 'No tests were assigned to this shard'
895
+ : emptyReason === 'all_tests_skipped' ? 'All tests were skipped' : 'No tests were detected'
896
+
892
897
  for (const span of [testSessionSpan, testModuleSpan]) {
893
898
  if (!span) continue
894
899
 
@@ -246,7 +246,7 @@ class Tracer extends NoopProxy {
246
246
  appsecRemoteConfig.enable(rc, config, this._modules.appsec)
247
247
  }
248
248
 
249
- if (config.dynamicInstrumentation.enabled) {
249
+ if (config.dynamicInstrumentation.DD_DYNAMIC_INSTRUMENTATION_ENABLED) {
250
250
  getDynamicInstrumentation().start(config, rc)
251
251
  }
252
252
 
@@ -463,7 +463,7 @@ class Tracer extends NoopProxy {
463
463
  * @param {object} rc - The RemoteConfig instance
464
464
  */
465
465
  #updateDebugger (config, rc) {
466
- const shouldBeEnabled = config.dynamicInstrumentation.enabled
466
+ const shouldBeEnabled = config.dynamicInstrumentation.DD_DYNAMIC_INSTRUMENTATION_ENABLED
467
467
  if (!shouldBeEnabled && dynamicInstrumentation === undefined) return
468
468
 
469
469
  const DynamicInstrumentation = getDynamicInstrumentation()
@@ -137,7 +137,8 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
137
137
  let url = config.url
138
138
 
139
139
  const isCiVisibilityAgentlessMode = isCiVisibility && testOptimization.DD_CIVISIBILITY_AGENTLESS_ENABLED
140
- const isApmTracingAgentlessMode = config.experimental?.exporter === 'agentless'
140
+ const isApmTracingAgentlessMode =
141
+ config.tracing.DD_TRACE_EXPERIMENTAL_EXPORTER === 'agentless'
141
142
  const isAgentlessMode = isCiVisibilityAgentlessMode || isApmTracingAgentlessMode
142
143
 
143
144
  if (isCiVisibility && getTestOptimizationAgent === undefined) {
@@ -157,7 +157,7 @@ function getProducts (config) {
157
157
  enabled: profilingEnabledToBoolean(config.profiling.DD_PROFILING_ENABLED),
158
158
  },
159
159
  dynamic_instrumentation: {
160
- enabled: config.dynamicInstrumentation.enabled,
160
+ enabled: config.dynamicInstrumentation.DD_DYNAMIC_INSTRUMENTATION_ENABLED,
161
161
  },
162
162
  }
163
163
  }
@@ -7,6 +7,7 @@ const {
7
7
  flushFrameworkWarnings,
8
8
  flushLoadOrderWarnings,
9
9
  } = require('../../datadog-instrumentations/src/helpers/check-require-cache')
10
+ const shimmer = require('../../datadog-shimmer')
10
11
  const Tracer = require('./opentracing/tracer')
11
12
  const Scope = require('./scope')
12
13
  const { isError } = require('./util')
@@ -119,7 +120,7 @@ class DatadogTracer extends Tracer {
119
120
  wrap (name, options, fn) {
120
121
  const tracer = this
121
122
 
122
- return function (...args) {
123
+ return shimmer.wrapFunction(fn, original => function (...args) {
123
124
  let optionsObj = options
124
125
  if (typeof optionsObj === 'function' && typeof fn === 'function') {
125
126
  optionsObj = optionsObj.apply(this, args)
@@ -136,11 +137,11 @@ class DatadogTracer extends Tracer {
136
137
  return scopeBoundCb.apply(this, arguments)
137
138
  }
138
139
 
139
- return fn.apply(this, args)
140
+ return original.apply(this, args)
140
141
  })
141
142
  }
142
- return tracer.trace(name, optionsObj, () => fn.apply(this, args))
143
- }
143
+ return tracer.trace(name, optionsObj, () => original.apply(this, args))
144
+ })
144
145
  }
145
146
 
146
147
  setUrl (url) {
@@ -1,7 +0,0 @@
1
- 'use strict'
2
-
3
- const { addHook, getHooks } = require('./helpers/instrument')
4
-
5
- for (const hook of getHooks('@azure/cosmos').values()) {
6
- addHook(hook, exports => exports)
7
- }
@@ -1,11 +0,0 @@
1
- // AUTO-GENERATED by dd-compile
2
- // Orchestrion rewriter handles the actual instrumentation via JSON config.
3
- // This file registers the module hooks for the rewriter to process.
4
-
5
- 'use strict'
6
-
7
- const { addHook, getHooks } = require('./helpers/instrument')
8
-
9
- for (const hook of getHooks('bullmq').values()) {
10
- addHook(hook, exports => exports)
11
- }
@@ -1,7 +0,0 @@
1
- 'use strict'
2
-
3
- const { addHook, getHooks } = require('./helpers/instrument')
4
-
5
- for (const hook of getHooks('@langchain/core').values()) {
6
- addHook(hook, exports => exports)
7
- }
@@ -1,7 +0,0 @@
1
- 'use strict'
2
-
3
- const { addHook, getHooks } = require('./helpers/instrument')
4
-
5
- for (const hook of getHooks('@langchain/langgraph').values()) {
6
- addHook(hook, exports => exports)
7
- }
@@ -1,11 +0,0 @@
1
- // AUTO-GENERATED by dd-compile
2
- // Orchestrion rewriter handles the actual instrumentation via JSON config.
3
- // This file registers the module hooks for the rewriter to process.
4
-
5
- 'use strict'
6
-
7
- const { addHook, getHooks } = require('./helpers/instrument')
8
-
9
- for (const hook of getHooks('mercurius').values()) {
10
- addHook(hook, exports => exports)
11
- }