dd-trace 5.17.0 → 5.18.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 (63) hide show
  1. package/LICENSE-3rdparty.csv +1 -0
  2. package/ext/exporters.d.ts +1 -1
  3. package/index.d.ts +47 -1
  4. package/init.js +40 -1
  5. package/initialize.mjs +8 -5
  6. package/package.json +24 -20
  7. package/packages/datadog-core/src/storage/index.js +1 -10
  8. package/packages/datadog-esbuild/index.js +5 -1
  9. package/packages/datadog-instrumentations/src/aws-sdk.js +2 -1
  10. package/packages/datadog-instrumentations/src/cucumber.js +76 -34
  11. package/packages/datadog-instrumentations/src/helpers/hook.js +8 -3
  12. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  13. package/packages/datadog-instrumentations/src/helpers/instrument.js +4 -3
  14. package/packages/datadog-instrumentations/src/helpers/register.js +56 -5
  15. package/packages/datadog-instrumentations/src/mocha/main.js +12 -1
  16. package/packages/datadog-instrumentations/src/mocha/utils.js +58 -14
  17. package/packages/datadog-instrumentations/src/mocha/worker.js +1 -0
  18. package/packages/datadog-instrumentations/src/playwright.js +1 -1
  19. package/packages/datadog-instrumentations/src/vitest.js +303 -0
  20. package/packages/datadog-plugin-aws-sdk/src/base.js +8 -1
  21. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +9 -3
  22. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +6 -1
  23. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +23 -5
  24. package/packages/datadog-plugin-child_process/src/index.js +1 -1
  25. package/packages/datadog-plugin-cucumber/src/index.js +24 -1
  26. package/packages/datadog-plugin-mocha/src/index.js +25 -4
  27. package/packages/datadog-plugin-openai/src/index.js +52 -30
  28. package/packages/datadog-plugin-openai/src/token-estimator.js +20 -0
  29. package/packages/datadog-plugin-vitest/src/index.js +156 -0
  30. package/packages/dd-trace/src/appsec/iast/path-line.js +2 -19
  31. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +4 -0
  32. package/packages/dd-trace/src/appsec/index.js +1 -1
  33. package/packages/dd-trace/src/appsec/rasp.js +32 -5
  34. package/packages/dd-trace/src/appsec/recommended.json +208 -3
  35. package/packages/dd-trace/src/appsec/reporter.js +64 -20
  36. package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -0
  37. package/packages/dd-trace/src/appsec/stack_trace.js +90 -0
  38. package/packages/dd-trace/src/appsec/standalone.js +130 -0
  39. package/packages/dd-trace/src/appsec/telemetry.js +33 -1
  40. package/packages/dd-trace/src/appsec/waf/index.js +2 -2
  41. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
  42. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
  43. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -2
  44. package/packages/dd-trace/src/config.js +110 -40
  45. package/packages/dd-trace/src/constants.js +3 -1
  46. package/packages/dd-trace/src/datastreams/processor.js +2 -1
  47. package/packages/dd-trace/src/exporters/agent/index.js +2 -2
  48. package/packages/dd-trace/src/format.js +1 -0
  49. package/packages/dd-trace/src/opentracing/propagation/text_map.js +12 -0
  50. package/packages/dd-trace/src/opentracing/span.js +4 -1
  51. package/packages/dd-trace/src/opentracing/tracer.js +2 -2
  52. package/packages/dd-trace/src/plugins/ci_plugin.js +7 -0
  53. package/packages/dd-trace/src/plugins/index.js +2 -0
  54. package/packages/dd-trace/src/plugins/util/test.js +5 -1
  55. package/packages/dd-trace/src/priority_sampler.js +2 -5
  56. package/packages/dd-trace/src/profiling/profiler.js +1 -1
  57. package/packages/dd-trace/src/proxy.js +3 -1
  58. package/packages/dd-trace/src/rate_limiter.js +2 -2
  59. package/packages/dd-trace/src/span_stats.js +4 -3
  60. package/packages/dd-trace/src/telemetry/init-telemetry.js +75 -0
  61. package/packages/dd-trace/src/tracer.js +2 -2
  62. package/packages/dd-trace/src/util.js +6 -1
  63. package/packages/datadog-core/src/storage/async_hooks.js +0 -49
