@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.
- package/CHANGELOG.md +22 -0
- package/dist/cjs/common/constants/env.cdn.js +1 -1
- package/dist/cjs/common/constants/env.npm.js +1 -1
- package/dist/cjs/common/harvest/harvester.js +0 -7
- package/dist/cjs/common/session/session-entity.js +5 -5
- package/dist/cjs/common/util/console.js +12 -0
- package/dist/cjs/features/generic_events/aggregate/index.js +18 -2
- package/dist/cjs/features/generic_events/instrument/index.js +2 -0
- package/dist/cjs/features/session_replay/aggregate/index.js +3 -0
- package/dist/cjs/features/session_replay/shared/recorder.js +0 -4
- package/dist/cjs/features/session_trace/aggregate/index.js +7 -3
- package/dist/cjs/features/session_trace/aggregate/trace/storage.js +36 -23
- package/dist/cjs/loaders/api/addToTrace.js +8 -0
- package/dist/cjs/loaders/api/constants.js +3 -2
- package/dist/cjs/loaders/api/measure.js +60 -0
- package/dist/cjs/loaders/api-base.js +11 -0
- package/dist/esm/common/constants/env.cdn.js +1 -1
- package/dist/esm/common/constants/env.npm.js +1 -1
- package/dist/esm/common/harvest/harvester.js +0 -7
- package/dist/esm/common/session/session-entity.js +5 -5
- package/dist/esm/common/util/console.js +13 -0
- package/dist/esm/features/generic_events/aggregate/index.js +18 -2
- package/dist/esm/features/generic_events/instrument/index.js +2 -0
- package/dist/esm/features/session_replay/aggregate/index.js +3 -0
- package/dist/esm/features/session_replay/shared/recorder.js +0 -4
- package/dist/esm/features/session_trace/aggregate/index.js +7 -3
- package/dist/esm/features/session_trace/aggregate/trace/storage.js +36 -23
- package/dist/esm/loaders/api/addToTrace.js +8 -0
- package/dist/esm/loaders/api/constants.js +2 -1
- package/dist/esm/loaders/api/measure.js +53 -0
- package/dist/esm/loaders/api-base.js +12 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/common/harvest/harvester.d.ts.map +1 -1
- package/dist/types/common/session/session-entity.d.ts +0 -1
- package/dist/types/common/session/session-entity.d.ts.map +1 -1
- package/dist/types/common/util/console.d.ts +0 -4
- package/dist/types/common/util/console.d.ts.map +1 -1
- package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/generic_events/instrument/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/session_replay/shared/recorder.d.ts.map +1 -1
- package/dist/types/features/session_trace/aggregate/index.d.ts +1 -1
- package/dist/types/features/session_trace/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/session_trace/aggregate/trace/storage.d.ts +1 -3
- package/dist/types/features/session_trace/aggregate/trace/storage.d.ts.map +1 -1
- package/dist/types/loaders/api/addToTrace.d.ts.map +1 -1
- package/dist/types/loaders/api/constants.d.ts +1 -0
- package/dist/types/loaders/api/constants.d.ts.map +1 -1
- package/dist/types/loaders/api/measure.d.ts +2 -0
- package/dist/types/loaders/api/measure.d.ts.map +1 -0
- package/dist/types/loaders/api-base.d.ts +13 -0
- package/dist/types/loaders/api-base.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/common/harvest/harvester.js +0 -5
- package/src/common/session/session-entity.js +5 -6
- package/src/common/util/console.js +13 -0
- package/src/features/generic_events/aggregate/index.js +17 -2
- package/src/features/generic_events/instrument/index.js +2 -0
- package/src/features/session_replay/aggregate/index.js +4 -0
- package/src/features/session_replay/shared/recorder.js +0 -4
- package/src/features/session_trace/aggregate/index.js +7 -3
- package/src/features/session_trace/aggregate/trace/storage.js +37 -23
- package/src/loaders/api/addToTrace.js +6 -0
- package/src/loaders/api/constants.js +1 -0
- package/src/loaders/api/measure.js +53 -0
- 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.
|
|
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
|
-
|
|
50
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
228
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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)
|
|
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":"
|
|
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"}
|
|
@@ -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,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../../src/common/util/console.js"],"names":[],"mappings":"
|
|
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,
|
|
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":"
|
|
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;;;
|
|
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,
|
|
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":"
|
|
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;
|
|
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":"
|
|
1
|
+
{"version":3,"file":"addToTrace.d.ts","sourceRoot":"","sources":["../../../../src/loaders/api/addToTrace.js"],"names":[],"mappings":"AAWA,qDAmBC"}
|
|
@@ -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 @@
|
|
|
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;
|
|
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
|
@@ -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)
|
|
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:
|
|
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}
|