newrelic 13.2.0 → 13.3.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 (59) hide show
  1. package/NEWS.md +44 -0
  2. package/THIRD_PARTY_NOTICES.md +219 -8
  3. package/api.js +1 -1
  4. package/esm-loader.mjs +6 -1
  5. package/lib/instrumentation/@azure/functions.js +8 -46
  6. package/lib/instrumentation/core/http-outbound.js +26 -10
  7. package/lib/instrumentation/core/http.js +20 -118
  8. package/lib/instrumentations.js +0 -14
  9. package/lib/otel/logs/index.js +80 -0
  10. package/lib/otel/metrics/index.js +119 -0
  11. package/lib/otel/setup-signal.js +37 -0
  12. package/lib/otel/setup.js +15 -25
  13. package/lib/otel/{attr-reconciler.js → traces/attr-reconciler.js} +2 -2
  14. package/lib/otel/{exception-mapping.js → traces/exception-mapping.js} +1 -1
  15. package/lib/otel/traces/index.js +40 -0
  16. package/lib/otel/{rules.js → traces/rules.js} +1 -1
  17. package/lib/otel/{segment-synthesis.js → traces/segment-synthesis.js} +5 -4
  18. package/lib/otel/{segments → traces/segments}/consumer.js +4 -4
  19. package/lib/otel/{segments → traces/segments}/database.js +6 -6
  20. package/lib/otel/{segments → traces/segments}/http-external.js +11 -8
  21. package/lib/otel/traces/segments/index.js +22 -0
  22. package/lib/otel/{segments → traces/segments}/internal.js +1 -1
  23. package/lib/otel/{segments → traces/segments}/producer.js +2 -2
  24. package/lib/otel/{segments → traces/segments}/server.js +4 -4
  25. package/lib/otel/{segments → traces/segments}/utils.js +1 -1
  26. package/lib/otel/{span-processor.js → traces/span-processor.js} +13 -19
  27. package/lib/otel/{transformation-rules.json → traces/transformation-rules.json} +3 -2
  28. package/lib/otel/{utils.js → traces/utils.js} +2 -1
  29. package/lib/serverless/aws-lambda.js +7 -68
  30. package/lib/shim/webframework-shim/middleware.js +1 -1
  31. package/lib/shimmer.js +2 -2
  32. package/lib/subscriber-configs.js +2 -1
  33. package/lib/subscribers/base.js +30 -0
  34. package/lib/subscribers/elasticsearch/config.js +1 -0
  35. package/lib/subscribers/mcp-sdk/client-request.js +66 -0
  36. package/lib/subscribers/mcp-sdk/config.js +13 -75
  37. package/lib/subscribers/openai/base.js +21 -0
  38. package/lib/subscribers/openai/chat-responses.js +15 -0
  39. package/lib/subscribers/openai/chat.js +85 -0
  40. package/lib/subscribers/openai/client.js +31 -0
  41. package/lib/subscribers/openai/config.js +85 -0
  42. package/lib/subscribers/openai/embeddings.js +54 -0
  43. package/lib/subscribers/openai/utils.js +349 -0
  44. package/lib/transaction/index.js +157 -56
  45. package/lib/transaction/trace/segment.js +5 -2
  46. package/lib/util/urltils.js +158 -192
  47. package/lib/utilization/common.js +0 -6
  48. package/package.json +3 -4
  49. package/lib/instrumentation/openai.js +0 -482
  50. package/lib/otel/logs/bootstrap-logs.js +0 -84
  51. package/lib/otel/metrics/bootstrap-metrics.js +0 -117
  52. package/lib/otel/segments/index.js +0 -22
  53. package/lib/patch-module.js +0 -70
  54. package/lib/subscribers/mcp-sdk/client-prompt.js +0 -23
  55. package/lib/subscribers/mcp-sdk/client-resource.js +0 -24
  56. package/lib/subscribers/mcp-sdk/client-tool.js +0 -23
  57. package/lib/subscribers/mcp-sdk/client.js +0 -29
  58. /package/lib/otel/{constants.js → traces/constants.js} +0 -0
  59. /package/lib/otel/{sampler.js → traces/sampler.js} +0 -0
