dd-trace 3.12.1 → 3.15.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 (101) hide show
  1. package/LICENSE-3rdparty.csv +1 -0
  2. package/README.md +5 -5
  3. package/ci/init.js +3 -1
  4. package/index.d.ts +100 -1
  5. package/package.json +5 -4
  6. package/packages/datadog-instrumentations/src/aws-sdk.js +86 -0
  7. package/packages/datadog-instrumentations/src/cucumber.js +74 -15
  8. package/packages/datadog-instrumentations/src/cypress.js +1 -1
  9. package/packages/datadog-instrumentations/src/fs.js +358 -0
  10. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -0
  11. package/packages/datadog-instrumentations/src/helpers/register.js +1 -1
  12. package/packages/datadog-instrumentations/src/jest.js +24 -23
  13. package/packages/datadog-instrumentations/src/ldapjs.js +12 -2
  14. package/packages/datadog-instrumentations/src/mocha.js +10 -7
  15. package/packages/datadog-instrumentations/src/mongoose.js +1 -1
  16. package/packages/datadog-instrumentations/src/mysql.js +7 -1
  17. package/packages/datadog-instrumentations/src/mysql2.js +7 -1
  18. package/packages/datadog-instrumentations/src/next.js +2 -1
  19. package/packages/datadog-instrumentations/src/playwright.js +263 -0
  20. package/packages/datadog-plugin-aws-sdk/src/base.js +12 -5
  21. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +2 -2
  22. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +29 -24
  23. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +31 -16
  24. package/packages/datadog-plugin-cucumber/src/index.js +42 -11
  25. package/packages/datadog-plugin-cypress/src/plugin.js +129 -4
  26. package/packages/datadog-plugin-cypress/src/support.js +5 -0
  27. package/packages/datadog-plugin-fs/src/index.js +45 -0
  28. package/packages/datadog-plugin-hapi/src/index.js +5 -1
  29. package/packages/datadog-plugin-http/src/server.js +1 -1
  30. package/packages/datadog-plugin-http2/src/server.js +1 -1
  31. package/packages/datadog-plugin-jest/src/index.js +40 -70
  32. package/packages/datadog-plugin-mocha/src/index.js +44 -64
  33. package/packages/datadog-plugin-mysql/src/index.js +8 -7
  34. package/packages/datadog-plugin-playwright/src/index.js +112 -0
  35. package/packages/datadog-shimmer/src/shimmer.js +28 -11
  36. package/packages/dd-trace/src/appsec/addresses.js +3 -1
  37. package/packages/dd-trace/src/appsec/blocking.js +35 -9
  38. package/packages/dd-trace/src/appsec/callbacks/ddwaf.js +1 -1
  39. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +1 -0
  40. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +60 -0
  41. package/packages/dd-trace/src/appsec/iast/iast-context.js +6 -2
  42. package/packages/dd-trace/src/appsec/iast/index.js +3 -2
  43. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -2
  44. package/packages/dd-trace/src/appsec/index.js +5 -5
  45. package/packages/dd-trace/src/appsec/recommended.json +320 -184
  46. package/packages/dd-trace/src/appsec/remote_config/capabilities.js +2 -1
  47. package/packages/dd-trace/src/appsec/remote_config/index.js +3 -0
  48. package/packages/dd-trace/src/appsec/reporter.js +14 -14
  49. package/packages/dd-trace/src/appsec/sdk/index.js +41 -0
  50. package/packages/dd-trace/src/appsec/sdk/noop.js +17 -0
  51. package/packages/dd-trace/src/appsec/sdk/set_user.js +30 -0
  52. package/packages/dd-trace/src/appsec/sdk/track_event.js +74 -0
  53. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +73 -0
  54. package/packages/dd-trace/src/appsec/sdk/utils.js +10 -0
  55. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +1 -5
  56. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +1 -5
  57. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +48 -11
  58. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +7 -1
  59. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-itr-configuration.js +4 -2
  60. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +5 -3
  61. package/packages/dd-trace/src/config.js +63 -7
  62. package/packages/dd-trace/src/encode/0.4.js +1 -1
  63. package/packages/dd-trace/src/encode/0.5.js +1 -1
  64. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +44 -4
  65. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +52 -37
  66. package/packages/dd-trace/src/encode/tags-processors.js +3 -2
  67. package/packages/dd-trace/src/exporters/common/request.js +10 -3
  68. package/packages/dd-trace/src/lambda/handler.js +5 -6
  69. package/packages/dd-trace/src/log/channels.js +47 -0
  70. package/packages/dd-trace/src/log/index.js +79 -0
  71. package/packages/dd-trace/src/log/writer.js +124 -0
  72. package/packages/dd-trace/src/metrics.js +18 -0
  73. package/packages/dd-trace/src/noop/proxy.js +5 -2
  74. package/packages/dd-trace/src/opentracing/propagation/text_map.js +188 -36
  75. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +99 -0
  76. package/packages/dd-trace/src/opentracing/span.js +2 -1
  77. package/packages/dd-trace/src/opentracing/span_context.js +6 -3
  78. package/packages/dd-trace/src/plugins/ci_plugin.js +72 -12
  79. package/packages/dd-trace/src/plugins/index.js +2 -0
  80. package/packages/dd-trace/src/plugins/util/ci.js +13 -21
  81. package/packages/dd-trace/src/plugins/util/exec.js +2 -2
  82. package/packages/dd-trace/src/plugins/util/git.js +16 -1
  83. package/packages/dd-trace/src/{appsec → plugins/util}/ip_extractor.js +1 -1
  84. package/packages/dd-trace/src/plugins/util/test.js +53 -10
  85. package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -7
  86. package/packages/dd-trace/src/plugins/util/web.js +11 -0
  87. package/packages/dd-trace/src/profiler.js +3 -0
  88. package/packages/dd-trace/src/profiling/config.js +8 -3
  89. package/packages/dd-trace/src/profiling/exporters/file.js +13 -2
  90. package/packages/dd-trace/src/profiling/profiler.js +23 -6
  91. package/packages/dd-trace/src/profiling/profilers/wall.js +1 -0
  92. package/packages/dd-trace/src/proxy.js +2 -0
  93. package/packages/dd-trace/src/span_processor.js +1 -1
  94. package/packages/dd-trace/src/span_sampler.js +68 -52
  95. package/packages/dd-trace/src/startup-log.js +3 -6
  96. package/packages/dd-trace/src/telemetry/index.js +23 -2
  97. package/packages/dd-trace/src/telemetry/send-data.js +4 -1
  98. package/packages/dd-trace/src/tracer.js +0 -16
  99. package/scripts/check-proposal-labels.js +71 -0
  100. package/packages/dd-trace/src/log.js +0 -143
  101. /package/packages/dd-trace/src/{appsec → plugins/util}/ip_blocklist.js +0 -0
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
2
 
