@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,203 @@
1
+ import { cookieConfig, readCookie } from '@schibsted/pulse-utils';
2
+ import { CisSyncReason, getSyncState, parsePulseCookies, serializePulseCookie } from './pulse-cookie';
3
+ const { PULSE_COOKIE_KEY } = cookieConfig;
4
+ const CIS_HOST = 'https://cis.schibsted.com';
5
+ const CIS_PATH = '/api/v2/identify';
6
+ let preferredCISHost = 'cis.schibsted.com';
7
+ /**
8
+ * CIS has two endpoints:
9
+ * - anonymous identifier keys (/identify/guest),
10
+ * - identifiable keys (/identify/user)
11
+ */
12
+ const CISActorType = {
13
+ USER: 'user',
14
+ GUEST: 'guest',
15
+ };
16
+ /**
17
+ * Resolves CIS path param
18
+ * @param actorId
19
+ */
20
+ const getActorPath = (actorId) => {
21
+ let endpoint = CISActorType.GUEST;
22
+ if (actorId) {
23
+ endpoint = CISActorType.USER;
24
+ }
25
+ return `${CIS_PATH}/${endpoint}`;
26
+ };
27
+ const cisFetchHeaders = new Headers({
28
+ 'Content-Type': 'application/json',
29
+ });
30
+ const CIS_MAX_REDIRECT_ATTEMPTS = 2;
31
+ const CIS_DEFAULT_REALM = 'schibsted.com';
32
+ const cisRequestMap = new Map();
33
+ /**
34
+ * Call CIS with the current user information.
35
+ *
36
+ * @private
37
+ */
38
+ async function cisFetch({ cisLocation, clientId, includeAdvertising, resolvedJwe: jwe, trackerType, trackerVersion, userId, vendors, } = {}) {
39
+ const basePath = cisLocation?.endsWith('/') ? cisLocation.slice(0, -1) : cisLocation;
40
+ const path = `${basePath}${getActorPath(userId)}`;
41
+ // Using 'toString' here to make unit test mock comparisons easier
42
+ return fetch(new URL(path).toString(), {
43
+ method: 'POST',
44
+ credentials: 'include',
45
+ headers: cisFetchHeaders,
46
+ body: JSON.stringify({
47
+ clientId,
48
+ includeAdvertising,
49
+ jwe,
50
+ trackerType,
51
+ trackerVersion,
52
+ userId,
53
+ vendors,
54
+ }),
55
+ });
56
+ }
57
+ /** Identify recursively until no `redirectToHost` field */
58
+ async function cisFetchWithRedirect({ cisLocation, clientId, includeAdvertising, resolvedJwe, trackerType, trackerVersion, userId, vendors, }, redirectAttempts = 0) {
59
+ if (redirectAttempts > CIS_MAX_REDIRECT_ATTEMPTS) {
60
+ throw new Error('Too many CIS redirects');
61
+ }
62
+ const response = await cisFetch({
63
+ cisLocation,
64
+ clientId,
65
+ includeAdvertising,
66
+ resolvedJwe,
67
+ trackerType,
68
+ trackerVersion,
69
+ userId,
70
+ vendors,
71
+ });
72
+ const { data: responseData } = await response.json();
73
+ if (responseData.redirectToHost) {
74
+ preferredCISHost = responseData.redirectToHost;
75
+ return cisFetchWithRedirect({
76
+ resolvedJwe,
77
+ userId,
78
+ cisLocation: `https://${preferredCISHost}`,
79
+ clientId,
80
+ trackerType,
81
+ trackerVersion,
82
+ includeAdvertising,
83
+ vendors,
84
+ }, redirectAttempts + 1);
85
+ }
86
+ return responseData;
87
+ }
88
+ let currentCisRequest = Promise.resolve(parsePulseCookies());
89
+ /**
90
+ * Call CIS serially if needed, 'needed' being evaluated when the call reaches the top of the queue.
91
+ *
92
+ * @private
93
+ */
94
+ async function serialSyncWithCis(shortUserId,
95
+ // biome-ignore lint/style/useDefaultParameterLast: -
96
+ forceSync = false, cisLocation, nativeJwe, realm, clientId, trackerType, trackerVersion, options) {
97
+ // Re-read our sync state as the previous cis request might have
98
+ // made this sync obsolete.
99
+ const cookie = readCookie(PULSE_COOKIE_KEY);
100
+ const { syncWithCis: shouldSyncWithCIS, syncWithCisReason: requestReason } = getSyncState(shortUserId, {
101
+ cookie,
102
+ ...options,
103
+ });
104
+ const { jwe, prevUserId } = parsePulseCookies(cookie);
105
+ const requestHandlerFn = async () => {
106
+ // For reason === login, we know shortUserId should be set and should be trusted.
107
+ // For reason === logout, we know shortUserId is unset, but should be trusted.
108
+ // For reason === initialise, we can't trust shortUserId and should use prevUserId instead.
109
+ // For reason === refresh, we could use either as they should be in sync, but using
110
+ // prevUserId makes it possible to do regular syncs without access to an event, so we use that.
111
+ const resolvedJwe = nativeJwe || jwe; // always send a nativeJwe when present. Hybrid app use case;
112
+ let prominentUserId = shortUserId;
113
+ if (requestReason !== CisSyncReason.Login && requestReason !== CisSyncReason.Logout) {
114
+ prominentUserId = prevUserId;
115
+ }
116
+ const userId = prominentUserId && `sdrn:${realm}:user:${prominentUserId}`;
117
+ if (shouldSyncWithCIS || forceSync) {
118
+ try {
119
+ const cisResponseData = await cisFetchWithRedirect({
120
+ resolvedJwe,
121
+ userId,
122
+ cisLocation,
123
+ clientId,
124
+ trackerType,
125
+ trackerVersion,
126
+ includeAdvertising: options?.includeAdvertising,
127
+ vendors: options?.vendors,
128
+ });
129
+ const refreshAfterTimestamp = cisResponseData.refreshAfter
130
+ ? new Date(cisResponseData.refreshAfter).getTime()
131
+ : 0;
132
+ const storageData = {
133
+ ppId: {},
134
+ ...cisResponseData,
135
+ prevUserId: shortUserId,
136
+ refreshAfterTimestamp,
137
+ includeAdvertising: options?.includeAdvertising,
138
+ };
139
+ serializePulseCookie(storageData);
140
+ return storageData;
141
+ }
142
+ catch (_err) {
143
+ // silent error.
144
+ }
145
+ finally {
146
+ if (options?.trackerId) {
147
+ cisRequestMap.delete(options.trackerId);
148
+ }
149
+ }
150
+ }
151
+ return parsePulseCookies();
152
+ };
153
+ if (options?.trackerId) {
154
+ const { request, requestReason: onGoingRequestReason } = cisRequestMap.get(options.trackerId) || {};
155
+ let ongoingRequest = request;
156
+ if (!ongoingRequest || onGoingRequestReason !== requestReason || forceSync) {
157
+ ongoingRequest = requestHandlerFn();
158
+ cisRequestMap.set(options.trackerId, { request: ongoingRequest, requestReason });
159
+ }
160
+ return ongoingRequest;
161
+ }
162
+ // maintaining the old behaviour for when there is no "internalId" passed to the tracker.
163
+ currentCisRequest = currentCisRequest.then(requestHandlerFn);
164
+ return currentCisRequest;
165
+ }
166
+ /**
167
+ * Sync with CIS
168
+ *
169
+ * This method deals with all communication and communication with dependent systems (currently AppNexus and Norstat).
170
+ *
171
+ * An optional user id should be provided if a tracker have received a logged in state. Providing a new user id
172
+ * (different from a previous user id, serialized to the pulse cookie) will cause a "blocking call" to CIS (the
173
+ * returned promise will not resolve before the communication is done). This is done because CIS could provide new data
174
+ * regarding opt-out.
175
+ *
176
+ * The returned promise will also be blocking if no pulse cookie is found. Pulse requires environmentIds generated
177
+ * server side so one have to wait to be allocated to one.
178
+ *
179
+ * In other context CIS could or could not be called but the returned promise will resolve immediately. If CIS have
180
+ * been called recently there is no point in calling it again. In a different case, if a refresh call to CIS is required
181
+ * it doesn't mean that other systems have to wait of it. Both cases will return a promise that resolves more or less
182
+ * immediately.
183
+ */
184
+ export async function syncWithCis(shortUserId, nativeJwe, userServiceLocation, realm = CIS_DEFAULT_REALM, clientId, trackerType, trackerVersion, options) {
185
+ const { syncWithCis: shouldSyncWithCIS, waitForCis: shouldWaitForCIS } = getSyncState(shortUserId, options);
186
+ const storageData = parsePulseCookies();
187
+ const cisLocation = userServiceLocation || CIS_HOST;
188
+ let cisRequest = Promise.resolve(storageData);
189
+ if (shouldSyncWithCIS || options?.forceSync) {
190
+ cisRequest = serialSyncWithCis(shortUserId, Boolean(options?.forceSync), cisLocation, nativeJwe, realm, clientId || '', trackerType || '', trackerVersion || '', options);
191
+ }
192
+ // If `shouldWaitForCIS` is false the update with CIS is only a "soft sync" and
193
+ // shouldn't block other operations. This is the case when the browser has a
194
+ // _pulse2data cookie and the user haven't logged in or out. When the user do
195
+ // log in we have to wait to avoid sending events with user ids after logging
196
+ // out or without ids after logging in.
197
+ let ongoingCISRequest = Promise.resolve(storageData);
198
+ if (shouldWaitForCIS || options?.forceSync) {
199
+ ongoingCISRequest = cisRequest;
200
+ }
201
+ return ongoingCISRequest;
202
+ }
203
+ //# sourceMappingURL=cis-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cis-browser.js","sourceRoot":"","sources":["../../src/cis-browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Entry point to module on Node.js
3
+ *
4
+ * This **have not been implemented** on Node.js because CIS expects a normal
5
+ * browser environment with cookies.
6
+ *
7
+ * @returns rejected promise
8
+ */
9
+ import type { PulseStorage } from './storage/pulseStorage';
10
+ export declare function syncWithCis(): Promise<PulseStorage>;
@@ -0,0 +1,4 @@
1
+ export function syncWithCis() {
2
+ return Promise.reject(new Error('CIS is not implemented for non-browser environments'));
3
+ }
4
+ //# sourceMappingURL=cis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cis.js","sourceRoot":"","sources":["../../src/cis.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,14 @@
1
+ type EventType = 'environmentIdSet' | 'jweSet';
2
+ type EventCallback = (event: string) => void;
3
+ export default class EventEmitter {
4
+ events: {
5
+ [key: string]: unknown[];
6
+ };
7
+ constructor();
8
+ on(event: EventType, callback: EventCallback): void;
9
+ off(event: EventType, callback: EventCallback): void;
10
+ removeListener(event: EventType, callback: EventCallback): void;
11
+ removeAllListeners(): void;
12
+ emit(event: EventType, value: string): void;
13
+ }
14
+ export {};
@@ -0,0 +1,35 @@
1
+ export default class EventEmitter {
2
+ constructor() {
3
+ this.events = {};
4
+ }
5
+ on(event, callback) {
6
+ if (typeof this.events[event] !== 'object') {
7
+ this.events[event] = [];
8
+ }
9
+ this.events[event].push(callback);
10
+ }
11
+ off(event, callback) {
12
+ this.removeListener(event, callback);
13
+ }
14
+ removeListener(event, callback) {
15
+ if (typeof this.events[event] === 'object') {
16
+ const index = this.events[event].indexOf(callback);
17
+ if (index !== -1) {
18
+ this.events[event].splice(index, 1);
19
+ }
20
+ }
21
+ }
22
+ removeAllListeners() {
23
+ this.events = {};
24
+ }
25
+ emit(event, value) {
26
+ if (typeof this.events[event] === 'object') {
27
+ this.events[event]
28
+ .filter((cb) => cb != null)
29
+ .forEach((cb) => {
30
+ cb(value);
31
+ });
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=eventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventEmitter.js","sourceRoot":"","sources":["../../src/eventEmitter.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,YAAY;IAG/B;QACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,EAAE,CAAC,KAAgB,EAAE,QAAuB;QAC1C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,KAAgB,EAAE,QAAuB;QAC3C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,cAAc,CAAC,KAAgB,EAAE,QAAuB;QACtD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,KAAgB,EAAE,KAAa;QAClC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;iBACf,MAAM,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC;iBACnC,OAAO,CAAC,CAAC,EAAW,EAAE,EAAE;gBACtB,EAAoB,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { syncWithCis } from './cis';
2
+ export { clearCookieAdvertisingIds, clearCookieJweIfStale, eventEmitter, parsePulseCookies, resetRefreshAfter, } from './pulse-cookie';
3
+ export type { PulseCookie, PulseStorage } from './storage/pulseStorage';
4
+ export type { AdvertisingIdentifiers, AdvertisingVendor, PPIDsByVendor } from './types';
@@ -0,0 +1,3 @@
1
+ export { syncWithCis } from './cis';
2
+ export { clearCookieAdvertisingIds, clearCookieJweIfStale, eventEmitter, parsePulseCookies, resetRefreshAfter, } from './pulse-cookie';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import EventEmitter from './eventEmitter';
2
+ import type { PulseStorage } from './storage/pulseStorage';
3
+ import type { AdvertisingVendor } from './types';
4
+ /**
5
+ * Responsible for subscribing to, and emitting events.
6
+ */
7
+ export declare const eventEmitter: EventEmitter;
8
+ export declare function cacheOldEnvironmentId(id: string): void;
9
+ export declare function parsePulseCookies(cookie?: string): PulseStorage;
10
+ export declare function serializePulseCookie(input?: PulseStorage): void;
11
+ export declare enum CisSyncReason {
12
+ Initialise = "initialise",
13
+ Login = "login",
14
+ Logout = "logout",
15
+ Refresh = "refresh",
16
+ includeAdvertisingChange = "includeAdvertisingChange"
17
+ }
18
+ export type SyncState = {
19
+ syncWithCis: boolean;
20
+ waitForCis?: boolean;
21
+ syncWithCisReason?: CisSyncReason;
22
+ };
23
+ /**
24
+ * Clears all relevant advertisement identifiers from cookie storage, returning the new storage state
25
+ * @returns {PulseCookie}
26
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
27
+ */
28
+ export declare function clearCookieAdvertisingIds(): PulseStorage;
29
+ /**
30
+ * Runs actions related to a new JWE, divergent from the one persisted in the browser storage
31
+ * @param jwe
32
+ *
33
+ * @privateRemarks
34
+ * if there is no jwe, or in other words, no nativeJwe was provided in config, no action will be taken. That's the
35
+ * behaviour with plain Web applications. The scenario not covered here is when we do have a hybrid app, and they don't
36
+ * send any nativeJwe in config.
37
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
38
+ */
39
+ export declare function clearCookieJweIfStale(jwe?: string): void;
40
+ /**
41
+ * Runs actions related to a new JWE, divergent from the one persisted in the browser storage
42
+ * @param refreshAfterDateTime
43
+ */
44
+ export declare function resetRefreshAfter(refreshAfterDateTime?: Date): PulseStorage;
45
+ /**
46
+ * Determines whether CIS should be called to update identity values.
47
+ * @param userId
48
+ * @param options
49
+ * @returns {SyncState}
50
+ */
51
+ export declare function getSyncState(userId?: string | number, options?: {
52
+ cookie?: string;
53
+ includeAdvertising?: boolean;
54
+ vendors?: AdvertisingVendor[];
55
+ }): SyncState;
@@ -0,0 +1,254 @@
1
+ import { cookieConfig, getRootDomain, readCookie, writeCookie } from '@schibsted/pulse-utils';
2
+ import EventEmitter from './eventEmitter';
3
+ import storage from './storage/pulseStorage';
4
+ const { PULSE_COOKIE_KEY, ENV_COOKIE_KEY } = cookieConfig;
5
+ const CIS_POLL_INTERVAL = 900000; // 15 minutes
6
+ /**
7
+ * Responsible for subscribing to, and emitting events.
8
+ */
9
+ export const eventEmitter = new EventEmitter();
10
+ export function cacheOldEnvironmentId(id) {
11
+ try {
12
+ let envCookie = '';
13
+ let oldIds = {};
14
+ try {
15
+ envCookie = readCookie(ENV_COOKIE_KEY);
16
+ }
17
+ catch (_e) { }
18
+ try {
19
+ oldIds = envCookie ? JSON.parse(envCookie) : [];
20
+ }
21
+ catch (_e) { }
22
+ oldIds[id] = Date.now();
23
+ const idsToCache = Object.keys(oldIds)
24
+ .map((envId) => ({ id: envId, date: oldIds[envId] }))
25
+ .sort((o) => o.date)
26
+ .slice(0, 5)
27
+ // biome-ignore lint/performance/noAccumulatingSpread: -
28
+ .reduce((accl, o) => ({ ...accl, [o.id]: o.date }), {});
29
+ writeCookie(ENV_COOKIE_KEY, JSON.stringify(idsToCache), getRootDomain(), 365);
30
+ }
31
+ catch (_e) { }
32
+ }
33
+ export function parsePulseCookies(cookie = readCookie(PULSE_COOKIE_KEY)) {
34
+ let values = decodeURIComponent(cookie).split(',');
35
+ // Cookie is in an unknown, possibly old format. Will be ignored.
36
+ if (values.length !== 10) {
37
+ values = [];
38
+ }
39
+ const altEnvCookie = readCookie(ENV_COOKIE_KEY);
40
+ let altEnvIds;
41
+ if (altEnvIds) {
42
+ try {
43
+ altEnvIds = JSON.parse(altEnvCookie);
44
+ }
45
+ catch (_e) {
46
+ altEnvIds = undefined;
47
+ }
48
+ }
49
+ const ppId = storage.getPPIDsFromStorage();
50
+ const cisCache = storage.getCisCacheFromStorage();
51
+ return {
52
+ environmentId: values[0],
53
+ prevUserId: values[2] ? values[2] : undefined,
54
+ refreshAfterTimestamp: values[3] ? Number.parseInt(values[3], 10) : undefined,
55
+ jwe: values[4],
56
+ anId: undefined,
57
+ syncWithAppNexus: 0,
58
+ doTracking: true,
59
+ pixelInjected: values[8] ? values[8] === 'true' : undefined,
60
+ adId: values[9],
61
+ altEnvIds,
62
+ visitorIdPlaceholder: values[1],
63
+ ppId,
64
+ includeAdvertising: cisCache?.includeAdvertising,
65
+ };
66
+ }
67
+ export function serializePulseCookie(input) {
68
+ const { environmentId = '', prevUserId = '', jwe = '', pixelInjected = '', adId = '', visitorIdPlaceholder = 'v', ppId = {}, refreshAfterTimestamp, includeAdvertising, } = input || {};
69
+ const now = Date.now();
70
+ const refreshCisAfterTimestamp = refreshAfterTimestamp || new Date(now + CIS_POLL_INTERVAL).getTime();
71
+ const cookieString = [
72
+ environmentId,
73
+ visitorIdPlaceholder,
74
+ prevUserId,
75
+ refreshCisAfterTimestamp,
76
+ jwe,
77
+ '', // anId: not used anymore, but required for cookie payload validity
78
+ 0, // syncWithAppNexus: not used anymore, but required for cookie payload validity
79
+ true, // doTracking: not used anymore, but required for cookie payload validity
80
+ pixelInjected,
81
+ adId,
82
+ ].join(',');
83
+ storage.setPPIDsToStorage(ppId);
84
+ storage.setCisCacheToStorage({ includeAdvertising });
85
+ writeCookie(PULSE_COOKIE_KEY, cookieString, getRootDomain(), 2 * 365);
86
+ eventEmitter.emit('environmentIdSet', environmentId);
87
+ eventEmitter.emit('jweSet', jwe);
88
+ }
89
+ export var CisSyncReason;
90
+ (function (CisSyncReason) {
91
+ CisSyncReason["Initialise"] = "initialise";
92
+ CisSyncReason["Login"] = "login";
93
+ CisSyncReason["Logout"] = "logout";
94
+ CisSyncReason["Refresh"] = "refresh";
95
+ CisSyncReason["includeAdvertisingChange"] = "includeAdvertisingChange";
96
+ })(CisSyncReason || (CisSyncReason = {}));
97
+ /**
98
+ * Clears all relevant advertisement identifiers from cookie storage, returning the new storage state
99
+ * @returns {PulseCookie}
100
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
101
+ */
102
+ export function clearCookieAdvertisingIds() {
103
+ const cookieValues = {
104
+ ...parsePulseCookies(),
105
+ adId: '',
106
+ anId: '',
107
+ includeAdvertising: false,
108
+ jwe: '',
109
+ syncWithAppNexus: 0,
110
+ };
111
+ serializePulseCookie(cookieValues);
112
+ return cookieValues;
113
+ }
114
+ /**
115
+ * Runs actions related to a new JWE, divergent from the one persisted in the browser storage
116
+ * @param jwe
117
+ *
118
+ * @privateRemarks
119
+ * if there is no jwe, or in other words, no nativeJwe was provided in config, no action will be taken. That's the
120
+ * behaviour with plain Web applications. The scenario not covered here is when we do have a hybrid app, and they don't
121
+ * send any nativeJwe in config.
122
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
123
+ */
124
+ export function clearCookieJweIfStale(jwe = '') {
125
+ const { jwe: currentJwe } = parsePulseCookies();
126
+ if (jwe && currentJwe !== jwe) {
127
+ clearCookieAdvertisingIds();
128
+ }
129
+ }
130
+ /**
131
+ * Runs actions related to a new JWE, divergent from the one persisted in the browser storage
132
+ * @param refreshAfterDateTime
133
+ */
134
+ export function resetRefreshAfter(refreshAfterDateTime) {
135
+ const cookieValues = {
136
+ ...parsePulseCookies(),
137
+ refreshAfterTimestamp: refreshAfterDateTime ? refreshAfterDateTime.getTime() : Date.now(),
138
+ };
139
+ serializePulseCookie(cookieValues);
140
+ return cookieValues;
141
+ }
142
+ /**
143
+ * Checks whether the login conditions are met.
144
+ * @param userId current user's id
145
+ * @param prevUserId previous user's id stored in the application
146
+ * @returns
147
+ */
148
+ const shouldLogin = (userId, prevUserId) => {
149
+ return Boolean(userId) && String(userId) !== String(prevUserId);
150
+ };
151
+ /**
152
+ * Checks whether the logout conditions are met.
153
+ * @param userId current user's id
154
+ * @param prevUserId previous user's id stored in the application
155
+ * @returns
156
+ */
157
+ const shouldLogout = (userId, prevUserId) => {
158
+ return !userId && String(userId) !== String(prevUserId);
159
+ };
160
+ /**
161
+ * Checks whether the refresh conditions are met.
162
+ * @param currentTimestamp now, expressed as timestamp in ms
163
+ * @param refreshAfterTimestamp threshold, expressed as timestamp in ms
164
+ */
165
+ const shouldRefresh = (currentTimestamp, refreshAfterTimestamp) => {
166
+ return refreshAfterTimestamp && currentTimestamp > refreshAfterTimestamp;
167
+ };
168
+ /**
169
+ * Checks whether privacy context for emitting Advertising Identifiers has changed.
170
+ * @param currentIncludeAdvertising cached value for includeAdvertising
171
+ * @param updatedIncludeAdvertising newly processed value for includeAdvertising
172
+ * @deprecated Advertising Identifiers methods will be removed in the next major version.
173
+ */
174
+ const shouldRefetchAdvertisingIdentifiers = (currentIncludeAdvertising, updatedIncludeAdvertising) => {
175
+ return currentIncludeAdvertising !== updatedIncludeAdvertising;
176
+ };
177
+ /**
178
+ * Checks whether the initialisation conditions are met.
179
+ * @param cookieInput a raw cookie input, expressing the stored state of the application
180
+ * @param currentCookie a parsed cookie
181
+ * @param includeAdvertising expresses whether advertising ids are expected in the stored state of the application
182
+ * @param vendors for which vendors the application is expecting advertising ids
183
+ */
184
+ const shouldInitialise = (cookieInput, currentCookie, includeAdvertising = false, vendors = []) => {
185
+ return (!cookieInput ||
186
+ cookieInput.indexOf('undefined') !== -1 || // 'undefined' should not be a value in the raw cookie. Treat as invalid.
187
+ !currentCookie.environmentId ||
188
+ !currentCookie.jwe ||
189
+ (includeAdvertising && vendors.length > 0 && Object.keys(currentCookie.ppId).length === 0));
190
+ };
191
+ /**
192
+ * Determines whether CIS should be called to update identity values.
193
+ * @param userId
194
+ * @param options
195
+ * @returns {SyncState}
196
+ */
197
+ export function getSyncState(userId, options = {}) {
198
+ const { cookie: cookieInput = readCookie(PULSE_COOKIE_KEY), includeAdvertising, vendors } = options;
199
+ const currentCookie = parsePulseCookies(cookieInput);
200
+ const currentTimestamp = Date.now();
201
+ /*
202
+ * This case only handles login. For example when we don't necessarily have an event (tracker.update({actor: ...})
203
+ * might or might not have been called), then we only want to sync if we DO have a userId, and if that userId is not
204
+ * in our cookie.
205
+ * Blocking call on login/new user to get opt out status and on logout, as SPAs rely on that state to be accurate
206
+ * on all PPID methods after updates.
207
+ */
208
+ if (shouldLogin(userId, currentCookie.prevUserId)) {
209
+ return {
210
+ syncWithCis: true,
211
+ waitForCis: true,
212
+ syncWithCisReason: CisSyncReason.Login,
213
+ };
214
+ }
215
+ /*
216
+ * Blocking call on login/new user to get opt out status and on logout, as SPAs rely on that state to be accurate
217
+ * on all PPID methods after updates.
218
+ */
219
+ if (shouldLogout(userId, currentCookie.prevUserId)) {
220
+ return {
221
+ syncWithCis: true,
222
+ waitForCis: true,
223
+ syncWithCisReason: CisSyncReason.Logout,
224
+ };
225
+ }
226
+ /*
227
+ * Blocking call on login/new user to get opt out status, non-blocking call on logout to get a new JWE.
228
+ */
229
+ if (shouldRefresh(currentTimestamp, currentCookie.refreshAfterTimestamp)) {
230
+ return {
231
+ syncWithCis: true,
232
+ waitForCis: true,
233
+ syncWithCisReason: CisSyncReason.Refresh,
234
+ };
235
+ }
236
+ if (shouldInitialise(cookieInput, currentCookie, includeAdvertising, vendors)) {
237
+ return {
238
+ syncWithCis: true,
239
+ waitForCis: true,
240
+ syncWithCisReason: CisSyncReason.Initialise,
241
+ };
242
+ }
243
+ if (shouldRefetchAdvertisingIdentifiers(currentCookie.includeAdvertising, includeAdvertising)) {
244
+ return {
245
+ syncWithCis: true,
246
+ waitForCis: true,
247
+ syncWithCisReason: CisSyncReason.includeAdvertisingChange,
248
+ };
249
+ }
250
+ return {
251
+ syncWithCis: false,
252
+ };
253
+ }
254
+ //# sourceMappingURL=pulse-cookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pulse-cookie.js","sourceRoot":"","sources":["../../src/pulse-cookie.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { AdvertisingIdentifiers, PPIDsByVendor } from '../types';
2
+ export type PulseCookie = {
3
+ environmentId: string;
4
+ prevUserId?: string;
5
+ refreshAfterTimestamp?: number;
6
+ jwe: string;
7
+ anId?: string;
8
+ syncWithAppNexus?: number;
9
+ doTracking?: boolean;
10
+ pixelInjected?: boolean;
11
+ adId: string;
12
+ altEnvIds?: string[];
13
+ visitorIdPlaceholder?: string;
14
+ };
15
+ type PPID = {
16
+ ppId: PPIDsByVendor;
17
+ };
18
+ /**
19
+ * Defines properties from the CIS response that are persisted as state/cache in the browser.
20
+ *
21
+ * @privateRemarks
22
+ * Only "includeAdvertising" is considered now for this increment. Some work needs to be done to redefine the role of
23
+ * "_pulse2data" cookie, and the impact of caching more things to "avoid state mismatch between components" (namely CIS,
24
+ * PulseSDK, SchibstedAccount and CMP).
25
+ */
26
+ export type CisCache = {
27
+ includeAdvertising?: boolean;
28
+ };
29
+ export type PulseStorage = PulseCookie & PPID & CisCache;
30
+ declare const _default: {
31
+ getCisCacheFromStorage: () => CisCache;
32
+ setCisCacheToStorage: (cisPayload: CisCache) => boolean;
33
+ getPPIDsFromStorage: () => AdvertisingIdentifiers;
34
+ setPPIDsToStorage: (ppid: AdvertisingIdentifiers) => boolean;
35
+ };
36
+ export default _default;