@amplitude/plugin-autocapture-browser 1.1.0 → 1.1.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 (64) hide show
  1. package/lib/cjs/autocapture/track-action-click.js +2 -1
  2. package/lib/cjs/autocapture/track-action-click.js.map +1 -1
  3. package/lib/cjs/autocapture/track-change.js +2 -1
  4. package/lib/cjs/autocapture/track-change.js.map +1 -1
  5. package/lib/cjs/autocapture/track-click.js +2 -1
  6. package/lib/cjs/autocapture/track-click.js.map +1 -1
  7. package/lib/cjs/autocapture-plugin.d.ts.map +1 -1
  8. package/lib/cjs/autocapture-plugin.js +7 -11
  9. package/lib/cjs/autocapture-plugin.js.map +1 -1
  10. package/lib/cjs/constants.d.ts +0 -1
  11. package/lib/cjs/constants.d.ts.map +1 -1
  12. package/lib/cjs/constants.js +1 -3
  13. package/lib/cjs/constants.js.map +1 -1
  14. package/lib/cjs/helpers.d.ts +2 -3
  15. package/lib/cjs/helpers.d.ts.map +1 -1
  16. package/lib/cjs/helpers.js +3 -45
  17. package/lib/cjs/helpers.js.map +1 -1
  18. package/lib/cjs/hierarchy.d.ts.map +1 -1
  19. package/lib/cjs/hierarchy.js +5 -5
  20. package/lib/cjs/hierarchy.js.map +1 -1
  21. package/lib/cjs/libs/finder.js +2 -1
  22. package/lib/cjs/libs/finder.js.map +1 -1
  23. package/lib/cjs/libs/messenger.d.ts +0 -1
  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/version.d.ts +1 -1
  27. package/lib/cjs/version.js +1 -1
  28. package/lib/cjs/version.js.map +1 -1
  29. package/lib/esm/autocapture/track-action-click.js.map +1 -1
  30. package/lib/esm/autocapture/track-click.js.map +1 -1
  31. package/lib/esm/autocapture-plugin.d.ts.map +1 -1
  32. package/lib/esm/autocapture-plugin.js +6 -10
  33. package/lib/esm/autocapture-plugin.js.map +1 -1
  34. package/lib/esm/constants.d.ts +0 -1
  35. package/lib/esm/constants.d.ts.map +1 -1
  36. package/lib/esm/constants.js +0 -2
  37. package/lib/esm/constants.js.map +1 -1
  38. package/lib/esm/helpers.d.ts +2 -3
  39. package/lib/esm/helpers.d.ts.map +1 -1
  40. package/lib/esm/helpers.js +1 -42
  41. package/lib/esm/helpers.js.map +1 -1
  42. package/lib/esm/hierarchy.d.ts.map +1 -1
  43. package/lib/esm/hierarchy.js.map +1 -1
  44. package/lib/esm/libs/finder.js.map +1 -1
  45. package/lib/esm/libs/messenger.d.ts +0 -1
  46. package/lib/esm/libs/messenger.d.ts.map +1 -1
  47. package/lib/esm/libs/messenger.js.map +1 -1
  48. package/lib/esm/version.d.ts +1 -1
  49. package/lib/esm/version.js +1 -1
  50. package/lib/esm/version.js.map +1 -1
  51. package/lib/scripts/amplitude-min.js +1 -1
  52. package/lib/scripts/amplitude-min.js.gz +0 -0
  53. package/lib/scripts/amplitude-min.js.map +1 -1
  54. package/lib/scripts/amplitude-min.umd.js +1 -1
  55. package/lib/scripts/amplitude-min.umd.js.gz +0 -0
  56. package/lib/scripts/autocapture-plugin.d.ts.map +1 -1
  57. package/lib/scripts/constants.d.ts +0 -1
  58. package/lib/scripts/constants.d.ts.map +1 -1
  59. package/lib/scripts/helpers.d.ts +2 -3
  60. package/lib/scripts/helpers.d.ts.map +1 -1
  61. package/lib/scripts/libs/messenger.d.ts +0 -1
  62. package/lib/scripts/libs/messenger.d.ts.map +1 -1
  63. package/lib/scripts/version.d.ts +1 -1
  64. package/package.json +5 -6
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trackActionClick = trackActionClick;
3
+ exports.trackActionClick = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var rxjs_1 = require("rxjs");
6
6
  var helpers_1 = require("../helpers");
@@ -42,4 +42,5 @@ function trackActionClick(_a) {
42
42
  amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(constants_1.AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', actionClick.closestTrackedAncestor));
43
43
  });
44
44
  }
45
+ exports.trackActionClick = trackActionClick;
45
46
  //# sourceMappingURL=track-action-click.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"track-action-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":";;AAWA,4CAoEC;;AAzED,6BAA2E;AAE3E,sCAA8F;AAC9F,0CAA+D;AAE/D,SAAgB,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,IAAA,aAAM,EAAC,UAAC,KAAK;QACX,oFAAoF;QACpF,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClE,CAAC,CAAC,EACF,IAAA,UAAG,EAAC,UAAC,KAAK;QACR,oGAAoG;QACpG,IAAM,oBAAoB,GAAG,IAAA,2BAAiB,EAAC,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,CAAC;YAC1C,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,EACF,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,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,CAAC;QACvB,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAM,kBAAkB,GAAG,YAAK,wDAAI,iBAAiB,UAAC,CAAC;IAEvD,IAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI;IAC/C,+HAA+H;IAC/H,oEAAoE;IACpE,IAAA,gBAAS,EAAC,UAAC,KAAK;QACd,OAAA,kBAAkB,CAAC,IAAI,CACrB,IAAA,WAAI,EAAC,CAAC,CAAC,EACP,IAAA,cAAO,EAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,cAAM,OAAA,YAAK,EAAL,CAAK,EAAE,CAAC,EAAE,2EAA2E;QACvH,IAAA,UAAG,EAAC,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,2CAA+B,EAC/B,kBAAkB,CAAC,OAAO,EAAG,WAAwD,CAAC,sBAAsB,CAAC,CAC9G,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-core';\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 });\n}\n"]}
1
+ {"version":3,"file":"track-action-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-action-click.ts"],"names":[],"mappings":";;;;AAMA,6BAA2E;AAE3E,sCAA8F;AAC9F,0CAA+D;AAE/D,SAAgB,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,IAAA,aAAM,EAAC,UAAC,KAAK;QACX,oFAAoF;QACpF,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAClE,CAAC,CAAC,EACF,IAAA,UAAG,EAAC,UAAC,KAAK;QACR,oGAAoG;QACpG,IAAM,oBAAoB,GAAG,IAAA,2BAAiB,EAAC,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,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,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,YAAK,wDAAI,iBAAiB,UAAC,CAAC;IAEvD,IAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI;IAC/C,+HAA+H;IAC/H,oEAAoE;IACpE,IAAA,gBAAS,EAAC,UAAC,KAAK;QACd,OAAA,kBAAkB,CAAC,IAAI,CACrB,IAAA,WAAI,EAAC,CAAC,CAAC,EACP,IAAA,cAAO,EAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,cAAM,OAAA,YAAK,EAAL,CAAK,EAAE,CAAC,EAAE,2EAA2E;QACvH,IAAA,UAAG,EAAC,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,2CAA+B,EAC/B,kBAAkB,CAAC,OAAO,EAAG,WAAwD,CAAC,sBAAsB,CAAC,CAC9G,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AApED,4CAoEC","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-core';\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 });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trackChange = trackChange;
3
+ exports.trackChange = void 0;
4
4
  var rxjs_1 = require("rxjs");
5
5
  var helpers_1 = require("../helpers");
6
6
  var constants_1 = require("../constants");
@@ -16,4 +16,5 @@ function trackChange(_a) {
16
16
  amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(constants_1.AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));
17
17
  });
18
18
  }
19
+ exports.trackChange = trackChange;
19
20
  //# sourceMappingURL=track-change.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"track-change.js","sourceRoot":"","sources":["../../../src/autocapture/track-change.ts"],"names":[],"mappings":";;AAMA,kCAyBC;AA9BD,6BAA8B;AAE9B,sCAA2E;AAC3E,0CAA+D;AAE/D,SAAgB,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,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,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,2CAA+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-core';\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,6BAA8B;AAE9B,sCAA2E;AAC3E,0CAA+D;AAE/D,SAAgB,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,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,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,2CAA+B,EAAE,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;AACL,CAAC;AAzBD,kCAyBC","sourcesContent":["import { AllWindowObservables } from 'src/autocapture-plugin';\nimport { filter } from 'rxjs';\nimport { BrowserClient, ActionType } from '@amplitude/analytics-core';\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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.trackClicks = trackClicks;
3
+ exports.trackClicks = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var rxjs_1 = require("rxjs");
6
6
  var helpers_1 = require("../helpers");
@@ -48,4 +48,5 @@ function trackClicks(_a) {
48
48
  }
49
49
  });
50
50
  }