3
3
  const tracerVersion = require('../../../../package.json').version
4
- const containerId = require('../exporters/common/docker').id()
5
4
  const os = require('os')
6
5
  const dependencies = require('./dependencies')
7
6
  const { sendData } = require('./send-data')
@@ -76,9 +75,31 @@ function createAppObject () {
76
75
  }
77
76
 
78
77
  function createHostObject () {
78
+ const osName = os.type()
79
+
80
+ if (osName === 'Linux' || osName === 'Darwin') {
81
+ return {
82
+ hostname: os.hostname(),
83
+ os: osName,
84
+ architecture: os.arch(),
85
+ kernel_version: os.version(),
86
+ kernel_release: os.release(),
87
+ kernel_name: osName
88
+ }
89
+ }
90
+
91
+ if (osName === 'Windows_NT') {
92
+ return {
93
+ hostname: os.hostname(),
94
+ os: osName,
95
+ architecture: os.arch(),
96
+ os_version: os.version()
97
+ }
98
+ }
99
+
79
100
  return {
80
101
  hostname: os.hostname(), // TODO is this enough?
81
- container_id: containerId
102
+ os: osName
82
103
  }
83
104
  }
84
105
 
@@ -6,6 +6,9 @@ function sendData (config, application, host, reqType, payload = {}) {
6
6
  port,
7
7
  url
8
8
  } = config
