dd-trace 5.98.0 → 5.99.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 (123) hide show
  1. package/LICENSE-3rdparty.csv +0 -1
  2. package/ext/tags.js +1 -0
  3. package/index.d.ts +9 -1
  4. package/package.json +48 -46
  5. package/packages/datadog-instrumentations/src/crypto.js +45 -0
  6. package/packages/datadog-instrumentations/src/cypress-config.js +122 -16
  7. package/packages/datadog-instrumentations/src/dns.js +24 -56
  8. package/packages/datadog-instrumentations/src/graphql.js +1 -1
  9. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +74 -0
  10. package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +4 -1
  11. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  12. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +10 -3
  13. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  14. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/modelcontextprotocol-sdk.js +59 -0
  15. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +11 -2
  16. package/packages/datadog-instrumentations/src/modelcontextprotocol-sdk.js +7 -0
  17. package/packages/datadog-instrumentations/src/pino.js +4 -28
  18. package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +27 -0
  19. package/packages/datadog-instrumentations/src/playwright.js +5 -17
  20. package/packages/datadog-instrumentations/src/stripe.js +38 -24
  21. package/packages/datadog-instrumentations/src/vitest.js +32 -4
  22. package/packages/datadog-instrumentations/src/zlib.js +29 -0
  23. package/packages/datadog-plugin-aws-sdk/src/base.js +1 -2
  24. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +8 -15
  25. package/packages/datadog-plugin-azure-service-bus/src/producer.js +4 -9
  26. package/packages/datadog-plugin-cucumber/src/index.js +2 -2
  27. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +5 -5
  28. package/packages/datadog-plugin-cypress/src/source-map-utils.js +48 -1
  29. package/packages/datadog-plugin-http/src/server.js +11 -11
  30. package/packages/datadog-plugin-jest/src/index.js +2 -2
  31. package/packages/datadog-plugin-mocha/src/index.js +1 -2
  32. package/packages/datadog-plugin-modelcontextprotocol-sdk/src/index.js +24 -0
  33. package/packages/datadog-plugin-modelcontextprotocol-sdk/src/tracing.js +55 -0
  34. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -6
  35. package/packages/datadog-plugin-playwright/src/index.js +2 -3
  36. package/packages/datadog-plugin-vitest/src/index.js +14 -6
  37. package/packages/datadog-plugin-ws/src/close.js +2 -0
  38. package/packages/datadog-plugin-ws/src/producer.js +2 -0
  39. package/packages/datadog-plugin-ws/src/receiver.js +1 -0
  40. package/packages/dd-trace/src/aiguard/channels.js +8 -0
  41. package/packages/dd-trace/src/aiguard/index.js +7 -3
  42. package/packages/dd-trace/src/aiguard/sdk.js +44 -0
  43. package/packages/dd-trace/src/aiguard/tags.js +1 -0
  44. package/packages/dd-trace/src/appsec/graphql.js +6 -6
  45. package/packages/dd-trace/src/appsec/index.js +9 -11
  46. package/packages/dd-trace/src/appsec/rasp/command_injection.js +4 -5
  47. package/packages/dd-trace/src/appsec/rasp/lfi.js +8 -4
  48. package/packages/dd-trace/src/appsec/rasp/sql_injection.js +5 -10
  49. package/packages/dd-trace/src/appsec/rasp/ssrf.js +5 -6
  50. package/packages/dd-trace/src/appsec/recommended.json +2438 -13
  51. package/packages/dd-trace/src/appsec/reporter.js +6 -5
  52. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +4 -8
  53. package/packages/dd-trace/src/appsec/store.js +50 -0
  54. package/packages/dd-trace/src/appsec/waf/index.js +3 -5
  55. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +2 -2
  56. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +2 -2
  57. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +2 -2
  58. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
  59. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +3 -4
  60. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -2
  61. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +4 -5
  62. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +3 -4
  63. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +6 -6
  64. package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +2 -2
  65. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +2 -2
  66. package/packages/dd-trace/src/config/config-types.d.ts +0 -4
  67. package/packages/dd-trace/src/config/defaults.js +10 -10
  68. package/packages/dd-trace/src/config/generated-config-types.d.ts +13 -12
  69. package/packages/dd-trace/src/config/index.js +25 -35
  70. package/packages/dd-trace/src/config/parsers.js +26 -9
  71. package/packages/dd-trace/src/config/supported-configurations.json +32 -36
  72. package/packages/dd-trace/src/debugger/config.js +2 -0
  73. package/packages/dd-trace/src/debugger/devtools_client/send.js +25 -5
  74. package/packages/dd-trace/src/encode/0.4.js +4 -5
  75. package/packages/dd-trace/src/exporters/agent/index.js +0 -1
  76. package/packages/dd-trace/src/exporters/agent/writer.js +1 -2
  77. package/packages/dd-trace/src/exporters/agentless/writer.js +3 -3
  78. package/packages/dd-trace/src/exporters/common/util.js +2 -2
  79. package/packages/dd-trace/src/id.js +2 -0
  80. package/packages/dd-trace/src/index.js +2 -5
  81. package/packages/dd-trace/src/lambda/handler.js +1 -3
  82. package/packages/dd-trace/src/llmobs/plugins/{anthropic.js → anthropic/index.js} +5 -63
  83. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +106 -0
  84. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +3 -2
  85. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -2
  86. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/embedding.js +2 -1
  87. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +0 -49
  88. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/vectorstore.js +2 -1
  89. package/packages/dd-trace/src/llmobs/plugins/langchain/messages.js +76 -0
  90. package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -26
  91. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/index.js +68 -0
  92. package/packages/dd-trace/src/llmobs/plugins/modelcontextprotocol-sdk/utils.js +57 -0
  93. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  94. package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +103 -0
  95. package/packages/dd-trace/src/openfeature/flagging_provider.js +3 -0
  96. package/packages/dd-trace/src/opentelemetry/logs/index.js +1 -1
  97. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +3 -2
  98. package/packages/dd-trace/src/opentelemetry/metrics/index.js +1 -1
  99. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +3 -2
  100. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +19 -66
  101. package/packages/dd-trace/src/opentelemetry/trace/index.js +11 -16
  102. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +11 -3
  103. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +51 -41
  104. package/packages/dd-trace/src/opentelemetry/tracer.js +9 -11
  105. package/packages/dd-trace/src/opentracing/propagation/text_map.js +17 -10
  106. package/packages/dd-trace/src/opentracing/span.js +1 -1
  107. package/packages/dd-trace/src/opentracing/tracer.js +12 -5
  108. package/packages/dd-trace/src/plugins/index.js +1 -0
  109. package/packages/dd-trace/src/plugins/util/test.js +126 -5
  110. package/packages/dd-trace/src/plugins/util/url.js +2 -1
  111. package/packages/dd-trace/src/profiling/profilers/event_plugins/crypto.js +32 -0
  112. package/packages/dd-trace/src/profiling/profilers/event_plugins/zlib.js +19 -0
  113. package/packages/dd-trace/src/profiling/profilers/events.js +35 -0
  114. package/packages/dd-trace/src/proxy.js +2 -8
  115. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  116. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  117. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  118. package/packages/dd-trace/src/span_processor.js +1 -2
  119. package/packages/dd-trace/src/tagger.js +2 -2
  120. package/packages/dd-trace/src/telemetry/send-data.js +5 -7
  121. package/packages/dd-trace/src/tracer.js +2 -2
  122. package/vendor/dist/ignore/LICENSE +0 -21
  123. package/vendor/dist/ignore/index.js +0 -1
