dd-trace 5.102.0 → 5.103.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 (133) hide show
  1. package/ext/exporters.js +1 -0
  2. package/package.json +12 -11
  3. package/packages/datadog-esbuild/src/utils.js +2 -2
  4. package/packages/datadog-instrumentations/src/ai.js +1 -1
  5. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +32 -15
  6. package/packages/datadog-instrumentations/src/couchbase.js +69 -220
  7. package/packages/datadog-instrumentations/src/cucumber.js +1 -1
  8. package/packages/datadog-instrumentations/src/electron/preload.js +42 -0
  9. package/packages/datadog-instrumentations/src/electron.js +240 -0
  10. package/packages/datadog-instrumentations/src/fetch.js +5 -5
  11. package/packages/datadog-instrumentations/src/graphql.js +13 -12
  12. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +1 -1
  13. package/packages/datadog-instrumentations/src/helpers/hook.js +4 -1
  14. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  15. package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
  16. package/packages/datadog-instrumentations/src/helpers/kafka.js +41 -0
  17. package/packages/datadog-instrumentations/src/ioredis.js +16 -12
  18. package/packages/datadog-instrumentations/src/jest.js +351 -50
  19. package/packages/datadog-instrumentations/src/kafkajs.js +164 -173
  20. package/packages/datadog-instrumentations/src/mocha/main.js +73 -1
  21. package/packages/datadog-instrumentations/src/mongodb-core.js +33 -8
  22. package/packages/datadog-instrumentations/src/pg.js +24 -10
  23. package/packages/datadog-instrumentations/src/playwright.js +427 -55
  24. package/packages/datadog-instrumentations/src/redis.js +19 -10
  25. package/packages/datadog-plugin-apollo/src/gateway/request.js +1 -21
  26. package/packages/datadog-plugin-aws-sdk/src/base.js +18 -24
  27. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
  28. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -1
  29. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -1
  30. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
  31. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
  32. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
  33. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -2
  34. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -1
  35. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  36. package/packages/datadog-plugin-couchbase/src/index.js +58 -52
  37. package/packages/datadog-plugin-cucumber/src/index.js +1 -0
  38. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +214 -22
  39. package/packages/datadog-plugin-cypress/src/support.js +13 -1
  40. package/packages/datadog-plugin-electron/src/index.js +17 -0
  41. package/packages/datadog-plugin-electron/src/ipc.js +143 -0
  42. package/packages/datadog-plugin-electron/src/net.js +82 -0
  43. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +27 -18
  44. package/packages/datadog-plugin-graphql/src/execute.js +6 -28
  45. package/packages/datadog-plugin-graphql/src/resolve.js +30 -35
  46. package/packages/datadog-plugin-graphql/src/tools/signature.js +32 -7
  47. package/packages/datadog-plugin-graphql/src/tools/transforms.js +118 -100
  48. package/packages/datadog-plugin-graphql/src/utils.js +29 -0
  49. package/packages/datadog-plugin-grpc/src/client.js +6 -7
  50. package/packages/datadog-plugin-grpc/src/util.js +57 -22
  51. package/packages/datadog-plugin-http/src/client.js +2 -2
  52. package/packages/datadog-plugin-jest/src/index.js +92 -50
  53. package/packages/datadog-plugin-mocha/src/index.js +1 -0
  54. package/packages/datadog-plugin-mongodb-core/src/index.js +36 -70
  55. package/packages/datadog-plugin-mysql/src/index.js +1 -1
  56. package/packages/datadog-plugin-openai/src/services.js +2 -1
  57. package/packages/datadog-plugin-pg/src/index.js +3 -3
  58. package/packages/datadog-plugin-playwright/src/index.js +4 -0
  59. package/packages/datadog-plugin-redis/src/index.js +18 -23
  60. package/packages/dd-trace/src/aiguard/index.js +3 -1
  61. package/packages/dd-trace/src/aiguard/sdk.js +36 -30
  62. package/packages/dd-trace/src/aiguard/tags.js +20 -11
  63. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -2
  64. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
  65. package/packages/dd-trace/src/azure_metadata.js +17 -6
  66. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +4 -4
  67. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
  68. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +6 -4
  69. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +1 -1
  70. package/packages/dd-trace/src/config/defaults.js +3 -14
  71. package/packages/dd-trace/src/config/generated-config-types.d.ts +3 -1
  72. package/packages/dd-trace/src/config/helper.js +4 -0
  73. package/packages/dd-trace/src/config/index.js +2 -2
  74. package/packages/dd-trace/src/config/major-overrides.js +98 -0
  75. package/packages/dd-trace/src/config/parsers.js +7 -1
  76. package/packages/dd-trace/src/config/supported-configurations.json +51 -38
  77. package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
  78. package/packages/dd-trace/src/datastreams/manager.js +1 -1
  79. package/packages/dd-trace/src/datastreams/processor.js +2 -2
  80. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +2 -2
  81. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
  82. package/packages/dd-trace/src/debugger/devtools_client/state.js +2 -1
  83. package/packages/dd-trace/src/debugger/index.js +7 -7
  84. package/packages/dd-trace/src/dogstatsd.js +2 -2
  85. package/packages/dd-trace/src/encode/0.4.js +45 -54
  86. package/packages/dd-trace/src/encode/0.5.js +34 -3
  87. package/packages/dd-trace/src/encode/agentless-json.js +1 -1
  88. package/packages/dd-trace/src/exporter.js +2 -0
  89. package/packages/dd-trace/src/exporters/agent/index.js +2 -1
  90. package/packages/dd-trace/src/exporters/agentless/index.js +3 -2
  91. package/packages/dd-trace/src/exporters/agentless/writer.js +2 -2
  92. package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -1
  93. package/packages/dd-trace/src/exporters/common/request.js +1 -1
  94. package/packages/dd-trace/src/exporters/electron/index.js +49 -0
  95. package/packages/dd-trace/src/external-logger/src/index.js +2 -1
  96. package/packages/dd-trace/src/git_metadata.js +10 -8
  97. package/packages/dd-trace/src/lambda/handler-paths.js +52 -0
  98. package/packages/dd-trace/src/lambda/index.js +62 -14
  99. package/packages/dd-trace/src/lambda/runtime/patch.js +21 -46
  100. package/packages/dd-trace/src/llmobs/index.js +13 -2
  101. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +45 -15
  102. package/packages/dd-trace/src/llmobs/writers/base.js +2 -1
  103. package/packages/dd-trace/src/openfeature/writers/base.js +2 -1
  104. package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +2 -1
  105. package/packages/dd-trace/src/opentracing/propagation/text_map.js +20 -9
  106. package/packages/dd-trace/src/payload-tagging/config/index.js +2 -2
  107. package/packages/dd-trace/src/plugins/ci_plugin.js +49 -4
  108. package/packages/dd-trace/src/plugins/database.js +54 -12
  109. package/packages/dd-trace/src/plugins/index.js +1 -0
  110. package/packages/dd-trace/src/plugins/plugin.js +2 -4
  111. package/packages/dd-trace/src/plugins/util/ci.js +8 -8
  112. package/packages/dd-trace/src/plugins/util/git-cache.js +20 -18
  113. package/packages/dd-trace/src/plugins/util/stacktrace.js +2 -2
  114. package/packages/dd-trace/src/plugins/util/test.js +37 -5
  115. package/packages/dd-trace/src/plugins/util/user-provided-git.js +17 -15
  116. package/packages/dd-trace/src/priority_sampler.js +1 -1
  117. package/packages/dd-trace/src/profiling/profiler.js +1 -1
  118. package/packages/dd-trace/src/profiling/profilers/wall.js +1 -1
  119. package/packages/dd-trace/src/profiling/ssi-heuristics.js +1 -1
  120. package/packages/dd-trace/src/rate_limiter.js +1 -1
  121. package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
  122. package/packages/dd-trace/src/ritm.js +2 -1
  123. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -8
  124. package/packages/dd-trace/src/serverless.js +5 -2
  125. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +20 -0
  126. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
  127. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +20 -0
  128. package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
  129. package/packages/dd-trace/src/span_stats.js +1 -1
  130. package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
  131. package/packages/dd-trace/src/telemetry/endpoints.js +1 -1
  132. package/packages/dd-trace/src/telemetry/telemetry.js +2 -2
  133. package/packages/dd-trace/src/lambda/runtime/ritm.js +0 -133
