@grafana/faro-web-sdk 2.0.0-beta-2 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/faro-web-sdk.iife.js +1 -1
- package/dist/bundle/types/index.d.ts +3 -3
- package/dist/bundle/types/instrumentations/_internal/activityWindowTracker.d.ts +36 -0
- package/dist/bundle/types/instrumentations/_internal/monitors/const.d.ts +4 -0
- package/dist/bundle/types/instrumentations/_internal/monitors/domMutationMonitor.d.ts +4 -0
- package/dist/bundle/types/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.d.ts +1 -3
- package/dist/bundle/types/instrumentations/_internal/monitors/index.d.ts +5 -0
- package/dist/bundle/types/instrumentations/_internal/monitors/interactionMonitor.d.ts +8 -0
- package/dist/{types/instrumentations/userActions → bundle/types/instrumentations/_internal/monitors}/performanceEntriesMonitor.d.ts +1 -0
- package/dist/bundle/types/instrumentations/_internal/monitors/urlChangeMonitor.d.ts +10 -0
- package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/csp/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/index.d.ts +1 -0
- package/dist/bundle/types/instrumentations/navigation/index.d.ts +1 -0
- package/dist/bundle/types/instrumentations/navigation/instrumentation.d.ts +6 -0
- package/dist/bundle/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/const.d.ts +1 -4
- package/dist/bundle/types/instrumentations/userActions/index.d.ts +3 -2
- package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/processUserActionEventHandler.d.ts +1 -4
- package/dist/bundle/types/instrumentations/userActions/userActionController.d.ts +22 -0
- package/dist/bundle/types/instrumentations/userActions/util.d.ts +4 -0
- package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -2
- package/dist/bundle/types/transports/console/transport.d.ts +1 -1
- package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
- package/dist/cjs/config/getWebInstrumentations.js +1 -0
- package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
- package/dist/cjs/config/makeCoreConfig.js +20 -9
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/index.js +3 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instrumentations/_internal/activityWindowTracker.js +140 -0
- package/dist/cjs/instrumentations/_internal/activityWindowTracker.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/const.js +8 -0
- package/dist/cjs/instrumentations/_internal/monitors/const.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js +34 -0
- package/dist/cjs/instrumentations/_internal/monitors/domMutationMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.js +45 -17
- package/dist/cjs/instrumentations/_internal/monitors/httpRequestMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/index.js +14 -0
- package/dist/cjs/instrumentations/_internal/monitors/index.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js +36 -0
- package/dist/cjs/instrumentations/_internal/monitors/interactionMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js +35 -0
- package/dist/cjs/instrumentations/_internal/monitors/performanceEntriesMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/types.js.map +1 -0
- package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js +138 -0
- package/dist/cjs/instrumentations/_internal/monitors/urlChangeMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/index.js +3 -1
- package/dist/cjs/instrumentations/index.js.map +1 -1
- package/dist/cjs/instrumentations/navigation/index.js +6 -0
- package/dist/cjs/instrumentations/navigation/index.js.map +1 -0
- package/dist/cjs/instrumentations/navigation/instrumentation.js +68 -0
- package/dist/cjs/instrumentations/navigation/instrumentation.js.map +1 -0
- package/dist/cjs/instrumentations/performance/resource.js +4 -6
- package/dist/cjs/instrumentations/performance/resource.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/const.js +5 -5
- package/dist/cjs/instrumentations/userActions/const.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/index.js +3 -2
- package/dist/cjs/instrumentations/userActions/index.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/instrumentation.js +2 -2
- package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +8 -56
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/userActionController.js +125 -0
- package/dist/cjs/instrumentations/userActions/userActionController.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/util.js +20 -0
- package/dist/cjs/instrumentations/userActions/util.js.map +1 -1
- package/dist/cjs/instrumentations/webVitals/instrumentation.js +1 -10
- package/dist/cjs/instrumentations/webVitals/instrumentation.js.map +1 -1
- package/dist/cjs/utils/webStorage.js +1 -1
- package/dist/cjs/utils/webStorage.js.map +1 -1
- package/dist/esm/config/getWebInstrumentations.js +2 -1
- package/dist/esm/config/getWebInstrumentations.js.map +1 -1
- package/dist/esm/config/makeCoreConfig.js +19 -9
- package/dist/esm/config/makeCoreConfig.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrumentations/_internal/activityWindowTracker.js +113 -0
- package/dist/esm/instrumentations/_internal/activityWindowTracker.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/const.js +5 -0
- package/dist/esm/instrumentations/_internal/monitors/const.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/domMutationMonitor.js +30 -0
- package/dist/esm/instrumentations/_internal/monitors/domMutationMonitor.js.map +1 -0
- package/dist/esm/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.js +44 -17
- package/dist/esm/instrumentations/_internal/monitors/httpRequestMonitor.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/index.js +6 -0
- package/dist/esm/instrumentations/_internal/monitors/index.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/interactionMonitor.js +31 -0
- package/dist/esm/instrumentations/_internal/monitors/interactionMonitor.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/performanceEntriesMonitor.js +31 -0
- package/dist/esm/instrumentations/_internal/monitors/performanceEntriesMonitor.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/types.js.map +1 -0
- package/dist/esm/instrumentations/_internal/monitors/urlChangeMonitor.js +125 -0
- package/dist/esm/instrumentations/_internal/monitors/urlChangeMonitor.js.map +1 -0
- package/dist/esm/instrumentations/index.js +1 -0
- package/dist/esm/instrumentations/index.js.map +1 -1
- package/dist/esm/instrumentations/navigation/index.js +2 -0
- package/dist/esm/instrumentations/navigation/index.js.map +1 -0
- package/dist/esm/instrumentations/navigation/instrumentation.js +46 -0
- package/dist/esm/instrumentations/navigation/instrumentation.js.map +1 -0
- package/dist/esm/instrumentations/performance/resource.js +4 -6
- package/dist/esm/instrumentations/performance/resource.js.map +1 -1
- package/dist/esm/instrumentations/userActions/const.js +1 -4
- package/dist/esm/instrumentations/userActions/const.js.map +1 -1
- package/dist/esm/instrumentations/userActions/index.js +2 -1
- package/dist/esm/instrumentations/userActions/index.js.map +1 -1
- package/dist/esm/instrumentations/userActions/instrumentation.js +2 -2
- package/dist/esm/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js +9 -55
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/esm/instrumentations/userActions/userActionController.js +117 -0
- package/dist/esm/instrumentations/userActions/userActionController.js.map +1 -0
- package/dist/esm/instrumentations/userActions/util.js +17 -0
- package/dist/esm/instrumentations/userActions/util.js.map +1 -1
- package/dist/esm/instrumentations/webVitals/instrumentation.js +1 -10
- package/dist/esm/instrumentations/webVitals/instrumentation.js.map +1 -1
- package/dist/esm/utils/webStorage.js +1 -1
- package/dist/esm/utils/webStorage.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/instrumentations/_internal/activityWindowTracker.d.ts +36 -0
- package/dist/types/instrumentations/_internal/monitors/const.d.ts +4 -0
- package/dist/types/instrumentations/_internal/monitors/domMutationMonitor.d.ts +4 -0
- package/dist/types/instrumentations/{userActions → _internal/monitors}/httpRequestMonitor.d.ts +1 -3
- package/dist/types/instrumentations/_internal/monitors/index.d.ts +5 -0
- package/dist/types/instrumentations/_internal/monitors/interactionMonitor.d.ts +8 -0
- package/dist/{bundle/types/instrumentations/userActions → types/instrumentations/_internal/monitors}/performanceEntriesMonitor.d.ts +1 -0
- package/dist/types/instrumentations/_internal/monitors/urlChangeMonitor.d.ts +10 -0
- package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/csp/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/index.d.ts +1 -0
- package/dist/types/instrumentations/navigation/index.d.ts +1 -0
- package/dist/types/instrumentations/navigation/instrumentation.d.ts +6 -0
- package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/const.d.ts +1 -4
- package/dist/types/instrumentations/userActions/index.d.ts +3 -2
- package/dist/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/processUserActionEventHandler.d.ts +1 -4
- package/dist/types/instrumentations/userActions/userActionController.d.ts +22 -0
- package/dist/types/instrumentations/userActions/util.d.ts +4 -0
- package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -2
- package/dist/types/transports/console/transport.d.ts +1 -1
- package/dist/types/transports/fetch/transport.d.ts +1 -1
- package/package.json +10 -9
- package/dist/bundle/types/instrumentations/userActions/domMutationMonitor.d.ts +0 -2
- package/dist/bundle/types/instrumentations/webVitals/webVitalsBasic.d.ts +0 -14
- package/dist/cjs/instrumentations/userActions/domMutationMonitor.js +0 -19
- package/dist/cjs/instrumentations/userActions/domMutationMonitor.js.map +0 -1
- package/dist/cjs/instrumentations/userActions/httpRequestMonitor.js.map +0 -1
- package/dist/cjs/instrumentations/userActions/performanceEntriesMonitor.js +0 -17
- package/dist/cjs/instrumentations/userActions/performanceEntriesMonitor.js.map +0 -1
- package/dist/cjs/instrumentations/userActions/types.js.map +0 -1
- package/dist/cjs/instrumentations/webVitals/webVitalsBasic.js +0 -36
- package/dist/cjs/instrumentations/webVitals/webVitalsBasic.js.map +0 -1
- package/dist/esm/instrumentations/userActions/domMutationMonitor.js +0 -16
- package/dist/esm/instrumentations/userActions/domMutationMonitor.js.map +0 -1
- package/dist/esm/instrumentations/userActions/httpRequestMonitor.js.map +0 -1
- package/dist/esm/instrumentations/userActions/performanceEntriesMonitor.js +0 -14
- package/dist/esm/instrumentations/userActions/performanceEntriesMonitor.js.map +0 -1
- package/dist/esm/instrumentations/userActions/types.js.map +0 -1
- package/dist/esm/instrumentations/webVitals/webVitalsBasic.js +0 -28
- package/dist/esm/instrumentations/webVitals/webVitalsBasic.js.map +0 -1
- package/dist/types/instrumentations/userActions/domMutationMonitor.d.ts +0 -2
- package/dist/types/instrumentations/webVitals/webVitalsBasic.d.ts +0 -14
- /package/dist/bundle/types/instrumentations/{userActions → _internal/monitors}/types.d.ts +0 -0
- /package/dist/cjs/instrumentations/{userActions → _internal/monitors}/types.js +0 -0
- /package/dist/esm/instrumentations/{userActions → _internal/monitors}/types.js +0 -0
- /package/dist/types/instrumentations/{userActions → _internal/monitors}/types.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/index.ts"],"names":[],"mappings":";;;AAAA,qDAA8D;AAArD,4HAAA,yBAAyB,OAAA;AASlC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/index.ts"],"names":[],"mappings":";;;AAAA,qDAA8D;AAArD,4HAAA,yBAAyB,OAAA;AASlC,qDAIqC;AAHnC,kHAAA,yBAAyB,OAAA;AACzB,sHAAA,6BAA6B,OAAA;AAC7B,wHAAA,+BAA+B,OAAA;AAGjC,iCAAkD;AAAzC,gHAAA,uBAAuB,OAAA","sourcesContent":["export { UserActionInstrumentation } from './instrumentation';\n\nexport type {\n DomMutationMessage,\n HttpRequestEndMessage,\n HttpRequestStartMessage,\n HttpRequestMessagePayload,\n} from '../_internal/monitors/types';\n\nexport {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n} from '../_internal/monitors/const';\n\nexport { userActionDataAttribute } from './const';\n"]}
|
|
@@ -27,7 +27,7 @@ var UserActionInstrumentation = /** @class */ (function (_super) {
|
|
|
27
27
|
return _this;
|
|
28
28
|
}
|
|
29
29
|
UserActionInstrumentation.prototype.initialize = function () {
|
|
30
|
-
var _a = (0, processUserActionEventHandler_1.getUserEventHandler)(faro_core_1.faro), processUserEvent = _a.processUserEvent,
|
|
30
|
+
var _a = (0, processUserActionEventHandler_1.getUserEventHandler)(faro_core_1.faro), processUserEvent = _a.processUserEvent, processUserActionStarted = _a.processUserActionStarted;
|
|
31
31
|
window.addEventListener('pointerdown', processUserEvent);
|
|
32
32
|
window.addEventListener('keydown', function (ev) {
|
|
33
33
|
if ([' ', 'Enter'].includes(ev.key)) {
|
|
@@ -37,7 +37,7 @@ var UserActionInstrumentation = /** @class */ (function (_super) {
|
|
|
37
37
|
this._userActionSub = faro_core_1.userActionsMessageBus.subscribe(function (_a) {
|
|
38
38
|
var type = _a.type, userAction = _a.userAction;
|
|
39
39
|
if (type === 'user_action_start') {
|
|
40
|
-
|
|
40
|
+
processUserActionStarted(userAction);
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkH;AAElH,iFAAsE;AAEtE;IAA+C,6CAAmB;IAAlE;;QACW,UAAI,GAAG,mDAAmD,CAAC;QAC3D,aAAO,GAAG,mBAAO,CAAC;;IAuB7B,CAAC;IAnBC,8CAAU,GAAV;QACQ,IAAA,
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkH;AAElH,iFAAsE;AAEtE;IAA+C,6CAAmB;IAAlE;;QACW,UAAI,GAAG,mDAAmD,CAAC;QAC3D,aAAO,GAAG,mBAAO,CAAC;;IAuB7B,CAAC;IAnBC,8CAAU,GAAV;QACQ,IAAA,KAAiD,IAAA,mDAAmB,EAAC,gBAAI,CAAC,EAAxE,gBAAgB,sBAAA,EAAE,wBAAwB,8BAA8B,CAAC;QACjF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,EAAiB;YACnD,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,iCAAqB,CAAC,SAAS,CAAC,UAAC,EAAoB;gBAAlB,IAAI,UAAA,EAAE,UAAU,gBAAA;YACvE,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACjC,wBAAwB,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2CAAO,GAAP;;QACE,MAAA,IAAI,CAAC,cAAc,0CAAE,WAAW,EAAE,CAAC;IACrC,CAAC;IACH,gCAAC;AAAD,CAAC,AAzBD,CAA+C,+BAAmB,GAyBjE;AAzBY,8DAAyB","sourcesContent":["import { BaseInstrumentation, faro, type Subscription, userActionsMessageBus, VERSION } from '@grafana/faro-core';\n\nimport { getUserEventHandler } from './processUserActionEventHandler';\n\nexport class UserActionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-user-action';\n readonly version = VERSION;\n\n private _userActionSub?: Subscription;\n\n initialize(): void {\n const { processUserEvent, processUserActionStarted } = getUserEventHandler(faro);\n window.addEventListener('pointerdown', processUserEvent);\n window.addEventListener('keydown', (ev: KeyboardEvent) => {\n if ([' ', 'Enter'].includes(ev.key)) {\n processUserEvent(ev);\n }\n });\n\n this._userActionSub = userActionsMessageBus.subscribe(({ type, userAction }) => {\n if (type === 'user_action_start') {\n processUserActionStarted(userAction);\n }\n });\n }\n\n destroy() {\n this._userActionSub?.unsubscribe();\n }\n}\n"]}
|
|
@@ -3,70 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getUserEventHandler = getUserEventHandler;
|
|
4
4
|
exports.getUserActionNameFromElement = getUserActionNameFromElement;
|
|
5
5
|
exports.unsubscribeAllMonitors = unsubscribeAllMonitors;
|
|
6
|
-
exports.isRequestStartMessage = isRequestStartMessage;
|
|
7
|
-
exports.isRequestEndMessage = isRequestEndMessage;
|
|
8
|
-
var faro_core_1 = require("@grafana/faro-core");
|
|
9
6
|
var const_1 = require("./const");
|
|
10
|
-
var
|
|
11
|
-
var httpRequestMonitor_1 = require("./httpRequestMonitor");
|
|
12
|
-
var performanceEntriesMonitor_1 = require("./performanceEntriesMonitor");
|
|
7
|
+
var userActionController_1 = require("./userActionController");
|
|
13
8
|
var util_1 = require("./util");
|
|
14
9
|
function getUserEventHandler(faro) {
|
|
15
10
|
var api = faro.api, config = faro.config;
|
|
16
|
-
var httpMonitor = (0, httpRequestMonitor_1.monitorHttpRequests)();
|
|
17
|
-
var domMutationsMonitor = (0, domMutationMonitor_1.monitorDomMutations)();
|
|
18
|
-
var performanceEntriesMonitor = (0, performanceEntriesMonitor_1.monitorPerformanceEntries)();
|
|
19
11
|
function processUserEvent(event) {
|
|
20
|
-
var _a;
|
|
21
|
-
var userActionName = getUserActionNameFromElement(event.target, (_a = config.
|
|
12
|
+
var _a, _b;
|
|
13
|
+
var userActionName = getUserActionNameFromElement(event.target, (_b = (_a = config.userActionsInstrumentation) === null || _a === void 0 ? void 0 : _a.dataAttributeName) !== null && _b !== void 0 ? _b : const_1.userActionDataAttributeParsed);
|
|
22
14
|
// We don't have a data attribute
|
|
23
15
|
if (!userActionName) {
|
|
24
16
|
return;
|
|
25
17
|
}
|
|
26
18
|
var userAction = api.startUserAction(userActionName, {}, { triggerName: event.type });
|
|
27
19
|
if (userAction) {
|
|
28
|
-
|
|
20
|
+
processUserActionStarted(userAction);
|
|
29
21
|
}
|
|
30
22
|
}
|
|
31
|
-
function
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
.merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)
|
|
35
|
-
.takeWhile(function () { return [faro_core_1.UserActionState.Started, faro_core_1.UserActionState.Halted].includes(userAction.getState()); })
|
|
36
|
-
.filter(function (msg) {
|
|
37
|
-
// If the user action is in halt state, we only keep listening to ended http requests
|
|
38
|
-
if (userAction.getState() === faro_core_1.UserActionState.Halted &&
|
|
39
|
-
!(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
return true;
|
|
43
|
-
})
|
|
44
|
-
.subscribe(function (msg) {
|
|
45
|
-
if (isRequestStartMessage(msg)) {
|
|
46
|
-
// An action is on halt if it has pending items, like pending HTTP requests.
|
|
47
|
-
// In this case we start a separate timeout to wait for the requests to finish
|
|
48
|
-
// If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)
|
|
49
|
-
// But we are still subscribed to
|
|
50
|
-
runningRequests.set(msg.request.requestId, msg.request);
|
|
51
|
-
}
|
|
52
|
-
if (isRequestEndMessage(msg)) {
|
|
53
|
-
runningRequests.delete(msg.request.requestId);
|
|
54
|
-
}
|
|
55
|
-
if (!isRequestEndMessage(msg)) {
|
|
56
|
-
userAction.extend(function () { return runningRequests.size > 0; });
|
|
57
|
-
}
|
|
58
|
-
else if (userAction.getState() === faro_core_1.UserActionState.Halted && runningRequests.size === 0) {
|
|
59
|
-
userAction.end();
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
userAction
|
|
63
|
-
.filter(function (v) { return [faro_core_1.UserActionState.Ended, faro_core_1.UserActionState.Cancelled].includes(v); })
|
|
64
|
-
.first()
|
|
65
|
-
.subscribe(function () {
|
|
66
|
-
unsubscribeAllMonitors(allMonitorsSub);
|
|
67
|
-
});
|
|
23
|
+
function processUserActionStarted(userAction) {
|
|
24
|
+
var internalUserAction = userAction;
|
|
25
|
+
new userActionController_1.UserActionController(internalUserAction).attach();
|
|
68
26
|
}
|
|
69
|
-
return { processUserEvent: processUserEvent,
|
|
27
|
+
return { processUserEvent: processUserEvent, processUserActionStarted: processUserActionStarted };
|
|
70
28
|
}
|
|
71
29
|
function getUserActionNameFromElement(element, dataAttributeName) {
|
|
72
30
|
var parsedDataAttributeName = (0, util_1.convertDataAttributeName)(dataAttributeName);
|
|
@@ -82,10 +40,4 @@ function unsubscribeAllMonitors(allMonitorsSub) {
|
|
|
82
40
|
allMonitorsSub === null || allMonitorsSub === void 0 ? void 0 : allMonitorsSub.unsubscribe();
|
|
83
41
|
allMonitorsSub = undefined;
|
|
84
42
|
}
|
|
85
|
-
function isRequestStartMessage(msg) {
|
|
86
|
-
return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_START;
|
|
87
|
-
}
|
|
88
|
-
function isRequestEndMessage(msg) {
|
|
89
|
-
return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_END;
|
|
90
|
-
}
|
|
91
43
|
//# sourceMappingURL=processUserActionEventHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":";;AAMA,kDA0BC;AAED,oEAWC;AAED,wDAGC;AAhDD,iCAAmF;AACnF,+DAA8D;AAC9D,+BAAkD;AAElD,SAAgB,mBAAmB,CAAC,IAAU;IACpC,IAAA,GAAG,GAAa,IAAI,IAAjB,EAAE,MAAM,GAAK,IAAI,OAAT,CAAU;IAE7B,SAAS,gBAAgB,CAAC,KAAmC;;QAC3D,IAAM,cAAc,GAAG,4BAA4B,CACjD,KAAK,CAAC,MAAqB,EAC3B,MAAA,MAAA,MAAM,CAAC,0BAA0B,0CAAE,iBAAiB,mCAAI,qCAAuB,CAChF,CAAC;QAEF,iCAAiC;QACjC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,UAAU,EAAE,CAAC;YACf,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,UAA+B;QAC/D,IAAM,kBAAkB,GAAG,UAAoD,CAAC;QAChF,IAAI,2CAAoB,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,gBAAgB,kBAAA,EAAE,wBAAwB,0BAAA,EAAE,CAAC;AACxD,CAAC;AAED,SAAgB,4BAA4B,CAAC,OAAoB,EAAE,iBAAyB;IAC1F,IAAM,uBAAuB,GAAG,IAAA,+BAAwB,EAAC,iBAAiB,CAAC,CAAC;IAC5E,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,KAAK,IAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;YACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,sBAAsB,CAAC,cAAwC;IAC7E,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC","sourcesContent":["import type { Faro, Subscription, UserActionInterface, UserActionInternalInterface } from '@grafana/faro-core';\n\nimport { userActionDataAttributeParsed as userActionDataAttribute } from './const';\nimport { UserActionController } from './userActionController';\nimport { convertDataAttributeName } from './util';\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n function processUserEvent(event: PointerEvent | KeyboardEvent) {\n const userActionName = getUserActionNameFromElement(\n event.target as HTMLElement,\n config.userActionsInstrumentation?.dataAttributeName ?? userActionDataAttribute\n );\n\n // We don't have a data attribute\n if (!userActionName) {\n return;\n }\n\n const userAction = api.startUserAction(userActionName, {}, { triggerName: event.type });\n if (userAction) {\n processUserActionStarted(userAction);\n }\n }\n\n function processUserActionStarted(userAction: UserActionInterface) {\n const internalUserAction = userAction as unknown as UserActionInternalInterface;\n new UserActionController(internalUserAction).attach();\n }\n\n return { processUserEvent, processUserActionStarted };\n}\n\nexport function getUserActionNameFromElement(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nexport function unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n"]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserActionController = void 0;
|
|
4
|
+
// packages/web-sdk/src/instrumentations/userActions/userActionController.ts
|
|
5
|
+
var faro_core_1 = require("@grafana/faro-core");
|
|
6
|
+
var domMutationMonitor_1 = require("../_internal/monitors/domMutationMonitor");
|
|
7
|
+
var httpRequestMonitor_1 = require("../_internal/monitors/httpRequestMonitor");
|
|
8
|
+
var performanceEntriesMonitor_1 = require("../_internal/monitors/performanceEntriesMonitor");
|
|
9
|
+
var util_1 = require("./util");
|
|
10
|
+
var defaultFollowUpActionTimeRange = 100;
|
|
11
|
+
var defaultHaltTimeout = 10 * 1000;
|
|
12
|
+
var UserActionController = /** @class */ (function () {
|
|
13
|
+
function UserActionController(userAction) {
|
|
14
|
+
this.userAction = userAction;
|
|
15
|
+
this.http = (0, httpRequestMonitor_1.monitorHttpRequests)();
|
|
16
|
+
this.dom = (0, domMutationMonitor_1.monitorDomMutations)();
|
|
17
|
+
this.perf = (0, performanceEntriesMonitor_1.monitorPerformanceEntries)();
|
|
18
|
+
this.isValid = false;
|
|
19
|
+
this.runningRequests = new Map();
|
|
20
|
+
}
|
|
21
|
+
UserActionController.prototype.attach = function () {
|
|
22
|
+
var _this = this;
|
|
23
|
+
// Subscribe to monitors while action is active/halting
|
|
24
|
+
this.allMonitorsSub = new faro_core_1.Observable()
|
|
25
|
+
.merge(this.http, this.dom, this.perf)
|
|
26
|
+
.takeWhile(function () { return [faro_core_1.UserActionState.Started, faro_core_1.UserActionState.Halted].includes(_this.userAction.getState()); })
|
|
27
|
+
.filter(function (msg) {
|
|
28
|
+
// If the user action is in halt state, we only keep listening to ended http requests
|
|
29
|
+
if (_this.userAction.getState() === faro_core_1.UserActionState.Halted &&
|
|
30
|
+
!((0, util_1.isRequestEndMessage)(msg) && _this.runningRequests.has(msg.request.requestId))) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
})
|
|
35
|
+
.subscribe(function (msg) {
|
|
36
|
+
if ((0, util_1.isRequestStartMessage)(msg)) {
|
|
37
|
+
// An action is on halt if it has pending items, like pending HTTP requests.
|
|
38
|
+
// In this case we start a separate timeout to wait for the requests to finish
|
|
39
|
+
// If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)
|
|
40
|
+
// But we are still subscribed to
|
|
41
|
+
_this.runningRequests.set(msg.request.requestId, msg.request);
|
|
42
|
+
}
|
|
43
|
+
if ((0, util_1.isRequestEndMessage)(msg)) {
|
|
44
|
+
_this.runningRequests.delete(msg.request.requestId);
|
|
45
|
+
}
|
|
46
|
+
if (!(0, util_1.isRequestEndMessage)(msg)) {
|
|
47
|
+
if (!_this.isValid) {
|
|
48
|
+
_this.isValid = true;
|
|
49
|
+
}
|
|
50
|
+
_this.scheduleFollowUp();
|
|
51
|
+
}
|
|
52
|
+
else if (_this.userAction.getState() === faro_core_1.UserActionState.Halted && _this.runningRequests.size === 0) {
|
|
53
|
+
_this.endAction();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
// When UA ends or cancels, cleanup timers/subscriptions
|
|
57
|
+
this.stateSub = this.userAction
|
|
58
|
+
.filter(function (s) { return [faro_core_1.UserActionState.Ended, faro_core_1.UserActionState.Cancelled].includes(s); })
|
|
59
|
+
.first()
|
|
60
|
+
.subscribe(function () { return _this.cleanup(); });
|
|
61
|
+
// initial follow-up window in case nothing else happens
|
|
62
|
+
this.scheduleFollowUp();
|
|
63
|
+
};
|
|
64
|
+
UserActionController.prototype.scheduleFollowUp = function () {
|
|
65
|
+
var _this = this;
|
|
66
|
+
this.clearTimer(this.followUpTid);
|
|
67
|
+
this.followUpTid = setTimeout(function () {
|
|
68
|
+
// If action just started and there's pending work, go to halted
|
|
69
|
+
if (_this.userAction.getState() === faro_core_1.UserActionState.Started && _this.runningRequests.size > 0) {
|
|
70
|
+
_this.haltAction();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// If we saw any relevant activity in the window, finish as ended
|
|
74
|
+
if (_this.isValid) {
|
|
75
|
+
_this.endAction();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Otherwise, no signals => cancel
|
|
79
|
+
_this.cancelAction();
|
|
80
|
+
}, defaultFollowUpActionTimeRange);
|
|
81
|
+
};
|
|
82
|
+
UserActionController.prototype.haltAction = function () {
|
|
83
|
+
if (this.userAction.getState() !== faro_core_1.UserActionState.Started) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.userAction.halt();
|
|
87
|
+
this.startHaltTimeout();
|
|
88
|
+
};
|
|
89
|
+
UserActionController.prototype.startHaltTimeout = function () {
|
|
90
|
+
var _this = this;
|
|
91
|
+
this.clearTimer(this.haltTid);
|
|
92
|
+
this.haltTid = (0, util_1.startTimeout)(this.haltTid, function () {
|
|
93
|
+
// If still halted after timeout, end
|
|
94
|
+
if (_this.userAction.getState() === faro_core_1.UserActionState.Halted) {
|
|
95
|
+
_this.endAction();
|
|
96
|
+
}
|
|
97
|
+
}, defaultHaltTimeout);
|
|
98
|
+
};
|
|
99
|
+
UserActionController.prototype.endAction = function () {
|
|
100
|
+
this.userAction.end();
|
|
101
|
+
this.cleanup();
|
|
102
|
+
};
|
|
103
|
+
UserActionController.prototype.cancelAction = function () {
|
|
104
|
+
this.userAction.cancel();
|
|
105
|
+
this.cleanup();
|
|
106
|
+
};
|
|
107
|
+
UserActionController.prototype.cleanup = function () {
|
|
108
|
+
var _a, _b;
|
|
109
|
+
this.clearTimer(this.followUpTid);
|
|
110
|
+
this.clearTimer(this.haltTid);
|
|
111
|
+
(_a = this.allMonitorsSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
112
|
+
(_b = this.stateSub) === null || _b === void 0 ? void 0 : _b.unsubscribe();
|
|
113
|
+
this.allMonitorsSub = undefined;
|
|
114
|
+
this.stateSub = undefined;
|
|
115
|
+
this.runningRequests.clear();
|
|
116
|
+
};
|
|
117
|
+
UserActionController.prototype.clearTimer = function (id) {
|
|
118
|
+
if (id) {
|
|
119
|
+
clearTimeout(id);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
return UserActionController;
|
|
123
|
+
}());
|
|
124
|
+
exports.UserActionController = UserActionController;
|
|
125
|
+
//# sourceMappingURL=userActionController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userActionController.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/userActionController.ts"],"names":[],"mappings":"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","sourcesContent":["// packages/web-sdk/src/instrumentations/userActions/userActionController.ts\nimport { Observable, UserActionState } from '@grafana/faro-core';\nimport type { Subscription, UserActionInternalInterface } from '@grafana/faro-core';\n\nimport { monitorDomMutations } from '../_internal/monitors/domMutationMonitor';\nimport { monitorHttpRequests } from '../_internal/monitors/httpRequestMonitor';\nimport { monitorPerformanceEntries } from '../_internal/monitors/performanceEntriesMonitor';\nimport type { HttpRequestMessagePayload } from '../_internal/monitors/types';\n\nimport { isRequestEndMessage, isRequestStartMessage, startTimeout } from './util';\n\nconst defaultFollowUpActionTimeRange = 100;\nconst defaultHaltTimeout = 10 * 1000;\n\nexport class UserActionController {\n private readonly http = monitorHttpRequests();\n private readonly dom = monitorDomMutations();\n private readonly perf = monitorPerformanceEntries();\n\n private allMonitorsSub?: Subscription;\n private stateSub?: Subscription;\n private followUpTid?: number;\n private haltTid?: number;\n\n private isValid = false;\n private runningRequests = new Map<string, HttpRequestMessagePayload>();\n\n constructor(private userAction: UserActionInternalInterface) {}\n\n attach(): void {\n // Subscribe to monitors while action is active/halting\n this.allMonitorsSub = new Observable()\n .merge(this.http, this.dom, this.perf)\n .takeWhile(() => [UserActionState.Started, UserActionState.Halted].includes(this.userAction.getState()))\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (\n this.userAction.getState() === UserActionState.Halted &&\n !(isRequestEndMessage(msg) && this.runningRequests.has(msg.request.requestId))\n ) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n this.runningRequests.set(msg.request.requestId, msg.request);\n }\n\n if (isRequestEndMessage(msg)) {\n this.runningRequests.delete(msg.request.requestId);\n }\n\n if (!isRequestEndMessage(msg)) {\n if (!this.isValid) {\n this.isValid = true;\n }\n this.scheduleFollowUp();\n } else if (this.userAction.getState() === UserActionState.Halted && this.runningRequests.size === 0) {\n this.endAction();\n }\n });\n\n // When UA ends or cancels, cleanup timers/subscriptions\n this.stateSub = (this.userAction as unknown as Observable)\n .filter((s: UserActionState) => [UserActionState.Ended, UserActionState.Cancelled].includes(s))\n .first()\n .subscribe(() => this.cleanup());\n\n // initial follow-up window in case nothing else happens\n this.scheduleFollowUp();\n }\n\n private scheduleFollowUp() {\n this.clearTimer(this.followUpTid);\n this.followUpTid = setTimeout(() => {\n // If action just started and there's pending work, go to halted\n if (this.userAction.getState() === UserActionState.Started && this.runningRequests.size > 0) {\n this.haltAction();\n return;\n }\n\n // If we saw any relevant activity in the window, finish as ended\n if (this.isValid) {\n this.endAction();\n return;\n }\n\n // Otherwise, no signals => cancel\n this.cancelAction();\n }, defaultFollowUpActionTimeRange) as any;\n }\n\n private haltAction() {\n if (this.userAction.getState() !== UserActionState.Started) {\n return;\n }\n this.userAction.halt();\n this.startHaltTimeout();\n }\n\n private startHaltTimeout() {\n this.clearTimer(this.haltTid);\n this.haltTid = startTimeout(\n this.haltTid,\n () => {\n // If still halted after timeout, end\n if (this.userAction.getState() === UserActionState.Halted) {\n this.endAction();\n }\n },\n defaultHaltTimeout\n ) as any;\n }\n\n private endAction() {\n this.userAction.end();\n this.cleanup();\n }\n\n private cancelAction() {\n this.userAction.cancel();\n this.cleanup();\n }\n\n private cleanup() {\n this.clearTimer(this.followUpTid);\n this.clearTimer(this.haltTid);\n this.allMonitorsSub?.unsubscribe();\n this.stateSub?.unsubscribe();\n this.allMonitorsSub = undefined;\n this.stateSub = undefined;\n this.runningRequests.clear();\n }\n\n private clearTimer(id?: number) {\n if (id) {\n clearTimeout(id);\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.convertDataAttributeName = convertDataAttributeName;
|
|
4
|
+
exports.startTimeout = startTimeout;
|
|
5
|
+
exports.isRequestStartMessage = isRequestStartMessage;
|
|
6
|
+
exports.isRequestEndMessage = isRequestEndMessage;
|
|
7
|
+
var const_1 = require("./const");
|
|
4
8
|
/**
|
|
5
9
|
* Parses the action attribute name by removing the 'data-' prefix and converting
|
|
6
10
|
* the remaining string to camelCase.
|
|
@@ -13,4 +17,20 @@ function convertDataAttributeName(userActionDataAttribute) {
|
|
|
13
17
|
var withUpperCase = withoutData === null || withoutData === void 0 ? void 0 : withoutData.replace(/-(.)/g, function (_, char) { return char.toUpperCase(); });
|
|
14
18
|
return withUpperCase === null || withUpperCase === void 0 ? void 0 : withUpperCase.replace(/-/g, '');
|
|
15
19
|
}
|
|
20
|
+
function startTimeout(timeoutId, cb, delay) {
|
|
21
|
+
if (timeoutId) {
|
|
22
|
+
clearTimeout(timeoutId);
|
|
23
|
+
}
|
|
24
|
+
//@ts-expect-error for some reason vscode is using the node types
|
|
25
|
+
timeoutId = setTimeout(function () {
|
|
26
|
+
cb();
|
|
27
|
+
}, delay);
|
|
28
|
+
return timeoutId;
|
|
29
|
+
}
|
|
30
|
+
function isRequestStartMessage(msg) {
|
|
31
|
+
return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_START;
|
|
32
|
+
}
|
|
33
|
+
function isRequestEndMessage(msg) {
|
|
34
|
+
return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_END;
|
|
35
|
+
}
|
|
16
36
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/util.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/util.ts"],"names":[],"mappings":";;AAWA,4DAIC;AAED,oCAWC;AAED,sDAEC;AAED,kDAEC;AAlCD,iCAAyF;AAEzF;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,uBAA+B;IACtE,IAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAM,aAAa,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAC,OAAO,EAAE,UAAC,CAAC,EAAE,IAAI,IAAK,OAAA,IAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;IACrF,OAAO,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,YAAY,CAAC,SAA6B,EAAE,EAAc,EAAE,KAAa;IACvF,IAAI,SAAS,EAAE,CAAC;QACd,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,iEAAiE;IACjE,SAAS,GAAG,UAAU,CAAC;QACrB,EAAE,EAAE,CAAC;IACP,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAQ;IAC5C,OAAO,GAAG,CAAC,IAAI,KAAK,uCAA+B,CAAC;AACtD,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAQ;IAC1C,OAAO,GAAG,CAAC,IAAI,KAAK,qCAA6B,CAAC;AACpD,CAAC","sourcesContent":["import type { HttpRequestEndMessage, HttpRequestStartMessage } from '../_internal/monitors/types';\n\nimport { MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START } from './const';\n\n/**\n * Parses the action attribute name by removing the 'data-' prefix and converting\n * the remaining string to camelCase.\n *\n * This is needed because the browser will remove the 'data-' prefix and the dashes from\n * data attributes and make then camelCase.\n */\nexport function convertDataAttributeName(userActionDataAttribute: string) {\n const withoutData = userActionDataAttribute.split('data-')[1];\n const withUpperCase = withoutData?.replace(/-(.)/g, (_, char) => char.toUpperCase());\n return withUpperCase?.replace(/-/g, '');\n}\n\nexport function startTimeout(timeoutId: number | undefined, cb: () => void, delay: number) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n //@ts-expect-error for some reason vscode is using the node types\n timeoutId = setTimeout(() => {\n cb();\n }, delay);\n\n return timeoutId;\n}\n\nexport function isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nexport function isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n"]}
|
|
@@ -17,7 +17,6 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.WebVitalsInstrumentation = void 0;
|
|
19
19
|
var faro_core_1 = require("@grafana/faro-core");
|
|
20
|
-
var webVitalsBasic_1 = require("./webVitalsBasic");
|
|
21
20
|
var webVitalsWithAttribution_1 = require("./webVitalsWithAttribution");
|
|
22
21
|
var WebVitalsInstrumentation = /** @class */ (function (_super) {
|
|
23
22
|
__extends(WebVitalsInstrumentation, _super);
|
|
@@ -29,17 +28,9 @@ var WebVitalsInstrumentation = /** @class */ (function (_super) {
|
|
|
29
28
|
}
|
|
30
29
|
WebVitalsInstrumentation.prototype.initialize = function () {
|
|
31
30
|
this.logDebug('Initializing');
|
|
32
|
-
var webVitals = this.
|
|
31
|
+
var webVitals = new webVitalsWithAttribution_1.WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
|
|
33
32
|
webVitals.initialize();
|
|
34
33
|
};
|
|
35
|
-
WebVitalsInstrumentation.prototype.intializeWebVitalsInstrumentation = function () {
|
|
36
|
-
var _a, _b, _c;
|
|
37
|
-
if (((_a = this.config) === null || _a === void 0 ? void 0 : _a.trackWebVitalsAttribution) === false ||
|
|
38
|
-
((_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.webVitalsInstrumentation) === null || _c === void 0 ? void 0 : _c.trackAttribution) === false) {
|
|
39
|
-
return new webVitalsBasic_1.WebVitalsBasic(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
|
|
40
|
-
}
|
|
41
|
-
return new webVitalsWithAttribution_1.WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
|
|
42
|
-
};
|
|
43
34
|
return WebVitalsInstrumentation;
|
|
44
35
|
}(faro_core_1.BaseInstrumentation));
|
|
45
36
|
exports.WebVitalsInstrumentation = WebVitalsInstrumentation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkE;AAElE,
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkE;AAElE,uEAAsE;AAEtE;IAA8C,4CAAmB;IAAjE;;QACW,UAAI,GAAG,kDAAkD,CAAC;QAC1D,aAAO,GAAG,mBAAO,CAAC;;IAO7B,CAAC;IALC,6CAAU,GAAV;QACE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAM,SAAS,GAAG,IAAI,mDAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC/G,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IACH,+BAAC;AAAD,CAAC,AATD,CAA8C,+BAAmB,GAShE;AATY,4DAAwB","sourcesContent":["import { BaseInstrumentation, VERSION } from '@grafana/faro-core';\n\nimport { WebVitalsWithAttribution } from './webVitalsWithAttribution';\n\nexport class WebVitalsInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-web-vitals';\n readonly version = VERSION;\n\n initialize(): void {\n this.logDebug('Initializing');\n const webVitals = new WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);\n webVitals.initialize();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webStorage.js","sourceRoot":"","sources":["../../../src/utils/webStorage.ts"],"names":[],"mappings":";;;AAcA,sDAcC;AAOD,0BAMC;AAQD,0BAQC;AAOD,gCAIC;AApED,gDAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,cAAc;CACb,CAAC;AAIX;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAsB;;IAC1D,IAAI,CAAC;QACH,IAAI,OAAO,SAAA,CAAC;QACZ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAM,QAAQ,GAAG,uBAAuB,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,MAAA,gBAAI,CAAC,cAAc,0CAAE,IAAI,CAAC,8BAAuB,IAAI,wCAA8B,KAAK,CAAE,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,mBAAqC;IACxE,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,mBAAqC;IACvF,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"webStorage.js","sourceRoot":"","sources":["../../../src/utils/webStorage.ts"],"names":[],"mappings":";;;AAcA,sDAcC;AAOD,0BAMC;AAQD,0BAQC;AAOD,gCAIC;AApED,gDAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,cAAc;CACb,CAAC;AAIX;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAsB;;IAC1D,IAAI,CAAC;QACH,IAAI,OAAO,SAAA,CAAC;QACZ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAM,QAAQ,GAAG,uBAAuB,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,MAAA,gBAAI,CAAC,cAAc,0CAAE,IAAI,CAAC,8BAAuB,IAAI,wCAA8B,KAAK,CAAE,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,mBAAqC;IACxE,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,mBAAqC;IACvF,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,aAAa;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,GAAW,EAAE,mBAAqC;IAC3E,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAEY,QAAA,uBAAuB,GAAG,qBAAqB,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC;AACtE,QAAA,yBAAyB,GAAG,qBAAqB,CAAC,sBAAc,CAAC,OAAO,CAAC,CAAC;AAEvF,SAAS,yBAAyB,CAAC,mBAAqC;IACtE,IAAI,mBAAmB,KAAK,sBAAc,CAAC,KAAK,EAAE,CAAC;QACjD,OAAO,+BAAuB,CAAC;IACjC,CAAC;IAED,IAAI,mBAAmB,KAAK,sBAAc,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO,iCAAyB,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { faro } from '@grafana/faro-core';\n\nexport const webStorageType = {\n session: 'sessionStorage',\n local: 'localStorage',\n} as const;\n\ntype StorageMechanism = (typeof webStorageType)[keyof typeof webStorageType];\n\n/**\n * Check if selected web storage mechanism is available.\n * @param type storage mechanism to test availability for.\n * @returns\n */\nexport function isWebStorageAvailable(type: StorageMechanism): boolean {\n try {\n let storage;\n storage = window[type];\n\n const testItem = '__faro_storage_test__';\n storage.setItem(testItem, testItem);\n storage.removeItem(testItem);\n return true;\n } catch (error) {\n // the above can throw\n faro.internalLogger?.info(`Web storage of type ${type} is not available. Reason: ${error}`);\n return false;\n }\n}\n\n/**\n * Get item from SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function getItem(key: string, webStorageMechanism: StorageMechanism): string | null {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n return window[webStorageMechanism].getItem(key);\n }\n\n return null;\n}\n\n/**\n * Store item in SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param value: the item data.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function setItem(key: string, value: string, webStorageMechanism: StorageMechanism): void {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n try {\n window[webStorageMechanism].setItem(key, value);\n } catch (_error) {\n // do nothing\n }\n }\n}\n\n/**\n * Remove item from SessionStorage or LocalStorage.\n * @param key: the item key.\n * @param webStorageMechanism: wether the item shall be received form local storage or session storage. Defaults to local storage.\n */\nexport function removeItem(key: string, webStorageMechanism: StorageMechanism): void {\n if (isWebStorageTypeAvailable(webStorageMechanism)) {\n window[webStorageMechanism].removeItem(key);\n }\n}\n\nexport const isLocalStorageAvailable = isWebStorageAvailable(webStorageType.local);\nexport const isSessionStorageAvailable = isWebStorageAvailable(webStorageType.session);\n\nfunction isWebStorageTypeAvailable(webStorageMechanism: StorageMechanism) {\n if (webStorageMechanism === webStorageType.local) {\n return isLocalStorageAvailable;\n }\n\n if (webStorageMechanism === webStorageType.session) {\n return isSessionStorageAvailable;\n }\n\n return false;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConsoleInstrumentation, CSPInstrumentation, ErrorsInstrumentation, PerformanceInstrumentation, SessionInstrumentation, UserActionInstrumentation, ViewInstrumentation, WebVitalsInstrumentation, } from '../instrumentations';
|
|
1
|
+
import { ConsoleInstrumentation, CSPInstrumentation, ErrorsInstrumentation, NavigationInstrumentation, PerformanceInstrumentation, SessionInstrumentation, UserActionInstrumentation, ViewInstrumentation, WebVitalsInstrumentation, } from '../instrumentations';
|
|
2
2
|
export function getWebInstrumentations(options = {}) {
|
|
3
3
|
const instrumentations = [
|
|
4
4
|
new UserActionInstrumentation(),
|
|
@@ -6,6 +6,7 @@ export function getWebInstrumentations(options = {}) {
|
|
|
6
6
|
new WebVitalsInstrumentation(),
|
|
7
7
|
new SessionInstrumentation(),
|
|
8
8
|
new ViewInstrumentation(),
|
|
9
|
+
new NavigationInstrumentation(),
|
|
9
10
|
];
|
|
10
11
|
if (options.enablePerformanceInstrumentation !== false) {
|
|
11
12
|
// unshift to ensure that initialization starts before the other instrumentations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,UAAU,sBAAsB,CAAC,UAAyC,EAAE;IAChF,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,yBAAyB,EAAE;QAC/B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,mBAAmB,EAAE;
|
|
1
|
+
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,UAAU,sBAAsB,CAAC,UAAyC,EAAE;IAChF,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,yBAAyB,EAAE;QAC/B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,mBAAmB,EAAE;QACzB,IAAI,yBAAyB,EAAE;KAChC,CAAC;IAEF,IAAI,OAAO,CAAC,gCAAgC,KAAK,KAAK,EAAE,CAAC;QACvD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,0CAA0C,KAAK,KAAK,EAAE,CAAC;QACjE,gBAAgB,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,IAAI,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["import type { Instrumentation } from '@grafana/faro-core';\n\nimport {\n ConsoleInstrumentation,\n CSPInstrumentation,\n ErrorsInstrumentation,\n NavigationInstrumentation,\n PerformanceInstrumentation,\n SessionInstrumentation,\n UserActionInstrumentation,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n} from '../instrumentations';\n\nimport type { GetWebInstrumentationsOptions } from './types';\n\nexport function getWebInstrumentations(options: GetWebInstrumentationsOptions = {}): Instrumentation[] {\n const instrumentations: Instrumentation[] = [\n new UserActionInstrumentation(),\n new ErrorsInstrumentation(),\n new WebVitalsInstrumentation(),\n new SessionInstrumentation(),\n new ViewInstrumentation(),\n new NavigationInstrumentation(),\n ];\n\n if (options.enablePerformanceInstrumentation !== false) {\n // unshift to ensure that initialization starts before the other instrumentations\n instrumentations.unshift(new PerformanceInstrumentation());\n }\n\n if (options.enableContentSecurityPolicyInstrumentation !== false) {\n instrumentations.push(new CSPInstrumentation());\n }\n\n if (options.captureConsole !== false) {\n instrumentations.push(new ConsoleInstrumentation());\n }\n\n return instrumentations;\n}\n"]}
|
|
@@ -20,7 +20,7 @@ import { createPageMeta } from '../metas/page';
|
|
|
20
20
|
import { FetchTransport } from '../transports';
|
|
21
21
|
import { getWebInstrumentations } from './getWebInstrumentations';
|
|
22
22
|
export function makeCoreConfig(browserConfig) {
|
|
23
|
-
var _a;
|
|
23
|
+
var _a, _b, _c, _d, _e;
|
|
24
24
|
const transports = [];
|
|
25
25
|
const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);
|
|
26
26
|
if (browserConfig.transports) {
|
|
@@ -40,9 +40,16 @@ export function makeCoreConfig(browserConfig) {
|
|
|
40
40
|
}
|
|
41
41
|
const {
|
|
42
42
|
// properties with default values
|
|
43
|
-
dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole,
|
|
43
|
+
dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, url: browserConfigUrl, experimental } = browserConfig,
|
|
44
44
|
// Properties without default values or which aren't used to create derived config
|
|
45
|
-
restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "
|
|
45
|
+
restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "url", "experimental"]);
|
|
46
|
+
// Extract experimental features with defaults
|
|
47
|
+
const trackNavigation = (_a = experimental === null || experimental === void 0 ? void 0 : experimental.trackNavigation) !== null && _a !== void 0 ? _a : false;
|
|
48
|
+
// Extract user actions instrumentation with defaults
|
|
49
|
+
const userActionsInstrumentation = {
|
|
50
|
+
dataAttributeName: (_c = (_b = browserConfig.userActionsInstrumentation) === null || _b === void 0 ? void 0 : _b.dataAttributeName) !== null && _c !== void 0 ? _c : userActionDataAttribute,
|
|
51
|
+
excludeItem: (_d = browserConfig.userActionsInstrumentation) === null || _d === void 0 ? void 0 : _d.excludeItem,
|
|
52
|
+
};
|
|
46
53
|
return Object.assign(Object.assign({}, restProperties), { batching: Object.assign(Object.assign({}, defaultBatchingConfig), browserConfig.batching), dedupe: dedupe, globalObjectKey, instrumentations: getFilteredInstrumentations(instrumentations, browserConfig), internalLoggerLevel,
|
|
47
54
|
isolate,
|
|
48
55
|
logArgsSerializer,
|
|
@@ -53,7 +60,7 @@ export function makeCoreConfig(browserConfig) {
|
|
|
53
60
|
transports,
|
|
54
61
|
unpatchedConsole,
|
|
55
62
|
eventDomain, ignoreUrls: [
|
|
56
|
-
...((
|
|
63
|
+
...((_e = browserConfig.ignoreUrls) !== null && _e !== void 0 ? _e : []),
|
|
57
64
|
// ignore configured cloud collector url by default
|
|
58
65
|
...(browserConfigUrl ? [browserConfigUrl] : []),
|
|
59
66
|
// Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
@@ -61,12 +68,15 @@ export function makeCoreConfig(browserConfig) {
|
|
|
61
68
|
], sessionTracking: Object.assign(Object.assign(Object.assign({}, defaultSessionTrackingConfig), browserConfig.sessionTracking), crateSessionMeta({
|
|
62
69
|
trackGeolocation: browserConfig.trackGeolocation,
|
|
63
70
|
sessionTracking: browserConfig.sessionTracking,
|
|
64
|
-
})),
|
|
65
|
-
|
|
71
|
+
})), userActionsInstrumentation, experimental: {
|
|
72
|
+
trackNavigation,
|
|
73
|
+
} });
|
|
66
74
|
}
|
|
67
|
-
function getFilteredInstrumentations(instrumentations, {
|
|
75
|
+
function getFilteredInstrumentations(instrumentations, { experimental }) {
|
|
76
|
+
var _a;
|
|
77
|
+
const trackNavigation = (_a = experimental === null || experimental === void 0 ? void 0 : experimental.trackNavigation) !== null && _a !== void 0 ? _a : false;
|
|
68
78
|
return instrumentations.filter((instr) => {
|
|
69
|
-
if (instr.name === '@grafana/faro-web-sdk:instrumentation-
|
|
79
|
+
if (instr.name === '@grafana/faro-web-sdk:instrumentation-navigation' && !trackNavigation) {
|
|
70
80
|
return false;
|
|
71
81
|
}
|
|
72
82
|
return true;
|
|
@@ -80,7 +90,7 @@ function createDefaultMetas(browserConfig) {
|
|
|
80
90
|
createPageMeta({ generatePageId, initialPageMeta: page }),
|
|
81
91
|
...((_b = browserConfig.metas) !== null && _b !== void 0 ? _b : []),
|
|
82
92
|
];
|
|
83
|
-
const isK6BrowserSession = isObject(window.k6);
|
|
93
|
+
const isK6BrowserSession = isObject(window === null || window === void 0 ? void 0 : window.k6);
|
|
84
94
|
if (isK6BrowserSession) {
|
|
85
95
|
return [...initialMetas, k6Meta];
|
|
86
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,SAAS,EACT,OAAO,EACP,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,UAAU,cAAc,CAAC,aAA4B;;IACzD,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,MAAM,cAAc,GAAG,oBAAoB,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAE/G,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YAC9C,cAAc,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC/F,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QAC7B,UAAU,CAAC,IAAI,CACb,IAAI,cAAc,CAAC;YACjB,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACvE,CAAC;IAED,MAAM;IACJ,iCAAiC;IACjC,MAAM,GAAG,IAAI,EACb,WAAW,GAAG,kBAAkB,EAChC,eAAe,GAAG,sBAAsB,EACxC,gBAAgB,GAAG,sBAAsB,EAAE,EAC3C,mBAAmB,GAAG,0BAA0B,EAChD,OAAO,GAAG,KAAK,EACf,iBAAiB,GAAG,wBAAwB,EAC5C,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,EACzC,MAAM,GAAG,KAAK,EACd,qBAAqB,GAAG,KAAK,EAC7B,gBAAgB,GAAG,uBAAuB,EAC1C,
|
|
1
|
+
{"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createInternalLogger,\n defaultBatchingConfig,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogArgsSerializer,\n defaultUnpatchedConsole,\n isBoolean,\n isEmpty,\n isObject,\n} from '@grafana/faro-core';\nimport type { Config, Instrumentation, MetaItem, MetaSession, Transport } from '@grafana/faro-core';\n\nimport { defaultEventDomain } from '../consts';\nimport { parseStacktrace } from '../instrumentations';\nimport { defaultSessionTrackingConfig } from '../instrumentations/session';\nimport { userActionDataAttribute } from '../instrumentations/userActions/const';\nimport { browserMeta } from '../metas';\nimport { k6Meta } from '../metas/k6';\nimport { createPageMeta } from '../metas/page';\nimport { FetchTransport } from '../transports';\n\nimport { getWebInstrumentations } from './getWebInstrumentations';\nimport type { BrowserConfig } from './types';\n\nexport function makeCoreConfig(browserConfig: BrowserConfig): Config {\n const transports: Transport[] = [];\n\n const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);\n\n if (browserConfig.transports) {\n if (browserConfig.url || browserConfig.apiKey) {\n internalLogger.error('if \"transports\" is defined, \"url\" and \"apiKey\" should not be defined');\n }\n\n transports.push(...browserConfig.transports);\n } else if (browserConfig.url) {\n transports.push(\n new FetchTransport({\n url: browserConfig.url,\n apiKey: browserConfig.apiKey,\n })\n );\n } else {\n internalLogger.error('either \"url\" or \"transports\" must be defined');\n }\n\n const {\n // properties with default values\n dedupe = true,\n eventDomain = defaultEventDomain,\n globalObjectKey = defaultGlobalObjectKey,\n instrumentations = getWebInstrumentations(),\n internalLoggerLevel = defaultInternalLoggerLevel,\n isolate = false,\n logArgsSerializer = defaultLogArgsSerializer,\n metas = createDefaultMetas(browserConfig),\n paused = false,\n preventGlobalExposure = false,\n unpatchedConsole = defaultUnpatchedConsole,\n url: browserConfigUrl,\n experimental,\n // Properties without default values or which aren't used to create derived config\n ...restProperties\n }: BrowserConfig = browserConfig;\n\n // Extract experimental features with defaults\n const trackNavigation = experimental?.trackNavigation ?? false;\n\n // Extract user actions instrumentation with defaults\n const userActionsInstrumentation = {\n dataAttributeName: browserConfig.userActionsInstrumentation?.dataAttributeName ?? userActionDataAttribute,\n excludeItem: browserConfig.userActionsInstrumentation?.excludeItem,\n };\n\n return {\n ...restProperties,\n\n batching: {\n ...defaultBatchingConfig,\n ...browserConfig.batching,\n },\n dedupe: dedupe,\n globalObjectKey,\n instrumentations: getFilteredInstrumentations(instrumentations, browserConfig),\n internalLoggerLevel,\n isolate,\n logArgsSerializer,\n metas,\n parseStacktrace,\n paused,\n preventGlobalExposure,\n transports,\n unpatchedConsole,\n eventDomain,\n ignoreUrls: [\n ...(browserConfig.ignoreUrls ?? []),\n // ignore configured cloud collector url by default\n ...(browserConfigUrl ? [browserConfigUrl] : []),\n // Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.\n /\\/collect(?:\\/[\\w]*)?$/,\n ],\n sessionTracking: {\n ...defaultSessionTrackingConfig,\n ...browserConfig.sessionTracking,\n ...crateSessionMeta({\n trackGeolocation: browserConfig.trackGeolocation,\n sessionTracking: browserConfig.sessionTracking,\n }),\n },\n userActionsInstrumentation,\n experimental: {\n trackNavigation,\n },\n };\n}\n\nfunction getFilteredInstrumentations(\n instrumentations: Instrumentation[],\n { experimental }: BrowserConfig\n): Instrumentation[] {\n const trackNavigation = experimental?.trackNavigation ?? false;\n\n return instrumentations.filter((instr) => {\n if (instr.name === '@grafana/faro-web-sdk:instrumentation-navigation' && !trackNavigation) {\n return false;\n }\n return true;\n });\n}\n\nfunction createDefaultMetas(browserConfig: BrowserConfig): MetaItem[] {\n const { page, generatePageId } = browserConfig?.pageTracking ?? {};\n\n const initialMetas: MetaItem[] = [\n browserMeta,\n createPageMeta({ generatePageId, initialPageMeta: page }),\n ...(browserConfig.metas ?? []),\n ];\n\n const isK6BrowserSession = isObject((window as any)?.k6);\n if (isK6BrowserSession) {\n return [...initialMetas, k6Meta];\n }\n\n return initialMetas;\n}\n\nfunction crateSessionMeta({\n trackGeolocation,\n sessionTracking,\n}: Pick<BrowserConfig, 'trackGeolocation' | 'sessionTracking'>): { session: MetaSession } | {} {\n const overrides: MetaSession['overrides'] = {};\n\n if (isBoolean(trackGeolocation)) {\n overrides.geoLocationTrackingEnabled = trackGeolocation;\n }\n\n if (isEmpty(overrides)) {\n return {};\n }\n\n return {\n session: {\n ...(sessionTracking?.session ?? {}),\n overrides,\n },\n };\n}\n"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { getWebInstrumentations, makeCoreConfig } from './config';
|
|
2
2
|
export { defaultEventDomain } from './consts';
|
|
3
3
|
export { initializeFaro } from './initialize';
|
|
4
|
-
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, CSPInstrumentation, UserActionInstrumentation, } from './instrumentations';
|
|
4
|
+
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, CSPInstrumentation, UserActionInstrumentation, NavigationInstrumentation, } from './instrumentations';
|
|
5
5
|
export { browserMeta, createSession, sdkMeta } from './metas';
|
|
6
6
|
export { ConsoleTransport, FetchTransport } from './transports';
|
|
7
7
|
export { faro, allLogLevels, BaseExtension, BaseInstrumentation, BaseTransport, createInternalLogger, createPromiseBuffer, deepEqual, defaultExceptionType, defaultGlobalObjectKey, defaultInternalLoggerLevel, defaultLogLevel, genShortID, getCurrentTimestamp, getInternalFaroFromGlobalObject, getTransportBody, globalObject, internalGlobalObjectKey, isArray, isBoolean, isDomError, isDomException, isElement, isElementDefined, isError, isErrorDefined, isErrorEvent, isEvent, isEventDefined, isFunction, isInstanceOf, isInt, isInternalFaroOnGlobalObject, isMap, isMapDefined, isNull, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isSyntheticEvent, isThenable, isToString, isTypeof, isUndefined, isEmpty, InternalLoggerLevel, LogLevel, noop, setInternalFaroOnGlobalObject, TransportItemType, transportItemTypeToBodyKey, VERSION, EVENT_CLICK, EVENT_NAVIGATION, EVENT_ROUTE_CHANGE, EVENT_SESSION_EXTEND, EVENT_SESSION_RESUME, EVENT_SESSION_START, EVENT_VIEW_CHANGED, Observable, unknownString, UserActionState, } from '@grafana/faro-core';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQhE,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,KAAK,EACL,4BAA4B,EAC5B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,6BAA6B,EAC7B,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQhE,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,+BAA+B,EAC/B,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,SAAS,EACT,UAAU,EACV,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,YAAY,EACZ,OAAO,EACP,cAAc,EACd,UAAU,EACV,YAAY,EACZ,KAAK,EACL,4BAA4B,EAC5B,KAAK,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,6BAA6B,EAC7B,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAmE5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export { getWebInstrumentations, makeCoreConfig } from './config';\nexport type { BrowserConfig } from './config';\n\nexport { defaultEventDomain } from './consts';\n\nexport { initializeFaro } from './initialize';\n\nexport {\n buildStackFrame,\n ConsoleInstrumentation,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n ViewInstrumentation,\n WebVitalsInstrumentation,\n SessionInstrumentation,\n PerformanceInstrumentation,\n CSPInstrumentation,\n UserActionInstrumentation,\n NavigationInstrumentation,\n} from './instrumentations';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';\n\nexport { browserMeta, createSession, sdkMeta } from './metas';\n\nexport { ConsoleTransport, FetchTransport } from './transports';\nexport type {\n ClockFn,\n ConsoleTransportOptions,\n FetchTransportOptions,\n FetchTransportRequestOptions,\n} from './transports';\n\nexport {\n faro,\n allLogLevels,\n BaseExtension,\n BaseInstrumentation,\n BaseTransport,\n createInternalLogger,\n createPromiseBuffer,\n deepEqual,\n defaultExceptionType,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogLevel,\n genShortID,\n getCurrentTimestamp,\n getInternalFaroFromGlobalObject,\n getTransportBody,\n globalObject,\n internalGlobalObjectKey,\n isArray,\n isBoolean,\n isDomError,\n isDomException,\n isElement,\n isElementDefined,\n isError,\n isErrorDefined,\n isErrorEvent,\n isEvent,\n isEventDefined,\n isFunction,\n isInstanceOf,\n isInt,\n isInternalFaroOnGlobalObject,\n isMap,\n isMapDefined,\n isNull,\n isNumber,\n isObject,\n isPrimitive,\n isRegExp,\n isString,\n isSymbol,\n isSyntheticEvent,\n isThenable,\n isToString,\n isTypeof,\n isUndefined,\n isEmpty,\n InternalLoggerLevel,\n LogLevel,\n noop,\n setInternalFaroOnGlobalObject,\n TransportItemType,\n transportItemTypeToBodyKey,\n VERSION,\n EVENT_CLICK,\n EVENT_NAVIGATION,\n EVENT_ROUTE_CHANGE,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n EVENT_VIEW_CHANGED,\n Observable,\n unknownString,\n UserActionState,\n type UserActionInternalInterface,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n UserActionImportance,\n} from '@grafana/faro-core';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './instrumentations/session';\n\nexport { getIgnoreUrls, getUrlFromResource } from './utils/url';\n\nexport { userActionDataAttribute } from './instrumentations/userActions';\n"]}
|