@grafana/faro-web-sdk 1.12.2 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/faro-web-sdk.iife.js +1 -1
- package/dist/bundle/types/config/makeCoreConfig.d.ts +1 -1
- package/dist/bundle/types/index.d.ts +1 -1
- package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +3 -1
- package/dist/bundle/types/instrumentations/errors/getErrorDetails.d.ts +8 -1
- package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
- 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/session/sessionManager/sessionManagerUtils.d.ts +6 -0
- package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/bundle/types/metas/index.d.ts +0 -2
- package/dist/bundle/types/metas/page/index.d.ts +1 -1
- package/dist/bundle/types/metas/page/meta.d.ts +7 -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/bundle/types/utils/index.d.ts +0 -1
- package/dist/cjs/config/makeCoreConfig.js +43 -36
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/index.js +2 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instrumentations/console/instrumentation.js +26 -3
- package/dist/cjs/instrumentations/console/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/errors/getErrorDetails.js +32 -1
- package/dist/cjs/instrumentations/errors/getErrorDetails.js.map +1 -1
- package/dist/cjs/instrumentations/errors/registerOnerror.js +1 -21
- package/dist/cjs/instrumentations/errors/registerOnerror.js.map +1 -1
- package/dist/cjs/instrumentations/session/instrumentation.js +6 -4
- package/dist/cjs/instrumentations/session/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js +5 -11
- package/dist/cjs/instrumentations/session/sessionManager/PersistentSessionsManager.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js +5 -12
- package/dist/cjs/instrumentations/session/sessionManager/VolatileSessionManager.js.map +1 -1
- package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js +49 -3
- package/dist/cjs/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -1
- package/dist/cjs/metas/index.js +1 -5
- package/dist/cjs/metas/index.js.map +1 -1
- package/dist/cjs/metas/page/index.js +2 -2
- package/dist/cjs/metas/page/index.js.map +1 -1
- package/dist/cjs/metas/page/meta.js +30 -7
- package/dist/cjs/metas/page/meta.js.map +1 -1
- package/dist/cjs/utils/index.js +1 -4
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/webStorage.js +0 -1
- package/dist/cjs/utils/webStorage.js.map +1 -1
- package/dist/esm/config/makeCoreConfig.js +43 -37
- 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/console/instrumentation.js +27 -4
- package/dist/esm/instrumentations/console/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/errors/getErrorDetails.js +31 -3
- package/dist/esm/instrumentations/errors/getErrorDetails.js.map +1 -1
- package/dist/esm/instrumentations/errors/registerOnerror.js +2 -21
- package/dist/esm/instrumentations/errors/registerOnerror.js.map +1 -1
- package/dist/esm/instrumentations/session/instrumentation.js +6 -4
- package/dist/esm/instrumentations/session/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/session/sessionManager/PersistentSessionsManager.js +7 -13
- package/dist/esm/instrumentations/session/sessionManager/PersistentSessionsManager.js.map +1 -1
- package/dist/esm/instrumentations/session/sessionManager/VolatileSessionManager.js +6 -13
- package/dist/esm/instrumentations/session/sessionManager/VolatileSessionManager.js.map +1 -1
- package/dist/esm/instrumentations/session/sessionManager/sessionManagerUtils.js +45 -3
- package/dist/esm/instrumentations/session/sessionManager/sessionManagerUtils.js.map +1 -1
- package/dist/esm/metas/index.js +0 -2
- package/dist/esm/metas/index.js.map +1 -1
- package/dist/esm/metas/page/index.js +1 -1
- package/dist/esm/metas/page/index.js.map +1 -1
- package/dist/esm/metas/page/meta.js +16 -5
- package/dist/esm/metas/page/meta.js.map +1 -1
- package/dist/esm/utils/index.js +0 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/webStorage.js +0 -1
- package/dist/esm/utils/webStorage.js.map +1 -1
- package/dist/types/config/makeCoreConfig.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/instrumentations/console/instrumentation.d.ts +3 -1
- package/dist/types/instrumentations/errors/getErrorDetails.d.ts +8 -1
- package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/session/sessionManager/sessionManagerUtils.d.ts +6 -0
- package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/types/metas/index.d.ts +0 -2
- package/dist/types/metas/page/index.d.ts +1 -1
- package/dist/types/metas/page/meta.d.ts +7 -2
- package/dist/types/transports/console/transport.d.ts +1 -1
- package/dist/types/transports/fetch/transport.d.ts +1 -1
- package/dist/types/utils/index.d.ts +0 -1
- package/package.json +7 -3
- package/dist/bundle/types/metas/const.d.ts +0 -2
- package/dist/bundle/types/utils/json.d.ts +0 -2
- package/dist/cjs/metas/const.js +0 -7
- package/dist/cjs/metas/const.js.map +0 -1
- package/dist/cjs/utils/json.js +0 -22
- package/dist/cjs/utils/json.js.map +0 -1
- package/dist/esm/metas/const.js +0 -4
- package/dist/esm/metas/const.js.map +0 -1
- package/dist/esm/utils/json.js +0 -16
- package/dist/esm/utils/json.js.map +0 -1
- package/dist/types/metas/const.d.ts +0 -2
- package/dist/types/utils/json.d.ts +0 -2
|
@@ -3,9 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VolatileSessionsManager = void 0;
|
|
4
4
|
var faro_core_1 = require("@grafana/faro-core");
|
|
5
5
|
var utils_1 = require("../../../utils");
|
|
6
|
-
var json_1 = require("../../../utils/json");
|
|
7
6
|
var webStorage_1 = require("../../../utils/webStorage");
|
|
8
|
-
var sampling_1 = require("./sampling");
|
|
9
7
|
var sessionConstants_1 = require("./sessionConstants");
|
|
10
8
|
var sessionManagerUtils_1 = require("./sessionManagerUtils");
|
|
11
9
|
var VolatileSessionsManager = /** @class */ (function () {
|
|
@@ -22,7 +20,7 @@ var VolatileSessionsManager = /** @class */ (function () {
|
|
|
22
20
|
(0, webStorage_1.removeItem)(sessionConstants_1.STORAGE_KEY, VolatileSessionsManager.storageTypeSession);
|
|
23
21
|
};
|
|
24
22
|
VolatileSessionsManager.storeUserSession = function (session) {
|
|
25
|
-
(0, webStorage_1.setItem)(sessionConstants_1.STORAGE_KEY, (0,
|
|
23
|
+
(0, webStorage_1.setItem)(sessionConstants_1.STORAGE_KEY, (0, faro_core_1.stringifyExternalJson)(session), VolatileSessionsManager.storageTypeSession);
|
|
26
24
|
};
|
|
27
25
|
VolatileSessionsManager.fetchUserSession = function () {
|
|
28
26
|
var storedSession = (0, webStorage_1.getItem)(sessionConstants_1.STORAGE_KEY, VolatileSessionsManager.storageTypeSession);
|
|
@@ -39,15 +37,10 @@ var VolatileSessionsManager = /** @class */ (function () {
|
|
|
39
37
|
}
|
|
40
38
|
});
|
|
41
39
|
// Users can call the setSession() method, so we need to sync this with the local storage session
|
|
42
|
-
faro_core_1.faro.metas.addListener(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var userSession = (0, sessionManagerUtils_1.addSessionMetadataToNextSession)((0, sessionManagerUtils_1.createUserSessionObject)({ sessionId: session.id, isSampled: (0, sampling_1.isSampled)() }), sessionFromSessionStorage);
|
|
47
|
-
VolatileSessionsManager.storeUserSession(userSession);
|
|
48
|
-
faro_core_1.faro.api.setSession(userSession.sessionMeta);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
40
|
+
faro_core_1.faro.metas.addListener((0, sessionManagerUtils_1.getSessionMetaUpdateHandler)({
|
|
41
|
+
fetchUserSession: VolatileSessionsManager.fetchUserSession,
|
|
42
|
+
storeUserSession: VolatileSessionsManager.storeUserSession,
|
|
43
|
+
}));
|
|
51
44
|
};
|
|
52
45
|
VolatileSessionsManager.storageTypeSession = webStorage_1.webStorageType.session;
|
|
53
46
|
return VolatileSessionsManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VolatileSessionManager.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/VolatileSessionManager.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"VolatileSessionManager.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/VolatileSessionManager.ts"],"names":[],"mappings":";;;AAAA,gDAAiE;AAEjE,wCAA0C;AAC1C,wDAAyF;AAEzF,uDAAuE;AACvE,6DAA2F;AAG3F;IAIE;QAAA,iBAOC;QAoBD,kBAAa,GAAG,IAAA,gBAAQ,EAAC,cAAM,OAAA,KAAI,CAAC,iBAAiB,EAAE,EAAxB,CAAwB,EAAE,uCAAoB,CAAC,CAAC;QA1B7E,IAAI,CAAC,iBAAiB,GAAG,IAAA,2CAAqB,EAAC;YAC7C,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;YAC1D,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;SAC3D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEM,yCAAiB,GAAxB;QACE,IAAA,uBAAU,EAAC,8BAAW,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IACtE,CAAC;IAEM,wCAAgB,GAAvB,UAAwB,OAAwB;QAC9C,IAAA,oBAAO,EAAC,8BAAW,EAAE,IAAA,iCAAqB,EAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;IACnG,CAAC;IAEM,wCAAgB,GAAvB;QACE,IAAM,aAAa,GAAG,IAAA,oBAAO,EAAC,8BAAW,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;QAEvF,IAAI,aAAa,EAAE;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAoB,CAAC;SACrD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAIO,sCAAI,GAAZ;QAAA,iBAcC;QAbC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;YAC5C,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE;gBAC1C,KAAI,CAAC,aAAa,EAAE,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,iGAAiG;QACjG,gBAAI,CAAC,KAAK,CAAC,WAAW,CACpB,IAAA,iDAA2B,EAAC;YAC1B,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;YAC1D,gBAAgB,EAAE,uBAAuB,CAAC,gBAAgB;SAC3D,CAAC,CACH,CAAC;IACJ,CAAC;IA9Cc,0CAAkB,GAAG,2BAAc,CAAC,OAAO,CAAC;IA+C7D,8BAAC;CAAA,AAhDD,IAgDC;AAhDY,0DAAuB","sourcesContent":["import { faro, stringifyExternalJson } from '@grafana/faro-core';\n\nimport { throttle } from '../../../utils';\nimport { getItem, removeItem, setItem, webStorageType } from '../../../utils/webStorage';\n\nimport { STORAGE_KEY, STORAGE_UPDATE_DELAY } from './sessionConstants';\nimport { getSessionMetaUpdateHandler, getUserSessionUpdater } from './sessionManagerUtils';\nimport type { FaroUserSession } from './types';\n\nexport class VolatileSessionsManager {\n private static storageTypeSession = webStorageType.session;\n private updateUserSession: ReturnType<typeof getUserSessionUpdater>;\n\n constructor() {\n this.updateUserSession = getUserSessionUpdater({\n fetchUserSession: VolatileSessionsManager.fetchUserSession,\n storeUserSession: VolatileSessionsManager.storeUserSession,\n });\n\n this.init();\n }\n\n static removeUserSession() {\n removeItem(STORAGE_KEY, VolatileSessionsManager.storageTypeSession);\n }\n\n static storeUserSession(session: FaroUserSession): void {\n setItem(STORAGE_KEY, stringifyExternalJson(session), VolatileSessionsManager.storageTypeSession);\n }\n\n static fetchUserSession(): FaroUserSession | null {\n const storedSession = getItem(STORAGE_KEY, VolatileSessionsManager.storageTypeSession);\n\n if (storedSession) {\n return JSON.parse(storedSession) as FaroUserSession;\n }\n\n return null;\n }\n\n updateSession = throttle(() => this.updateUserSession(), STORAGE_UPDATE_DELAY);\n\n private init(): void {\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n this.updateSession();\n }\n });\n\n // Users can call the setSession() method, so we need to sync this with the local storage session\n faro.metas.addListener(\n getSessionMetaUpdateHandler({\n fetchUserSession: VolatileSessionsManager.fetchUserSession,\n storeUserSession: VolatileSessionsManager.storeUserSession,\n })\n );\n }\n}\n"]}
|
|
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.addSessionMetadataToNextSession = exports.getUserSessionUpdater = exports.isUserSessionValid = exports.createUserSessionObject = void 0;
|
|
14
|
+
exports.getSessionMetaUpdateHandler = exports.addSessionMetadataToNextSession = exports.getUserSessionUpdater = exports.isUserSessionValid = exports.createUserSessionObject = void 0;
|
|
15
15
|
var faro_core_1 = require("@grafana/faro-core");
|
|
16
16
|
var utils_1 = require("../../../utils");
|
|
17
17
|
var sampling_1 = require("./sampling");
|
|
@@ -72,12 +72,58 @@ function getUserSessionUpdater(_a) {
|
|
|
72
72
|
}
|
|
73
73
|
exports.getUserSessionUpdater = getUserSessionUpdater;
|
|
74
74
|
function addSessionMetadataToNextSession(newSession, previousSession) {
|
|
75
|
-
var _a, _b, _c, _d;
|
|
75
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
76
76
|
var sessionWithMeta = __assign(__assign({}, newSession), { sessionMeta: {
|
|
77
77
|
id: newSession.sessionId,
|
|
78
|
-
attributes: __assign(__assign(__assign(
|
|
78
|
+
attributes: __assign(__assign(__assign({}, (_b = (_a = faro_core_1.faro.config.sessionTracking) === null || _a === void 0 ? void 0 : _a.session) === null || _b === void 0 ? void 0 : _b.attributes), ((_d = (_c = faro_core_1.faro.metas.value.session) === null || _c === void 0 ? void 0 : _c.attributes) !== null && _d !== void 0 ? _d : {})), { isSampled: newSession.isSampled.toString() }),
|
|
79
79
|
} });
|
|
80
|
+
var overrides = (_f = (_e = faro_core_1.faro.metas.value.session) === null || _e === void 0 ? void 0 : _e.overrides) !== null && _f !== void 0 ? _f : (_g = previousSession === null || previousSession === void 0 ? void 0 : previousSession.sessionMeta) === null || _g === void 0 ? void 0 : _g.overrides;
|
|
81
|
+
if (!(0, faro_core_1.isEmpty)(overrides)) {
|
|
82
|
+
sessionWithMeta.sessionMeta.overrides = overrides;
|
|
83
|
+
}
|
|
84
|
+
var previousSessionId = previousSession === null || previousSession === void 0 ? void 0 : previousSession.sessionId;
|
|
85
|
+
if (previousSessionId != null) {
|
|
86
|
+
sessionWithMeta.sessionMeta.attributes['previousSession'] = previousSessionId;
|
|
87
|
+
}
|
|
80
88
|
return sessionWithMeta;
|
|
81
89
|
}
|
|
82
90
|
exports.addSessionMetadataToNextSession = addSessionMetadataToNextSession;
|
|
91
|
+
function getSessionMetaUpdateHandler(_a) {
|
|
92
|
+
var fetchUserSession = _a.fetchUserSession, storeUserSession = _a.storeUserSession;
|
|
93
|
+
return function syncSessionIfChangedExternally(meta) {
|
|
94
|
+
var session = meta.session;
|
|
95
|
+
var sessionFromSessionStorage = fetchUserSession();
|
|
96
|
+
var sessionId = session === null || session === void 0 ? void 0 : session.id;
|
|
97
|
+
var sessionAttributes = session === null || session === void 0 ? void 0 : session.attributes;
|
|
98
|
+
var sessionOverrides = session === null || session === void 0 ? void 0 : session.overrides;
|
|
99
|
+
var storedSessionMeta = sessionFromSessionStorage === null || sessionFromSessionStorage === void 0 ? void 0 : sessionFromSessionStorage.sessionMeta;
|
|
100
|
+
var storedSessionMetaOverrides = storedSessionMeta === null || storedSessionMeta === void 0 ? void 0 : storedSessionMeta.overrides;
|
|
101
|
+
var hasSessionOverridesChanged = !!sessionOverrides && !(0, faro_core_1.deepEqual)(sessionOverrides, storedSessionMetaOverrides);
|
|
102
|
+
var hasAttributesChanged = !!sessionAttributes && !(0, faro_core_1.deepEqual)(sessionAttributes, storedSessionMeta === null || storedSessionMeta === void 0 ? void 0 : storedSessionMeta.attributes);
|
|
103
|
+
var hasSessionIdChanged = !!session && sessionId !== (sessionFromSessionStorage === null || sessionFromSessionStorage === void 0 ? void 0 : sessionFromSessionStorage.sessionId);
|
|
104
|
+
if (hasSessionIdChanged || hasAttributesChanged || hasSessionOverridesChanged) {
|
|
105
|
+
var userSession = addSessionMetadataToNextSession(createUserSessionObject({ sessionId: sessionId, isSampled: (0, sampling_1.isSampled)() }), sessionFromSessionStorage);
|
|
106
|
+
storeUserSession(userSession);
|
|
107
|
+
sendOverrideEvent(hasSessionOverridesChanged, sessionOverrides, storedSessionMetaOverrides);
|
|
108
|
+
faro_core_1.faro.api.setSession(userSession.sessionMeta);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
exports.getSessionMetaUpdateHandler = getSessionMetaUpdateHandler;
|
|
113
|
+
function sendOverrideEvent(hasSessionOverridesChanged, sessionOverrides, storedSessionOverrides) {
|
|
114
|
+
var _a, _b, _c;
|
|
115
|
+
if (sessionOverrides === void 0) { sessionOverrides = {}; }
|
|
116
|
+
if (storedSessionOverrides === void 0) { storedSessionOverrides = {}; }
|
|
117
|
+
if (!hasSessionOverridesChanged) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
var serviceName = sessionOverrides.serviceName;
|
|
121
|
+
var previousServiceName = (_c = (_a = storedSessionOverrides.serviceName) !== null && _a !== void 0 ? _a : (_b = faro_core_1.faro.metas.value.app) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '';
|
|
122
|
+
if (serviceName && serviceName !== previousServiceName) {
|
|
123
|
+
faro_core_1.faro.api.pushEvent(faro_core_1.EVENT_OVERRIDES_SERVICE_NAME, {
|
|
124
|
+
serviceName: serviceName,
|
|
125
|
+
previousServiceName: previousServiceName,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
83
129
|
//# sourceMappingURL=sessionManagerUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionManagerUtils.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/sessionManagerUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { dateNow, faro, genShortID } from '@grafana/faro-core';\n\nimport { isLocalStorageAvailable, isSessionStorageAvailable } from '../../../utils';\n\nimport { isSampled } from './sampling';\nimport { SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME } from './sessionConstants';\nimport type { FaroUserSession } from './types';\n\ntype CreateUserSessionObjectParams = {\n sessionId?: string;\n started?: number;\n lastActivity?: number;\n isSampled?: boolean;\n};\n\nexport function createUserSessionObject({\n sessionId,\n started,\n lastActivity,\n isSampled = true,\n}: CreateUserSessionObjectParams = {}): FaroUserSession {\n const now = dateNow();\n\n const generateSessionId = faro.config?.sessionTracking?.generateSessionId;\n\n if (sessionId == null) {\n sessionId = typeof generateSessionId === 'function' ? generateSessionId() : genShortID();\n }\n\n return {\n sessionId,\n lastActivity: lastActivity ?? now,\n started: started ?? now,\n isSampled: isSampled,\n };\n}\n\nexport function isUserSessionValid(session: FaroUserSession | null): boolean {\n if (session == null) {\n return false;\n }\n\n const now = dateNow();\n const lifetimeValid = now - session.started < SESSION_EXPIRATION_TIME;\n\n if (!lifetimeValid) {\n return false;\n }\n\n const inactivityPeriodValid = now - session.lastActivity < SESSION_INACTIVITY_TIME;\n return inactivityPeriodValid;\n}\n\ntype GetUserSessionUpdaterParams = {\n storeUserSession: (session: FaroUserSession) => void;\n fetchUserSession: () => FaroUserSession | null;\n};\n\ntype UpdateSessionParams = { forceSessionExtend: boolean };\n\nexport function getUserSessionUpdater({\n fetchUserSession,\n storeUserSession,\n}: GetUserSessionUpdaterParams): (options?: UpdateSessionParams) => void {\n return function updateSession({ forceSessionExtend } = { forceSessionExtend: false }): void {\n if (!fetchUserSession || !storeUserSession) {\n return;\n }\n\n const sessionTrackingConfig = faro.config.sessionTracking;\n const isPersistentSessions = sessionTrackingConfig?.persistent;\n\n if ((isPersistentSessions && !isLocalStorageAvailable) || (!isPersistentSessions && !isSessionStorageAvailable)) {\n return;\n }\n\n const sessionFromStorage = fetchUserSession();\n\n if (forceSessionExtend === false && isUserSessionValid(sessionFromStorage)) {\n storeUserSession({ ...sessionFromStorage!, lastActivity: dateNow() });\n } else {\n let newSession = addSessionMetadataToNextSession(\n createUserSessionObject({ isSampled: isSampled() }),\n sessionFromStorage\n );\n\n storeUserSession(newSession);\n\n faro.api?.setSession(newSession.sessionMeta);\n sessionTrackingConfig?.onSessionChange?.(sessionFromStorage?.sessionMeta ?? null, newSession.sessionMeta!);\n }\n };\n}\n\nexport function addSessionMetadataToNextSession(newSession: FaroUserSession, previousSession: FaroUserSession | null) {\n const sessionWithMeta: Required<FaroUserSession> = {\n ...newSession,\n sessionMeta: {\n id: newSession.sessionId,\n attributes: {\n ...faro.config.sessionTracking?.session?.attributes,\n ...(faro.metas.value.session?.attributes ?? {}),\n ...(previousSession != null ? { previousSession: previousSession.sessionId } : {}),\n isSampled: newSession.isSampled.toString(),\n },\n },\n };\n\n return sessionWithMeta;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sessionManagerUtils.js","sourceRoot":"","sources":["../../../../../src/instrumentations/session/sessionManager/sessionManagerUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { dateNow, deepEqual, EVENT_OVERRIDES_SERVICE_NAME, faro, genShortID, isEmpty, Meta } from '@grafana/faro-core';\nimport type { MetaOverrides } from '@grafana/faro-core';\n\nimport { isLocalStorageAvailable, isSessionStorageAvailable } from '../../../utils';\n\nimport { isSampled } from './sampling';\nimport { SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME } from './sessionConstants';\nimport type { FaroUserSession } from './types';\n\ntype CreateUserSessionObjectParams = {\n sessionId?: string;\n started?: number;\n lastActivity?: number;\n isSampled?: boolean;\n};\n\nexport function createUserSessionObject({\n sessionId,\n started,\n lastActivity,\n isSampled = true,\n}: CreateUserSessionObjectParams = {}): FaroUserSession {\n const now = dateNow();\n\n const generateSessionId = faro.config?.sessionTracking?.generateSessionId;\n\n if (sessionId == null) {\n sessionId = typeof generateSessionId === 'function' ? generateSessionId() : genShortID();\n }\n\n return {\n sessionId,\n lastActivity: lastActivity ?? now,\n started: started ?? now,\n isSampled: isSampled,\n };\n}\n\nexport function isUserSessionValid(session: FaroUserSession | null): boolean {\n if (session == null) {\n return false;\n }\n\n const now = dateNow();\n const lifetimeValid = now - session.started < SESSION_EXPIRATION_TIME;\n\n if (!lifetimeValid) {\n return false;\n }\n\n const inactivityPeriodValid = now - session.lastActivity < SESSION_INACTIVITY_TIME;\n return inactivityPeriodValid;\n}\n\ntype GetUserSessionUpdaterParams = {\n storeUserSession: (session: FaroUserSession) => void;\n fetchUserSession: () => FaroUserSession | null;\n};\n\ntype UpdateSessionParams = { forceSessionExtend: boolean };\n\nexport function getUserSessionUpdater({\n fetchUserSession,\n storeUserSession,\n}: GetUserSessionUpdaterParams): (options?: UpdateSessionParams) => void {\n return function updateSession({ forceSessionExtend } = { forceSessionExtend: false }): void {\n if (!fetchUserSession || !storeUserSession) {\n return;\n }\n\n const sessionTrackingConfig = faro.config.sessionTracking;\n const isPersistentSessions = sessionTrackingConfig?.persistent;\n\n if ((isPersistentSessions && !isLocalStorageAvailable) || (!isPersistentSessions && !isSessionStorageAvailable)) {\n return;\n }\n\n const sessionFromStorage = fetchUserSession();\n\n if (forceSessionExtend === false && isUserSessionValid(sessionFromStorage)) {\n storeUserSession({ ...sessionFromStorage!, lastActivity: dateNow() });\n } else {\n let newSession = addSessionMetadataToNextSession(\n createUserSessionObject({ isSampled: isSampled() }),\n sessionFromStorage\n );\n\n storeUserSession(newSession);\n\n faro.api?.setSession(newSession.sessionMeta);\n sessionTrackingConfig?.onSessionChange?.(sessionFromStorage?.sessionMeta ?? null, newSession.sessionMeta!);\n }\n };\n}\n\nexport function addSessionMetadataToNextSession(newSession: FaroUserSession, previousSession: FaroUserSession | null) {\n const sessionWithMeta: Required<FaroUserSession> = {\n ...newSession,\n sessionMeta: {\n id: newSession.sessionId,\n attributes: {\n ...faro.config.sessionTracking?.session?.attributes,\n ...(faro.metas.value.session?.attributes ?? {}),\n isSampled: newSession.isSampled.toString(),\n },\n },\n };\n\n const overrides = faro.metas.value.session?.overrides ?? previousSession?.sessionMeta?.overrides;\n if (!isEmpty(overrides)) {\n sessionWithMeta.sessionMeta.overrides = overrides;\n }\n\n const previousSessionId = previousSession?.sessionId;\n if (previousSessionId != null) {\n sessionWithMeta.sessionMeta.attributes!['previousSession'] = previousSessionId;\n }\n\n return sessionWithMeta;\n}\n\ntype GetUserSessionMetaUpdateHandlerParams = {\n storeUserSession: (session: FaroUserSession) => void;\n fetchUserSession: () => FaroUserSession | null;\n};\n\nexport function getSessionMetaUpdateHandler({\n fetchUserSession,\n storeUserSession,\n}: GetUserSessionMetaUpdateHandlerParams) {\n return function syncSessionIfChangedExternally(meta: Meta) {\n const session = meta.session;\n const sessionFromSessionStorage = fetchUserSession();\n\n let sessionId = session?.id;\n const sessionAttributes = session?.attributes;\n const sessionOverrides = session?.overrides;\n\n const storedSessionMeta = sessionFromSessionStorage?.sessionMeta;\n const storedSessionMetaOverrides = storedSessionMeta?.overrides;\n\n const hasSessionOverridesChanged = !!sessionOverrides && !deepEqual(sessionOverrides, storedSessionMetaOverrides);\n const hasAttributesChanged = !!sessionAttributes && !deepEqual(sessionAttributes, storedSessionMeta?.attributes);\n const hasSessionIdChanged = !!session && sessionId !== sessionFromSessionStorage?.sessionId;\n\n if (hasSessionIdChanged || hasAttributesChanged || hasSessionOverridesChanged) {\n const userSession = addSessionMetadataToNextSession(\n createUserSessionObject({ sessionId, isSampled: isSampled() }),\n sessionFromSessionStorage\n );\n\n storeUserSession(userSession);\n sendOverrideEvent(hasSessionOverridesChanged, sessionOverrides, storedSessionMetaOverrides);\n faro.api.setSession(userSession.sessionMeta);\n }\n };\n}\n\nfunction sendOverrideEvent(\n hasSessionOverridesChanged: boolean,\n sessionOverrides: MetaOverrides = {},\n storedSessionOverrides: MetaOverrides = {}\n) {\n if (!hasSessionOverridesChanged) {\n return;\n }\n\n const serviceName = sessionOverrides.serviceName;\n const previousServiceName = storedSessionOverrides.serviceName ?? faro.metas.value.app?.name ?? '';\n\n if (serviceName && serviceName !== previousServiceName) {\n faro.api.pushEvent(EVENT_OVERRIDES_SERVICE_NAME, {\n serviceName,\n previousServiceName,\n });\n }\n}\n"]}
|
package/dist/cjs/metas/index.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sdkMeta = exports.createSession = exports.
|
|
3
|
+
exports.sdkMeta = exports.createSession = exports.browserMeta = void 0;
|
|
4
4
|
var browser_1 = require("./browser");
|
|
5
5
|
Object.defineProperty(exports, "browserMeta", { enumerable: true, get: function () { return browser_1.browserMeta; } });
|
|
6
|
-
var const_1 = require("./const");
|
|
7
|
-
Object.defineProperty(exports, "defaultMetas", { enumerable: true, get: function () { return const_1.defaultMetas; } });
|
|
8
|
-
var page_1 = require("./page");
|
|
9
|
-
Object.defineProperty(exports, "pageMeta", { enumerable: true, get: function () { return page_1.pageMeta; } });
|
|
10
6
|
var session_1 = require("./session");
|
|
11
7
|
Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return session_1.createSession; } });
|
|
12
8
|
var sdk_1 = require("./sdk");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metas/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AAEpB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metas/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AAEpB,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AAEtB,6BAAgC;AAAvB,8FAAA,OAAO,OAAA","sourcesContent":["export { browserMeta } from './browser';\n\nexport { createSession } from './session';\n\nexport { sdkMeta } from './sdk';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createPageMeta = void 0;
|
|
4
4
|
var meta_1 = require("./meta");
|
|
5
|
-
Object.defineProperty(exports, "
|
|
5
|
+
Object.defineProperty(exports, "createPageMeta", { enumerable: true, get: function () { return meta_1.createPageMeta; } });
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/metas/page/index.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/metas/page/index.ts"],"names":[],"mappings":";;;AAAA,+BAAwC;AAA/B,sGAAA,cAAc,OAAA","sourcesContent":["export { createPageMeta } from './meta';\n"]}
|
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
14
|
+
exports.createPageMeta = void 0;
|
|
15
|
+
var faro_core_1 = require("@grafana/faro-core");
|
|
16
|
+
var currentHref;
|
|
17
|
+
var pageId;
|
|
18
|
+
function createPageMeta(_a) {
|
|
19
|
+
var _b = _a === void 0 ? {} : _a, generatePageId = _b.generatePageId, initialPageMeta = _b.initialPageMeta;
|
|
20
|
+
var pageMeta = function () {
|
|
21
|
+
var locationHref = location.href;
|
|
22
|
+
if ((0, faro_core_1.isFunction)(generatePageId) && currentHref !== locationHref) {
|
|
23
|
+
currentHref = locationHref;
|
|
24
|
+
pageId = generatePageId(location);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
page: __assign(__assign({ url: locationHref }, (pageId ? { id: pageId } : {})), initialPageMeta),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
return pageMeta;
|
|
31
|
+
}
|
|
32
|
+
exports.createPageMeta = createPageMeta;
|
|
10
33
|
//# sourceMappingURL=meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/page/meta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/page/meta.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAA0E;AAE1E,IAAI,WAA+B,CAAC;AACpC,IAAI,MAA0B,CAAC;AAO/B,SAAgB,cAAc,CAAC,EAA6D;QAA7D,qBAA2D,EAAE,KAAA,EAA3D,cAAc,oBAAA,EAAE,eAAe,qBAAA;IAG9D,IAAM,QAAQ,GAAiC;QAC7C,IAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEnC,IAAI,IAAA,sBAAU,EAAC,cAAc,CAAC,IAAI,WAAW,KAAK,YAAY,EAAE;YAC9D,WAAW,GAAG,YAAY,CAAC;YAC3B,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;SACnC;QAED,OAAO;YACL,IAAI,sBACF,GAAG,EAAE,YAAY,IACd,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC9B,eAAe,CACnB;SACF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AArBD,wCAqBC","sourcesContent":["import { isFunction, type Meta, type MetaItem } from '@grafana/faro-core';\n\nlet currentHref: string | undefined;\nlet pageId: string | undefined;\n\ntype createPageMetaProps = {\n generatePageId?: (location: Location) => string;\n initialPageMeta?: Meta['page'];\n};\n\nexport function createPageMeta({ generatePageId, initialPageMeta }: createPageMetaProps = {}): MetaItem<\n Pick<Meta, 'page'>\n> {\n const pageMeta: MetaItem<Pick<Meta, 'page'>> = () => {\n const locationHref = location.href;\n\n if (isFunction(generatePageId) && currentHref !== locationHref) {\n currentHref = locationHref;\n pageId = generatePageId(location);\n }\n\n return {\n page: {\n url: locationHref,\n ...(pageId ? { id: pageId } : {}),\n ...initialPageMeta,\n },\n };\n };\n\n return pageMeta;\n}\n"]}
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getIgnoreUrls = exports.
|
|
3
|
+
exports.getIgnoreUrls = exports.throttle = exports.setItem = exports.removeItem = exports.isWebStorageAvailable = exports.getItem = exports.webStorageType = exports.isSessionStorageAvailable = exports.isLocalStorageAvailable = void 0;
|
|
4
4
|
var webStorage_1 = require("./webStorage");
|
|
5
5
|
Object.defineProperty(exports, "isLocalStorageAvailable", { enumerable: true, get: function () { return webStorage_1.isLocalStorageAvailable; } });
|
|
6
6
|
Object.defineProperty(exports, "isSessionStorageAvailable", { enumerable: true, get: function () { return webStorage_1.isSessionStorageAvailable; } });
|
|
@@ -11,9 +11,6 @@ Object.defineProperty(exports, "removeItem", { enumerable: true, get: function (
|
|
|
11
11
|
Object.defineProperty(exports, "setItem", { enumerable: true, get: function () { return webStorage_1.setItem; } });
|
|
12
12
|
var throttle_1 = require("./throttle");
|
|
13
13
|
Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return throttle_1.throttle; } });
|
|
14
|
-
var json_1 = require("./json");
|
|
15
|
-
Object.defineProperty(exports, "getCircularDependencyReplacer", { enumerable: true, get: function () { return json_1.getCircularDependencyReplacer; } });
|
|
16
|
-
Object.defineProperty(exports, "stringifyExternalJson", { enumerable: true, get: function () { return json_1.stringifyExternalJson; } });
|
|
17
14
|
var url_1 = require("./url");
|
|
18
15
|
Object.defineProperty(exports, "getIgnoreUrls", { enumerable: true, get: function () { return url_1.getIgnoreUrls; } });
|
|
19
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,2CAQsB;AAPpB,qHAAA,uBAAuB,OAAA;AACvB,uHAAA,yBAAyB,OAAA;AACzB,4GAAA,cAAc,OAAA;AACd,qGAAA,OAAO,OAAA;AACP,mHAAA,qBAAqB,OAAA;AACrB,wGAAA,UAAU,OAAA;AACV,qGAAA,OAAO,OAAA;AAGT,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,2CAQsB;AAPpB,qHAAA,uBAAuB,OAAA;AACvB,uHAAA,yBAAyB,OAAA;AACzB,4GAAA,cAAc,OAAA;AACd,qGAAA,OAAO,OAAA;AACP,mHAAA,qBAAqB,OAAA;AACrB,wGAAA,UAAU,OAAA;AACV,qGAAA,OAAO,OAAA;AAGT,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,6BAAsC;AAA7B,oGAAA,aAAa,OAAA","sourcesContent":["export {\n isLocalStorageAvailable,\n isSessionStorageAvailable,\n webStorageType,\n getItem,\n isWebStorageAvailable,\n removeItem,\n setItem,\n} from './webStorage';\n\nexport { throttle } from './throttle';\n\nexport { getIgnoreUrls } from './url';\n"]}
|
|
@@ -6,7 +6,6 @@ exports.webStorageType = {
|
|
|
6
6
|
session: 'sessionStorage',
|
|
7
7
|
local: 'localStorage',
|
|
8
8
|
};
|
|
9
|
-
// TODO: remove default storage type from all function
|
|
10
9
|
/**
|
|
11
10
|
* Check if selected web storage mechanism is available.
|
|
12
11
|
* @param type storage mechanism to test availability for.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webStorage.js","sourceRoot":"","sources":["../../../src/utils/webStorage.ts"],"names":[],"mappings":";;;AAAA,gDAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,cAAc;CACb,CAAC;AAIX
|
|
1
|
+
{"version":3,"file":"webStorage.js","sourceRoot":"","sources":["../../../src/utils/webStorage.ts"],"names":[],"mappings":";;;AAAA,gDAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,cAAc;CACb,CAAC;AAIX;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,IAAsB;;IAC1D,IAAI;QACF,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;KACb;IAAC,OAAO,KAAK,EAAE;QACd,sBAAsB;QACtB,MAAA,gBAAI,CAAC,cAAc,0CAAE,IAAI,CAAC,8BAAuB,IAAI,wCAA8B,KAAK,CAAE,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AAdD,sDAcC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,mBAAqC;IACxE,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE;QAClD,OAAO,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACjD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAND,0BAMC;AAED;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,mBAAqC;IACvF,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE;QAClD,IAAI;YACF,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACjD;QAAC,OAAO,KAAK,EAAE;YACd,aAAa;SACd;KACF;AACH,CAAC;AARD,0BAQC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CAAC,GAAW,EAAE,mBAAqC;IAC3E,IAAI,yBAAyB,CAAC,mBAAmB,CAAC,EAAE;QAClD,MAAM,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KAC7C;AACH,CAAC;AAJD,gCAIC;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;QAChD,OAAO,+BAAuB,CAAC;KAChC;IAED,IAAI,mBAAmB,KAAK,sBAAc,CAAC,OAAO,EAAE;QAClD,OAAO,iCAAyB,CAAC;KAClC;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"]}
|
|
@@ -2,12 +2,13 @@ import { createInternalLogger, defaultBatchingConfig, defaultGlobalObjectKey, de
|
|
|
2
2
|
import { defaultEventDomain } from '../consts';
|
|
3
3
|
import { parseStacktrace } from '../instrumentations';
|
|
4
4
|
import { defaultSessionTrackingConfig } from '../instrumentations/session';
|
|
5
|
-
import {
|
|
5
|
+
import { browserMeta } from '../metas';
|
|
6
6
|
import { k6Meta } from '../metas/k6';
|
|
7
|
+
import { createPageMeta } from '../metas/page';
|
|
7
8
|
import { FetchTransport } from '../transports';
|
|
8
9
|
import { getWebInstrumentations } from './getWebInstrumentations';
|
|
9
10
|
export function makeCoreConfig(browserConfig) {
|
|
10
|
-
var _a
|
|
11
|
+
var _a;
|
|
11
12
|
const transports = [];
|
|
12
13
|
const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);
|
|
13
14
|
if (browserConfig.transports) {
|
|
@@ -25,44 +26,49 @@ export function makeCoreConfig(browserConfig) {
|
|
|
25
26
|
else {
|
|
26
27
|
internalLogger.error('either "url" or "transports" must be defined');
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
batching: Object.assign(Object.assign({}, defaultBatchingConfig), browserConfig.batching),
|
|
42
|
-
dedupe: (_a = browserConfig.dedupe) !== null && _a !== void 0 ? _a : true,
|
|
43
|
-
globalObjectKey: browserConfig.globalObjectKey || defaultGlobalObjectKey,
|
|
44
|
-
instrumentations: (_b = browserConfig.instrumentations) !== null && _b !== void 0 ? _b : getWebInstrumentations(),
|
|
45
|
-
internalLoggerLevel: (_c = browserConfig.internalLoggerLevel) !== null && _c !== void 0 ? _c : defaultInternalLoggerLevel,
|
|
46
|
-
isolate: (_d = browserConfig.isolate) !== null && _d !== void 0 ? _d : false,
|
|
47
|
-
logArgsSerializer: (_e = browserConfig.logArgsSerializer) !== null && _e !== void 0 ? _e : defaultLogArgsSerializer,
|
|
48
|
-
metas: createMetas(),
|
|
29
|
+
const { app, batching, beforeSend, consoleInstrumentation, ignoreErrors, sessionTracking, trackResources, trackWebVitalsAttribution, user, view,
|
|
30
|
+
// properties with default values
|
|
31
|
+
dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, } = browserConfig;
|
|
32
|
+
return {
|
|
33
|
+
app,
|
|
34
|
+
batching: Object.assign(Object.assign({}, defaultBatchingConfig), batching),
|
|
35
|
+
dedupe: dedupe,
|
|
36
|
+
globalObjectKey,
|
|
37
|
+
instrumentations,
|
|
38
|
+
internalLoggerLevel,
|
|
39
|
+
isolate,
|
|
40
|
+
logArgsSerializer,
|
|
41
|
+
metas,
|
|
49
42
|
parseStacktrace,
|
|
50
|
-
paused
|
|
51
|
-
preventGlobalExposure
|
|
43
|
+
paused,
|
|
44
|
+
preventGlobalExposure,
|
|
52
45
|
transports,
|
|
53
|
-
unpatchedConsole
|
|
54
|
-
beforeSend
|
|
55
|
-
eventDomain
|
|
56
|
-
ignoreErrors
|
|
46
|
+
unpatchedConsole,
|
|
47
|
+
beforeSend,
|
|
48
|
+
eventDomain,
|
|
49
|
+
ignoreErrors,
|
|
57
50
|
// ignore cloud collector urls by default. These are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
58
|
-
ignoreUrls: ((
|
|
59
|
-
sessionTracking: Object.assign(Object.assign({}, defaultSessionTrackingConfig),
|
|
60
|
-
user
|
|
61
|
-
view
|
|
62
|
-
trackResources
|
|
63
|
-
trackWebVitalsAttribution
|
|
64
|
-
consoleInstrumentation
|
|
51
|
+
ignoreUrls: ((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []).concat([/\/collect(?:\/[\w]*)?$/]),
|
|
52
|
+
sessionTracking: Object.assign(Object.assign({}, defaultSessionTrackingConfig), sessionTracking),
|
|
53
|
+
user,
|
|
54
|
+
view,
|
|
55
|
+
trackResources,
|
|
56
|
+
trackWebVitalsAttribution,
|
|
57
|
+
consoleInstrumentation,
|
|
65
58
|
};
|
|
66
|
-
|
|
59
|
+
}
|
|
60
|
+
function createDefaultMetas(browserConfig) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
const { page, generatePageId } = (_a = browserConfig === null || browserConfig === void 0 ? void 0 : browserConfig.pageTracking) !== null && _a !== void 0 ? _a : {};
|
|
63
|
+
const initialMetas = [
|
|
64
|
+
browserMeta,
|
|
65
|
+
createPageMeta({ generatePageId, initialPageMeta: page }),
|
|
66
|
+
...((_b = browserConfig.metas) !== null && _b !== void 0 ? _b : []),
|
|
67
|
+
];
|
|
68
|
+
const isK6BrowserSession = isObject(window.k6);
|
|
69
|
+
if (isK6BrowserSession) {
|
|
70
|
+
return [...initialMetas, k6Meta];
|
|
71
|
+
}
|
|
72
|
+
return initialMetas;
|
|
67
73
|
}
|
|
68
74
|
//# sourceMappingURL=makeCoreConfig.js.map
|
|
@@ -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,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,
|
|
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 isObject,\n} from '@grafana/faro-core';\nimport type { Config, MetaItem, Transport } from '@grafana/faro-core';\n\nimport { defaultEventDomain } from '../consts';\nimport { parseStacktrace } from '../instrumentations';\nimport { defaultSessionTrackingConfig } from '../instrumentations/session';\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 app,\n batching,\n beforeSend,\n consoleInstrumentation,\n ignoreErrors,\n sessionTracking,\n trackResources,\n trackWebVitalsAttribution,\n user,\n view,\n\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 }: BrowserConfig = browserConfig;\n\n return {\n app,\n batching: {\n ...defaultBatchingConfig,\n ...batching,\n },\n dedupe: dedupe,\n globalObjectKey,\n instrumentations,\n internalLoggerLevel,\n isolate,\n logArgsSerializer,\n metas,\n parseStacktrace,\n paused,\n preventGlobalExposure,\n transports,\n unpatchedConsole,\n beforeSend,\n eventDomain,\n ignoreErrors,\n // ignore cloud collector urls by default. These are URLs ending with /collect or /collect/ followed by alphanumeric characters.\n ignoreUrls: (browserConfig.ignoreUrls ?? []).concat([/\\/collect(?:\\/[\\w]*)?$/]),\n sessionTracking: {\n ...defaultSessionTrackingConfig,\n ...sessionTracking,\n },\n user,\n view,\n trackResources,\n trackWebVitalsAttribution,\n consoleInstrumentation,\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"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { getWebInstrumentations, makeCoreConfig } from './config';
|
|
|
2
2
|
export { defaultEventDomain } from './consts';
|
|
3
3
|
export { initializeFaro } from './initialize';
|
|
4
4
|
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, } from './instrumentations';
|
|
5
|
-
export { browserMeta, createSession,
|
|
5
|
+
export { browserMeta, createSession, sdkMeta } from './metas';
|
|
6
6
|
export { ConsoleTransport, FetchTransport } from './transports';
|
|
7
7
|
export { faro, allLogLevels, BaseExtension, BaseInstrumentation, BaseTransport, Conventions, 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, 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, } from '@grafana/faro-core';
|
|
8
8
|
export { PersistentSessionsManager, VolatileSessionsManager, MAX_SESSION_PERSISTENCE_TIME, MAX_SESSION_PERSISTENCE_TIME_BUFFER, SESSION_EXPIRATION_TIME, SESSION_INACTIVITY_TIME, STORAGE_KEY, } from './instrumentations/session';
|
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,GAC3B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,aAAa,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,GAC3B,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,WAAW,EACX,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,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,GACnB,MAAM,oBAAoB,CAAC;AAiE5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,GACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,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} from './instrumentations';\nexport type { ConsoleInstrumentationOptions, 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 Conventions,\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 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} 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 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} from '@grafana/faro-core';\n\nexport {\n PersistentSessionsManager,\n VolatileSessionsManager,\n MAX_SESSION_PERSISTENCE_TIME,\n MAX_SESSION_PERSISTENCE_TIME_BUFFER,\n SESSION_EXPIRATION_TIME,\n SESSION_INACTIVITY_TIME,\n STORAGE_KEY,\n} from './instrumentations/session';\n\nexport { getIgnoreUrls } from './utils/url';\n"]}
|
|
@@ -1,23 +1,45 @@
|
|
|
1
|
-
import { allLogLevels, BaseInstrumentation, defaultLogArgsSerializer, LogLevel, VERSION } from '@grafana/faro-core';
|
|
1
|
+
import { allLogLevels, BaseInstrumentation, defaultErrorArgsSerializer, defaultLogArgsSerializer, LogLevel, VERSION, } from '@grafana/faro-core';
|
|
2
|
+
import { getDetailsFromConsoleErrorArgs } from '../errors/getErrorDetails';
|
|
2
3
|
export class ConsoleInstrumentation extends BaseInstrumentation {
|
|
3
4
|
constructor(options = {}) {
|
|
4
5
|
super();
|
|
5
6
|
this.options = options;
|
|
6
7
|
this.name = '@grafana/faro-web-sdk:instrumentation-console';
|
|
7
8
|
this.version = VERSION;
|
|
9
|
+
this.errorSerializer = defaultLogArgsSerializer;
|
|
8
10
|
}
|
|
9
11
|
initialize() {
|
|
10
|
-
|
|
12
|
+
var _a, _b, _c, _d;
|
|
11
13
|
this.options = Object.assign(Object.assign({}, this.options), this.config.consoleInstrumentation);
|
|
14
|
+
const serializeErrors = ((_a = this.options) === null || _a === void 0 ? void 0 : _a.serializeErrors) || !!((_b = this.options) === null || _b === void 0 ? void 0 : _b.errorSerializer);
|
|
15
|
+
this.errorSerializer = serializeErrors
|
|
16
|
+
? ((_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.errorSerializer) !== null && _d !== void 0 ? _d : defaultErrorArgsSerializer)
|
|
17
|
+
: defaultLogArgsSerializer;
|
|
12
18
|
allLogLevels
|
|
13
19
|
.filter((level) => { var _a, _b; return !((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.disabledLevels) !== null && _b !== void 0 ? _b : ConsoleInstrumentation.defaultDisabledLevels).includes(level); })
|
|
14
20
|
.forEach((level) => {
|
|
15
21
|
/* eslint-disable-next-line no-console */
|
|
16
22
|
console[level] = (...args) => {
|
|
17
|
-
var _a;
|
|
23
|
+
var _a, _b;
|
|
18
24
|
try {
|
|
19
25
|
if (level === LogLevel.ERROR && !((_a = this.options) === null || _a === void 0 ? void 0 : _a.consoleErrorAsLog)) {
|
|
20
|
-
|
|
26
|
+
const { value, type, stackFrames } = getDetailsFromConsoleErrorArgs(args, this.errorSerializer);
|
|
27
|
+
if (value && !type && !stackFrames) {
|
|
28
|
+
this.api.pushError(new Error(ConsoleInstrumentation.consoleErrorPrefix + value));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.api.pushError(new Error(ConsoleInstrumentation.consoleErrorPrefix + value), { type, stackFrames });
|
|
32
|
+
}
|
|
33
|
+
else if (level === LogLevel.ERROR && ((_b = this.options) === null || _b === void 0 ? void 0 : _b.consoleErrorAsLog)) {
|
|
34
|
+
const { value, type, stackFrames } = getDetailsFromConsoleErrorArgs(args, this.errorSerializer);
|
|
35
|
+
this.api.pushLog(value ? [ConsoleInstrumentation.consoleErrorPrefix + value] : args, {
|
|
36
|
+
level,
|
|
37
|
+
context: {
|
|
38
|
+
value: value !== null && value !== void 0 ? value : '',
|
|
39
|
+
type: type !== null && type !== void 0 ? type : '',
|
|
40
|
+
stackFrames: (stackFrames === null || stackFrames === void 0 ? void 0 : stackFrames.length) ? defaultErrorArgsSerializer(stackFrames) : '',
|
|
41
|
+
},
|
|
42
|
+
});
|
|
21
43
|
}
|
|
22
44
|
else {
|
|
23
45
|
this.api.pushLog(args, { level });
|
|
@@ -34,4 +56,5 @@ export class ConsoleInstrumentation extends BaseInstrumentation {
|
|
|
34
56
|
}
|
|
35
57
|
}
|
|
36
58
|
ConsoleInstrumentation.defaultDisabledLevels = [LogLevel.DEBUG, LogLevel.TRACE, LogLevel.LOG];
|
|
59
|
+
ConsoleInstrumentation.consoleErrorPrefix = 'console.error: ';
|
|
37
60
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/console/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/console/instrumentation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n allLogLevels,\n BaseInstrumentation,\n defaultErrorArgsSerializer,\n defaultLogArgsSerializer,\n LogArgsSerializer,\n LogLevel,\n VERSION,\n} from '@grafana/faro-core';\n\nimport { getDetailsFromConsoleErrorArgs } from '../errors/getErrorDetails';\n\nimport type { ConsoleInstrumentationOptions } from './types';\n\nexport class ConsoleInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-console';\n readonly version = VERSION;\n\n static defaultDisabledLevels: LogLevel[] = [LogLevel.DEBUG, LogLevel.TRACE, LogLevel.LOG];\n static consoleErrorPrefix = 'console.error: ';\n private errorSerializer: LogArgsSerializer = defaultLogArgsSerializer;\n\n constructor(private options: ConsoleInstrumentationOptions = {}) {\n super();\n }\n\n initialize() {\n this.options = { ...this.options, ...this.config.consoleInstrumentation };\n\n const serializeErrors = this.options?.serializeErrors || !!this.options?.errorSerializer;\n this.errorSerializer = serializeErrors\n ? (this.options?.errorSerializer ?? defaultErrorArgsSerializer)\n : defaultLogArgsSerializer;\n\n allLogLevels\n .filter(\n (level) => !(this.options?.disabledLevels ?? ConsoleInstrumentation.defaultDisabledLevels).includes(level)\n )\n .forEach((level) => {\n /* eslint-disable-next-line no-console */\n console[level] = (...args) => {\n try {\n if (level === LogLevel.ERROR && !this.options?.consoleErrorAsLog) {\n const { value, type, stackFrames } = getDetailsFromConsoleErrorArgs(args, this.errorSerializer);\n\n if (value && !type && !stackFrames) {\n this.api.pushError(new Error(ConsoleInstrumentation.consoleErrorPrefix + value));\n return;\n }\n\n this.api.pushError(new Error(ConsoleInstrumentation.consoleErrorPrefix + value), { type, stackFrames });\n } else if (level === LogLevel.ERROR && this.options?.consoleErrorAsLog) {\n const { value, type, stackFrames } = getDetailsFromConsoleErrorArgs(args, this.errorSerializer);\n\n this.api.pushLog(value ? [ConsoleInstrumentation.consoleErrorPrefix + value] : args, {\n level,\n context: {\n value: value ?? '',\n type: type ?? '',\n stackFrames: stackFrames?.length ? defaultErrorArgsSerializer(stackFrames) : '',\n },\n });\n } else {\n this.api.pushLog(args, { level });\n }\n } catch (err) {\n this.logError(err);\n } finally {\n this.unpatchedConsole[level](...args);\n }\n };\n });\n }\n}\n"]}
|