@@ -8,14 +8,9 @@ const process = require('process')
8
8
  const { performance, PerformanceObserver, monitorEventLoopDelay } = require('perf_hooks')
9
9
  const { DogStatsDClient, MetricsAggregationClient } = require('../dogstatsd')
10
10
  const log = require('../log')
11
- const { getValueFromEnvSources } = require('../config/helper')
12
11
 
13
12
  const { NODE_MAJOR } = require('../../../../version')
14
13
  const processTags = require('../process-tags')
15
- // TODO: This environment variable may not be changed, since the agent expects a flush every ten seconds.
16
- // It is only a variable for testing. Think about alternatives.
17
- const DD_RUNTIME_METRICS_FLUSH_INTERVAL = getValueFromEnvSources('DD_RUNTIME_METRICS_FLUSH_INTERVAL') ?? '10000'
18
- const INTERVAL = Number.parseInt(DD_RUNTIME_METRICS_FLUSH_INTERVAL, 10)
19
14
 
20
15
  const eventLoopDelayResolution = 4
21
16
 
@@ -40,6 +35,8 @@ module.exports = {
40
35
  */
41
36
  start (config) {
42
37
  this.stop()
38
+ // The agent expects a flush every ten seconds, so this is for tests only.
39
+ const flushIntervalMs = config.DD_RUNTIME_METRICS_FLUSH_INTERVAL
43
40
  const clientConfig = DogStatsDClient.generateClientConfig(config)
44
41
 
45
42
  if (config.DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED) {
@@ -81,7 +78,7 @@ module.exports = {
81
78
  captureNativeMetrics(trackEventLoop, trackGc)
82
79
  captureCommonMetrics(trackEventLoop)
83
80
  client.flush()
84
- }, INTERVAL)
81
+ }, flushIntervalMs)
85
82
  } else {
86
83
  lastCpuUsage = process.cpuUsage()
87
84
 
@@ -103,10 +100,10 @@ module.exports = {
103
100
  captureEventLoopDelay()
104
101
  }
105
102
  client.flush()
106
- }, INTERVAL)
103
+ }, flushIntervalMs)
107
104
  }
