dd-trace 5.96.0 → 5.98.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 (173) hide show
  1. package/index.d.ts +60 -2
  2. package/package.json +9 -7
  3. package/packages/datadog-esbuild/index.js +20 -9
  4. package/packages/datadog-instrumentations/src/child_process.js +7 -17
  5. package/packages/datadog-instrumentations/src/crypto.js +1 -2
  6. package/packages/datadog-instrumentations/src/cucumber.js +69 -4
  7. package/packages/datadog-instrumentations/src/cypress-config.js +318 -0
  8. package/packages/datadog-instrumentations/src/cypress.js +86 -4
  9. package/packages/datadog-instrumentations/src/dns.js +1 -2
  10. package/packages/datadog-instrumentations/src/express.js +4 -4
  11. package/packages/datadog-instrumentations/src/fs.js +27 -29
  12. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  13. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +41 -13
  14. package/packages/datadog-instrumentations/src/helpers/hook.js +31 -6
  15. package/packages/datadog-instrumentations/src/helpers/hooks.js +12 -19
  16. package/packages/datadog-instrumentations/src/helpers/instrument.js +27 -13
  17. package/packages/datadog-instrumentations/src/helpers/register.js +103 -142
  18. package/packages/datadog-instrumentations/src/http/client.js +2 -3
  19. package/packages/datadog-instrumentations/src/http/server.js +2 -5
  20. package/packages/datadog-instrumentations/src/http2/client.js +1 -3
  21. package/packages/datadog-instrumentations/src/http2/server.js +1 -3
  22. package/packages/datadog-instrumentations/src/jest.js +117 -16
  23. package/packages/datadog-instrumentations/src/limitd-client.js +1 -1
  24. package/packages/datadog-instrumentations/src/mocha/utils.js +12 -1
  25. package/packages/datadog-instrumentations/src/net.js +2 -8
  26. package/packages/datadog-instrumentations/src/pino.js +1 -1
  27. package/packages/datadog-instrumentations/src/playwright.js +4 -1
  28. package/packages/datadog-instrumentations/src/prisma.js +1 -2
  29. package/packages/datadog-instrumentations/src/redis.js +12 -6
  30. package/packages/datadog-instrumentations/src/selenium.js +4 -1
  31. package/packages/datadog-instrumentations/src/sequelize.js +1 -1
  32. package/packages/datadog-instrumentations/src/url.js +1 -3
  33. package/packages/datadog-instrumentations/src/vitest.js +5 -1
  34. package/packages/datadog-instrumentations/src/vm.js +1 -3
  35. package/packages/datadog-plugin-aws-sdk/src/base.js +5 -4
  36. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +1 -0
  37. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -0
  38. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -0
  39. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -0
  40. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -0
  41. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -0
  42. package/packages/datadog-plugin-cucumber/src/index.js +13 -3
  43. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +166 -6
  44. package/packages/datadog-plugin-cypress/src/index.js +59 -2
  45. package/packages/datadog-plugin-fs/src/index.js +1 -1
  46. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +2 -1
  47. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +2 -7
  48. package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
  49. package/packages/datadog-plugin-http/src/client.js +1 -1
  50. package/packages/datadog-plugin-http/src/server.js +10 -2
  51. package/packages/datadog-plugin-http2/src/client.js +1 -1
  52. package/packages/datadog-plugin-http2/src/server.js +10 -2
  53. package/packages/datadog-plugin-jest/src/index.js +4 -2
  54. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +31 -4
  55. package/packages/datadog-plugin-mocha/src/index.js +5 -2
  56. package/packages/datadog-plugin-mongodb-core/src/index.js +3 -3
  57. package/packages/datadog-plugin-mysql/src/index.js +1 -1
  58. package/packages/datadog-plugin-next/src/index.js +10 -16
  59. package/packages/datadog-plugin-openai/src/services.js +1 -0
  60. package/packages/datadog-plugin-pg/src/index.js +1 -1
  61. package/packages/datadog-plugin-tedious/src/index.js +1 -1
  62. package/packages/datadog-plugin-ws/src/close.js +1 -1
  63. package/packages/datadog-plugin-ws/src/receiver.js +1 -1
  64. package/packages/datadog-webpack/index.js +3 -3
  65. package/packages/dd-trace/index.js +12 -10
  66. package/packages/dd-trace/src/agent/url.js +2 -2
  67. package/packages/dd-trace/src/aiguard/sdk.js +26 -22
  68. package/packages/dd-trace/src/appsec/blocked_templates.js +4 -3
  69. package/packages/dd-trace/src/appsec/blocking.js +64 -33
  70. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +1 -1
  71. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +1 -1
  72. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +1 -1
  73. package/packages/dd-trace/src/appsec/remote_config.js +1 -0
  74. package/packages/dd-trace/src/appsec/sdk/index.js +4 -0
  75. package/packages/dd-trace/src/appsec/sdk/set_user.js +1 -1
  76. package/packages/dd-trace/src/appsec/sdk/track_event.js +5 -5
  77. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  78. package/packages/dd-trace/src/appsec/sdk/utils.js +4 -2
  79. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +6 -1
  80. package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +4 -0
  81. package/packages/dd-trace/src/config/defaults.js +315 -146
  82. package/packages/dd-trace/src/config/generated-config-types.d.ts +9 -1
  83. package/packages/dd-trace/src/config/helper.js +59 -10
  84. package/packages/dd-trace/src/config/index.js +587 -1496
  85. package/packages/dd-trace/src/config/parsers.js +256 -0
  86. package/packages/dd-trace/src/config/remote_config.js +59 -2
  87. package/packages/dd-trace/src/config/supported-configurations.json +406 -432
  88. package/packages/dd-trace/src/constants.js +1 -0
  89. package/packages/dd-trace/src/crashtracking/crashtracker.js +7 -1
  90. package/packages/dd-trace/src/crashtracking/index.js +1 -7
  91. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +5 -2
  92. package/packages/dd-trace/src/debugger/index.js +1 -1
  93. package/packages/dd-trace/src/dogstatsd.js +12 -9
  94. package/packages/dd-trace/src/encode/0.4.js +8 -7
  95. package/packages/dd-trace/src/encode/span-stats.js +4 -1
  96. package/packages/dd-trace/src/exporters/agent/writer.js +7 -1
  97. package/packages/dd-trace/src/exporters/common/request.js +9 -0
  98. package/packages/dd-trace/src/exporters/common/writer.js +12 -2
  99. package/packages/dd-trace/src/heap_snapshots.js +3 -0
  100. package/packages/dd-trace/src/index.js +5 -2
  101. package/packages/dd-trace/src/lambda/runtime/ritm.js +6 -6
  102. package/packages/dd-trace/src/llmobs/index.js +4 -1
  103. package/packages/dd-trace/src/llmobs/plugins/ai/index.js +5 -1
  104. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +60 -12
  105. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +4 -2
  106. package/packages/dd-trace/src/llmobs/sdk.js +12 -8
  107. package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
  108. package/packages/dd-trace/src/llmobs/tagger.js +9 -6
  109. package/packages/dd-trace/src/llmobs/writers/base.js +2 -0
  110. package/packages/dd-trace/src/llmobs/writers/util.js +3 -0
  111. package/packages/dd-trace/src/log/index.js +20 -59
  112. package/packages/dd-trace/src/log/writer.js +7 -19
  113. package/packages/dd-trace/src/noop/proxy.js +8 -0
  114. package/packages/dd-trace/src/openfeature/remote_config.js +6 -1
  115. package/packages/dd-trace/src/opentelemetry/context_manager.js +6 -4
  116. package/packages/dd-trace/src/opentelemetry/logs/index.js +1 -1
  117. package/packages/dd-trace/src/opentelemetry/metrics/index.js +1 -1
  118. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +17 -2
  119. package/packages/dd-trace/src/opentelemetry/otlp/protobuf_loader.js +14 -2
  120. package/packages/dd-trace/src/opentelemetry/otlp/trace.proto +358 -0
  121. package/packages/dd-trace/src/opentelemetry/otlp/trace_service.proto +78 -0
  122. package/packages/dd-trace/src/opentelemetry/trace/index.js +75 -0
  123. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +66 -0
  124. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +332 -0
  125. package/packages/dd-trace/src/opentracing/propagation/text_map.js +9 -4
  126. package/packages/dd-trace/src/opentracing/tracer.js +9 -4
  127. package/packages/dd-trace/src/payload-tagging/config/index.js +6 -5
  128. package/packages/dd-trace/src/plugin_manager.js +8 -6
  129. package/packages/dd-trace/src/plugins/ci_plugin.js +4 -0
  130. package/packages/dd-trace/src/plugins/log_plugin.js +3 -0
  131. package/packages/dd-trace/src/plugins/plugin.js +11 -13
  132. package/packages/dd-trace/src/plugins/storage.js +2 -2
  133. package/packages/dd-trace/src/plugins/tracing.js +22 -5
  134. package/packages/dd-trace/src/plugins/util/test.js +2 -0
  135. package/packages/dd-trace/src/plugins/util/web.js +6 -88
  136. package/packages/dd-trace/src/process-tags/index.js +3 -0
  137. package/packages/dd-trace/src/profiler.js +27 -2
  138. package/packages/dd-trace/src/profiling/config.js +73 -241
  139. package/packages/dd-trace/src/profiling/exporter_cli.js +1 -4
  140. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +6 -2
  141. package/packages/dd-trace/src/profiling/profiler.js +78 -109
  142. package/packages/dd-trace/src/profiling/profilers/events.js +2 -3
  143. package/packages/dd-trace/src/profiling/profilers/wall.js +89 -6
  144. package/packages/dd-trace/src/profiling/ssi-heuristics.js +4 -1
  145. package/packages/dd-trace/src/propagation-hash/index.js +2 -1
  146. package/packages/dd-trace/src/proxy.js +40 -6
  147. package/packages/dd-trace/src/remote_config/index.js +3 -0
  148. package/packages/dd-trace/src/require-package-json.js +8 -4
  149. package/packages/dd-trace/src/ritm.js +58 -26
  150. package/packages/dd-trace/src/runtime_metrics/index.js +3 -0
  151. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +18 -11
  152. package/packages/dd-trace/src/sampler.js +1 -1
  153. package/packages/dd-trace/src/service-naming/index.js +1 -1
  154. package/packages/dd-trace/src/service-naming/schemas/definition.js +4 -1
  155. package/packages/dd-trace/src/service-naming/schemas/util.js +15 -1
  156. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +24 -1
  157. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +60 -0
  158. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +17 -1
  159. package/packages/dd-trace/src/service-naming/schemas/v0/websocket.js +5 -0
  160. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +17 -0
  161. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +11 -1
  162. package/packages/dd-trace/src/service-naming/schemas/v1/websocket.js +6 -0
  163. package/packages/dd-trace/src/span_stats.js +5 -1
  164. package/packages/dd-trace/src/standalone/index.js +3 -0
  165. package/packages/dd-trace/src/telemetry/index.js +2 -3
  166. package/packages/dd-trace/src/telemetry/send-data.js +5 -19
  167. package/packages/dd-trace/src/telemetry/session-propagation.js +19 -44
  168. package/packages/dd-trace/src/telemetry/telemetry.js +28 -171
  169. package/packages/dd-trace/src/tracer.js +2 -2
  170. package/packages/dd-trace/src/util.js +0 -9
  171. package/vendor/dist/@apm-js-collab/code-transformer/index.js +28 -6
  172. package/vendor/dist/protobufjs/index.js +1 -1
  173. package/packages/dd-trace/src/log/utils.js +0 -16
