@schibsted/pulse-sdk 8.0.0-rc.5 → 8.0.0-rc.7

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 (37) hide show
  1. package/dist/cjs/Tracker.js +137 -119
  2. package/dist/cjs/leaveTrackingTpaas/constants.js +2 -7
  3. package/dist/cjs/leaveTrackingTpaas/index.js +52 -40
  4. package/dist/cjs/tracker-proxy/consts.js +3 -0
  5. package/dist/cjs/version.js +1 -1
  6. package/dist/cjs/visibility-observer/index.js +9 -7
  7. package/dist/cjs/wrapper/types/event.js +5 -0
  8. package/dist/ejs/Tracker.js +138 -120
  9. package/dist/ejs/leaveTrackingTpaas/constants.js +1 -5
  10. package/dist/ejs/leaveTrackingTpaas/index.js +53 -41
  11. package/dist/ejs/tracker-proxy/consts.js +3 -0
  12. package/dist/ejs/version.js +1 -1
  13. package/dist/ejs/visibility-observer/index.js +9 -7
  14. package/dist/ejs/wrapper/types/event.js +4 -1
  15. package/dist/types/Tracker.d.ts +55 -20
  16. package/dist/types/index.d.ts +1 -1
  17. package/dist/types/leaveTrackingTpaas/constants.d.ts +1 -5
  18. package/dist/types/leaveTrackingTpaas/index.d.ts +6 -6
  19. package/dist/types/leaveTrackingTpaas/types.d.ts +1 -9
  20. package/dist/types/tracker-proxy/consts.d.ts +1 -1
  21. package/dist/types/types.d.ts +19 -13
  22. package/dist/types/version.d.ts +1 -1
  23. package/dist/types/visibility-observer/index.d.ts +6 -1
  24. package/dist/types/wrapper/types/event.d.ts +3 -1
  25. package/node_modules/@schibsted/pulse-utils/package.json +1 -1
  26. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders.js +5 -1
  27. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/guards.js +7 -0
  28. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/index.js +3 -0
  29. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders.js +5 -2
  30. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/guards.js +4 -0
  31. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/index.js +1 -0
  32. package/node_modules/@schibsted/tpaas-event-builder/dist/index.d.ts +792 -166
  33. package/node_modules/@schibsted/tpaas-event-builder/package.json +1 -1
  34. package/node_modules/@schibsted/tpaas-schemas/dist/cjs/constants.js +66 -57
  35. package/node_modules/@schibsted/tpaas-schemas/dist/ejs/constants.js +64 -55
  36. package/node_modules/@schibsted/tpaas-schemas/dist/index.d.ts +836 -219
  37. package/package.json +4 -4
@@ -68,6 +68,7 @@ const version_1 = require("./version");
68
68
  const visibility_observer_1 = require("./visibility-observer");
69
69
  const warnOnce_1 = __importDefault(require("./warnOnce"));
70
70
  const event_builder_1 = require("./wrapper/engagement/ui-element/event-builder");
71
+ const types_1 = require("./wrapper/types");
71
72
  const page_from_page_view_1 = require("./wrapper/utils/page-from-page-view");
72
73
  const event_builder_2 = require("./wrapper/view/article/event-builder");
73
74
  const event_builder_3 = require("./wrapper/view/frontpage/event-builder");
