@amplitude/plugin-autocapture-browser 1.0.0 → 1.0.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.
Files changed (85) hide show
  1. package/lib/cjs/autocapture/track-action-click.d.ts +1 -2
  2. package/lib/cjs/autocapture/track-action-click.d.ts.map +1 -1
  3. package/lib/cjs/autocapture/track-action-click.js.map +1 -1
  4. package/lib/cjs/autocapture/track-change.d.ts +1 -2
  5. package/lib/cjs/autocapture/track-change.d.ts.map +1 -1
  6. package/lib/cjs/autocapture/track-change.js.map +1 -1
  7. package/lib/cjs/autocapture-plugin.d.ts +3 -52
  8. package/lib/cjs/autocapture-plugin.d.ts.map +1 -1
  9. package/lib/cjs/autocapture-plugin.js +12 -30
  10. package/lib/cjs/autocapture-plugin.js.map +1 -1
  11. package/lib/cjs/helpers.d.ts +3 -4
  12. package/lib/cjs/helpers.d.ts.map +1 -1
  13. package/lib/cjs/helpers.js +15 -6
  14. package/lib/cjs/helpers.js.map +1 -1
  15. package/lib/cjs/hierarchy.js +6 -6
  16. package/lib/cjs/hierarchy.js.map +1 -1
  17. package/lib/cjs/index.d.ts +2 -2
  18. package/lib/cjs/index.d.ts.map +1 -1
  19. package/lib/cjs/index.js +1 -3
  20. package/lib/cjs/index.js.map +1 -1
  21. package/lib/cjs/libs/finder.js +4 -2
  22. package/lib/cjs/libs/finder.js.map +1 -1
  23. package/lib/cjs/libs/messenger.d.ts +1 -6
  24. package/lib/cjs/libs/messenger.d.ts.map +1 -1
  25. package/lib/cjs/libs/messenger.js.map +1 -1
  26. package/lib/cjs/typings/autocapture.d.ts +0 -1
  27. package/lib/cjs/typings/autocapture.d.ts.map +1 -1
  28. package/lib/cjs/typings/autocapture.js.map +1 -1
  29. package/lib/cjs/version.d.ts +1 -1
  30. package/lib/cjs/version.d.ts.map +1 -1
  31. package/lib/cjs/version.js +1 -1
  32. package/lib/cjs/version.js.map +1 -1
  33. package/lib/esm/autocapture/track-action-click.d.ts +1 -2
  34. package/lib/esm/autocapture/track-action-click.d.ts.map +1 -1
  35. package/lib/esm/autocapture/track-action-click.js.map +1 -1
  36. package/lib/esm/autocapture/track-change.d.ts +1 -2
  37. package/lib/esm/autocapture/track-change.d.ts.map +1 -1
  38. package/lib/esm/autocapture/track-change.js.map +1 -1
  39. package/lib/esm/autocapture-plugin.d.ts +3 -52
  40. package/lib/esm/autocapture-plugin.d.ts.map +1 -1
  41. package/lib/esm/autocapture-plugin.js +8 -26
  42. package/lib/esm/autocapture-plugin.js.map +1 -1
  43. package/lib/esm/helpers.d.ts +3 -4
  44. package/lib/esm/helpers.d.ts.map +1 -1
  45. package/lib/esm/helpers.js +15 -6
  46. package/lib/esm/helpers.js.map +1 -1
  47. package/lib/esm/hierarchy.js +6 -6
  48. package/lib/esm/hierarchy.js.map +1 -1
  49. package/lib/esm/index.d.ts +2 -2
  50. package/lib/esm/index.d.ts.map +1 -1
  51. package/lib/esm/index.js +1 -1
  52. package/lib/esm/index.js.map +1 -1
  53. package/lib/esm/libs/finder.js +4 -2
  54. package/lib/esm/libs/finder.js.map +1 -1
  55. package/lib/esm/libs/messenger.d.ts +1 -6
  56. package/lib/esm/libs/messenger.d.ts.map +1 -1
  57. package/lib/esm/libs/messenger.js.map +1 -1
  58. package/lib/esm/typings/autocapture.d.ts +0 -1
  59. package/lib/esm/typings/autocapture.d.ts.map +1 -1
  60. package/lib/esm/typings/autocapture.js.map +1 -1
  61. package/lib/esm/version.d.ts +1 -1
  62. package/lib/esm/version.d.ts.map +1 -1
  63. package/lib/esm/version.js +1 -1
  64. package/lib/esm/version.js.map +1 -1
  65. package/lib/scripts/amplitude-min.js +1 -1
  66. package/lib/scripts/amplitude-min.js.gz +0 -0
  67. package/lib/scripts/amplitude-min.umd.js +1 -1
  68. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  69. package/lib/scripts/autocapture/track-action-click.d.ts +1 -2
  70. package/lib/scripts/autocapture/track-action-click.d.ts.map +1 -1
  71. package/lib/scripts/autocapture/track-change.d.ts +1 -2
  72. package/lib/scripts/autocapture/track-change.d.ts.map +1 -1
  73. package/lib/scripts/autocapture-plugin.d.ts +3 -52
  74. package/lib/scripts/autocapture-plugin.d.ts.map +1 -1
  75. package/lib/scripts/helpers.d.ts +3 -4
  76. package/lib/scripts/helpers.d.ts.map +1 -1
  77. package/lib/scripts/index.d.ts +2 -2
  78. package/lib/scripts/index.d.ts.map +1 -1
  79. package/lib/scripts/libs/messenger.d.ts +1 -6
  80. package/lib/scripts/libs/messenger.d.ts.map +1 -1
  81. package/lib/scripts/typings/autocapture.d.ts +0 -1
  82. package/lib/scripts/typings/autocapture.d.ts.map +1 -1
  83. package/lib/scripts/version.d.ts +1 -1
  84. package/lib/scripts/version.d.ts.map +1 -1
  85. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/hierarchy.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNonSensitiveElement, JSONValue } from './helpers';\nimport { Hierarchy, HierarchyNode } from './typings/autocapture';\n\nconst BLOCKED_ATTRIBUTES = [\n // Already captured elsewhere in the hierarchy object\n 'id',\n 'class',\n\n // non-useful and potentially large attribute\n 'style',\n\n // sensitive as prefilled form data may populate this attribute\n 'value',\n\n // DOM events\n 'onclick',\n 'onchange',\n 'oninput',\n 'onblur',\n 'onsubmit',\n 'onfocus',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n\n // React specific\n 'data-reactid',\n 'data-react-checksum',\n 'data-reactroot',\n];\nconst SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST = ['type'];\n\nconst SVG_TAGS = ['svg', 'path', 'g'];\nconst HIGHLY_SENSITIVE_INPUT_TYPES = ['password', 'hidden'];\nconst MAX_ATTRIBUTE_LENGTH = 128;\nconst MAX_HIERARCHY_LENGTH = 1024;\n\nexport function getElementProperties(element: Element | null): HierarchyNode | null {\n if (element === null) {\n return null;\n }\n\n const tagName = element.tagName.toLowerCase();\n const properties: HierarchyNode = {\n tag: tagName,\n };\n\n const siblings = Array.from(element.parentElement?.children ?? []);\n if (siblings.length) {\n properties.index = siblings.indexOf(element);\n properties.indexOfType = siblings.filter((el) => el.tagName === element.tagName).indexOf(element);\n }\n\n const prevSiblingTag = element.previousElementSibling?.tagName?.toLowerCase();\n if (prevSiblingTag) {\n properties.prevSib = prevSiblingTag;\n }\n\n const id = element.id;\n if (id) {\n properties.id = id;\n }\n\n const classes = Array.from(element.classList);\n if (classes.length) {\n properties.classes = classes;\n }\n\n const attributes: Record<string, string> = {};\n const attributesArray = Array.from(element.attributes);\n const filteredAttributes = attributesArray.filter((attr) => !BLOCKED_ATTRIBUTES.includes(attr.name));\n const isSensitiveElement = !isNonSensitiveElement(element);\n\n // if input is hidden or password or for SVGs, skip attribute collection entirely\n if (!HIGHLY_SENSITIVE_INPUT_TYPES.includes((element as HTMLInputElement).type) && !SVG_TAGS.includes(tagName)) {\n for (const attr of filteredAttributes) {\n // If sensitive element, only allow certain attributes\n if (isSensitiveElement && !SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST.includes(attr.name)) {\n continue;\n }\n\n // Finally limit attribute value length and save it\n attributes[attr.name] = String(attr.value).substring(0, MAX_ATTRIBUTE_LENGTH);\n }\n }\n\n if (Object.keys(attributes).length) {\n properties.attrs = attributes;\n }\n\n return properties;\n}\n\nexport function getAncestors(targetEl: Element | null): Element[] {\n const ancestors: Element[] = [];\n\n if (!targetEl) {\n return ancestors;\n }\n\n // Add self to the list of ancestors\n ancestors.push(targetEl);\n let current = targetEl.parentElement;\n while (current && current.tagName !== 'HTML') {\n ancestors.push(current);\n current = current.parentElement;\n }\n return ancestors;\n}\n\n// Get the DOM hierarchy of the element, starting from the target element to the root element.\nexport const getHierarchy = (element: Element | null): Hierarchy => {\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 hierarchy = ensureListUnderLimit(\n ancestors.map((el) => getElementProperties(el)),\n MAX_HIERARCHY_LENGTH,\n ) as Hierarchy;\n\n return hierarchy;\n};\n\nexport function ensureListUnderLimit(list: Hierarchy | JSONValue[], bytesLimit: number): Hierarchy | JSONValue[] {\n let numChars = 0;\n for (let i = 0; i < list.length; i++) {\n const node = list[i];\n if (node === null) {\n // simulate 'None' in python\n numChars += 4;\n } else {\n const value = ensureUnicodePythonCompatible(node);\n // Using Array.from(string).length instead of string.length\n // to correctly count Unicode characters (including emojis)\n numChars += value ? Array.from(value).length : 4;\n }\n if (numChars > bytesLimit) {\n return list.slice(0, i);\n }\n }\n return list;\n}\n\n/**\n * Converts a JSON-compatible value to a Python-compatible string representation.\n * This function handles various data types and ensures proper escaping and formatting.\n *\n * @param value - The value to be converted (can be any JSON-compatible type)\n * @param nested - Indicates if the value is nested within another structure (default: false)\n * @returns A string representation of the value compatible with Python, or null if conversion fails\n */\nexport function ensureUnicodePythonCompatible(value: HierarchyNode | JSONValue | null, nested = false): string | null {\n try {\n if (value == null) {\n // Handle null values\n if (nested) {\n return 'None'; // Represent null as 'None' in Python when nested\n }\n return null; // Return null for top-level null values\n } else if (typeof value === 'string') {\n if (nested) {\n // Escape special characters in nested strings\n value = value.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t').replace(/\\r/g, '\\\\r');\n\n // Handle quotes in the string\n if (value.includes('\"')) {\n return `'${value}'`; // Wrap in single quotes if it contains double quotes\n }\n if (value.includes(\"'\")) {\n return `\"${value.replace(/'/g, \"\\\\'\")}\"`; // Wrap in double quotes and escape single quotes\n }\n return `'${value}'`; // Default to wrapping in single quotes\n }\n return value; // Return non-nested strings as-is\n } else if (typeof value === 'boolean') {\n // Convert boolean to Python-style capitalized string\n return value ? 'True' : 'False';\n } else if (Array.isArray(value)) {\n // Handle arrays by recursively converting each element\n const elements = value.map((o) => ensureUnicodePythonCompatible(o, true));\n return `[${elements.join(', ')}]`;\n } else if (typeof value === 'object') {\n // Handle objects (dictionaries in Python)\n const entries = Object.entries(value)\n .filter(([key]) => key != null) // Filter out null keys\n .map(\n ([key, val]) =>\n `${String(ensureUnicodePythonCompatible(key, true))}: ${String(ensureUnicodePythonCompatible(val, true))}`,\n );\n let result = `{${entries.join(', ')}}`;\n\n // Handle single quotes in the resulting string\n if (result.includes(\"\\\\'\")) {\n result = result.replace(/'/g, \"'\").replace(/'/g, \"\\\\'\");\n }\n return result;\n }\n // For any other types, return their string representation;\n return value.toString();\n } catch (e) {\n // Return null if any error occurs during the conversion\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/hierarchy.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNonSensitiveElement, JSONValue } from './helpers';\nimport { Hierarchy, HierarchyNode } from './typings/autocapture';\n\nconst BLOCKED_ATTRIBUTES = [\n // Already captured elsewhere in the hierarchy object\n 'id',\n 'class',\n\n // non-useful and potentially large attribute\n 'style',\n\n // sensitive as prefilled form data may populate this attribute\n 'value',\n\n // DOM events\n 'onclick',\n 'onchange',\n 'oninput',\n 'onblur',\n 'onsubmit',\n 'onfocus',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n\n // React specific\n 'data-reactid',\n 'data-react-checksum',\n 'data-reactroot',\n];\nconst SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST = ['type'];\n\nconst SVG_TAGS = ['svg', 'path', 'g'];\nconst HIGHLY_SENSITIVE_INPUT_TYPES = ['password', 'hidden'];\nconst MAX_ATTRIBUTE_LENGTH = 128;\nconst MAX_HIERARCHY_LENGTH = 1024;\n\nexport function getElementProperties(element: Element | null): HierarchyNode | null {\n if (element === null) {\n return null;\n }\n\n const tagName = String(element.tagName).toLowerCase();\n const properties: HierarchyNode = {\n tag: tagName,\n };\n\n const siblings = Array.from(element.parentElement?.children ?? []);\n if (siblings.length) {\n properties.index = siblings.indexOf(element);\n properties.indexOfType = siblings.filter((el) => el.tagName === element.tagName).indexOf(element);\n }\n\n const prevSiblingTag = element.previousElementSibling?.tagName?.toLowerCase();\n if (prevSiblingTag) {\n properties.prevSib = String(prevSiblingTag);\n }\n\n const id = element.getAttribute('id');\n if (id) {\n properties.id = String(id);\n }\n\n const classes = Array.from(element.classList);\n if (classes.length) {\n properties.classes = classes;\n }\n\n const attributes: Record<string, string> = {};\n const attributesArray = Array.from(element.attributes);\n const filteredAttributes = attributesArray.filter((attr) => !BLOCKED_ATTRIBUTES.includes(attr.name));\n const isSensitiveElement = !isNonSensitiveElement(element);\n\n // if input is hidden or password or for SVGs, skip attribute collection entirely\n if (!HIGHLY_SENSITIVE_INPUT_TYPES.includes(String(element.getAttribute('type'))) && !SVG_TAGS.includes(tagName)) {\n for (const attr of filteredAttributes) {\n // If sensitive element, only allow certain attributes\n if (isSensitiveElement && !SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST.includes(attr.name)) {\n continue;\n }\n\n // Finally cast attribute value to string and limit attribute value length\n attributes[attr.name] = String(attr.value).substring(0, MAX_ATTRIBUTE_LENGTH);\n }\n }\n\n if (Object.keys(attributes).length) {\n properties.attrs = attributes;\n }\n\n return properties;\n}\n\nexport function getAncestors(targetEl: Element | null): Element[] {\n const ancestors: Element[] = [];\n\n if (!targetEl) {\n return ancestors;\n }\n\n // Add self to the list of ancestors\n ancestors.push(targetEl);\n let current = targetEl.parentElement;\n while (current && current.tagName !== 'HTML') {\n ancestors.push(current);\n current = current.parentElement;\n }\n return ancestors;\n}\n\n// Get the DOM hierarchy of the element, starting from the target element to the root element.\nexport const getHierarchy = (element: Element | null): Hierarchy => {\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 hierarchy = ensureListUnderLimit(\n ancestors.map((el) => getElementProperties(el)),\n MAX_HIERARCHY_LENGTH,\n ) as Hierarchy;\n\n return hierarchy;\n};\n\nexport function ensureListUnderLimit(list: Hierarchy | JSONValue[], bytesLimit: number): Hierarchy | JSONValue[] {\n let numChars = 0;\n for (let i = 0; i < list.length; i++) {\n const node = list[i];\n if (node === null) {\n // simulate 'None' in python\n numChars += 4;\n } else {\n const value = ensureUnicodePythonCompatible(node);\n // Using Array.from(string).length instead of string.length\n // to correctly count Unicode characters (including emojis)\n numChars += value ? Array.from(value).length : 4;\n }\n if (numChars > bytesLimit) {\n return list.slice(0, i);\n }\n }\n return list;\n}\n\n/**\n * Converts a JSON-compatible value to a Python-compatible string representation.\n * This function handles various data types and ensures proper escaping and formatting.\n *\n * @param value - The value to be converted (can be any JSON-compatible type)\n * @param nested - Indicates if the value is nested within another structure (default: false)\n * @returns A string representation of the value compatible with Python, or null if conversion fails\n */\nexport function ensureUnicodePythonCompatible(value: HierarchyNode | JSONValue | null, nested = false): string | null {\n try {\n if (value == null) {\n // Handle null values\n if (nested) {\n return 'None'; // Represent null as 'None' in Python when nested\n }\n return null; // Return null for top-level null values\n } else if (typeof value === 'string') {\n if (nested) {\n // Escape special characters in nested strings\n value = value.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t').replace(/\\r/g, '\\\\r');\n\n // Handle quotes in the string\n if (value.includes('\"')) {\n return `'${value}'`; // Wrap in single quotes if it contains double quotes\n }\n if (value.includes(\"'\")) {\n return `\"${value.replace(/'/g, \"\\\\'\")}\"`; // Wrap in double quotes and escape single quotes\n }\n return `'${value}'`; // Default to wrapping in single quotes\n }\n return value; // Return non-nested strings as-is\n } else if (typeof value === 'boolean') {\n // Convert boolean to Python-style capitalized string\n return value ? 'True' : 'False';\n } else if (Array.isArray(value)) {\n // Handle arrays by recursively converting each element\n const elements = value.map((o) => ensureUnicodePythonCompatible(o, true));\n return `[${elements.join(', ')}]`;\n } else if (typeof value === 'object') {\n // Handle objects (dictionaries in Python)\n const entries = Object.entries(value)\n .filter(([key]) => key != null) // Filter out null keys\n .map(\n ([key, val]) =>\n `${String(ensureUnicodePythonCompatible(key, true))}: ${String(ensureUnicodePythonCompatible(val, true))}`,\n );\n let result = `{${entries.join(', ')}}`;\n\n // Handle single quotes in the resulting string\n if (result.includes(\"\\\\'\")) {\n result = result.replace(/'/g, \"'\").replace(/'/g, \"\\\\'\");\n }\n return result;\n }\n // For any other types, return their string representation;\n return value.toString();\n } catch (e) {\n // Return null if any error occurs during the conversion\n return null;\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
- export { autocapturePlugin as plugin, autocapturePlugin, DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, AutocaptureOptions, } from './autocapture-plugin';
2
- export { Messenger, Action, ActionData, Message, WindowMessenger } from './libs/messenger';
1
+ export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';
2
+ export { 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,EAC7B,kBAAkB,GACnB,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,EAAE,iBAAiB,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
package/lib/cjs/index.js CHANGED
@@ -1,10 +1,8 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
- exports.WindowMessenger = exports.DEFAULT_DATA_ATTRIBUTE_PREFIX = exports.DEFAULT_CSS_SELECTOR_ALLOWLIST = exports.autocapturePlugin = exports.plugin = void 0;
2
+ exports.WindowMessenger = exports.autocapturePlugin = exports.plugin = void 0;
3
3
  var autocapture_plugin_1 = require("./autocapture-plugin");
4
4
  Object.defineProperty(exports, "plugin", { enumerable: true, get: function () { return autocapture_plugin_1.autocapturePlugin; } });
5
5
  Object.defineProperty(exports, "autocapturePlugin", { enumerable: true, get: function () { return autocapture_plugin_1.autocapturePlugin; } });
6
- Object.defineProperty(exports, "DEFAULT_CSS_SELECTOR_ALLOWLIST", { enumerable: true, get: function () { return autocapture_plugin_1.DEFAULT_CSS_SELECTOR_ALLOWLIST; } });
7
- Object.defineProperty(exports, "DEFAULT_DATA_ATTRIBUTE_PREFIX", { enumerable: true, get: function () { return autocapture_plugin_1.DEFAULT_DATA_ATTRIBUTE_PREFIX; } });
8
6
  var messenger_1 = require("./libs/messenger");
9
7
  Object.defineProperty(exports, "WindowMessenger", { enumerable: true, get: function () { return messenger_1.WindowMessenger; } });
10
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,2DAAsF;AAA7E,4GAAA,iBAAiB,OAAU;AAAE,uHAAA,iBAAiB,OAAA;AACvD,8CAAgF;AAA1C,4GAAA,eAAe,OAAA","sourcesContent":["export { autocapturePlugin as plugin, autocapturePlugin } from './autocapture-plugin';\nexport { Action, ActionData, Message, WindowMessenger } from './libs/messenger';\n"]}
@@ -119,10 +119,12 @@ function bottomUpSearch(input, limit, fallback) {
119
119
  }
120
120
  function findUniquePath(stack, fallback) {
121
121
  var e_2, _a;
122
- var paths = sort(combinations(stack));
123
- if (paths.length > config.threshold) {
122
+ // Check first the total number of combinations first since generating the combinations can cause memory exhaustion
123
+ var numCombinations = stack.reduce(function (acc, i) { return acc * i.length; }, 1);
124
+ if (numCombinations > config.threshold) {
124
125
  return fallback ? fallback() : null;
125
126
  }
127
+ var paths = sort(combinations(stack));
126
128
  try {
127
129
  for (var paths_1 = tslib_1.__values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {
128
130
  var candidate = paths_1_1.value;
@@ -1 +1 @@
1
- {"version":3,"file":"finder.js","sourceRoot":"","sources":["../../../src/libs/finder.ts"],"names":[],"mappings":"AAAA,0BAA0B;;;;AA0B1B,IAAI,MAAe,CAAC;AACpB,IAAI,YAAgC,CAAC;AAErC,SAAgB,MAAM,CAAC,KAAc,EAAE,OAA0B;IAC/D,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;KAC3E;IACD,IAAI,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;QAC1C,OAAO,MAAM,CAAC;KACf;IACD,IAAM,QAAQ,GAAY;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,MAAM,EAAE,UAAC,KAAa,IAAK,OAAA,IAAI,EAAJ,CAAI;QAC/B,SAAS,EAAE,UAAC,KAAa,IAAK,OAAA,IAAI,EAAJ,CAAI;QAClC,OAAO,EAAE,UAAC,KAAa,IAAK,OAAA,IAAI,EAAJ,CAAI;QAChC,IAAI,EAAE,UAAC,KAAa,EAAE,MAAc,IAAK,OAAA,KAAK,EAAL,CAAK;QAC9C,aAAa,EAAE,CAAC;QAChB,kBAAkB,EAAE,CAAC;QACrB,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,KAAK;KACxB,CAAC;IAEF,MAAM,yCAAQ,QAAQ,GAAK,OAAO,CAAE,CAAC;IACrC,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEvD,IAAI,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE;QACtC,OAAA,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,cAAM,OAAA,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,cAAM,OAAA,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAA7B,CAA6B,CAAC,EAAjE,CAAiE,CAAC;IAArG,CAAqG,CACtG,CAAC;IAEF,IAAI,IAAI,EAAE;QACR,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;SACrB;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;KACvB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;AACH,CAAC;AAnCD,wBAmCC;AAED,SAAS,gBAAgB,CAAC,QAA4B,EAAE,QAAiB;IACvE,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,EAAE;QAC5C,OAAO,QAAQ,CAAC;KACjB;IACD,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE;QAC9B,OAAO,QAAQ,CAAC,aAAa,CAAC;KAC/B;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,KAAqC,EACrC,QAA4B;IAE5B,IAAI,IAAI,GAAgB,IAAI,CAAC;IAC7B,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAmB,KAAK,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,CAAC;;;QAER,IAAI,KAAK,GAAW,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IACpC,KAAK,wDAAI,IAAI,CAAC,OAAO,CAAC,UAAC,IACvB,KAAK,wDAAI,UAAU,CAAC,OAAO,CAAC,UAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,IAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,KAAK,IAAI,KAAK,EAAE;YAClB,IAAI,GAAG,EAAE;gBACP,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAC,CAAC;aACvF;SACF;aAAM,IAAI,KAAK,IAAI,KAAK,EAAE;YACzB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,EAAE;gBACP,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAC,CAAC;aACvF;SACF;aAAM,IAAI,KAAK,IAAI,KAAK,EAAE;YACnB,IAAA,KAAA,eAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,EAAnC,IAAI,QAA+B,CAAC;YAC3C,IAAI,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;gBAC/B,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;aAC/B;SACF;aAAM,IAAI,KAAK,IAAI,MAAM,EAAE;YAC1B,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAChB,IAAI,GAAG,EAAE;gBACP,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;aACnC;SACF;;YACD,KAAmB,IAAA,yBAAA,iBAAA,KAAK,CAAA,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACb,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;aAChB;;;;;;;;;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE;YACxC,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE;;aAET;SACF;QACD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;QAChC,CAAC,EAAE,CAAC;;IArCN,OAAO,OAAO;;;;KAsCb;IACD,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACxC;IACD,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE;QACrB,OAAO,QAAQ,EAAE,CAAC;KACnB;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAe,EAAE,QAA4B;;IACnE,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE;QACnC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KACrC;;QACD,KAAwB,IAAA,UAAA,iBAAA,KAAK,CAAA,4BAAA,+CAAE;YAA1B,IAAM,SAAS,kBAAA;YAClB,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE;gBACrB,OAAO,SAAS,CAAC;aAClB;SACF;;;;;;;;;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU;IAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE;YAC5B,KAAK,GAAG,UAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,gBAAM,KAAK,CAAE,CAAC;SACtC;aAAM;YACL,KAAK,GAAG,UAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,cAAI,KAAK,CAAE,CAAC;SACpC;QACD,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAChB;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,IAAU;IACzB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,OAAO,EAAZ,CAAY,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,CAAC,EAAP,CAAO,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,MAAM,CAAC,IAAU;IACxB,IAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QACjD,KAAK,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,oDAA6C,GAAG,CAAE,CAAC,CAAC;QACtE,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC;QACd;YACE,OAAO,KAAK,CAAC;KAChB;AACH,CAAC;AAED,SAAS,EAAE,CAAC,KAAc;IACxB,IAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;QACzC,OAAO;YACL,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YACjC,OAAO,EAAE,CAAC;SACX,CAAC;KACH;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAlC,CAAkC,CAAC,CAAC;IAChG,OAAO,KAAK,CAAC,GAAG,CACd,UAAC,IAAI,IAAW,OAAA,CAAC;QACf,IAAI,EAAE,WAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAI;QAC9D,OAAO,EAAE,GAAG;KACb,CAAC,EAHc,CAGd,CACH,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,GAAG,CACd,UAAC,IAAI,IAAW,OAAA,CAAC;QACf,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,OAAO,EAAE,CAAC;KACX,CAAC,EAHc,CAGd,CACH,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO;YACL,IAAI,MAAA;YACJ,OAAO,EAAE,CAAC;SACX,CAAC;KACH;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,GAAG;IACV,OAAO;QACL,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,CAAC;KACX,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,KAAc;IAC3B,IAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,IAAI,CAAC;KACb;IACD,IAAI,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,KAAK,EAAE;QACZ,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;YACxC,CAAC,EAAE,CAAC;SACL;QACD,IAAI,KAAK,KAAK,KAAK,EAAE;YACnB,MAAM;SACP;QACD,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;KAC3B;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,CAAS;IACrC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,qBAAc,CAAC,MAAG;QACpC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAU;IAChC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,KAAK;IAAC,eAAyB;SAAzB,UAAyB,EAAzB,qBAAyB,EAAzB,IAAyB;QAAzB,0BAAyB;;IACtC,IAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAI,KAA2B;IAC9C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED,SAAU,YAAY,CAAC,KAAe,EAAE,IAAiB;;;IAAjB,qBAAA,EAAA,SAAiB;;;;qBACnD,CAAA,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA,EAAhB,wBAAgB;;;;gBACC,KAAA,iBAAA,KAAK,CAAC,CAAC,CAAC,CAAA;;;;gBAAhB,IAAI;gBACb,sBAAA,iBAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA,EAAA;;gBAApE,SAAoE,CAAC;;;;;;;;;;;;;;;;;oBAGvE,qBAAM,IAAI,EAAA;;gBAAV,SAAU,CAAC;;;;;CAEd;AAED,SAAS,IAAI,CAAC,KAAqB;IACjC,OAAO,yCAAI,KAAK,UAAE,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAvB,CAAuB,CAAC,CAAC;AAC5D,CAAC;AAOD,SAAU,QAAQ,CAChB,IAAU,EACV,KAAc,EACd,KAGC;;IAHD,sBAAA,EAAA;QACE,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,GAAG,EAAmB;KACpC;;;;qBAEG,CAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAA,EAA1D,wBAA0D;gBACnD,CAAC,GAAG,CAAC;;;qBAAE,CAAA,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;gBACjC,IAAI,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,gBAAgB,EAAE;oBAC3C,sBAAO,CAAC,yBAAyB;iBAClC;gBACD,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;gBACb,OAAO,4CAAO,IAAI,SAAC,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACf,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;oBACjC,sBAAO;iBACR;qBACG,CAAA,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA,EAAvC,wBAAuC;gBACzC,qBAAM,OAAO,EAAA;;gBAAb,SAAa,CAAC;gBACd,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACpC,sBAAA,iBAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA,EAAA;;gBAAtC,SAAsC,CAAC;;;gBAdN,CAAC,EAAE,CAAA;;;;;CAkB3C;AAED,SAAS,IAAI,CAAC,IAAU,EAAE,KAAc;IACtC,OAAO,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;AAC9D,CAAC","sourcesContent":["/* istanbul ignore file */\n\n// License: MIT\n// Author: Anton Medvedev <anton@medv.io>\n// Source: https://github.com/antonmedv/finder\n\ntype Knot = {\n name: string;\n penalty: number;\n level?: number;\n};\n\ntype Path = Knot[];\n\nexport type Options = {\n root: Element;\n idName: (name: string) => boolean;\n className: (name: string) => boolean;\n tagName: (name: string) => boolean;\n attr: (name: string, value: string) => boolean;\n seedMinLength: number;\n optimizedMinLength: number;\n threshold: number;\n maxNumberOfTries: number;\n};\n\nlet config: Options;\nlet rootDocument: Document | Element;\n\nexport function finder(input: Element, options?: Partial<Options>) {\n if (input.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Can't generate CSS selector for non-element node type.`);\n }\n if ('html' === input.tagName.toLowerCase()) {\n return 'html';\n }\n const defaults: Options = {\n root: document.body,\n idName: (_name: string) => true,\n className: (_name: string) => true,\n tagName: (_name: string) => true,\n attr: (_name: string, _value: string) => false,\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n maxNumberOfTries: 10000,\n };\n\n config = { ...defaults, ...options };\n rootDocument = findRootDocument(config.root, defaults);\n\n let path = bottomUpSearch(input, 'all', () =>\n bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))),\n );\n\n if (path) {\n const optimized = sort(optimize(path, input));\n if (optimized.length > 0) {\n path = optimized[0];\n }\n return selector(path);\n } else {\n throw new Error(`Selector was not found.`);\n }\n}\n\nfunction findRootDocument(rootNode: Element | Document, defaults: Options) {\n if (rootNode.nodeType === Node.DOCUMENT_NODE) {\n return rootNode;\n }\n if (rootNode === defaults.root) {\n return rootNode.ownerDocument;\n }\n return rootNode;\n}\n\nfunction bottomUpSearch(\n input: Element,\n limit: 'all' | 'two' | 'one' | 'none',\n fallback?: () => Path | null,\n): Path | null {\n let path: Path | null = null;\n const stack: Knot[][] = [];\n let current: Element | null = input;\n let i = 0;\n while (current) {\n let level: Knot[] = maybe(id(current)) ||\n maybe(...attr(current)) ||\n maybe(...classNames(current)) ||\n maybe(tagName(current)) || [any()];\n const nth = index(current);\n if (limit == 'all') {\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'two') {\n level = level.slice(0, 1);\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'one') {\n const [node] = (level = level.slice(0, 1));\n if (nth && dispensableNth(node)) {\n level = [nthChild(node, nth)];\n }\n } else if (limit == 'none') {\n level = [any()];\n if (nth) {\n level = [nthChild(level[0], nth)];\n }\n }\n for (const node of level) {\n node.level = i;\n }\n stack.push(level);\n if (stack.length >= config.seedMinLength) {\n path = findUniquePath(stack, fallback);\n if (path) {\n break;\n }\n }\n current = current.parentElement;\n i++;\n }\n if (!path) {\n path = findUniquePath(stack, fallback);\n }\n if (!path && fallback) {\n return fallback();\n }\n return path;\n}\n\nfunction findUniquePath(stack: Knot[][], fallback?: () => Path | null): Path | null {\n const paths = sort(combinations(stack));\n if (paths.length > config.threshold) {\n return fallback ? fallback() : null;\n }\n for (const candidate of paths) {\n if (unique(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction selector(path: Path): string {\n let node = path[0];\n let query = node.name;\n for (let i = 1; i < path.length; i++) {\n const level = path[i].level || 0;\n if (node.level === level - 1) {\n query = `${path[i].name} > ${query}`;\n } else {\n query = `${path[i].name} ${query}`;\n }\n node = path[i];\n }\n return query;\n}\n\nfunction penalty(path: Path): number {\n return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0);\n}\n\nfunction unique(path: Path) {\n const css = selector(path);\n switch (rootDocument.querySelectorAll(css).length) {\n case 0:\n throw new Error(`Can't select any node with this selector: ${css}`);\n case 1:\n return true;\n default:\n return false;\n }\n}\n\nfunction id(input: Element): Knot | null {\n const elementId = input.getAttribute('id');\n if (elementId && config.idName(elementId)) {\n return {\n name: '#' + CSS.escape(elementId),\n penalty: 0,\n };\n }\n return null;\n}\n\nfunction attr(input: Element): Knot[] {\n const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value));\n return attrs.map(\n (attr): Knot => ({\n name: `[${CSS.escape(attr.name)}=\"${CSS.escape(attr.value)}\"]`,\n penalty: 0.5,\n }),\n );\n}\n\nfunction classNames(input: Element): Knot[] {\n const names = Array.from(input.classList).filter(config.className);\n return names.map(\n (name): Knot => ({\n name: '.' + CSS.escape(name),\n penalty: 1,\n }),\n );\n}\n\nfunction tagName(input: Element): Knot | null {\n const name = input.tagName.toLowerCase();\n if (config.tagName(name)) {\n return {\n name,\n penalty: 2,\n };\n }\n return null;\n}\n\nfunction any(): Knot {\n return {\n name: '*',\n penalty: 3,\n };\n}\n\nfunction index(input: Element): number | null {\n const parent = input.parentNode;\n if (!parent) {\n return null;\n }\n let child = parent.firstChild;\n if (!child) {\n return null;\n }\n let i = 0;\n while (child) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n i++;\n }\n if (child === input) {\n break;\n }\n child = child.nextSibling;\n }\n return i;\n}\n\nfunction nthChild(node: Knot, i: number): Knot {\n return {\n name: node.name + `:nth-child(${i})`,\n penalty: node.penalty + 1,\n };\n}\n\nfunction dispensableNth(node: Knot) {\n return node.name !== 'html' && !node.name.startsWith('#');\n}\n\nfunction maybe(...level: (Knot | null)[]): Knot[] | null {\n const list = level.filter(notEmpty);\n if (list.length > 0) {\n return list;\n }\n return null;\n}\n\nfunction notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction* combinations(stack: Knot[][], path: Knot[] = []): Generator<Knot[]> {\n if (stack.length > 0) {\n for (const node of stack[0]) {\n yield* combinations(stack.slice(1, stack.length), path.concat(node));\n }\n } else {\n yield path;\n }\n}\n\nfunction sort(paths: Iterable<Path>): Path[] {\n return [...paths].sort((a, b) => penalty(a) - penalty(b));\n}\n\ntype Scope = {\n counter: number;\n visited: Map<string, boolean>;\n};\n\nfunction* optimize(\n path: Path,\n input: Element,\n scope: Scope = {\n counter: 0,\n visited: new Map<string, boolean>(),\n },\n): Generator<Knot[]> {\n if (path.length > 2 && path.length > config.optimizedMinLength) {\n for (let i = 1; i < path.length - 1; i++) {\n if (scope.counter > config.maxNumberOfTries) {\n return; // Okay At least I tried!\n }\n scope.counter += 1;\n const newPath = [...path];\n newPath.splice(i, 1);\n const newPathKey = selector(newPath);\n if (scope.visited.has(newPathKey)) {\n return;\n }\n if (unique(newPath) && same(newPath, input)) {\n yield newPath;\n scope.visited.set(newPathKey, true);\n yield* optimize(newPath, input, scope);\n }\n }\n }\n}\n\nfunction same(path: Path, input: Element) {\n return rootDocument.querySelector(selector(path)) === input;\n}\n"]}
1
+ {"version":3,"file":"finder.js","sourceRoot":"","sources":["../../../src/libs/finder.ts"],"names":[],"mappings":"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","sourcesContent":["/* istanbul ignore file */\n\n// License: MIT\n// Author: Anton Medvedev <anton@medv.io>\n// Source: https://github.com/antonmedv/finder\n\ntype Knot = {\n name: string;\n penalty: number;\n level?: number;\n};\n\ntype Path = Knot[];\n\nexport type Options = {\n root: Element;\n idName: (name: string) => boolean;\n className: (name: string) => boolean;\n tagName: (name: string) => boolean;\n attr: (name: string, value: string) => boolean;\n seedMinLength: number;\n optimizedMinLength: number;\n threshold: number;\n maxNumberOfTries: number;\n};\n\nlet config: Options;\nlet rootDocument: Document | Element;\n\nexport function finder(input: Element, options?: Partial<Options>) {\n if (input.nodeType !== Node.ELEMENT_NODE) {\n throw new Error(`Can't generate CSS selector for non-element node type.`);\n }\n if ('html' === input.tagName.toLowerCase()) {\n return 'html';\n }\n const defaults: Options = {\n root: document.body,\n idName: (_name: string) => true,\n className: (_name: string) => true,\n tagName: (_name: string) => true,\n attr: (_name: string, _value: string) => false,\n seedMinLength: 1,\n optimizedMinLength: 2,\n threshold: 1000,\n maxNumberOfTries: 10000,\n };\n\n config = { ...defaults, ...options };\n rootDocument = findRootDocument(config.root, defaults);\n\n let path = bottomUpSearch(input, 'all', () =>\n bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))),\n );\n\n if (path) {\n const optimized = sort(optimize(path, input));\n if (optimized.length > 0) {\n path = optimized[0];\n }\n return selector(path);\n } else {\n throw new Error(`Selector was not found.`);\n }\n}\n\nfunction findRootDocument(rootNode: Element | Document, defaults: Options) {\n if (rootNode.nodeType === Node.DOCUMENT_NODE) {\n return rootNode;\n }\n if (rootNode === defaults.root) {\n return rootNode.ownerDocument;\n }\n return rootNode;\n}\n\nfunction bottomUpSearch(\n input: Element,\n limit: 'all' | 'two' | 'one' | 'none',\n fallback?: () => Path | null,\n): Path | null {\n let path: Path | null = null;\n const stack: Knot[][] = [];\n let current: Element | null = input;\n let i = 0;\n while (current) {\n let level: Knot[] = maybe(id(current)) ||\n maybe(...attr(current)) ||\n maybe(...classNames(current)) ||\n maybe(tagName(current)) || [any()];\n const nth = index(current);\n if (limit == 'all') {\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'two') {\n level = level.slice(0, 1);\n if (nth) {\n level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth)));\n }\n } else if (limit == 'one') {\n const [node] = (level = level.slice(0, 1));\n if (nth && dispensableNth(node)) {\n level = [nthChild(node, nth)];\n }\n } else if (limit == 'none') {\n level = [any()];\n if (nth) {\n level = [nthChild(level[0], nth)];\n }\n }\n for (const node of level) {\n node.level = i;\n }\n stack.push(level);\n if (stack.length >= config.seedMinLength) {\n path = findUniquePath(stack, fallback);\n if (path) {\n break;\n }\n }\n current = current.parentElement;\n i++;\n }\n if (!path) {\n path = findUniquePath(stack, fallback);\n }\n if (!path && fallback) {\n return fallback();\n }\n return path;\n}\n\nfunction findUniquePath(stack: Knot[][], fallback?: () => Path | null): Path | null {\n // Check first the total number of combinations first since generating the combinations can cause memory exhaustion\n const numCombinations = stack.reduce((acc, i) => acc * i.length, 1);\n if (numCombinations > config.threshold) {\n return fallback ? fallback() : null;\n }\n\n const paths = sort(combinations(stack));\n for (const candidate of paths) {\n if (unique(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction selector(path: Path): string {\n let node = path[0];\n let query = node.name;\n for (let i = 1; i < path.length; i++) {\n const level = path[i].level || 0;\n if (node.level === level - 1) {\n query = `${path[i].name} > ${query}`;\n } else {\n query = `${path[i].name} ${query}`;\n }\n node = path[i];\n }\n return query;\n}\n\nfunction penalty(path: Path): number {\n return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0);\n}\n\nfunction unique(path: Path) {\n const css = selector(path);\n switch (rootDocument.querySelectorAll(css).length) {\n case 0:\n throw new Error(`Can't select any node with this selector: ${css}`);\n case 1:\n return true;\n default:\n return false;\n }\n}\n\nfunction id(input: Element): Knot | null {\n const elementId = input.getAttribute('id');\n if (elementId && config.idName(elementId)) {\n return {\n name: '#' + CSS.escape(elementId),\n penalty: 0,\n };\n }\n return null;\n}\n\nfunction attr(input: Element): Knot[] {\n const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value));\n return attrs.map(\n (attr): Knot => ({\n name: `[${CSS.escape(attr.name)}=\"${CSS.escape(attr.value)}\"]`,\n penalty: 0.5,\n }),\n );\n}\n\nfunction classNames(input: Element): Knot[] {\n const names = Array.from(input.classList).filter(config.className);\n return names.map(\n (name): Knot => ({\n name: '.' + CSS.escape(name),\n penalty: 1,\n }),\n );\n}\n\nfunction tagName(input: Element): Knot | null {\n const name = input.tagName.toLowerCase();\n if (config.tagName(name)) {\n return {\n name,\n penalty: 2,\n };\n }\n return null;\n}\n\nfunction any(): Knot {\n return {\n name: '*',\n penalty: 3,\n };\n}\n\nfunction index(input: Element): number | null {\n const parent = input.parentNode;\n if (!parent) {\n return null;\n }\n let child = parent.firstChild;\n if (!child) {\n return null;\n }\n let i = 0;\n while (child) {\n if (child.nodeType === Node.ELEMENT_NODE) {\n i++;\n }\n if (child === input) {\n break;\n }\n child = child.nextSibling;\n }\n return i;\n}\n\nfunction nthChild(node: Knot, i: number): Knot {\n return {\n name: node.name + `:nth-child(${i})`,\n penalty: node.penalty + 1,\n };\n}\n\nfunction dispensableNth(node: Knot) {\n return node.name !== 'html' && !node.name.startsWith('#');\n}\n\nfunction maybe(...level: (Knot | null)[]): Knot[] | null {\n const list = level.filter(notEmpty);\n if (list.length > 0) {\n return list;\n }\n return null;\n}\n\nfunction notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction* combinations(stack: Knot[][], path: Knot[] = []): Generator<Knot[]> {\n if (stack.length > 0) {\n for (const node of stack[0]) {\n yield* combinations(stack.slice(1, stack.length), path.concat(node));\n }\n } else {\n yield path;\n }\n}\n\nfunction sort(paths: Iterable<Path>): Path[] {\n return [...paths].sort((a, b) => penalty(a) - penalty(b));\n}\n\ntype Scope = {\n counter: number;\n visited: Map<string, boolean>;\n};\n\nfunction* optimize(\n path: Path,\n input: Element,\n scope: Scope = {\n counter: 0,\n visited: new Map<string, boolean>(),\n },\n): Generator<Knot[]> {\n if (path.length > 2 && path.length > config.optimizedMinLength) {\n for (let i = 1; i < path.length - 1; i++) {\n if (scope.counter > config.maxNumberOfTries) {\n return; // Okay At least I tried!\n }\n scope.counter += 1;\n const newPath = [...path];\n newPath.splice(i, 1);\n const newPathKey = selector(newPath);\n if (scope.visited.has(newPathKey)) {\n return;\n }\n if (unique(newPath) && same(newPath, input)) {\n yield newPath;\n scope.visited.set(newPathKey, true);\n yield* optimize(newPath, input, scope);\n }\n }\n }\n}\n\nfunction same(path: Path, input: Element) {\n return rootDocument.querySelector(selector(path)) === input;\n}\n"]}
@@ -1,9 +1,4 @@
1
- import { Logger } from '@amplitude/analytics-types';
2
- import { ActionType } from '../typings/autocapture';
3
- export interface Messenger {
4
- logger?: Logger;
5
- setup: () => void;
6
- }
1
+ import { Logger, Messenger, ActionType } from '@amplitude/analytics-types';
7
2
  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';
8
3
  interface InitializeVisualTaggingSelectorData {
9
4
  actionType: ActionType;
@@ -1 +1 @@
1
- {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/libs/messenger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/libs/messenger.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE3E,MAAM,MAAM,MAAM,GACd,MAAM,GACN,MAAM,GACN,aAAa,GACb,iBAAiB,GACjB,oCAAoC,GACpC,+BAA+B,GAC/B,kBAAkB,GAClB,6BAA6B,GAC7B,sBAAsB,CAAC;AAE3B,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,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,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;CAChD,CAAC;AAEF,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM;IACvC,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CACtB;AAeD,qBAAa,eAAgB,YAAW,SAAS;IAC/C,QAAQ,SAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE;QAChB,CAAC,EAAE,EAAE,MAAM,GAAG;YACZ,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;YAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;SAC7B,CAAC;KACH,CAAM;gBAEK,EAAE,MAAyB,EAAE,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAInE,OAAO,CAAC,MAAM;IAMP,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO;;KAAsB,GAAG,OAAO,CAAC,GAAG,CAAC;IA6B1G,OAAO,CAAC,cAAc;IAUtB,KAAK,CAAC,EACJ,MAAM,EACN,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,GAAE;QACD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,mCAAmC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QAC/G,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B;IAsEN,OAAO,CAAC,QAAQ,CAEd;IAEF,OAAO,CAAC,OAAO,CAMb;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"messenger.js","sourceRoot":"","sources":["../../../src/libs/messenger.ts"],"names":[],"mappings":"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","sourcesContent":["/* istanbul ignore file */\n/* eslint-disable no-restricted-globals */\nimport {\n AMPLITUDE_ORIGIN,\n AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL,\n AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n} from '../constants';\nimport { asyncLoadScript, generateUniqueId, getEventTagProps } from '../helpers';\nimport { Logger } from '@amplitude/analytics-types';\nimport { ActionType } from '../typings/autocapture';\n\nexport interface Messenger {\n logger?: Logger;\n setup: () => void;\n}\n\nexport type Action =\n | 'ping'\n | 'pong'\n | 'page-loaded'\n | 'selector-loaded'\n | 'initialize-visual-tagging-selector'\n | 'close-visual-tagging-selector'\n | 'element-selected'\n | 'track-selector-mode-changed'\n | 'track-selector-moved';\n\ninterface InitializeVisualTaggingSelectorData {\n actionType: ActionType;\n}\n\ninterface ElementSelectedData {\n '[Amplitude] Element Hierarchy'?: string;\n '[Amplitude] Element Tag'?: string;\n '[Amplitude] Element Text'?: string;\n '[Amplitude] Element Selector'?: string;\n '[Amplitude] Page URL'?: string;\n elementScreenshot?: Blob;\n}\n\ninterface TrackSelectorModeChangedData {\n newMode: string;\n pageUrl?: string;\n}\n\ninterface TrackSelectorMovedData {\n newEditorLocation: string;\n pageUrl?: string;\n}\n\nexport type ActionData = {\n ping: null | undefined;\n pong: null | undefined;\n 'page-loaded': null | undefined;\n 'selector-loaded': null | undefined;\n 'initialize-visual-tagging-selector': InitializeVisualTaggingSelectorData | null | undefined;\n 'close-visual-tagging-selector': null | undefined;\n 'element-selected': ElementSelectedData;\n 'track-selector-mode-changed': TrackSelectorModeChangedData;\n 'track-selector-moved': TrackSelectorMovedData;\n};\n\nexport interface Message<A extends Action> {\n action: A;\n data?: ActionData[A];\n}\n\ntype MessageRequest = {\n id: string;\n action: string;\n args: Record<string, any>;\n};\n\ntype MessageResponse = {\n id: string;\n action: string;\n responseData: any;\n};\n\n// TODO: use MessageChannel instead of window.postMessage\nexport class WindowMessenger implements Messenger {\n endpoint = AMPLITUDE_ORIGIN;\n logger?: Logger;\n requestCallbacks: {\n [id: string]: {\n resolve: (data: any) => void;\n reject: (data: any) => void;\n };\n } = {};\n\n constructor({ origin = AMPLITUDE_ORIGIN }: { origin?: string } = {}) {\n this.endpoint = origin;\n }\n\n private notify(message: Message<Action> | MessageRequest) {\n this.logger?.debug?.('Message sent: ', JSON.stringify(message));\n (window.opener as WindowProxy)?.postMessage?.(message, this.endpoint);\n }\n\n // Send an async request to the parent window\n public sendRequest(action: string, args: Record<string, any>, options = { timeout: 15_000 }): Promise<any> {\n // Create Request ID\n const id = generateUniqueId();\n const request = {\n id,\n action,\n args,\n };\n\n // Create a Promise that will be resolved when the response is received\n const promise = new Promise((resolve, reject) => {\n this.requestCallbacks[id] = { resolve, reject };\n\n // Send the request\n this.notify(request);\n\n // Handle request timeouts\n if (options?.timeout > 0) {\n setTimeout(() => {\n reject(new Error(`${action} timed out (id: ${id})`));\n delete this.requestCallbacks[id];\n }, options.timeout);\n }\n });\n\n return promise;\n }\n\n // Handle messages from the parent window\n private handleResponse(response: MessageResponse) {\n if (!this.requestCallbacks[response.id]) {\n this.logger?.warn(`No callback found for request id: ${response.id}`);\n return;\n }\n\n this.requestCallbacks[response.id].resolve(response.responseData);\n delete this.requestCallbacks[response.id];\n }\n\n setup({\n logger,\n endpoint,\n isElementSelectable,\n cssSelectorAllowlist,\n actionClickAllowlist,\n }: {\n logger?: Logger;\n endpoint?: string;\n isElementSelectable?: (action: InitializeVisualTaggingSelectorData['actionType'], element: Element) => boolean;\n cssSelectorAllowlist?: string[];\n actionClickAllowlist?: string[];\n } = {}) {\n this.logger = logger;\n // If endpoint is customized, don't override it.\n if (endpoint && this.endpoint === AMPLITUDE_ORIGIN) {\n this.endpoint = endpoint;\n }\n let amplitudeVisualTaggingSelectorInstance: any = null;\n\n // Attach Event Listener to listen for messages from the parent window\n window.addEventListener('message', (event) => {\n this.logger?.debug?.('Message received: ', JSON.stringify(event));\n\n // Only accept messages from the specified origin\n if (this.endpoint !== event.origin) {\n return;\n }\n\n const eventData = event?.data as Message<Action> | MessageResponse;\n const action = eventData?.action;\n\n // Ignore messages without action\n if (!action) {\n return;\n }\n\n // If id exists, handle responses to previous requests\n if ('id' in eventData) {\n this.logger?.debug?.('Received Response to previous request: ', JSON.stringify(event));\n this.handleResponse(eventData);\n\n // If action exists, handle the action using existing handlers\n } else {\n if (action === 'ping') {\n this.notify({ action: 'pong' });\n } else if (action === 'initialize-visual-tagging-selector') {\n const actionData = eventData?.data as InitializeVisualTaggingSelectorData;\n asyncLoadScript(AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL)\n .then(() => {\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance = (window as any)?.amplitudeVisualTaggingSelector?.({\n getEventTagProps,\n isElementSelectable: (element: Element) => {\n if (isElementSelectable) {\n return isElementSelectable(actionData?.actionType || 'click', element);\n }\n return true;\n },\n onTrack: this.onTrack,\n onSelect: this.onSelect,\n visualHighlightClass: AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n messenger: this,\n cssSelectorAllowlist,\n actionClickAllowlist,\n });\n this.notify({ action: 'selector-loaded' });\n })\n .catch(() => {\n this.logger?.warn('Failed to initialize visual tagging selector');\n });\n } else if (action === 'close-visual-tagging-selector') {\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance?.close?.();\n }\n }\n });\n\n // Notify the parent window that the page has loaded\n this.notify({ action: 'page-loaded' });\n }\n\n private onSelect = (data: ElementSelectedData) => {\n this.notify({ action: 'element-selected', data });\n };\n\n private onTrack = (type: string, properties: { [key: string]: string | null }) => {\n if (type === 'selector-mode-changed') {\n this.notify({ action: 'track-selector-mode-changed', data: properties });\n } else if (type === 'selector-moved') {\n this.notify({ action: 'track-selector-moved', data: properties });\n }\n };\n}\n"]}
1
+ {"version":3,"file":"messenger.js","sourceRoot":"","sources":["../../../src/libs/messenger.ts"],"names":[],"mappings":";;AAAA,0BAA0B;AAC1B,0CAA0C;AAC1C,0CAIsB;AACtB,sCAAiF;AAkEjF,yDAAyD;AACzD;IAUE,yBAAY,EAAuD;YAAvD,qBAAqD,EAAE,KAAA,EAArD,cAAyB,EAAzB,MAAM,mBAAG,4BAAgB,KAAA;QAAvC,iBAEC;QAXD,aAAQ,GAAG,4BAAgB,CAAC;QAE5B,qBAAgB,GAKZ,EAAE,CAAC;QAqIC,aAAQ,GAAG,UAAC,IAAyB;YAC3C,KAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC;QAEM,YAAO,GAAG,UAAC,IAAY,EAAE,UAA4C;YAC3E,IAAI,IAAI,KAAK,uBAAuB,EAAE;gBACpC,KAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,6BAA6B,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;aAC1E;iBAAM,IAAI,IAAI,KAAK,gBAAgB,EAAE;gBACpC,KAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;aACnE;QACH,CAAC,CAAC;QA5IA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,CAAC;IAEO,gCAAM,GAAd,UAAe,OAAyC;;QACtD,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,mDAAG,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,MAAA,MAAC,MAAM,CAAC,MAAsB,0CAAE,WAAW,mDAAG,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IAED,6CAA6C;IACtC,qCAAW,GAAlB,UAAmB,MAAc,EAAE,IAAyB,EAAE,OAA6B;QAA3F,iBA0BC;QA1B6D,wBAAA,EAAA,YAAY,OAAO,EAAE,KAAM,EAAE;QACzF,oBAAoB;QACpB,IAAM,EAAE,GAAG,IAAA,0BAAgB,GAAE,CAAC;QAC9B,IAAM,OAAO,GAAG;YACd,EAAE,IAAA;YACF,MAAM,QAAA;YACN,IAAI,MAAA;SACL,CAAC;QAEF,uEAAuE;QACvE,IAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC1C,KAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAE,CAAC;YAEhD,mBAAmB;YACnB,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAErB,0BAA0B;YAC1B,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,IAAG,CAAC,EAAE;gBACxB,UAAU,CAAC;oBACT,MAAM,CAAC,IAAI,KAAK,CAAC,UAAG,MAAM,6BAAmB,EAAE,MAAG,CAAC,CAAC,CAAC;oBACrD,OAAO,KAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACnC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;aACrB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,yCAAyC;IACjC,wCAAc,GAAtB,UAAuB,QAAyB;;QAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACvC,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,4CAAqC,QAAQ,CAAC,EAAE,CAAE,CAAC,CAAC;YACtE,OAAO;SACR;QAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,+BAAK,GAAL,UAAM,EAYA;QAZN,iBAgFC;YAhFK,qBAYF,EAAE,KAAA,EAXJ,MAAM,YAAA,EACN,QAAQ,cAAA,EACR,mBAAmB,yBAAA,EACnB,oBAAoB,0BAAA,EACpB,oBAAoB,0BAAA;QAQpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,gDAAgD;QAChD,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,4BAAgB,EAAE;YAClD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC1B;QACD,IAAI,sCAAsC,GAAQ,IAAI,CAAC;QAEvD,sEAAsE;QACtE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,KAAK;;YACvC,MAAA,MAAA,KAAI,CAAC,MAAM,0CAAE,KAAK,mDAAG,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAElE,iDAAiD;YACjD,IAAI,KAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,EAAE;gBAClC,OAAO;aACR;YAED,IAAM,SAAS,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAyC,CAAC;YACnE,IAAM,MAAM,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAC;YAEjC,iCAAiC;YACjC,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YAED,sDAAsD;YACtD,IAAI,IAAI,IAAI,SAAS,EAAE;gBACrB,MAAA,MAAA,KAAI,CAAC,MAAM,0CAAE,KAAK,mDAAG,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvF,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAE/B,8DAA8D;aAC/D;iBAAM;gBACL,IAAI,MAAM,KAAK,MAAM,EAAE;oBACrB,KAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;iBACjC;qBAAM,IAAI,MAAM,KAAK,oCAAoC,EAAE;oBAC1D,IAAM,YAAU,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAA2C,CAAC;oBAC1E,IAAA,yBAAe,EAAC,wDAA4C,CAAC;yBAC1D,IAAI,CAAC;;wBACJ,2BAA2B;wBAC3B,sCAAsC,GAAG,MAAC,MAAc,aAAd,MAAM,uBAAN,MAAM,CAAU,8BAA8B,uDAAG;4BACzF,gBAAgB,4BAAA;4BAChB,mBAAmB,EAAE,UAAC,OAAgB;gCACpC,IAAI,mBAAmB,EAAE;oCACvB,OAAO,mBAAmB,CAAC,CAAA,YAAU,aAAV,YAAU,uBAAV,YAAU,CAAE,UAAU,KAAI,OAAO,EAAE,OAAO,CAAC,CAAC;iCACxE;gCACD,OAAO,IAAI,CAAC;4BACd,CAAC;4BACD,OAAO,EAAE,KAAI,CAAC,OAAO;4BACrB,QAAQ,EAAE,KAAI,CAAC,QAAQ;4BACvB,oBAAoB,EAAE,oDAAwC;4BAC9D,SAAS,EAAE,KAAI;4BACf,oBAAoB,sBAAA;4BACpB,oBAAoB,sBAAA;yBACrB,CAAC,CAAC;wBACH,KAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBAC7C,CAAC,CAAC;yBACD,KAAK,CAAC;;wBACL,MAAA,KAAI,CAAC,MAAM,0CAAE,IAAI,CAAC,8CAA8C,CAAC,CAAC;oBACpE,CAAC,CAAC,CAAC;iBACN;qBAAM,IAAI,MAAM,KAAK,+BAA+B,EAAE;oBACrD,2BAA2B;oBAC3B,MAAA,sCAAsC,aAAtC,sCAAsC,uBAAtC,sCAAsC,CAAE,KAAK,sFAAI,CAAC;iBACnD;aACF;QACH,CAAC,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC;IAaH,sBAAC;AAAD,CAAC,AAxJD,IAwJC;AAxJY,0CAAe","sourcesContent":["/* istanbul ignore file */\n/* eslint-disable no-restricted-globals */\nimport {\n AMPLITUDE_ORIGIN,\n AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL,\n AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n} from '../constants';\nimport { asyncLoadScript, generateUniqueId, getEventTagProps } from '../helpers';\nimport { Logger, Messenger, ActionType } from '@amplitude/analytics-types';\n\nexport type Action =\n | 'ping'\n | 'pong'\n | 'page-loaded'\n | 'selector-loaded'\n | 'initialize-visual-tagging-selector'\n | 'close-visual-tagging-selector'\n | 'element-selected'\n | 'track-selector-mode-changed'\n | 'track-selector-moved';\n\ninterface InitializeVisualTaggingSelectorData {\n actionType: ActionType;\n}\n\ninterface ElementSelectedData {\n '[Amplitude] Element Hierarchy'?: string;\n '[Amplitude] Element Tag'?: string;\n '[Amplitude] Element Text'?: string;\n '[Amplitude] Element Selector'?: string;\n '[Amplitude] Page URL'?: string;\n elementScreenshot?: Blob;\n}\n\ninterface TrackSelectorModeChangedData {\n newMode: string;\n pageUrl?: string;\n}\n\ninterface TrackSelectorMovedData {\n newEditorLocation: string;\n pageUrl?: string;\n}\n\nexport type ActionData = {\n ping: null | undefined;\n pong: null | undefined;\n 'page-loaded': null | undefined;\n 'selector-loaded': null | undefined;\n 'initialize-visual-tagging-selector': InitializeVisualTaggingSelectorData | null | undefined;\n 'close-visual-tagging-selector': null | undefined;\n 'element-selected': ElementSelectedData;\n 'track-selector-mode-changed': TrackSelectorModeChangedData;\n 'track-selector-moved': TrackSelectorMovedData;\n};\n\nexport interface Message<A extends Action> {\n action: A;\n data?: ActionData[A];\n}\n\ntype MessageRequest = {\n id: string;\n action: string;\n args: Record<string, any>;\n};\n\ntype MessageResponse = {\n id: string;\n action: string;\n responseData: any;\n};\n\n// TODO: use MessageChannel instead of window.postMessage\nexport class WindowMessenger implements Messenger {\n endpoint = AMPLITUDE_ORIGIN;\n logger?: Logger;\n requestCallbacks: {\n [id: string]: {\n resolve: (data: any) => void;\n reject: (data: any) => void;\n };\n } = {};\n\n constructor({ origin = AMPLITUDE_ORIGIN }: { origin?: string } = {}) {\n this.endpoint = origin;\n }\n\n private notify(message: Message<Action> | MessageRequest) {\n this.logger?.debug?.('Message sent: ', JSON.stringify(message));\n (window.opener as WindowProxy)?.postMessage?.(message, this.endpoint);\n }\n\n // Send an async request to the parent window\n public sendRequest(action: string, args: Record<string, any>, options = { timeout: 15_000 }): Promise<any> {\n // Create Request ID\n const id = generateUniqueId();\n const request = {\n id,\n action,\n args,\n };\n\n // Create a Promise that will be resolved when the response is received\n const promise = new Promise((resolve, reject) => {\n this.requestCallbacks[id] = { resolve, reject };\n\n // Send the request\n this.notify(request);\n\n // Handle request timeouts\n if (options?.timeout > 0) {\n setTimeout(() => {\n reject(new Error(`${action} timed out (id: ${id})`));\n delete this.requestCallbacks[id];\n }, options.timeout);\n }\n });\n\n return promise;\n }\n\n // Handle messages from the parent window\n private handleResponse(response: MessageResponse) {\n if (!this.requestCallbacks[response.id]) {\n this.logger?.warn(`No callback found for request id: ${response.id}`);\n return;\n }\n\n this.requestCallbacks[response.id].resolve(response.responseData);\n delete this.requestCallbacks[response.id];\n }\n\n setup({\n logger,\n endpoint,\n isElementSelectable,\n cssSelectorAllowlist,\n actionClickAllowlist,\n }: {\n logger?: Logger;\n endpoint?: string;\n isElementSelectable?: (action: InitializeVisualTaggingSelectorData['actionType'], element: Element) => boolean;\n cssSelectorAllowlist?: string[];\n actionClickAllowlist?: string[];\n } = {}) {\n this.logger = logger;\n // If endpoint is customized, don't override it.\n if (endpoint && this.endpoint === AMPLITUDE_ORIGIN) {\n this.endpoint = endpoint;\n }\n let amplitudeVisualTaggingSelectorInstance: any = null;\n\n // Attach Event Listener to listen for messages from the parent window\n window.addEventListener('message', (event) => {\n this.logger?.debug?.('Message received: ', JSON.stringify(event));\n\n // Only accept messages from the specified origin\n if (this.endpoint !== event.origin) {\n return;\n }\n\n const eventData = event?.data as Message<Action> | MessageResponse;\n const action = eventData?.action;\n\n // Ignore messages without action\n if (!action) {\n return;\n }\n\n // If id exists, handle responses to previous requests\n if ('id' in eventData) {\n this.logger?.debug?.('Received Response to previous request: ', JSON.stringify(event));\n this.handleResponse(eventData);\n\n // If action exists, handle the action using existing handlers\n } else {\n if (action === 'ping') {\n this.notify({ action: 'pong' });\n } else if (action === 'initialize-visual-tagging-selector') {\n const actionData = eventData?.data as InitializeVisualTaggingSelectorData;\n asyncLoadScript(AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL)\n .then(() => {\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance = (window as any)?.amplitudeVisualTaggingSelector?.({\n getEventTagProps,\n isElementSelectable: (element: Element) => {\n if (isElementSelectable) {\n return isElementSelectable(actionData?.actionType || 'click', element);\n }\n return true;\n },\n onTrack: this.onTrack,\n onSelect: this.onSelect,\n visualHighlightClass: AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n messenger: this,\n cssSelectorAllowlist,\n actionClickAllowlist,\n });\n this.notify({ action: 'selector-loaded' });\n })\n .catch(() => {\n this.logger?.warn('Failed to initialize visual tagging selector');\n });\n } else if (action === 'close-visual-tagging-selector') {\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance?.close?.();\n }\n }\n });\n\n // Notify the parent window that the page has loaded\n this.notify({ action: 'page-loaded' });\n }\n\n private onSelect = (data: ElementSelectedData) => {\n this.notify({ action: 'element-selected', data });\n };\n\n private onTrack = (type: string, properties: { [key: string]: string | null }) => {\n if (type === 'selector-mode-changed') {\n this.notify({ action: 'track-selector-mode-changed', data: properties });\n } else if (type === 'selector-moved') {\n this.notify({ action: 'track-selector-moved', data: properties });\n }\n };\n}\n"]}
@@ -1,4 +1,3 @@
1
- export type ActionType = 'click' | 'change';
2
1
  export type HierarchyNode = {
3
2
  tag: string;
4
3
  id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture.d.ts","sourceRoot":"","sources":["../../../src/typings/autocapture.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5C,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"autocapture.d.ts","sourceRoot":"","sources":["../../../src/typings/autocapture.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture.js","sourceRoot":"","sources":["../../../src/typings/autocapture.ts"],"names":[],"mappings":"","sourcesContent":["export type ActionType = 'click' | 'change';\n\nexport type HierarchyNode = {\n tag: string;\n id?: string;\n classes?: string[];\n attrs?: { [key: string]: string };\n index?: number;\n indexOfType?: number;\n prevSib?: string;\n};\n\nexport type Hierarchy = (HierarchyNode | null)[];\n"]}
1
+ {"version":3,"file":"autocapture.js","sourceRoot":"","sources":["../../../src/typings/autocapture.ts"],"names":[],"mappings":"","sourcesContent":["export type HierarchyNode = {\n tag: string;\n id?: string;\n classes?: string[];\n attrs?: { [key: string]: string };\n index?: number;\n indexOfType?: number;\n prevSib?: string;\n};\n\nexport type Hierarchy = (HierarchyNode | null)[];\n"]}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.0.0-beta.5";
1
+ export declare const VERSION = "1.0.1";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,iBAAiB,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, "__esModule", { value: true });
2
2
  exports.VERSION = void 0;
3
- exports.VERSION = '1.0.0-beta.5';
3
+ exports.VERSION = '1.0.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,cAAc,CAAC","sourcesContent":["export const VERSION = '1.0.0-beta.5';\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["export const VERSION = '1.0.1';\n"]}
@@ -1,6 +1,5 @@
1
1
  import { AllWindowObservables, AutoCaptureOptionsWithDefaults } from 'src/autocapture-plugin';
2
- import { ActionType } from 'src/typings/autocapture';
3
- import { BrowserClient } from '@amplitude/analytics-types';
2
+ import { BrowserClient, ActionType } from '@amplitude/analytics-types';
4
3
  import { shouldTrackEvent } from '../helpers';
5
4
  export declare function trackActionClick({ amplitude, allObservables, options, getEventProperties, shouldTrackEvent, shouldTrackActionClick, }: {
6
5
  amplitude: BrowserClient;
@@ -1 +1 @@
1
- {"version":3,"file":"track-action-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAG/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAkD,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9F,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,GACvB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,OAAO,EAAE,8BAA8B,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,sBAAsB,EAAE,gBAAgB,CAAC;IACzC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,+BAyDA"}
1
+ {"version":3,"file":"track-action-click.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,8BAA8B,EAG/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAkD,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9F,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,GACvB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,OAAO,EAAE,8BAA8B,CAAC;IACxC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,sBAAsB,EAAE,gBAAgB,CAAC;IACzC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,+BAyDA"}
@@ -1 +1 @@
1
- {"version":3,"file":"track-action-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG3E,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,gBAAgB,CAAC,EAchC;QAbC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,kBAAkB,wBAAA,EAClB,gBAAgB,sBAAA,EAChB,sBAAsB,4BAAA;IASd,IAAA,eAAe,GAA6C,cAAc,gBAA3D,EAAE,kBAAkB,GAAyB,cAAc,mBAAvC,EAAE,kBAAkB,GAAK,cAAc,mBAAnB,CAAoB;IAEnF,IAAM,uBAAuB,GAAG,eAAe,CAAC,IAAI,CAClD,MAAM,CAAC,UAAC,KAAK;QACX,oFAAoF;QACpF,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClE,CAAC,CAAC,EACF,GAAG,CAAC,UAAC,KAAK;QACR,oGAAoG;QACpG,IAAM,oBAAoB,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAiB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC5G,KAAK,CAAC,sBAAsB,GAAG,oBAA+B,CAAC;QAE/D,wFAAwF;QACxF,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI,EAAE;YACzC,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;SAC9F;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,EACF,MAAM,CAAC,2BAA2B,CAAC,EACnC,MAAM,CAAC,UAAC,UAAU;QAChB,uDAAuD;QACvD,OAAO,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC,CACH,CAAC;IAEF,IAAM,iBAAiB,GAEnB,CAAC,kBAAkB,CAAC,CAAC;IACzB,0BAA0B;IAC1B,IAAI,kBAAkB,EAAE;QACtB,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC5C;IACD,IAAM,kBAAkB,GAAG,KAAK,wCAAI,iBAAiB,UAAC,CAAC;IAEvD,IAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI;IAC/C,+HAA+H;IAC/H,oEAAoE;IACpE,SAAS,CAAC,UAAC,KAAK;QACd,OAAA,kBAAkB,CAAC,IAAI,CACrB,IAAI,CAAC,CAAC,CAAC,EACP,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK,EAAE,CAAC,EAAE,2EAA2E;QACvH,GAAG,CAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CACjB;IAJD,CAIC,CACF,CACF,CAAC;IAEF,OAAO,YAAY,CAAC,SAAS,CAAC,UAAC,WAAW;QACxC,0BAA0B;QAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CACd,+BAA+B,EAC/B,kBAAkB,CAAC,OAAO,EAAG,WAAwD,CAAC,sBAAsB,CAAC,EAC7G;YACE,IAAI,EAAE,WAAW,CAAC,SAAS;SAC5B,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n AllWindowObservables,\n AutoCaptureOptionsWithDefaults,\n ElementBasedTimestampedEvent,\n ObservablesEnum,\n} from 'src/autocapture-plugin';\nimport { filter, map, merge, switchMap, take, timeout, EMPTY } from 'rxjs';\nimport { ActionType } from 'src/typings/autocapture';\nimport { BrowserClient } from '@amplitude/analytics-types';\nimport { filterOutNonTrackableEvents, getClosestElement, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\n\nexport function trackActionClick({\n amplitude,\n allObservables,\n options,\n getEventProperties,\n shouldTrackEvent,\n shouldTrackActionClick,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n options: AutoCaptureOptionsWithDefaults;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackActionClick: shouldTrackEvent;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { clickObservable, mutationObservable, navigateObservable } = allObservables;\n\n const filteredClickObservable = clickObservable.pipe(\n filter((click) => {\n // Filter out regularly tracked click events that are already handled in trackClicks\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n }),\n map((click) => {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n const closestActionClickEl = getClosestElement(click.event.target as Element, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl as Element;\n\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n }),\n filter(filterOutNonTrackableEvents),\n filter((clickEvent) => {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n }),\n );\n\n const changeObservables: Array<\n AllWindowObservables[ObservablesEnum.MutationObservable] | AllWindowObservables[ObservablesEnum.NavigateObservable]\n > = [mutationObservable];\n /* istanbul ignore next */\n if (navigateObservable) {\n changeObservables.push(navigateObservable);\n }\n const mutationOrNavigate = merge(...changeObservables);\n\n const actionClicks = filteredClickObservable.pipe(\n // If a mutation occurs within 0.5 seconds of a click event (timeout({ first: 500 })), it emits the original first click event.\n // take 1 to only limit the action events in case there are multiple\n switchMap((click) =>\n mutationOrNavigate.pipe(\n take(1),\n timeout({ first: 500, with: () => EMPTY }), // in case of timeout, map to empty to prevent any click from being emitted\n map(() => click),\n ),\n ),\n );\n\n return actionClicks.subscribe((actionClick) => {\n /* istanbul ignore next */\n amplitude?.track(\n AMPLITUDE_ELEMENT_CLICKED_EVENT,\n getEventProperties('click', (actionClick as ElementBasedTimestampedEvent<MouseEvent>).closestTrackedAncestor),\n {\n time: actionClick.timestamp,\n },\n );\n });\n}\n"]}
1
+ {"version":3,"file":"track-action-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE3E,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,gBAAgB,CAAC,EAchC;QAbC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,kBAAkB,wBAAA,EAClB,gBAAgB,sBAAA,EAChB,sBAAsB,4BAAA;IASd,IAAA,eAAe,GAA6C,cAAc,gBAA3D,EAAE,kBAAkB,GAAyB,cAAc,mBAAvC,EAAE,kBAAkB,GAAK,cAAc,mBAAnB,CAAoB;IAEnF,IAAM,uBAAuB,GAAG,eAAe,CAAC,IAAI,CAClD,MAAM,CAAC,UAAC,KAAK;QACX,oFAAoF;QACpF,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClE,CAAC,CAAC,EACF,GAAG,CAAC,UAAC,KAAK;QACR,oGAAoG;QACpG,IAAM,oBAAoB,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAiB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC5G,KAAK,CAAC,sBAAsB,GAAG,oBAA+B,CAAC;QAE/D,wFAAwF;QACxF,IAAI,KAAK,CAAC,sBAAsB,KAAK,IAAI,EAAE;YACzC,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;SAC9F;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,EACF,MAAM,CAAC,2BAA2B,CAAC,EACnC,MAAM,CAAC,UAAC,UAAU;QAChB,uDAAuD;QACvD,OAAO,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC,CACH,CAAC;IAEF,IAAM,iBAAiB,GAEnB,CAAC,kBAAkB,CAAC,CAAC;IACzB,0BAA0B;IAC1B,IAAI,kBAAkB,EAAE;QACtB,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAC5C;IACD,IAAM,kBAAkB,GAAG,KAAK,wCAAI,iBAAiB,UAAC,CAAC;IAEvD,IAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI;IAC/C,+HAA+H;IAC/H,oEAAoE;IACpE,SAAS,CAAC,UAAC,KAAK;QACd,OAAA,kBAAkB,CAAC,IAAI,CACrB,IAAI,CAAC,CAAC,CAAC,EACP,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK,EAAE,CAAC,EAAE,2EAA2E;QACvH,GAAG,CAAC,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CACjB;IAJD,CAIC,CACF,CACF,CAAC;IAEF,OAAO,YAAY,CAAC,SAAS,CAAC,UAAC,WAAW;QACxC,0BAA0B;QAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CACd,+BAA+B,EAC/B,kBAAkB,CAAC,OAAO,EAAG,WAAwD,CAAC,sBAAsB,CAAC,EAC7G;YACE,IAAI,EAAE,WAAW,CAAC,SAAS;SAC5B,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n AllWindowObservables,\n AutoCaptureOptionsWithDefaults,\n ElementBasedTimestampedEvent,\n ObservablesEnum,\n} from 'src/autocapture-plugin';\nimport { filter, map, merge, switchMap, take, timeout, EMPTY } from 'rxjs';\nimport { BrowserClient, ActionType } from '@amplitude/analytics-types';\nimport { filterOutNonTrackableEvents, getClosestElement, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\n\nexport function trackActionClick({\n amplitude,\n allObservables,\n options,\n getEventProperties,\n shouldTrackEvent,\n shouldTrackActionClick,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n options: AutoCaptureOptionsWithDefaults;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackActionClick: shouldTrackEvent;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { clickObservable, mutationObservable, navigateObservable } = allObservables;\n\n const filteredClickObservable = clickObservable.pipe(\n filter((click) => {\n // Filter out regularly tracked click events that are already handled in trackClicks\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n }),\n map((click) => {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n const closestActionClickEl = getClosestElement(click.event.target as Element, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl as Element;\n\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n }),\n filter(filterOutNonTrackableEvents),\n filter((clickEvent) => {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n }),\n );\n\n const changeObservables: Array<\n AllWindowObservables[ObservablesEnum.MutationObservable] | AllWindowObservables[ObservablesEnum.NavigateObservable]\n > = [mutationObservable];\n /* istanbul ignore next */\n if (navigateObservable) {\n changeObservables.push(navigateObservable);\n }\n const mutationOrNavigate = merge(...changeObservables);\n\n const actionClicks = filteredClickObservable.pipe(\n // If a mutation occurs within 0.5 seconds of a click event (timeout({ first: 500 })), it emits the original first click event.\n // take 1 to only limit the action events in case there are multiple\n switchMap((click) =>\n mutationOrNavigate.pipe(\n take(1),\n timeout({ first: 500, with: () => EMPTY }), // in case of timeout, map to empty to prevent any click from being emitted\n map(() => click),\n ),\n ),\n );\n\n return actionClicks.subscribe((actionClick) => {\n /* istanbul ignore next */\n amplitude?.track(\n AMPLITUDE_ELEMENT_CLICKED_EVENT,\n getEventProperties('click', (actionClick as ElementBasedTimestampedEvent<MouseEvent>).closestTrackedAncestor),\n {\n time: actionClick.timestamp,\n },\n );\n });\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  import { AllWindowObservables } from 'src/autocapture-plugin';
2
- import { ActionType } from 'src/typings/autocapture';
3
- import { BrowserClient } from '@amplitude/analytics-types';
2
+ import { BrowserClient, ActionType } from '@amplitude/analytics-types';
4
3
  import { shouldTrackEvent } from '../helpers';
5
4
  export declare function trackChange({ amplitude, allObservables, getEventProperties, shouldTrackEvent, }: {
6
5
  amplitude: BrowserClient;
@@ -1 +1 @@
1
- {"version":3,"file":"track-change.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAA+B,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG3E,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,+BAeA"}
1
+ {"version":3,"file":"track-change.d.ts","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAA+B,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG3E,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACjB,EAAE;IACD,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,oBAAoB,CAAC;IACrC,kBAAkB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtF,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,+BAeA"}
@@ -1 +1 @@
1
- {"version":3,"file":"track-change.js","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,2BAA2B,EAAoB,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,WAAW,CAAC,EAU3B;QATC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,kBAAkB,wBAAA,EAClB,gBAAgB,sBAAA;IAOR,IAAA,gBAAgB,GAAK,cAAc,iBAAnB,CAAoB;IAE5C,IAAM,wBAAwB,GAAG,gBAAgB,CAAC,IAAI,CACpD,MAAM,CAAC,2BAA2B,CAAC,EACnC,MAAM,CAAC,UAAC,WAAW;QACjB,wDAAwD;QACxD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IACxE,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,wBAAwB,CAAC,SAAS,CAAC,UAAC,WAAW;QACpD,0BAA0B;QAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,+BAA+B,EAAE,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { AllWindowObservables } from 'src/autocapture-plugin';\nimport { filter } from 'rxjs';\nimport { ActionType } from 'src/typings/autocapture';\nimport { BrowserClient } from '@amplitude/analytics-types';\nimport { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\n\nexport function trackChange({\n amplitude,\n allObservables,\n getEventProperties,\n shouldTrackEvent,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { changeObservable } = allObservables;\n\n const filteredChangeObservable = changeObservable.pipe(\n filter(filterOutNonTrackableEvents),\n filter((changeEvent) => {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n }),\n );\n\n return filteredChangeObservable.subscribe((changeEvent) => {\n /* istanbul ignore next */\n amplitude?.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n"]}
1
+ {"version":3,"file":"track-change.js","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,2BAA2B,EAAoB,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,WAAW,CAAC,EAU3B;QATC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,kBAAkB,wBAAA,EAClB,gBAAgB,sBAAA;IAOR,IAAA,gBAAgB,GAAK,cAAc,iBAAnB,CAAoB;IAE5C,IAAM,wBAAwB,GAAG,gBAAgB,CAAC,IAAI,CACpD,MAAM,CAAC,2BAA2B,CAAC,EACnC,MAAM,CAAC,UAAC,WAAW;QACjB,wDAAwD;QACxD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IACxE,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,wBAAwB,CAAC,SAAS,CAAC,UAAC,WAAW;QACpD,0BAA0B;QAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,+BAA+B,EAAE,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { AllWindowObservables } from 'src/autocapture-plugin';\nimport { filter } from 'rxjs';\nimport { BrowserClient, ActionType } from '@amplitude/analytics-types';\nimport { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\n\nexport function trackChange({\n amplitude,\n allObservables,\n getEventProperties,\n shouldTrackEvent,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n getEventProperties: (actionType: ActionType, element: Element) => Record<string, any>;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { changeObservable } = allObservables;\n\n const filteredChangeObservable = changeObservable.pipe(\n filter(filterOutNonTrackableEvents),\n filter((changeEvent) => {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n }),\n );\n\n return filteredChangeObservable.subscribe((changeEvent) => {\n /* istanbul ignore next */\n amplitude?.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n"]}
@@ -1,7 +1,5 @@
1
- import { BrowserClient, BrowserConfig, EnrichmentPlugin } from '@amplitude/analytics-types';
1
+ import { BrowserClient, BrowserConfig, EnrichmentPlugin, ElementInteractionsOptions } from '@amplitude/analytics-types';
2
2
  import { Observable } from 'rxjs';
3
- import { Messenger } from './libs/messenger';
4
- import { ActionType } from './typings/autocapture';
5
3
  import { HasEventTargetAddRemove } from 'rxjs/internal/observable/fromEvent';
6
4
  declare global {
7
5
  interface Window {
@@ -31,54 +29,7 @@ interface NavigateEvent extends Event {
31
29
  scroll(): void;
32
30
  }
33
31
  type BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;
34
- export declare const DEFAULT_CSS_SELECTOR_ALLOWLIST: string[];
35
- export declare const DEFAULT_ACTION_CLICK_ALLOWLIST: string[];
36
- export declare const DEFAULT_DATA_ATTRIBUTE_PREFIX = "data-amp-track-";
37
- export interface AutocaptureOptions {
38
- /**
39
- * List of CSS selectors to allow auto tracking on.
40
- * When provided, allow elements matching any selector to be tracked.
41
- * Default is ['a', 'button', 'input', 'select', 'textarea', 'label', '[data-amp-default-track]', '.amp-default-track'].
42
- */
43
- cssSelectorAllowlist?: string[];
44
- /**
45
- * List of page URLs to allow auto tracking on.
46
- * When provided, only allow tracking on these URLs.
47
- * Both full URLs and regex are supported.
48
- */
49
- pageUrlAllowlist?: (string | RegExp)[];
50
- /**
51
- * Function to determine whether an event should be tracked.
52
- * When provided, this function overwrites all other allowlists and configurations.
53
- * If the function returns true, the event will be tracked.
54
- * If the function returns false, the event will not be tracked.
55
- * @param actionType - The type of action that triggered the event.
56
- * @param element - The element that triggered the event.
57
- */
58
- shouldTrackEventResolver?: (actionType: ActionType, element: Element) => boolean;
59
- /**
60
- * Prefix for data attributes to allow auto collecting.
61
- * Default is 'data-amp-track-'.
62
- */
63
- dataAttributePrefix?: string;
64
- /**
65
- * Options for integrating visual tagging selector.
66
- */
67
- visualTaggingOptions?: {
68
- enabled?: boolean;
69
- messenger?: Messenger;
70
- };
71
- /**
72
- * Debounce time in milliseconds for tracking events.
73
- * This is used to detect rage clicks.
74
- */
75
- debounceTime?: number;
76
- /**
77
- * CSS selector allowlist for tracking clicks that result in a DOM change/navigation on elements not already allowed by the cssSelectorAllowlist
78
- */
79
- actionClickAllowlist?: string[];
80
- }
81
- export type AutoCaptureOptionsWithDefaults = Required<Pick<AutocaptureOptions, 'debounceTime' | 'cssSelectorAllowlist' | 'actionClickAllowlist'>> & AutocaptureOptions;
32
+ export type AutoCaptureOptionsWithDefaults = Required<Pick<ElementInteractionsOptions, 'debounceTime' | 'cssSelectorAllowlist' | 'actionClickAllowlist'>> & ElementInteractionsOptions;
82
33
  export declare enum ObservablesEnum {
83
34
  ClickObservable = "clickObservable",
84
35
  ChangeObservable = "changeObservable",
@@ -105,6 +56,6 @@ export interface AllWindowObservables {
105
56
  [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;
106
57
  }
107
58
  export declare function isElementBasedEvent<T>(event: BaseTimestampedEvent<T>): event is ElementBasedTimestampedEvent<T>;
108
- export declare const autocapturePlugin: (options?: AutocaptureOptions) => BrowserEnrichmentPlugin;
59
+ export declare const autocapturePlugin: (options?: ElementInteractionsOptions) => BrowserEnrichmentPlugin;
109
60
  export {};
110
61
  //# sourceMappingURL=autocapture-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autocapture-plugin.d.ts","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from "tslib";
2
+ /* eslint-disable no-restricted-globals */
3
+ import { DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_ACTION_CLICK_ALLOWLIST, } from '@amplitude/analytics-types';
2
4
  import * as constants from './constants';
3
5
  import { fromEvent, map, Observable } from 'rxjs';
4
6
  import { getText, getAttributesWithPrefix, removeEmptyProperties, getNearestLabel, getSelector, createShouldTrackEvent, getClosestElement, } from './helpers';
@@ -7,21 +9,6 @@ import { getHierarchy } from './hierarchy';
7
9
  import { trackClicks } from './autocapture/track-click';
8
10
  import { trackChange } from './autocapture/track-change';
9
11
  import { trackActionClick } from './autocapture/track-action-click';
10
- export var DEFAULT_CSS_SELECTOR_ALLOWLIST = [
11
- 'a',
12
- 'button',
13
- 'input',
14
- 'select',
15
- 'textarea',
16
- 'label',
17
- 'video',
18
- 'audio',
19
- '[contenteditable="true" i]',
20
- '[data-amp-default-track]',
21
- '.amp-default-track',
22
- ];
23
- export var DEFAULT_ACTION_CLICK_ALLOWLIST = ['div', 'span', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
24
- export var DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';
25
12
  export var ObservablesEnum;
26
13
  (function (ObservablesEnum) {
27
14
  ObservablesEnum["ClickObservable"] = "clickObservable";
@@ -99,8 +86,8 @@ export var autocapturePlugin = function (options) {
99
86
  var selector = getSelector(element, logger);
100
87
  /* istanbul ignore next */
101
88
  var properties = (_a = {},
102
- _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.id,
103
- _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.className,
89
+ _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '',
90
+ _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class'),
104
91
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY] = getHierarchy(element),
105
92
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,
106
93
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = getText(element),
@@ -139,13 +126,8 @@ export var autocapturePlugin = function (options) {
139
126
  };
140
127
  var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {
141
128
  var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist;
142
- var _a, _b, _c;
143
- return __generator(this, function (_d) {
144
- if (!amplitude) {
145
- /* istanbul ignore next */
146
- (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.warn("".concat(name, " plugin requires a later version of @amplitude/analytics-browser. Events are not tracked."));
147
- return [2 /*return*/];
148
- }
129
+ var _a, _b;
130
+ return __generator(this, function (_c) {
149
131
  logger = config.loggerProvider;
150
132
  /* istanbul ignore if */
151
133
  if (typeof document === 'undefined') {
@@ -178,13 +160,13 @@ export var autocapturePlugin = function (options) {
178
160
  });
179
161
  subscriptions.push(actionClickSubscription);
180
162
  /* istanbul ignore next */
181
- (_b = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _b === void 0 ? void 0 : _b.log("".concat(name, " has been successfully added."));
163
+ (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log("".concat(name, " has been successfully added."));
182
164
  // Setup visual tagging selector
183
165
  if (window.opener && visualTaggingOptions.enabled) {
184
166
  allowlist = options.cssSelectorAllowlist;
185
167
  actionClickAllowlist = options.actionClickAllowlist;
186
168
  /* istanbul ignore next */
187
- (_c = visualTaggingOptions.messenger) === null || _c === void 0 ? void 0 : _c.setup(__assign(__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] })), { isElementSelectable: createShouldTrackEvent(options, __spreadArray(__spreadArray([], __read(allowlist), false), __read(actionClickAllowlist), false)), cssSelectorAllowlist: allowlist, actionClickAllowlist: actionClickAllowlist }));
169
+ (_b = visualTaggingOptions.messenger) === null || _b === void 0 ? void 0 : _b.setup(__assign(__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] })), { isElementSelectable: createShouldTrackEvent(options, __spreadArray(__spreadArray([], __read(allowlist), false), __read(actionClickAllowlist), false)), cssSelectorAllowlist: allowlist, actionClickAllowlist: actionClickAllowlist }));
188
170
  }
189
171
  return [2 /*return*/];
190
172
  });