dd-trace 3.36.0 → 3.38.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 (76) hide show
  1. package/LICENSE-3rdparty.csv +2 -0
  2. package/ext/tags.d.ts +1 -0
  3. package/ext/tags.js +1 -0
  4. package/index.d.ts +1 -0
  5. package/package.json +9 -6
  6. package/packages/datadog-esbuild/index.js +30 -25
  7. package/packages/datadog-instrumentations/src/body-parser.js +4 -3
  8. package/packages/datadog-instrumentations/src/cookie-parser.js +37 -0
  9. package/packages/datadog-instrumentations/src/cucumber.js +24 -4
  10. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +45 -0
  11. package/packages/datadog-instrumentations/src/express.js +3 -2
  12. package/packages/datadog-instrumentations/src/graphql.js +5 -0
  13. package/packages/datadog-instrumentations/src/helpers/hooks.js +5 -1
  14. package/packages/datadog-instrumentations/src/http/server.js +1 -1
  15. package/packages/datadog-instrumentations/src/jest.js +20 -11
  16. package/packages/datadog-instrumentations/src/knex.js +62 -1
  17. package/packages/datadog-instrumentations/src/mocha.js +19 -4
  18. package/packages/datadog-instrumentations/src/mongodb.js +63 -0
  19. package/packages/datadog-instrumentations/src/mongoose.js +140 -1
  20. package/packages/datadog-instrumentations/src/next.js +62 -80
  21. package/packages/datadog-instrumentations/src/pg.js +14 -15
  22. package/packages/datadog-instrumentations/src/playwright.js +26 -5
  23. package/packages/datadog-plugin-cucumber/src/index.js +17 -5
  24. package/packages/datadog-plugin-cypress/src/plugin.js +38 -8
  25. package/packages/datadog-plugin-jest/src/index.js +19 -4
  26. package/packages/datadog-plugin-jest/src/util.js +45 -2
  27. package/packages/datadog-plugin-memcached/src/index.js +10 -5
  28. package/packages/datadog-plugin-mocha/src/index.js +19 -6
  29. package/packages/datadog-plugin-mysql/src/index.js +2 -2
  30. package/packages/datadog-plugin-next/src/index.js +14 -5
  31. package/packages/datadog-plugin-pg/src/index.js +2 -2
  32. package/packages/dd-trace/src/appsec/channels.js +4 -1
  33. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +1 -0
  34. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +166 -0
  35. package/packages/dd-trace/src/appsec/iast/analyzers/sql-injection-analyzer.js +21 -1
  36. package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +3 -3
  37. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +1 -2
  38. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +4 -0
  39. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +25 -12
  40. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +4 -4
  41. package/packages/dd-trace/src/appsec/iast/taint-tracking/secure-marks-generator.js +13 -0
  42. package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +2 -1
  43. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/json-sensitive-analyzer.js +16 -0
  44. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +3 -4
  45. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +9 -0
  46. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +13 -1
  47. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +169 -0
  48. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +1 -0
  49. package/packages/dd-trace/src/appsec/index.js +45 -14
  50. package/packages/dd-trace/src/appsec/recommended.json +549 -24
  51. package/packages/dd-trace/src/appsec/remote_config/capabilities.js +2 -1
  52. package/packages/dd-trace/src/appsec/remote_config/index.js +2 -0
  53. package/packages/dd-trace/src/appsec/remote_config/manager.js +11 -3
  54. package/packages/dd-trace/src/appsec/reporter.js +7 -5
  55. package/packages/dd-trace/src/appsec/telemetry.js +2 -2
  56. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +18 -5
  57. package/packages/dd-trace/src/appsec/waf/waf_manager.js +5 -4
  58. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-itr-configuration.js +1 -14
  59. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -13
  60. package/packages/dd-trace/src/config.js +8 -0
  61. package/packages/dd-trace/src/datastreams/processor.js +6 -2
  62. package/packages/dd-trace/src/format.js +9 -1
  63. package/packages/dd-trace/src/opentracing/propagation/text_map.js +2 -2
  64. package/packages/dd-trace/src/opentracing/tracer.js +0 -2
  65. package/packages/dd-trace/src/plugin_manager.js +4 -3
  66. package/packages/dd-trace/src/plugins/database.js +14 -4
  67. package/packages/dd-trace/src/plugins/index.js +1 -0
  68. package/packages/dd-trace/src/plugins/outbound.js +4 -3
  69. package/packages/dd-trace/src/plugins/util/ci.js +17 -0
  70. package/packages/dd-trace/src/plugins/util/git.js +26 -4
  71. package/packages/dd-trace/src/plugins/util/test.js +16 -1
  72. package/packages/dd-trace/src/profiling/config.js +36 -5
  73. package/packages/dd-trace/src/profiling/profilers/wall.js +7 -1
  74. package/packages/dd-trace/src/service-naming/extra-services.js +24 -0
  75. package/packages/dd-trace/src/telemetry/index.js +10 -1
  76. package/packages/dd-trace/src/telemetry/metrics.js +0 -5
