@schibsted/pulse-sdk 8.0.0-rc.2 → 8.0.0-rc.20

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 (390) hide show
  1. package/dist/cjs/Tracker.js +578 -303
  2. package/dist/cjs/app-integration.js +3 -3
  3. package/dist/cjs/builders/actor.js +6 -6
  4. package/dist/cjs/builders/consents.js +8 -8
  5. package/dist/cjs/builders/device-browser.js +8 -8
  6. package/dist/cjs/builders/device-node.js +3 -3
  7. package/dist/cjs/builders/events-anonymous-node.js +3 -3
  8. package/dist/cjs/builders/events-node.js +7 -7
  9. package/dist/cjs/builders/experimentMetadata.js +2 -2
  10. package/dist/cjs/builders/experiments.js +1 -0
  11. package/dist/cjs/builders/objects/objects-anonymous-browser.js +2 -2
  12. package/dist/cjs/builders/objects/objects-anonymous-node.js +9 -9
  13. package/dist/cjs/builders/objects/objects-browser.js +2 -2
  14. package/dist/cjs/builders/objects/objects-node.js +10 -10
  15. package/dist/cjs/builders/objects/utils.js +3 -3
  16. package/dist/cjs/builders/origin-browser.js +2 -2
  17. package/dist/cjs/builders/origin-node.js +4 -4
  18. package/dist/cjs/builders/session-browser.js +6 -5
  19. package/dist/cjs/cis-sync/cis-browser.js +219 -0
  20. package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/cjs/cis-sync}/cis.js +0 -1
  21. package/dist/cjs/cis-sync/eventEmitter.js +37 -0
  22. package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/cjs/cis-sync}/index.js +0 -1
  23. package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/cjs/cis-sync}/pulse-cookie.js +53 -63
  24. package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/cjs/cis-sync}/storage/pulseStorage.js +28 -21
  25. package/dist/cjs/cis-sync/storage/storage.js +24 -0
  26. package/dist/cjs/createPulseTracker.js +4 -4
  27. package/dist/cjs/identity/actor.js +20 -8
  28. package/dist/cjs/identity/advertising.js +1 -1
  29. package/dist/cjs/identity/cis.js +7 -6
  30. package/dist/cjs/index.js +3 -3
  31. package/dist/cjs/leaveTracking/index.js +10 -10
  32. package/dist/cjs/leaveTrackingTpaas/constants.js +2 -7
  33. package/dist/cjs/leaveTrackingTpaas/index.js +70 -46
  34. package/dist/cjs/network-browser.js +3 -3
  35. package/dist/cjs/remoteConfig/index.js +5 -5
  36. package/dist/cjs/tpaas-builders/builders/catalogVersion.js +9 -0
  37. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/device.js +11 -5
  38. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/navigationType.js +2 -3
  39. package/dist/cjs/tpaas-builders/builders/pageContent.js +7 -0
  40. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/pageInfo.js +2 -2
  41. package/dist/cjs/tpaas-builders/builders/pageSports.js +7 -0
  42. package/dist/cjs/tpaas-builders/builders/provider.js +19 -0
  43. package/dist/cjs/tpaas-builders/builders/referrer.js +17 -0
  44. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/session.js +23 -20
  45. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/trackerBuilder.js +2 -3
  46. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/user.js +1 -1
  47. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/utm.js +3 -3
  48. package/dist/cjs/tpaas-builders/builders.js +339 -0
  49. package/dist/cjs/tpaas-builders/guards.js +7 -0
  50. package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/index.js +3 -0
  51. package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/cjs/tpaas-builders}/types.js +0 -1
  52. package/{node_modules/@schibsted/tpaas-schemas/dist/cjs → dist/cjs/tpaas-schemas}/constants.js +193 -155
  53. package/{node_modules/@schibsted/tpaas-schemas/dist/cjs → dist/cjs/tpaas-schemas}/index.js +1 -0
  54. package/dist/cjs/tpaas-schemas/types.js +2 -0
  55. package/dist/cjs/tracker-proxy/consts.js +29 -6
  56. package/dist/cjs/tracker-proxy/proxy-provider.js +2 -2
  57. package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/index.js +4 -1
  58. package/dist/cjs/utils/xDomainId.js +15 -0
  59. package/dist/cjs/version.js +1 -1
  60. package/dist/cjs/visibility-observer/index.js +9 -7
  61. package/dist/cjs/wrapper/types/event.js +5 -0
  62. package/dist/cjs/wrapper/utils/map-page-to-page-ref.js +13 -0
  63. package/dist/ejs/Tracker.js +510 -235
  64. package/dist/ejs/app-integration.js +1 -1
  65. package/dist/ejs/builders/actor.js +3 -3
  66. package/dist/ejs/builders/consents.js +4 -4
  67. package/dist/ejs/builders/device-browser.js +2 -2
  68. package/dist/ejs/builders/device-node.js +1 -1
  69. package/dist/ejs/builders/events-anonymous-node.js +1 -1
  70. package/dist/ejs/builders/events-node.js +4 -4
  71. package/dist/ejs/builders/experimentMetadata.js +1 -1
  72. package/dist/ejs/builders/experiments.js +1 -1
  73. package/dist/ejs/builders/objects/objects-anonymous-browser.js +1 -1
  74. package/dist/ejs/builders/objects/objects-anonymous-node.js +1 -1
  75. package/dist/ejs/builders/objects/objects-browser.js +1 -1
  76. package/dist/ejs/builders/objects/objects-node.js +1 -1
  77. package/dist/ejs/builders/objects/utils.js +1 -1
  78. package/dist/ejs/builders/origin-browser.js +1 -1
  79. package/dist/ejs/builders/origin-node.js +1 -1
  80. package/dist/ejs/builders/session-browser.js +2 -1
  81. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/cis-browser.js +17 -4
  82. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/cis.js +0 -1
  83. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/eventEmitter.js +0 -1
  84. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/index.js +0 -1
  85. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/pulse-cookie.js +1 -2
  86. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/storage/pulseStorage.js +12 -4
  87. package/{node_modules/@schibsted/pulse-cis-sync/dist/ejs → dist/ejs/cis-sync}/storage/storage.js +6 -2
  88. package/dist/ejs/createPulseTracker.js +1 -1
  89. package/dist/ejs/identity/actor.js +21 -9
  90. package/dist/ejs/identity/advertising.js +1 -1
  91. package/dist/ejs/identity/cis.js +4 -3
  92. package/dist/ejs/index.js +4 -3
  93. package/dist/ejs/leaveTracking/index.js +1 -1
  94. package/dist/ejs/leaveTrackingTpaas/constants.js +1 -5
  95. package/dist/ejs/leaveTrackingTpaas/index.js +65 -41
  96. package/dist/ejs/network-browser.js +1 -1
  97. package/dist/ejs/remoteConfig/index.js +1 -1
  98. package/dist/ejs/tpaas-builders/builders/catalogVersion.js +6 -0
  99. package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/device.js +10 -4
  100. package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/navigationType.js +2 -3
  101. package/dist/ejs/tpaas-builders/builders/pageContent.js +3 -0
  102. package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/pageInfo.js +1 -1
  103. package/dist/ejs/tpaas-builders/builders/pageSports.js +3 -0
  104. package/dist/ejs/tpaas-builders/builders/provider.js +16 -0
  105. package/dist/ejs/tpaas-builders/builders/referrer.js +13 -0
  106. package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/session.js +18 -15
  107. package/dist/ejs/tpaas-builders/builders/trackerBuilder.js +10 -0
  108. package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/user.js +1 -1
  109. package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/utm.js +2 -2
  110. package/dist/ejs/tpaas-builders/builders.js +271 -0
  111. package/dist/ejs/tpaas-builders/guards.js +4 -0
  112. package/dist/ejs/tpaas-builders/index.js +2 -0
  113. package/{node_modules/@schibsted/tpaas-schemas/dist/ejs → dist/ejs/tpaas-schemas}/constants.js +191 -153
  114. package/{node_modules/@schibsted/tpaas-schemas/dist/ejs → dist/ejs/tpaas-schemas}/index.js +1 -0
  115. package/dist/ejs/tpaas-schemas/types.js +1 -0
  116. package/dist/ejs/tracker-proxy/consts.js +29 -6
  117. package/dist/ejs/tracker-proxy/proxy-provider.js +1 -1
  118. package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/index.js +1 -0
  119. package/dist/ejs/utils/xDomainId.js +11 -0
  120. package/dist/ejs/version.js +1 -1
  121. package/dist/ejs/visibility-observer/index.js +9 -7
  122. package/dist/ejs/wrapper/types/event.js +4 -1
  123. package/dist/ejs/wrapper/utils/map-page-to-page-ref.js +10 -0
  124. package/dist/types/Tracker.d.ts +178 -77
  125. package/dist/types/builders/actor.d.ts +3 -2
  126. package/dist/types/builders/consents.d.ts +3 -3
  127. package/dist/types/builders/device-node.d.ts +2 -2
  128. package/dist/types/builders/events-anonymous-node.d.ts +4 -4
  129. package/dist/types/builders/events-node.d.ts +5 -5
  130. package/dist/types/builders/experiments.d.ts +1 -0
  131. package/dist/types/builders/index.d.ts +1 -1
  132. package/dist/types/builders/objects/objects-anonymous-node.d.ts +1 -1
  133. package/dist/types/builders/objects/objects-node.d.ts +1 -1
  134. package/dist/types/builders/origin-node.d.ts +1 -1
  135. package/dist/types/builders/session-browser.d.ts +1 -0
  136. package/{node_modules/@schibsted/pulse-cis-sync/dist/types → dist/types/cis-sync}/cis-browser.d.ts +1 -0
  137. package/{node_modules/@schibsted/pulse-cis-sync/dist/types → dist/types/cis-sync}/storage/pulseStorage.d.ts +12 -4
  138. package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/types/cis-sync}/storage/storage.d.ts +2 -1
  139. package/dist/types/config.d.ts +1 -1
  140. package/dist/types/createPulseTracker.d.ts +1 -1
  141. package/dist/types/identity/actor.d.ts +3 -3
  142. package/dist/types/identity/advertising.d.ts +2 -2
  143. package/dist/types/identity/cis.d.ts +4 -4
  144. package/dist/types/index.d.ts +7 -8
  145. package/dist/types/leaveTrackingTpaas/constants.d.ts +1 -5
  146. package/dist/types/leaveTrackingTpaas/index.d.ts +6 -6
  147. package/dist/types/leaveTrackingTpaas/types.d.ts +2 -10
  148. package/dist/types/tpaas-builders/builders/anonymous.d.ts +3 -0
  149. package/dist/types/tpaas-builders/builders/baseEvent.d.ts +3 -0
  150. package/dist/types/tpaas-builders/builders/catalogVersion.d.ts +3 -0
  151. package/dist/types/tpaas-builders/builders/consents.d.ts +5 -0
  152. package/dist/types/tpaas-builders/builders/device.d.ts +5 -0
  153. package/dist/types/tpaas-builders/builders/experiments.d.ts +9 -0
  154. package/dist/types/tpaas-builders/builders/navigationType.d.ts +6 -0
  155. package/dist/types/tpaas-builders/builders/pageContent.d.ts +6 -0
  156. package/dist/types/tpaas-builders/builders/pageInfo.d.ts +6 -0
  157. package/dist/types/tpaas-builders/builders/pageSports.d.ts +6 -0
  158. package/dist/types/tpaas-builders/builders/pageviewId.d.ts +6 -0
  159. package/dist/types/tpaas-builders/builders/provider.d.ts +5 -0
  160. package/dist/types/tpaas-builders/builders/referrer.d.ts +6 -0
  161. package/dist/types/tpaas-builders/builders/session.d.ts +15 -0
  162. package/dist/types/tpaas-builders/builders/time.d.ts +4 -0
  163. package/dist/types/tpaas-builders/builders/trackerBuilder.d.ts +5 -0
  164. package/dist/types/tpaas-builders/builders/user.d.ts +5 -0
  165. package/dist/types/tpaas-builders/builders/utm.d.ts +6 -0
  166. package/dist/types/tpaas-builders/builders.d.ts +141 -0
  167. package/dist/types/tpaas-builders/guards.d.ts +2 -0
  168. package/dist/types/tpaas-builders/index.d.ts +3 -0
  169. package/dist/types/tpaas-builders/types.d.ts +36 -0
  170. package/dist/types/tpaas-schemas/constants.d.ts +478 -0
  171. package/dist/types/tpaas-schemas/index.d.ts +5 -0
  172. package/dist/types/tpaas-schemas/types/ITpaasEvent.d.ts +132 -0
  173. package/dist/types/tpaas-schemas/types/schemas/IAnonymousViewUIElement.d.ts +58 -0
  174. package/dist/types/tpaas-schemas/types/schemas/ICompletedHealthAction.d.ts +139 -0
  175. package/dist/types/tpaas-schemas/types/schemas/IEngagementAd.d.ts +117 -0
  176. package/dist/types/tpaas-schemas/types/schemas/IEngagementAffiliate.d.ts +144 -0
  177. package/dist/types/tpaas-schemas/types/schemas/IEngagementAudio.d.ts +209 -0
  178. package/dist/types/tpaas-schemas/types/schemas/IEngagementForm.d.ts +111 -0
  179. package/dist/types/tpaas-schemas/types/schemas/IEngagementHealthUIElement.d.ts +133 -0
  180. package/dist/types/tpaas-schemas/types/schemas/IEngagementOffer.d.ts +107 -0
  181. package/dist/types/tpaas-schemas/types/schemas/IEngagementSchoolUIElement.d.ts +107 -0
  182. package/dist/types/tpaas-schemas/types/schemas/IEngagementSportsUIElement.d.ts +157 -0
  183. package/dist/types/tpaas-schemas/types/schemas/IEngagementTeaser.d.ts +114 -0
  184. package/dist/types/tpaas-schemas/types/schemas/IEngagementTvModule.d.ts +130 -0
  185. package/dist/types/tpaas-schemas/types/schemas/IEngagementTvSearch.d.ts +142 -0
  186. package/dist/types/tpaas-schemas/types/schemas/IEngagementUIElement.d.ts +105 -0
  187. package/dist/types/tpaas-schemas/types/schemas/IEngagementVideo.d.ts +234 -0
  188. package/dist/types/tpaas-schemas/types/schemas/IEngagementVideoAd.d.ts +145 -0
  189. package/dist/types/tpaas-schemas/types/schemas/IEngagementWidget.d.ts +91 -0
  190. package/dist/types/tpaas-schemas/types/schemas/IHeartbeatCommercialArticle.d.ts +96 -0
  191. package/dist/types/tpaas-schemas/types/schemas/IImpressionAd.d.ts +115 -0
  192. package/dist/types/tpaas-schemas/types/schemas/IImpressionAdSlot.d.ts +89 -0
  193. package/dist/types/tpaas-schemas/types/schemas/IImpressionAffiliate.d.ts +142 -0
  194. package/dist/types/tpaas-schemas/types/schemas/IImpressionForm.d.ts +113 -0
  195. package/dist/types/tpaas-schemas/types/schemas/IImpressionHealthUIElement.d.ts +138 -0
  196. package/dist/types/tpaas-schemas/types/schemas/IImpressionOffer.d.ts +109 -0
  197. package/dist/types/tpaas-schemas/types/schemas/IImpressionPlayer.d.ts +108 -0
  198. package/dist/types/tpaas-schemas/types/schemas/IImpressionSchoolUIElement.d.ts +109 -0
  199. package/dist/types/tpaas-schemas/types/schemas/IImpressionSportsUIElement.d.ts +159 -0
  200. package/dist/types/tpaas-schemas/types/schemas/IImpressionTeaser.d.ts +112 -0
  201. package/dist/types/tpaas-schemas/types/schemas/IImpressionUIElement.d.ts +107 -0
  202. package/dist/types/tpaas-schemas/types/schemas/IImpressionWidget.d.ts +89 -0
  203. package/dist/types/tpaas-schemas/types/schemas/ILeaveArticle.d.ts +133 -0
  204. package/dist/types/tpaas-schemas/types/schemas/ILeaveAudioPage.d.ts +88 -0
  205. package/dist/types/tpaas-schemas/types/schemas/ILeaveError.d.ts +95 -0
  206. package/dist/types/tpaas-schemas/types/schemas/ILeaveFrontpage.d.ts +83 -0
  207. package/dist/types/tpaas-schemas/types/schemas/ILeaveLandingpage.d.ts +90 -0
  208. package/dist/types/tpaas-schemas/types/schemas/ILeaveListing.d.ts +123 -0
  209. package/dist/types/tpaas-schemas/types/schemas/ILeaveLockedArticle.d.ts +139 -0
  210. package/dist/types/tpaas-schemas/types/schemas/ILeaveLockedAudioPage.d.ts +97 -0
  211. package/dist/types/tpaas-schemas/types/schemas/ILeaveLockedPage.d.ts +90 -0
  212. package/dist/types/tpaas-schemas/types/schemas/ILeaveLockedVideoPage.d.ts +97 -0
  213. package/dist/types/tpaas-schemas/types/schemas/ILeavePage.d.ts +82 -0
  214. package/dist/types/tpaas-schemas/types/schemas/ILeaveSchoolPage.d.ts +84 -0
  215. package/dist/types/tpaas-schemas/types/schemas/ILeaveSportsPage.d.ts +137 -0
  216. package/dist/types/tpaas-schemas/types/schemas/ILeaveVideoPage.d.ts +91 -0
  217. package/dist/types/tpaas-schemas/types/schemas/ILeaveWeather.d.ts +94 -0
  218. package/dist/types/tpaas-schemas/types/schemas/ILoadAd.d.ts +119 -0
  219. package/dist/types/tpaas-schemas/types/schemas/IRequestAd.d.ts +95 -0
  220. package/dist/types/tpaas-schemas/types/schemas/IViewArticle.d.ts +133 -0
  221. package/dist/types/tpaas-schemas/types/schemas/IViewAudioPage.d.ts +87 -0
  222. package/dist/types/tpaas-schemas/types/schemas/IViewError.d.ts +90 -0
  223. package/dist/types/tpaas-schemas/types/schemas/IViewFrontpage.d.ts +80 -0
  224. package/dist/types/tpaas-schemas/types/schemas/IViewHealthPage.d.ts +119 -0
  225. package/dist/types/tpaas-schemas/types/schemas/IViewLandingpage.d.ts +76 -0
  226. package/dist/types/tpaas-schemas/types/schemas/IViewListing.d.ts +118 -0
  227. package/dist/types/tpaas-schemas/types/schemas/IViewLockedArticle.d.ts +139 -0
  228. package/dist/types/tpaas-schemas/types/schemas/IViewLockedAudioPage.d.ts +95 -0
  229. package/dist/types/tpaas-schemas/types/schemas/IViewLockedPage.d.ts +94 -0
  230. package/dist/types/tpaas-schemas/types/schemas/IViewLockedVideoPage.d.ts +95 -0
  231. package/dist/types/tpaas-schemas/types/schemas/IViewPage.d.ts +86 -0
  232. package/dist/types/tpaas-schemas/types/schemas/IViewSchoolPage.d.ts +88 -0
  233. package/dist/types/tpaas-schemas/types/schemas/IViewSportsPage.d.ts +135 -0
  234. package/dist/types/tpaas-schemas/types/schemas/IViewTitle.d.ts +92 -0
  235. package/dist/types/tpaas-schemas/types/schemas/IViewVideoPage.d.ts +87 -0
  236. package/dist/types/tpaas-schemas/types/schemas/IViewWeather.d.ts +94 -0
  237. package/dist/types/tpaas-schemas/types/schemas/index.d.ts +64 -0
  238. package/dist/types/tpaas-schemas/types/templates/IBranded.d.ts +42 -0
  239. package/dist/types/tpaas-schemas/types/templates/IConsents.d.ts +34 -0
  240. package/dist/types/tpaas-schemas/types/templates/IContent.d.ts +56 -0
  241. package/dist/types/tpaas-schemas/types/templates/IDevice.d.ts +62 -0
  242. package/dist/types/tpaas-schemas/types/templates/IEngagement.d.ts +21 -0
  243. package/dist/types/tpaas-schemas/types/templates/IExperiments.d.ts +35 -0
  244. package/dist/types/tpaas-schemas/types/templates/IHealthFood.d.ts +55 -0
  245. package/dist/types/tpaas-schemas/types/templates/IHealthOrigin.d.ts +27 -0
  246. package/dist/types/tpaas-schemas/types/templates/IHealthPhysicalActivity.d.ts +36 -0
  247. package/dist/types/tpaas-schemas/types/templates/IHealthTraining.d.ts +74 -0
  248. package/dist/types/tpaas-schemas/types/templates/IHealthUserData.d.ts +25 -0
  249. package/dist/types/tpaas-schemas/types/templates/ILeave.d.ts +54 -0
  250. package/dist/types/tpaas-schemas/types/templates/ILeaveAudio.d.ts +37 -0
  251. package/dist/types/tpaas-schemas/types/templates/ILeaveStories.d.ts +34 -0
  252. package/dist/types/tpaas-schemas/types/templates/ILocation.d.ts +21 -0
  253. package/dist/types/tpaas-schemas/types/templates/IMetrics.d.ts +32 -0
  254. package/dist/types/tpaas-schemas/types/templates/IPageRef.d.ts +46 -0
  255. package/dist/types/tpaas-schemas/types/templates/IPlacement.d.ts +45 -0
  256. package/dist/types/tpaas-schemas/types/templates/IProvider.d.ts +73 -0
  257. package/dist/types/tpaas-schemas/types/templates/ISchool.d.ts +74 -0
  258. package/dist/types/tpaas-schemas/types/templates/ISession.d.ts +33 -0
  259. package/dist/types/tpaas-schemas/types/templates/ISports.d.ts +98 -0
  260. package/dist/types/tpaas-schemas/types/templates/ISportsUserFeatures.d.ts +28 -0
  261. package/dist/types/tpaas-schemas/types/templates/ITime.d.ts +32 -0
  262. package/dist/types/tpaas-schemas/types/templates/ITracker.d.ts +37 -0
  263. package/dist/types/tpaas-schemas/types/templates/IUser.d.ts +34 -0
  264. package/dist/types/tpaas-schemas/types/templates/IUtmTags.d.ts +38 -0
  265. package/dist/types/tpaas-schemas/types/templates/index.d.ts +27 -0
  266. package/dist/types/tpaas-schemas/types.d.ts +42 -0
  267. package/dist/types/tracker-proxy/consts.d.ts +2 -2
  268. package/dist/types/types.d.ts +19 -13
  269. package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/index.d.ts +1 -0
  270. package/dist/types/utils/xDomainId.d.ts +2 -0
  271. package/dist/types/version.d.ts +1 -1
  272. package/dist/types/visibility-observer/index.d.ts +6 -1
  273. package/dist/types/wrapper/engagement/ui-element/types.d.ts +1 -1
  274. package/dist/types/wrapper/types/base-event.d.ts +1 -1
  275. package/dist/types/wrapper/types/event.d.ts +4 -2
  276. package/dist/types/wrapper/types/utils.d.ts +1 -1
  277. package/dist/types/wrapper/utils/map-page-to-page-ref.d.ts +3 -0
  278. package/dist/types/wrapper/view/article/types.d.ts +1 -1
  279. package/dist/types/wrapper/view/frontpage/types.d.ts +1 -1
  280. package/dist/types/wrapper/view/listing/types.d.ts +1 -1
  281. package/dist/types/wrapper/view/loginposter/types.d.ts +1 -1
  282. package/dist/types/wrapper/view/page/types.d.ts +1 -1
  283. package/dist/types/wrapper/view/salesposter/types.d.ts +1 -1
  284. package/dist/types/wrapper/view/ui-element/types.d.ts +1 -1
  285. package/package.json +21 -20
  286. package/dist/cjs/Tracker.test-d.js +0 -76
  287. package/dist/ejs/Tracker.test-d.js +0 -71
  288. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.d.ts +0 -26
  289. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.js +0 -273
  290. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.js.map +0 -1
  291. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.js.map +0 -1
  292. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.js +0 -39
  293. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.js.map +0 -1
  294. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.js.map +0 -1
  295. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.js.map +0 -1
  296. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.d.ts +0 -36
  297. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.js.map +0 -1
  298. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.js +0 -21
  299. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.js.map +0 -1
  300. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.js.map +0 -1
  301. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.d.ts +0 -26
  302. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.js.map +0 -1
  303. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.d.ts +0 -10
  304. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.js.map +0 -1
  305. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.d.ts +0 -14
  306. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.js.map +0 -1
  307. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.d.ts +0 -4
  308. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.js.map +0 -1
  309. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.d.ts +0 -55
  310. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.js.map +0 -1
  311. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.d.ts +0 -36
  312. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.js.map +0 -1
  313. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.d.ts +0 -6
  314. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.js.map +0 -1
  315. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.d.ts +0 -24
  316. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.js +0 -2
  317. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.js.map +0 -1
  318. package/node_modules/@schibsted/pulse-cis-sync/dist/types/cis.d.ts +0 -10
  319. package/node_modules/@schibsted/pulse-cis-sync/dist/types/eventEmitter.d.ts +0 -14
  320. package/node_modules/@schibsted/pulse-cis-sync/dist/types/index.d.ts +0 -4
  321. package/node_modules/@schibsted/pulse-cis-sync/dist/types/pulse-cookie.d.ts +0 -55
  322. package/node_modules/@schibsted/pulse-cis-sync/dist/types/storage/storage.d.ts +0 -6
  323. package/node_modules/@schibsted/pulse-cis-sync/dist/types/types.d.ts +0 -24
  324. package/node_modules/@schibsted/pulse-cis-sync/package.json +0 -44
  325. package/node_modules/@schibsted/pulse-utils/package.json +0 -36
  326. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/provider.js +0 -12
  327. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/referrer.js +0 -19
  328. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders.js +0 -272
  329. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/provider.js +0 -9
  330. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/referrer.js +0 -15
  331. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/trackerBuilder.js +0 -11
  332. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders.js +0 -215
  333. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/index.js +0 -1
  334. package/node_modules/@schibsted/tpaas-event-builder/dist/index.d.ts +0 -5403
  335. package/node_modules/@schibsted/tpaas-event-builder/package.json +0 -40
  336. package/node_modules/@schibsted/tpaas-schemas/dist/index.d.ts +0 -6176
  337. package/node_modules/@schibsted/tpaas-schemas/package.json +0 -35
  338. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/cis-sync}/types.js +0 -0
  339. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/anonymous.js +0 -0
  340. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/baseEvent.js +0 -0
  341. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/consents.js +0 -0
  342. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/experiments.js +0 -0
  343. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/pageviewId.js +0 -0
  344. /package/{node_modules/@schibsted/tpaas-event-builder/dist/cjs → dist/cjs/tpaas-builders}/builders/time.js +0 -0
  345. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/cookie-config.js +0 -0
  346. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/cookie.js +0 -0
  347. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/events.js +0 -0
  348. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/get.js +0 -0
  349. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/getRootDomain.js +0 -0
  350. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/merge.js +0 -0
  351. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/objects.js +0 -0
  352. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/omit.js +0 -0
  353. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/randomString.js +0 -0
  354. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/throttle.js +0 -0
  355. /package/{node_modules/@schibsted/pulse-utils/dist/cjs → dist/cjs/utils}/webApi.js +0 -0
  356. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/cis-sync}/types.js +0 -0
  357. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/anonymous.js +0 -0
  358. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/baseEvent.js +0 -0
  359. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/consents.js +0 -0
  360. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/experiments.js +0 -0
  361. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/pageviewId.js +0 -0
  362. /package/{node_modules/@schibsted/tpaas-event-builder/dist/ejs → dist/ejs/tpaas-builders}/builders/time.js +0 -0
  363. /package/dist/{types/Tracker.test-d.d.ts → ejs/tpaas-builders/types.js} +0 -0
  364. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/cookie-config.js +0 -0
  365. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/cookie.js +0 -0
  366. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/events.js +0 -0
  367. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/get.js +0 -0
  368. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/getRootDomain.js +0 -0
  369. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/merge.js +0 -0
  370. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/objects.js +0 -0
  371. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/omit.js +0 -0
  372. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/randomString.js +0 -0
  373. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/throttle.js +0 -0
  374. /package/{node_modules/@schibsted/pulse-utils/dist/ejs → dist/ejs/utils}/webApi.js +0 -0
  375. /package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/types/cis-sync}/cis.d.ts +0 -0
  376. /package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/types/cis-sync}/eventEmitter.d.ts +0 -0
  377. /package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/types/cis-sync}/index.d.ts +0 -0
  378. /package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/types/cis-sync}/pulse-cookie.d.ts +0 -0
  379. /package/{node_modules/@schibsted/pulse-cis-sync/dist/cjs → dist/types/cis-sync}/types.d.ts +0 -0
  380. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/cookie-config.d.ts +0 -0
  381. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/cookie.d.ts +0 -0
  382. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/events.d.ts +0 -0
  383. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/get.d.ts +0 -0
  384. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/getRootDomain.d.ts +0 -0
  385. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/merge.d.ts +0 -0
  386. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/objects.d.ts +0 -0
  387. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/omit.d.ts +0 -0
  388. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/randomString.d.ts +0 -0
  389. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/throttle.d.ts +0 -0
  390. /package/{node_modules/@schibsted/pulse-utils/dist/types → dist/types/utils}/webApi.d.ts +0 -0