51
+ exports.trackClicks = trackClicks;
51
52
  //# sourceMappingURL=track-click.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"track-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-click.ts"],"names":[],"mappings":";;AAQA,kCAyDC;;AAhED,6BAAiF;AAEjF,sCAA2E;AAC3E,0CAA+D;AAE/D,IAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,SAAgB,WAAW,CAAC,EAU3B;QATC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,gBAAgB,sBAAA;IAOR,IAAA,eAAe,GAAK,cAAc,gBAAnB,CAAoB;IAE3C,iFAAiF;IACjF,mGAAmG;IACnG,wFAAwF;IACxF,IAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAC5C,IAAA,eAAQ,GAAE,EACV,IAAA,aAAM,EAAC,UAAC,EAAe;YAAf,KAAA,qBAAe,EAAd,IAAI,QAAA,EAAE,OAAO,QAAA;QACpB,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACjE,0BAA0B;QAC1B,IAAM,OAAO,GACX,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,aAAa,IAAI,CAAC,OAAO,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,qDAAqD;IACrD,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CACzC,IAAA,mBAAY,EAAC,OAAO,CAAC,YAAY,CAAC,EAClC,IAAA,UAAG,EAAC,cAAM,OAAA,SAAkB,EAAlB,CAAkB,CAAC,CAC9B,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAA,YAAK,EAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAE1D,0EAA0E;IAC1E,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CACzC,IAAA,YAAK,EAAC,CAAC,CAAC,EACR,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,UAAC,KAAK;QACX,wDAAwD;QACxD,OAAO,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjE,CAAC,CAAC,EACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CACjB,CAAC;IAEF,OAAO,cAAc,CAAC,SAAS,CAAC,UAAC,MAAM;;QACrC,+CAA+C;QAC/C,IAAM,SAAS,GACb,MAAM,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,2CAA+B,CAAC,CAAC,CAAC,2CAA+B,CAAC;;YAE5G,KAAoB,IAAA,WAAA,iBAAA,MAAM,CAAA,8BAAA,kDAAE,CAAC;gBAAxB,IAAM,KAAK,mBAAA;gBACd,0BAA0B;gBAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC7D,CAAC;;;;;;;;;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { AllWindowObservables, AutoCaptureOptionsWithDefaults } from 'src/autocapture-plugin';\nimport { buffer, filter, map, debounceTime, merge, pairwise, delay } from 'rxjs';\nimport { BrowserClient } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\n\nconst RAGE_CLICK_THRESHOLD = 5;\n\nexport function trackClicks({\n amplitude,\n allObservables,\n options,\n shouldTrackEvent,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n options: AutoCaptureOptionsWithDefaults;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { clickObservable } = allObservables;\n\n // Trigger if the target of the click event has changed and position is different\n // Keeping track of position is important to avoid false positives when the user clicks on the same\n // element where certain frameworks could replace the element instance between rerenders\n const comparisonTrigger = clickObservable.pipe(\n pairwise(),\n filter(([prev, current]) => {\n const targetChanged = prev.event.target !== current.event.target;\n /* istanbul ignore next */\n const samePos =\n Math.abs(current.event.screenX - prev.event.screenX) <= 20 &&\n Math.abs(current.event.screenY - prev.event.screenY) <= 20;\n return targetChanged && !samePos;\n }),\n );\n\n // Trigger if there is no click event within 1 second\n const timeoutTrigger = clickObservable.pipe(\n debounceTime(options.debounceTime),\n map(() => 'timeout' as const),\n );\n\n const triggers = merge(comparisonTrigger, timeoutTrigger);\n\n // Get buffers of clicks, if the buffer length is over 5, it is rage click\n const bufferedClicks = clickObservable.pipe(\n delay(0),\n filter(filterOutNonTrackableEvents),\n filter((click) => {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n }),\n buffer(triggers),\n );\n\n return bufferedClicks.subscribe((clicks) => {\n // TODO: update this when rage clicks are added\n const clickType =\n clicks.length >= RAGE_CLICK_THRESHOLD ? AMPLITUDE_ELEMENT_CLICKED_EVENT : AMPLITUDE_ELEMENT_CLICKED_EVENT;\n\n for (const click of clicks) {\n /* istanbul ignore next */\n amplitude?.track(clickType, click.targetElementProperties);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"track-click.js","sourceRoot":"","sources":["../../../src/autocapture/track-click.ts"],"names":[],"mappings":";;;;AACA,6BAAiF;AAEjF,sCAA2E;AAC3E,0CAA+D;AAE/D,IAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B,SAAgB,WAAW,CAAC,EAU3B;QATC,SAAS,eAAA,EACT,cAAc,oBAAA,EACd,OAAO,aAAA,EACP,gBAAgB,sBAAA;IAOR,IAAA,eAAe,GAAK,cAAc,gBAAnB,CAAoB;IAE3C,iFAAiF;IACjF,mGAAmG;IACnG,wFAAwF;IACxF,IAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAC5C,IAAA,eAAQ,GAAE,EACV,IAAA,aAAM,EAAC,UAAC,EAAe;YAAf,KAAA,qBAAe,EAAd,IAAI,QAAA,EAAE,OAAO,QAAA;QACpB,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACjE,0BAA0B;QAC1B,IAAM,OAAO,GACX,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;YAC1D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,aAAa,IAAI,CAAC,OAAO,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;IAEF,qDAAqD;IACrD,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CACzC,IAAA,mBAAY,EAAC,OAAO,CAAC,YAAY,CAAC,EAClC,IAAA,UAAG,EAAC,cAAM,OAAA,SAAkB,EAAlB,CAAkB,CAAC,CAC9B,CAAC;IAEF,IAAM,QAAQ,GAAG,IAAA,YAAK,EAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;IAE1D,0EAA0E;IAC1E,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CACzC,IAAA,YAAK,EAAC,CAAC,CAAC,EACR,IAAA,aAAM,EAAC,qCAA2B,CAAC,EACnC,IAAA,aAAM,EAAC,UAAC,KAAK;QACX,wDAAwD;QACxD,OAAO,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjE,CAAC,CAAC,EACF,IAAA,aAAM,EAAC,QAAQ,CAAC,CACjB,CAAC;IAEF,OAAO,cAAc,CAAC,SAAS,CAAC,UAAC,MAAM;;QACrC,+CAA+C;QAC/C,IAAM,SAAS,GACb,MAAM,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,2CAA+B,CAAC,CAAC,CAAC,2CAA+B,CAAC;;YAE5G,KAAoB,IAAA,WAAA,iBAAA,MAAM,CAAA,8BAAA,kDAAE;gBAAvB,IAAM,KAAK,mBAAA;gBACd,0BAA0B;gBAC1B,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC;aAC5D;;;;;;;;;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAzDD,kCAyDC","sourcesContent":["import { AllWindowObservables, AutoCaptureOptionsWithDefaults } from 'src/autocapture-plugin';\nimport { buffer, filter, map, debounceTime, merge, pairwise, delay } from 'rxjs';\nimport { BrowserClient } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\n\nconst RAGE_CLICK_THRESHOLD = 5;\n\nexport function trackClicks({\n amplitude,\n allObservables,\n options,\n shouldTrackEvent,\n}: {\n amplitude: BrowserClient;\n allObservables: AllWindowObservables;\n options: AutoCaptureOptionsWithDefaults;\n shouldTrackEvent: shouldTrackEvent;\n}) {\n const { clickObservable } = allObservables;\n\n // Trigger if the target of the click event has changed and position is different\n // Keeping track of position is important to avoid false positives when the user clicks on the same\n // element where certain frameworks could replace the element instance between rerenders\n const comparisonTrigger = clickObservable.pipe(\n pairwise(),\n filter(([prev, current]) => {\n const targetChanged = prev.event.target !== current.event.target;\n /* istanbul ignore next */\n const samePos =\n Math.abs(current.event.screenX - prev.event.screenX) <= 20 &&\n Math.abs(current.event.screenY - prev.event.screenY) <= 20;\n return targetChanged && !samePos;\n }),\n );\n\n // Trigger if there is no click event within 1 second\n const timeoutTrigger = clickObservable.pipe(\n debounceTime(options.debounceTime),\n map(() => 'timeout' as const),\n );\n\n const triggers = merge(comparisonTrigger, timeoutTrigger);\n\n // Get buffers of clicks, if the buffer length is over 5, it is rage click\n const bufferedClicks = clickObservable.pipe(\n delay(0),\n filter(filterOutNonTrackableEvents),\n filter((click) => {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n }),\n buffer(triggers),\n );\n\n return bufferedClicks.subscribe((clicks) => {\n // TODO: update this when rage clicks are added\n const clickType =\n clicks.length >= RAGE_CLICK_THRESHOLD ? AMPLITUDE_ELEMENT_CLICKED_EVENT : AMPLITUDE_ELEMENT_CLICKED_EVENT;\n\n for (const click of clicks) {\n /* istanbul ignore next */\n amplitude?.track(clickType, click.targetElementProperties);\n }\n });\n}\n"]}