@@ -1,70 +0,0 @@
1
- /*
2
- * Copyright 2025 New Relic Corporation. All rights reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
-
6
- const { create } = require('@apm-js-collab/code-transformer')
7
- const Module = require('node:module')
8
- const parse = require('module-details-from-path')
9
- const getPackageVersion = require('./util/get-package-version')
10
- const logger = require('./logger').child({ component: 'ModulePatch' })
11
-
12
- class ModulePatch {
13
- constructor({ packages = new Set(), instrumentations = [] } = {}) {
14
- this.packages = packages
15
- this.instrumentator = create(instrumentations)
16
- this.transformers = new Map()
17
- this.resolve = Module._resolveFilename
18
- this.compile = Module.prototype._compile
19
- }
20
-
21
- /**
22
- * Patches the Node.js module class methods that are responsible for resolving filePaths and compiling code.
23
- * If a module is found that has an instrumentator, it will transform the code before compiling it
24
- * with tracing channel methods.
25
- */
26
- patch() {
27
- const self = this
28
- Module._resolveFilename = function wrappedResolveFileName() {
29
- const resolvedName = self.resolve.apply(this, arguments)
30
- const resolvedModule = parse(resolvedName)
31
- if (resolvedModule && self.packages.has(resolvedModule.name)) {
32
- const version = getPackageVersion(resolvedModule.basedir, resolvedModule.name)
33
- const transformer = self.instrumentator.getTransformer(resolvedModule.name, version, resolvedModule.path)
34
- if (transformer) {
35
- self.transformers.set(resolvedName, transformer)
36
- }
37
- }
38
- return resolvedName
39
- }
40
-
41
- Module.prototype._compile = function wrappedCompile(...args) {
42
- const [content, filename] = args
43
- if (self.transformers.has(filename)) {
44
- const transformer = self.transformers.get(filename)
45
- try {
46
- const transformedCode = transformer.transform(content, 'unknown')
47
- args[0] = transformedCode
48
- } catch (error) {
49
- logger.error({ error }, `Error transforming module ${filename}`)
50
- } finally {
51
- transformer.free()
52
- }
53
- }
54
-
55
- return self.compile.apply(this, args)
56
- }
57
- }
58
-
59
- /**
60
- * Clears all the transformers and restores the original Module methods that were wrapped.
61
- * **Note**: This is intended to be used in testing only.
62
- */
63
- unpatch() {
64
- this.transformers.clear()
65
- Module._resolveFilename = this.resolve
66
- Module.prototype._compile = this.compile
67
- }
68
- }
69
-
70
- module.exports = ModulePatch
@@ -1,23 +0,0 @@
1
- /*
2
- * Copyright 2025 New Relic Corporation. All rights reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
-
6
- 'use strict'
7
-
8
- const McpClientSubscriber = require('./client')
9
- const { MCP } = require('../../metrics/names')
10
-
11
- class McpClientPromptSubscriber extends McpClientSubscriber {
12
- constructor({ agent, logger }) {
13
- super({ agent, logger, channelName: 'nr_getPrompt' })
14
- }
15
-
16
- handler(data, ctx) {
17
- const promptName = data?.arguments?.[0]?.name
18
- this.segmentName = `${MCP.PROMPT}/getPrompt/${promptName}`
19
- return super.handler(ctx)
20
- }
21
- }
22
-
23
- module.exports = McpClientPromptSubscriber
@@ -1,24 +0,0 @@
1
- /*
2
- * Copyright 2025 New Relic Corporation. All rights reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
-
6
- 'use strict'
7
-
8
- const McpClientSubscriber = require('./client')
9
- const { MCP } = require('../../metrics/names')
10
-
11
- class McpClientResourceSubscriber extends McpClientSubscriber {
12
- constructor({ agent, logger }) {
13
- super({ agent, logger, channelName: 'nr_readResource' })
14
- }
15
-
16
- handler(data, ctx) {
17
- const uri = data?.arguments?.[0]?.uri
18
- const scheme = typeof uri === 'string' ? uri.split('://')[0] : undefined
19
- this.segmentName = `${MCP.RESOURCE}/readResource/${scheme}`
20
- return super.handler(ctx)
21
- }
22
- }
23
-
24
- module.exports = McpClientResourceSubscriber
@@ -1,23 +0,0 @@
1
- /*
2
- * Copyright 2025 New Relic Corporation. All rights reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
-
6
- 'use strict'
7
-
8
- const McpClientSubscriber = require('./client')
9
- const { MCP } = require('../../metrics/names')
10
-
11
- class McpClientToolSubscriber extends McpClientSubscriber {
12
- constructor({ agent, logger }) {
13
- super({ agent, logger, channelName: 'nr_callTool' })
14
- }
15
-
16
- handler(data, ctx) {
17
- const toolName = data?.arguments?.[0]?.name
18
- this.segmentName = `${MCP.TOOL}/callTool/${toolName}`
19
- return super.handler(ctx)
20
- }
21
- }
22
-
23
- module.exports = McpClientToolSubscriber
@@ -1,29 +0,0 @@
1
- /*
2
- * Copyright 2025 New Relic Corporation. All rights reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
-
6
- 'use strict'
7
-
8
- const Subscriber = require('../base')
9
-
10
- class McpClientSubscriber extends Subscriber {
11
- constructor({ agent, logger, channelName }) {
12
- super({ agent, logger, packageName: '@modelcontextprotocol/sdk', channelName })
13
- this.events = ['asyncEnd']
14
- this.segmentName = 'Unknown'
15
- }
16
-
17
- get enabled() {
18
- return super.enabled && this.config.ai_monitoring.enabled === true
19
- }
20
-
21
- handler(ctx) {
22
- return this.createSegment({
23
- name: this.segmentName,
24
- ctx
25
- })
26
- }
27
- }
28
-
29
- module.exports = McpClientSubscriber
File without changes
File without changes