@@ -0,0 +1,75 @@
1
+ 'use strict'
2
+
3
+ const fs = require('fs')
4
+ const { spawn } = require('child_process')
5
+ const tracerVersion = require('../../../../package.json').version
6
+ const log = require('../log')
7
+
8
+ module.exports = sendTelemetry
9
+
10
+ if (!process.env.DD_INJECTION_ENABLED) {
11
+ module.exports = () => {}
12
+ }
13
+
14
+ if (!process.env.DD_TELEMETRY_FORWARDER_PATH) {
15
+ module.exports = () => {}
16
+ }
17
+
18
+ if (!fs.existsSync(process.env.DD_TELEMETRY_FORWARDER_PATH)) {
19
+ module.exports = () => {}
20
+ }
21
+
22
+ const metadata = {
23
+ language_name: 'nodejs',
24
+ language_version: process.versions.node,
25
+ runtime_name: 'nodejs',
26
+ runtime_version: process.versions.node,
27
+ tracer_version: tracerVersion,
28
+ pid: process.pid
29
+ }
30
+
31
+ const seen = []
32
+ function hasSeen (point) {
33
+ if (point.name === 'abort') {
34
+ // This one can only be sent once, regardless of tags
35
+ return seen.includes('abort')
36
+ }
37
+ if (point.name === 'abort.integration') {
38
+ // For now, this is the only other one we want to dedupe
39
+ const compiledPoint = point.name + point.tags.join('')
40
+ return seen.includes(compiledPoint)
41
+ }
42
+ return false
43
+ }
44
+
45
+ function sendTelemetry (name, tags = []) {
46
+ let points = name
47
+ if (typeof name === 'string') {
48
+ points = [{ name, tags }]
49
+ }
50
+ if (['1', 'true', 'True'].includes(process.env.DD_INJECT_FORCE)) {
51
+ points = points.filter(p => ['error', 'complete'].includes(p.name))
52
+ }
53
+ points = points.filter(p => !hasSeen(p))
54
+ points.forEach(p => {
55
+ p.name = `library_entrypoint.${p.name}`
56
+ })
57
+ if (points.length === 0) {
58
+ return
59
+ }
60
+ const proc = spawn(process.env.DD_TELEMETRY_FORWARDER_PATH, ['library_entrypoint'], {
61
+ stdio: 'pipe'
62
+ })
63
+ proc.on('error', () => {
64
+ log.error('Failed to spawn telemetry forwarder')
65
+ })
66
+ proc.on('exit', (code) => {
67
+ if (code !== 0) {
68
+ log.error(`Telemetry forwarder exited with code ${code}`)
69
+ }
70
+ })
71
+ proc.stdin.on('error', () => {
72
+ log.error('Failed to write telemetry data to telemetry forwarder')
73
+ })
74
+ proc.stdin.end(JSON.stringify({ metadata, points }))
75
+ }
@@ -20,8 +20,8 @@ const SERVICE_NAME = tags.SERVICE_NAME
20
20
  const MEASURED = tags.MEASURED
21
21
 
22
22
  class DatadogTracer extends Tracer {
23
- constructor (config) {
24
- super(config)
23
+ constructor (config, prioritySampler) {
24
+ super(config, prioritySampler)
25
25
  this._dataStreamsProcessor = new DataStreamsProcessor(config)
26
26
  this._scope = new Scope()
27
27
  setStartupLogConfig(config)
@@ -69,10 +69,15 @@ function calculateDDBasePath (dirname) {
69
69
  return dirSteps.slice(0, packagesIndex + 1).join(path.sep) + path.sep
70
70
  }
71
71
 
72
+ function hasOwn (object, prop) {
73
+ return Object.prototype.hasOwnProperty.call(object, prop)
74
+ }
75
+
72
76
  module.exports = {
73
77
  isTrue,
74
78
  isFalse,
75
79
  isError,
76
80
  globMatch,
77
- calculateDDBasePath
81
+ calculateDDBasePath,
82
+ hasOwn
78
83
  }
@@ -1,49 +0,0 @@
1
- 'use strict'
2
-
3
- const { executionAsyncId } = require('async_hooks')
4
- const AsyncResourceStorage = require('./async_resource')
5
-
6
- class AsyncHooksStorage extends AsyncResourceStorage {
7
- constructor () {
8
- super()
9
-
10
- this._resources = new Map()
11
- }
12
-
13
- disable () {
14
- super.disable()
15
-
16
- this._resources.clear()
17
- }
18
-
19
- _createHook () {
20
- return {
21
- ...super._createHook(),
22
- destroy: this._destroy.bind(this)
23
- }
24
- }
25
-
26
- _init (asyncId, type, triggerAsyncId, resource) {
27
- super._init.apply(this, arguments)
28
-
29
- this._resources.set(asyncId, resource)
30
- }
31
-
32
- _destroy (asyncId) {
33
- this._resources.delete(asyncId)
34
- }
35
-
36
- _executionAsyncResource () {
37
- const asyncId = executionAsyncId()
38
-
39
- let resource = this._resources.get(asyncId)
40
-
41
- if (!resource) {
42
- this._resources.set(asyncId, resource = {})
43
- }
44
-
45
- return resource
46
- }
47
- }
48
-
49
- module.exports = AsyncHooksStorage