dd-trace 4.36.0 → 4.37.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 (32) hide show
  1. package/ci/init.js +7 -0
  2. package/ext/exporters.d.ts +2 -1
  3. package/ext/exporters.js +2 -1
  4. package/index.d.ts +14 -6
  5. package/package.json +4 -4
  6. package/packages/datadog-esbuild/index.js +8 -2
  7. package/packages/datadog-instrumentations/src/aws-sdk.js +4 -1
  8. package/packages/datadog-instrumentations/src/cucumber.js +182 -105
  9. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  10. package/packages/datadog-instrumentations/src/lodash.js +31 -0
  11. package/packages/datadog-instrumentations/src/playwright.js +6 -1
  12. package/packages/datadog-plugin-aws-sdk/src/services/index.js +3 -0
  13. package/packages/datadog-plugin-aws-sdk/src/services/sfn.js +7 -0
  14. package/packages/datadog-plugin-aws-sdk/src/services/states.js +7 -0
  15. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +64 -0
  16. package/packages/datadog-plugin-cucumber/src/index.js +83 -11
  17. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-base-analyzer.js +1 -0
  18. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-analyzer.js +4 -0
  19. package/packages/dd-trace/src/appsec/iast/taint-tracking/csi-methods.js +3 -0
  20. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +10 -1
  21. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +55 -1
  22. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/hardcoded-password-analyzer.js +13 -0
  23. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +8 -2
  24. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +6 -6
  25. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +56 -0
  26. package/packages/dd-trace/src/ci-visibility/exporters/{jest-worker → test-worker}/writer.js +7 -0
  27. package/packages/dd-trace/src/config.js +7 -0
  28. package/packages/dd-trace/src/exporter.js +2 -1
  29. package/packages/dd-trace/src/plugins/database.js +20 -5
  30. package/packages/dd-trace/src/plugins/util/test.js +7 -0
  31. package/packages/dd-trace/src/telemetry/index.js +9 -3
  32. package/packages/dd-trace/src/ci-visibility/exporters/jest-worker/index.js +0 -33
@@ -1,7 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const StoragePlugin = require('./storage')
4
- const { PEER_SERVICE_KEY } = require('../constants')
4
+ const { PEER_SERVICE_KEY, PEER_SERVICE_SOURCE_KEY } = require('../constants')
5
5
 
6
6
  class DatabasePlugin extends StoragePlugin {
7
7
  static get operation () { return 'query' }
@@ -28,16 +28,31 @@ class DatabasePlugin extends StoragePlugin {
28
28
  }
29
29
  }
30
30
 
