dd-trace 5.104.0 → 5.105.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 (151) hide show
  1. package/LICENSE-3rdparty.csv +90 -102
  2. package/index.d.ts +82 -3
  3. package/package.json +15 -15
  4. package/packages/datadog-core/src/storage.js +1 -1
  5. package/packages/datadog-instrumentations/src/aerospike.js +1 -1
  6. package/packages/datadog-instrumentations/src/ai.js +8 -7
  7. package/packages/datadog-instrumentations/src/aws-sdk.js +13 -0
  8. package/packages/datadog-instrumentations/src/azure-cosmos.js +7 -0
  9. package/packages/datadog-instrumentations/src/azure-functions.js +3 -0
  10. package/packages/datadog-instrumentations/src/cucumber.js +78 -5
  11. package/packages/datadog-instrumentations/src/dns.js +54 -18
  12. package/packages/datadog-instrumentations/src/fastify.js +142 -82
  13. package/packages/datadog-instrumentations/src/graphql.js +188 -62
  14. package/packages/datadog-instrumentations/src/helpers/ai-messages.js +322 -14
  15. package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -0
  16. package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -1
  17. package/packages/datadog-instrumentations/src/helpers/openai-ai-guard.js +269 -0
  18. package/packages/datadog-instrumentations/src/helpers/promise-instrumentor.js +42 -0
  19. package/packages/datadog-instrumentations/src/helpers/register.js +1 -1
  20. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -3
  21. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/azure-cosmos.js +50 -0
  22. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -0
  23. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langgraph.js +4 -2
  24. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +85 -0
  25. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +37 -236
  26. package/packages/datadog-instrumentations/src/hono.js +54 -3
  27. package/packages/datadog-instrumentations/src/http/server.js +9 -4
  28. package/packages/datadog-instrumentations/src/jest/coverage-backfill.js +163 -0
  29. package/packages/datadog-instrumentations/src/jest.js +360 -150
  30. package/packages/datadog-instrumentations/src/kafkajs.js +120 -16
  31. package/packages/datadog-instrumentations/src/mocha/main.js +128 -17
  32. package/packages/datadog-instrumentations/src/nats.js +182 -0
  33. package/packages/datadog-instrumentations/src/nyc.js +38 -1
  34. package/packages/datadog-instrumentations/src/openai.js +33 -18
  35. package/packages/datadog-instrumentations/src/oracledb.js +6 -1
  36. package/packages/datadog-instrumentations/src/pino.js +17 -5
  37. package/packages/datadog-instrumentations/src/playwright.js +515 -292
  38. package/packages/datadog-instrumentations/src/router.js +76 -32
  39. package/packages/datadog-instrumentations/src/stripe.js +1 -1
  40. package/packages/datadog-plugin-avsc/src/schema_iterator.js +1 -1
  41. package/packages/datadog-plugin-azure-cosmos/src/index.js +144 -0
  42. package/packages/datadog-plugin-azure-event-hubs/src/producer.js +1 -1
  43. package/packages/datadog-plugin-azure-functions/src/index.js +5 -2
  44. package/packages/datadog-plugin-azure-service-bus/src/producer.js +1 -1
  45. package/packages/datadog-plugin-bunyan/src/index.js +28 -0
  46. package/packages/datadog-plugin-cucumber/src/index.js +17 -3
  47. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +199 -28
  48. package/packages/datadog-plugin-cypress/src/support.js +69 -1
  49. package/packages/datadog-plugin-dns/src/lookup.js +8 -6
  50. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +1 -1
  51. package/packages/datadog-plugin-graphql/src/execute.js +2 -0
  52. package/packages/datadog-plugin-graphql/src/resolve.js +64 -67
  53. package/packages/datadog-plugin-http/src/server.js +40 -15
  54. package/packages/datadog-plugin-jest/src/index.js +11 -3
  55. package/packages/datadog-plugin-jest/src/util.js +15 -8
  56. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +1 -1
  57. package/packages/datadog-plugin-kafkajs/src/producer.js +3 -0
  58. package/packages/datadog-plugin-langgraph/src/stream.js +1 -1
  59. package/packages/datadog-plugin-mocha/src/index.js +19 -4
  60. package/packages/datadog-plugin-mongodb-core/src/index.js +281 -40
  61. package/packages/datadog-plugin-nats/src/consumer.js +43 -0
  62. package/packages/datadog-plugin-nats/src/index.js +20 -0
  63. package/packages/datadog-plugin-nats/src/producer.js +62 -0
  64. package/packages/datadog-plugin-nats/src/util.js +33 -0
  65. package/packages/datadog-plugin-next/src/index.js +5 -3
  66. package/packages/datadog-plugin-openai/src/tracing.js +15 -2
  67. package/packages/datadog-plugin-oracledb/src/index.js +13 -2
  68. package/packages/datadog-plugin-pino/src/index.js +42 -0
  69. package/packages/datadog-plugin-playwright/src/index.js +4 -4
  70. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
  71. package/packages/datadog-plugin-rhea/src/producer.js +1 -1
  72. package/packages/datadog-plugin-router/src/index.js +33 -44
  73. package/packages/datadog-plugin-selenium/src/index.js +1 -1
  74. package/packages/datadog-plugin-vitest/src/index.js +5 -13
  75. package/packages/datadog-plugin-winston/src/index.js +30 -0
  76. package/packages/datadog-shimmer/src/shimmer.js +33 -40
  77. package/packages/dd-trace/src/aiguard/index.js +1 -1
  78. package/packages/dd-trace/src/aiguard/sdk.js +1 -1
  79. package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
  80. package/packages/dd-trace/src/appsec/index.js +1 -1
  81. package/packages/dd-trace/src/appsec/reporter.js +5 -6
  82. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
  83. package/packages/dd-trace/src/appsec/sdk/utils.js +1 -1
  84. package/packages/dd-trace/src/appsec/user_tracking.js +5 -4
  85. package/packages/dd-trace/src/baggage.js +7 -1
  86. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +0 -1
  87. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +25 -13
  88. package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +70 -6
  89. package/packages/dd-trace/src/config/generated-config-types.d.ts +6 -2
  90. package/packages/dd-trace/src/config/supported-configurations.json +27 -8
  91. package/packages/dd-trace/src/datastreams/writer.js +2 -4
  92. package/packages/dd-trace/src/debugger/devtools_client/condition.js +5 -8
  93. package/packages/dd-trace/src/encode/0.4.js +124 -108
  94. package/packages/dd-trace/src/encode/0.5.js +114 -26
  95. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +31 -23
  96. package/packages/dd-trace/src/encode/agentless-json.js +4 -2
  97. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +32 -13
  98. package/packages/dd-trace/src/encode/span-stats.js +16 -16
  99. package/packages/dd-trace/src/encode/tags-processors.js +16 -0
  100. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -1
  101. package/packages/dd-trace/src/llmobs/plugins/genai/index.js +1 -1
  102. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +1 -1
  103. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +9 -7
  104. package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -1
  105. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +1 -1
  106. package/packages/dd-trace/src/llmobs/sdk.js +0 -16
  107. package/packages/dd-trace/src/llmobs/span_processor.js +3 -3
  108. package/packages/dd-trace/src/llmobs/tagger.js +9 -1
  109. package/packages/dd-trace/src/llmobs/telemetry.js +1 -1
  110. package/packages/dd-trace/src/llmobs/util.js +66 -3
  111. package/packages/dd-trace/src/log/index.js +1 -1
  112. package/packages/dd-trace/src/msgpack/chunk.js +394 -10
  113. package/packages/dd-trace/src/msgpack/index.js +96 -2
  114. package/packages/dd-trace/src/openfeature/encoding.js +70 -0
  115. package/packages/dd-trace/src/openfeature/flagging_provider.js +20 -0
  116. package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +143 -0
  117. package/packages/dd-trace/src/openfeature/span-enrichment.js +149 -0
  118. package/packages/dd-trace/src/opentelemetry/span-helpers.js +4 -3
  119. package/packages/dd-trace/src/opentelemetry/span.js +1 -1
  120. package/packages/dd-trace/src/opentracing/propagation/log.js +18 -7
  121. package/packages/dd-trace/src/opentracing/propagation/text_map.js +62 -67
  122. package/packages/dd-trace/src/opentracing/span.js +59 -19
  123. package/packages/dd-trace/src/opentracing/span_context.js +49 -0
  124. package/packages/dd-trace/src/plugins/ci_plugin.js +20 -20
  125. package/packages/dd-trace/src/plugins/database.js +7 -6
  126. package/packages/dd-trace/src/plugins/index.js +4 -0
  127. package/packages/dd-trace/src/plugins/log_injection.js +56 -0
  128. package/packages/dd-trace/src/plugins/log_plugin.js +3 -48
  129. package/packages/dd-trace/src/plugins/outbound.js +1 -1
  130. package/packages/dd-trace/src/plugins/plugin.js +15 -17
  131. package/packages/dd-trace/src/plugins/tracing.js +43 -5
  132. package/packages/dd-trace/src/plugins/util/test.js +236 -13
  133. package/packages/dd-trace/src/plugins/util/web.js +79 -65
  134. package/packages/dd-trace/src/priority_sampler.js +2 -2
  135. package/packages/dd-trace/src/profiling/profiler.js +2 -2
  136. package/packages/dd-trace/src/profiling/profilers/wall.js +10 -4
  137. package/packages/dd-trace/src/sampling_rule.js +7 -7
  138. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +10 -0
  139. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
  140. package/packages/dd-trace/src/service-naming/source-resolver.js +46 -0
  141. package/packages/dd-trace/src/span_format.js +190 -58
  142. package/packages/dd-trace/src/spanleak.js +1 -1
  143. package/packages/dd-trace/src/standalone/index.js +3 -3
  144. package/packages/dd-trace/src/tagger.js +0 -2
  145. package/vendor/dist/@apm-js-collab/code-transformer/index.js +70 -39
  146. package/vendor/dist/@datadog/sketches-js/LICENSE +10 -36
  147. package/vendor/dist/@datadog/sketches-js/index.js +1 -1
  148. package/vendor/dist/protobufjs/index.js +1 -1
  149. package/vendor/dist/protobufjs/minimal/index.js +1 -1
  150. package/packages/dd-trace/src/msgpack/encoder.js +0 -308
  151. package/packages/dd-trace/src/plugins/structured_log_plugin.js +0 -9
