@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.
- package/dist/cjs/Tracker.js +137 -119
- package/dist/cjs/leaveTrackingTpaas/constants.js +2 -7
- package/dist/cjs/leaveTrackingTpaas/index.js +52 -40
- package/dist/cjs/tracker-proxy/consts.js +3 -0
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/visibility-observer/index.js +9 -7
- package/dist/cjs/wrapper/types/event.js +5 -0
- package/dist/ejs/Tracker.js +138 -120
- package/dist/ejs/leaveTrackingTpaas/constants.js +1 -5
- package/dist/ejs/leaveTrackingTpaas/index.js +53 -41
- package/dist/ejs/tracker-proxy/consts.js +3 -0
- package/dist/ejs/version.js +1 -1
- package/dist/ejs/visibility-observer/index.js +9 -7
- package/dist/ejs/wrapper/types/event.js +4 -1
- package/dist/types/Tracker.d.ts +55 -20
- package/dist/types/index.d.ts +1 -1
- package/dist/types/leaveTrackingTpaas/constants.d.ts +1 -5
- package/dist/types/leaveTrackingTpaas/index.d.ts +6 -6
- package/dist/types/leaveTrackingTpaas/types.d.ts +1 -9
- package/dist/types/tracker-proxy/consts.d.ts +1 -1
- package/dist/types/types.d.ts +19 -13
- package/dist/types/version.d.ts +1 -1
- package/dist/types/visibility-observer/index.d.ts +6 -1
- package/dist/types/wrapper/types/event.d.ts +3 -1
- package/node_modules/@schibsted/pulse-utils/package.json +1 -1
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders.js +5 -1
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/guards.js +7 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/index.js +3 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders.js +5 -2
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/guards.js +4 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/index.js +1 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/index.d.ts +792 -166
- package/node_modules/@schibsted/tpaas-event-builder/package.json +1 -1
- package/node_modules/@schibsted/tpaas-schemas/dist/cjs/constants.js +66 -57
- package/node_modules/@schibsted/tpaas-schemas/dist/ejs/constants.js +64 -55
- package/node_modules/@schibsted/tpaas-schemas/dist/index.d.ts +836 -219
- package/package.json +4 -4
package/dist/cjs/Tracker.js
CHANGED
|
@@ -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
|
-
|
|
179
|
-
|
|
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:
|
|
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.
|
|
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
|
-
|
|
204
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
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
|
-
|
|
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
|
|
839
|
-
|
|
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
|
-
|
|
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
|
|
869
|
-
|
|
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
|
-
|
|
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
|
|
920
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
|
1026
|
-
|
|
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
|
-
|
|
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
|
|
1101
|
-
|
|
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
|
-
|
|
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
|
|
1131
|
-
|
|
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
|
-
|
|
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
|
|
1161
|
-
|
|
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
|
-
|
|
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
|
|
1191
|
-
|
|
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
|
-
|
|
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
|
|
1221
|
-
|
|
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
|
-
|
|
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
|
|
1251
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
|
1354
|
-
|
|
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
|
-
|
|
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.
|
|
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;
|