newrelic 6.13.2 → 7.0.2

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 (48) hide show
  1. package/NEWS.md +80 -7
  2. package/README.md +14 -5
  3. package/ROADMAP_Node.md +1 -1
  4. package/THIRD_PARTY_NOTICES.md +10 -12
  5. package/api.js +0 -32
  6. package/bin/run-versioned-tests.sh +3 -8
  7. package/index.js +5 -3
  8. package/lib/agent.js +4 -0
  9. package/lib/collector/api.js +2 -2
  10. package/lib/collector/http-agents.js +1 -1
  11. package/lib/collector/remote-method.js +18 -12
  12. package/lib/config/attribute-filter.js +1 -1
  13. package/lib/config/default.js +3 -11
  14. package/lib/config/env.js +0 -1
  15. package/lib/config/index.js +2 -23
  16. package/lib/db/parse-sql.js +1 -1
  17. package/lib/db/query-parsers/sql.js +1 -1
  18. package/lib/errors/error-collector.js +6 -1
  19. package/lib/errors/index.js +14 -1
  20. package/lib/grpc/connection.js +28 -4
  21. package/lib/instrumentation/core/http.js +34 -82
  22. package/lib/instrumentation/fastify/spec-builders.js +1 -1
  23. package/lib/metrics/names.js +4 -1
  24. package/lib/parse-proc-cpuinfo.js +1 -1
  25. package/lib/proxy/grpc.js +1 -1
  26. package/lib/serverless/aws-lambda.js +9 -23
  27. package/lib/shim/promise-shim.js +1 -1
  28. package/lib/shim/shim.js +3 -3
  29. package/lib/shim/transaction-shim.js +1 -1
  30. package/lib/shim/webframework-shim.js +1 -1
  31. package/lib/shimmer.js +1 -1
  32. package/lib/spans/create-span-event-aggregator.js +1 -1
  33. package/lib/spans/span-context.js +18 -0
  34. package/lib/spans/span-event.js +13 -2
  35. package/lib/spans/span-streamer.js +24 -13
  36. package/lib/spans/streaming-span-event-aggregator.js +4 -0
  37. package/lib/spans/streaming-span-event.js +13 -1
  38. package/lib/timer.js +1 -1
  39. package/lib/transaction/dt-payload.js +2 -2
  40. package/lib/transaction/handle.js +0 -54
  41. package/lib/transaction/index.js +25 -39
  42. package/lib/transaction/tracecontext.js +19 -4
  43. package/lib/util/byte-limit.js +1 -1
  44. package/lib/utilization/common.js +1 -1
  45. package/newrelic.js +1 -1
  46. package/package.json +11 -11
  47. package/stub_api.js +1 -1
  48. package/third_party_manifest.json +36 -36
@@ -5,9 +5,7 @@
5
5
 
6
6
  'use strict'
7
7
 
8
- const util = require('util')
9
8
  const logger = require('../logger').child({component: 'transactionHandle'})
10
- const DistributedTracePayloadStub = require('./dt-payload').Stub
11
9
 
12
10
  const NAMES = require('../../lib/metrics/names')
13
11
 
