@newrelic/browser-agent 1.290.1 → 1.291.1

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 (66) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/common/constants/env.cdn.js +1 -1
  3. package/dist/cjs/common/constants/env.npm.js +1 -1
  4. package/dist/cjs/common/harvest/harvester.js +0 -7
  5. package/dist/cjs/common/session/session-entity.js +5 -5
  6. package/dist/cjs/common/util/console.js +12 -0
  7. package/dist/cjs/features/generic_events/aggregate/index.js +18 -2
  8. package/dist/cjs/features/generic_events/instrument/index.js +2 -0
  9. package/dist/cjs/features/session_replay/aggregate/index.js +3 -0
  10. package/dist/cjs/features/session_replay/shared/recorder.js +0 -4
  11. package/dist/cjs/features/session_trace/aggregate/index.js +7 -3
  12. package/dist/cjs/features/session_trace/aggregate/trace/storage.js +36 -23
  13. package/dist/cjs/loaders/api/addToTrace.js +8 -0
  14. package/dist/cjs/loaders/api/constants.js +3 -2
  15. package/dist/cjs/loaders/api/measure.js +60 -0
  16. package/dist/cjs/loaders/api-base.js +11 -0
  17. package/dist/esm/common/constants/env.cdn.js +1 -1
  18. package/dist/esm/common/constants/env.npm.js +1 -1
  19. package/dist/esm/common/harvest/harvester.js +0 -7
  20. package/dist/esm/common/session/session-entity.js +5 -5
  21. package/dist/esm/common/util/console.js +13 -0
  22. package/dist/esm/features/generic_events/aggregate/index.js +18 -2
  23. package/dist/esm/features/generic_events/instrument/index.js +2 -0
  24. package/dist/esm/features/session_replay/aggregate/index.js +3 -0
  25. package/dist/esm/features/session_replay/shared/recorder.js +0 -4
  26. package/dist/esm/features/session_trace/aggregate/index.js +7 -3
  27. package/dist/esm/features/session_trace/aggregate/trace/storage.js +36 -23
  28. package/dist/esm/loaders/api/addToTrace.js +8 -0
  29. package/dist/esm/loaders/api/constants.js +2 -1
  30. package/dist/esm/loaders/api/measure.js +53 -0
  31. package/dist/esm/loaders/api-base.js +12 -1
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/dist/types/common/harvest/harvester.d.ts.map +1 -1
  34. package/dist/types/common/session/session-entity.d.ts +0 -1
  35. package/dist/types/common/session/session-entity.d.ts.map +1 -1
  36. package/dist/types/common/util/console.d.ts +0 -4
  37. package/dist/types/common/util/console.d.ts.map +1 -1
  38. package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -1
  39. package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -1
  40. package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
  41. package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
  42. package/dist/types/features/session_trace/aggregate/index.d.ts +1 -1
  43. package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
  44. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +1 -3
  45. package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
  46. package/dist/types/loaders/api/addToTrace.d.ts.map +1 -1
  47. package/dist/types/loaders/api/constants.d.ts +1 -0
  48. package/dist/types/loaders/api/constants.d.ts.map +1 -1
  49. package/dist/types/loaders/api/measure.d.ts +2 -0
  50. package/dist/types/loaders/api/measure.d.ts.map +1 -0
  51. package/dist/types/loaders/api-base.d.ts +13 -0
  52. package/dist/types/loaders/api-base.d.ts.map +1 -1
  53. package/package.json +1 -1
  54. package/src/common/harvest/harvester.js +0 -5
  55. package/src/common/session/session-entity.js +5 -6
  56. package/src/common/util/console.js +13 -0
  57. package/src/features/generic_events/aggregate/index.js +17 -2
  58. package/src/features/generic_events/instrument/index.js +2 -0
  59. package/src/features/session_replay/aggregate/index.js +4 -0
  60. package/src/features/session_replay/shared/recorder.js +0 -4
  61. package/src/features/session_trace/aggregate/index.js +7 -3
  62. package/src/features/session_trace/aggregate/trace/storage.js +37 -23
  63. package/src/loaders/api/addToTrace.js +6 -0
  64. package/src/loaders/api/constants.js +1 -0
  65. package/src/loaders/api/measure.js +53 -0
  66. package/src/loaders/api-base.js +12 -1
@@ -11,6 +11,7 @@ import { setupAddPageActionAPI } from '../../../loaders/api/addPageAction';
11
11
  import { setupFinishedAPI } from '../../../loaders/api/finished';
12
12
  import { setupRecordCustomEventAPI } from '../../../loaders/api/recordCustomEvent';
13
13
  import { setupRegisterAPI } from '../../../loaders/api/register';
14
+ import { setupMeasureAPI } from '../../../loaders/api/measure';
14
15
  import { InstrumentBase } from '../../utils/instrument-base';
15
16
  import { FEATURE_NAME, OBSERVED_EVENTS, OBSERVED_WINDOW_EVENTS } from '../constants';
