@newrelic/browser-agent 1.254.1 → 1.256.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 (176) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/cjs/common/config/state/runtime.js +2 -1
  3. package/dist/cjs/common/constants/env.cdn.js +2 -2
  4. package/dist/cjs/common/constants/env.npm.js +2 -2
  5. package/dist/cjs/common/constants/runtime.js +1 -1
  6. package/dist/cjs/common/context/shared-context.js +1 -1
  7. package/dist/cjs/common/harvest/harvest.js +2 -1
  8. package/dist/cjs/common/session/session-entity.js +2 -1
  9. package/dist/cjs/common/timer/interaction-timer.js +16 -2
  10. package/dist/cjs/common/timing/time-keeper.js +23 -19
  11. package/dist/cjs/common/vitals/cumulative-layout-shift.js +12 -5
  12. package/dist/cjs/common/vitals/first-contentful-paint.js +10 -6
  13. package/dist/cjs/common/vitals/first-input-delay.js +12 -10
  14. package/dist/cjs/common/vitals/first-paint.js +1 -2
  15. package/dist/cjs/common/vitals/interaction-to-next-paint.js +11 -7
  16. package/dist/cjs/common/vitals/largest-contentful-paint.js +19 -17
  17. package/dist/cjs/common/vitals/long-task.js +0 -1
  18. package/dist/cjs/common/vitals/time-to-first-byte.js +11 -6
  19. package/dist/cjs/common/vitals/vital-metric.js +1 -4
  20. package/dist/cjs/common/window/nreum.js +1 -1
  21. package/dist/cjs/features/ajax/aggregate/index.js +3 -2
  22. package/dist/cjs/features/ajax/instrument/index.js +1 -1
  23. package/dist/cjs/features/jserrors/aggregate/index.js +19 -8
  24. package/dist/cjs/features/jserrors/instrument/index.js +9 -4
  25. package/dist/cjs/features/page_action/aggregate/index.js +3 -2
  26. package/dist/cjs/features/page_view_event/aggregate/index.js +10 -5
  27. package/dist/cjs/features/page_view_timing/aggregate/index.js +21 -7
  28. package/dist/cjs/features/page_view_timing/instrument/index.js +1 -1
  29. package/dist/cjs/features/session_replay/aggregate/index.js +59 -35
  30. package/dist/cjs/features/session_replay/constants.js +2 -1
  31. package/dist/cjs/features/session_replay/instrument/index.js +9 -2
  32. package/dist/cjs/features/session_replay/shared/recorder.js +20 -4
  33. package/dist/cjs/features/session_replay/shared/utils.js +12 -0
  34. package/dist/cjs/features/session_trace/aggregate/index.js +20 -23
  35. package/dist/cjs/features/session_trace/instrument/index.js +1 -1
  36. package/dist/cjs/features/soft_navigations/aggregate/index.js +2 -2
  37. package/dist/cjs/features/soft_navigations/instrument/index.js +1 -1
  38. package/dist/cjs/features/spa/aggregate/index.js +19 -10
  39. package/dist/cjs/features/spa/instrument/index.js +1 -1
  40. package/dist/cjs/features/utils/feature-base.js +0 -2
  41. package/dist/cjs/loaders/agent-base.js +0 -2
  42. package/dist/cjs/loaders/agent.js +1 -1
  43. package/dist/cjs/loaders/api/api.js +8 -2
  44. package/dist/cjs/loaders/configure/configure.js +1 -0
  45. package/dist/cjs/loaders/micro-agent.js +4 -7
  46. package/dist/esm/common/config/state/runtime.js +2 -1
  47. package/dist/esm/common/constants/env.cdn.js +2 -2
  48. package/dist/esm/common/constants/env.npm.js +2 -2
  49. package/dist/esm/common/constants/runtime.js +1 -1
  50. package/dist/esm/common/context/shared-context.js +1 -1
  51. package/dist/esm/common/harvest/harvest.js +2 -1
  52. package/dist/esm/common/session/session-entity.js +2 -1
  53. package/dist/esm/common/timer/interaction-timer.js +16 -2
  54. package/dist/esm/common/timing/time-keeper.js +23 -20
  55. package/dist/esm/common/vitals/cumulative-layout-shift.js +11 -4
  56. package/dist/esm/common/vitals/first-contentful-paint.js +9 -5
  57. package/dist/esm/common/vitals/first-input-delay.js +11 -9
  58. package/dist/esm/common/vitals/first-paint.js +1 -2
  59. package/dist/esm/common/vitals/interaction-to-next-paint.js +10 -6
  60. package/dist/esm/common/vitals/largest-contentful-paint.js +18 -16
  61. package/dist/esm/common/vitals/long-task.js +0 -1
  62. package/dist/esm/common/vitals/time-to-first-byte.js +10 -5
  63. package/dist/esm/common/vitals/vital-metric.js +1 -4
  64. package/dist/esm/common/window/nreum.js +1 -1
  65. package/dist/esm/features/ajax/aggregate/index.js +3 -2
  66. package/dist/esm/features/ajax/instrument/index.js +1 -1
  67. package/dist/esm/features/jserrors/aggregate/index.js +19 -8
  68. package/dist/esm/features/jserrors/instrument/index.js +9 -4
  69. package/dist/esm/features/page_action/aggregate/index.js +3 -2
  70. package/dist/esm/features/page_view_event/aggregate/index.js +10 -5
  71. package/dist/esm/features/page_view_timing/aggregate/index.js +21 -7
  72. package/dist/esm/features/page_view_timing/instrument/index.js +1 -1
  73. package/dist/esm/features/session_replay/aggregate/index.js +59 -35
  74. package/dist/esm/features/session_replay/constants.js +2 -1
  75. package/dist/esm/features/session_replay/instrument/index.js +9 -2
  76. package/dist/esm/features/session_replay/shared/recorder.js +21 -5
  77. package/dist/esm/features/session_replay/shared/utils.js +11 -0
  78. package/dist/esm/features/session_trace/aggregate/index.js +20 -23
  79. package/dist/esm/features/session_trace/instrument/index.js +1 -1
  80. package/dist/esm/features/soft_navigations/aggregate/index.js +2 -2
  81. package/dist/esm/features/soft_navigations/instrument/index.js +1 -1
  82. package/dist/esm/features/spa/aggregate/index.js +19 -10
  83. package/dist/esm/features/spa/instrument/index.js +1 -1
  84. package/dist/esm/features/utils/feature-base.js +0 -2
  85. package/dist/esm/loaders/agent-base.js +0 -2
  86. package/dist/esm/loaders/agent.js +1 -1
  87. package/dist/esm/loaders/api/api.js +8 -2
  88. package/dist/esm/loaders/configure/configure.js +1 -0
  89. package/dist/esm/loaders/micro-agent.js +4 -7
  90. package/dist/types/common/config/state/runtime.d.ts.map +1 -1
  91. package/dist/types/common/constants/runtime.d.ts.map +1 -1
  92. package/dist/types/common/harvest/harvest.d.ts.map +1 -1
  93. package/dist/types/common/session/session-entity.d.ts.map +1 -1
  94. package/dist/types/common/timer/interaction-timer.d.ts +2 -0
  95. package/dist/types/common/timer/interaction-timer.d.ts.map +1 -1
  96. package/dist/types/common/timing/time-keeper.d.ts +4 -9
  97. package/dist/types/common/timing/time-keeper.d.ts.map +1 -1
  98. package/dist/types/common/vitals/vital-metric.d.ts +1 -2
  99. package/dist/types/common/vitals/vital-metric.d.ts.map +1 -1
  100. package/dist/types/features/ajax/aggregate/index.d.ts.map +1 -1
  101. package/dist/types/features/ajax/instrument/index.d.ts.map +1 -1
  102. package/dist/types/features/jserrors/aggregate/index.d.ts +2 -1
  103. package/dist/types/features/jserrors/aggregate/index.d.ts.map +1 -1
  104. package/dist/types/features/jserrors/instrument/index.d.ts.map +1 -1
  105. package/dist/types/features/page_action/aggregate/index.d.ts.map +1 -1
  106. package/dist/types/features/page_view_event/aggregate/index.d.ts.map +1 -1
  107. package/dist/types/features/page_view_timing/aggregate/index.d.ts.map +1 -1
  108. package/dist/types/features/page_view_timing/instrument/index.d.ts.map +1 -1
  109. package/dist/types/features/session_replay/aggregate/index.d.ts +9 -2
  110. package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
  111. package/dist/types/features/session_replay/constants.d.ts +1 -0
  112. package/dist/types/features/session_replay/constants.d.ts.map +1 -1
  113. package/dist/types/features/session_replay/instrument/index.d.ts +1 -0
  114. package/dist/types/features/session_replay/instrument/index.d.ts.map +1 -1
  115. package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
  116. package/dist/types/features/session_replay/shared/utils.d.ts +8 -0
  117. package/dist/types/features/session_replay/shared/utils.d.ts.map +1 -1
  118. package/dist/types/features/session_trace/aggregate/index.d.ts +2 -1
  119. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
  120. package/dist/types/features/session_trace/instrument/index.d.ts.map +1 -1
  121. package/dist/types/features/soft_navigations/instrument/index.d.ts.map +1 -1
  122. package/dist/types/features/spa/aggregate/index.d.ts +0 -2
  123. package/dist/types/features/spa/aggregate/index.d.ts.map +1 -1
  124. package/dist/types/features/utils/feature-base.d.ts +0 -1
  125. package/dist/types/features/utils/feature-base.d.ts.map +1 -1
  126. package/dist/types/loaders/agent-base.d.ts +0 -2
  127. package/dist/types/loaders/agent-base.d.ts.map +1 -1
  128. package/dist/types/loaders/api/api.d.ts.map +1 -1
  129. package/dist/types/loaders/configure/configure.d.ts.map +1 -1
  130. package/dist/types/loaders/micro-agent.d.ts.map +1 -1
  131. package/package.json +2 -2
  132. package/src/common/config/state/runtime.js +2 -1
  133. package/src/common/constants/runtime.js +1 -1
  134. package/src/common/context/__mocks__/shared-context.js +3 -0
  135. package/src/common/context/shared-context.js +1 -1
  136. package/src/common/harvest/harvest.js +2 -2
  137. package/src/common/session/session-entity.js +2 -1
  138. package/src/common/timer/interaction-timer.js +17 -2
  139. package/src/common/timing/__mocks__/time-keeper.js +2 -0
  140. package/src/common/timing/time-keeper.js +25 -22
  141. package/src/common/vitals/cumulative-layout-shift.js +10 -4
  142. package/src/common/vitals/first-contentful-paint.js +9 -4
  143. package/src/common/vitals/first-input-delay.js +11 -6
  144. package/src/common/vitals/first-paint.js +1 -1
  145. package/src/common/vitals/interaction-to-next-paint.js +10 -3
  146. package/src/common/vitals/largest-contentful-paint.js +19 -15
  147. package/src/common/vitals/long-task.js +0 -1
  148. package/src/common/vitals/time-to-first-byte.js +5 -4
  149. package/src/common/vitals/vital-metric.js +2 -4
  150. package/src/common/window/nreum.js +1 -1
  151. package/src/features/ajax/aggregate/index.js +3 -2
  152. package/src/features/ajax/instrument/index.js +1 -1
  153. package/src/features/jserrors/aggregate/index.js +18 -8
  154. package/src/features/jserrors/instrument/index.js +10 -5
  155. package/src/features/page_action/aggregate/index.js +3 -2
  156. package/src/features/page_view_event/aggregate/index.js +11 -5
  157. package/src/features/page_view_timing/aggregate/index.js +16 -6
  158. package/src/features/page_view_timing/instrument/index.js +1 -1
  159. package/src/features/session_replay/aggregate/index.js +53 -31
  160. package/src/features/session_replay/constants.js +2 -1
  161. package/src/features/session_replay/instrument/index.js +7 -2
  162. package/src/features/session_replay/shared/recorder.js +23 -5
  163. package/src/features/session_replay/shared/utils.js +12 -0
  164. package/src/features/session_trace/aggregate/index.js +19 -17
  165. package/src/features/session_trace/instrument/index.js +1 -1
  166. package/src/features/soft_navigations/aggregate/index.js +2 -2
  167. package/src/features/soft_navigations/instrument/index.js +1 -1
  168. package/src/features/spa/aggregate/index.js +19 -8
  169. package/src/features/spa/instrument/index.js +1 -1
  170. package/src/features/utils/feature-base.js +0 -3
  171. package/src/loaders/agent-base.js +0 -2
  172. package/src/loaders/agent.js +1 -1
  173. package/src/loaders/api/api.js +11 -2
  174. package/src/loaders/configure/configure.js +1 -0
  175. package/src/loaders/micro-agent.js +4 -6
  176. package/src/common/vitals/__mocks__/web-vitals.js +0 -19