@@ -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,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.autocapturePlugin = exports.ObservablesEnum = void 0;
4
- exports.isElementBasedEvent = isElementBasedEvent;
3
+ exports.autocapturePlugin = exports.isElementBasedEvent = exports.ObservablesEnum = void 0;
5
4
  var tslib_1 = require("tslib");
6
5
  /* eslint-disable no-restricted-globals */
7
6
  var analytics_core_1 = require("@amplitude/analytics-core");
@@ -20,11 +19,12 @@ var ObservablesEnum;
20
19
  // ErrorObservable = 'errorObservable',
21
20
  ObservablesEnum["NavigateObservable"] = "navigateObservable";
22
21
  ObservablesEnum["MutationObservable"] = "mutationObservable";
23
- })(ObservablesEnum || (exports.ObservablesEnum = ObservablesEnum = {}));
22
+ })(ObservablesEnum = exports.ObservablesEnum || (exports.ObservablesEnum = {}));
24
23
  // Type predicate
25
24
  function isElementBasedEvent(event) {
26
25
  return event.type === 'click' || event.type === 'change';
27
26
  }
27
+ exports.isElementBasedEvent = isElementBasedEvent;
28
28
  var autocapturePlugin = function (options) {
29
29
  var _a, _b, _c;
30
30
  if (options === void 0) { options = {}; }
@@ -38,13 +38,12 @@ var autocapturePlugin = function (options) {
38
38
  var name = constants.PLUGIN_NAME;
39
39
  var type = 'enrichment';
40
40
  var subscriptions = [];
41
- var logger = undefined;
42
41
  // Create observables on events on the window
43
42
  var createObservables = function () {
44
43
  var _a;
45
44
  // Create Observables from direct user events
46
- var clickObservable = (0, rxjs_1.fromEvent)(document, 'click', { capture: true }).pipe((0, rxjs_1.map)(function (click) { return addAdditionalEventProperties(click, 'click'); }));
47
- var changeObservable = (0, rxjs_1.fromEvent)(document, 'change', { capture: true }).pipe((0, rxjs_1.map)(function (change) { return addAdditionalEventProperties(change, 'change'); }));
45
+ var clickObservable = (0, rxjs_1.fromEvent)(document, 'click', { capture: true }).pipe((0, rxjs_1.map)(function (click) { return addAdditionalEventProperties(click, 'click'); }), (0, rxjs_1.share)());
46
+ var changeObservable = (0, rxjs_1.fromEvent)(document, 'change', { capture: true }).pipe((0, rxjs_1.map)(function (change) { return addAdditionalEventProperties(change, 'change'); }), (0, rxjs_1.share)());
48
47
  // Create Observable from unhandled errors
49
48
  // const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(
50
49
  // map((error) => addAdditionalEventProperties(error, 'error')),
@@ -53,7 +52,7 @@ var autocapturePlugin = function (options) {
53
52
  var navigateObservable;
54
53
  /* istanbul ignore next */
55
54
  if (window.navigation) {
56
- navigateObservable = (0, rxjs_1.fromEvent)(window.navigation, 'navigate').pipe((0, rxjs_1.map)(function (navigate) { return addAdditionalEventProperties(navigate, 'navigate'); }));
55
+ navigateObservable = (0, rxjs_1.fromEvent)(window.navigation, 'navigate').pipe((0, rxjs_1.map)(function (navigate) { return addAdditionalEventProperties(navigate, 'navigate'); }), (0, rxjs_1.share)());
57
56
  }
58
57
  // Track DOM Mutations
59
58
  var mutationObservable = new rxjs_1.Observable(function (observer) {
@@ -67,7 +66,7 @@ var autocapturePlugin = function (options) {
67
66
  subtree: true,
68
67
  });
69
68
  return function () { return mutationObserver.disconnect(); };
70
- }).pipe((0, rxjs_1.map)(function (mutation) { return addAdditionalEventProperties(mutation, 'mutation'); }));
69
+ }).pipe((0, rxjs_1.map)(function (mutation) { return addAdditionalEventProperties(mutation, 'mutation'); }), (0, rxjs_1.share)());
71
70
  return _a = {},
72
71
  _a[ObservablesEnum.ClickObservable] = clickObservable,
73
72
  _a[ObservablesEnum.ChangeObservable] = changeObservable,
@@ -87,7 +86,6 @@ var autocapturePlugin = function (options) {
87
86
  var ariaLabel = element.getAttribute('aria-label');
88
87
  var attributes = (0, helpers_1.getAttributesWithPrefix)(element, dataAttributePrefix);
89
88
  var nearestLabel = (0, helpers_1.getNearestLabel)(element);
90
- var selector = (0, helpers_1.getSelector)(element, logger);
91
89
  /* istanbul ignore next */
92
90
  var properties = (_a = {},
93
91
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '',
@@ -99,7 +97,6 @@ var autocapturePlugin = function (options) {
99
97
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP] = rect.top == null ? null : Math.round(rect.top),
100
98
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = ariaLabel,
101
99
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES] = attributes,
102
- _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR] = selector,
103
100
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL] = nearestLabel,
104
101
  _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],
105
102
  _a[constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE] = (typeof document !== 'undefined' && document.title) || '',
