dd-trace 5.110.0 → 5.111.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 (115) hide show
  1. package/README.md +13 -8
  2. package/ci/init.js +21 -2
  3. package/ci/vitest-no-worker-init-setup.mjs +430 -0
  4. package/ext/tags.js +2 -0
  5. package/index.d.ts +13 -0
  6. package/initialize.mjs +5 -6
  7. package/loader-hook.mjs +76 -55
  8. package/package.json +9 -9
  9. package/packages/datadog-instrumentations/src/fs.js +8 -6
  10. package/packages/datadog-instrumentations/src/graphql.js +26 -495
  11. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql.js +201 -0
  12. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  13. package/packages/datadog-instrumentations/src/mongoose.js +14 -2
  14. package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +1293 -0
  15. package/packages/datadog-instrumentations/src/vitest-main.js +1567 -0
  16. package/packages/datadog-instrumentations/src/vitest-util.js +249 -0
  17. package/packages/datadog-instrumentations/src/vitest-worker.js +753 -0
  18. package/packages/datadog-instrumentations/src/vitest.js +11 -1855
  19. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/client.js +2 -2
  20. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/context.js +18 -10
  21. package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/util.js +47 -11
  22. package/packages/datadog-plugin-cucumber/src/index.js +1 -1
  23. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +10 -4
  24. package/packages/datadog-plugin-cypress/src/support.js +45 -1
  25. package/packages/datadog-plugin-express/src/code_origin.js +1 -1
  26. package/packages/datadog-plugin-fastify/src/code_origin.js +1 -1
  27. package/packages/datadog-plugin-graphql/src/execute.js +627 -11
  28. package/packages/datadog-plugin-graphql/src/index.js +20 -8
  29. package/packages/datadog-plugin-graphql/src/parse.js +24 -4
  30. package/packages/datadog-plugin-graphql/src/validate.js +16 -5
  31. package/packages/datadog-plugin-http/src/index.js +6 -8
  32. package/packages/datadog-plugin-jest/src/index.js +1 -1
  33. package/packages/datadog-plugin-mocha/src/index.js +1 -1
  34. package/packages/datadog-plugin-openai/src/services.js +2 -2
  35. package/packages/datadog-plugin-playwright/src/index.js +1 -1
  36. package/packages/datadog-plugin-vitest/src/index.js +69 -63
  37. package/packages/datadog-shimmer/src/shimmer.js +37 -16
  38. package/packages/dd-trace/src/aiguard/sdk.js +2 -2
  39. package/packages/dd-trace/src/appsec/api_security/sampler.js +3 -3
  40. package/packages/dd-trace/src/appsec/channels.js +3 -1
  41. package/packages/dd-trace/src/appsec/downstream_requests.js +4 -4
  42. package/packages/dd-trace/src/appsec/graphql.js +5 -5
  43. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +26 -19
  44. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +2 -2
  45. package/packages/dd-trace/src/appsec/iast/telemetry/index.js +2 -1
  46. package/packages/dd-trace/src/appsec/index.js +10 -1
  47. package/packages/dd-trace/src/appsec/lambda.js +135 -0
  48. package/packages/dd-trace/src/appsec/reporter.js +49 -10
  49. package/packages/dd-trace/src/appsec/telemetry/index.js +1 -1
  50. package/packages/dd-trace/src/appsec/waf/index.js +16 -4
  51. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +4 -4
  52. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +21 -6
  53. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +2 -2
  54. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  55. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  56. package/packages/dd-trace/src/ci-visibility/exporters/agentless/index.js +3 -2
  57. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  58. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +55 -13
  59. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  60. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +17 -0
  61. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +47 -26
  62. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +2 -2
  63. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +64 -53
  64. package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +3 -3
  65. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +23 -5
  66. package/packages/dd-trace/src/ci-visibility/test-optimization-http-cache-schema.js +128 -0
  67. package/packages/dd-trace/src/ci-visibility/test-optimization-http-cache.js +287 -0
  68. package/packages/dd-trace/src/config/defaults.js +3 -2
  69. package/packages/dd-trace/src/config/generated-config-types.d.ts +61 -57
  70. package/packages/dd-trace/src/config/helper.js +1 -0
  71. package/packages/dd-trace/src/config/index.js +35 -22
  72. package/packages/dd-trace/src/config/major-overrides.js +4 -2
  73. package/packages/dd-trace/src/config/remote_config.js +1 -1
  74. package/packages/dd-trace/src/config/supported-configurations.json +90 -56
  75. package/packages/dd-trace/src/constants.js +7 -0
  76. package/packages/dd-trace/src/datastreams/processor.js +11 -3
  77. package/packages/dd-trace/src/exporters/agent/index.js +1 -1
  78. package/packages/dd-trace/src/exporters/agentless/writer.js +4 -4
  79. package/packages/dd-trace/src/llmobs/index.js +1 -1
  80. package/packages/dd-trace/src/llmobs/plugins/base.js +4 -4
  81. package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -1
  82. package/packages/dd-trace/src/llmobs/sdk.js +3 -3
  83. package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
  84. package/packages/dd-trace/src/llmobs/tagger.js +3 -3
  85. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  86. package/packages/dd-trace/src/opentelemetry/metrics/index.js +54 -5
  87. package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_exporter.js +40 -0
  88. package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_transformer.js +169 -0
  89. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +38 -39
  90. package/packages/dd-trace/src/opentelemetry/trace/index.js +4 -0
  91. package/packages/dd-trace/src/opentelemetry/tracer_provider.js +1 -1
  92. package/packages/dd-trace/src/opentracing/tracer.js +6 -1
  93. package/packages/dd-trace/src/plugin_manager.js +7 -7
  94. package/packages/dd-trace/src/plugins/ci_plugin.js +12 -3
  95. package/packages/dd-trace/src/plugins/util/llm.js +6 -1
  96. package/packages/dd-trace/src/plugins/util/test.js +11 -9
  97. package/packages/dd-trace/src/profiling/exporter_cli.js +2 -2
  98. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +3 -3
  99. package/packages/dd-trace/src/profiling/profilers/wall.js +1 -1
  100. package/packages/dd-trace/src/proxy.js +8 -8
  101. package/packages/dd-trace/src/span_processor.js +5 -6
  102. package/packages/dd-trace/src/span_stats.js +96 -78
  103. package/packages/dd-trace/src/startup-log.js +2 -1
  104. package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
  105. package/packages/dd-trace/src/telemetry/endpoints.js +6 -4
  106. package/packages/dd-trace/src/telemetry/index.js +2 -2
  107. package/packages/dd-trace/src/telemetry/logs/index.js +1 -1
  108. package/packages/dd-trace/src/telemetry/send-data.js +8 -8
  109. package/packages/dd-trace/src/telemetry/session-propagation.js +1 -1
  110. package/packages/dd-trace/src/telemetry/telemetry.js +9 -9
  111. package/vendor/dist/@datadog/sketches-js/index.js +1 -1
  112. package/vendor/dist/protobufjs/index.js +1 -1
  113. package/vendor/dist/protobufjs/minimal/index.js +1 -1
  114. package/vendor/dist/shell-quote/index.js +1 -1
  115. package/packages/datadog-plugin-graphql/src/resolve.js +0 -170
