dd-trace 5.52.0 → 5.54.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 (332) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/README.md +5 -0
  3. package/index.d.ts +87 -22
  4. package/initialize.mjs +3 -4
  5. package/package.json +36 -34
  6. package/packages/datadog-core/src/utils/src/get.js +1 -1
  7. package/packages/datadog-core/src/utils/src/has.js +1 -1
  8. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  9. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  10. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  11. package/packages/datadog-core/src/utils/src/set.js +1 -1
  12. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  13. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  14. package/packages/datadog-instrumentations/src/amqplib.js +57 -37
  15. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  16. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  17. package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -4
  18. package/packages/datadog-instrumentations/src/child_process.js +3 -3
  19. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +92 -62
  20. package/packages/datadog-instrumentations/src/couchbase.js +5 -4
  21. package/packages/datadog-instrumentations/src/cucumber.js +126 -84
  22. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  23. package/packages/datadog-instrumentations/src/dns.js +1 -1
  24. package/packages/datadog-instrumentations/src/express.js +2 -6
  25. package/packages/datadog-instrumentations/src/fs.js +7 -6
  26. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +28 -34
  27. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  28. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  29. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  30. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  31. package/packages/datadog-instrumentations/src/helpers/hook.js +1 -1
  32. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -1
  33. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  34. package/packages/datadog-instrumentations/src/helpers/register.js +21 -18
  35. package/packages/datadog-instrumentations/src/http/client.js +16 -21
  36. package/packages/datadog-instrumentations/src/iovalkey.js +51 -0
  37. package/packages/datadog-instrumentations/src/jest.js +184 -87
  38. package/packages/datadog-instrumentations/src/kafkajs.js +65 -44
  39. package/packages/datadog-instrumentations/src/knex.js +4 -4
  40. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  41. package/packages/datadog-instrumentations/src/mariadb.js +38 -61
  42. package/packages/datadog-instrumentations/src/mocha/main.js +85 -59
  43. package/packages/datadog-instrumentations/src/mocha/utils.js +103 -82
  44. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  45. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  46. package/packages/datadog-instrumentations/src/mysql.js +20 -36
  47. package/packages/datadog-instrumentations/src/mysql2.js +55 -47
  48. package/packages/datadog-instrumentations/src/net.js +4 -2
  49. package/packages/datadog-instrumentations/src/next.js +7 -14
  50. package/packages/datadog-instrumentations/src/nyc.js +1 -1
  51. package/packages/datadog-instrumentations/src/openai.js +21 -23
  52. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  53. package/packages/datadog-instrumentations/src/pg.js +6 -13
  54. package/packages/datadog-instrumentations/src/playwright.js +170 -136
  55. package/packages/datadog-instrumentations/src/redis.js +3 -3
  56. package/packages/datadog-instrumentations/src/restify.js +2 -2
  57. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  58. package/packages/datadog-instrumentations/src/router.js +22 -25
  59. package/packages/datadog-instrumentations/src/tedious.js +1 -1
  60. package/packages/datadog-instrumentations/src/url.js +9 -17
  61. package/packages/datadog-instrumentations/src/vitest.js +126 -97
  62. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  63. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  64. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  65. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  66. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  67. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  68. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  69. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  70. package/packages/datadog-plugin-aws-sdk/src/base.js +3 -2
  71. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  72. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  73. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +24 -31
  74. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  75. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +6 -6
  76. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  77. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +1 -1
  78. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +4 -5
  79. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  80. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  81. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  82. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  83. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  84. package/packages/datadog-plugin-cucumber/src/index.js +86 -20
  85. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +97 -27
  86. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  87. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  88. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  89. package/packages/datadog-plugin-express/src/index.js +10 -12
  90. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  91. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  92. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  93. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  94. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +26 -9
  95. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  96. package/packages/datadog-plugin-graphql/src/index.js +7 -6
  97. package/packages/datadog-plugin-graphql/src/resolve.js +2 -2
  98. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  99. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  100. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  101. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  102. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  103. package/packages/datadog-plugin-http/src/client.js +18 -7
  104. package/packages/datadog-plugin-http2/src/client.js +20 -20
  105. package/packages/datadog-plugin-iovalkey/src/index.js +18 -0
  106. package/packages/datadog-plugin-jest/src/index.js +36 -28
  107. package/packages/datadog-plugin-jest/src/util.js +8 -8
  108. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  109. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  110. package/packages/datadog-plugin-kafkajs/src/producer.js +15 -7
  111. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  112. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  113. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  114. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  115. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  116. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  117. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  118. package/packages/datadog-plugin-mocha/src/index.js +88 -48
  119. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
  120. package/packages/datadog-plugin-mysql/src/index.js +11 -9
  121. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  122. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  123. package/packages/datadog-plugin-next/src/index.js +6 -5
  124. package/packages/datadog-plugin-openai/src/services.js +6 -10
  125. package/packages/datadog-plugin-openai/src/tracing.js +10 -14
  126. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  127. package/packages/datadog-plugin-playwright/src/index.js +48 -22
  128. package/packages/datadog-plugin-redis/src/index.js +9 -4
  129. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  130. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  131. package/packages/datadog-plugin-router/src/index.js +1 -1
  132. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  133. package/packages/datadog-plugin-vitest/src/index.js +99 -72
  134. package/packages/datadog-shimmer/src/shimmer.js +163 -36
  135. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  136. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  137. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  138. package/packages/dd-trace/src/appsec/graphql.js +2 -2
  139. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  140. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +1 -1
  141. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +1 -1
  142. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +4 -6
  143. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  144. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +4 -6
  145. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  146. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  147. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  148. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  149. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  150. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  151. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  152. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  153. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +6 -13
  154. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  155. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  156. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  157. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  158. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +1 -7
  159. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  160. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  161. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +5 -7
  162. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  163. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +6 -6
  164. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +1 -1
  165. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  166. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  167. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  168. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -24
  169. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  170. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  171. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  172. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  173. package/packages/dd-trace/src/appsec/index.js +15 -12
  174. package/packages/dd-trace/src/appsec/rasp/index.js +19 -17
  175. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  176. package/packages/dd-trace/src/appsec/rasp/utils.js +11 -6
  177. package/packages/dd-trace/src/appsec/reporter.js +233 -40
  178. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  179. package/packages/dd-trace/src/appsec/sdk/user_blocking.js +2 -2
  180. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  181. package/packages/dd-trace/src/appsec/telemetry/index.js +1 -2
  182. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -14
  183. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  184. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  185. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -8
  186. package/packages/dd-trace/src/azure_metadata.js +2 -7
  187. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +1 -1
  188. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  189. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
  190. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  191. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
  192. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
  193. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +1 -1
  194. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  195. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +2 -2
  196. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  197. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +1 -1
  198. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +1 -1
  199. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +8 -5
  200. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  201. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +1 -1
  202. package/packages/dd-trace/src/config.js +82 -51
  203. package/packages/dd-trace/src/config_stable.js +3 -3
  204. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  205. package/packages/dd-trace/src/datastreams/fnv.js +1 -1
  206. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  207. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  208. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +1 -1
  209. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  210. package/packages/dd-trace/src/datastreams/size.js +1 -1
  211. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +131 -72
  212. package/packages/dd-trace/src/debugger/devtools_client/condition.js +6 -8
  213. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  214. package/packages/dd-trace/src/debugger/devtools_client/index.js +17 -27
  215. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  216. package/packages/dd-trace/src/debugger/devtools_client/send.js +8 -7
  217. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +16 -8
  218. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +8 -10
  219. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +3 -3
  220. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  221. package/packages/dd-trace/src/debugger/devtools_client/state.js +31 -4
  222. package/packages/dd-trace/src/dogstatsd.js +7 -4
  223. package/packages/dd-trace/src/encode/0.4.js +9 -9
  224. package/packages/dd-trace/src/encode/0.5.js +1 -1
  225. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -3
  226. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  227. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  228. package/packages/dd-trace/src/exporter.js +6 -6
  229. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  230. package/packages/dd-trace/src/exporters/common/docker.js +1 -1
  231. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  232. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  233. package/packages/dd-trace/src/exporters/common/util.js +1 -1
  234. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  235. package/packages/dd-trace/src/flare/file.js +1 -5
  236. package/packages/dd-trace/src/format.js +1 -1
  237. package/packages/dd-trace/src/git_properties.js +1 -1
  238. package/packages/dd-trace/src/id.js +12 -6
  239. package/packages/dd-trace/src/iitm.js +10 -22
  240. package/packages/dd-trace/src/lambda/handler.js +6 -6
  241. package/packages/dd-trace/src/lambda/runtime/patch.js +4 -4
  242. package/packages/dd-trace/src/lambda/runtime/ritm.js +1 -1
  243. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  244. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  245. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  246. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  247. package/packages/dd-trace/src/llmobs/plugins/openai.js +1 -1
  248. package/packages/dd-trace/src/llmobs/sdk.js +2 -2
  249. package/packages/dd-trace/src/llmobs/tagger.js +113 -99
  250. package/packages/dd-trace/src/llmobs/util.js +9 -9
  251. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  252. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  253. package/packages/dd-trace/src/log/index.js +4 -4
  254. package/packages/dd-trace/src/log/log.js +1 -1
  255. package/packages/dd-trace/src/log/writer.js +2 -2
  256. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  257. package/packages/dd-trace/src/msgpack/encoder.js +28 -28
  258. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  259. package/packages/dd-trace/src/noop/span.js +3 -5
  260. package/packages/dd-trace/src/noop/tracer.js +1 -2
  261. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  262. package/packages/dd-trace/src/opentelemetry/tracer.js +6 -5
  263. package/packages/dd-trace/src/opentracing/propagation/log.js +6 -8
  264. package/packages/dd-trace/src/opentracing/propagation/text_map.js +27 -23
  265. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  266. package/packages/dd-trace/src/opentracing/span.js +9 -14
  267. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  268. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  269. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  270. package/packages/dd-trace/src/pkg.js +1 -1
  271. package/packages/dd-trace/src/plugins/ci_plugin.js +62 -10
  272. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  273. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  274. package/packages/dd-trace/src/plugins/index.js +1 -1
  275. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  276. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  277. package/packages/dd-trace/src/plugins/producer.js +2 -2
  278. package/packages/dd-trace/src/plugins/storage.js +2 -2
  279. package/packages/dd-trace/src/plugins/util/ci.js +23 -15
  280. package/packages/dd-trace/src/plugins/util/git.js +165 -11
  281. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  282. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  283. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  284. package/packages/dd-trace/src/plugins/util/stacktrace.js +1 -1
  285. package/packages/dd-trace/src/plugins/util/test.js +311 -48
  286. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  287. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  288. package/packages/dd-trace/src/plugins/util/user-provided-git.js +12 -3
  289. package/packages/dd-trace/src/plugins/util/web.js +5 -4
  290. package/packages/dd-trace/src/priority_sampler.js +22 -22
  291. package/packages/dd-trace/src/profiling/config.js +44 -8
  292. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +5 -5
  293. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  294. package/packages/dd-trace/src/profiling/profiler.js +37 -2
  295. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  296. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  297. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  298. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  299. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  300. package/packages/dd-trace/src/profiling/tagger.js +3 -5
  301. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  302. package/packages/dd-trace/src/proxy.js +7 -13
  303. package/packages/dd-trace/src/random_sampler.js +40 -0
  304. package/packages/dd-trace/src/rate_limiter.js +4 -4
  305. package/packages/dd-trace/src/remote_config/index.js +3 -7
  306. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  307. package/packages/dd-trace/src/require-package-json.js +1 -1
  308. package/packages/dd-trace/src/ritm.js +4 -4
  309. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +2 -2
  310. package/packages/dd-trace/src/sampler.js +33 -4
  311. package/packages/dd-trace/src/sampling_rule.js +12 -3
  312. package/packages/dd-trace/src/scope.js +1 -1
  313. package/packages/dd-trace/src/serverless.js +0 -48
  314. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  315. package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +8 -0
  316. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  317. package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
  318. package/packages/dd-trace/src/span_processor.js +3 -3
  319. package/packages/dd-trace/src/span_sampler.js +4 -1
  320. package/packages/dd-trace/src/standalone/tracesource.js +1 -1
  321. package/packages/dd-trace/src/startup-log.js +2 -2
  322. package/packages/dd-trace/src/telemetry/dependencies.js +4 -4
  323. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  324. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  325. package/packages/dd-trace/src/telemetry/send-data.js +1 -1
  326. package/packages/dd-trace/src/telemetry/telemetry.js +23 -24
  327. package/packages/dd-trace/src/util.js +1 -1
  328. package/version.js +1 -0
  329. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  330. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  331. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  332. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
