@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.
Files changed (398) hide show
  1. package/dist/cjs/EventBus/EventBus.js +146 -0
  2. package/dist/cjs/Tracker.js +2499 -0
  3. package/dist/cjs/Tracker.test-d.js +76 -0
  4. package/dist/cjs/app-integration.js +40 -0
  5. package/dist/cjs/builders/actor.js +60 -0
  6. package/dist/cjs/builders/consent-manager.js +134 -0
  7. package/dist/cjs/builders/consents.js +149 -0
  8. package/dist/cjs/builders/device-browser.js +89 -0
  9. package/dist/cjs/builders/device-node.js +63 -0
  10. package/dist/cjs/builders/device.js +23 -0
  11. package/dist/cjs/builders/events-anonymous-browser.js +6 -0
  12. package/dist/cjs/builders/events-anonymous-node.js +88 -0
  13. package/dist/cjs/builders/events-anonymous.js +17 -0
  14. package/dist/cjs/builders/events-browser.js +8 -0
  15. package/dist/cjs/builders/events-node.js +127 -0
  16. package/dist/cjs/builders/events.js +17 -0
  17. package/dist/cjs/builders/experimentMetadata.js +25 -0
  18. package/dist/cjs/builders/experiments.js +32 -0
  19. package/dist/cjs/builders/index.js +52 -0
  20. package/dist/cjs/builders/location.js +38 -0
  21. package/dist/cjs/builders/objects/objects-anonymous-browser.js +36 -0
  22. package/dist/cjs/builders/objects/objects-anonymous-node.js +95 -0
  23. package/dist/cjs/builders/objects/objects-anonymous.js +23 -0
  24. package/dist/cjs/builders/objects/objects-browser.js +36 -0
  25. package/dist/cjs/builders/objects/objects-node.js +126 -0
  26. package/dist/cjs/builders/objects/objects.js +23 -0
  27. package/dist/cjs/builders/objects/utils.js +23 -0
  28. package/dist/cjs/builders/origin-browser.js +28 -0
  29. package/dist/cjs/builders/origin-node.js +29 -0
  30. package/dist/cjs/builders/origin.js +23 -0
  31. package/dist/cjs/builders/provider.js +24 -0
  32. package/dist/cjs/builders/session-browser.js +97 -0
  33. package/dist/cjs/builders/session-node.js +9 -0
  34. package/dist/cjs/builders/session.js +23 -0
  35. package/dist/cjs/builders/tracker-browser.js +34 -0
  36. package/dist/cjs/builders/tracker-node.js +22 -0
  37. package/dist/cjs/builders/trackerBuilder.js +23 -0
  38. package/dist/cjs/config-browser.js +26 -0
  39. package/dist/cjs/config.js +9 -0
  40. package/dist/cjs/createPulseTracker.js +50 -0
  41. package/dist/cjs/defer.js +20 -0
  42. package/dist/cjs/getPulseTracker.js +74 -0
  43. package/dist/cjs/identity/actor.js +60 -0
  44. package/dist/cjs/identity/advertising.js +62 -0
  45. package/dist/cjs/identity/cis.js +66 -0
  46. package/dist/cjs/identity/device.js +20 -0
  47. package/dist/cjs/identity/index.js +20 -0
  48. package/dist/cjs/index.js +57 -0
  49. package/dist/cjs/leaveTracking/constants.js +26 -0
  50. package/dist/cjs/leaveTracking/index.js +368 -0
  51. package/dist/cjs/leaveTracking/types.js +19 -0
  52. package/dist/cjs/leaveTrackingTpaas/constants.js +18 -0
  53. package/dist/cjs/leaveTrackingTpaas/index.js +341 -0
  54. package/dist/cjs/leaveTrackingTpaas/types.js +19 -0
  55. package/dist/cjs/network-browser.js +35 -0
  56. package/dist/cjs/network.js +15 -0
  57. package/dist/cjs/remoteConfig/index.js +124 -0
  58. package/dist/cjs/tracker-proxy/consts.js +72 -0
  59. package/dist/cjs/tracker-proxy/proxy-provider.js +68 -0
  60. package/dist/cjs/types.js +2 -0
  61. package/dist/cjs/version.json +1 -0
  62. package/dist/cjs/visibility-observer/index.js +101 -0
  63. package/dist/cjs/warnOnce.js +11 -0
  64. package/dist/cjs/wrapper/engagement/ui-element/event-builder.js +21 -0
  65. package/dist/cjs/wrapper/engagement/ui-element/types.js +2 -0
  66. package/dist/cjs/wrapper/types/base-event.js +2 -0
  67. package/dist/cjs/wrapper/types/engagement-event.js +2 -0
  68. package/dist/cjs/wrapper/types/event.js +2 -0
  69. package/dist/cjs/wrapper/types/index.js +19 -0
  70. package/dist/cjs/wrapper/types/utils.js +2 -0
  71. package/dist/cjs/wrapper/utils/get-navigation-type.js +32 -0
  72. package/dist/cjs/wrapper/utils/page-from-page-view.js +9 -0
  73. package/dist/cjs/wrapper/view/article/event-builder.js +19 -0
  74. package/dist/cjs/wrapper/view/article/types.js +2 -0
  75. package/dist/cjs/wrapper/view/frontpage/event-builder.js +16 -0
  76. package/dist/cjs/wrapper/view/frontpage/types.js +2 -0
  77. package/dist/cjs/wrapper/view/listing/event-builder.js +14 -0
  78. package/dist/cjs/wrapper/view/listing/types.js +2 -0
  79. package/dist/cjs/wrapper/view/loginposter/event-builder.js +11 -0
  80. package/dist/cjs/wrapper/view/loginposter/types.js +2 -0
  81. package/dist/cjs/wrapper/view/page/event-builder.js +18 -0
  82. package/dist/cjs/wrapper/view/page/types.js +2 -0
  83. package/dist/cjs/wrapper/view/salesposter/event-builder.js +18 -0
  84. package/dist/cjs/wrapper/view/salesposter/types.js +2 -0
  85. package/dist/cjs/wrapper/view/ui-element/event-builder.js +15 -0
  86. package/dist/cjs/wrapper/view/ui-element/types.js +2 -0
  87. package/dist/ejs/EventBus/EventBus.js +140 -0
  88. package/dist/ejs/Tracker.js +2455 -0
  89. package/dist/ejs/Tracker.test-d.js +71 -0
  90. package/dist/ejs/app-integration.js +33 -0
  91. package/dist/ejs/builders/actor.js +53 -0
  92. package/dist/ejs/builders/consent-manager.js +125 -0
  93. package/dist/ejs/builders/consents.js +138 -0
  94. package/dist/ejs/builders/device-browser.js +69 -0
  95. package/dist/ejs/builders/device-node.js +57 -0
  96. package/dist/ejs/builders/device.js +2 -0
  97. package/dist/ejs/builders/events-anonymous-browser.js +1 -0
  98. package/dist/ejs/builders/events-anonymous-node.js +48 -0
  99. package/dist/ejs/builders/events-anonymous.js +1 -0
  100. package/dist/ejs/builders/events-browser.js +1 -0
  101. package/dist/ejs/builders/events-node.js +84 -0
  102. package/dist/ejs/builders/events.js +1 -0
  103. package/dist/ejs/builders/experimentMetadata.js +21 -0
  104. package/dist/ejs/builders/experiments.js +27 -0
  105. package/dist/ejs/builders/index.js +12 -0
  106. package/dist/ejs/builders/location.js +34 -0
  107. package/dist/ejs/builders/objects/objects-anonymous-browser.js +14 -0
  108. package/dist/ejs/builders/objects/objects-anonymous-node.js +90 -0
  109. package/dist/ejs/builders/objects/objects-anonymous.js +2 -0
  110. package/dist/ejs/builders/objects/objects-browser.js +14 -0
  111. package/dist/ejs/builders/objects/objects-node.js +121 -0
  112. package/dist/ejs/builders/objects/objects.js +2 -0
  113. package/dist/ejs/builders/objects/utils.js +20 -0
  114. package/dist/ejs/builders/origin-browser.js +6 -0
  115. package/dist/ejs/builders/origin-node.js +24 -0
  116. package/dist/ejs/builders/origin.js +2 -0
  117. package/dist/ejs/builders/provider.js +18 -0
  118. package/dist/ejs/builders/session-browser.js +90 -0
  119. package/dist/ejs/builders/session-node.js +4 -0
  120. package/dist/ejs/builders/session.js +2 -0
  121. package/dist/ejs/builders/tracker-browser.js +13 -0
  122. package/dist/ejs/builders/tracker-node.js +14 -0
  123. package/dist/ejs/builders/trackerBuilder.js +2 -0
  124. package/dist/ejs/config-browser.js +23 -0
  125. package/dist/ejs/config.js +6 -0
  126. package/dist/ejs/createPulseTracker.js +44 -0
  127. package/dist/ejs/defer.js +17 -0
  128. package/dist/ejs/getPulseTracker.js +71 -0
  129. package/dist/ejs/identity/actor.js +51 -0
  130. package/dist/ejs/identity/advertising.js +57 -0
  131. package/dist/ejs/identity/cis.js +58 -0
  132. package/dist/ejs/identity/device.js +17 -0
  133. package/dist/ejs/identity/index.js +4 -0
  134. package/dist/ejs/index.js +9 -0
  135. package/dist/ejs/leaveTracking/constants.js +19 -0
  136. package/dist/ejs/leaveTracking/index.js +319 -0
  137. package/dist/ejs/leaveTracking/types.js +16 -0
  138. package/dist/ejs/leaveTrackingTpaas/constants.js +13 -0
  139. package/dist/ejs/leaveTrackingTpaas/index.js +291 -0
  140. package/dist/ejs/leaveTrackingTpaas/types.js +16 -0
  141. package/dist/ejs/network-browser.js +32 -0
  142. package/dist/ejs/network.js +12 -0
  143. package/dist/ejs/remoteConfig/index.js +111 -0
  144. package/dist/ejs/tracker-proxy/consts.js +68 -0
  145. package/dist/ejs/tracker-proxy/proxy-provider.js +62 -0
  146. package/dist/ejs/types.js +1 -0
  147. package/dist/ejs/version.json +1 -0
  148. package/dist/ejs/visibility-observer/index.js +97 -0
  149. package/dist/ejs/warnOnce.js +9 -0
  150. package/dist/ejs/wrapper/engagement/ui-element/event-builder.js +17 -0
  151. package/dist/ejs/wrapper/engagement/ui-element/types.js +1 -0
  152. package/dist/ejs/wrapper/types/base-event.js +1 -0
  153. package/dist/ejs/wrapper/types/engagement-event.js +1 -0
  154. package/dist/ejs/wrapper/types/event.js +1 -0
  155. package/dist/ejs/wrapper/types/index.js +3 -0
  156. package/dist/ejs/wrapper/types/utils.js +1 -0
  157. package/dist/ejs/wrapper/utils/get-navigation-type.js +29 -0
  158. package/dist/ejs/wrapper/utils/page-from-page-view.js +6 -0
  159. package/dist/ejs/wrapper/view/article/event-builder.js +15 -0
  160. package/dist/ejs/wrapper/view/article/types.js +1 -0
  161. package/dist/ejs/wrapper/view/frontpage/event-builder.js +12 -0
  162. package/dist/ejs/wrapper/view/frontpage/types.js +1 -0
  163. package/dist/ejs/wrapper/view/listing/event-builder.js +10 -0
  164. package/dist/ejs/wrapper/view/listing/types.js +1 -0
  165. package/dist/ejs/wrapper/view/loginposter/event-builder.js +7 -0
  166. package/dist/ejs/wrapper/view/loginposter/types.js +1 -0
  167. package/dist/ejs/wrapper/view/page/event-builder.js +14 -0
  168. package/dist/ejs/wrapper/view/page/types.js +1 -0
  169. package/dist/ejs/wrapper/view/salesposter/event-builder.js +14 -0
  170. package/dist/ejs/wrapper/view/salesposter/types.js +1 -0
  171. package/dist/ejs/wrapper/view/ui-element/event-builder.js +11 -0
  172. package/dist/ejs/wrapper/view/ui-element/types.js +1 -0
  173. package/dist/types/EventBus/EventBus.d.ts +106 -0
  174. package/dist/types/Tracker.d.ts +1418 -0
  175. package/dist/types/Tracker.test-d.d.ts +1 -0
  176. package/dist/types/app-integration.d.ts +10 -0
  177. package/dist/types/builders/actor.d.ts +39 -0
  178. package/dist/types/builders/consent-manager.d.ts +49 -0
  179. package/dist/types/builders/consents.d.ts +107 -0
  180. package/dist/types/builders/device-browser.d.ts +6 -0
  181. package/dist/types/builders/device-node.d.ts +65 -0
  182. package/dist/types/builders/device.d.ts +2 -0
  183. package/dist/types/builders/events-anonymous-browser.d.ts +1 -0
  184. package/dist/types/builders/events-anonymous-node.d.ts +82 -0
  185. package/dist/types/builders/events-anonymous.d.ts +1 -0
  186. package/dist/types/builders/events-browser.d.ts +1 -0
  187. package/dist/types/builders/events-node.d.ts +130 -0
  188. package/dist/types/builders/events.d.ts +1 -0
  189. package/dist/types/builders/experimentMetadata.d.ts +25 -0
  190. package/dist/types/builders/experiments.d.ts +24 -0
  191. package/dist/types/builders/index.d.ts +23 -0
  192. package/dist/types/builders/location.d.ts +34 -0
  193. package/dist/types/builders/objects/objects-anonymous-browser.d.ts +11 -0
  194. package/dist/types/builders/objects/objects-anonymous-node.d.ts +52 -0
  195. package/dist/types/builders/objects/objects-anonymous.d.ts +2 -0
  196. package/dist/types/builders/objects/objects-browser.d.ts +11 -0
  197. package/dist/types/builders/objects/objects-node.d.ts +60 -0
  198. package/dist/types/builders/objects/objects.d.ts +2 -0
  199. package/dist/types/builders/objects/utils.d.ts +1 -0
  200. package/dist/types/builders/origin-browser.d.ts +5 -0
  201. package/dist/types/builders/origin-node.d.ts +18 -0
  202. package/dist/types/builders/origin.d.ts +2 -0
  203. package/dist/types/builders/provider.d.ts +14 -0
  204. package/dist/types/builders/session-browser.d.ts +20 -0
  205. package/dist/types/builders/session-node.d.ts +3 -0
  206. package/dist/types/builders/session.d.ts +2 -0
  207. package/dist/types/builders/tracker-browser.d.ts +2 -0
  208. package/dist/types/builders/tracker-node.d.ts +14 -0
  209. package/dist/types/builders/trackerBuilder.d.ts +2 -0
  210. package/dist/types/config-browser.d.ts +23 -0
  211. package/dist/types/config.d.ts +6 -0
  212. package/dist/types/createPulseTracker.d.ts +21 -0
  213. package/dist/types/defer.d.ts +28 -0
  214. package/dist/types/getPulseTracker.d.ts +59 -0
  215. package/dist/types/identity/actor.d.ts +28 -0
  216. package/dist/types/identity/advertising.d.ts +30 -0
  217. package/dist/types/identity/cis.d.ts +21 -0
  218. package/dist/types/identity/device.d.ts +12 -0
  219. package/dist/types/identity/index.d.ts +4 -0
  220. package/dist/types/index.d.ts +31 -0
  221. package/dist/types/leaveTracking/constants.d.ts +26 -0
  222. package/dist/types/leaveTracking/index.d.ts +23 -0
  223. package/dist/types/leaveTracking/types.d.ts +78 -0
  224. package/dist/types/leaveTrackingTpaas/constants.d.ts +13 -0
  225. package/dist/types/leaveTrackingTpaas/index.d.ts +28 -0
  226. package/dist/types/leaveTrackingTpaas/types.d.ts +45 -0
  227. package/dist/types/network-browser.d.ts +5 -0
  228. package/dist/types/network.d.ts +4 -0
  229. package/dist/types/remoteConfig/index.d.ts +32 -0
  230. package/dist/types/tracker-proxy/consts.d.ts +45 -0
  231. package/dist/types/tracker-proxy/proxy-provider.d.ts +2 -0
  232. package/dist/types/types.d.ts +93 -0
  233. package/dist/types/visibility-observer/index.d.ts +38 -0
  234. package/dist/types/warnOnce.d.ts +2 -0
  235. package/dist/types/wrapper/engagement/ui-element/event-builder.d.ts +3 -0
  236. package/dist/types/wrapper/engagement/ui-element/types.d.ts +29 -0
  237. package/dist/types/wrapper/types/base-event.d.ts +74 -0
  238. package/dist/types/wrapper/types/engagement-event.d.ts +5 -0
  239. package/dist/types/wrapper/types/event.d.ts +41 -0
  240. package/dist/types/wrapper/types/index.d.ts +3 -0
  241. package/dist/types/wrapper/types/utils.d.ts +5 -0
  242. package/dist/types/wrapper/utils/get-navigation-type.d.ts +3 -0
  243. package/dist/types/wrapper/utils/page-from-page-view.d.ts +3 -0
  244. package/dist/types/wrapper/view/article/event-builder.d.ts +2 -0
  245. package/dist/types/wrapper/view/article/types.d.ts +27 -0
  246. package/dist/types/wrapper/view/frontpage/event-builder.d.ts +2 -0
  247. package/dist/types/wrapper/view/frontpage/types.d.ts +18 -0
  248. package/dist/types/wrapper/view/listing/event-builder.d.ts +2 -0
  249. package/dist/types/wrapper/view/listing/types.d.ts +27 -0
  250. package/dist/types/wrapper/view/loginposter/event-builder.d.ts +2 -0
  251. package/dist/types/wrapper/view/loginposter/types.d.ts +14 -0
  252. package/dist/types/wrapper/view/page/event-builder.d.ts +2 -0
  253. package/dist/types/wrapper/view/page/types.d.ts +16 -0
  254. package/dist/types/wrapper/view/salesposter/event-builder.d.ts +2 -0
  255. package/dist/types/wrapper/view/salesposter/types.d.ts +15 -0
  256. package/dist/types/wrapper/view/ui-element/event-builder.d.ts +3 -0
  257. package/dist/types/wrapper/view/ui-element/types.d.ts +28 -0
  258. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.d.ts +26 -0
  259. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.js +273 -0
  260. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis-browser.js.map +1 -0
  261. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.d.ts +10 -0
  262. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.js +7 -0
  263. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/cis.js.map +1 -0
  264. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.d.ts +14 -0
  265. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.js +39 -0
  266. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/eventEmitter.js.map +1 -0
  267. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.d.ts +4 -0
  268. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.js +12 -0
  269. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/index.js.map +1 -0
  270. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.d.ts +55 -0
  271. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.js +276 -0
  272. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/pulse-cookie.js.map +1 -0
  273. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.d.ts +36 -0
  274. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.js +87 -0
  275. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/pulseStorage.js.map +1 -0
  276. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.d.ts +6 -0
  277. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.js +21 -0
  278. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/storage/storage.js.map +1 -0
  279. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.d.ts +24 -0
  280. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.js +3 -0
  281. package/node_modules/@schibsted/pulse-cis-sync/dist/cjs/types.js.map +1 -0
  282. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.d.ts +26 -0
  283. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.js +203 -0
  284. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis-browser.js.map +1 -0
  285. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.d.ts +10 -0
  286. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.js +4 -0
  287. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/cis.js.map +1 -0
  288. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.d.ts +14 -0
  289. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.js +35 -0
  290. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/eventEmitter.js.map +1 -0
  291. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.d.ts +4 -0
  292. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.js +3 -0
  293. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/index.js.map +1 -0
  294. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.d.ts +55 -0
  295. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.js +254 -0
  296. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/pulse-cookie.js.map +1 -0
  297. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.d.ts +36 -0
  298. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.js +50 -0
  299. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/pulseStorage.js.map +1 -0
  300. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.d.ts +6 -0
  301. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.js +17 -0
  302. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/storage/storage.js.map +1 -0
  303. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.d.ts +24 -0
  304. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.js +2 -0
  305. package/node_modules/@schibsted/pulse-cis-sync/dist/ejs/types.js.map +1 -0
  306. package/node_modules/@schibsted/pulse-cis-sync/dist/types/cis-browser.d.ts +26 -0
  307. package/node_modules/@schibsted/pulse-cis-sync/dist/types/cis.d.ts +10 -0
  308. package/node_modules/@schibsted/pulse-cis-sync/dist/types/eventEmitter.d.ts +14 -0
  309. package/node_modules/@schibsted/pulse-cis-sync/dist/types/index.d.ts +4 -0
  310. package/node_modules/@schibsted/pulse-cis-sync/dist/types/pulse-cookie.d.ts +55 -0
  311. package/node_modules/@schibsted/pulse-cis-sync/dist/types/storage/pulseStorage.d.ts +36 -0
  312. package/node_modules/@schibsted/pulse-cis-sync/dist/types/storage/storage.d.ts +6 -0
  313. package/node_modules/@schibsted/pulse-cis-sync/dist/types/types.d.ts +24 -0
  314. package/node_modules/@schibsted/pulse-cis-sync/package.json +44 -0
  315. package/node_modules/@schibsted/pulse-utils/dist/cjs/cookie-config.js +10 -0
  316. package/node_modules/@schibsted/pulse-utils/dist/cjs/cookie.js +86 -0
  317. package/node_modules/@schibsted/pulse-utils/dist/cjs/events.js +109 -0
  318. package/node_modules/@schibsted/pulse-utils/dist/cjs/get.js +18 -0
  319. package/node_modules/@schibsted/pulse-utils/dist/cjs/getRootDomain.js +54 -0
  320. package/node_modules/@schibsted/pulse-utils/dist/cjs/index.js +38 -0
  321. package/node_modules/@schibsted/pulse-utils/dist/cjs/merge.js +38 -0
  322. package/node_modules/@schibsted/pulse-utils/dist/cjs/objects.js +34 -0
  323. package/node_modules/@schibsted/pulse-utils/dist/cjs/omit.js +9 -0
  324. package/node_modules/@schibsted/pulse-utils/dist/cjs/randomString.js +18 -0
  325. package/node_modules/@schibsted/pulse-utils/dist/cjs/throttle.js +34 -0
  326. package/node_modules/@schibsted/pulse-utils/dist/cjs/webApi.js +21 -0
  327. package/node_modules/@schibsted/pulse-utils/dist/ejs/cookie-config.js +7 -0
  328. package/node_modules/@schibsted/pulse-utils/dist/ejs/cookie.js +81 -0
  329. package/node_modules/@schibsted/pulse-utils/dist/ejs/events.js +103 -0
  330. package/node_modules/@schibsted/pulse-utils/dist/ejs/get.js +15 -0
  331. package/node_modules/@schibsted/pulse-utils/dist/ejs/getRootDomain.js +49 -0
  332. package/node_modules/@schibsted/pulse-utils/dist/ejs/index.js +11 -0
  333. package/node_modules/@schibsted/pulse-utils/dist/ejs/merge.js +35 -0
  334. package/node_modules/@schibsted/pulse-utils/dist/ejs/objects.js +26 -0
  335. package/node_modules/@schibsted/pulse-utils/dist/ejs/omit.js +6 -0
  336. package/node_modules/@schibsted/pulse-utils/dist/ejs/randomString.js +15 -0
  337. package/node_modules/@schibsted/pulse-utils/dist/ejs/throttle.js +31 -0
  338. package/node_modules/@schibsted/pulse-utils/dist/ejs/webApi.js +17 -0
  339. package/node_modules/@schibsted/pulse-utils/dist/types/cookie-config.d.ts +7 -0
  340. package/node_modules/@schibsted/pulse-utils/dist/types/cookie.d.ts +23 -0
  341. package/node_modules/@schibsted/pulse-utils/dist/types/events.d.ts +17 -0
  342. package/node_modules/@schibsted/pulse-utils/dist/types/get.d.ts +1 -0
  343. package/node_modules/@schibsted/pulse-utils/dist/types/getRootDomain.d.ts +13 -0
  344. package/node_modules/@schibsted/pulse-utils/dist/types/index.d.ts +11 -0
  345. package/node_modules/@schibsted/pulse-utils/dist/types/merge.d.ts +4 -0
  346. package/node_modules/@schibsted/pulse-utils/dist/types/objects.d.ts +6 -0
  347. package/node_modules/@schibsted/pulse-utils/dist/types/omit.d.ts +3 -0
  348. package/node_modules/@schibsted/pulse-utils/dist/types/randomString.d.ts +1 -0
  349. package/node_modules/@schibsted/pulse-utils/dist/types/throttle.d.ts +3 -0
  350. package/node_modules/@schibsted/pulse-utils/dist/types/webApi.d.ts +10 -0
  351. package/node_modules/@schibsted/pulse-utils/package.json +36 -0
  352. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/anonymous.js +8 -0
  353. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/baseEvent.js +9 -0
  354. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/consents.js +15 -0
  355. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/device.js +211 -0
  356. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/experiments.js +11 -0
  357. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/navigationType.js +52 -0
  358. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/pageInfo.js +24 -0
  359. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/pageviewId.js +11 -0
  360. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/provider.js +12 -0
  361. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/referrer.js +19 -0
  362. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/session.js +114 -0
  363. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/time.js +15 -0
  364. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/trackerBuilder.js +15 -0
  365. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/user.js +26 -0
  366. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders/utm.js +35 -0
  367. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/builders.js +264 -0
  368. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/index.js +17 -0
  369. package/node_modules/@schibsted/tpaas-event-builder/dist/cjs/types.js +2 -0
  370. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/anonymous.js +5 -0
  371. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/baseEvent.js +6 -0
  372. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/consents.js +12 -0
  373. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/device.js +174 -0
  374. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/experiments.js +7 -0
  375. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/navigationType.js +48 -0
  376. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/pageInfo.js +20 -0
  377. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/pageviewId.js +7 -0
  378. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/provider.js +9 -0
  379. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/referrer.js +15 -0
  380. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/session.js +108 -0
  381. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/time.js +11 -0
  382. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/trackerBuilder.js +11 -0
  383. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/user.js +22 -0
  384. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders/utm.js +31 -0
  385. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/builders.js +209 -0
  386. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/index.js +1 -0
  387. package/node_modules/@schibsted/tpaas-event-builder/dist/ejs/types.js +1 -0
  388. package/node_modules/@schibsted/tpaas-event-builder/dist/index.d.ts +5171 -0
  389. package/node_modules/@schibsted/tpaas-event-builder/package.json +40 -0
  390. package/node_modules/@schibsted/tpaas-schemas/dist/cjs/constants.js +62 -1
  391. package/node_modules/@schibsted/tpaas-schemas/dist/ejs/constants.js +61 -0
  392. package/node_modules/@schibsted/tpaas-schemas/dist/index.d.ts +128 -0
  393. package/package.json +58 -13
  394. package/CHANGELOG.md +0 -1035
  395. package/dist/index.d.ts +0 -13
  396. package/dist/index.d.ts.map +0 -1
  397. package/dist/index.js +0 -47
  398. package/dist/index.js.map +0 -1
