@amplitude/plugin-autocapture-browser 1.23.6 → 1.24.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/lib/cjs/autocapture/track-click.d.ts.map +1 -1
- package/lib/cjs/autocapture/track-click.js.map +1 -1
- package/lib/cjs/autocapture/track-exposure.d.ts +12 -0
- package/lib/cjs/autocapture/track-exposure.d.ts.map +1 -0
- package/lib/cjs/autocapture/track-exposure.js +56 -0
- package/lib/cjs/autocapture/track-exposure.js.map +1 -0
- package/lib/cjs/autocapture/track-scroll.d.ts +15 -0
- package/lib/cjs/autocapture/track-scroll.d.ts.map +1 -0
- package/lib/cjs/autocapture/track-scroll.js +34 -0
- package/lib/cjs/autocapture/track-scroll.js.map +1 -0
- package/lib/cjs/autocapture/track-viewport-content-updated.d.ts +25 -0
- package/lib/cjs/autocapture/track-viewport-content-updated.d.ts.map +1 -0
- package/lib/cjs/autocapture/track-viewport-content-updated.js +71 -0
- package/lib/cjs/autocapture/track-viewport-content-updated.js.map +1 -0
- package/lib/cjs/autocapture-plugin.d.ts +4 -0
- package/lib/cjs/autocapture-plugin.d.ts.map +1 -1
- package/lib/cjs/autocapture-plugin.js +109 -14
- package/lib/cjs/autocapture-plugin.js.map +1 -1
- package/lib/cjs/constants.d.ts +7 -0
- package/lib/cjs/constants.d.ts.map +1 -1
- package/lib/cjs/constants.js +9 -1
- package/lib/cjs/constants.js.map +1 -1
- package/lib/cjs/data-extractor.d.ts +1 -0
- package/lib/cjs/data-extractor.d.ts.map +1 -1
- package/lib/cjs/data-extractor.js +19 -0
- package/lib/cjs/data-extractor.js.map +1 -1
- package/lib/cjs/helpers.d.ts +1 -0
- package/lib/cjs/helpers.d.ts.map +1 -1
- package/lib/cjs/helpers.js +22 -1
- package/lib/cjs/helpers.js.map +1 -1
- package/lib/cjs/libs/element-path.d.ts +2 -0
- package/lib/cjs/libs/element-path.d.ts.map +1 -0
- package/lib/cjs/libs/element-path.js +177 -0
- package/lib/cjs/libs/element-path.js.map +1 -0
- package/lib/cjs/observables.d.ts +3 -0
- package/lib/cjs/observables.d.ts.map +1 -1
- package/lib/cjs/observables.js +70 -3
- package/lib/cjs/observables.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/autocapture/track-click.d.ts.map +1 -1
- package/lib/esm/autocapture/track-click.js.map +1 -1
- package/lib/esm/autocapture/track-exposure.d.ts +12 -0
- package/lib/esm/autocapture/track-exposure.d.ts.map +1 -0
- package/lib/esm/autocapture/track-exposure.js +52 -0
- package/lib/esm/autocapture/track-exposure.js.map +1 -0
- package/lib/esm/autocapture/track-scroll.d.ts +15 -0
- package/lib/esm/autocapture/track-scroll.d.ts.map +1 -0
- package/lib/esm/autocapture/track-scroll.js +30 -0
- package/lib/esm/autocapture/track-scroll.js.map +1 -0
- package/lib/esm/autocapture/track-viewport-content-updated.d.ts +25 -0
- package/lib/esm/autocapture/track-viewport-content-updated.d.ts.map +1 -0
- package/lib/esm/autocapture/track-viewport-content-updated.js +65 -0
- package/lib/esm/autocapture/track-viewport-content-updated.js.map +1 -0
- package/lib/esm/autocapture-plugin.d.ts +4 -0
- package/lib/esm/autocapture-plugin.d.ts.map +1 -1
- package/lib/esm/autocapture-plugin.js +111 -16
- package/lib/esm/autocapture-plugin.js.map +1 -1
- package/lib/esm/constants.d.ts +7 -0
- package/lib/esm/constants.d.ts.map +1 -1
- package/lib/esm/constants.js +8 -0
- package/lib/esm/constants.js.map +1 -1
- package/lib/esm/data-extractor.d.ts +1 -0
- package/lib/esm/data-extractor.d.ts.map +1 -1
- package/lib/esm/data-extractor.js +20 -1
- package/lib/esm/data-extractor.js.map +1 -1
- package/lib/esm/helpers.d.ts +1 -0
- package/lib/esm/helpers.d.ts.map +1 -1
- package/lib/esm/helpers.js +21 -1
- package/lib/esm/helpers.js.map +1 -1
- package/lib/esm/libs/element-path.d.ts +2 -0
- package/lib/esm/libs/element-path.d.ts.map +1 -0
- package/lib/esm/libs/element-path.js +173 -0
- package/lib/esm/libs/element-path.js.map +1 -0
- package/lib/esm/observables.d.ts +3 -0
- package/lib/esm/observables.d.ts.map +1 -1
- package/lib/esm/observables.js +67 -2
- package/lib/esm/observables.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.js.map +1 -1
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/autocapture/track-click.d.ts.map +1 -1
- package/lib/scripts/autocapture/track-exposure.d.ts +12 -0
- package/lib/scripts/autocapture/track-exposure.d.ts.map +1 -0
- package/lib/scripts/autocapture/track-scroll.d.ts +15 -0
- package/lib/scripts/autocapture/track-scroll.d.ts.map +1 -0
- package/lib/scripts/autocapture/track-viewport-content-updated.d.ts +25 -0
- package/lib/scripts/autocapture/track-viewport-content-updated.d.ts.map +1 -0
- package/lib/scripts/autocapture-plugin.d.ts +4 -0
- package/lib/scripts/autocapture-plugin.d.ts.map +1 -1
- package/lib/scripts/constants.d.ts +7 -0
- package/lib/scripts/constants.d.ts.map +1 -1
- package/lib/scripts/data-extractor.d.ts +1 -0
- package/lib/scripts/data-extractor.d.ts.map +1 -1
- package/lib/scripts/helpers.d.ts +1 -0
- package/lib/scripts/helpers.d.ts.map +1 -1
- package/lib/scripts/libs/element-path.d.ts +2 -0
- package/lib/scripts/libs/element-path.d.ts.map +1 -0
- package/lib/scripts/observables.d.ts +3 -0
- package/lib/scripts/observables.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +2 -2
- package/lib/cjs/libs/finder.d.ts +0 -13
- package/lib/cjs/libs/finder.d.ts.map +0 -1
- package/lib/cjs/libs/finder.js +0 -348
- package/lib/cjs/libs/finder.js.map +0 -1
- package/lib/esm/libs/finder.d.ts +0 -13
- package/lib/esm/libs/finder.d.ts.map +0 -1
- package/lib/esm/libs/finder.js +0 -344
- package/lib/esm/libs/finder.js.map +0 -1
- package/lib/scripts/libs/finder.d.ts +0 -13
- package/lib/scripts/libs/finder.d.ts.map +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { getGlobalScope } from '@amplitude/analytics-core';
|
|
2
|
+
import * as constants from '../constants';
|
|
3
|
+
import { getCurrentPageViewId } from '../helpers';
|
|
4
|
+
export function fireViewportContentUpdated(_a) {
|
|
5
|
+
var _b;
|
|
6
|
+
var _c, _d, _e;
|
|
7
|
+
var amplitude = _a.amplitude, scrollTracker = _a.scrollTracker, currentElementExposed = _a.currentElementExposed, elementExposedForPage = _a.elementExposedForPage, exposureTracker = _a.exposureTracker, isPageEnd = _a.isPageEnd, lastScroll = _a.lastScroll;
|
|
8
|
+
var pageScrollMaxState = scrollTracker.getState();
|
|
9
|
+
var globalScope = getGlobalScope();
|
|
10
|
+
/* istanbul ignore next */
|
|
11
|
+
var viewportWidth = (_c = globalScope === null || globalScope === void 0 ? void 0 : globalScope.innerWidth) !== null && _c !== void 0 ? _c : 0;
|
|
12
|
+
/* istanbul ignore next */
|
|
13
|
+
var viewportHeight = (_d = globalScope === null || globalScope === void 0 ? void 0 : globalScope.innerHeight) !== null && _d !== void 0 ? _d : 0;
|
|
14
|
+
var eventProperties = (_b = {},
|
|
15
|
+
_b[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] =
|
|
16
|
+
/* istanbul ignore next */
|
|
17
|
+
(_e = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _e === void 0 ? void 0 : _e.href,
|
|
18
|
+
_b[constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_X] = pageScrollMaxState.maxX + viewportWidth,
|
|
19
|
+
_b[constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_Y] = pageScrollMaxState.maxY + viewportHeight,
|
|
20
|
+
_b[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = viewportHeight,
|
|
21
|
+
_b[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = viewportWidth,
|
|
22
|
+
_b['[Amplitude] Element Exposed'] = Array.from(currentElementExposed),
|
|
23
|
+
_b);
|
|
24
|
+
var pageViewId = getCurrentPageViewId();
|
|
25
|
+
if (pageViewId) {
|
|
26
|
+
eventProperties[constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID] = pageViewId;
|
|
27
|
+
}
|
|
28
|
+
// If elements exposed is empty and max scroll is same as last event, don't track
|
|
29
|
+
if (currentElementExposed.size === 0 &&
|
|
30
|
+
pageScrollMaxState.maxX === lastScroll.maxX &&
|
|
31
|
+
pageScrollMaxState.maxY === lastScroll.maxY) {
|
|
32
|
+
if (isPageEnd) {
|
|
33
|
+
scrollTracker.reset();
|
|
34
|
+
elementExposedForPage.clear();
|
|
35
|
+
exposureTracker === null || exposureTracker === void 0 ? void 0 : exposureTracker.reset();
|
|
36
|
+
}
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
/* istanbul ignore next */
|
|
40
|
+
amplitude === null || amplitude === void 0 ? void 0 : amplitude.track('[Amplitude] Viewport Content Updated', eventProperties);
|
|
41
|
+
lastScroll.maxX = pageScrollMaxState.maxX;
|
|
42
|
+
lastScroll.maxY = pageScrollMaxState.maxY;
|
|
43
|
+
// Clear current batch
|
|
44
|
+
currentElementExposed.clear();
|
|
45
|
+
if (isPageEnd) {
|
|
46
|
+
// Reset state for next page view
|
|
47
|
+
scrollTracker.reset();
|
|
48
|
+
elementExposedForPage.clear();
|
|
49
|
+
exposureTracker === null || exposureTracker === void 0 ? void 0 : exposureTracker.reset();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function onExposure(elementPath, elementExposedForPage, currentElementExposed, fireViewportContentUpdatedCallback) {
|
|
53
|
+
if (elementExposedForPage.has(elementPath)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
elementExposedForPage.add(elementPath);
|
|
57
|
+
currentElementExposed.add(elementPath);
|
|
58
|
+
// Check if current set size exceeds 18k chars
|
|
59
|
+
var exposedArray = Array.from(currentElementExposed);
|
|
60
|
+
var exposedString = JSON.stringify(exposedArray);
|
|
61
|
+
if (exposedString.length >= constants.MAX_ELEMENT_EXPOSED_STR_LENGTH) {
|
|
62
|
+
fireViewportContentUpdatedCallback(false);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=track-viewport-content-updated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-viewport-content-updated.js","sourceRoot":"","sources":["../../../src/autocapture/track-viewport-content-updated.ts"],"names":[],"mappings":"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","sourcesContent":["import { BrowserClient, getGlobalScope } from '@amplitude/analytics-core';\nimport * as constants from '../constants';\nimport { getCurrentPageViewId } from '../helpers';\n\nexport interface ScrollTracker {\n getState: () => { maxX: number; maxY: number };\n reset: () => void;\n}\n\nexport interface ExposureTracker {\n reset: () => void;\n}\n\nexport function fireViewportContentUpdated({\n amplitude,\n scrollTracker,\n currentElementExposed,\n elementExposedForPage,\n exposureTracker,\n isPageEnd,\n lastScroll,\n}: {\n amplitude: BrowserClient;\n scrollTracker: ScrollTracker;\n currentElementExposed: Set<string>;\n elementExposedForPage: Set<string>;\n exposureTracker: ExposureTracker | undefined;\n isPageEnd: boolean;\n lastScroll: { maxX: undefined | number; maxY: undefined | number };\n}): void {\n const pageScrollMaxState = scrollTracker.getState();\n const globalScope = getGlobalScope();\n\n /* istanbul ignore next */\n const viewportWidth = globalScope?.innerWidth ?? 0;\n /* istanbul ignore next */\n const viewportHeight = globalScope?.innerHeight ?? 0;\n\n const eventProperties: Record<string, unknown> = {\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]:\n /* istanbul ignore next */\n globalScope?.location?.href,\n [constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_X]: pageScrollMaxState.maxX + viewportWidth,\n [constants.AMPLITUDE_EVENT_PROP_MAX_PAGE_Y]: pageScrollMaxState.maxY + viewportHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: viewportHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: viewportWidth,\n '[Amplitude] Element Exposed': Array.from(currentElementExposed),\n };\n\n const pageViewId = getCurrentPageViewId();\n if (pageViewId) {\n eventProperties[constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID] = pageViewId;\n }\n\n // If elements exposed is empty and max scroll is same as last event, don't track\n if (\n currentElementExposed.size === 0 &&\n pageScrollMaxState.maxX === lastScroll.maxX &&\n pageScrollMaxState.maxY === lastScroll.maxY\n ) {\n if (isPageEnd) {\n scrollTracker.reset();\n elementExposedForPage.clear();\n exposureTracker?.reset();\n }\n return;\n }\n\n /* istanbul ignore next */\n amplitude?.track('[Amplitude] Viewport Content Updated', eventProperties);\n lastScroll.maxX = pageScrollMaxState.maxX;\n lastScroll.maxY = pageScrollMaxState.maxY;\n\n // Clear current batch\n currentElementExposed.clear();\n\n if (isPageEnd) {\n // Reset state for next page view\n scrollTracker.reset();\n elementExposedForPage.clear();\n exposureTracker?.reset();\n }\n}\n\nexport function onExposure(\n elementPath: string,\n elementExposedForPage: Set<string>,\n currentElementExposed: Set<string>,\n fireViewportContentUpdatedCallback: (isPageEnd: boolean) => void,\n) {\n if (elementExposedForPage.has(elementPath)) {\n return;\n }\n elementExposedForPage.add(elementPath);\n currentElementExposed.add(elementPath);\n\n // Check if current set size exceeds 18k chars\n const exposedArray = Array.from(currentElementExposed);\n const exposedString = JSON.stringify(exposedArray);\n\n if (exposedString.length >= constants.MAX_ELEMENT_EXPOSED_STR_LENGTH) {\n fireViewportContentUpdatedCallback(false);\n }\n}\n"]}
|
|
@@ -17,6 +17,8 @@ export declare enum ObservablesEnum {
|
|
|
17
17
|
ChangeObservable = "changeObservable",
|
|
18
18
|
NavigateObservable = "navigateObservable",
|
|
19
19
|
MutationObservable = "mutationObservable",
|
|
20
|
+
ScrollObservable = "scrollObservable",
|
|
21
|
+
ExposureObservable = "exposureObservable",
|
|
20
22
|
BrowserErrorObservable = "browserErrorObservable",
|
|
21
23
|
SelectionObservable = "selectionObservable",
|
|
22
24
|
MouseMoveObservable = "mouseMoveObservable"
|
|
@@ -26,6 +28,8 @@ export interface AllWindowObservables {
|
|
|
26
28
|
[ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;
|
|
27
29
|
[ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;
|
|
28
30
|
[ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;
|
|
31
|
+
[ObservablesEnum.ScrollObservable]: Observable<Event>;
|
|
32
|
+
[ObservablesEnum.ExposureObservable]: Observable<Event>;
|
|
29
33
|
[ObservablesEnum.SelectionObservable]?: Observable<void>;
|
|
30
34
|
}
|
|
31
35
|
export declare const autocapturePlugin: (options?: ElementInteractionsOptions, context?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,
|
|
1
|
+
{"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAK/B,kBAAkB,EAKnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,WAAW,CAAC;AAoBnB,OAAO,EAAE,UAAU,EAAkB,MAAM,2BAA2B,CAAC;AAIvE,KAAK,cAAc,GAAG;IACpB,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAAkC,KAAK,IAAI,CAAC;IACvF,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAAkC,KAAK,IAAI,CAAC;CAC3F,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,EAAE,cAAc,CAAC;KAC5B;CACF;AAED,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CACnD,IAAI,CAAC,0BAA0B,EAAE,cAAc,GAAG,sBAAsB,GAAG,sBAAsB,CAAC,CACnG,GACC,0BAA0B,CAAC;AAE7B,oBAAY,eAAe;IACzB,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IACzC,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;CAC5C;AAED,MAAM,WAAW,oBAAoB;IACnC,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpF,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC;IACxF,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IACnF,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,eAAe,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,eAAO,MAAM,iBAAiB,aACnB,0BAA0B,YACzB;IAAE,iBAAiB,EAAE,kBAAkB,CAAA;CAAE,KAClD,uBA6XF,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from "tslib";
|
|
2
2
|
/* eslint-disable no-restricted-globals */
|
|
3
|
-
import { DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_ACTION_CLICK_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, getGlobalScope, getOrCreateWindowMessenger, enableBackgroundCapture, multicast, } from '@amplitude/analytics-core';
|
|
3
|
+
import { DEFAULT_EXPOSURE_DURATION, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_ACTION_CLICK_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, getGlobalScope, getOrCreateWindowMessenger, enableBackgroundCapture, multicast, } from '@amplitude/analytics-core';
|
|
4
4
|
import { VERSION } from './version';
|
|
5
5
|
import * as constants from './constants';
|
|
6
6
|
import { createShouldTrackEvent, } from './helpers';
|
|
@@ -8,34 +8,40 @@ import { enableVisualTagging } from './libs/messenger';
|
|
|
8
8
|
import { trackClicks } from './autocapture/track-click';
|
|
9
9
|
import { trackChange } from './autocapture/track-change';
|
|
10
10
|
import { trackActionClick } from './autocapture/track-action-click';
|
|
11
|
-
import {
|
|
11
|
+
import { trackScroll } from './autocapture/track-scroll';
|
|
12
|
+
import { createClickObservable, createScrollObservable, createExposureObservable, createMutationObservable, } from './observables';
|
|
12
13
|
import { createLabeledEventToTriggerMap, createTriggerEvaluator, groupLabeledEventIdsByEventType, } from './pageActions/triggers';
|
|
13
14
|
import { DataExtractor } from './data-extractor';
|
|
14
15
|
import { Observable } from '@amplitude/analytics-core';
|
|
16
|
+
import { trackExposure } from './autocapture/track-exposure';
|
|
17
|
+
import { fireViewportContentUpdated, onExposure } from './autocapture/track-viewport-content-updated';
|
|
15
18
|
export var ObservablesEnum;
|
|
16
19
|
(function (ObservablesEnum) {
|
|
17
20
|
ObservablesEnum["ClickObservable"] = "clickObservable";
|
|
18
21
|
ObservablesEnum["ChangeObservable"] = "changeObservable";
|
|
19
|
-
// ErrorObservable = 'errorObservable',
|
|
20
22
|
ObservablesEnum["NavigateObservable"] = "navigateObservable";
|
|
21
23
|
ObservablesEnum["MutationObservable"] = "mutationObservable";
|
|
24
|
+
ObservablesEnum["ScrollObservable"] = "scrollObservable";
|
|
25
|
+
ObservablesEnum["ExposureObservable"] = "exposureObservable";
|
|
22
26
|
ObservablesEnum["BrowserErrorObservable"] = "browserErrorObservable";
|
|
23
27
|
ObservablesEnum["SelectionObservable"] = "selectionObservable";
|
|
24
28
|
ObservablesEnum["MouseMoveObservable"] = "mouseMoveObservable";
|
|
25
29
|
})(ObservablesEnum || (ObservablesEnum = {}));
|
|
26
30
|
export var autocapturePlugin = function (options, context) {
|
|
27
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
31
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
28
32
|
if (options === void 0) { options = {}; }
|
|
29
33
|
// Set the plugin version tag
|
|
30
34
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
31
35
|
context === null || context === void 0 ? void 0 : context.diagnosticsClient.setTag('plugin.autocapture.version', VERSION);
|
|
32
|
-
var
|
|
36
|
+
var _m = options.dataAttributePrefix, dataAttributePrefix = _m === void 0 ? DEFAULT_DATA_ATTRIBUTE_PREFIX : _m, _o = options.visualTaggingOptions, visualTaggingOptions = _o === void 0 ? {
|
|
33
37
|
enabled: true,
|
|
34
|
-
} :
|
|
38
|
+
} : _o;
|
|
35
39
|
options.cssSelectorAllowlist = (_a = options.cssSelectorAllowlist) !== null && _a !== void 0 ? _a : DEFAULT_CSS_SELECTOR_ALLOWLIST;
|
|
36
40
|
options.actionClickAllowlist = (_b = options.actionClickAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_ACTION_CLICK_ALLOWLIST;
|
|
37
41
|
options.debounceTime = (_c = options.debounceTime) !== null && _c !== void 0 ? _c : 0;
|
|
38
|
-
|
|
42
|
+
var resolvedExposureDuration = (_f = (_e = (_d = options.viewportContentUpdated) === null || _d === void 0 ? void 0 : _d.exposureDuration) !== null && _e !== void 0 ? _e : options.exposureDuration) !== null && _f !== void 0 ? _f : DEFAULT_EXPOSURE_DURATION;
|
|
43
|
+
options.viewportContentUpdated = __assign(__assign({}, options.viewportContentUpdated), { exposureDuration: resolvedExposureDuration });
|
|
44
|
+
options.pageUrlExcludelist = (_g = options.pageUrlExcludelist) === null || _g === void 0 ? void 0 : _g.reduce(function (acc, excludePattern) {
|
|
39
45
|
if (typeof excludePattern === 'string') {
|
|
40
46
|
acc.push(excludePattern);
|
|
41
47
|
}
|
|
@@ -56,9 +62,13 @@ export var autocapturePlugin = function (options, context) {
|
|
|
56
62
|
var name = constants.PLUGIN_NAME;
|
|
57
63
|
var type = 'enrichment';
|
|
58
64
|
var subscriptions = [];
|
|
59
|
-
// Create data extractor based on options
|
|
60
65
|
var dataExtractor = new DataExtractor(options, context);
|
|
61
|
-
//
|
|
66
|
+
// Page-level state shared across trackers, emitted in a single Page View End event on beforeunload
|
|
67
|
+
// elementExposedForPage holds the total set of elements seen during the entire page view lifetime
|
|
68
|
+
var elementExposedForPage = new Set();
|
|
69
|
+
// currentElementExposed only holds the set of elements that will be flushed during the next [Amplitude] Viewport Content Updated event
|
|
70
|
+
var currentElementExposed = new Set();
|
|
71
|
+
var beforeUnloadCleanup;
|
|
62
72
|
var createObservables = function () {
|
|
63
73
|
var _a;
|
|
64
74
|
var clickObservable = multicast(createClickObservable().map(function (click) {
|
|
@@ -75,10 +85,6 @@ export var autocapturePlugin = function (options, context) {
|
|
|
75
85
|
/* istanbul ignore next */
|
|
76
86
|
return function () { var _a; return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener('change', handler); };
|
|
77
87
|
}));
|
|
78
|
-
// Create Observable from unhandled errors
|
|
79
|
-
// const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(
|
|
80
|
-
// map((error) => addAdditionalEventProperties(error, 'error')),
|
|
81
|
-
// );
|
|
82
88
|
// Create observable for URL changes
|
|
83
89
|
var navigateObservable;
|
|
84
90
|
/* istanbul ignore next */
|
|
@@ -97,17 +103,21 @@ export var autocapturePlugin = function (options, context) {
|
|
|
97
103
|
var mutationObservable = multicast(createMutationObservable().map(function (mutation) {
|
|
98
104
|
return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', options.cssSelectorAllowlist, dataAttributePrefix);
|
|
99
105
|
}));
|
|
106
|
+
var scrollObservable = createScrollObservable();
|
|
107
|
+
var exposureObservable = createExposureObservable(mutationObservable, options.cssSelectorAllowlist);
|
|
100
108
|
return _a = {},
|
|
101
109
|
_a[ObservablesEnum.ChangeObservable] = changeObservable,
|
|
102
110
|
// [ObservablesEnum.ErrorObservable]: errorObservable,
|
|
103
111
|
_a[ObservablesEnum.ClickObservable] = clickObservable,
|
|
104
112
|
_a[ObservablesEnum.MutationObservable] = mutationObservable,
|
|
105
113
|
_a[ObservablesEnum.NavigateObservable] = navigateObservable,
|
|
114
|
+
_a[ObservablesEnum.ScrollObservable] = scrollObservable,
|
|
115
|
+
_a[ObservablesEnum.ExposureObservable] = exposureObservable,
|
|
106
116
|
_a;
|
|
107
117
|
};
|
|
108
118
|
// Group labeled events by event type (eg. click, change)
|
|
109
|
-
var groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((
|
|
110
|
-
var labeledEventToTriggerMap = createLabeledEventToTriggerMap((
|
|
119
|
+
var groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_j = (_h = options.pageActions) === null || _h === void 0 ? void 0 : _h.labeledEvents) !== null && _j !== void 0 ? _j : {}));
|
|
120
|
+
var labeledEventToTriggerMap = createLabeledEventToTriggerMap((_l = (_k = options.pageActions) === null || _k === void 0 ? void 0 : _k.triggers) !== null && _l !== void 0 ? _l : []);
|
|
111
121
|
// Evaluate triggers for the given event by running the actions associated with the matching triggers
|
|
112
122
|
var evaluateTriggers = createTriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);
|
|
113
123
|
// Function to recalculate internal variables when remote config is updated
|
|
@@ -124,13 +134,15 @@ export var autocapturePlugin = function (options, context) {
|
|
|
124
134
|
}
|
|
125
135
|
};
|
|
126
136
|
var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
|
-
var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist, messenger;
|
|
137
|
+
var pageViewEndFired, lastScroll, shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, scrollTracker, trackers, globalScope, handleViewportContentUpdated, handleExposure, beforeUnloadHandler, navigateObservable, popstateHandler_1, originalPushState_1, allowlist, actionClickAllowlist, messenger;
|
|
128
138
|
var _a;
|
|
129
139
|
return __generator(this, function (_b) {
|
|
130
140
|
/* istanbul ignore if */
|
|
131
141
|
if (typeof document === 'undefined') {
|
|
132
142
|
return [2 /*return*/];
|
|
133
143
|
}
|
|
144
|
+
pageViewEndFired = false;
|
|
145
|
+
lastScroll = { maxX: undefined, maxY: undefined };
|
|
134
146
|
// Fetch remote config for pageActions in a non-blocking manner
|
|
135
147
|
if (config.fetchRemoteConfig) {
|
|
136
148
|
if (!config.remoteConfigClient) {
|
|
@@ -184,6 +196,89 @@ export var autocapturePlugin = function (options, context) {
|
|
|
184
196
|
if (actionClickSubscription) {
|
|
185
197
|
subscriptions.push(actionClickSubscription);
|
|
186
198
|
}
|
|
199
|
+
scrollTracker = trackScroll({
|
|
200
|
+
allObservables: allObservables,
|
|
201
|
+
amplitude: amplitude,
|
|
202
|
+
});
|
|
203
|
+
subscriptions.push(scrollTracker);
|
|
204
|
+
trackers = {};
|
|
205
|
+
globalScope = getGlobalScope();
|
|
206
|
+
handleViewportContentUpdated = function (isPageEnd) {
|
|
207
|
+
if (isPageEnd && pageViewEndFired) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
setTimeout(function () {
|
|
211
|
+
pageViewEndFired = false;
|
|
212
|
+
}, 100);
|
|
213
|
+
pageViewEndFired = true;
|
|
214
|
+
fireViewportContentUpdated({
|
|
215
|
+
amplitude: amplitude,
|
|
216
|
+
scrollTracker: scrollTracker,
|
|
217
|
+
currentElementExposed: currentElementExposed,
|
|
218
|
+
elementExposedForPage: elementExposedForPage,
|
|
219
|
+
exposureTracker: trackers.exposure,
|
|
220
|
+
isPageEnd: isPageEnd,
|
|
221
|
+
lastScroll: lastScroll,
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
handleExposure = function (elementPath) {
|
|
225
|
+
onExposure(elementPath, elementExposedForPage, currentElementExposed, handleViewportContentUpdated);
|
|
226
|
+
};
|
|
227
|
+
trackers.exposure = trackExposure({
|
|
228
|
+
allObservables: allObservables,
|
|
229
|
+
onExposure: handleExposure,
|
|
230
|
+
dataExtractor: dataExtractor,
|
|
231
|
+
exposureDuration: resolvedExposureDuration,
|
|
232
|
+
});
|
|
233
|
+
if (trackers.exposure) {
|
|
234
|
+
subscriptions.push(trackers.exposure);
|
|
235
|
+
}
|
|
236
|
+
beforeUnloadHandler = function () {
|
|
237
|
+
handleViewportContentUpdated(true);
|
|
238
|
+
};
|
|
239
|
+
/* istanbul ignore next */
|
|
240
|
+
globalScope === null || globalScope === void 0 ? void 0 : globalScope.addEventListener('beforeunload', beforeUnloadHandler);
|
|
241
|
+
beforeUnloadCleanup = function () {
|
|
242
|
+
/* istanbul ignore next */
|
|
243
|
+
globalScope === null || globalScope === void 0 ? void 0 : globalScope.removeEventListener('beforeunload', beforeUnloadHandler);
|
|
244
|
+
};
|
|
245
|
+
// Ensure cleanup on teardown as well
|
|
246
|
+
subscriptions.push({ unsubscribe: function () { return beforeUnloadCleanup(); } });
|
|
247
|
+
navigateObservable = allObservables[ObservablesEnum.NavigateObservable];
|
|
248
|
+
if (navigateObservable) {
|
|
249
|
+
subscriptions.push(navigateObservable.subscribe(function () {
|
|
250
|
+
handleViewportContentUpdated(true);
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
else if (globalScope) {
|
|
254
|
+
popstateHandler_1 = function () {
|
|
255
|
+
handleViewportContentUpdated(true);
|
|
256
|
+
};
|
|
257
|
+
/* istanbul ignore next */
|
|
258
|
+
// Fallback for SPA tracking when Navigation API is not available
|
|
259
|
+
globalScope.addEventListener('popstate', popstateHandler_1);
|
|
260
|
+
originalPushState_1 = globalScope.history.pushState;
|
|
261
|
+
if (globalScope.history && originalPushState_1) {
|
|
262
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
263
|
+
globalScope.history.pushState = new Proxy(originalPushState_1, {
|
|
264
|
+
apply: function (target, thisArg, _a) {
|
|
265
|
+
var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];
|
|
266
|
+
target.apply(thisArg, [state, unused, url]);
|
|
267
|
+
handleViewportContentUpdated(true);
|
|
268
|
+
},
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
subscriptions.push({
|
|
272
|
+
unsubscribe: function () {
|
|
273
|
+
/* istanbul ignore next */
|
|
274
|
+
globalScope.removeEventListener('popstate', popstateHandler_1);
|
|
275
|
+
/* istanbul ignore next */
|
|
276
|
+
if (globalScope.history && originalPushState_1) {
|
|
277
|
+
globalScope.history.pushState = originalPushState_1;
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
187
282
|
/* istanbul ignore next */
|
|
188
283
|
(_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log("".concat(name, " has been successfully added."));
|
|
189
284
|
// Setup visual tagging and background capture on the shared messenger singleton.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocapture-plugin.js","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n type BrowserClient,\n type BrowserConfig,\n type EnrichmentPlugin,\n type ElementInteractionsOptions,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n IDiagnosticsClient,\n getGlobalScope,\n getOrCreateWindowMessenger,\n enableBackgroundCapture,\n multicast,\n} from '@amplitude/analytics-core';\nimport { VERSION } from './version';\nimport * as constants from './constants';\nimport {\n createShouldTrackEvent,\n type ElementBasedTimestampedEvent,\n type TimestampedEvent,\n type NavigateEvent,\n} from './helpers';\nimport { enableVisualTagging } from './libs/messenger';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { createClickObservable, createMutationObservable } from './observables';\n\nimport {\n createLabeledEventToTriggerMap,\n createTriggerEvaluator,\n groupLabeledEventIdsByEventType,\n} from './pageActions/triggers';\nimport { DataExtractor } from './data-extractor';\nimport { Observable, Unsubscribable } from '@amplitude/analytics-core';\n\ntype NavigationType = {\n addEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n removeEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n};\n\ndeclare global {\n interface Window {\n navigation: NavigationType;\n }\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport type AutoCaptureOptionsWithDefaults = Required<\n Pick<ElementInteractionsOptions, 'debounceTime' | 'cssSelectorAllowlist' | 'actionClickAllowlist'>\n> &\n ElementInteractionsOptions;\n\nexport enum ObservablesEnum {\n ClickObservable = 'clickObservable',\n ChangeObservable = 'changeObservable',\n // ErrorObservable = 'errorObservable',\n NavigateObservable = 'navigateObservable',\n MutationObservable = 'mutationObservable',\n BrowserErrorObservable = 'browserErrorObservable',\n SelectionObservable = 'selectionObservable',\n MouseMoveObservable = 'mouseMoveObservable',\n}\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ChangeObservable]: Observable<ElementBasedTimestampedEvent<Event>>;\n // [ObservablesEnum.ErrorObservable]: Observable<TimestampedEvent<ErrorEvent>>;\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n [ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;\n [ObservablesEnum.SelectionObservable]?: Observable<void>;\n}\n\nexport const autocapturePlugin = (\n options: ElementInteractionsOptions = {},\n context?: { diagnosticsClient: IDiagnosticsClient },\n): BrowserEnrichmentPlugin => {\n // Set the plugin version tag\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n context?.diagnosticsClient.setTag('plugin.autocapture.version', VERSION);\n\n const {\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n },\n } = options;\n\n options.cssSelectorAllowlist = options.cssSelectorAllowlist ?? DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = options.actionClickAllowlist ?? DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = options.debounceTime ?? 0;\n\n options.pageUrlExcludelist = options.pageUrlExcludelist?.reduce(\n (acc: (string | RegExp | { pattern: string })[], excludePattern) => {\n if (typeof excludePattern === 'string') {\n acc.push(excludePattern);\n }\n if (excludePattern instanceof RegExp) {\n acc.push(excludePattern);\n }\n if (typeof excludePattern === 'object' && excludePattern !== null && 'pattern' in excludePattern) {\n try {\n acc.push(new RegExp(excludePattern.pattern));\n } catch (regexError) {\n console.warn(`Invalid regex pattern: ${excludePattern.pattern}`, regexError);\n return acc;\n }\n }\n return acc;\n },\n [],\n );\n\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n // Create data extractor based on options\n const dataExtractor = new DataExtractor(options, context);\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n const clickObservable = multicast(\n createClickObservable().map(\n (click) =>\n dataExtractor.addAdditionalEventProperties(\n click,\n 'click',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n ) as ElementBasedTimestampedEvent<MouseEvent>,\n ),\n );\n\n const changeObservable = multicast(\n new Observable<ElementBasedTimestampedEvent<Event>>((observer) => {\n const handler = (changeEvent: Event) => {\n const enrichedChangeEvent = dataExtractor.addAdditionalEventProperties(\n changeEvent,\n 'change',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n ) as ElementBasedTimestampedEvent<Event>;\n observer.next(enrichedChangeEvent);\n };\n /* istanbul ignore next */\n getGlobalScope()?.document.addEventListener('change', handler, { capture: true });\n /* istanbul ignore next */\n return () => getGlobalScope()?.document.removeEventListener('change', handler);\n }),\n );\n\n // Create Observable from unhandled errors\n // const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(\n // map((error) => addAdditionalEventProperties(error, 'error')),\n // );\n\n // Create observable for URL changes\n let navigateObservable: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = multicast(\n new Observable<TimestampedEvent<NavigateEvent>>((observer) => {\n const handler = (navigateEvent: NavigateEvent) => {\n const enrichedNavigateEvent = dataExtractor.addAdditionalEventProperties(\n navigateEvent,\n 'navigate',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n );\n observer.next(enrichedNavigateEvent);\n };\n window.navigation.addEventListener('navigate', handler as EventListener);\n return () => {\n window.navigation.removeEventListener('navigate', handler as EventListener);\n };\n }),\n );\n }\n\n const mutationObservable = multicast(\n createMutationObservable().map((mutation) =>\n dataExtractor.addAdditionalEventProperties(\n mutation,\n 'mutation',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n ),\n ),\n );\n\n return {\n [ObservablesEnum.ChangeObservable]: changeObservable,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n [ObservablesEnum.ClickObservable]: clickObservable,\n [ObservablesEnum.MutationObservable]: mutationObservable,\n [ObservablesEnum.NavigateObservable]: navigateObservable,\n };\n };\n\n // Group labeled events by event type (eg. click, change)\n let groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values(options.pageActions?.labeledEvents ?? {}));\n\n let labeledEventToTriggerMap = createLabeledEventToTriggerMap(options.pageActions?.triggers ?? []);\n\n // Evaluate triggers for the given event by running the actions associated with the matching triggers\n const evaluateTriggers = createTriggerEvaluator(\n groupedLabeledEvents,\n labeledEventToTriggerMap,\n dataExtractor,\n options,\n );\n\n // Function to recalculate internal variables when remote config is updated\n const recomputePageActionsData = (remotePageActions: ElementInteractionsOptions['pageActions']) => {\n if (remotePageActions) {\n // Merge remote config with local options\n options.pageActions = {\n ...options.pageActions,\n ...remotePageActions,\n };\n\n // Recalculate internal variables\n groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values(options.pageActions.labeledEvents ?? {}));\n labeledEventToTriggerMap = createLabeledEventToTriggerMap(options.pageActions.triggers ?? []);\n\n // Update evaluateTriggers function\n evaluateTriggers.update(groupedLabeledEvents, labeledEventToTriggerMap, options);\n }\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Fetch remote config for pageActions in a non-blocking manner\n if (config.fetchRemoteConfig) {\n if (!config.remoteConfigClient) {\n // TODO(xinyi): Diagnostics.recordEvent\n config.loggerProvider.debug('Remote config client is not provided, skipping remote config fetch');\n } else {\n config.remoteConfigClient.subscribe('configs.analyticsSDK.pageActions', 'all', (remoteConfig) => {\n recomputePageActionsData(remoteConfig as ElementInteractionsOptions['pageActions']);\n });\n }\n }\n\n // Create should track event functions the different allowlists\n const shouldTrackEvent = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n const shouldTrackActionClick = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist,\n );\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions\n const clickTrackingSubscription = trackClicks({\n allObservables,\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n\n subscriptions.push(clickTrackingSubscription);\n\n const changeSubscription = trackChange({\n allObservables,\n getEventProperties: (...args) => dataExtractor.getEventProperties(...args, dataAttributePrefix),\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(changeSubscription);\n\n const actionClickSubscription = trackActionClick({\n allObservables,\n options: options as AutoCaptureOptionsWithDefaults,\n getEventProperties: (...args) => dataExtractor.getEventProperties(...args, dataAttributePrefix),\n amplitude,\n shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n if (actionClickSubscription) {\n subscriptions.push(actionClickSubscription);\n }\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n\n // Setup visual tagging and background capture on the shared messenger singleton.\n // Using the singleton ensures a single message listener per page, even when\n // session-replay is also loaded.\n if (window.opener && visualTaggingOptions.enabled) {\n const allowlist = (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist;\n const actionClickAllowlist = (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist;\n\n const messenger = getOrCreateWindowMessenger();\n enableVisualTagging(messenger, {\n dataExtractor,\n isElementSelectable: createShouldTrackEvent(options, [...allowlist, ...actionClickAllowlist]),\n cssSelectorAllowlist: allowlist,\n actionClickAllowlist,\n });\n enableBackgroundCapture(messenger);\n /* istanbul ignore next */\n messenger.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"autocapture-plugin.js","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n type BrowserClient,\n type BrowserConfig,\n type EnrichmentPlugin,\n type ElementInteractionsOptions,\n DEFAULT_EXPOSURE_DURATION,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n IDiagnosticsClient,\n getGlobalScope,\n getOrCreateWindowMessenger,\n enableBackgroundCapture,\n multicast,\n} from '@amplitude/analytics-core';\nimport { VERSION } from './version';\nimport * as constants from './constants';\nimport {\n createShouldTrackEvent,\n type ElementBasedTimestampedEvent,\n type TimestampedEvent,\n type NavigateEvent,\n} from './helpers';\nimport { enableVisualTagging } from './libs/messenger';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { trackScroll } from './autocapture/track-scroll';\n\nimport {\n createClickObservable,\n createScrollObservable,\n createExposureObservable,\n createMutationObservable,\n} from './observables';\n\nimport {\n createLabeledEventToTriggerMap,\n createTriggerEvaluator,\n groupLabeledEventIdsByEventType,\n} from './pageActions/triggers';\nimport { DataExtractor } from './data-extractor';\nimport { Observable, Unsubscribable } from '@amplitude/analytics-core';\nimport { trackExposure } from './autocapture/track-exposure';\nimport { fireViewportContentUpdated, onExposure, ExposureTracker } from './autocapture/track-viewport-content-updated';\n\ntype NavigationType = {\n addEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n removeEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void;\n};\n\ndeclare global {\n interface Window {\n navigation: NavigationType;\n }\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport type AutoCaptureOptionsWithDefaults = Required<\n Pick<ElementInteractionsOptions, 'debounceTime' | 'cssSelectorAllowlist' | 'actionClickAllowlist'>\n> &\n ElementInteractionsOptions;\n\nexport enum ObservablesEnum {\n ClickObservable = 'clickObservable',\n ChangeObservable = 'changeObservable',\n NavigateObservable = 'navigateObservable',\n MutationObservable = 'mutationObservable',\n ScrollObservable = 'scrollObservable',\n ExposureObservable = 'exposureObservable',\n BrowserErrorObservable = 'browserErrorObservable',\n SelectionObservable = 'selectionObservable',\n MouseMoveObservable = 'mouseMoveObservable',\n}\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ChangeObservable]: Observable<ElementBasedTimestampedEvent<Event>>;\n // [ObservablesEnum.ErrorObservable]: Observable<TimestampedEvent<ErrorEvent>>;\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n [ObservablesEnum.NavigateObservable]?: Observable<TimestampedEvent<NavigateEvent>>;\n [ObservablesEnum.ScrollObservable]: Observable<Event>; // TODO: add type for scroll event\n [ObservablesEnum.ExposureObservable]: Observable<Event>;\n [ObservablesEnum.SelectionObservable]?: Observable<void>;\n}\n\nexport const autocapturePlugin = (\n options: ElementInteractionsOptions = {},\n context?: { diagnosticsClient: IDiagnosticsClient },\n): BrowserEnrichmentPlugin => {\n // Set the plugin version tag\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n context?.diagnosticsClient.setTag('plugin.autocapture.version', VERSION);\n\n const {\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n },\n } = options;\n\n options.cssSelectorAllowlist = options.cssSelectorAllowlist ?? DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = options.actionClickAllowlist ?? DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = options.debounceTime ?? 0;\n const resolvedExposureDuration =\n options.viewportContentUpdated?.exposureDuration ?? options.exposureDuration ?? DEFAULT_EXPOSURE_DURATION;\n options.viewportContentUpdated = {\n ...options.viewportContentUpdated,\n exposureDuration: resolvedExposureDuration,\n };\n\n options.pageUrlExcludelist = options.pageUrlExcludelist?.reduce(\n (acc: (string | RegExp | { pattern: string })[], excludePattern) => {\n if (typeof excludePattern === 'string') {\n acc.push(excludePattern);\n }\n if (excludePattern instanceof RegExp) {\n acc.push(excludePattern);\n }\n if (typeof excludePattern === 'object' && excludePattern !== null && 'pattern' in excludePattern) {\n try {\n acc.push(new RegExp(excludePattern.pattern));\n } catch (regexError) {\n console.warn(`Invalid regex pattern: ${excludePattern.pattern}`, regexError);\n return acc;\n }\n }\n return acc;\n },\n [],\n );\n\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Unsubscribable[] = [];\n\n const dataExtractor = new DataExtractor(options, context);\n\n // Page-level state shared across trackers, emitted in a single Page View End event on beforeunload\n // elementExposedForPage holds the total set of elements seen during the entire page view lifetime\n const elementExposedForPage = new Set<string>();\n // currentElementExposed only holds the set of elements that will be flushed during the next [Amplitude] Viewport Content Updated event\n const currentElementExposed = new Set<string>();\n\n let beforeUnloadCleanup: () => void;\n\n const createObservables = (): AllWindowObservables => {\n const clickObservable = multicast(\n createClickObservable().map(\n (click) =>\n dataExtractor.addAdditionalEventProperties(\n click,\n 'click',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n ) as ElementBasedTimestampedEvent<MouseEvent>,\n ),\n );\n\n const changeObservable = multicast(\n new Observable<ElementBasedTimestampedEvent<Event>>((observer) => {\n const handler = (changeEvent: Event) => {\n const enrichedChangeEvent = dataExtractor.addAdditionalEventProperties(\n changeEvent,\n 'change',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n ) as ElementBasedTimestampedEvent<Event>;\n observer.next(enrichedChangeEvent);\n };\n /* istanbul ignore next */\n getGlobalScope()?.document.addEventListener('change', handler, { capture: true });\n /* istanbul ignore next */\n return () => getGlobalScope()?.document.removeEventListener('change', handler);\n }),\n );\n\n // Create observable for URL changes\n let navigateObservable: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = multicast(\n new Observable<TimestampedEvent<NavigateEvent>>((observer) => {\n const handler = (navigateEvent: NavigateEvent) => {\n const enrichedNavigateEvent = dataExtractor.addAdditionalEventProperties(\n navigateEvent,\n 'navigate',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n );\n observer.next(enrichedNavigateEvent);\n };\n window.navigation.addEventListener('navigate', handler as EventListener);\n return () => {\n window.navigation.removeEventListener('navigate', handler as EventListener);\n };\n }),\n );\n }\n\n const mutationObservable = multicast(\n createMutationObservable().map((mutation) =>\n dataExtractor.addAdditionalEventProperties(\n mutation,\n 'mutation',\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n dataAttributePrefix,\n ),\n ),\n );\n\n const scrollObservable = createScrollObservable();\n\n const exposureObservable = createExposureObservable(\n mutationObservable,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n\n return {\n [ObservablesEnum.ChangeObservable]: changeObservable,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n [ObservablesEnum.ClickObservable]: clickObservable,\n [ObservablesEnum.MutationObservable]: mutationObservable,\n [ObservablesEnum.NavigateObservable]: navigateObservable,\n [ObservablesEnum.ScrollObservable]: scrollObservable,\n [ObservablesEnum.ExposureObservable]: exposureObservable,\n };\n };\n\n // Group labeled events by event type (eg. click, change)\n let groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values(options.pageActions?.labeledEvents ?? {}));\n\n let labeledEventToTriggerMap = createLabeledEventToTriggerMap(options.pageActions?.triggers ?? []);\n\n // Evaluate triggers for the given event by running the actions associated with the matching triggers\n const evaluateTriggers = createTriggerEvaluator(\n groupedLabeledEvents,\n labeledEventToTriggerMap,\n dataExtractor,\n options,\n );\n\n // Function to recalculate internal variables when remote config is updated\n const recomputePageActionsData = (remotePageActions: ElementInteractionsOptions['pageActions']) => {\n if (remotePageActions) {\n // Merge remote config with local options\n options.pageActions = {\n ...options.pageActions,\n ...remotePageActions,\n };\n\n // Recalculate internal variables\n groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values(options.pageActions.labeledEvents ?? {}));\n labeledEventToTriggerMap = createLabeledEventToTriggerMap(options.pageActions.triggers ?? []);\n\n // Update evaluateTriggers function\n evaluateTriggers.update(groupedLabeledEvents, labeledEventToTriggerMap, options);\n }\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n let pageViewEndFired = false;\n const lastScroll: { maxX: undefined | number; maxY: undefined | number } = { maxX: undefined, maxY: undefined };\n\n // Fetch remote config for pageActions in a non-blocking manner\n if (config.fetchRemoteConfig) {\n if (!config.remoteConfigClient) {\n // TODO(xinyi): Diagnostics.recordEvent\n config.loggerProvider.debug('Remote config client is not provided, skipping remote config fetch');\n } else {\n config.remoteConfigClient.subscribe('configs.analyticsSDK.pageActions', 'all', (remoteConfig) => {\n recomputePageActionsData(remoteConfig as ElementInteractionsOptions['pageActions']);\n });\n }\n }\n\n // Create should track event functions the different allowlists\n const shouldTrackEvent = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n const shouldTrackActionClick = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist,\n );\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions\n const clickTrackingSubscription = trackClicks({\n allObservables,\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n\n subscriptions.push(clickTrackingSubscription);\n\n const changeSubscription = trackChange({\n allObservables,\n getEventProperties: (...args) => dataExtractor.getEventProperties(...args, dataAttributePrefix),\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(changeSubscription);\n\n const actionClickSubscription = trackActionClick({\n allObservables,\n options: options as AutoCaptureOptionsWithDefaults,\n getEventProperties: (...args) => dataExtractor.getEventProperties(...args, dataAttributePrefix),\n amplitude,\n shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n if (actionClickSubscription) {\n subscriptions.push(actionClickSubscription);\n }\n\n const scrollTracker = trackScroll({\n allObservables,\n amplitude,\n });\n subscriptions.push(scrollTracker);\n\n const trackers: { exposure?: ExposureTracker & Unsubscribable } = {};\n\n const globalScope = getGlobalScope();\n\n const handleViewportContentUpdated = (isPageEnd: boolean) => {\n if (isPageEnd && pageViewEndFired) {\n return;\n }\n setTimeout(() => {\n pageViewEndFired = false;\n }, 100);\n\n pageViewEndFired = true;\n fireViewportContentUpdated({\n amplitude,\n scrollTracker,\n currentElementExposed,\n elementExposedForPage,\n exposureTracker: trackers.exposure,\n isPageEnd,\n lastScroll,\n });\n };\n\n const handleExposure = (elementPath: string) => {\n onExposure(elementPath, elementExposedForPage, currentElementExposed, handleViewportContentUpdated);\n };\n\n trackers.exposure = trackExposure({\n allObservables,\n onExposure: handleExposure,\n dataExtractor,\n exposureDuration: resolvedExposureDuration,\n });\n if (trackers.exposure) {\n subscriptions.push(trackers.exposure);\n }\n\n const beforeUnloadHandler = () => {\n handleViewportContentUpdated(true);\n };\n /* istanbul ignore next */\n globalScope?.addEventListener('beforeunload', beforeUnloadHandler);\n beforeUnloadCleanup = () => {\n /* istanbul ignore next */\n globalScope?.removeEventListener('beforeunload', beforeUnloadHandler);\n };\n // Ensure cleanup on teardown as well\n subscriptions.push({ unsubscribe: () => beforeUnloadCleanup() });\n\n // Also track on navigation (SPA)\n const navigateObservable = allObservables[ObservablesEnum.NavigateObservable];\n if (navigateObservable) {\n subscriptions.push(\n navigateObservable.subscribe(() => {\n handleViewportContentUpdated(true);\n }),\n );\n } else if (globalScope) {\n const popstateHandler = () => {\n handleViewportContentUpdated(true);\n };\n /* istanbul ignore next */\n // Fallback for SPA tracking when Navigation API is not available\n globalScope.addEventListener('popstate', popstateHandler);\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalPushState = globalScope.history.pushState;\n if (globalScope.history && originalPushState) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(originalPushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n handleViewportContentUpdated(true);\n },\n });\n }\n\n subscriptions.push({\n unsubscribe: () => {\n /* istanbul ignore next */\n globalScope.removeEventListener('popstate', popstateHandler);\n /* istanbul ignore next */\n if (globalScope.history && originalPushState) {\n globalScope.history.pushState = originalPushState;\n }\n },\n });\n }\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n\n // Setup visual tagging and background capture on the shared messenger singleton.\n // Using the singleton ensures a single message listener per page, even when\n // session-replay is also loaded.\n if (window.opener && visualTaggingOptions.enabled) {\n const allowlist = (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist;\n const actionClickAllowlist = (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist;\n\n const messenger = getOrCreateWindowMessenger();\n enableVisualTagging(messenger, {\n dataExtractor,\n isElementSelectable: createShouldTrackEvent(options, [...allowlist, ...actionClickAllowlist]),\n cssSelectorAllowlist: allowlist,\n actionClickAllowlist,\n });\n enableBackgroundCapture(messenger);\n /* istanbul ignore next */\n messenger.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
|
package/lib/esm/constants.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = "[Amplitude] Dead Cl
|
|
|
5
5
|
export declare const AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = "[Amplitude] Rage Click";
|
|
6
6
|
export declare const AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = "[Amplitude] Error Click";
|
|
7
7
|
export declare const AMPLITUDE_ELEMENT_CHANGED_EVENT = "[Amplitude] Element Changed";
|
|
8
|
+
export declare const AMPLITUDE_PAGE_SCROLLED_EVENT = "[Amplitude] Page Scrolled";
|
|
8
9
|
export declare const AMPLITUDE_THRASHED_CURSOR_EVENT = "[Amplitude] Thrashed Cursor";
|
|
9
10
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ID = "[Amplitude] Element ID";
|
|
10
11
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = "[Amplitude] Element Class";
|
|
@@ -16,15 +17,21 @@ export declare const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = "[Amplitude] E
|
|
|
16
17
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = "[Amplitude] Element Position Top";
|
|
17
18
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = "[Amplitude] Element Aria Label";
|
|
18
19
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = "[Amplitude] Element Attributes";
|
|
20
|
+
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_PATH = "[Amplitude] Element Path";
|
|
19
21
|
export declare const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = "[Amplitude] Element Parent Label";
|
|
20
22
|
export declare const AMPLITUDE_EVENT_PROP_PAGE_URL = "[Amplitude] Page URL";
|
|
21
23
|
export declare const AMPLITUDE_EVENT_PROP_PAGE_TITLE = "[Amplitude] Page Title";
|
|
22
24
|
export declare const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = "[Amplitude] Viewport Height";
|
|
23
25
|
export declare const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = "[Amplitude] Viewport Width";
|
|
26
|
+
export declare const AMPLITUDE_EVENT_PROP_MAX_PAGE_X = "[Amplitude] Max Page X";
|
|
27
|
+
export declare const AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = "[Amplitude] Max Page Y";
|
|
28
|
+
export declare const AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = "[Amplitude] Page View ID";
|
|
24
29
|
export { AMPLITUDE_ORIGIN, AMPLITUDE_ORIGIN_EU, AMPLITUDE_ORIGIN_STAGING, AMPLITUDE_ORIGINS_MAP, AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL, } from '@amplitude/analytics-core';
|
|
25
30
|
export declare const AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = "https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz";
|
|
26
31
|
export declare const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = "amp-visual-tagging-selector-highlight";
|
|
27
32
|
export declare const DATA_AMP_MASK_ATTRIBUTES = "data-amp-mask-attributes";
|
|
28
33
|
export declare const MAX_MASK_TEXT_PATTERNS = 25;
|
|
29
34
|
export declare const MAX_ATTRIBUTE_LENGTH = 128;
|
|
35
|
+
export declare const PAGE_VIEW_SESSION_STORAGE_KEY = "AMP_PAGE_VIEW";
|
|
36
|
+
export declare const MAX_ELEMENT_EXPOSED_STR_LENGTH = 18000;
|
|
30
37
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,qCAAqC,4BAA4B,CAAC;AAC/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAE7E,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAC9E,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAC9F,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,uBAAuB,0CAA0C,CAAC;AAE/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,oCAAoC,2BAA2B,CAAC;AAC7E,eAAO,MAAM,qCAAqC,4BAA4B,CAAC;AAC/E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAE7E,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAC9E,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAC9F,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAE5E,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AACpE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAClF,eAAO,MAAM,mCAAmC,+BAA+B,CAAC;AAChF,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AAExE,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAG5E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,4CAA4C,6EACmB,CAAC;AAG7E,eAAO,MAAM,wCAAwC,0CAA0C,CAAC;AAGhG,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAGxC,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAE7D,eAAO,MAAM,8BAA8B,QAAS,CAAC"}
|
package/lib/esm/constants.js
CHANGED
|
@@ -5,6 +5,7 @@ export var AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';
|
|
|
5
5
|
export var AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';
|
|
6
6
|
export var AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = '[Amplitude] Error Click';
|
|
7
7
|
export var AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';
|
|
8
|
+
export var AMPLITUDE_PAGE_SCROLLED_EVENT = '[Amplitude] Page Scrolled';
|
|
8
9
|
export var AMPLITUDE_THRASHED_CURSOR_EVENT = '[Amplitude] Thrashed Cursor';
|
|
9
10
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';
|
|
10
11
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';
|
|
@@ -16,11 +17,15 @@ export var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Pos
|
|
|
16
17
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';
|
|
17
18
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';
|
|
18
19
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';
|
|
20
|
+
export var AMPLITUDE_EVENT_PROP_ELEMENT_PATH = '[Amplitude] Element Path';
|
|
19
21
|
export var AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';
|
|
20
22
|
export var AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';
|
|
21
23
|
export var AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';
|
|
22
24
|
export var AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';
|
|
23
25
|
export var AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';
|
|
26
|
+
export var AMPLITUDE_EVENT_PROP_MAX_PAGE_X = '[Amplitude] Max Page X';
|
|
27
|
+
export var AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = '[Amplitude] Max Page Y';
|
|
28
|
+
export var AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = '[Amplitude] Page View ID';
|
|
24
29
|
// Origin constants are now shared via analytics-core; re-export for backwards compatibility
|
|
25
30
|
export { AMPLITUDE_ORIGIN, AMPLITUDE_ORIGIN_EU, AMPLITUDE_ORIGIN_STAGING, AMPLITUDE_ORIGINS_MAP, AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL, } from '@amplitude/analytics-core';
|
|
26
31
|
export var AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';
|
|
@@ -31,4 +36,7 @@ export var AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-select
|
|
|
31
36
|
export var DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes';
|
|
32
37
|
export var MAX_MASK_TEXT_PATTERNS = 25;
|
|
33
38
|
export var MAX_ATTRIBUTE_LENGTH = 128;
|
|
39
|
+
// The key for the page view object in sessionStorage
|
|
40
|
+
export var PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';
|
|
41
|
+
export var MAX_ELEMENT_EXPOSED_STR_LENGTH = 18000;
|
|
34
42
|
//# sourceMappingURL=constants.js.map
|
package/lib/esm/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,WAAW,GAAG,uCAAuC,CAAC;AACnE,MAAM,CAAC,IAAM,uBAAuB,GAAG,uCAAuC,CAAC;AAE/E,MAAM,CAAC,IAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAC7E,MAAM,CAAC,IAAM,oCAAoC,GAAG,wBAAwB,CAAC;AAC7E,MAAM,CAAC,IAAM,oCAAoC,GAAG,wBAAwB,CAAC;AAC7E,MAAM,CAAC,IAAM,qCAAqC,GAAG,yBAAyB,CAAC;AAC/E,MAAM,CAAC,IAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAC7E,MAAM,CAAC,IAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAE7E,MAAM,CAAC,IAAM,+BAA+B,GAAG,wBAAwB,CAAC;AACxE,MAAM,CAAC,IAAM,kCAAkC,GAAG,2BAA2B,CAAC;AAC9E,MAAM,CAAC,IAAM,gCAAgC,GAAG,yBAAyB,CAAC;AAC1E,MAAM,CAAC,IAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAC5E,MAAM,CAAC,IAAM,sCAAsC,GAAG,+BAA+B,CAAC;AACtF,MAAM,CAAC,IAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAC5E,MAAM,CAAC,IAAM,0CAA0C,GAAG,mCAAmC,CAAC;AAC9F,MAAM,CAAC,IAAM,yCAAyC,GAAG,kCAAkC,CAAC;AAC5F,MAAM,CAAC,IAAM,uCAAuC,GAAG,gCAAgC,CAAC;AACxF,MAAM,CAAC,IAAM,uCAAuC,GAAG,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,WAAW,GAAG,uCAAuC,CAAC;AACnE,MAAM,CAAC,IAAM,uBAAuB,GAAG,uCAAuC,CAAC;AAE/E,MAAM,CAAC,IAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAC7E,MAAM,CAAC,IAAM,oCAAoC,GAAG,wBAAwB,CAAC;AAC7E,MAAM,CAAC,IAAM,oCAAoC,GAAG,wBAAwB,CAAC;AAC7E,MAAM,CAAC,IAAM,qCAAqC,GAAG,yBAAyB,CAAC;AAC/E,MAAM,CAAC,IAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAC7E,MAAM,CAAC,IAAM,6BAA6B,GAAG,2BAA2B,CAAC;AACzE,MAAM,CAAC,IAAM,+BAA+B,GAAG,6BAA6B,CAAC;AAE7E,MAAM,CAAC,IAAM,+BAA+B,GAAG,wBAAwB,CAAC;AACxE,MAAM,CAAC,IAAM,kCAAkC,GAAG,2BAA2B,CAAC;AAC9E,MAAM,CAAC,IAAM,gCAAgC,GAAG,yBAAyB,CAAC;AAC1E,MAAM,CAAC,IAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAC5E,MAAM,CAAC,IAAM,sCAAsC,GAAG,+BAA+B,CAAC;AACtF,MAAM,CAAC,IAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAC5E,MAAM,CAAC,IAAM,0CAA0C,GAAG,mCAAmC,CAAC;AAC9F,MAAM,CAAC,IAAM,yCAAyC,GAAG,kCAAkC,CAAC;AAC5F,MAAM,CAAC,IAAM,uCAAuC,GAAG,gCAAgC,CAAC;AACxF,MAAM,CAAC,IAAM,uCAAuC,GAAG,gCAAgC,CAAC;AACxF,MAAM,CAAC,IAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAE5E,MAAM,CAAC,IAAM,yCAAyC,GAAG,kCAAkC,CAAC;AAC5F,MAAM,CAAC,IAAM,6BAA6B,GAAG,sBAAsB,CAAC;AACpE,MAAM,CAAC,IAAM,+BAA+B,GAAG,wBAAwB,CAAC;AACxE,MAAM,CAAC,IAAM,oCAAoC,GAAG,6BAA6B,CAAC;AAClF,MAAM,CAAC,IAAM,mCAAmC,GAAG,4BAA4B,CAAC;AAChF,MAAM,CAAC,IAAM,+BAA+B,GAAG,wBAAwB,CAAC;AACxE,MAAM,CAAC,IAAM,+BAA+B,GAAG,wBAAwB,CAAC;AAExE,MAAM,CAAC,IAAM,iCAAiC,GAAG,0BAA0B,CAAC;AAE5E,4FAA4F;AAC5F,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,uCAAuC,GACxC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,CAAC,IAAM,4CAA4C,GACvD,0EAA0E,CAAC;AAC7E,gGAAgG;AAChG,6CAA6C;AAC7C,MAAM,CAAC,IAAM,wCAAwC,GAAG,uCAAuC,CAAC;AAEhG,qFAAqF;AACrF,MAAM,CAAC,IAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAEnE,MAAM,CAAC,IAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC,MAAM,CAAC,IAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,qDAAqD;AACrD,MAAM,CAAC,IAAM,6BAA6B,GAAG,eAAe,CAAC;AAE7D,MAAM,CAAC,IAAM,8BAA8B,GAAG,KAAM,CAAC","sourcesContent":["export const PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\nexport const FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';\n\nexport const AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport const AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';\nexport const AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';\nexport const AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = '[Amplitude] Error Click';\nexport const AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\nexport const AMPLITUDE_PAGE_SCROLLED_EVENT = '[Amplitude] Page Scrolled';\nexport const AMPLITUDE_THRASHED_CURSOR_EVENT = '[Amplitude] Thrashed Cursor';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_PATH = '[Amplitude] Element Path';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport const AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport const AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\nexport const AMPLITUDE_EVENT_PROP_MAX_PAGE_X = '[Amplitude] Max Page X';\nexport const AMPLITUDE_EVENT_PROP_MAX_PAGE_Y = '[Amplitude] Max Page Y';\n\nexport const AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = '[Amplitude] Page View ID';\n\n// Origin constants are now shared via analytics-core; re-export for backwards compatibility\nexport {\n AMPLITUDE_ORIGIN,\n AMPLITUDE_ORIGIN_EU,\n AMPLITUDE_ORIGIN_STAGING,\n AMPLITUDE_ORIGINS_MAP,\n AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL,\n} from '@amplitude/analytics-core';\n\nexport const AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL =\n 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n\n// Data attribute for specifying which attributes should be redacted from autocapture\nexport const DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes';\n\nexport const MAX_MASK_TEXT_PATTERNS = 25;\n\nexport const MAX_ATTRIBUTE_LENGTH = 128;\n\n// The key for the page view object in sessionStorage\nexport const PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW';\n\nexport const MAX_ELEMENT_EXPOSED_STR_LENGTH = 18_000;\n"]}
|
|
@@ -16,6 +16,7 @@ export declare class DataExtractor {
|
|
|
16
16
|
replaceSensitiveString: (text: string | null) => string;
|
|
17
17
|
getHierarchy: (element: Element | null) => Hierarchy;
|
|
18
18
|
getNearestLabel: (element: Element) => string;
|
|
19
|
+
getElementPath: (element: Element | null) => string;
|
|
19
20
|
getEventProperties: (actionType: ActionType, element: Element, dataAttributePrefix: string) => {
|
|
20
21
|
[key: string]: unknown;
|
|
21
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-extractor.d.ts","sourceRoot":"","sources":["../../src/data-extractor.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,UAAU,EAEV,kBAAkB,EAKnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8DAA8D,CAAC;
|
|
1
|
+
{"version":3,"file":"data-extractor.d.ts","sourceRoot":"","sources":["../../src/data-extractor.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,UAAU,EAEV,kBAAkB,EAKnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8DAA8D,CAAC;AAW/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAW;IACtD,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;gBAE3B,OAAO,EAAE,0BAA0B,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,EAAE,kBAAkB,CAAA;KAAE;IAuBpG;;;;OAIG;IACH,sBAAsB,SAAU,MAAM,GAAG,IAAI,KAAG,MAAM,CAEpD;IAGF,YAAY,YAAa,OAAO,GAAG,IAAI,eA4CrC;IAEF,eAAe,YAAa,OAAO,KAAG,MAAM,CAiB1C;IAEF,cAAc,YAAa,OAAO,GAAG,IAAI,KAAG,MAAM,CAYhD;IAGF,kBAAkB,eAAgB,UAAU,WAAW,OAAO,uBAAuB,MAAM;;MAmDzF;IAEF,mBAAmB,oJASjB;IAEF,4BAA4B,0GAGP,MAAM,EAAE,uBACN,MAAM,6DAmC3B;IAEF,yBAAyB,eAAgB,UAAU,kBAAkB,WAAW,+BAkB9E;IAIF,OAAO,CAAC,4BAA4B,CA2BlC;IAEF,OAAO,YAAa,OAAO,KAAG,MAAM,CAalC;IAGF,gBAAgB,YAAa,OAAO,KAAG,OAAO,MAAM,EAAE,SAAS,CAAC,CAa9D;CACH"}
|
|
@@ -2,9 +2,10 @@ import { __read, __spreadArray, __values } from "tslib";
|
|
|
2
2
|
/* eslint-disable no-restricted-globals */
|
|
3
3
|
import { getDecodeURI, MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE, getPageTitle, replaceSensitiveString, } from '@amplitude/analytics-core';
|
|
4
4
|
import * as constants from './constants';
|
|
5
|
-
import { removeEmptyProperties, extractPrefixedAttributes, isElementPointerCursor, getClosestElement, isElementBasedEvent, parseAttributesToMask, } from './helpers';
|
|
5
|
+
import { removeEmptyProperties, extractPrefixedAttributes, isElementPointerCursor, getClosestElement, isElementBasedEvent, parseAttributesToMask, getCurrentPageViewId, } from './helpers';
|
|
6
6
|
import { getAncestors, getElementProperties } from './hierarchy';
|
|
7
7
|
import { getDataSource } from './pageActions/actions';
|
|
8
|
+
import { cssPath } from './libs/element-path';
|
|
8
9
|
var DataExtractor = /** @class */ (function () {
|
|
9
10
|
function DataExtractor(options, context) {
|
|
10
11
|
var e_1, _a;
|
|
@@ -88,6 +89,17 @@ var DataExtractor = /** @class */ (function () {
|
|
|
88
89
|
}
|
|
89
90
|
return _this.getNearestLabel(parent);
|
|
90
91
|
};
|
|
92
|
+
this.getElementPath = function (element) {
|
|
93
|
+
var _a;
|
|
94
|
+
if (!element) {
|
|
95
|
+
return '';
|
|
96
|
+
}
|
|
97
|
+
var startTime = performance.now();
|
|
98
|
+
var elementPath = cssPath(element);
|
|
99
|
+
var endTime = performance.now();
|
|
100
|
+
(_a = _this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordHistogram('autocapturePlugin.getElementPath', endTime - startTime);
|
|
101
|
+
return elementPath;
|
|
102
|
+
};
|
|
91
103
|
// Returns the Amplitude event properties for the given element.
|
|
92
104
|
this.getEventProperties = function (actionType, element, dataAttributePrefix) {
|
|
93
105
|
var _a;
|
|
@@ -108,12 +120,19 @@ var DataExtractor = /** @class */ (function () {
|
|
|
108
120
|
_a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT] = rect.left == null ? null : Math.round(rect.left),
|
|
109
121
|
_a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP] = rect.top == null ? null : Math.round(rect.top),
|
|
110
122
|
_a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES] = attributes,
|
|
123
|
+
_a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PATH] = _this.getElementPath(element),
|
|
111
124
|
_a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL] = nearestLabel,
|
|
112
125
|
_a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = getDecodeURI(window.location.href.split('?')[0]),
|
|
113
126
|
_a[constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE] = getPageTitle(_this.replaceSensitiveString),
|
|
114
127
|
_a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = window.innerHeight,
|
|
115
128
|
_a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = window.innerWidth,
|
|
116
129
|
_a);
|
|
130
|
+
var pageViewId = getCurrentPageViewId();
|
|
131
|
+
/* istanbul ignore next */
|
|
132
|
+
if (pageViewId) {
|
|
133
|
+
/* istanbul ignore next */
|
|
134
|
+
properties[constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID] = pageViewId;
|
|
135
|
+
}
|
|
117
136
|
// id is never masked, so always include it
|
|
118
137
|
properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '';
|
|
119
138
|
// class is never masked, so always include it
|