@@ -0,0 +1,201 @@
1
+ 'use strict'
2
+
3
+ module.exports = [
4
+ {
5
+ module: {
6
+ name: 'graphql',
7
+ versionRange: '>=0.10',
8
+ filePath: 'execution/execute.js',
9
+ },
10
+ functionQuery: {
11
+ functionName: 'execute',
12
+ kind: 'Sync',
13
+ },
14
+ channelName: 'apm:graphql:execute',
15
+ },
16
+ {
17
+ module: {
18
+ name: 'graphql',
19
+ versionRange: '>=0.10',
20
+ filePath: 'execution/execute.mjs',
21
+ },
22
+ functionQuery: {
23
+ functionName: 'execute',
24
+ kind: 'Sync',
25
+ },
26
+ channelName: 'apm:graphql:execute',
27
+ },
28
+ {
29
+ module: {
30
+ name: 'graphql',
31
+ versionRange: '>=0.10',
32
+ filePath: 'language/parser.js',
33
+ },
34
+ functionQuery: {
35
+ functionName: 'parse',
36
+ kind: 'Sync',
37
+ },
38
+ channelName: 'apm:graphql:parser',
39
+ },
40
+ {
41
+ module: {
42
+ name: 'graphql',
43
+ versionRange: '>=0.10',
44
+ filePath: 'language/parser.mjs',
45
+ },
46
+ functionQuery: {
47
+ functionName: 'parse',
48
+ kind: 'Sync',
49
+ },
50
+ channelName: 'apm:graphql:parser',
51
+ },
52
+ {
53
+ module: {
54
+ name: 'graphql',
55
+ versionRange: '>=0.10',
56
+ filePath: 'validation/validate.js',
57
+ },
58
+ functionQuery: {
59
+ functionName: 'validate',
60
+ kind: 'Sync',
61
+ },
62
+ channelName: 'apm:graphql:validate',
63
+ },
64
+ {
65
+ module: {
66
+ name: 'graphql',
67
+ versionRange: '>=0.10',
68
+ filePath: 'validation/validate.mjs',
69
+ },
70
+ functionQuery: {
71
+ functionName: 'validate',
72
+ kind: 'Sync',
73
+ },
74
+ channelName: 'apm:graphql:validate',
75
+ },
76
+ // executeField / resolveField intentionally NOT instrumented here. Resolve spans
77
+ // are produced by wrapping user resolvers + the default field resolver at execute
78
+ // time (see packages/datadog-plugin-graphql/src/execute.js). That gives a zero-cost
79
+ // fast path when no subscribers are active, which per-field orchestrion hooks
80
+ // cannot offer (the publish is baked into graphql's compiled code).
81
+ {
82
+ module: {
83
+ name: '@graphql-tools/executor',
84
+ versionRange: '>=0.0.14',
85
+ filePath: 'cjs/execution/execute.js',
86
+ },
87
+ functionQuery: {
88
+ functionName: 'execute',
89
+ kind: 'Sync',
90
+ },
91
+ channelName: 'apm:graphql:execute',
92
+ },
93
+ {
94
+ module: {
95
+ name: '@graphql-tools/executor',
96
+ versionRange: '>=0.0.14',
97
+ filePath: 'esm/execution/execute.js',
98
+ },
99
+ functionQuery: {
100
+ functionName: 'execute',
101
+ kind: 'Sync',
102
+ },
103
+ channelName: 'apm:graphql:execute',
104
+ },
105
+ {
106
+ module: {
107
+ name: '@graphql-tools/executor',
108
+ versionRange: '>=0.0.14',
109
+ filePath: 'cjs/execution/normalizedExecutor.js',
110
+ },
111
+ functionQuery: {
112
+ functionName: 'normalizedExecutor',
113
+ kind: 'Sync',
114
+ },
115
+ channelName: 'apm:graphql:execute',
116
+ },
117
+ {
118
+ module: {
119
+ name: '@graphql-tools/executor',
120
+ versionRange: '>=0.0.14',
121
+ filePath: 'esm/execution/normalizedExecutor.js',
122
+ },
123
+ functionQuery: {
124
+ functionName: 'normalizedExecutor',
125
+ kind: 'Sync',
126
+ },
127
+ channelName: 'apm:graphql:execute',
128
+ },
129
+ {
130
+ module: {
131
+ name: 'graphql',
132
+ versionRange: '>=0.10',
133
+ filePath: 'language/printer.js',
134
+ },
135
+ functionQuery: {
136
+ functionName: '__module_export__',
137
+ kind: 'Sync',
138
+ },
139
+ channelName: 'dd:graphql:printer:load',
140
+ },
141
+ {
142
+ module: {
143
+ name: 'graphql',
144
+ versionRange: '>=0.10',
145
+ filePath: 'language/printer.mjs',
146
+ },
147
+ functionQuery: {
148
+ functionName: '__module_export__',
149
+ kind: 'Sync',
150
+ },
151
+ channelName: 'dd:graphql:printer:load',
152
+ },
153
+ {
154
+ module: {
155
+ name: 'graphql',
156
+ versionRange: '>=0.10',
157
+ filePath: 'language/visitor.js',
158
+ },
159
+ functionQuery: {
160
+ functionName: '__module_export__',
161
+ kind: 'Sync',
162
+ },
163
+ channelName: 'dd:graphql:visitor:load',
164
+ },
165
+ {
166
+ module: {
167
+ name: 'graphql',
168
+ versionRange: '>=0.10',
169
+ filePath: 'language/visitor.mjs',
170
+ },
171
+ functionQuery: {
172
+ functionName: '__module_export__',
173
+ kind: 'Sync',
174
+ },
175
+ channelName: 'dd:graphql:visitor:load',
176
+ },
177
+ {
178
+ module: {
179
+ name: 'graphql',
180
+ versionRange: '>=0.10',
181
+ filePath: 'utilities/index.js',
182
+ },
183
+ functionQuery: {
184
+ functionName: '__module_export__',
185
+ kind: 'Sync',
186
+ },
187
+ channelName: 'dd:graphql:utilities:load',
188
+ },
189
+ {
190
+ module: {
191
+ name: 'graphql',
192
+ versionRange: '>=0.10',
193
+ filePath: 'utilities/index.mjs',
194
+ },
195
+ functionQuery: {
196
+ functionName: '__module_export__',
197
+ kind: 'Sync',
198
+ },
199
+ channelName: 'dd:graphql:utilities:load',
200
+ },
201
+ ]
@@ -4,6 +4,7 @@ module.exports = [
4
4
  ...require('./ai'),
5
5
  ...require('./azure-cosmos'),
6
6
  ...require('./bullmq'),
7
+ ...require('./graphql'),
7
8
  ...require('./langchain'),
8
9
  ...require('./langgraph'),
9
10
  ...require('./modelcontextprotocol-sdk'),
@@ -6,6 +6,12 @@ const { wrapThen } = require('./helpers/promise')
6
6
 
7
7
  const startCh = channel('datadog:mongoose:model:filter:start')
8
8
  const finishCh = channel('datadog:mongoose:model:filter:finish')
9
+ // Bound around the deferred query execution. A subscriber returns the store that
10
+ // stays active for the whole async scope that reaches the mongodb driver, so the
11
+ // nested driver query can see the parent's analysis marker without it leaking
12
+ // past the query. `runStores` enters the store only for that scope and restores
13
+ // the parent on its own.
14
+ const execCh = channel('datadog:mongoose:model:filter:exec')
9
15
  // this channel is for wrapping the callback of exec methods and handling store context
10
16
  const execStartCh = channel('apm:mongoose:exec:start')
11
17
  const execFinishCh = channel('apm:mongoose:exec:finish')
@@ -103,7 +109,13 @@ addHook({
103
109
  return startCh.runStores(ctx, () => {
104
110
  wrapCallbackIfExist(args, ctx)
105
111
 
106
- const res = method.apply(this, args)
112
+ // A callback query executes synchronously inside `method.apply`, so the
113
+ // exec scope (and the deferred driver call it spawns) must be entered
114
+ // here. A promise query defers execution to a later `exec`/`then`, which
115
+ // is bound separately below.
116
+ const res = callbackWrapped
117
+ ? execCh.runStores(ctx, () => method.apply(this, args))
118
+ : method.apply(this, args)
107
119
 
108
120
  // if it is not callback, wrap exec method and its then
109
121
  if (!callbackWrapped) {
@@ -113,7 +125,7 @@ addHook({
113
125
  wrapCallbackIfExist(args, ctx)
114
126
  }
115
127
 
116
- const execResult = originalExec.apply(this, args)
128
+ const execResult = execCh.runStores(ctx, () => originalExec.apply(this, args))
117
129
 
118
130
  if (callbackWrapped || typeof execResult?.then !== 'function') {
119
131
  return execResult