@@ -0,0 +1,2499 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.BookmarkKeys = void 0;
40
+ exports.subscribe = subscribe;
41
+ exports.subscribeOnce = subscribeOnce;
42
+ exports.subscribeWithState = subscribeWithState;
43
+ exports.unsubscribe = unsubscribe;
44
+ const pulse_cis_sync_1 = require("@schibsted/pulse-cis-sync");
45
+ const pulse_utils_1 = require("@schibsted/pulse-utils");
46
+ const tpaas_event_builder_1 = require("@schibsted/tpaas-event-builder");
47
+ const tpaas_schemas_1 = require("@schibsted/tpaas-schemas");
48
+ const loglevel_1 = __importDefault(require("loglevel"));
49
+ const uuid_1 = require("uuid");
50
+ const app_integration_1 = require("./app-integration");
51
+ const builders_1 = require("./builders");
52
+ const consent_manager_1 = require("./builders/consent-manager");
53
+ const consents_1 = require("./builders/consents");
54
+ const events_1 = require("./builders/events");
55
+ const events_anonymous_node_1 = require("./builders/events-anonymous-node");
56
+ const session_browser_1 = require("./builders/session-browser");
57
+ const config_1 = require("./config");
58
+ const config_browser_1 = require("./config-browser");
59
+ const defer_1 = __importDefault(require("./defer"));
60
+ const EventBus_1 = require("./EventBus/EventBus");
61
+ const identity = __importStar(require("./identity"));
62
+ const leaveTracking_1 = require("./leaveTracking");
63
+ const leaveTrackingTpaas_1 = require("./leaveTrackingTpaas");
64
+ const network_1 = __importDefault(require("./network"));
65
+ const config = __importStar(require("./remoteConfig"));
66
+ const proxy_provider_1 = require("./tracker-proxy/proxy-provider");
67
+ const version_json_1 = __importDefault(require("./version.json"));
68
+ const visibility_observer_1 = require("./visibility-observer");
69
+ const warnOnce_1 = __importDefault(require("./warnOnce"));
70
+ const event_builder_1 = require("./wrapper/engagement/ui-element/event-builder");
71
+ const page_from_page_view_1 = require("./wrapper/utils/page-from-page-view");
72
+ const event_builder_2 = require("./wrapper/view/article/event-builder");
73
+ const event_builder_3 = require("./wrapper/view/frontpage/event-builder");
74
+ const event_builder_4 = require("./wrapper/view/listing/event-builder");
75
+ const event_builder_5 = require("./wrapper/view/loginposter/event-builder");
76
+ const event_builder_6 = require("./wrapper/view/page/event-builder");
77
+ const event_builder_7 = require("./wrapper/view/salesposter/event-builder");
78
+ const event_builder_8 = require("./wrapper/view/ui-element/event-builder");
79
+ const { generateProviderSDRN: providerSdrn } = builders_1.provider;
80
+ /**
81
+ * Event Builder lookup
82
+ * @internal
83
+ */
84
+ const events = {
85
+ identity: events_1.identityEvent,
86
+ trackerEvent: events_1.trackerEvent,
87
+ engagementEvent: events_1.engagementEvent,
88
+ routableEvent: events_1.routableEvent,
89
+ };
90
+ /**
91
+ * @typeParam T Type of event to track
92
+ * @param name
93
+ * @internal
94
+ */
95
+ function getEventBuilder(name) {
96
+ return name in events ? events[name] : events.trackerEvent;
97
+ }
98
+ /**
99
+ * Event Builder lookup for anonymous events
100
+ * @internal
101
+ */
102
+ const anonymousEvents = {
103
+ trackerEvent: events_anonymous_node_1.anonymousTrackerEvent,
104
+ engagementEvent: events_anonymous_node_1.anonymousEngagementEvent,
105
+ };
106
+ /**
107
+ * @typeParam T Type of event to track
108
+ * @param name
109
+ * @internal
110
+ */
111
+ function getAnonymousEventBuilder(name) {
112
+ return name in anonymousEvents ? anonymousEvents[name] : anonymousEvents.trackerEvent;
113
+ }
114
+ /**
115
+ * Determines if the SDK is running in a Hybrid (WebView) environment.
116
+ *
117
+ * @remarks
118
+ *
119
+ * Historically, we have detected the presence of "nativeJwe" config coming from the native app to flag that setup.
120
+ * Additionally, a config param can be passed to explicitly indicate that the tracker was initialised in a mobile WebView.
121
+ *
122
+ * @param config {SDKConfigInput}
123
+ * @internal
124
+ */
125
+ const isHybrid = (config) => Boolean(config?.isHybrid) || Boolean(config?.nativeJwe);
126
+ /**
127
+ * @internal
128
+ * Used to register whether the Collector and CIS base urls are set in the config params, before the state is populated
129
+ * with the default values.
130
+ */
131
+ let isCollectorInConfig = false;
132
+ let isCisInConfig = false;
133
+ /**
134
+ * @internal
135
+ */
136
+ exports.BookmarkKeys = {
137
+ PAGE_VIEW: 'page-view',
138
+ };
139
+ const eventBus = (0, EventBus_1.createEventBus)({
140
+ namespace: 'pulse',
141
+ domBridge: true,
142
+ preventBridgeEcho: true,
143
+ });
144
+ function subscribe(eventName, callback) {
145
+ return eventBus.on(eventName, callback);
146
+ }
147
+ function subscribeOnce(eventName, callback) {
148
+ return eventBus.once(eventName, callback);
149
+ }
150
+ function subscribeWithState(eventName, callback) {
151
+ return eventBus.onWithState(eventName, callback);
152
+ }
153
+ function unsubscribe(eventName, callback) {
154
+ eventBus.off(eventName, callback);
155
+ }
156
+ /**
157
+ * @class Tracker
158
+ */
159
+ class Tracker {
160
+ /**
161
+ * > [!WARNING]
162
+ * >
163
+ * > For legacy reasons the `providerId` parameter is called so, but it is actually the
164
+ * > `CLIENT-ID` of the site or app.
165
+ * > Do not mix it up with a full `SDRN` Provider ID. Ex:<br/>
166
+ * > * `PROVIDER-ID` = `sdrn:schibsted:client:my-client-id`<br/>
167
+ * > * `CLIENT-ID` = `my-client-id` = `config.providerId`
168
+ *
169
+ * @param providerId `CLIENT-ID` of the site or app.
170
+ * @param config Options to set the SDK with
171
+ * @param builders Initial values for event properties that will be persisted across events
172
+ */
173
+ constructor(providerId, config, builders) {
174
+ // we have separated observers for legacy and tpaas events in order to allow
175
+ // the tracking of the same element with both old and new events at the same time
176
+ this.legacyVisibilityObservers = new Map();
177
+ this.visibilityObservers = new Map();
178
+ this.legacyCurrentPage = {
179
+ id: 'undefined-id',
180
+ type: 'Page',
181
+ url: typeof window !== 'undefined' ? window.location.href : '',
182
+ };
183
+ this.currentPage = undefined;
184
+ /**
185
+ * Promise that resolves when a session ID becomes available
186
+ * @private
187
+ */
188
+ this.sessionIdPromise = null;
189
+ this.setPageDefaults = (pageViewEvent) => {
190
+ this.legacyCurrentPage = (0, page_from_page_view_1.pageFromPageView)(pageViewEvent);
191
+ if (pageViewEvent.origin) {
192
+ const pageDefaults = { origin: pageViewEvent.origin };
193
+ this.update(pageDefaults, true);
194
+ }
195
+ };
196
+ this.setCurrentPage = (id, type) => {
197
+ this.currentPage = {
198
+ pageId: id,
199
+ pageType: type,
200
+ url: pulse_utils_1.isBrowser ? window.location.href : undefined,
201
+ };
202
+ };
203
+ loglevel_1.default.setLevel(config?.logLevel ?? loglevel_1.default.levels.ERROR);
204
+ // runtime check for providerId inconsistency
205
+ if (!providerId || !(typeof providerId === 'string')) {
206
+ throw new Error('Required parameter `providerId` missing');
207
+ }
208
+ let includeAdvertising;
209
+ if (pulse_utils_1.isBrowser && config?.autoCreateConsents) {
210
+ config.consents = (0, consent_manager_1.getConsentsWaitForAnalytics)((consents) => {
211
+ loglevel_1.default.debug('Consents received from CMP', consents);
212
+ return this.setConsentsInternal(consents);
213
+ });
214
+ }
215
+ if ((0, pulse_utils_1.isPromise)(config?.consents)) {
216
+ includeAdvertising = (0, consents_1.applyAdvertisingConsent)(config?.consents, config?.requireAdvertisingOptIn);
217
+ }
218
+ else {
219
+ includeAdvertising = (0, consents_1.applyAdvertisingConsentSync)(config?.consents, config?.requireAdvertisingOptIn);
220
+ }
221
+ // TODO: this check should not be necessary. The config should be mandatory as a type, fix it in the future
222
+ if (config) {
223
+ config.nativeJwe = (0, app_integration_1.getDefaultNativeJwe)(config);
224
+ config.altEventHandler = (0, app_integration_1.getDefaultAltHandler)(config);
225
+ }
226
+ isCisInConfig = Boolean(config?.cisBaseUrl);
227
+ isCollectorInConfig = Boolean(config?.collectorBaseUrl);
228
+ identity.clearCookieJweIfStale(config?.nativeJwe);
229
+ const deployStage = config?.deployStage || 'pro';
230
+ const deployStageTpaas = config?.deployStageTpaas || 'pre';
231
+ this.state = (0, pulse_utils_1.pulseMerge)({}, config_1.baseConfig, {
232
+ collectorBaseUrl: config_browser_1.collectorEndpoints[deployStage],
233
+ deployStage,
234
+ deployStageTpaas,
235
+ fallbackCisBaseUrl: config_browser_1.CISEndpoints[deployStage],
236
+ fallbackCollectorBaseUrl: config_browser_1.collectorEndpoints[deployStage],
237
+ includeAdvertising,
238
+ isHybrid: isHybrid(config),
239
+ pageViewId: (0, uuid_1.v4)(),
240
+ providerId,
241
+ remoteConfigurationUrl: config_browser_1.remoteConfig[deployStage],
242
+ schemaLocation: 'schema.schibsted.com',
243
+ tpaasCollectorBaseUrl: config_browser_1.collectorEndpoints[deployStageTpaas],
244
+ trackerId: (0, uuid_1.v4)(),
245
+ vendors: config?.vendors?.length ? [] : ['xandr'],
246
+ }, config);
247
+ // Move to default config?
248
+ this.builders = (0, pulse_utils_1.pulseMerge)({}, builders, {
249
+ provider: {
250
+ id: providerId,
251
+ },
252
+ tracker: {
253
+ version: version_json_1.default.SDK_VERSION,
254
+ },
255
+ });
256
+ this.bookmark = new Map();
257
+ // Replace with a linked list of Promises?
258
+ this.eventQueue = [];
259
+ this.retryEventQueue = [];
260
+ this.tpaasEventQueue = [];
261
+ this.anonymousEventQueue = [];
262
+ this.retryAnonymousEventQueue = [];
263
+ this.retryTpaasEventQueue = [];
264
+ if (this.state.environment === 'browser') {
265
+ // @ts-expect-error
266
+ if (pulse_utils_1.isBrowser && window.navigator?.sendBeacon) {
267
+ const originalUseBeacon = this.state.useBeacon;
268
+ window.addEventListener('pagehide', () => {
269
+ this.state.useBeacon = true;
270
+ this._sendImmediately().then(() => {
271
+ void 0;
272
+ });
273
+ }, { capture: true });
274
+ window.addEventListener('pageshow', () => {
275
+ this.state.useBeacon = originalUseBeacon;
276
+ });
277
+ }
278
+ }
279
+ // @ts-expect-error
280
+ this.debouncedSend = (0, pulse_utils_1.throttle)(async () => {
281
+ try {
282
+ return await this._sendImmediately();
283
+ }
284
+ catch (err) {
285
+ return err;
286
+ }
287
+ }, this.state.eventDebounce);
288
+ // @ts-expect-error
289
+ this.debouncedSendAnonymous = (0, pulse_utils_1.throttle)(async () => {
290
+ try {
291
+ return await this._sendImmediatelyAnonymous();
292
+ }
293
+ catch (err) {
294
+ return err;
295
+ }
296
+ }, this.state.eventDebounce);
297
+ // @ts-expect-error
298
+ this.debouncedSendTpaas = (0, pulse_utils_1.throttle)(async () => {
299
+ try {
300
+ return await this._sendImmediatelyTpaas();
301
+ }
302
+ catch (err) {
303
+ return err;
304
+ }
305
+ }, this.state.eventDebounce);
306
+ eventBus.emit('tracker:ready', { tracker: this });
307
+ }
308
+ /**
309
+ * Add event to the tracker event queue
310
+ *
311
+ * The input can be objects, arrays, primitives or promises. The
312
+ * order of calls to the method is not guaranteed to be sent in the same
313
+ * sequence.
314
+ *
315
+ * ```
316
+ * tracker.track('trackerEvent', {
317
+ * actor: new Promise(resolve => setTimeout(() => resolve('person@example.org'), 2000))
318
+ * });
319
+ * tracker.track('trackerEvent', { type: 'Engagement '});
320
+ *
321
+ * ```
322
+ *
323
+ * The second call to `track` will be added to the event queue before the
324
+ * first since all input to events are resolved before being added to the
325
+ * internal queue. Setting the future value in the SDK state will block all
326
+ * events and events will be added to the queue in order.
327
+ *
328
+ * ```
329
+ * tracker.update({
330
+ * actor: new Promise(resolve =>
331
+ * setTimeout(() => resolve('person@example.org'), 2000)) })
332
+ * tracker.track('trackerEvent', { type: 'View' });
333
+ * tracker.track('trackerEvent', { type: 'Engagement' });
334
+ * ```
335
+ *
336
+ * Both of these events will be blocked for two seconds and executed in order.
337
+ *
338
+ * @typeParam T Type of event to track
339
+ * @param eventType. See [spt-tracking/pulse-event-builders]() for
340
+ * available event types
341
+ * @param input. input input to the given event. The given input and the
342
+ * persisted input in the tracker will be merged before passing it to the event
343
+ * function.
344
+ * @param {TrackOptions} options
345
+ * @category Legacy Tracking
346
+ */
347
+ track(eventType, input, options) {
348
+ const currentBuilders = { ...this.builders };
349
+ const _track = async (trackResponse) => {
350
+ const createdEvent = this.createEvent(input);
351
+ return this.evaluateEvent(eventType, createdEvent, currentBuilders, options).then(async (event) => {
352
+ if (options?.bookmarkKey) {
353
+ this.bookmark.set(options.bookmarkKey, event);
354
+ }
355
+ // if we have an alternative handler defined, send events there
356
+ // instead of pushing them onto the queue.
357
+ if (this.state.altEventHandler) {
358
+ const handler = this.state.altEventHandler;
359
+ handler(JSON.stringify(event));
360
+ return Promise.resolve(trackResponse);
361
+ }
362
+ const queuedEvent = this._push(event, options).then(() => void 0);
363
+ await this.send();
364
+ return queuedEvent.then((result) => result);
365
+ });
366
+ };
367
+ return this.syncRemoteResources(input, currentBuilders).then(_track, _track);
368
+ }
369
+ /**
370
+ * Add anonymous event to the tracker anonymous event queue
371
+ *
372
+ * The input can be objects, arrays, primitives or promises. The
373
+ * order of calls to the method is not guaranteed to be sent in the same
374
+ * sequence.
375
+ *
376
+ * ```
377
+ * tracker.trackAnonymous('trackerEvent', { type: 'Engagement'});
378
+ * ```
379
+ *
380
+ * Anonymous events will not contain: `session`, `actor`, `device`, `location`, `pageViewId`.
381
+ *
382
+ * Anonymous events will always have the `isAnonymous` field set to true.
383
+ *
384
+ * Anonymous events will not await for consents. They will be applied if available, otherwise it will fall back to `unknown`.
385
+ *
386
+ * Considering the above, you should *not* add custom fields that can break anonymity.
387
+ *
388
+ * If you are missing consents, you're also not allowed to interact with storage or cookies for the purpose of these events.
389
+ * @typeParam T Type of event to track
390
+ * @param eventType.
391
+ * @param input. input input to the given event. The given input and the
392
+ * persisted input in the tracker will be merged before passing it to the event
393
+ * function.
394
+ * @param {TrackOptions} options
395
+ * @category Tracking Anonymous
396
+ */
397
+ async trackAnonymous(eventType, input, options) {
398
+ // We must create the event as soon as possible, as it defines the creationDate.
399
+ const newEvent = this.createAnonymousEvent(input);
400
+ // Remote config values ----------------
401
+ await this._applyRemoteConfigEndpoints();
402
+ // Resolve all available properties ----------------
403
+ const resolvedOutput = await Promise.all([this.resolveTrackInput(newEvent), this.resolveTrackGlobals()]);
404
+ let eventOutput = resolvedOutput.reduce((acc, p) => (0, pulse_utils_1.pulseMerge)(acc, p), {});
405
+ eventOutput = this.applyAnonymousEventTypeDefaults(eventOutput, eventType);
406
+ // Leave Events ----------------
407
+ // they require (most) properties of the previous PageView event, which was saved under a bookmark key when tracked
408
+ eventOutput = this.applyBookmarkedEvent(eventOutput, options?.applyBookmarkKey);
409
+ // TCF Consents ----------------
410
+ eventOutput = this.applyConsentsAnonymous(eventOutput);
411
+ // Build the entire event----------------
412
+ // Depending on the event type, like Tracker or Engagement.
413
+ eventOutput = getAnonymousEventBuilder(eventType)({
414
+ eventInput: eventOutput,
415
+ sdkConfig: this.state,
416
+ });
417
+ if (options?.bookmarkKey) {
418
+ this.bookmark.set(options.bookmarkKey, eventOutput);
419
+ }
420
+ // Dispatch ----------------
421
+ // The Hybrid use case implements a "bridged" event method, injected into the window scope,
422
+ // which is used to send events through the native app.
423
+ if (this.state.altEventHandler) {
424
+ this.state.altEventHandler(JSON.stringify(eventOutput));
425
+ return eventOutput;
426
+ }
427
+ const queuedEvent = this._pushAnonymous(eventOutput, options);
428
+ await this.sendAnonymous();
429
+ return queuedEvent;
430
+ }
431
+ async adaptExperiments(baseExperiments = []) {
432
+ return baseExperiments.map((exp) => {
433
+ return {
434
+ name: exp.name || exp.id,
435
+ variant: exp.variant || '',
436
+ };
437
+ });
438
+ }
439
+ /**
440
+ *
441
+ * @private
442
+ * @category TPaaS Tracking
443
+ */
444
+ async prepareAnonymousTpaasEvent() {
445
+ try {
446
+ await this._applyRemoteConfigEndpoints();
447
+ }
448
+ catch (ex) {
449
+ loglevel_1.default.trace('Failed to sync remote config', ex);
450
+ }
451
+ return {
452
+ autoTrackerVersion: this.builders.tracker?.autoTrackerVersion,
453
+ version: version_json_1.default.SDK_VERSION,
454
+ isHybrid: !!this.state.isHybrid,
455
+ pageviewId: this.state.pageViewId,
456
+ providerId: this.state.providerId,
457
+ experiments: await this.adaptExperiments(this.builders.experiments),
458
+ };
459
+ }
460
+ /**
461
+ *
462
+ * @private
463
+ * @category TPaaS Tracking
464
+ */
465
+ async prepareTpaasEvent() {
466
+ try {
467
+ await this.syncRemoteResources(undefined, { ...this.builders });
468
+ }
469
+ catch (ex) {
470
+ loglevel_1.default.trace('Failed to sync remote resources', ex);
471
+ // remote config and CIS failures are also ignored for the old track() method. doing the same here
472
+ }
473
+ function adaptActorToNewFormat(actor) {
474
+ // this is a temporary solution to adapt the actor to the new format
475
+ // it should be removed once we have new methods in place to get the actor
476
+ if (!actor) {
477
+ return;
478
+ }
479
+ return {
480
+ id: actor.id?.toString() || '',
481
+ realm: actor.realm || '',
482
+ hasAnySubscription: !!actor.hasAnySubscription,
483
+ region: (0, pulse_utils_1.isString)(actor.region) ? actor.region : undefined,
484
+ };
485
+ }
486
+ function adaptConsentsToNewFormat(consents) {
487
+ if (!consents) {
488
+ return;
489
+ }
490
+ const { purposes, source } = consents;
491
+ const { CMP_ADVERTISING, CMP_ANALYTICS, CMP_MARKETING, CMP_PERSONALIZATION } = purposes;
492
+ function adaptStatusOrOptIn({ status, optIn }) {
493
+ // doing an unnecessary check for status here
494
+ // because otherwise the code after the switch will be marked as unreachable in the IDE
495
+ if (status) {
496
+ switch (status) {
497
+ case 'accepted':
498
+ return 'Accepted';
499
+ case 'rejected':
500
+ return 'Rejected';
501
+ case 'unknown':
502
+ return 'Unknown';
503
+ }
504
+ }
505
+ if (optIn === true) {
506
+ return 'Accepted';
507
+ }
508
+ if (optIn === false) {
509
+ return 'Rejected';
510
+ }
511
+ return 'Unknown';
512
+ }
513
+ return {
514
+ advertising: adaptStatusOrOptIn(CMP_ADVERTISING),
515
+ analytics: adaptStatusOrOptIn(CMP_ANALYTICS),
516
+ marketing: adaptStatusOrOptIn(CMP_MARKETING),
517
+ personalization: adaptStatusOrOptIn(CMP_PERSONALIZATION),
518
+ source: source || 'unknown',
519
+ };
520
+ }
521
+ const [actor, consents, experiments] = await Promise.all([
522
+ this.getActor(),
523
+ this.getConsents(),
524
+ this.adaptExperiments(this.builders.experiments),
525
+ ]);
526
+ const { environmentId, jwe } = (0, pulse_cis_sync_1.parsePulseCookies)();
527
+ return {
528
+ autoTrackerVersion: this.builders.tracker?.autoTrackerVersion,
529
+ version: version_json_1.default.SDK_VERSION,
530
+ isHybrid: !!this.state.isHybrid,
531
+ user: adaptActorToNewFormat(actor),
532
+ consents: adaptConsentsToNewFormat(consents),
533
+ providerId: this.state.providerId,
534
+ pageviewId: this.state.pageViewId,
535
+ currentPage: this.currentPage,
536
+ experiments,
537
+ environmentId,
538
+ jwe,
539
+ };
540
+ }
541
+ /**
542
+ * Generate a generic TPaaS event with common builders output
543
+ * The method should be used for experiments, not for real production work.
544
+ * It doesn't have any real TPaaS schema associated with it.
545
+ * The method doesn't queue or send the event, it just returns the merged object.
546
+ * The method can be removed at any time in the future, so use it with caution.
547
+ *
548
+ * @param input - The input object to merge with the common builders output
549
+ * @returns A promise that resolves to the merged object
550
+ * @private
551
+ * @category TPaaS Tracking
552
+ */
553
+ async generateGenericTpaasEvent(input) {
554
+ const dependencies = await this.prepareTpaasEvent();
555
+ return (0, pulse_utils_1.pulseMerge)({}, input, (0, tpaas_event_builder_1.getCommonBuildersOutput)(new Date(), dependencies));
556
+ }
557
+ /**
558
+ * This method extends the list of base experiments that will be automatically included in every event sent by the tracker.
559
+ *
560
+ * It accepts:
561
+ * - An array of experiments and/or promises resolving to the experiments
562
+ * - A Promise resolving to an array of experiments
563
+ *
564
+ * This allows to easily manage experiments without having to repeat them in every tracking call. For example:
565
+ *
566
+ * ```ts
567
+ * const experiments = [{ id: 'experiment-A', variant: 'blue-button' }];
568
+ *
569
+ * tracker.addExperiments(experiments);
570
+ * ```
571
+
572
+ Calling the method multiple times concatenates all given experiments and stores them as base experiments. Experiments can be either direct values or Promises, and they will be included in all future tracking events.
573
+
574
+ * @param experiments
575
+ * @category Tracking
576
+ */
577
+ addExperiments(experiments) {
578
+ this.update({ experiments }, true);
579
+ }
580
+ /**
581
+ * The `addUIElementVisibilityTracking` function provides an interface for sending tracking events when specific UI elements become visible within the viewport.
582
+ * It is built on the `VisibilityObserver` class, which efficiently detects visibility changes in DOM elements.
583
+ * When an element becomes at least 2/3 visible, a callback is triggered to process the element and create a tracking event.
584
+ * It leverages the [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) for viewport tracking
585
+ * and the [Mutation Observer API](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) to monitor lazy-loaded elements.
586
+ *
587
+ * Example usage:
588
+ *
589
+ * ```ts
590
+ * addUIElementVisibilityTracking('[data-pulse-entity-id]', (element) => {
591
+ * const target = createPulseTarget(element);
592
+ * const object = createPulseObject(element);
593
+ *
594
+ * return { object, target };
595
+ * });
596
+ * ```
597
+ *
598
+ * @param {string} selector - CSS selector for elements to track.
599
+ * @param {Function} buildEventFromElement - Function to build event object when element is visible.
600
+ * @deprecated This only works for legacy events. For TPaaS events, use `addUIElementVisibilityTracking` instead.
601
+ * @category Legacy Tracking
602
+ */
603
+ addLegacyUIElementVisibilityTracking(selector, buildEventFromElement) {
604
+ if (this.legacyVisibilityObservers.has(selector)) {
605
+ console.warn(`Cannot add UI Element visibility tracking for selector "${selector}" as it is already being tracked.`);
606
+ return;
607
+ }
608
+ this.legacyVisibilityObservers.set(selector, new visibility_observer_1.VisibilityObserver((element) => {
609
+ const viewUIElementInputProperties = buildEventFromElement(element);
610
+ this.trackLegacyViewUIElement(viewUIElementInputProperties);
611
+ }));
612
+ this.legacyVisibilityObservers.get(selector)?.observe(selector);
613
+ }
614
+ /**
615
+ * The `addUIElementVisibilityTracking` function provides an interface for sending tracking events when specific UI elements become visible within the viewport.
616
+ * It is built on the `VisibilityObserver` class, which efficiently detects visibility changes in DOM elements.
617
+ * When an element becomes at least 2/3 visible, a callback is triggered to process the element and create a tracking event.
618
+ * It leverages the [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) for viewport tracking
619
+ * and the [Mutation Observer API](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) to monitor lazy-loaded elements.
620
+ *
621
+ * Example usage:
622
+ *
623
+ * ```ts
624
+ * addUIElementVisibilityTracking('[data-pulse-entity-id]', (element) => {
625
+ * const eventInput = createEventInput(element);
626
+ *
627
+ * return eventInput;
628
+ * });
629
+ * ```
630
+ *
631
+ * @param {string} selector - CSS selector for elements to track.
632
+ * @param {Function} buildEventFromElement - Function to build event object when element is visible.
633
+ * @category Tracking
634
+ */
635
+ addUIElementVisibilityTracking(selector, buildEventFromElement) {
636
+ if (this.visibilityObservers.has(selector)) {
637
+ console.warn(`Cannot add UI Element visibility tracking for selector "${selector}" as it is already being tracked.`);
638
+ return;
639
+ }
640
+ this.visibilityObservers.set(selector, new visibility_observer_1.VisibilityObserver((element) => {
641
+ const eventInput = buildEventFromElement(element);
642
+ this.trackImpressionUIElement(eventInput);
643
+ }));
644
+ this.visibilityObservers.get(selector)?.observe(selector);
645
+ }
646
+ /**
647
+ * The old trackViewArticle method from the Media Wrapper.
648
+ * When triggering this page-view function, both the "page" object and "origin"
649
+ * will be stored and re-used across subsequent events.
650
+ *
651
+ * @param inputProperties
652
+ * @param trackOptions
653
+ * @category Legacy Tracking
654
+ */
655
+ trackLegacyViewArticle(inputProperties, trackOptions) {
656
+ const viewArticleEventData = (0, event_builder_2.buildLegacyViewArticleEvent)(inputProperties);
657
+ this.setPageDefaults(viewArticleEventData);
658
+ return this.trackPageView(viewArticleEventData, trackOptions);
659
+ }
660
+ /**
661
+ * The old trackViewLoginPoster method from the Media Wrapper.
662
+ * When triggering this page-view function, both the "page" object and "origin"
663
+ * will be stored and re-used across subsequent events.
664
+ *
665
+ * @param inputProperties
666
+ * @param trackOptions
667
+ * @category Legacy Tracking
668
+ */
669
+ trackLegacyViewLoginPoster(inputProperties, trackOptions) {
670
+ const viewLoginPosterEventData = (0, event_builder_5.buildViewLoginPosterEvent)(inputProperties);
671
+ this.setPageDefaults(viewLoginPosterEventData);
672
+ return this.trackPageView(viewLoginPosterEventData, trackOptions);
673
+ }
674
+ /**
675
+ * The old trackViewSalesPoster method from the Media Wrapper.
676
+ * When triggering this page-view function, both the "page" object and "origin"
677
+ * will be stored and re-used across subsequent events.
678
+ *
679
+ * @param inputProperties
680
+ * @param trackOptions
681
+ * @category Legacy Tracking
682
+ */
683
+ trackLegacyViewSalesPoster(inputProperties, trackOptions) {
684
+ const viewSalesposterEventData = (0, event_builder_7.buildViewSalesPosterEvent)(inputProperties);
685
+ this.setPageDefaults(viewSalesposterEventData);
686
+ return this.trackPageView(viewSalesposterEventData, trackOptions);
687
+ }
688
+ /**
689
+ * The old trackViewListing method from the Media Wrapper.
690
+ * When triggering this page-view function, both the "page" object and "origin"
691
+ * will be stored and re-used across subsequent events.
692
+ *
693
+ * @param inputProperties
694
+ * @param trackOptions
695
+ * @category Legacy Tracking
696
+ */
697
+ trackLegacyViewListing(inputProperties, trackOptions) {
698
+ const viewListingEventData = (0, event_builder_4.buildLegacyViewListingEvent)(inputProperties);
699
+ this.setPageDefaults(viewListingEventData);
700
+ return this.trackPageView(viewListingEventData, trackOptions);
701
+ }
702
+ /**
703
+ * The old trackViewFrontpage method from the Media Wrapper.
704
+ * When triggering this page-view function, both the "page" object and "origin"
705
+ * will be stored and re-used across subsequent events.
706
+ *
707
+ * @param inputProperties
708
+ * @param trackOptions
709
+ * @category Legacy Tracking
710
+ */
711
+ trackLegacyViewFrontpage(inputProperties, trackOptions) {
712
+ const viewFrontpageEventData = (0, event_builder_3.buildLegacyViewFrontpageEvent)(inputProperties);
713
+ this.setPageDefaults(viewFrontpageEventData);
714
+ return this.trackPageView(viewFrontpageEventData, trackOptions);
715
+ }
716
+ /**
717
+ * The old trackViewPage method from the Media Wrapper.
718
+ * When triggering this page-view function, both the "page" object and "origin"
719
+ * will be stored and re-used across subsequent events.
720
+ *
721
+ * @param inputProperties
722
+ * @param trackOptions
723
+ * @category Legacy Tracking
724
+ */
725
+ trackLegacyViewPage(inputProperties, trackOptions) {
726
+ const pageViewEventData = (0, event_builder_6.buildLegacyViewPageEvent)(inputProperties);
727
+ this.setPageDefaults(pageViewEventData);
728
+ return this.trackPageView(pageViewEventData, trackOptions);
729
+ }
730
+ /**
731
+ * The old trackViewUIElement method from the Media Wrapper.
732
+ *
733
+ * @param inputProperties
734
+ * @param trackOptions
735
+ * @category Legacy Tracking
736
+ */
737
+ trackLegacyViewUIElement(inputProperties, trackOptions) {
738
+ const viewUIElementEventData = (0, event_builder_8.buildLegacyViewUIElementEvent)(inputProperties, this.legacyCurrentPage);
739
+ return this.track('trackerEvent', viewUIElementEventData, trackOptions);
740
+ }
741
+ /**
742
+ * The old trackClickUIElement method from the Media Wrapper.
743
+ *
744
+ * @param inputProperties
745
+ * @param trackOptions
746
+ * @category Legacy Tracking
747
+ */
748
+ trackLegacyClickUIElement(inputProperties, trackOptions) {
749
+ const clickUIElementEventData = (0, event_builder_1.buildClickUIElementEvent)(inputProperties, this.legacyCurrentPage);
750
+ return this.track('trackerEvent', clickUIElementEventData, trackOptions);
751
+ }
752
+ /**
753
+ * The following methods are the track methods specific for the TPaaS schemas
754
+ */
755
+ /**
756
+ * @param input
757
+ * @category TPaaS Tracking
758
+ */
759
+ async trackAnonymousViewUIElement(input) {
760
+ const dependencies = await this.prepareAnonymousTpaasEvent();
761
+ const event = (0, tpaas_event_builder_1.buildAnonymousViewUIElementEvent)(input, dependencies);
762
+ return this.sendTpaasEvent(event);
763
+ }
764
+ async trackCompletedHealthAction(input) {
765
+ const dependencies = await this.prepareTpaasEvent();
766
+ const event = (0, tpaas_event_builder_1.buildCompletedHealthActionEvent)(input, dependencies);
767
+ return this.sendTpaasEvent(event);
768
+ }
769
+ async trackEngagementHealthUIElement(input) {
770
+ const dependencies = await this.prepareTpaasEvent();
771
+ const event = (0, tpaas_event_builder_1.buildEngagementHealthUIElementEvent)(input, dependencies);
772
+ return this.sendTpaasEvent(event);
773
+ }
774
+ async trackViewHealthPage(input, options) {
775
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
776
+ this.setCurrentPage(input.object.objectId, 'Page'); // ViewHealthPage.object.objectType is HealthPage, which is not allowed as a pageType
777
+ const dependencies = await this.prepareTpaasEvent();
778
+ const event = (0, tpaas_event_builder_1.buildViewHealthPageEvent)(input, dependencies);
779
+ const result = this.sendTpaasEvent(event);
780
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
781
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
782
+ // HealthView Page is a bit special, in the sense that in doesn't have a dedicated Leave event.
783
+ // Instead, we need to reuse the generic Leave Page event, but adapt the input accordingly.
784
+ // This means omitting some fields from HealthView Page that are not part of Leave Page schema.
785
+ const { experiments, metrics, object, ...restInput } = input;
786
+ const { category, custom, intent, name, tags, ...restObject } = input.object;
787
+ const leavePageCallback = (leave) => {
788
+ this.trackLeavePage({
789
+ leave,
790
+ ...restInput,
791
+ object: {
792
+ ...restObject,
793
+ title: restObject.title || '',
794
+ },
795
+ });
796
+ };
797
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
798
+ objectElement,
799
+ pageElement,
800
+ objectResizable,
801
+ heightBuilder,
802
+ schema: tpaas_schemas_1.LeavePage.object.objectType,
803
+ trackMethod: leavePageCallback,
804
+ });
805
+ }
806
+ return result;
807
+ }
808
+ async trackImpressionHealthUIElement(input) {
809
+ const dependencies = await this.prepareTpaasEvent();
810
+ const event = (0, tpaas_event_builder_1.buildImpressionHealthUIElementEvent)(input, dependencies);
811
+ return this.sendTpaasEvent(event);
812
+ }
813
+ /**
814
+ * @param input
815
+ * @param options
816
+ * @category TPaaS Tracking
817
+ */
818
+ async trackViewPage(input, options) {
819
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
820
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewPage.object.objectType);
821
+ const dependencies = await this.prepareTpaasEvent();
822
+ const event = (0, tpaas_event_builder_1.buildViewPageEvent)(input, dependencies);
823
+ const result = this.sendTpaasEvent(event);
824
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
825
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
826
+ const leavePageCallback = (leave) => {
827
+ this.trackLeavePage({
828
+ leave,
829
+ ...input,
830
+ });
831
+ };
832
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
833
+ objectElement,
834
+ pageElement,
835
+ objectResizable,
836
+ heightBuilder,
837
+ schema: tpaas_schemas_1.LeavePage.object.objectType,
838
+ trackMethod: leavePageCallback,
839
+ });
840
+ }
841
+ return result;
842
+ }
843
+ /**
844
+ * @param input
845
+ * @category TPaaS Tracking
846
+ */
847
+ async trackViewTitle(input) {
848
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
849
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewTitle.object.objectType);
850
+ const dependencies = await this.prepareTpaasEvent();
851
+ const event = (0, tpaas_event_builder_1.buildViewTitleEvent)(input, dependencies);
852
+ return this.sendTpaasEvent(event);
853
+ // there's no Leave Title event
854
+ }
855
+ /**
856
+ * @param input
857
+ * @category TPaaS Tracking
858
+ */
859
+ async trackImpressionWidget(input) {
860
+ const dependencies = await this.prepareTpaasEvent();
861
+ const event = (0, tpaas_event_builder_1.buildImpressionWidgetEvent)(input, dependencies);
862
+ return this.sendTpaasEvent(event);
863
+ }
864
+ /**
865
+ * @param input
866
+ * @category TPaaS Tracking
867
+ */
868
+ async trackImpressionAdSlot(input) {
869
+ const dependencies = await this.prepareTpaasEvent();
870
+ const event = (0, tpaas_event_builder_1.buildImpressionAdSlotEvent)(input, dependencies);
871
+ return this.sendTpaasEvent(event);
872
+ }
873
+ /**
874
+ * @param input
875
+ * @param options
876
+ * @category TPaaS Tracking
877
+ */
878
+ async trackViewArticle(input, options) {
879
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
880
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewArticle.object.objectType);
881
+ const dependencies = await this.prepareTpaasEvent();
882
+ const event = (0, tpaas_event_builder_1.buildViewArticleEvent)(input, dependencies);
883
+ const result = this.sendTpaasEvent(event);
884
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
885
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
886
+ const leaveArticleCallback = (leave) => {
887
+ this.trackLeaveArticle({
888
+ leave,
889
+ ...input,
890
+ });
891
+ };
892
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
893
+ objectElement,
894
+ pageElement,
895
+ heightBuilder,
896
+ objectResizable,
897
+ schema: tpaas_schemas_1.LeaveArticle.object.objectType,
898
+ trackMethod: leaveArticleCallback,
899
+ });
900
+ }
901
+ return result;
902
+ }
903
+ /**
904
+ * @param input
905
+ * @param options
906
+ * @category TPaaS Tracking
907
+ */
908
+ async trackViewAudio(input) {
909
+ // despite the View event type, this is not a page view event, but rather a media object view event
910
+ // so we shouldn't reset the page view ID here or enable leave tracking
911
+ const dependencies = await this.prepareTpaasEvent();
912
+ const event = (0, tpaas_event_builder_1.buildViewAudioEvent)(input, dependencies);
913
+ return this.sendTpaasEvent(event);
914
+ }
915
+ /**
916
+ * Tracks a View AudioPage event and automatically fires a Leave AudioPage event when the user
917
+ * navigates away.
918
+ *
919
+ * The Leave AudioPage event requires audio engagement statistics (`leaveAudio`) that the SDK
920
+ * cannot compute on its own. Provide a `leaveAudioBuilder` callback in the `leaveTracking`
921
+ * options — it is called at leave time (not at registration time), so it always captures the
922
+ * latest state. If no builder is supplied all audio engagement fields default to `0`.
923
+ *
924
+ * `activityDurationMs` and `durationMs` are computed by the leave tracking system and must
925
+ * **not** be included in the value returned by `leaveAudioBuilder`.
926
+ *
927
+ * @example
928
+ * ```ts
929
+ * // Minimal — leave fires with zeroed audio stats
930
+ * await tracker.trackViewAudioPage(input, {
931
+ * leaveTracking: { objectElement: document.getElementById('audio-player')! },
932
+ * });
933
+ *
934
+ * // With leaveAudioBuilder — capture live playback stats at leave time
935
+ * await tracker.trackViewAudioPage(input, {
936
+ * leaveTracking: {
937
+ * objectElement: document.getElementById('audio-player')!,
938
+ * leaveAudioBuilder: () => ({
939
+ * audioStarted: player.tracksStarted,
940
+ * audioCompleted: player.tracksCompleted,
941
+ * maxPlaylistPosition: player.maxPosition,
942
+ * playlistPositionPercentage: player.positionPercentage,
943
+ * }),
944
+ * },
945
+ * });
946
+ *
947
+ * // Disable leave tracking entirely
948
+ * await tracker.trackViewAudioPage(input, { leaveTracking: false });
949
+ * ```
950
+ *
951
+ * @param input
952
+ * @param options
953
+ * @category TPaaS Tracking
954
+ */
955
+ async trackViewAudioPage(input, options) {
956
+ this.newPageView();
957
+ this.setCurrentPage(input.object.objectId, 'Audio'); // ViewAudioPage.object.objectType is AudioPage, which is not allowed as a pageType
958
+ const dependencies = await this.prepareTpaasEvent();
959
+ const event = (0, tpaas_event_builder_1.buildViewAudioPageEvent)(input, dependencies);
960
+ const result = this.sendTpaasEvent(event);
961
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
962
+ const { objectElement, pageElement, heightBuilder, objectResizable, leaveAudioBuilder } = options.leaveTracking;
963
+ const leaveAudioPageCallback = (leave) => {
964
+ const leaveAudioInput = leaveAudioBuilder?.() ?? {
965
+ audioCompleted: 0,
966
+ audioStarted: 0,
967
+ maxPlaylistPosition: 0,
968
+ playlistPositionPercentage: 0,
969
+ };
970
+ this.trackLeaveAudioPage({
971
+ leave,
972
+ leaveAudio: {
973
+ ...leaveAudioInput,
974
+ activityDurationMs: leave.activityDurationMs,
975
+ durationMs: leave.durationMs,
976
+ },
977
+ ...input,
978
+ });
979
+ };
980
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
981
+ objectElement,
982
+ pageElement,
983
+ heightBuilder,
984
+ objectResizable,
985
+ schema: tpaas_schemas_1.LeaveAudioPage.object.objectType,
986
+ trackMethod: leaveAudioPageCallback,
987
+ });
988
+ }
989
+ return result;
990
+ }
991
+ /**
992
+ * @param input
993
+ * @param options
994
+ * @category TPaaS Tracking
995
+ */
996
+ async trackViewError(input, options) {
997
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
998
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewError.object.objectType);
999
+ const dependencies = await this.prepareTpaasEvent();
1000
+ const event = (0, tpaas_event_builder_1.buildViewErrorEvent)(input, dependencies);
1001
+ const result = this.sendTpaasEvent(event);
1002
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1003
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1004
+ const leaveErrorCallback = (leave) => {
1005
+ this.trackLeaveError({
1006
+ leave,
1007
+ ...input,
1008
+ });
1009
+ };
1010
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1011
+ objectElement,
1012
+ pageElement,
1013
+ heightBuilder,
1014
+ objectResizable,
1015
+ schema: tpaas_schemas_1.LeaveError.object.objectType,
1016
+ trackMethod: leaveErrorCallback,
1017
+ });
1018
+ }
1019
+ return result;
1020
+ }
1021
+ /**
1022
+ * @param input
1023
+ * @category TPaaS Tracking
1024
+ */
1025
+ async trackImpressionForm(input) {
1026
+ const dependencies = await this.prepareTpaasEvent();
1027
+ const event = (0, tpaas_event_builder_1.buildImpressionFormEvent)(input, dependencies);
1028
+ return this.sendTpaasEvent(event);
1029
+ }
1030
+ /**
1031
+ * @param input
1032
+ * @category TPaaS Tracking
1033
+ */
1034
+ async trackImpressionOffer(input) {
1035
+ const dependencies = await this.prepareTpaasEvent();
1036
+ const event = (0, tpaas_event_builder_1.buildImpressionOfferEvent)(input, dependencies);
1037
+ return this.sendTpaasEvent(event);
1038
+ }
1039
+ /**
1040
+ * @param input
1041
+ * @category TPaaS Tracking
1042
+ */
1043
+ async trackImpressionPlayer(input) {
1044
+ const dependencies = await this.prepareTpaasEvent();
1045
+ const event = (0, tpaas_event_builder_1.buildImpressionPlayerEvent)(input, dependencies);
1046
+ return this.sendTpaasEvent(event);
1047
+ }
1048
+ /**
1049
+ * @param input
1050
+ * @category TPaaS Tracking
1051
+ */
1052
+ async trackImpressionTeaser(input) {
1053
+ const dependencies = await this.prepareTpaasEvent();
1054
+ const event = (0, tpaas_event_builder_1.buildImpressionTeaserEvent)(input, dependencies);
1055
+ return this.sendTpaasEvent(event);
1056
+ }
1057
+ /**
1058
+ * @param input
1059
+ * @category TPaaS Tracking
1060
+ */
1061
+ async trackImpressionUIElement(input) {
1062
+ const dependencies = await this.prepareTpaasEvent();
1063
+ const event = (0, tpaas_event_builder_1.buildImpressionUIElementEvent)(input, dependencies);
1064
+ return this.sendTpaasEvent(event);
1065
+ }
1066
+ /**
1067
+ * @param input
1068
+ * @param options
1069
+ * @category TPaaS Tracking
1070
+ */
1071
+ async trackViewFrontpage(input, options) {
1072
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1073
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewFrontpage.object.objectType);
1074
+ const dependencies = await this.prepareTpaasEvent();
1075
+ const event = (0, tpaas_event_builder_1.buildViewFrontpageEvent)(input, dependencies);
1076
+ const result = this.sendTpaasEvent(event);
1077
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1078
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1079
+ const leaveFrontpageCallback = (leave) => {
1080
+ this.trackLeaveFrontpage({
1081
+ leave,
1082
+ ...input,
1083
+ });
1084
+ };
1085
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1086
+ objectElement,
1087
+ pageElement,
1088
+ objectResizable,
1089
+ heightBuilder,
1090
+ schema: tpaas_schemas_1.LeaveFrontpage.object.objectType,
1091
+ trackMethod: leaveFrontpageCallback,
1092
+ });
1093
+ }
1094
+ return result;
1095
+ }
1096
+ /**
1097
+ * @param input
1098
+ * @param options
1099
+ * @category TPaaS Tracking
1100
+ */
1101
+ async trackViewLandingpage(input, options) {
1102
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1103
+ this.setCurrentPage(input.object.objectId, 'LandingPage' /* TODO: ViewLandingpage.object.type once the schema is fixed */);
1104
+ const dependencies = await this.prepareTpaasEvent();
1105
+ const event = (0, tpaas_event_builder_1.buildViewLandingpageEvent)(input, dependencies);
1106
+ const result = this.sendTpaasEvent(event);
1107
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1108
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1109
+ const leaveLandingpageCallback = (leave) => {
1110
+ this.trackLeaveLandingpage({
1111
+ leave,
1112
+ ...input,
1113
+ });
1114
+ };
1115
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1116
+ objectElement,
1117
+ pageElement,
1118
+ heightBuilder,
1119
+ objectResizable,
1120
+ schema: tpaas_schemas_1.LeaveLandingpage.object.objectType,
1121
+ trackMethod: leaveLandingpageCallback,
1122
+ });
1123
+ }
1124
+ return result;
1125
+ }
1126
+ /**
1127
+ * @param input
1128
+ * @param options
1129
+ * @category TPaaS Tracking
1130
+ */
1131
+ async trackViewListing(input, options) {
1132
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1133
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewListing.object.objectType);
1134
+ const dependencies = await this.prepareTpaasEvent();
1135
+ const event = (0, tpaas_event_builder_1.buildViewListingEvent)(input, dependencies);
1136
+ const result = this.sendTpaasEvent(event);
1137
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1138
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1139
+ const leaveListingCallback = (leave) => {
1140
+ this.trackLeaveListing({
1141
+ leave,
1142
+ ...input,
1143
+ });
1144
+ };
1145
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1146
+ objectElement,
1147
+ pageElement,
1148
+ heightBuilder,
1149
+ objectResizable,
1150
+ schema: tpaas_schemas_1.LeaveListing.object.objectType,
1151
+ trackMethod: leaveListingCallback,
1152
+ });
1153
+ }
1154
+ return result;
1155
+ }
1156
+ /**
1157
+ * @param input
1158
+ * @param options
1159
+ * @category TPaaS Tracking
1160
+ */
1161
+ async trackViewLockedArticle(input, options) {
1162
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1163
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewLockedArticle.object.objectType);
1164
+ const dependencies = await this.prepareTpaasEvent();
1165
+ const event = (0, tpaas_event_builder_1.buildViewLockedArticleEvent)(input, dependencies);
1166
+ const result = this.sendTpaasEvent(event);
1167
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1168
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1169
+ const leaveLockedArticleCallback = (leave) => {
1170
+ this.trackLeaveLockedArticle({
1171
+ leave,
1172
+ ...input,
1173
+ });
1174
+ };
1175
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1176
+ objectElement,
1177
+ pageElement,
1178
+ objectResizable,
1179
+ heightBuilder,
1180
+ schema: tpaas_schemas_1.LeaveLockedArticle.object.objectType,
1181
+ trackMethod: leaveLockedArticleCallback,
1182
+ });
1183
+ }
1184
+ return result;
1185
+ }
1186
+ /**
1187
+ * @param input
1188
+ * @param options
1189
+ * @category TPaaS Tracking
1190
+ */
1191
+ async trackViewLockedAudio(input) {
1192
+ // despite the View event type, this is not a page view event, but rather a media object view event
1193
+ // so we shouldn't reset the page view ID here or enable leave tracking
1194
+ const dependencies = await this.prepareTpaasEvent();
1195
+ const event = (0, tpaas_event_builder_1.buildViewLockedAudioEvent)(input, dependencies);
1196
+ return this.sendTpaasEvent(event);
1197
+ }
1198
+ /**
1199
+ * @param input
1200
+ * @param options
1201
+ * @category TPaaS Tracking
1202
+ */
1203
+ async trackViewLockedAudioPage(input, options) {
1204
+ this.newPageView();
1205
+ this.setCurrentPage(input.object.objectId, 'Audio'); // ViewLockedAudioPage.object.objectType is AudioPage, which is not allowed as a pageType
1206
+ const dependencies = await this.prepareTpaasEvent();
1207
+ const event = (0, tpaas_event_builder_1.buildViewLockedAudioPageEvent)(input, dependencies);
1208
+ const result = this.sendTpaasEvent(event);
1209
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1210
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1211
+ const leaveLockedAudioPageCallback = (leave) => {
1212
+ this.trackLeaveLockedAudioPage({
1213
+ leave,
1214
+ ...input,
1215
+ });
1216
+ };
1217
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1218
+ objectElement,
1219
+ pageElement,
1220
+ heightBuilder,
1221
+ objectResizable,
1222
+ schema: tpaas_schemas_1.LeaveLockedAudioPage.object.objectType,
1223
+ trackMethod: leaveLockedAudioPageCallback,
1224
+ });
1225
+ }
1226
+ return result;
1227
+ }
1228
+ /**
1229
+ * @param input
1230
+ * @category TPaaS Tracking
1231
+ */
1232
+ async trackViewLockedVideo(input) {
1233
+ // despite the name, this is not a page-level event. trackViewLockedVideoPage is a page-level event
1234
+ // as such, we don't support (yet) automatic leave event enabling
1235
+ const dependencies = await this.prepareTpaasEvent();
1236
+ const event = (0, tpaas_event_builder_1.buildViewLockedVideoEvent)(input, dependencies);
1237
+ return this.sendTpaasEvent(event);
1238
+ }
1239
+ /**
1240
+ * @param input
1241
+ * @param options
1242
+ * @category TPaaS Tracking
1243
+ */
1244
+ async trackViewLockedVideoPage(input, options) {
1245
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1246
+ this.setCurrentPage(input.object.objectId, tpaas_schemas_1.ViewLockedVideo.object.objectType);
1247
+ const dependencies = await this.prepareTpaasEvent();
1248
+ const event = (0, tpaas_event_builder_1.buildViewLockedVideoPageEvent)(input, dependencies);
1249
+ const result = this.sendTpaasEvent(event);
1250
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1251
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1252
+ const leaveLockedVideoPageCallback = (leave) => {
1253
+ this.trackLeaveLockedVideoPage({
1254
+ leave,
1255
+ ...input,
1256
+ });
1257
+ };
1258
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1259
+ objectElement,
1260
+ pageElement,
1261
+ heightBuilder,
1262
+ objectResizable,
1263
+ schema: tpaas_schemas_1.LeaveLockedVideoPage.object.objectType,
1264
+ trackMethod: leaveLockedVideoPageCallback,
1265
+ });
1266
+ }
1267
+ return result;
1268
+ }
1269
+ /**
1270
+ * @param input
1271
+ * @category TPaaS Tracking
1272
+ */
1273
+ async trackViewVideo(input) {
1274
+ // despite the View event type, this is not a page view event, but rather a media object view event
1275
+ // so we shouldn't reset the page view ID here or enable leave tracking
1276
+ const dependencies = await this.prepareTpaasEvent();
1277
+ const event = (0, tpaas_event_builder_1.buildViewVideoEvent)(input, dependencies);
1278
+ return this.sendTpaasEvent(event);
1279
+ }
1280
+ /**
1281
+ * Tracks a View VideoPage event and automatically fires a Leave VideoPage event when the user
1282
+ * navigates away.
1283
+ *
1284
+ * The Leave VideoPage event supports an optional `leaveStories` field containing story carousel
1285
+ * statistics that the SDK cannot compute. Provide a `leaveStoriesBuilder` callback in the
1286
+ * `leaveTracking` options — it is called at leave time (not at registration time), so it always
1287
+ * captures the latest state. If no builder is supplied `leaveStories` is omitted from the Leave
1288
+ * VideoPage event.
1289
+ *
1290
+ * `activityDurationMs` and `durationMs` are computed by the leave tracking system and must
1291
+ * **not** be included in the value returned by `leaveStoriesBuilder`.
1292
+ *
1293
+ * @example
1294
+ * ```ts
1295
+ * // Without story stats — leaveStories is omitted from the Leave VideoPage event
1296
+ * await tracker.trackViewVideoPage(input, {
1297
+ * leaveTracking: { objectElement: document.getElementById('video-player')! },
1298
+ * });
1299
+ *
1300
+ * // With leaveStoriesBuilder — capture live story stats at leave time
1301
+ * await tracker.trackViewVideoPage(input, {
1302
+ * leaveTracking: {
1303
+ * objectElement: document.getElementById('video-player')!,
1304
+ * leaveStoriesBuilder: () => ({
1305
+ * storiesCompleted: stories.completed,
1306
+ * storiesStarted: stories.started,
1307
+ * maxPlaylistPosition: stories.maxPosition,
1308
+ * playlistPositionPercentage: stories.positionPercentage,
1309
+ * adCount: stories.adCount,
1310
+ * }),
1311
+ * },
1312
+ * });
1313
+ *
1314
+ * // Disable leave tracking entirely
1315
+ * await tracker.trackViewVideoPage(input, { leaveTracking: false });
1316
+ * ```
1317
+ *
1318
+ * @param input
1319
+ * @param options
1320
+ * @category TPaaS Tracking
1321
+ */
1322
+ async trackViewVideoPage(input, options) {
1323
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1324
+ this.setCurrentPage(input.object.objectId, 'Video'); // ViewVideoPage.object.type is VideoPage, which is not allowed as a pageType
1325
+ const dependencies = await this.prepareTpaasEvent();
1326
+ const event = (0, tpaas_event_builder_1.buildViewVideoPageEvent)(input, dependencies);
1327
+ const result = this.sendTpaasEvent(event);
1328
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1329
+ const { objectElement, pageElement, heightBuilder, objectResizable, leaveStoriesBuilder } = options.leaveTracking;
1330
+ const leaveVideoCallback = (leave) => {
1331
+ const leaveStoriesInput = leaveStoriesBuilder?.();
1332
+ this.trackLeaveVideoPage({
1333
+ leave,
1334
+ leaveStories: leaveStoriesInput && {
1335
+ ...leaveStoriesInput,
1336
+ activityDurationMs: leave.activityDurationMs,
1337
+ durationMs: leave.durationMs,
1338
+ },
1339
+ ...input,
1340
+ });
1341
+ };
1342
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1343
+ objectElement,
1344
+ pageElement,
1345
+ heightBuilder,
1346
+ objectResizable,
1347
+ schema: tpaas_schemas_1.LeaveVideoPage.object.objectType,
1348
+ trackMethod: leaveVideoCallback,
1349
+ });
1350
+ }
1351
+ return result;
1352
+ }
1353
+ /**
1354
+ * @param input
1355
+ * @param options
1356
+ * @category TPaaS Tracking
1357
+ */
1358
+ async trackViewWeather(input, options) {
1359
+ this.newPageView(); // Reset the page view ID if it is not set, to ensure a new page view is tracked
1360
+ this.setCurrentPage(input.object.objectId, 'Page' /* TODO: ViewWeather.object.type once the schema is fixed */);
1361
+ const dependencies = await this.prepareTpaasEvent();
1362
+ const event = (0, tpaas_event_builder_1.buildViewWeatherEvent)(input, dependencies);
1363
+ const result = this.sendTpaasEvent(event);
1364
+ if ((0, leaveTrackingTpaas_1.shouldEnableLeaveTracking)(options.leaveTracking)) {
1365
+ const { objectElement, pageElement, heightBuilder, objectResizable } = options.leaveTracking;
1366
+ const leaveWeatherCallback = (leave) => {
1367
+ this.trackLeaveWeather({
1368
+ leave,
1369
+ ...input,
1370
+ });
1371
+ };
1372
+ (0, leaveTrackingTpaas_1.addTpaasLeaveTracking)({
1373
+ objectElement,
1374
+ pageElement,
1375
+ heightBuilder,
1376
+ objectResizable,
1377
+ schema: tpaas_schemas_1.LeaveWeather.object.objectType,
1378
+ trackMethod: leaveWeatherCallback,
1379
+ });
1380
+ }
1381
+ return result;
1382
+ }
1383
+ /**
1384
+ * @param input
1385
+ * @category TPaaS Tracking
1386
+ */
1387
+ async trackLeaveArticle(input) {
1388
+ const dependencies = await this.prepareTpaasEvent();
1389
+ const event = (0, tpaas_event_builder_1.buildLeaveArticleEvent)(input, dependencies);
1390
+ return this.sendTpaasEvent(event);
1391
+ }
1392
+ /**
1393
+ * @param input
1394
+ * @category TPaaS Tracking
1395
+ */
1396
+ async trackLeaveAudioPage(input) {
1397
+ const dependencies = await this.prepareTpaasEvent();
1398
+ const event = (0, tpaas_event_builder_1.buildLeaveAudioPageEvent)(input, dependencies);
1399
+ return this.sendTpaasEvent(event);
1400
+ }
1401
+ /**
1402
+ * @param input
1403
+ * @category TPaaS Tracking
1404
+ */
1405
+ async trackLeaveError(input) {
1406
+ const dependencies = await this.prepareTpaasEvent();
1407
+ const event = (0, tpaas_event_builder_1.buildLeaveErrorEvent)(input, dependencies);
1408
+ return this.sendTpaasEvent(event);
1409
+ }
1410
+ /**
1411
+ * @param input
1412
+ * @category TPaaS Tracking
1413
+ */
1414
+ async trackLeaveFrontpage(input) {
1415
+ const dependencies = await this.prepareTpaasEvent();
1416
+ const event = (0, tpaas_event_builder_1.buildLeaveFrontpageEvent)(input, dependencies);
1417
+ return this.sendTpaasEvent(event);
1418
+ }
1419
+ /**
1420
+ * @param input
1421
+ * @category TPaaS Tracking
1422
+ */
1423
+ async trackLeaveLandingpage(input) {
1424
+ const dependencies = await this.prepareTpaasEvent();
1425
+ const event = (0, tpaas_event_builder_1.buildLeaveLandingpageEvent)(input, dependencies);
1426
+ return this.sendTpaasEvent(event);
1427
+ }
1428
+ /**
1429
+ * @param input
1430
+ * @category TPaaS Tracking
1431
+ */
1432
+ async trackLeaveListing(input) {
1433
+ const dependencies = await this.prepareTpaasEvent();
1434
+ const event = (0, tpaas_event_builder_1.buildLeaveListingEvent)(input, dependencies);
1435
+ return this.sendTpaasEvent(event);
1436
+ }
1437
+ /**
1438
+ * @param input
1439
+ * @category TPaaS Tracking
1440
+ */
1441
+ async trackLeaveLockedArticle(input) {
1442
+ const dependencies = await this.prepareTpaasEvent();
1443
+ const event = (0, tpaas_event_builder_1.buildLeaveLockedArticleEvent)(input, dependencies);
1444
+ return this.sendTpaasEvent(event);
1445
+ }
1446
+ /**
1447
+ * @param input
1448
+ * @category TPaaS Tracking
1449
+ */
1450
+ async trackLeaveLockedAudio(input) {
1451
+ const dependencies = await this.prepareTpaasEvent();
1452
+ const event = (0, tpaas_event_builder_1.buildLeaveLockedAudioEvent)(input, dependencies);
1453
+ return this.sendTpaasEvent(event);
1454
+ }
1455
+ /**
1456
+ * @param input
1457
+ * @category TPaaS Tracking
1458
+ */
1459
+ async trackLeaveLockedAudioPage(input) {
1460
+ const dependencies = await this.prepareTpaasEvent();
1461
+ const event = (0, tpaas_event_builder_1.buildLeaveLockedAudioPageEvent)(input, dependencies);
1462
+ return this.sendTpaasEvent(event);
1463
+ }
1464
+ /**
1465
+ * @param input
1466
+ * @category TPaaS Tracking
1467
+ */
1468
+ async trackLeaveLockedVideo(input) {
1469
+ const dependencies = await this.prepareTpaasEvent();
1470
+ const event = (0, tpaas_event_builder_1.buildLeaveLockedVideoEvent)(input, dependencies);
1471
+ return this.sendTpaasEvent(event);
1472
+ }
1473
+ /**
1474
+ * @param input
1475
+ * @category TPaaS Tracking
1476
+ */
1477
+ async trackLeaveLockedVideoPage(input) {
1478
+ const dependencies = await this.prepareTpaasEvent();
1479
+ const event = (0, tpaas_event_builder_1.buildLeaveLockedVideoPageEvent)(input, dependencies);
1480
+ return this.sendTpaasEvent(event);
1481
+ }
1482
+ /**
1483
+ * @param input
1484
+ * @category TPaaS Tracking
1485
+ */
1486
+ async trackLeavePage(input) {
1487
+ const dependencies = await this.prepareTpaasEvent();
1488
+ const event = (0, tpaas_event_builder_1.buildLeavePageEvent)(input, dependencies);
1489
+ return this.sendTpaasEvent(event);
1490
+ }
1491
+ /**
1492
+ * @param input
1493
+ * @category TPaaS Tracking
1494
+ */
1495
+ async trackLeaveVideoPage(input) {
1496
+ const dependencies = await this.prepareTpaasEvent();
1497
+ const event = (0, tpaas_event_builder_1.buildLeaveVideoPageEvent)(input, dependencies);
1498
+ return this.sendTpaasEvent(event);
1499
+ }
1500
+ /**
1501
+ * @param input
1502
+ * @category TPaaS Tracking
1503
+ */
1504
+ async trackLeaveWeather(input) {
1505
+ const dependencies = await this.prepareTpaasEvent();
1506
+ const event = (0, tpaas_event_builder_1.buildLeaveWeatherEvent)(input, dependencies);
1507
+ return this.sendTpaasEvent(event);
1508
+ }
1509
+ /**
1510
+ * @param input
1511
+ * @category TPaaS Tracking
1512
+ */
1513
+ async trackEngagementAudio(input) {
1514
+ const dependencies = await this.prepareTpaasEvent();
1515
+ const event = (0, tpaas_event_builder_1.buildEngagementAudioEvent)(input, dependencies);
1516
+ return this.sendTpaasEvent(event);
1517
+ }
1518
+ /**
1519
+ * @param input
1520
+ * @category TPaaS Tracking
1521
+ */
1522
+ async trackEngagementForm(input) {
1523
+ const dependencies = await this.prepareTpaasEvent();
1524
+ const event = (0, tpaas_event_builder_1.buildEngagementFormEvent)(input, dependencies);
1525
+ return this.sendTpaasEvent(event);
1526
+ }
1527
+ /**
1528
+ * @param input
1529
+ * @category TPaaS Tracking
1530
+ */
1531
+ async trackEngagementOffer(input) {
1532
+ const dependencies = await this.prepareTpaasEvent();
1533
+ const event = (0, tpaas_event_builder_1.buildEngagementOfferEvent)(input, dependencies);
1534
+ return this.sendTpaasEvent(event);
1535
+ }
1536
+ /**
1537
+ * @param input
1538
+ * @category TPaaS Tracking
1539
+ */
1540
+ async trackEngagementTeaser(input) {
1541
+ const dependencies = await this.prepareTpaasEvent();
1542
+ const event = (0, tpaas_event_builder_1.buildEngagementTeaserEvent)(input, dependencies);
1543
+ return this.sendTpaasEvent(event);
1544
+ }
1545
+ /**
1546
+ * @param input
1547
+ * @category TPaaS Tracking
1548
+ */
1549
+ async trackEngagementUIElement(input) {
1550
+ const dependencies = await this.prepareTpaasEvent();
1551
+ const event = (0, tpaas_event_builder_1.buildEngagementUIElementEvent)(input, dependencies);
1552
+ return this.sendTpaasEvent(event);
1553
+ }
1554
+ /**
1555
+ * @param input
1556
+ * @category TPaaS Tracking
1557
+ */
1558
+ async trackEngagementVideo(input) {
1559
+ const dependencies = await this.prepareTpaasEvent();
1560
+ const event = (0, tpaas_event_builder_1.buildEngagementVideoEvent)(input, dependencies);
1561
+ return this.sendTpaasEvent(event);
1562
+ }
1563
+ /**
1564
+ * @param input
1565
+ * @category TPaaS Tracking
1566
+ */
1567
+ async trackEngagementVideoAd(input) {
1568
+ const dependencies = await this.prepareTpaasEvent();
1569
+ const event = (0, tpaas_event_builder_1.buildEngagementVideoAdEvent)(input, dependencies);
1570
+ return this.sendTpaasEvent(event);
1571
+ }
1572
+ /**
1573
+ * @param input
1574
+ * @category TPaaS Tracking
1575
+ */
1576
+ async trackEngagementWidget(input) {
1577
+ const dependencies = await this.prepareTpaasEvent();
1578
+ const event = (0, tpaas_event_builder_1.buildEngagementWidgetEvent)(input, dependencies);
1579
+ return this.sendTpaasEvent(event);
1580
+ }
1581
+ /**
1582
+ * this is the method that actually sends the event to the server
1583
+ * @private
1584
+ * @category TPaaS Tracking
1585
+ */
1586
+ async sendTpaasEvent(event) {
1587
+ // Resolve any pending session ID promises
1588
+ // (session was created when the event was built)
1589
+ this.resolveSessionIdPromise();
1590
+ // The Hybrid use case implements a "bridged" event method, injected into the window scope,
1591
+ // which is used to send events through the native app.
1592
+ if ((0, pulse_utils_1.isFunction)(this.state.altEventHandler)) {
1593
+ this.state.altEventHandler(JSON.stringify(event));
1594
+ return event;
1595
+ }
1596
+ this.tpaasEventQueue.push(event);
1597
+ if (this.state.useBeacon) {
1598
+ try {
1599
+ return await this._sendImmediatelyTpaas();
1600
+ }
1601
+ catch (err) {
1602
+ return err;
1603
+ }
1604
+ }
1605
+ return this.debouncedSendTpaas();
1606
+ }
1607
+ /**
1608
+ * Send all events that are in the internal event queue.
1609
+ *
1610
+ * The returned Promise will resolve with the array of events that was
1611
+ * successfully transmitted. These events will have been removed from the event
1612
+ * queue. If the promise rejects, it means that the event queue could not be
1613
+ * sent and the promise rejection will contain the events that failed (will be
1614
+ * the entire queue initial call). Events that are unsuccessfully sent will
1615
+ * remain in the event queue.
1616
+ *
1617
+ * @internal
1618
+ * @category TPaaS Tracking
1619
+ */
1620
+ async _sendImmediatelyTpaas() {
1621
+ if (this.tpaasEventQueue.length + this.retryTpaasEventQueue.length <= 0) {
1622
+ return [];
1623
+ }
1624
+ return this.prepareQueuesAndSendTpaas(this.tpaasEventQueue, this.retryTpaasEventQueue);
1625
+ }
1626
+ /**
1627
+ * Prepares the received event queue and handles success / failure after sending.
1628
+ *
1629
+ * @param eventQueue
1630
+ * @param retryEventQueue
1631
+ * @private
1632
+ * @category TPaaS Tracking
1633
+ */
1634
+ async prepareQueuesAndSendTpaas(eventQueue, retryEventQueue) {
1635
+ const eventsToBeSent = eventQueue.splice(0);
1636
+ const eventsToRetry = retryEventQueue.splice(0);
1637
+ eventQueue.length = 0;
1638
+ retryEventQueue.length = 0;
1639
+ const url = this._getTpaasCollectorPath();
1640
+ const data = [...eventsToBeSent, ...eventsToRetry];
1641
+ async function onFailedSend() {
1642
+ // We retry an event once, but discard already retried events
1643
+ retryEventQueue.push(...eventsToBeSent);
1644
+ return Promise.reject(eventsToBeSent);
1645
+ }
1646
+ try {
1647
+ // for TPaaS events, we set the sentAt time to the current date, just before sending the events
1648
+ const currentDate = new Date().toISOString();
1649
+ for (const event of data) {
1650
+ event.time.sentAt = currentDate;
1651
+ }
1652
+ const response = await (0, network_1.default)(url, data, this.state);
1653
+ if (response.status >= 400) {
1654
+ onFailedSend();
1655
+ }
1656
+ return eventsToBeSent;
1657
+ }
1658
+ catch (_ex) {
1659
+ return onFailedSend();
1660
+ }
1661
+ }
1662
+ /**
1663
+ * Evaluate all input given to the sdk/this method and pass it through the
1664
+ * appropriate event formatter.
1665
+ * @internal
1666
+ * @category Legacy Tracking
1667
+ */
1668
+ async evaluateEvent(eventType, input, builders = this.builders, options) {
1669
+ const eventBuilder = getEventBuilder(eventType);
1670
+ return this.evaluateEventInputs(eventType, input, builders, options).then((evaluatedInput) => {
1671
+ const data = eventBuilder({
1672
+ eventInput: evaluatedInput,
1673
+ sdkConfig: this.state,
1674
+ });
1675
+ return (0, pulse_utils_1.evaluateAndFlatten)(data);
1676
+ });
1677
+ }
1678
+ /**
1679
+ * @param eventType
1680
+ * @param eventInput
1681
+ * @param builders
1682
+ * @param options
1683
+ * @internal
1684
+ * @category Legacy Tracking
1685
+ */
1686
+ async evaluateEventInputs(eventType, eventInput, builders = this.builders, options) {
1687
+ const buildersOutput = await Promise.all([(0, pulse_utils_1.evaluateAndFlatten)(builders), (0, pulse_utils_1.evaluateAndFlatten)(eventInput)]);
1688
+ let eventOutput = buildersOutput.reduce((acc, p) => (0, pulse_utils_1.pulseMerge)(acc, p), {});
1689
+ eventOutput = this.applyEventTypeDefaults(eventOutput, eventType);
1690
+ eventOutput = this.applyBookmarkedEvent(eventOutput, options?.applyBookmarkKey);
1691
+ eventOutput = await this.applyConsents(eventOutput);
1692
+ return eventOutput;
1693
+ }
1694
+ /**
1695
+ * Gets user consents from the tracker's state.
1696
+ * @returns {Consents}
1697
+ * @category Consents
1698
+ */
1699
+ async getConsents() {
1700
+ return (await this.evaluateConsents()).consents;
1701
+ }
1702
+ /**
1703
+ * Sets user consents to be sent with each event.
1704
+ * Given that User's consent for Advertising changed, the next call to get Advertising Identifiers must be forced, and
1705
+ * not retrieve values from cache. The flag is passed with the trackers state, and updated to a "non-forcing" state
1706
+ * right after, characterising the "force once" behaviour.
1707
+ * accessing Advertising Identifiers directly must clear this flag.
1708
+ * Not usable with autoCreateConsents option
1709
+ * @param consentsInput
1710
+ * @returns {Consents}
1711
+ * @category Consents
1712
+ */
1713
+ setConsents(consentsInput) {
1714
+ if (this.state.autoCreateConsents) {
1715
+ (0, warnOnce_1.default)('setConsents', 'setConsents is not allowed when autoCreateConsents is enabled');
1716
+ return { ...this.state.consents };
1717
+ }
1718
+ return this.setConsentsInternal(consentsInput);
1719
+ }
1720
+ /**
1721
+ * Return a new Tracker with the current state
1722
+ * @category Tracking
1723
+ */
1724
+ clone({ trackerId } = {}) {
1725
+ return new Tracker(this.state.providerId, {
1726
+ ...this.state,
1727
+ trackerId: trackerId || (0, uuid_1.v4)(),
1728
+ }, {
1729
+ ...this.builders,
1730
+ });
1731
+ }
1732
+ /**
1733
+ * Update the persisted state that is passed to all events
1734
+ *
1735
+ * Calling
1736
+ * ```
1737
+ * tracker.update({ actor: 'person@example.org' });
1738
+ * tracker.trackPageView();
1739
+ * tracker.trackPageView();
1740
+ * ```
1741
+ *
1742
+ * is equivalent of doing
1743
+ *
1744
+ * ```
1745
+ * tracker.trackPageView({ actor: 'person@example.org' });
1746
+ * tracker.trackPageView({ actor: 'person@example.org' });
1747
+ * ```
1748
+ *
1749
+ * @param builder data passed to event functions
1750
+ * @param mergeBuilder the given data will be merged deeply with the
1751
+ * existing state. False will result in the previous state being overwritten
1752
+ * @category Legacy Tracking
1753
+ */
1754
+ update(builder, mergeBuilder = false) {
1755
+ if (mergeBuilder) {
1756
+ this.builders = (0, pulse_utils_1.pulseMerge)({}, this.builders, builder);
1757
+ }
1758
+ else {
1759
+ this.builders = Object.assign({}, this.builders, builder);
1760
+ }
1761
+ }
1762
+ /**
1763
+ * Get the actor id (userId) from the current browser. A promise is returned
1764
+ * because a call may be made to complete the login process.
1765
+ *
1766
+ * *Note*: This method will return a Promise that is always rejected on node
1767
+ environments.
1768
+ @category Identifiers
1769
+ */
1770
+ async getUserId() {
1771
+ await this._applyRemoteConfigEndpoints();
1772
+ return identity.getUserId(this.builders);
1773
+ }
1774
+ /**
1775
+ * Get the advertisement id (adId) from the current browser. A promise is returned
1776
+ * because a CIS call is done to generate a new adId if no cookie is
1777
+ * found.
1778
+ *
1779
+ * *Note*: This method will return a Promise that is always rejected on node
1780
+ * environments.
1781
+ * @category Identifiers
1782
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
1783
+ */
1784
+ async getAdId() {
1785
+ (0, warnOnce_1.default)('getAdId', 'Deprecated method: getAdId');
1786
+ await this._applyRemoteConfigEndpoints();
1787
+ return identity.getAdId(this.builders, this.state);
1788
+ }
1789
+ /**
1790
+ * @category Identifiers
1791
+ * @deprecated moving away from "Actor" terminology, in favor of "User"
1792
+ */
1793
+ async getActor() {
1794
+ await this._applyRemoteConfigEndpoints();
1795
+ return identity.getActor(this.builders);
1796
+ }
1797
+ /**
1798
+ * Get the environment id from the current browser. A promise is returned
1799
+ * because a CIS call is done to generate a new environmentId if no cookie is
1800
+ * found.
1801
+ *
1802
+ * *Note*: This method will return a Promise that is always rejected on node
1803
+ * environments.
1804
+ * @category Identifiers
1805
+ */
1806
+ async getEnvironmentId() {
1807
+ await this._applyRemoteConfigEndpoints();
1808
+ return identity.getEnvironmentId(this.builders, this.state);
1809
+ }
1810
+ /**
1811
+ * Returns the PPID1 value for Xandr integration.
1812
+ * This is the "logged in identifier".
1813
+ * @category Identifiers
1814
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
1815
+ */
1816
+ async getXandrPPID1() {
1817
+ (0, warnOnce_1.default)('getXandrPPID1', 'Deprecated method: getXandrPPID1');
1818
+ const { xandr } = await identity.getAdvertisingIdentifiers(this.builders, { ...this.state });
1819
+ return xandr?.ppId1;
1820
+ }
1821
+ /**
1822
+ * Returns the PPID2 value for Xandr integration.
1823
+ * This is the "not logged in identifier".
1824
+ * @category Identifiers
1825
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
1826
+ */
1827
+ async getXandrPPID2() {
1828
+ (0, warnOnce_1.default)('getXandrPPID2', 'Deprecated method: getXandrPPID2');
1829
+ const { xandr } = await identity.getAdvertisingIdentifiers(this.builders, { ...this.state });
1830
+ return xandr?.ppId2;
1831
+ }
1832
+ async getAdvertisingIdentifiers(_vendor) {
1833
+ (0, warnOnce_1.default)('getAdvertisingIdentifiers', 'Deprecated method: getAdvertisingIdentifiers');
1834
+ if (_vendor) {
1835
+ (0, warnOnce_1.default)('getAdvertisingIdentifiers-no-vendor', 'getAdvertisingIdentifiers no longer accepts vendors as input, the vendors given in SDK constructor is used');
1836
+ }
1837
+ await this._applyRemoteConfigEndpoints();
1838
+ return identity.getAdvertisingIdentifiers(this.builders, { ...this.state });
1839
+ }
1840
+ /**
1841
+ * Returns the UUID currently used as the page view (will be muted by `newPageView` and `trackPageView`).
1842
+ * @category Tracking
1843
+ */
1844
+ getPageViewId() {
1845
+ return this.state.pageViewId;
1846
+ }
1847
+ /**
1848
+ * Returns the current session ID.
1849
+ * If a session exists, returns the session ID immediately.
1850
+ * If no session exists yet, returns a promise that resolves with the session ID
1851
+ * when it gets created (typically when the first non-anonymous tracking event is sent).
1852
+ *
1853
+ * Note: Anonymous events (such as those sent via {@link trackAnonymous} or {@link trackAnonymousViewUIElement})
1854
+ * do not create sessions and will not resolve pending session ID promises. The promise will only resolve when a
1855
+ * non-anonymous tracking event is sent.
1856
+ *
1857
+ * It is possible the promise will never get resolved if there are no non-anonymous events being tracked after calling this method.
1858
+ *
1859
+ * @category Tracking
1860
+ * @returns The session ID, or a promise that resolves to the session ID
1861
+ */
1862
+ getSessionId() {
1863
+ const session = (0, session_browser_1.readSession)();
1864
+ if (session?.id) {
1865
+ return Promise.resolve(session.id);
1866
+ }
1867
+ // No session exists yet, create or return existing promise
1868
+ if (!this.sessionIdPromise) {
1869
+ this.sessionIdPromise = new Promise((resolve) => {
1870
+ const callback = ({ sessionId }) => {
1871
+ resolve(sessionId);
1872
+ this.sessionIdPromise = null; // reset the promise so that future calls to getSessionId will create a new one if needed
1873
+ eventBus.off('tracker:session:new', callback);
1874
+ };
1875
+ eventBus.on('tracker:session:new', callback);
1876
+ });
1877
+ }
1878
+ return this.sessionIdPromise;
1879
+ }
1880
+ /**
1881
+ * Generate a new page view id. Will be attached to all events until a new id is generated.
1882
+ * @category Tracking
1883
+ */
1884
+ newPageView() {
1885
+ this.state.pageViewId = (0, uuid_1.v4)();
1886
+ }
1887
+ /**
1888
+ * Fetches the Remote Configuration, setting the CIS and Collector base urls
1889
+ * @internal
1890
+ * @category Configuration
1891
+ */
1892
+ async _applyRemoteConfigEndpoints() {
1893
+ const { fallbackCisBaseUrl, fallbackCollectorBaseUrl, environment, configurationTag, remoteConfigurationUrl } = this.state;
1894
+ if (environment === 'browser') {
1895
+ const remoteServiceConfig = await config.syncRemoteConfig(configurationTag, remoteConfigurationUrl);
1896
+ if (!isCollectorInConfig) {
1897
+ this.state.collectorBaseUrl = remoteServiceConfig?.collector || fallbackCollectorBaseUrl;
1898
+ }
1899
+ if (!isCisInConfig) {
1900
+ this.state.cisBaseUrl = remoteServiceConfig?.cis || fallbackCisBaseUrl;
1901
+ }
1902
+ }
1903
+ }
1904
+ /**
1905
+ * @param input
1906
+ * @param builders
1907
+ * @internal
1908
+ * @category Configuration
1909
+ */
1910
+ async syncRemoteResources(input, builders) {
1911
+ await this._applyRemoteConfigEndpoints();
1912
+ return identity.cisSync(input, builders, { ...this.state });
1913
+ }
1914
+ /**
1915
+ * @internal
1916
+ * @category Configuration
1917
+ */
1918
+ _getCollectorPath() {
1919
+ const { providerId, environment } = this.state;
1920
+ let { collectorPath, collectorBaseUrl } = this.state;
1921
+ /**
1922
+ * We want to support all of these cases:
1923
+ * collectorPath: /api/v1/track, baseUrl: domain.tld => domain.tld/api/v1/track
1924
+ * collectorPath: api/v1/track, baseUrl: domain.tld => domain.tld/api/v1/track
1925
+ * collectorPath: /api/v1/track, baseUrl: domain.tld/ => domain.tld/api/v1/track
1926
+ * collectorPath: api/v1/track, baseUrl: domain.tld/ => domain.tld/api/v1/track
1927
+ * collectorPath: /api/v1/track, baseUrl: domain.tld/something => domain.tld/something/api/v1/track
1928
+ * collectorPath: api/v1/track, baseUrl: domain.tld/something => domain.tld/something/api/v1/track
1929
+ * collectorPath: /api/v1/track, baseUrl: domain.tld/something/ => domain.tld/something/api/v1/track
1930
+ * collectorPath: api/v1/track, baseUrl: domain.tld/something/ => domain.tld/something/api/v1/track
1931
+ * The collectorPath and collectorBaseUrl manipulating below is to support all these cases
1932
+ */
1933
+ if (collectorPath.startsWith('/')) {
1934
+ // Remove leading slash
1935
+ collectorPath = collectorPath.slice(1);
1936
+ }
1937
+ if (!collectorBaseUrl?.endsWith('/')) {
1938
+ // Add trailing slash
1939
+ collectorBaseUrl = `${collectorBaseUrl}/`;
1940
+ }
1941
+ if (environment === 'node') {
1942
+ return new URL(collectorPath, collectorBaseUrl).toString();
1943
+ }
1944
+ const _provider = providerId || this.state.providerId;
1945
+ if (typeof _provider === 'string' && _provider.indexOf('sdrn') === 0) {
1946
+ return new URL(`${collectorPath}/${_provider}`, collectorBaseUrl).toString();
1947
+ }
1948
+ return new URL(`${collectorPath}/${providerSdrn(_provider)}`, collectorBaseUrl).toString();
1949
+ }
1950
+ /**
1951
+ * Returns the collector URL for TPaaS events.
1952
+ * Uses the tpaasCollectorBaseUrl when available (driven by deployStageTpaas),
1953
+ *
1954
+ * @internal
1955
+ * @category Configuration
1956
+ */
1957
+ _getTpaasCollectorPath() {
1958
+ const { providerId } = this.state;
1959
+ let { collectorPath, tpaasCollectorBaseUrl } = this.state;
1960
+ if (collectorPath.startsWith('/')) {
1961
+ // Remove leading slash
1962
+ collectorPath = collectorPath.slice(1);
1963
+ }
1964
+ if (!tpaasCollectorBaseUrl.endsWith('/')) {
1965
+ // Add trailing slash
1966
+ tpaasCollectorBaseUrl = `${tpaasCollectorBaseUrl}/`;
1967
+ }
1968
+ if (typeof providerId === 'string' && providerId.indexOf('sdrn') === 0) {
1969
+ return new URL(`${collectorPath}/${providerId}`, tpaasCollectorBaseUrl).toString();
1970
+ }
1971
+ return new URL(`${collectorPath}/${providerSdrn(providerId)}`, tpaasCollectorBaseUrl).toString();
1972
+ }
1973
+ /**
1974
+ * Send all events that are in the internal event queue.
1975
+ *
1976
+ * The returned Promise will resolve with the array of events that was
1977
+ * successfully transmitted. These events will have been removed from the event
1978
+ * queue. If the promise rejects, it means that the event queue could not be
1979
+ * sent and the promise rejection will contain the events that failed (will be
1980
+ * the entire queue initial call). Events that are unsuccessfully sent will
1981
+ * remain in the event queue.
1982
+ *
1983
+ * @internal
1984
+ * @category Legacy Tracking
1985
+ *
1986
+ */
1987
+ async _sendImmediately() {
1988
+ if (this.eventQueue.length + this.retryEventQueue.length <= 0) {
1989
+ return [];
1990
+ }
1991
+ const { doTracking } = await identity.cisSync({}, this.builders, this.state);
1992
+ if (!doTracking) {
1993
+ return [];
1994
+ }
1995
+ return this.prepareQueuesAndSend(this.eventQueue, this.retryEventQueue);
1996
+ }
1997
+ /**
1998
+ * @param event
1999
+ * @param options
2000
+ * @internal
2001
+ * @category Legacy Tracking
2002
+ */
2003
+ _push(event, options = {}) {
2004
+ const deferredEvent = (0, defer_1.default)(event);
2005
+ this.eventQueue.push(deferredEvent);
2006
+ if (options.resolveOnQueued) {
2007
+ deferredEvent.resolve(event);
2008
+ }
2009
+ return deferredEvent.promise;
2010
+ }
2011
+ /**
2012
+ * @param bookmarkKey
2013
+ * @internal
2014
+ * @category Legacy Tracking
2015
+ */
2016
+ getBookmarkedEvent(bookmarkKey) {
2017
+ return this.bookmark.get(bookmarkKey);
2018
+ }
2019
+ /**
2020
+ * Send the current event queue to the back end event receiver. This event is
2021
+ * debounced, @see {SDKConfigInput} to override the default timing.
2022
+ *
2023
+ * This method is called by `track()` so it is not necessary to call after
2024
+ * adding events to the queue.
2025
+ * @internal
2026
+ * @category Legacy Tracking
2027
+ */
2028
+ async send() {
2029
+ if (this.state.useBeacon) {
2030
+ try {
2031
+ return await this._sendImmediately();
2032
+ }
2033
+ catch (err) {
2034
+ return err;
2035
+ }
2036
+ }
2037
+ return this.debouncedSend();
2038
+ }
2039
+ /**
2040
+ * A convenience method which first updates the current pageViewId in the
2041
+ * tracker state and then sends a `tracker-event` with `@type: View` and the
2042
+ * merged result of the given data and the data saved in the tracker.
2043
+ *
2044
+ * Equivalent to
2045
+ *
2046
+ * ```ts
2047
+ * tracker.newPageView();
2048
+ * tracker.track('trackerEvent', { type: 'View', ...data });
2049
+ * ```
2050
+ * @category Legacy Tracking
2051
+ */
2052
+ trackPageView(data = {}, options = {}) {
2053
+ this.newPageView();
2054
+ return this.track('trackerEvent', { type: 'View', ...data }, { ...options, bookmarkKey: exports.BookmarkKeys.PAGE_VIEW });
2055
+ }
2056
+ /**
2057
+ * Start sending events when users leave a page.
2058
+ * This will register handlers on the browser events 'pagehide', 'popstate', 'beforeunload' and 'visibilitychange'
2059
+ * and will send a Leave event when these are triggered. The leave event will be a copy of the last sent view-event
2060
+ * + engagement values. The fields in the default
2061
+ * event can be found here: https://pages.github.schibsted.io/mpt-data/pulse-standard/#leave-article.
2062
+ * The Leave event can be expanded further by passing an event-builder as the third param, but this is not recommended.
2063
+ *
2064
+ * Example usage:
2065
+ *
2066
+ * ```ts
2067
+ * const pageElement = document.querySelector('#application') || document.body;
2068
+ * const articleElement = document.getElementById('article-element');
2069
+ * tracker.addPageLeaveTracking(articleElement, pageElement);
2070
+ * ```
2071
+ *
2072
+ * Passing '\{ objectResizable: true \}' as the 4th param makes the SDK re-calculate the object height whenever it changes,
2073
+ * which is useful for when the page or object changes size after loading, by ex
2074
+ * ```
2075
+ * ...
2076
+ * tracker.addPageLeaveTracking(articleElement, pageElement, undefined, {
2077
+ * objectResizable: true,
2078
+ * });
2079
+ * ```
2080
+ *
2081
+ * Keep in mind that the Beacon API is used to send events to page leave, and in order to guarantee as good as
2082
+ * possible that these events are sent, the event creator parameter should be synchronous.
2083
+ *
2084
+ * For the same reasons, we advise that the event creator parameter returns an event that does not contain any promises.
2085
+ *
2086
+ * @param {Element} objectElement The DOM element that is used to calculate various view-related fields in the default event.
2087
+ * @param {Element} pageElement The DOM element that represents the page that the user is currently on.
2088
+ * @param {LeaveEventBuilder} eventBuilder Function that returns an event to send when user leaves the page.
2089
+ * @param {LeaveEventOptions} options
2090
+ * @returns {(leaveEvent: LeaveEvent) => void} A function to update the event to send on page leave.
2091
+ * @category Leave Event
2092
+ */
2093
+ addPageLeaveTracking(objectElement, pageElement, eventBuilder, options = {}) {
2094
+ (0, leaveTracking_1.addPageLeaveTracking)(this, objectElement, pageElement, eventBuilder, options);
2095
+ return leaveTracking_1.updatePageLeaveEvent;
2096
+ }
2097
+ /**
2098
+ * Stop sending events when users leave a page.
2099
+ * Removes all event handlers, meaning that to event will be sent if the user leaves the page.
2100
+ * @category Leave Event
2101
+ */
2102
+ removePageLeaveTracking() {
2103
+ (0, leaveTracking_1.removePageLeaveTracking)(this);
2104
+ }
2105
+ /**
2106
+ * Update leave tracking.
2107
+ * Updates the DOM element used to calculate the default fields in the Leave event.
2108
+ * @param objectElement The DOM element that is used to calculate various view-related fields in the default event.
2109
+ * @param pageElement The DOM element that represents the page that the user is currently on.
2110
+ * @param resetProperties A flag that decided whether the engagement properties of the Leave event should
2111
+ * be reset when the tracking is updated. Defaults to false.
2112
+ * @category Leave Event
2113
+ */
2114
+ updatePageLeaveTracking(objectElement, pageElement, resetProperties = false) {
2115
+ (0, leaveTracking_1.updatePageLeaveTracking)(objectElement, pageElement, resetProperties);
2116
+ }
2117
+ /**
2118
+ * Manually trigger a viewed content recalculation including resetting max-values
2119
+ * @param objectElement The DOM element that is used to calculate various view-related fields in the
2120
+ * default event.
2121
+ * @param pageElement The DOM element that represents the page that the user is currently on.
2122
+ * @category Leave Event
2123
+ */
2124
+ resetPageLeaveViewedContent(objectElement, pageElement) {
2125
+ (0, leaveTracking_1.resetViewedContent)();
2126
+ (0, leaveTracking_1.updateViewedContent)(objectElement, pageElement);
2127
+ }
2128
+ /**
2129
+ * Manually trigger a viewed content recalculation without resetting max-values
2130
+ * @param objectElement The DOM element that is used to calculate various view-related fields in the
2131
+ * default event.
2132
+ * @param pageElement The DOM element that represents the page that the user is currently on.
2133
+ * @category Leave Event
2134
+ */
2135
+ updatePageLeaveViewedContent(objectElement, pageElement) {
2136
+ (0, leaveTracking_1.updateViewedContent)(objectElement, pageElement);
2137
+ }
2138
+ /**
2139
+ * Manually trigger a Leave event
2140
+ * Useful if for example the consuming website is an SPA and the normal browser events are not triggered.
2141
+ * is generated internally in the SDK.
2142
+ * @param eventInput
2143
+ * @param eventName The optional name of the browser event to simulate.
2144
+ * @category Leave Event
2145
+ */
2146
+ async trackPageLeave(eventInput, eventName) {
2147
+ await (0, leaveTracking_1.trackPageLeave)(this, eventInput, eventName);
2148
+ }
2149
+ /**
2150
+ * Manually trigger a Leave event only if Page Leave tracking is active in the SDK
2151
+ * This method works similarly to
2152
+ * ```
2153
+ * trackPageLeave(event: LeaveEvent, eventName?: string)
2154
+ * ```
2155
+ * with the added guarantee that a second Leave event will not be triggered if one already has been sent.
2156
+ * is generated internally in the SDK.
2157
+ * @param eventInput
2158
+ * @param eventName The optional name of the browser event to simulate.
2159
+ * @category Leave Event
2160
+ */
2161
+ trackActivePageLeave(eventInput, eventName) {
2162
+ (0, leaveTracking_1.trackActivePageLeave)(this, eventInput, eventName);
2163
+ }
2164
+ /**
2165
+ * Check if leave tracking is enabled (if an event will be sent when the user leaves the page)
2166
+ * ```
2167
+ * isLeaveTrackingActive()
2168
+ * ```
2169
+ * @category Leave Event
2170
+ */
2171
+ isLeaveTrackingActive() {
2172
+ return (0, leaveTracking_1.leaveTrackingIsActive)();
2173
+ }
2174
+ /**
2175
+ * Update leave tracking.
2176
+ * Updates the DOM element used to calculate the default fields in the Leave event.
2177
+ * @param {Element} objectElement The DOM element that is used to calculate various view-related fields in the default event.
2178
+ * @param {Element} pageElement The DOM element that represents the page that the user is currently on.
2179
+ * @param {boolean} resetProperties A flag that decided whether the engagement properties of the Leave event should
2180
+ * be reset when the tracking is updated. Defaults to false.
2181
+ * @category TPaaS Leave Tracking
2182
+ */
2183
+ updateTpaasLeaveTracking(objectElement, pageElement, resetProperties = false) {
2184
+ (0, leaveTrackingTpaas_1.updateTpaasLeaveTracking)(objectElement, pageElement, resetProperties);
2185
+ }
2186
+ /**
2187
+ * Manually trigger a viewed content recalculation including resetting max-values
2188
+ * @param {Element} objectElement The DOM element that is used to calculate various view-related fields in the
2189
+ * default event.
2190
+ * @param {Element} pageElement The DOM element that represents the page that the user is currently on.
2191
+ * @category TPaaS Leave Tracking
2192
+ */
2193
+ resetTpaasLeaveViewedContent(objectElement, pageElement) {
2194
+ (0, leaveTrackingTpaas_1.resetTpaasViewedContent)();
2195
+ (0, leaveTrackingTpaas_1.updateTpaasViewedContent)(objectElement, pageElement);
2196
+ }
2197
+ /**
2198
+ * Manually trigger a viewed content recalculation without resetting max-values
2199
+ * @param {Element} objectElement The DOM element that is used to calculate various view-related fields in the
2200
+ * default event.
2201
+ * @param {Element} pageElement The DOM element that represents the page that the user is currently on.
2202
+ * @category TPaaS Leave Tracking
2203
+ */
2204
+ updateTpaasLeaveViewedContent(objectElement, pageElement) {
2205
+ (0, leaveTrackingTpaas_1.updateTpaasViewedContent)(objectElement, pageElement);
2206
+ }
2207
+ /**
2208
+ * Get the current Leave object. Useful to fetch before manually sending a leave event using one of the trackLeaveX TPaaS methods.
2209
+ * @returns {ILeave} The current Leave event object.
2210
+ * @category TPaaS Leave Tracking
2211
+ */
2212
+ getTpaasLeaveObject() {
2213
+ return (0, leaveTrackingTpaas_1.getTpaasLeaveObject)();
2214
+ }
2215
+ /**
2216
+ * Manually trigger a Leave event only if Page Leave tracking is active in the SDK
2217
+ * This method works similarly to the track TPaaS methods trackLeaveX
2218
+ * ```
2219
+ * trackLeavePage(input: InputParams<ILeavePage>)
2220
+ * ```
2221
+ * with the added guarantee that a second Leave event will not be triggered if one already has been sent.
2222
+ * @category TPaaS Leave Tracking
2223
+ */
2224
+ trackTpaasActiveLeave() {
2225
+ (0, leaveTrackingTpaas_1.trackTpaasActiveLeave)();
2226
+ }
2227
+ /**
2228
+ * Check if leave tracking is enabled (if an event will be sent when the user leaves the page)
2229
+ * ```
2230
+ * isLeaveTpaasTrackingActive()
2231
+ * ```
2232
+ * @category TPaaS Leave Tracking
2233
+ */
2234
+ isLeaveTpaasTrackingActive() {
2235
+ return (0, leaveTrackingTpaas_1.leaveTpaasTrackingIsActive)();
2236
+ }
2237
+ /**
2238
+ * Start listening for events from the Tracker Proxy clients.
2239
+ * @returns teardown function that stops the listener
2240
+ */
2241
+ exposeToProxyClients() {
2242
+ return (0, proxy_provider_1.startProxyProviderListener)(this);
2243
+ }
2244
+ /**
2245
+ * @param input
2246
+ * @private
2247
+ */
2248
+ async resolveTrackInput(input) {
2249
+ return (0, pulse_utils_1.evaluateAndFlatten)(input);
2250
+ }
2251
+ /**
2252
+ * @private
2253
+ */
2254
+ async resolveTrackGlobals() {
2255
+ return (0, pulse_utils_1.evaluateAndFlatten)({ ...this.builders });
2256
+ }
2257
+ /**
2258
+ * Send all anonymous events that are in the internal anonymous event queue.
2259
+ *
2260
+ * The returned Promise will resolve with the array of anonymous events that was
2261
+ * successfully transmitted. These anonymous events will have been removed from the anonymous event
2262
+ * queue. If the promise rejects, it means that the anonymous event queue could not be
2263
+ * sent and the promise rejection will contain the anonymous events that failed.
2264
+ * Anonymous events that are unsuccessfully sent will remain in the anonymous event queue.
2265
+ *
2266
+ * @internal
2267
+ *
2268
+ */
2269
+ async _sendImmediatelyAnonymous() {
2270
+ if (this.anonymousEventQueue.length + this.retryAnonymousEventQueue.length <= 0) {
2271
+ return [];
2272
+ }
2273
+ // Anonymous events are sent without any user identifiers, independently of CIS, so no waiting for CIS sync here
2274
+ return this.prepareQueuesAndSend(this.anonymousEventQueue, this.retryAnonymousEventQueue);
2275
+ }
2276
+ /**
2277
+ * @param event
2278
+ * @param options
2279
+ * @internal
2280
+ */
2281
+ _pushAnonymous(event, options = {}) {
2282
+ const deferredEvent = (0, defer_1.default)(event);
2283
+ this.anonymousEventQueue.push(deferredEvent);
2284
+ if (options.resolveOnQueued) {
2285
+ deferredEvent.resolve(event);
2286
+ }
2287
+ return deferredEvent.promise;
2288
+ }
2289
+ /**
2290
+ * Send the current anonymous event queue to the back end event receiver. This event is
2291
+ * debounced, @see {SDKConfigInput} to override the default timing.
2292
+ *
2293
+ * This method is called by `trackAnonymous()` so it is not necessary to call after
2294
+ * adding events to the queue.
2295
+ *
2296
+ * @internal
2297
+ */
2298
+ async sendAnonymous() {
2299
+ if (this.state.useBeacon) {
2300
+ try {
2301
+ return await this._sendImmediatelyAnonymous();
2302
+ }
2303
+ catch (err) {
2304
+ return err;
2305
+ }
2306
+ }
2307
+ return this.debouncedSendAnonymous();
2308
+ }
2309
+ /**
2310
+ * Prepares the received event queue and handles success / failure after sending.
2311
+ *
2312
+ * @param eventQueue
2313
+ * @param retryEventQueue
2314
+ * @private
2315
+ */
2316
+ async prepareQueuesAndSend(eventQueue, retryEventQueue) {
2317
+ const promisesToBeSent = eventQueue.splice(0);
2318
+ const eventsToBeSent = promisesToBeSent.map((p) => p.inputValue);
2319
+ const eventsToRetry = retryEventQueue;
2320
+ eventQueue.length = 0;
2321
+ retryEventQueue.length = 0;
2322
+ const evaluatedEvents = await Promise.all(eventsToBeSent);
2323
+ const url = this._getCollectorPath();
2324
+ const data = [...evaluatedEvents, ...eventsToRetry];
2325
+ // biome-ignore lint/suspicious/noExplicitAny: -
2326
+ async function onFailedSend(response) {
2327
+ // We retry an event once, but discard already retried events
2328
+ retryEventQueue.push(...evaluatedEvents);
2329
+ for (const promise of promisesToBeSent) {
2330
+ promise.reject(response);
2331
+ }
2332
+ return Promise.reject(evaluatedEvents);
2333
+ }
2334
+ try {
2335
+ const response = await (0, network_1.default)(url, data, this.state);
2336
+ if (response.status >= 400) {
2337
+ return onFailedSend(response);
2338
+ }
2339
+ for (const promise of promisesToBeSent) {
2340
+ promise.resolve(response);
2341
+ }
2342
+ return evaluatedEvents;
2343
+ }
2344
+ catch (error) {
2345
+ return onFailedSend(error);
2346
+ }
2347
+ }
2348
+ /**
2349
+ * Creates a new event with values that are global to all event types, and are resolved internally by the sdk.
2350
+ * `creationDate` and `session` are defined as early as possible in the event lifecycle, ensuring they are aligned
2351
+ * and consistent across all events.
2352
+ *
2353
+ * @category Tracker
2354
+ * @private
2355
+ */
2356
+ createEvent(eventInput) {
2357
+ const creationDate = new Date();
2358
+ const session = (0, builders_1.session)({}, creationDate);
2359
+ // Resolve any pending session ID promises
2360
+ this.resolveSessionIdPromise();
2361
+ return (0, pulse_utils_1.pulseMerge)({}, eventInput, {
2362
+ '@id': (0, uuid_1.v4)(),
2363
+ creationDate: creationDate.toISOString(),
2364
+ session,
2365
+ });
2366
+ }
2367
+ /**
2368
+ * Helper method to resolve any pending session ID promise
2369
+ * @private
2370
+ */
2371
+ resolveSessionIdPromise() {
2372
+ const session = (0, session_browser_1.readSession)();
2373
+ if (session?.id) {
2374
+ eventBus.emit('tracker:session:new', {
2375
+ sessionId: session.id,
2376
+ });
2377
+ }
2378
+ }
2379
+ /**
2380
+ * Creates a new anonymous event with values that are global to all event types, and are resolved internally by the sdk.
2381
+ * `creationDate` is defined as early as possible in the event lifecycle, ensuring it is aligned and consistent across all events.
2382
+ *
2383
+ * Note: anonymous events do not have a `session` object.
2384
+ *
2385
+ * @category Tracker
2386
+ * @private
2387
+ */
2388
+ createAnonymousEvent(eventInput) {
2389
+ const creationDate = new Date();
2390
+ return (0, pulse_utils_1.pulseMerge)({}, eventInput, {
2391
+ '@id': (0, uuid_1.v4)(),
2392
+ creationDate: creationDate.toISOString(),
2393
+ });
2394
+ }
2395
+ /**
2396
+ * applyEventTypeDefaults
2397
+ * @param eventInput
2398
+ * @param eventType
2399
+ * @private
2400
+ */
2401
+ applyEventTypeDefaults(eventInput, eventType) {
2402
+ const eventDefaults = getEventBuilder(eventType).defaults;
2403
+ return (0, pulse_utils_1.pulseMerge)({}, eventDefaults(), eventInput);
2404
+ }
2405
+ /**
2406
+ * @param eventInput
2407
+ * @param eventType
2408
+ * @private
2409
+ */
2410
+ applyAnonymousEventTypeDefaults(eventInput, eventType) {
2411
+ const eventDefaults = getAnonymousEventBuilder(eventType).defaults;
2412
+ return (0, pulse_utils_1.pulseMerge)({}, eventDefaults(), eventInput);
2413
+ }
2414
+ /**
2415
+ * applyBookmarkedEvent
2416
+ * @param eventInput
2417
+ * @param bookmarkKey
2418
+ * @private
2419
+ */
2420
+ applyBookmarkedEvent(eventInput, bookmarkKey) {
2421
+ if (!bookmarkKey) {
2422
+ return eventInput;
2423
+ }
2424
+ const eventOutput = Object.assign({}, eventInput);
2425
+ const bookmarkedPageViewEvent = this.bookmark.get(bookmarkKey) ?? {};
2426
+ const { '@id': _id, '@type': _type, creationDate: _creationDate, ...coreEvent } = bookmarkedPageViewEvent;
2427
+ return (0, pulse_utils_1.pulseMerge)({}, eventOutput, coreEvent);
2428
+ }
2429
+ /**
2430
+ * applyConsents
2431
+ * @param eventInput
2432
+ * @private
2433
+ */
2434
+ async applyConsents(eventInput) {
2435
+ return (0, pulse_utils_1.pulseMerge)({}, eventInput, await this.evaluateConsents());
2436
+ }
2437
+ /**
2438
+ * applyConsentsAnonymous
2439
+ * @param eventInput
2440
+ * @private
2441
+ */
2442
+ applyConsentsAnonymous(eventInput) {
2443
+ return (0, pulse_utils_1.pulseMerge)({}, eventInput, this.evaluateConsentsAnonymous());
2444
+ }
2445
+ /**
2446
+ * Enriches the event with consent data saved in state.
2447
+ * @private
2448
+ * @category Consents
2449
+ */
2450
+ async evaluateConsents() {
2451
+ const consents = await this.state.consents;
2452
+ this.state.consents = consents; // replace state consents with resolved value; helps anonymous tracking, because that doesn't await consent promises
2453
+ return {
2454
+ ...(consents && { consents }),
2455
+ };
2456
+ }
2457
+ /**
2458
+ * Enriches the anonymous event with consent data saved in state.
2459
+ *
2460
+ * If the consents are a promise, it will return a fallback consent object, instead of waiting for consents to resolve
2461
+ * @private
2462
+ * @category Consents
2463
+ */
2464
+ evaluateConsentsAnonymous() {
2465
+ const consents = (0, pulse_utils_1.isPromise)(this.state.consents) ? (0, consent_manager_1.getFallbackConsents)() : this.state.consents;
2466
+ return {
2467
+ ...(consents && { consents }),
2468
+ };
2469
+ }
2470
+ /**
2471
+ * Private version of {@link setConsents} that works with autoCreateConsents
2472
+ * @param consentsInput
2473
+ * @private
2474
+ * @category Consents
2475
+ */
2476
+ setConsentsInternal(consentsInput) {
2477
+ const currentIncludeAdvertising = this.state.includeAdvertising;
2478
+ const updatedIncludeAdvertising = (0, consents_1.applyAdvertisingConsentSync)(consentsInput, this.state.requireAdvertisingOptIn);
2479
+ this.state.includeAdvertising = updatedIncludeAdvertising;
2480
+ this.state.consents = consentsInput;
2481
+ // Only require a CIS sync if the user has changed their advertising consent
2482
+ if (currentIncludeAdvertising !== updatedIncludeAdvertising) {
2483
+ identity.requireCisSyncCallForAdvertisingIds();
2484
+ }
2485
+ loglevel_1.default.debug('Consents set', consentsInput);
2486
+ return { ...this.state.consents };
2487
+ }
2488
+ /**
2489
+ * Get the includeAdvertising flag, set on initialisation.
2490
+ * @see constructor
2491
+ * @private
2492
+ * @category Identifiers
2493
+ */
2494
+ async getIncludeAdvertising() {
2495
+ await this._applyRemoteConfigEndpoints();
2496
+ return identity.getIncludeAdvertising(this.state);
2497
+ }
2498
+ }
2499
+ exports.default = Tracker;