@grafana/faro-web-sdk 1.13.2 → 1.14.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/index.d.ts +1 -1
- 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/performance/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
- 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/instrumentations/webVitals/webVitalsBasic.d.ts +4 -1
- package/dist/bundle/types/instrumentations/webVitals/webVitalsWithAttribution.d.ts +4 -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/cjs/config/makeCoreConfig.js +18 -3
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instrumentations/session/instrumentation.js +18 -21
- package/dist/cjs/instrumentations/session/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/webVitals/instrumentation.js +4 -3
- package/dist/cjs/instrumentations/webVitals/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/webVitals/webVitalsBasic.js +4 -2
- package/dist/cjs/instrumentations/webVitals/webVitalsBasic.js.map +1 -1
- package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js +14 -7
- package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js.map +1 -1
- package/dist/esm/config/makeCoreConfig.js +18 -4
- 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/session/instrumentation.js +18 -21
- package/dist/esm/instrumentations/session/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/webVitals/instrumentation.js +4 -3
- package/dist/esm/instrumentations/webVitals/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/webVitals/webVitalsBasic.js +4 -2
- package/dist/esm/instrumentations/webVitals/webVitalsBasic.js.map +1 -1
- package/dist/esm/instrumentations/webVitals/webVitalsWithAttribution.js +14 -7
- package/dist/esm/instrumentations/webVitals/webVitalsWithAttribution.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/instrumentations/console/instrumentation.d.ts +1 -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/view/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/webVitals/webVitalsBasic.d.ts +4 -1
- package/dist/types/instrumentations/webVitals/webVitalsWithAttribution.d.ts +4 -1
- package/dist/types/transports/console/transport.d.ts +1 -1
- package/dist/types/transports/fetch/transport.d.ts +1 -1
- package/package.json +3 -3
|
@@ -49,11 +49,11 @@ function makeCoreConfig(browserConfig) {
|
|
|
49
49
|
else {
|
|
50
50
|
internalLogger.error('either "url" or "transports" must be defined');
|
|
51
51
|
}
|
|
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,
|
|
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, geoLocationTracking = browserConfig.geoLocationTracking,
|
|
53
53
|
// properties with default values
|
|
54
54
|
_b = browserConfig.dedupe,
|
|
55
55
|
// 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;
|
|
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
57
|
return {
|
|
58
58
|
app: app,
|
|
59
59
|
batching: __assign(__assign({}, faro_core_1.defaultBatchingConfig), batching),
|
|
@@ -74,12 +74,13 @@ function makeCoreConfig(browserConfig) {
|
|
|
74
74
|
ignoreErrors: ignoreErrors,
|
|
75
75
|
// ignore cloud collector urls by default. These are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
76
76
|
ignoreUrls: ((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []).concat([/\/collect(?:\/[\w]*)?$/]),
|
|
77
|
-
sessionTracking: __assign(__assign({}, session_1.defaultSessionTrackingConfig), sessionTracking),
|
|
77
|
+
sessionTracking: __assign(__assign(__assign({}, session_1.defaultSessionTrackingConfig), sessionTracking), crateSessionMeta({ geoLocationTracking: geoLocationTracking, sessionTracking: sessionTracking })),
|
|
78
78
|
user: user,
|
|
79
79
|
view: view,
|
|
80
80
|
trackResources: trackResources,
|
|
81
81
|
trackWebVitalsAttribution: trackWebVitalsAttribution,
|
|
82
82
|
consoleInstrumentation: consoleInstrumentation,
|
|
83
|
+
webVitalsInstrumentation: webVitalsInstrumentation,
|
|
83
84
|
};
|
|
84
85
|
}
|
|
85
86
|
exports.makeCoreConfig = makeCoreConfig;
|
|
@@ -96,4 +97,18 @@ function createDefaultMetas(browserConfig) {
|
|
|
96
97
|
}
|
|
97
98
|
return initialMetas;
|
|
98
99
|
}
|
|
100
|
+
function crateSessionMeta(_a) {
|
|
101
|
+
var _b;
|
|
102
|
+
var geoLocationTracking = _a.geoLocationTracking, sessionTracking = _a.sessionTracking;
|
|
103
|
+
var overrides = {};
|
|
104
|
+
if ((geoLocationTracking === null || geoLocationTracking === void 0 ? void 0 : geoLocationTracking.enabled) != null) {
|
|
105
|
+
overrides.geoLocationTrackingEnabled = geoLocationTracking.enabled;
|
|
106
|
+
}
|
|
107
|
+
if ((0, faro_core_1.isEmpty)(overrides)) {
|
|
108
|
+
return {};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
session: __assign(__assign({}, ((_b = sessionTracking === null || sessionTracking === void 0 ? void 0 : sessionTracking.session) !== null && _b !== void 0 ? _b : {})), { overrides: overrides }),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
99
114
|
//# sourceMappingURL=makeCoreConfig.js.map
|
|
@@ -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 isEmpty,\n isObject,\n} from '@grafana/faro-core';\nimport type { Config, MetaItem, MetaSession, 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 geoLocationTracking,\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 }: 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 ...crateSessionMeta({ geoLocationTracking, sessionTracking }),\n },\n user,\n view,\n trackResources,\n trackWebVitalsAttribution,\n consoleInstrumentation,\n webVitalsInstrumentation,\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 geoLocationTracking,\n sessionTracking,\n}: Pick<BrowserConfig, 'geoLocationTracking' | 'sessionTracking'>): { session: MetaSession } | {} {\n const overrides: MetaSession['overrides'] = {};\n\n if (geoLocationTracking?.enabled != null) {\n overrides.geoLocationTrackingEnabled = geoLocationTracking.enabled;\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
3
|
exports.isFunction = 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.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.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.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;
|
|
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;
|
|
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; } });
|
|
@@ -76,6 +76,7 @@ Object.defineProperty(exports, "isThenable", { enumerable: true, get: function (
|
|
|
76
76
|
Object.defineProperty(exports, "isToString", { enumerable: true, get: function () { return faro_core_1.isToString; } });
|
|
77
77
|
Object.defineProperty(exports, "isTypeof", { enumerable: true, get: function () { return faro_core_1.isTypeof; } });
|
|
78
78
|
Object.defineProperty(exports, "isUndefined", { enumerable: true, get: function () { return faro_core_1.isUndefined; } });
|
|
79
|
+
Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function () { return faro_core_1.isEmpty; } });
|
|
79
80
|
Object.defineProperty(exports, "InternalLoggerLevel", { enumerable: true, get: function () { return faro_core_1.InternalLoggerLevel; } });
|
|
80
81
|
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return faro_core_1.LogLevel; } });
|
|
81
82
|
Object.defineProperty(exports, "noop", { enumerable: true, get: function () { return faro_core_1.noop; } });
|
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,uDAW4B;AAV1B,mHAAA,eAAe,OAAA;AACf,0HAAA,sBAAsB,OAAA;AACtB,yHAAA,qBAAqB,OAAA;AACrB,+HAAA,2BAA2B,OAAA;AAC3B,2HAAA,uBAAuB,OAAA;AACvB,mHAAA,eAAe,OAAA;AACf,uHAAA,mBAAmB,OAAA;AACnB,4HAAA,wBAAwB,OAAA;AACxB,0HAAA,sBAAsB,OAAA;AACtB,8HAAA,0BAA0B,OAAA;AAI5B,iCAA8D;AAArD,oGAAA,WAAW,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,gGAAA,OAAO,OAAA;AAE5C,2CAAgE;AAAvD,8GAAA,gBAAgB,OAAA;AAAE,4GAAA,cAAc,OAAA;AAQzC,
|
|
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} 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} 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"]}
|
|
@@ -56,45 +56,42 @@ var SessionInstrumentation = /** @class */ (function (_super) {
|
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
SessionInstrumentation.prototype.createInitialSession = function (SessionManager, sessionsConfig) {
|
|
59
|
-
var _a, _b, _c, _d;
|
|
60
|
-
var
|
|
61
|
-
if (sessionsConfig.persistent && sessionsConfig.maxSessionPersistenceTime &&
|
|
59
|
+
var _a, _b, _c, _d, _e, _f;
|
|
60
|
+
var storedUserSession = SessionManager.fetchUserSession();
|
|
61
|
+
if (sessionsConfig.persistent && sessionsConfig.maxSessionPersistenceTime && storedUserSession) {
|
|
62
62
|
var now = (0, faro_core_1.dateNow)();
|
|
63
|
-
var shouldClearPersistentSession =
|
|
63
|
+
var shouldClearPersistentSession = storedUserSession.lastActivity < now - sessionsConfig.maxSessionPersistenceTime;
|
|
64
64
|
if (shouldClearPersistentSession) {
|
|
65
65
|
PersistentSessionsManager_1.PersistentSessionsManager.removeUserSession();
|
|
66
|
-
|
|
66
|
+
storedUserSession = null;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
var lifecycleType;
|
|
70
70
|
var initialSession;
|
|
71
|
-
if ((0, sessionManagerUtils_1.isUserSessionValid)(
|
|
72
|
-
var sessionId =
|
|
71
|
+
if ((0, sessionManagerUtils_1.isUserSessionValid)(storedUserSession)) {
|
|
72
|
+
var sessionId = storedUserSession === null || storedUserSession === void 0 ? void 0 : storedUserSession.sessionId;
|
|
73
73
|
initialSession = (0, sessionManagerUtils_1.createUserSessionObject)({
|
|
74
74
|
sessionId: sessionId,
|
|
75
|
-
isSampled:
|
|
76
|
-
started:
|
|
75
|
+
isSampled: storedUserSession.isSampled || false,
|
|
76
|
+
started: storedUserSession === null || storedUserSession === void 0 ? void 0 : storedUserSession.started,
|
|
77
77
|
});
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
var storedUserSessionMeta = storedUserSession === null || storedUserSession === void 0 ? void 0 : storedUserSession.sessionMeta;
|
|
79
|
+
// For resumed sessions we want to merge the previous overrides with the configured ones.
|
|
80
|
+
// If the same key is present in both, the new one will override the old one.
|
|
81
|
+
var overrides = __assign(__assign({}, (_a = sessionsConfig.session) === null || _a === void 0 ? void 0 : _a.overrides), storedUserSessionMeta === null || storedUserSessionMeta === void 0 ? void 0 : storedUserSessionMeta.overrides);
|
|
82
|
+
initialSession.sessionMeta = __assign(__assign({}, sessionsConfig.session), { id: sessionId, attributes: __assign(__assign(__assign({}, (_b = sessionsConfig.session) === null || _b === void 0 ? void 0 : _b.attributes), storedUserSessionMeta === null || storedUserSessionMeta === void 0 ? void 0 : storedUserSessionMeta.attributes), {
|
|
82
83
|
// For valid resumed sessions we do not want to recalculate the sampling decision on each init phase.
|
|
83
|
-
isSampled: initialSession.isSampled.toString() }),
|
|
84
|
-
overrides: userSessionMeta === null || userSessionMeta === void 0 ? void 0 : userSessionMeta.overrides,
|
|
85
|
-
};
|
|
84
|
+
isSampled: initialSession.isSampled.toString() }), overrides: overrides });
|
|
86
85
|
lifecycleType = faro_core_1.EVENT_SESSION_RESUME;
|
|
87
86
|
}
|
|
88
87
|
else {
|
|
89
|
-
var sessionId = (
|
|
88
|
+
var sessionId = (_d = (_c = sessionsConfig.session) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : (0, metas_1.createSession)().id;
|
|
90
89
|
initialSession = (0, sessionManagerUtils_1.createUserSessionObject)({
|
|
91
90
|
sessionId: sessionId,
|
|
92
91
|
isSampled: (0, sessionManager_1.isSampled)(),
|
|
93
92
|
});
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
attributes: __assign({ isSampled: initialSession.isSampled.toString() }, (_d = sessionsConfig.session) === null || _d === void 0 ? void 0 : _d.attributes),
|
|
97
|
-
};
|
|
93
|
+
var overrides = (_e = sessionsConfig.session) === null || _e === void 0 ? void 0 : _e.overrides;
|
|
94
|
+
initialSession.sessionMeta = __assign({ id: sessionId, attributes: __assign({ isSampled: initialSession.isSampled.toString() }, (_f = sessionsConfig.session) === null || _f === void 0 ? void 0 : _f.attributes) }, (overrides ? { overrides: overrides } : {}));
|
|
98
95
|
lifecycleType = faro_core_1.EVENT_SESSION_START;
|
|
99
96
|
}
|
|
100
97
|
return { initialSession: initialSession, lifecycleType: lifecycleType };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/instrumentation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BaseInstrumentation,\n dateNow,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n Meta,\n MetaSession,\n VERSION,\n} from '@grafana/faro-core';\nimport type { Config } from '@grafana/faro-core';\n\nimport type { TransportItem } from '../..';\nimport { createSession } from '../../metas';\n\nimport { type FaroUserSession, getSessionManagerByConfig, isSampled } from './sessionManager';\nimport { PersistentSessionsManager } from './sessionManager/PersistentSessionsManager';\nimport { createUserSessionObject, isUserSessionValid } from './sessionManager/sessionManagerUtils';\nimport type { SessionManager } from './sessionManager/types';\n\ntype LifecycleType = typeof EVENT_SESSION_RESUME | typeof EVENT_SESSION_START;\n\nexport class SessionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-session';\n readonly version = VERSION;\n\n // previously notified session, to ensure we don't send session start\n // event twice for the same session\n private notifiedSession: MetaSession | undefined;\n\n private sendSessionStartEvent(meta: Meta): void {\n const session = meta.session;\n\n if (session && session.id !== this.notifiedSession?.id) {\n if (this.notifiedSession && this.notifiedSession.id === session.attributes?.['previousSession']) {\n this.api.pushEvent(EVENT_SESSION_EXTEND, {}, undefined, { skipDedupe: true });\n this.notifiedSession = session;\n return;\n }\n\n this.notifiedSession = session;\n // no need to add attributes and session id, they are included as part of meta\n // automatically\n this.api.pushEvent(EVENT_SESSION_START, {}, undefined, { skipDedupe: true });\n }\n }\n\n private createInitialSession(\n SessionManager: SessionManager,\n sessionsConfig: Required<Config>['sessionTracking']\n ): {\n initialSession: FaroUserSession;\n lifecycleType: LifecycleType;\n } {\n let userSession: FaroUserSession | null = SessionManager.fetchUserSession();\n\n if (sessionsConfig.persistent && sessionsConfig.maxSessionPersistenceTime && userSession) {\n const now = dateNow();\n const shouldClearPersistentSession = userSession.lastActivity < now - sessionsConfig.maxSessionPersistenceTime;\n\n if (shouldClearPersistentSession) {\n PersistentSessionsManager.removeUserSession();\n userSession = null;\n }\n }\n\n let lifecycleType: LifecycleType;\n let initialSession: FaroUserSession;\n\n if (isUserSessionValid(userSession)) {\n const sessionId = userSession?.sessionId;\n\n initialSession = createUserSessionObject({\n sessionId,\n isSampled: userSession!.isSampled || false,\n started: userSession?.started,\n });\n\n const userSessionMeta = userSession?.sessionMeta;\n\n initialSession.sessionMeta = {\n id: sessionId,\n attributes: {\n ...sessionsConfig.session?.attributes,\n ...userSessionMeta?.attributes,\n // For valid resumed sessions we do not want to recalculate the sampling decision on each init phase.\n isSampled: initialSession.isSampled.toString(),\n },\n overrides: userSessionMeta?.overrides,\n };\n\n lifecycleType = EVENT_SESSION_RESUME;\n } else {\n const sessionId = sessionsConfig.session?.id ?? createSession().id;\n\n initialSession = createUserSessionObject({\n sessionId,\n isSampled: isSampled(),\n });\n\n initialSession.sessionMeta = {\n id: sessionId,\n attributes: {\n isSampled: initialSession.isSampled.toString(),\n ...sessionsConfig.session?.attributes,\n },\n };\n\n lifecycleType = EVENT_SESSION_START;\n }\n\n return { initialSession, lifecycleType };\n }\n\n private registerBeforeSendHook(SessionManager: SessionManager) {\n const { updateSession } = new SessionManager();\n\n this.transports?.addBeforeSendHooks((item) => {\n updateSession();\n\n const attributes = item.meta.session?.attributes;\n\n if (attributes && attributes?.['isSampled'] === 'true') {\n let newItem: TransportItem = JSON.parse(JSON.stringify(item));\n\n const newAttributes = newItem.meta.session?.attributes;\n delete newAttributes?.['isSampled'];\n\n if (Object.keys(newAttributes ?? {}).length === 0) {\n delete newItem.meta.session?.attributes;\n }\n\n return newItem;\n }\n\n return null;\n });\n }\n\n initialize() {\n this.logDebug('init session instrumentation');\n\n const sessionTrackingConfig = this.config.sessionTracking;\n\n if (sessionTrackingConfig?.enabled) {\n const SessionManager = getSessionManagerByConfig(sessionTrackingConfig);\n\n this.registerBeforeSendHook(SessionManager);\n\n const { initialSession, lifecycleType } = this.createInitialSession(SessionManager, sessionTrackingConfig);\n\n SessionManager.storeUserSession(initialSession);\n\n const initialSessionMeta = initialSession.sessionMeta;\n\n this.notifiedSession = initialSessionMeta;\n this.api.setSession(initialSessionMeta);\n\n if (lifecycleType === EVENT_SESSION_START) {\n this.api.pushEvent(EVENT_SESSION_START, {}, undefined, { skipDedupe: true });\n }\n\n if (lifecycleType === EVENT_SESSION_RESUME) {\n this.api.pushEvent(EVENT_SESSION_RESUME, {}, undefined, { skipDedupe: true });\n }\n }\n\n this.metas.addListener(this.sendSessionStartEvent.bind(this));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/instrumentation.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BaseInstrumentation,\n dateNow,\n EVENT_SESSION_EXTEND,\n EVENT_SESSION_RESUME,\n EVENT_SESSION_START,\n Meta,\n MetaSession,\n VERSION,\n} from '@grafana/faro-core';\nimport type { Config } from '@grafana/faro-core';\n\nimport type { TransportItem } from '../..';\nimport { createSession } from '../../metas';\n\nimport { type FaroUserSession, getSessionManagerByConfig, isSampled } from './sessionManager';\nimport { PersistentSessionsManager } from './sessionManager/PersistentSessionsManager';\nimport { createUserSessionObject, isUserSessionValid } from './sessionManager/sessionManagerUtils';\nimport type { SessionManager } from './sessionManager/types';\n\ntype LifecycleType = typeof EVENT_SESSION_RESUME | typeof EVENT_SESSION_START;\n\nexport class SessionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-session';\n readonly version = VERSION;\n\n // previously notified session, to ensure we don't send session start\n // event twice for the same session\n private notifiedSession: MetaSession | undefined;\n\n private sendSessionStartEvent(meta: Meta): void {\n const session = meta.session;\n\n if (session && session.id !== this.notifiedSession?.id) {\n if (this.notifiedSession && this.notifiedSession.id === session.attributes?.['previousSession']) {\n this.api.pushEvent(EVENT_SESSION_EXTEND, {}, undefined, { skipDedupe: true });\n this.notifiedSession = session;\n return;\n }\n\n this.notifiedSession = session;\n // no need to add attributes and session id, they are included as part of meta\n // automatically\n this.api.pushEvent(EVENT_SESSION_START, {}, undefined, { skipDedupe: true });\n }\n }\n\n private createInitialSession(\n SessionManager: SessionManager,\n sessionsConfig: Required<Config>['sessionTracking']\n ): {\n initialSession: FaroUserSession;\n lifecycleType: LifecycleType;\n } {\n let storedUserSession: FaroUserSession | null = SessionManager.fetchUserSession();\n\n if (sessionsConfig.persistent && sessionsConfig.maxSessionPersistenceTime && storedUserSession) {\n const now = dateNow();\n const shouldClearPersistentSession =\n storedUserSession.lastActivity < now - sessionsConfig.maxSessionPersistenceTime;\n\n if (shouldClearPersistentSession) {\n PersistentSessionsManager.removeUserSession();\n storedUserSession = null;\n }\n }\n\n let lifecycleType: LifecycleType;\n let initialSession: FaroUserSession;\n\n if (isUserSessionValid(storedUserSession)) {\n const sessionId = storedUserSession?.sessionId;\n\n initialSession = createUserSessionObject({\n sessionId,\n isSampled: storedUserSession!.isSampled || false,\n started: storedUserSession?.started,\n });\n\n const storedUserSessionMeta = storedUserSession?.sessionMeta;\n\n // For resumed sessions we want to merge the previous overrides with the configured ones.\n // If the same key is present in both, the new one will override the old one.\n const overrides = { ...sessionsConfig.session?.overrides, ...storedUserSessionMeta?.overrides };\n\n initialSession.sessionMeta = {\n ...sessionsConfig.session,\n id: sessionId,\n attributes: {\n ...sessionsConfig.session?.attributes,\n ...storedUserSessionMeta?.attributes,\n // For valid resumed sessions we do not want to recalculate the sampling decision on each init phase.\n isSampled: initialSession.isSampled.toString(),\n },\n overrides,\n };\n\n lifecycleType = EVENT_SESSION_RESUME;\n } else {\n const sessionId = sessionsConfig.session?.id ?? createSession().id;\n\n initialSession = createUserSessionObject({\n sessionId,\n isSampled: isSampled(),\n });\n\n const overrides = sessionsConfig.session?.overrides;\n\n initialSession.sessionMeta = {\n id: sessionId,\n attributes: {\n isSampled: initialSession.isSampled.toString(),\n ...sessionsConfig.session?.attributes,\n },\n // new session we don't care about previous overrides\n ...(overrides ? { overrides } : {}),\n };\n\n lifecycleType = EVENT_SESSION_START;\n }\n\n return { initialSession, lifecycleType };\n }\n\n private registerBeforeSendHook(SessionManager: SessionManager) {\n const { updateSession } = new SessionManager();\n\n this.transports?.addBeforeSendHooks((item) => {\n updateSession();\n\n const attributes = item.meta.session?.attributes;\n\n if (attributes && attributes?.['isSampled'] === 'true') {\n let newItem: TransportItem = JSON.parse(JSON.stringify(item));\n\n const newAttributes = newItem.meta.session?.attributes;\n delete newAttributes?.['isSampled'];\n\n if (Object.keys(newAttributes ?? {}).length === 0) {\n delete newItem.meta.session?.attributes;\n }\n\n return newItem;\n }\n\n return null;\n });\n }\n\n initialize() {\n this.logDebug('init session instrumentation');\n\n const sessionTrackingConfig = this.config.sessionTracking;\n\n if (sessionTrackingConfig?.enabled) {\n const SessionManager = getSessionManagerByConfig(sessionTrackingConfig);\n\n this.registerBeforeSendHook(SessionManager);\n\n const { initialSession, lifecycleType } = this.createInitialSession(SessionManager, sessionTrackingConfig);\n\n SessionManager.storeUserSession(initialSession);\n\n const initialSessionMeta = initialSession.sessionMeta;\n\n this.notifiedSession = initialSessionMeta;\n this.api.setSession(initialSessionMeta);\n\n if (lifecycleType === EVENT_SESSION_START) {\n this.api.pushEvent(EVENT_SESSION_START, {}, undefined, { skipDedupe: true });\n }\n\n if (lifecycleType === EVENT_SESSION_RESUME) {\n this.api.pushEvent(EVENT_SESSION_RESUME, {}, undefined, { skipDedupe: true });\n }\n }\n\n this.metas.addListener(this.sendSessionStartEvent.bind(this));\n }\n}\n"]}
|
|
@@ -33,10 +33,11 @@ var WebVitalsInstrumentation = /** @class */ (function (_super) {
|
|
|
33
33
|
webVitals.initialize();
|
|
34
34
|
};
|
|
35
35
|
WebVitalsInstrumentation.prototype.intializeWebVitalsInstrumentation = function () {
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
var _a;
|
|
37
|
+
if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.trackWebVitalsAttribution) {
|
|
38
|
+
return new webVitalsWithAttribution_1.WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
|
|
38
39
|
}
|
|
39
|
-
return new webVitalsBasic_1.WebVitalsBasic(this.api.pushMeasurement);
|
|
40
|
+
return new webVitalsBasic_1.WebVitalsBasic(this.api.pushMeasurement, this.config.webVitalsInstrumentation);
|
|
40
41
|
};
|
|
41
42
|
return WebVitalsInstrumentation;
|
|
42
43
|
}(faro_core_1.BaseInstrumentation));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkE;AAElE,mDAAkD;AAClD,uEAAsE;AAEtE;IAA8C,4CAAmB;IAAjE;QAAA,qEAgBC;QAfU,UAAI,GAAG,kDAAkD,CAAC;QAC1D,aAAO,GAAG,mBAAO,CAAC;;IAc7B,CAAC;IAZC,6CAAU,GAAV;QACE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAM,SAAS,GAAG,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC3D,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IAEO,oEAAiC,GAAzC
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAkE;AAElE,mDAAkD;AAClD,uEAAsE;AAEtE;IAA8C,4CAAmB;IAAjE;QAAA,qEAgBC;QAfU,UAAI,GAAG,kDAAkD,CAAC;QAC1D,aAAO,GAAG,mBAAO,CAAC;;IAc7B,CAAC;IAZC,6CAAU,GAAV;QACE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAM,SAAS,GAAG,IAAI,CAAC,iCAAiC,EAAE,CAAC;QAC3D,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IAEO,oEAAiC,GAAzC;;QACE,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,yBAAyB,EAAE;YAC1C,OAAO,IAAI,mDAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;SACrG;QACD,OAAO,IAAI,+BAAc,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC5F,CAAC;IACH,+BAAC;AAAD,CAAC,AAhBD,CAA8C,+BAAmB,GAgBhE;AAhBY,4DAAwB","sourcesContent":["import { BaseInstrumentation, VERSION } from '@grafana/faro-core';\n\nimport { WebVitalsBasic } from './webVitalsBasic';\nimport { WebVitalsWithAttribution } from './webVitalsWithAttribution';\n\nexport class WebVitalsInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-web-vitals';\n readonly version = VERSION;\n\n initialize(): void {\n this.logDebug('Initializing');\n const webVitals = this.intializeWebVitalsInstrumentation();\n webVitals.initialize();\n }\n\n private intializeWebVitalsInstrumentation() {\n if (this.config?.trackWebVitalsAttribution) {\n return new WebVitalsWithAttribution(this.api.pushMeasurement, this.config.webVitalsInstrumentation);\n }\n return new WebVitalsBasic(this.api.pushMeasurement, this.config.webVitalsInstrumentation);\n }\n}\n"]}
|
|
@@ -3,12 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WebVitalsBasic = void 0;
|
|
4
4
|
var web_vitals_1 = require("web-vitals");
|
|
5
5
|
var WebVitalsBasic = /** @class */ (function () {
|
|
6
|
-
function WebVitalsBasic(pushMeasurement) {
|
|
6
|
+
function WebVitalsBasic(pushMeasurement, webVitalConfig) {
|
|
7
7
|
this.pushMeasurement = pushMeasurement;
|
|
8
|
+
this.webVitalConfig = webVitalConfig;
|
|
8
9
|
}
|
|
9
10
|
WebVitalsBasic.prototype.initialize = function () {
|
|
10
11
|
var _this = this;
|
|
11
12
|
Object.entries(WebVitalsBasic.mapping).forEach(function (_a) {
|
|
13
|
+
var _b;
|
|
12
14
|
var indicator = _a[0], executor = _a[1];
|
|
13
15
|
executor(function (metric) {
|
|
14
16
|
var _a;
|
|
@@ -18,7 +20,7 @@ var WebVitalsBasic = /** @class */ (function () {
|
|
|
18
20
|
_a[indicator] = metric.value,
|
|
19
21
|
_a),
|
|
20
22
|
});
|
|
21
|
-
});
|
|
23
|
+
}, { reportAllChanges: (_b = _this.webVitalConfig) === null || _b === void 0 ? void 0 : _b.reportAllChanges });
|
|
22
24
|
});
|
|
23
25
|
};
|
|
24
26
|
WebVitalsBasic.mapping = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webVitalsBasic.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/webVitalsBasic.ts"],"names":[],"mappings":";;;AAAA,yCAAuE;AAIvE;IAUE,
|
|
1
|
+
{"version":3,"file":"webVitalsBasic.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/webVitalsBasic.ts"],"names":[],"mappings":";;;AAAA,yCAAuE;AAIvE;IAUE,wBACU,eAAmD,EACnD,cAAmD;QADnD,oBAAe,GAAf,eAAe,CAAoC;QACnD,mBAAc,GAAd,cAAc,CAAqC;IAC1D,CAAC;IAEJ,mCAAU,GAAV;QAAA,iBAeC;QAdC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,EAAqB;;gBAApB,SAAS,QAAA,EAAE,QAAQ,QAAA;YAClE,QAAQ,CACN,UAAC,MAAM;;gBACL,KAAI,CAAC,eAAe,CAAC;oBACnB,IAAI,EAAE,YAAY;oBAElB,MAAM;wBACJ,GAAC,SAAS,IAAG,MAAM,CAAC,KAAK;2BAC1B;iBACF,CAAC,CAAC;YACL,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,KAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IA7BM,sBAAO,GAAG;QACf,GAAG,EAAE,kBAAK;QACV,GAAG,EAAE,kBAAK;QACV,GAAG,EAAE,kBAAK;QACV,GAAG,EAAE,kBAAK;QACV,GAAG,EAAE,kBAAK;QACV,IAAI,EAAE,mBAAM;KACb,CAAC;IAuBJ,qBAAC;CAAA,AA/BD,IA+BC;AA/BY,wCAAc","sourcesContent":["import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals';\n\nimport type { Config, MeasurementsAPI } from '@grafana/faro-core';\n\nexport class WebVitalsBasic {\n static mapping = {\n cls: onCLS,\n fcp: onFCP,\n fid: onFID,\n inp: onINP,\n lcp: onLCP,\n ttfb: onTTFB,\n };\n\n constructor(\n private pushMeasurement: MeasurementsAPI['pushMeasurement'],\n private webVitalConfig?: Config['webVitalsInstrumentation']\n ) {}\n\n initialize(): void {\n Object.entries(WebVitalsBasic.mapping).forEach(([indicator, executor]) => {\n executor(\n (metric) => {\n this.pushMeasurement({\n type: 'web-vitals',\n\n values: {\n [indicator]: metric.value,\n },\n });\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n });\n }\n}\n"]}
|
|
@@ -10,8 +10,9 @@ var instrumentationConstants_1 = require("../instrumentationConstants");
|
|
|
10
10
|
var loadStateKey = 'load_state';
|
|
11
11
|
var timeToFirstByteKey = 'time_to_first_byte';
|
|
12
12
|
var WebVitalsWithAttribution = /** @class */ (function () {
|
|
13
|
-
function WebVitalsWithAttribution(corePushMeasurement) {
|
|
13
|
+
function WebVitalsWithAttribution(corePushMeasurement, webVitalConfig) {
|
|
14
14
|
this.corePushMeasurement = corePushMeasurement;
|
|
15
|
+
this.webVitalConfig = webVitalConfig;
|
|
15
16
|
}
|
|
16
17
|
WebVitalsWithAttribution.prototype.initialize = function () {
|
|
17
18
|
this.measureCLS();
|
|
@@ -23,6 +24,7 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
23
24
|
};
|
|
24
25
|
WebVitalsWithAttribution.prototype.measureCLS = function () {
|
|
25
26
|
var _this = this;
|
|
27
|
+
var _a;
|
|
26
28
|
(0, attribution_1.onCLS)(function (metric) {
|
|
27
29
|
var _a = metric.attribution, loadState = _a.loadState, largestShiftValue = _a.largestShiftValue, largestShiftTime = _a.largestShiftTime, largestShiftTarget = _a.largestShiftTarget;
|
|
28
30
|
var values = _this.buildInitialValues(metric);
|
|
@@ -32,10 +34,11 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
32
34
|
_this.addIfPresent(context, loadStateKey, loadState);
|
|
33
35
|
_this.addIfPresent(context, 'largest_shift_target', largestShiftTarget);
|
|
34
36
|
_this.pushMeasurement(values, context);
|
|
35
|
-
});
|
|
37
|
+
}, { reportAllChanges: (_a = this.webVitalConfig) === null || _a === void 0 ? void 0 : _a.reportAllChanges });
|
|
36
38
|
};
|
|
37
39
|
WebVitalsWithAttribution.prototype.measureFCP = function () {
|
|
38
40
|
var _this = this;
|
|
41
|
+
var _a;
|
|
39
42
|
(0, attribution_1.onFCP)(function (metric) {
|
|
40
43
|
var _a = metric.attribution, firstByteToFCP = _a.firstByteToFCP, timeToFirstByte = _a.timeToFirstByte, loadState = _a.loadState;
|
|
41
44
|
var values = _this.buildInitialValues(metric);
|
|
@@ -44,10 +47,11 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
44
47
|
var context = _this.buildInitialContext(metric);
|
|
45
48
|
_this.addIfPresent(context, loadStateKey, loadState);
|
|
46
49
|
_this.pushMeasurement(values, context);
|
|
47
|
-
});
|
|
50
|
+
}, { reportAllChanges: (_a = this.webVitalConfig) === null || _a === void 0 ? void 0 : _a.reportAllChanges });
|
|
48
51
|
};
|
|
49
52
|
WebVitalsWithAttribution.prototype.measureFID = function () {
|
|
50
53
|
var _this = this;
|
|
54
|
+
var _a;
|
|
51
55
|
(0, attribution_1.onFID)(function (metric) {
|
|
52
56
|
var _a = metric.attribution, eventTime = _a.eventTime, eventTarget = _a.eventTarget, eventType = _a.eventType, loadState = _a.loadState;
|
|
53
57
|
var values = _this.buildInitialValues(metric);
|
|
@@ -57,10 +61,11 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
57
61
|
_this.addIfPresent(context, 'event_type', eventType);
|
|
58
62
|
_this.addIfPresent(context, loadStateKey, loadState);
|
|
59
63
|
_this.pushMeasurement(values, context);
|
|
60
|
-
});
|
|
64
|
+
}, { reportAllChanges: (_a = this.webVitalConfig) === null || _a === void 0 ? void 0 : _a.reportAllChanges });
|
|
61
65
|
};
|
|
62
66
|
WebVitalsWithAttribution.prototype.measureINP = function () {
|
|
63
67
|
var _this = this;
|
|
68
|
+
var _a;
|
|
64
69
|
(0, attribution_1.onINP)(function (metric) {
|
|
65
70
|
var _a = metric.attribution, interactionTime = _a.interactionTime, presentationDelay = _a.presentationDelay, inputDelay = _a.inputDelay, processingDuration = _a.processingDuration, nextPaintTime = _a.nextPaintTime, loadState = _a.loadState, interactionTarget = _a.interactionTarget, interactionType = _a.interactionType;
|
|
66
71
|
var values = _this.buildInitialValues(metric);
|
|
@@ -74,10 +79,11 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
74
79
|
_this.addIfPresent(context, 'interaction_target', interactionTarget);
|
|
75
80
|
_this.addIfPresent(context, 'interaction_type', interactionType);
|
|
76
81
|
_this.pushMeasurement(values, context);
|
|
77
|
-
});
|
|
82
|
+
}, { reportAllChanges: (_a = this.webVitalConfig) === null || _a === void 0 ? void 0 : _a.reportAllChanges });
|
|
78
83
|
};
|
|
79
84
|
WebVitalsWithAttribution.prototype.measureLCP = function () {
|
|
80
85
|
var _this = this;
|
|
86
|
+
var _a;
|
|
81
87
|
(0, attribution_1.onLCP)(function (metric) {
|
|
82
88
|
var _a = metric.attribution, elementRenderDelay = _a.elementRenderDelay, resourceLoadDelay = _a.resourceLoadDelay, resourceLoadDuration = _a.resourceLoadDuration, timeToFirstByte = _a.timeToFirstByte, element = _a.element;
|
|
83
89
|
var values = _this.buildInitialValues(metric);
|
|
@@ -88,10 +94,11 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
88
94
|
var context = _this.buildInitialContext(metric);
|
|
89
95
|
_this.addIfPresent(context, 'element', element);
|
|
90
96
|
_this.pushMeasurement(values, context);
|
|
91
|
-
});
|
|
97
|
+
}, { reportAllChanges: (_a = this.webVitalConfig) === null || _a === void 0 ? void 0 : _a.reportAllChanges });
|
|
92
98
|
};
|
|
93
99
|
WebVitalsWithAttribution.prototype.measureTTFB = function () {
|
|
94
100
|
var _this = this;
|
|
101
|
+
var _a;
|
|
95
102
|
(0, attribution_1.onTTFB)(function (metric) {
|
|
96
103
|
var _a = metric.attribution, dnsDuration = _a.dnsDuration, connectionDuration = _a.connectionDuration, requestDuration = _a.requestDuration, waitingDuration = _a.waitingDuration, cacheDuration = _a.cacheDuration;
|
|
97
104
|
var values = _this.buildInitialValues(metric);
|
|
@@ -102,7 +109,7 @@ var WebVitalsWithAttribution = /** @class */ (function () {
|
|
|
102
109
|
_this.addIfPresent(values, 'cache_duration', cacheDuration);
|
|
103
110
|
var context = _this.buildInitialContext(metric);
|
|
104
111
|
_this.pushMeasurement(values, context);
|
|
105
|
-
});
|
|
112
|
+
}, { reportAllChanges: (_a = this.webVitalConfig) === null || _a === void 0 ? void 0 : _a.reportAllChanges });
|
|
106
113
|
};
|
|
107
114
|
WebVitalsWithAttribution.prototype.buildInitialValues = function (metric) {
|
|
108
115
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webVitalsWithAttribution.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/webVitalsWithAttribution.ts"],"names":[],"mappings":"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","sourcesContent":["import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals/attribution';\nimport type { Metric } from 'web-vitals/attribution';\n\nimport { unknownString } from '@grafana/faro-core';\nimport type { MeasurementEvent, MeasurementsAPI, PushMeasurementOptions } from '@grafana/faro-core';\n\nimport { getItem, webStorageType } from '../../utils';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\ntype Values = MeasurementEvent['values'];\ntype Context = Required<PushMeasurementOptions>['context'];\n\n// duplicate keys saved in variables to save bundle size\n// refs: https://github.com/grafana/faro-web-sdk/pull/595#discussion_r1615833968\nconst loadStateKey = 'load_state';\nconst timeToFirstByteKey = 'time_to_first_byte';\n\nexport class WebVitalsWithAttribution {\n constructor(private corePushMeasurement: MeasurementsAPI['pushMeasurement']) {}\n\n initialize(): void {\n this.measureCLS();\n this.measureFCP();\n this.measureFID();\n this.measureINP();\n this.measureLCP();\n this.measureTTFB();\n }\n\n private measureCLS(): void {\n onCLS((metric) => {\n const { loadState, largestShiftValue, largestShiftTime, largestShiftTarget } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'largest_shift_value', largestShiftValue);\n this.addIfPresent(values, 'largest_shift_time', largestShiftTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'largest_shift_target', largestShiftTarget);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureFCP(): void {\n onFCP((metric) => {\n const { firstByteToFCP, timeToFirstByte, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'first_byte_to_fcp', firstByteToFCP);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureFID(): void {\n onFID((metric) => {\n const { eventTime, eventTarget, eventType, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'event_time', eventTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'event_target', eventTarget);\n this.addIfPresent(context, 'event_type', eventType);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureINP(): void {\n onINP((metric) => {\n const {\n interactionTime,\n presentationDelay,\n inputDelay,\n processingDuration,\n nextPaintTime,\n loadState,\n interactionTarget,\n interactionType,\n } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'interaction_time', interactionTime);\n this.addIfPresent(values, 'presentation_delay', presentationDelay);\n this.addIfPresent(values, 'input_delay', inputDelay);\n this.addIfPresent(values, 'processing_duration', processingDuration);\n this.addIfPresent(values, 'next_paint_time', nextPaintTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'interaction_target', interactionTarget);\n this.addIfPresent(context, 'interaction_type', interactionType);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureLCP(): void {\n onLCP((metric) => {\n const { elementRenderDelay, resourceLoadDelay, resourceLoadDuration, timeToFirstByte, element } =\n metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'element_render_delay', elementRenderDelay);\n this.addIfPresent(values, 'resource_load_delay', resourceLoadDelay);\n this.addIfPresent(values, 'resource_load_duration', resourceLoadDuration);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'element', element);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureTTFB(): void {\n onTTFB((metric) => {\n const { dnsDuration, connectionDuration, requestDuration, waitingDuration, cacheDuration } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'dns_duration', dnsDuration);\n this.addIfPresent(values, 'connection_duration', connectionDuration);\n this.addIfPresent(values, 'request_duration', requestDuration);\n this.addIfPresent(values, 'waiting_duration', waitingDuration);\n this.addIfPresent(values, 'cache_duration', cacheDuration);\n\n const context = this.buildInitialContext(metric);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private buildInitialValues(metric: Metric): Values {\n const indicator = metric.name.toLowerCase();\n return {\n [indicator]: metric.value,\n delta: metric.delta,\n };\n }\n\n private buildInitialContext(metric: Metric): Context {\n const navigationEntryId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? unknownString;\n\n return {\n id: metric.id,\n rating: metric.rating,\n navigation_type: metric.navigationType,\n navigation_entry_id: navigationEntryId,\n };\n }\n\n private pushMeasurement(values: Values, context: Context): void {\n const type = 'web-vitals';\n this.corePushMeasurement({ type, values }, { context });\n }\n\n private addIfPresent(source: Values | Context, key: string, metric?: number | string): void {\n if (metric) {\n source[key] = metric;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webVitalsWithAttribution.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/webVitalsWithAttribution.ts"],"names":[],"mappings":";;;AAAA,sDAAmF;AAGnF,gDAAmD;AAGnD,qCAAsD;AACtD,wEAAwE;AAKxE,wDAAwD;AACxD,gFAAgF;AAChF,IAAM,YAAY,GAAG,YAAY,CAAC;AAClC,IAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD;IACE,kCACU,mBAAuD,EACvD,cAAmD;QADnD,wBAAmB,GAAnB,mBAAmB,CAAoC;QACvD,mBAAc,GAAd,cAAc,CAAqC;IAC1D,CAAC;IAEJ,6CAAU,GAAV;QACE,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,6CAAU,GAAlB;QAAA,iBAiBC;;QAhBC,IAAA,mBAAK,EACH,UAAC,MAAM;YACC,IAAA,KAAyE,MAAM,CAAC,WAAW,EAAzF,SAAS,eAAA,EAAE,iBAAiB,uBAAA,EAAE,gBAAgB,sBAAA,EAAE,kBAAkB,wBAAuB,CAAC;YAElG,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;YACpE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;YAElE,IAAM,OAAO,GAAG,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACpD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;YAEvE,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;IACJ,CAAC;IAEO,6CAAU,GAAlB;QAAA,iBAgBC;;QAfC,IAAA,mBAAK,EACH,UAAC,MAAM;YACC,IAAA,KAAiD,MAAM,CAAC,WAAW,EAAjE,cAAc,oBAAA,EAAE,eAAe,qBAAA,EAAE,SAAS,eAAuB,CAAC;YAE1E,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;YAC/D,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAE/D,IAAM,OAAO,GAAG,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAEpD,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;IACJ,CAAC;IAEO,6CAAU,GAAlB;QAAA,iBAiBC;;QAhBC,IAAA,mBAAK,EACH,UAAC,MAAM;YACC,IAAA,KAAmD,MAAM,CAAC,WAAW,EAAnE,SAAS,eAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAA,EAAE,SAAS,eAAuB,CAAC;YAE5E,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAEnD,IAAM,OAAO,GAAG,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;YACxD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACpD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAEpD,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;IACJ,CAAC;IAEO,6CAAU,GAAlB;QAAA,iBA8BC;;QA7BC,IAAA,mBAAK,EACH,UAAC,MAAM;YACC,IAAA,KASF,MAAM,CAAC,WAAW,EARpB,eAAe,qBAAA,EACf,iBAAiB,uBAAA,EACjB,UAAU,gBAAA,EACV,kBAAkB,wBAAA,EAClB,aAAa,mBAAA,EACb,SAAS,eAAA,EACT,iBAAiB,uBAAA,EACjB,eAAe,qBACK,CAAC;YAEvB,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAC/D,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;YACnE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;YACrD,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;YACrE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;YAE5D,IAAM,OAAO,GAAG,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YACpD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;YACpE,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAEhE,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;IACJ,CAAC;IAEO,6CAAU,GAAlB;QAAA,iBAmBC;;QAlBC,IAAA,mBAAK,EACH,UAAC,MAAM;YACC,IAAA,KACJ,MAAM,CAAC,WAAW,EADZ,kBAAkB,wBAAA,EAAE,iBAAiB,uBAAA,EAAE,oBAAoB,0BAAA,EAAE,eAAe,qBAAA,EAAE,OAAO,aACzE,CAAC;YAErB,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;YACtE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;YACpE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;YAC1E,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAE/D,IAAM,OAAO,GAAG,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAE/C,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;IACJ,CAAC;IAEO,8CAAW,GAAnB;QAAA,iBAkBC;;QAjBC,IAAA,oBAAM,EACJ,UAAC,MAAM;YACC,IAAA,KAAuF,MAAM,CAAC,WAAW,EAAvG,WAAW,iBAAA,EAAE,kBAAkB,wBAAA,EAAE,eAAe,qBAAA,EAAE,eAAe,qBAAA,EAAE,aAAa,mBAAuB,CAAC;YAEhH,IAAM,MAAM,GAAG,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;YACvD,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;YACrE,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAC/D,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAC/D,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;YAE3D,IAAM,OAAO,GAAG,KAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAEjD,KAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,EACD,EAAE,gBAAgB,EAAE,MAAA,IAAI,CAAC,cAAc,0CAAE,gBAAgB,EAAE,CAC5D,CAAC;IACJ,CAAC;IAEO,qDAAkB,GAA1B,UAA2B,MAAc;;QACvC,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C;YACE,GAAC,SAAS,IAAG,MAAM,CAAC,KAAK;YACzB,QAAK,GAAE,MAAM,CAAC,KAAK;eACnB;IACJ,CAAC;IAEO,sDAAmB,GAA3B,UAA4B,MAAc;;QACxC,IAAM,iBAAiB,GAAG,MAAA,IAAA,eAAO,EAAC,oDAAyB,EAAE,sBAAc,CAAC,OAAO,CAAC,mCAAI,yBAAa,CAAC;QAEtG,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,cAAc;YACtC,mBAAmB,EAAE,iBAAiB;SACvC,CAAC;IACJ,CAAC;IAEO,kDAAe,GAAvB,UAAwB,MAAc,EAAE,OAAgB;QACtD,IAAM,IAAI,GAAG,YAAY,CAAC;QAC1B,IAAI,CAAC,mBAAmB,CAAC,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,EAAE,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;IAC1D,CAAC;IAEO,+CAAY,GAApB,UAAqB,MAAwB,EAAE,GAAW,EAAE,MAAwB;QAClF,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;SACtB;IACH,CAAC;IACH,+BAAC;AAAD,CAAC,AA7KD,IA6KC;AA7KY,4DAAwB","sourcesContent":["import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals/attribution';\nimport type { Metric } from 'web-vitals/attribution';\n\nimport { unknownString } from '@grafana/faro-core';\nimport type { Config, MeasurementEvent, MeasurementsAPI, PushMeasurementOptions } from '@grafana/faro-core';\n\nimport { getItem, webStorageType } from '../../utils';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\ntype Values = MeasurementEvent['values'];\ntype Context = Required<PushMeasurementOptions>['context'];\n\n// duplicate keys saved in variables to save bundle size\n// refs: https://github.com/grafana/faro-web-sdk/pull/595#discussion_r1615833968\nconst loadStateKey = 'load_state';\nconst timeToFirstByteKey = 'time_to_first_byte';\n\nexport class WebVitalsWithAttribution {\n constructor(\n private corePushMeasurement: MeasurementsAPI['pushMeasurement'],\n private webVitalConfig?: Config['webVitalsInstrumentation']\n ) {}\n\n initialize(): void {\n this.measureCLS();\n this.measureFCP();\n this.measureFID();\n this.measureINP();\n this.measureLCP();\n this.measureTTFB();\n }\n\n private measureCLS(): void {\n onCLS(\n (metric) => {\n const { loadState, largestShiftValue, largestShiftTime, largestShiftTarget } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'largest_shift_value', largestShiftValue);\n this.addIfPresent(values, 'largest_shift_time', largestShiftTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'largest_shift_target', largestShiftTarget);\n\n this.pushMeasurement(values, context);\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n }\n\n private measureFCP(): void {\n onFCP(\n (metric) => {\n const { firstByteToFCP, timeToFirstByte, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'first_byte_to_fcp', firstByteToFCP);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n }\n\n private measureFID(): void {\n onFID(\n (metric) => {\n const { eventTime, eventTarget, eventType, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'event_time', eventTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'event_target', eventTarget);\n this.addIfPresent(context, 'event_type', eventType);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n }\n\n private measureINP(): void {\n onINP(\n (metric) => {\n const {\n interactionTime,\n presentationDelay,\n inputDelay,\n processingDuration,\n nextPaintTime,\n loadState,\n interactionTarget,\n interactionType,\n } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'interaction_time', interactionTime);\n this.addIfPresent(values, 'presentation_delay', presentationDelay);\n this.addIfPresent(values, 'input_delay', inputDelay);\n this.addIfPresent(values, 'processing_duration', processingDuration);\n this.addIfPresent(values, 'next_paint_time', nextPaintTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'interaction_target', interactionTarget);\n this.addIfPresent(context, 'interaction_type', interactionType);\n\n this.pushMeasurement(values, context);\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n }\n\n private measureLCP(): void {\n onLCP(\n (metric) => {\n const { elementRenderDelay, resourceLoadDelay, resourceLoadDuration, timeToFirstByte, element } =\n metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'element_render_delay', elementRenderDelay);\n this.addIfPresent(values, 'resource_load_delay', resourceLoadDelay);\n this.addIfPresent(values, 'resource_load_duration', resourceLoadDuration);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'element', element);\n\n this.pushMeasurement(values, context);\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n }\n\n private measureTTFB(): void {\n onTTFB(\n (metric) => {\n const { dnsDuration, connectionDuration, requestDuration, waitingDuration, cacheDuration } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'dns_duration', dnsDuration);\n this.addIfPresent(values, 'connection_duration', connectionDuration);\n this.addIfPresent(values, 'request_duration', requestDuration);\n this.addIfPresent(values, 'waiting_duration', waitingDuration);\n this.addIfPresent(values, 'cache_duration', cacheDuration);\n\n const context = this.buildInitialContext(metric);\n\n this.pushMeasurement(values, context);\n },\n { reportAllChanges: this.webVitalConfig?.reportAllChanges }\n );\n }\n\n private buildInitialValues(metric: Metric): Values {\n const indicator = metric.name.toLowerCase();\n return {\n [indicator]: metric.value,\n delta: metric.delta,\n };\n }\n\n private buildInitialContext(metric: Metric): Context {\n const navigationEntryId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? unknownString;\n\n return {\n id: metric.id,\n rating: metric.rating,\n navigation_type: metric.navigationType,\n navigation_entry_id: navigationEntryId,\n };\n }\n\n private pushMeasurement(values: Values, context: Context): void {\n const type = 'web-vitals';\n this.corePushMeasurement({ type, values }, { context });\n }\n\n private addIfPresent(source: Values | Context, key: string, metric?: number | string): void {\n if (metric) {\n source[key] = metric;\n }\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createInternalLogger, defaultBatchingConfig, defaultGlobalObjectKey, defaultInternalLoggerLevel, defaultLogArgsSerializer, defaultUnpatchedConsole, isObject, } from '@grafana/faro-core';
|
|
1
|
+
import { createInternalLogger, defaultBatchingConfig, defaultGlobalObjectKey, defaultInternalLoggerLevel, defaultLogArgsSerializer, defaultUnpatchedConsole, isEmpty, isObject, } from '@grafana/faro-core';
|
|
2
2
|
import { defaultEventDomain } from '../consts';
|
|
3
3
|
import { parseStacktrace } from '../instrumentations';
|
|
4
4
|
import { defaultSessionTrackingConfig } from '../instrumentations/session';
|
|
@@ -26,9 +26,9 @@ export function makeCoreConfig(browserConfig) {
|
|
|
26
26
|
else {
|
|
27
27
|
internalLogger.error('either "url" or "transports" must be defined');
|
|
28
28
|
}
|
|
29
|
-
const { app, batching, beforeSend, consoleInstrumentation, ignoreErrors, sessionTracking, trackResources, trackWebVitalsAttribution, user, view,
|
|
29
|
+
const { app, batching, beforeSend, consoleInstrumentation, ignoreErrors, sessionTracking, trackResources, trackWebVitalsAttribution, user, view, geoLocationTracking,
|
|
30
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;
|
|
31
|
+
dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, webVitalsInstrumentation, } = browserConfig;
|
|
32
32
|
return {
|
|
33
33
|
app,
|
|
34
34
|
batching: Object.assign(Object.assign({}, defaultBatchingConfig), batching),
|
|
@@ -49,12 +49,13 @@ export function makeCoreConfig(browserConfig) {
|
|
|
49
49
|
ignoreErrors,
|
|
50
50
|
// ignore cloud collector urls by default. These are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
51
51
|
ignoreUrls: ((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []).concat([/\/collect(?:\/[\w]*)?$/]),
|
|
52
|
-
sessionTracking: Object.assign(Object.assign({}, defaultSessionTrackingConfig), sessionTracking),
|
|
52
|
+
sessionTracking: Object.assign(Object.assign(Object.assign({}, defaultSessionTrackingConfig), sessionTracking), crateSessionMeta({ geoLocationTracking, sessionTracking })),
|
|
53
53
|
user,
|
|
54
54
|
view,
|
|
55
55
|
trackResources,
|
|
56
56
|
trackWebVitalsAttribution,
|
|
57
57
|
consoleInstrumentation,
|
|
58
|
+
webVitalsInstrumentation,
|
|
58
59
|
};
|
|
59
60
|
}
|
|
60
61
|
function createDefaultMetas(browserConfig) {
|
|
@@ -71,4 +72,17 @@ function createDefaultMetas(browserConfig) {
|
|
|
71
72
|
}
|
|
72
73
|
return initialMetas;
|
|
73
74
|
}
|
|
75
|
+
function crateSessionMeta({ geoLocationTracking, sessionTracking, }) {
|
|
76
|
+
var _a;
|
|
77
|
+
const overrides = {};
|
|
78
|
+
if ((geoLocationTracking === null || geoLocationTracking === void 0 ? void 0 : geoLocationTracking.enabled) != null) {
|
|
79
|
+
overrides.geoLocationTrackingEnabled = geoLocationTracking.enabled;
|
|
80
|
+
}
|
|
81
|
+
if (isEmpty(overrides)) {
|
|
82
|
+
return {};
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
session: Object.assign(Object.assign({}, ((_a = sessionTracking === null || sessionTracking === void 0 ? void 0 : sessionTracking.session) !== null && _a !== void 0 ? _a : {})), { overrides }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
74
88
|
//# 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,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,UAAU,cAAc,CAAC,aAA4B;;IACzD,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,MAAM,cAAc,GAAG,oBAAoB,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAE/G,IAAI,aAAa,CAAC,UAAU,EAAE;QAC5B,IAAI,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE;YAC7C,cAAc,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;SAC9F;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;KAC9C;SAAM,IAAI,aAAa,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,IAAI,CACb,IAAI,cAAc,CAAC;YACjB,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B,CAAC,CACH,CAAC;KACH;SAAM;QACL,cAAc,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;KACtE;IAED,MAAM,EACJ,GAAG,EACH,QAAQ,EACR,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,IAAI,EACJ,IAAI;
|
|
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 isEmpty,\n isObject,\n} from '@grafana/faro-core';\nimport type { Config, MetaItem, MetaSession, 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 geoLocationTracking,\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 }: 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 ...crateSessionMeta({ geoLocationTracking, sessionTracking }),\n },\n user,\n view,\n trackResources,\n trackWebVitalsAttribution,\n consoleInstrumentation,\n webVitalsInstrumentation,\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 geoLocationTracking,\n sessionTracking,\n}: Pick<BrowserConfig, 'geoLocationTracking' | 'sessionTracking'>): { session: MetaSession } | {} {\n const overrides: MetaSession['overrides'] = {};\n\n if (geoLocationTracking?.enabled != null) {\n overrides.geoLocationTrackingEnabled = geoLocationTracking.enabled;\n }\n\n if (isEmpty(overrides)) {\n return {};\n }\n\n return {\n session: {\n ...(sessionTracking?.session ?? {}),\n overrides,\n },\n };\n}\n"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { initializeFaro } from './initialize';
|
|
|
4
4
|
export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, } from './instrumentations';
|
|
5
5
|
export { browserMeta, createSession, sdkMeta } from './metas';
|
|
6
6
|
export { ConsoleTransport, FetchTransport } from './transports';
|
|
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';
|
|
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, isEmpty, InternalLoggerLevel, LogLevel, noop, setInternalFaroOnGlobalObject, TransportItemType, transportItemTypeToBodyKey, VERSION, EVENT_CLICK, EVENT_NAVIGATION, EVENT_ROUTE_CHANGE, EVENT_SESSION_EXTEND, EVENT_SESSION_RESUME, EVENT_SESSION_START, EVENT_VIEW_CHANGED, } 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';
|
|
9
9
|
export { getIgnoreUrls } from './utils/url';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|