@amplitude/plugin-autocapture-browser 0.9.1 → 0.9.2

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.
@@ -4,7 +4,7 @@ import { ActionType } from './typings/autocapture';
4
4
  type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;
5
5
  export declare const DEFAULT_CSS_SELECTOR_ALLOWLIST: string[];
6
6
  export declare const DEFAULT_DATA_ATTRIBUTE_PREFIX = "data-amp-track-";
7
- interface Options {
7
+ export interface AutocaptureOptions {
8
8
  /**
9
9
  * List of CSS selectors to allow auto tracking on.
10
10
  * When provided, allow elements matching any selector to be tracked.
@@ -39,6 +39,6 @@ interface Options {
39
39
  messenger?: Messenger;
40
40
  };
41
41
  }
42
- export declare const autocapturePlugin: (options?: Options) => BrowserEnrichmentPlugin;
42
+ export declare const autocapturePlugin: (options?: AutocaptureOptions) => BrowserEnrichmentPlugin;
43
43
  export {};
44
44
  //# sourceMappingURL=autocapture-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAU,MAAM,4BAA4B,CAAC;AAYpG,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,8BAA8B,UAS1C,CAAC;AACF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAQ/D,UAAU,OAAO;IACf;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAEjF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,aAAa,OAAO,KAAQ,uBAyOzD,CAAC"}
1
+ {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAU,MAAM,4BAA4B,CAAC;AAYpG,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,8BAA8B,UAS1C,CAAC;AACF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAQ/D,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAEjF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,aAAa,kBAAkB,KAAQ,uBAyOpE,CAAC"}
@@ -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 { BrowserClient, BrowserConfig, EnrichmentPlugin, Logger } from '@amplitude/analytics-types';\nimport * as constants from './constants';\nimport {\n getText,\n isPageUrlAllowed,\n getAttributesWithPrefix,\n removeEmptyProperties,\n getNearestLabel,\n querySelectUniqueElements,\n getClosestElement,\n getSelector,\n} from './helpers';\nimport { Messenger, WindowMessenger } from './libs/messenger';\nimport { ActionType } from './typings/autocapture';\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport const DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\nexport const DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n\ninterface EventListener {\n element: Element;\n type: ActionType;\n handler: (event: Event) => void;\n}\n\ninterface Options {\n /**\n * List of CSS selectors to allow auto tracking on.\n * When provided, allow elements matching any selector to be tracked.\n * Default is ['a', 'button', 'input', 'select', 'textarea', 'label', '[data-amp-default-track]', '.amp-default-track'].\n */\n cssSelectorAllowlist?: string[];\n\n /**\n * List of page URLs to allow auto tracking on.\n * When provided, only allow tracking on these URLs.\n * Both full URLs and regex are supported.\n */\n pageUrlAllowlist?: (string | RegExp)[];\n\n /**\n * Function to determine whether an event should be tracked.\n * When provided, this function overwrites all other allowlists and configurations.\n * If the function returns true, the event will be tracked.\n * If the function returns false, the event will not be tracked.\n * @param actionType - The type of action that triggered the event.\n * @param element - The element that triggered the event.\n */\n shouldTrackEventResolver?: (actionType: ActionType, element: Element) => boolean;\n\n /**\n * Prefix for data attributes to allow auto collecting.\n * Default is 'data-amp-track-'.\n */\n dataAttributePrefix?: string;\n\n /**\n * Options for integrating visual tagging selector.\n */\n visualTaggingOptions?: {\n enabled?: boolean;\n messenger?: Messenger;\n };\n}\n\nexport const autocapturePlugin = (options: Options = {}): BrowserEnrichmentPlugin => {\n const {\n cssSelectorAllowlist = DEFAULT_CSS_SELECTOR_ALLOWLIST,\n pageUrlAllowlist,\n shouldTrackEventResolver,\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n messenger: new WindowMessenger(),\n },\n } = options;\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n let logger: Logger | undefined = undefined;\n\n const addEventListener = (element: Element, type: ActionType, handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n\n const removeEventListeners = () => {\n eventListeners.forEach((_ref) => {\n const element = _ref.element,\n type = _ref.type,\n handler = _ref.handler;\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const shouldTrackEvent = (actionType: ActionType, element: Element) => {\n /* istanbul ignore if */\n if (!element) {\n return false;\n }\n\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n // Text nodes have no tag\n if (!tag) {\n return false;\n }\n\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n\n /* istanbul ignore next */\n const elementType = (element as HTMLInputElement)?.type || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n /* istanbul ignore if */\n if (cssSelectorAllowlist) {\n const hasMatchAnyAllowedSelector = cssSelectorAllowlist.some((selector) => !!element?.matches?.(selector));\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n const computedStyle = window?.getComputedStyle?.(element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n\n const getEventProperties = (actionType: ActionType, element: Element) => {\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 const ariaLabel = element.getAttribute('aria-label');\n const attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n const nearestLabel = getNearestLabel(element);\n const selector = getSelector(element, logger);\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID]: element.id,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS]: element.className,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: 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_ARIA_LABEL]: ariaLabel,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR]: selector,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (typeof document !== 'undefined' && document.title) || '',\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n if (!amplitude) {\n /* istanbul ignore next */\n config?.loggerProvider?.warn(\n `${name} plugin requires a later version of @amplitude/analytics-browser. Events are not tracked.`,\n );\n return;\n }\n logger = config.loggerProvider;\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n const addListener = (el: Element) => {\n if (shouldTrackEvent('click', el)) {\n addEventListener(el, 'click', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', el));\n });\n }\n if (shouldTrackEvent('change', el)) {\n addEventListener(el, 'change', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', el));\n });\n }\n };\n\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node: Node) => {\n addListener(node as Element);\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n querySelectUniqueElements(node as Element, cssSelectorAllowlist).map(addListener);\n }\n });\n });\n });\n }\n const attachListeners = () => {\n const allElements = querySelectUniqueElements(document.body, cssSelectorAllowlist);\n allElements.forEach(addListener);\n /* istanbul ignore next */\n observer?.observe(document.body, {\n subtree: true,\n childList: true,\n });\n };\n if (document.body) {\n attachListeners();\n } else {\n // This is to handle the case where the plugin is loaded before the body is available.\n // E.g., for non-reactive frameworks.\n window.addEventListener('load', attachListeners);\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 /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: shouldTrackEvent,\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n if (observer) {\n observer.disconnect();\n }\n removeEventListeners();\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 { BrowserClient, BrowserConfig, EnrichmentPlugin, Logger } from '@amplitude/analytics-types';\nimport * as constants from './constants';\nimport {\n getText,\n isPageUrlAllowed,\n getAttributesWithPrefix,\n removeEmptyProperties,\n getNearestLabel,\n querySelectUniqueElements,\n getClosestElement,\n getSelector,\n} from './helpers';\nimport { Messenger, WindowMessenger } from './libs/messenger';\nimport { ActionType } from './typings/autocapture';\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport const DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\nexport const DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n\ninterface EventListener {\n element: Element;\n type: ActionType;\n handler: (event: Event) => void;\n}\n\nexport interface AutocaptureOptions {\n /**\n * List of CSS selectors to allow auto tracking on.\n * When provided, allow elements matching any selector to be tracked.\n * Default is ['a', 'button', 'input', 'select', 'textarea', 'label', '[data-amp-default-track]', '.amp-default-track'].\n */\n cssSelectorAllowlist?: string[];\n\n /**\n * List of page URLs to allow auto tracking on.\n * When provided, only allow tracking on these URLs.\n * Both full URLs and regex are supported.\n */\n pageUrlAllowlist?: (string | RegExp)[];\n\n /**\n * Function to determine whether an event should be tracked.\n * When provided, this function overwrites all other allowlists and configurations.\n * If the function returns true, the event will be tracked.\n * If the function returns false, the event will not be tracked.\n * @param actionType - The type of action that triggered the event.\n * @param element - The element that triggered the event.\n */\n shouldTrackEventResolver?: (actionType: ActionType, element: Element) => boolean;\n\n /**\n * Prefix for data attributes to allow auto collecting.\n * Default is 'data-amp-track-'.\n */\n dataAttributePrefix?: string;\n\n /**\n * Options for integrating visual tagging selector.\n */\n visualTaggingOptions?: {\n enabled?: boolean;\n messenger?: Messenger;\n };\n}\n\nexport const autocapturePlugin = (options: AutocaptureOptions = {}): BrowserEnrichmentPlugin => {\n const {\n cssSelectorAllowlist = DEFAULT_CSS_SELECTOR_ALLOWLIST,\n pageUrlAllowlist,\n shouldTrackEventResolver,\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n messenger: new WindowMessenger(),\n },\n } = options;\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n let logger: Logger | undefined = undefined;\n\n const addEventListener = (element: Element, type: ActionType, handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n\n const removeEventListeners = () => {\n eventListeners.forEach((_ref) => {\n const element = _ref.element,\n type = _ref.type,\n handler = _ref.handler;\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const shouldTrackEvent = (actionType: ActionType, element: Element) => {\n /* istanbul ignore if */\n if (!element) {\n return false;\n }\n\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n // Text nodes have no tag\n if (!tag) {\n return false;\n }\n\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n\n /* istanbul ignore next */\n const elementType = (element as HTMLInputElement)?.type || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n /* istanbul ignore if */\n if (cssSelectorAllowlist) {\n const hasMatchAnyAllowedSelector = cssSelectorAllowlist.some((selector) => !!element?.matches?.(selector));\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n const computedStyle = window?.getComputedStyle?.(element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n\n const getEventProperties = (actionType: ActionType, element: Element) => {\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 const ariaLabel = element.getAttribute('aria-label');\n const attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n const nearestLabel = getNearestLabel(element);\n const selector = getSelector(element, logger);\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID]: element.id,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS]: element.className,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: 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_ARIA_LABEL]: ariaLabel,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR]: selector,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (typeof document !== 'undefined' && document.title) || '',\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n if (!amplitude) {\n /* istanbul ignore next */\n config?.loggerProvider?.warn(\n `${name} plugin requires a later version of @amplitude/analytics-browser. Events are not tracked.`,\n );\n return;\n }\n logger = config.loggerProvider;\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n const addListener = (el: Element) => {\n if (shouldTrackEvent('click', el)) {\n addEventListener(el, 'click', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', el));\n });\n }\n if (shouldTrackEvent('change', el)) {\n addEventListener(el, 'change', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', el));\n });\n }\n };\n\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node: Node) => {\n addListener(node as Element);\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n querySelectUniqueElements(node as Element, cssSelectorAllowlist).map(addListener);\n }\n });\n });\n });\n }\n const attachListeners = () => {\n const allElements = querySelectUniqueElements(document.body, cssSelectorAllowlist);\n allElements.forEach(addListener);\n /* istanbul ignore next */\n observer?.observe(document.body, {\n subtree: true,\n childList: true,\n });\n };\n if (document.body) {\n attachListeners();\n } else {\n // This is to handle the case where the plugin is loaded before the body is available.\n // E.g., for non-reactive frameworks.\n window.addEventListener('load', attachListeners);\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 /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: shouldTrackEvent,\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n if (observer) {\n observer.disconnect();\n }\n removeEventListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
@@ -1,3 +1,3 @@
1
- export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, } from './autocapture-plugin';
1
+ export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, AutocaptureOptions, } from './autocapture-plugin';
2
2
  export { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,2DAK8B;AAJ5B,4GAAA,iBAAiB,OAAU;AAC3B,uHAAA,iBAAiB,OAAA;AACjB,oIAAA,8BAA8B,OAAA;AAC9B,mIAAA,6BAA6B,OAAA;AAE/B,8CAA2F;AAA1C,4GAAA,eAAe,OAAA","sourcesContent":["export {\n autocapturePlugin as plugin,\n autocapturePlugin,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n} from './autocapture-plugin';\nexport { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,2DAM8B;AAL5B,4GAAA,iBAAiB,OAAU;AAC3B,uHAAA,iBAAiB,OAAA;AACjB,oIAAA,8BAA8B,OAAA;AAC9B,mIAAA,6BAA6B,OAAA;AAG/B,8CAA2F;AAA1C,4GAAA,eAAe,OAAA","sourcesContent":["export {\n autocapturePlugin as plugin,\n autocapturePlugin,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n AutocaptureOptions,\n} from './autocapture-plugin';\nexport { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.9.0";
1
+ export declare const VERSION = "0.9.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
2
  exports.VERSION = void 0;
3
- exports.VERSION = '0.9.0';
3
+ exports.VERSION = '0.9.1';
4
4
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '0.9.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '0.9.1';\n"]}
@@ -4,7 +4,7 @@ import { ActionType } from './typings/autocapture';
4
4
  type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;
5
5
  export declare const DEFAULT_CSS_SELECTOR_ALLOWLIST: string[];
6
6
  export declare const DEFAULT_DATA_ATTRIBUTE_PREFIX = "data-amp-track-";
7
- interface Options {
7
+ export interface AutocaptureOptions {
8
8
  /**
9
9
  * List of CSS selectors to allow auto tracking on.
10
10
  * When provided, allow elements matching any selector to be tracked.
@@ -39,6 +39,6 @@ interface Options {
39
39
  messenger?: Messenger;
40
40
  };
41
41
  }
42
- export declare const autocapturePlugin: (options?: Options) => BrowserEnrichmentPlugin;
42
+ export declare const autocapturePlugin: (options?: AutocaptureOptions) => BrowserEnrichmentPlugin;
43
43
  export {};
44
44
  //# sourceMappingURL=autocapture-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAU,MAAM,4BAA4B,CAAC;AAYpG,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,8BAA8B,UAS1C,CAAC;AACF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAQ/D,UAAU,OAAO;IACf;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAEjF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,aAAa,OAAO,KAAQ,uBAyOzD,CAAC"}
1
+ {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAU,MAAM,4BAA4B,CAAC;AAYpG,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,8BAA8B,UAS1C,CAAC;AACF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAQ/D,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAEjF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,aAAa,kBAAkB,KAAQ,uBAyOpE,CAAC"}
@@ -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 { BrowserClient, BrowserConfig, EnrichmentPlugin, Logger } from '@amplitude/analytics-types';\nimport * as constants from './constants';\nimport {\n getText,\n isPageUrlAllowed,\n getAttributesWithPrefix,\n removeEmptyProperties,\n getNearestLabel,\n querySelectUniqueElements,\n getClosestElement,\n getSelector,\n} from './helpers';\nimport { Messenger, WindowMessenger } from './libs/messenger';\nimport { ActionType } from './typings/autocapture';\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport const DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\nexport const DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n\ninterface EventListener {\n element: Element;\n type: ActionType;\n handler: (event: Event) => void;\n}\n\ninterface Options {\n /**\n * List of CSS selectors to allow auto tracking on.\n * When provided, allow elements matching any selector to be tracked.\n * Default is ['a', 'button', 'input', 'select', 'textarea', 'label', '[data-amp-default-track]', '.amp-default-track'].\n */\n cssSelectorAllowlist?: string[];\n\n /**\n * List of page URLs to allow auto tracking on.\n * When provided, only allow tracking on these URLs.\n * Both full URLs and regex are supported.\n */\n pageUrlAllowlist?: (string | RegExp)[];\n\n /**\n * Function to determine whether an event should be tracked.\n * When provided, this function overwrites all other allowlists and configurations.\n * If the function returns true, the event will be tracked.\n * If the function returns false, the event will not be tracked.\n * @param actionType - The type of action that triggered the event.\n * @param element - The element that triggered the event.\n */\n shouldTrackEventResolver?: (actionType: ActionType, element: Element) => boolean;\n\n /**\n * Prefix for data attributes to allow auto collecting.\n * Default is 'data-amp-track-'.\n */\n dataAttributePrefix?: string;\n\n /**\n * Options for integrating visual tagging selector.\n */\n visualTaggingOptions?: {\n enabled?: boolean;\n messenger?: Messenger;\n };\n}\n\nexport const autocapturePlugin = (options: Options = {}): BrowserEnrichmentPlugin => {\n const {\n cssSelectorAllowlist = DEFAULT_CSS_SELECTOR_ALLOWLIST,\n pageUrlAllowlist,\n shouldTrackEventResolver,\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n messenger: new WindowMessenger(),\n },\n } = options;\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n let logger: Logger | undefined = undefined;\n\n const addEventListener = (element: Element, type: ActionType, handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n\n const removeEventListeners = () => {\n eventListeners.forEach((_ref) => {\n const element = _ref.element,\n type = _ref.type,\n handler = _ref.handler;\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const shouldTrackEvent = (actionType: ActionType, element: Element) => {\n /* istanbul ignore if */\n if (!element) {\n return false;\n }\n\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n // Text nodes have no tag\n if (!tag) {\n return false;\n }\n\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n\n /* istanbul ignore next */\n const elementType = (element as HTMLInputElement)?.type || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n /* istanbul ignore if */\n if (cssSelectorAllowlist) {\n const hasMatchAnyAllowedSelector = cssSelectorAllowlist.some((selector) => !!element?.matches?.(selector));\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n const computedStyle = window?.getComputedStyle?.(element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n\n const getEventProperties = (actionType: ActionType, element: Element) => {\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 const ariaLabel = element.getAttribute('aria-label');\n const attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n const nearestLabel = getNearestLabel(element);\n const selector = getSelector(element, logger);\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID]: element.id,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS]: element.className,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: 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_ARIA_LABEL]: ariaLabel,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR]: selector,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (typeof document !== 'undefined' && document.title) || '',\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n if (!amplitude) {\n /* istanbul ignore next */\n config?.loggerProvider?.warn(\n `${name} plugin requires a later version of @amplitude/analytics-browser. Events are not tracked.`,\n );\n return;\n }\n logger = config.loggerProvider;\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n const addListener = (el: Element) => {\n if (shouldTrackEvent('click', el)) {\n addEventListener(el, 'click', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', el));\n });\n }\n if (shouldTrackEvent('change', el)) {\n addEventListener(el, 'change', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', el));\n });\n }\n };\n\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node: Node) => {\n addListener(node as Element);\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n querySelectUniqueElements(node as Element, cssSelectorAllowlist).map(addListener);\n }\n });\n });\n });\n }\n const attachListeners = () => {\n const allElements = querySelectUniqueElements(document.body, cssSelectorAllowlist);\n allElements.forEach(addListener);\n /* istanbul ignore next */\n observer?.observe(document.body, {\n subtree: true,\n childList: true,\n });\n };\n if (document.body) {\n attachListeners();\n } else {\n // This is to handle the case where the plugin is loaded before the body is available.\n // E.g., for non-reactive frameworks.\n window.addEventListener('load', attachListeners);\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 /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: shouldTrackEvent,\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n if (observer) {\n observer.disconnect();\n }\n removeEventListeners();\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 { BrowserClient, BrowserConfig, EnrichmentPlugin, Logger } from '@amplitude/analytics-types';\nimport * as constants from './constants';\nimport {\n getText,\n isPageUrlAllowed,\n getAttributesWithPrefix,\n removeEmptyProperties,\n getNearestLabel,\n querySelectUniqueElements,\n getClosestElement,\n getSelector,\n} from './helpers';\nimport { Messenger, WindowMessenger } from './libs/messenger';\nimport { ActionType } from './typings/autocapture';\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport const DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\nexport const DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n\ninterface EventListener {\n element: Element;\n type: ActionType;\n handler: (event: Event) => void;\n}\n\nexport interface AutocaptureOptions {\n /**\n * List of CSS selectors to allow auto tracking on.\n * When provided, allow elements matching any selector to be tracked.\n * Default is ['a', 'button', 'input', 'select', 'textarea', 'label', '[data-amp-default-track]', '.amp-default-track'].\n */\n cssSelectorAllowlist?: string[];\n\n /**\n * List of page URLs to allow auto tracking on.\n * When provided, only allow tracking on these URLs.\n * Both full URLs and regex are supported.\n */\n pageUrlAllowlist?: (string | RegExp)[];\n\n /**\n * Function to determine whether an event should be tracked.\n * When provided, this function overwrites all other allowlists and configurations.\n * If the function returns true, the event will be tracked.\n * If the function returns false, the event will not be tracked.\n * @param actionType - The type of action that triggered the event.\n * @param element - The element that triggered the event.\n */\n shouldTrackEventResolver?: (actionType: ActionType, element: Element) => boolean;\n\n /**\n * Prefix for data attributes to allow auto collecting.\n * Default is 'data-amp-track-'.\n */\n dataAttributePrefix?: string;\n\n /**\n * Options for integrating visual tagging selector.\n */\n visualTaggingOptions?: {\n enabled?: boolean;\n messenger?: Messenger;\n };\n}\n\nexport const autocapturePlugin = (options: AutocaptureOptions = {}): BrowserEnrichmentPlugin => {\n const {\n cssSelectorAllowlist = DEFAULT_CSS_SELECTOR_ALLOWLIST,\n pageUrlAllowlist,\n shouldTrackEventResolver,\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n messenger: new WindowMessenger(),\n },\n } = options;\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n let logger: Logger | undefined = undefined;\n\n const addEventListener = (element: Element, type: ActionType, handler: (event: Event) => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element: element,\n type: type,\n handler: handler,\n });\n };\n\n const removeEventListeners = () => {\n eventListeners.forEach((_ref) => {\n const element = _ref.element,\n type = _ref.type,\n handler = _ref.handler;\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const shouldTrackEvent = (actionType: ActionType, element: Element) => {\n /* istanbul ignore if */\n if (!element) {\n return false;\n }\n\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n // Text nodes have no tag\n if (!tag) {\n return false;\n }\n\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n\n /* istanbul ignore next */\n const elementType = (element as HTMLInputElement)?.type || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n /* istanbul ignore if */\n if (cssSelectorAllowlist) {\n const hasMatchAnyAllowedSelector = cssSelectorAllowlist.some((selector) => !!element?.matches?.(selector));\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n const computedStyle = window?.getComputedStyle?.(element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n\n const getEventProperties = (actionType: ActionType, element: Element) => {\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 const ariaLabel = element.getAttribute('aria-label');\n const attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n const nearestLabel = getNearestLabel(element);\n const selector = getSelector(element, logger);\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID]: element.id,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS]: element.className,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: 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_ARIA_LABEL]: ariaLabel,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR]: selector,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (typeof document !== 'undefined' && document.title) || '',\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n if (!amplitude) {\n /* istanbul ignore next */\n config?.loggerProvider?.warn(\n `${name} plugin requires a later version of @amplitude/analytics-browser. Events are not tracked.`,\n );\n return;\n }\n logger = config.loggerProvider;\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n const addListener = (el: Element) => {\n if (shouldTrackEvent('click', el)) {\n addEventListener(el, 'click', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', el));\n });\n }\n if (shouldTrackEvent('change', el)) {\n addEventListener(el, 'change', (event: Event) => {\n // Limit to only the innermost element that matches the selectors, avoiding all propagated event after matching.\n /* istanbul ignore next */\n if (\n event?.target != event?.currentTarget &&\n getClosestElement(event?.target as HTMLElement, cssSelectorAllowlist) != event?.currentTarget\n ) {\n return;\n }\n /* istanbul ignore next */\n amplitude?.track(constants.AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', el));\n });\n }\n };\n\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node: Node) => {\n addListener(node as Element);\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n querySelectUniqueElements(node as Element, cssSelectorAllowlist).map(addListener);\n }\n });\n });\n });\n }\n const attachListeners = () => {\n const allElements = querySelectUniqueElements(document.body, cssSelectorAllowlist);\n allElements.forEach(addListener);\n /* istanbul ignore next */\n observer?.observe(document.body, {\n subtree: true,\n childList: true,\n });\n };\n if (document.body) {\n attachListeners();\n } else {\n // This is to handle the case where the plugin is loaded before the body is available.\n // E.g., for non-reactive frameworks.\n window.addEventListener('load', attachListeners);\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 /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: shouldTrackEvent,\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n if (observer) {\n observer.disconnect();\n }\n removeEventListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
@@ -1,3 +1,3 @@
1
- export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, } from './autocapture-plugin';
1
+ export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, AutocaptureOptions, } from './autocapture-plugin';
2
2
  export { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA0C,eAAe,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export {\n autocapturePlugin as plugin,\n autocapturePlugin,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n} from './autocapture-plugin';\nexport { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,GAE9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA0C,eAAe,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["export {\n autocapturePlugin as plugin,\n autocapturePlugin,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n AutocaptureOptions,\n} from './autocapture-plugin';\nexport { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.9.0";
1
+ export declare const VERSION = "0.9.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export var VERSION = '0.9.0';
1
+ export var VERSION = '0.9.1';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '0.9.0';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '0.9.1';\n"]}
@@ -4,7 +4,7 @@ import { ActionType } from './typings/autocapture';
4
4
  type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;
5
5
  export declare const DEFAULT_CSS_SELECTOR_ALLOWLIST: string[];
6
6
  export declare const DEFAULT_DATA_ATTRIBUTE_PREFIX = "data-amp-track-";
7
- interface Options {
7
+ export interface AutocaptureOptions {
8
8
  /**
9
9
  * List of CSS selectors to allow auto tracking on.
10
10
  * When provided, allow elements matching any selector to be tracked.
@@ -39,6 +39,6 @@ interface Options {
39
39
  messenger?: Messenger;
40
40
  };
41
41
  }
42
- export declare const autocapturePlugin: (options?: Options) => BrowserEnrichmentPlugin;
42
+ export declare const autocapturePlugin: (options?: AutocaptureOptions) => BrowserEnrichmentPlugin;
43
43
  export {};
44
44
  //# sourceMappingURL=autocapture-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAU,MAAM,4BAA4B,CAAC;AAYpG,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,8BAA8B,UAS1C,CAAC;AACF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAQ/D,UAAU,OAAO;IACf;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAEjF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,aAAa,OAAO,KAAQ,uBAyOzD,CAAC"}
1
+ {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAU,MAAM,4BAA4B,CAAC;AAYpG,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,KAAK,uBAAuB,GAAG,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE9E,eAAO,MAAM,8BAA8B,UAS1C,CAAC;AACF,eAAO,MAAM,6BAA6B,oBAAoB,CAAC;AAQ/D,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAEjF;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB,CAAC;CACH;AAED,eAAO,MAAM,iBAAiB,aAAa,kBAAkB,KAAQ,uBAyOpE,CAAC"}
@@ -1,3 +1,3 @@
1
- export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, } from './autocapture-plugin';
1
+ export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, AutocaptureOptions, } from './autocapture-plugin';
2
2
  export { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,IAAI,MAAM,EAC3B,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.9.0";
1
+ export declare const VERSION = "0.9.1";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/plugin-autocapture-browser",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -57,5 +57,5 @@
57
57
  "files": [
58
58
  "lib"
59
59
  ],
60
- "gitHead": "4add89f329257829f0fa50c2b4a38b1877a0325f"
60
+ "gitHead": "3521a68a84a7295aa639c4b40019f2922bfc6e6a"
61
61
  }