dd-trace 5.53.0 → 5.55.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 (368) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/ci/cypress/plugin.js +8 -0
  3. package/ci/cypress/polyfills.js +23 -0
  4. package/ci/init.js +8 -7
  5. package/index.d.ts +33 -16
  6. package/initialize.mjs +5 -6
  7. package/package.json +40 -38
  8. package/packages/datadog-code-origin/index.js +22 -4
  9. package/packages/datadog-core/src/utils/src/get.js +1 -1
  10. package/packages/datadog-core/src/utils/src/has.js +1 -1
  11. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  12. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  13. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  14. package/packages/datadog-core/src/utils/src/set.js +1 -1
  15. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  16. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  17. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  18. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
  21. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  22. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
  23. package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
  24. package/packages/datadog-instrumentations/src/couchbase.js +6 -9
  25. package/packages/datadog-instrumentations/src/cucumber.js +108 -68
  26. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  27. package/packages/datadog-instrumentations/src/dns.js +5 -5
  28. package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
  29. package/packages/datadog-instrumentations/src/fastify.js +7 -9
  30. package/packages/datadog-instrumentations/src/fs.js +1 -1
  31. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
  32. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  33. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  34. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  35. package/packages/datadog-instrumentations/src/hapi.js +10 -11
  36. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  37. package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
  38. package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
  39. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  40. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  41. package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
  42. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  43. package/packages/datadog-instrumentations/src/jest.js +201 -143
  44. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  45. package/packages/datadog-instrumentations/src/knex.js +4 -4
  46. package/packages/datadog-instrumentations/src/koa.js +2 -3
  47. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  48. package/packages/datadog-instrumentations/src/mariadb.js +49 -65
  49. package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
  50. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  51. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  52. package/packages/datadog-instrumentations/src/mocha.js +3 -1
  53. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  54. package/packages/datadog-instrumentations/src/mysql.js +30 -37
  55. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  56. package/packages/datadog-instrumentations/src/net.js +1 -1
  57. package/packages/datadog-instrumentations/src/next.js +1 -0
  58. package/packages/datadog-instrumentations/src/nyc.js +3 -2
  59. package/packages/datadog-instrumentations/src/openai.js +22 -24
  60. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  61. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
  62. package/packages/datadog-instrumentations/src/pg.js +3 -5
  63. package/packages/datadog-instrumentations/src/playwright.js +123 -83
  64. package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
  65. package/packages/datadog-instrumentations/src/redis.js +4 -4
  66. package/packages/datadog-instrumentations/src/restify.js +9 -13
  67. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  68. package/packages/datadog-instrumentations/src/router.js +30 -32
  69. package/packages/datadog-instrumentations/src/tedious.js +2 -3
  70. package/packages/datadog-instrumentations/src/vitest.js +87 -52
  71. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  72. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  73. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  74. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  75. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  76. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  77. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  78. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  79. package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
  80. package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
  81. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  82. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  83. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
  84. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
  85. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  86. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
  87. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
  88. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
  89. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
  90. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
  91. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
  92. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  93. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  94. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  95. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  96. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  97. package/packages/datadog-plugin-cucumber/src/index.js +60 -4
  98. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
  99. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  100. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  101. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
  102. package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
  103. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  104. package/packages/datadog-plugin-express/src/index.js +10 -12
  105. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  106. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  107. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  108. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  109. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
  110. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  111. package/packages/datadog-plugin-graphql/src/index.js +10 -8
  112. package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
  113. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  114. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  115. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  116. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  117. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  118. package/packages/datadog-plugin-http/src/client.js +23 -13
  119. package/packages/datadog-plugin-http2/src/client.js +24 -25
  120. package/packages/datadog-plugin-jest/src/index.js +26 -23
  121. package/packages/datadog-plugin-jest/src/util.js +8 -8
  122. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  123. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  124. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  125. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  126. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  127. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  128. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  129. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  130. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  131. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  132. package/packages/datadog-plugin-mocha/src/index.js +39 -14
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
  134. package/packages/datadog-plugin-mysql/src/index.js +22 -9
  135. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  136. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  137. package/packages/datadog-plugin-next/src/index.js +7 -6
  138. package/packages/datadog-plugin-openai/src/services.js +6 -10
  139. package/packages/datadog-plugin-openai/src/tracing.js +12 -18
  140. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  141. package/packages/datadog-plugin-playwright/src/index.js +25 -4
  142. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
  143. package/packages/datadog-plugin-redis/src/index.js +2 -4
  144. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  145. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  146. package/packages/datadog-plugin-router/src/index.js +1 -1
  147. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  148. package/packages/datadog-plugin-vitest/src/index.js +52 -35
  149. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  150. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  151. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  152. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  153. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
  154. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  158. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
  159. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  160. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  161. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  162. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  163. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  165. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  166. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  167. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
  168. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  169. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  170. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  171. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  172. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
  173. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  174. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  175. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
  176. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  177. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
  178. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
  179. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
  180. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  181. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  183. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
  184. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  185. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  186. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  187. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
  188. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  189. package/packages/dd-trace/src/appsec/index.js +5 -5
  190. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  191. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  192. package/packages/dd-trace/src/appsec/reporter.js +232 -41
  193. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  194. package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
  195. package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
  196. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  197. package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
  198. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  199. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  200. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  201. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
  202. package/packages/dd-trace/src/azure_metadata.js +9 -9
  203. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
  204. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  205. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
  206. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  207. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
  208. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
  209. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
  210. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  211. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
  212. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
  213. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  214. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
  215. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
  216. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
  217. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  218. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
  219. package/packages/dd-trace/src/config-helper.js +89 -0
  220. package/packages/dd-trace/src/config.js +159 -129
  221. package/packages/dd-trace/src/config_stable.js +10 -7
  222. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  223. package/packages/dd-trace/src/datastreams/fnv.js +2 -2
  224. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  225. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  226. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
  227. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  228. package/packages/dd-trace/src/datastreams/size.js +1 -1
  229. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
  230. package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
  231. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  232. package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
  233. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  234. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
  235. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
  236. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  237. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
  238. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
  239. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  240. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  241. package/packages/dd-trace/src/debugger/index.js +1 -0
  242. package/packages/dd-trace/src/dogstatsd.js +7 -6
  243. package/packages/dd-trace/src/encode/0.4.js +14 -11
  244. package/packages/dd-trace/src/encode/0.5.js +4 -6
  245. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
  246. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  247. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  248. package/packages/dd-trace/src/exporter.js +7 -6
  249. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  250. package/packages/dd-trace/src/exporters/common/docker.js +4 -3
  251. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  252. package/packages/dd-trace/src/exporters/common/request.js +5 -2
  253. package/packages/dd-trace/src/exporters/common/util.js +4 -2
  254. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  255. package/packages/dd-trace/src/flare/file.js +1 -5
  256. package/packages/dd-trace/src/format.js +1 -1
  257. package/packages/dd-trace/src/git_properties.js +1 -1
  258. package/packages/dd-trace/src/id.js +15 -9
  259. package/packages/dd-trace/src/iitm.js +10 -22
  260. package/packages/dd-trace/src/index.js +4 -3
  261. package/packages/dd-trace/src/lambda/handler.js +7 -6
  262. package/packages/dd-trace/src/lambda/index.js +2 -1
  263. package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
  264. package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
  265. package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
  266. package/packages/dd-trace/src/llmobs/index.js +21 -5
  267. package/packages/dd-trace/src/llmobs/noop.js +18 -20
  268. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  269. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  270. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  271. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
  272. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  273. package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
  274. package/packages/dd-trace/src/llmobs/sdk.js +4 -3
  275. package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
  276. package/packages/dd-trace/src/llmobs/tagger.js +129 -102
  277. package/packages/dd-trace/src/llmobs/util.js +9 -9
  278. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  279. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  280. package/packages/dd-trace/src/log/index.js +9 -8
  281. package/packages/dd-trace/src/log/log.js +1 -1
  282. package/packages/dd-trace/src/log/writer.js +3 -4
  283. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  284. package/packages/dd-trace/src/msgpack/encoder.js +31 -31
  285. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  286. package/packages/dd-trace/src/noop/span.js +4 -6
  287. package/packages/dd-trace/src/noop/tracer.js +1 -2
  288. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  289. package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
  290. package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
  291. package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
  292. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  293. package/packages/dd-trace/src/opentracing/span.js +16 -20
  294. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  295. package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
  296. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  297. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  298. package/packages/dd-trace/src/pkg.js +1 -1
  299. package/packages/dd-trace/src/plugin_manager.js +4 -3
  300. package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
  301. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  302. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  303. package/packages/dd-trace/src/plugins/index.js +0 -1
  304. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  305. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  306. package/packages/dd-trace/src/plugins/producer.js +2 -2
  307. package/packages/dd-trace/src/plugins/storage.js +2 -2
  308. package/packages/dd-trace/src/plugins/util/ci.js +28 -20
  309. package/packages/dd-trace/src/plugins/util/git.js +166 -12
  310. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  311. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  312. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  313. package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
  314. package/packages/dd-trace/src/plugins/util/test.js +315 -51
  315. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  316. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  317. package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
  318. package/packages/dd-trace/src/plugins/util/web.js +8 -8
  319. package/packages/dd-trace/src/priority_sampler.js +64 -53
  320. package/packages/dd-trace/src/profiling/config.js +51 -35
  321. package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
  322. package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
  323. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
  324. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  325. package/packages/dd-trace/src/profiling/index.js +2 -1
  326. package/packages/dd-trace/src/profiling/profiler.js +44 -6
  327. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  328. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  329. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  330. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  331. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  332. package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
  333. package/packages/dd-trace/src/profiling/tagger.js +21 -13
  334. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  335. package/packages/dd-trace/src/proxy.js +9 -10
  336. package/packages/dd-trace/src/random_sampler.js +40 -0
  337. package/packages/dd-trace/src/rate_limiter.js +4 -4
  338. package/packages/dd-trace/src/remote_config/index.js +3 -7
  339. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  340. package/packages/dd-trace/src/require-package-json.js +1 -1
  341. package/packages/dd-trace/src/ritm.js +8 -8
  342. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
  343. package/packages/dd-trace/src/sampler.js +41 -4
  344. package/packages/dd-trace/src/sampling_rule.js +12 -3
  345. package/packages/dd-trace/src/scope.js +1 -1
  346. package/packages/dd-trace/src/serverless.js +11 -4
  347. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  348. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  349. package/packages/dd-trace/src/span_processor.js +5 -4
  350. package/packages/dd-trace/src/span_sampler.js +4 -1
  351. package/packages/dd-trace/src/standalone/tracesource.js +2 -3
  352. package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
  353. package/packages/dd-trace/src/startup-log.js +6 -18
  354. package/packages/dd-trace/src/supported-configurations.json +439 -0
  355. package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
  356. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  357. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  358. package/packages/dd-trace/src/telemetry/send-data.js +8 -7
  359. package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
  360. package/packages/dd-trace/src/tracer.js +3 -7
  361. package/packages/dd-trace/src/util.js +1 -6
  362. package/version.js +1 -0
  363. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  364. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  365. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  366. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
  367. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
  368. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
