@amplitude/plugin-autocapture-browser 1.21.0 → 1.22.1
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-plugin.d.ts.map +1 -1
- package/lib/cjs/autocapture-plugin.js +15 -6
- package/lib/cjs/autocapture-plugin.js.map +1 -1
- package/lib/cjs/constants.d.ts +1 -8
- package/lib/cjs/constants.d.ts.map +1 -1
- package/lib/cjs/constants.js +8 -10
- 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 +39 -6
- package/lib/cjs/data-extractor.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +2 -2
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/libs/messenger.d.ts +22 -30
- package/lib/cjs/libs/messenger.d.ts.map +1 -1
- package/lib/cjs/libs/messenger.js +69 -139
- package/lib/cjs/libs/messenger.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-plugin.d.ts.map +1 -1
- package/lib/esm/autocapture-plugin.js +17 -8
- package/lib/esm/autocapture-plugin.js.map +1 -1
- package/lib/esm/constants.d.ts +1 -8
- package/lib/esm/constants.d.ts.map +1 -1
- package/lib/esm/constants.js +2 -9
- 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 +39 -6
- package/lib/esm/data-extractor.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/libs/messenger.d.ts +22 -30
- package/lib/esm/libs/messenger.d.ts.map +1 -1
- package/lib/esm/libs/messenger.js +68 -139
- package/lib/esm/libs/messenger.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-plugin.d.ts.map +1 -1
- package/lib/scripts/constants.d.ts +1 -8
- 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/index.d.ts +1 -1
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/libs/messenger.d.ts +22 -30
- package/lib/scripts/libs/messenger.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +2 -2
|
@@ -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,EAI/B,kBAAkB,
|
|
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,EAI/B,kBAAkB,EAKnB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,WAAW,CAAC;AAanB,OAAO,EAAE,UAAU,EAAkB,MAAM,2BAA2B,CAAC;AAEvE,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;IAErC,kBAAkB,uBAAuB;IACzC,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,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,eAAO,MAAM,iBAAiB,aACnB,0BAA0B,YACzB;IAAE,iBAAiB,EAAE,kBAAkB,CAAA;CAAE,KAClD,uBAsQF,CAAC"}
|
|
@@ -34,7 +34,6 @@ var autocapturePlugin = function (options, context) {
|
|
|
34
34
|
context === null || context === void 0 ? void 0 : context.diagnosticsClient.setTag('plugin.autocapture.version', version_1.VERSION);
|
|
35
35
|
var _j = options.dataAttributePrefix, dataAttributePrefix = _j === void 0 ? analytics_core_1.DEFAULT_DATA_ATTRIBUTE_PREFIX : _j, _k = options.visualTaggingOptions, visualTaggingOptions = _k === void 0 ? {
|
|
36
36
|
enabled: true,
|
|
37
|
-
messenger: new messenger_1.WindowMessenger(),
|
|
38
37
|
} : _k;
|
|
39
38
|
options.cssSelectorAllowlist = (_a = options.cssSelectorAllowlist) !== null && _a !== void 0 ? _a : analytics_core_1.DEFAULT_CSS_SELECTOR_ALLOWLIST;
|
|
40
39
|
options.actionClickAllowlist = (_b = options.actionClickAllowlist) !== null && _b !== void 0 ? _b : analytics_core_1.DEFAULT_ACTION_CLICK_ALLOWLIST;
|
|
@@ -128,9 +127,9 @@ var autocapturePlugin = function (options, context) {
|
|
|
128
127
|
}
|
|
129
128
|
};
|
|
130
129
|
var setup = function (config, amplitude) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
131
|
-
var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist;
|
|
132
|
-
var _a
|
|
133
|
-
return tslib_1.__generator(this, function (
|
|
130
|
+
var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist, messenger;
|
|
131
|
+
var _a;
|
|
132
|
+
return tslib_1.__generator(this, function (_b) {
|
|
134
133
|
/* istanbul ignore if */
|
|
135
134
|
if (typeof document === 'undefined') {
|
|
136
135
|
return [2 /*return*/];
|
|
@@ -190,12 +189,22 @@ var autocapturePlugin = function (options, context) {
|
|
|
190
189
|
}
|
|
191
190
|
/* istanbul ignore next */
|
|
192
191
|
(_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log("".concat(name, " has been successfully added."));
|
|
193
|
-
// Setup visual tagging
|
|
192
|
+
// Setup visual tagging and background capture on the shared messenger singleton.
|
|
193
|
+
// Using the singleton ensures a single message listener per page, even when
|
|
194
|
+
// session-replay is also loaded.
|
|
194
195
|
if (window.opener && visualTaggingOptions.enabled) {
|
|
195
196
|
allowlist = options.cssSelectorAllowlist;
|
|
196
197
|
actionClickAllowlist = options.actionClickAllowlist;
|
|
198
|
+
messenger = (0, analytics_core_1.getOrCreateWindowMessenger)();
|
|
199
|
+
(0, messenger_1.enableVisualTagging)(messenger, {
|
|
200
|
+
dataExtractor: dataExtractor,
|
|
201
|
+
isElementSelectable: (0, helpers_1.createShouldTrackEvent)(options, tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(allowlist), false), tslib_1.__read(actionClickAllowlist), false)),
|
|
202
|
+
cssSelectorAllowlist: allowlist,
|
|
203
|
+
actionClickAllowlist: actionClickAllowlist,
|
|
204
|
+
});
|
|
205
|
+
(0, analytics_core_1.enableBackgroundCapture)(messenger);
|
|
197
206
|
/* istanbul ignore next */
|
|
198
|
-
|
|
207
|
+
messenger.setup(tslib_1.__assign({ logger: config === null || config === void 0 ? void 0 : config.loggerProvider }, ((config === null || config === void 0 ? void 0 : config.serverZone) && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] })));
|
|
199
208
|
}
|
|
200
209
|
return [2 /*return*/];
|
|
201
210
|
});
|
|
@@ -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 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 { WindowMessenger } 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 messenger: new WindowMessenger(),\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 selector\n if (window.opener && visualTaggingOptions.enabled) {\n const allowlist = (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist;\n const actionClickAllowlist = (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist;\n\n /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n dataExtractor: dataExtractor,\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: createShouldTrackEvent(options, [...allowlist, ...actionClickAllowlist]),\n cssSelectorAllowlist: allowlist,\n actionClickAllowlist: actionClickAllowlist,\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_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"]}
|
package/lib/cjs/constants.d.ts
CHANGED
|
@@ -21,14 +21,7 @@ export declare const AMPLITUDE_EVENT_PROP_PAGE_URL = "[Amplitude] Page URL";
|
|
|
21
21
|
export declare const AMPLITUDE_EVENT_PROP_PAGE_TITLE = "[Amplitude] Page Title";
|
|
22
22
|
export declare const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = "[Amplitude] Viewport Height";
|
|
23
23
|
export declare const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = "[Amplitude] Viewport Width";
|
|
24
|
-
export
|
|
25
|
-
export declare const AMPLITUDE_ORIGIN_EU = "https://app.eu.amplitude.com";
|
|
26
|
-
export declare const AMPLITUDE_ORIGIN_STAGING = "https://apps.stag2.amplitude.com";
|
|
27
|
-
export declare const AMPLITUDE_ORIGINS_MAP: {
|
|
28
|
-
US: string;
|
|
29
|
-
EU: string;
|
|
30
|
-
STAGING: string;
|
|
31
|
-
};
|
|
24
|
+
export { AMPLITUDE_ORIGIN, AMPLITUDE_ORIGIN_EU, AMPLITUDE_ORIGIN_STAGING, AMPLITUDE_ORIGINS_MAP, AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL, } from '@amplitude/analytics-core';
|
|
32
25
|
export declare const AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = "https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz";
|
|
33
26
|
export declare const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = "amp-visual-tagging-selector-highlight";
|
|
34
27
|
export declare const DATA_AMP_MASK_ATTRIBUTES = "data-amp-mask-attributes";
|
|
@@ -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;AAExF,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;AAGhF,
|
|
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;AAExF,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;AAGhF,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;AACzC,eAAO,MAAM,oBAAoB,MAAM,CAAC"}
|
package/lib/cjs/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MAX_ATTRIBUTE_LENGTH = exports.MAX_MASK_TEXT_PATTERNS = exports.DATA_AMP_MASK_ATTRIBUTES = exports.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = exports.AMPLITUDE_ORIGINS_MAP = exports.AMPLITUDE_ORIGIN_STAGING = exports.AMPLITUDE_ORIGIN_EU = exports.AMPLITUDE_ORIGIN = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = exports.AMPLITUDE_EVENT_PROP_PAGE_URL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HREF = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = exports.AMPLITUDE_THRASHED_CURSOR_EVENT = exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = exports.AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = exports.FRUSTRATION_PLUGIN_NAME = exports.PLUGIN_NAME = void 0;
|
|
3
|
+
exports.MAX_ATTRIBUTE_LENGTH = exports.MAX_MASK_TEXT_PATTERNS = exports.DATA_AMP_MASK_ATTRIBUTES = exports.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = exports.AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL = exports.AMPLITUDE_ORIGINS_MAP = exports.AMPLITUDE_ORIGIN_STAGING = exports.AMPLITUDE_ORIGIN_EU = exports.AMPLITUDE_ORIGIN = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = exports.AMPLITUDE_EVENT_PROP_PAGE_URL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HREF = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = exports.AMPLITUDE_THRASHED_CURSOR_EVENT = exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = exports.AMPLITUDE_ELEMENT_ERROR_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = exports.FRUSTRATION_PLUGIN_NAME = exports.PLUGIN_NAME = void 0;
|
|
4
4
|
exports.PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';
|
|
5
5
|
exports.FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';
|
|
6
6
|
exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';
|
|
@@ -24,15 +24,13 @@ exports.AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';
|
|
|
24
24
|
exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';
|
|
25
25
|
exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';
|
|
26
26
|
exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
exports
|
|
30
|
-
exports
|
|
31
|
-
exports.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
STAGING: exports.AMPLITUDE_ORIGIN_STAGING,
|
|
35
|
-
};
|
|
27
|
+
// Origin constants are now shared via analytics-core; re-export for backwards compatibility
|
|
28
|
+
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
29
|
+
Object.defineProperty(exports, "AMPLITUDE_ORIGIN", { enumerable: true, get: function () { return analytics_core_1.AMPLITUDE_ORIGIN; } });
|
|
30
|
+
Object.defineProperty(exports, "AMPLITUDE_ORIGIN_EU", { enumerable: true, get: function () { return analytics_core_1.AMPLITUDE_ORIGIN_EU; } });
|
|
31
|
+
Object.defineProperty(exports, "AMPLITUDE_ORIGIN_STAGING", { enumerable: true, get: function () { return analytics_core_1.AMPLITUDE_ORIGIN_STAGING; } });
|
|
32
|
+
Object.defineProperty(exports, "AMPLITUDE_ORIGINS_MAP", { enumerable: true, get: function () { return analytics_core_1.AMPLITUDE_ORIGINS_MAP; } });
|
|
33
|
+
Object.defineProperty(exports, "AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL", { enumerable: true, get: function () { return analytics_core_1.AMPLITUDE_BACKGROUND_CAPTURE_SCRIPT_URL; } });
|
|
36
34
|
exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';
|
|
37
35
|
// This is the class name used by the visual tagging selector to highlight the selected element.
|
|
38
36
|
// Should not use this class in the selector.
|
package/lib/cjs/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,uCAAuC,CAAC;AACtD,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAElE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,qCAAqC,GAAG,yBAAyB,CAAC;AAClE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAEhE,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,kCAAkC,GAAG,2BAA2B,CAAC;AACjE,QAAA,gCAAgC,GAAG,yBAAyB,CAAC;AAC7D,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,sCAAsC,GAAG,+BAA+B,CAAC;AACzE,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,0CAA0C,GAAG,mCAAmC,CAAC;AACjF,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAE3E,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,6BAA6B,GAAG,sBAAsB,CAAC;AACvD,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,oCAAoC,GAAG,6BAA6B,CAAC;AACrE,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AAEhF,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,uCAAuC,CAAC;AACtD,QAAA,uBAAuB,GAAG,uCAAuC,CAAC;AAElE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,oCAAoC,GAAG,wBAAwB,CAAC;AAChE,QAAA,qCAAqC,GAAG,yBAAyB,CAAC;AAClE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAEhE,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,kCAAkC,GAAG,2BAA2B,CAAC;AACjE,QAAA,gCAAgC,GAAG,yBAAyB,CAAC;AAC7D,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,sCAAsC,GAAG,+BAA+B,CAAC;AACzE,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,0CAA0C,GAAG,mCAAmC,CAAC;AACjF,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAE3E,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,6BAA6B,GAAG,sBAAsB,CAAC;AACvD,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,oCAAoC,GAAG,6BAA6B,CAAC;AACrE,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AAEhF,4FAA4F;AAC5F,4DAMmC;AALjC,kHAAA,gBAAgB,OAAA;AAChB,qHAAA,mBAAmB,OAAA;AACnB,0HAAA,wBAAwB,OAAA;AACxB,uHAAA,qBAAqB,OAAA;AACrB,yIAAA,uCAAuC,OAAA;AAG5B,QAAA,4CAA4C,GACvD,0EAA0E,CAAC;AAC7E,gGAAgG;AAChG,6CAA6C;AAChC,QAAA,wCAAwC,GAAG,uCAAuC,CAAC;AAEhG,qFAAqF;AACxE,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AAEtD,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,oBAAoB,GAAG,GAAG,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_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';\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';\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;\nexport const MAX_ATTRIBUTE_LENGTH = 128;\n"]}
|
|
@@ -22,6 +22,7 @@ export declare class DataExtractor {
|
|
|
22
22
|
addTypeAndTimestamp: <T>(event: T, type: "error" | "navigate" | "change" | "click" | "rage" | "mutation") => BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T>;
|
|
23
23
|
addAdditionalEventProperties: <T>(event: T, type: "error" | "navigate" | "change" | "click" | "rage" | "mutation", selectorAllowlist: string[], dataAttributePrefix: string, isCapturingCursorPointer?: boolean) => TimestampedEvent<T>;
|
|
24
24
|
extractDataFromDataSource: (dataSource: DataSource, contextElement: HTMLElement) => string | null | undefined;
|
|
25
|
+
private getTextWithMaskedDescendants;
|
|
25
26
|
getText: (element: Element) => string;
|
|
26
27
|
getEventTagProps: (element: Element) => Record<string, JSONValue>;
|
|
27
28
|
}
|
|
@@ -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;AAU/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,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;IAGF,kBAAkB,eAAgB,UAAU,WAAW,OAAO,uBAAuB,MAAM;;MA2CzF;IAEF,mBAAmB,oJASjB;IAEF,4BAA4B,0GAGP,MAAM,EAAE,uBACN,MAAM,6DAmC3B;IAEF,yBAAyB,eAAgB,UAAU,kBAAkB,WAAW,+BAkB9E;IAEF,OAAO,YAAa,OAAO,KAAG,MAAM,
|
|
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;AAU/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,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;IAGF,kBAAkB,eAAgB,UAAU,WAAW,OAAO,uBAAuB,MAAM;;MA2CzF;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"}
|
|
@@ -179,6 +179,44 @@ var DataExtractor = /** @class */ (function () {
|
|
|
179
179
|
// TODO: Extract from other source types
|
|
180
180
|
return undefined;
|
|
181
181
|
};
|
|
182
|
+
// Traverse text content without cloning DOM nodes, which avoids media/network side effects
|
|
183
|
+
// from recreating nested elements such as <video>, <audio>, or <img>.
|
|
184
|
+
this.getTextWithMaskedDescendants = function (element) {
|
|
185
|
+
var e_3, _a;
|
|
186
|
+
var maskedSelector = "[".concat(analytics_core_1.TEXT_MASK_ATTRIBUTE, "], [contenteditable]");
|
|
187
|
+
// Fast path: if no masked descendants exist, rely on native text extraction.
|
|
188
|
+
if (!element.querySelector(maskedSelector)) {
|
|
189
|
+
return element.innerText;
|
|
190
|
+
}
|
|
191
|
+
var output = '';
|
|
192
|
+
var childNodes = Array.from(element.childNodes);
|
|
193
|
+
try {
|
|
194
|
+
for (var childNodes_1 = tslib_1.__values(childNodes), childNodes_1_1 = childNodes_1.next(); !childNodes_1_1.done; childNodes_1_1 = childNodes_1.next()) {
|
|
195
|
+
var childNode = childNodes_1_1.value;
|
|
196
|
+
if (childNode.nodeType === Node.TEXT_NODE) {
|
|
197
|
+
output += childNode.textContent || '';
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (!(childNode instanceof Element)) {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
// Replace entire masked/contenteditable subtrees with the mask token.
|
|
204
|
+
if (childNode.hasAttribute(analytics_core_1.TEXT_MASK_ATTRIBUTE) || childNode.hasAttribute('contenteditable')) {
|
|
205
|
+
output += analytics_core_1.MASKED_TEXT_VALUE;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
output += _this.getTextWithMaskedDescendants(childNode);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
212
|
+
finally {
|
|
213
|
+
try {
|
|
214
|
+
if (childNodes_1_1 && !childNodes_1_1.done && (_a = childNodes_1.return)) _a.call(childNodes_1);
|
|
215
|
+
}
|
|
216
|
+
finally { if (e_3) throw e_3.error; }
|
|
217
|
+
}
|
|
218
|
+
return output;
|
|
219
|
+
};
|
|
182
220
|
this.getText = function (element) {
|
|
183
221
|
// Check if element or any parent has data-amp-mask attribute
|
|
184
222
|
var hasMaskAttribute = element.closest("[".concat(analytics_core_1.TEXT_MASK_ATTRIBUTE, "]")) !== null;
|
|
@@ -190,12 +228,7 @@ var DataExtractor = /** @class */ (function () {
|
|
|
190
228
|
output = element.innerText || '';
|
|
191
229
|
}
|
|
192
230
|
else {
|
|
193
|
-
|
|
194
|
-
// replace all elements with TEXT_MASK_ATTRIBUTE attribute and contenteditable with the text MASKED_TEXT_VALUE
|
|
195
|
-
clonedTree.querySelectorAll("[".concat(analytics_core_1.TEXT_MASK_ATTRIBUTE, "], [contenteditable]")).forEach(function (node) {
|
|
196
|
-
node.innerText = analytics_core_1.MASKED_TEXT_VALUE;
|
|
197
|
-
});
|
|
198
|
-
output = clonedTree.innerText || '';
|
|
231
|
+
output = _this.getTextWithMaskedDescendants(element);
|
|
199
232
|
}
|
|
200
233
|
return _this.replaceSensitiveString(output.substring(0, 255)).replace(/\s+/g, ' ').trim();
|
|
201
234
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-extractor.js","sourceRoot":"","sources":["../../src/data-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n ElementInteractionsOptions,\n ActionType,\n getDecodeURI,\n IDiagnosticsClient,\n MASKED_TEXT_VALUE,\n TEXT_MASK_ATTRIBUTE,\n getPageTitle,\n replaceSensitiveString,\n} from '@amplitude/analytics-core';\nimport type { DataSource } from '@amplitude/analytics-core/lib/esm/types/element-interactions';\nimport * as constants from './constants';\nimport {\n removeEmptyProperties,\n extractPrefixedAttributes,\n isElementPointerCursor,\n getClosestElement,\n isElementBasedEvent,\n parseAttributesToMask,\n} from './helpers';\nimport type { BaseTimestampedEvent, ElementBasedTimestampedEvent, TimestampedEvent, JSONValue } from './helpers';\nimport { getAncestors, getElementProperties } from './hierarchy';\nimport { getDataSource } from './pageActions/actions';\nimport { Hierarchy } from './typings/autocapture';\n\nexport class DataExtractor {\n private readonly additionalMaskTextPatterns: RegExp[];\n diagnosticsClient?: IDiagnosticsClient;\n\n constructor(options: ElementInteractionsOptions, context?: { diagnosticsClient: IDiagnosticsClient }) {\n this.diagnosticsClient = context?.diagnosticsClient;\n\n const rawPatterns = options.maskTextRegex ?? [];\n\n const compiled: RegExp[] = [];\n for (const entry of rawPatterns) {\n if (compiled.length >= constants.MAX_MASK_TEXT_PATTERNS) {\n break;\n }\n if (entry instanceof RegExp) {\n compiled.push(entry);\n } else if ('pattern' in entry && typeof entry.pattern === 'string') {\n try {\n compiled.push(new RegExp(entry.pattern, 'i'));\n } catch {\n // ignore invalid pattern strings\n }\n }\n }\n this.additionalMaskTextPatterns = compiled;\n }\n\n /**\n * Wrapper method to replace sensitive strings using the helper function\n * @param text - The text to search for sensitive data\n * @returns The text with sensitive data replaced by masked text\n */\n replaceSensitiveString = (text: string | null): string => {\n return replaceSensitiveString(text, this.additionalMaskTextPatterns);\n };\n\n // Get the DOM hierarchy of the element, starting from the target element to the root element.\n getHierarchy = (element: Element | null): Hierarchy => {\n const startTime = performance.now();\n\n let hierarchy: Hierarchy = [];\n if (!element) {\n return [];\n }\n\n // Get list of ancestors including itself and get properties at each level in the hierarchy\n const ancestors = getAncestors(element);\n\n // Build attributes to mask map\n const elementToAttributesToMaskMap = new Map<Element, Set<string>>();\n\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const node = ancestors[i];\n if (node) {\n const attributesToMask = parseAttributesToMask(node.getAttribute(constants.DATA_AMP_MASK_ATTRIBUTES));\n const ancestorAttributesToMask =\n i === ancestors.length - 1 ? [] : elementToAttributesToMaskMap.get(ancestors[i + 1]) ?? new Set<string>();\n const combinedAttributesToMask = new Set([...ancestorAttributesToMask, ...attributesToMask]);\n elementToAttributesToMaskMap.set(node, combinedAttributesToMask);\n }\n }\n\n hierarchy = ancestors.map((el) =>\n getElementProperties(el, elementToAttributesToMaskMap.get(el) ?? new Set<string>()),\n );\n\n // Search for and mask any sensitive attribute values\n for (const hierarchyNode of hierarchy) {\n if (hierarchyNode?.attrs) {\n Object.entries(hierarchyNode.attrs).forEach(([key, value]) => {\n if (hierarchyNode.attrs) {\n hierarchyNode.attrs[key] = this.replaceSensitiveString(value);\n }\n });\n }\n }\n\n const endTime = performance.now();\n this.diagnosticsClient?.recordHistogram('autocapturePlugin.getHierarchy', endTime - startTime);\n\n return hierarchy;\n };\n\n getNearestLabel = (element: Element): string => {\n const parent = element.parentElement;\n if (!parent) {\n return '';\n }\n let labelElement: Element | null;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n } catch {\n /* istanbul ignore next */\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n return this.getText(labelElement);\n }\n return this.getNearestLabel(parent);\n };\n\n // Returns the Amplitude event properties for the given element.\n getEventProperties = (actionType: ActionType, element: Element, dataAttributePrefix: string) => {\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n /* istanbul ignore next */\n const rect =\n typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n\n const hierarchy = this.getHierarchy(element);\n const currentElementAttributes = hierarchy[0]?.attrs;\n const nearestLabel = this.getNearestLabel(element);\n const attributes = extractPrefixedAttributes(currentElementAttributes ?? {}, dataAttributePrefix);\n\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY]: hierarchy,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: this.getText(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT]: rect.left == null ? null : Math.round(rect.left),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP]: rect.top == null ? null : Math.round(rect.top),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: getDecodeURI(window.location.href.split('?')[0]),\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (\n getPageTitle as (parseTitleFunction: (title: string) => string) => string\n )(this.replaceSensitiveString),\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n\n // id is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '';\n\n // class is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class');\n\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = currentElementAttributes?.['aria-label'];\n\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n const href = element.href.substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = this.replaceSensitiveString(href); // we don't use hierarchy here because we don't want href value to be changed\n }\n\n return removeEmptyProperties(properties);\n };\n\n addTypeAndTimestamp = <T>(\n event: T,\n type: BaseTimestampedEvent<T>['type'] | ElementBasedTimestampedEvent<T>['type'],\n ): BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n return {\n event,\n timestamp: Date.now(),\n type,\n };\n };\n\n addAdditionalEventProperties = <T>(\n event: T,\n type: TimestampedEvent<T>['type'],\n selectorAllowlist: string[],\n dataAttributePrefix: string,\n // capture the event if the cursor is a \"pointer\" when this element is clicked on\n // reason: a \"pointer\" cursor indicates that an element should be interactable\n // regardless of the element's tag name\n isCapturingCursorPointer = false,\n ): TimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n const baseEvent = this.addTypeAndTimestamp(event, type);\n\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n if (isCapturingCursorPointer) {\n const isCursorPointer = isElementPointerCursor(baseEvent.event.target as Element, baseEvent.type);\n if (isCursorPointer) {\n baseEvent.closestTrackedAncestor = baseEvent.event.target as HTMLElement;\n baseEvent.targetElementProperties = this.getEventProperties(\n baseEvent.type,\n baseEvent.closestTrackedAncestor,\n dataAttributePrefix,\n );\n return baseEvent;\n }\n }\n // Retrieve additional event properties from the target element\n const closestTrackedAncestor = getClosestElement(baseEvent.event.target as HTMLElement, selectorAllowlist);\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = this.getEventProperties(\n baseEvent.type,\n closestTrackedAncestor,\n dataAttributePrefix,\n );\n }\n return baseEvent;\n }\n\n return baseEvent;\n };\n\n extractDataFromDataSource = (dataSource: DataSource, contextElement: HTMLElement) => {\n // Extract from DOM Element\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n const sourceElement = getDataSource(dataSource, contextElement);\n if (!sourceElement) {\n return undefined;\n }\n\n if (dataSource.elementExtractType === 'TEXT') {\n return this.getText(sourceElement);\n } else if (dataSource.elementExtractType === 'ATTRIBUTE' && dataSource.attribute) {\n return sourceElement.getAttribute(dataSource.attribute);\n }\n return undefined;\n }\n\n // TODO: Extract from other source types\n return undefined;\n };\n\n getText = (element: Element): string => {\n // Check if element or any parent has data-amp-mask attribute\n const hasMaskAttribute = element.closest(`[${TEXT_MASK_ATTRIBUTE}]`) !== null;\n if (hasMaskAttribute) {\n return MASKED_TEXT_VALUE;\n }\n let output = '';\n if (!element.querySelector(`[${TEXT_MASK_ATTRIBUTE}], [contenteditable]`)) {\n output = (element as HTMLElement).innerText || '';\n } else {\n const clonedTree = element.cloneNode(true) as HTMLElement;\n // replace all elements with TEXT_MASK_ATTRIBUTE attribute and contenteditable with the text MASKED_TEXT_VALUE\n clonedTree.querySelectorAll(`[${TEXT_MASK_ATTRIBUTE}], [contenteditable]`).forEach((node) => {\n (node as HTMLElement).innerText = MASKED_TEXT_VALUE;\n });\n output = clonedTree.innerText || '';\n }\n return this.replaceSensitiveString(output.substring(0, 255)).replace(/\\s+/g, ' ').trim();\n };\n\n // Returns the element properties for the given element in Visual Labeling.\n getEventTagProps = (element: Element): Record<string, JSONValue> => {\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n\n const properties = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: this.getText(element),\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n };\n return removeEmptyProperties(properties) as Record<string, JSONValue>;\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-extractor.js","sourceRoot":"","sources":["../../src/data-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n ElementInteractionsOptions,\n ActionType,\n getDecodeURI,\n IDiagnosticsClient,\n MASKED_TEXT_VALUE,\n TEXT_MASK_ATTRIBUTE,\n getPageTitle,\n replaceSensitiveString,\n} from '@amplitude/analytics-core';\nimport type { DataSource } from '@amplitude/analytics-core/lib/esm/types/element-interactions';\nimport * as constants from './constants';\nimport {\n removeEmptyProperties,\n extractPrefixedAttributes,\n isElementPointerCursor,\n getClosestElement,\n isElementBasedEvent,\n parseAttributesToMask,\n} from './helpers';\nimport type { BaseTimestampedEvent, ElementBasedTimestampedEvent, TimestampedEvent, JSONValue } from './helpers';\nimport { getAncestors, getElementProperties } from './hierarchy';\nimport { getDataSource } from './pageActions/actions';\nimport { Hierarchy } from './typings/autocapture';\n\nexport class DataExtractor {\n private readonly additionalMaskTextPatterns: RegExp[];\n diagnosticsClient?: IDiagnosticsClient;\n\n constructor(options: ElementInteractionsOptions, context?: { diagnosticsClient: IDiagnosticsClient }) {\n this.diagnosticsClient = context?.diagnosticsClient;\n\n const rawPatterns = options.maskTextRegex ?? [];\n\n const compiled: RegExp[] = [];\n for (const entry of rawPatterns) {\n if (compiled.length >= constants.MAX_MASK_TEXT_PATTERNS) {\n break;\n }\n if (entry instanceof RegExp) {\n compiled.push(entry);\n } else if ('pattern' in entry && typeof entry.pattern === 'string') {\n try {\n compiled.push(new RegExp(entry.pattern, 'i'));\n } catch {\n // ignore invalid pattern strings\n }\n }\n }\n this.additionalMaskTextPatterns = compiled;\n }\n\n /**\n * Wrapper method to replace sensitive strings using the helper function\n * @param text - The text to search for sensitive data\n * @returns The text with sensitive data replaced by masked text\n */\n replaceSensitiveString = (text: string | null): string => {\n return replaceSensitiveString(text, this.additionalMaskTextPatterns);\n };\n\n // Get the DOM hierarchy of the element, starting from the target element to the root element.\n getHierarchy = (element: Element | null): Hierarchy => {\n const startTime = performance.now();\n\n let hierarchy: Hierarchy = [];\n if (!element) {\n return [];\n }\n\n // Get list of ancestors including itself and get properties at each level in the hierarchy\n const ancestors = getAncestors(element);\n\n // Build attributes to mask map\n const elementToAttributesToMaskMap = new Map<Element, Set<string>>();\n\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const node = ancestors[i];\n if (node) {\n const attributesToMask = parseAttributesToMask(node.getAttribute(constants.DATA_AMP_MASK_ATTRIBUTES));\n const ancestorAttributesToMask =\n i === ancestors.length - 1 ? [] : elementToAttributesToMaskMap.get(ancestors[i + 1]) ?? new Set<string>();\n const combinedAttributesToMask = new Set([...ancestorAttributesToMask, ...attributesToMask]);\n elementToAttributesToMaskMap.set(node, combinedAttributesToMask);\n }\n }\n\n hierarchy = ancestors.map((el) =>\n getElementProperties(el, elementToAttributesToMaskMap.get(el) ?? new Set<string>()),\n );\n\n // Search for and mask any sensitive attribute values\n for (const hierarchyNode of hierarchy) {\n if (hierarchyNode?.attrs) {\n Object.entries(hierarchyNode.attrs).forEach(([key, value]) => {\n if (hierarchyNode.attrs) {\n hierarchyNode.attrs[key] = this.replaceSensitiveString(value);\n }\n });\n }\n }\n\n const endTime = performance.now();\n this.diagnosticsClient?.recordHistogram('autocapturePlugin.getHierarchy', endTime - startTime);\n\n return hierarchy;\n };\n\n getNearestLabel = (element: Element): string => {\n const parent = element.parentElement;\n if (!parent) {\n return '';\n }\n let labelElement: Element | null;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n } catch {\n /* istanbul ignore next */\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n return this.getText(labelElement);\n }\n return this.getNearestLabel(parent);\n };\n\n // Returns the Amplitude event properties for the given element.\n getEventProperties = (actionType: ActionType, element: Element, dataAttributePrefix: string) => {\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n /* istanbul ignore next */\n const rect =\n typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n\n const hierarchy = this.getHierarchy(element);\n const currentElementAttributes = hierarchy[0]?.attrs;\n const nearestLabel = this.getNearestLabel(element);\n const attributes = extractPrefixedAttributes(currentElementAttributes ?? {}, dataAttributePrefix);\n\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY]: hierarchy,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: this.getText(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT]: rect.left == null ? null : Math.round(rect.left),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP]: rect.top == null ? null : Math.round(rect.top),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: getDecodeURI(window.location.href.split('?')[0]),\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (\n getPageTitle as (parseTitleFunction: (title: string) => string) => string\n )(this.replaceSensitiveString),\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n\n // id is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '';\n\n // class is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class');\n\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = currentElementAttributes?.['aria-label'];\n\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n const href = element.href.substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = this.replaceSensitiveString(href); // we don't use hierarchy here because we don't want href value to be changed\n }\n\n return removeEmptyProperties(properties);\n };\n\n addTypeAndTimestamp = <T>(\n event: T,\n type: BaseTimestampedEvent<T>['type'] | ElementBasedTimestampedEvent<T>['type'],\n ): BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n return {\n event,\n timestamp: Date.now(),\n type,\n };\n };\n\n addAdditionalEventProperties = <T>(\n event: T,\n type: TimestampedEvent<T>['type'],\n selectorAllowlist: string[],\n dataAttributePrefix: string,\n // capture the event if the cursor is a \"pointer\" when this element is clicked on\n // reason: a \"pointer\" cursor indicates that an element should be interactable\n // regardless of the element's tag name\n isCapturingCursorPointer = false,\n ): TimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n const baseEvent = this.addTypeAndTimestamp(event, type);\n\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n if (isCapturingCursorPointer) {\n const isCursorPointer = isElementPointerCursor(baseEvent.event.target as Element, baseEvent.type);\n if (isCursorPointer) {\n baseEvent.closestTrackedAncestor = baseEvent.event.target as HTMLElement;\n baseEvent.targetElementProperties = this.getEventProperties(\n baseEvent.type,\n baseEvent.closestTrackedAncestor,\n dataAttributePrefix,\n );\n return baseEvent;\n }\n }\n // Retrieve additional event properties from the target element\n const closestTrackedAncestor = getClosestElement(baseEvent.event.target as HTMLElement, selectorAllowlist);\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = this.getEventProperties(\n baseEvent.type,\n closestTrackedAncestor,\n dataAttributePrefix,\n );\n }\n return baseEvent;\n }\n\n return baseEvent;\n };\n\n extractDataFromDataSource = (dataSource: DataSource, contextElement: HTMLElement) => {\n // Extract from DOM Element\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n const sourceElement = getDataSource(dataSource, contextElement);\n if (!sourceElement) {\n return undefined;\n }\n\n if (dataSource.elementExtractType === 'TEXT') {\n return this.getText(sourceElement);\n } else if (dataSource.elementExtractType === 'ATTRIBUTE' && dataSource.attribute) {\n return sourceElement.getAttribute(dataSource.attribute);\n }\n return undefined;\n }\n\n // TODO: Extract from other source types\n return undefined;\n };\n\n // Traverse text content without cloning DOM nodes, which avoids media/network side effects\n // from recreating nested elements such as <video>, <audio>, or <img>.\n private getTextWithMaskedDescendants = (element: Element): string => {\n const maskedSelector = `[${TEXT_MASK_ATTRIBUTE}], [contenteditable]`;\n // Fast path: if no masked descendants exist, rely on native text extraction.\n if (!element.querySelector(maskedSelector)) {\n return (element as HTMLElement).innerText;\n }\n\n let output = '';\n const childNodes = Array.from(element.childNodes);\n for (const childNode of childNodes) {\n if (childNode.nodeType === Node.TEXT_NODE) {\n output += childNode.textContent || '';\n continue;\n }\n\n if (!(childNode instanceof Element)) {\n continue;\n }\n\n // Replace entire masked/contenteditable subtrees with the mask token.\n if (childNode.hasAttribute(TEXT_MASK_ATTRIBUTE) || childNode.hasAttribute('contenteditable')) {\n output += MASKED_TEXT_VALUE;\n continue;\n }\n output += this.getTextWithMaskedDescendants(childNode);\n }\n return output;\n };\n\n getText = (element: Element): string => {\n // Check if element or any parent has data-amp-mask attribute\n const hasMaskAttribute = element.closest(`[${TEXT_MASK_ATTRIBUTE}]`) !== null;\n if (hasMaskAttribute) {\n return MASKED_TEXT_VALUE;\n }\n let output = '';\n if (!element.querySelector(`[${TEXT_MASK_ATTRIBUTE}], [contenteditable]`)) {\n output = (element as HTMLElement).innerText || '';\n } else {\n output = this.getTextWithMaskedDescendants(element);\n }\n return this.replaceSensitiveString(output.substring(0, 255)).replace(/\\s+/g, ' ').trim();\n };\n\n // Returns the element properties for the given element in Visual Labeling.\n getEventTagProps = (element: Element): Record<string, JSONValue> => {\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n\n const properties = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: this.getText(element),\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n };\n return removeEmptyProperties(properties) as Record<string, JSONValue>;\n };\n}\n"]}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';
|
|
2
2
|
export { frustrationPlugin } from './frustration-plugin';
|
|
3
|
-
export { Action, ActionData, Message,
|
|
3
|
+
export { Action, ActionData, Message, enableVisualTagging } from './libs/messenger';
|
|
4
4
|
export { DataExtractor } from './data-extractor';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataExtractor = exports.
|
|
3
|
+
exports.DataExtractor = exports.enableVisualTagging = exports.frustrationPlugin = exports.autocapturePlugin = exports.plugin = void 0;
|
|
4
4
|
var autocapture_plugin_1 = require("./autocapture-plugin");
|
|
5
5
|
Object.defineProperty(exports, "plugin", { enumerable: true, get: function () { return autocapture_plugin_1.autocapturePlugin; } });
|
|
6
6
|
Object.defineProperty(exports, "autocapturePlugin", { enumerable: true, get: function () { return autocapture_plugin_1.autocapturePlugin; } });
|
|
7
7
|
var frustration_plugin_1 = require("./frustration-plugin");
|
|
8
8
|
Object.defineProperty(exports, "frustrationPlugin", { enumerable: true, get: function () { return frustration_plugin_1.frustrationPlugin; } });
|
|
9
9
|
var messenger_1 = require("./libs/messenger");
|
|
10
|
-
Object.defineProperty(exports, "
|
|
10
|
+
Object.defineProperty(exports, "enableVisualTagging", { enumerable: true, get: function () { return messenger_1.enableVisualTagging; } });
|
|
11
11
|
var data_extractor_1 = require("./data-extractor");
|
|
12
12
|
Object.defineProperty(exports, "DataExtractor", { enumerable: true, get: function () { return data_extractor_1.DataExtractor; } });
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsF;AAA7E,4GAAA,iBAAiB,OAAU;AAAE,uHAAA,iBAAiB,OAAA;AACvD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAAsF;AAA7E,4GAAA,iBAAiB,OAAU;AAAE,uHAAA,iBAAiB,OAAA;AACvD,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,8CAAoF;AAA9C,gHAAA,mBAAmB,OAAA;AACzD,mDAAiD;AAAxC,+GAAA,aAAa,OAAA","sourcesContent":["export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';\nexport { frustrationPlugin } from './frustration-plugin';\nexport { Action, ActionData, Message, enableVisualTagging } from './libs/messenger';\nexport { DataExtractor } from './data-extractor';\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { BaseWindowMessenger } from '@amplitude/analytics-core';
|
|
2
|
+
import { ActionType } from '@amplitude/analytics-core';
|
|
2
3
|
import { DataExtractor } from '../data-extractor';
|
|
3
|
-
export type Action = 'ping' | 'pong' | 'page-loaded' | 'selector-loaded' | 'initialize-visual-tagging-selector' | 'close-visual-tagging-selector' | 'element-selected' | 'track-selector-mode-changed' | 'track-selector-moved';
|
|
4
|
+
export type Action = 'ping' | 'pong' | 'page-loaded' | 'selector-loaded' | 'initialize-visual-tagging-selector' | 'close-visual-tagging-selector' | 'element-selected' | 'track-selector-mode-changed' | 'track-selector-moved' | 'initialize-background-capture' | 'close-background-capture' | 'background-capture-loaded' | 'background-capture-complete';
|
|
4
5
|
interface InitializeVisualTaggingSelectorData {
|
|
5
6
|
actionType: ActionType;
|
|
6
7
|
}
|
|
@@ -29,38 +30,29 @@ export type ActionData = {
|
|
|
29
30
|
'element-selected': ElementSelectedData;
|
|
30
31
|
'track-selector-mode-changed': TrackSelectorModeChangedData;
|
|
31
32
|
'track-selector-moved': TrackSelectorMovedData;
|
|
33
|
+
'initialize-background-capture': null | undefined;
|
|
34
|
+
'close-background-capture': null | undefined;
|
|
35
|
+
'background-capture-loaded': null | undefined;
|
|
36
|
+
'background-capture-complete': {
|
|
37
|
+
[key: string]: string | null;
|
|
38
|
+
};
|
|
32
39
|
};
|
|
33
40
|
export interface Message<A extends Action> {
|
|
34
41
|
action: A;
|
|
35
42
|
data?: ActionData[A];
|
|
36
43
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
sendRequest(action: string, args: Record<string, any>, options?: {
|
|
51
|
-
timeout: number;
|
|
52
|
-
}): Promise<any>;
|
|
53
|
-
private handleResponse;
|
|
54
|
-
setup({ logger, endpoint, isElementSelectable, cssSelectorAllowlist, actionClickAllowlist, dataExtractor, }?: {
|
|
55
|
-
logger?: ILogger;
|
|
56
|
-
endpoint?: string;
|
|
57
|
-
isElementSelectable?: (action: InitializeVisualTaggingSelectorData['actionType'], element: Element) => boolean;
|
|
58
|
-
cssSelectorAllowlist?: string[];
|
|
59
|
-
actionClickAllowlist?: string[];
|
|
60
|
-
dataExtractor: DataExtractor;
|
|
61
|
-
}): void;
|
|
62
|
-
private onSelect;
|
|
63
|
-
private onTrack;
|
|
64
|
-
}
|
|
44
|
+
/**
|
|
45
|
+
* Enable visual tagging on a messenger instance.
|
|
46
|
+
* The first call registers the handlers; subsequent calls are no-ops.
|
|
47
|
+
*
|
|
48
|
+
* @param messenger - The messenger to enable visual tagging on
|
|
49
|
+
* @param options - Visual tagging configuration
|
|
50
|
+
*/
|
|
51
|
+
export declare function enableVisualTagging(messenger: BaseWindowMessenger, options: {
|
|
52
|
+
isElementSelectable?: (action: InitializeVisualTaggingSelectorData['actionType'], element: Element) => boolean;
|
|
53
|
+
cssSelectorAllowlist?: string[];
|
|
54
|
+
actionClickAllowlist?: string[];
|
|
55
|
+
dataExtractor: DataExtractor;
|
|
56
|
+
}): void;
|
|
65
57
|
export {};
|
|
66
58
|
//# sourceMappingURL=messenger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/libs/messenger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/libs/messenger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,MAAM,GACd,MAAM,GACN,MAAM,GACN,aAAa,GACb,iBAAiB,GACjB,oCAAoC,GACpC,+BAA+B,GAC/B,kBAAkB,GAClB,6BAA6B,GAC7B,sBAAsB,GACtB,+BAA+B,GAC/B,0BAA0B,GAC1B,2BAA2B,GAC3B,6BAA6B,CAAC;AAElC,UAAU,mCAAmC;IAC3C,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,IAAI,CAAC;CAC1B;AAED,UAAU,4BAA4B;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,sBAAsB;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IACvB,aAAa,EAAE,IAAI,GAAG,SAAS,CAAC;IAChC,iBAAiB,EAAE,IAAI,GAAG,SAAS,CAAC;IACpC,oCAAoC,EAAE,mCAAmC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7F,+BAA+B,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,6BAA6B,EAAE,4BAA4B,CAAC;IAC5D,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,+BAA+B,EAAE,IAAI,GAAG,SAAS,CAAC;IAClD,0BAA0B,EAAE,IAAI,GAAG,SAAS,CAAC;IAC7C,2BAA2B,EAAE,IAAI,GAAG,SAAS,CAAC;IAC9C,6BAA6B,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACjE,CAAC;AAEF,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM;IACvC,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CACtB;AAOD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE;IACP,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,mCAAmC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/G,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;CAC9B,GACA,IAAI,CAiEN"}
|