31
- createDBMPropagationCommentService (serviceName) {
31
+ createDBMPropagationCommentService (serviceName, span) {
32
32
  this.encodingServiceTags('dddbs', 'encodedDddbs', serviceName)
33
33
  this.encodingServiceTags('dde', 'encodedDde', this.tracer._env)
34
34
  this.encodingServiceTags('ddps', 'encodedDdps', this.tracer._service)
35
35
  this.encodingServiceTags('ddpv', 'encodedDdpv', this.tracer._version)
36
+ if (span.context()._tags['out.host']) {
37
+ this.encodingServiceTags('ddh', 'encodedDdh', span._spanContext._tags['out.host'])
38
+ }
39
+ if (span.context()._tags['db.name']) {
40
+ this.encodingServiceTags('dddb', 'encodedDddb', span._spanContext._tags['db.name'])
41
+ }
36
42
 
37
- const { encodedDddbs, encodedDde, encodedDdps, encodedDdpv } = this.serviceTags
43
+ const { encodedDddb, encodedDddbs, encodedDde, encodedDdh, encodedDdps, encodedDdpv } = this.serviceTags
38
44
 
39
- return `dddbs='${encodedDddbs}',dde='${encodedDde}',` +
45
+ let dbmComment = `dddb='${encodedDddb}',dddbs='${encodedDddbs}',dde='${encodedDde}',ddh='${encodedDdh}',` +
40
46
  `ddps='${encodedDdps}',ddpv='${encodedDdpv}'`
47
+
48
+ const peerData = this.getPeerService(span.context()._tags)
49
+ if (peerData !== undefined && peerData[PEER_SERVICE_SOURCE_KEY] === PEER_SERVICE_KEY) {
50
+ this.encodingServiceTags('ddprs', 'encodedDdprs', peerData[PEER_SERVICE_KEY])
51
+
52
+ const { encodedDdprs } = this.serviceTags
53
+ dbmComment += `,ddprs='${encodedDdprs}'`
54
+ }
55
+ return dbmComment
41
56
  }
42
57
 
43
58
  getDbmServiceName (span, tracerService) {
@@ -56,7 +71,7 @@ class DatabasePlugin extends StoragePlugin {
56
71
  return query
57
72
  }
58
73
 
59
- const servicePropagation = this.createDBMPropagationCommentService(dbmService)
74
+ const servicePropagation = this.createDBMPropagationCommentService(dbmService, span)
60
75
 
61
76
  if (isPreparedStatement || mode === 'service') {
62
77
  return `/*${servicePropagation}*/ ${query}`
@@ -61,6 +61,8 @@ const CI_APP_ORIGIN = 'ciapp-test'
61
61
  const JEST_TEST_RUNNER = 'test.jest.test_runner'
62
62
  const JEST_DISPLAY_NAME = 'test.jest.display_name'
63
63
 
64
+ const CUCUMBER_IS_PARALLEL = 'test.cucumber.is_parallel'
65
+
64
66
  const TEST_ITR_TESTS_SKIPPED = '_dd.ci.itr.tests_skipped'
65
67
  const TEST_ITR_SKIPPING_ENABLED = 'test.itr.tests_skipping.enabled'
66
68
  const TEST_ITR_SKIPPING_TYPE = 'test.itr.tests_skipping.type'
@@ -82,6 +84,9 @@ const TEST_BROWSER_VERSION = 'test.browser.version'
82
84
  const JEST_WORKER_TRACE_PAYLOAD_CODE = 60
83
85
  const JEST_WORKER_COVERAGE_PAYLOAD_CODE = 61
84
86
 
87
+ // cucumber worker variables
88
+ const CUCUMBER_WORKER_TRACE_PAYLOAD_CODE = 70
89
+
85
90
  // Early flake detection util strings
86
91
  const EFD_STRING = "Retried by Datadog's Early Flake Detection"
87
92
  const EFD_TEST_NAME_REGEX = new RegExp(EFD_STRING + ' \\(#\\d+\\): ', 'g')
@@ -92,6 +97,7 @@ module.exports = {
92
97
  TEST_FRAMEWORK_VERSION,
93
98
  JEST_TEST_RUNNER,
94
99
  JEST_DISPLAY_NAME,
100
+ CUCUMBER_IS_PARALLEL,
95
101
  TEST_TYPE,
96
102
  TEST_NAME,
97
103
  TEST_SUITE,
@@ -104,6 +110,7 @@ module.exports = {
104
110
  LIBRARY_VERSION,
105
111
  JEST_WORKER_TRACE_PAYLOAD_CODE,
106
112
  JEST_WORKER_COVERAGE_PAYLOAD_CODE,
113
+ CUCUMBER_WORKER_TRACE_PAYLOAD_CODE,
107
114
  TEST_SOURCE_START,
108
115
  TEST_SKIPPED_BY_ITR,
109
116
  TEST_CONFIGURATION_BROWSER_NAME,
@@ -6,7 +6,8 @@ const dependencies = require('./dependencies')
6
6
  const { sendData } = require('./send-data')
7
7
  const { errors } = require('../startup-log')
8
8
  const { manager: metricsManager } = require('./metrics')
9
- const logs = require('./logs')
9
+ const telemetryLogger = require('./logs')
10
+ const logger = require('../log')
10
11
 
11
12
  const telemetryStartChannel = dc.channel('datadog:telemetry:start')
12
13
  const telemetryStopChannel = dc.channel('datadog:telemetry:stop')
@@ -211,7 +212,7 @@ function createPayload (currReqType, currPayload = {}) {
211
212
  function heartbeat (config, application, host) {
212
213
  heartbeatTimeout = setTimeout(() => {
213
214
  metricsManager.send(config, application, host)
214
- logs.send(config, application, host)
215
+ telemetryLogger.send(config, application, host)
215
216
 
216
217
  const { reqType, payload } = createPayload('app-heartbeat')
217
218
  sendData(config, application, host, reqType, payload, updateRetryData)
@@ -235,6 +236,10 @@ function extendedHeartbeat (config) {
235
236
 
236
237
  function start (aConfig, thePluginManager) {
237
238
  if (!aConfig.telemetry.enabled) {
239
+ if (aConfig.sca?.enabled) {
240
+ logger.warn('DD_APPSEC_SCA_ENABLED requires enabling telemetry to work.')
241
+ }
242
+
238
243
  return
239
244
  }
240
245
  config = aConfig
@@ -245,7 +250,7 @@ function start (aConfig, thePluginManager) {
245
250
  integrations = getIntegrations()
246
251
 
247
252
  dependencies.start(config, application, host, getRetryData, updateRetryData)
248
- logs.start(config)
253
+ telemetryLogger.start(config)
249
254
 
250
255
  sendData(config, application, host, 'app-started', appStarted(config))
251
256
 
@@ -318,6 +323,7 @@ function updateConfig (changes, config) {
318
323
 
319
324
  for (const change of changes) {
320
325
  const name = nameMapping[change.name] || change.name
326
+
321
327
  names.push(name)
322
328
  const { origin, value } = change
323
329
  const entry = { name, value, origin }
@@ -1,33 +0,0 @@
1
- 'use strict'
2
-
3
- const Writer = require('./writer')
4
- const {
5
- JEST_WORKER_COVERAGE_PAYLOAD_CODE,
6
- JEST_WORKER_TRACE_PAYLOAD_CODE
7
- } = require('../../../plugins/util/test')
8
-
9
- /**
10
- * Lightweight exporter whose writers only do simple JSON serialization
11
- * of trace and coverage payloads, which they send to the jest main process.
12
- */
13
- class JestWorkerCiVisibilityExporter {
14
- constructor () {
15
- this._writer = new Writer(JEST_WORKER_TRACE_PAYLOAD_CODE)
16
- this._coverageWriter = new Writer(JEST_WORKER_COVERAGE_PAYLOAD_CODE)
17
- }
18
-
19
- export (payload) {
20
- this._writer.append(payload)
21
- }
22
-
23
- exportCoverage (formattedCoverage) {
24
- this._coverageWriter.append(formattedCoverage)
25
- }
26
-
27
- flush () {
28
- this._writer.flush()
29
- this._coverageWriter.flush()
30
- }
31
- }
32
-
33
- module.exports = JestWorkerCiVisibilityExporter