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.
- package/LICENSE-3rdparty.csv +90 -102
- package/index.d.ts +82 -3
- package/package.json +15 -15
- package/packages/datadog-core/src/storage.js +1 -1
- package/packages/datadog-instrumentations/src/aerospike.js +1 -1
- package/packages/datadog-instrumentations/src/ai.js +8 -7
- package/packages/datadog-instrumentations/src/aws-sdk.js +13 -0
- package/packages/datadog-instrumentations/src/azure-cosmos.js +7 -0
- package/packages/datadog-instrumentations/src/azure-functions.js +3 -0
- package/packages/datadog-instrumentations/src/cucumber.js +78 -5
- package/packages/datadog-instrumentations/src/dns.js +54 -18
- package/packages/datadog-instrumentations/src/fastify.js +142 -82
- package/packages/datadog-instrumentations/src/graphql.js +188 -62
- package/packages/datadog-instrumentations/src/helpers/ai-messages.js +322 -14
- package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -0
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/openai-ai-guard.js +269 -0
- package/packages/datadog-instrumentations/src/helpers/promise-instrumentor.js +42 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/azure-cosmos.js +50 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langgraph.js +4 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +85 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +37 -236
- package/packages/datadog-instrumentations/src/hono.js +54 -3
- package/packages/datadog-instrumentations/src/http/server.js +9 -4
- package/packages/datadog-instrumentations/src/jest/coverage-backfill.js +163 -0
- package/packages/datadog-instrumentations/src/jest.js +360 -150
- package/packages/datadog-instrumentations/src/kafkajs.js +120 -16
- package/packages/datadog-instrumentations/src/mocha/main.js +128 -17
- package/packages/datadog-instrumentations/src/nats.js +182 -0
- package/packages/datadog-instrumentations/src/nyc.js +38 -1
- package/packages/datadog-instrumentations/src/openai.js +33 -18
- package/packages/datadog-instrumentations/src/oracledb.js +6 -1
- package/packages/datadog-instrumentations/src/pino.js +17 -5
- package/packages/datadog-instrumentations/src/playwright.js +515 -292
- package/packages/datadog-instrumentations/src/router.js +76 -32
- package/packages/datadog-instrumentations/src/stripe.js +1 -1
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-azure-cosmos/src/index.js +144 -0
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +1 -1
- package/packages/datadog-plugin-azure-functions/src/index.js +5 -2
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +1 -1
- package/packages/datadog-plugin-bunyan/src/index.js +28 -0
- package/packages/datadog-plugin-cucumber/src/index.js +17 -3
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +199 -28
- package/packages/datadog-plugin-cypress/src/support.js +69 -1
- package/packages/datadog-plugin-dns/src/lookup.js +8 -6
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +1 -1
- package/packages/datadog-plugin-graphql/src/execute.js +2 -0
- package/packages/datadog-plugin-graphql/src/resolve.js +64 -67
- package/packages/datadog-plugin-http/src/server.js +40 -15
- package/packages/datadog-plugin-jest/src/index.js +11 -3
- package/packages/datadog-plugin-jest/src/util.js +15 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +3 -0
- package/packages/datadog-plugin-langgraph/src/stream.js +1 -1
- package/packages/datadog-plugin-mocha/src/index.js +19 -4
- package/packages/datadog-plugin-mongodb-core/src/index.js +281 -40
- package/packages/datadog-plugin-nats/src/consumer.js +43 -0
- package/packages/datadog-plugin-nats/src/index.js +20 -0
- package/packages/datadog-plugin-nats/src/producer.js +62 -0
- package/packages/datadog-plugin-nats/src/util.js +33 -0
- package/packages/datadog-plugin-next/src/index.js +5 -3
- package/packages/datadog-plugin-openai/src/tracing.js +15 -2
- package/packages/datadog-plugin-oracledb/src/index.js +13 -2
- package/packages/datadog-plugin-pino/src/index.js +42 -0
- package/packages/datadog-plugin-playwright/src/index.js +4 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +1 -1
- package/packages/datadog-plugin-router/src/index.js +33 -44
- package/packages/datadog-plugin-selenium/src/index.js +1 -1
- package/packages/datadog-plugin-vitest/src/index.js +5 -13
- package/packages/datadog-plugin-winston/src/index.js +30 -0
- package/packages/datadog-shimmer/src/shimmer.js +33 -40
- package/packages/dd-trace/src/aiguard/index.js +1 -1
- package/packages/dd-trace/src/aiguard/sdk.js +1 -1
- package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
- package/packages/dd-trace/src/appsec/index.js +1 -1
- package/packages/dd-trace/src/appsec/reporter.js +5 -6
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/utils.js +1 -1
- package/packages/dd-trace/src/appsec/user_tracking.js +5 -4
- package/packages/dd-trace/src/baggage.js +7 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +0 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +25 -13
- package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +70 -6
- package/packages/dd-trace/src/config/generated-config-types.d.ts +6 -2
- package/packages/dd-trace/src/config/supported-configurations.json +27 -8
- package/packages/dd-trace/src/datastreams/writer.js +2 -4
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +5 -8
- package/packages/dd-trace/src/encode/0.4.js +124 -108
- package/packages/dd-trace/src/encode/0.5.js +114 -26
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +31 -23
- package/packages/dd-trace/src/encode/agentless-json.js +4 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +32 -13
- package/packages/dd-trace/src/encode/span-stats.js +16 -16
- package/packages/dd-trace/src/encode/tags-processors.js +16 -0
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/genai/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +9 -7
- package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +0 -16
- package/packages/dd-trace/src/llmobs/span_processor.js +3 -3
- package/packages/dd-trace/src/llmobs/tagger.js +9 -1
- package/packages/dd-trace/src/llmobs/telemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/util.js +66 -3
- package/packages/dd-trace/src/log/index.js +1 -1
- package/packages/dd-trace/src/msgpack/chunk.js +394 -10
- package/packages/dd-trace/src/msgpack/index.js +96 -2
- package/packages/dd-trace/src/openfeature/encoding.js +70 -0
- package/packages/dd-trace/src/openfeature/flagging_provider.js +20 -0
- package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +143 -0
- package/packages/dd-trace/src/openfeature/span-enrichment.js +149 -0
- package/packages/dd-trace/src/opentelemetry/span-helpers.js +4 -3
- package/packages/dd-trace/src/opentelemetry/span.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/log.js +18 -7
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +62 -67
- package/packages/dd-trace/src/opentracing/span.js +59 -19
- package/packages/dd-trace/src/opentracing/span_context.js +49 -0
- package/packages/dd-trace/src/plugins/ci_plugin.js +20 -20
- package/packages/dd-trace/src/plugins/database.js +7 -6
- package/packages/dd-trace/src/plugins/index.js +4 -0
- package/packages/dd-trace/src/plugins/log_injection.js +56 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +3 -48
- package/packages/dd-trace/src/plugins/outbound.js +1 -1
- package/packages/dd-trace/src/plugins/plugin.js +15 -17
- package/packages/dd-trace/src/plugins/tracing.js +43 -5
- package/packages/dd-trace/src/plugins/util/test.js +236 -13
- package/packages/dd-trace/src/plugins/util/web.js +79 -65
- package/packages/dd-trace/src/priority_sampler.js +2 -2
- package/packages/dd-trace/src/profiling/profiler.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +10 -4
- package/packages/dd-trace/src/sampling_rule.js +7 -7
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +10 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
- package/packages/dd-trace/src/service-naming/source-resolver.js +46 -0
- package/packages/dd-trace/src/span_format.js +190 -58
- package/packages/dd-trace/src/spanleak.js +1 -1
- package/packages/dd-trace/src/standalone/index.js +3 -3
- package/packages/dd-trace/src/tagger.js +0 -2
- package/vendor/dist/@apm-js-collab/code-transformer/index.js +70 -39
- package/vendor/dist/@datadog/sketches-js/LICENSE +10 -36
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/packages/dd-trace/src/msgpack/encoder.js +0 -308
- package/packages/dd-trace/src/plugins/structured_log_plugin.js +0 -9
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const dc = require('dc-polyfill')
|
|
4
4
|
const shimmer = require('../../datadog-shimmer')
|
|
5
5
|
const { addHook } = require('./helpers/instrument')
|
|
6
|
+
const aiGuard = require('./helpers/openai-ai-guard')
|
|
6
7
|
|
|
7
8
|
const ch = dc.tracingChannel('apm:openai:request')
|
|
8
9
|
const onStreamedChunkCh = dc.channel('apm:openai:request:chunk')
|
|
@@ -216,15 +217,20 @@ for (const extension of extensions) {
|
|
|
216
217
|
|
|
217
218
|
for (const methodName of methods) {
|
|
218
219
|
shimmer.wrap(targetPrototype, methodName, methodFn => function (...args) {
|
|
219
|
-
if (!ch.start.hasSubscribers) {
|
|
220
|
+
if (!ch.start.hasSubscribers && !aiGuard.hasSubscribers()) {
|
|
220
221
|
return methodFn.apply(this, args)
|
|
221
222
|
}
|
|
222
|
-
|
|
223
223
|
// The OpenAI library lets you set `stream: true` on the options arg to any method
|
|
224
224
|
// However, we only want to handle streamed responses in specific cases
|
|
225
225
|
// chat.completions and completions
|
|
226
226
|
const stream = streamedResponse && getOption(args, 'stream', false)
|
|
227
227
|
|
|
228
|
+
const guard = aiGuard.createGuard(baseResource, args[0], stream)
|
|
229
|
+
|
|
230
|
+
if (!ch.start.hasSubscribers && !guard) {
|
|
231
|
+
return methodFn.apply(this, args)
|
|
232
|
+
}
|
|
233
|
+
|
|
228
234
|
const client = this._client || this.client
|
|
229
235
|
|
|
230
236
|
const ctx = {
|
|
@@ -249,7 +255,7 @@ for (const extension of extensions) {
|
|
|
249
255
|
const parsedPromise = origApiPromParse.apply(this, args)
|
|
250
256
|
.then(body => Promise.all([this.responsePromise, body]))
|
|
251
257
|
|
|
252
|
-
return handleUnwrappedAPIPromise(parsedPromise, ctx, stream)
|
|
258
|
+
return handleUnwrappedAPIPromise(parsedPromise, ctx, stream, guard)
|
|
253
259
|
})
|
|
254
260
|
|
|
255
261
|
return unwrappedPromise
|
|
@@ -262,9 +268,11 @@ for (const extension of extensions) {
|
|
|
262
268
|
const parsedPromise = origApiPromParse.apply(this, args)
|
|
263
269
|
.then(body => Promise.all([this.responsePromise, body]))
|
|
264
270
|
|
|
265
|
-
return handleUnwrappedAPIPromise(parsedPromise, ctx, stream)
|
|
271
|
+
return handleUnwrappedAPIPromise(parsedPromise, ctx, stream, guard)
|
|
266
272
|
})
|
|
267
273
|
|
|
274
|
+
if (guard) aiGuard.wrapAsResponse(apiProm, guard)
|
|
275
|
+
|
|
268
276
|
ch.end.publish(ctx)
|
|
269
277
|
|
|
270
278
|
return apiProm
|
|
@@ -276,8 +284,10 @@ for (const extension of extensions) {
|
|
|
276
284
|
}
|
|
277
285
|
}
|
|
278
286
|
|
|
279
|
-
function handleUnwrappedAPIPromise (apiProm, ctx, stream) {
|
|
280
|
-
|
|
287
|
+
function handleUnwrappedAPIPromise (apiProm, ctx, stream, guard) {
|
|
288
|
+
const guardedApiProm = guard ? aiGuard.gateParse(apiProm, guard) : apiProm
|
|
289
|
+
|
|
290
|
+
return guardedApiProm
|
|
281
291
|
.then(([{ response, options }, body]) => {
|
|
282
292
|
if (stream) {
|
|
283
293
|
if (body.iterator) {
|
|
@@ -287,22 +297,27 @@ function handleUnwrappedAPIPromise (apiProm, ctx, stream) {
|
|
|
287
297
|
body.response.body, Symbol.asyncIterator, wrapStreamIterator(response, options, ctx)
|
|
288
298
|
)
|
|
289
299
|
}
|
|
290
|
-
|
|
291
|
-
finish(ctx, {
|
|
292
|
-
headers: response.headers,
|
|
293
|
-
data: body,
|
|
294
|
-
request: {
|
|
295
|
-
path: response.url,
|
|
296
|
-
method: options.method,
|
|
297
|
-
},
|
|
298
|
-
})
|
|
300
|
+
return body
|
|
299
301
|
}
|
|
300
302
|
|
|
301
|
-
|
|
303
|
+
finish(ctx, {
|
|
304
|
+
headers: response.headers,
|
|
305
|
+
data: body,
|
|
306
|
+
request: {
|
|
307
|
+
path: response.url,
|
|
308
|
+
method: options.method,
|
|
309
|
+
},
|
|
310
|
+
})
|
|
311
|
+
|
|
312
|
+
if (!guard) return body
|
|
313
|
+
|
|
314
|
+
return aiGuard.evaluateOutput(guard, body).then(() => body)
|
|
302
315
|
})
|
|
303
316
|
.catch(error => {
|
|
304
|
-
finish(
|
|
305
|
-
|
|
317
|
+
// ctx.result is set inside finish(); if absent, finish never ran (sync throw in
|
|
318
|
+
// success branch, before-model block, or openai error) — record the error now.
|
|
319
|
+
// If finish already ran successfully (after-model block), don't double-publish.
|
|
320
|
+
if (!ctx.result) finish(ctx, undefined, error)
|
|
306
321
|
throw error
|
|
307
322
|
})
|
|
308
323
|
}
|
|
@@ -22,7 +22,7 @@ function finish (ctx) {
|
|
|
22
22
|
|
|
23
23
|
addHook({ name: 'oracledb', versions: ['>=5'], file: 'lib/oracledb.js' }, oracledb => {
|
|
24
24
|
shimmer.wrap(oracledb.Connection.prototype, 'execute', execute => {
|
|
25
|
-
return function wrappedExecute (dbQuery
|
|
25
|
+
return function wrappedExecute (dbQuery) {
|
|
26
26
|
if (!startChannel.hasSubscribers) {
|
|
27
27
|
return execute.apply(this, arguments)
|
|
28
28
|
}
|
|
@@ -72,6 +72,11 @@ addHook({ name: 'oracledb', versions: ['>=5'], file: 'lib/oracledb.js' }, oracle
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
return startChannel.runStores(ctx, () => {
|
|
75
|
+
// bindStart is skipped when tracing is suppressed (legacy store is `noop`),
|
|
76
|
+
// leaving ctx.injected unset — do not overwrite the caller's SQL argument.
|
|
77
|
+
if (ctx.injected !== undefined) {
|
|
78
|
+
arguments[0] = ctx.injected
|
|
79
|
+
}
|
|
75
80
|
try {
|
|
76
81
|
let result = execute.apply(this, arguments)
|
|
77
82
|
|
|
@@ -6,7 +6,16 @@ const {
|
|
|
6
6
|
addHook,
|
|
7
7
|
} = require('./helpers/instrument')
|
|
8
8
|
|
|
9
|
+
/**
|
|
10
|
+
* @param {string} symbol
|
|
11
|
+
* @param {(original: Function) => Function} wrapper
|
|
12
|
+
* @param {Function} pino
|
|
13
|
+
*/
|
|
9
14
|
function wrapPino (symbol, wrapper, pino) {
|
|
15
|
+
/**
|
|
16
|
+
* @param {unknown[]} args
|
|
17
|
+
* @returns {unknown}
|
|
18
|
+
*/
|
|
10
19
|
return function pinoWithTrace (...args) {
|
|
11
20
|
const instance = pino.apply(this, args)
|
|
12
21
|
|
|
@@ -22,15 +31,18 @@ function wrapPino (symbol, wrapper, pino) {
|
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
function wrapAsJson (asJson) {
|
|
25
|
-
const
|
|
34
|
+
const jsonCh = channel('apm:pino:log:json')
|
|
26
35
|
return function asJsonWithTrace (obj, msg, num, time) {
|
|
27
36
|
obj = arguments[0] = obj || {}
|
|
28
37
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
38
|
+
// Caller-provided `dd` wins -- skip the splice so a bespoke `dd` survives.
|
|
39
|
+
if (!jsonCh.hasSubscribers || Object.hasOwn(obj, 'dd')) {
|
|
40
|
+
return asJson.apply(this, arguments)
|
|
41
|
+
}
|
|
32
42
|
|
|
33
|
-
|
|
43
|
+
const payload = { line: asJson.apply(this, arguments) }
|
|
44
|
+
jsonCh.publish(payload)
|
|
45
|
+
return payload.line
|
|
34
46
|
}
|
|
35
47
|
}
|
|
36
48
|
|