@schibsted/pulse-sdk 8.0.0-alpha.16 → 8.0.0-alpha.18
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/EventBus/EventBus.js +146 -0
- package/dist/cjs/Tracker.js +2499 -0
- package/dist/cjs/Tracker.test-d.js +76 -0
- package/dist/cjs/app-integration.js +40 -0
- package/dist/cjs/builders/actor.js +60 -0
- package/dist/cjs/builders/consent-manager.js +134 -0
- package/dist/cjs/builders/consents.js +149 -0
- package/dist/cjs/builders/device-browser.js +89 -0
- package/dist/cjs/builders/device-node.js +63 -0
- package/dist/cjs/builders/device.js +23 -0
- package/dist/cjs/builders/events-anonymous-browser.js +6 -0
- package/dist/cjs/builders/events-anonymous-node.js +88 -0
- package/dist/cjs/builders/events-anonymous.js +17 -0
- package/dist/cjs/builders/events-browser.js +8 -0
- package/dist/cjs/builders/events-node.js +127 -0
- package/dist/cjs/builders/events.js +17 -0
- package/dist/cjs/builders/experimentMetadata.js +25 -0
- package/dist/cjs/builders/experiments.js +32 -0
- package/dist/cjs/builders/index.js +52 -0
- package/dist/cjs/builders/location.js +38 -0
- package/dist/cjs/builders/objects/objects-anonymous-browser.js +36 -0
- package/dist/cjs/builders/objects/objects-anonymous-node.js +95 -0
- package/dist/cjs/builders/objects/objects-anonymous.js +23 -0
- package/dist/cjs/builders/objects/objects-browser.js +36 -0
- package/dist/cjs/builders/objects/objects-node.js +126 -0
- package/dist/cjs/builders/objects/objects.js +23 -0
- package/dist/cjs/builders/objects/utils.js +23 -0
- package/dist/cjs/builders/origin-browser.js +28 -0
- package/dist/cjs/builders/origin-node.js +29 -0
- package/dist/cjs/builders/origin.js +23 -0
- package/dist/cjs/builders/provider.js +24 -0
- package/dist/cjs/builders/session-browser.js +97 -0
- package/dist/cjs/builders/session-node.js +9 -0
- package/dist/cjs/builders/session.js +23 -0
- package/dist/cjs/builders/tracker-browser.js +34 -0
- package/dist/cjs/builders/tracker-node.js +22 -0
- package/dist/cjs/builders/trackerBuilder.js +23 -0
- package/dist/cjs/config-browser.js +26 -0
- package/dist/cjs/config.js +9 -0
- package/dist/cjs/createPulseTracker.js +50 -0
- package/dist/cjs/defer.js +20 -0
- package/dist/cjs/getPulseTracker.js +74 -0
- package/dist/cjs/identity/actor.js +60 -0
- package/dist/cjs/identity/advertising.js +62 -0
- package/dist/cjs/identity/cis.js +66 -0
- package/dist/cjs/identity/device.js +20 -0
- package/dist/cjs/identity/index.js +20 -0
- package/dist/cjs/index.js +57 -0
- package/dist/cjs/leaveTracking/constants.js +26 -0
- package/dist/cjs/leaveTracking/index.js +368 -0
- package/dist/cjs/leaveTracking/types.js +19 -0
- package/dist/cjs/leaveTrackingTpaas/constants.js +18 -0
- package/dist/cjs/leaveTrackingTpaas/index.js +341 -0
- package/dist/cjs/leaveTrackingTpaas/types.js +19 -0
- package/dist/cjs/network-browser.js +35 -0
- package/dist/cjs/network.js +15 -0
- package/dist/cjs/remoteConfig/index.js +124 -0
- package/dist/cjs/tracker-proxy/consts.js +72 -0
- package/dist/cjs/tracker-proxy/proxy-provider.js +68 -0
- package/dist/cjs/types.js +2 -0
- package/dist/cjs/version.json +1 -0
- package/dist/cjs/visibility-observer/index.js +101 -0
- package/dist/cjs/warnOnce.js +11 -0
- package/dist/cjs/wrapper/engagement/ui-element/event-builder.js +21 -0
- package/dist/cjs/wrapper/engagement/ui-element/types.js +2 -0
- package/dist/cjs/wrapper/types/base-event.js +2 -0
- package/dist/cjs/wrapper/types/engagement-event.js +2 -0
- package/dist/cjs/wrapper/types/event.js +2 -0
- package/dist/cjs/wrapper/types/index.js +19 -0
- package/dist/cjs/wrapper/types/utils.js +2 -0
- package/dist/cjs/wrapper/utils/get-navigation-type.js +32 -0
- package/dist/cjs/wrapper/utils/page-from-page-view.js +9 -0
- package/dist/cjs/wrapper/view/article/event-builder.js +19 -0
- package/dist/cjs/wrapper/view/article/types.js +2 -0
- package/dist/cjs/wrapper/view/frontpage/event-builder.js +16 -0
- package/dist/cjs/wrapper/view/frontpage/types.js +2 -0
- package/dist/cjs/wrapper/view/listing/event-builder.js +14 -0
- package/dist/cjs/wrapper/view/listing/types.js +2 -0
- package/dist/cjs/wrapper/view/loginposter/event-builder.js +11 -0
- package/dist/cjs/wrapper/view/loginposter/types.js +2 -0
- package/dist/cjs/wrapper/view/page/event-builder.js +18 -0
- package/dist/cjs/wrapper/view/page/types.js +2 -0
- package/dist/cjs/wrapper/view/salesposter/event-builder.js +18 -0
- package/dist/cjs/wrapper/view/salesposter/types.js +2 -0
- package/dist/cjs/wrapper/view/ui-element/event-builder.js +15 -0
- package/dist/cjs/wrapper/view/ui-element/types.js +2 -0
- package/dist/ejs/EventBus/EventBus.js +140 -0
- package/dist/ejs/Tracker.js +2455 -0
- package/dist/ejs/Tracker.test-d.js +71 -0
- package/dist/ejs/app-integration.js +33 -0
- package/dist/ejs/builders/actor.js +53 -0
- package/dist/ejs/builders/consent-manager.js +125 -0
- package/dist/ejs/builders/consents.js +138 -0
- package/dist/ejs/builders/device-browser.js +69 -0
- package/dist/ejs/builders/device-node.js +57 -0
- package/dist/ejs/builders/device.js +2 -0
- package/dist/ejs/builders/events-anonymous-browser.js +1 -0
- package/dist/ejs/builders/events-anonymous-node.js +48 -0
- package/dist/ejs/builders/events-anonymous.js +1 -0
- package/dist/ejs/builders/events-browser.js +1 -0
- package/dist/ejs/builders/events-node.js +84 -0
- package/dist/ejs/builders/events.js +1 -0
- package/dist/ejs/builders/experimentMetadata.js +21 -0
- package/dist/ejs/builders/experiments.js +27 -0
- package/dist/ejs/builders/index.js +12 -0
- package/dist/ejs/builders/location.js +34 -0
- package/dist/ejs/builders/objects/objects-anonymous-browser.js +14 -0
- package/dist/ejs/builders/objects/objects-anonymous-node.js +90 -0
- package/dist/ejs/builders/objects/objects-anonymous.js +2 -0
- package/dist/ejs/builders/objects/objects-browser.js +14 -0
- package/dist/ejs/builders/objects/objects-node.js +121 -0
- package/dist/ejs/builders/objects/objects.js +2 -0
- package/dist/ejs/builders/objects/utils.js +20 -0
- package/dist/ejs/builders/origin-browser.js +6 -0
- package/dist/ejs/builders/origin-node.js +24 -0
- package/dist/ejs/builders/origin.js +2 -0
- package/dist/ejs/builders/provider.js +18 -0
- package/dist/ejs/builders/session-browser.js +90 -0
- package/dist/ejs/builders/session-node.js +4 -0
- package/dist/ejs/builders/session.js +2 -0
- package/dist/ejs/builders/tracker-browser.js +13 -0
- package/dist/ejs/builders/tracker-node.js +14 -0
- package/dist/ejs/builders/trackerBuilder.js +2 -0
- package/dist/ejs/config-browser.js +23 -0
- package/dist/ejs/config.js +6 -0
- package/dist/ejs/createPulseTracker.js +44 -0
- package/dist/ejs/defer.js +17 -0
- package/dist/ejs/getPulseTracker.js +71 -0
- package/dist/ejs/identity/actor.js +51 -0
- package/dist/ejs/identity/advertising.js +57 -0
- package/dist/ejs/identity/cis.js +58 -0
- package/dist/ejs/identity/device.js +17 -0
- package/dist/ejs/identity/index.js +4 -0
- package/dist/ejs/index.js +9 -0
- package/dist/ejs/leaveTracking/constants.js +19 -0
- package/dist/ejs/leaveTracking/index.js +319 -0
- package/dist/ejs/leaveTracking/types.js +16 -0
- package/dist/ejs/leaveTrackingTpaas/constants.js +13 -0
- package/dist/ejs/leaveTrackingTpaas/index.js +291 -0
- package/dist/ejs/leaveTrackingTpaas/types.js +16 -0
- package/dist/ejs/network-browser.js +32 -0
- package/dist/ejs/network.js +12 -0
- package/dist/ejs/remoteConfig/index.js +111 -0
- package/dist/ejs/tracker-proxy/consts.js +68 -0
- package/dist/ejs/tracker-proxy/proxy-provider.js +62 -0
- package/dist/ejs/types.js +1 -0
- package/dist/ejs/version.json +1 -0
- package/dist/ejs/visibility-observer/index.js +97 -0
- package/dist/ejs/warnOnce.js +9 -0
- package/dist/ejs/wrapper/engagement/ui-element/event-builder.js +17 -0
- package/dist/ejs/wrapper/engagement/ui-element/types.js +1 -0
- package/dist/ejs/wrapper/types/base-event.js +1 -0
- package/dist/ejs/wrapper/types/engagement-event.js +1 -0
- package/dist/ejs/wrapper/types/event.js +1 -0
- package/dist/ejs/wrapper/types/index.js +3 -0
- package/dist/ejs/wrapper/types/utils.js +1 -0
- package/dist/ejs/wrapper/utils/get-navigation-type.js +29 -0
- package/dist/ejs/wrapper/utils/page-from-page-view.js +6 -0
- package/dist/ejs/wrapper/view/article/event-builder.js +15 -0
- package/dist/ejs/wrapper/view/article/types.js +1 -0
- package/dist/ejs/wrapper/view/frontpage/event-builder.js +12 -0
- package/dist/ejs/wrapper/view/frontpage/types.js +1 -0
- package/dist/ejs/wrapper/view/listing/event-builder.js +10 -0
- package/dist/ejs/wrapper/view/listing/types.js +1 -0
- package/dist/ejs/wrapper/view/loginposter/event-builder.js +7 -0
- package/dist/ejs/wrapper/view/loginposter/types.js +1 -0
- package/dist/ejs/wrapper/view/page/event-builder.js +14 -0
- package/dist/ejs/wrapper/view/page/types.js +1 -0
- package/dist/ejs/wrapper/view/salesposter/event-builder.js +14 -0
- package/dist/ejs/wrapper/view/salesposter/types.js +1 -0
- package/dist/ejs/wrapper/view/ui-element/event-builder.js +11 -0
- package/dist/ejs/wrapper/view/ui-element/types.js +1 -0
- package/dist/types/EventBus/EventBus.d.ts +106 -0
- package/dist/types/Tracker.d.ts +1418 -0
- package/dist/types/Tracker.test-d.d.ts +1 -0
- package/dist/types/app-integration.d.ts +10 -0
- package/dist/types/builders/actor.d.ts +39 -0
- package/dist/types/builders/consent-manager.d.ts +49 -0
- package/dist/types/builders/consents.d.ts +107 -0
- package/dist/types/builders/device-browser.d.ts +6 -0
- package/dist/types/builders/device-node.d.ts +65 -0
- package/dist/types/builders/device.d.ts +2 -0
- package/dist/types/builders/events-anonymous-browser.d.ts +1 -0
- package/dist/types/builders/events-anonymous-node.d.ts +82 -0
- package/dist/types/builders/events-anonymous.d.ts +1 -0
- package/dist/types/builders/events-browser.d.ts +1 -0
- package/dist/types/builders/events-node.d.ts +130 -0
- package/dist/types/builders/events.d.ts +1 -0
- package/dist/types/builders/experimentMetadata.d.ts +25 -0
- package/dist/types/builders/experiments.d.ts +24 -0
- package/dist/types/builders/index.d.ts +23 -0
- package/dist/types/builders/location.d.ts +34 -0
- package/dist/types/builders/objects/objects-anonymous-browser.d.ts +11 -0
- package/dist/types/builders/objects/objects-anonymous-node.d.ts +52 -0
- package/dist/types/builders/objects/objects-anonymous.d.ts +2 -0
- package/dist/types/builders/objects/objects-browser.d.ts +11 -0
- package/dist/types/builders/objects/objects-node.d.ts +60 -0
- package/dist/types/builders/objects/objects.d.ts +2 -0
- package/dist/types/builders/objects/utils.d.ts +1 -0
- package/dist/types/builders/origin-browser.d.ts +5 -0
- package/dist/types/builders/origin-node.d.ts +18 -0
- package/dist/types/builders/origin.d.ts +2 -0
- package/dist/types/builders/provider.d.ts +14 -0
- package/dist/types/builders/session-browser.d.ts +20 -0
- package/dist/types/builders/session-node.d.ts +3 -0
- package/dist/types/builders/session.d.ts +2 -0
- package/dist/types/builders/tracker-browser.d.ts +2 -0
- package/dist/types/builders/tracker-node.d.ts +14 -0
- package/dist/types/builders/trackerBuilder.d.ts +2 -0
- package/dist/types/config-browser.d.ts +23 -0
- package/dist/types/config.d.ts +6 -0
- package/dist/types/createPulseTracker.d.ts +21 -0
- package/dist/types/defer.d.ts +28 -0
- package/dist/types/getPulseTracker.d.ts +59 -0
- package/dist/types/identity/actor.d.ts +28 -0
- package/dist/types/identity/advertising.d.ts +30 -0
- package/dist/types/identity/cis.d.ts +21 -0
- package/dist/types/identity/device.d.ts +12 -0
- package/dist/types/identity/index.d.ts +4 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/leaveTracking/constants.d.ts +26 -0
- package/dist/types/leaveTracking/index.d.ts +23 -0
- package/dist/types/leaveTracking/types.d.ts +78 -0
- package/dist/types/leaveTrackingTpaas/constants.d.ts +13 -0
- package/dist/types/leaveTrackingTpaas/index.d.ts +28 -0
- package/dist/types/leaveTrackingTpaas/types.d.ts +45 -0
- package/dist/types/network-browser.d.ts +5 -0
- package/dist/types/network.d.ts +4 -0
- package/dist/types/remoteConfig/index.d.ts +32 -0
- package/dist/types/tracker-proxy/consts.d.ts +45 -0
- package/dist/types/tracker-proxy/proxy-provider.d.ts +2 -0
- package/dist/types/types.d.ts +93 -0
- package/dist/types/visibility-observer/index.d.ts +38 -0
- package/dist/types/warnOnce.d.ts +2 -0
- package/dist/types/wrapper/engagement/ui-element/event-builder.d.ts +3 -0
- package/dist/types/wrapper/engagement/ui-element/types.d.ts +29 -0
- package/dist/types/wrapper/types/base-event.d.ts +74 -0
- package/dist/types/wrapper/types/engagement-event.d.ts +5 -0
- package/dist/types/wrapper/types/event.d.ts +41 -0
- package/dist/types/wrapper/types/index.d.ts +3 -0
- package/dist/types/wrapper/types/utils.d.ts +5 -0
- package/dist/types/wrapper/utils/get-navigation-type.d.ts +3 -0
- package/dist/types/wrapper/utils/page-from-page-view.d.ts +3 -0
- package/dist/types/wrapper/view/article/event-builder.d.ts +2 -0
- package/dist/types/wrapper/view/article/types.d.ts +27 -0
- package/dist/types/wrapper/view/frontpage/event-builder.d.ts +2 -0
- package/dist/types/wrapper/view/frontpage/types.d.ts +18 -0
- package/dist/types/wrapper/view/listing/event-builder.d.ts +2 -0
- package/dist/types/wrapper/view/listing/types.d.ts +27 -0
- package/dist/types/wrapper/view/loginposter/event-builder.d.ts +2 -0
- package/dist/types/wrapper/view/loginposter/types.d.ts +14 -0
- package/dist/types/wrapper/view/page/event-builder.d.ts +2 -0
- package/dist/types/wrapper/view/page/types.d.ts +16 -0
- package/dist/types/wrapper/view/salesposter/event-builder.d.ts +2 -0
- package/dist/types/wrapper/view/salesposter/types.d.ts +15 -0
- package/dist/types/wrapper/view/ui-element/event-builder.d.ts +3 -0
- package/dist/types/wrapper/view/ui-element/types.d.ts +28 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.d.ts +26 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.js +273 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.d.ts +10 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.js +7 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.d.ts +14 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.js +39 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.d.ts +4 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.js +12 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.d.ts +55 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.js +276 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.d.ts +36 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.js +87 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.d.ts +6 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.js +21 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.d.ts +24 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.js +3 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.d.ts +26 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.js +203 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.d.ts +10 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.js +4 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.d.ts +14 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.js +35 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.d.ts +4 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.js +3 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.d.ts +55 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.js +254 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.d.ts +36 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.js +50 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.d.ts +6 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.js +17 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.d.ts +24 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.js +2 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.js.map +1 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/cis-browser.d.ts +26 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/cis.d.ts +10 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/eventEmitter.d.ts +14 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/index.d.ts +4 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/pulse-cookie.d.ts +55 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/storage/pulseStorage.d.ts +36 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/storage/storage.d.ts +6 -0
- package/node_modules/@schibsted/pulse-cis-sync/dist/types/types.d.ts +24 -0
- package/node_modules/@schibsted/pulse-cis-sync/package.json +44 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/cookie-config.js +10 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/cookie.js +86 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/events.js +109 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/get.js +18 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/getRootDomain.js +54 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/index.js +38 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/merge.js +38 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/objects.js +34 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/omit.js +9 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/randomString.js +18 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/throttle.js +34 -0
- package/node_modules/@schibsted/pulse-utils/dist/cjs/webApi.js +21 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/cookie-config.js +7 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/cookie.js +81 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/events.js +103 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/get.js +15 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/getRootDomain.js +49 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/index.js +11 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/merge.js +35 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/objects.js +26 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/omit.js +6 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/randomString.js +15 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/throttle.js +31 -0
- package/node_modules/@schibsted/pulse-utils/dist/ejs/webApi.js +17 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/cookie-config.d.ts +7 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/cookie.d.ts +23 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/events.d.ts +17 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/get.d.ts +1 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/getRootDomain.d.ts +13 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/index.d.ts +11 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/merge.d.ts +4 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/objects.d.ts +6 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/omit.d.ts +3 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/randomString.d.ts +1 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/throttle.d.ts +3 -0
- package/node_modules/@schibsted/pulse-utils/dist/types/webApi.d.ts +10 -0
- package/node_modules/@schibsted/pulse-utils/package.json +36 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/anonymous.js +8 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/baseEvent.js +9 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/consents.js +15 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/device.js +211 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/experiments.js +11 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/navigationType.js +52 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/pageInfo.js +24 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/pageviewId.js +11 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/provider.js +12 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/referrer.js +19 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/session.js +114 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/time.js +15 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/trackerBuilder.js +15 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/user.js +26 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/utm.js +35 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders.js +264 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/index.js +17 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/types.js +2 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/anonymous.js +5 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/baseEvent.js +6 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/consents.js +12 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/device.js +174 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/experiments.js +7 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/navigationType.js +48 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/pageInfo.js +20 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/pageviewId.js +7 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/provider.js +9 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/referrer.js +15 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/session.js +108 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/time.js +11 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/trackerBuilder.js +11 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/user.js +22 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/utm.js +31 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders.js +209 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/index.js +1 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/types.js +1 -0
- package/node_modules/@schibsted/tpaas-event-builder/dist/index.d.ts +5171 -0
- package/node_modules/@schibsted/tpaas-event-builder/package.json +40 -0
- package/node_modules/@schibsted/tpaas-schemas/dist/cjs/constants.js +62 -1
- package/node_modules/@schibsted/tpaas-schemas/dist/ejs/constants.js +61 -0
- package/node_modules/@schibsted/tpaas-schemas/dist/index.d.ts +128 -0
- package/package.json +58 -13
- package/CHANGELOG.md +0 -1035
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -47
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.calculateScrollPosition = exports.calculateScrolledPixels = exports.resetTpaasViewedContent = void 0;
|
|
37
|
+
exports.addTpaasLeaveTracking = addTpaasLeaveTracking;
|
|
38
|
+
exports.leaveTpaasTrackingIsActive = leaveTpaasTrackingIsActive;
|
|
39
|
+
exports.removeTpaasLeaveTracking = removeTpaasLeaveTracking;
|
|
40
|
+
exports.updateTpaasLeaveTracking = updateTpaasLeaveTracking;
|
|
41
|
+
exports.trackTpaasActiveLeave = trackTpaasActiveLeave;
|
|
42
|
+
exports.trackTpaasLeave = trackTpaasLeave;
|
|
43
|
+
exports.getTpaasLeaveObject = getTpaasLeaveObject;
|
|
44
|
+
exports.updateTpaasViewedContent = updateTpaasViewedContent;
|
|
45
|
+
exports.addEventListeners = addEventListeners;
|
|
46
|
+
exports.removeEventListeners = removeEventListeners;
|
|
47
|
+
exports.shouldEnableLeaveTracking = shouldEnableLeaveTracking;
|
|
48
|
+
const pulse_utils_1 = require("@schibsted/pulse-utils");
|
|
49
|
+
const logger = __importStar(require("loglevel"));
|
|
50
|
+
const constants_1 = require("./constants");
|
|
51
|
+
const types_1 = require("./types");
|
|
52
|
+
let currentLeaveSchema;
|
|
53
|
+
let currentTrackMethod;
|
|
54
|
+
let leaveListeners = [];
|
|
55
|
+
let updateViewedContentListeners = [];
|
|
56
|
+
let activityListeners = [];
|
|
57
|
+
let resizeObserver = null;
|
|
58
|
+
let throttledUpdateFn = (0, pulse_utils_1.throttle)(() => undefined, 0);
|
|
59
|
+
let startTime = 0;
|
|
60
|
+
let activityDuration = (0, constants_1.DEFAULT_ACTIVITY_DURATION)();
|
|
61
|
+
let currentLeaveEvent = (0, constants_1.DEFAULT_PAGE_LEAVE_EVENT)();
|
|
62
|
+
let additionalHeightBuilder;
|
|
63
|
+
/*
|
|
64
|
+
Add leave tracking
|
|
65
|
+
*/
|
|
66
|
+
function addTpaasLeaveTracking({ objectElement, pageElement, schema, objectResizable, heightBuilder, trackMethod, }) {
|
|
67
|
+
function _addLeaveTracking() {
|
|
68
|
+
additionalHeightBuilder = heightBuilder;
|
|
69
|
+
addTpaasLeaveListeners();
|
|
70
|
+
addUpdateEventListeners(objectElement, pageElement || document.body, objectResizable);
|
|
71
|
+
startTime = resetTime();
|
|
72
|
+
currentLeaveSchema = schema;
|
|
73
|
+
currentTrackMethod = trackMethod;
|
|
74
|
+
logger.debug('addLeaveTracking:after:state', currentLeaveEvent);
|
|
75
|
+
}
|
|
76
|
+
if (!leaveTpaasTrackingIsActive()) {
|
|
77
|
+
// if leave tracking is not active, just start it
|
|
78
|
+
_addLeaveTracking();
|
|
79
|
+
}
|
|
80
|
+
else if (leaveTpaasTrackingIsActive() && currentLeaveSchema !== schema) {
|
|
81
|
+
// if leave tracking is active, but the schema has changed, reset and start it
|
|
82
|
+
removeTpaasLeaveTracking();
|
|
83
|
+
_addLeaveTracking();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
logger.warn(`addLeaveTracking was called while leave-tracking was already active for ${currentLeaveSchema}. Consider using updateLeaveTracking with resetProperties=false if you want to update the page/object element!`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function leaveTpaasTrackingIsActive() {
|
|
90
|
+
return !(leaveListeners.length === 0 && updateViewedContentListeners.length === 0 && activityListeners.length === 0);
|
|
91
|
+
}
|
|
92
|
+
/*
|
|
93
|
+
Remove page leave tracking
|
|
94
|
+
*/
|
|
95
|
+
function removeTpaasLeaveTracking() {
|
|
96
|
+
removeLeaveListeners();
|
|
97
|
+
removeUpdateEventListeners();
|
|
98
|
+
resetEventDefaults();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Update leave tracking
|
|
102
|
+
* @param objectElement new object element to track
|
|
103
|
+
* @param pageElement new page element to track
|
|
104
|
+
* @param resetProperties if ALL engagement properties should be reset (duration, scroll etc.)
|
|
105
|
+
*/
|
|
106
|
+
function updateTpaasLeaveTracking(objectElement, pageElement, resetProperties) {
|
|
107
|
+
if (updateViewedContentListeners.length > 0) {
|
|
108
|
+
removeUpdateEventListeners();
|
|
109
|
+
if (resetProperties) {
|
|
110
|
+
resetEventDefaults();
|
|
111
|
+
}
|
|
112
|
+
addUpdateEventListeners(objectElement, pageElement);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/*
|
|
116
|
+
Add event listeners to the relevant browser events
|
|
117
|
+
When the browser event triggers, we want to send the Leave event
|
|
118
|
+
with the event supplied by the user and the name of the triggered browser event
|
|
119
|
+
*/
|
|
120
|
+
function addTpaasLeaveListeners() {
|
|
121
|
+
const listeners = addEventListeners([types_1.BrowserEvents.BEFORE_UNLOAD, types_1.BrowserEvents.PAGE_HIDE, types_1.BrowserEvents.POP_STATE], () => trackTpaasLeave(), { capture: true });
|
|
122
|
+
const visibilityChangeListener = addEventListeners([types_1.BrowserEvents.VISIBILITY_CHANGE], () => {
|
|
123
|
+
if (document.visibilityState === 'hidden') {
|
|
124
|
+
trackTpaasLeave();
|
|
125
|
+
}
|
|
126
|
+
}, { capture: true });
|
|
127
|
+
leaveListeners.push(...listeners);
|
|
128
|
+
leaveListeners.push(...visibilityChangeListener);
|
|
129
|
+
}
|
|
130
|
+
/*
|
|
131
|
+
Remove all Leave event listeners
|
|
132
|
+
*/
|
|
133
|
+
function removeLeaveListeners() {
|
|
134
|
+
leaveListeners = removeEventListeners(leaveListeners, { capture: true });
|
|
135
|
+
}
|
|
136
|
+
function removeResizeObserver() {
|
|
137
|
+
if (resizeObserver) {
|
|
138
|
+
resizeObserver.disconnect();
|
|
139
|
+
resizeObserver = null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/*
|
|
143
|
+
Add handlers to update the default event.
|
|
144
|
+
The fields that are included can be found here: https://pages.github.schibsted.io/mpt-data/pulse-standard/#leave-article
|
|
145
|
+
*/
|
|
146
|
+
function addUpdateEventListeners(objectElement, pageElement, objectResizable = false) {
|
|
147
|
+
addUpdateViewedContentListeners(objectElement, pageElement, objectResizable);
|
|
148
|
+
addUpdateActivityDurationListeners();
|
|
149
|
+
}
|
|
150
|
+
/*
|
|
151
|
+
Remove all handlers for tracking viewed content and durations
|
|
152
|
+
*/
|
|
153
|
+
function removeUpdateEventListeners() {
|
|
154
|
+
updateViewedContentListeners = removeEventListeners(updateViewedContentListeners);
|
|
155
|
+
activityListeners = removeEventListeners(activityListeners);
|
|
156
|
+
removeResizeObserver();
|
|
157
|
+
}
|
|
158
|
+
/*
|
|
159
|
+
Reset the default leave tracking state.
|
|
160
|
+
*/
|
|
161
|
+
const resetEventDefaults = () => {
|
|
162
|
+
currentLeaveEvent = (0, constants_1.DEFAULT_PAGE_LEAVE_EVENT)();
|
|
163
|
+
startTime = resetTime();
|
|
164
|
+
activityDuration = resetActivityDuration();
|
|
165
|
+
};
|
|
166
|
+
const resetActivityDuration = () => {
|
|
167
|
+
clearInterval(activityDuration.interval);
|
|
168
|
+
return (0, constants_1.DEFAULT_ACTIVITY_DURATION)();
|
|
169
|
+
};
|
|
170
|
+
const resetTpaasViewedContent = () => {
|
|
171
|
+
currentLeaveEvent = (0, constants_1.DEFAULT_PAGE_LEAVE_EVENT)();
|
|
172
|
+
};
|
|
173
|
+
exports.resetTpaasViewedContent = resetTpaasViewedContent;
|
|
174
|
+
const resetTime = () => Date.now();
|
|
175
|
+
/*
|
|
176
|
+
Send a Leave event only if Page Leave tracking is active in the SDK
|
|
177
|
+
The event that is ultimately sent is a merge between the default event
|
|
178
|
+
saved in this file and the event supplied by the brand, with preference going
|
|
179
|
+
to the brand event. After the event has been sent, leave page tracking is removed
|
|
180
|
+
and must be explicitly re-added if needed.
|
|
181
|
+
*/
|
|
182
|
+
function trackTpaasActiveLeave() {
|
|
183
|
+
if (leaveTpaasTrackingIsActive()) {
|
|
184
|
+
trackTpaasLeave();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/*
|
|
188
|
+
Send a Leave event regardless of whether Page Leave tracking is active in the SDK
|
|
189
|
+
The event that is ultimately sent is a merge between the default event
|
|
190
|
+
saved in this file and the event supplied by the brand, with preference going
|
|
191
|
+
to the brand event. After the event has been sent, leave page tracking is removed
|
|
192
|
+
and must be explicitly re-added if needed.
|
|
193
|
+
*/
|
|
194
|
+
function trackTpaasLeave() {
|
|
195
|
+
const leave = getTpaasLeaveObject();
|
|
196
|
+
currentTrackMethod(leave);
|
|
197
|
+
removeTpaasLeaveTracking();
|
|
198
|
+
}
|
|
199
|
+
function getTpaasLeaveObject() {
|
|
200
|
+
const endTime = Date.now();
|
|
201
|
+
const duration = endTime - startTime;
|
|
202
|
+
const leave = {
|
|
203
|
+
durationMs: duration,
|
|
204
|
+
activityDurationMs: activityDuration.value,
|
|
205
|
+
...currentLeaveEvent,
|
|
206
|
+
};
|
|
207
|
+
logger.debug('trackTpaasLeave: event', leave);
|
|
208
|
+
return leave;
|
|
209
|
+
}
|
|
210
|
+
/*
|
|
211
|
+
Add listeners to update the viewed content fields in the default event
|
|
212
|
+
We listen to 'scroll' and 'resize' browser events
|
|
213
|
+
*/
|
|
214
|
+
function addUpdateViewedContentListeners(objectElement, pageElement, objectResizable) {
|
|
215
|
+
updateTpaasViewedContent(objectElement, pageElement);
|
|
216
|
+
throttledUpdateFn = (0, pulse_utils_1.throttle)(() => updateTpaasViewedContent(objectElement, pageElement), 500);
|
|
217
|
+
updateViewedContentListeners = addEventListeners([types_1.BrowserEvents.SCROLL, types_1.BrowserEvents.RESIZE], throttledUpdateFn);
|
|
218
|
+
if (objectResizable) {
|
|
219
|
+
if (!resizeObserver) {
|
|
220
|
+
resizeObserver = new ResizeObserver(() => {
|
|
221
|
+
(0, exports.resetTpaasViewedContent)();
|
|
222
|
+
throttledUpdateFn();
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
resizeObserver.observe(objectElement);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/*
|
|
229
|
+
Update the viewed content fields that are used in the default event.
|
|
230
|
+
The includes fields are:
|
|
231
|
+
{pageScrollPosition} The absolute scroll position on the page in pixels.
|
|
232
|
+
{maxPageScrollPosition} The maximum scroll position the user has been on in pixels.
|
|
233
|
+
{objectViewPercentage} The relative scroll position of the supplied DOM element in pixels.
|
|
234
|
+
{maxObjectViewPercentage} The maximum relative scroll position of the supplied DOM element in pixels.
|
|
235
|
+
{pageViewPercentage} The relative scroll position of the user in %.
|
|
236
|
+
{maxPageViewPercentage} The maximum relative scroll position the user has seen in %.
|
|
237
|
+
*/
|
|
238
|
+
function updateTpaasViewedContent(objectElement, pageElement) {
|
|
239
|
+
const { totalHeight: additionalTotalHeight, viewedHeight: additionalViewedHeight } = (0, pulse_utils_1.isFunction)(additionalHeightBuilder)
|
|
240
|
+
? additionalHeightBuilder()
|
|
241
|
+
: { totalHeight: 0, viewedHeight: 0 };
|
|
242
|
+
const objectScrolledPixels = (0, exports.calculateScrolledPixels)(objectElement) + additionalViewedHeight;
|
|
243
|
+
const pageScrolledPixels = (0, exports.calculateScrolledPixels)(pageElement) + additionalViewedHeight;
|
|
244
|
+
const pageScrollPosition = (0, exports.calculateScrollPosition)(pageElement) + additionalViewedHeight;
|
|
245
|
+
const maxPageScrollPosition = Math.max(pageScrollPosition, Number(currentLeaveEvent.maxPageScrollPosition));
|
|
246
|
+
const objectViewPercentage = calculateViewPercentage(objectScrolledPixels, objectElement.scrollHeight + additionalTotalHeight);
|
|
247
|
+
const maxObjectViewPercentage = Math.max(objectViewPercentage, Number(currentLeaveEvent.maxObjectViewPercentage));
|
|
248
|
+
const pageViewPercentage = calculateViewPercentage(pageScrolledPixels, pageElement.scrollHeight + additionalTotalHeight);
|
|
249
|
+
const maxPageViewPercentage = Math.max(pageViewPercentage, Number(currentLeaveEvent.maxPageViewPercentage));
|
|
250
|
+
logger.debug('updateViewedContent:before:engagement', { ...currentLeaveEvent });
|
|
251
|
+
currentLeaveEvent = {
|
|
252
|
+
pageScrollPosition,
|
|
253
|
+
maxPageScrollPosition,
|
|
254
|
+
objectViewPercentage,
|
|
255
|
+
maxObjectViewPercentage,
|
|
256
|
+
pageViewPercentage,
|
|
257
|
+
maxPageViewPercentage,
|
|
258
|
+
};
|
|
259
|
+
logger.debug('updateViewedContent:after:engagement', { ...currentLeaveEvent });
|
|
260
|
+
}
|
|
261
|
+
const calculateScrolledPixels = (element) => {
|
|
262
|
+
const rect = element.getBoundingClientRect();
|
|
263
|
+
const scrolledPixels = pulse_utils_1.isBrowser ? element.scrollHeight - rect.bottom + window.innerHeight : 0;
|
|
264
|
+
if (scrolledPixels <= 0) {
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
return Math.min(scrolledPixels, element.scrollHeight);
|
|
268
|
+
};
|
|
269
|
+
exports.calculateScrolledPixels = calculateScrolledPixels;
|
|
270
|
+
const calculateScrollPosition = (element) => Math.abs(Math.min(element.getBoundingClientRect().top, 0));
|
|
271
|
+
exports.calculateScrollPosition = calculateScrollPosition;
|
|
272
|
+
/*
|
|
273
|
+
Track the user's activity duration on the page.
|
|
274
|
+
The activity duration is the active time the user spends on the page.
|
|
275
|
+
Active means less than 30 seconds since the user triggered one of the
|
|
276
|
+
'mousedown', 'mousemove', 'keydown', 'scroll' and/or 'touchstart' browser events.
|
|
277
|
+
*/
|
|
278
|
+
function addUpdateActivityDurationListeners() {
|
|
279
|
+
if (activityDuration.interval !== undefined) {
|
|
280
|
+
// If the interval is already set, do not set it again
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const interval = 1000;
|
|
284
|
+
const activityTimeout = 30 * 1000;
|
|
285
|
+
activityDuration.interval = window.setInterval(() => {
|
|
286
|
+
activityDuration.timeSinceLastActivity += interval;
|
|
287
|
+
if (activityDuration.timeSinceLastActivity < activityTimeout) {
|
|
288
|
+
activityDuration.value += interval;
|
|
289
|
+
}
|
|
290
|
+
}, interval);
|
|
291
|
+
const activityEvents = [
|
|
292
|
+
types_1.BrowserEvents.SCROLL,
|
|
293
|
+
types_1.BrowserEvents.MOUSEDOWN,
|
|
294
|
+
types_1.BrowserEvents.MOUSEMOVE,
|
|
295
|
+
types_1.BrowserEvents.KEYDOWN,
|
|
296
|
+
types_1.BrowserEvents.TOUCHSTART,
|
|
297
|
+
];
|
|
298
|
+
activityListeners = addEventListeners(activityEvents, () => {
|
|
299
|
+
activityDuration = resetLastActivity(activityDuration);
|
|
300
|
+
}, { passive: true });
|
|
301
|
+
}
|
|
302
|
+
function resetLastActivity(activityDuration) {
|
|
303
|
+
return {
|
|
304
|
+
...activityDuration,
|
|
305
|
+
timeSinceLastActivity: 0,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
/*
|
|
309
|
+
Add listeners to a set of browser events.
|
|
310
|
+
*/
|
|
311
|
+
function addEventListeners(events, handler, options) {
|
|
312
|
+
return events.map((eventName) => {
|
|
313
|
+
if (pulse_utils_1.isBrowser) {
|
|
314
|
+
window.addEventListener(eventName, handler, options);
|
|
315
|
+
}
|
|
316
|
+
return [eventName, handler];
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
/*
|
|
320
|
+
Remove a set of listeners for browser events.
|
|
321
|
+
*/
|
|
322
|
+
function removeEventListeners(eventListeners, options = {}) {
|
|
323
|
+
for (const [eventName, listener] of eventListeners) {
|
|
324
|
+
if (pulse_utils_1.isBrowser) {
|
|
325
|
+
window.removeEventListener(eventName, listener, options);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
throttledUpdateFn.cancel();
|
|
329
|
+
return [];
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Calculates the fraction of an element that has been scrolled into view,
|
|
333
|
+
* rounded to 2 decimal places and clamped to the [0, 1] range.
|
|
334
|
+
*/
|
|
335
|
+
const calculateViewPercentage = (scrolledPixels, scrollHeight) => Math.min(1, Math.max(0, Math.round((scrolledPixels / scrollHeight) * 100) / 100));
|
|
336
|
+
function shouldEnableLeaveTracking(leaveOptions) {
|
|
337
|
+
if (leaveOptions === false) {
|
|
338
|
+
return false;
|
|
339
|
+
}
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BrowserEvents = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @typedef BrowserEvents
|
|
6
|
+
*/
|
|
7
|
+
var BrowserEvents;
|
|
8
|
+
(function (BrowserEvents) {
|
|
9
|
+
BrowserEvents["BEFORE_UNLOAD"] = "beforeunload";
|
|
10
|
+
BrowserEvents["PAGE_HIDE"] = "pagehide";
|
|
11
|
+
BrowserEvents["POP_STATE"] = "popstate";
|
|
12
|
+
BrowserEvents["VISIBILITY_CHANGE"] = "visibilitychange";
|
|
13
|
+
BrowserEvents["SCROLL"] = "scroll";
|
|
14
|
+
BrowserEvents["RESIZE"] = "resize";
|
|
15
|
+
BrowserEvents["MOUSEDOWN"] = "mousedown";
|
|
16
|
+
BrowserEvents["MOUSEMOVE"] = "mousemove";
|
|
17
|
+
BrowserEvents["KEYDOWN"] = "keydown";
|
|
18
|
+
BrowserEvents["TOUCHSTART"] = "touchstart";
|
|
19
|
+
})(BrowserEvents || (exports.BrowserEvents = BrowserEvents = {}));
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = send;
|
|
4
|
+
const pulse_utils_1 = require("@schibsted/pulse-utils");
|
|
5
|
+
const supportsBeacon = () => pulse_utils_1.isBrowser && Boolean(window.navigator.sendBeacon);
|
|
6
|
+
function send(url, data, sdkConfig) {
|
|
7
|
+
// if there is as large number of events, only send 10 in each request
|
|
8
|
+
const eventChunks = Array.isArray(data)
|
|
9
|
+
? data.reduce((acc, event) => {
|
|
10
|
+
if (acc[0].length >= 10) {
|
|
11
|
+
// biome-ignore lint/style/noParameterAssign: -
|
|
12
|
+
acc = [[event]].concat(acc);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
acc[0].push(event);
|
|
16
|
+
}
|
|
17
|
+
return acc;
|
|
18
|
+
}, [[]])
|
|
19
|
+
: [[data]];
|
|
20
|
+
if (pulse_utils_1.isBrowser && supportsBeacon() && (sdkConfig.useBeaconWhenAvailable || sdkConfig.useBeacon)) {
|
|
21
|
+
const result = eventChunks.reduce((previousStatus, eventChunk) => previousStatus && window.navigator.sendBeacon(url, JSON.stringify(eventChunk)), true);
|
|
22
|
+
if (result) {
|
|
23
|
+
return Promise.resolve(true);
|
|
24
|
+
}
|
|
25
|
+
return Promise.reject(false);
|
|
26
|
+
}
|
|
27
|
+
const requests = eventChunks.map((eventChunk) => fetch(url, {
|
|
28
|
+
headers: new Headers({
|
|
29
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
30
|
+
}),
|
|
31
|
+
method: 'POST',
|
|
32
|
+
body: JSON.stringify(eventChunk),
|
|
33
|
+
}));
|
|
34
|
+
return Promise.all(requests);
|
|
35
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = send;
|
|
4
|
+
function send(url, data, state) {
|
|
5
|
+
const { username, password } = state;
|
|
6
|
+
const headers = {
|
|
7
|
+
'Content-Type': 'application/json',
|
|
8
|
+
Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`,
|
|
9
|
+
};
|
|
10
|
+
return fetch(url, {
|
|
11
|
+
headers,
|
|
12
|
+
method: 'POST',
|
|
13
|
+
body: JSON.stringify(data),
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fetchRemoteConfig = fetchRemoteConfig;
|
|
7
|
+
exports.fetchRemoteConfigWithRetry = fetchRemoteConfigWithRetry;
|
|
8
|
+
exports.readConfigFromStorage = readConfigFromStorage;
|
|
9
|
+
exports.clearConfigFromStorage = clearConfigFromStorage;
|
|
10
|
+
exports.clearInMemoryConfig = clearInMemoryConfig;
|
|
11
|
+
exports.shouldSyncRemoteConfig = shouldSyncRemoteConfig;
|
|
12
|
+
exports.resolveConfigServicesByTag = resolveConfigServicesByTag;
|
|
13
|
+
exports.syncRemoteConfig = syncRemoteConfig;
|
|
14
|
+
const pulse_utils_1 = require("@schibsted/pulse-utils");
|
|
15
|
+
const loglevel_1 = __importDefault(require("loglevel"));
|
|
16
|
+
const CIS_KEY = 'cis';
|
|
17
|
+
const COLLECTOR_KEY = 'collector';
|
|
18
|
+
const getRemoteConfigStorageKey = '_pulse.internal.remote.config';
|
|
19
|
+
let inMemoryConfig = null;
|
|
20
|
+
async function fetchRemoteConfig(url) {
|
|
21
|
+
const response = await fetch(url, {
|
|
22
|
+
method: 'GET',
|
|
23
|
+
});
|
|
24
|
+
return response.json();
|
|
25
|
+
}
|
|
26
|
+
async function fetchRemoteConfigWithRetry(url, retries = 3) {
|
|
27
|
+
try {
|
|
28
|
+
return await fetchRemoteConfig(url);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
if (retries > 1) {
|
|
32
|
+
return fetchRemoteConfigWithRetry(url, retries - 1);
|
|
33
|
+
}
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function readConfigFromStorage() {
|
|
38
|
+
try {
|
|
39
|
+
return JSON.parse(pulse_utils_1.webApi.localStorage?.getItem(getRemoteConfigStorageKey) ?? '');
|
|
40
|
+
}
|
|
41
|
+
catch (_err) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function writeConfigToStorage(config, url) {
|
|
46
|
+
try {
|
|
47
|
+
const configPersistence = {
|
|
48
|
+
config,
|
|
49
|
+
metadata: {
|
|
50
|
+
remoteConfigUrl: url,
|
|
51
|
+
updatedAt: new Date().toISOString(),
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
pulse_utils_1.webApi.localStorage?.setItem(getRemoteConfigStorageKey, JSON.stringify(configPersistence));
|
|
55
|
+
return configPersistence;
|
|
56
|
+
}
|
|
57
|
+
catch (_err) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function clearConfigFromStorage() {
|
|
62
|
+
try {
|
|
63
|
+
pulse_utils_1.webApi.localStorage?.removeItem(getRemoteConfigStorageKey);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
catch (_err) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function clearInMemoryConfig() {
|
|
71
|
+
inMemoryConfig = null;
|
|
72
|
+
}
|
|
73
|
+
function isConfigValid(config) {
|
|
74
|
+
const isConfigValid = !!config;
|
|
75
|
+
loglevel_1.default.debug(`RemoteConfig: isConfigValid: ${isConfigValid}`);
|
|
76
|
+
return isConfigValid;
|
|
77
|
+
}
|
|
78
|
+
function isConfigExpired(updatedAt, ttlMinutes) {
|
|
79
|
+
const isConfigExpired = !updatedAt || !ttlMinutes || new Date(updatedAt).getTime() + Math.min(ttlMinutes, 10080) * 60000 <= Date.now();
|
|
80
|
+
loglevel_1.default.debug(`RemoteConfig: isConfigExpired: ${isConfigExpired}`);
|
|
81
|
+
return isConfigExpired;
|
|
82
|
+
}
|
|
83
|
+
function shouldSyncRemoteConfig(url, config, metadata) {
|
|
84
|
+
return (!isConfigValid(config) ||
|
|
85
|
+
isConfigExpired(metadata?.updatedAt, config?.['ttl-minutes']) ||
|
|
86
|
+
url !== metadata?.remoteConfigUrl);
|
|
87
|
+
}
|
|
88
|
+
function resolveConfigServicesByTag(tag, config) {
|
|
89
|
+
if ((0, pulse_utils_1.isString)(tag) && config) {
|
|
90
|
+
let services = config.scopes?.[tag]?.services || null;
|
|
91
|
+
if (!services && tag !== 'default') {
|
|
92
|
+
services = config.scopes.default.services;
|
|
93
|
+
}
|
|
94
|
+
return services;
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
let onGoingSync = null;
|
|
99
|
+
// biome-ignore lint/style/useDefaultParameterLast: -
|
|
100
|
+
async function syncRemoteConfig(tag = 'default', url) {
|
|
101
|
+
try {
|
|
102
|
+
if (!inMemoryConfig) {
|
|
103
|
+
inMemoryConfig = readConfigFromStorage();
|
|
104
|
+
}
|
|
105
|
+
if (!inMemoryConfig || shouldSyncRemoteConfig(url, inMemoryConfig.config, inMemoryConfig.metadata)) {
|
|
106
|
+
let remoteConfig;
|
|
107
|
+
if (onGoingSync) {
|
|
108
|
+
remoteConfig = await onGoingSync;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
onGoingSync = fetchRemoteConfigWithRetry(url);
|
|
112
|
+
remoteConfig = await onGoingSync;
|
|
113
|
+
onGoingSync = null;
|
|
114
|
+
}
|
|
115
|
+
inMemoryConfig = writeConfigToStorage(remoteConfig, url);
|
|
116
|
+
}
|
|
117
|
+
return resolveConfigServicesByTag(tag, inMemoryConfig?.config);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
loglevel_1.default.debug(err);
|
|
121
|
+
onGoingSync = null;
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TPAAS_ALLOWED_METHODS = exports.ALLOWED_METHODS = exports.MESSAGE_TYPE_RETURN_ERROR = exports.MESSAGE_TYPE_RETURN = exports.MESSAGE_TYPE_INVOKE = exports.MESSAGE_TYPE_ACK = exports.MESSAGE_TYPE_REQUEST = exports.MESSAGE_PREFIX = void 0;
|
|
4
|
+
exports.isPulseProxyMessage = isPulseProxyMessage;
|
|
5
|
+
// Sync the content between files below this line:
|
|
6
|
+
exports.MESSAGE_PREFIX = 'pulse-tracker-proxy';
|
|
7
|
+
exports.MESSAGE_TYPE_REQUEST = `${exports.MESSAGE_PREFIX}:request`;
|
|
8
|
+
exports.MESSAGE_TYPE_ACK = `${exports.MESSAGE_PREFIX}:ack`;
|
|
9
|
+
exports.MESSAGE_TYPE_INVOKE = `${exports.MESSAGE_PREFIX}:invoke`;
|
|
10
|
+
exports.MESSAGE_TYPE_RETURN = `${exports.MESSAGE_PREFIX}:return`;
|
|
11
|
+
exports.MESSAGE_TYPE_RETURN_ERROR = `${exports.MESSAGE_PREFIX}:return-error`;
|
|
12
|
+
exports.ALLOWED_METHODS = ['track'];
|
|
13
|
+
exports.TPAAS_ALLOWED_METHODS = [
|
|
14
|
+
'trackAnonymousViewUIElement',
|
|
15
|
+
'trackEngagementAudio',
|
|
16
|
+
'trackEngagementForm',
|
|
17
|
+
'trackEngagementHealthUIElement',
|
|
18
|
+
'trackEngagementOffer',
|
|
19
|
+
'trackEngagementTeaser',
|
|
20
|
+
'trackEngagementUIElement',
|
|
21
|
+
'trackEngagementVideo',
|
|
22
|
+
'trackEngagementVideoAd',
|
|
23
|
+
'trackEngagementWidget',
|
|
24
|
+
'trackCompletedHealthAction',
|
|
25
|
+
'trackImpressionAdSlot',
|
|
26
|
+
'trackImpressionForm',
|
|
27
|
+
'trackImpressionHealthUIElement',
|
|
28
|
+
'trackImpressionOffer',
|
|
29
|
+
'trackImpressionPlayer',
|
|
30
|
+
'trackImpressionTeaser',
|
|
31
|
+
'trackImpressionUIElement',
|
|
32
|
+
'trackImpressionWidget',
|
|
33
|
+
'trackLeaveArticle',
|
|
34
|
+
'trackLeaveAudioPage',
|
|
35
|
+
'trackLeaveError',
|
|
36
|
+
'trackLeaveFrontpage',
|
|
37
|
+
'trackLeaveLandingpage',
|
|
38
|
+
'trackLeaveListing',
|
|
39
|
+
'trackLeaveLockedArticle',
|
|
40
|
+
'trackLeaveLockedAudio',
|
|
41
|
+
'trackLeaveLockedAudioPage',
|
|
42
|
+
'trackLeaveLockedVideo',
|
|
43
|
+
'trackLeaveLockedVideoPage',
|
|
44
|
+
'trackLeavePage',
|
|
45
|
+
'trackLeaveVideoPage',
|
|
46
|
+
'trackLeaveWeather',
|
|
47
|
+
'trackViewArticle',
|
|
48
|
+
'trackViewAudio',
|
|
49
|
+
'trackViewAudioPage',
|
|
50
|
+
'trackViewError',
|
|
51
|
+
'trackViewFrontpage',
|
|
52
|
+
'trackViewHealthPage',
|
|
53
|
+
'trackViewLandingpage',
|
|
54
|
+
'trackViewListing',
|
|
55
|
+
'trackViewLockedArticle',
|
|
56
|
+
'trackViewLockedAudio',
|
|
57
|
+
'trackViewLockedAudioPage',
|
|
58
|
+
'trackViewLockedVideo',
|
|
59
|
+
'trackViewLockedVideoPage',
|
|
60
|
+
'trackViewPage',
|
|
61
|
+
'trackViewTitle',
|
|
62
|
+
'trackViewVideo',
|
|
63
|
+
'trackViewVideoPage',
|
|
64
|
+
'trackViewWeather',
|
|
65
|
+
];
|
|
66
|
+
function isPulseProxyMessage(message) {
|
|
67
|
+
return (message !== null &&
|
|
68
|
+
typeof message === 'object' &&
|
|
69
|
+
'type' in message &&
|
|
70
|
+
typeof message.type === 'string' &&
|
|
71
|
+
message.type.startsWith(exports.MESSAGE_PREFIX));
|
|
72
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.startProxyProviderListener = startProxyProviderListener;
|
|
7
|
+
const pulse_utils_1 = require("@schibsted/pulse-utils");
|
|
8
|
+
const loglevel_1 = __importDefault(require("loglevel"));
|
|
9
|
+
const consts_1 = require("./consts");
|
|
10
|
+
const ALLOWED_METHODS_SET = new Set([...consts_1.ALLOWED_METHODS, ...consts_1.TPAAS_ALLOWED_METHODS]);
|
|
11
|
+
function startProxyProviderListener(tracker) {
|
|
12
|
+
if (!pulse_utils_1.isBrowser) {
|
|
13
|
+
loglevel_1.default.debug('Proxy Provider - Not in browser environment, skipping message listener');
|
|
14
|
+
return () => { };
|
|
15
|
+
}
|
|
16
|
+
loglevel_1.default.debug('Proxy Provider - Added message listener for proxy provider');
|
|
17
|
+
const listener = async (event) => {
|
|
18
|
+
loglevel_1.default.debug('Proxy Provider - message received', event.data);
|
|
19
|
+
if (!event.ports.length || !(0, consts_1.isPulseProxyMessage)(event.data)) {
|
|
20
|
+
loglevel_1.default.debug('Proxy Provider - message is not for us, skipping. Data:', event.data, 'Ports:', event.ports);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const respond = (message) => {
|
|
24
|
+
loglevel_1.default.debug(`Proxy Provider - response to (${event.origin}): `, message);
|
|
25
|
+
event.ports[0].postMessage(message);
|
|
26
|
+
};
|
|
27
|
+
if (event.data.type === consts_1.MESSAGE_TYPE_REQUEST) {
|
|
28
|
+
respond({ type: consts_1.MESSAGE_TYPE_ACK });
|
|
29
|
+
}
|
|
30
|
+
else if (event.data.type === consts_1.MESSAGE_TYPE_INVOKE) {
|
|
31
|
+
/**
|
|
32
|
+
* @privateRemarks This is where the polymorphism between .track and tpaas methods break,
|
|
33
|
+
* because args can be an array with 2 or 3 arguments, and it cannot be spread in the call
|
|
34
|
+
* when the callee interface does not spread the arguments itself.
|
|
35
|
+
* In the end, almost all the implementation would have to be forked between TrackInvocation and TpaasInvocation,
|
|
36
|
+
* and it was best to stick with am undesired casting, knowing that until this point we are
|
|
37
|
+
* satisfying both implementations.
|
|
38
|
+
* @see TrackInvocation
|
|
39
|
+
* @see TpaasInvocation
|
|
40
|
+
*/
|
|
41
|
+
const { method, args } = event.data.payload;
|
|
42
|
+
try {
|
|
43
|
+
if (!ALLOWED_METHODS_SET.has(method)) {
|
|
44
|
+
respond({
|
|
45
|
+
type: consts_1.MESSAGE_TYPE_RETURN_ERROR,
|
|
46
|
+
error: `Method ${method} is not allowed`,
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const result = await tracker[method](...args);
|
|
51
|
+
respond({
|
|
52
|
+
type: consts_1.MESSAGE_TYPE_RETURN,
|
|
53
|
+
payload: result,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
respond({
|
|
58
|
+
type: consts_1.MESSAGE_TYPE_RETURN_ERROR,
|
|
59
|
+
error: `${error}`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
window.addEventListener('message', listener);
|
|
65
|
+
return () => {
|
|
66
|
+
window.removeEventListener('message', listener);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "SDK_VERSION": "8.0.0-alpha.18", "GIT_COMMIT": "beb7e832" }
|