@@ -238,16 +238,14 @@ function toArrayBuffer (type, bytes, maxLength) {
238
238
 
239
239
  const size = bytes.length
240
240
 
241
- if (size > maxLength) {
242
- return {
243
- type,
244
- value: arrayBufferToString(bytes, maxLength),
245
- truncated: true,
246
- size: bytes.length
247
- }
248
- } else {
249
- return { type, value: arrayBufferToString(bytes, size) }
250
- }
241
+ return size > maxLength
242
+ ? {
243
+ type,
244
+ value: arrayBufferToString(bytes, maxLength),
245
+ truncated: true,
246
+ size: bytes.length
247
+ }
248
+ : { type, value: arrayBufferToString(bytes, size) }
251
249
  }
252
250
 
253
251
  function arrayBufferToString (bytes, size) {
@@ -2,8 +2,8 @@
2
2
 
3
3
  const config = require('../config')
4
4
 
5
- const excludedIdentifiers = config.dynamicInstrumentation.redactionExcludedIdentifiers
6
- .map((name) => normalizeName(name))
5
+ const excludedIdentifiers = new Set(config.dynamicInstrumentation.redactionExcludedIdentifiers
6
+ .map((name) => normalizeName(name)))
7
7
 
8
8
  const REDACTED_IDENTIFIERS = new Set(
9
9
  [
@@ -98,7 +98,7 @@ const REDACTED_IDENTIFIERS = new Set(
98
98
  ...config.dynamicInstrumentation.redactedIdentifiers
99
99
  ]
100
100
  .map((name) => normalizeName(name))
101
- .filter((name) => excludedIdentifiers.includes(name) === false)
101
+ .filter((name) => excludedIdentifiers.has(name) === false)
102
102
  )
103
103
 
104
104
  function normalizeName (name, isSymbol) {
@@ -4,7 +4,6 @@ const { join, dirname } = require('path')
4
4
  const { readFileSync } = require('fs')
5
5
  const { readFile } = require('fs/promises')
6
6
  const { SourceMapConsumer } = require('source-map')
7
- const { NODE_MAJOR } = require('../../../../../version')
8
7
 
9
8
  const cache = new Map()
10
9
  let cacheTimer = null
@@ -35,14 +34,7 @@ const self = module.exports = {
35
34
  }
36
35
  }
37
36
 
38
- // The version check inside this function is to guard against a bug Node.js version 18, in which calls to `setTimeout`
39
- // might throw an uncatchable error from within `AsyncLocalStorage._propagate` with the following error message:
40
- //
41
- // TypeError: Cannot read properties of undefined (reading 'Symbol(kResourceStore)')
42
- //
43
- // Source: https://github.com/nodejs/node/blob/v18.20.6/lib/async_hooks.js#L312
44
37
  function cacheIt (key, value) {
45
- if (NODE_MAJOR < 20) return value
46
38
  cacheTime = Date.now()
47
39
  setCacheTTL()
48
40
  cache.set(key, value)
@@ -54,7 +46,7 @@ function setCacheTTL () {
54
46
 
55
47
  cacheTimer = setTimeout(function () {
56
48
  cacheTimer = null
57
- if (Date.now() - cacheTime < 2_500) {
49
+ if (Date.now() - cacheTime < 2500) {
58
50
  // If the last cache entry was added recently, keep the cache alive
59
51
  setCacheTTL()
60
52
  } else {
@@ -62,7 +54,7 @@ function setCacheTTL () {
62
54
  // Clear cache a few seconds after it was last used
63
55
  cache.clear()
64
56
  }
65
- }, 5_000).unref()
57
+ }, 5000).unref()
66
58
  }
67
59
 
68
60
  function loadInlineSourceMap (data) {
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  const { join, dirname } = require('path')
4
+ const { normalize } = require('source-map/lib/util')
4
5
  const { loadSourceMapSync } = require('./source-maps')
5
6
  const session = require('./session')
6
7
  const log = require('../../log')
@@ -9,12 +10,16 @@ const WINDOWS_DRIVE_LETTER_REGEX = /[a-zA-Z]/
9
10
 
10
11
  const loadedScripts = []
11
12
  const scriptUrls = new Map()
13
+ let reEvaluateProbesTimer = null
12
14
 
13
15
  module.exports = {
14
16
  locationToBreakpoint: new Map(),
15
17
  breakpointToProbes: new Map(),
16
18
  probeToLocation: new Map(),
17
19
 
20
+ _loadedScripts: loadedScripts, // Only exposed for testing
21
+ _scriptUrls: scriptUrls, // Only exposed for testing
22
+
18
23
  /**
19
24
  * Find the script to inspect based on a partial or absolute path. Handles both Windows and POSIX paths.
20
25
  *
@@ -88,13 +93,17 @@ module.exports = {
88
93
  }
89
94
  }
90
95
 
91
- return maxMatchLength !== -1 ? bestMatch : null
96
+ return maxMatchLength === -1 ? null : bestMatch
92
97
  },
93
98
 
94
99
  getStackFromCallFrames (callFrames) {
95
100
  return callFrames.map((frame) => {
101
+ // TODO: Possible race condition: If the breakpoint is in the process of being removed, and this is the last
102
+ // breakpoint, it will also stop the debugging session, which in turn will clear the state, which means clearing
103
+ // the `scriptUrls` map. That might result in this the `scriptUrls.get` call above returning `undefined`, which
104
+ // will throw when `startsWith` is called on it.
96
105
  let fileName = scriptUrls.get(frame.location.scriptId)
97
- if (fileName.startsWith('file://')) fileName = fileName.substr(7) // TODO: This might not be required
106
+ if (fileName.startsWith('file://')) fileName = fileName.slice(7) // TODO: This might not be required
98
107
  return {
99
108
  fileName,
100
109
  function: frame.functionName,
@@ -102,6 +111,14 @@ module.exports = {
102
111
  columnNumber: frame.location.columnNumber + 1 // Beware! columnNumber is zero-indexed
103
112
  }
104
113
  })
114
+ },
115
+
116
+ // The maps locationToBreakpoint, breakpointToProbes, and probeToLocation are always updated when breakpoints are
117
+ // removed. Therefore they do not need to get manually cleared. Only the state internal to this file needs to be
118
+ // cleared.
119
+ clearState () {
120
+ loadedScripts.length = 0
121
+ scriptUrls.clear()
105
122
  }
106
123
  }
107
124
 
@@ -112,7 +129,6 @@ module.exports = {
112
129
  // Unknown params.url values:
113
130
  // - `structured-stack` - Not sure what this is, but should just be ignored
114
131
  // - `` - Not sure what this is, but should just be ignored
115
- // TODO: Event fired for all files, every time debugger is enabled. So when we disable it, we need to reset the state
116
132
  session.on('Debugger.scriptParsed', ({ params }) => {
117
133
  scriptUrls.set(params.scriptId, params.url)
118
134
  if (params.url.startsWith('file:')) {
@@ -136,11 +152,22 @@ session.on('Debugger.scriptParsed', ({ params }) => {
136
152
  ...params,
137
153
  sourceUrl: params.url,
138
154
  url: new URL(join(dir, source), 'file:').href,
139
- source
155
+ // The source url provided by V8 unfortunately doesn't always match the source url used internally in the
156
+ // `source-map` dependency. Both read the same source maps, but the `source-map` dependency iterates over all
157
+ // the `sources` and normalize them using an internal `normalize` function. If these two strings don't match,
158
+ // the `source-map` dependency will not be able to find the generated position. Below we use the same
159
+ // internal `normalize` function, to ensure compatibility.
160
+ // TODO: Consider swapping out the `source-map` dependency for something better so we don't have to do this.
161
+ source: normalize(source)
140
162
  })
141
163
  }
142
164
  } else {
143
165
  loadedScripts.push(params)
144
166
  }
167
+
168
+ clearTimeout(reEvaluateProbesTimer)
169
+ reEvaluateProbesTimer = setTimeout(() => {
170
+ session.emit('scriptLoadingStabilized')
171
+ }, 500)
145
172
  }
146
173
  })
@@ -94,13 +94,13 @@ class DogStatsDClient {
94
94
  }
95
95
 
96
96
  _sendUdp (queue) {
97
- if (this._family !== 0) {
98
- this._sendUdpFromQueue(queue, this._host, this._family)
99
- } else {
97
+ if (this._family === 0) {
100
98
  lookup(this._host, (err, address, family) => {
101
99
  if (err) return log.error('DogStatsDClient: Host not found', err)
102
100
  this._sendUdpFromQueue(queue, address, family)
103
101
  })
102
+ } else {
103
+ this._sendUdpFromQueue(queue, this._host, this._family)
104
104
  }
105
105
  }
106
106
 
@@ -116,7 +116,8 @@ class DogStatsDClient {
116
116
  _add (stat, value, type, tags) {
117
117
  const message = `${this._prefix + stat}:${value}|${type}`
118
118
 
119
- tags = tags ? this._tags.concat(tags) : this._tags
119
+ // Don't manipulate this._tags as it is still used
120
+ tags = tags ? [...this._tags, ...tags] : this._tags
120
121
 
121
122
  if (tags.length > 0) {
122
123
  this._write(`${message}|#${tags.join(',')}\n`)
@@ -392,6 +393,8 @@ class CustomMetrics {
392
393
  * These are translated into [ 'tagName:tagValue' ] for internal use
393
394
  */
394
395
  static tagTranslator (objTags) {
396
+ if (Array.isArray(objTags)) return objTags
397
+
395
398
  const arrTags = []
396
399
 
397
400
  if (!objTags) return arrTags
@@ -13,11 +13,11 @@ function formatSpan (span, config) {
13
13
  span = normalizeSpan(truncateSpan(span, false))
14
14
  if (span.span_events) {
15
15
  // ensure span events are encoded as tags if agent doesn't support native top level span events
16
- if (!config?.trace?.nativeSpanEvents) {
16
+ if (config?.trace?.nativeSpanEvents) {
17
+ formatSpanEvents(span)
18
+ } else {
17
19
  span.meta.events = JSON.stringify(span.span_events)
18
20
  delete span.span_events
19
- } else {
20
- formatSpanEvents(span)
21
21
  }
22
22
  }
23
23
  return span
@@ -175,7 +175,7 @@ class AgentEncoder {
175
175
 
176
176
  id = id.toArray()
177
177
 
178
- bytes.buffer[offset] = 0xcf
178
+ bytes.buffer[offset] = 0xCF
179
179
  bytes.buffer[offset + 1] = id[0]
180
180
  bytes.buffer[offset + 2] = id[1]
181
181
  bytes.buffer[offset + 3] = id[2]
@@ -266,7 +266,7 @@ class AgentEncoder {
266
266
 
267
267
  // we should do it after encoding the object to know the real length
268
268
  const length = bytes.length - offset - prefixLength
269
- bytes.buffer[offset] = 0xc6
269
+ bytes.buffer[offset] = 0xC6
270
270
  bytes.buffer[offset + 1] = length >> 24
271
271
  bytes.buffer[offset + 2] = length >> 16
272
272
  bytes.buffer[offset + 3] = length >> 8
@@ -326,7 +326,7 @@ class AgentEncoder {
326
326
  }
327
327
 
328
328
  _writeArrayPrefix (buffer, offset, count) {
329
- buffer[offset++] = 0xdd
329
+ buffer[offset++] = 0xDD
330
330
  buffer.writeUInt32BE(count, offset)
331
331
 
332
332
  return offset + 4
@@ -351,10 +351,10 @@ function formatSpanEvents (span) {
351
351
  if (spanEvent.attributes) {
352
352
  for (const [key, value] of Object.entries(spanEvent.attributes)) {
353
353
  const newValue = convertSpanEventAttributeValues(key, value)
354
- if (newValue !== undefined) {
355
- spanEvent.attributes[key] = newValue
356
- } else {
354
+ if (newValue === undefined) {
357
355
  delete spanEvent.attributes[key] // delete from attributes if undefined
356
+ } else {
357
+ spanEvent.attributes[key] = newValue
358
358
  }
359
359
  }
360
360
  if (Object.keys(spanEvent.attributes).length === 0) {
@@ -4,7 +4,7 @@ const { truncateSpan, normalizeSpan } = require('./tags-processors')
4
4
  const { AgentEncoder: BaseEncoder } = require('./0.4')
5
5
 
6
6
  const ARRAY_OF_TWO = 0x92
7
- const ARRAY_OF_TWELVE = 0x9c
7
+ const ARRAY_OF_TWELVE = 0x9C
8
8
 
9
9
  function formatSpan (span) {
10
10
  span = normalizeSpan(truncateSpan(span, false))
@@ -11,7 +11,7 @@ const {
11
11
  } = require('../ci-visibility/telemetry')
12
12
 
13
13
  const ENCODING_VERSION = 1
14
- const ALLOWED_CONTENT_TYPES = ['test_session_end', 'test_module_end', 'test_suite_end', 'test']
14
+ const ALLOWED_CONTENT_TYPES = new Set(['test_session_end', 'test_module_end', 'test_suite_end', 'test'])
15
15
 
16
16
  const TEST_SUITE_KEYS_LENGTH = 12
17
17
  const TEST_MODULE_KEYS_LENGTH = 11
@@ -26,7 +26,7 @@ function formatSpan (span) {
26
26
  encodingVersion = 2
27
27
  }
28
28
  return {
29
- type: ALLOWED_CONTENT_TYPES.includes(span.type) ? span.type : 'span',
29
+ type: ALLOWED_CONTENT_TYPES.has(span.type) ? span.type : 'span',
30
30
  version: encodingVersion,
31
31
  content: normalizeSpan(truncateSpan(span))
32
32
  }
@@ -292,7 +292,7 @@ class AgentlessCiVisibilityEncoder extends AgentEncoder {
292
292
  const eventsOffset = this._eventsOffset
293
293
  const eventsCount = this._eventCount
294
294
 
295
- bytes.buffer[eventsOffset] = 0xdd
295
+ bytes.buffer[eventsOffset] = 0xDD
296
296
  bytes.buffer[eventsOffset + 1] = eventsCount >> 24
297
297
  bytes.buffer[eventsOffset + 2] = eventsCount >> 16
298
298
  bytes.buffer[eventsOffset + 3] = eventsCount >> 8
@@ -92,7 +92,7 @@ class CoverageCIVisibilityEncoder extends AgentEncoder {
92
92
  const coveragesCount = this._coveragesCount
93
93
 
94
94
  // update with number of coverages
95
- bytes.buffer[coveragesOffset] = 0xdd
95
+ bytes.buffer[coveragesOffset] = 0xDD
96
96
  bytes.buffer[coveragesOffset + 1] = coveragesCount >> 24
97
97
  bytes.buffer[coveragesOffset + 2] = coveragesCount >> 16
98
98
  bytes.buffer[coveragesOffset + 3] = coveragesCount >> 8
@@ -6,7 +6,7 @@ const MAX_RESOURCE_NAME_LENGTH = 5000
6
6
  // MAX_META_KEY_LENGTH the maximum length of metadata key
7
7
  const MAX_META_KEY_LENGTH = 200
8
8
  // MAX_META_VALUE_LENGTH the maximum length of metadata value
9
- const MAX_META_VALUE_LENGTH = 25000
9
+ const MAX_META_VALUE_LENGTH = 25_000
10
10
  // MAX_METRIC_KEY_LENGTH the maximum length of a metric name key
11
11
  const MAX_METRIC_KEY_LENGTH = MAX_META_KEY_LENGTH
12
12
 
@@ -4,10 +4,7 @@ const exporters = require('../../../ext/exporters')
4
4
  const fs = require('fs')
5
5
  const constants = require('./constants')
6
6
 
7
- module.exports = name => {
8
- const inAWSLambda = process.env.AWS_LAMBDA_FUNCTION_NAME !== undefined
9
- const usingLambdaExtension = inAWSLambda && fs.existsSync(constants.DATADOG_LAMBDA_EXTENSION_PATH)
10
-
7
+ module.exports = function getExporter (name) {
11
8
  switch (name) {
12
9
  case exporters.LOG:
13
10
  return require('./exporters/log')
@@ -22,7 +19,10 @@ module.exports = name => {
22
19
  case exporters.MOCHA_WORKER:
23
20
  case exporters.PLAYWRIGHT_WORKER:
24
21
  return require('./ci-visibility/exporters/test-worker')
25
- default:
26
- return inAWSLambda && !usingLambdaExtension ? require('./exporters/log') : require('./exporters/agent')
22
+ default: {
23
+ const inAWSLambda = process.env.AWS_LAMBDA_FUNCTION_NAME !== undefined
24
+ const usingLambdaExtension = inAWSLambda && fs.existsSync(constants.DATADOG_LAMBDA_EXTENSION_PATH)
25
+ return require(inAWSLambda && !usingLambdaExtension ? './exporters/log' : './exporters/agent')
26
+ }
27
27
  }
28
28
  }
@@ -69,11 +69,7 @@ function setHeader (headers, key, value) {
69
69
  }
70
70
 
71
71
  function getEncoder (protocolVersion) {
72
- if (protocolVersion === '0.5') {
73
- return require('../../encode/0.5').AgentEncoder
74
- } else {
75
- return require('../../encode/0.4').AgentEncoder
76
- }
72
+ return require(`../../encode/${protocolVersion === '0.5' ? '0.5' : '0.4'}`).AgentEncoder
77
73
  }
78
74
 
79
75
  function makeRequest (version, data, count, url, headers, lookup, needsStartupLog, cb) {
@@ -9,7 +9,7 @@ const { DD_EXTERNAL_ENV } = process.env
9
9
  const uuidSource =
10
10
  '[0-9a-f]{8}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{4}[-_][0-9a-f]{12}|[0-9a-f]{8}(?:-[0-9a-f]{4}){4}$'
11
11
  const containerSource = '[0-9a-f]{64}'
12
- const taskSource = '[0-9a-f]{32}-\\d+'
12
+ const taskSource = String.raw`[0-9a-f]{32}-\d+`
13
13
  const lineReg = /^(\d+):([^:]*):(.+)$/m
14
14
  const entityReg = new RegExp(`.*(${uuidSource}|${containerSource}|${taskSource})(?:\\.scope)?$`, 'm')
15
15
 
@@ -38,10 +38,12 @@ class FormData extends Readable {
38
38
  }
39
39
 
40
40
  _appendFile (key, value, { filename, contentType = 'application/octet-stream' }) {
41
- this._data.push(`Content-Disposition: form-data; name="${key}"; filename="${filename}"\r\n`)
42
- this._data.push(`Content-Type: ${contentType}\r\n\r\n`)
43
- this._data.push(value)
44
- this._data.push('\r\n')
41
+ this._data.push(
42
+ `Content-Disposition: form-data; name="${key}"; filename="${filename}"\r\n`,
43
+ `Content-Type: ${contentType}\r\n\r\n`,
44
+ value,
45
+ '\r\n'
46
+ )
45
47
  }
46
48
 
47
49
  _read () {
@@ -100,7 +100,7 @@ function request (data, options, callback) {
100
100
  options.url || options.hostname || `http://localhost:${options.port}`
101
101
  ).href
102
102
  errorMessage = `Error from ${fullUrl}: ${res.statusCode} ${http.STATUS_CODES[res.statusCode]}.`
103
- } catch (e) {
103
+ } catch {
104
104
  // ignore error
105
105
  }
106
106
  const responseData = buffer.toString()
@@ -1,7 +1,7 @@
1
1
  function safeJSONStringify (value) {
2
2
  return JSON.stringify(
3
3
  value,
4
- (key, value) => key !== 'dd-api-key' ? value : undefined,
4
+ (key, value) => key === 'dd-api-key' ? undefined : value,
5
5
  process.env.DD_TRACE_BEAUTIFUL_LOGS ? 2 : undefined
6
6
  )
7
7
  }
@@ -5,7 +5,7 @@ const https = require('https')
5
5
  class ExternalLogger {
6
6
  // Note: these attribute names match the corresponding entry in the JSON payload.
7
7
  constructor ({
8
- ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval = 10000, timeout = 2000, limit = 1000
8
+ ddsource, hostname, service, apiKey, site = 'datadoghq.com', interval = 10_000, timeout = 2000, limit = 1000
9
9
  }) {
10
10
  this.enabled = !!apiKey
11
11
 
@@ -128,10 +128,10 @@ class ExternalLogger {
128
128
  }
129
129
 
130
130
  class NoopExternalLogger {
131
- log () { }
132
- enqueue () { }
133
- shutdown () { }
134
- flush () { }
131
+ log () {}
132
+ enqueue () {}
133
+ shutdown () {}
134
+ flush () {}
135
135
  }
136
136
 
137
137
  module.exports.ExternalLogger = ExternalLogger
@@ -22,11 +22,7 @@ class FlareFile extends Writable {
22
22
 
23
23
  this._reserve(length)
24
24
 
25
- if (Buffer.isBuffer(chunk)) {
26
- this.length += chunk.copy(this._buffer, this.length)
27
- } else {
28
- this.length += this._buffer.write(chunk, encoding)
29
- }
25
+ this.length += Buffer.isBuffer(chunk) ? chunk.copy(this._buffer, this.length) : this._buffer.write(chunk, encoding)
30
26
 
31
27
  callback()
32
28
  }
@@ -224,7 +224,7 @@ function addTag (meta, metrics, key, value, nested) {
224
224
  meta[key] = value
225
225
  break
226
226
  case 'number':
227
- if (isNaN(value)) break
227
+ if (Number.isNaN(value)) break
228
228
  metrics[key] = value
229
229
  break
230
230
  case 'boolean':
@@ -9,7 +9,7 @@ function removeUserSensitiveInfo (repositoryUrl) {
9
9
  return `${parsedUrl.origin}${parsedUrl.pathname}`
10
10
  }
11
11
  return repositoryUrl
12
- } catch (e) {
12
+ } catch {
13
13
  // if protocol isn't https, no password will be used
14
14
  return repositoryUrl
15
15
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { randomFillSync } = require('crypto')
4
4
 
5
- const UINT_MAX = 4294967296
5
+ const UINT_MAX = 4_294_967_296
6
6
 
7
7
  const data = new Uint8Array(8 * 8192)
8
8
  const zeroId = new Uint8Array(8)
@@ -26,6 +26,10 @@ class Identifier {
26
26
  : toNumberString(this._buffer, radix)
27
27
  }
28
28
 
29
+ toBigInt () {
30
+ return Buffer.from(this._buffer).readBigUInt64BE(0)
31
+ }
32
+
29
33
  toBuffer () {
30
34
  return this._buffer
31
35
  }
@@ -61,12 +65,12 @@ function createBuffer (value) {
61
65
 
62
66
  const size = Math.ceil(value.length / 16) * 16
63
67
  const bytes = size / 2
64
- const buffer = new Array(bytes)
68
+ const buffer = []
65
69
 
66
70
  value = value.padStart(size, '0')
67
71
 
68
72
  for (let i = 0; i < bytes; i++) {
69
- buffer[i] = parseInt(value.substring(i * 2, i * 2 + 2), 16)
73
+ buffer[i] = Number.parseInt(value.slice(i * 2, i * 2 + 2), 16)
70
74
  }
71
75
 
72
76
  return buffer
@@ -86,7 +90,7 @@ function fromString (str, raddix) {
86
90
  const sign = pos
87
91
 
88
92
  while (pos < len) {
89
- const chr = parseInt(str[pos++], raddix)
93
+ const chr = Number.parseInt(str[pos++], raddix)
90
94
 
91
95
  if (!(chr >= 0)) break // NaN
92
96
 
@@ -161,7 +165,7 @@ function pseudoRandom () {
161
165
 
162
166
  // Read a buffer to unsigned integer bytes.
163
167
  function readInt32 (buffer, offset) {
164
- return (buffer[offset + 0] * 16777216) +
168
+ return (buffer[offset + 0] * 16_777_216) +
165
169
  (buffer[offset + 1] << 16) +
166
170
  (buffer[offset + 2] << 8) +
167
171
  buffer[offset + 3]
@@ -178,4 +182,6 @@ function writeUInt32BE (buffer, value, offset) {
178
182
  buffer[0 + offset] = value & 255
179
183
  }
180
184
 
181
- module.exports = (value, radix) => new Identifier(value, radix)
185
+ module.exports = function createIdentifier (value, radix) {
186
+ return new Identifier(value, radix)
187
+ }
@@ -1,27 +1,15 @@
1
1
  'use strict'
2
2
 
3
- const satisfies = require('semifies')
4
- const logger = require('./log')
5
3
  const { addHook } = require('import-in-the-middle')
6
4
  const dc = require('dc-polyfill')
7
5
 
8
- if (satisfies(process.versions.node, '>=14.13.1')) {
9
- const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
10
- addHook((name, namespace) => {
11
- if (moduleLoadStartChannel.hasSubscribers) {
12
- moduleLoadStartChannel.publish({
13
- filename: name,
14
- module: namespace
15
- })
16
- }
17
- })
18
- module.exports = require('import-in-the-middle')
19
- } else {
20
- logger.warn('ESM is not fully supported by this version of Node.js, ' +
21
- 'so dd-trace will not intercept ESM loading.')
22
- module.exports = () => ({
23
- unhook: () => {}
24
- })
25
- module.exports.addHook = () => {}
26
- module.exports.removeHook = () => {}
27
- }
6
+ const moduleLoadStartChannel = dc.channel('dd-trace:moduleLoadStart')
7
+ addHook((name, namespace) => {
8
+ if (moduleLoadStartChannel.hasSubscribers) {
9
+ moduleLoadStartChannel.publish({
10
+ filename: name,
11
+ module: namespace
12
+ })
13
+ }
14
+ })
15
+ module.exports = require('import-in-the-middle')
@@ -25,11 +25,11 @@ let __lambdaTimeout
25
25
  function checkTimeout (context) {
26
26
  const remainingTimeInMillis = context.getRemainingTimeInMillis()
27
27
 
28
- let apmFlushDeadline = parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
28
+ let apmFlushDeadline = Number.parseInt(process.env.DD_APM_FLUSH_DEADLINE_MILLISECONDS) || 100
29
29
  apmFlushDeadline = apmFlushDeadline < 0 ? 100 : apmFlushDeadline
30
30
 
31
31
  __lambdaTimeout = setTimeout(() => {
32
- timeoutChannel.publish(undefined)
32
+ timeoutChannel.publish()
33
33
  }, remainingTimeInMillis - apmFlushDeadline)
34
34
  }
35
35
 
@@ -43,14 +43,14 @@ function checkTimeout (context) {
43
43
  */
44
44
  function crashFlush () {
45
45
  const activeSpan = tracer.scope().active()
46
- if (activeSpan !== null) {
46
+ if (activeSpan === null) {
47
+ log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
48
+ } else {
47
49
  const error = new ImpendingTimeout('Datadog detected an impending timeout')
48
50
  activeSpan.addTags({
49
51
  [ERROR_MESSAGE]: error.message,
50
52
  [ERROR_TYPE]: error.name
51
53
  })
52
- } else {
53
- log.debug('An impending timeout was reached, but no root span was found. No error will be tagged.')
54
54
  }
55
55
 
56
56
  tracer._processor.killAll()
@@ -70,7 +70,7 @@ function extractContext (args) {
70
70
  if (context === undefined || context.getRemainingTimeInMillis === undefined) {
71
71
  context = args.length > 2 ? args[2] : undefined
72
72
  if (context === undefined || context.getRemainingTimeInMillis === undefined) {
73
- throw Error('Could not extract context')
73
+ throw new Error('Could not extract context')
74
74
  }
75
75
  }
76
76
  return context
@@ -60,7 +60,10 @@ function patchLambdaHandler (lambdaHandler) {
60
60
  const lambdaTaskRoot = process.env.LAMBDA_TASK_ROOT
61
61
  const originalLambdaHandler = process.env.DD_LAMBDA_HANDLER
62
62
 
63
- if (originalLambdaHandler !== undefined) {
63
+ if (originalLambdaHandler === undefined) {
64
+ // Instrumentation is done manually.
65
+ addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
66
+ } else {
64
67
  const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
65
68
  const [_module, handlerPath] = _extractModuleNameAndHandlerPath(moduleAndHandler)
66
69
 
@@ -70,7 +73,4 @@ if (originalLambdaHandler !== undefined) {
70
73
  for (const lambdaFilePath of lambdaFilePaths) {
71
74
  addHook({ name: lambdaFilePath }, patchLambdaModule(handlerPath))
72
75
  }
73
- } else {
74
- // Instrumentation is done manually.
75
- addHook({ name: 'datadog-lambda-js' }, patchDatadogLambdaModule)
76
76
  }
@@ -31,7 +31,7 @@ const {
31
31
  */
32
32
  function _extractModuleRootAndHandler (fullHandler) {
33
33
  const handlerString = path.basename(fullHandler)
34
- const moduleRoot = fullHandler.substring(0, fullHandler.indexOf(handlerString))
34
+ const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
35
35
 
36
36
  return [moduleRoot, handlerString]
37
37
  }