@@ -61,7 +59,6 @@ class TransactionHandle {
61
59
  */
62
60
  acceptDistributedTraceHeaders(transportType, headers) {
63
61
  incrementApiSupportMetric(this._metrics, 'acceptDistributedTraceHeaders')
64
-
65
62
  return this._transaction.acceptDistributedTraceHeaders(transportType, headers)
66
63
  }
67
64
 
@@ -71,48 +68,10 @@ class TransactionHandle {
71
68
  */
72
69
  insertDistributedTraceHeaders(headers) {
73
70
  incrementApiSupportMetric(this._metrics, 'insertDistributedTraceHeaders')
74
-
75
71
  return this._transaction.insertDistributedTraceHeaders(headers)
76
72
  }
77
-
78
- /**
79
- *
80
- * Proxy method for Transaction#createDistrubtedTracePayload.
81
- *
82
- * @returns {DistributedTracePayload} The created payload object.
83
- *
84
- */
85
- createDistributedTracePayload() {
86
- return this._transaction.createDistributedTracePayload()
87
- }
88
-
89
- /**
90
- *
91
- * Proxy method for Transaction#acceptDistributedTracePayload
92
- *
93
- * @param {String} The payload to accept as the parent to the current trace
94
- *
95
- */
96
- acceptDistributedTracePayload(payload) {
97
- return this._transaction.acceptDistributedTracePayload(payload)
98
- }
99
73
  }
100
74
 
101
- // TODO: Fully remove functions in future Major release. v7.0.0?
102
- TransactionHandle.prototype.acceptDistributedTracePayload = util.deprecate(
103
- TransactionHandle.prototype.acceptDistributedTracePayload,
104
- 'TransactionHandle#acceptDistributedTracePayload has been deprecated! ' +
105
- 'Please use TransactionHandle#acceptDistributedTraceHeaders ' +
106
- 'which supports multiple distributed trace formats.'
107
- )
108
-
109
- TransactionHandle.prototype.createDistributedTracePayload = util.deprecate(
110
- TransactionHandle.prototype.createDistributedTracePayload,
111
- 'TransactionHandle#createDistributedTracePayload has been deprecated! ' +
112
- 'Please use TransactionHandle#insertDistributedTraceHeaders ' +
113
- 'which supports multiple distributed trace formats.'
114
- )
115
-
116
75
  module.exports = TransactionHandle
117
76
 
118
77
  function incrementApiSupportMetric(metrics, functionName) {
@@ -147,19 +106,6 @@ module.exports.Stub = class TransactionHandleStub {
147
106
  logger.debug("No transaction found when calling Transaction.isSampled")
148
107
  }
149
108
 
150
- createDistributedTracePayload() {
151
- logger.debug(
152
- "No transaction found when calling Transaction.createDistributedTracePayload"
153
- )
154
- return new DistributedTracePayloadStub()
155
- }
156
-
157
- acceptDistributedTracePayload() {
158
- logger.debug(
159
- "No transaction found when calling Transaction.acceptDistributedTracePayload"
160
- )
161
- }
162
-
163
109
  acceptDistributedTraceHeaders() {
164
110
  logger.debug("No transaction found when calling Transaction.acceptDistributedTraceHeaders")
165
111
  }
@@ -509,7 +509,7 @@ Transaction.prototype._markAsWeb = function _markAsWeb(rawURL) {
509
509
  * Sets the transaction's name and determines if it will be ignored.
510
510
  *
511
511
  * @param {string} [name]
512
- * Optional. The partial name to use for the finalized transaction. If ommitted
512
+ * Optional. The partial name to use for the finalized transaction. If omitted
513
513
  * the current partial name is used.
514
514
  */
515
515
  Transaction.prototype.finalizeName = function finalizeName(name) {
@@ -679,7 +679,6 @@ Transaction.prototype.measure = function measure(name, scope, duration, exclusiv
679
679
  Transaction.prototype._setApdex = function _setApdex(name, duration, keyApdexInMillis) {
680
680
  var apdexStats = this.metrics.getOrCreateApdexMetric(name, null, keyApdexInMillis)
681
681
 
682
-
683
682
  // if we have an error-like status code, and all the errors are
684
683
  // expected, we know the status code was caused by an expected
685
684
  // error, so we will not report "frustrating". Otherwise, we
@@ -747,19 +746,13 @@ function _linkExceptionToSegment(exception) {
747
746
  return
748
747
  }
749
748
 
750
- const config = this.agent.config
751
-
752
- // Add error attributes to the span
753
- const details = exception.getErrorDetails(config)
754
- segment.addSpanAttribute('error.message', details.message)
755
- segment.addSpanAttribute('error.class', details.type)
756
-
757
- const isExpected =
758
- errorHelper.isExpectedErrorClass(config, details.type) ||
759
- errorHelper.isExpectedErrorMessage(config, details.type, details.message)
760
-
761
- if (isExpected) {
762
- segment.addSpanAttribute('error.expected', isExpected)
749
+ const spanContext = segment.getSpanContext()
750
+ if (spanContext) {
751
+ // Exception attributes will be added to span unless transaction
752
+ // status code has been ignored. Last error wins.
753
+ const config = this.agent.config
754
+ const details = exception.getErrorDetails(config)
755
+ spanContext.setError(details)
763
756
  }
764
757
 
765
758
  // Add the span/segment ID to the exception as agent attributes
@@ -793,6 +786,14 @@ function _addUserError(exception) {
793
786
  this.userErrors.push(exception)
794
787
  }
795
788
 
789
+ /**
790
+ * Returns if the transaction's current status code is errored
791
+ * but considered ignored via the config.
792
+ */
793
+ Transaction.prototype.hasIgnoredErrorStatusCode = function _hasIgnoredErrorStatusCode() {
794
+ return urltils.isIgnoredError(this.agent.config, this.statusCode)
795
+ }
796
+
796
797
  /**
797
798
  * Returns true if an error happened during the transaction or if the transaction itself is
798
799
  * considered to be an error.
@@ -812,7 +813,7 @@ Transaction.prototype.hasOnlyExpectedErrors = function hasOnlyExpectedErrors() {
812
813
 
813
814
  for (let i = 0;i < this.exceptions.length;i++) {
814
815
  const exception = this.exceptions[i]
815
- // this expection is neither expected nor ignored
816
+ // this exception is neither expected nor ignored
816
817
  const isUnexpected = !(
817
818
  errorHelper.isExpectedException(
818
819
  this,
@@ -885,19 +886,14 @@ function acceptDistributedTraceHeaders(transportType, headers) {
885
886
 
886
887
  if (traceparent) {
887
888
  logger.trace('Accepting trace context DT payload for transaction %s', this.id)
888
-
889
889
  // assumes header keys already lowercase
890
890
  const tracestate = headers[TRACE_CONTEXT_STATE_HEADER]
891
-
892
891
  this.acceptTraceContextPayload(traceparent, tracestate, transport)
893
- } else {
892
+ } else if (NEWRELIC_TRACE_HEADER in headers) {
893
+ logger.trace('Accepting newrelic DT payload for transaction %s', this.id)
894
894
  // assumes header keys already lowercase
895
895
  const payload = headers[NEWRELIC_TRACE_HEADER]
896
- if (payload) {
897
- logger.trace('Accepting newrelic DT payload for transaction %s', this.id)
898
-
899
- this.acceptDistributedTracePayload(payload, transport)
900
- }
896
+ this._acceptDistributedTracePayload(payload, transport)
901
897
  }
902
898
  }
903
899
 
@@ -928,7 +924,7 @@ function insertDistributedTraceHeaders(headers) {
928
924
  }
929
925
 
930
926
  try {
931
- const newrelicFormatData = this.createDistributedTracePayload().httpSafe()
927
+ const newrelicFormatData = this._createDistributedTracePayload().httpSafe()
932
928
  headers[NEWRELIC_TRACE_HEADER] = newrelicFormatData
933
929
  logger.trace('Added outbound request distributed tracing headers in transaction %s', this.id)
934
930
  } catch (error) {
@@ -992,8 +988,8 @@ function acceptTraceContextPayload(traceparent, tracestate, transport) {
992
988
  * @param {object} payload - The distributed trace payload to accept.
993
989
  * @param {string} [transport='Unknown'] - The transport type that delivered the payload.
994
990
  */
995
- Transaction.prototype.acceptDistributedTracePayload = acceptDistributedTracePayload
996
- function acceptDistributedTracePayload(payload, transport) {
991
+ Transaction.prototype._acceptDistributedTracePayload = _acceptDistributedTracePayload
992
+ function _acceptDistributedTracePayload(payload, transport) {
997
993
  if (!payload) {
998
994
  this.agent.recordSupportability('DistributedTrace/AcceptPayload/Ignored/Null')
999
995
  return
@@ -1088,11 +1084,6 @@ function acceptDistributedTracePayload(payload, transport) {
1088
1084
  return
1089
1085
  }
1090
1086
 
1091
- // TODO: This should be removable / covered by acceptDistributedTraceHeaders
1092
- // once the Transaction#acceptDistributedTracePayload API that directly invokes
1093
- // this acceptDistributedTracePayload is fully removed in a future Major version.
1094
- transport = TRANSPORT_TYPES_SET[transport] ? transport : TRANSPORT_TYPES.UNKNOWN
1095
-
1096
1087
  this.parentType = data.ty
1097
1088
  this.parentApp = data.ap
1098
1089
  this.parentAcct = data.ac
@@ -1162,9 +1153,9 @@ Transaction.prototype._getParsedPayload = function _getParsedPayload(payload) {
1162
1153
  /**
1163
1154
  * Creates a distributed trace payload.
1164
1155
  */
1165
- Transaction.prototype.createDistributedTracePayload = createDistributedTracePayload
1156
+ Transaction.prototype._createDistributedTracePayload = _createDistributedTracePayload
1166
1157
 
1167
- function createDistributedTracePayload() {
1158
+ function _createDistributedTracePayload() {
1168
1159
  const config = this.agent.config
1169
1160
  const accountId = config.account_id
1170
1161
  const appId = config.primary_application_id
@@ -1184,11 +1175,6 @@ function createDistributedTracePayload() {
1184
1175
  return new DTPayloadStub()
1185
1176
  }
1186
1177
 
1187
- // TODO: This should be removable / covered by insertDistributedTraceHeaders
1188
- // once the Transaction#createDistributedTracePayload API that directly invokes
1189
- // this createDistributedTracePayload is fully removed in a future Major version.
1190
- this._calculatePriority()
1191
-
1192
1178
  const currSegment = this.agent.tracer.getSegment()
1193
1179
  const data = {
1194
1180
  ty: 'App',
@@ -27,7 +27,7 @@ const FLAGS = {
27
27
  }
28
28
 
29
29
  /**
30
- * The class reponsible for accepting, validating, and producing w3c tracecontext headers.
30
+ * The class responsible for accepting, validating, and producing w3c tracecontext headers.
31
31
  */
32
32
  class TraceContext {
33
33
  /**
@@ -63,7 +63,14 @@ class TraceContext {
63
63
  // If no segment/span is in context, generate one so we can have a valid traceparent
64
64
  const segment = this.transaction.agent.tracer.getSegment()
65
65
  let parentId = segment && segment.id
66
- parentId = parentId || hashes.makeId(16)
66
+ if (!parentId) {
67
+ parentId = hashes.makeId(16)
68
+ logger.debug(
69
+ 'No segment/span in context. Generated new traceparent parentId (%s) for traceId (%s)',
70
+ parentId,
71
+ traceId
72
+ )
73
+ }
67
74
 
68
75
  return `${W3C_TRACEPARENT_VERSION}-${traceId}-${parentId}-${this.createFlagsHex()}`
69
76
  }
@@ -103,7 +110,11 @@ class TraceContext {
103
110
  const segment = this.transaction.agent.tracer.getSegment()
104
111
  if (segment) {
105
112
  spanId = segment.id
113
+ } else {
114
+ logger.debug('No segment/span in context. Not sending spanId in tracestate.')
106
115
  }
116
+ } else {
117
+ logger.trace('Span events disabled. Not sending spanId in tracestate.')
107
118
  }
108
119
 
109
120
  const transactionId = config.transaction_events.enabled ? this.transaction.id : ''
@@ -130,11 +141,15 @@ class TraceContext {
130
141
  return
131
142
  }
132
143
 
133
- headers[TRACE_CONTEXT_PARENT_HEADER] = this.createTraceparent()
144
+ const traceParent = this.createTraceparent()
145
+ headers[TRACE_CONTEXT_PARENT_HEADER] = traceParent
146
+
147
+ logger.trace('traceparent added with %s', traceParent)
134
148
 
135
149
  const tracestate = this.createTracestate()
136
150
  if (tracestate) {
137
151
  headers[TRACE_CONTEXT_STATE_HEADER] = tracestate
152
+ logger.trace('tracestate added with %s', tracestate)
138
153
  }
139
154
 
140
155
  this.transaction.agent.recordSupportability('TraceContext/Create/Success')
@@ -240,7 +255,7 @@ class TraceContext {
240
255
  return traceContextData
241
256
  }
242
257
 
243
- // Keep the raw, non-NewRelic tracestate string stored so that we can propogate it
258
+ // Keep the raw, non-NewRelic tracestate string stored so that we can propagate it
244
259
  this._traceStateRaw = parsedState.newTraceState
245
260
 
246
261
  // These need to be kept to be added to root span events as an attribute
@@ -55,7 +55,7 @@ function truncate(val, limit) {
55
55
 
56
56
  // Continue the binary search till:
57
57
  // 1) The string is the desired length (i.e. cmpVal = 0) OR
58
- // 2) The desired string must split a character to acheive the desired byte length
58
+ // 2) The desired string must split a character to achieve the desired byte length
59
59
  // In this case, we should cut the character that would be split.
60
60
  // (i.e. delta > 1 character OR the string is larger than the limit)
61
61
  var substr
@@ -81,7 +81,7 @@ exports.request = function request(opts, agent, cb) {
81
81
  return cb(new Error('Request for metadata failed.'))
82
82
  } else if (!data) {
83
83
  logger.debug('Got no response data?')
84
- return cb(new Error('No reponse data received.'))
84
+ return cb(new Error('No response data received.'))
85
85
  }
86
86
 
87
87
  cb(null, data.toString('utf8'))
package/newrelic.js CHANGED
@@ -28,7 +28,7 @@ exports.config = {
28
28
  *
29
29
  * @env NEW_RELIC_DISTRIBUTED_TRACING_ENABLED
30
30
  */
31
- enabled: false,
31
+ enabled: false
32
32
  },
33
33
  logging: {
34
34
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "newrelic",
3
- "version": "6.13.2",
3
+ "version": "7.0.2",
4
4
  "author": "New Relic Node.js agent team <nodejs@newrelic.com>",
5
5
  "license": "Apache-2.0",
6
6
  "contributors": [
@@ -111,7 +111,7 @@
111
111
  ],
112
112
  "homepage": "http://github.com/newrelic/node-newrelic",
113
113
  "engines": {
114
- "node": ">=8.0.0",
114
+ "node": ">=10.0.0",
115
115
  "npm": ">=3.0.0"
116
116
  },
117
117
  "directories": {
@@ -142,11 +142,11 @@
142
142
  "newrelic-naming-rules": "./bin/test-naming-rules.js"
143
143
  },
144
144
  "dependencies": {
145
- "@grpc/grpc-js": "1.0.5",
146
- "@grpc/proto-loader": "^0.5.4",
147
- "@newrelic/aws-sdk": "^2.0.0",
148
- "@newrelic/koa": "^4.0.0",
149
- "@newrelic/superagent": "^3.0.0",
145
+ "@grpc/grpc-js": "1.2.0",
146
+ "@grpc/proto-loader": "^0.5.5",
147
+ "@newrelic/aws-sdk": "^3.0.0",
148
+ "@newrelic/koa": "^5.0.0",
149
+ "@newrelic/superagent": "^4.0.0",
150
150
  "@tyriar/fibonacci-heap": "^2.0.7",
151
151
  "async": "^3.2.0",
152
152
  "concat-stream": "^2.0.0",
@@ -156,12 +156,11 @@
156
156
  "semver": "^5.3.0"
157
157
  },
158
158
  "optionalDependencies": {
159
- "@newrelic/native-metrics": "^5.3.0"
159
+ "@newrelic/native-metrics": "^6.0.0"
160
160
  },
161
161
  "devDependencies": {
162
162
  "@newrelic/proxy": "^2.0.0",
163
- "@newrelic/test-utilities": "^4.0.0",
164
- "JSV": "~4.0.2",
163
+ "@newrelic/test-utilities": "^5.0.0",
165
164
  "architect": "*",
166
165
  "benchmark": "^2.1.4",
167
166
  "bluebird": "^3.4.7",
@@ -174,6 +173,7 @@
174
173
  "got": "^8.0.1",
175
174
  "http-errors": "^1.7.3",
176
175
  "jsdoc": "^3.6.3",
176
+ "JSV": "~4.0.2",
177
177
  "memcached": ">=0.2.8",
178
178
  "minami": "^1.1.1",
179
179
  "mongodb": "^3.3.3",
@@ -187,7 +187,7 @@
187
187
  "rimraf": "^2.6.3",
188
188
  "should": "*",
189
189
  "sinon": "^4.5.0",
190
- "tap": "^14.10.7",
190
+ "tap": "^14.10.8",
191
191
  "temp": "^0.8.1",
192
192
  "through": "^2.3.6",
193
193
  "when": "*"
package/stub_api.js CHANGED
@@ -61,7 +61,7 @@ function setLambdaHandler(callback) {
61
61
  }
62
62
 
63
63
  function startSegment(name, record, handler, callback) {
64
- logger.debug('Not calling `startSegment` becuase New Relic is disabled.')
64
+ logger.debug('Not calling `startSegment` because New Relic is disabled.')
65
65
  if (typeof handler === 'function') {
66
66
  return handler(callback)
67
67
  }
@@ -1,68 +1,68 @@
1
1
  {
2
- "lastUpdated": "Tue Oct 13 2020 14:24:25 GMT-0700 (Pacific Daylight Time)",
2
+ "lastUpdated": "Tue Nov 17 2020 14:58:13 GMT-0800 (Pacific Standard Time)",
3
3
  "projectName": "New Relic Node Agent",
4
4
  "projectUrl": "https://github.com/newrelic/node-newrelic",
5
5
  "includeDev": true,
6
6
  "dependencies": {
7
- "@grpc/grpc-js@1.0.5": {
7
+ "@grpc/grpc-js@1.2.0": {
8
8
  "name": "@grpc/grpc-js",
9
- "version": "1.0.5",
10
- "range": "1.0.5",
9
+ "version": "1.2.0",
10
+ "range": "1.2.0",
11
11
  "licenses": "Apache-2.0",
12
12
  "repoUrl": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",
13
- "versionedRepoUrl": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js/tree/v1.0.5",
13
+ "versionedRepoUrl": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js/tree/v1.2.0",
14
14
  "licenseFile": "node_modules/@grpc/grpc-js/LICENSE",
15
- "licenseUrl": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js/blob/v1.0.5/LICENSE",
15
+ "licenseUrl": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js/blob/v1.2.0/LICENSE",
16
16
  "licenseTextSource": "file",
17
17
  "publisher": "Google Inc."
18
18
  },
19
- "@grpc/proto-loader@0.5.4": {
19
+ "@grpc/proto-loader@0.5.5": {
20
20
  "name": "@grpc/proto-loader",
21
- "version": "0.5.4",
22
- "range": "^0.5.4",
21
+ "version": "0.5.5",
22
+ "range": "^0.5.5",
23
23
  "licenses": "Apache-2.0",
24
24
  "repoUrl": "https://github.com/grpc/grpc-node",
25
- "versionedRepoUrl": "https://github.com/grpc/grpc-node/tree/v0.5.4",
25
+ "versionedRepoUrl": "https://github.com/grpc/grpc-node/tree/v0.5.5",
26
26
  "licenseFile": "node_modules/@grpc/proto-loader/LICENSE",
27
- "licenseUrl": "https://github.com/grpc/grpc-node/blob/v0.5.4/LICENSE",
27
+ "licenseUrl": "https://github.com/grpc/grpc-node/blob/v0.5.5/LICENSE",
28
28
  "licenseTextSource": "file",
29
29
  "publisher": "Google Inc."
30
30
  },
31
- "@newrelic/aws-sdk@2.0.0": {
31
+ "@newrelic/aws-sdk@3.0.0": {
32
32
  "name": "@newrelic/aws-sdk",
33
- "version": "2.0.0",
34
- "range": "^2.0.0",
33
+ "version": "3.0.0",
34
+ "range": "^3.0.0",
35
35
  "licenses": "Apache-2.0",
36
36
  "repoUrl": "https://github.com/newrelic/node-newrelic-aws-sdk",
37
- "versionedRepoUrl": "https://github.com/newrelic/node-newrelic-aws-sdk/tree/v2.0.0",
37
+ "versionedRepoUrl": "https://github.com/newrelic/node-newrelic-aws-sdk/tree/v3.0.0",
38
38
  "licenseFile": "node_modules/@newrelic/aws-sdk/LICENSE",
39
- "licenseUrl": "https://github.com/newrelic/node-newrelic-aws-sdk/blob/v2.0.0/LICENSE",
39
+ "licenseUrl": "https://github.com/newrelic/node-newrelic-aws-sdk/blob/v3.0.0/LICENSE",
40
40
  "licenseTextSource": "file",
41
41
  "publisher": "New Relic Node.js agent team",
42
42
  "email": "nodejs@newrelic.com"
43
43
  },
44
- "@newrelic/koa@4.0.0": {
44
+ "@newrelic/koa@5.0.0": {
45
45
  "name": "@newrelic/koa",
46
- "version": "4.0.0",
47
- "range": "^4.0.0",
46
+ "version": "5.0.0",
47
+ "range": "^5.0.0",
48
48
  "licenses": "Apache-2.0",
49
49
  "repoUrl": "https://github.com/newrelic/node-newrelic-koa",
50
- "versionedRepoUrl": "https://github.com/newrelic/node-newrelic-koa/tree/v4.0.0",
50
+ "versionedRepoUrl": "https://github.com/newrelic/node-newrelic-koa/tree/v5.0.0",
51
51
  "licenseFile": "node_modules/@newrelic/koa/LICENSE",
52
- "licenseUrl": "https://github.com/newrelic/node-newrelic-koa/blob/v4.0.0/LICENSE",
52
+ "licenseUrl": "https://github.com/newrelic/node-newrelic-koa/blob/v5.0.0/LICENSE",
53
53
  "licenseTextSource": "file",
54
54
  "publisher": "New Relic Node.js agent team",
55
55
  "email": "nodejs@newrelic.com"
56
56
  },
57
- "@newrelic/superagent@3.0.0": {
57
+ "@newrelic/superagent@4.0.0": {
58
58
  "name": "@newrelic/superagent",
59
- "version": "3.0.0",
60
- "range": "^3.0.0",
59
+ "version": "4.0.0",
60
+ "range": "^4.0.0",
61
61
  "licenses": "Apache-2.0",
62
62
  "repoUrl": "https://github.com/newrelic/node-newrelic-superagent",
63
- "versionedRepoUrl": "https://github.com/newrelic/node-newrelic-superagent/tree/v3.0.0",
63
+ "versionedRepoUrl": "https://github.com/newrelic/node-newrelic-superagent/tree/v4.0.0",
64
64
  "licenseFile": "node_modules/@newrelic/superagent/LICENSE",
65
- "licenseUrl": "https://github.com/newrelic/node-newrelic-superagent/blob/v3.0.0/LICENSE",
65
+ "licenseUrl": "https://github.com/newrelic/node-newrelic-superagent/blob/v4.0.0/LICENSE",
66
66
  "licenseTextSource": "file",
67
67
  "publisher": "New Relic Node.js Agent Team",
68
68
  "email": "nodejs@newrelic.com"
@@ -171,15 +171,15 @@
171
171
  "email": "nathan@tootallnate.net",
172
172
  "url": "http://n8.io/"
173
173
  },
174
- "@newrelic/test-utilities@4.0.0": {
174
+ "@newrelic/test-utilities@5.0.0": {
175
175
  "name": "@newrelic/test-utilities",
176
- "version": "4.0.0",
177
- "range": "^4.0.0",
176
+ "version": "5.0.0",
177
+ "range": "^5.0.0",
178
178
  "licenses": "Apache-2.0",
179
179
  "repoUrl": "https://github.com/newrelic/node-test-utilities",
180
- "versionedRepoUrl": "https://github.com/newrelic/node-test-utilities/tree/v4.0.0",
180
+ "versionedRepoUrl": "https://github.com/newrelic/node-test-utilities/tree/v5.0.0",
181
181
  "licenseFile": "node_modules/@newrelic/test-utilities/LICENSE",
182
- "licenseUrl": "https://github.com/newrelic/node-test-utilities/blob/v4.0.0/LICENSE",
182
+ "licenseUrl": "https://github.com/newrelic/node-test-utilities/blob/v5.0.0/LICENSE",
183
183
  "licenseTextSource": "file",
184
184
  "publisher": "New Relic Node.js agent team",
185
185
  "email": "nodejs@newrelic.com"
@@ -552,15 +552,15 @@
552
552
  "licenseTextSource": "file",
553
553
  "publisher": "Christian Johansen"
554
554
  },
555
- "tap@14.10.7": {
555
+ "tap@14.10.8": {
556
556
  "name": "tap",
557
- "version": "14.10.7",
558
- "range": "^14.10.7",
557
+ "version": "14.10.8",
558
+ "range": "^14.10.8",
559
559
  "licenses": "ISC",
560
560
  "repoUrl": "https://github.com/tapjs/node-tap",
561
- "versionedRepoUrl": "https://github.com/tapjs/node-tap/tree/v14.10.7",
561
+ "versionedRepoUrl": "https://github.com/tapjs/node-tap/tree/v14.10.8",
562
562
  "licenseFile": "node_modules/tap/LICENSE",
563
- "licenseUrl": "https://github.com/tapjs/node-tap/blob/v14.10.7/LICENSE",
563
+ "licenseUrl": "https://github.com/tapjs/node-tap/blob/v14.10.8/LICENSE",
564
564
  "licenseTextSource": "file",
565
565
  "publisher": "Isaac Z. Schlueter",
566
566
  "email": "i@izs.me",