@@ -1,19 +1,21 @@
1
1
  'use strict'
2
+
2
3
  const { inspect } = require('util')
4
+
5
+ const { defaults } = require('../config/defaults')
3
6
  const { isTrue } = require('../util')
4
7
  const { getValueFromEnvSources } = require('../config/helper')
5
8
  const { traceChannel, debugChannel, infoChannel, warnChannel, errorChannel } = require('./channels')
6
9
  const logWriter = require('./writer')
7
10
  const { Log, LogConfig, NoTransmitError } = require('./log')
8
- const { memoize } = require('./utils')
9
11
 
10
12
  const config = {
11
- enabled: false,
13
+ enabled: defaults.DD_TRACE_DEBUG,
12
14
  logger: undefined,
13
- logLevel: 'debug',
15
+ logLevel: defaults.logLevel,
14
16
  }
15
17
 
16
- // in most places where we know we want to mute a log we use log.error() directly
18
+ // In most places where we know we want to mute a log we use log.error() directly
17
19
  const NO_TRANSMIT = new LogConfig(false)
18
20
 
19
21
  const log = {
@@ -21,36 +23,6 @@ const log = {
21
23
  NO_TRANSMIT,
22
24
  NoTransmitError,
23
25
 
24
- /**
25
- * @returns Read-only version of logging config. To modify config, call `log.use` and `log.toggle`
26
- */
27
- getConfig () {
28
- return { ...config }
29
- },
30
-
31
- use (logger) {
32
- config.logger = logger
33
- logWriter.use(logger)
34
- return log
35
- },
36
-
37
- toggle (enabled, logLevel) {
38
- config.enabled = enabled
39
- config.logLevel = logLevel
40
- logWriter.toggle(enabled, logLevel)
41
- return log
42
- },
43
-
44
- reset () {
45
- logWriter.reset()
46
- log._deprecate = memoize((code, message) => {
47
- publishFormatted(errorChannel, null, message)
48
- return true
49
- })
50
-
51
- return log
52
- },
53
-
54
26
  trace (...args) {
55
27
  if (traceChannel.hasSubscribers) {
56
28
  const logRecord = {}
@@ -66,6 +38,8 @@ const log = {
66
38
 
67
39
  publishFormatted(traceChannel, null, stack.join('\n'))
68
40
  }
41
+ // TODO: Why do we allow chaining here? This is likely not used anywhere.
42
+ // If it is used, that seems like a mistake.
69
43
  return log
70
44
  },
71
45
 
@@ -102,31 +76,20 @@ const log = {
102
76
  return log
103
77
  },
104
78
 
105
- deprecate (code, message) {
106
- return log._deprecate(code, message)
107
- },
108
-
109
- isEnabled (fleetStableConfigValue, localStableConfigValue) {
110
- return isTrue(
111
- fleetStableConfigValue ??
79
+ configure (options) {
80
+ config.logger = options.logger
81
+ config.logLevel = options.logLevel ??
82
+ getValueFromEnvSources('DD_TRACE_LOG_LEVEL') ??
83
+ config.logLevel
84
+ config.enabled = isTrue(
112
85
  getValueFromEnvSources('DD_TRACE_DEBUG') ??
113
- (getValueFromEnvSources('OTEL_LOG_LEVEL') === 'debug' || undefined) ??
114
- localStableConfigValue ??
115
- config.enabled
86
+ // TODO: Handle this by adding a log buffer so that configure may be called with the actual configurations.
87
+ // eslint-disable-next-line eslint-rules/eslint-process-env
88
+ (process.env.OTEL_LOG_LEVEL === 'debug' || config.enabled)
116
89
  )
117
- },
90
+ logWriter.configure(config.enabled, config.logLevel, options.logger)
118
91
 
119
- getLogLevel (
120
- optionsValue,
121
- fleetStableConfigValue,
122
- localStableConfigValue
123
- ) {
124
- return optionsValue ??
125
- fleetStableConfigValue ??
126
- getValueFromEnvSources('DD_TRACE_LOG_LEVEL') ??
127
- getValueFromEnvSources('OTEL_LOG_LEVEL') ??
128
- localStableConfigValue ??
129
- config.logLevel
92
+ return config.enabled
130
93
  },
131
94
  }
132
95
 
@@ -150,8 +113,6 @@ function getErrorLog (err) {
150
113
  return err
151
114
  }
152
115
 
153
- log.reset()
154
-
155
- log.toggle(log.isEnabled(), log.getLogLevel())
116
+ log.configure({})
156
117
 
157
118
  module.exports = log
@@ -2,6 +2,7 @@
2
2
 
3
3
  const { storage } = require('../../../datadog-core')
4
4
  const { LogChannel } = require('./channels')
5
+
5
6
  const defaultLogger = {
6
7
  debug: msg => console.debug(msg), /* eslint-disable-line no-console */
7
8
  info: msg => console.info(msg), /* eslint-disable-line no-console */
@@ -17,12 +18,8 @@ function withNoop (fn) {
17
18
  storage('legacy').run({ noop: true }, fn)
18
19
  }
19
20
 
20
- function unsubscribeAll () {
21
- logChannel.unsubscribe({ trace, debug, info, warn, error })
22
- }
23
-
24
21
  function toggleSubscription (enable, level) {
25
- unsubscribeAll()
22
+ logChannel.unsubscribe({ trace, debug, info, warn, error })
26
23
 
27
24
  if (enable) {
28
25
  logChannel = new LogChannel(level)
@@ -30,23 +27,14 @@ function toggleSubscription (enable, level) {
30
27
  }
31
28
  }
32
29
 
33
- function toggle (enable, level) {
30
+ function configure (enable, level, newLogger) {
34
31
  enabled = enable
32
+ logger = typeof newLogger?.debug === 'function' && typeof newLogger.error === 'function'
33
+ ? newLogger
34
+ : defaultLogger
35
35
  toggleSubscription(enabled, level)
36
36
  }
37
37
 
38
- function use (newLogger) {
39
- if (typeof newLogger?.debug === 'function' && typeof newLogger.error === 'function') {
40
- logger = newLogger
41
- }
42
- }
43
-
44
- function reset () {
45
- logger = defaultLogger
46
- enabled = false
47
- toggleSubscription(false)
48
- }
49
-
50
38
  function error (err) {
51
39
  withNoop(() => logger.error(err))
52
40
  }
@@ -69,4 +57,4 @@ function trace (log) {
69
57
  withNoop(() => logger.debug(log))
70
58
  }
71
59
 
72
- module.exports = { use, toggle, reset, error, warn, info, debug, trace }
60
+ module.exports = { configure, error, warn, info, debug, trace }
@@ -13,6 +13,10 @@ const noopDogStatsDClient = new NoopDogStatsDClient()
13
13
  const noopLLMObs = new NoopLLMObsSDK(noop)
14
14
  const noopOpenFeatureProvider = new NoopFlaggingProvider()
15
15
  const noopAIGuard = new NoopAIGuardSDK()
16
+ const noopProfiling = {
17
+ setCustomLabelKeys () {},
18
+ runWithLabels (labels, fn) { return fn() },
19
+ }
16
20
 
17
21
  /** @type {import('../../src/index')} Proxy */
18
22
  class NoopProxy {
@@ -98,6 +102,10 @@ class NoopProxy {
98
102
  return this
99
103
  }
100
104
 
105
+ get profiling () {
106
+ return noopProfiling
107
+ }
108
+
101
109
  get TracerProvider () {
102
110
  return require('../opentelemetry/tracer_provider')
103
111
  }
@@ -19,9 +19,14 @@ function enable (rc, config, getOpenfeatureProxy) {
19
19
 
20
20
  // Set product handler for FFE_FLAGS
21
21
  rc.setProductHandler('FFE_FLAGS', (action, conf) => {
22
- // Feed UFC config directly to OpenFeature provider
23
22
  if (action === 'apply' || action === 'modify') {
23
+ // Feed UFC config directly to OpenFeature provider
24
24
  getOpenfeatureProxy()._setConfiguration(conf)
25
+ } else if (action === 'unapply') {
26
+ // Clear the configuration so evaluations return PROVIDER_NOT_READY,
27
+ // consistent with Go and Python which also set config to null on RC deletion.
28
+ // The evaluator returns PROVIDER_NOT_READY when config is null/undefined.
29
+ getOpenfeatureProxy()._setConfiguration(null)
25
30
  }
26
31
  })
27
32
  }
@@ -4,7 +4,6 @@ const { trace, ROOT_CONTEXT, propagation } = require('@opentelemetry/api')
4
4
  const { storage } = require('../../../datadog-core')
5
5
  const { getAllBaggageItems, setBaggageItem, removeAllBaggageItems } = require('../baggage')
6
6
 
7
- const tracer = require('../../')
8
7
  const SpanContext = require('./span_context')
9
8
 
10
9
  class ContextManager {
@@ -16,7 +15,7 @@ class ContextManager {
16
15
  active () {
17
16
  const store = this._store.getStore()
18
17
  const baseContext = store || ROOT_CONTEXT
19
- const activeSpan = tracer.scope().active()
18
+ const activeSpan = storage('legacy').getStore()?.span
20
19
 
21
20
  const storedSpan = store ? trace.getSpan(store) : null
22
21
 
@@ -60,7 +59,6 @@ class ContextManager {
60
59
  // converts otel to dd
61
60
  with (context, fn, thisArg, ...args) {
62
61
  const span = trace.getSpan(context)
63
- const ddScope = tracer.scope()
64
62
  const run = () => {
65
63
  const cb = thisArg == null ? fn : fn.bind(thisArg)
66
64
  return this._store.run(context, cb, ...args)
@@ -74,7 +72,11 @@ class ContextManager {
74
72
  for (const baggage of baggageItems) {
75
73
  setBaggageItem(baggage[0], baggage[1].value)
76
74
  }
77
- if (span && span._ddSpan) return ddScope.activate(span._ddSpan, run)
75
+ if (span && span._ddSpan) {
76
+ const ddSpan = span._ddSpan
77
+ const parentStore = storage('legacy').getStore(ddSpan._store) ?? storage('legacy').getStore()
78
+ return storage('legacy').run({ ...parentStore, span: ddSpan }, run)
79
+ }
78
80
  return run()
79
81
  }
80
82
 
@@ -33,7 +33,7 @@ const OtlpHttpLogExporter = require('./otlp_http_log_exporter')
33
33
 
34
34
  /**
35
35
  * Initializes OpenTelemetry Logs support
36
- * @param {Config} config - Tracer configuration instance
36
+ * @param {import('../../config/config-base')} config - Tracer configuration instance
37
37
  */
38
38
  function initializeOpenTelemetryLogs (config) {
39
39
  // Build resource attributes
@@ -35,7 +35,7 @@ const OtlpHttpMetricExporter = require('./otlp_http_metric_exporter')
35
35
 
36
36
  /**
37
37
  * Initializes OpenTelemetry Metrics support
38
- * @param {Config} config - Tracer configuration instance
38
+ * @param {import('../../config/config-base')} config - Tracer configuration instance
39
39
  */
40
40
  function initializeOpenTelemetryMetrics (config) {
41
41
  const resourceAttributes = {
@@ -116,11 +116,26 @@ class OtlpHttpExporterBase {
116
116
  }
117
117
 
118
118
  /**
119
- * Parses additional HTTP headers from a comma-separated string.
120
- * @param {string} [headersString=''] - Comma-separated key=value pairs
119
+ * Parses additional HTTP headers from a comma-separated string or pre-parsed map.
120
+ * @param {string|Record<string, string>} [headersString=''] - Comma-separated key=value pairs or map
121
121
  * @returns {Record<string, string>} Parsed headers object
122
122
  */
123
123
  #parseAdditionalHeaders (headersString = '') {
124
+ if (headersString !== null && typeof headersString === 'object') {
125
+ // The config MAP parser uses tagger.add (which splits on ':'), so OTEL-format
126
+ // headers ('key=value') arrive with the full 'key=value' string as the map key
127
+ // and an empty string as the value. Re-split on '=' to get the correct pairs.
128
+ const result = {}
129
+ for (const [k, v] of Object.entries(headersString)) {
130
+ if (v === '' && k.includes('=')) {
131
+ const idx = k.indexOf('=')
132
+ result[k.slice(0, idx).trim()] = k.slice(idx + 1).trim()
133
+ } else {
134
+ result[k] = v
135
+ }
136
+ }
137
+ return result
138
+ }
124
139
  const headers = {}
125
140
  let key = ''
126
141
  let value = ''
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
3
  /**
4
- * Protobuf Loader for OpenTelemetry Logs and Metrics
4
+ * Protobuf Loader for OpenTelemetry Logs, Traces, and Metrics
5
5
  *
6
- * This module loads protobuf definitions for OpenTelemetry logs and metrics.
6
+ * This module loads protobuf definitions for OpenTelemetry logs, traces, and metrics.
7
7
  *
8
8
  * VERSION SUPPORT:
9
9
  * - OTLP Protocol: v1.7.0
@@ -20,6 +20,8 @@ const protobuf = require('../../../../../vendor/dist/protobufjs')
20
20
  let _root = null
21
21
  let protoLogsService = null
22
22
  let protoSeverityNumber = null
23
+ let protoTraceService = null
24
+ let protoSpanKind = null
23
25
  let protoMetricsService = null
24
26
  let protoAggregationTemporality = null
25
27
 
@@ -28,6 +30,8 @@ function getProtobufTypes () {
28
30
  return {
29
31
  protoLogsService,
30
32
  protoSeverityNumber,
33
+ protoTraceService,
34
+ protoSpanKind,
31
35
  protoMetricsService,
32
36
  protoAggregationTemporality,
33
37
  }
@@ -39,6 +43,8 @@ function getProtobufTypes () {
39
43
  'resource.proto',
40
44
  'logs.proto',
41
45
  'logs_service.proto',
46
+ 'trace.proto',
47
+ 'trace_service.proto',
42
48
  'metrics.proto',
43
49
  'metrics_service.proto',
44
50
  ].map(file => path.join(protoDir, file))
@@ -49,6 +55,10 @@ function getProtobufTypes () {
49
55
  protoLogsService = _root.lookupType('opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest')
50
56
  protoSeverityNumber = _root.lookupEnum('opentelemetry.proto.logs.v1.SeverityNumber')
51
57
 
58
+ // Get the message types for traces
59
+ protoTraceService = _root.lookupType('opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest')
60
+ protoSpanKind = _root.lookupEnum('opentelemetry.proto.trace.v1.SpanKind')
61
+
52
62
  // Get the message types for metrics
53
63
  protoMetricsService = _root.lookupType('opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest')
54
64
  protoAggregationTemporality = _root.lookupEnum('opentelemetry.proto.metrics.v1.AggregationTemporality')
@@ -56,6 +66,8 @@ function getProtobufTypes () {
56
66
  return {
57
67
  protoLogsService,
58
68
  protoSeverityNumber,
69
+ protoTraceService,
70
+ protoSpanKind,
59
71
  protoMetricsService,
60
72
  protoAggregationTemporality,
61
73
  }