@@ -9,7 +9,6 @@ const { getEnvironmentVariable } = require('../../config/helper')
9
9
  const satisfies = require('../../../../../vendor/dist/semifies')
10
10
 
11
11
  const istanbul = require('../../../../../vendor/dist/istanbul-lib-coverage')
12
- const ignore = require('../../../../../vendor/dist/ignore')
13
12
 
14
13
  const id = require('../../id')
15
14
  const {
@@ -671,24 +670,146 @@ function getCodeOwnersFileEntries (rootDir) {
671
670
  const trimmed = content.trim()
672
671
  if (trimmed === '') continue
673
672
  const [pattern, ...owners] = trimmed.split(/\s+/)
674
- entries.push({ pattern, owners })
673
+ entries.push(setCodeOwnersPatternRegex({ pattern, owners }))
675
674
  }
676
675
  // Reverse because rules defined last take precedence
677
676
  return entries.reverse()
678
677
  }
679
678
 
680
- const codeOwnersPerFileName = new Map()
679
+ const codeOwnersPerEntries = new WeakMap()
680
+
681
+ /**
682
+ * @param {string} character
683
+ * @returns {string}
684
+ */
685
+ function escapeRegexCharacter (character) {
686
+ return character.replaceAll(/[|\\{}()[\]^$+*?.]/g, String.raw`\$&`)
687
+ }
688
+
689
+ /**
690
+ * @param {string} pattern
691
+ * @returns {boolean}
692
+ */
693
+ function hasUnescapedWildcard (pattern) {
694
+ for (let i = 0; i < pattern.length; i++) {
695
+ const character = pattern[i]
696
+ if (character === '\\') {
697
+ i++
698
+ } else if (character === '*' || character === '?') {
699
+ return true
700
+ }
701
+ }
702
+ return false
703
+ }
704
+
705
+ /**
706
+ * @param {string} pattern
707
+ * @returns {string}
708
+ */
709
+ function codeOwnersPatternToRegexSource (pattern) {
710
+ let source = ''
711
+ for (let i = 0; i < pattern.length; i++) {
712
+ const character = pattern[i]
713
+
714
+ if (character === '\\') {
715
+ const escapedCharacter = pattern[i + 1]
716
+ source += escapedCharacter === undefined
717
+ ? escapeRegexCharacter(character)
718
+ : escapeRegexCharacter(escapedCharacter)
719
+ i++
720
+ } else if (character === '*') {
721
+ if (pattern[i + 1] === '*') {
722
+ if (pattern[i + 2] === '/') {
723
+ source += '(?:.*/)?'
724
+ i += 2
725
+ } else {
726
+ source += '.*'
727
+ i++
728
+ }
729
+ } else {
730
+ source += '[^/]*'
731
+ }
732
+ } else if (character === '?') {
733
+ source += '[^/]'
734
+ } else {
735
+ source += escapeRegexCharacter(character)
736
+ }
737
+ }
738
+ return source
739
+ }
740
+
741
+ /**
742
+ * @param {string} pattern
743
+ * @returns {RegExp|null}
744
+ */
745
+ function getCodeOwnersPatternRegex (pattern) {
746
+ if (!pattern || pattern[0] === '!') {
747
+ return null
748
+ }
749
+
750
+ const directoryOnly = pattern.endsWith('/')
751
+ const normalizedPattern = pattern.replace(/^\/+/, '').replace(/\/+$/, '')
752
+ const anchored = pattern.startsWith('/') || normalizedPattern.includes('/')
753
+
754
+ if (!normalizedPattern) {
755
+ return null
756
+ }
757
+
758
+ const lastSlashIndex = normalizedPattern.lastIndexOf('/')
759
+ const lastSegment = lastSlashIndex === -1 ? normalizedPattern : normalizedPattern.slice(lastSlashIndex + 1)
760
+ const descendantSuffix = directoryOnly || !hasUnescapedWildcard(lastSegment) ? '(?:/.*)?' : ''
761
+ const patternSource = codeOwnersPatternToRegexSource(normalizedPattern)
762
+ const regexSource = anchored
763
+ ? `^${patternSource}${descendantSuffix}$`
764
+ : `(?:^|/)${patternSource}${descendantSuffix}$`
765
+
766
+ return new RegExp(regexSource)
767
+ }
768
+
769
+ function setCodeOwnersPatternRegex (entry) {
770
+ Object.defineProperty(entry, 'regex', {
771
+ configurable: true,
772
+ value: getCodeOwnersPatternRegex(entry.pattern),
773
+ writable: true,
774
+ })
775
+ return entry
776
+ }
777
+
778
+ /**
779
+ * Match a repository-relative filename against a CODEOWNERS pattern.
780
+ * See GitHub's CODEOWNERS pattern rules:
781
+ * https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
782
+ *
783
+ * @param {RegExp|null} regex
784
+ * @param {string} filename
785
+ * @returns {boolean}
786
+ */
787
+ function isCodeOwnersPatternMatch (regex, filename) {
788
+ if (!regex || !filename) {
789
+ return false
790
+ }
791
+
792
+ const normalizedFilename = filename.replaceAll('\\', '/').replace(/^\/+/, '')
793
+ return regex.test(normalizedFilename)
794
+ }
681
795
 