108
105
 
109
- interval.unref()
106
+ interval.unref?.()
110
107
  },
111
108
 
112
109
  stop () {
@@ -17,10 +17,13 @@ function getIsGCPFunction () {
17
17
  /**
18
18
  * Enable GCP Pub/Sub PUSH subscription tracing for Cloud Run (K_SERVICE present).
19
19
  * PUSH: GCP sends HTTP POST requests to the service with message data in headers.
20
+ *
21
+ * Stays on the env helper to avoid closing the
22
+ * `config -> serverless -> config` import cycle.
20
23
  */
21
24
  function enableGCPPubSubPushSubscription () {
22
- const isGCPPubSubPushSubscriptionEnabled = getValueFromEnvSources('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED')
23
- return getEnvironmentVariable('K_SERVICE') !== undefined && !isFalse(isGCPPubSubPushSubscriptionEnabled)
25
+ return getEnvironmentVariable('K_SERVICE') !== undefined &&
26
+ !isFalse(getValueFromEnvSources('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED'))
24
27
  }
25
28
 
26
29
  function getIsAzureFunction () {
@@ -32,6 +32,14 @@ const messaging = {
32
32
  serviceName: ({ tracerService }) => `${tracerService}-azure-service-bus`,
33
33
  serviceSource: integrationSource('azure-service-bus'),
34
34
  },
35
+ 'electron:ipc:main:send': {
36
+ opName: () => 'electron.main.send',
37
+ serviceName: identityService,
38
+ },
39
+ 'electron:ipc:renderer:send': {
40
+ opName: () => 'electron.renderer.send',
41
+ serviceName: identityService,
42
+ },
35
43
  'google-cloud-pubsub': {
36
44
  opName: () => 'pubsub.request',
37
45
  serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
@@ -79,6 +87,18 @@ const messaging = {
79
87
  serviceName: amqpServiceName,
80
88
  serviceSource: integrationSource('amqp'),
81
89
  },
90
+ 'electron:ipc:main:receive': {
91
+ opName: () => 'electron.main.receive',
92
+ serviceName: identityService,
93
+ },
94
+ 'electron:ipc:main:handle': {
95
+ opName: () => 'electron.main.handle',
96
+ serviceName: identityService,
97
+ },
98
+ 'electron:ipc:renderer:receive': {
99
+ opName: () => 'electron.renderer.receive',
100
+ serviceName: identityService,
101
+ },
82
102
  'google-cloud-pubsub': {
83
103
  opName: () => 'pubsub.receive',
84
104
  serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
@@ -54,6 +54,10 @@ const web = {
54
54
  serviceName: httpPluginClientService,
55
55
  serviceSource: optionServiceSource,
56
56
  },
57
+ 'electron:net:request': {
58
+ opName: () => 'http.request',
59
+ serviceName: httpPluginClientService,
60
+ },
57
61
  },
58
62
  server: {
59
63
  'apollo.gateway.request': {
@@ -24,6 +24,14 @@ const messaging = {
24
24
  opName: () => 'azure.eventhubs.send',
25
25
  serviceName: identityService,
26
26
  },
27
+ 'electron:ipc:main:send': {
28
+ opName: () => 'electron.main.send',
29
+ serviceName: identityService,
30
+ },
31
+ 'electron:ipc:renderer:send': {
32
+ opName: () => 'electron.renderer.send',
33
+ serviceName: identityService,
34
+ },
27
35
  'google-cloud-pubsub': {
28
36
  opName: () => 'gcp.pubsub.send',
29
37
  serviceName: identityService,
@@ -53,6 +61,18 @@ const messaging = {
53
61
  consumer: {
54
62
  amqplib: amqpInbound,
55
63
  amqp10: amqpInbound,
64
+ 'electron:ipc:main:receive': {
65
+ opName: () => 'electron.main.receive',
66
+ serviceName: identityService,
67
+ },
68
+ 'electron:ipc:main:handle': {
69
+ opName: () => 'electron.main.handle',
70
+ serviceName: identityService,
71
+ },
72
+ 'electron:ipc:renderer:receive': {
73
+ opName: () => 'electron.renderer.receive',
74
+ serviceName: identityService,
75
+ },
56
76
  'google-cloud-pubsub': {
57
77
  opName: () => 'gcp.pubsub.process',
58
78
  serviceName: identityService,
@@ -48,6 +48,10 @@ const web = {
48
48
  opName: () => 'undici.request',
49
49
  serviceName: httpPluginClientService,
50
50
  },
51
+ 'electron:net:request': {
52
+ opName: () => 'http.client.request',
53
+ serviceName: httpPluginClientService,
54
+ },
51
55
  },
52
56
  server: {
53
57
  'apollo.gateway.request': {
@@ -165,7 +165,7 @@ class SpanStatsProcessor {
165
165
 
166
166
  if (this.enabled) {
167
167
  this.timer = setInterval(this.onInterval.bind(this), interval * 1e3)
168
- this.timer.unref()
168
+ this.timer.unref?.()
169
169
  }
170
170
  }
171
171
 
@@ -75,7 +75,7 @@ function waitAndSend (config, application, host) {
75
75
  if (savedDependenciesToSend.size > 0) {
76
76
  waitAndSend(config, application, host)
77
77
  }
78
- }).unref()
78
+ }).unref?.()
79
79
  }
80
80
 
81
81
  function loadAllTheLoadedModules () {
@@ -63,7 +63,7 @@ function scheduleFlush () {
63
63
  flushScheduled = true
64
64
  // this used to be setImmediate() instead, but it was making the system test flaky
65
65
  // don't ask me why
66
- setTimeout(flushAndSend).unref()
66
+ setTimeout(flushAndSend).unref?.()
67
67
  }
68
68
 
69
69
  /**
@@ -291,7 +291,7 @@ function heartbeat (config, application) {
291
291
 
292
292
  const { reqType, payload } = createPayload('app-heartbeat')
293
293
  sendData(config, application, host, reqType, payload, updateRetryData)
294
- }, config.telemetry.heartbeatInterval).unref()
294
+ }, config.telemetry.heartbeatInterval).unref?.()
295
295
  }
296
296
 
297
297
  /** @param {import('../config/config-base')} config */
@@ -307,7 +307,7 @@ function extendedHeartbeat (config) {
307
307
  heartbeatFailedDependencies = []
308
308
  }
309
309
  sendData(config, application, host, 'app-extended-heartbeat', appPayload)
310
- }, config.telemetry.extendedHeartbeatInterval).unref()
310
+ }, config.telemetry.extendedHeartbeatInterval).unref?.()
311
311
  }
312
312
 
313
313
  /**
@@ -1,133 +0,0 @@
1
- /**
2
- * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
- * Modifications copyright 2022 Datadog, Inc.
4
- *
5
- * Some functions are part of aws-lambda-nodejs-runtime-interface-client
6
- * https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/v2.1.0/src/utils/UserFunction.ts
7
- */
8
- 'use strict'
9
-
10
- const path = require('path')
11
-
12
- const log = require('../../log')
13
- const { getEnvironmentVariable, getValueFromEnvSources } = require('../../config/helper')
14
- const Hook = require('../../../../datadog-instrumentations/src/helpers/hook')
15
- const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
16
- const {
17
- filename,
18
- pathSepExpr,
19
- } = require('../../../../datadog-instrumentations/src/helpers/register')
20
-
21
- /**
22
- * Breaks the full handler string into two pieces: the module root
23
- * and the actual handler string.
24
- *
25
- * @param {string} fullHandler user's lambda handler, commonly stored in `DD_LAMBDA_HANDLER`.
26
- * @returns {string[]} an array containing the module root and the handler string.
27
- *
28
- * ```js
29
- * _extractModuleRootAndHandler('./api/src/index.nested.handler')
30
- * // => ['./api/src', 'index.nested.handler']
31
- * ```
32
- */
33
- function _extractModuleRootAndHandler (fullHandler) {
34
- const handlerString = path.basename(fullHandler)
35
- const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
36
-
37
- return [moduleRoot, handlerString]
38
- }
39
-
40
- /**
41
- * Splits the handler string into two pieces: the module name
42
- * and the path to the handler function.
43
- *
44
- * @param {string} handler a handler string containing the module and the handler path.
45
- * @returns {string[]} an array containing the module name and the handler path.
46
- *
47
- * ```js
48
- * _extractModuleNameAndHandlerPath('index.nested.handler')
49
- * // => ['index', 'nested.handler']
50
- * ```
51
- */
52
- function _extractModuleNameAndHandlerPath (handler) {
53
- const FUNCTION_EXPR = /^([^.]*)\.(.*)$/
54
- const match = handler.match(FUNCTION_EXPR)
55
- if (!match || match.length !== 3) {
56
- throw new Error(`Malformed handler name: ${handler}`)
57
- }
58
- return [match[1], match[2]] // [module, handler-path]
59
- }
60
-
61
- /**
62
- * Returns all possible paths of the files to be patched when required.
63
- *
64
- * @param {string} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
65
- * the root of the module of the Lambda handler, and the module name.
66
- * @returns the lambdaStylePath with appropiate extensions for the hook.
67
- */
68
- function _getLambdaFilePaths (lambdaStylePath) {
69
- return [
70
- `${lambdaStylePath}.js`,
71
- `${lambdaStylePath}.mjs`,
72
- `${lambdaStylePath}.cjs`,
73
- ]
74
- }
75
-
76
- /**
77
- * Register a hook for the Lambda handler to be executed when
78
- * the file is required.
79
- */
80
- const registerLambdaHook = () => {
81
- const lambdaTaskRoot = getEnvironmentVariable('LAMBDA_TASK_ROOT')
82
- const originalLambdaHandler = getValueFromEnvSources('DD_LAMBDA_HANDLER')
83
-
84
- if (originalLambdaHandler !== undefined && lambdaTaskRoot !== undefined) {
85
- const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
86
- const [_module] = _extractModuleNameAndHandlerPath(moduleAndHandler)
87
-
88
- const lambdaStylePath = path.resolve(lambdaTaskRoot, moduleRoot, _module)
89
- const lambdaFilePaths = _getLambdaFilePaths(lambdaStylePath)
90
-
91
- // TODO: Redo this like any other instrumentation.
92
- Hook(lambdaFilePaths, (moduleExports, name, _, moduleVersion) => {
93
- require('./patch')
94
-
95
- for (const { hook } of instrumentations[name]) {
96
- try {
97
- moduleExports = hook(moduleExports, moduleVersion) ?? moduleExports
98
- } catch (e) {
99
- log.error('Error executing lambda hook', e)
100
- }
101
- }
102
-
103
- return moduleExports
104
- })
105
- } else {
106
- const moduleToPatch = 'datadog-lambda-js'
107
- Hook([moduleToPatch], (moduleExports, moduleName, _, moduleVersion) => {
108
- moduleName = moduleName.replace(pathSepExpr, '/')
109
-
110
- require('./patch')
111
-
112
- for (const { file, hook } of instrumentations[moduleToPatch]) {
113
- const fullFilename = filename(moduleToPatch, file)
114
- if (moduleName === fullFilename) {
115
- try {
116
- moduleExports = hook(moduleExports, moduleVersion) ?? moduleExports
117
- } catch (e) {
118
- log.error('Error executing lambda hook for datadog-lambda-js', e)
119
- }
120
- }
121
- }
122
-
123
- return moduleExports
124
- })
125
- }
126
- }
127
-
128
- module.exports = {
129
- _extractModuleRootAndHandler,
130
- _extractModuleNameAndHandlerPath,
131
- _getLambdaFilePaths,
132
- registerLambdaHook,
133
- }