@@ -0,0 +1,163 @@
1
+ 'use strict'
2
+
3
+ const { readFileSync } = require('node:fs')
4
+ const path = require('node:path')
5
+
6
+ const COVERAGE_BACKFILL_CACHE_DIRECTORY = 'dd-trace-coverage-backfill'
7
+ const TRANSFORM_OPTIONS = {
8
+ instrument: true,
9
+ supportsDynamicImport: true,
10
+ supportsExportNamespaceFrom: true,
11
+ supportsStaticESM: true,
12
+ supportsTopLevelAwait: true,
13
+ }
14
+
15
+ function getCoverageBackfillFiles (skippableSuitesCoverage, rootDir, getTestSuitePath) {
16
+ const files = []
17
+ for (const filename of Object.keys(skippableSuitesCoverage || {})) {
18
+ const relativeFilename = path.isAbsolute(filename)
19
+ ? getTestSuitePath(filename, rootDir)
20
+ : filename
21
+ files.push(relativeFilename)
22
+ }
23
+ return files
24
+ }
25
+
26
+ // Use a separate Jest cache namespace for synthetic backfill transforms so they cannot reuse or overwrite normal
27
+ // Jest transform cache entries produced during the user's test run.
28
+ function getCoverageBackfillConfig (config) {
29
+ if (!config?.cacheDirectory) return config
30
+
31
+ return {
32
+ ...config,
33
+ cacheDirectory: path.join(config.cacheDirectory, COVERAGE_BACKFILL_CACHE_DIRECTORY),
34
+ }
35
+ }
36
+
37
+ function getCoverageBackfillDependencies (CoverageReporter, getCoverageBackfillRequire) {
38
+ const coverageWorkerRequire = getCoverageBackfillRequire(CoverageReporter)
39
+
40
+ return {
41
+ createFileCoverage: coverageWorkerRequire('istanbul-lib-coverage').createFileCoverage,
42
+ createScriptTransformer: coverageWorkerRequire('@jest/transform').createScriptTransformer,
43
+ readInitialCoverage: coverageWorkerRequire('istanbul-lib-instrument').readInitialCoverage,
44
+ }
45
+ }
46
+
47
+ // Some transformers expose Istanbul coverage as a literal that readInitialCoverage does not parse.
48
+ function extractCoverageDataObject (code) {
49
+ const marker = 'var coverageData = '
50
+ const start = code.indexOf(marker)
51
+ if (start === -1) return
52
+
53
+ let depth = 0
54
+ let quote
55
+ let escaped = false
56
+ let index = start + marker.length
57
+ for (; index < code.length; index++) {
58
+ const char = code[index]
59
+ if (quote) {
60
+ if (escaped) {
61
+ escaped = false
62
+ } else if (char === '\\') {
63
+ escaped = true
64
+ } else if (char === quote) {
65
+ quote = undefined
66
+ }
67
+ continue
68
+ }
69
+ if (char === '"' || char === "'" || char === '`') {
70
+ quote = char
71
+ } else if (char === '{') {
72
+ depth++
73
+ } else if (char === '}') {
74
+ depth--
75
+ if (depth === 0) {
76
+ index++
77
+ break
78
+ }
79
+ }
80
+ }
81
+ if (depth !== 0) return
82
+
83
+ try {
84
+ // eslint-disable-next-line no-new-func
85
+ return new Function(`return (${code.slice(start + marker.length, index)})`)()
86
+ } catch {
87
+ // Ignore transformer output that does not contain parseable Istanbul metadata.
88
+ }
89
+ }
90
+
91
+ // Read the Istanbul file metadata emitted by Jest's transformer.
92
+ function getCoverageDataFromCode (code, readInitialCoverage) {
93
+ return readInitialCoverage(code)?.coverageData || extractCoverageDataObject(code)
94
+ }
95
+
96
+ function transformFileWithTransformers (absoluteFile, sourceText, transformers, readInitialCoverage) {
97
+ return Promise.all(transformers.map(transformer => {
98
+ return transformer.transformSourceAsync(absoluteFile, sourceText, TRANSFORM_OPTIONS)
99
+ .then(({ code }) => getCoverageDataFromCode(code, readInitialCoverage))
100
+ .catch(() => {})
101
+ })).then(coverageDataByContext => coverageDataByContext.find(Boolean))
102
+ }
103
+
104
+ function getBackfillCoverageDataForFile (file, rootDir, transformers, coverageMap, readInitialCoverage) {
105
+ const absoluteFile = path.isAbsolute(file) ? file : path.join(rootDir, file)
106
+ if (coverageMap.data[absoluteFile]) return Promise.resolve()
107
+
108
+ let sourceText
109
+ try {
110
+ sourceText = readFileSync(absoluteFile, 'utf8')
111
+ } catch {
112
+ return Promise.resolve()
113
+ }
114
+
115
+ return transformFileWithTransformers(absoluteFile, sourceText, transformers, readInitialCoverage)
116
+ }
117
+
118
+ // Seed Jest's coverage map with files that did not run locally but are covered by backend meta.coverage.
119
+ function addCoverageBackfillUntestedFiles ({
120
+ coverageMap,
121
+ testContexts,
122
+ rootDir,
123
+ CoverageReporter,
124
+ coverageBackfillFiles,
125
+ getCoverageBackfillRequire,
126
+ }) {
127
+ if (!coverageBackfillFiles?.length || !coverageMap || !rootDir) return Promise.resolve()
128
+
129
+ let createFileCoverage, createScriptTransformer, readInitialCoverage
130
+ try {
131
+ ({
132
+ createFileCoverage,
133
+ createScriptTransformer,
134
+ readInitialCoverage,
135
+ } = getCoverageBackfillDependencies(CoverageReporter, getCoverageBackfillRequire))
136
+ } catch {
137
+ return Promise.resolve()
138
+ }
139
+
140
+ const contexts = [...(testContexts || [])]
141
+ return Promise.all(contexts.map(context => {
142
+ return createScriptTransformer(getCoverageBackfillConfig(context.config)).catch(() => {})
143
+ }))
144
+ .then(transformers => transformers.filter(Boolean))
145
+ .then(transformers => {
146
+ if (!transformers.length) return []
147
+ return Promise.all(coverageBackfillFiles.map(file => {
148
+ return getBackfillCoverageDataForFile(file, rootDir, transformers, coverageMap, readInitialCoverage)
149
+ }))
150
+ })
151
+ .then(coverageDataByFile => {
152
+ for (const coverageData of coverageDataByFile) {
153
+ if (coverageData && !coverageMap.data[coverageData.path]) {
154
+ coverageMap.addFileCoverage(createFileCoverage(coverageData))
155
+ }
156
+ }
157
+ })
158
+ }
159
+
160
+ module.exports = {
161
+ addCoverageBackfillUntestedFiles,
162
+ getCoverageBackfillFiles,
163
+ }