@@ -23,7 +23,7 @@ function getStartedSpans (context) {
23
23
  return context._trace.started
24
24
  }
25
25
 
26
- function generateLabels ({ spanId, rootSpanId, webTags, endpoint }) {
26
+ function generateLabels ({ context: { spanId, rootSpanId, webTags, endpoint }, timestamp }) {
27
27
  const labels = {}
28
28
  if (spanId) {
29
29
  labels['span id'] = spanId
@@ -37,6 +37,8 @@ function generateLabels ({ spanId, rootSpanId, webTags, endpoint }) {
37
37
  // fallback to endpoint computed when sample was taken
38
38
  labels['trace endpoint'] = endpoint
39
39
  }
40
+ // Incoming timestamps are in microseconds, we emit nanos.
41
+ labels['end_timestamp_ns'] = timestamp * 1000n
40
42
 
41
43
  return labels
42
44
  }
@@ -100,6 +102,10 @@ class NativeWallProfiler {
100
102
  return this._codeHotspotsEnabled
101
103
  }
102
104
 
105
+ endpointCollectionEnabled () {
106
+ return this._endpointCollectionEnabled
107
+ }
108
+
103
109
  start ({ mapper } = {}) {
104
110
  if (this._started) return
105
111
 
@@ -0,0 +1,24 @@
1
+ 'use strict'
2
+
3
+ const maxExtraServices = 64
4
+ const extraServices = new Set()
5
+
6
+ function getExtraServices () {
7
+ return [...extraServices]
8
+ }
9
+
10
+ function registerExtraService (serviceName) {
11
+ if (serviceName && extraServices.size < maxExtraServices) {
12
+ extraServices.add(serviceName)
13
+ }
14
+ }
15
+
16
+ function clear () {
17
+ extraServices.clear()
18
+ }
19
+
20
+ module.exports = {
21
+ registerExtraService,
22
+ getExtraServices,
23
+ clear
24
+ }
@@ -57,11 +57,20 @@ function appStarted () {
57
57
  return {
58
58
  integrations: getIntegrations(),
59
59
  dependencies: [],
60
- configuration: flatten(config),
60
+ configuration: flatten(formatConfig(config)),
61
61
  additional_payload: []
62
62
  }
63
63
  }
64
64
 
65
+ function formatConfig (config) {
66
+ // format peerServiceMapping from an object to a string map in order for
67
+ // telemetry intake to accept the configuration
68
+ config.peerServiceMapping = config.peerServiceMapping
69
+ ? Object.entries(config.peerServiceMapping).map(([key, value]) => `${key}:${value}`).join(',')
70
+ : ''
71
+ return config
72
+ }
73
+
65
74
  function onBeforeExit () {
66
75
  process.removeListener('beforeExit', onBeforeExit)
67
76
  sendData(config, application, host, 'app-closing')
@@ -1,7 +1,5 @@
1
1
  'use strict'
2
2
 
3
- const { version } = require('../../../../package.json')
4
-
5
3
  const { sendData } = require('./send-data')
6
4
 
7
5
  function getId (type, namespace, name, tags) {
@@ -35,10 +33,7 @@ class Metric {
35
33
  this.metric = common ? metric : `nodejs.${metric}`
36
34
  this.tags = tagArray(tags)
37
35
  if (common) {
38
- this.tags.push('lib_language:nodejs')
39
36
  this.tags.push(`version:${process.version}`)
40
- } else {
41
- this.tags.push(`lib_version:${version}`)
42
37
  }
43
38
  this.common = common
44
39