16
17
  export class Instrument extends InstrumentBase {
@@ -25,6 +26,7 @@ export class Instrument extends InstrumentBase {
25
26
  setupRecordCustomEventAPI(agentRef);
26
27
  setupFinishedAPI(agentRef);
27
28
  setupRegisterAPI(agentRef);
29
+ setupMeasureAPI(agentRef);
28
30
  if (isBrowserScope) {
29
31
  if (agentRef.init.user_actions.enabled) {
30
32
  OBSERVED_EVENTS.forEach(eventType => windowAddEventListener(eventType, evt => handle('ua', [evt], undefined, this.featureName, this.ee), true));
@@ -276,6 +276,9 @@ export class Aggregate extends AggregateBase {
276
276
  this.recorder.clearBuffer();
277
277
  if (recorderEvents.type === 'preloaded') this.agentRef.runtime.harvester.triggerHarvestFor(this);
278
278
  payloadOutput.payload = payload;
279
+ if (!this.agentRef.runtime.session.state.traceHarvestStarted) {
280
+ warn(59, JSON.stringify(this.agentRef.runtime.session.state));
281
+ }
279
282
  return [payloadOutput];
280
283
  }
281
284
  getCorrectedTimestamp(node) {
@@ -161,10 +161,6 @@ export class Recorder {
161
161
  /** Store a payload in the buffer (this.#events). This should be the callback to the recording lib noticing a mutation */
162
162
  store(event, isCheckout) {
163
163
  if (!event) return;
164
- if (this.parent.agentRef.runtime.session?.isAfterSessionExpiry(event.timestamp)) {
165
- handle(SUPPORTABILITY_METRIC_CHANNEL, ['Session/Expired/SessionReplay/Seen'], undefined, FEATURE_NAMES.metrics, this.ee);
166
- return;
167
- }
168
164
  if (!(this.parent instanceof AggregateBase) && this.#preloaded.length) this.currentBufferTarget = this.#preloaded[this.#preloaded.length - 1];else this.currentBufferTarget = this.#events;
169
165
  if (this.parent.blocked) return;
170
166
  if (this.parent.timeKeeper?.ready && !event.__newrelic) {
@@ -11,6 +11,7 @@ import { globalScope } from '../../../common/constants/runtime';
11
11
  import { MODE, SESSION_EVENTS } from '../../../common/session/constants';
12
12
  import { applyFnToProps } from '../../../common/util/traverse';
13
13
  import { cleanURL } from '../../../common/url/clean-url';
14
+ import { warn } from '../../../common/util/console';
14
15
  const ERROR_MODE_SECONDS_WINDOW = 30 * 1000; // sliding window of nodes to track when simply monitoring (but not harvesting) in error mode
15
16
  /** Reserved room for query param attrs */
16
17
  const QUERY_PARAM_PADDING = 5000;
@@ -78,7 +79,7 @@ export class Aggregate extends AggregateBase {
78
79
  registerHandler('bstResource', (...args) => this.events.storeResources(...args), this.featureName, this.ee);
79
80
  registerHandler('bstHist', (...args) => this.events.storeHist(...args), this.featureName, this.ee);
80
81
  registerHandler('bstXhrAgg', (...args) => this.events.storeXhrAgg(...args), this.featureName, this.ee);
81
- registerHandler('bstApi', (...args) => this.events.storeSTN(...args), this.featureName, this.ee);
82
+ registerHandler('bstApi', (...args) => this.events.storeNode(...args), this.featureName, this.ee);
82
83
  registerHandler('trace-jserror', (...args) => this.events.storeErrorAgg(...args), this.featureName, this.ee);
83
84
  registerHandler('pvtAdded', (...args) => this.events.processPVT(...args), this.featureName, this.ee);
84
85
  if (this.mode !== MODE.FULL) {
@@ -91,9 +92,11 @@ export class Aggregate extends AggregateBase {
91
92
  sessionTraceMode: this.mode
92
93
  });
93
94
  this.drain();
95
+ /** try to harvest immediately. This will not send if the trace is not running in FULL mode due to the pre-harvest checks. */
96
+ this.agentRef.runtime.harvester.triggerHarvestFor(this);
94
97
  }
95
98
  preHarvestChecks() {
96
- if (this.mode !== MODE.FULL) return; // only allow harvest if running in full mode
99
+ if (this.blocked || this.mode !== MODE.FULL) return; // only allow harvest if running in full mode
97
100
  if (!this.timeKeeper?.ready) return; // this should likely never happen, but just to be safe, we should never harvest if we cant correct time
98
101
  if (!this.agentRef.runtime.session) return; // session entity is required for trace to run and continue running
99
102
  if (this.sessionId !== this.agentRef.runtime.session.state.value || this.ptid !== this.agentRef.runtime.ptid) {
@@ -187,7 +190,8 @@ export class Aggregate extends AggregateBase {
187
190
  }
188
191
 
189
192
  /** Stop running for the remainder of the page lifecycle */
190
- abort() {
193
+ abort(code) {
194
+ warn(60, code);
191
195
  this.blocked = true;
192
196
  this.mode = MODE.OFF;
193
197
  this.agentRef.runtime.session.write({
@@ -46,23 +46,19 @@ export class TraceStorage {
46
46
  constructor(parent) {
47
47
  this.parent = parent;
48
48
  }
49
- isAfterSessionExpiry(entryTimestamp) {
50
- return this.parent.agentRef.runtime?.session?.isAfterSessionExpiry((this.parent.timeKeeper?.ready && this.parent.timeKeeper.convertRelativeTimestamp(entryTimestamp)) ?? undefined);
51
- }
52
-
53
- /** Central function called by all the other store__ & addToTrace API to append a trace node. */
54
- storeSTN(stn) {
55
- if (this.parent.blocked) return;
49
+ #canStoreNewNode() {
50
+ if (this.parent.blocked) return false;
56
51
  if (this.nodeCount >= MAX_NODES_PER_HARVEST) {
57
52
  // limit the amount of pending data awaiting next harvest
58
- if (this.parent.mode !== MODE.ERROR) return;
53
+ if (this.parent.mode !== MODE.ERROR) return false;
59
54
  const openedSpace = this.trimSTNs(ERROR_MODE_SECONDS_WINDOW); // but maybe we could make some space by discarding irrelevant nodes if we're in sessioned Error mode
60
- if (openedSpace === 0) return;
61
- }
62
- if (this.isAfterSessionExpiry(stn.s)) {
63
- this.parent.reportSupportabilityMetric('Session/Expired/SessionTrace/Seen');
64
- return;
55
+ if (openedSpace === 0) return false;
65
56
  }
57
+ return true;
58
+ }
59
+
60
+ /** Central internal function called by all the other store__ & addToTrace API to append a trace node. They MUST all have checked #canStoreNewNode before calling this func!! */
61
+ #storeSTN(stn) {
66
62
  if (this.trace[stn.n]) this.trace[stn.n].push(stn);else this.trace[stn.n] = [stn];
67
63
  if (stn.s < this.earliestTimeStamp) this.earliestTimeStamp = stn.s;
68
64
  if (stn.s > this.latestTimeStamp) this.latestTimeStamp = stn.s;
@@ -142,6 +138,10 @@ export class TraceStorage {
142
138
  return !!(node && typeof node.e === 'number' && typeof node.s === 'number' && node.e - node.s < limit);
143
139
  }
144
140
  }
141
+ storeNode(node) {
142
+ if (!this.#canStoreNewNode()) return;
143
+ this.#storeSTN(node);
144
+ }
145
145
  processPVT(name, value, attrs) {
146
146
  this.storeTiming({
147
147
  [name]: value
@@ -165,13 +165,16 @@ export class TraceStorage {
165
165
  if (this.parent.timeKeeper && this.parent.timeKeeper.ready && isAbsoluteTimestamp) {
166
166
  val = this.parent.timeKeeper.convertAbsoluteTimestamp(Math.floor(this.parent.timeKeeper.correctAbsoluteTimestamp(val)));
167
167
  }
168
- this.storeSTN(new TraceNode(key, val, val, 'document', 'timing'));
168
+ if (!this.#canStoreNewNode()) return; // at any point when no new nodes can be stored, there's no point in processing the rest of the timing entries
169
+ this.#storeSTN(new TraceNode(key, val, val, 'document', 'timing'));
169
170
  }
170
171
  }
171
172
 
172
173
  // Tracks the events and their listener's duration on objects wrapped by wrap-events.
173
174
  storeEvent(currentEvent, target, start, end) {
174
175
  if (this.shouldIgnoreEvent(currentEvent, target)) return;
176
+ if (!this.#canStoreNewNode()) return; // need to check if adding node will succeed BEFORE storing event ref below (*cli Jun'25 - addressing memory leak in aborted ST issue #NR-420780)
177
+
175
178
  if (this.prevStoredEvents.has(currentEvent)) return; // prevent multiple listeners of an event from creating duplicate trace nodes per occurrence. Cleared every harvest. near-zero chance for re-duplication after clearing per harvest since the timestamps of the event are considered for uniqueness.
176
179
  this.prevStoredEvents.add(currentEvent);
177
180
  const evt = new TraceNode(this.evtName(currentEvent.type), start, end, undefined, 'event');
@@ -182,7 +185,7 @@ export class TraceStorage {
182
185
  } catch (e) {
183
186
  evt.o = eventOrigin(null, target, this.parent.ee);
184
187
  }
185
- this.storeSTN(evt);
188
+ this.#storeSTN(evt);
186
189
  }
187
190
  shouldIgnoreEvent(event, target) {
188
191
  if (event.type in ignoredEvents.global) return true;
@@ -218,14 +221,17 @@ export class TraceStorage {
218
221
 
219
222
  // Tracks when the window history API specified by wrap-history is used.
220
223
  storeHist(path, old, time) {
221
- this.storeSTN(new TraceNode('history.pushState', time, time, path, old));
224
+ if (!this.#canStoreNewNode()) return;
225
+ this.#storeSTN(new TraceNode('history.pushState', time, time, path, old));
222
226
  }
223
227
  #laststart = 0;
224
228
  // Processes all the PerformanceResourceTiming entries captured (by observer).
225
229
  storeResources(resources) {
226
230
  if (!resources || resources.length === 0) return;
227
- resources.forEach(currentResource => {
228
- if ((currentResource.fetchStart | 0) <= this.#laststart) return; // don't recollect already-seen resources
231
+ for (let i = 0; i < resources.length; i++) {
232
+ const currentResource = resources[i];
233
+ if ((currentResource.fetchStart | 0) <= this.#laststart) continue; // don't recollect already-seen resources
234
+ if (!this.#canStoreNewNode()) break; // stop processing if we can't store any more resource nodes anyways
229
235
 
230
236
  const {
231
237
  initiatorType,
@@ -240,21 +246,23 @@ export class TraceStorage {
240
246
  pathname
241
247
  } = parseUrl(currentResource.name);
242
248
  const res = new TraceNode(initiatorType, fetchStart | 0, responseEnd | 0, "".concat(protocol, "://").concat(hostname, ":").concat(port).concat(pathname), entryType);
243
- this.storeSTN(res);
244
- });
249
+ this.#storeSTN(res);
250
+ }
245
251
  this.#laststart = resources[resources.length - 1].fetchStart | 0;
246
252
  }
247
253
 
248
254
  // JavascriptError (FEATURE) events pipes into ST here.
249
255
  storeErrorAgg(type, name, params, metrics) {
250
256
  if (type !== 'err') return; // internal errors are purposefully ignored
251
- this.storeSTN(new TraceNode('error', metrics.time, metrics.time, params.message, params.stackHash));
257
+ if (!this.#canStoreNewNode()) return;
258
+ this.#storeSTN(new TraceNode('error', metrics.time, metrics.time, params.message, params.stackHash));
252
259
  }
253
260
 
254
261
  // Ajax (FEATURE) events--XML & fetches--pipes into ST here.
255
262
  storeXhrAgg(type, name, params, metrics) {
256
263
  if (type !== 'xhr') return;
257
- this.storeSTN(new TraceNode('Ajax', metrics.time, metrics.time + metrics.duration, "".concat(params.status, " ").concat(params.method, ": ").concat(params.host).concat(params.pathname), 'ajax'));
264
+ if (!this.#canStoreNewNode()) return;
265
+ this.#storeSTN(new TraceNode('Ajax', metrics.time, metrics.time + metrics.duration, "".concat(params.status, " ").concat(params.method, ": ").concat(params.host).concat(params.pathname), 'ajax'));
258
266
  }
259
267
 
260
268
  /* Below are the interface expected & required of whatever storage is used across all features on an individual basis. This allows a common `.events` property on Trace shared with AggregateBase.
@@ -279,7 +287,12 @@ export class TraceStorage {
279
287
  this.latestTimeStamp = 0;
280
288
  }
281
289
  reloadSave() {
282
- Object.values(this.#backupTrace).forEach(stnsArray => stnsArray.forEach(stn => this.storeSTN(stn)));
290
+ for (const stnsArray of Object.values(this.#backupTrace)) {
291
+ for (const stn of stnsArray) {
292
+ if (!this.#canStoreNewNode()) return; // stop attempting to re-store nodes
293
+ this.#storeSTN(stn);
294
+ }
295
+ }
283
296
  }
284
297
  clearSave() {
285
298
  this.#backupTrace = undefined;
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { originTime } from '../../common/constants/runtime';
6
6
  import { handle } from '../../common/event-emitter/handle';
7
+ import { warn } from '../../common/util/console';
7
8
  import { FEATURE_NAMES } from '../features/features';
8
9
  import { ADD_TO_TRACE } from './constants';
9
10
  import { setupAPI } from './sharedHandlers';
@@ -17,6 +18,13 @@ export function setupAddToTraceAPI(agent) {
17
18
  o: evt.origin || '',
18
19
  t: 'api'
19
20
  };
21
+ if (report.s < 0 || report.e < 0 || report.e < report.s) {
22
+ warn(61, {
23
+ start: report.s,
24
+ end: report.e
25
+ });
26
+ return;
27
+ }
20
28
  handle('bstApi', [report], undefined, FEATURE_NAMES.sessionTrace, agent.ee);
21
29
  }, agent);
22
30
  }
@@ -22,4 +22,5 @@ export const SET_ERROR_HANDLER = 'setErrorHandler';
22
22
  export const SET_PAGE_VIEW_NAME = 'setPageViewName';
23
23
  export const SET_USER_ID = 'setUserId';
24
24
  export const START = 'start';
25
- export const WRAP_LOGGER = 'wrapLogger';
25
+ export const WRAP_LOGGER = 'wrapLogger';
26
+ export const MEASURE = 'measure';
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Copyright 2020-2025 New Relic, Inc. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { handle } from '../../common/event-emitter/handle';
6
+ import { now } from '../../common/timing/now';
7
+ import { warn } from '../../common/util/console';
8
+ import { FEATURE_NAMES } from '../features/features';
9
+ import { prefix, MEASURE } from './constants';
10
+ import { setupAPI } from './sharedHandlers';
11
+ export function setupMeasureAPI(agent) {
12
+ setupAPI(MEASURE, function (name, options) {
13
+ const n = now();
14
+ const {
15
+ start,
16
+ end,
17
+ customAttributes
18
+ } = options || {};
19
+ const returnObj = {
20
+ customAttributes: customAttributes || {}
21
+ };
22
+ if (typeof returnObj.customAttributes !== 'object' || typeof name !== 'string' || name.length === 0) {
23
+ warn(57);
24
+ return;
25
+ }
26
+
27
+ /**
28
+ * getValueFromTiming - Helper function to extract a numeric value from a supplied option.
29
+ * @param {Number|PerformanceMark} [timing] The timing value
30
+ * @param {Number} [d] The default value to return if timing is invalid
31
+ * @returns {Number} The timing value or the default value
32
+ */
33
+ const getValueFromTiming = (timing, d) => {
34
+ if (timing == null) return d;
35
+ if (typeof timing === 'number') return timing;
36
+ if (timing instanceof PerformanceMark) return timing.startTime;
37
+ return Number.NaN;
38
+ };
39
+ returnObj.start = getValueFromTiming(start, 0);
40
+ returnObj.end = getValueFromTiming(end, n);
41
+ if (Number.isNaN(returnObj.start) || Number.isNaN(returnObj.end)) {
42
+ warn(57);
43
+ return;
44
+ }
45
+ returnObj.duration = returnObj.end - returnObj.start;
46
+ if (returnObj.duration < 0) {
47
+ warn(58);
48
+ return;
49
+ }
50
+ handle(prefix + MEASURE, [returnObj, name], undefined, FEATURE_NAMES.genericEvents, agent.ee);
51
+ return returnObj;
52
+ }, agent);
53
+ }
@@ -3,7 +3,7 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { warn } from '../common/util/console';
6
- import { ADD_PAGE_ACTION, ADD_RELEASE, ADD_TO_TRACE, FINISHED, INTERACTION, LOG, NOTICE_ERROR, PAUSE_REPLAY, RECORD_CUSTOM_EVENT, RECORD_REPLAY, REGISTER, SET_APPLICATION_VERSION, SET_CURRENT_ROUTE_NAME, SET_CUSTOM_ATTRIBUTE, SET_ERROR_HANDLER, SET_PAGE_VIEW_NAME, SET_USER_ID, START, WRAP_LOGGER } from './api/constants';
6
+ import { ADD_PAGE_ACTION, ADD_RELEASE, ADD_TO_TRACE, FINISHED, INTERACTION, LOG, NOTICE_ERROR, PAUSE_REPLAY, RECORD_CUSTOM_EVENT, RECORD_REPLAY, REGISTER, SET_APPLICATION_VERSION, SET_CURRENT_ROUTE_NAME, SET_CUSTOM_ATTRIBUTE, SET_ERROR_HANDLER, SET_PAGE_VIEW_NAME, SET_USER_ID, START, WRAP_LOGGER, MEASURE } from './api/constants';
7
7
 
8
8
  /**
9
9
  * @typedef {import('./api/interaction-types').InteractionInstance} InteractionInstance
@@ -214,4 +214,15 @@ export class ApiBase {
214
214
  wrapLogger(parent, functionName, options) {
215
215
  return this.#callMethod(WRAP_LOGGER, parent, functionName, options);
216
216
  }
217
+
218
+ /**
219
+ * Measures a task that is recorded as a BrowserPerformance event.
220
+ * {@link https://docs.newrelic.com/docs/browser/new-relic-browser/browser-apis/measure/}
221
+ * @param {string} name The name of the task
222
+ * @param {object?} options An object used to control the way the measure API operates
223
+ * @returns {{start: number, end: number, duration: number, customAttributes: object}} Measurement details
224
+ */
225
+ measure(name, options) {
226
+ return this.#callMethod(MEASURE, name, options);
227
+ }
217
228
  }
@@ -1 +1 @@
1
- {"root":["../src/index.js","../src/cdn/experimental.js","../src/cdn/lite.js","../src/cdn/pro.js","../src/cdn/spa.js","../src/common/aggregate/aggregator.js","../src/common/aggregate/event-aggregator.js","../src/common/config/configurable.js","../src/common/config/info.js","../src/common/config/init-types.js","../src/common/config/init.js","../src/common/config/loader-config.js","../src/common/config/runtime.js","../src/common/constants/agent-constants.js","../src/common/constants/env.cdn.js","../src/common/constants/env.js","../src/common/constants/env.npm.js","../src/common/constants/runtime.js","../src/common/constants/shared-channel.js","../src/common/deny-list/deny-list.js","../src/common/dispatch/global-event.js","../src/common/dom/iframe.js","../src/common/dom/query-selector.js","../src/common/dom/selector-path.js","../src/common/drain/drain.js","../src/common/event-emitter/contextual-ee.js","../src/common/event-emitter/event-context.js","../src/common/event-emitter/handle.js","../src/common/event-emitter/register-handler.js","../src/common/event-listener/event-listener-opts.js","../src/common/harvest/harvester.js","../src/common/harvest/types.js","../src/common/ids/bundle-id.js","../src/common/ids/id.js","../src/common/ids/unique-id.js","../src/common/serialize/bel-serializer.js","../src/common/session/constants.js","../src/common/session/session-entity.js","../src/common/storage/local-storage.js","../src/common/timer/interaction-timer.js","../src/common/timer/timer.js","../src/common/timing/nav-timing.js","../src/common/timing/now.js","../src/common/timing/time-keeper.js","../src/common/unload/eol.js","../src/common/url/canonicalize-url.js","../src/common/url/clean-url.js","../src/common/url/encode.js","../src/common/url/location.js","../src/common/url/parse-url.js","../src/common/url/protocol.js","../src/common/util/console.js","../src/common/util/data-size.js","../src/common/util/event-origin.js","../src/common/util/feature-flags.js","../src/common/util/get-or-set.js","../src/common/util/invoke.js","../src/common/util/obfuscate.js","../src/common/util/stringify.js","../src/common/util/submit-data.js","../src/common/util/target.js","../src/common/util/text.js","../src/common/util/traverse.js","../src/common/util/type-check.js","../src/common/vitals/constants.js","../src/common/vitals/cumulative-layout-shift.js","../src/common/vitals/first-contentful-paint.js","../src/common/vitals/first-paint.js","../src/common/vitals/interaction-to-next-paint.js","../src/common/vitals/largest-contentful-paint.js","../src/common/vitals/time-to-first-byte.js","../src/common/vitals/vital-metric.js","../src/common/window/load.js","../src/common/window/nreum.js","../src/common/window/page-visibility.js","../src/common/wrap/wrap-events.js","../src/common/wrap/wrap-fetch.js","../src/common/wrap/wrap-function.js","../src/common/wrap/wrap-history.js","../src/common/wrap/wrap-jsonp.js","../src/common/wrap/wrap-logger.js","../src/common/wrap/wrap-mutation.js","../src/common/wrap/wrap-promise.js","../src/common/wrap/wrap-timer.js","../src/common/wrap/wrap-websocket.js","../src/common/wrap/wrap-xhr.js","../src/features/ajax/constants.js","../src/features/ajax/index.js","../src/features/ajax/aggregate/gql.js","../src/features/ajax/aggregate/index.js","../src/features/ajax/instrument/distributed-tracing.js","../src/features/ajax/instrument/index.js","../src/features/ajax/instrument/response-size.js","../src/features/generic_events/constants.js","../src/features/generic_events/index.js","../src/features/generic_events/aggregate/index.js","../src/features/generic_events/aggregate/user-actions/aggregated-user-action.js","../src/features/generic_events/aggregate/user-actions/user-actions-aggregator.js","../src/features/generic_events/instrument/index.js","../src/features/jserrors/constants.js","../src/features/jserrors/index.js","../src/features/jserrors/aggregate/canonical-function-name.js","../src/features/jserrors/aggregate/compute-stack-trace.js","../src/features/jserrors/aggregate/format-stack-trace.js","../src/features/jserrors/aggregate/index.js","../src/features/jserrors/aggregate/internal-errors.js","../src/features/jserrors/aggregate/string-hash-code.js","../src/features/jserrors/instrument/index.js","../src/features/jserrors/shared/cast-error.js","../src/features/jserrors/shared/uncaught-error.js","../src/features/logging/constants.js","../src/features/logging/index.js","../src/features/logging/aggregate/index.js","../src/features/logging/instrument/index.js","../src/features/logging/shared/log.js","../src/features/logging/shared/utils.js","../src/features/metrics/constants.js","../src/features/metrics/index.js","../src/features/metrics/aggregate/framework-detection.js","../src/features/metrics/aggregate/index.js","../src/features/metrics/aggregate/websocket-detection.js","../src/features/metrics/instrument/index.js","../src/features/page_action/constants.js","../src/features/page_action/index.js","../src/features/page_action/instrument/index.js","../src/features/page_view_event/constants.js","../src/features/page_view_event/index.js","../src/features/page_view_event/aggregate/index.js","../src/features/page_view_event/aggregate/initialized-features.js","../src/features/page_view_event/instrument/index.js","../src/features/page_view_timing/constants.js","../src/features/page_view_timing/index.js","../src/features/page_view_timing/aggregate/index.js","../src/features/page_view_timing/instrument/index.js","../src/features/session_replay/constants.js","../src/features/session_replay/index.js","../src/features/session_replay/aggregate/index.js","../src/features/session_replay/instrument/index.js","../src/features/session_replay/shared/recorder-events.js","../src/features/session_replay/shared/recorder.js","../src/features/session_replay/shared/stylesheet-evaluator.js","../src/features/session_replay/shared/utils.js","../src/features/session_trace/constants.js","../src/features/session_trace/index.js","../src/features/session_trace/aggregate/index.js","../src/features/session_trace/aggregate/trace/node.js","../src/features/session_trace/aggregate/trace/storage.js","../src/features/session_trace/instrument/index.js","../src/features/soft_navigations/constants.js","../src/features/soft_navigations/index.js","../src/features/soft_navigations/aggregate/ajax-node.js","../src/features/soft_navigations/aggregate/bel-node.js","../src/features/soft_navigations/aggregate/index.js","../src/features/soft_navigations/aggregate/initial-page-load-interaction.js","../src/features/soft_navigations/aggregate/interaction.js","../src/features/soft_navigations/instrument/index.js","../src/features/spa/constants.js","../src/features/spa/index.js","../src/features/spa/aggregate/index.js","../src/features/spa/aggregate/interaction-node.js","../src/features/spa/aggregate/interaction.js","../src/features/spa/aggregate/serializer.js","../src/features/spa/instrument/index.js","../src/features/utils/agent-session.js","../src/features/utils/aggregate-base.js","../src/features/utils/entity-manager.js","../src/features/utils/event-buffer.js","../src/features/utils/event-store-manager.js","../src/features/utils/feature-base.js","../src/features/utils/feature-gates.js","../src/features/utils/instrument-base.js","../src/features/utils/nr1-debugger.js","../src/interfaces/registered-entity.js","../src/loaders/agent-base.js","../src/loaders/agent.js","../src/loaders/api-base.js","../src/loaders/browser-agent.js","../src/loaders/micro-agent-base.js","../src/loaders/micro-agent.js","../src/loaders/api/addPageAction.js","../src/loaders/api/addRelease.js","../src/loaders/api/addToTrace.js","../src/loaders/api/constants.js","../src/loaders/api/finished.js","../src/loaders/api/interaction-types.js","../src/loaders/api/interaction.js","../src/loaders/api/log.js","../src/loaders/api/noticeError.js","../src/loaders/api/pauseReplay.js","../src/loaders/api/recordCustomEvent.js","../src/loaders/api/recordReplay.js","../src/loaders/api/register-api-types.js","../src/loaders/api/register-api.js","../src/loaders/api/register.js","../src/loaders/api/setApplicationVersion.js","../src/loaders/api/setCustomAttribute.js","../src/loaders/api/setErrorHandler.js","../src/loaders/api/setPageViewName.js","../src/loaders/api/setUserId.js","../src/loaders/api/sharedHandlers.js","../src/loaders/api/start.js","../src/loaders/api/topLevelCallers.js","../src/loaders/api/wrapLogger.js","../src/loaders/configure/configure.js","../src/loaders/configure/nonce.js","../src/loaders/configure/public-path.js","../src/loaders/features/enabled-features.js","../src/loaders/features/featureDependencies.js","../src/loaders/features/features.js"],"version":"5.7.3"}
1
+ {"root":["../src/index.js","../src/cdn/experimental.js","../src/cdn/lite.js","../src/cdn/pro.js","../src/cdn/spa.js","../src/common/aggregate/aggregator.js","../src/common/aggregate/event-aggregator.js","../src/common/config/configurable.js","../src/common/config/info.js","../src/common/config/init-types.js","../src/common/config/init.js","../src/common/config/loader-config.js","../src/common/config/runtime.js","../src/common/constants/agent-constants.js","../src/common/constants/env.cdn.js","../src/common/constants/env.js","../src/common/constants/env.npm.js","../src/common/constants/runtime.js","../src/common/constants/shared-channel.js","../src/common/deny-list/deny-list.js","../src/common/dispatch/global-event.js","../src/common/dom/iframe.js","../src/common/dom/query-selector.js","../src/common/dom/selector-path.js","../src/common/drain/drain.js","../src/common/event-emitter/contextual-ee.js","../src/common/event-emitter/event-context.js","../src/common/event-emitter/handle.js","../src/common/event-emitter/register-handler.js","../src/common/event-listener/event-listener-opts.js","../src/common/harvest/harvester.js","../src/common/harvest/types.js","../src/common/ids/bundle-id.js","../src/common/ids/id.js","../src/common/ids/unique-id.js","../src/common/serialize/bel-serializer.js","../src/common/session/constants.js","../src/common/session/session-entity.js","../src/common/storage/local-storage.js","../src/common/timer/interaction-timer.js","../src/common/timer/timer.js","../src/common/timing/nav-timing.js","../src/common/timing/now.js","../src/common/timing/time-keeper.js","../src/common/unload/eol.js","../src/common/url/canonicalize-url.js","../src/common/url/clean-url.js","../src/common/url/encode.js","../src/common/url/location.js","../src/common/url/parse-url.js","../src/common/url/protocol.js","../src/common/util/console.js","../src/common/util/data-size.js","../src/common/util/event-origin.js","../src/common/util/feature-flags.js","../src/common/util/get-or-set.js","../src/common/util/invoke.js","../src/common/util/obfuscate.js","../src/common/util/stringify.js","../src/common/util/submit-data.js","../src/common/util/target.js","../src/common/util/text.js","../src/common/util/traverse.js","../src/common/util/type-check.js","../src/common/vitals/constants.js","../src/common/vitals/cumulative-layout-shift.js","../src/common/vitals/first-contentful-paint.js","../src/common/vitals/first-paint.js","../src/common/vitals/interaction-to-next-paint.js","../src/common/vitals/largest-contentful-paint.js","../src/common/vitals/time-to-first-byte.js","../src/common/vitals/vital-metric.js","../src/common/window/load.js","../src/common/window/nreum.js","../src/common/window/page-visibility.js","../src/common/wrap/wrap-events.js","../src/common/wrap/wrap-fetch.js","../src/common/wrap/wrap-function.js","../src/common/wrap/wrap-history.js","../src/common/wrap/wrap-jsonp.js","../src/common/wrap/wrap-logger.js","../src/common/wrap/wrap-mutation.js","../src/common/wrap/wrap-promise.js","../src/common/wrap/wrap-timer.js","../src/common/wrap/wrap-websocket.js","../src/common/wrap/wrap-xhr.js","../src/features/ajax/constants.js","../src/features/ajax/index.js","../src/features/ajax/aggregate/gql.js","../src/features/ajax/aggregate/index.js","../src/features/ajax/instrument/distributed-tracing.js","../src/features/ajax/instrument/index.js","../src/features/ajax/instrument/response-size.js","../src/features/generic_events/constants.js","../src/features/generic_events/index.js","../src/features/generic_events/aggregate/index.js","../src/features/generic_events/aggregate/user-actions/aggregated-user-action.js","../src/features/generic_events/aggregate/user-actions/user-actions-aggregator.js","../src/features/generic_events/instrument/index.js","../src/features/jserrors/constants.js","../src/features/jserrors/index.js","../src/features/jserrors/aggregate/canonical-function-name.js","../src/features/jserrors/aggregate/compute-stack-trace.js","../src/features/jserrors/aggregate/format-stack-trace.js","../src/features/jserrors/aggregate/index.js","../src/features/jserrors/aggregate/internal-errors.js","../src/features/jserrors/aggregate/string-hash-code.js","../src/features/jserrors/instrument/index.js","../src/features/jserrors/shared/cast-error.js","../src/features/jserrors/shared/uncaught-error.js","../src/features/logging/constants.js","../src/features/logging/index.js","../src/features/logging/aggregate/index.js","../src/features/logging/instrument/index.js","../src/features/logging/shared/log.js","../src/features/logging/shared/utils.js","../src/features/metrics/constants.js","../src/features/metrics/index.js","../src/features/metrics/aggregate/framework-detection.js","../src/features/metrics/aggregate/index.js","../src/features/metrics/aggregate/websocket-detection.js","../src/features/metrics/instrument/index.js","../src/features/page_action/constants.js","../src/features/page_action/index.js","../src/features/page_action/instrument/index.js","../src/features/page_view_event/constants.js","../src/features/page_view_event/index.js","../src/features/page_view_event/aggregate/index.js","../src/features/page_view_event/aggregate/initialized-features.js","../src/features/page_view_event/instrument/index.js","../src/features/page_view_timing/constants.js","../src/features/page_view_timing/index.js","../src/features/page_view_timing/aggregate/index.js","../src/features/page_view_timing/instrument/index.js","../src/features/session_replay/constants.js","../src/features/session_replay/index.js","../src/features/session_replay/aggregate/index.js","../src/features/session_replay/instrument/index.js","../src/features/session_replay/shared/recorder-events.js","../src/features/session_replay/shared/recorder.js","../src/features/session_replay/shared/stylesheet-evaluator.js","../src/features/session_replay/shared/utils.js","../src/features/session_trace/constants.js","../src/features/session_trace/index.js","../src/features/session_trace/aggregate/index.js","../src/features/session_trace/aggregate/trace/node.js","../src/features/session_trace/aggregate/trace/storage.js","../src/features/session_trace/instrument/index.js","../src/features/soft_navigations/constants.js","../src/features/soft_navigations/index.js","../src/features/soft_navigations/aggregate/ajax-node.js","../src/features/soft_navigations/aggregate/bel-node.js","../src/features/soft_navigations/aggregate/index.js","../src/features/soft_navigations/aggregate/initial-page-load-interaction.js","../src/features/soft_navigations/aggregate/interaction.js","../src/features/soft_navigations/instrument/index.js","../src/features/spa/constants.js","../src/features/spa/index.js","../src/features/spa/aggregate/index.js","../src/features/spa/aggregate/interaction-node.js","../src/features/spa/aggregate/interaction.js","../src/features/spa/aggregate/serializer.js","../src/features/spa/instrument/index.js","../src/features/utils/agent-session.js","../src/features/utils/aggregate-base.js","../src/features/utils/entity-manager.js","../src/features/utils/event-buffer.js","../src/features/utils/event-store-manager.js","../src/features/utils/feature-base.js","../src/features/utils/feature-gates.js","../src/features/utils/instrument-base.js","../src/features/utils/nr1-debugger.js","../src/interfaces/registered-entity.js","../src/loaders/agent-base.js","../src/loaders/agent.js","../src/loaders/api-base.js","../src/loaders/browser-agent.js","../src/loaders/micro-agent-base.js","../src/loaders/micro-agent.js","../src/loaders/api/addPageAction.js","../src/loaders/api/addRelease.js","../src/loaders/api/addToTrace.js","../src/loaders/api/constants.js","../src/loaders/api/finished.js","../src/loaders/api/interaction-types.js","../src/loaders/api/interaction.js","../src/loaders/api/log.js","../src/loaders/api/measure.js","../src/loaders/api/noticeError.js","../src/loaders/api/pauseReplay.js","../src/loaders/api/recordCustomEvent.js","../src/loaders/api/recordReplay.js","../src/loaders/api/register-api-types.js","../src/loaders/api/register-api.js","../src/loaders/api/register.js","../src/loaders/api/setApplicationVersion.js","../src/loaders/api/setCustomAttribute.js","../src/loaders/api/setErrorHandler.js","../src/loaders/api/setPageViewName.js","../src/loaders/api/setUserId.js","../src/loaders/api/sharedHandlers.js","../src/loaders/api/start.js","../src/loaders/api/topLevelCallers.js","../src/loaders/api/wrapLogger.js","../src/loaders/configure/configure.js","../src/loaders/configure/nonce.js","../src/loaders/configure/public-path.js","../src/loaders/features/enabled-features.js","../src/loaders/features/featureDependencies.js","../src/loaders/features/features.js"],"version":"5.7.3"}
@@ -1 +1 @@
1
- {"version":3,"file":"harvester.d.ts","sourceRoot":"","sources":["../../../../src/common/harvest/harvester.js"],"names":[],"mappings":"AAwBA;IAIE,2BAcC;IAhBD,6BAA0B;IAGxB,cAAwB;IAe1B,wCASC;IAED;;;;;OAKG;IACH,iCAJW,MAAM,cACN,MAAM,GACJ,OAAO,CA+CnB;;CACF;8BAGY,OAAO,YAAY,EAAE,eAAe"}
1
+ {"version":3,"file":"harvester.d.ts","sourceRoot":"","sources":["../../../../src/common/harvest/harvester.js"],"names":[],"mappings":"AAuBA;IAIE,2BAUC;IAZD,6BAA0B;IAGxB,cAAwB;IAW1B,wCASC;IAED;;;;;OAKG;IACH,iCAJW,MAAM,cACN,MAAM,GACJ,OAAO,CA+CnB;;CACF;8BAGY,OAAO,YAAY,EAAE,eAAe"}
@@ -42,7 +42,6 @@ export class SessionEntity {
42
42
  * Refresh the inactivity timer data
43
43
  */
44
44
  refresh(): void;
45
- isAfterSessionExpiry(timestamp: any): boolean;
46
45
  /**
47
46
  * @param {number} timestamp
48
47
  * @returns {boolean}
@@ -1 +1 @@
1
- {"version":3,"file":"session-entity.d.ts","sourceRoot":"","sources":["../../../../src/common/session/session-entity.js"],"names":[],"mappings":"AAqCA;IACE;;;;;OAKG;IACH,uBA+BC;IAzBC,qBAAsC;IACtC,aAAsB;IACtB,UAAe;IAGf,SAAc;IAEd,QAAiC;IAoBnC;;;;;aA6EC;IApEC,8BAA0B;IAC1B,+BAA4B;IAe1B,gCAOqC;IAUrC,4CAkBsC;IAexC,iCAAuB;IAKzB,wBAEC;IAED,sBAEC;IAED;;;OAGG;IACH,QAFa,MAAM,CA6BlB;IAED;;;;;;OAMG;IACH,YAHW,MAAM,GACJ,MAAM,CAkBlB;IAED,gBAwBC;IAED;;OAEG;IACH,gBAIC;IAED,8CAEC;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,gBAHW,MAAM,GACJ,OAAO,CAKnB;IAED,yDAUC;IAED,6DAIC;IAED;;;OAGG;IACH,6BAHW,MAAM,GACJ,MAAM,CAIlB;IAED,gDAaC;IAHG,YAAuD;CAI5D;sBAvTqB,gBAAgB;iCAGL,4BAA4B"}
1
+ {"version":3,"file":"session-entity.d.ts","sourceRoot":"","sources":["../../../../src/common/session/session-entity.js"],"names":[],"mappings":"AAqCA;IACE;;;;;OAKG;IACH,uBA+BC;IAzBC,qBAAsC;IACtC,aAAsB;IACtB,UAAe;IAGf,SAAc;IAEd,QAAiC;IAoBnC;;;;;aA6EC;IApEC,8BAA0B;IAC1B,+BAA4B;IAe1B,gCAOqC;IAUrC,4CAkBsC;IAexC,iCAAuB;IAKzB,wBAEC;IAED,sBAEC;IAED;;;OAGG;IACH,QAFa,MAAM,CA6BlB;IAED;;;;;;OAMG;IACH,YAHW,MAAM,GACJ,MAAM,CAkBlB;IAED,gBA2BC;IAED;;OAEG;IACH,gBAIC;IAED;;;OAGG;IACH,qBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,gBAHW,MAAM,GACJ,OAAO,CAKnB;IAED,yDAUC;IAED,6DAIC;IAED;;;OAGG;IACH,6BAHW,MAAM,GACJ,MAAM,CAIlB;IAED,gDAaC;IAHG,YAAuD;CAI5D;sBAtTqB,gBAAgB;iCAGL,4BAA4B"}
@@ -1,7 +1,3 @@
1
- /**
2
- * Copyright 2020-2025 New Relic, Inc. All rights reserved.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
1
  /**
6
2
  * A helper method to warn to the console with New Relic: decoration
7
3
  * @param {string} message The primary message to warn
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../../src/common/util/console.js"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,4CAHW,GAAC,QAMX"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../../src/common/util/console.js"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,4CAHW,GAAC,QAiBX"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/generic_events/aggregate/index.js"],"names":[],"mappings":"AAkBA;IACE,2BAAiC;IACjC,2BA6MC;IA3MC,yBAA4B;IAC5B,gCAAkG;IAwC9F,4CAAuD;IAqK7D;;;;;;;;;;;;OAYG;IACH,eAJW,MAAM,YAAC,qBACP,MAAM,YAAC,QA0CjB;IAED,qCAEC;IAED;;;MAEC;IAED,gCAEC;IAED,mCASC;CACF;8BAxS6B,4BAA4B;sCAMpB,wCAAwC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/generic_events/aggregate/index.js"],"names":[],"mappings":"AAkBA;IACE,2BAAiC;IACjC,2BA4NC;IA1NC,yBAA4B;IAC5B,gCAAkG;IAwC9F,4CAAuD;IAoL7D;;;;;;;;;;;;OAYG;IACH,eAJW,MAAM,YAAC,qBACP,MAAM,YAAC,QA0CjB;IAED,qCAEC;IAED;;;MAEC;IAED,gCAEC;IAED,mCASC;CACF;8BAvT6B,4BAA4B;sCAMpB,wCAAwC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/generic_events/instrument/index.js"],"names":[],"mappings":"AAgBA;IACE,2BAAiC;IACjC,2BA0CC;CACF;AAED,8CAAuC;+BAlDR,6BAA6B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/generic_events/instrument/index.js"],"names":[],"mappings":"AAiBA;IACE,2BAAiC;IACjC,2BA2CC;CACF;AAED,8CAAuC;+BAnDR,6BAA6B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_replay/aggregate/index.js"],"names":[],"mappings":"AAyBA;IACE,2BAAiC;IAIjC,sCAsFC;IAzFD,aAAe;IAKb,iFAAiF;IACjF,qBAAwB;IAGxB,2CAA2C;IAC3C,sDAAwB;IACxB,6CAA6C;IAC7C,gDAAmB;IAEnB,0BAA0B;IAC1B,kBAAqB;IACrB,6CAA6C;IAC7C,gBAA2B;IAE3B,cAA8B;IAC9B,kBAA+C;IAG/C,kCAAqG;IAoEvG,0BAEC;IAED,0BAMC;IAED,qBAUC;IAED;;;;;OAKG;IACH,4BAJW,OAAO,iBACP,OAAO,GACL,IAAI,CAuDhB;IAED,2BASC;IAED;;;oBAmDC;IAED,sCAIC;IAED;;;;;;;;;;MAuEC;IAED,sCAKC;IAED;;;;OAIG;IACH,mCAKC;IAED,yDAAyD;IACzD,+CASC;IAED,yCAIC;CACF;8BApX6B,4BAA4B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_replay/aggregate/index.js"],"names":[],"mappings":"AAyBA;IACE,2BAAiC;IAIjC,sCAsFC;IAzFD,aAAe;IAKb,iFAAiF;IACjF,qBAAwB;IAGxB,2CAA2C;IAC3C,sDAAwB;IACxB,6CAA6C;IAC7C,gDAAmB;IAEnB,0BAA0B;IAC1B,kBAAqB;IACrB,6CAA6C;IAC7C,gBAA2B;IAE3B,cAA8B;IAC9B,kBAA+C;IAG/C,kCAAqG;IAoEvG,0BAEC;IAED,0BAMC;IAED,qBAUC;IAED;;;;;OAKG;IACH,4BAJW,OAAO,iBACP,OAAO,GACL,IAAI,CAuDhB;IAED,2BASC;IAED;;;oBAuDC;IAED,sCAIC;IAED;;;;;;;;;;MAuEC;IAED,sCAKC;IAED;;;;OAIG;IACH,mCAKC;IAED,yDAAyD;IACzD,+CASC;IAED,yCAIC;CACF;8BAxX6B,4BAA4B"}
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_replay/shared/recorder.js"],"names":[],"mappings":"AAmBA;IAYE,yBAiBC;IAhBC,sDAAsD;IACtD,YAAoB;IACpB,0FAA0F;IAC1F,eAAyE;IAKzE,6DAA6D;IAC7D,oCAAuC;IACvC,+IAA+I;IAC/I,yBAA4B;IAC5B,kIAAkI;IAClI,kBAAqB;IACrB,uIAAuI;IACvI,0BAA+E;IAGjF;;;;;;;;;MAmBC;IAED,mFAAmF;IACnF,oBAKC;IAED,qDAAqD;IACrD,uBAiCC;IAED;;;;;OAKG;IACH,aAHW,GAAC,cACD,GAAC,QAiCX;IAED,0HAA0H;IAC1H,yCAmDC;IAED,0HAA0H;IAC1H,yBAOC;IAED,wBAEC;IAED,gCAAgC;IAChC,uCAGC;IAED;;;SAGK;IACL,oCAGC;;CACF;+BArO8B,mBAAmB"}
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_replay/shared/recorder.js"],"names":[],"mappings":"AAmBA;IAYE,yBAiBC;IAhBC,sDAAsD;IACtD,YAAoB;IACpB,0FAA0F;IAC1F,eAAyE;IAKzE,6DAA6D;IAC7D,oCAAuC;IACvC,+IAA+I;IAC/I,yBAA4B;IAC5B,kIAAkI;IAClI,kBAAqB;IACrB,uIAAuI;IACvI,0BAA+E;IAGjF;;;;;;;;;MAmBC;IAED,mFAAmF;IACnF,oBAKC;IAED,qDAAqD;IACrD,uBAiCC;IAED;;;;;OAKG;IACH,aAHW,GAAC,cACD,GAAC,QAiCX;IAED,0HAA0H;IAC1H,yCA+CC;IAED,0HAA0H;IAC1H,yBAOC;IAED,wBAEC;IAED,gCAAgC;IAChC,uCAGC;IAED;;;SAGK;IACL,oCAGC;;CACF;+BAjO8B,mBAAmB"}
@@ -35,7 +35,7 @@ export class Aggregate extends AggregateBase {
35
35
  /** Switch from "off" or "error" to full mode (if entitled) */
36
36
  switchToFull(): void;
37
37
  /** Stop running for the remainder of the page lifecycle */
38
- abort(): void;
38
+ abort(code: any): void;
39
39
  }
40
40
  import { AggregateBase } from '../../utils/aggregate-base';
41
41
  import { TraceStorage } from './trace/storage';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_trace/aggregate/index.js"],"names":[],"mappings":"AAiBA;IACE,2BAAiC;IAEjC,2BAgBC;IAZC,0GAA0G;IAC1G,cAAyB;IACzB,mIAAmI;IACnI,uBAA0B;IAC1B,0CAA0C;IAC1C,oBAAuB;IACvB,wIAAwI;IACxI,qBAAoC;IAOtC,gLAAgL;IAChL,mEA4DC;IAtDG,iCAAuB;IACvB,yJAAyJ;IACzJ,UAAsC;IACtC,eAA2D;IAyBD,UAAgE;IA4B9H,qCAUC;IAED;;2BAIC;IAED;;;;;;;;;;;MA6CC;IAED,8DAA8D;IAC9D,qBAUC;IAED,2DAA2D;IAC3D,cAKC;CACF;8BApL6B,4BAA4B;6BAC7B,iBAAiB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/session_trace/aggregate/index.js"],"names":[],"mappings":"AAkBA;IACE,2BAAiC;IAEjC,2BAgBC;IAZC,0GAA0G;IAC1G,cAAyB;IACzB,mIAAmI;IACnI,uBAA0B;IAC1B,0CAA0C;IAC1C,oBAAuB;IACvB,wIAAwI;IACxI,qBAAoC;IAOtC,gLAAgL;IAChL,mEA8DC;IAxDG,iCAAuB;IACvB,yJAAyJ;IACzJ,UAAsC;IACtC,eAA2D;IAyBD,UAAgE;IA8B9H,qCAUC;IAED;;2BAIC;IAED;;;;;;;;;;;MA6CC;IAED,8DAA8D;IAC9D,qBAUC;IAED,2DAA2D;IAC3D,uBAMC;CACF;8BAxL6B,4BAA4B;6BAC7B,iBAAiB"}
@@ -7,9 +7,6 @@ export class TraceStorage {
7
7
  latestTimeStamp: number;
8
8
  prevStoredEvents: Set<any>;
9
9
  parent: any;
10
- isAfterSessionExpiry(entryTimestamp: any): any;
11
- /** Central function called by all the other store__ & addToTrace API to append a trace node. */
12
- storeSTN(stn: any): void;
13
10
  /**
14
11
  * Trim the collection of nodes awaiting harvest such that those seen outside a certain span of time are discarded.
15
12
  * @param {number} lookbackDuration Past length of time until now for which we care about nodes, in milliseconds
@@ -23,6 +20,7 @@ export class TraceStorage {
23
20
  latestTimeStamp: number;
24
21
  };
25
22
  smearEvtsByOrigin(name: any): (byOrigin: any, evtNode: any) => any;
23
+ storeNode(node: any): void;
26
24
  processPVT(name: any, value: any, attrs: any): void;
27
25
  storeTiming(timingEntry: any, isAbsoluteTimestamp?: boolean): void;
28
26
  storeEvent(currentEvent: any, target: any, start: any, end: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../../src/features/session_trace/aggregate/trace/storage.js"],"names":[],"mappings":"AA8BA,+HAA+H;AAC/H;IAQE,yBAEC;IATD,kBAAa;IACb,UAAU;IACV,0BAA4B;IAC5B,wBAAmB;IACnB,2BAA4B;IAI1B,YAAoB;IAGtB,+CAEC;IAED,gGAAgG;IAChG,yBAkBC;IAED;;;;OAIG;IACH,2BAHW,MAAM,GACJ,MAAM,CAsBlB;IAED,oEAAoE;IACpE;;;;MAgBC;IAED,mEA6BC;IAED,oDAEC;IAED,mEAuBC;IAGD,uEAcC;IAED,oDAKC;IAED,wBAwBC;IAGD,gDAEC;IAID,qCAaC;IAGD,qEAGC;IAGD,mEAGC;IAID,mBAEC;IAED,aAEC;IAED;;;;;;;QAEC;IAED,cAMC;IAED,mBAEC;IAED,kBAEC;;CACF"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../../src/features/session_trace/aggregate/trace/storage.js"],"names":[],"mappings":"AA8BA,+HAA+H;AAC/H;IAQE,yBAEC;IATD,kBAAa;IACb,UAAU;IACV,0BAA4B;IAC5B,wBAAmB;IACnB,2BAA4B;IAI1B,YAAoB;IAuBtB;;;;OAIG;IACH,2BAHW,MAAM,GACJ,MAAM,CAsBlB;IAED,oEAAoE;IACpE;;;;MAgBC;IAED,mEA6BC;IAED,2BAGC;IAED,oDAEC;IAED,mEAwBC;IAGD,uEAgBC;IAED,oDAKC;IAED,wBAwBC;IAGD,gDAGC;IAID,qCAgBC;IAGD,qEAIC;IAGD,mEAIC;IAID,mBAEC;IAED,aAEC;IAED;;;;;;;QAEC;IAED,cAMC;IAED,mBAOC;IAED,kBAEC;;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"addToTrace.d.ts","sourceRoot":"","sources":["../../../../src/loaders/api/addToTrace.js"],"names":[],"mappings":"AAUA,qDAcC"}
1
+ {"version":3,"file":"addToTrace.d.ts","sourceRoot":"","sources":["../../../../src/loaders/api/addToTrace.js"],"names":[],"mappings":"AAWA,qDAmBC"}
@@ -23,4 +23,5 @@ export const SET_PAGE_VIEW_NAME: "setPageViewName";
23
23
  export const SET_USER_ID: "setUserId";
24
24
  export const START: "start";
25
25
  export const WRAP_LOGGER: "wrapLogger";
26
+ export const MEASURE: "measure";
26
27
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/loaders/api/constants.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAsB,MAAM,CAAA;AAC5B,+BAAwC;AAExC,8BAA+B,eAAe,CAAA;AAC9C,2BAA4B,YAAY,CAAA;AACxC,0BAA2B,YAAY,CAAA;AACvC,uBAAwB,UAAU,CAAA;AAClC,0BAA2B,aAAa,CAAA;AACxC,kBAAmB,KAAK,CAAA;AACxB,2BAA4B,aAAa,CAAA;AACzC,2BAA4B,aAAa,CAAA;AACzC,kCAAmC,mBAAmB,CAAA;AACtD,4BAA6B,cAAc,CAAA;AAC3C,uBAAwB,UAAU,CAAA;AAClC,sCAAuC,uBAAuB,CAAA;AAC9D,qCAAsC,qBAAqB,CAAA;AAC3D,mCAAoC,oBAAoB,CAAA;AACxD,gCAAiC,iBAAiB,CAAA;AAClD,iCAAkC,iBAAiB,CAAA;AACnD,0BAA2B,WAAW,CAAA;AACtC,oBAAqB,OAAO,CAAA;AAC5B,0BAA2B,YAAY,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/loaders/api/constants.js"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAsB,MAAM,CAAA;AAC5B,+BAAwC;AAExC,8BAA+B,eAAe,CAAA;AAC9C,2BAA4B,YAAY,CAAA;AACxC,0BAA2B,YAAY,CAAA;AACvC,uBAAwB,UAAU,CAAA;AAClC,0BAA2B,aAAa,CAAA;AACxC,kBAAmB,KAAK,CAAA;AACxB,2BAA4B,aAAa,CAAA;AACzC,2BAA4B,aAAa,CAAA;AACzC,kCAAmC,mBAAmB,CAAA;AACtD,4BAA6B,cAAc,CAAA;AAC3C,uBAAwB,UAAU,CAAA;AAClC,sCAAuC,uBAAuB,CAAA;AAC9D,qCAAsC,qBAAqB,CAAA;AAC3D,mCAAoC,oBAAoB,CAAA;AACxD,gCAAiC,iBAAiB,CAAA;AAClD,iCAAkC,iBAAiB,CAAA;AACnD,0BAA2B,WAAW,CAAA;AACtC,oBAAqB,OAAO,CAAA;AAC5B,0BAA2B,YAAY,CAAA;AACvC,sBAAuB,SAAS,CAAA"}
@@ -0,0 +1,2 @@
1
+ export function setupMeasureAPI(agent: any): void;
2
+ //# sourceMappingURL=measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../../../src/loaders/api/measure.js"],"names":[],"mappings":"AAWA,kDAyCC"}
@@ -163,6 +163,19 @@ export class ApiBase {
163
163
  customAttributes?: object;
164
164
  level?: "ERROR" | "TRACE" | "DEBUG" | "INFO" | "WARN";
165
165
  }): any;
166
+ /**
167
+ * Measures a task that is recorded as a BrowserPerformance event.
168
+ * {@link https://docs.newrelic.com/docs/browser/new-relic-browser/browser-apis/measure/}
169
+ * @param {string} name The name of the task
170
+ * @param {object?} options An object used to control the way the measure API operates
171
+ * @returns {{start: number, end: number, duration: number, customAttributes: object}} Measurement details
172
+ */
173
+ measure(name: string, options: object | null): {
174
+ start: number;
175
+ end: number;
176
+ duration: number;
177
+ customAttributes: object;
178
+ };
166
179
  #private;
167
180
  }
168
181
  export type InteractionInstance = import("./api/interaction-types").InteractionInstance;
@@ -1 +1 @@
1
- {"version":3,"file":"api-base.d.ts","sourceRoot":"","sources":["../../../src/loaders/api-base.js"],"names":[],"mappings":"AAOA;;GAEG;AACH;IAQE;;;;;OAKG;IACH,oBAHW,MAAM,eACN,MAAM,OAIhB;IAED;;;;;;;;;;;OAWG;IACH,iBALG;QAAuB,UAAU,EAAzB,MAAM;QACS,aAAa,EAA5B,MAAM;QACU,UAAU,GAA1B,MAAM,YAAC;KACf,GAAU,MAAM,CAIlB;IAED;;;;;OAKG;IACH,6BAHW,MAAM,eACN,MAAM,OAIhB;IAED;;;;;OAKG;IACH,sBAHW,MAAM,SACN,MAAM,OAIhB;IAED;;;;;;OAMG;IACH,yBAJW,MAAM,SACN,MAAM,GAAC,MAAM,GAAC,OAAO,GAAC,IAAI,YAC1B,OAAO,OAIjB;IAED;;;;;OAKG;IACH,mBAHW,KAAK,GAAC,MAAM,qBACZ,MAAM,OAIhB;IAED;;;;OAIG;IACH,iBAFW,MAAM,GAAC,IAAI,OAIrB;IAED;;;;;;;OAOG;IACH,6BAJW,MAAM,GAAC,IAAI,OAMrB;IAED;;;;OAIG;IACH,0BAFW,CAAC,KAAK,EAAE,KAAK,GAAC,MAAM,KAAK,OAAO,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,OAI9D;IAED;;;;;OAKG;IACH,iBAHW,MAAM,MACN,MAAM,OAIhB;IAED;;;;;MAKE;IACF,aAHW,MAAM,YACN;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,MAAM,GAAC,MAAM,CAAA;KAAC,OAIpF;IAED;;;OAGG;IACH,aAEC;IAED;;;;OAIG;IACH,qBAFW,MAAM,OAIhB;IAED;;;;OAIG;IACH,oBAEC;IAED;;;;;OAKG;IACH,mBAEC;IAED;;;;;;;;;;OAUG;IACH,6BARW;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,OAUrF;IAED;;;;;OAKG;IACH,0BAHW,MAAM,OAKhB;IAED;;;;;;MAME;IACF,eAJa,mBAAmB,CAM/B;IAED;;;;;;MAME;IACF,mBAJW,MAAM,gBACN,MAAM,YACN;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,MAAM,GAAC,MAAM,CAAA;KAAC,OAIpF;;CACF;kCAjNY,OAAO,yBAAyB,EAAE,mBAAmB"}
1
+ {"version":3,"file":"api-base.d.ts","sourceRoot":"","sources":["../../../src/loaders/api-base.js"],"names":[],"mappings":"AAOA;;GAEG;AACH;IAQE;;;;;OAKG;IACH,oBAHW,MAAM,eACN,MAAM,OAIhB;IAED;;;;;;;;;;;OAWG;IACH,iBALG;QAAuB,UAAU,EAAzB,MAAM;QACS,aAAa,EAA5B,MAAM;QACU,UAAU,GAA1B,MAAM,YAAC;KACf,GAAU,MAAM,CAIlB;IAED;;;;;OAKG;IACH,6BAHW,MAAM,eACN,MAAM,OAIhB;IAED;;;;;OAKG;IACH,sBAHW,MAAM,SACN,MAAM,OAIhB;IAED;;;;;;OAMG;IACH,yBAJW,MAAM,SACN,MAAM,GAAC,MAAM,GAAC,OAAO,GAAC,IAAI,YAC1B,OAAO,OAIjB;IAED;;;;;OAKG;IACH,mBAHW,KAAK,GAAC,MAAM,qBACZ,MAAM,OAIhB;IAED;;;;OAIG;IACH,iBAFW,MAAM,GAAC,IAAI,OAIrB;IAED;;;;;;;OAOG;IACH,6BAJW,MAAM,GAAC,IAAI,OAMrB;IAED;;;;OAIG;IACH,0BAFW,CAAC,KAAK,EAAE,KAAK,GAAC,MAAM,KAAK,OAAO,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,OAI9D;IAED;;;;;OAKG;IACH,iBAHW,MAAM,MACN,MAAM,OAIhB;IAED;;;;;MAKE;IACF,aAHW,MAAM,YACN;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,MAAM,GAAC,MAAM,CAAA;KAAC,OAIpF;IAED;;;OAGG;IACH,aAEC;IAED;;;;OAIG;IACH,qBAFW,MAAM,OAIhB;IAED;;;;OAIG;IACH,oBAEC;IAED;;;;;OAKG;IACH,mBAEC;IAED;;;;;;;;;;OAUG;IACH,6BARW;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,OAUrF;IAED;;;;;OAKG;IACH,0BAHW,MAAM,OAKhB;IAED;;;;;;MAME;IACF,eAJa,mBAAmB,CAM/B;IAED;;;;;;MAME;IACF,mBAJW,MAAM,gBACN,MAAM,YACN;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,MAAM,GAAC,MAAM,CAAA;KAAC,OAIpF;IAED;;;;;;OAMG;IACH,cAJW,MAAM,WACN,MAAM,OAAC,GACL;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAC,CAIpF;;CACF;kCA5NY,OAAO,yBAAyB,EAAE,mBAAmB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newrelic/browser-agent",
3
- "version": "1.290.1",
3
+ "version": "1.291.1",
4
4
  "private": false,
5
5
  "author": "New Relic Browser Agent Team <browser-agent@newrelic.com>",
6
6
  "description": "New Relic Browser Agent",
@@ -8,7 +8,6 @@ import { VERSION } from '../constants/env'
8
8
  import { globalScope, isWorkerScope } from '../constants/runtime'
9
9
  import { handle } from '../event-emitter/handle'
10
10
  import { eventListenerOpts } from '../event-listener/event-listener-opts'
11
- import { SESSION_EVENTS } from '../session/constants'
12
11
  import { now } from '../timing/now'
13
12
  import { subscribeToEOL } from '../unload/eol'
14
13
  import { cleanURL } from '../url/clean-url'
@@ -36,10 +35,6 @@ export class Harvester {
36
35
  this.initializedAggregates.forEach(aggregateInst => this.triggerHarvestFor(aggregateInst, { isFinalHarvest: true }))
37
36
  /* This callback should run in bubble phase, so that that CWV api, like "onLCP", is called before the final harvest so that emitted timings are part of last outgoing. */
38
37
  }, false)
39
-
40
- /* Flush all buffered data if session resets and give up retries. This should be synchronous to ensure that the correct `session` value is sent.
41
- Since session-reset generates a new session ID and the ID is grabbed at send-time, any delays or retries would cause the payload to be sent under the wrong session ID. */
42
- agentRef.ee.on(SESSION_EVENTS.RESET, () => this.initializedAggregates.forEach(aggregateInst => this.triggerHarvestFor(aggregateInst, { forceNoRetry: true })))
43
38
  }
44
39
 
45
40
  startTimer (harvestInterval = this.agentRef.init.harvest.interval) {
@@ -227,7 +227,10 @@ export class SessionEntity {
227
227
  // * stop recording (stn and sr)...
228
228
  // * delete the session and start over
229
229
  try {
230
- if (this.initialized) this.ee.emit(SESSION_EVENTS.RESET)
230
+ if (this.initialized) {
231
+ this.ee.emit(SESSION_EVENTS.RESET)
232
+ this.state.numOfResets++
233
+ }
231
234
  this.storage.remove(this.lookupKey)
232
235
  this.inactiveTimer?.abort?.()
233
236
  this.expiresTimer?.clear?.()
@@ -239,7 +242,7 @@ export class SessionEntity {
239
242
  storage: this.storage,
240
243
  expiresMs: this.expiresMs,
241
244
  inactiveMs: this.inactiveMs,
242
- numOfResets: ++this.state.numOfResets
245
+ numOfResets: this.state.numOfResets
243
246
  })
244
247
  return this.read()
245
248
  } catch (e) {
@@ -256,10 +259,6 @@ export class SessionEntity {
256
259
  this.write({ ...existingData, inactiveAt: this.getFutureTimestamp(this.inactiveMs) })
257
260
  }
258
261
 
259
- isAfterSessionExpiry (timestamp) {
260
- return this.state.numOfResets > 0 || (typeof timestamp === 'number' && typeof this.state.expiresAt === 'number' && timestamp >= this.state.expiresAt)
261
- }
262
-
263
262
  /**
264
263
  * @param {number} timestamp
265
264
  * @returns {boolean}