@@ -8,6 +8,7 @@ const dc = require('dc-polyfill')
8
8
  const { fileURLToPath } = require('url')
9
9
  const { isTrue } = require('../../src/util')
10
10
 
11
+ /** @type {Set<string>} */
11
12
  const savedDependenciesToSend = new Set()
12
13
  const detectedDependencyKeys = new Set()
13
14
  const detectedDependencyVersions = new Set()
@@ -15,63 +16,66 @@ const detectedDependencyVersions = new Set()
15
16
  const FILE_URI_START = 'file://'
16
17
  const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
17
18
 
18
- let immediate, config, application, host, initialLoad
19
+ let config, application, host, initialLoad
19
20
  let isFirstModule = true
20
21
  let getRetryData
21
22
  let updateRetryData
22
23
 
23
- function createBatchPayload (payload) {
24
- const batchPayload = payload.map(item => {
25
- return {
26
- request_type: item.reqType,
27
- payload: item.payload
28
- }
29
- })
30
-
31
- return batchPayload
32
- }
33
24
  function waitAndSend (config, application, host) {
34
- if (!immediate) {
35
- immediate = setImmediate(() => {
36
- immediate = null
37
- if (savedDependenciesToSend.size > 0) {
38
- const dependencies = Array.from(savedDependenciesToSend.values())
39
- // if a depencdency is from the initial load, *always* send the event
40
- // Otherwise, only send if dependencyCollection is enabled
41
- .filter(dep => {
42
- const initialLoadModule = isTrue(dep.split(' ')[2])
43
- const sendModule = initialLoadModule || (config.telemetry?.dependencyCollection)
44
-
45
- if (!sendModule) savedDependenciesToSend.delete(dep) // we'll never send it
46
- return sendModule
47
- })
48
- .splice(0, 2000) // v2 documentation specifies up to 2000 dependencies can be sent at once
49
- .map(pair => {
50
- savedDependenciesToSend.delete(pair)
51
- const [name, version] = pair.split(' ')
52
- return { name, version }
53
- })
54
- let currPayload
55
- const retryData = getRetryData()
56
- if (retryData) {
57
- currPayload = { reqType: 'app-dependencies-loaded', payload: { dependencies } }
58
- } else {
59
- if (!dependencies.length) return // no retry data and no dependencies, nothing to send
60
- currPayload = { dependencies }
25
+ setImmediate(() => {
26
+ if (savedDependenciesToSend.size === 0) {
27
+ return
28
+ }
29
+ const dependencies = []
30
+ let send = 0
31
+ for (const dependency of savedDependenciesToSend) {
32
+ const [name, version, initialLoadModule] = dependency.split(' ')
33
+ // If a dependency is from the initial load, *always* send the event
34
+ // Otherwise, only send if dependencyCollection is enabled
35
+ const sendModule = isTrue(initialLoadModule) || config.telemetry?.dependencyCollection
36
+
37
+ savedDependenciesToSend.delete(dependency)
38
+
39
+ if (sendModule) {
40
+ dependencies.push({ name, version })
41
+ send++
42
+ if (send === 2000) {
43
+ // v2 documentation specifies up to 2000 dependencies can be sent at once
44
+ break
61
45
  }
46
+ }
47
+ }
62
48
 
63
- const payload = retryData ? createBatchPayload([currPayload, retryData]) : currPayload
64
- const reqType = retryData ? 'message-batch' : 'app-dependencies-loaded'
49
+ /**
50
+ * @type { { dependencies: typeof dependencies } | {
51
+ * request_type: string,
52
+ * payload: typeof dependencies
53
+ * }[]}
54
+ */
55
+ let payload = { dependencies }
56
+ let reqType = 'app-dependencies-loaded'
57
+ const retryData = getRetryData()
58
+
59
+ if (retryData) {
60
+ payload = [{
61
+ request_type: 'app-dependencies-loaded',
62
+ payload
63
+ }, {
64
+ request_type: retryData.reqType,
65
+ payload: retryData.payload
66
+ }]
67
+ reqType = 'message-batch'
68
+ } else if (!dependencies.length) {
69
+ // No retry data and no dependencies, nothing to send
70
+ return
71
+ }
65
72
 
66
- sendData(config, application, host, reqType, payload, updateRetryData)
73
+ sendData(config, application, host, reqType, payload, updateRetryData)
67
74
 
68
- if (savedDependenciesToSend.size > 0) {
69
- waitAndSend(config, application, host)
70
- }
71
- }
72
- })
73
- immediate.unref()
74
- }
75
+ if (savedDependenciesToSend.size > 0) {
76
+ waitAndSend(config, application, host)
77
+ }
78
+ }).unref()
75
79
  }
76
80
 
77
81
  function loadAllTheLoadedModules () {
@@ -91,18 +95,18 @@ function onModuleLoad (data) {
91
95
 
92
96
  if (data) {
93
97
  let filename = data.filename
94
- if (filename && filename.startsWith(FILE_URI_START)) {
98
+ if (filename?.startsWith(FILE_URI_START)) {
95
99
  try {
96
100
  filename = fileURLToPath(filename)
97
- } catch (e) {
101
+ } catch {
98
102
  // cannot transform url to path
99
103
  }
100
104
  }
101
105
  const parseResult = filename && parse(filename)
102
- const request = data.request || (parseResult && parseResult.name)
103
- const dependencyKey = parseResult && parseResult.basedir ? parseResult.basedir : request
106
+ const request = data.request || parseResult?.name
107
+ const dependencyKey = parseResult?.basedir ?? request
104
108
 
105
- if (filename && request && isDependency(filename, request) && !detectedDependencyKeys.has(dependencyKey)) {
109
+ if (filename && request && isDependency(request) && !detectedDependencyKeys.has(dependencyKey)) {
106
110
  detectedDependencyKeys.add(dependencyKey)
107
111
 
108
112
  if (parseResult) {
@@ -118,7 +122,7 @@ function onModuleLoad (data) {
118
122
 
119
123
  waitAndSend(config, application, host)
120
124
  }
121
- } catch (e) {
125
+ } catch {
122
126
  // can not read the package.json, do nothing
123
127
  }
124
128
  }
@@ -135,20 +139,21 @@ function start (_config = {}, _application, _host, getRetryDataFunction, updateR
135
139
  updateRetryData = updateRetryDatafunction
136
140
  moduleLoadStartChannel.subscribe(onModuleLoad)
137
141
 
138
- // try and capture intially loaded modules in the first tick
142
+ // Try and capture initially loaded modules in the first tick
139
143
  // since, ideally, the tracer (and this module) should be loaded first,
140
144
  // this should capture any first-tick dependencies
141
145
  queueMicrotask(() => { initialLoad = false })
142
146
  }
143
147
 
144
- function isDependency (filename, request) {
145
- const isDependencyWithSlash = isDependencyWithSeparator(filename, request, '/')
148
+ function isDependency (request) {
149
+ const isDependencyWithSlash = isDependencyWithSeparator(request, '/')
146
150
  if (isDependencyWithSlash && process.platform === 'win32') {
147
- return isDependencyWithSeparator(filename, request, path.sep)
151
+ return isDependencyWithSeparator(request, path.sep)
148
152
  }
149
153
  return isDependencyWithSlash
150
154
  }
151
- function isDependencyWithSeparator (filename, request, sep) {
155
+
156
+ function isDependencyWithSeparator (request, sep) {
152
157
  return request.indexOf(`..${sep}`) !== 0 &&
153
158
  request.indexOf(`.${sep}`) !== 0 &&
154
159
  request.indexOf(sep) !== 0 &&
@@ -1,12 +1,12 @@
1
1
  'use strict'
2
2
 
3
3
  const log = require('../../log')
4
- const { calculateDDBasePath } = require('../../util')
4
+ const { ddBasePath } = require('../../util')
5
5
 
6
6
  const logs = new Map() // hash -> log
7
7
 
8
8
  // NOTE: Is this a reasonable number?
9
- let maxEntries = 10000
9
+ let maxEntries = 10_000
10
10
  let overflowedCount = 0
11
11
 
12
12
  function hashCode (hashSource) {
@@ -20,9 +20,9 @@ function hashCode (hashSource) {
20
20
 
21
21
  function createHash (logEntry) {
22
22
  const prime = 31
23
- let result = ((!logEntry.level) ? 0 : hashCode(logEntry.level))
24
- result = (((prime * result) | 0) + ((!logEntry.message) ? 0 : hashCode(logEntry.message))) | 0
25
- result = (((prime * result) | 0) + ((!logEntry.stack_trace) ? 0 : hashCode(logEntry.stack_trace))) | 0
23
+ let result = logEntry.level ? hashCode(logEntry.level) : 0
24
+ result = (((prime * result) | 0) + (logEntry.message ? hashCode(logEntry.message) : 0)) | 0
25
+ result = (((prime * result) | 0) + (logEntry.stack_trace ? hashCode(logEntry.stack_trace) : 0)) | 0
26
26
  return result
27
27
  }
28
28
 
@@ -30,7 +30,6 @@ function isValid (logEntry) {
30
30
  return logEntry?.level && logEntry.message
31
31
  }
32
32
 
33
- const ddBasePath = calculateDDBasePath(__dirname)
34
33
  const EOL = '\n'
35
34
  const STACK_FRAME_LINE_REGEX = /^\s*at\s/gm
36
35
 
@@ -42,7 +41,7 @@ function sanitize (logEntry) {
42
41
 
43
42
  const firstIndex = stackLines.findIndex(l => l.match(STACK_FRAME_LINE_REGEX))
44
43
 
45
- const isDDCode = firstIndex > -1 && stackLines[firstIndex].includes(ddBasePath)
44
+ const isDDCode = firstIndex !== -1 && stackLines[firstIndex].includes(ddBasePath)
46
45
  stackLines = stackLines
47
46
  .filter((line, index) => (isDDCode && index < firstIndex) || line.includes(ddBasePath))
48
47
  .map(line => line.replace(ddBasePath, ''))
@@ -78,11 +77,11 @@ const logCollector = {
78
77
  return false
79
78
  }
80
79
  const hash = createHash(logEntry)
81
- if (!logs.has(hash)) {
80
+ if (logs.has(hash)) {
81
+ logs.get(hash).count++
82
+ } else {
82
83
  logs.set(hash, logEntry)
83
84
  return true
84
- } else {
85
- logs.get(hash).count++
86
85
  }
87
86
  } catch (e) {
88
87
  log.error('Unable to add log to logCollector: %s', e.message)
@@ -19,8 +19,14 @@ function now () {
19
19
  return Date.now() / 1e3
20
20
  }
21
21
 
22
- function mapToJsonArray (map) {
23
- return Array.from(map.values()).map(v => v.toJSON())
22
+ function mapToJsonArray (map, filter) {
23
+ const array = []
24
+ for (const value of map.values()) {
25
+ if (!filter || filter(value)) {
26
+ array.push(value.toJSON())
27
+ }
28
+ }
29
+ return array
24
30
  }
25
31
 
26
32
  function hasPoints (metric) {
@@ -138,7 +144,7 @@ class RateMetric extends Metric {
138
144
 
139
145
  track (value = 1) {
140
146
  this.rate += value
141
- const rate = this.interval ? (this.rate / this.interval) : 0.0
147
+ const rate = this.interval ? (this.rate / this.interval) : 0
142
148
  this.points = [[now(), rate]]
143
149
  }
144
150
  }
@@ -169,8 +175,7 @@ class MetricsCollection extends Map {
169
175
  toJSON () {
170
176
  if (!this.size) return
171
177
 
172
- const series = mapToJsonArray(this)
173
- .filter(hasPoints)
178
+ const series = mapToJsonArray(this, hasPoints)
174
179
 
175
180
  if (!series.length) return
176
181
 
@@ -1,6 +1,7 @@
1
1
  const request = require('../exporters/common/request')
2
2
  const log = require('../log')
3
3
  const { isTrue } = require('../util')
4
+ const { getEnvironmentVariable } = require('../config-helper')
4
5
 
5
6
  let agentTelemetry = true
6
7
 
@@ -36,10 +37,9 @@ function getPayload (payload) {
36
37
  // 'logs' request type payload is meant to send library logs to Datadog’s backend.
37
38
  if (Array.isArray(payload)) {
38
39
  return payload
39
- } else {
40
- const { logger, tags, serviceMapping, ...trimmedPayload } = payload
41
- return trimmedPayload
42
40
  }
41
+ const { logger, tags, serviceMapping, ...trimmedPayload } = payload
42
+ return trimmedPayload
43
43
  }
44
44
 
45
45
  function sendData (config, application, host, reqType, payload = {}, cb = () => {}) {
@@ -51,7 +51,8 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
51
51
 
52
52
  let url = config.url
53
53
 
54
- const isCiVisibilityAgentlessMode = isCiVisibility && isTrue(process.env.DD_CIVISIBILITY_AGENTLESS_ENABLED)
54
+ const isCiVisibilityAgentlessMode = isCiVisibility &&
55
+ isTrue(getEnvironmentVariable('DD_CIVISIBILITY_AGENTLESS_ENABLED'))
55
56
 
56
57
  if (isCiVisibilityAgentlessMode) {
57
58
  try {
@@ -74,7 +75,7 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
74
75
 
75
76
  const data = JSON.stringify({
76
77
  api_version: 'v2',
77
- naming_schema_version: config.spanAttributeSchema ? config.spanAttributeSchema : '',
78
+ naming_schema_version: config.spanAttributeSchema ?? '',
78
79
  request_type: reqType,
79
80
  tracer_time: Math.floor(Date.now() / 1000),
80
81
  runtime_id: config.tags['runtime-id'],
@@ -85,14 +86,14 @@ function sendData (config, application, host, reqType, payload = {}, cb = () =>
85
86
  })
86
87
 
87
88
  request(data, options, (error) => {
88
- if (error && process.env.DD_API_KEY && config.site) {
89
+ if (error && getEnvironmentVariable('DD_API_KEY') && config.site) {
89
90
  if (agentTelemetry) {
90
91
  log.warn('Agent telemetry failed, started agentless telemetry')
91
92
  agentTelemetry = false
92
93
  }
93
94
  // figure out which data center to send to
94
95
  const backendUrl = getAgentlessTelemetryEndpoint(config.site)
95
- const backendHeader = { ...options.headers, 'DD-API-KEY': process.env.DD_API_KEY }
96
+ const backendHeader = { ...options.headers, 'DD-API-KEY': getEnvironmentVariable('DD_API_KEY') }
96
97
  const backendOptions = {
97
98
  ...options,
98
99
  url: backendUrl,
@@ -22,7 +22,7 @@ let heartbeatTimeout
22
22
  let heartbeatInterval
23
23
  let extendedInterval
24
24
  let integrations
25
- let configWithOrigin = []
25
+ const configWithOrigin = new Map()
26
26
  let retryData = null
27
27
  const extendedHeartbeatPayload = {}
28
28
 
@@ -113,7 +113,7 @@ function getInstallSignature (config) {
113
113
  function appStarted (config) {
114
114
  const app = {
115
115
  products: getProducts(config),
116
- configuration: configWithOrigin
116
+ configuration: [...configWithOrigin.values()]
117
117
  }
118
118
  const installSignature = getInstallSignature(config)
119
119
  if (installSignature) {
@@ -282,7 +282,7 @@ function stop () {
282
282
  }
283
283
 
284
284
  function updateIntegrations () {
285
- if (!config || !config.telemetry.enabled) {
285
+ if (!config?.telemetry.enabled) {
286
286
  return
287
287
  }
288
288
  const integrations = getIntegrations()
@@ -303,6 +303,27 @@ function formatMapForTelemetry (map) {
303
303
  : ''
304
304
  }
305
305
 
306
+ const nameMapping = {
307
+ sampleRate: 'DD_TRACE_SAMPLE_RATE',
308
+ logInjection: 'DD_LOG_INJECTION',
309
+ headerTags: 'DD_TRACE_HEADER_TAGS',
310
+ tags: 'DD_TAGS',
311
+ 'sampler.rules': 'DD_TRACE_SAMPLING_RULES',
312
+ traceEnabled: 'DD_TRACE_ENABLED',
313
+ url: 'DD_TRACE_AGENT_URL',
314
+ 'sampler.rateLimit': 'DD_TRACE_RATE_LIMIT',
315
+ queryStringObfuscation: 'DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP',
316
+ version: 'DD_VERSION',
317
+ env: 'DD_ENV',
318
+ service: 'DD_SERVICE',
319
+ clientIpHeader: 'DD_TRACE_CLIENT_IP_HEADER',
320
+ 'grpc.client.error.statuses': 'DD_GRPC_CLIENT_ERROR_STATUSES',
321
+ 'grpc.server.error.statuses': 'DD_GRPC_SERVER_ERROR_STATUSES',
322
+ traceId128BitLoggingEnabled: 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
323
+ }
324
+
325
+ const namesNeedFormatting = new Set(['DD_TAGS', 'peerServiceMapping', 'serviceMapping'])
326
+
306
327
  function updateConfig (changes, config) {
307
328
  if (!config.telemetry.enabled) return
308
329
  if (changes.length === 0) return
@@ -312,34 +333,11 @@ function updateConfig (changes, config) {
312
333
  const application = createAppObject(config)
313
334
  const host = createHostObject()
314
335
 
315
- const nameMapping = {
316
- sampleRate: 'DD_TRACE_SAMPLE_RATE',
317
- logInjection: 'DD_LOG_INJECTION',
318
- headerTags: 'DD_TRACE_HEADER_TAGS',
319
- tags: 'DD_TAGS',
320
- 'sampler.rules': 'DD_TRACE_SAMPLING_RULES',
321
- traceEnabled: 'DD_TRACE_ENABLED',
322
- url: 'DD_TRACE_AGENT_URL',
323
- 'sampler.rateLimit': 'DD_TRACE_RATE_LIMIT',
324
- queryStringObfuscation: 'DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP',
325
- version: 'DD_VERSION',
326
- env: 'DD_ENV',
327
- service: 'DD_SERVICE',
328
- clientIpHeader: 'DD_TRACE_CLIENT_IP_HEADER',
329
- 'grpc.client.error.statuses': 'DD_GRPC_CLIENT_ERROR_STATUSES',
330
- 'grpc.server.error.statuses': 'DD_GRPC_SERVER_ERROR_STATUSES',
331
- traceId128BitLoggingEnabled: 'DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED'
332
- }
333
-
334
- const namesNeedFormatting = new Set(['DD_TAGS', 'peerServiceMapping', 'serviceMapping'])
335
-
336
- const configuration = []
337
- const names = [] // list of config names whose values have been changed
336
+ const changed = configWithOrigin.size > 0
338
337
 
339
338
  for (const change of changes) {
340
339
  const name = nameMapping[change.name] || change.name
341
340
 
342
- names.push(name)
343
341
  const { origin, value } = change
344
342
  const entry = { name, value, origin }
345
343
 
@@ -354,20 +352,14 @@ function updateConfig (changes, config) {
354
352
  } else if (Array.isArray(entry.value)) {
355
353
  entry.value = value.join(',')
356
354
  }
357
- configuration.push(entry)
355
+ configWithOrigin.set(name, entry)
358
356
  }
359
357
 
360
- function isNotModified (entry) {
361
- return !names.includes(entry.name)
362
- }
363
-
364
- if (!configWithOrigin.length) {
365
- configWithOrigin = configuration
366
- } else {
358
+ if (changed) {
367
359
  // update configWithOrigin to contain up-to-date full list of config values for app-extended-heartbeat
368
- configWithOrigin = configWithOrigin.filter(isNotModified)
369
- configWithOrigin = configWithOrigin.concat(configuration)
370
- const { reqType, payload } = createPayload('app-client-configuration-change', { configuration })
360
+ const { reqType, payload } = createPayload('app-client-configuration-change', {
361
+ configuration: [...configWithOrigin.values()]
362
+ })
371
363
  sendData(config, application, host, reqType, payload, updateRetryData)
372
364
  }
373
365
  }
@@ -376,13 +368,7 @@ function profilingEnabledToBoolean (profilingEnabled) {
376
368
  if (typeof profilingEnabled === 'boolean') {
377
369
  return profilingEnabled
378
370
  }
379
- if (['auto', 'true'].includes(profilingEnabled)) {
380
- return true
381
- }
382
- if (profilingEnabled === 'false') {
383
- return false
384
- }
385
- return undefined
371
+ return profilingEnabled === 'true' || profilingEnabled === 'auto'
386
372
  }
387
373
 
388
374
  module.exports = {
@@ -46,9 +46,7 @@ class DatadogTracer extends Tracer {
46
46
  }
47
47
 
48
48
  trace (name, options, fn) {
49
- options = Object.assign({
50
- childOf: this.scope().active()
51
- }, options)
49
+ options = { childOf: this.scope().active(), ...options }
52
50
 
53
51
  const span = this.startSpan(name, options)
54
52
 
@@ -76,9 +74,8 @@ class DatadogTracer extends Tracer {
76
74
  throw err
77
75
  }
78
76
  )
79
- } else {
80
- span.finish()
81
77
  }
78
+ span.finish()
82
79
 
83
80
  return result
84
81
  } catch (e) {
@@ -110,9 +107,8 @@ class DatadogTracer extends Tracer {
110
107
 
111
108
  return fn.apply(this, arguments)
112
109
  })
113
- } else {
114
- return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))
115
110
  }
111
+ return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))
116
112
  }
117
113
  }
118
114
 
@@ -69,10 +69,6 @@ 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
-
76
72
  function normalizeProfilingEnabledValue (configValue) {
77
73
  return isTrue(configValue)
78
74
  ? 'true'
@@ -86,7 +82,6 @@ module.exports = {
86
82
  isFalse,
87
83
  isError,
88
84
  globMatch,
89
- calculateDDBasePath,
90
- hasOwn,
85
+ ddBasePath: calculateDDBasePath(__dirname),
91
86
  normalizeProfilingEnabledValue
92
87
  }
package/version.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  /* eslint-disable no-var */
4
+ /* eslint-disable unicorn/prefer-number-properties */
4
5
 
5
6
  var ddMatches = require('./package.json').version.match(/^(\d+)\.(\d+)\.(\d+)/)
6
7
  var nodeMatches = process.versions.node.match(/^(\d+)\.(\d+)\.(\d+)/)
@@ -1,77 +0,0 @@
1
- 'use strict'
2
-
3
- const { addHook, channel } = require('./helpers/instrument')
4
- const shimmer = require('../../datadog-shimmer')
5
-
6
- const logChannel = channel('apm:paperplane:log')
7
- const handleChannel = channel('apm:paperplane:request:handle')
8
- const routeChannel = channel('apm:paperplane:request:route')
9
-
10
- const nodeMajor = Number(process.versions.node.split('.')[0])
11
- const name = 'paperplane'
12
- const versions = nodeMajor <= 12 ? ['>=2.3.2'] : nodeMajor <= 14 ? ['>=3.1.1'] : []
13
-
14
- const wrapRoute = handler => req => {
15
- const { original, route } = req
16
-
17
- if (routeChannel.hasSubscribers) {
18
- routeChannel.publish({ req: original, route })
19
- }
20
-
21
- return handler(req)
22
- }
23
-
24
- const wrapLogger = logger => record => {
25
- const event = { message: record }
26
-
27
- logChannel.publish(event)
28
-
29
- return logger(event.message)
30
- }
31
-
32
- const wrapMount = mount => opts => {
33
- const handler = mount(opts)
34
-
35
- return function (req, res) {
36
- handleChannel.publish(req)
37
-
38
- return handler.apply(this, arguments)
39
- }
40
- }
41
-
42
- const wrapRoutes = routes => handlers => {
43
- const traced = {}
44
-
45
- for (const route in handlers) {
46
- traced[route] = wrapRoute(handlers[route])
47
- }
48
-
49
- return routes(traced)
50
- }
51
-
52
- addHook({ name, versions, file: 'lib/logger.js' }, exports => {
53
- shimmer.wrap(exports, 'logger', wrapLogger)
54
-
55
- return exports
56
- })
57
-
58
- addHook({ name, versions, file: 'lib/mount.js' }, exports => {
59
- shimmer.wrap(exports, 'mount', wrapMount)
60
-
61
- return exports
62
- })
63
-
64
- addHook({ name, versions, file: 'lib/routes.js' }, exports => {
65
- shimmer.wrap(exports, 'routes', wrapRoutes)
66
-
67
- return exports
68
- })
69
-
70
- if (nodeMajor <= 12) {
71
- addHook({ name, versions: ['2.3.0 - 2.3.1'] }, paperplane => {
72
- shimmer.wrap(paperplane, 'mount', wrapMount)
73
- shimmer.wrap(paperplane, 'routes', wrapRoutes)
74
-
75
- return paperplane
76
- })
77
- }
@@ -1,25 +0,0 @@
1
- 'use strict'
2
-
3
- const Plugin = require('../../dd-trace/src/plugins/plugin')
4
- const PaperplaneLoggerPlugin = require('./logger')
5
- const PaperplaneServerPlugin = require('./server')
6
-
7
- class PaperplanePlugin extends Plugin {
8
- static get id () {
9
- return 'paperplane'
10
- }
11
-
12
- constructor (...args) {
13
- super(...args)
14
-
15
- this.server = new PaperplaneServerPlugin(...args)
16
- this.logger = new PaperplaneLoggerPlugin(...args)
17
- }
18
-
19
- configure (config) {
20
- this.server.configure(config)
21
- this.logger.configure(config)
22
- }
23
- }
24
-
25
- module.exports = PaperplanePlugin
@@ -1,11 +0,0 @@
1
- 'use strict'
2
-
3
- const LogPlugin = require('../../dd-trace/src/plugins/log_plugin')
4
-
5
- class PaperplaneLoggerPlugin extends LogPlugin {
6
- static get id () {
7
- return 'paperplane'
8
- }
9
- }
10
-
11
- module.exports = PaperplaneLoggerPlugin
@@ -1,24 +0,0 @@
1
- 'use strict'
2
-
3
- const RouterPlugin = require('../../datadog-plugin-router/src')
4
- const web = require('../../dd-trace/src/plugins/util/web')
5
-
6
- class PaperplaneServerPlugin extends RouterPlugin {
7
- static get id () {
8
- return 'paperplane'
9
- }
10
-
11
- constructor (...args) {
12
- super(...args)
13
-
14
- this.addSub('apm:paperplane:request:handle', req => {
15
- this.setFramework(req, 'paperplane', this.config)
16
- })
17
-
18
- this.addSub('apm:paperplane:request:route', ({ req, route }) => {
19
- web.setRoute(req, route)
20
- })
21
- }
22
- }
23
-
24
- module.exports = PaperplaneServerPlugin