@grafana/faro-web-sdk 1.14.1 → 1.14.3
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 +4 -3
- package/dist/bundle/types/instrumentations/console/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/performance/instrumentation.d.ts +4 -3
- package/dist/bundle/types/instrumentations/performance/navigation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/performance/performanceUtils.d.ts +0 -1
- package/dist/bundle/types/instrumentations/performance/resource.d.ts +3 -2
- package/dist/bundle/types/instrumentations/performance/types.d.ts +4 -0
- package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/const.d.ts +7 -0
- package/dist/bundle/types/instrumentations/userActions/domMutationMonitor.d.ts +2 -0
- package/dist/bundle/types/instrumentations/userActions/httpRequestMonitor.d.ts +5 -0
- package/dist/bundle/types/instrumentations/userActions/index.d.ts +3 -0
- package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +6 -0
- package/dist/bundle/types/instrumentations/userActions/performanceEntriesMonitor.d.ts +2 -0
- package/dist/bundle/types/instrumentations/userActions/processUserActionEventHandler.d.ts +2 -0
- package/dist/bundle/types/instrumentations/userActions/types.d.ts +12 -0
- package/dist/bundle/types/instrumentations/userActions/util.d.ts +8 -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/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 +1 -1
- package/dist/bundle/types/utils/url.d.ts +12 -2
- package/dist/cjs/config/getWebInstrumentations.js +1 -0
- package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
- package/dist/cjs/config/makeCoreConfig.js +20 -7
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/index.js +11 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instrumentations/index.js +4 -1
- package/dist/cjs/instrumentations/index.js.map +1 -1
- package/dist/cjs/instrumentations/performance/instrumentation.js +5 -9
- package/dist/cjs/instrumentations/performance/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/performance/navigation.js +3 -2
- package/dist/cjs/instrumentations/performance/navigation.js.map +1 -1
- package/dist/cjs/instrumentations/performance/performanceUtils.js +1 -6
- package/dist/cjs/instrumentations/performance/performanceUtils.js.map +1 -1
- package/dist/cjs/instrumentations/performance/resource.js +8 -2
- package/dist/cjs/instrumentations/performance/resource.js.map +1 -1
- package/dist/cjs/instrumentations/performance/types.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/const.js +11 -0
- package/dist/cjs/instrumentations/userActions/const.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/domMutationMonitor.js +20 -0
- package/dist/cjs/instrumentations/userActions/domMutationMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/httpRequestMonitor.js +88 -0
- package/dist/cjs/instrumentations/userActions/httpRequestMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/index.js +11 -0
- package/dist/cjs/instrumentations/userActions/index.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/instrumentation.js +37 -0
- package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/performanceEntriesMonitor.js +18 -0
- package/dist/cjs/instrumentations/userActions/performanceEntriesMonitor.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +130 -0
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/types.js +3 -0
- package/dist/cjs/instrumentations/userActions/types.js.map +1 -0
- package/dist/cjs/instrumentations/userActions/util.js +17 -0
- package/dist/cjs/instrumentations/userActions/util.js.map +1 -0
- package/dist/cjs/utils/index.js +3 -3
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/url.js +15 -2
- package/dist/cjs/utils/url.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 +20 -8
- package/dist/esm/config/makeCoreConfig.js.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrumentations/index.js +1 -0
- package/dist/esm/instrumentations/index.js.map +1 -1
- package/dist/esm/instrumentations/performance/instrumentation.js +4 -8
- package/dist/esm/instrumentations/performance/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/performance/navigation.js +4 -3
- package/dist/esm/instrumentations/performance/navigation.js.map +1 -1
- package/dist/esm/instrumentations/performance/performanceUtils.js +0 -3
- package/dist/esm/instrumentations/performance/performanceUtils.js.map +1 -1
- package/dist/esm/instrumentations/performance/resource.js +9 -3
- package/dist/esm/instrumentations/performance/resource.js.map +1 -1
- package/dist/esm/instrumentations/performance/types.js.map +1 -1
- package/dist/esm/instrumentations/userActions/const.js +8 -0
- package/dist/esm/instrumentations/userActions/const.js.map +1 -0
- package/dist/esm/instrumentations/userActions/domMutationMonitor.js +16 -0
- package/dist/esm/instrumentations/userActions/domMutationMonitor.js.map +1 -0
- package/dist/esm/instrumentations/userActions/httpRequestMonitor.js +84 -0
- package/dist/esm/instrumentations/userActions/httpRequestMonitor.js.map +1 -0
- package/dist/esm/instrumentations/userActions/index.js +3 -0
- package/dist/esm/instrumentations/userActions/index.js.map +1 -0
- package/dist/esm/instrumentations/userActions/instrumentation.js +15 -0
- package/dist/esm/instrumentations/userActions/instrumentation.js.map +1 -0
- package/dist/esm/instrumentations/userActions/performanceEntriesMonitor.js +14 -0
- package/dist/esm/instrumentations/userActions/performanceEntriesMonitor.js.map +1 -0
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js +126 -0
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js.map +1 -0
- package/dist/esm/instrumentations/userActions/types.js +2 -0
- package/dist/esm/instrumentations/userActions/types.js.map +1 -0
- package/dist/esm/instrumentations/userActions/util.js +13 -0
- package/dist/esm/instrumentations/userActions/util.js.map +1 -0
- package/dist/esm/utils/index.js +1 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/url.js +12 -1
- package/dist/esm/utils/url.js.map +1 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/instrumentations/console/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/performance/instrumentation.d.ts +4 -3
- package/dist/types/instrumentations/performance/navigation.d.ts +1 -1
- package/dist/types/instrumentations/performance/performanceUtils.d.ts +0 -1
- package/dist/types/instrumentations/performance/resource.d.ts +3 -2
- package/dist/types/instrumentations/performance/types.d.ts +4 -0
- package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/const.d.ts +7 -0
- package/dist/types/instrumentations/userActions/domMutationMonitor.d.ts +2 -0
- package/dist/types/instrumentations/userActions/httpRequestMonitor.d.ts +5 -0
- package/dist/types/instrumentations/userActions/index.d.ts +3 -0
- package/dist/types/instrumentations/userActions/instrumentation.d.ts +6 -0
- package/dist/types/instrumentations/userActions/performanceEntriesMonitor.d.ts +2 -0
- package/dist/types/instrumentations/userActions/processUserActionEventHandler.d.ts +2 -0
- package/dist/types/instrumentations/userActions/types.d.ts +12 -0
- package/dist/types/instrumentations/userActions/util.d.ts +8 -0
- package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- 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 +1 -1
- package/dist/types/utils/url.d.ts +12 -2
- package/package.json +3 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { UserActionInstrumentation } from './instrumentation';
|
|
2
|
+
export type { DomMutationMessage, HttpRequestEndMessage, HttpRequestStartMessage } from './types';
|
|
3
|
+
export { MESSAGE_TYPE_DOM_MUTATION, MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START, userActionDataAttribute, } from './const';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MESSAGE_TYPE_DOM_MUTATION, MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START } from './const';
|
|
2
|
+
export type DomMutationMessage = {
|
|
3
|
+
type: typeof MESSAGE_TYPE_DOM_MUTATION;
|
|
4
|
+
};
|
|
5
|
+
export type HttpRequestStartMessage = {
|
|
6
|
+
type: typeof MESSAGE_TYPE_HTTP_REQUEST_START;
|
|
7
|
+
pending: number;
|
|
8
|
+
};
|
|
9
|
+
export type HttpRequestEndMessage = {
|
|
10
|
+
type: typeof MESSAGE_TYPE_HTTP_REQUEST_END;
|
|
11
|
+
pending: number;
|
|
12
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses the action attribute name by removing the 'data-' prefix and converting
|
|
3
|
+
* the remaining string to camelCase.
|
|
4
|
+
*
|
|
5
|
+
* This is needed because the browser will remove the 'data-' prefix and the dashes from
|
|
6
|
+
* data attributes and make then camelCase.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertDataAttributeName(userActionDataAttribute: string): string | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class ViewInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-view";
|
|
4
|
-
readonly version = "1.14.
|
|
4
|
+
readonly version = "1.14.3";
|
|
5
5
|
private notifiedView;
|
|
6
6
|
private sendViewChangedEvent;
|
|
7
7
|
initialize(): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class WebVitalsInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-web-vitals";
|
|
4
|
-
readonly version = "1.14.
|
|
4
|
+
readonly version = "1.14.3";
|
|
5
5
|
initialize(): void;
|
|
6
6
|
private intializeWebVitalsInstrumentation;
|
|
7
7
|
}
|
|
@@ -4,7 +4,7 @@ import type { ConsoleTransportOptions } from './types';
|
|
|
4
4
|
export declare class ConsoleTransport extends BaseTransport {
|
|
5
5
|
private options;
|
|
6
6
|
readonly name = "@grafana/faro-web-sdk:transport-console";
|
|
7
|
-
readonly version = "1.14.
|
|
7
|
+
readonly version = "1.14.3";
|
|
8
8
|
constructor(options?: ConsoleTransportOptions);
|
|
9
9
|
send(item: TransportItem): void;
|
|
10
10
|
}
|
|
@@ -4,7 +4,7 @@ import type { FetchTransportOptions } from './types';
|
|
|
4
4
|
export declare class FetchTransport extends BaseTransport {
|
|
5
5
|
private options;
|
|
6
6
|
readonly name = "@grafana/faro-web-sdk:transport-fetch";
|
|
7
|
-
readonly version = "1.14.
|
|
7
|
+
readonly version = "1.14.3";
|
|
8
8
|
promiseBuffer: PromiseBuffer<Response | void>;
|
|
9
9
|
private readonly rateLimitBackoffMs;
|
|
10
10
|
private readonly getNow;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { isLocalStorageAvailable, isSessionStorageAvailable,
|
|
1
|
+
export { getItem, isLocalStorageAvailable, isSessionStorageAvailable, isWebStorageAvailable, removeItem, setItem, webStorageType, } from './webStorage';
|
|
2
2
|
export { throttle } from './throttle';
|
|
3
3
|
export { getIgnoreUrls } from './url';
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
import type { Patterns } from '@grafana/faro-core';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* Retrieves a list of URLs to be ignored by aggregating the ignore URLs from all transports.
|
|
4
|
+
*
|
|
5
|
+
* @returns {string[]} An array of URLs to be ignored.
|
|
3
6
|
*/
|
|
4
|
-
export declare function getIgnoreUrls():
|
|
7
|
+
export declare function getIgnoreUrls(): Patterns;
|
|
8
|
+
/**
|
|
9
|
+
* Checks if the given URL should be ignored based on a list of ignored URLs.
|
|
10
|
+
*
|
|
11
|
+
* @param url - The URL to check.
|
|
12
|
+
* @returns `true` if the URL is in the list of ignored URLs, `false` otherwise.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isUrlIgnored(url?: string): boolean;
|
|
@@ -5,6 +5,7 @@ var instrumentations_1 = require("../instrumentations");
|
|
|
5
5
|
function getWebInstrumentations(options) {
|
|
6
6
|
if (options === void 0) { options = {}; }
|
|
7
7
|
var instrumentations = [
|
|
8
|
+
new instrumentations_1.UserActionInstrumentation(),
|
|
8
9
|
new instrumentations_1.ErrorsInstrumentation(),
|
|
9
10
|
new instrumentations_1.WebVitalsInstrumentation(),
|
|
10
11
|
new instrumentations_1.SessionInstrumentation(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":";;;AAEA,wDAQ6B;AAI7B,SAAgB,sBAAsB,CAAC,OAA2C;IAA3C,wBAAA,EAAA,YAA2C;IAChF,IAAM,gBAAgB,GAAsB;QAC1C,IAAI,4CAAyB,EAAE;QAC/B,IAAI,wCAAqB,EAAE;QAC3B,IAAI,2CAAwB,EAAE;QAC9B,IAAI,yCAAsB,EAAE;QAC5B,IAAI,sCAAmB,EAAE;KAC1B,CAAC;IAEF,IAAI,OAAO,CAAC,gCAAgC,KAAK,KAAK,EAAE;QACtD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,6CAA0B,EAAE,CAAC,CAAC;KAC5D;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE;QACpC,gBAAgB,CAAC,IAAI,CACnB,IAAI,yCAAsB,CAAC;YACzB,cAAc,EAAE,OAAO,CAAC,4BAA4B;SACrD,CAAC,CACH,CAAC;KACH;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAvBD,wDAuBC","sourcesContent":["import type { Instrumentation } from '@grafana/faro-core';\n\nimport {\n ConsoleInstrumentation,\n ErrorsInstrumentation,\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 ];\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.captureConsole !== false) {\n instrumentations.push(\n new ConsoleInstrumentation({\n disabledLevels: options.captureConsoleDisabledLevels,\n })\n );\n }\n\n return instrumentations;\n}\n"]}
|
|
@@ -25,6 +25,7 @@ var faro_core_1 = require("@grafana/faro-core");
|
|
|
25
25
|
var consts_1 = require("../consts");
|
|
26
26
|
var instrumentations_1 = require("../instrumentations");
|
|
27
27
|
var session_1 = require("../instrumentations/session");
|
|
28
|
+
var const_1 = require("../instrumentations/userActions/const");
|
|
28
29
|
var metas_1 = require("../metas");
|
|
29
30
|
var k6_1 = require("../metas/k6");
|
|
30
31
|
var page_1 = require("../metas/page");
|
|
@@ -49,17 +50,17 @@ function makeCoreConfig(browserConfig) {
|
|
|
49
50
|
else {
|
|
50
51
|
internalLogger.error('either "url" or "transports" must be defined');
|
|
51
52
|
}
|
|
52
|
-
var app = browserConfig.app, batching = browserConfig.batching, beforeSend = browserConfig.beforeSend, consoleInstrumentation = browserConfig.consoleInstrumentation, ignoreErrors = browserConfig.ignoreErrors, sessionTracking = browserConfig.sessionTracking, trackResources = browserConfig.trackResources, trackWebVitalsAttribution = browserConfig.trackWebVitalsAttribution, user = browserConfig.user, view = browserConfig.view,
|
|
53
|
+
var app = browserConfig.app, batching = browserConfig.batching, beforeSend = browserConfig.beforeSend, consoleInstrumentation = browserConfig.consoleInstrumentation, ignoreErrors = browserConfig.ignoreErrors, sessionTracking = browserConfig.sessionTracking, trackResources = browserConfig.trackResources, trackWebVitalsAttribution = browserConfig.trackWebVitalsAttribution, user = browserConfig.user, view = browserConfig.view, trackGeolocation = browserConfig.trackGeolocation,
|
|
53
54
|
// properties with default values
|
|
54
55
|
_b = browserConfig.dedupe,
|
|
55
56
|
// properties with default values
|
|
56
|
-
dedupe = _b === void 0 ? true : _b, _c = browserConfig.eventDomain, eventDomain = _c === void 0 ? consts_1.defaultEventDomain : _c, _d = browserConfig.globalObjectKey, globalObjectKey = _d === void 0 ? faro_core_1.defaultGlobalObjectKey : _d, _e = browserConfig.instrumentations, instrumentations = _e === void 0 ? (0, getWebInstrumentations_1.getWebInstrumentations)() : _e, _f = browserConfig.internalLoggerLevel, internalLoggerLevel = _f === void 0 ? faro_core_1.defaultInternalLoggerLevel : _f, _g = browserConfig.isolate, isolate = _g === void 0 ? false : _g, _h = browserConfig.logArgsSerializer, logArgsSerializer = _h === void 0 ? faro_core_1.defaultLogArgsSerializer : _h, _j = browserConfig.metas, metas = _j === void 0 ? createDefaultMetas(browserConfig) : _j, _k = browserConfig.paused, paused = _k === void 0 ? false : _k, _l = browserConfig.preventGlobalExposure, preventGlobalExposure = _l === void 0 ? false : _l, _m = browserConfig.unpatchedConsole, unpatchedConsole = _m === void 0 ? faro_core_1.defaultUnpatchedConsole : _m, webVitalsInstrumentation = browserConfig.webVitalsInstrumentation;
|
|
57
|
+
dedupe = _b === void 0 ? true : _b, _c = browserConfig.eventDomain, eventDomain = _c === void 0 ? consts_1.defaultEventDomain : _c, _d = browserConfig.globalObjectKey, globalObjectKey = _d === void 0 ? faro_core_1.defaultGlobalObjectKey : _d, _e = browserConfig.instrumentations, instrumentations = _e === void 0 ? (0, getWebInstrumentations_1.getWebInstrumentations)() : _e, _f = browserConfig.internalLoggerLevel, internalLoggerLevel = _f === void 0 ? faro_core_1.defaultInternalLoggerLevel : _f, _g = browserConfig.isolate, isolate = _g === void 0 ? false : _g, _h = browserConfig.logArgsSerializer, logArgsSerializer = _h === void 0 ? faro_core_1.defaultLogArgsSerializer : _h, _j = browserConfig.metas, metas = _j === void 0 ? createDefaultMetas(browserConfig) : _j, _k = browserConfig.paused, paused = _k === void 0 ? false : _k, _l = browserConfig.preventGlobalExposure, preventGlobalExposure = _l === void 0 ? false : _l, _m = browserConfig.unpatchedConsole, unpatchedConsole = _m === void 0 ? faro_core_1.defaultUnpatchedConsole : _m, webVitalsInstrumentation = browserConfig.webVitalsInstrumentation, _o = browserConfig.trackUserActionsPreview, trackUserActionsPreview = _o === void 0 ? false : _o, _p = browserConfig.trackUserActionsDataAttributeName, trackUserActionsDataAttributeName = _p === void 0 ? const_1.userActionDataAttribute : _p, trackUserActionsExcludeItem = browserConfig.trackUserActionsExcludeItem;
|
|
57
58
|
return {
|
|
58
59
|
app: app,
|
|
59
60
|
batching: __assign(__assign({}, faro_core_1.defaultBatchingConfig), batching),
|
|
60
61
|
dedupe: dedupe,
|
|
61
62
|
globalObjectKey: globalObjectKey,
|
|
62
|
-
instrumentations: instrumentations,
|
|
63
|
+
instrumentations: getFilteredInstrumentations(instrumentations, browserConfig),
|
|
63
64
|
internalLoggerLevel: internalLoggerLevel,
|
|
64
65
|
isolate: isolate,
|
|
65
66
|
logArgsSerializer: logArgsSerializer,
|
|
@@ -74,16 +75,28 @@ function makeCoreConfig(browserConfig) {
|
|
|
74
75
|
ignoreErrors: ignoreErrors,
|
|
75
76
|
// ignore cloud collector urls by default. These are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
76
77
|
ignoreUrls: ((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []).concat([/\/collect(?:\/[\w]*)?$/]),
|
|
77
|
-
sessionTracking: __assign(__assign(__assign({}, session_1.defaultSessionTrackingConfig), sessionTracking), crateSessionMeta({
|
|
78
|
+
sessionTracking: __assign(__assign(__assign({}, session_1.defaultSessionTrackingConfig), sessionTracking), crateSessionMeta({ trackGeolocation: trackGeolocation, sessionTracking: sessionTracking })),
|
|
78
79
|
user: user,
|
|
79
80
|
view: view,
|
|
80
81
|
trackResources: trackResources,
|
|
81
82
|
trackWebVitalsAttribution: trackWebVitalsAttribution,
|
|
82
83
|
consoleInstrumentation: consoleInstrumentation,
|
|
83
84
|
webVitalsInstrumentation: webVitalsInstrumentation,
|
|
85
|
+
trackUserActionsPreview: trackUserActionsPreview,
|
|
86
|
+
trackUserActionsDataAttributeName: trackUserActionsDataAttributeName,
|
|
87
|
+
trackUserActionsExcludeItem: trackUserActionsExcludeItem,
|
|
84
88
|
};
|
|
85
89
|
}
|
|
86
90
|
exports.makeCoreConfig = makeCoreConfig;
|
|
91
|
+
function getFilteredInstrumentations(instrumentations, _a) {
|
|
92
|
+
var trackUserActionsPreview = _a.trackUserActionsPreview;
|
|
93
|
+
return instrumentations.filter(function (instr) {
|
|
94
|
+
if (instr.name === '@grafana/faro-web-sdk:instrumentation-user-action' && !trackUserActionsPreview) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
87
100
|
function createDefaultMetas(browserConfig) {
|
|
88
101
|
var _a, _b;
|
|
89
102
|
var _c = (_a = browserConfig === null || browserConfig === void 0 ? void 0 : browserConfig.pageTracking) !== null && _a !== void 0 ? _a : {}, page = _c.page, generatePageId = _c.generatePageId;
|
|
@@ -99,10 +112,10 @@ function createDefaultMetas(browserConfig) {
|
|
|
99
112
|
}
|
|
100
113
|
function crateSessionMeta(_a) {
|
|
101
114
|
var _b;
|
|
102
|
-
var
|
|
115
|
+
var trackGeolocation = _a.trackGeolocation, sessionTracking = _a.sessionTracking;
|
|
103
116
|
var overrides = {};
|
|
104
|
-
if ((
|
|
105
|
-
overrides.geoLocationTrackingEnabled =
|
|
117
|
+
if ((0, faro_core_1.isBoolean)(trackGeolocation)) {
|
|
118
|
+
overrides.geoLocationTrackingEnabled = trackGeolocation;
|
|
106
119
|
}
|
|
107
120
|
if ((0, faro_core_1.isEmpty)(overrides)) {
|
|
108
121
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
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 app,\n batching,\n beforeSend,\n consoleInstrumentation,\n ignoreErrors,\n sessionTracking,\n trackResources,\n trackWebVitalsAttribution,\n user,\n view,\n trackGeolocation,\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 webVitalsInstrumentation,\n trackUserActionsPreview = false,\n trackUserActionsDataAttributeName = userActionDataAttribute,\n trackUserActionsExcludeItem,\n }: BrowserConfig = browserConfig;\n\n return {\n app,\n batching: {\n ...defaultBatchingConfig,\n ...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 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 ...crateSessionMeta({ trackGeolocation, sessionTracking }),\n },\n user,\n view,\n trackResources,\n trackWebVitalsAttribution,\n consoleInstrumentation,\n webVitalsInstrumentation,\n trackUserActionsPreview,\n trackUserActionsDataAttributeName,\n trackUserActionsExcludeItem,\n };\n}\n\nfunction getFilteredInstrumentations(\n instrumentations: Instrumentation[],\n { trackUserActionsPreview }: BrowserConfig\n): Instrumentation[] {\n return instrumentations.filter((instr) => {\n if (instr.name === '@grafana/faro-web-sdk:instrumentation-user-action' && !trackUserActionsPreview) {\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/cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.getIgnoreUrls = exports.STORAGE_KEY = exports.SESSION_INACTIVITY_TIME = exports.SESSION_EXPIRATION_TIME = exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER = exports.MAX_SESSION_PERSISTENCE_TIME = exports.VolatileSessionsManager = exports.PersistentSessionsManager = exports.EVENT_VIEW_CHANGED = exports.EVENT_SESSION_START = exports.EVENT_SESSION_RESUME = exports.EVENT_SESSION_EXTEND = exports.EVENT_ROUTE_CHANGE = exports.EVENT_NAVIGATION = exports.EVENT_CLICK = exports.VERSION = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.setInternalFaroOnGlobalObject = exports.noop = exports.LogLevel = exports.InternalLoggerLevel = exports.isEmpty = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = exports.isObject = exports.isNumber = exports.isNull = exports.isMapDefined = exports.isMap = exports.isInternalFaroOnGlobalObject = exports.isInt = exports.isInstanceOf = void 0;
|
|
3
|
+
exports.isEventDefined = exports.isEvent = exports.isErrorEvent = exports.isErrorDefined = exports.isError = exports.isElementDefined = exports.isElement = exports.isDomException = exports.isDomError = exports.isBoolean = exports.isArray = exports.internalGlobalObjectKey = exports.globalObject = exports.getTransportBody = exports.getInternalFaroFromGlobalObject = exports.getCurrentTimestamp = exports.genShortID = exports.defaultLogLevel = exports.defaultInternalLoggerLevel = exports.defaultGlobalObjectKey = exports.defaultExceptionType = exports.deepEqual = exports.createPromiseBuffer = exports.createInternalLogger = exports.Conventions = exports.BaseTransport = exports.BaseInstrumentation = exports.BaseExtension = exports.allLogLevels = exports.faro = exports.FetchTransport = exports.ConsoleTransport = exports.sdkMeta = exports.createSession = exports.browserMeta = exports.UserActionInstrumentation = exports.PerformanceInstrumentation = exports.SessionInstrumentation = exports.WebVitalsInstrumentation = exports.ViewInstrumentation = exports.parseStacktrace = exports.getStackFramesFromError = exports.getDataFromSafariExtensions = exports.ErrorsInstrumentation = exports.ConsoleInstrumentation = exports.buildStackFrame = exports.initializeFaro = exports.defaultEventDomain = exports.makeCoreConfig = exports.getWebInstrumentations = void 0;
|
|
4
|
+
exports.userActionDataAttribute = exports.getIgnoreUrls = exports.STORAGE_KEY = exports.SESSION_INACTIVITY_TIME = exports.SESSION_EXPIRATION_TIME = exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER = exports.MAX_SESSION_PERSISTENCE_TIME = exports.VolatileSessionsManager = exports.PersistentSessionsManager = exports.USER_ACTION_START_MESSAGE_TYPE = exports.USER_ACTION_END_MESSAGE_TYPE = exports.USER_ACTION_CANCEL_MESSAGE_TYPE = exports.merge = exports.Observable = exports.apiMessageBus = exports.EVENT_VIEW_CHANGED = exports.EVENT_SESSION_START = exports.EVENT_SESSION_RESUME = exports.EVENT_SESSION_EXTEND = exports.EVENT_ROUTE_CHANGE = exports.EVENT_NAVIGATION = exports.EVENT_CLICK = exports.VERSION = exports.transportItemTypeToBodyKey = exports.TransportItemType = exports.setInternalFaroOnGlobalObject = exports.noop = exports.LogLevel = exports.InternalLoggerLevel = exports.isEmpty = exports.isUndefined = exports.isTypeof = exports.isToString = exports.isThenable = exports.isSyntheticEvent = exports.isSymbol = exports.isString = exports.isRegExp = exports.isPrimitive = exports.isObject = exports.isNumber = exports.isNull = exports.isMapDefined = exports.isMap = exports.isInternalFaroOnGlobalObject = exports.isInt = exports.isInstanceOf = exports.isFunction = void 0;
|
|
5
5
|
var config_1 = require("./config");
|
|
6
6
|
Object.defineProperty(exports, "getWebInstrumentations", { enumerable: true, get: function () { return config_1.getWebInstrumentations; } });
|
|
7
7
|
Object.defineProperty(exports, "makeCoreConfig", { enumerable: true, get: function () { return config_1.makeCoreConfig; } });
|
|
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "ViewInstrumentation", { enumerable: true, get: f
|
|
|
20
20
|
Object.defineProperty(exports, "WebVitalsInstrumentation", { enumerable: true, get: function () { return instrumentations_1.WebVitalsInstrumentation; } });
|
|
21
21
|
Object.defineProperty(exports, "SessionInstrumentation", { enumerable: true, get: function () { return instrumentations_1.SessionInstrumentation; } });
|
|
22
22
|
Object.defineProperty(exports, "PerformanceInstrumentation", { enumerable: true, get: function () { return instrumentations_1.PerformanceInstrumentation; } });
|
|
23
|
+
Object.defineProperty(exports, "UserActionInstrumentation", { enumerable: true, get: function () { return instrumentations_1.UserActionInstrumentation; } });
|
|
23
24
|
var metas_1 = require("./metas");
|
|
24
25
|
Object.defineProperty(exports, "browserMeta", { enumerable: true, get: function () { return metas_1.browserMeta; } });
|
|
25
26
|
Object.defineProperty(exports, "createSession", { enumerable: true, get: function () { return metas_1.createSession; } });
|
|
@@ -91,6 +92,12 @@ Object.defineProperty(exports, "EVENT_SESSION_EXTEND", { enumerable: true, get:
|
|
|
91
92
|
Object.defineProperty(exports, "EVENT_SESSION_RESUME", { enumerable: true, get: function () { return faro_core_1.EVENT_SESSION_RESUME; } });
|
|
92
93
|
Object.defineProperty(exports, "EVENT_SESSION_START", { enumerable: true, get: function () { return faro_core_1.EVENT_SESSION_START; } });
|
|
93
94
|
Object.defineProperty(exports, "EVENT_VIEW_CHANGED", { enumerable: true, get: function () { return faro_core_1.EVENT_VIEW_CHANGED; } });
|
|
95
|
+
Object.defineProperty(exports, "apiMessageBus", { enumerable: true, get: function () { return faro_core_1.apiMessageBus; } });
|
|
96
|
+
Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return faro_core_1.Observable; } });
|
|
97
|
+
Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return faro_core_1.merge; } });
|
|
98
|
+
Object.defineProperty(exports, "USER_ACTION_CANCEL_MESSAGE_TYPE", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_CANCEL_MESSAGE_TYPE; } });
|
|
99
|
+
Object.defineProperty(exports, "USER_ACTION_END_MESSAGE_TYPE", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_END_MESSAGE_TYPE; } });
|
|
100
|
+
Object.defineProperty(exports, "USER_ACTION_START_MESSAGE_TYPE", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_START_MESSAGE_TYPE; } });
|
|
94
101
|
var session_1 = require("./instrumentations/session");
|
|
95
102
|
Object.defineProperty(exports, "PersistentSessionsManager", { enumerable: true, get: function () { return session_1.PersistentSessionsManager; } });
|
|
96
103
|
Object.defineProperty(exports, "VolatileSessionsManager", { enumerable: true, get: function () { return session_1.VolatileSessionsManager; } });
|
|
@@ -101,4 +108,6 @@ Object.defineProperty(exports, "SESSION_INACTIVITY_TIME", { enumerable: true, ge
|
|
|
101
108
|
Object.defineProperty(exports, "STORAGE_KEY", { enumerable: true, get: function () { return session_1.STORAGE_KEY; } });
|
|
102
109
|
var url_1 = require("./utils/url");
|
|
103
110
|
Object.defineProperty(exports, "getIgnoreUrls", { enumerable: true, get: function () { return url_1.getIgnoreUrls; } });
|
|
111
|
+
var const_1 = require("./instrumentations/userActions/const");
|
|
112
|
+
Object.defineProperty(exports, "userActionDataAttribute", { enumerable: true, get: function () { return const_1.userActionDataAttribute; } });
|
|
104
113
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,mCAAkE;AAAzD,gHAAA,sBAAsB,OAAA;AAAE,wGAAA,cAAc,OAAA;AAG/C,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAE3B,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAEvB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","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 UserActionInstrumentation,\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 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 apiMessageBus,\n Observable,\n merge,\n USER_ACTION_CANCEL_MESSAGE_TYPE,\n USER_ACTION_END_MESSAGE_TYPE,\n USER_ACTION_START_MESSAGE_TYPE,\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 ApiMessageBusMessages,\n UserActionStartMessage,\n UserActionEndMessage,\n UserActionCancelMessage,\n UserAction,\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\nexport { userActionDataAttribute } from './instrumentations/userActions/const';\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PerformanceInstrumentation = exports.STORAGE_KEY = exports.SESSION_INACTIVITY_TIME = exports.SESSION_EXPIRATION_TIME = exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER = exports.MAX_SESSION_PERSISTENCE_TIME = exports.VolatileSessionsManager = exports.PersistentSessionsManager = exports.WebVitalsInstrumentation = exports.ViewInstrumentation = exports.parseStacktrace = exports.getStackFramesFromError = exports.getDataFromSafariExtensions = exports.ErrorsInstrumentation = exports.buildStackFrame = exports.ConsoleInstrumentation = exports.SessionInstrumentation = void 0;
|
|
3
|
+
exports.userActionDataAttribute = exports.UserActionInstrumentation = exports.PerformanceInstrumentation = exports.STORAGE_KEY = exports.SESSION_INACTIVITY_TIME = exports.SESSION_EXPIRATION_TIME = exports.MAX_SESSION_PERSISTENCE_TIME_BUFFER = exports.MAX_SESSION_PERSISTENCE_TIME = exports.VolatileSessionsManager = exports.PersistentSessionsManager = exports.WebVitalsInstrumentation = exports.ViewInstrumentation = exports.parseStacktrace = exports.getStackFramesFromError = exports.getDataFromSafariExtensions = exports.ErrorsInstrumentation = exports.buildStackFrame = exports.ConsoleInstrumentation = exports.SessionInstrumentation = void 0;
|
|
4
4
|
var session_1 = require("./session");
|
|
5
5
|
Object.defineProperty(exports, "SessionInstrumentation", { enumerable: true, get: function () { return session_1.SessionInstrumentation; } });
|
|
6
6
|
var console_1 = require("./console");
|
|
@@ -25,4 +25,7 @@ Object.defineProperty(exports, "SESSION_INACTIVITY_TIME", { enumerable: true, ge
|
|
|
25
25
|
Object.defineProperty(exports, "STORAGE_KEY", { enumerable: true, get: function () { return session_2.STORAGE_KEY; } });
|
|
26
26
|
var performance_1 = require("./performance");
|
|
27
27
|
Object.defineProperty(exports, "PerformanceInstrumentation", { enumerable: true, get: function () { return performance_1.PerformanceInstrumentation; } });
|
|
28
|
+
var userActions_1 = require("./userActions");
|
|
29
|
+
Object.defineProperty(exports, "UserActionInstrumentation", { enumerable: true, get: function () { return userActions_1.UserActionInstrumentation; } });
|
|
30
|
+
Object.defineProperty(exports, "userActionDataAttribute", { enumerable: true, get: function () { return userActions_1.userActionDataAttribute; } });
|
|
28
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentations/index.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAA1C,iHAAA,sBAAsB,OAAA;AAE/B,qCAAmD;AAA1C,iHAAA,sBAAsB,OAAA;AAG/B,mCAMkB;AALhB,yGAAA,eAAe,OAAA;AACf,+GAAA,qBAAqB,OAAA;AACrB,qHAAA,2BAA2B,OAAA;AAC3B,iHAAA,uBAAuB,OAAA;AACvB,yGAAA,eAAe,OAAA;AAIjB,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA;AAE5B,yCAAuD;AAA9C,qHAAA,wBAAwB,OAAA;AAEjC,qCAQmB;AAPjB,oHAAA,yBAAyB,OAAA;AACzB,kHAAA,uBAAuB,OAAA;AACvB,uHAAA,4BAA4B,OAAA;AAC5B,8HAAA,mCAAmC,OAAA;AACnC,kHAAA,uBAAuB,OAAA;AACvB,kHAAA,uBAAuB,OAAA;AACvB,sGAAA,WAAW,OAAA;AAGb,6CAA2D;AAAlD,yHAAA,0BAA0B,OAAA","sourcesContent":["export { SessionInstrumentation } from './session';\n\nexport { ConsoleInstrumentation } from './console';\nexport type { ConsoleInstrumentationOptions } from './console';\n\nexport {\n buildStackFrame,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n} from './errors';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './errors';\n\nexport { ViewInstrumentation } from './view';\n\nexport { WebVitalsInstrumentation } from './webVitals';\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 './session';\n\nexport { PerformanceInstrumentation } from './performance';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/instrumentations/index.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AAA1C,iHAAA,sBAAsB,OAAA;AAE/B,qCAAmD;AAA1C,iHAAA,sBAAsB,OAAA;AAG/B,mCAMkB;AALhB,yGAAA,eAAe,OAAA;AACf,+GAAA,qBAAqB,OAAA;AACrB,qHAAA,2BAA2B,OAAA;AAC3B,iHAAA,uBAAuB,OAAA;AACvB,yGAAA,eAAe,OAAA;AAIjB,+BAA6C;AAApC,2GAAA,mBAAmB,OAAA;AAE5B,yCAAuD;AAA9C,qHAAA,wBAAwB,OAAA;AAEjC,qCAQmB;AAPjB,oHAAA,yBAAyB,OAAA;AACzB,kHAAA,uBAAuB,OAAA;AACvB,uHAAA,4BAA4B,OAAA;AAC5B,8HAAA,mCAAmC,OAAA;AACnC,kHAAA,uBAAuB,OAAA;AACvB,kHAAA,uBAAuB,OAAA;AACvB,sGAAA,WAAW,OAAA;AAGb,6CAA2D;AAAlD,yHAAA,0BAA0B,OAAA;AAEnC,6CAAmF;AAA1E,wHAAA,yBAAyB,OAAA;AAAE,sHAAA,uBAAuB,OAAA","sourcesContent":["export { SessionInstrumentation } from './session';\n\nexport { ConsoleInstrumentation } from './console';\nexport type { ConsoleInstrumentationOptions } from './console';\n\nexport {\n buildStackFrame,\n ErrorsInstrumentation,\n getDataFromSafariExtensions,\n getStackFramesFromError,\n parseStacktrace,\n} from './errors';\nexport type { ErrorEvent, ExtendedPromiseRejectionEvent } from './errors';\n\nexport { ViewInstrumentation } from './view';\n\nexport { WebVitalsInstrumentation } from './webVitals';\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 './session';\n\nexport { PerformanceInstrumentation } from './performance';\n\nexport { UserActionInstrumentation, userActionDataAttribute } from './userActions';\n"]}
|
|
@@ -51,11 +51,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
-
exports.PerformanceInstrumentation = void 0;
|
|
54
|
+
exports.PerformanceInstrumentation = exports.performanceEntriesSubscription = void 0;
|
|
55
55
|
var faro_core_1 = require("@grafana/faro-core");
|
|
56
56
|
var navigation_1 = require("./navigation");
|
|
57
57
|
var performanceUtils_1 = require("./performanceUtils");
|
|
58
58
|
var resource_1 = require("./resource");
|
|
59
|
+
exports.performanceEntriesSubscription = new faro_core_1.Observable();
|
|
59
60
|
var PerformanceInstrumentation = /** @class */ (function (_super) {
|
|
60
61
|
__extends(PerformanceInstrumentation, _super);
|
|
61
62
|
function PerformanceInstrumentation() {
|
|
@@ -71,27 +72,22 @@ var PerformanceInstrumentation = /** @class */ (function (_super) {
|
|
|
71
72
|
return;
|
|
72
73
|
}
|
|
73
74
|
(0, performanceUtils_1.onDocumentReady)(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
74
|
-
var pushEvent,
|
|
75
|
+
var pushEvent, faroNavigationId;
|
|
75
76
|
return __generator(this, function (_a) {
|
|
76
77
|
switch (_a.label) {
|
|
77
78
|
case 0:
|
|
78
79
|
pushEvent = this.api.pushEvent;
|
|
79
|
-
|
|
80
|
-
return [4 /*yield*/, (0, navigation_1.getNavigationTimings)(pushEvent, ignoredUrls)];
|
|
80
|
+
return [4 /*yield*/, (0, navigation_1.getNavigationTimings)(pushEvent)];
|
|
81
81
|
case 1:
|
|
82
82
|
faroNavigationId = (_a.sent()).faroNavigationId;
|
|
83
83
|
if (faroNavigationId != null) {
|
|
84
|
-
(0, resource_1.observeResourceTimings)(faroNavigationId, pushEvent,
|
|
84
|
+
(0, resource_1.observeResourceTimings)(faroNavigationId, pushEvent, exports.performanceEntriesSubscription);
|
|
85
85
|
}
|
|
86
86
|
return [2 /*return*/];
|
|
87
87
|
}
|
|
88
88
|
});
|
|
89
89
|
}); });
|
|
90
90
|
};
|
|
91
|
-
PerformanceInstrumentation.prototype.getIgnoreUrls = function () {
|
|
92
|
-
var _a;
|
|
93
|
-
return (_a = this.transports.transports) === null || _a === void 0 ? void 0 : _a.flatMap(function (transport) { return transport.getIgnoreUrls(); });
|
|
94
|
-
};
|
|
95
91
|
return PerformanceInstrumentation;
|
|
96
92
|
}(faro_core_1.BaseInstrumentation));
|
|
97
93
|
exports.PerformanceInstrumentation = PerformanceInstrumentation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA8E;AAE9E,2CAAoD;AACpD,uDAAmF;AACnF,uCAAoD;AAGvC,QAAA,8BAA8B,GAAG,IAAI,sBAAU,EAAwB,CAAC;AAErF;IAAgD,8CAAmB;IAAnE;QAAA,qEAoBC;QAnBU,UAAI,GAAG,mDAAmD,CAAC;QAC3D,aAAO,GAAG,mBAAO,CAAC;;IAkB7B,CAAC;IAhBC,+CAAU,GAAV;QAAA,iBAeC;QAdC,IAAI,CAAC,IAAA,+CAA4B,GAAE,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,0EAA0E,CAAC,CAAC;YAC1F,OAAO;SACR;QAED,IAAA,kCAAe,EAAC;;;;;wBACR,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;wBAER,qBAAM,IAAA,iCAAoB,EAAC,SAAS,CAAC,EAAA;;wBAA1D,gBAAgB,GAAK,CAAA,SAAqC,CAAA,iBAA1C;wBAExB,IAAI,gBAAgB,IAAI,IAAI,EAAE;4BAC5B,IAAA,iCAAsB,EAAC,gBAAgB,EAAE,SAAS,EAAE,sCAA8B,CAAC,CAAC;yBACrF;;;;aACF,CAAC,CAAC;IACL,CAAC;IACH,iCAAC;AAAD,CAAC,AApBD,CAAgD,+BAAmB,GAoBlE;AApBY,gEAA0B","sourcesContent":["import { BaseInstrumentation, Observable, VERSION } from '@grafana/faro-core';\n\nimport { getNavigationTimings } from './navigation';\nimport { onDocumentReady, performanceObserverSupported } from './performanceUtils';\nimport { observeResourceTimings } from './resource';\nimport type { ResourceEntryMessage } from './types';\n\nexport const performanceEntriesSubscription = new Observable<ResourceEntryMessage>();\n\nexport class PerformanceInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-performance';\n readonly version = VERSION;\n\n initialize() {\n if (!performanceObserverSupported()) {\n this.logDebug('performance observer not supported. Disable performance instrumentation.');\n return;\n }\n\n onDocumentReady(async () => {\n const pushEvent = this.api.pushEvent;\n\n const { faroNavigationId } = await getNavigationTimings(pushEvent);\n\n if (faroNavigationId != null) {\n observeResourceTimings(faroNavigationId, pushEvent, performanceEntriesSubscription);\n }\n });\n }\n}\n"]}
|
|
@@ -14,10 +14,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.getNavigationTimings = void 0;
|
|
15
15
|
var faro_core_1 = require("@grafana/faro-core");
|
|
16
16
|
var utils_1 = require("../../utils");
|
|
17
|
+
var url_1 = require("../../utils/url");
|
|
17
18
|
var instrumentationConstants_1 = require("../instrumentationConstants");
|
|
18
19
|
var performanceConstants_1 = require("./performanceConstants");
|
|
19
20
|
var performanceUtils_1 = require("./performanceUtils");
|
|
20
|
-
function getNavigationTimings(pushEvent
|
|
21
|
+
function getNavigationTimings(pushEvent) {
|
|
21
22
|
var faroNavigationEntryResolve;
|
|
22
23
|
var faroNavigationEntryPromise = new Promise(function (resolve) {
|
|
23
24
|
faroNavigationEntryResolve = resolve;
|
|
@@ -25,7 +26,7 @@ function getNavigationTimings(pushEvent, ignoredUrls) {
|
|
|
25
26
|
var observer = new PerformanceObserver(function (observedEntries) {
|
|
26
27
|
var _a;
|
|
27
28
|
var navigationEntryRaw = observedEntries.getEntries()[0];
|
|
28
|
-
if (navigationEntryRaw == null || (0,
|
|
29
|
+
if (navigationEntryRaw == null || (0, url_1.isUrlIgnored)(navigationEntryRaw.name)) {
|
|
29
30
|
return;
|
|
30
31
|
}
|
|
31
32
|
var navEntryJson = navigationEntryRaw.toJSON();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/navigation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAA+D;AAG/D,qCAA+D;AAC/D,wEAAwE;AAExE,+DAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/navigation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAA+D;AAG/D,qCAA+D;AAC/D,uCAA+C;AAC/C,wEAAwE;AAExE,+DAA0D;AAC1D,uDAAgG;AAKhG,SAAgB,oBAAoB,CAAC,SAAiC;IACpE,IAAI,0BAA+D,CAAC;IACpE,IAAM,0BAA0B,GAAG,IAAI,OAAO,CAAqB,UAAC,OAAO;QACzE,0BAA0B,GAAG,OAAO,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,UAAC,eAAe;;QAChD,IAAA,kBAAkB,GAAI,eAAe,CAAC,UAAU,EAAE,GAAhC,CAAiC;QAE1D,IAAI,kBAAkB,IAAI,IAAI,IAAI,IAAA,kBAAY,EAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACvE,OAAO;SACR;QAED,IAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAEjD,IAAI,WAAW,GAAgB,IAAA,iDAA8B,EAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,CAAC;QAE1F,IAAM,wBAAwB,GAAG,MAAA,IAAA,eAAO,EAAC,oDAAyB,EAAE,sBAAc,CAAC,OAAO,CAAC,mCAAI,yBAAa,CAAC;QAE7G,IAAM,mBAAmB,yBACpB,IAAA,6CAA0B,EAAC,YAAY,CAAC,KAC3C,gBAAgB,EAAE,IAAA,sBAAU,GAAE,EAC9B,wBAAwB,0BAAA,GACzB,CAAC;QAEF,IAAA,eAAO,EAAC,oDAAyB,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,sBAAc,CAAC,OAAO,CAAC,CAAC;QAEjG,SAAS,CAAC,6BAA6B,EAAE,mBAAmB,EAAE,SAAS,EAAE;YACvE,WAAW,aAAA;YACX,oBAAoB,EAAE,WAAW,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS;SACtE,CAAC,CAAC;QAEH,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC;QACf,IAAI,EAAE,uCAAgB;QACtB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAzCD,oDAyCC","sourcesContent":["import { genShortID, unknownString } from '@grafana/faro-core';\nimport type { EventsAPI, PushEventOptions } from '@grafana/faro-core';\n\nimport { getItem, setItem, webStorageType } from '../../utils';\nimport { isUrlIgnored } from '../../utils/url';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\nimport { NAVIGATION_ENTRY } from './performanceConstants';\nimport { createFaroNavigationTiming, getSpanContextFromServerTiming } from './performanceUtils';\nimport type { FaroNavigationItem } from './types';\n\ntype SpanContext = PushEventOptions['spanContext'];\n\nexport function getNavigationTimings(pushEvent: EventsAPI['pushEvent']): Promise<FaroNavigationItem> {\n let faroNavigationEntryResolve: (value: FaroNavigationItem) => void;\n const faroNavigationEntryPromise = new Promise<FaroNavigationItem>((resolve) => {\n faroNavigationEntryResolve = resolve;\n });\n\n const observer = new PerformanceObserver((observedEntries) => {\n const [navigationEntryRaw] = observedEntries.getEntries();\n\n if (navigationEntryRaw == null || isUrlIgnored(navigationEntryRaw.name)) {\n return;\n }\n\n const navEntryJson = navigationEntryRaw.toJSON();\n\n let spanContext: SpanContext = getSpanContextFromServerTiming(navEntryJson?.serverTiming);\n\n const faroPreviousNavigationId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? unknownString;\n\n const faroNavigationEntry: FaroNavigationItem = {\n ...createFaroNavigationTiming(navEntryJson),\n faroNavigationId: genShortID(),\n faroPreviousNavigationId,\n };\n\n setItem(NAVIGATION_ID_STORAGE_KEY, faroNavigationEntry.faroNavigationId, webStorageType.session);\n\n pushEvent('faro.performance.navigation', faroNavigationEntry, undefined, {\n spanContext,\n timestampOverwriteMs: performance.timeOrigin + navEntryJson.startTime,\n });\n\n faroNavigationEntryResolve(faroNavigationEntry);\n });\n\n observer.observe({\n type: NAVIGATION_ENTRY,\n buffered: true,\n });\n\n return faroNavigationEntryPromise;\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.createFaroNavigationTiming = exports.createFaroResourceTiming = exports.includePerformanceEntry = exports.onDocumentReady = exports.
|
|
14
|
+
exports.createFaroNavigationTiming = exports.createFaroResourceTiming = exports.includePerformanceEntry = exports.onDocumentReady = exports.performanceObserverSupported = exports.getSpanContextFromServerTiming = void 0;
|
|
15
15
|
var faro_core_1 = require("@grafana/faro-core");
|
|
16
16
|
var w3cTraceparentFormat = /^00-[a-f0-9]{32}-[a-f0-9]{16}-[0-9]{1,2}$/;
|
|
17
17
|
// Extract traceparent from serverTiming, if present
|
|
@@ -37,11 +37,6 @@ function performanceObserverSupported() {
|
|
|
37
37
|
return 'PerformanceObserver' in window;
|
|
38
38
|
}
|
|
39
39
|
exports.performanceObserverSupported = performanceObserverSupported;
|
|
40
|
-
function entryUrlIsIgnored(ignoredUrls, entryName) {
|
|
41
|
-
if (ignoredUrls === void 0) { ignoredUrls = []; }
|
|
42
|
-
return ignoredUrls.some(function (url) { return url && entryName.match(url) != null; });
|
|
43
|
-
}
|
|
44
|
-
exports.entryUrlIsIgnored = entryUrlIsIgnored;
|
|
45
40
|
function onDocumentReady(handleReady) {
|
|
46
41
|
if (document.readyState === 'complete') {
|
|
47
42
|
handleReady();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performanceUtils.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/performanceUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, type PushEventOptions, unknownString } from '@grafana/faro-core';\n\nimport type { CacheType, FaroNavigationTiming, FaroResourceTiming } from './types';\n\nconst w3cTraceparentFormat = /^00-[a-f0-9]{32}-[a-f0-9]{16}-[0-9]{1,2}$/;\n\ntype SpanContext = PushEventOptions['spanContext'];\n\n// Extract traceparent from serverTiming, if present\nexport function getSpanContextFromServerTiming(serverTimings: PerformanceServerTiming[] = []): SpanContext | undefined {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === 'traceparent') {\n if (!w3cTraceparentFormat.test(serverEntry.description)) {\n continue;\n }\n\n const [, traceId, spanId] = serverEntry.description.split('-');\n if (traceId != null && spanId != null) {\n return { traceId, spanId };\n }\n\n break;\n }\n }\n\n return undefined;\n}\n\nexport function performanceObserverSupported(): boolean {\n return 'PerformanceObserver' in window;\n}\n\nexport function entryUrlIsIgnored(ignoredUrls: Array<string | RegExp> = [], entryName: string): boolean {\n return ignoredUrls.some((url) => url && entryName.match(url) != null);\n}\n\nexport function onDocumentReady(handleReady: () => void) {\n if (document.readyState === 'complete') {\n handleReady();\n } else {\n const readyStateCompleteHandler = () => {\n if (document.readyState === 'complete') {\n handleReady();\n document.removeEventListener('readystatechange', readyStateCompleteHandler);\n }\n };\n\n document.addEventListener('readystatechange', readyStateCompleteHandler);\n }\n}\n\ntype PerformanceEntryAllowProperties = Record<string, Array<string | number> | string | number>;\n\nexport function includePerformanceEntry(\n performanceEntryJSON: Record<string, any>,\n allowProps: PerformanceEntryAllowProperties = {}\n): boolean {\n for (const [allowPropKey, allowPropValue] of Object.entries(allowProps)) {\n const perfEntryPropVal = performanceEntryJSON[allowPropKey];\n\n if (perfEntryPropVal == null) {\n return false;\n }\n\n if (isArray(allowPropValue)) {\n return allowPropValue.includes(perfEntryPropVal);\n }\n\n return perfEntryPropVal === allowPropValue;\n }\n\n // empty object allows all\n return true;\n}\n\nexport function createFaroResourceTiming(resourceEntryRaw: PerformanceResourceTiming): FaroResourceTiming {\n const {\n connectEnd,\n connectStart,\n decodedBodySize,\n domainLookupEnd,\n domainLookupStart,\n duration,\n encodedBodySize,\n fetchStart,\n initiatorType,\n name,\n nextHopProtocol,\n redirectEnd,\n redirectStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n renderBlockingStatus: rbs,\n requestStart,\n responseEnd,\n responseStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n responseStatus,\n secureConnectionStart,\n transferSize,\n workerStart,\n } = resourceEntryRaw;\n\n return {\n name: name,\n duration: toFaroPerformanceTimingString(duration),\n tcpHandshakeTime: toFaroPerformanceTimingString(connectEnd - connectStart),\n dnsLookupTime: toFaroPerformanceTimingString(domainLookupEnd - domainLookupStart),\n tlsNegotiationTime: toFaroPerformanceTimingString(requestStart - secureConnectionStart),\n responseStatus: toFaroPerformanceTimingString(responseStatus),\n redirectTime: toFaroPerformanceTimingString(redirectEnd - redirectStart),\n requestTime: toFaroPerformanceTimingString(responseStart - requestStart),\n responseTime: toFaroPerformanceTimingString(responseEnd - responseStart),\n fetchTime: toFaroPerformanceTimingString(responseEnd - fetchStart),\n serviceWorkerTime: toFaroPerformanceTimingString(fetchStart - workerStart),\n decodedBodySize: toFaroPerformanceTimingString(decodedBodySize),\n encodedBodySize: toFaroPerformanceTimingString(encodedBodySize),\n cacheHitStatus: getCacheType(),\n renderBlockingStatus: toFaroPerformanceTimingString(rbs) as FaroResourceTiming['renderBlockingStatus'],\n protocol: nextHopProtocol,\n initiatorType: initiatorType,\n visibilityState: document.visibilityState,\n ttfb: toFaroPerformanceTimingString(responseStart - requestStart),\n\n // TODO: add in future iteration, ideally after nested objects are supported by the collector.\n // serverTiming: resourceEntryRaw.serverTiming,\n };\n\n function getCacheType(): CacheType {\n let cacheType: CacheType = 'fullLoad';\n if (transferSize === 0) {\n if (decodedBodySize > 0) {\n cacheType = 'cache';\n }\n } else {\n if (responseStatus != null) {\n if (responseStatus === 304) {\n cacheType = 'conditionalFetch';\n }\n } else if (encodedBodySize > 0 && transferSize < encodedBodySize) {\n cacheType = 'conditionalFetch';\n }\n }\n return cacheType;\n }\n}\n\nexport function createFaroNavigationTiming(navigationEntryRaw: PerformanceNavigationTiming): FaroNavigationTiming {\n const {\n activationStart,\n domComplete,\n domContentLoadedEventEnd,\n domContentLoadedEventStart,\n domInteractive,\n fetchStart,\n loadEventEnd,\n loadEventStart,\n responseStart,\n type,\n } = navigationEntryRaw;\n\n const parserStart = getDocumentParsingTime();\n\n return {\n ...createFaroResourceTiming(navigationEntryRaw),\n pageLoadTime: toFaroPerformanceTimingString(domComplete - fetchStart),\n documentParsingTime: toFaroPerformanceTimingString(parserStart ? domInteractive - parserStart : null),\n domProcessingTime: toFaroPerformanceTimingString(domComplete - domInteractive),\n domContentLoadHandlerTime: toFaroPerformanceTimingString(domContentLoadedEventEnd - domContentLoadedEventStart),\n onLoadTime: toFaroPerformanceTimingString(loadEventEnd - loadEventStart),\n\n // For navigation entries we can calculate the TTFB based on activationStart. We overwrite the TTFB value coming with the resource entry.\n // For more accuracy on prerendered pages page we calculate relative top the activationStart instead of the start of the navigation.\n // clamp to 0 if activationStart occurs after first byte is received.\n ttfb: toFaroPerformanceTimingString(Math.max(responseStart - (activationStart ?? 0), 0)),\n type: type,\n };\n}\n\nfunction getDocumentParsingTime(): number | null {\n if (performance.timing?.domLoading != null) {\n // the browser is about to start parsing the first received bytes of the HTML document.\n // This property is deprecated but there isn't a really good alternative atm.\n // For now we stick with domLoading and keep researching a better alternative.\n return performance.timing.domLoading - performance.timeOrigin;\n }\n\n return null;\n}\n\nfunction toFaroPerformanceTimingString(v: unknown): string {\n if (v == null) {\n return unknownString;\n }\n\n if (typeof v === 'number') {\n return Math.round(v).toString();\n }\n\n return v.toString();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"performanceUtils.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/performanceUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, type PushEventOptions, unknownString } from '@grafana/faro-core';\n\nimport type { CacheType, FaroNavigationTiming, FaroResourceTiming } from './types';\n\nconst w3cTraceparentFormat = /^00-[a-f0-9]{32}-[a-f0-9]{16}-[0-9]{1,2}$/;\n\ntype SpanContext = PushEventOptions['spanContext'];\n\n// Extract traceparent from serverTiming, if present\nexport function getSpanContextFromServerTiming(serverTimings: PerformanceServerTiming[] = []): SpanContext | undefined {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === 'traceparent') {\n if (!w3cTraceparentFormat.test(serverEntry.description)) {\n continue;\n }\n\n const [, traceId, spanId] = serverEntry.description.split('-');\n if (traceId != null && spanId != null) {\n return { traceId, spanId };\n }\n\n break;\n }\n }\n\n return undefined;\n}\n\nexport function performanceObserverSupported(): boolean {\n return 'PerformanceObserver' in window;\n}\n\nexport function onDocumentReady(handleReady: () => void) {\n if (document.readyState === 'complete') {\n handleReady();\n } else {\n const readyStateCompleteHandler = () => {\n if (document.readyState === 'complete') {\n handleReady();\n document.removeEventListener('readystatechange', readyStateCompleteHandler);\n }\n };\n\n document.addEventListener('readystatechange', readyStateCompleteHandler);\n }\n}\n\ntype PerformanceEntryAllowProperties = Record<string, Array<string | number> | string | number>;\n\nexport function includePerformanceEntry(\n performanceEntryJSON: Record<string, any>,\n allowProps: PerformanceEntryAllowProperties = {}\n): boolean {\n for (const [allowPropKey, allowPropValue] of Object.entries(allowProps)) {\n const perfEntryPropVal = performanceEntryJSON[allowPropKey];\n\n if (perfEntryPropVal == null) {\n return false;\n }\n\n if (isArray(allowPropValue)) {\n return allowPropValue.includes(perfEntryPropVal);\n }\n\n return perfEntryPropVal === allowPropValue;\n }\n\n // empty object allows all\n return true;\n}\n\nexport function createFaroResourceTiming(resourceEntryRaw: PerformanceResourceTiming): FaroResourceTiming {\n const {\n connectEnd,\n connectStart,\n decodedBodySize,\n domainLookupEnd,\n domainLookupStart,\n duration,\n encodedBodySize,\n fetchStart,\n initiatorType,\n name,\n nextHopProtocol,\n redirectEnd,\n redirectStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n renderBlockingStatus: rbs,\n requestStart,\n responseEnd,\n responseStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n responseStatus,\n secureConnectionStart,\n transferSize,\n workerStart,\n } = resourceEntryRaw;\n\n return {\n name: name,\n duration: toFaroPerformanceTimingString(duration),\n tcpHandshakeTime: toFaroPerformanceTimingString(connectEnd - connectStart),\n dnsLookupTime: toFaroPerformanceTimingString(domainLookupEnd - domainLookupStart),\n tlsNegotiationTime: toFaroPerformanceTimingString(requestStart - secureConnectionStart),\n responseStatus: toFaroPerformanceTimingString(responseStatus),\n redirectTime: toFaroPerformanceTimingString(redirectEnd - redirectStart),\n requestTime: toFaroPerformanceTimingString(responseStart - requestStart),\n responseTime: toFaroPerformanceTimingString(responseEnd - responseStart),\n fetchTime: toFaroPerformanceTimingString(responseEnd - fetchStart),\n serviceWorkerTime: toFaroPerformanceTimingString(fetchStart - workerStart),\n decodedBodySize: toFaroPerformanceTimingString(decodedBodySize),\n encodedBodySize: toFaroPerformanceTimingString(encodedBodySize),\n cacheHitStatus: getCacheType(),\n renderBlockingStatus: toFaroPerformanceTimingString(rbs) as FaroResourceTiming['renderBlockingStatus'],\n protocol: nextHopProtocol,\n initiatorType: initiatorType,\n visibilityState: document.visibilityState,\n ttfb: toFaroPerformanceTimingString(responseStart - requestStart),\n\n // TODO: add in future iteration, ideally after nested objects are supported by the collector.\n // serverTiming: resourceEntryRaw.serverTiming,\n };\n\n function getCacheType(): CacheType {\n let cacheType: CacheType = 'fullLoad';\n if (transferSize === 0) {\n if (decodedBodySize > 0) {\n cacheType = 'cache';\n }\n } else {\n if (responseStatus != null) {\n if (responseStatus === 304) {\n cacheType = 'conditionalFetch';\n }\n } else if (encodedBodySize > 0 && transferSize < encodedBodySize) {\n cacheType = 'conditionalFetch';\n }\n }\n return cacheType;\n }\n}\n\nexport function createFaroNavigationTiming(navigationEntryRaw: PerformanceNavigationTiming): FaroNavigationTiming {\n const {\n activationStart,\n domComplete,\n domContentLoadedEventEnd,\n domContentLoadedEventStart,\n domInteractive,\n fetchStart,\n loadEventEnd,\n loadEventStart,\n responseStart,\n type,\n } = navigationEntryRaw;\n\n const parserStart = getDocumentParsingTime();\n\n return {\n ...createFaroResourceTiming(navigationEntryRaw),\n pageLoadTime: toFaroPerformanceTimingString(domComplete - fetchStart),\n documentParsingTime: toFaroPerformanceTimingString(parserStart ? domInteractive - parserStart : null),\n domProcessingTime: toFaroPerformanceTimingString(domComplete - domInteractive),\n domContentLoadHandlerTime: toFaroPerformanceTimingString(domContentLoadedEventEnd - domContentLoadedEventStart),\n onLoadTime: toFaroPerformanceTimingString(loadEventEnd - loadEventStart),\n\n // For navigation entries we can calculate the TTFB based on activationStart. We overwrite the TTFB value coming with the resource entry.\n // For more accuracy on prerendered pages page we calculate relative top the activationStart instead of the start of the navigation.\n // clamp to 0 if activationStart occurs after first byte is received.\n ttfb: toFaroPerformanceTimingString(Math.max(responseStart - (activationStart ?? 0), 0)),\n type: type,\n };\n}\n\nfunction getDocumentParsingTime(): number | null {\n if (performance.timing?.domLoading != null) {\n // the browser is about to start parsing the first received bytes of the HTML document.\n // This property is deprecated but there isn't a really good alternative atm.\n // For now we stick with domLoading and keep researching a better alternative.\n return performance.timing.domLoading - performance.timeOrigin;\n }\n\n return null;\n}\n\nfunction toFaroPerformanceTimingString(v: unknown): string {\n if (v == null) {\n return unknownString;\n }\n\n if (typeof v === 'number') {\n return Math.round(v).toString();\n }\n\n return v.toString();\n}\n"]}
|
|
@@ -13,16 +13,17 @@ var __assign = (this && this.__assign) || function () {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.observeResourceTimings = void 0;
|
|
15
15
|
var faro_core_1 = require("@grafana/faro-core");
|
|
16
|
+
var url_1 = require("../../utils/url");
|
|
16
17
|
var performanceConstants_1 = require("./performanceConstants");
|
|
17
18
|
var performanceUtils_1 = require("./performanceUtils");
|
|
18
19
|
var DEFAULT_TRACK_RESOURCES = { initiatorType: ['xmlhttprequest', 'fetch'] };
|
|
19
|
-
function observeResourceTimings(faroNavigationId, pushEvent,
|
|
20
|
+
function observeResourceTimings(faroNavigationId, pushEvent, observable) {
|
|
20
21
|
var trackResources = faro_core_1.faro.config.trackResources;
|
|
21
22
|
var observer = new PerformanceObserver(function (observedEntries) {
|
|
22
23
|
var entries = observedEntries.getEntries();
|
|
23
24
|
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
24
25
|
var resourceEntryRaw = entries_1[_i];
|
|
25
|
-
if ((0,
|
|
26
|
+
if ((0, url_1.isUrlIgnored)(resourceEntryRaw.name)) {
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
var resourceEntryJson = resourceEntryRaw.toJSON();
|
|
@@ -30,6 +31,11 @@ function observeResourceTimings(faroNavigationId, pushEvent, ignoredUrls) {
|
|
|
30
31
|
if ((trackResources == null && (0, performanceUtils_1.includePerformanceEntry)(resourceEntryJson, DEFAULT_TRACK_RESOURCES)) ||
|
|
31
32
|
trackResources) {
|
|
32
33
|
var faroResourceEntry = __assign(__assign({}, (0, performanceUtils_1.createFaroResourceTiming)(resourceEntryJson)), { faroNavigationId: faroNavigationId, faroResourceId: (0, faro_core_1.genShortID)() });
|
|
34
|
+
if (faro_core_1.faro.config.trackUserActionsPreview) {
|
|
35
|
+
observable === null || observable === void 0 ? void 0 : observable.notify({
|
|
36
|
+
type: performanceConstants_1.RESOURCE_ENTRY,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
33
39
|
pushEvent('faro.performance.resource', faroResourceEntry, undefined, {
|
|
34
40
|
spanContext: spanContext,
|
|
35
41
|
timestampOverwriteMs: performance.timeOrigin + resourceEntryJson.startTime,
|