@@ -6,7 +6,6 @@ import { FEATURE_NAMES } from '../features/features'
6
6
  import { getRuntime, setInfo, getInfo } from '../../common/config/config'
7
7
  import { handle } from '../../common/event-emitter/handle'
8
8
  import { ee } from '../../common/event-emitter/contextual-ee'
9
- import { now } from '../../common/timing/now'
10
9
  import { drain, registerDrain } from '../../common/drain/drain'
11
10
  import { onWindowLoad } from '../../common/window/load'
12
11
  import { isBrowserScope } from '../../common/constants/runtime'
@@ -15,6 +14,8 @@ import { SUPPORTABILITY_METRIC_CHANNEL } from '../../features/metrics/constants'
15
14
  import { gosCDN } from '../../common/window/nreum'
16
15
  import { apiMethods, asyncApiMethods } from './api-methods'
17
16
  import { SR_EVENT_EMITTER_TYPES } from '../../features/session_replay/constants'
17
+ import { now } from '../../common/timing/now'
18
+ import { MODE } from '../../common/session/constants'
18
19
 
19
20
  export function setTopLevelCallers () {
20
21
  const nr = gosCDN()
@@ -33,12 +34,20 @@ export function setTopLevelCallers () {
33
34
  }
34
35
  }
35
36
 