@@ -132,7 +129,6 @@ var autocapturePlugin = function (options) {
132
129
  var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist;
133
130
  var _a, _b;
134
131
  return tslib_1.__generator(this, function (_c) {
135
- logger = config.loggerProvider;
136
132
  /* istanbul ignore if */
137
133
  if (typeof document === 'undefined') {
138
134
  return [2 /*return*/];
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture-plugin.js","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n ILogger,\n ElementInteractionsOptions,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n ActionType,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { fromEvent, map, Observable, Subscription } from 'rxjs';\nimport {\n getText,\n getAttributesWithPrefix,\n removeEmptyProperties,\n getNearestLabel,\n getSelector,\n createShouldTrackEvent,\n getClosestElement,\n} from './helpers';\nimport { WindowMessenger } from './libs/messenger';\nimport { getHierarchy } from './hierarchy';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { HasEventTargetAddRemove } from 'rxjs/internal/observable/fromEvent';\n\ndeclare global {\n interface Window {\n navigation: HasEventTargetAddRemove<Event>;\n }\n}\n\ninterface NavigateEvent extends Event {\n readonly navigationType: 'reload' | 'push' | 'replace' | 'traverse';\n readonly destination: {\n readonly url: string;\n readonly key: string | null;\n readonly id: string | null;\n readonly index: number;\n readonly sameDocument: boolean;\n\n getState(): any;\n };\n readonly canIntercept: boolean;\n readonly userInitiated: boolean;\n readonly hashChange: boolean;\n readonly signal: AbortSignal;\n readonly formData: FormData | null;\n readonly downloadRequest: string | null;\n readonly info: any;\n readonly hasUAVisualTransition: boolean;\n /** @see https://github.com/WICG/navigation-api/pull/264 */\n readonly sourceElement: Element | null;\n\n scroll(): void;\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport type AutoCaptureOptionsWithDefaults = Required<\n Pick<ElementInteractionsOptions, 'debounceTime' | 'cssSelectorAllowlist' | 'actionClickAllowlist'>\n> &\n ElementInteractionsOptions;\n\nexport enum ObservablesEnum {\n ClickObservable = 'clickObservable',\n ChangeObservable = 'changeObservable',\n // ErrorObservable = 'errorObservable',\n NavigateObservable = 'navigateObservable',\n MutationObservable = 'mutationObservable',\n}\n\n// Base TimestampedEvent type\ntype BaseTimestampedEvent<T> = {\n event: T;\n timestamp: number;\n type: 'rage' | 'click' | 'change' | 'error' | 'navigate' | 'mutation';\n};\n\n// Specific types for events with targetElementProperties\nexport type ElementBasedEvent = MouseEvent | Event;\nexport type ElementBasedTimestampedEvent<T> = BaseTimestampedEvent<T> & {\n event: MouseEvent | Event;\n type: 'click' | 'change';\n closestTrackedAncestor: Element;\n targetElementProperties: Record<string, any>;\n};\n\n// Union type for all possible TimestampedEvents\nexport type TimestampedEvent<T> = BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T>;\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.ChangeObservable]: Observable<ElementBasedTimestampedEvent<Event>>;\n // [ObservablesEnum.ErrorObservable]: Observable<TimestampedEvent<ErrorEvent>>;\n [ObservablesEnum.NavigateObservable]: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n}\n\n// Type predicate\nexport function isElementBasedEvent<T>(event: BaseTimestampedEvent<T>): event is ElementBasedTimestampedEvent<T> {\n return event.type === 'click' || event.type === 'change';\n}\n\nexport const autocapturePlugin = (options: ElementInteractionsOptions = {}): BrowserEnrichmentPlugin => {\n const {\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n messenger: new WindowMessenger(),\n },\n } = options;\n\n options.cssSelectorAllowlist = options.cssSelectorAllowlist ?? DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = options.actionClickAllowlist ?? DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = options.debounceTime ?? 0; // TODO: update this when rage clicks are added to 1000ms\n\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Subscription[] = [];\n let logger: ILogger | undefined = undefined;\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n // Create Observables from direct user events\n const clickObservable = fromEvent<MouseEvent>(document, 'click', { capture: true }).pipe(\n map((click) => addAdditionalEventProperties(click, 'click')),\n );\n const changeObservable = fromEvent<Event>(document, 'change', { capture: true }).pipe(\n map((change) => addAdditionalEventProperties(change, 'change')),\n );\n\n // Create Observable from unhandled errors\n // const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(\n // map((error) => addAdditionalEventProperties(error, 'error')),\n // );\n\n // Create observable for URL changes\n let navigateObservable;\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = fromEvent<NavigateEvent>(window.navigation, 'navigate').pipe(\n map((navigate) => addAdditionalEventProperties(navigate, 'navigate')),\n );\n }\n\n // Track DOM Mutations\n const mutationObservable = new Observable<MutationRecord[]>((observer) => {\n const mutationObserver = new MutationObserver((mutations) => {\n observer.next(mutations);\n });\n mutationObserver.observe(document.body, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n });\n return () => mutationObserver.disconnect();\n }).pipe(map((mutation) => addAdditionalEventProperties(mutation, 'mutation')));\n\n return {\n [ObservablesEnum.ClickObservable]: clickObservable as Observable<ElementBasedTimestampedEvent<MouseEvent>>,\n [ObservablesEnum.ChangeObservable]: changeObservable as Observable<ElementBasedTimestampedEvent<Event>>,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n [ObservablesEnum.NavigateObservable]: navigateObservable,\n [ObservablesEnum.MutationObservable]: mutationObservable,\n };\n };\n\n // Returns the Amplitude event properties for the given element.\n const getEventProperties = (actionType: ActionType, element: Element) => {\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n /* istanbul ignore next */\n const rect =\n typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n const ariaLabel = element.getAttribute('aria-label');\n const attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n const nearestLabel = getNearestLabel(element);\n const selector = getSelector(element, logger);\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID]: element.getAttribute('id') || '',\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS]: element.getAttribute('class'),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY]: getHierarchy(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: getText(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT]: rect.left == null ? null : Math.round(rect.left),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP]: rect.top == null ? null : Math.round(rect.top),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL]: ariaLabel,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR]: selector,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (typeof document !== 'undefined' && document.title) || '',\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n\n const addAdditionalEventProperties = <T>(\n event: T,\n type: TimestampedEvent<T>['type'],\n ): TimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n const baseEvent: BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T> = {\n event,\n timestamp: Date.now(),\n type,\n };\n\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n // Retrieve additional event properties from the target element\n const closestTrackedAncestor = getClosestElement(\n baseEvent.event.target as HTMLElement,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = getEventProperties(baseEvent.type, closestTrackedAncestor);\n }\n return baseEvent;\n }\n\n return baseEvent;\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n logger = config.loggerProvider;\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create should track event functions the different allowlists\n const shouldTrackEvent = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n const shouldTrackActionClick = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist,\n );\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions\n const clickTrackingSubscription = trackClicks({\n allObservables,\n options: options as AutoCaptureOptionsWithDefaults,\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n });\n subscriptions.push(clickTrackingSubscription);\n\n const changeSubscription = trackChange({\n allObservables,\n getEventProperties,\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n });\n subscriptions.push(changeSubscription);\n\n const actionClickSubscription = trackActionClick({\n allObservables,\n options: options as AutoCaptureOptionsWithDefaults,\n getEventProperties,\n amplitude,\n shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n subscriptions.push(actionClickSubscription);\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n\n // Setup visual tagging selector\n if (window.opener && visualTaggingOptions.enabled) {\n const allowlist = (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist;\n const actionClickAllowlist = (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist;\n\n /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: createShouldTrackEvent(options, [...allowlist, ...actionClickAllowlist]),\n cssSelectorAllowlist: allowlist,\n actionClickAllowlist: actionClickAllowlist,\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
1
+ {"version":3,"file":"autocapture-plugin.js","sourceRoot":"","sources":["../../src/autocapture-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport {\n BrowserClient,\n BrowserConfig,\n EnrichmentPlugin,\n ElementInteractionsOptions,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n ActionType,\n} from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { fromEvent, map, Observable, Subscription, share } from 'rxjs';\nimport {\n getText,\n getAttributesWithPrefix,\n removeEmptyProperties,\n getNearestLabel,\n createShouldTrackEvent,\n getClosestElement,\n} from './helpers';\nimport { WindowMessenger } from './libs/messenger';\nimport { getHierarchy } from './hierarchy';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { HasEventTargetAddRemove } from 'rxjs/internal/observable/fromEvent';\n\ndeclare global {\n interface Window {\n navigation: HasEventTargetAddRemove<Event>;\n }\n}\n\ninterface NavigateEvent extends Event {\n readonly navigationType: 'reload' | 'push' | 'replace' | 'traverse';\n readonly destination: {\n readonly url: string;\n readonly key: string | null;\n readonly id: string | null;\n readonly index: number;\n readonly sameDocument: boolean;\n\n getState(): any;\n };\n readonly canIntercept: boolean;\n readonly userInitiated: boolean;\n readonly hashChange: boolean;\n readonly signal: AbortSignal;\n readonly formData: FormData | null;\n readonly downloadRequest: string | null;\n readonly info: any;\n readonly hasUAVisualTransition: boolean;\n /** @see https://github.com/WICG/navigation-api/pull/264 */\n readonly sourceElement: Element | null;\n\n scroll(): void;\n}\n\ntype BrowserEnrichmentPlugin = EnrichmentPlugin<BrowserClient, BrowserConfig>;\n\nexport type AutoCaptureOptionsWithDefaults = Required<\n Pick<ElementInteractionsOptions, 'debounceTime' | 'cssSelectorAllowlist' | 'actionClickAllowlist'>\n> &\n ElementInteractionsOptions;\n\nexport enum ObservablesEnum {\n ClickObservable = 'clickObservable',\n ChangeObservable = 'changeObservable',\n // ErrorObservable = 'errorObservable',\n NavigateObservable = 'navigateObservable',\n MutationObservable = 'mutationObservable',\n}\n\n// Base TimestampedEvent type\ntype BaseTimestampedEvent<T> = {\n event: T;\n timestamp: number;\n type: 'rage' | 'click' | 'change' | 'error' | 'navigate' | 'mutation';\n};\n\n// Specific types for events with targetElementProperties\nexport type ElementBasedEvent = MouseEvent | Event;\nexport type ElementBasedTimestampedEvent<T> = BaseTimestampedEvent<T> & {\n event: MouseEvent | Event;\n type: 'click' | 'change';\n closestTrackedAncestor: Element;\n targetElementProperties: Record<string, any>;\n};\n\n// Union type for all possible TimestampedEvents\nexport type TimestampedEvent<T> = BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T>;\n\nexport interface AllWindowObservables {\n [ObservablesEnum.ClickObservable]: Observable<ElementBasedTimestampedEvent<MouseEvent>>;\n [ObservablesEnum.ChangeObservable]: Observable<ElementBasedTimestampedEvent<Event>>;\n // [ObservablesEnum.ErrorObservable]: Observable<TimestampedEvent<ErrorEvent>>;\n [ObservablesEnum.NavigateObservable]: Observable<TimestampedEvent<NavigateEvent>> | undefined;\n [ObservablesEnum.MutationObservable]: Observable<TimestampedEvent<MutationRecord[]>>;\n}\n\n// Type predicate\nexport function isElementBasedEvent<T>(event: BaseTimestampedEvent<T>): event is ElementBasedTimestampedEvent<T> {\n return event.type === 'click' || event.type === 'change';\n}\n\nexport const autocapturePlugin = (options: ElementInteractionsOptions = {}): BrowserEnrichmentPlugin => {\n const {\n dataAttributePrefix = DEFAULT_DATA_ATTRIBUTE_PREFIX,\n visualTaggingOptions = {\n enabled: true,\n messenger: new WindowMessenger(),\n },\n } = options;\n\n options.cssSelectorAllowlist = options.cssSelectorAllowlist ?? DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = options.actionClickAllowlist ?? DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = options.debounceTime ?? 0; // TODO: update this when rage clicks are added to 1000ms\n\n const name = constants.PLUGIN_NAME;\n const type = 'enrichment';\n\n const subscriptions: Subscription[] = [];\n\n // Create observables on events on the window\n const createObservables = (): AllWindowObservables => {\n // Create Observables from direct user events\n const clickObservable = fromEvent<MouseEvent>(document, 'click', { capture: true }).pipe(\n map((click) => addAdditionalEventProperties(click, 'click')),\n share(),\n );\n const changeObservable = fromEvent<Event>(document, 'change', { capture: true }).pipe(\n map((change) => addAdditionalEventProperties(change, 'change')),\n share(),\n );\n\n // Create Observable from unhandled errors\n // const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(\n // map((error) => addAdditionalEventProperties(error, 'error')),\n // );\n\n // Create observable for URL changes\n let navigateObservable;\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = fromEvent<NavigateEvent>(window.navigation, 'navigate').pipe(\n map((navigate) => addAdditionalEventProperties(navigate, 'navigate')),\n share(),\n );\n }\n\n // Track DOM Mutations\n const mutationObservable = new Observable<MutationRecord[]>((observer) => {\n const mutationObserver = new MutationObserver((mutations) => {\n observer.next(mutations);\n });\n mutationObserver.observe(document.body, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n });\n return () => mutationObserver.disconnect();\n }).pipe(\n map((mutation) => addAdditionalEventProperties(mutation, 'mutation')),\n share(),\n );\n\n return {\n [ObservablesEnum.ClickObservable]: clickObservable as Observable<ElementBasedTimestampedEvent<MouseEvent>>,\n [ObservablesEnum.ChangeObservable]: changeObservable as Observable<ElementBasedTimestampedEvent<Event>>,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n [ObservablesEnum.NavigateObservable]: navigateObservable,\n [ObservablesEnum.MutationObservable]: mutationObservable,\n };\n };\n\n // Returns the Amplitude event properties for the given element.\n const getEventProperties = (actionType: ActionType, element: Element) => {\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n /* istanbul ignore next */\n const rect =\n typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n const ariaLabel = element.getAttribute('aria-label');\n const attributes = getAttributesWithPrefix(element, dataAttributePrefix);\n const nearestLabel = getNearestLabel(element);\n /* istanbul ignore next */\n const properties: Record<string, any> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID]: element.getAttribute('id') || '',\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS]: element.getAttribute('class'),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY]: getHierarchy(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: getText(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT]: rect.left == null ? null : Math.round(rect.left),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP]: rect.top == null ? null : Math.round(rect.top),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL]: ariaLabel,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: (typeof document !== 'undefined' && document.title) || '',\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT]: window.innerHeight,\n [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth,\n };\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = element.href;\n }\n return removeEmptyProperties(properties);\n };\n\n const addAdditionalEventProperties = <T>(\n event: T,\n type: TimestampedEvent<T>['type'],\n ): TimestampedEvent<T> | ElementBasedTimestampedEvent<T> => {\n const baseEvent: BaseTimestampedEvent<T> | ElementBasedTimestampedEvent<T> = {\n event,\n timestamp: Date.now(),\n type,\n };\n\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n // Retrieve additional event properties from the target element\n const closestTrackedAncestor = getClosestElement(\n baseEvent.event.target as HTMLElement,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = getEventProperties(baseEvent.type, closestTrackedAncestor);\n }\n return baseEvent;\n }\n\n return baseEvent;\n };\n\n const setup: BrowserEnrichmentPlugin['setup'] = async (config, amplitude) => {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n // Create should track event functions the different allowlists\n const shouldTrackEvent = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist,\n );\n const shouldTrackActionClick = createShouldTrackEvent(\n options,\n (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist,\n );\n\n // Create observables for events on the window\n const allObservables = createObservables();\n\n // Create subscriptions\n const clickTrackingSubscription = trackClicks({\n allObservables,\n options: options as AutoCaptureOptionsWithDefaults,\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n });\n subscriptions.push(clickTrackingSubscription);\n\n const changeSubscription = trackChange({\n allObservables,\n getEventProperties,\n amplitude,\n shouldTrackEvent: shouldTrackEvent,\n });\n subscriptions.push(changeSubscription);\n\n const actionClickSubscription = trackActionClick({\n allObservables,\n options: options as AutoCaptureOptionsWithDefaults,\n getEventProperties,\n amplitude,\n shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n subscriptions.push(actionClickSubscription);\n\n /* istanbul ignore next */\n config?.loggerProvider?.log(`${name} has been successfully added.`);\n\n // Setup visual tagging selector\n if (window.opener && visualTaggingOptions.enabled) {\n const allowlist = (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist;\n const actionClickAllowlist = (options as AutoCaptureOptionsWithDefaults).actionClickAllowlist;\n\n /* istanbul ignore next */\n visualTaggingOptions.messenger?.setup({\n logger: config?.loggerProvider,\n ...(config?.serverZone && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] }),\n isElementSelectable: createShouldTrackEvent(options, [...allowlist, ...actionClickAllowlist]),\n cssSelectorAllowlist: allowlist,\n actionClickAllowlist: actionClickAllowlist,\n });\n }\n };\n\n const execute: BrowserEnrichmentPlugin['execute'] = async (event) => {\n return event;\n };\n\n const teardown = async () => {\n for (const subscription of subscriptions) {\n subscription.unsubscribe();\n }\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n"]}
@@ -11,7 +11,6 @@ export declare const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = "[Amplitude] E
11
11
  export declare const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = "[Amplitude] Element Position Top";
12
12
  export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = "[Amplitude] Element Aria Label";
13
13
  export declare const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = "[Amplitude] Element Attributes";
14
- export declare const AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR = "[Amplitude] Element Selector";
15
14
  export declare const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = "[Amplitude] Element Parent Label";
16
15
  export declare const AMPLITUDE_EVENT_PROP_PAGE_URL = "[Amplitude] Page URL";
17
16
  export declare const AMPLITUDE_EVENT_PROP_PAGE_TITLE = "[Amplitude] Page Title";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AAEnE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAE7E,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAC9E,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAC9F,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AAExF,eAAO,MAAM,qCAAqC,iCAAiC,CAAC;AAEpF,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AACpE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAClF,eAAO,MAAM,mCAAmC,+BAA+B,CAAC;AAGhF,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAClE,eAAO,MAAM,wBAAwB,qCAAqC,CAAC;AAC3E,eAAO,MAAM,qBAAqB;;;;CAIjC,CAAC;AAEF,eAAO,MAAM,4CAA4C,6EACmB,CAAC;AAG7E,eAAO,MAAM,wCAAwC,0CAA0C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,0CAA0C,CAAC;AAEnE,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAC7E,eAAO,MAAM,+BAA+B,gCAAgC,CAAC;AAE7E,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAC9E,eAAO,MAAM,gCAAgC,4BAA4B,CAAC;AAC1E,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,kCAAkC,CAAC;AACtF,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAC5E,eAAO,MAAM,0CAA0C,sCAAsC,CAAC;AAC9F,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AACxF,eAAO,MAAM,uCAAuC,mCAAmC,CAAC;AAExF,eAAO,MAAM,yCAAyC,qCAAqC,CAAC;AAC5F,eAAO,MAAM,6BAA6B,yBAAyB,CAAC;AACpE,eAAO,MAAM,+BAA+B,2BAA2B,CAAC;AACxE,eAAO,MAAM,oCAAoC,gCAAgC,CAAC;AAClF,eAAO,MAAM,mCAAmC,+BAA+B,CAAC;AAGhF,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAClE,eAAO,MAAM,wBAAwB,qCAAqC,CAAC;AAC3E,eAAO,MAAM,qBAAqB;;;;CAIjC,CAAC;AAEF,eAAO,MAAM,4CAA4C,6EACmB,CAAC;AAG7E,eAAO,MAAM,wCAAwC,0CAA0C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = exports.AMPLITUDE_ORIGINS_MAP = exports.AMPLITUDE_ORIGIN_STAGING = exports.AMPLITUDE_ORIGIN_EU = exports.AMPLITUDE_ORIGIN = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = exports.AMPLITUDE_EVENT_PROP_PAGE_URL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HREF = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = exports.PLUGIN_NAME = void 0;
3
+ exports.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = exports.AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = exports.AMPLITUDE_ORIGINS_MAP = exports.AMPLITUDE_ORIGIN_STAGING = exports.AMPLITUDE_ORIGIN_EU = exports.AMPLITUDE_ORIGIN = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = exports.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = exports.AMPLITUDE_EVENT_PROP_PAGE_URL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HREF = exports.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = exports.AMPLITUDE_EVENT_PROP_ELEMENT_TAG = exports.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = exports.AMPLITUDE_EVENT_PROP_ELEMENT_ID = exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = exports.PLUGIN_NAME = void 0;
4
4
  exports.PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';
5
5
  exports.AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';
6
6
  exports.AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';
@@ -14,8 +14,6 @@ exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Positi
14
14
  exports.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';
15
15
  exports.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';
16
16
  exports.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';
17
- // Deprecated in favor of AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY. Keeping for backwards compatibility.
18
- exports.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR = '[Amplitude] Element Selector';
19
17
  exports.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';
20
18
  exports.AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';
21
19
  exports.AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,uCAAuC,CAAC;AAEtD,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAEhE,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,kCAAkC,GAAG,2BAA2B,CAAC;AACjE,QAAA,gCAAgC,GAAG,yBAAyB,CAAC;AAC7D,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,sCAAsC,GAAG,+BAA+B,CAAC;AACzE,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,0CAA0C,GAAG,mCAAmC,CAAC;AACjF,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AACxF,sGAAsG;AACzF,QAAA,qCAAqC,GAAG,8BAA8B,CAAC;AAEvE,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,6BAA6B,GAAG,sBAAsB,CAAC;AACvD,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,oCAAoC,GAAG,6BAA6B,CAAC;AACrE,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AAEhF,mCAAmC;AACtB,QAAA,gBAAgB,GAAG,2BAA2B,CAAC;AAC/C,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AACrD,QAAA,wBAAwB,GAAG,kCAAkC,CAAC;AAC9D,QAAA,qBAAqB,GAAG;IACnC,EAAE,EAAE,wBAAgB;IACpB,EAAE,EAAE,2BAAmB;IACvB,OAAO,EAAE,gCAAwB;CAClC,CAAC;AAEW,QAAA,4CAA4C,GACvD,0EAA0E,CAAC;AAC7E,gGAAgG;AAChG,6CAA6C;AAChC,QAAA,wCAAwC,GAAG,uCAAuC,CAAC","sourcesContent":["export const PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\n\nexport const AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport const AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\n// Deprecated in favor of AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY. Keeping for backwards compatibility.\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR = '[Amplitude] Element Selector';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport const AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport const AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\n\n// Visual Tagging related constants\nexport const AMPLITUDE_ORIGIN = 'https://app.amplitude.com';\nexport const AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com';\nexport const AMPLITUDE_ORIGIN_STAGING = 'https://apps.stag2.amplitude.com';\nexport const AMPLITUDE_ORIGINS_MAP = {\n US: AMPLITUDE_ORIGIN,\n EU: AMPLITUDE_ORIGIN_EU,\n STAGING: AMPLITUDE_ORIGIN_STAGING,\n};\n\nexport const AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL =\n 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,uCAAuC,CAAC;AAEtD,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAChE,QAAA,+BAA+B,GAAG,6BAA6B,CAAC;AAEhE,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,kCAAkC,GAAG,2BAA2B,CAAC;AACjE,QAAA,gCAAgC,GAAG,yBAAyB,CAAC;AAC7D,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,sCAAsC,GAAG,+BAA+B,CAAC;AACzE,QAAA,iCAAiC,GAAG,0BAA0B,CAAC;AAC/D,QAAA,0CAA0C,GAAG,mCAAmC,CAAC;AACjF,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAE3E,QAAA,yCAAyC,GAAG,kCAAkC,CAAC;AAC/E,QAAA,6BAA6B,GAAG,sBAAsB,CAAC;AACvD,QAAA,+BAA+B,GAAG,wBAAwB,CAAC;AAC3D,QAAA,oCAAoC,GAAG,6BAA6B,CAAC;AACrE,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AAEhF,mCAAmC;AACtB,QAAA,gBAAgB,GAAG,2BAA2B,CAAC;AAC/C,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AACrD,QAAA,wBAAwB,GAAG,kCAAkC,CAAC;AAC9D,QAAA,qBAAqB,GAAG;IACnC,EAAE,EAAE,wBAAgB;IACpB,EAAE,EAAE,2BAAmB;IACvB,OAAO,EAAE,gCAAwB;CAClC,CAAC;AAEW,QAAA,4CAA4C,GACvD,0EAA0E,CAAC;AAC7E,gGAAgG;AAChG,6CAA6C;AAChC,QAAA,wCAAwC,GAAG,uCAAuC,CAAC","sourcesContent":["export const PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\n\nexport const AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport const AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\n\nexport const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport const AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport const AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\n\n// Visual Tagging related constants\nexport const AMPLITUDE_ORIGIN = 'https://app.amplitude.com';\nexport const AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com';\nexport const AMPLITUDE_ORIGIN_STAGING = 'https://apps.stag2.amplitude.com';\nexport const AMPLITUDE_ORIGINS_MAP = {\n US: AMPLITUDE_ORIGIN,\n EU: AMPLITUDE_ORIGIN_EU,\n STAGING: AMPLITUDE_ORIGIN_STAGING,\n};\n\nexport const AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL =\n 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n"]}
@@ -1,4 +1,4 @@
1
- import { ILogger, ElementInteractionsOptions, ActionType } from '@amplitude/analytics-core';
1
+ import { ElementInteractionsOptions, ActionType } from '@amplitude/analytics-core';
2
2
  import { ElementBasedEvent, ElementBasedTimestampedEvent } from './autocapture-plugin';
3
3
  export type JSONValue = string | number | boolean | null | {
4
4
  [x: string]: JSONValue;
@@ -9,7 +9,6 @@ export declare const isNonSensitiveString: (text: string | null) => boolean;
9
9
  export declare const isTextNode: (node: Node) => boolean;
10
10
  export declare const isNonSensitiveElement: (element: Element) => boolean;
11
11
  export declare const getText: (element: Element) => string;
12
- export declare const getSelector: (element: Element, logger?: ILogger) => string;
13
12
  export declare const isPageUrlAllowed: (url: string, pageUrlAllowlist: (string | RegExp)[] | undefined) => boolean;
14
13
  export declare const getAttributesWithPrefix: (element: Element, prefix: string) => {
15
14
  [key: string]: string;
@@ -23,7 +22,7 @@ export declare const removeEmptyProperties: (properties: {
23
22
  export declare const getNearestLabel: (element: Element) => string;
24
23
  export declare const querySelectUniqueElements: (root: Element | Document, selectors: string[]) => Element[];
25
24
  export declare const getClosestElement: (element: Element | null, selectors: string[]) => Element | null;
26
- export declare const getEventTagProps: (element: Element, logger?: ILogger) => {
25
+ export declare const getEventTagProps: (element: Element) => {
27
26
  [key: string]: unknown;
28
27
  };
29
28
  export declare const asyncLoadScript: (url: string) => Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEvF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAIzG,MAAM,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAErF,eAAO,MAAM,sBAAsB,uBACb,0BAA0B,aACnC,MAAM,EAAE,KAClB,gBAsDF,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,MAAM,GAAG,IAAI,YAgBvD,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,IAAI,YAEpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAAa,OAAO,YAOrD,CAAC;AAGF,eAAO,MAAM,OAAO,YAAa,OAAO,KAAG,MAsB1C,CAAC;AAEF,eAAO,MAAM,WAAW,YAAa,OAAO,WAAW,OAAO,KAAG,MAkChE,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,YAU9F,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,OAAO,UAAU,MAAM,KAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAWjG,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,OAAO,YAOrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,eAAgB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;;CAQ3E,CAAC;AAEF,eAAO,MAAM,eAAe,YAAa,OAAO,KAAG,MAiBlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,OAAO,GAAG,QAAQ,aAAa,MAAM,EAAE,KAAG,OAAO,EAchG,CAAC;AAGF,eAAO,MAAM,iBAAiB,YAAa,OAAO,GAAG,IAAI,aAAa,MAAM,EAAE,KAAG,OAAO,GAAG,IAU1F,CAAC;AAGF,eAAO,MAAM,gBAAgB,YAAa,OAAO,WAAW,OAAO;;CAelE,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,qBA2B1C,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,eAAO,MAAM,2BAA2B,UAAW,4BAA4B,CAAC,iBAAiB,CAAC,KAAG,OAQpG,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEvF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAIzG,MAAM,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAErF,eAAO,MAAM,sBAAsB,uBACb,0BAA0B,aACnC,MAAM,EAAE,KAClB,gBAsDF,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,MAAM,GAAG,IAAI,YAgBvD,CAAC;AAEF,eAAO,MAAM,UAAU,SAAU,IAAI,YAEpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAAa,OAAO,YAOrD,CAAC;AAGF,eAAO,MAAM,OAAO,YAAa,OAAO,KAAG,MAsB1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,oBAAoB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,YAU9F,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,OAAO,UAAU,MAAM;;CAWvE,CAAC;AAEF,eAAO,MAAM,OAAO,UAAW,OAAO,YAOrC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;CAQjC,CAAC;AAEF,eAAO,MAAM,eAAe,YAAa,OAAO,KAAG,MAiBlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,OAAO,GAAG,QAAQ,aAAa,MAAM,EAAE,KAAG,OAAO,EAchG,CAAC;AAGF,eAAO,MAAM,iBAAiB,YAAa,OAAO,GAAG,IAAI,aAAa,MAAM,EAAE,KAAG,OAAO,GAAG,IAU1F,CAAC;AAGF,eAAO,MAAM,gBAAgB,YAAa,OAAO;;CAahD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAS,MAAM,qBA2B1C,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,eAAO,MAAM,2BAA2B,UAAW,6BAA6B,iBAAiB,CAAC,KAAG,OAQpG,CAAC"}
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.filterOutNonTrackableEvents = exports.asyncLoadScript = exports.getEventTagProps = exports.getClosestElement = exports.querySelectUniqueElements = exports.getNearestLabel = exports.removeEmptyProperties = exports.isEmpty = exports.getAttributesWithPrefix = exports.isPageUrlAllowed = exports.getSelector = exports.getText = exports.isNonSensitiveElement = exports.isTextNode = exports.isNonSensitiveString = exports.createShouldTrackEvent = void 0;
4
- exports.generateUniqueId = generateUniqueId;
3
+ exports.filterOutNonTrackableEvents = exports.generateUniqueId = exports.asyncLoadScript = exports.getEventTagProps = exports.getClosestElement = exports.querySelectUniqueElements = exports.getNearestLabel = exports.removeEmptyProperties = exports.isEmpty = exports.getAttributesWithPrefix = exports.isPageUrlAllowed = exports.getText = exports.isNonSensitiveElement = exports.isTextNode = exports.isNonSensitiveString = exports.createShouldTrackEvent = void 0;
5
4
  var tslib_1 = require("tslib");
6
5
  /* eslint-disable no-restricted-globals */
7
- var finder_1 = require("./libs/finder");
8
6
  var constants = tslib_1.__importStar(require("./constants"));
9
7
  var SENSITIVE_TAGS = ['input', 'select', 'textarea'];
10
8
  var createShouldTrackEvent = function (autocaptureOptions, allowlist) {
@@ -113,45 +111,6 @@ var getText = function (element) {
113
111
  return text;
114
112
  };
115
113
  exports.getText = getText;
116
- var getSelector = function (element, logger) {
117
- var _a, _b;
118
- var selector = '';
119
- try {
120
- selector = (0, finder_1.finder)(element, {
121
- className: function (name) { return name !== constants.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS; },
122
- maxNumberOfTries: 1000,
123
- });
124
- return selector;
125
- }
126
- catch (error) {
127
- if (logger) {
128
- var typedError = error;
129
- logger.warn("Failed to get selector with finder, use fallback strategy instead: ".concat(typedError.toString()));
130
- }
131
- }
132
- // Fall back to use tag, id, and class name, if finder fails.
133
- /* istanbul ignore next */
134
- var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);
135
- if (tag) {
136
- selector = tag;
137
- }
138
- var id = element.getAttribute('id');
139
- var className = element.getAttribute('class');
140
- if (id) {
141
- selector = "#".concat(id);
142
- }
143
- else if (className) {
144
- var classes = className
145
- .split(' ')
146
- .filter(function (name) { return name !== constants.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS; })
147
- .join('.');
148
- if (classes) {
149
- selector = "".concat(selector, ".").concat(classes);
150
- }
151
- }
152
- return selector;
153
- };
154
- exports.getSelector = getSelector;
155
114
  var isPageUrlAllowed = function (url, pageUrlAllowlist) {
156
115
  if (!pageUrlAllowlist || !pageUrlAllowlist.length) {
157
116
  return true;
@@ -244,7 +203,7 @@ var getClosestElement = function (element, selectors) {
244
203
  };
245
204
  exports.getClosestElement = getClosestElement;
246
205
  // Returns the element properties for the given element in Visual Labeling.
247
- var getEventTagProps = function (element, logger) {
206
+ var getEventTagProps = function (element) {
248
207
  var _a;
249
208
  var _b, _c;
250
209
  if (!element) {
@@ -252,11 +211,9 @@ var getEventTagProps = function (element, logger) {
252
211
  }
253
212
  /* istanbul ignore next */
254
213
  var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);
255
- var selector = (0, exports.getSelector)(element, logger);
256
214
  var properties = (_a = {},
257
215
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,
258
216
  _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = (0, exports.getText)(element),
259
- _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR] = selector,
260
217
  _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],
261
218
  _a);
262
219
  return (0, exports.removeEmptyProperties)(properties);
@@ -292,6 +249,7 @@ exports.asyncLoadScript = asyncLoadScript;
292
249
  function generateUniqueId() {
293
250
  return "".concat(Date.now(), "-").concat(Math.random().toString(36).substr(2, 9));
294
251
  }
252
+ exports.generateUniqueId = generateUniqueId;
295
253
  var filterOutNonTrackableEvents = function (event) {
296
254
  // Filter out changeEvent events with no target
297
255
  // This could happen when change events are triggered programmatically
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { finder } from './libs/finder';\nimport * as constants from './constants';\nimport { ILogger, ElementInteractionsOptions, ActionType } from '@amplitude/analytics-core';\nimport { ElementBasedEvent, ElementBasedTimestampedEvent } from './autocapture-plugin';\n\nexport type JSONValue = string | number | boolean | null | { [x: string]: JSONValue } | Array<JSONValue>;\n\nconst SENSITIVE_TAGS = ['input', 'select', 'textarea'];\n\nexport type shouldTrackEvent = (actionType: ActionType, element: Element) => boolean;\n\nexport const createShouldTrackEvent = (\n autocaptureOptions: ElementInteractionsOptions,\n allowlist: string[], // this can be any type of css selector allow list\n): shouldTrackEvent => {\n return (actionType: ActionType, element: Element) => {\n const { pageUrlAllowlist, shouldTrackEventResolver } = autocaptureOptions;\n\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n // window, document, and Text nodes have no tag\n if (!tag) {\n return false;\n }\n\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n\n /* istanbul ignore next */\n const elementType = String(element?.getAttribute('type')) || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n /* istanbul ignore if */\n if (allowlist) {\n const hasMatchAnyAllowedSelector = allowlist.some((selector) => !!element?.matches?.(selector));\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n const computedStyle = window?.getComputedStyle?.(element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n};\n\nexport const isNonSensitiveString = (text: string | null) => {\n if (text == null) {\n return false;\n }\n if (typeof text === 'string') {\n const ccRegex =\n /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((text || '').replace(/[- ]/g, ''))) {\n return false;\n }\n const ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(text)) {\n return false;\n }\n }\n return true;\n};\n\nexport const isTextNode = (node: Node) => {\n return !!node && node.nodeType === 3;\n};\n\nexport const isNonSensitiveElement = (element: Element) => {\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n const isContentEditable =\n element instanceof HTMLElement ? element.getAttribute('contenteditable')?.toLowerCase() === 'true' : false;\n\n return !SENSITIVE_TAGS.includes(tag) && !isContentEditable;\n};\n\n// Maybe this can be simplified with element.innerText, keep and manual concatenating for now, more research needed.\nexport const getText = (element: Element): string => {\n let text = '';\n if (isNonSensitiveElement(element) && element.childNodes && element.childNodes.length) {\n element.childNodes.forEach((child) => {\n let childText = '';\n if (isTextNode(child)) {\n if (child.textContent) {\n childText = child.textContent;\n }\n } else {\n childText = getText(child as Element);\n }\n text += childText\n .split(/(\\s+)/)\n .filter(isNonSensitiveString)\n .join('')\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n .substring(0, 255);\n });\n }\n return text;\n};\n\nexport const getSelector = (element: Element, logger?: ILogger): string => {\n let selector = '';\n try {\n selector = finder(element, {\n className: (name: string) => name !== constants.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n maxNumberOfTries: 1000,\n });\n return selector;\n } catch (error) {\n if (logger) {\n const typedError = error as Error;\n logger.warn(`Failed to get selector with finder, use fallback strategy instead: ${typedError.toString()}`);\n }\n }\n // Fall back to use tag, id, and class name, if finder fails.\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n if (tag) {\n selector = tag;\n }\n const id = element.getAttribute('id');\n const className = element.getAttribute('class');\n if (id) {\n selector = `#${id}`;\n } else if (className) {\n const classes = className\n .split(' ')\n .filter((name) => name !== constants.AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS)\n .join('.');\n if (classes) {\n selector = `${selector}.${classes}`;\n }\n }\n return selector;\n};\n\nexport const isPageUrlAllowed = (url: string, pageUrlAllowlist: (string | RegExp)[] | undefined) => {\n if (!pageUrlAllowlist || !pageUrlAllowlist.length) {\n return true;\n }\n return pageUrlAllowlist.some((allowedUrl) => {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\n\nexport const getAttributesWithPrefix = (element: Element, prefix: string): { [key: string]: string } => {\n return element.getAttributeNames().reduce((attributes: { [key: string]: string }, attributeName) => {\n if (attributeName.startsWith(prefix)) {\n const attributeKey = attributeName.replace(prefix, '');\n const attributeValue = element.getAttribute(attributeName);\n if (attributeKey) {\n attributes[attributeKey] = attributeValue || '';\n }\n }\n return attributes;\n }, {});\n};\n\nexport const isEmpty = (value: unknown) => {\n return (\n value === undefined ||\n value === null ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0)\n );\n};\n\nexport const removeEmptyProperties = (properties: { [key: string]: unknown }) => {\n return Object.keys(properties).reduce((filteredProperties: { [key: string]: unknown }, key) => {\n const value = properties[key];\n if (!isEmpty(value)) {\n filteredProperties[key] = value;\n }\n return filteredProperties;\n }, {});\n};\n\nexport const getNearestLabel = (element: Element): string => {\n const parent = element.parentElement;\n if (!parent) {\n return '';\n }\n let labelElement;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n } catch (error) {\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n const labelText = labelElement.textContent || '';\n return isNonSensitiveString(labelText) ? labelText : '';\n }\n return getNearestLabel(parent);\n};\n\nexport const querySelectUniqueElements = (root: Element | Document, selectors: string[]): Element[] => {\n if (root && 'querySelectorAll' in root && typeof root.querySelectorAll === 'function') {\n const elementSet = selectors.reduce((elements: Set<Element>, selector) => {\n if (selector) {\n const selectedElements = Array.from(root.querySelectorAll(selector));\n selectedElements.forEach((element) => {\n elements.add(element);\n });\n }\n return elements;\n }, new Set<Element>());\n return Array.from(elementSet);\n }\n return [];\n};\n\n// Similar as element.closest, but works with multiple selectors\nexport const getClosestElement = (element: Element | null, selectors: string[]): Element | null => {\n if (!element) {\n return null;\n }\n /* istanbul ignore next */\n if (selectors.some((selector) => element?.matches?.(selector))) {\n return element;\n }\n /* istanbul ignore next */\n return getClosestElement(element?.parentElement, selectors);\n};\n\n// Returns the element properties for the given element in Visual Labeling.\nexport const getEventTagProps = (element: Element, logger?: ILogger) => {\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n const selector = getSelector(element, logger);\n\n const properties: Record<string, JSONValue> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: getText(element),\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_SELECTOR]: selector,\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n };\n return removeEmptyProperties(properties);\n};\n\nexport const asyncLoadScript = (url: string) => {\n return new Promise((resolve, reject) => {\n try {\n const scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener(\n 'load',\n () => {\n resolve({ status: true });\n },\n { once: true },\n );\n scriptElement.addEventListener('error', () => {\n reject({\n status: false,\n message: `Failed to load the script ${url}`,\n });\n });\n /* istanbul ignore next */\n document.head?.appendChild(scriptElement);\n } catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\n\nexport function generateUniqueId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport const filterOutNonTrackableEvents = (event: ElementBasedTimestampedEvent<ElementBasedEvent>): boolean => {\n // Filter out changeEvent events with no target\n // This could happen when change events are triggered programmatically\n if (event.event.target === null || !event.closestTrackedAncestor) {\n return false;\n }\n\n return true;\n};\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-restricted-globals */\nimport * as constants from './constants';\nimport { ElementInteractionsOptions, ActionType } from '@amplitude/analytics-core';\nimport { ElementBasedEvent, ElementBasedTimestampedEvent } from './autocapture-plugin';\n\nexport type JSONValue = string | number | boolean | null | { [x: string]: JSONValue } | Array<JSONValue>;\n\nconst SENSITIVE_TAGS = ['input', 'select', 'textarea'];\n\nexport type shouldTrackEvent = (actionType: ActionType, element: Element) => boolean;\n\nexport const createShouldTrackEvent = (\n autocaptureOptions: ElementInteractionsOptions,\n allowlist: string[], // this can be any type of css selector allow list\n): shouldTrackEvent => {\n return (actionType: ActionType, element: Element) => {\n const { pageUrlAllowlist, shouldTrackEventResolver } = autocaptureOptions;\n\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n // window, document, and Text nodes have no tag\n if (!tag) {\n return false;\n }\n\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n\n if (!isPageUrlAllowed(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n\n /* istanbul ignore next */\n const elementType = String(element?.getAttribute('type')) || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n\n /* istanbul ignore if */\n if (allowlist) {\n const hasMatchAnyAllowedSelector = allowlist.some((selector) => !!element?.matches?.(selector));\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n const computedStyle = window?.getComputedStyle?.(element);\n /* istanbul ignore next */\n if (computedStyle && computedStyle.getPropertyValue('cursor') === 'pointer' && actionType === 'click') {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n};\n\nexport const isNonSensitiveString = (text: string | null) => {\n if (text == null) {\n return false;\n }\n if (typeof text === 'string') {\n const ccRegex =\n /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/;\n if (ccRegex.test((text || '').replace(/[- ]/g, ''))) {\n return false;\n }\n const ssnRegex = /(^\\d{3}-?\\d{2}-?\\d{4}$)/;\n if (ssnRegex.test(text)) {\n return false;\n }\n }\n return true;\n};\n\nexport const isTextNode = (node: Node) => {\n return !!node && node.nodeType === 3;\n};\n\nexport const isNonSensitiveElement = (element: Element) => {\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n const isContentEditable =\n element instanceof HTMLElement ? element.getAttribute('contenteditable')?.toLowerCase() === 'true' : false;\n\n return !SENSITIVE_TAGS.includes(tag) && !isContentEditable;\n};\n\n// Maybe this can be simplified with element.innerText, keep and manual concatenating for now, more research needed.\nexport const getText = (element: Element): string => {\n let text = '';\n if (isNonSensitiveElement(element) && element.childNodes && element.childNodes.length) {\n element.childNodes.forEach((child) => {\n let childText = '';\n if (isTextNode(child)) {\n if (child.textContent) {\n childText = child.textContent;\n }\n } else {\n childText = getText(child as Element);\n }\n text += childText\n .split(/(\\s+)/)\n .filter(isNonSensitiveString)\n .join('')\n .replace(/[\\r\\n]/g, ' ')\n .replace(/[ ]+/g, ' ')\n .substring(0, 255);\n });\n }\n return text;\n};\n\nexport const isPageUrlAllowed = (url: string, pageUrlAllowlist: (string | RegExp)[] | undefined) => {\n if (!pageUrlAllowlist || !pageUrlAllowlist.length) {\n return true;\n }\n return pageUrlAllowlist.some((allowedUrl) => {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\n\nexport const getAttributesWithPrefix = (element: Element, prefix: string): { [key: string]: string } => {\n return element.getAttributeNames().reduce((attributes: { [key: string]: string }, attributeName) => {\n if (attributeName.startsWith(prefix)) {\n const attributeKey = attributeName.replace(prefix, '');\n const attributeValue = element.getAttribute(attributeName);\n if (attributeKey) {\n attributes[attributeKey] = attributeValue || '';\n }\n }\n return attributes;\n }, {});\n};\n\nexport const isEmpty = (value: unknown) => {\n return (\n value === undefined ||\n value === null ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0)\n );\n};\n\nexport const removeEmptyProperties = (properties: { [key: string]: unknown }) => {\n return Object.keys(properties).reduce((filteredProperties: { [key: string]: unknown }, key) => {\n const value = properties[key];\n if (!isEmpty(value)) {\n filteredProperties[key] = value;\n }\n return filteredProperties;\n }, {});\n};\n\nexport const getNearestLabel = (element: Element): string => {\n const parent = element.parentElement;\n if (!parent) {\n return '';\n }\n let labelElement;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n } catch (error) {\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n const labelText = labelElement.textContent || '';\n return isNonSensitiveString(labelText) ? labelText : '';\n }\n return getNearestLabel(parent);\n};\n\nexport const querySelectUniqueElements = (root: Element | Document, selectors: string[]): Element[] => {\n if (root && 'querySelectorAll' in root && typeof root.querySelectorAll === 'function') {\n const elementSet = selectors.reduce((elements: Set<Element>, selector) => {\n if (selector) {\n const selectedElements = Array.from(root.querySelectorAll(selector));\n selectedElements.forEach((element) => {\n elements.add(element);\n });\n }\n return elements;\n }, new Set<Element>());\n return Array.from(elementSet);\n }\n return [];\n};\n\n// Similar as element.closest, but works with multiple selectors\nexport const getClosestElement = (element: Element | null, selectors: string[]): Element | null => {\n if (!element) {\n return null;\n }\n /* istanbul ignore next */\n if (selectors.some((selector) => element?.matches?.(selector))) {\n return element;\n }\n /* istanbul ignore next */\n return getClosestElement(element?.parentElement, selectors);\n};\n\n// Returns the element properties for the given element in Visual Labeling.\nexport const getEventTagProps = (element: Element) => {\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n const tag = element?.tagName?.toLowerCase?.();\n\n const properties: Record<string, JSONValue> = {\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG]: tag,\n [constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT]: getText(element),\n [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: window.location.href.split('?')[0],\n };\n return removeEmptyProperties(properties);\n};\n\nexport const asyncLoadScript = (url: string) => {\n return new Promise((resolve, reject) => {\n try {\n const scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener(\n 'load',\n () => {\n resolve({ status: true });\n },\n { once: true },\n );\n scriptElement.addEventListener('error', () => {\n reject({\n status: false,\n message: `Failed to load the script ${url}`,\n });\n });\n /* istanbul ignore next */\n document.head?.appendChild(scriptElement);\n } catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\n\nexport function generateUniqueId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport const filterOutNonTrackableEvents = (event: ElementBasedTimestampedEvent<ElementBasedEvent>): boolean => {\n // Filter out changeEvent events with no target\n // This could happen when change events are triggered programmatically\n if (event.event.target === null || !event.closestTrackedAncestor) {\n return false;\n }\n\n return true;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAoCjE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,aAAa,GAAG,IAAI,CAsDlF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,EAAE,CAehE;AAGD,eAAO,MAAM,YAAY,YAAa,OAAO,GAAG,IAAI,KAAG,SActD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,CAkB/G;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,EAAE,MAAM,UAAQ,GAAG,MAAM,GAAG,IAAI,CAoDpH"}
1
+ {"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAoCjE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,aAAa,GAAG,IAAI,CAsDlF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,EAAE,CAehE;AAGD,eAAO,MAAM,YAAY,YAAa,OAAO,GAAG,IAAI,cAcnD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,CAkB/G;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,EAAE,MAAM,UAAQ,GAAG,MAAM,GAAG,IAAI,CAoDpH"}