682
796
  function getCodeOwnersForFilename (filename, entries) {
683
797
  if (!entries) {
684
798
  return null
685
799
  }
686
- if (codeOwnersPerFileName.has(filename)) {
800
+ let codeOwnersPerFileName = codeOwnersPerEntries.get(entries)
801
+
802
+ if (!codeOwnersPerFileName) {
803
+ codeOwnersPerFileName = new Map()
804
+ codeOwnersPerEntries.set(entries, codeOwnersPerFileName)
805
+ } else if (codeOwnersPerFileName.has(filename)) {
687
806
  return codeOwnersPerFileName.get(filename)
688
807
  }
808
+
689
809
  for (const entry of entries) {
690
810
  try {
691
- const isResponsible = ignore().add(entry.pattern).ignores(filename)
811
+ const regex = entry.regex === undefined ? setCodeOwnersPatternRegex(entry).regex : entry.regex
812
+ const isResponsible = isCodeOwnersPatternMatch(regex, filename)
692
813
  if (isResponsible) {
693
814
  const codeOwners = JSON.stringify(entry.owners)
694
815
  codeOwnersPerFileName.set(filename, codeOwners)
@@ -31,7 +31,8 @@ function extractURL (req) {
31
31
  }
32
32
 
33
33
  function getProtocol (req) {
34
- return (req.socket?.encrypted || req.connection?.encrypted) ? 'https' : 'http'
34
+ // Do not check deprecated `req.connection` property.
35
+ return req.socket?.encrypted ? 'https' : 'http'
35
36
  }
36
37
 
37
38
  /**
@@ -0,0 +1,32 @@
1
+ 'use strict'
2
+
3
+ const EventPlugin = require('./event')
4
+
5
+ // Params captured on the instrumentation context that are safe to forward as pprof labels. Must be
6
+ // a subset of the names declared in asyncParamsByMethod in datadog-instrumentations/src/crypto.js.
7
+ const allowedParams = new Set([
8
+ 'algorithm', 'digest', 'iterations', 'keylen', 'offset', 'operation', 'size', 'type',
9
+ ])
10
+
11
+ class CryptoPlugin extends EventPlugin {
12
+ static id = 'crypto'
13
+
14
+ static operation = 'operation'
15
+
16
+ static entryType = 'crypto'
17
+
18
+ extendEvent (event, ctx) {
19
+ const detail = {}
20
+ for (const name of allowedParams) {
21
+ const value = ctx[name]
22
+ if (typeof value === 'string' || typeof value === 'number') {
23
+ detail[name] = value
24
+ }
25
+ }
26
+ event.detail = detail
27
+
28
+ return event
29
+ }
30
+ }
31
+
32
+ module.exports = CryptoPlugin
@@ -0,0 +1,19 @@
1
+ 'use strict'
2
+
3
+ const EventPlugin = require('./event')
4
+
5
+ class ZlibPlugin extends EventPlugin {
6
+ static id = 'zlib'
7
+
8
+ static operation = 'operation'
9
+
10
+ static entryType = 'zlib'
11
+
12
+ extendEvent (event, ctx) {
13
+ event.detail = { operation: ctx.operation }
14
+
15
+ return event
16
+ }
17
+ }
18
+
19
+ module.exports = ZlibPlugin
@@ -194,13 +194,46 @@ class FilesystemDecorator {
194
194
  }
195
195
  }
196
196
 
197
+ class ZlibDecorator {
198
+ constructor (stringTable) {
199
+ this.stringTable = stringTable
200
+ this.operationNameLabelKey = stringTable.dedup('operation')
201
+ }
202
+
203
+ decorateSample (sampleInput, item) {
204
+ sampleInput.label.push(labelFromStr(this.stringTable, this.operationNameLabelKey, item.detail.operation))
205
+ }
206
+ }
207
+
208
+ class CryptoDecorator {
209
+ constructor (stringTable) {
210
+ this.stringTable = stringTable
211
+ }
212
+
213
+ decorateSample (sampleInput, item) {
214
+ const labels = sampleInput.label
215
+ const stringTable = this.stringTable
216
+ for (const [key, value] of Object.entries(item.detail)) {
217
+ switch (typeof value) {
218
+ case 'string':
219
+ labels.push(labelFromStrStr(stringTable, key, value))
220
+ break
221
+ case 'number':
222
+ labels.push(new Label({ key: stringTable.dedup(key), num: value }))
223
+ }
224
+ }
225
+ }
226
+ }
227
+
197
228
  // Keys correspond to PerformanceEntry.entryType, values are constructor
198
229
  // functions for type-specific decorators.
199
230
  const decoratorTypes = {
231
+ crypto: CryptoDecorator,
200
232
  fs: FilesystemDecorator,
201
233
  dns: DNSDecorator,
202
234
  gc: GCDecorator,
203
235
  net: NetDecorator,
236
+ zlib: ZlibDecorator,
204
237
  }
205
238
 
206
239
  // Translates performance entries into pprof samples.
@@ -348,12 +381,14 @@ class DatadogInstrumentationEventSource {
348
381
  constructor (eventHandler, eventFilter) {
349
382
  // List all entries explicitly for bundlers to pick up the require calls correctly.
350
383
  const plugins = [
384
+ require('./event_plugins/crypto'),
351
385
  require('./event_plugins/dns_lookup'),
352
386
  require('./event_plugins/dns_lookupservice'),
353
387
  require('./event_plugins/dns_resolve'),
354
388
  require('./event_plugins/dns_reverse'),
355
389
  require('./event_plugins/fs'),
356
390
  require('./event_plugins/net'),
391
+ require('./event_plugins/zlib'),
357
392
  ]
358
393
  this.plugins = plugins.map((Plugin) => {
359
394
  return new Plugin(eventHandler, eventFilter)
@@ -1,6 +1,5 @@
1
1
  'use strict'
2
2
 
3
- const { getValueFromEnvSources } = require('./config/helper')
4
3
  const NoopProxy = require('./noop/proxy')
5
4
  const DatadogTracer = require('./tracer')
6
5
  const getConfig = require('./config')
@@ -213,7 +212,7 @@ class Tracer extends NoopProxy {
213
212
  this._testApiManualPlugin.configure({ ...config, enabled: true }, false)
214
213
  }
215
214
  if (config.ciVisAgentlessLogSubmissionEnabled) {
216
- if (getValueFromEnvSources('DD_API_KEY')) {
215
+ if (config.apiKey) {
217
216
  const LogSubmissionPlugin = require('./ci-visibility/log-submission/log-submission-plugin')
218
217
  const automaticLogPlugin = new LogSubmissionPlugin(this)
219
218
  automaticLogPlugin.configure({ ...config, enabled: true })
@@ -279,12 +278,7 @@ class Tracer extends NoopProxy {
279
278
  const prioritySampler = config.apmTracingEnabled === false
280
279
  ? require('./standalone').configure(config)
281
280
  : undefined
282
- let otlpExporter
283
- if (config.otelTracesEnabled) {
284
- const { buildResourceAttributes, createOtlpTraceExporter } = require('./opentelemetry/trace')
285
- otlpExporter = createOtlpTraceExporter(config, buildResourceAttributes(config))
286
- }
287
- this._tracer = new DatadogTracer(config, prioritySampler, otlpExporter)
281
+ this._tracer = new DatadogTracer(config, prioritySampler)
288
282
  this.dataStreamsCheckpointer = this._tracer.dataStreamsCheckpointer
289
283
  lazyProxy(this, 'appsec', () => require('./appsec/sdk'), this._tracer, config)
290
284
  lazyProxy(this, 'llmobs', () => require('./llmobs/sdk'), this._tracer, this._modules.llmobs, config)
@@ -51,6 +51,8 @@ module.exports = {
51
51
  const trackEventLoop = config.runtimeMetrics.eventLoop !== false
52
52
  const trackGc = config.runtimeMetrics.gc !== false
53
53
 
54
+ client = new MetricsAggregationClient(new DogStatsDClient(clientConfig))
55
+
54
56
  if (trackGc) {
55
57
  startGCObserver()
56
58
  }
@@ -72,8 +74,6 @@ module.exports = {
72
74
  }
73
75
  }
74
76
 
75
- client = new MetricsAggregationClient(new DogStatsDClient(clientConfig))
76
-
77
77
  lastTime = performance.now()
78
78
 
79
79
  if (nativeMetrics) {
@@ -35,6 +35,10 @@ const web = {
35
35
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
36
36
  serviceSource: optionServiceSource,
37
37
  },
38
+ 'modelcontextprotocol-sdk': {
39
+ opName: () => 'mcp.tool.call',
40
+ serviceName: ({ pluginService, tracerService }) => pluginService || tracerService,
41
+ },
38
42
  aws: {
39
43
  opName: () => 'aws.request',
40
44
  serviceName: awsServiceV0,
@@ -22,6 +22,10 @@ const web = {
22
22
  serviceName: ({ pluginConfig, tracerService }) => pluginConfig.service || tracerService,
23
23
  serviceSource: optionServiceSource,
24
24
  },
25
+ 'modelcontextprotocol-sdk': {
26
+ opName: () => 'mcp.tool.call',
27
+ serviceName: identityService,
28
+ },
25
29
  fetch: {
26
30
  opName: () => 'http.client.request',
27
31
  serviceName: httpPluginClientService,
@@ -5,7 +5,6 @@ const spanFormat = require('./span_format')
5
5
  const SpanSampler = require('./span_sampler')
6
6
  const GitMetadataTagger = require('./git_metadata_tagger')
7
7
  const processTags = require('./process-tags')
8
- const { getValueFromEnvSources } = require('./config/helper')
9
8
 
10
9
  const startedSpans = new WeakSet()
11
10
  const finishedSpans = new WeakSet()
@@ -88,7 +87,7 @@ class SpanProcessor {
88
87
  }
89
88
 
90
89
  _erase (trace, active) {
91
- if (getValueFromEnvSources('DD_TRACE_EXPERIMENTAL_STATE_TRACKING') === 'true') {
90
+ if (this._config.DD_TRACE_EXPERIMENTAL_STATE_TRACKING) {
92
91
  const started = new Set()
93
92
  const startedIds = new Set()
94
93
  const finished = new Set()
@@ -8,7 +8,7 @@ function addNonEmpty (carrier, key, value) {
8
8
  }
9
9
  }
10
10
 
11
- function add (carrier, keyValuePairs) {
11
+ function add (carrier, keyValuePairs, valueSeparator = ':') {
12
12
  if (!carrier) return
13
13
 
14
14
  if (typeof keyValuePairs === 'string') {
@@ -18,7 +18,7 @@ function add (carrier, keyValuePairs) {
18
18
  for (let i = 0; i < keyValuePairs.length; i++) {
19
19
  const char = keyValuePairs[i]
20
20
 
21
- if (char === ':') {
21
+ if (char === valueSeparator) {
22
22
  if (valueStart === 0) {
23
23
  valueStart = i
24
24
  }
@@ -2,8 +2,6 @@
2
2
 
3
3
  const request = require('../exporters/common/request')
4
4
  const log = require('../log')
5
- const { isTrue } = require('../util')
6
- const { getValueFromEnvSources } = require('../config/helper')
7
5
 
8
6
  /**
9
7
  * @typedef {Record<string, unknown>} TelemetryPayloadObject
@@ -139,16 +137,16 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
139
137
  hostname,
140
138
  port,
141
139
  isCiVisibility,
140
+ DD_CIVISIBILITY_AGENTLESS_ENABLED,
142
141
  } = config
143
142
 
144
143
  let url = config.url
145
144
 
146
- const isCiVisibilityAgentlessMode = isCiVisibility &&
147
- isTrue(getValueFromEnvSources('DD_CIVISIBILITY_AGENTLESS_ENABLED'))
145
+ const isCiVisibilityAgentlessMode = isCiVisibility && DD_CIVISIBILITY_AGENTLESS_ENABLED
148
146
 
149
147
  if (isCiVisibilityAgentlessMode) {
150
148
  try {
151
- url = url || new URL(getAgentlessTelemetryEndpoint(config.site))
149
+ url ||= new URL(getAgentlessTelemetryEndpoint(config.site))
152
150
  } catch (err) {
153
151
  log.error('Telemetry endpoint url is invalid', err)
154
152
  // No point to do the request if the URL is invalid
@@ -178,14 +176,14 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
178
176
  })
179
177
 
180
178
  request(data, options, (error) => {
181
- if (error && getValueFromEnvSources('DD_API_KEY') && config.site) {
179
+ if (error && config.apiKey && config.site) {
182
180
  if (agentTelemetry) {
183
181
  log.warn('Agent telemetry failed, started agentless telemetry')
184
182
  agentTelemetry = false
185
183
  }
186
184
  // figure out which data center to send to
187
185
  const backendUrl = getAgentlessTelemetryEndpoint(config.site)
188
- const backendHeader = { ...options.headers, 'DD-API-KEY': getValueFromEnvSources('DD_API_KEY') }
186
+ const backendHeader = { ...options.headers, 'DD-API-KEY': config.apiKey }
189
187
  const backendOptions = {
190
188
  ...options,
191
189
  url: backendUrl,
@@ -17,8 +17,8 @@ const SERVICE_NAME = tags.SERVICE_NAME
17
17
  const MEASURED = tags.MEASURED
18
18
 
19
19
  class DatadogTracer extends Tracer {
20
- constructor (config, prioritySampler, exporter) {
21
- super(config, prioritySampler, exporter)
20
+ constructor (config, prioritySampler) {
21
+ super(config, prioritySampler)
22
22
  this._dataStreamsProcessor = new DataStreamsProcessor(config)
23
23
  this._dataStreamsManager = new DataStreamsManager(this._dataStreamsProcessor)
24
24
  this.dataStreamsCheckpointer = new DataStreamsCheckpointer(this)
@@ -1,21 +0,0 @@
1
- Copyright (c) 2013 Kael Zhang <i@kael.me>, contributors
2
- http://kael.me/
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining
5
- a copy of this software and associated documentation files (the
6
- "Software"), to deal in the Software without restriction, including
7
- without limitation the rights to use, copy, modify, merge, publish,
8
- distribute, sublicense, and/or sell copies of the Software, and to
9
- permit persons to whom the Software is furnished to do so, subject to
10
- the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be
13
- included in all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1 +0,0 @@
1
- (()=>{var e={"./ignore/index.js"(e){function makeArray(e){return Array.isArray(e)?e:[e]}let t,r=/^\s+$/,s=/(?:[^\\]|^)\\$/,i=/^\\!/,n=/^\\#/,a=/\r?\n/g,h=/^\.{0,2}\/|^\.{1,2}$/,o=/\/$/,l="node-ignore";"u">typeof Symbol&&(l=Symbol.for("node-ignore"));let c=l,define=(e,t,r)=>(Object.defineProperty(e,t,{value:r}),r),u=/([0-z])-([0-z])/g,RETURN_FALSE=()=>!1,_=[[/^\uFEFF/,()=>""],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,r)=>t+(0===r.indexOf("\\")?" ":"")],[/(\\+?)\s/g,(e,t)=>{let{length:r}=t;return t.slice(0,r-r%2)+" "}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?"^":"(?:^|\\/)"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,r)=>t+6<r.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,r)=>t+r.replace(/\\\*/g,"[^\\/]*")],[/\\\\\\(?=[$.|*+(){^])/g,()=>"\\"],[/\\\\/g,()=>"\\"],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,r,s,i)=>"\\"===t?`\\[${r}${(e=>{let{length:t}=e;return e.slice(0,t-t%2)})(s)}${i}`:"]"===i&&s.length%2==0?`[${r.replace(u,(e,t,r)=>t.charCodeAt(0)<=r.charCodeAt(0)?e:"")}${s}]`:"[]"],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],d=/(^|\\\/)?\\\*$/,g="regex",p="checkRegex",f={[g](e,t){let r=t?`${t}[^/]+`:"[^/]*";return`${r}(?=$|\\/$)`},[p](e,t){let r=t?`${t}[^/]*`:"[^/]*";return`${r}(?=$|\\/$)`}};let IgnoreRule=class IgnoreRule{constructor(e,t,r,s,i,n){this.pattern=e,this.mark=t,this.negative=i,define(this,"body",r),define(this,"ignoreCase",s),define(this,"regexPrefix",n)}get regex(){let e="_"+g;return this[e]?this[e]:this._make(g,e)}get checkRegex(){let e="_"+p;return this[e]?this[e]:this._make(p,e)}_make(e,t){let r=this.regexPrefix.replace(d,f[e]);return define(this,t,this.ignoreCase?RegExp(r,"i"):new RegExp(r))}};let RuleManager=class RuleManager{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){let t;if(e&&e[c]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if("string"==typeof e&&(e={pattern:e}),(t=e.pattern)&&"string"==typeof t&&!r.test(t)&&!s.test(t)&&0!==t.indexOf("#")){let t=(({pattern:e,mark:t},r)=>{let s,a=!1,h=e;0===h.indexOf("!")&&(a=!0,h=h.substr(1));let o=(s=h=h.replace(i,"!").replace(n,"#"),_.reduce((e,[t,r])=>e.replace(t,r.bind(s)),s));return new IgnoreRule(e,t,h,r,a,o)})(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,makeArray("string"==typeof e?e.split(a).filter(Boolean):e).forEach(this._add,this),this._added}test(e,r,s){let i,n=!1,a=!1;this._rules.forEach(h=>{let{negative:o}=h;(a!==o||n===a)&&(!o||n||a||r)&&h[s].test(e)&&(n=!o,a=o,i=o?t:h)});let h={ignored:n,unignored:a};return i&&(h.rule=i),h}};let throwError=(e,t)=>{throw new t(e)},checkPath=(e,t,r)=>"string"!=typeof e?r(`path must be a string, but got \`${t}\``,TypeError):e?!checkPath.isNotRelative(e)||r(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):r("path must not be empty",TypeError),isNotRelative=e=>h.test(e);checkPath.isNotRelative=isNotRelative,checkPath.convert=e=>e;let Ignore=class Ignore{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:r=!1}={}){define(this,c,!0),this._rules=new RuleManager(t),this._strictPathCheck=!r,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,r,s){let i=e&&checkPath.convert(e);return checkPath(i,e,this._strictPathCheck?throwError:RETURN_FALSE),this._t(i,t,r,s)}checkIgnore(e){if(!o.test(e))return this.test(e);let t=e.split("/").filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join("/")+"/",this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,p)}_t(e,t,r,s){if(e in t)return t[e];if(s||(s=e.split("/").filter(Boolean)),s.pop(),!s.length)return t[e]=this._rules.test(e,r,g);let i=this._t(s.join("/")+"/",t,r,s);return t[e]=i.ignored?i:this._rules.test(e,r,g)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return makeArray(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}};let factory=e=>new Ignore(e),setupWindows=()=>{checkPath.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,"/");let e=/^[a-z]:\//i;checkPath.isNotRelative=t=>e.test(t)||isNotRelative(t)};"u">typeof process&&"win32"===process.platform&&setupWindows(),e.exports=factory,factory.default=factory,e.exports.isPathValid=e=>checkPath(e&&checkPath.convert(e),e,RETURN_FALSE),define(e.exports,Symbol.for("setupWindows"),setupWindows)}},t={};function __webpack_require__(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,__webpack_require__),i.exports}var r=__webpack_require__("./ignore/index.js");module.exports=r})();