@@ -1,6 +1,6 @@
1
- import { isBrowser, isFunction, throttle } from '@schibsted/pulse-utils';
2
1
  import * as logger from 'loglevel';
3
- import { DEFAULT_ACTIVITY_DURATION, DEFAULT_PAGE_LEAVE_EVENT } from './constants';
2
+ import { isBrowser, isFunction, throttle } from '../utils';
3
+ import { ACTIVITY_DURATION_LIMIT_MS, DEFAULT_PAGE_LEAVE_EVENT } from './constants';
4
4
  import { BrowserEvents } from './types';
5
5
  let currentLeaveSchema;
6
6
  let currentTrackMethod;
@@ -9,19 +9,44 @@ let updateViewedContentListeners = [];
9
9
  let activityListeners = [];
10
10
  let resizeObserver = null;
11
11
  let throttledUpdateFn = throttle(() => undefined, 0);
12
- let startTime = 0;
13
- let activityDuration = DEFAULT_ACTIVITY_DURATION();
12
+ let durationStartTime = 0;
13
+ let previousActivityTime = 0;
14
+ let activityDurationMs = 0;
14
15
  let currentLeaveEvent = DEFAULT_PAGE_LEAVE_EVENT();
15
16
  let additionalHeightBuilder;
17
+ /**
18
+ * Resolves a DOM element from either a CSS selector string or an Element instance.
19
+ */
20
+ function resolveDomElement(element) {
21
+ try {
22
+ return typeof element === 'string' ? document.querySelector(element) : element || null;
23
+ }
24
+ catch (e) {
25
+ logger.error('Error while resolving DOM element', e);
26
+ return null;
27
+ }
28
+ }
16
29
  /*
17
30
  Add leave tracking
18
31
  */