9
+
10
+ const { logger, tags, serviceMapping, ...trimmedPayload } = payload
11
+
9
12
  const options = {
10
13
  url,
11
14
  hostname,
@@ -24,7 +27,7 @@ function sendData (config, application, host, reqType, payload = {}) {
24
27
  tracer_time: Math.floor(Date.now() / 1000),
25
28
  runtime_id: config.tags['runtime-id'],
26
29
  seq_id: ++seqId,
27
- payload,
30
+ payload: trimmedPayload,
28
31
  application,
29
32
  host
30
33
  })
@@ -123,22 +123,6 @@ class DatadogTracer extends Tracer {
123
123
  <meta name="dd-trace-id" content="${traceId}" />\
124
124
  <meta name="dd-trace-time" content="${traceTime}" />`
125
125
  }
126
-
127
- setUser (user) {
128
- if (!user || !user.id) return this
129
-
130
- const span = this.scope().active()
131
- if (!span) return this
132
-
133
- const rootSpan = span._spanContext._trace.started[0]
134
- if (!rootSpan) return this
135
-
136
- for (const k of Object.keys(user)) {
137
- rootSpan.setTag(`usr.${k}`, '' + user[k])
138
- }
139
-
140
- return this
141
- }
142
126
  }
143
127
 
144
128
  function addError (span, error) {
@@ -0,0 +1,71 @@
1
+ /* eslint-disable no-console */
2
+
3
+ const childProcess = require('child_process')
4
+ const ORIGIN = 'origin/'
5
+
6
+ let releaseBranch = process.env['GITHUB_BASE_REF'] // 'origin/v3.x'
7
+ let releaseVersion = releaseBranch
8
+ if (releaseBranch.startsWith(ORIGIN)) {
9
+ releaseVersion = releaseBranch.substring(ORIGIN.length)
10
+ } else {
11
+ releaseBranch = ORIGIN + releaseBranch
12
+ }
13
+ let currentBranch = process.env['GITHUB_HEAD_REF'] // 'ugaitz/workflow-to-verify-dont-land-on-v3.x'
14
+ if (!currentBranch.startsWith(ORIGIN)) {
15
+ currentBranch = ORIGIN + currentBranch
16
+ }
17
+
18
+ const getHashesCommandWithExclusions = 'branch-diff --user DataDog --repo dd-trace-js --exclude-label=semver-major' +
19
+ ` --exclude-label=dont-land-on-${releaseVersion} ${releaseBranch} ${currentBranch}`
20
+ const getHashesCommandWithoutExclusions =
21
+ `branch-diff --user DataDog --repo dd-trace-js ${releaseBranch} ${currentBranch}`
22
+
23
+ childProcess.exec(getHashesCommandWithExclusions, { timeout: 30000 },
24
+ (withExclusionError, withExclusionStdout, withExclusionStderr) => {
25
+ if (withExclusionError) {
26
+ console.error(`stdout:
27
+ ${withExclusionStdout}
28
+ stderr:
29
+ ${withExclusionStderr}
30
+ `, withExclusionError)
31
+ process.exit(1)
32
+ return
33
+ }
34
+ if (withExclusionStderr) {
35
+ console.error(withExclusionStderr)
36
+ process.exit(1)
37
+ return
38
+ }
39
+ const commitsHashesWithExclusions = withExclusionStdout.split('\n')
40
+
41
+ childProcess.exec(getHashesCommandWithoutExclusions,
42
+ (withoutExclusionError, withoutExclusionStdout, withoutExclusionStderr) => {
43
+ if (withoutExclusionError) {
44
+ console.error(`stdout:
45
+ ${withoutExclusionStdout}
46
+ stderr:
47
+ ${withoutExclusionStderr}
48
+ `, withoutExclusionError)
49
+ process.exit(1)
50
+ return
51
+ }
52
+ if (withoutExclusionStderr) {
53
+ console.error(withoutExclusionStderr)
54
+ process.exit(1)
55
+ return
56
+ }
57
+ const commitsHashesWithoutExclusions = withoutExclusionStdout.split('\n')
58
+ if (commitsHashesWithExclusions.length !== commitsHashesWithoutExclusions.length) {
59
+ const commitsWithInvalidLabels = []
60
+ commitsHashesWithoutExclusions.filter(c1 => {
61
+ if (!commitsHashesWithExclusions.some(c2 => c2 === c1)) {
62
+ commitsWithInvalidLabels.push(c1)
63
+ }
64
+ })
65
+ console.error('Some excluded label added in the release proposal', commitsWithInvalidLabels)
66
+ process.exit(1)
67
+ } else {
68
+ console.log('Commit PRs label looks OK')
69
+ }
70
+ })
71
+ })
@@ -1,143 +0,0 @@
1
- 'use strict'
2
-
3
- const { storage } = require('../../datadog-core')
4
-
5
- const _default = {
6
- debug: msg => console.debug(msg), /* eslint-disable-line no-console */
7
- info: msg => console.info(msg), /* eslint-disable-line no-console */
8
- warn: msg => console.warn(msg), /* eslint-disable-line no-console */
9
- error: msg => console.error(msg) /* eslint-disable-line no-console */
10
- }
11
-
12
- // based on: https://github.com/trentm/node-bunyan#levels
13
- const _logLevels = {
14
- 'debug': 20,
15
- 'info': 30,
16
- 'warn': 40,
17
- 'error': 50
18
- }
19
-
20
- const _defaultLogLevel = 'debug'
21
-
22
- const _checkLogLevel = (logLevel) => {
23
- if (logLevel && typeof logLevel === 'string') {
24
- return _logLevels[logLevel.toLowerCase().trim()] || _logLevels[_defaultLogLevel]
25
- }
26
-
27
- return _logLevels[_defaultLogLevel]
28
- }
29
-
30
- const memoize = func => {
31
- const cache = {}
32
- const memoized = function (key) {
33
- if (!cache[key]) {
34
- cache[key] = func.apply(this, arguments)
35
- }
36
-
37
- return cache[key]
38
- }
39
-
40
- return memoized
41
- }
42
-
43
- function processMsg (msg) {
44
- return typeof msg === 'function' ? msg() : msg
45
- }
46
-
47
- function withNoop (fn) {
48
- const store = storage.getStore()
49
-
50
- storage.enterWith({ noop: true })
51
- fn()
52
- storage.enterWith(store)
53
- }
54
-
55
- const log = {
56
- _isLogLevelEnabled (level) {
57
- return _logLevels[level] >= this._logLevel
58
- },
59
-
60
- use (logger) {
61
- if (logger && logger.debug instanceof Function && logger.error instanceof Function) {
62
- this._logger = logger
63
- }
64
-
65
- return this
66
- },
67
-
68
- toggle (enabled, logLevel, tracer) {
69
- this._enabled = enabled
70
- this._logLevel = _checkLogLevel(logLevel)
71
- this._tracer = tracer
72
-
73
- return this
74
- },
75
-
76
- reset () {
77
- this._logger = _default
78
- this._enabled = false
79
- this._deprecate = memoize((code, message) => {
80
- withNoop(() => this._logger.error(message))
81
- return this
82
- })
83
- this._logLevel = _checkLogLevel()
84
-
85
- return this
86
- },
87
-
88
- debug (message) {
89
- if (this._enabled && this._isLogLevelEnabled('debug')) {
90
- withNoop(() => this._logger.debug(processMsg(message)))
91
- }
92
-
93
- return this
94
- },
95
-
96
- info (message) {
97
- if (!this._logger.info) return this.debug(message)
98
- if (this._enabled && this._isLogLevelEnabled('info')) {
99
- withNoop(() => this._logger.info(processMsg(message)))
100
- }
101
-
102
- return this
103
- },
104
-
105
- warn (message) {
106
- if (!this._logger.warn) return this.debug(message)
107
- if (this._enabled && this._isLogLevelEnabled('warn')) {
108
- withNoop(() => this._logger.warn(processMsg(message)))
109
- }
110
-
111
- return this
112
- },
113
-
114
- error (err) {
115
- if (this._enabled && this._isLogLevelEnabled('error')) {
116
- if (err instanceof Function) {
117
- err = err()
118
- }
119
-
120
- if (typeof err !== 'object' || !err) {
121
- err = String(err)
122
- } else if (!err.stack) {
123
- err = String(err.message || err)
124
- }
125
-
126
- if (typeof err === 'string') {
127
- err = new Error(err)
128
- }
129
-
130
- withNoop(() => this._logger.error(err))
131
- }
132
-
133
- return this
134
- },
135
-
136
- deprecate (code, message) {
137
- return this._deprecate(code, message)
138
- }
139
- }
140
-
141
- log.reset()
142
-
143
- module.exports = log