37
+ const replayRunning = {}
38
+
36
39
  export function setAPI (agentIdentifier, forceDrain, runSoftNavOverSpa = false) {
37
40
  if (!forceDrain) registerDrain(agentIdentifier, 'api')
38
41
  const apiInterface = {}
39
42
  var instanceEE = ee.get(agentIdentifier)
40
43
  var tracerEE = instanceEE.get('tracer')
41
44
 
45
+ replayRunning[agentIdentifier] = MODE.OFF
46
+
47
+ instanceEE.on(SR_EVENT_EMITTER_TYPES.REPLAY_RUNNING, (isRunning) => {
48
+ replayRunning[agentIdentifier] = isRunning
49
+ })
50
+
42
51
  var prefix = 'api-'
43
52
  var spaPrefix = prefix + 'ixn-'
44
53
 
@@ -184,7 +193,7 @@ export function setAPI (agentIdentifier, forceDrain, runSoftNavOverSpa = false)
184
193
  apiInterface.noticeError = function (err, customAttributes) {
185
194
  if (typeof err === 'string') err = new Error(err)
186
195
  handle(SUPPORTABILITY_METRIC_CHANNEL, ['API/noticeError/called'], undefined, FEATURE_NAMES.metrics, instanceEE)
187
- handle('err', [err, now(), false, customAttributes], undefined, FEATURE_NAMES.jserrors, instanceEE)
196
+ handle('err', [err, now(), false, customAttributes, !!replayRunning[agentIdentifier]], undefined, FEATURE_NAMES.jserrors, instanceEE)
188
197
  }
189
198
 
190
199
  // theres no window.load event on non-browser scopes, lazy load immediately
@@ -52,6 +52,7 @@ export function configure (agent, opts = {}, loaderType, forceDrain) {
52
52
  ...(updatedInit.ajax.deny_list || []),
53
53
  ...(updatedInit.ajax.block_internal ? internalTrafficList : [])
54
54
  ]
55
+ runtime.ptid = agent.agentIdentifier
55
56
  setRuntime(agent.agentIdentifier, runtime)
56
57
 
57
58
  if (agent.api === undefined) agent.api = setAPI(agent.agentIdentifier, forceDrain, agent.runSoftNavOverSpa)
@@ -5,7 +5,6 @@ import { configure } from './configure/configure'
5
5
  // core files
6
6
  import { Aggregator } from '../common/aggregate/aggregator'
7
7
  import { setNREUMInitializedAgent } from '../common/window/nreum'
8
- import { generateRandomHexString } from '../common/ids/unique-id'
9
8
  import { getConfiguration, getConfigurationValue, getInfo, getLoaderConfig, getRuntime } from '../common/config/config'
10
9
  import { FEATURE_NAMES } from './features/features'
11
10
  import { warn } from '../common/util/console'
@@ -28,13 +27,12 @@ export class MicroAgent extends AgentBase {
28
27
  * @param {Object} options - Specifies features and runtime configuration,
29
28
  * @param {string=} agentIdentifier - The optional unique ID of the agent.
30
29
  */
31
- constructor (options, agentIdentifier = generateRandomHexString(16)) {
32
- super()
30
+ constructor (options, agentIdentifier) {
31
+ super(agentIdentifier)
33
32
 
34
- this.agentIdentifier = agentIdentifier
35
33
  this.sharedAggregator = new Aggregator({ agentIdentifier: this.agentIdentifier })
36
34
  this.features = {}
37
- setNREUMInitializedAgent(agentIdentifier, this)
35
+ setNREUMInitializedAgent(this.agentIdentifier, this)
38
36
 
39
37
  configure(this, { ...options, runtime: { isolatedBacklog: true } }, options.loaderType || 'micro-agent')
40
38
  Object.assign(this, this.api) // the APIs should be available at the class level for micro-agent
@@ -45,7 +43,7 @@ export class MicroAgent extends AgentBase {
45
43
  * @param {string|string[]|undefined} name The feature name(s) to start. If no name(s) are passed, all features will be started
46
44
  */
47
45
  this.start = features => this.run(features)
48
- this.run(nonAutoFeatures.filter(featureName => getConfigurationValue(agentIdentifier, `${featureName}.autoStart`)))
46
+ this.run(nonAutoFeatures.filter(featureName => getConfigurationValue(this.agentIdentifier, `${featureName}.autoStart`)))
49
47
  }
50
48
 
51
49
  get config () {
@@ -1,19 +0,0 @@
1
- const continuouslyReportMetric = c => {
2
- let count = 0
3
- const vital = { value: 1, entries: [{ startTime: 1, name: 'name', size: 1, id: `id${++count}`, url: 'url', element: { tagName: 'tagName' } }], id: 'id' }
4
- // report a new metric every quarter second
5
- const callcb = () => {
6
- setTimeout(() => {
7
- c(vital)
8
- callcb()
9
- }, 250)
10
- }
11
- callcb()
12
- }
13
-
14
- export const onCLS = c => continuouslyReportMetric(c)
15
- export const onFCP = c => continuouslyReportMetric(c)
16
- export const onFID = c => continuouslyReportMetric(c)
17
- export const onINP = c => continuouslyReportMetric(c)
18
- export const onLCP = c => continuouslyReportMetric(c)
19
- export const onTTFB = c => continuouslyReportMetric(c)