@grafana/faro-web-sdk 1.18.1 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/faro-web-sdk.iife.js +1 -1
- package/dist/bundle/types/config/types.d.ts +1 -0
- package/dist/bundle/types/index.d.ts +3 -3
- package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/csp/index.d.ts +1 -0
- package/dist/bundle/types/instrumentations/csp/instrumentation.d.ts +10 -0
- 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 +1 -1
- package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/const.d.ts +1 -0
- package/dist/bundle/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/bundle/types/instrumentations/userActions/types.d.ts +2 -2
- 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/cjs/config/getWebInstrumentations.js +3 -0
- package/dist/cjs/config/getWebInstrumentations.js.map +1 -1
- package/dist/cjs/config/makeCoreConfig.js +6 -5
- package/dist/cjs/config/makeCoreConfig.js.map +1 -1
- package/dist/cjs/config/types.js.map +1 -1
- package/dist/cjs/index.js +5 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/instrumentations/csp/index.js +6 -0
- package/dist/cjs/instrumentations/csp/index.js.map +1 -0
- package/dist/cjs/instrumentations/csp/instrumentation.js +40 -0
- package/dist/cjs/instrumentations/csp/instrumentation.js.map +1 -0
- package/dist/cjs/instrumentations/errors/stackFrames/const.js +1 -1
- package/dist/cjs/instrumentations/errors/stackFrames/const.js.map +1 -1
- package/dist/cjs/instrumentations/index.js +3 -1
- package/dist/cjs/instrumentations/index.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/const.js +2 -1
- package/dist/cjs/instrumentations/userActions/const.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/instrumentation.js +2 -1
- package/dist/cjs/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js +2 -3
- package/dist/cjs/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/cjs/instrumentations/userActions/types.js.map +1 -1
- package/dist/esm/config/getWebInstrumentations.js +4 -1
- package/dist/esm/config/getWebInstrumentations.js.map +1 -1
- package/dist/esm/config/makeCoreConfig.js +9 -5
- package/dist/esm/config/makeCoreConfig.js.map +1 -1
- package/dist/esm/config/types.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrumentations/csp/index.js +2 -0
- package/dist/esm/instrumentations/csp/index.js.map +1 -0
- package/dist/esm/instrumentations/csp/instrumentation.js +18 -0
- package/dist/esm/instrumentations/csp/instrumentation.js.map +1 -0
- package/dist/esm/instrumentations/errors/stackFrames/const.js +1 -1
- package/dist/esm/instrumentations/errors/stackFrames/const.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/userActions/const.js +1 -0
- package/dist/esm/instrumentations/userActions/const.js.map +1 -1
- package/dist/esm/instrumentations/userActions/instrumentation.js +2 -1
- package/dist/esm/instrumentations/userActions/instrumentation.js.map +1 -1
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js +3 -4
- package/dist/esm/instrumentations/userActions/processUserActionEventHandler.js.map +1 -1
- package/dist/esm/instrumentations/userActions/types.js.map +1 -1
- package/dist/types/config/types.d.ts +1 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/csp/index.d.ts +1 -0
- package/dist/types/instrumentations/csp/instrumentation.d.ts +10 -0
- 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 +1 -1
- package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/const.d.ts +1 -0
- package/dist/types/instrumentations/userActions/instrumentation.d.ts +1 -1
- package/dist/types/instrumentations/userActions/types.d.ts +2 -2
- 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/package.json +9 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseInstrumentation } from '@grafana/faro-core';
|
|
2
2
|
export declare class UserActionInstrumentation extends BaseInstrumentation {
|
|
3
3
|
readonly name = "@grafana/faro-web-sdk:instrumentation-user-action";
|
|
4
|
-
readonly version = "1.
|
|
4
|
+
readonly version = "1.19.0";
|
|
5
5
|
initialize(): void;
|
|
6
6
|
}
|
|
7
7
|
export declare function startUserAction(name: string, attributes?: Record<string, string>): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MESSAGE_TYPE_DOM_MUTATION, MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START } from './const';
|
|
1
|
+
import type { MESSAGE_TYPE_DOM_MUTATION, MESSAGE_TYPE_HTTP_REQUEST_END, MESSAGE_TYPE_HTTP_REQUEST_START, userActionStartByApiCallEventName } from './const';
|
|
2
2
|
export type DomMutationMessage = {
|
|
3
3
|
type: typeof MESSAGE_TYPE_DOM_MUTATION;
|
|
4
4
|
};
|
|
@@ -20,6 +20,6 @@ export type HttpRequestEndMessage = {
|
|
|
20
20
|
export type ApiEvent = {
|
|
21
21
|
name: string;
|
|
22
22
|
attributes?: Record<string, string>;
|
|
23
|
-
type:
|
|
23
|
+
type: typeof userActionStartByApiCallEventName;
|
|
24
24
|
};
|
|
25
25
|
export {};
|
|
@@ -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.
|
|
4
|
+
readonly version = "1.19.0";
|
|
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.
|
|
4
|
+
readonly version = "1.19.0";
|
|
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.
|
|
7
|
+
readonly version = "1.19.0";
|
|
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.
|
|
7
|
+
readonly version = "1.19.0";
|
|
8
8
|
promiseBuffer: PromiseBuffer<Response | void>;
|
|
9
9
|
private readonly rateLimitBackoffMs;
|
|
10
10
|
private readonly getNow;
|
|
@@ -15,6 +15,9 @@ function getWebInstrumentations(options) {
|
|
|
15
15
|
// unshift to ensure that initialization starts before the other instrumentations
|
|
16
16
|
instrumentations.unshift(new instrumentations_1.PerformanceInstrumentation());
|
|
17
17
|
}
|
|
18
|
+
if (options.enableContentSecurityPolicyInstrumentation !== false) {
|
|
19
|
+
instrumentations.push(new instrumentations_1.CSPInstrumentation());
|
|
20
|
+
}
|
|
18
21
|
if (options.captureConsole !== false) {
|
|
19
22
|
instrumentations.push(new instrumentations_1.ConsoleInstrumentation({
|
|
20
23
|
disabledLevels: options.captureConsoleDisabledLevels,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":";;AAeA,wDA2BC;AAxCD,wDAS6B;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,CAAC;QACvD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,6CAA0B,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,0CAA0C,KAAK,KAAK,EAAE,CAAC;QACjE,gBAAgB,CAAC,IAAI,CAAC,IAAI,qCAAkB,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,IAAI,CACnB,IAAI,yCAAsB,CAAC;YACzB,cAAc,EAAE,OAAO,CAAC,4BAA4B;SACrD,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["import type { Instrumentation } from '@grafana/faro-core';\n\nimport {\n ConsoleInstrumentation,\n CSPInstrumentation,\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.enableContentSecurityPolicyInstrumentation !== false) {\n instrumentations.push(new CSPInstrumentation());\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"]}
|
|
@@ -65,12 +65,13 @@ function makeCoreConfig(browserConfig) {
|
|
|
65
65
|
// properties with default values
|
|
66
66
|
_b = browserConfig.dedupe,
|
|
67
67
|
// properties with default values
|
|
68
|
-
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, _o = browserConfig.trackUserActionsPreview, trackUserActionsPreview = _o === void 0 ? false : _o, _p = browserConfig.trackUserActionsDataAttributeName, trackUserActionsDataAttributeName = _p === void 0 ? const_1.userActionDataAttribute : _p,
|
|
68
|
+
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, _o = browserConfig.trackUserActionsPreview, trackUserActionsPreview = _o === void 0 ? false : _o, _p = browserConfig.trackUserActionsDataAttributeName, trackUserActionsDataAttributeName = _p === void 0 ? const_1.userActionDataAttribute : _p, browserConfigUrl = browserConfig.url,
|
|
69
69
|
// Properties without default values or which aren't used to create derived config
|
|
70
|
-
restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "trackUserActionsPreview", "trackUserActionsDataAttributeName"]);
|
|
71
|
-
return __assign(__assign({}, restProperties), { batching: __assign(__assign({}, faro_core_1.defaultBatchingConfig), browserConfig.batching), dedupe: dedupe, globalObjectKey: globalObjectKey, instrumentations: getFilteredInstrumentations(instrumentations, browserConfig), internalLoggerLevel: internalLoggerLevel, isolate: isolate, logArgsSerializer: logArgsSerializer, metas: metas, parseStacktrace: instrumentations_1.parseStacktrace, paused: paused, preventGlobalExposure: preventGlobalExposure, transports: transports, unpatchedConsole: unpatchedConsole, eventDomain: eventDomain,
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "trackUserActionsPreview", "trackUserActionsDataAttributeName", "url"]);
|
|
71
|
+
return __assign(__assign({}, restProperties), { batching: __assign(__assign({}, faro_core_1.defaultBatchingConfig), browserConfig.batching), dedupe: dedupe, globalObjectKey: globalObjectKey, instrumentations: getFilteredInstrumentations(instrumentations, browserConfig), internalLoggerLevel: internalLoggerLevel, isolate: isolate, logArgsSerializer: logArgsSerializer, metas: metas, parseStacktrace: instrumentations_1.parseStacktrace, paused: paused, preventGlobalExposure: preventGlobalExposure, transports: transports, unpatchedConsole: unpatchedConsole, eventDomain: eventDomain, ignoreUrls: __spreadArray(__spreadArray(__spreadArray([], ((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []), true), (browserConfigUrl ? [browserConfigUrl] : []), true), [
|
|
72
|
+
// Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
73
|
+
/\/collect(?:\/[\w]*)?$/,
|
|
74
|
+
], false), sessionTracking: __assign(__assign(__assign({}, session_1.defaultSessionTrackingConfig), browserConfig.sessionTracking), crateSessionMeta({
|
|
74
75
|
trackGeolocation: browserConfig.trackGeolocation,
|
|
75
76
|
sessionTracking: browserConfig.sessionTracking,
|
|
76
77
|
})), trackUserActionsPreview: trackUserActionsPreview, trackUserActionsDataAttributeName: trackUserActionsDataAttributeName });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,
|
|
1
|
+
{"version":3,"file":"makeCoreConfig.js","sourceRoot":"","sources":["../../../src/config/makeCoreConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createInternalLogger,\n defaultBatchingConfig,\n defaultGlobalObjectKey,\n defaultInternalLoggerLevel,\n defaultLogArgsSerializer,\n defaultUnpatchedConsole,\n isBoolean,\n isEmpty,\n isObject,\n} from '@grafana/faro-core';\nimport type { Config, Instrumentation, MetaItem, MetaSession, Transport } from '@grafana/faro-core';\n\nimport { defaultEventDomain } from '../consts';\nimport { parseStacktrace } from '../instrumentations';\nimport { defaultSessionTrackingConfig } from '../instrumentations/session';\nimport { userActionDataAttribute } from '../instrumentations/userActions/const';\nimport { browserMeta } from '../metas';\nimport { k6Meta } from '../metas/k6';\nimport { createPageMeta } from '../metas/page';\nimport { FetchTransport } from '../transports';\n\nimport { getWebInstrumentations } from './getWebInstrumentations';\nimport type { BrowserConfig } from './types';\n\nexport function makeCoreConfig(browserConfig: BrowserConfig): Config {\n const transports: Transport[] = [];\n\n const internalLogger = createInternalLogger(browserConfig.unpatchedConsole, browserConfig.internalLoggerLevel);\n\n if (browserConfig.transports) {\n if (browserConfig.url || browserConfig.apiKey) {\n internalLogger.error('if \"transports\" is defined, \"url\" and \"apiKey\" should not be defined');\n }\n\n transports.push(...browserConfig.transports);\n } else if (browserConfig.url) {\n transports.push(\n new FetchTransport({\n url: browserConfig.url,\n apiKey: browserConfig.apiKey,\n })\n );\n } else {\n internalLogger.error('either \"url\" or \"transports\" must be defined');\n }\n\n const {\n // properties with default values\n dedupe = true,\n eventDomain = defaultEventDomain,\n globalObjectKey = defaultGlobalObjectKey,\n instrumentations = getWebInstrumentations(),\n internalLoggerLevel = defaultInternalLoggerLevel,\n isolate = false,\n logArgsSerializer = defaultLogArgsSerializer,\n metas = createDefaultMetas(browserConfig),\n paused = false,\n preventGlobalExposure = false,\n unpatchedConsole = defaultUnpatchedConsole,\n trackUserActionsPreview = false,\n trackUserActionsDataAttributeName = userActionDataAttribute,\n url: browserConfigUrl,\n // Properties without default values or which aren't used to create derived config\n ...restProperties\n }: BrowserConfig = browserConfig;\n\n return {\n ...restProperties,\n\n batching: {\n ...defaultBatchingConfig,\n ...browserConfig.batching,\n },\n dedupe: dedupe,\n globalObjectKey,\n instrumentations: getFilteredInstrumentations(instrumentations, browserConfig),\n internalLoggerLevel,\n isolate,\n logArgsSerializer,\n metas,\n parseStacktrace,\n paused,\n preventGlobalExposure,\n transports,\n unpatchedConsole,\n eventDomain,\n ignoreUrls: [\n ...(browserConfig.ignoreUrls ?? []),\n // ignore configured cloud collector url by default\n ...(browserConfigUrl ? [browserConfigUrl] : []),\n // Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.\n /\\/collect(?:\\/[\\w]*)?$/,\n ],\n sessionTracking: {\n ...defaultSessionTrackingConfig,\n ...browserConfig.sessionTracking,\n ...crateSessionMeta({\n trackGeolocation: browserConfig.trackGeolocation,\n sessionTracking: browserConfig.sessionTracking,\n }),\n },\n trackUserActionsPreview,\n trackUserActionsDataAttributeName,\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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Config, LogLevel } from '@grafana/faro-core';\n\nexport interface BrowserConfig extends Partial<Omit<Config, 'app' | 'parseStacktrace'>>, Pick<Config, 'app'> {\n url?: string;\n apiKey?: string;\n}\n\nexport interface GetWebInstrumentationsOptions {\n captureConsole?: boolean;\n captureConsoleDisabledLevels?: LogLevel[];\n enablePerformanceInstrumentation?: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Config, LogLevel } from '@grafana/faro-core';\n\nexport interface BrowserConfig extends Partial<Omit<Config, 'app' | 'parseStacktrace'>>, Pick<Config, 'app'> {\n url?: string;\n apiKey?: string;\n}\n\nexport interface GetWebInstrumentationsOptions {\n captureConsole?: boolean;\n captureConsoleDisabledLevels?: LogLevel[];\n enablePerformanceInstrumentation?: boolean;\n enableContentSecurityPolicyInstrumentation?: boolean;\n}\n"]}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
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.CSPInstrumentation = 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.getUrlFromResource = 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.unknownString = exports.USER_ACTION_START = exports.USER_ACTION_HALT = exports.USER_ACTION_END = exports.USER_ACTION_CANCEL = 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 = exports.isEventDefined = void 0;
|
|
5
|
+
exports.startUserAction = exports.userActionDataAttribute = void 0;
|
|
5
6
|
var config_1 = require("./config");
|
|
6
7
|
Object.defineProperty(exports, "getWebInstrumentations", { enumerable: true, get: function () { return config_1.getWebInstrumentations; } });
|
|
7
8
|
Object.defineProperty(exports, "makeCoreConfig", { enumerable: true, get: function () { return config_1.makeCoreConfig; } });
|
|
@@ -20,6 +21,7 @@ Object.defineProperty(exports, "ViewInstrumentation", { enumerable: true, get: f
|
|
|
20
21
|
Object.defineProperty(exports, "WebVitalsInstrumentation", { enumerable: true, get: function () { return instrumentations_1.WebVitalsInstrumentation; } });
|
|
21
22
|
Object.defineProperty(exports, "SessionInstrumentation", { enumerable: true, get: function () { return instrumentations_1.SessionInstrumentation; } });
|
|
22
23
|
Object.defineProperty(exports, "PerformanceInstrumentation", { enumerable: true, get: function () { return instrumentations_1.PerformanceInstrumentation; } });
|
|
24
|
+
Object.defineProperty(exports, "CSPInstrumentation", { enumerable: true, get: function () { return instrumentations_1.CSPInstrumentation; } });
|
|
23
25
|
Object.defineProperty(exports, "UserActionInstrumentation", { enumerable: true, get: function () { return instrumentations_1.UserActionInstrumentation; } });
|
|
24
26
|
var metas_1 = require("./metas");
|
|
25
27
|
Object.defineProperty(exports, "browserMeta", { enumerable: true, get: function () { return metas_1.browserMeta; } });
|
|
@@ -96,6 +98,7 @@ Object.defineProperty(exports, "apiMessageBus", { enumerable: true, get: functio
|
|
|
96
98
|
Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return faro_core_1.Observable; } });
|
|
97
99
|
Object.defineProperty(exports, "USER_ACTION_CANCEL", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_CANCEL; } });
|
|
98
100
|
Object.defineProperty(exports, "USER_ACTION_END", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_END; } });
|
|
101
|
+
Object.defineProperty(exports, "USER_ACTION_HALT", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_HALT; } });
|
|
99
102
|
Object.defineProperty(exports, "USER_ACTION_START", { enumerable: true, get: function () { return faro_core_1.USER_ACTION_START; } });
|
|
100
103
|
Object.defineProperty(exports, "unknownString", { enumerable: true, get: function () { return faro_core_1.unknownString; } });
|
|
101
104
|
var session_1 = require("./instrumentations/session");
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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 CSPInstrumentation,\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 USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n unknownString,\n} from '@grafana/faro-core';\n\nexport type {\n Faro,\n API,\n APIEvent,\n BaseObject,\n BaseObjectKey,\n BaseObjectPrimitiveValue,\n BaseObjectValue,\n BeforeSendHook,\n BufferItem,\n Config,\n EventAttributes,\n EventEvent,\n EventsAPI,\n ExceptionEvent,\n ExceptionEventExtended,\n ExceptionStackFrame,\n ExceptionsAPI,\n ExtendedError,\n Extension,\n GlobalObject,\n Instrumentation,\n Instrumentations,\n InternalLogger,\n LogContext,\n LogEvent,\n LogsAPI,\n MeasurementEvent,\n MeasurementsAPI,\n Meta,\n MetaAPI,\n MetaApp,\n MetaAttributes,\n MetaBrowser,\n MetaGetter,\n MetaItem,\n MetaPage,\n Metas,\n MetaSDK,\n MetaSDKIntegration,\n MetaSession,\n MetaUser,\n MetaView,\n OTELApi,\n Patterns,\n PromiseBuffer,\n PromiseBufferOptions,\n PromiseProducer,\n PushErrorOptions,\n PushLogOptions,\n PushMeasurementOptions,\n Stacktrace,\n StacktraceParser,\n TraceContext,\n TraceEvent,\n TracesAPI,\n Transport,\n TransportBody,\n TransportItem,\n TransportItemPayload,\n Transports,\n UnpatchedConsole,\n ApiMessageBusMessages,\n UserActionStartMessage,\n UserActionEndMessage,\n UserActionCancelMessage,\n UserActionHaltMessage,\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, getUrlFromResource } from './utils/url';\n\nexport { userActionDataAttribute, startUserAction } from './instrumentations/userActions';\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CSPInstrumentation = void 0;
|
|
4
|
+
var instrumentation_1 = require("./instrumentation");
|
|
5
|
+
Object.defineProperty(exports, "CSPInstrumentation", { enumerable: true, get: function () { return instrumentation_1.CSPInstrumentation; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/instrumentations/csp/index.ts"],"names":[],"mappings":";;;AAAA,qDAAuD;AAA9C,qHAAA,kBAAkB,OAAA","sourcesContent":["export { CSPInstrumentation } from './instrumentation';\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.CSPInstrumentation = void 0;
|
|
19
|
+
var faro_core_1 = require("@grafana/faro-core");
|
|
20
|
+
var CSPInstrumentation = /** @class */ (function (_super) {
|
|
21
|
+
__extends(CSPInstrumentation, _super);
|
|
22
|
+
function CSPInstrumentation() {
|
|
23
|
+
var _this = _super.call(this) || this;
|
|
24
|
+
_this.name = '@grafana/faro-web-sdk:instrumentation-csp';
|
|
25
|
+
_this.version = faro_core_1.VERSION;
|
|
26
|
+
return _this;
|
|
27
|
+
}
|
|
28
|
+
CSPInstrumentation.prototype.initialize = function () {
|
|
29
|
+
document.addEventListener('securitypolicyviolation', this.securitypolicyviolationHandler.bind(this));
|
|
30
|
+
};
|
|
31
|
+
CSPInstrumentation.prototype.destroy = function () {
|
|
32
|
+
document.removeEventListener('securitypolicyviolation', this.securitypolicyviolationHandler);
|
|
33
|
+
};
|
|
34
|
+
CSPInstrumentation.prototype.securitypolicyviolationHandler = function (ev) {
|
|
35
|
+
this.api.pushEvent('securitypolicyviolation', (0, faro_core_1.stringifyObjectValues)(ev));
|
|
36
|
+
};
|
|
37
|
+
return CSPInstrumentation;
|
|
38
|
+
}(faro_core_1.BaseInstrumentation));
|
|
39
|
+
exports.CSPInstrumentation = CSPInstrumentation;
|
|
40
|
+
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/csp/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,gDAAyF;AAGzF;IAAwC,sCAAmB;IAIzD;QACE,YAAA,MAAK,WAAE,SAAC;QAJD,UAAI,GAAG,2CAA2C,CAAC;QACnD,aAAO,GAAG,mBAAO,CAAC;;IAI3B,CAAC;IAED,uCAAU,GAAV;QACE,QAAQ,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,oCAAO,GAAP;QACE,QAAQ,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC/F,CAAC;IAEM,2DAA8B,GAArC,UAAsC,EAAgC;QACpE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,EAAE,IAAA,iCAAqB,EAAC,EAAyB,CAAC,CAAC,CAAC;IAClG,CAAC;IACH,yBAAC;AAAD,CAAC,AAnBD,CAAwC,+BAAmB,GAmB1D;AAnBY,gDAAkB","sourcesContent":["import { BaseInstrumentation, stringifyObjectValues, VERSION } from '@grafana/faro-core';\nimport type { Instrumentation } from '@grafana/faro-core';\n\nexport class CSPInstrumentation extends BaseInstrumentation implements Instrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-csp';\n readonly version = VERSION;\n\n constructor() {\n super();\n }\n\n initialize() {\n document.addEventListener('securitypolicyviolation', this.securitypolicyviolationHandler.bind(this));\n }\n\n destroy() {\n document.removeEventListener('securitypolicyviolation', this.securitypolicyviolationHandler);\n }\n\n public securitypolicyviolationHandler(ev: SecurityPolicyViolationEvent) {\n this.api.pushEvent('securitypolicyviolation', stringifyObjectValues(ev as Record<string, any>));\n }\n}\n"]}
|
|
@@ -5,7 +5,7 @@ exports.newLineString = '\n';
|
|
|
5
5
|
exports.evalString = 'eval';
|
|
6
6
|
exports.unknownSymbolString = '?';
|
|
7
7
|
exports.atString = '@';
|
|
8
|
-
exports.webkitLineRegex = /^\s*at (?:(
|
|
8
|
+
exports.webkitLineRegex = /^\s*at (?:(.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
|
|
9
9
|
exports.webkitEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
|
|
10
10
|
exports.webkitEvalString = 'eval';
|
|
11
11
|
exports.webkitAddressAtString = 'address at ';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,UAAU,GAAG,MAAM,CAAC;AACpB,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAC1B,QAAA,QAAQ,GAAG,GAAG,CAAC;AAEf,QAAA,eAAe,GAC1B,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,UAAU,GAAG,MAAM,CAAC;AACpB,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAC1B,QAAA,QAAQ,GAAG,GAAG,CAAC;AAEf,QAAA,eAAe,GAC1B,6KAA6K,CAAC;AACnK,QAAA,eAAe,GAAG,+BAA+B,CAAC;AAClD,QAAA,gBAAgB,GAAG,MAAM,CAAC;AAC1B,QAAA,qBAAqB,GAAG,aAAa,CAAC;AACtC,QAAA,2BAA2B,GAAG,6BAAqB,CAAC,MAAM,CAAC;AAE3D,QAAA,gBAAgB,GAC3B,oOAAoO,CAAC;AAC1N,QAAA,gBAAgB,GAAG,+CAA+C,CAAC;AACnE,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAE9B,QAAA,qBAAqB,GAAG,kBAAkB,CAAC;AAC3C,QAAA,wBAAwB,GAAG,sBAAsB,CAAC;AAElD,QAAA,kBAAkB,GAAG,6BAA6B,CAAC","sourcesContent":["export const newLineString = '\\n';\nexport const evalString = 'eval';\nexport const unknownSymbolString = '?';\nexport const atString = '@';\n\nexport const webkitLineRegex =\n /^\\s*at (?:(.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nexport const webkitEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nexport const webkitEvalString = 'eval';\nexport const webkitAddressAtString = 'address at ';\nexport const webkitAddressAtStringLength = webkitAddressAtString.length;\n\nexport const firefoxLineRegex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|safari-extension|safari-web-extension|capacitor)?:\\/.*?|\\[native code]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nexport const firefoxEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nexport const firefoxEvalString = ' > eval';\n\nexport const safariExtensionString = 'safari-extension';\nexport const safariWebExtensionString = 'safari-web-extension';\n\nexport const reactMinifiedRegex = /Minified React error #\\d+;/i;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.startUserAction = 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;
|
|
3
|
+
exports.CSPInstrumentation = exports.startUserAction = 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");
|
|
@@ -29,4 +29,6 @@ var userActions_1 = require("./userActions");
|
|
|
29
29
|
Object.defineProperty(exports, "UserActionInstrumentation", { enumerable: true, get: function () { return userActions_1.UserActionInstrumentation; } });
|
|
30
30
|
Object.defineProperty(exports, "userActionDataAttribute", { enumerable: true, get: function () { return userActions_1.userActionDataAttribute; } });
|
|
31
31
|
Object.defineProperty(exports, "startUserAction", { enumerable: true, get: function () { return userActions_1.startUserAction; } });
|
|
32
|
+
var csp_1 = require("./csp");
|
|
33
|
+
Object.defineProperty(exports, "CSPInstrumentation", { enumerable: true, get: function () { return csp_1.CSPInstrumentation; } });
|
|
32
34
|
//# 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;AAEnC,6CAAoG;AAA3F,wHAAA,yBAAyB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,8GAAA,eAAe,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, startUserAction } from './userActions';\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,6CAAoG;AAA3F,wHAAA,yBAAyB,OAAA;AAAE,sHAAA,uBAAuB,OAAA;AAAE,8GAAA,eAAe,OAAA;AAE5E,6BAA2C;AAAlC,yGAAA,kBAAkB,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, startUserAction } from './userActions';\n\nexport { CSPInstrumentation } from './csp';\n"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.userActionDataAttribute = exports.userActionDataAttributeParsed = exports.MESSAGE_TYPE_DOM_MUTATION = exports.MESSAGE_TYPE_HTTP_REQUEST_END = exports.MESSAGE_TYPE_HTTP_REQUEST_START = exports.MESSAGE_TYPE_RESOURCE_ENTRY = void 0;
|
|
3
|
+
exports.userActionStartByApiCallEventName = exports.userActionDataAttribute = exports.userActionDataAttributeParsed = exports.MESSAGE_TYPE_DOM_MUTATION = exports.MESSAGE_TYPE_HTTP_REQUEST_END = exports.MESSAGE_TYPE_HTTP_REQUEST_START = exports.MESSAGE_TYPE_RESOURCE_ENTRY = void 0;
|
|
4
4
|
exports.MESSAGE_TYPE_RESOURCE_ENTRY = 'resource-entry';
|
|
5
5
|
exports.MESSAGE_TYPE_HTTP_REQUEST_START = 'http-request-start';
|
|
6
6
|
exports.MESSAGE_TYPE_HTTP_REQUEST_END = 'http-request-end';
|
|
7
7
|
exports.MESSAGE_TYPE_DOM_MUTATION = 'dom-mutation';
|
|
8
8
|
exports.userActionDataAttributeParsed = 'faroUserActionName';
|
|
9
9
|
exports.userActionDataAttribute = 'data-faro-user-action-name';
|
|
10
|
+
exports.userActionStartByApiCallEventName = 'faroApiCall';
|
|
10
11
|
//# sourceMappingURL=const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,gBAAgB,CAAC;AAC/C,QAAA,+BAA+B,GAAG,oBAAoB,CAAC;AACvD,QAAA,6BAA6B,GAAG,kBAAkB,CAAC;AACnD,QAAA,yBAAyB,GAAG,cAAc,CAAC;AAE3C,QAAA,6BAA6B,GAAG,oBAAoB,CAAC;AACrD,QAAA,uBAAuB,GAAG,4BAA4B,CAAC","sourcesContent":["export const MESSAGE_TYPE_RESOURCE_ENTRY = 'resource-entry';\nexport const MESSAGE_TYPE_HTTP_REQUEST_START = 'http-request-start';\nexport const MESSAGE_TYPE_HTTP_REQUEST_END = 'http-request-end';\nexport const MESSAGE_TYPE_DOM_MUTATION = 'dom-mutation';\n\nexport const userActionDataAttributeParsed = 'faroUserActionName';\nexport const userActionDataAttribute = 'data-faro-user-action-name';\n"]}
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,gBAAgB,CAAC;AAC/C,QAAA,+BAA+B,GAAG,oBAAoB,CAAC;AACvD,QAAA,6BAA6B,GAAG,kBAAkB,CAAC;AACnD,QAAA,yBAAyB,GAAG,cAAc,CAAC;AAE3C,QAAA,6BAA6B,GAAG,oBAAoB,CAAC;AACrD,QAAA,uBAAuB,GAAG,4BAA4B,CAAC;AAEvD,QAAA,iCAAiC,GAAG,aAAa,CAAC","sourcesContent":["export const MESSAGE_TYPE_RESOURCE_ENTRY = 'resource-entry';\nexport const MESSAGE_TYPE_HTTP_REQUEST_START = 'http-request-start';\nexport const MESSAGE_TYPE_HTTP_REQUEST_END = 'http-request-end';\nexport const MESSAGE_TYPE_DOM_MUTATION = 'dom-mutation';\n\nexport const userActionDataAttributeParsed = 'faroUserActionName';\nexport const userActionDataAttribute = 'data-faro-user-action-name';\n\nexport const userActionStartByApiCallEventName = 'faroApiCall';\n"]}
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.UserActionInstrumentation = void 0;
|
|
19
19
|
exports.startUserAction = startUserAction;
|
|
20
20
|
var faro_core_1 = require("@grafana/faro-core");
|
|
21
|
+
var const_1 = require("./const");
|
|
21
22
|
var processUserActionEventHandler_1 = require("./processUserActionEventHandler");
|
|
22
23
|
var processUserEventHandler;
|
|
23
24
|
var UserActionInstrumentation = /** @class */ (function (_super) {
|
|
@@ -43,7 +44,7 @@ function createUserActionApiEvent(name, attributes) {
|
|
|
43
44
|
return {
|
|
44
45
|
name: name,
|
|
45
46
|
attributes: attributes,
|
|
46
|
-
type:
|
|
47
|
+
type: const_1.userActionStartByApiCallEventName,
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
50
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/instrumentation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,0CAEC;AArBD,gDAAwE;AAExE,iCAA4D;AAC5D,iFAAsE;AAGtE,IAAI,uBAA2E,CAAC;AAEhF;IAA+C,6CAAmB;IAAlE;;QACW,UAAI,GAAG,mDAAmD,CAAC;QAC3D,aAAO,GAAG,mBAAO,CAAC;;IAO7B,CAAC;IALC,8CAAU,GAAV;QACE,uBAAuB,GAAG,IAAA,mDAAmB,EAAC,gBAAI,CAAC,CAAC;QACpD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAChE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IAC9D,CAAC;IACH,gCAAC;AAAD,CAAC,AATD,CAA+C,+BAAmB,GASjE;AATY,8DAAyB;AAWtC,SAAgB,eAAe,CAAC,IAAY,EAAE,UAAmC;IAC/E,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAG,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY,EAAE,UAAmC;IACjF,OAAO;QACL,IAAI,MAAA;QACJ,UAAU,YAAA;QACV,IAAI,EAAE,yCAAiC;KACxC,CAAC;AACJ,CAAC","sourcesContent":["import { BaseInstrumentation, faro, VERSION } from '@grafana/faro-core';\n\nimport { userActionStartByApiCallEventName } from './const';\nimport { getUserEventHandler } from './processUserActionEventHandler';\nimport type { ApiEvent } from './types';\n\nlet processUserEventHandler: ReturnType<typeof getUserEventHandler> | undefined;\n\nexport class UserActionInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-user-action';\n readonly version = VERSION;\n\n initialize(): void {\n processUserEventHandler = getUserEventHandler(faro);\n window.addEventListener('pointerdown', processUserEventHandler);\n window.addEventListener('keydown', processUserEventHandler);\n }\n}\n\nexport function startUserAction(name: string, attributes?: Record<string, string>) {\n processUserEventHandler?.(createUserActionApiEvent(name, attributes));\n}\n\nfunction createUserActionApiEvent(name: string, attributes?: Record<string, string>): ApiEvent {\n return {\n name,\n attributes,\n type: userActionStartByApiCallEventName,\n };\n}\n"]}
|
|
@@ -78,7 +78,6 @@ function getUserEventHandler(faro) {
|
|
|
78
78
|
runningRequests.set(msg.request.requestId, msg.request);
|
|
79
79
|
}
|
|
80
80
|
if (isRequestEndMessage(msg)) {
|
|
81
|
-
// console.log('request end msg :>> ', msg);
|
|
82
81
|
runningRequests.delete(msg.request.requestId);
|
|
83
82
|
}
|
|
84
83
|
// A http request, a DOM mutation or a performance entry happened so we have a follow up activity and start the timeout again
|
|
@@ -137,7 +136,7 @@ function endUserAction(props) {
|
|
|
137
136
|
eventType: eventType,
|
|
138
137
|
});
|
|
139
138
|
// Send the final action parent event
|
|
140
|
-
api.pushEvent(userActionName, __assign({ userActionStartTime: startTime.toString(), userActionEndTime: endTime.toString(), userActionDuration: duration.toString(),
|
|
139
|
+
api.pushEvent(userActionName, __assign({ userActionStartTime: startTime.toString(), userActionEndTime: endTime.toString(), userActionDuration: duration.toString(), userActionTrigger: eventType }, (0, faro_core_1.stringifyObjectValues)(attributes)), undefined, {
|
|
141
140
|
timestampOverwriteMs: startTime,
|
|
142
141
|
customPayloadTransformer: function (payload) {
|
|
143
142
|
payload.action = {
|
|
@@ -186,6 +185,6 @@ function isRequestEndMessage(msg) {
|
|
|
186
185
|
return msg.type === const_1.MESSAGE_TYPE_HTTP_REQUEST_END;
|
|
187
186
|
}
|
|
188
187
|
function isApiEvent(apiEvent) {
|
|
189
|
-
return apiEvent.type ===
|
|
188
|
+
return apiEvent.type === const_1.userActionStartByApiCallEventName && typeof apiEvent.name === 'string';
|
|
190
189
|
}
|
|
191
190
|
//# sourceMappingURL=processUserActionEventHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n apiMessageBus,\n dateNow,\n genShortID,\n Observable,\n stringifyObjectValues,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n} from '@grafana/faro-core';\nimport type { Faro, Subscription } from '@grafana/faro-core';\n\nimport {\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionDataAttributeParsed as userActionDataAttribute,\n} from './const';\nimport { monitorDomMutations } from './domMutationMonitor';\nimport { monitorHttpRequests } from './httpRequestMonitor';\nimport { monitorPerformanceEntries } from './performanceEntriesMonitor';\nimport type { ApiEvent, HttpRequestEndMessage, HttpRequestMessagePayload, HttpRequestStartMessage } from './types';\nimport { convertDataAttributeName } from './util';\n\nconst maxFollowUpActionTimeRange = 100;\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n const httpMonitor = monitorHttpRequests();\n const domMutationsMonitor = monitorDomMutations();\n const performanceEntriesMonitor = monitorPerformanceEntries();\n\n let timeoutId: number | undefined;\n let actionRunning = false;\n\n function processUserEvent(event: PointerEvent | KeyboardEvent | ApiEvent) {\n let userActionName: string | undefined;\n\n const isApiEventDetected = isApiEvent(event);\n if (isApiEventDetected) {\n userActionName = event.name;\n } else {\n userActionName = getUserActionName(\n event.target as HTMLElement,\n config.trackUserActionsDataAttributeName ?? userActionDataAttribute\n );\n }\n\n if (actionRunning || userActionName == null) {\n return;\n }\n\n actionRunning = true;\n\n const startTime = dateNow();\n let endTime: number | undefined;\n\n const actionId = genShortID();\n\n apiMessageBus.notify({\n type: USER_ACTION_START,\n name: userActionName,\n startTime: startTime,\n parentId: actionId,\n });\n\n // Triggers if no initial action happened within the first 100ms\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n // Listening for follow up activities stops once action is cancelled (set to false)\n actionRunning = false;\n sendUserActionCancelMessage(userActionName, actionId);\n },\n maxFollowUpActionTimeRange\n );\n\n const runningRequests = new Map<string, HttpRequestMessagePayload>();\n let isHalted = false;\n let pendingActionTimeoutId: number | undefined;\n\n const allMonitorsSub = new Observable()\n .merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)\n .takeWhile(() => actionRunning)\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (isHalted && !(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n runningRequests.set(msg.request.requestId, msg.request);\n }\n if (isRequestEndMessage(msg)) {\n // console.log('request end msg :>> ', msg);\n runningRequests.delete(msg.request.requestId);\n }\n\n // A http request, a DOM mutation or a performance entry happened so we have a follow up activity and start the timeout again\n // If timeout is triggered the user action is done and we send respective messages and events\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n const userActionParentEventProps = {\n api,\n userActionName,\n startTime,\n endTime: endTime!,\n actionId,\n event,\n ...(isApiEventDetected ? { attributes: event.attributes } : {}),\n };\n\n const hasPendingRequests = runningRequests.size > 0;\n const isAllPendingRequestsResolved = isHalted && !hasPendingRequests;\n\n if (isAllPendingRequestsResolved) {\n clearTimeout(pendingActionTimeoutId);\n isHalted = false;\n }\n\n if (hasPendingRequests) {\n isHalted = true;\n\n apiMessageBus.notify({\n type: USER_ACTION_HALT,\n name: userActionName,\n parentId: actionId,\n reason: 'pending-requests',\n haltTime: dateNow(),\n });\n\n pendingActionTimeoutId = startTimeout(\n undefined,\n () => {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n },\n 1000 * 10\n );\n } else {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n }\n },\n maxFollowUpActionTimeRange\n );\n });\n }\n\n return processUserEvent;\n}\n\n/**\n * User action was successfully completed and we send the final event(s)\n */\nfunction endUserAction(props: {\n api: Faro['api'];\n userActionName: string;\n startTime: number;\n endTime: number;\n actionId: string;\n event: PointerEvent | KeyboardEvent | ApiEvent;\n attributes?: Record<string, string>;\n}) {\n const { api, userActionName, startTime, endTime, actionId, event, attributes } = props;\n const duration = endTime - startTime;\n const eventType = event.type;\n\n // order matters, first emit the user-action-end event and afterwards push the parent event\n apiMessageBus.notify({\n type: USER_ACTION_END,\n name: userActionName,\n id: actionId,\n startTime,\n endTime,\n duration,\n eventType,\n });\n\n // Send the final action parent event\n api.pushEvent(\n userActionName,\n {\n userActionStartTime: startTime.toString(),\n userActionEndTime: endTime.toString(),\n userActionDuration: duration.toString(),\n userActionEventType: eventType,\n ...stringifyObjectValues(attributes),\n },\n undefined,\n {\n timestampOverwriteMs: startTime,\n customPayloadTransformer: (payload) => {\n payload.action = {\n id: actionId,\n name: userActionName,\n };\n\n return payload;\n },\n }\n );\n}\n\nfunction getUserActionName(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nfunction startTimeout(timeoutId: number | undefined, cb: () => void, delay: number) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n //@ts-expect-error for some reason vscode is using the node types\n timeoutId = setTimeout(() => {\n cb();\n }, delay);\n\n return timeoutId;\n}\n\nfunction sendUserActionCancelMessage(userActionName: string, actionId: string) {\n apiMessageBus.notify({\n type: USER_ACTION_CANCEL,\n name: userActionName,\n parentId: actionId,\n });\n}\n\nfunction unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n\nfunction isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nfunction isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n\nfunction isApiEvent(apiEvent: any): apiEvent is { name: string; attributes?: Record<string, string> } {\n return apiEvent.type === 'apiEvent' && typeof apiEvent.name === 'string';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"processUserActionEventHandler.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/processUserActionEventHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n apiMessageBus,\n dateNow,\n genShortID,\n Observable,\n stringifyObjectValues,\n USER_ACTION_CANCEL,\n USER_ACTION_END,\n USER_ACTION_HALT,\n USER_ACTION_START,\n} from '@grafana/faro-core';\nimport type { Faro, Subscription } from '@grafana/faro-core';\n\nimport {\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionDataAttributeParsed as userActionDataAttribute,\n userActionStartByApiCallEventName,\n} from './const';\nimport { monitorDomMutations } from './domMutationMonitor';\nimport { monitorHttpRequests } from './httpRequestMonitor';\nimport { monitorPerformanceEntries } from './performanceEntriesMonitor';\nimport type { ApiEvent, HttpRequestEndMessage, HttpRequestMessagePayload, HttpRequestStartMessage } from './types';\nimport { convertDataAttributeName } from './util';\n\nconst maxFollowUpActionTimeRange = 100;\n\nexport function getUserEventHandler(faro: Faro) {\n const { api, config } = faro;\n\n const httpMonitor = monitorHttpRequests();\n const domMutationsMonitor = monitorDomMutations();\n const performanceEntriesMonitor = monitorPerformanceEntries();\n\n let timeoutId: number | undefined;\n let actionRunning = false;\n\n function processUserEvent(event: PointerEvent | KeyboardEvent | ApiEvent) {\n let userActionName: string | undefined;\n\n const isApiEventDetected = isApiEvent(event);\n if (isApiEventDetected) {\n userActionName = event.name;\n } else {\n userActionName = getUserActionName(\n event.target as HTMLElement,\n config.trackUserActionsDataAttributeName ?? userActionDataAttribute\n );\n }\n\n if (actionRunning || userActionName == null) {\n return;\n }\n\n actionRunning = true;\n\n const startTime = dateNow();\n let endTime: number | undefined;\n\n const actionId = genShortID();\n\n apiMessageBus.notify({\n type: USER_ACTION_START,\n name: userActionName,\n startTime: startTime,\n parentId: actionId,\n });\n\n // Triggers if no initial action happened within the first 100ms\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n // Listening for follow up activities stops once action is cancelled (set to false)\n actionRunning = false;\n sendUserActionCancelMessage(userActionName, actionId);\n },\n maxFollowUpActionTimeRange\n );\n\n const runningRequests = new Map<string, HttpRequestMessagePayload>();\n let isHalted = false;\n let pendingActionTimeoutId: number | undefined;\n\n const allMonitorsSub = new Observable()\n .merge(httpMonitor, domMutationsMonitor, performanceEntriesMonitor)\n .takeWhile(() => actionRunning)\n .filter((msg) => {\n // If the user action is in halt state, we only keep listening to ended http requests\n if (isHalted && !(isRequestEndMessage(msg) && runningRequests.has(msg.request.requestId))) {\n return false;\n }\n\n return true;\n })\n .subscribe((msg) => {\n if (isRequestStartMessage(msg)) {\n // An action is on halt if it has pending items, like pending HTTP requests.\n // In this case we start a separate timeout to wait for the requests to finish\n // If in the halt state, we stop adding Faro signals to the action's buffer (see userActionLifecycleHandler.ts)\n // But we are still subscribed to\n runningRequests.set(msg.request.requestId, msg.request);\n }\n if (isRequestEndMessage(msg)) {\n runningRequests.delete(msg.request.requestId);\n }\n\n // A http request, a DOM mutation or a performance entry happened so we have a follow up activity and start the timeout again\n // If timeout is triggered the user action is done and we send respective messages and events\n timeoutId = startTimeout(\n timeoutId,\n () => {\n endTime = dateNow();\n\n const userActionParentEventProps = {\n api,\n userActionName,\n startTime,\n endTime: endTime!,\n actionId,\n event,\n ...(isApiEventDetected ? { attributes: event.attributes } : {}),\n };\n\n const hasPendingRequests = runningRequests.size > 0;\n const isAllPendingRequestsResolved = isHalted && !hasPendingRequests;\n\n if (isAllPendingRequestsResolved) {\n clearTimeout(pendingActionTimeoutId);\n isHalted = false;\n }\n\n if (hasPendingRequests) {\n isHalted = true;\n\n apiMessageBus.notify({\n type: USER_ACTION_HALT,\n name: userActionName,\n parentId: actionId,\n reason: 'pending-requests',\n haltTime: dateNow(),\n });\n\n pendingActionTimeoutId = startTimeout(\n undefined,\n () => {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n },\n 1000 * 10\n );\n } else {\n unsubscribeAllMonitors(allMonitorsSub);\n endUserAction(userActionParentEventProps);\n actionRunning = false;\n isHalted = false;\n }\n },\n maxFollowUpActionTimeRange\n );\n });\n }\n\n return processUserEvent;\n}\n\n/**\n * User action was successfully completed and we send the final event(s)\n */\nfunction endUserAction(props: {\n api: Faro['api'];\n userActionName: string;\n startTime: number;\n endTime: number;\n actionId: string;\n event: PointerEvent | KeyboardEvent | ApiEvent;\n attributes?: Record<string, string>;\n}) {\n const { api, userActionName, startTime, endTime, actionId, event, attributes } = props;\n const duration = endTime - startTime;\n const eventType = event.type;\n\n // order matters, first emit the user-action-end event and afterwards push the parent event\n apiMessageBus.notify({\n type: USER_ACTION_END,\n name: userActionName,\n id: actionId,\n startTime,\n endTime,\n duration,\n eventType,\n });\n\n // Send the final action parent event\n api.pushEvent(\n userActionName,\n {\n userActionStartTime: startTime.toString(),\n userActionEndTime: endTime.toString(),\n userActionDuration: duration.toString(),\n userActionTrigger: eventType,\n ...stringifyObjectValues(attributes),\n },\n undefined,\n {\n timestampOverwriteMs: startTime,\n customPayloadTransformer: (payload) => {\n payload.action = {\n id: actionId,\n name: userActionName,\n };\n\n return payload;\n },\n }\n );\n}\n\nfunction getUserActionName(element: HTMLElement, dataAttributeName: string): string | undefined {\n const parsedDataAttributeName = convertDataAttributeName(dataAttributeName);\n const dataset = element.dataset;\n\n for (const key in dataset) {\n if (key === parsedDataAttributeName) {\n return dataset[key];\n }\n }\n\n return undefined;\n}\n\nfunction startTimeout(timeoutId: number | undefined, cb: () => void, delay: number) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n //@ts-expect-error for some reason vscode is using the node types\n timeoutId = setTimeout(() => {\n cb();\n }, delay);\n\n return timeoutId;\n}\n\nfunction sendUserActionCancelMessage(userActionName: string, actionId: string) {\n apiMessageBus.notify({\n type: USER_ACTION_CANCEL,\n name: userActionName,\n parentId: actionId,\n });\n}\n\nfunction unsubscribeAllMonitors(allMonitorsSub: Subscription | undefined) {\n allMonitorsSub?.unsubscribe();\n allMonitorsSub = undefined;\n}\n\nfunction isRequestStartMessage(msg: any): msg is HttpRequestStartMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_START;\n}\n\nfunction isRequestEndMessage(msg: any): msg is HttpRequestEndMessage {\n return msg.type === MESSAGE_TYPE_HTTP_REQUEST_END;\n}\n\nfunction isApiEvent(apiEvent: any): apiEvent is { name: string; attributes?: Record<string, string> } {\n return apiEvent.type === userActionStartByApiCallEventName && typeof apiEvent.name === 'string';\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n} from './const';\n\nexport type DomMutationMessage = {\n type: typeof MESSAGE_TYPE_DOM_MUTATION;\n};\n\ntype RequestApiType = 'xhr' | 'fetch';\n\nexport type HttpRequestMessagePayload = {\n requestId: string;\n url: string;\n method: string;\n apiType: RequestApiType;\n};\n\nexport type HttpRequestStartMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_START;\n request: HttpRequestMessagePayload;\n};\n\nexport type HttpRequestEndMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_END;\n request: HttpRequestMessagePayload;\n};\n\nexport type ApiEvent = {\n name: string;\n attributes?: Record<string, string>;\n type:
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/instrumentations/userActions/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n MESSAGE_TYPE_DOM_MUTATION,\n MESSAGE_TYPE_HTTP_REQUEST_END,\n MESSAGE_TYPE_HTTP_REQUEST_START,\n userActionStartByApiCallEventName,\n} from './const';\n\nexport type DomMutationMessage = {\n type: typeof MESSAGE_TYPE_DOM_MUTATION;\n};\n\ntype RequestApiType = 'xhr' | 'fetch';\n\nexport type HttpRequestMessagePayload = {\n requestId: string;\n url: string;\n method: string;\n apiType: RequestApiType;\n};\n\nexport type HttpRequestStartMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_START;\n request: HttpRequestMessagePayload;\n};\n\nexport type HttpRequestEndMessage = {\n type: typeof MESSAGE_TYPE_HTTP_REQUEST_END;\n request: HttpRequestMessagePayload;\n};\n\nexport type ApiEvent = {\n name: string;\n attributes?: Record<string, string>;\n type: typeof userActionStartByApiCallEventName;\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConsoleInstrumentation, ErrorsInstrumentation, PerformanceInstrumentation, SessionInstrumentation, UserActionInstrumentation, ViewInstrumentation, WebVitalsInstrumentation, } from '../instrumentations';
|
|
1
|
+
import { ConsoleInstrumentation, CSPInstrumentation, ErrorsInstrumentation, PerformanceInstrumentation, SessionInstrumentation, UserActionInstrumentation, ViewInstrumentation, WebVitalsInstrumentation, } from '../instrumentations';
|
|
2
2
|
export function getWebInstrumentations(options = {}) {
|
|
3
3
|
const instrumentations = [
|
|
4
4
|
new UserActionInstrumentation(),
|
|
@@ -11,6 +11,9 @@ export function getWebInstrumentations(options = {}) {
|
|
|
11
11
|
// unshift to ensure that initialization starts before the other instrumentations
|
|
12
12
|
instrumentations.unshift(new PerformanceInstrumentation());
|
|
13
13
|
}
|
|
14
|
+
if (options.enableContentSecurityPolicyInstrumentation !== false) {
|
|
15
|
+
instrumentations.push(new CSPInstrumentation());
|
|
16
|
+
}
|
|
14
17
|
if (options.captureConsole !== false) {
|
|
15
18
|
instrumentations.push(new ConsoleInstrumentation({
|
|
16
19
|
disabledLevels: options.captureConsoleDisabledLevels,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,UAAU,sBAAsB,CAAC,UAAyC,EAAE;IAChF,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,yBAAyB,EAAE;QAC/B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,mBAAmB,EAAE;KAC1B,CAAC;IAEF,IAAI,OAAO,CAAC,gCAAgC,KAAK,KAAK,EAAE,CAAC;QACvD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,IAAI,CACnB,IAAI,sBAAsB,CAAC;YACzB,cAAc,EAAE,OAAO,CAAC,4BAA4B;SACrD,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","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"]}
|
|
1
|
+
{"version":3,"file":"getWebInstrumentations.js","sourceRoot":"","sources":["../../../src/config/getWebInstrumentations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,UAAU,sBAAsB,CAAC,UAAyC,EAAE;IAChF,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,yBAAyB,EAAE;QAC/B,IAAI,qBAAqB,EAAE;QAC3B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,mBAAmB,EAAE;KAC1B,CAAC;IAEF,IAAI,OAAO,CAAC,gCAAgC,KAAK,KAAK,EAAE,CAAC;QACvD,iFAAiF;QACjF,gBAAgB,CAAC,OAAO,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,0CAA0C,KAAK,KAAK,EAAE,CAAC;QACjE,gBAAgB,CAAC,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,gBAAgB,CAAC,IAAI,CACnB,IAAI,sBAAsB,CAAC;YACzB,cAAc,EAAE,OAAO,CAAC,4BAA4B;SACrD,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["import type { Instrumentation } from '@grafana/faro-core';\n\nimport {\n ConsoleInstrumentation,\n CSPInstrumentation,\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.enableContentSecurityPolicyInstrumentation !== false) {\n instrumentations.push(new CSPInstrumentation());\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"]}
|
|
@@ -40,9 +40,9 @@ export function makeCoreConfig(browserConfig) {
|
|
|
40
40
|
}
|
|
41
41
|
const {
|
|
42
42
|
// properties with default values
|
|
43
|
-
dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, trackUserActionsPreview = false, trackUserActionsDataAttributeName = userActionDataAttribute } = browserConfig,
|
|
43
|
+
dedupe = true, eventDomain = defaultEventDomain, globalObjectKey = defaultGlobalObjectKey, instrumentations = getWebInstrumentations(), internalLoggerLevel = defaultInternalLoggerLevel, isolate = false, logArgsSerializer = defaultLogArgsSerializer, metas = createDefaultMetas(browserConfig), paused = false, preventGlobalExposure = false, unpatchedConsole = defaultUnpatchedConsole, trackUserActionsPreview = false, trackUserActionsDataAttributeName = userActionDataAttribute, url: browserConfigUrl } = browserConfig,
|
|
44
44
|
// Properties without default values or which aren't used to create derived config
|
|
45
|
-
restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "trackUserActionsPreview", "trackUserActionsDataAttributeName"]);
|
|
45
|
+
restProperties = __rest(browserConfig, ["dedupe", "eventDomain", "globalObjectKey", "instrumentations", "internalLoggerLevel", "isolate", "logArgsSerializer", "metas", "paused", "preventGlobalExposure", "unpatchedConsole", "trackUserActionsPreview", "trackUserActionsDataAttributeName", "url"]);
|
|
46
46
|
return Object.assign(Object.assign({}, restProperties), { batching: Object.assign(Object.assign({}, defaultBatchingConfig), browserConfig.batching), dedupe: dedupe, globalObjectKey, instrumentations: getFilteredInstrumentations(instrumentations, browserConfig), internalLoggerLevel,
|
|
47
47
|
isolate,
|
|
48
48
|
logArgsSerializer,
|
|
@@ -52,9 +52,13 @@ export function makeCoreConfig(browserConfig) {
|
|
|
52
52
|
preventGlobalExposure,
|
|
53
53
|
transports,
|
|
54
54
|
unpatchedConsole,
|
|
55
|
-
eventDomain,
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
eventDomain, ignoreUrls: [
|
|
56
|
+
...((_a = browserConfig.ignoreUrls) !== null && _a !== void 0 ? _a : []),
|
|
57
|
+
// ignore configured cloud collector url by default
|
|
58
|
+
...(browserConfigUrl ? [browserConfigUrl] : []),
|
|
59
|
+
// Try our best to exclude collector URLs form other Faro instances. By default these are URLs ending with /collect or /collect/ followed by alphanumeric characters.
|
|
60
|
+
/\/collect(?:\/[\w]*)?$/,
|
|
61
|
+
], sessionTracking: Object.assign(Object.assign(Object.assign({}, defaultSessionTrackingConfig), browserConfig.sessionTracking), crateSessionMeta({
|
|
58
62
|
trackGeolocation: browserConfig.trackGeolocation,
|
|
59
63
|
sessionTracking: browserConfig.sessionTracking,
|
|
60
64
|
})), trackUserActionsPreview,
|