19
32
  export function addTpaasLeaveTracking({ objectElement, pageElement, schema, objectResizable, heightBuilder, trackMethod, }) {
20
33
  function _addLeaveTracking() {
34
+ const objectDomElement = resolveDomElement(objectElement);
35
+ if (objectDomElement == null) {
36
+ logger.error('Could not find object element for leave tracking');
37
+ return;
38
+ }
39
+ let pageDomElement = resolveDomElement(pageElement);
40
+ if (pageDomElement == null) {
41
+ logger.warn('Could not find page element for leave tracking, defaulting to document.body');
42
+ pageDomElement = document.body;
43
+ }
21
44
  additionalHeightBuilder = heightBuilder;
22
45
  addTpaasLeaveListeners();
23
- addUpdateEventListeners(objectElement, pageElement || document.body, objectResizable);
24
- startTime = resetTime();
46
+ addUpdateEventListeners(objectDomElement, pageDomElement, objectResizable);
47
+ previousActivityTime = resetTime();
48
+ durationStartTime = resetTime();
49
+ activityDurationMs = 0;
25
50
  currentLeaveSchema = schema;
26
51
  currentTrackMethod = trackMethod;
27
52
  logger.debug('addLeaveTracking:after:state', currentLeaveEvent);
@@ -113,12 +138,9 @@ function removeUpdateEventListeners() {
113
138
  */
114
139
  const resetEventDefaults = () => {
115
140
  currentLeaveEvent = DEFAULT_PAGE_LEAVE_EVENT();
116
- startTime = resetTime();
117
- activityDuration = resetActivityDuration();
118
- };
119
- const resetActivityDuration = () => {
120
- clearInterval(activityDuration.interval);
121
- return DEFAULT_ACTIVITY_DURATION();
141
+ durationStartTime = resetTime();
142
+ previousActivityTime = resetTime();
143
+ activityDurationMs = 0;
122
144
  };
123
145
  export const resetTpaasViewedContent = () => {
124
146
  currentLeaveEvent = DEFAULT_PAGE_LEAVE_EVENT();
@@ -126,34 +148,43 @@ export const resetTpaasViewedContent = () => {
126
148
  const resetTime = () => Date.now();
127
149
  /*
128
150
  Send a Leave event only if Page Leave tracking is active in the SDK
129
- The event that is ultimately sent is a merge between the default event
130
- saved in this file and the event supplied by the brand, with preference going
131
- to the brand event. After the event has been sent, leave page tracking is removed
151
+ The event that is ultimately sent is the View event saved in the currentTrackMethod callback.
152
+ After the event has been sent, leave page tracking is removed
132
153
  and must be explicitly re-added if needed.
133
154
  */
134
- export function trackTpaasActiveLeave() {
155
+ export async function trackTpaasActiveLeave() {
135
156
  if (leaveTpaasTrackingIsActive()) {
136
- trackTpaasLeave();
157
+ await trackTpaasLeave();
137
158
  }
138
159
  }
139
160
  /*
140
161
  Send a Leave event regardless of whether Page Leave tracking is active in the SDK
141
- The event that is ultimately sent is a merge between the default event
142
- saved in this file and the event supplied by the brand, with preference going
143
- to the brand event. After the event has been sent, leave page tracking is removed
162
+ The event that is ultimately sent is the View event saved in the currentTrackMethod callback.
163
+ After the event has been sent, leave page tracking is removed
144
164
  and must be explicitly re-added if needed.
145
165
  */
146
- export function trackTpaasLeave() {
166
+ export async function trackTpaasLeave() {
147
167
  const leave = getTpaasLeaveObject();
148
- currentTrackMethod(leave);
168
+ // Capture currentTrackMethod and remove tracking synchronously before awaiting.
169
+ // If removal happened after the await, a new trackView* call arriving during the async
170
+ // gap would see tracking still active with the same schema and silently discard its
171
+ // new callback (e.g. a fresh leaveAudioBuilder), causing the next leave event to
172
+ // never fire or to use the wrong builder.
173
+ const trackMethod = currentTrackMethod;
149
174
  removeTpaasLeaveTracking();
175
+ await trackMethod(leave);
150
176
  }
151
177
  export function getTpaasLeaveObject() {
152
178
  const endTime = Date.now();
153
- const duration = endTime - startTime;
179
+ // TPaaS leave event requires duration/activity to be at least 1ms, otherwise the event is rejected
180
+ // also, in practice, it's almost impossible to have an activity or duration of 0ms
181
+ // We don't call increaseActivityDuration here because it's possible to call getTpaasLeaveObject multiple times
182
+ // without any activity events in between, which would incorrectly increase the activity duration.
183
+ const durationMs = Math.max(endTime - durationStartTime, 1);
184
+ const lastActivityDuration = calculateActivityGap(endTime);
154
185
  const leave = {
155
- durationMs: duration,
156
- activityDurationMs: activityDuration.value,
186
+ durationMs,
187
+ activityDurationMs: Math.max(activityDurationMs + lastActivityDuration, 1),
157
188
  ...currentLeaveEvent,
158
189
  };
159
190
  logger.debug('trackTpaasLeave: event', leave);
@@ -226,18 +257,10 @@ export const calculateScrollPosition = (element) => Math.abs(Math.min(element.ge
226
257
  'mousedown', 'mousemove', 'keydown', 'scroll' and/or 'touchstart' browser events.
227
258
  */
228
259
  function addUpdateActivityDurationListeners() {
229
- if (activityDuration.interval !== undefined) {
230
- // If the interval is already set, do not set it again
260
+ // if there are already listeners for activity, do not add more
261
+ if (activityListeners.length > 0) {
231
262
  return;
232
263
  }
233
- const interval = 1000;
234
- const activityTimeout = 30 * 1000;
235
- activityDuration.interval = window.setInterval(() => {
236
- activityDuration.timeSinceLastActivity += interval;
237
- if (activityDuration.timeSinceLastActivity < activityTimeout) {
238
- activityDuration.value += interval;
239
- }
240
- }, interval);
241
264
  const activityEvents = [
242
265
  BrowserEvents.SCROLL,
243
266
  BrowserEvents.MOUSEDOWN,
@@ -246,14 +269,15 @@ function addUpdateActivityDurationListeners() {
246
269
  BrowserEvents.TOUCHSTART,
247
270
  ];
248
271
  activityListeners = addEventListeners(activityEvents, () => {
249
- activityDuration = resetLastActivity(activityDuration);
272
+ increaseActivityDuration(Date.now());
250
273
  }, { passive: true });
251
274
  }
252
- function resetLastActivity(activityDuration) {
253
- return {
254
- ...activityDuration,
255
- timeSinceLastActivity: 0,
256
- };
275
+ function calculateActivityGap(activityEndTime) {
276
+ return Math.min(activityEndTime - previousActivityTime, ACTIVITY_DURATION_LIMIT_MS);
277
+ }
278
+ function increaseActivityDuration(activityEndTime) {
279
+ activityDurationMs += calculateActivityGap(activityEndTime);
280
+ previousActivityTime = resetTime();
257
281
  }
258
282
  /*
259
283
  Add listeners to a set of browser events.
@@ -1,4 +1,4 @@
1
- import { isBrowser } from '@schibsted/pulse-utils';
1
+ import { isBrowser } from './utils';
2
2
  const supportsBeacon = () => isBrowser && Boolean(window.navigator.sendBeacon);
3
3
  export default function send(url, data, sdkConfig) {
4
4
  // if there is as large number of events, only send 10 in each request
@@ -1,5 +1,5 @@
1
- import { isString, webApi } from '@schibsted/pulse-utils';
2
1
  import logger from 'loglevel';
2
+ import { isString, webApi } from '../utils';
3
3
  const CIS_KEY = 'cis';
4
4
  const COLLECTOR_KEY = 'collector';
5
5
  const getRemoteConfigStorageKey = '_pulse.internal.remote.config';
@@ -0,0 +1,6 @@
1
+ import { CATALOG_VERSION } from '../../tpaas-schemas';
2
+ export function builder() {
3
+ return {
4
+ catalogVersion: CATALOG_VERSION,
5
+ };
6
+ }
@@ -1,6 +1,6 @@
1
- import { isBrowser } from '@schibsted/pulse-utils';
2
1
  import * as logger from 'loglevel';
3
2
  import { UAParser } from 'ua-parser-js';
3
+ import { isBrowser } from '../../utils';
4
4
  // Cache the UAParser result to avoid re-parsing on subsequent calls
5
5
  let cachedUAParser;
6
6
  function getUAParser() {
@@ -102,16 +102,22 @@ function getOperatingSystem(uaParser) {
102
102
  if (osName.includes('windows')) {
103
103
  return 'Windows';
104
104
  }
105
- if (osName.includes('macos')) {
105
+ if (osName.includes('macos') || osName.includes('mac os')) {
106
106
  return 'Mac';
107
107
  }
108
- // some flavors of Linux might not be captured by this
108
+ if (osName.includes('android')) {
109
+ return 'Android';
110
+ }
111
+ if (osName.includes('ios')) {
112
+ return 'iOS';
113
+ }
114
+ // some flavours of Linux might not be captured by this
109
115
  // do we need a better detection, based on a list?
110
116
  // for example (Gentoo - https://docs.uaparser.dev/info/os/name.html)
111
117
  if (osName.includes('linux')) {
112
118
  return 'Linux';
113
119
  }
114
- // the TPaaS `device` template is missing Android, iOS, iPadOS and maybe others?
120
+ // the TPaaS `device` template is missing iPadOS and maybe others?
115
121
  logger.log(`Unknown operating system: ${osName}. Defaulting to 'other'.`);
116
122
  // default value
117
123
  return 'Other';
@@ -12,12 +12,11 @@ export const builder = (eventNavigationType) => {
12
12
  },
13
13
  };
14
14
  };
15
- // In practice they use the same values, but for future proofing we keep them separate and mapped
15
+ // In practice, they use the same values, but for future proofing we keep them separate and mapped
16
16
  const modernNavigationMap = {
17
17
  navigate: 'Navigate',
18
18
  reload: 'Reload',
19
19
  back_forward: 'BackForward',
20
- prerender: 'Prerender',
21
20
  };
22
21
  const legacyNavigationMap = {
23
22
  0: 'Navigate',
@@ -25,7 +24,7 @@ const legacyNavigationMap = {
25
24
  2: 'BackForward',
26
25
  };
27
26
  const getModernNavigationType = (entryType) => {
28
- return modernNavigationMap[entryType];
27
+ return modernNavigationMap[entryType] || 'Navigate';
29
28
  };
30
29
  const getLegacyNavigationType = (entryType) => {
31
30
  return legacyNavigationMap[entryType] || 'Navigate';
@@ -0,0 +1,3 @@
1
+ export const builder = (content) => ({
2
+ page: content ? { content } : {},
3
+ });
@@ -1,4 +1,4 @@
1
- import { isBrowser } from '@schibsted/pulse-utils';
1
+ import { isBrowser } from '../../utils';
2
2
  export const builder = (currentPage) => {
3
3
  // if something happens and there was no View Page type of event sent before, we need a fallback
4
4
  if (!currentPage) {
@@ -0,0 +1,3 @@
1
+ export const builder = (sports) => ({
2
+ page: sports ?? {},
3
+ });
@@ -0,0 +1,16 @@
1
+ const generateProviderSDRN = (providerId) => `sdrn:schibsted:client:${providerId}`;
2
+ export function builder(providerId, providerStage, providerProduct, providerVersion, component, componentVersion, providerName, providerGroup) {
3
+ return {
4
+ provider: {
5
+ providerId,
6
+ providerSdrn: generateProviderSDRN(providerId),
7
+ ...(component !== undefined && { component }),
8
+ ...(componentVersion !== undefined && { componentVersion }),
9
+ ...(providerGroup !== undefined && { group: providerGroup }),
10
+ ...(providerName !== undefined && { name: providerName }),
11
+ stage: providerStage,
12
+ product: providerProduct,
13
+ version: providerVersion,
14
+ },
15
+ };
16
+ }
@@ -0,0 +1,13 @@
1
+ const hasReferrerData = (referrer) => Boolean(referrer.pageId || referrer.url || referrer.pageType);
2
+ export const builder = (referrer) => {
3
+ if (!hasReferrerData(referrer)) {
4
+ return {
5
+ page: {},
6
+ };
7
+ }
8
+ return {
9
+ page: {
10
+ referrer,
11
+ },
12
+ };
13
+ };
@@ -1,7 +1,8 @@
1
- import { cookieConfig, getRootDomain, isBrowser, readCookie, webApi, writeCookie } from '@schibsted/pulse-utils';
2
1
  import { v4 as uuid } from 'uuid';
2
+ import { cookieConfig, getRootDomain, getXDomainId, readCookie, SESSION_SDRN_PREFIX, webApi, writeCookie, } from '../../utils';
3
3
  const { USE_LOCALSTORAGE } = cookieConfig;
4
4
  const SESSION_STORAGE_KEY = '_pulsesession';
5
+ const generateSessionSDRN = (sessionId) => `${SESSION_SDRN_PREFIX}${sessionId}`;
5
6
  // 1. there are pros and cons to outputting { session: ISession } instead of just ISession
6
7
  // this allows us to always have the session builde populate the same property (in this case '.session')
7
8
  // if in the future we want the session builder to populate other properties, we should just output ISession and move the mapping logic in index.ts, as part of buildersByEventType
@@ -21,15 +22,6 @@ export const builder = (createdAt) => {
21
22
  },
22
23
  };
23
24
  };
24
- // TODO: do we need to save this in the session, as part of the localStorage?
25
- // or should we just read it from the URL params every time?
26
- const getXDomainId = () => {
27
- if (!isBrowser) {
28
- return;
29
- }
30
- const urlParams = new URLSearchParams(window?.location?.search ?? '');
31
- return urlParams.get('x_domain_id') || undefined;
32
- };
33
25
  // Return parsed json from cookie (or localStorage if enabled), or undefined.
34
26
  // exported for testing purposes.
35
27
  export const readAndParse = (storageKey) => {
@@ -60,7 +52,14 @@ export const readSession = () => {
60
52
  lastEventTime &&
61
53
  !Number.isNaN(startTime.getTime()) &&
62
54
  !Number.isNaN(lastEventTime.getTime())) {
63
- return { sessionId, startTime: startTime.toISOString(), lastEventTime, isFirstEvent: false };
55
+ return {
56
+ // to ensure backwards compatibility between the new TPaaS sessionId format and old sessions
57
+ // we need to remove the SDRN prefix from old sessionIds before using it
58
+ sessionId: sessionId.replace(SESSION_SDRN_PREFIX, ''),
59
+ startTime: startTime.toISOString(),
60
+ lastEventTime,
61
+ isFirstEvent: false,
62
+ };
64
63
  }
65
64
  }
66
65
  return undefined;
@@ -68,8 +67,15 @@ export const readSession = () => {
68
67
  // Write session data to localStorage
69
68
  const writeSession = (session) => {
70
69
  const { sessionId, startTime, lastEventTime } = session;
70
+ // SDK v8 (supporting TPaaS events) needs to be compatible with legacy events AND older SDK versions
71
+ // as a result, we can't store just the sessionId, we need the full SDRN in there
72
+ const sessionSdrn = generateSessionSDRN(sessionId);
71
73
  try {
72
- const sessionToStore = [sessionId, new Date(startTime).getTime(), lastEventTime.getTime()];
74
+ const sessionToStore = [
75
+ sessionSdrn,
76
+ new Date(startTime).getTime(),
77
+ lastEventTime.getTime(),
78
+ ];
73
79
  const halfHourInDays = 1.0 / (24 * 2);
74
80
  writeCookie(SESSION_STORAGE_KEY, JSON.stringify(sessionToStore), getRootDomain(), halfHourInDays);
75
81
  // Delete old localStorage-based session if needed
@@ -99,9 +105,6 @@ const updateSession = (eventCreationDate, session) => {
99
105
  }
100
106
  return {
101
107
  ...session,
102
- // to ensure backwards compatibility between the new sessionId format and old sessions
103
- // we need to remove the SDRN prefix from old sessionIds
104
- sessionId: session.sessionId.replace('sdrn:schibsted:session:', ''),
105
108
  isFirstEvent: false,
106
109
  lastEventTime: eventCreationDate,
107
110
  };
@@ -0,0 +1,10 @@
1
+ export const builder = ({ isHybrid, routingStage, version, }) => {
2
+ return {
3
+ tracker: {
4
+ isHybrid,
5
+ routingStage,
6
+ trackerType: 'JS',
7
+ version,
8
+ },
9
+ };
10
+ };
@@ -4,7 +4,7 @@ export const builder = (user) => {
4
4
  return {};
5
5
  }
6
6
  const { hasAnySubscription, region, id, realm } = user;
7
- if (!id || !id.toString().trim()) {
7
+ if (!id?.toString().trim()) {
8
8
  // the user is anonymous (logged out)
9
9
  return {};
10
10
  }
@@ -1,5 +1,5 @@
1
- import { isBrowser } from '@schibsted/pulse-utils';
2
- import { UTM_MEDIUM_VALUES } from '@schibsted/tpaas-schemas';
1
+ import { UTM_MEDIUM_VALUES } from '../../tpaas-schemas';
2
+ import { isBrowser } from '../../utils';
3
3
  export const builder = () => {
4
4
  if (!isBrowser) {
5
5
  return {