@@ -157,6 +158,27 @@ function unsubscribe(eventName, callback) {
157
158
  * @class Tracker
158
159
  */
159
160
  class Tracker {
161
+ async getCurrentTpaasPage() {
162
+ const { id, type, url } = await this.currentPage;
163
+ return {
164
+ // remove the SDRN prefix, it's not expected for TPaaS
165
+ pageId: id.startsWith('sdrn:') ? id.split(':').slice(-1)[0] : id,
166
+ // make sure the pageType is valid for TPaaS
167
+ pageType: (0, tpaas_event_builder_1.isPageType)(type) ? type : 'Page',
168
+ url,
169
+ };
170
+ }
171
+ async getCurrentLegacyPage() {
172
+ const { id, type, url } = await this.currentPage;
173
+ // make sure the pageType is valid for legacy events
174
+ const validatedType = (0, types_1.isLegacyPageType)(type) ? type : 'Page';
175
+ return {
176
+ // add the SDRN prefix if it's not there, legacy events expect the full SDRN format
177
+ id: id.startsWith('sdrn:') ? id : `sdrn:${this.state.providerId}:${validatedType.toLowerCase()}:${id}`,
178
+ type: validatedType,
179
+ url,
180
+ };
181
+ }
160
182
  /**
161
183
  * > [!WARNING]
162
184
  * >
@@ -175,12 +197,18 @@ class Tracker {
175
197
  // the tracking of the same element with both old and new events at the same time
176
198
  this.legacyVisibilityObservers = new Map();
177
199
  this.visibilityObservers = new Map();
178
- this.legacyCurrentPage = {
179
- id: 'undefined-id',
200
+ /**
201
+ * @private
202
+ *
203
+ * This is used as the source of truth for the current page's information, which is updated based on the View Page-level event
204
+ * As a single source of truth for the current page, this needs to be compatible between legacy and TPaaS events, hence the need for a custom data type.
205
+ * Legacy events can provide an id with SDRN, while TPaaS events don't need it
206
+ */
207
+ this.currentPage = {
208
+ id: 'unknown',
180
209
  type: 'Page',
181
- url: typeof window !== 'undefined' ? window.location.href : '',
210
+ url: pulse_utils_1.isBrowser ? window.location.href : undefined,
182
211
  };
183
- this.currentPage = undefined;
184
212
  /**
185
213
  * Promise that resolves when a session ID becomes available
186
214
  * @private
@@ -192,7 +220,7 @@ class Tracker {
192
220
  */
193
221
  this.hasProxyListener = false;
194
222
  this.setPageDefaults = (pageViewEvent) => {
195
- this.legacyCurrentPage = (0, page_from_page_view_1.pageFromPageView)(pageViewEvent);
223
+ this.currentPage = (0, page_from_page_view_1.pageFromPageView)(pageViewEvent);
196
224
  if (pageViewEvent.origin) {
197
225
  const pageDefaults = { origin: pageViewEvent.origin };
198
226
  this.update(pageDefaults, true);
@@ -200,8 +228,8 @@ class Tracker {
200
228
  };
201
229
  this.setCurrentPage = (id, type) => {
202
230
  this.currentPage = {
203
- pageId: id,
204
- pageType: type,
231
+ id: id || 'unknown',
232
+ type: type || 'Page',
205
233
  url: pulse_utils_1.isBrowser ? window.location.href : undefined,
206
234
  };
207
235
  };
@@ -471,7 +499,6 @@ class Tracker {
471
499
  };
472
500
  }
473
501
  /**
474
- *
475
502
  * @private
476
503
  * @category TPaaS Tracking
477
504
  */
@@ -531,10 +558,11 @@ class Tracker {
531
558
  source: source || 'unknown',
532
559
  };
533
560
  }
534
- const [actor, consents, experiments] = await Promise.all([
561
+ const [actor, consents, experiments, currentPage] = await Promise.all([
535
562
  this.getActor(),
536
563
  this.getConsents(),
537
564
  this.adaptExperiments(this.builders.experiments),
565
+ this.getCurrentTpaasPage(),
538
566
  ]);
539
567
  const { environmentId, jwe } = (0, pulse_cis_sync_1.parsePulseCookies)();
540
568
  return {
@@ -545,7 +573,7 @@ class Tracker {
545
573
  consents: adaptConsentsToNewFormat(consents),
546
574
  providerId: this.state.providerId,
547
575
  pageviewId: this.state.pageViewId,
548
- currentPage: this.currentPage,
576
+ currentPage,
549
577
  experiments,
550
578
  environmentId,
551
579
  jwe,
@@ -622,7 +650,7 @@ class Tracker {
622
650
  const viewUIElementInputProperties = buildEventFromElement(element);
623
651
  this.trackLegacyViewUIElement(viewUIElementInputProperties);
624
652
  }));
625
- this.legacyVisibilityObservers.get(selector)?.observe(selector);
653
+ this.legacyVisibilityObservers.get(selector)?.observe(selector, {});
626
654
  }
627
655
  /**
628
656
  * The `addUIElementVisibilityTracking` function provides an interface for sending tracking events when specific UI elements become visible within the viewport.
@@ -654,7 +682,38 @@ class Tracker {
654
682
  const eventInput = buildEventFromElement(element);
655
683
  this.trackImpressionUIElement(eventInput);
656
684
  }));
657
- this.visibilityObservers.get(selector)?.observe(selector);
685
+ this.visibilityObservers.get(selector)?.observe(selector, {});
686
+ }
687
+ /**
688
+ * The `addElementVisibilityObserver` function provides an interface for executing arbitrary code when specific DOM Elements become visible within the viewport.
689
+ * It is built on the `VisibilityObserver` class, which efficiently detects visibility changes in DOM elements.
690
+ * When an element becomes at least 2/3 visible, a callback is triggered, with the Element that invoked the callback call as argument.
691
+ * It leverages the [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) for viewport tracking
692
+ * and the [Mutation Observer API](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) to monitor lazy-loaded elements.
693
+ *
694
+ * Example usage:
695
+ *
696
+ * ```ts
697
+ * tracker.addElementVisibilityObserver('[data-pulse-entity-id]', (element) => {
698
+ * const eventInput = parseElementIntoEventInput(element); // user-defined function
699
+ * tracker.trackImpressionTeaser(eventInput); // can be anything actually, not necessarily a Teaser tracking call
700
+ * });
701
+ * ```
702
+ * @param selector
703
+ * @param callback
704
+ * @param options {ObserverOptions}
705
+ * @param options.threshold - A number between 0 and 1 indicating how much of the element should be visible to trigger
706
+ * the callback. Default is 0.67 (2/3 of the element).
707
+ */
708
+ addElementVisibilityObserver(selector, callback, options = {}) {
709
+ if (this.visibilityObservers.has(selector)) {
710
+ console.warn(`Cannot add UI Element visibility tracking for selector "${selector}" as it is already being tracked.`);
711
+ return;
712
+ }
713
+ this.visibilityObservers.set(selector, new visibility_observer_1.VisibilityObserver((element) => {
714
+ callback(element);
715
+ }));
716
+ this.visibilityObservers.get(selector)?.observe(selector, options);
658
717
  }
659
718
  /**
660
719
  * The old trackViewArticle method from the Media Wrapper.
@@ -748,7 +807,7 @@ class Tracker {
748
807
  * @category Legacy Tracking
749
808
  */
750
809
  trackLegacyViewUIElement(inputProperties, trackOptions) {
751
- const viewUIElementEventData = (0, event_builder_8.buildLegacyViewUIElementEvent)(inputProperties, this.legacyCurrentPage);
810
+ const viewUIElementEventData = (0, event_builder_8.buildLegacyViewUIElementEvent)(inputProperties, this.getCurrentLegacyPage());
752
811
  return this.track('trackerEvent', viewUIElementEventData, trackOptions);
753
812
  }
754
813
  /**
@@ -759,7 +818,7 @@ class Tracker {
759
818
  * @category Legacy Tracking
760
819
  */
761
820
  trackLegacyClickUIElement(inputProperties, trackOptions) {
762
- const clickUIElementEventData = (0, event_builder_1.buildClickUIElementEvent)(inputProperties, this.legacyCurrentPage);
821
+ const clickUIElementEventData = (0, event_builder_1.buildClickUIElementEvent)(inputProperties, this.getCurrentLegacyPage());
763
822
  return this.track('trackerEvent', clickUIElementEventData, trackOptions);
764
823
  }
765
824
  /**
@@ -791,14 +850,13 @@ class Tracker {
791
850
  const event = (0, tpaas_event_builder_1.buildViewHealthPageEvent)(input, dependencies);
792
851
  const result = this.sendTpaasEvent(event);
793
852
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
794
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
795
- // HealthView Page is a bit special, in the sense that in doesn't have a dedicated Leave event.
796
- // Instead, we need to reuse the generic Leave Page event, but adapt the input accordingly.
797
- // This means omitting some fields from HealthView Page that are not part of Leave Page schema.
798
- const { experiments, metrics, object, ...restInput } = input;
799
- const { category, custom, intent, name, tags, ...restObject } = input.object;
800
- const leavePageCallback = (leave) => {
801
- this.trackLeavePage({
853
+ const leavePageCallback = async (leave) => {
854
+ // HealthView Page is a bit special, in the sense that in doesn't have a dedicated Leave event.
855
+ // Instead, we need to reuse the generic Leave Page event, but adapt the input accordingly.
856
+ // This means omitting some fields from HealthView Page that are not part of Leave Page schema.
857
+ const { experiments, metrics, object, origin, ...restInput } = input;
858
+ const { category, custom, intent, name, tags, ...restObject } = input.object;
859
+ await this.trackLeavePage({
802
860
  leave,
803
861
  ...restInput,
804
862
  object: {
@@ -808,10 +866,7 @@ class Tracker {
808
866
  });
809
867
  };
810
868
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
811
- objectElement,
812
- pageElement,
813
- objectResizable,
814
- heightBuilder,
869
+ ...options.leaveTracking,
815
870
  schema: tpaas_schemas_1.LeavePage.object.objectType,
816
871
  trackMethod: leavePageCallback,
817
872
  });
@@ -835,18 +890,14 @@ class Tracker {
835
890
  const event = (0, tpaas_event_builder_1.buildViewPageEvent)(input, dependencies);
836
891
  const result = this.sendTpaasEvent(event);
837
892
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
838
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
839
- const leavePageCallback = (leave) => {
840
- this.trackLeavePage({
893
+ const leavePageCallback = async (leave) => {
894
+ await this.trackLeavePage({
841
895
  leave,
842
896
  ...input,
843
897
  });
844
898
  };
845
899
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
846
- objectElement,
847
- pageElement,
848
- objectResizable,
849
- heightBuilder,
900
+ ...options.leaveTracking,
850
901
  schema: tpaas_schemas_1.LeavePage.object.objectType,
851
902
  trackMethod: leavePageCallback,
852
903
  });
@@ -865,18 +916,14 @@ class Tracker {
865
916
  const event = (0, tpaas_event_builder_1.buildViewSportsPageEvent)(input, dependencies);
866
917
  const result = this.sendTpaasEvent(event);
867
918
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
868
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
869
- const leaveSportsPageCallback = (leave) => {
870
- this.trackLeaveSportsPage({
919
+ const leaveSportsPageCallback = async (leave) => {
920
+ await this.trackLeaveSportsPage({
871
921
  leave,
872
922
  ...input,
873
923
  });
874
924
  };
875
925
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
876
- objectElement,
877
- pageElement,
878
- objectResizable,
879
- heightBuilder,
926
+ ...options.leaveTracking,
880
927
  schema: tpaas_schemas_1.LeaveSportsPage.object.objectType,
881
928
  trackMethod: leaveSportsPageCallback,
882
929
  });
@@ -916,18 +963,14 @@ class Tracker {
916
963
  const event = (0, tpaas_event_builder_1.buildViewArticleEvent)(input, dependencies);
917
964
  const result = this.sendTpaasEvent(event);
918
965
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
919
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
920
- const leaveArticleCallback = (leave) => {
921
- this.trackLeaveArticle({
966
+ const leaveArticleCallback = async (leave) => {
967
+ await this.trackLeaveArticle({
922
968
  leave,
923
969
  ...input,
924
970
  });
925
971
  };
926
972
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
927
- objectElement,
928
- pageElement,
929
- heightBuilder,
930
- objectResizable,
973
+ ...options.leaveTracking,
931
974
  schema: tpaas_schemas_1.LeaveArticle.object.objectType,
932
975
  trackMethod: leaveArticleCallback,
933
976
  });
@@ -981,15 +1024,15 @@ class Tracker {
981
1024
  const event = (0, tpaas_event_builder_1.buildViewAudioPageEvent)(input, dependencies);
982
1025
  const result = this.sendTpaasEvent(event);
983
1026
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
984
- const { objectElement, pageElement, heightBuilder, objectResizable, leaveAudioBuilder } = options.leaveTracking;
985
- const leaveAudioPageCallback = (leave) => {
1027
+ const { leaveAudioBuilder, ...restLeaveTrackingOptions } = options.leaveTracking;
1028
+ const leaveAudioPageCallback = async (leave) => {
986
1029
  const leaveAudioInput = leaveAudioBuilder?.() ?? {
987
1030
  audioCompleted: 0,
988
1031
  audioStarted: 0,
989
1032
  maxPlaylistPosition: 0,
990
1033
  playlistPositionPercentage: 0,
991
1034
  };
992
- this.trackLeaveAudioPage({
1035
+ await this.trackLeaveAudioPage({
993
1036
  leave,
994
1037
  leaveAudio: {
995
1038
  ...leaveAudioInput,
@@ -1000,10 +1043,7 @@ class Tracker {
1000
1043
  });
1001
1044
  };
1002
1045
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1003
- objectElement,
1004
- pageElement,
1005
- heightBuilder,
1006
- objectResizable,
1046
+ ...restLeaveTrackingOptions,
1007
1047
  schema: tpaas_schemas_1.LeaveAudioPage.object.objectType,
1008
1048
  trackMethod: leaveAudioPageCallback,
1009
1049
  });
@@ -1022,24 +1062,29 @@ class Tracker {
1022
1062
  const event = (0, tpaas_event_builder_1.buildViewErrorEvent)(input, dependencies);
1023
1063
  const result = this.sendTpaasEvent(event);
1024
1064
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1025
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1026
- const leaveErrorCallback = (leave) => {
1027
- this.trackLeaveError({
1065
+ const leaveErrorCallback = async (leave) => {
1066
+ await this.trackLeaveError({
1028
1067
  leave,
1029
1068
  ...input,
1030
1069
  });
1031
1070
  };
1032
1071
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1033
- objectElement,
1034
- pageElement,
1035
- heightBuilder,
1036
- objectResizable,
1072
+ ...options.leaveTracking,
1037
1073
  schema: tpaas_schemas_1.LeaveError.object.objectType,
1038
1074
  trackMethod: leaveErrorCallback,
1039
1075
  });
1040
1076
  }
1041
1077
  return result;
1042
1078
  }
1079
+ /**
1080
+ * @param input
1081
+ * @category TPaaS Tracking
1082
+ */
1083
+ async trackImpressionAdSlot(input) {
1084
+ const dependencies = await this.prepareTpaasEvent();
1085
+ const event = (0, tpaas_event_builder_1.buildImpressionAdSlotEvent)(input, dependencies);
1086
+ return this.sendTpaasEvent(event);
1087
+ }
1043
1088
  /**
1044
1089
  * @param input
1045
1090
  * @category TPaaS Tracking
@@ -1097,18 +1142,14 @@ class Tracker {
1097
1142
  const event = (0, tpaas_event_builder_1.buildViewFrontpageEvent)(input, dependencies);
1098
1143
  const result = this.sendTpaasEvent(event);
1099
1144
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1100
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1101
- const leaveFrontpageCallback = (leave) => {
1102
- this.trackLeaveFrontpage({
1145
+ const leaveFrontpageCallback = async (leave) => {
1146
+ await this.trackLeaveFrontpage({
1103
1147
  leave,
1104
1148
  ...input,
1105
1149
  });
1106
1150
  };
1107
1151
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1108
- objectElement,
1109
- pageElement,
1110
- objectResizable,
1111
- heightBuilder,
1152
+ ...options.leaveTracking,
1112
1153
  schema: tpaas_schemas_1.LeaveFrontpage.object.objectType,
1113
1154
  trackMethod: leaveFrontpageCallback,
1114
1155
  });
@@ -1127,18 +1168,14 @@ class Tracker {
1127
1168
  const event = (0, tpaas_event_builder_1.buildViewLandingpageEvent)(input, dependencies);
1128
1169
  const result = this.sendTpaasEvent(event);
1129
1170
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1130
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1131
- const leaveLandingpageCallback = (leave) => {
1132
- this.trackLeaveLandingpage({
1171
+ const leaveLandingpageCallback = async (leave) => {
1172
+ await this.trackLeaveLandingpage({
1133
1173
  leave,
1134
1174
  ...input,
1135
1175
  });
1136
1176
  };
1137
1177
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1138
- objectElement,
1139
- pageElement,
1140
- heightBuilder,
1141
- objectResizable,
1178
+ ...options.leaveTracking,
1142
1179
  schema: tpaas_schemas_1.LeaveLandingpage.object.objectType,
1143
1180
  trackMethod: leaveLandingpageCallback,
1144
1181
  });
@@ -1157,18 +1194,18 @@ class Tracker {
1157
1194
  const event = (0, tpaas_event_builder_1.buildViewListingEvent)(input, dependencies);
1158
1195
  const result = this.sendTpaasEvent(event);
1159
1196
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1160
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1161
- const leaveListingCallback = (leave) => {
1162
- this.trackLeaveListing({
1197
+ const leaveListingCallback = async (leave) => {
1198
+ await this.trackLeaveListing({
1163
1199
  leave,
1164
1200
  ...input,
1201
+ object: {
1202
+ ...input.object,
1203
+ listingType: 'Tag,Story,Section,Search,Author,Other', // TODO: listingType is broken for this catalog. will be fixed in the next one
1204
+ },
1165
1205
  });
1166
1206
  };
1167
1207
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1168
- objectElement,
1169
- pageElement,
1170
- heightBuilder,
1171
- objectResizable,
1208
+ ...options.leaveTracking,
1172
1209
  schema: tpaas_schemas_1.LeaveListing.object.objectType,
1173
1210
  trackMethod: leaveListingCallback,
1174
1211
  });
@@ -1187,18 +1224,14 @@ class Tracker {
1187
1224
  const event = (0, tpaas_event_builder_1.buildViewLockedArticleEvent)(input, dependencies);
1188
1225
  const result = this.sendTpaasEvent(event);
1189
1226
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1190
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1191
- const leaveLockedArticleCallback = (leave) => {
1192
- this.trackLeaveLockedArticle({
1227
+ const leaveLockedArticleCallback = async (leave) => {
1228
+ await this.trackLeaveLockedArticle({
1193
1229
  leave,
1194
1230
  ...input,
1195
1231
  });
1196
1232
  };
1197
1233
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1198
- objectElement,
1199
- pageElement,
1200
- objectResizable,
1201
- heightBuilder,
1234
+ ...options.leaveTracking,
1202
1235
  schema: tpaas_schemas_1.LeaveLockedArticle.object.objectType,
1203
1236
  trackMethod: leaveLockedArticleCallback,
1204
1237
  });
@@ -1217,18 +1250,14 @@ class Tracker {
1217
1250
  const event = (0, tpaas_event_builder_1.buildViewLockedAudioPageEvent)(input, dependencies);
1218
1251
  const result = this.sendTpaasEvent(event);
1219
1252
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1220
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1221
- const leaveLockedAudioPageCallback = (leave) => {
1222
- this.trackLeaveLockedAudioPage({
1253
+ const leaveLockedAudioPageCallback = async (leave) => {
1254
+ await this.trackLeaveLockedAudioPage({
1223
1255
  leave,
1224
1256
  ...input,
1225
1257
  });
1226
1258
  };
1227
1259
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1228
- objectElement,
1229
- pageElement,
1230
- heightBuilder,
1231
- objectResizable,
1260
+ ...options.leaveTracking,
1232
1261
  schema: tpaas_schemas_1.LeaveLockedAudioPage.object.objectType,
1233
1262
  trackMethod: leaveLockedAudioPageCallback,
1234
1263
  });
@@ -1247,18 +1276,14 @@ class Tracker {
1247
1276
  const event = (0, tpaas_event_builder_1.buildViewLockedVideoPageEvent)(input, dependencies);
1248
1277
  const result = this.sendTpaasEvent(event);
1249
1278
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1250
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1251
- const leaveLockedVideoPageCallback = (leave) => {
1252
- this.trackLeaveLockedVideoPage({
1279
+ const leaveLockedVideoPageCallback = async (leave) => {
1280
+ await this.trackLeaveLockedVideoPage({
1253
1281
  leave,
1254
1282
  ...input,
1255
1283
  });
1256
1284
  };
1257
1285
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1258
- objectElement,
1259
- pageElement,
1260
- heightBuilder,
1261
- objectResizable,
1286
+ ...options.leaveTracking,
1262
1287
  schema: tpaas_schemas_1.LeaveLockedVideoPage.object.objectType,
1263
1288
  trackMethod: leaveLockedVideoPageCallback,
1264
1289
  });
@@ -1314,10 +1339,10 @@ class Tracker {
1314
1339
  const event = (0, tpaas_event_builder_1.buildViewVideoPageEvent)(input, dependencies);
1315
1340
  const result = this.sendTpaasEvent(event);
1316
1341
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1317
- const { objectElement, pageElement, heightBuilder, objectResizable, leaveStoriesBuilder } = options.leaveTracking;
1318
- const leaveVideoCallback = (leave) => {
1342
+ const { leaveStoriesBuilder, ...restLeaveTrackingOptions } = options.leaveTracking;
1343
+ const leaveVideoCallback = async (leave) => {
1319
1344
  const leaveStoriesInput = leaveStoriesBuilder?.();
1320
- this.trackLeaveVideoPage({
1345
+ await this.trackLeaveVideoPage({
1321
1346
  leave,
1322
1347
  leaveStories: leaveStoriesInput && {
1323
1348
  ...leaveStoriesInput,
@@ -1328,10 +1353,7 @@ class Tracker {
1328
1353
  });
1329
1354
  };
1330
1355
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1331
- objectElement,
1332
- pageElement,
1333
- heightBuilder,
1334
- objectResizable,
1356
+ ...restLeaveTrackingOptions,
1335
1357
  schema: tpaas_schemas_1.LeaveVideoPage.object.objectType,
1336
1358
  trackMethod: leaveVideoCallback,
1337
1359
  });
@@ -1350,18 +1372,14 @@ class Tracker {
1350
1372
  const event = (0, tpaas_event_builder_1.buildViewWeatherEvent)(input, dependencies);
1351
1373
  const result = this.sendTpaasEvent(event);
1352
1374
  if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1353
- const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1354
- const leaveWeatherCallback = (leave) => {
1355
- this.trackLeaveWeather({
1375
+ const leaveWeatherCallback = async (leave) => {
1376
+ await this.trackLeaveWeather({
1356
1377
  leave,
1357
1378
  ...input,
1358
1379
  });
1359
1380
  };
1360
1381
  (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1361
- objectElement,
1362
- pageElement,
1363
- heightBuilder,
1364
- objectResizable,
1382
+ ...options.leaveTracking,
1365
1383
  schema: tpaas_schemas_1.LeaveWeather.object.objectType,
1366
1384
  trackMethod: leaveWeatherCallback,
1367
1385
  });
@@ -2200,8 +2218,8 @@ class Tracker {
2200
2218
  * with the added guarantee that a second Leave event will not be triggered if one already has been sent.
2201
2219
  * @category TPaaS Leave Tracking
2202
2220
  */
2203
- trackTpaasActiveLeave() {
2204
- (0, leaveTrackingTpaas_1.trackTpaasActiveLeave)();
2221
+ async trackTpaasActiveLeave() {
2222
+ await (0, leaveTrackingTpaas_1.trackTpaasActiveLeave)();
2205
2223
  }
2206
2224
  /**
2207
2225
  * Check if leave tracking is enabled (if an event will be sent when the user leaves the page)
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_PAGE_LEAVE_EVENT = exports.DEFAULT_ACTIVITY_DURATION = void 0;
4
- const DEFAULT_ACTIVITY_DURATION = () => ({
5
- value: 0,
6
- interval: undefined,
7
- timeSinceLastActivity: 0,
8
- });
9
- exports.DEFAULT_ACTIVITY_DURATION = DEFAULT_ACTIVITY_DURATION;
3
+ exports.ACTIVITY_DURATION_LIMIT_MS = exports.DEFAULT_PAGE_LEAVE_EVENT = void 0;
10
4
  const DEFAULT_PAGE_LEAVE_EVENT = () => ({
11
5
  objectViewPercentage: 0,
12
6
  maxObjectViewPercentage: 0,
@@ -16,3 +10,4 @@ const DEFAULT_PAGE_LEAVE_EVENT = () => ({
16
10
  maxPageScrollPosition: 0,
17
11
  });
18
12
  exports.DEFAULT_PAGE_LEAVE_EVENT = DEFAULT_PAGE_LEAVE_EVENT;
13
+ exports.ACTIVITY_DURATION_LIMIT_MS = 30000;