@selwise/widget 0.0.2 → 1.0.0

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 (643) hide show
  1. package/README.md +2 -1
  2. package/dist/npm/cjs/index.cjs +2 -0
  3. package/dist/npm/cjs/index.cjs.LICENSE.txt +1 -0
  4. package/dist/npm/cjs/index.d.ts +59 -0
  5. package/dist/npm/esm/index.d.ts +59 -4
  6. package/dist/npm/esm/index.mjs +2 -0
  7. package/dist/npm/esm/index.mjs.LICENSE.txt +1 -0
  8. package/package.json +14 -16
  9. package/dist/npm/cjs/constants.js +0 -167
  10. package/dist/npm/cjs/constants.js.map +0 -1
  11. package/dist/npm/cjs/core/conflict-resolver.js +0 -203
  12. package/dist/npm/cjs/core/conflict-resolver.js.map +0 -1
  13. package/dist/npm/cjs/core/event-batcher.js +0 -977
  14. package/dist/npm/cjs/core/event-batcher.js.map +0 -1
  15. package/dist/npm/cjs/core/experiment-overrides.js +0 -178
  16. package/dist/npm/cjs/core/experiment-overrides.js.map +0 -1
  17. package/dist/npm/cjs/core/experiments.js +0 -317
  18. package/dist/npm/cjs/core/experiments.js.map +0 -1
  19. package/dist/npm/cjs/core/frequency-caps.js +0 -297
  20. package/dist/npm/cjs/core/frequency-caps.js.map +0 -1
  21. package/dist/npm/cjs/core/index.js +0 -27
  22. package/dist/npm/cjs/core/index.js.map +0 -1
  23. package/dist/npm/cjs/core/indexeddb-queue.js +0 -333
  24. package/dist/npm/cjs/core/indexeddb-queue.js.map +0 -1
  25. package/dist/npm/cjs/core/journey-tracker.js +0 -243
  26. package/dist/npm/cjs/core/journey-tracker.js.map +0 -1
  27. package/dist/npm/cjs/core/page-targeting/index.js +0 -72
  28. package/dist/npm/cjs/core/page-targeting/index.js.map +0 -1
  29. package/dist/npm/cjs/core/script-executor.js +0 -80
  30. package/dist/npm/cjs/core/script-executor.js.map +0 -1
  31. package/dist/npm/cjs/core/segments.js +0 -172
  32. package/dist/npm/cjs/core/segments.js.map +0 -1
  33. package/dist/npm/cjs/core/tracker.js +0 -798
  34. package/dist/npm/cjs/core/tracker.js.map +0 -1
  35. package/dist/npm/cjs/datalayer/basket.js +0 -385
  36. package/dist/npm/cjs/datalayer/basket.js.map +0 -1
  37. package/dist/npm/cjs/datalayer/cart-association.js +0 -226
  38. package/dist/npm/cjs/datalayer/cart-association.js.map +0 -1
  39. package/dist/npm/cjs/datalayer/checkout.js +0 -382
  40. package/dist/npm/cjs/datalayer/checkout.js.map +0 -1
  41. package/dist/npm/cjs/datalayer/constants.js +0 -163
  42. package/dist/npm/cjs/datalayer/constants.js.map +0 -1
  43. package/dist/npm/cjs/datalayer/index.js +0 -1010
  44. package/dist/npm/cjs/datalayer/index.js.map +0 -1
  45. package/dist/npm/cjs/datalayer/listener.js +0 -416
  46. package/dist/npm/cjs/datalayer/listener.js.map +0 -1
  47. package/dist/npm/cjs/datalayer/page.js +0 -343
  48. package/dist/npm/cjs/datalayer/page.js.map +0 -1
  49. package/dist/npm/cjs/datalayer/product.js +0 -517
  50. package/dist/npm/cjs/datalayer/product.js.map +0 -1
  51. package/dist/npm/cjs/datalayer/reverse-mappings.js +0 -139
  52. package/dist/npm/cjs/datalayer/reverse-mappings.js.map +0 -1
  53. package/dist/npm/cjs/datalayer/search.js +0 -363
  54. package/dist/npm/cjs/datalayer/search.js.map +0 -1
  55. package/dist/npm/cjs/datalayer/types.js +0 -134
  56. package/dist/npm/cjs/datalayer/types.js.map +0 -1
  57. package/dist/npm/cjs/datalayer/user.js +0 -372
  58. package/dist/npm/cjs/datalayer/user.js.map +0 -1
  59. package/dist/npm/cjs/debug/index.js +0 -679
  60. package/dist/npm/cjs/debug/index.js.map +0 -1
  61. package/dist/npm/cjs/entries/cdn.js +0 -72
  62. package/dist/npm/cjs/entries/cdn.js.map +0 -1
  63. package/dist/npm/cjs/index.js +0 -10
  64. package/dist/npm/cjs/index.js.map +0 -1
  65. package/dist/npm/cjs/modules/contract/recommendation-contract.js +0 -119
  66. package/dist/npm/cjs/modules/contract/recommendation-contract.js.map +0 -1
  67. package/dist/npm/cjs/modules/contract/search-contract.js +0 -18
  68. package/dist/npm/cjs/modules/contract/search-contract.js.map +0 -1
  69. package/dist/npm/cjs/modules/contract/tracking-contract.js +0 -16
  70. package/dist/npm/cjs/modules/contract/tracking-contract.js.map +0 -1
  71. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js +0 -164
  72. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  73. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js +0 -21
  74. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  75. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js +0 -3
  76. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  77. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js +0 -107
  78. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  79. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js +0 -404
  80. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js.map +0 -1
  81. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js +0 -21
  82. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js.map +0 -1
  83. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js +0 -8
  84. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js.map +0 -1
  85. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js +0 -126
  86. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js.map +0 -1
  87. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js +0 -133
  88. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  89. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js +0 -21
  90. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  91. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js +0 -3
  92. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  93. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js +0 -154
  94. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  95. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js +0 -1481
  96. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  97. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js +0 -22
  98. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js.map +0 -1
  99. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js +0 -21
  100. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  101. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js +0 -8
  102. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js.map +0 -1
  103. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js +0 -139
  104. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  105. package/dist/npm/cjs/modules/contract/widget-contract.js +0 -10
  106. package/dist/npm/cjs/modules/contract/widget-contract.js.map +0 -1
  107. package/dist/npm/cjs/modules/products/tracking.js +0 -214
  108. package/dist/npm/cjs/modules/products/tracking.js.map +0 -1
  109. package/dist/npm/cjs/modules/recommendation/cart-handlers.js +0 -52
  110. package/dist/npm/cjs/modules/recommendation/cart-handlers.js.map +0 -1
  111. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js +0 -287
  112. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js.map +0 -1
  113. package/dist/npm/cjs/modules/recommendation/index.js +0 -678
  114. package/dist/npm/cjs/modules/recommendation/index.js.map +0 -1
  115. package/dist/npm/cjs/modules/recommendation/renderers/grid.js +0 -21
  116. package/dist/npm/cjs/modules/recommendation/renderers/grid.js.map +0 -1
  117. package/dist/npm/cjs/modules/recommendation/renderers/list.js +0 -22
  118. package/dist/npm/cjs/modules/recommendation/renderers/list.js.map +0 -1
  119. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js +0 -22
  120. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js.map +0 -1
  121. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js +0 -145
  122. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  123. package/dist/npm/cjs/modules/recommendation/slider-controls.js +0 -201
  124. package/dist/npm/cjs/modules/recommendation/slider-controls.js.map +0 -1
  125. package/dist/npm/cjs/modules/recommendation/tracking.js +0 -247
  126. package/dist/npm/cjs/modules/recommendation/tracking.js.map +0 -1
  127. package/dist/npm/cjs/modules/recommendation/utils/dom.js +0 -70
  128. package/dist/npm/cjs/modules/recommendation/utils/dom.js.map +0 -1
  129. package/dist/npm/cjs/modules/recommendation/utils/format.js +0 -13
  130. package/dist/npm/cjs/modules/recommendation/utils/format.js.map +0 -1
  131. package/dist/npm/cjs/modules/recommendation/utils/index.js +0 -22
  132. package/dist/npm/cjs/modules/recommendation/utils/index.js.map +0 -1
  133. package/dist/npm/cjs/modules/renderer/helpers.js +0 -16
  134. package/dist/npm/cjs/modules/renderer/helpers.js.map +0 -1
  135. package/dist/npm/cjs/modules/renderer/index.js +0 -52
  136. package/dist/npm/cjs/modules/renderer/index.js.map +0 -1
  137. package/dist/npm/cjs/modules/renderer/style-resolver.js +0 -11
  138. package/dist/npm/cjs/modules/renderer/style-resolver.js.map +0 -1
  139. package/dist/npm/cjs/modules/renderer/styles/index.js +0 -254
  140. package/dist/npm/cjs/modules/renderer/styles/index.js.map +0 -1
  141. package/dist/npm/cjs/modules/renderer/styles.js +0 -7
  142. package/dist/npm/cjs/modules/renderer/styles.js.map +0 -1
  143. package/dist/npm/cjs/modules/renderer/utils/helpers.js +0 -243
  144. package/dist/npm/cjs/modules/renderer/utils/helpers.js.map +0 -1
  145. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js +0 -65
  146. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js.map +0 -1
  147. package/dist/npm/cjs/modules/renderer/utils/placement.js +0 -34
  148. package/dist/npm/cjs/modules/renderer/utils/placement.js.map +0 -1
  149. package/dist/npm/cjs/modules/renderer/utils.js +0 -61
  150. package/dist/npm/cjs/modules/renderer/utils.js.map +0 -1
  151. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js +0 -84
  152. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js.map +0 -1
  153. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js +0 -211
  154. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js.map +0 -1
  155. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js +0 -459
  156. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js.map +0 -1
  157. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js +0 -132
  158. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js.map +0 -1
  159. package/dist/npm/cjs/modules/renderer/widgets/custom.js +0 -58
  160. package/dist/npm/cjs/modules/renderer/widgets/custom.js.map +0 -1
  161. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js +0 -97
  162. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js.map +0 -1
  163. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js +0 -151
  164. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  165. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js +0 -70
  166. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js.map +0 -1
  167. package/dist/npm/cjs/modules/renderer/widgets/helpers.js +0 -87
  168. package/dist/npm/cjs/modules/renderer/widgets/helpers.js.map +0 -1
  169. package/dist/npm/cjs/modules/renderer/widgets/index.js +0 -39
  170. package/dist/npm/cjs/modules/renderer/widgets/index.js.map +0 -1
  171. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js +0 -124
  172. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js.map +0 -1
  173. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js +0 -280
  174. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js.map +0 -1
  175. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js +0 -197
  176. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js.map +0 -1
  177. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js +0 -105
  178. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js.map +0 -1
  179. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js +0 -47
  180. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js.map +0 -1
  181. package/dist/npm/cjs/modules/search/cart/index.js +0 -42
  182. package/dist/npm/cjs/modules/search/cart/index.js.map +0 -1
  183. package/dist/npm/cjs/modules/search/components/index.js +0 -13
  184. package/dist/npm/cjs/modules/search/components/index.js.map +0 -1
  185. package/dist/npm/cjs/modules/search/components/search-box.js +0 -28
  186. package/dist/npm/cjs/modules/search/components/search-box.js.map +0 -1
  187. package/dist/npm/cjs/modules/search/components/search-item.js +0 -197
  188. package/dist/npm/cjs/modules/search/components/search-item.js.map +0 -1
  189. package/dist/npm/cjs/modules/search/components/suggestions.js +0 -132
  190. package/dist/npm/cjs/modules/search/components/suggestions.js.map +0 -1
  191. package/dist/npm/cjs/modules/search/index.js +0 -646
  192. package/dist/npm/cjs/modules/search/index.js.map +0 -1
  193. package/dist/npm/cjs/modules/search/renderers/position-renderers.js +0 -229
  194. package/dist/npm/cjs/modules/search/renderers/position-renderers.js.map +0 -1
  195. package/dist/npm/cjs/modules/search/renderers/results-renderer.js +0 -180
  196. package/dist/npm/cjs/modules/search/renderers/results-renderer.js.map +0 -1
  197. package/dist/npm/cjs/modules/search/services/api-service.js +0 -121
  198. package/dist/npm/cjs/modules/search/services/api-service.js.map +0 -1
  199. package/dist/npm/cjs/modules/search/services/tracking-service.js +0 -263
  200. package/dist/npm/cjs/modules/search/services/tracking-service.js.map +0 -1
  201. package/dist/npm/cjs/modules/search/styles.js +0 -864
  202. package/dist/npm/cjs/modules/search/styles.js.map +0 -1
  203. package/dist/npm/cjs/modules/search/utils/helpers.js +0 -100
  204. package/dist/npm/cjs/modules/search/utils/helpers.js.map +0 -1
  205. package/dist/npm/cjs/modules/search/utils/icons.js +0 -41
  206. package/dist/npm/cjs/modules/search/utils/icons.js.map +0 -1
  207. package/dist/npm/cjs/modules/search/utils/index.js +0 -22
  208. package/dist/npm/cjs/modules/search/utils/index.js.map +0 -1
  209. package/dist/npm/cjs/modules/search/utils/storage.js +0 -58
  210. package/dist/npm/cjs/modules/search/utils/storage.js.map +0 -1
  211. package/dist/npm/cjs/selwise.js +0 -1160
  212. package/dist/npm/cjs/selwise.js.map +0 -1
  213. package/dist/npm/cjs/sentry-test.js +0 -118
  214. package/dist/npm/cjs/sentry-test.js.map +0 -1
  215. package/dist/npm/cjs/sentry.js +0 -451
  216. package/dist/npm/cjs/sentry.js.map +0 -1
  217. package/dist/npm/cjs/shared/cart/handlers.js +0 -259
  218. package/dist/npm/cjs/shared/cart/handlers.js.map +0 -1
  219. package/dist/npm/cjs/shared/cart/index.js +0 -23
  220. package/dist/npm/cjs/shared/cart/index.js.map +0 -1
  221. package/dist/npm/cjs/shared/cart/types.js +0 -7
  222. package/dist/npm/cjs/shared/cart/types.js.map +0 -1
  223. package/dist/npm/cjs/shared/product-card/index.js +0 -24
  224. package/dist/npm/cjs/shared/product-card/index.js.map +0 -1
  225. package/dist/npm/cjs/shared/product-card/renderer.js +0 -341
  226. package/dist/npm/cjs/shared/product-card/renderer.js.map +0 -1
  227. package/dist/npm/cjs/shared/product-card/styles.js +0 -195
  228. package/dist/npm/cjs/shared/product-card/styles.js.map +0 -1
  229. package/dist/npm/cjs/shared/product-card/types.js +0 -67
  230. package/dist/npm/cjs/shared/product-card/types.js.map +0 -1
  231. package/dist/npm/cjs/types/config.js +0 -6
  232. package/dist/npm/cjs/types/config.js.map +0 -1
  233. package/dist/npm/cjs/types/experiments.js +0 -17
  234. package/dist/npm/cjs/types/experiments.js.map +0 -1
  235. package/dist/npm/cjs/types/global-api.js +0 -3
  236. package/dist/npm/cjs/types/global-api.js.map +0 -1
  237. package/dist/npm/cjs/types/index.js +0 -27
  238. package/dist/npm/cjs/types/index.js.map +0 -1
  239. package/dist/npm/cjs/types/recommendation.js +0 -6
  240. package/dist/npm/cjs/types/recommendation.js.map +0 -1
  241. package/dist/npm/cjs/types/renderer.js +0 -6
  242. package/dist/npm/cjs/types/renderer.js.map +0 -1
  243. package/dist/npm/cjs/types/search.js +0 -6
  244. package/dist/npm/cjs/types/search.js.map +0 -1
  245. package/dist/npm/cjs/utils/api-url.js +0 -35
  246. package/dist/npm/cjs/utils/api-url.js.map +0 -1
  247. package/dist/npm/cjs/utils/debounce.js +0 -74
  248. package/dist/npm/cjs/utils/debounce.js.map +0 -1
  249. package/dist/npm/cjs/utils/event-id.js +0 -23
  250. package/dist/npm/cjs/utils/event-id.js.map +0 -1
  251. package/dist/npm/cjs/utils/index.js +0 -28
  252. package/dist/npm/cjs/utils/index.js.map +0 -1
  253. package/dist/npm/cjs/utils/logger.js +0 -74
  254. package/dist/npm/cjs/utils/logger.js.map +0 -1
  255. package/dist/npm/cjs/utils/sanitize.js +0 -159
  256. package/dist/npm/cjs/utils/sanitize.js.map +0 -1
  257. package/dist/npm/cjs/utils/storage.js +0 -285
  258. package/dist/npm/cjs/utils/storage.js.map +0 -1
  259. package/dist/npm/cjs/utils/tracking-metadata.js +0 -18
  260. package/dist/npm/cjs/utils/tracking-metadata.js.map +0 -1
  261. package/dist/npm/cjs/utils/url-matcher.js +0 -11
  262. package/dist/npm/cjs/utils/url-matcher.js.map +0 -1
  263. package/dist/npm/esm/constants.d.ts +0 -130
  264. package/dist/npm/esm/constants.js +0 -164
  265. package/dist/npm/esm/constants.js.map +0 -1
  266. package/dist/npm/esm/core/conflict-resolver.d.ts +0 -96
  267. package/dist/npm/esm/core/conflict-resolver.js +0 -198
  268. package/dist/npm/esm/core/conflict-resolver.js.map +0 -1
  269. package/dist/npm/esm/core/event-batcher.d.ts +0 -253
  270. package/dist/npm/esm/core/event-batcher.js +0 -973
  271. package/dist/npm/esm/core/event-batcher.js.map +0 -1
  272. package/dist/npm/esm/core/experiment-overrides.d.ts +0 -7
  273. package/dist/npm/esm/core/experiment-overrides.js +0 -172
  274. package/dist/npm/esm/core/experiment-overrides.js.map +0 -1
  275. package/dist/npm/esm/core/experiments.d.ts +0 -90
  276. package/dist/npm/esm/core/experiments.js +0 -313
  277. package/dist/npm/esm/core/experiments.js.map +0 -1
  278. package/dist/npm/esm/core/frequency-caps.d.ts +0 -124
  279. package/dist/npm/esm/core/frequency-caps.js +0 -292
  280. package/dist/npm/esm/core/frequency-caps.js.map +0 -1
  281. package/dist/npm/esm/core/index.d.ts +0 -10
  282. package/dist/npm/esm/core/index.js +0 -11
  283. package/dist/npm/esm/core/index.js.map +0 -1
  284. package/dist/npm/esm/core/indexeddb-queue.d.ts +0 -83
  285. package/dist/npm/esm/core/indexeddb-queue.js +0 -328
  286. package/dist/npm/esm/core/indexeddb-queue.js.map +0 -1
  287. package/dist/npm/esm/core/journey-tracker.d.ts +0 -102
  288. package/dist/npm/esm/core/journey-tracker.js +0 -237
  289. package/dist/npm/esm/core/journey-tracker.js.map +0 -1
  290. package/dist/npm/esm/core/page-targeting/index.d.ts +0 -8
  291. package/dist/npm/esm/core/page-targeting/index.js +0 -67
  292. package/dist/npm/esm/core/page-targeting/index.js.map +0 -1
  293. package/dist/npm/esm/core/script-executor.d.ts +0 -31
  294. package/dist/npm/esm/core/script-executor.js +0 -76
  295. package/dist/npm/esm/core/script-executor.js.map +0 -1
  296. package/dist/npm/esm/core/segments.d.ts +0 -39
  297. package/dist/npm/esm/core/segments.js +0 -168
  298. package/dist/npm/esm/core/segments.js.map +0 -1
  299. package/dist/npm/esm/core/tracker.d.ts +0 -182
  300. package/dist/npm/esm/core/tracker.js +0 -794
  301. package/dist/npm/esm/core/tracker.js.map +0 -1
  302. package/dist/npm/esm/datalayer/basket.d.ts +0 -104
  303. package/dist/npm/esm/datalayer/basket.js +0 -381
  304. package/dist/npm/esm/datalayer/basket.js.map +0 -1
  305. package/dist/npm/esm/datalayer/cart-association.d.ts +0 -65
  306. package/dist/npm/esm/datalayer/cart-association.js +0 -222
  307. package/dist/npm/esm/datalayer/cart-association.js.map +0 -1
  308. package/dist/npm/esm/datalayer/checkout.d.ts +0 -96
  309. package/dist/npm/esm/datalayer/checkout.js +0 -378
  310. package/dist/npm/esm/datalayer/checkout.js.map +0 -1
  311. package/dist/npm/esm/datalayer/constants.d.ts +0 -77
  312. package/dist/npm/esm/datalayer/constants.js +0 -160
  313. package/dist/npm/esm/datalayer/constants.js.map +0 -1
  314. package/dist/npm/esm/datalayer/index.d.ts +0 -212
  315. package/dist/npm/esm/datalayer/index.js +0 -991
  316. package/dist/npm/esm/datalayer/index.js.map +0 -1
  317. package/dist/npm/esm/datalayer/listener.d.ts +0 -108
  318. package/dist/npm/esm/datalayer/listener.js +0 -411
  319. package/dist/npm/esm/datalayer/listener.js.map +0 -1
  320. package/dist/npm/esm/datalayer/page.d.ts +0 -94
  321. package/dist/npm/esm/datalayer/page.js +0 -339
  322. package/dist/npm/esm/datalayer/page.js.map +0 -1
  323. package/dist/npm/esm/datalayer/product.d.ts +0 -133
  324. package/dist/npm/esm/datalayer/product.js +0 -513
  325. package/dist/npm/esm/datalayer/product.js.map +0 -1
  326. package/dist/npm/esm/datalayer/reverse-mappings.d.ts +0 -62
  327. package/dist/npm/esm/datalayer/reverse-mappings.js +0 -135
  328. package/dist/npm/esm/datalayer/reverse-mappings.js.map +0 -1
  329. package/dist/npm/esm/datalayer/search.d.ts +0 -108
  330. package/dist/npm/esm/datalayer/search.js +0 -359
  331. package/dist/npm/esm/datalayer/search.js.map +0 -1
  332. package/dist/npm/esm/datalayer/types.d.ts +0 -292
  333. package/dist/npm/esm/datalayer/types.js +0 -131
  334. package/dist/npm/esm/datalayer/types.js.map +0 -1
  335. package/dist/npm/esm/datalayer/user.d.ts +0 -104
  336. package/dist/npm/esm/datalayer/user.js +0 -368
  337. package/dist/npm/esm/datalayer/user.js.map +0 -1
  338. package/dist/npm/esm/debug/index.d.ts +0 -173
  339. package/dist/npm/esm/debug/index.js +0 -673
  340. package/dist/npm/esm/debug/index.js.map +0 -1
  341. package/dist/npm/esm/entries/cdn.d.ts +0 -1
  342. package/dist/npm/esm/entries/cdn.js +0 -35
  343. package/dist/npm/esm/entries/cdn.js.map +0 -1
  344. package/dist/npm/esm/index.js +0 -4
  345. package/dist/npm/esm/index.js.map +0 -1
  346. package/dist/npm/esm/modules/contract/recommendation-contract.d.ts +0 -5
  347. package/dist/npm/esm/modules/contract/recommendation-contract.js +0 -107
  348. package/dist/npm/esm/modules/contract/recommendation-contract.js.map +0 -1
  349. package/dist/npm/esm/modules/contract/search-contract.d.ts +0 -1
  350. package/dist/npm/esm/modules/contract/search-contract.js +0 -2
  351. package/dist/npm/esm/modules/contract/search-contract.js.map +0 -1
  352. package/dist/npm/esm/modules/contract/tracking-contract.d.ts +0 -1
  353. package/dist/npm/esm/modules/contract/tracking-contract.js +0 -2
  354. package/dist/npm/esm/modules/contract/tracking-contract.js.map +0 -1
  355. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.d.ts +0 -8
  356. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js +0 -160
  357. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  358. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.d.ts +0 -3
  359. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js +0 -5
  360. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  361. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.d.ts +0 -56
  362. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js +0 -2
  363. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  364. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.d.ts +0 -3
  365. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js +0 -103
  366. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  367. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.d.ts +0 -35
  368. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js +0 -396
  369. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js.map +0 -1
  370. package/dist/npm/esm/modules/contract/vendor/search-contract/index.d.ts +0 -3
  371. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js +0 -5
  372. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js.map +0 -1
  373. package/dist/npm/esm/modules/contract/vendor/search-contract/types.d.ts +0 -119
  374. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js +0 -7
  375. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js.map +0 -1
  376. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.d.ts +0 -22
  377. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js +0 -118
  378. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js.map +0 -1
  379. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.d.ts +0 -7
  380. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js +0 -130
  381. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  382. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.d.ts +0 -3
  383. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js +0 -5
  384. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  385. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.d.ts +0 -37
  386. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js +0 -2
  387. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  388. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.d.ts +0 -6
  389. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js +0 -147
  390. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  391. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.d.ts +0 -22
  392. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js +0 -1472
  393. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  394. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.d.ts +0 -4
  395. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js +0 -6
  396. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js.map +0 -1
  397. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.d.ts +0 -14
  398. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js +0 -18
  399. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  400. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.d.ts +0 -128
  401. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js +0 -7
  402. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js.map +0 -1
  403. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.d.ts +0 -11
  404. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js +0 -132
  405. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  406. package/dist/npm/esm/modules/contract/widget-contract.d.ts +0 -1
  407. package/dist/npm/esm/modules/contract/widget-contract.js +0 -2
  408. package/dist/npm/esm/modules/contract/widget-contract.js.map +0 -1
  409. package/dist/npm/esm/modules/products/tracking.d.ts +0 -122
  410. package/dist/npm/esm/modules/products/tracking.js +0 -203
  411. package/dist/npm/esm/modules/products/tracking.js.map +0 -1
  412. package/dist/npm/esm/modules/recommendation/cart-handlers.d.ts +0 -10
  413. package/dist/npm/esm/modules/recommendation/cart-handlers.js +0 -49
  414. package/dist/npm/esm/modules/recommendation/cart-handlers.js.map +0 -1
  415. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.d.ts +0 -37
  416. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js +0 -281
  417. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js.map +0 -1
  418. package/dist/npm/esm/modules/recommendation/index.d.ts +0 -11
  419. package/dist/npm/esm/modules/recommendation/index.js +0 -674
  420. package/dist/npm/esm/modules/recommendation/index.js.map +0 -1
  421. package/dist/npm/esm/modules/recommendation/renderers/grid.d.ts +0 -5
  422. package/dist/npm/esm/modules/recommendation/renderers/grid.js +0 -18
  423. package/dist/npm/esm/modules/recommendation/renderers/grid.js.map +0 -1
  424. package/dist/npm/esm/modules/recommendation/renderers/list.d.ts +0 -5
  425. package/dist/npm/esm/modules/recommendation/renderers/list.js +0 -19
  426. package/dist/npm/esm/modules/recommendation/renderers/list.js.map +0 -1
  427. package/dist/npm/esm/modules/recommendation/renderers/masonry.d.ts +0 -5
  428. package/dist/npm/esm/modules/recommendation/renderers/masonry.js +0 -19
  429. package/dist/npm/esm/modules/recommendation/renderers/masonry.js.map +0 -1
  430. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.d.ts +0 -10
  431. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js +0 -140
  432. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  433. package/dist/npm/esm/modules/recommendation/slider-controls.d.ts +0 -17
  434. package/dist/npm/esm/modules/recommendation/slider-controls.js +0 -187
  435. package/dist/npm/esm/modules/recommendation/slider-controls.js.map +0 -1
  436. package/dist/npm/esm/modules/recommendation/tracking.d.ts +0 -28
  437. package/dist/npm/esm/modules/recommendation/tracking.js +0 -237
  438. package/dist/npm/esm/modules/recommendation/tracking.js.map +0 -1
  439. package/dist/npm/esm/modules/recommendation/utils/dom.d.ts +0 -10
  440. package/dist/npm/esm/modules/recommendation/utils/dom.js +0 -63
  441. package/dist/npm/esm/modules/recommendation/utils/dom.js.map +0 -1
  442. package/dist/npm/esm/modules/recommendation/utils/format.d.ts +0 -4
  443. package/dist/npm/esm/modules/recommendation/utils/format.js +0 -10
  444. package/dist/npm/esm/modules/recommendation/utils/format.js.map +0 -1
  445. package/dist/npm/esm/modules/recommendation/utils/index.d.ts +0 -5
  446. package/dist/npm/esm/modules/recommendation/utils/index.js +0 -6
  447. package/dist/npm/esm/modules/recommendation/utils/index.js.map +0 -1
  448. package/dist/npm/esm/modules/renderer/helpers.d.ts +0 -5
  449. package/dist/npm/esm/modules/renderer/helpers.js +0 -6
  450. package/dist/npm/esm/modules/renderer/helpers.js.map +0 -1
  451. package/dist/npm/esm/modules/renderer/index.d.ts +0 -8
  452. package/dist/npm/esm/modules/renderer/index.js +0 -48
  453. package/dist/npm/esm/modules/renderer/index.js.map +0 -1
  454. package/dist/npm/esm/modules/renderer/style-resolver.d.ts +0 -1
  455. package/dist/npm/esm/modules/renderer/style-resolver.js +0 -8
  456. package/dist/npm/esm/modules/renderer/style-resolver.js.map +0 -1
  457. package/dist/npm/esm/modules/renderer/styles/index.d.ts +0 -12
  458. package/dist/npm/esm/modules/renderer/styles/index.js +0 -250
  459. package/dist/npm/esm/modules/renderer/styles/index.js.map +0 -1
  460. package/dist/npm/esm/modules/renderer/styles.d.ts +0 -1
  461. package/dist/npm/esm/modules/renderer/styles.js +0 -2
  462. package/dist/npm/esm/modules/renderer/styles.js.map +0 -1
  463. package/dist/npm/esm/modules/renderer/utils/helpers.d.ts +0 -58
  464. package/dist/npm/esm/modules/renderer/utils/helpers.js +0 -225
  465. package/dist/npm/esm/modules/renderer/utils/helpers.js.map +0 -1
  466. package/dist/npm/esm/modules/renderer/utils/image-renderer.d.ts +0 -17
  467. package/dist/npm/esm/modules/renderer/utils/image-renderer.js +0 -60
  468. package/dist/npm/esm/modules/renderer/utils/image-renderer.js.map +0 -1
  469. package/dist/npm/esm/modules/renderer/utils/placement.d.ts +0 -6
  470. package/dist/npm/esm/modules/renderer/utils/placement.js +0 -31
  471. package/dist/npm/esm/modules/renderer/utils/placement.js.map +0 -1
  472. package/dist/npm/esm/modules/renderer/utils.d.ts +0 -11
  473. package/dist/npm/esm/modules/renderer/utils.js +0 -44
  474. package/dist/npm/esm/modules/renderer/utils.js.map +0 -1
  475. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.d.ts +0 -5
  476. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js +0 -81
  477. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js.map +0 -1
  478. package/dist/npm/esm/modules/renderer/widgets/cart-count.d.ts +0 -6
  479. package/dist/npm/esm/modules/renderer/widgets/cart-count.js +0 -208
  480. package/dist/npm/esm/modules/renderer/widgets/cart-count.js.map +0 -1
  481. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.d.ts +0 -18
  482. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js +0 -454
  483. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js.map +0 -1
  484. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.d.ts +0 -5
  485. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js +0 -129
  486. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js.map +0 -1
  487. package/dist/npm/esm/modules/renderer/widgets/custom.d.ts +0 -5
  488. package/dist/npm/esm/modules/renderer/widgets/custom.js +0 -55
  489. package/dist/npm/esm/modules/renderer/widgets/custom.js.map +0 -1
  490. package/dist/npm/esm/modules/renderer/widgets/embedded-card.d.ts +0 -5
  491. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js +0 -94
  492. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js.map +0 -1
  493. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.d.ts +0 -6
  494. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js +0 -147
  495. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  496. package/dist/npm/esm/modules/renderer/widgets/floating-button.d.ts +0 -5
  497. package/dist/npm/esm/modules/renderer/widgets/floating-button.js +0 -67
  498. package/dist/npm/esm/modules/renderer/widgets/floating-button.js.map +0 -1
  499. package/dist/npm/esm/modules/renderer/widgets/helpers.d.ts +0 -29
  500. package/dist/npm/esm/modules/renderer/widgets/helpers.js +0 -82
  501. package/dist/npm/esm/modules/renderer/widgets/helpers.js.map +0 -1
  502. package/dist/npm/esm/modules/renderer/widgets/index.d.ts +0 -17
  503. package/dist/npm/esm/modules/renderer/widgets/index.js +0 -19
  504. package/dist/npm/esm/modules/renderer/widgets/index.js.map +0 -1
  505. package/dist/npm/esm/modules/renderer/widgets/inline-banner.d.ts +0 -5
  506. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js +0 -121
  507. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js.map +0 -1
  508. package/dist/npm/esm/modules/renderer/widgets/newsletter.d.ts +0 -6
  509. package/dist/npm/esm/modules/renderer/widgets/newsletter.js +0 -277
  510. package/dist/npm/esm/modules/renderer/widgets/newsletter.js.map +0 -1
  511. package/dist/npm/esm/modules/renderer/widgets/product-view-count.d.ts +0 -6
  512. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js +0 -194
  513. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js.map +0 -1
  514. package/dist/npm/esm/modules/renderer/widgets/slide-in.d.ts +0 -5
  515. package/dist/npm/esm/modules/renderer/widgets/slide-in.js +0 -102
  516. package/dist/npm/esm/modules/renderer/widgets/slide-in.js.map +0 -1
  517. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.d.ts +0 -5
  518. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js +0 -44
  519. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js.map +0 -1
  520. package/dist/npm/esm/modules/search/cart/index.d.ts +0 -26
  521. package/dist/npm/esm/modules/search/cart/index.js +0 -39
  522. package/dist/npm/esm/modules/search/cart/index.js.map +0 -1
  523. package/dist/npm/esm/modules/search/components/index.d.ts +0 -6
  524. package/dist/npm/esm/modules/search/components/index.js +0 -7
  525. package/dist/npm/esm/modules/search/components/index.js.map +0 -1
  526. package/dist/npm/esm/modules/search/components/search-box.d.ts +0 -11
  527. package/dist/npm/esm/modules/search/components/search-box.js +0 -25
  528. package/dist/npm/esm/modules/search/components/search-box.js.map +0 -1
  529. package/dist/npm/esm/modules/search/components/search-item.d.ts +0 -20
  530. package/dist/npm/esm/modules/search/components/search-item.js +0 -193
  531. package/dist/npm/esm/modules/search/components/search-item.js.map +0 -1
  532. package/dist/npm/esm/modules/search/components/suggestions.d.ts +0 -10
  533. package/dist/npm/esm/modules/search/components/suggestions.js +0 -129
  534. package/dist/npm/esm/modules/search/components/suggestions.js.map +0 -1
  535. package/dist/npm/esm/modules/search/index.d.ts +0 -67
  536. package/dist/npm/esm/modules/search/index.js +0 -642
  537. package/dist/npm/esm/modules/search/index.js.map +0 -1
  538. package/dist/npm/esm/modules/search/renderers/position-renderers.d.ts +0 -23
  539. package/dist/npm/esm/modules/search/renderers/position-renderers.js +0 -221
  540. package/dist/npm/esm/modules/search/renderers/position-renderers.js.map +0 -1
  541. package/dist/npm/esm/modules/search/renderers/results-renderer.d.ts +0 -20
  542. package/dist/npm/esm/modules/search/renderers/results-renderer.js +0 -176
  543. package/dist/npm/esm/modules/search/renderers/results-renderer.js.map +0 -1
  544. package/dist/npm/esm/modules/search/services/api-service.d.ts +0 -18
  545. package/dist/npm/esm/modules/search/services/api-service.js +0 -115
  546. package/dist/npm/esm/modules/search/services/api-service.js.map +0 -1
  547. package/dist/npm/esm/modules/search/services/tracking-service.d.ts +0 -16
  548. package/dist/npm/esm/modules/search/services/tracking-service.js +0 -250
  549. package/dist/npm/esm/modules/search/services/tracking-service.js.map +0 -1
  550. package/dist/npm/esm/modules/search/styles.d.ts +0 -13
  551. package/dist/npm/esm/modules/search/styles.js +0 -860
  552. package/dist/npm/esm/modules/search/styles.js.map +0 -1
  553. package/dist/npm/esm/modules/search/utils/helpers.d.ts +0 -24
  554. package/dist/npm/esm/modules/search/utils/helpers.js +0 -93
  555. package/dist/npm/esm/modules/search/utils/helpers.js.map +0 -1
  556. package/dist/npm/esm/modules/search/utils/icons.d.ts +0 -16
  557. package/dist/npm/esm/modules/search/utils/icons.js +0 -36
  558. package/dist/npm/esm/modules/search/utils/icons.js.map +0 -1
  559. package/dist/npm/esm/modules/search/utils/index.d.ts +0 -6
  560. package/dist/npm/esm/modules/search/utils/index.js +0 -7
  561. package/dist/npm/esm/modules/search/utils/index.js.map +0 -1
  562. package/dist/npm/esm/modules/search/utils/storage.d.ts +0 -7
  563. package/dist/npm/esm/modules/search/utils/storage.js +0 -52
  564. package/dist/npm/esm/modules/search/utils/storage.js.map +0 -1
  565. package/dist/npm/esm/package.json +0 -1
  566. package/dist/npm/esm/selwise.d.ts +0 -209
  567. package/dist/npm/esm/selwise.js +0 -1123
  568. package/dist/npm/esm/selwise.js.map +0 -1
  569. package/dist/npm/esm/sentry-test.d.ts +0 -45
  570. package/dist/npm/esm/sentry-test.js +0 -109
  571. package/dist/npm/esm/sentry-test.js.map +0 -1
  572. package/dist/npm/esm/sentry.d.ts +0 -86
  573. package/dist/npm/esm/sentry.js +0 -441
  574. package/dist/npm/esm/sentry.js.map +0 -1
  575. package/dist/npm/esm/shared/cart/handlers.d.ts +0 -46
  576. package/dist/npm/esm/shared/cart/handlers.js +0 -249
  577. package/dist/npm/esm/shared/cart/handlers.js.map +0 -1
  578. package/dist/npm/esm/shared/cart/index.d.ts +0 -6
  579. package/dist/npm/esm/shared/cart/index.js +0 -7
  580. package/dist/npm/esm/shared/cart/index.js.map +0 -1
  581. package/dist/npm/esm/shared/cart/types.d.ts +0 -30
  582. package/dist/npm/esm/shared/cart/types.js +0 -6
  583. package/dist/npm/esm/shared/cart/types.js.map +0 -1
  584. package/dist/npm/esm/shared/product-card/index.d.ts +0 -7
  585. package/dist/npm/esm/shared/product-card/index.js +0 -8
  586. package/dist/npm/esm/shared/product-card/index.js.map +0 -1
  587. package/dist/npm/esm/shared/product-card/renderer.d.ts +0 -35
  588. package/dist/npm/esm/shared/product-card/renderer.js +0 -334
  589. package/dist/npm/esm/shared/product-card/renderer.js.map +0 -1
  590. package/dist/npm/esm/shared/product-card/styles.d.ts +0 -17
  591. package/dist/npm/esm/shared/product-card/styles.js +0 -190
  592. package/dist/npm/esm/shared/product-card/styles.js.map +0 -1
  593. package/dist/npm/esm/shared/product-card/types.d.ts +0 -84
  594. package/dist/npm/esm/shared/product-card/types.js +0 -63
  595. package/dist/npm/esm/shared/product-card/types.js.map +0 -1
  596. package/dist/npm/esm/types/config.d.ts +0 -26
  597. package/dist/npm/esm/types/config.js +0 -5
  598. package/dist/npm/esm/types/config.js.map +0 -1
  599. package/dist/npm/esm/types/experiments.d.ts +0 -47
  600. package/dist/npm/esm/types/experiments.js +0 -14
  601. package/dist/npm/esm/types/experiments.js.map +0 -1
  602. package/dist/npm/esm/types/global-api.d.ts +0 -40
  603. package/dist/npm/esm/types/global-api.js +0 -2
  604. package/dist/npm/esm/types/global-api.js.map +0 -1
  605. package/dist/npm/esm/types/index.d.ts +0 -9
  606. package/dist/npm/esm/types/index.js +0 -11
  607. package/dist/npm/esm/types/index.js.map +0 -1
  608. package/dist/npm/esm/types/recommendation.d.ts +0 -186
  609. package/dist/npm/esm/types/recommendation.js +0 -5
  610. package/dist/npm/esm/types/recommendation.js.map +0 -1
  611. package/dist/npm/esm/types/renderer.d.ts +0 -99
  612. package/dist/npm/esm/types/renderer.js +0 -5
  613. package/dist/npm/esm/types/renderer.js.map +0 -1
  614. package/dist/npm/esm/types/search.d.ts +0 -186
  615. package/dist/npm/esm/types/search.js +0 -5
  616. package/dist/npm/esm/types/search.js.map +0 -1
  617. package/dist/npm/esm/utils/api-url.d.ts +0 -1
  618. package/dist/npm/esm/utils/api-url.js +0 -32
  619. package/dist/npm/esm/utils/api-url.js.map +0 -1
  620. package/dist/npm/esm/utils/debounce.d.ts +0 -27
  621. package/dist/npm/esm/utils/debounce.js +0 -70
  622. package/dist/npm/esm/utils/debounce.js.map +0 -1
  623. package/dist/npm/esm/utils/event-id.d.ts +0 -5
  624. package/dist/npm/esm/utils/event-id.js +0 -20
  625. package/dist/npm/esm/utils/event-id.js.map +0 -1
  626. package/dist/npm/esm/utils/index.d.ts +0 -11
  627. package/dist/npm/esm/utils/index.js +0 -12
  628. package/dist/npm/esm/utils/index.js.map +0 -1
  629. package/dist/npm/esm/utils/logger.d.ts +0 -31
  630. package/dist/npm/esm/utils/logger.js +0 -66
  631. package/dist/npm/esm/utils/logger.js.map +0 -1
  632. package/dist/npm/esm/utils/sanitize.d.ts +0 -38
  633. package/dist/npm/esm/utils/sanitize.js +0 -148
  634. package/dist/npm/esm/utils/sanitize.js.map +0 -1
  635. package/dist/npm/esm/utils/storage.d.ts +0 -72
  636. package/dist/npm/esm/utils/storage.js +0 -271
  637. package/dist/npm/esm/utils/storage.js.map +0 -1
  638. package/dist/npm/esm/utils/tracking-metadata.d.ts +0 -1
  639. package/dist/npm/esm/utils/tracking-metadata.js +0 -15
  640. package/dist/npm/esm/utils/tracking-metadata.js.map +0 -1
  641. package/dist/npm/esm/utils/url-matcher.d.ts +0 -4
  642. package/dist/npm/esm/utils/url-matcher.js +0 -8
  643. package/dist/npm/esm/utils/url-matcher.js.map +0 -1
@@ -1,977 +0,0 @@
1
- "use strict";
2
- /**
3
- * Event Batcher
4
- * Advanced event batching with offline support and retry logic
5
- * Now with consent-based event filtering
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.EventBatcher = void 0;
9
- const utils_1 = require("../utils");
10
- const constants_1 = require("../constants");
11
- const storage_1 = require("../utils/storage");
12
- const indexeddb_queue_1 = require("./indexeddb-queue");
13
- const logger_1 = require("../utils/logger");
14
- const STORAGE_KEY = 'selwise_event_queue';
15
- const STORAGE_VERSION = 2;
16
- class EventBatcher {
17
- constructor(config = {}) {
18
- this.queue = [];
19
- this.consentQueue = []; // Events waiting for consent
20
- this.flushTimeout = null;
21
- this.pageHideHandler = null;
22
- this.isFlushing = false;
23
- // Consent state tracking
24
- this.consentChecked = false;
25
- this.consentGranted = false;
26
- // Enable IndexedDB for consent queue persistence
27
- this.useIndexedDBForConsent = true;
28
- // Extended config options
29
- this.maxRetries = 3;
30
- this.maxQueueSize = 100;
31
- this.maxStorageEvents = 50;
32
- this.debugMode = false;
33
- // Deduplication
34
- this.processedEvents = new Set();
35
- // Correlation tracking for attribution
36
- this.lastEventId = null;
37
- // Journey sequence counter - tracks position within journey
38
- this.journeyEventCount = 0;
39
- // Metrics tracking for monitoring
40
- this.metrics = {
41
- eventsDropped: 0,
42
- batchesFailed: 0,
43
- sendBeaconFailed: 0,
44
- overflowStored: 0,
45
- };
46
- // Track whether initialization is complete
47
- this.initialized = false;
48
- this.config = {
49
- apiUrl: (0, utils_1.resolveApiUrl)(config.apiUrl),
50
- siteKey: config.siteKey || '',
51
- batchSize: config.batchSize ?? 50,
52
- flushInterval: config.flushInterval ?? 30000, // 30 seconds
53
- enablePersistence: config.enablePersistence ?? true,
54
- enableSendBeacon: config.enableSendBeacon ?? true,
55
- };
56
- // Extended config options
57
- this.maxRetries = config.maxRetries ?? 3;
58
- this.maxQueueSize = config.maxQueueSize ?? 100;
59
- this.maxStorageEvents = config.maxStorageEvents ?? 50;
60
- this.debugMode = config.debugMode ?? false;
61
- // Initialize overflow storage
62
- this.overflowStorage = (0, indexeddb_queue_1.getIndexedDBQueue)();
63
- // Generate tab-specific correlation ID (prevents multi-tab collisions)
64
- this.tabCorrelationId = this.generateTabCorrelationId();
65
- this.sessionData = {
66
- sessionId: config.sessionId || this.generateSessionId(),
67
- visitorId: config.visitorId || this.generateVisitorId(),
68
- siteUserId: config.siteUserId,
69
- };
70
- // Load persisted events from localStorage
71
- if (this.config.enablePersistence) {
72
- this.loadFromStorage();
73
- }
74
- // NOTE: loadFromOverflowStorage() is NOT called in constructor
75
- // Call initialize() after construction to recover overflow events
76
- // Setup page hide handler for send beacon
77
- if (this.config.enableSendBeacon) {
78
- this.setupPageHideHandler();
79
- }
80
- // Start periodic cleanup of processed events
81
- this.startCleanupInterval();
82
- if (this.debugMode) {
83
- (0, logger_1.testModeLog)('EventBatcher', 'Initialized with config:', {
84
- ...this.config,
85
- maxRetries: this.maxRetries,
86
- maxQueueSize: this.maxQueueSize,
87
- maxStorageEvents: this.maxStorageEvents,
88
- });
89
- }
90
- }
91
- /**
92
- * Asynchronous initialization - must be called after constructor
93
- * This loads events from IndexedDB overflow storage and immediately flushes them
94
- *
95
- * IMPORTANT: Call this after creating EventBatcher instance
96
- */
97
- async initialize() {
98
- if (this.initialized) {
99
- return;
100
- }
101
- try {
102
- // Load overflow events and immediately flush them
103
- await this.loadFromOverflowStorage();
104
- if (this.queue.length > 0) {
105
- if (this.debugMode) {
106
- (0, logger_1.testModeLog)('EventBatcher', 'Flushing', this.queue.length, 'recovered events');
107
- }
108
- // Trigger immediate flush for recovered events
109
- await this.flush();
110
- }
111
- }
112
- catch (error) {
113
- if (this.debugMode) {
114
- (0, logger_1.testModeError)('EventBatcher', 'Initialization error:', error);
115
- }
116
- }
117
- finally {
118
- this.initialized = true;
119
- }
120
- }
121
- /**
122
- * Check if the batcher has been initialized
123
- */
124
- isReady() {
125
- return this.initialized;
126
- }
127
- setSessionData(sessionId, visitorId, siteUserId) {
128
- this.sessionData = { sessionId, visitorId, siteUserId };
129
- }
130
- setSiteKey(siteKey) {
131
- this.config.siteKey = siteKey;
132
- }
133
- /**
134
- * Update configuration dynamically (e.g., after fetching from server)
135
- */
136
- updateConfig(config) {
137
- if (config.batchSize !== undefined) {
138
- this.config.batchSize = config.batchSize;
139
- if (this.debugMode)
140
- (0, logger_1.testModeLog)('EventBatcher', 'batchSize updated:', config.batchSize);
141
- }
142
- if (config.flushInterval !== undefined) {
143
- this.config.flushInterval = config.flushInterval;
144
- if (this.debugMode)
145
- (0, logger_1.testModeLog)('EventBatcher', 'flushInterval updated:', config.flushInterval);
146
- }
147
- if (config.enablePersistence !== undefined) {
148
- this.config.enablePersistence = config.enablePersistence;
149
- if (this.debugMode)
150
- (0, logger_1.testModeLog)('EventBatcher', 'enablePersistence updated:', config.enablePersistence);
151
- }
152
- if (config.enableSendBeacon !== undefined) {
153
- this.config.enableSendBeacon = config.enableSendBeacon;
154
- if (this.debugMode)
155
- (0, logger_1.testModeLog)('EventBatcher', 'enableSendBeacon updated:', config.enableSendBeacon);
156
- }
157
- if (config.maxRetries !== undefined) {
158
- this.maxRetries = config.maxRetries;
159
- if (this.debugMode)
160
- (0, logger_1.testModeLog)('EventBatcher', 'maxRetries updated:', config.maxRetries);
161
- }
162
- if (config.maxQueueSize !== undefined) {
163
- this.maxQueueSize = config.maxQueueSize;
164
- if (this.debugMode)
165
- (0, logger_1.testModeLog)('EventBatcher', 'maxQueueSize updated:', config.maxQueueSize);
166
- }
167
- if (config.maxStorageEvents !== undefined) {
168
- this.maxStorageEvents = config.maxStorageEvents;
169
- if (this.debugMode)
170
- (0, logger_1.testModeLog)('EventBatcher', 'maxStorageEvents updated:', config.maxStorageEvents);
171
- }
172
- if (config.debugMode !== undefined) {
173
- this.debugMode = config.debugMode;
174
- (0, logger_1.testModeLog)('EventBatcher', 'debugMode updated:', config.debugMode);
175
- }
176
- }
177
- /**
178
- * Add an event to the batch queue
179
- * Checks consent before adding - queues events if consent pending
180
- * Populates correlation fields for attribution tracking
181
- */
182
- add(event) {
183
- const queuedEvent = {
184
- ...event,
185
- metadata: (0, utils_1.sanitizeTrackingMetadata)(event.metadata),
186
- };
187
- // Ensure eventId exists for deduplication and parent-child linking
188
- if (!queuedEvent.eventId) {
189
- queuedEvent.eventId = (0, utils_1.generateEventId)();
190
- }
191
- // Deduplication check
192
- if (this.processedEvents.has(queuedEvent.eventId)) {
193
- return; // Skip duplicate
194
- }
195
- // Add timestamp and retry count
196
- queuedEvent.timestamp = queuedEvent.timestamp || Date.now();
197
- queuedEvent.eventTs = queuedEvent.eventTs || queuedEvent.timestamp;
198
- queuedEvent.eventSchemaVersion = queuedEvent.eventSchemaVersion || 1;
199
- queuedEvent.retryCount = queuedEvent.retryCount || 0;
200
- // Populate attribution fields with tab-specific correlation
201
- // Combine global correlation with tab-specific ID to prevent multi-tab collisions
202
- const globalCorrelation = (0, storage_1.getOrCreateCorrelationId)();
203
- queuedEvent.correlationId = `${globalCorrelation}_${this.tabCorrelationId}`;
204
- queuedEvent.parentEventId = this.lastEventId ?? undefined; // Link to previous event for chain tracking
205
- queuedEvent.journeyId = (0, storage_1.getOrCreateJourneyId)();
206
- // Store current event as parent for next event
207
- this.lastEventId = queuedEvent.eventId;
208
- // Check consent if siteKey is available
209
- if (this.config.siteKey) {
210
- const canSend = this.checkConsentForEvent(queuedEvent);
211
- if (!canSend) {
212
- // Event requires consent and not yet granted - queue for later
213
- this.consentQueue.push(queuedEvent);
214
- if (this.debugMode) {
215
- (0, logger_1.testModeLog)('EventBatcher', 'Event queued pending consent:', queuedEvent.name);
216
- }
217
- return;
218
- }
219
- }
220
- // Check if queue is at capacity - use overflow storage instead of dropping
221
- if (this.queue.length >= this.maxQueueSize) {
222
- this.storeInOverflow([queuedEvent]);
223
- return;
224
- }
225
- // Consent granted or event is necessary - add to main queue
226
- this.queue.push(queuedEvent);
227
- this.processedEvents.add(queuedEvent.eventId);
228
- // Persist to localStorage
229
- if (this.config.enablePersistence) {
230
- this.saveToStorage();
231
- }
232
- // Check if we should flush
233
- if (this.queue.length >= this.config.batchSize) {
234
- this.flush();
235
- }
236
- else {
237
- this.scheduleFlush();
238
- }
239
- }
240
- /**
241
- * Check if an event can be sent based on current consent state
242
- */
243
- checkConsentForEvent(event) {
244
- const eventName = event.name;
245
- // Find which category this event belongs to
246
- // Check each category individually
247
- const categories = Object.keys(constants_1.CONSENT_EVENT_CATEGORIES);
248
- for (const category of categories) {
249
- const events = constants_1.CONSENT_EVENT_CATEGORIES[category];
250
- if (events.indexOf(eventName) >= 0) {
251
- // Found the category - check consent
252
- try {
253
- const key = `${constants_1.STORAGE_KEYS.CONSENT}_${this.config.siteKey}`;
254
- const data = localStorage.getItem(key);
255
- if (data) {
256
- const state = JSON.parse(data);
257
- // Check if consent was granted for this category
258
- return state.categories?.[category] ?? false;
259
- }
260
- }
261
- catch { }
262
- // No consent given yet - queue the event
263
- return false;
264
- }
265
- }
266
- // Event not in any category - considered necessary (always allowed)
267
- return true;
268
- }
269
- /**
270
- * Schedule a flush after the configured interval
271
- */
272
- scheduleFlush() {
273
- if (this.flushTimeout) {
274
- clearTimeout(this.flushTimeout);
275
- }
276
- this.flushTimeout = window.setTimeout(() => {
277
- this.flush();
278
- }, this.config.flushInterval);
279
- }
280
- /**
281
- * Flush all queued events to the server
282
- */
283
- async flush() {
284
- if (this.isFlushing || this.queue.length === 0) {
285
- return;
286
- }
287
- if (!this.config.siteKey) {
288
- // No siteKey configured; drop events
289
- this.queue = [];
290
- this.saveToStorage();
291
- return;
292
- }
293
- this.isFlushing = true;
294
- const events = this.queue.splice(0);
295
- try {
296
- const success = await this.sendBatch(events);
297
- if (success) {
298
- // Clear processed events cache for sent events
299
- events.forEach(e => this.processedEvents.delete(e.eventId));
300
- }
301
- else {
302
- // Re-queue with retry logic
303
- this.requeueEvents(events);
304
- }
305
- }
306
- catch (error) {
307
- // Re-queue on error
308
- this.requeueEvents(events);
309
- }
310
- finally {
311
- this.isFlushing = false;
312
- this.saveToStorage();
313
- }
314
- }
315
- /**
316
- * Send batch to server
317
- * Returns true if successful, false otherwise
318
- * Only increments journey counter on confirmed success
319
- */
320
- async sendBatch(events) {
321
- // Check if journey has expired - reset counter if so
322
- if ((0, storage_1.isJourneyExpired)()) {
323
- this.journeyEventCount = 0;
324
- }
325
- // Calculate sequence numbers BEFORE sending (assign temporarily)
326
- // These will only be committed if the send succeeds
327
- const sequences = events.map((_, index) => this.journeyEventCount + index + 1);
328
- // Add journey sequence to each event
329
- const eventsWithSequence = events.map((event, index) => ({
330
- ...event,
331
- eventSchemaVersion: event.eventSchemaVersion || 1,
332
- eventTs: event.eventTs || event.timestamp || Date.now(),
333
- metadata: (0, utils_1.sanitizeTrackingMetadata)(event.metadata),
334
- journeySequence: sequences[index],
335
- }));
336
- const payload = {
337
- sessionId: this.sessionData.sessionId,
338
- visitorId: this.sessionData.visitorId,
339
- journeyId: (0, storage_1.getOrCreateJourneyId)(),
340
- siteUserId: this.sessionData.siteUserId,
341
- pageUrl: window.location.href,
342
- referrer: document.referrer || undefined,
343
- events: eventsWithSequence,
344
- };
345
- try {
346
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/events/batch`, {
347
- method: 'POST',
348
- headers: { 'Content-Type': 'application/json' },
349
- body: JSON.stringify(payload),
350
- keepalive: true,
351
- });
352
- const success = response.ok;
353
- // Only update counter AFTER confirmed success
354
- if (success) {
355
- this.journeyEventCount += events.length;
356
- }
357
- else {
358
- this.metrics.batchesFailed++;
359
- this.reportMetric('batch_failure', 1);
360
- }
361
- return success;
362
- }
363
- catch (error) {
364
- this.metrics.batchesFailed++;
365
- this.reportMetric('batch_failure', 1);
366
- return false;
367
- }
368
- }
369
- /**
370
- * Re-queue events with exponential backoff
371
- * Uses overflow storage instead of dropping events when queue is full
372
- */
373
- requeueEvents(events) {
374
- for (const event of events) {
375
- event.retryCount = (event.retryCount || 0) + 1;
376
- // Use configured max retry count
377
- if (event.retryCount <= this.maxRetries) {
378
- // Check if queue has space
379
- if (this.queue.length < this.maxQueueSize) {
380
- this.queue.push(event);
381
- }
382
- else {
383
- // Store in overflow instead of dropping
384
- this.storeInOverflow([event]);
385
- }
386
- }
387
- else {
388
- // Events exceeding max retries
389
- if (this.debugMode) {
390
- (0, logger_1.testModeLog)('EventBatcher', 'Dropped event after', this.maxRetries, 'retries:', event.eventId);
391
- }
392
- this.metrics.eventsDropped++;
393
- }
394
- }
395
- // Sort by timestamp and retry count (oldest, least retried first)
396
- this.queue.sort((a, b) => {
397
- const aRetryCount = a.retryCount || 0;
398
- const bRetryCount = b.retryCount || 0;
399
- if (aRetryCount !== bRetryCount) {
400
- return aRetryCount - bRetryCount;
401
- }
402
- return a.timestamp - b.timestamp;
403
- });
404
- }
405
- /**
406
- * Setup page hide handler for send beacon
407
- *
408
- * KNOWN LIMITATION: sendBeacon doesn't provide success/failure feedback.
409
- * - The browser returns true if it accepted the payload, NOT if server received it
410
- * - Network failures after browser acceptance are undetectable
411
- * - Journey sequence counter is NOT incremented (see persistPendingJourneyIncrement)
412
- * - Sequence numbers from sendBeacon may not match actual server-side sequences
413
- *
414
- * This is a fundamental limitation of the sendBeacon API with no workaround.
415
- */
416
- setupPageHideHandler() {
417
- this.pageHideHandler = () => {
418
- if (this.queue.length === 0 || !this.config.siteKey) {
419
- return;
420
- }
421
- const events = this.queue.splice(0);
422
- // Calculate sequence numbers
423
- const sequences = events.map((_, index) => this.journeyEventCount + index + 1);
424
- // Add journey sequence to each event
425
- const eventsWithSequence = events.map((event, index) => ({
426
- ...event,
427
- eventSchemaVersion: event.eventSchemaVersion || 1,
428
- eventTs: event.eventTs || event.timestamp || Date.now(),
429
- metadata: (0, utils_1.sanitizeTrackingMetadata)(event.metadata),
430
- journeySequence: sequences[index],
431
- }));
432
- const payload = {
433
- sessionId: this.sessionData.sessionId,
434
- visitorId: this.sessionData.visitorId,
435
- journeyId: (0, storage_1.getOrCreateJourneyId)(),
436
- siteUserId: this.sessionData.siteUserId,
437
- pageUrl: window.location.href,
438
- referrer: document.referrer || undefined,
439
- events: eventsWithSequence,
440
- };
441
- // Use sendBeacon for reliable delivery on page unload
442
- const data = new Blob([JSON.stringify(payload)], { type: 'application/json' });
443
- if (navigator.sendBeacon) {
444
- const sent = navigator.sendBeacon(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/events/batch`, data);
445
- if (sent) {
446
- // sendBeacon accepted the payload (browser will queue it)
447
- // Persist the counter state to localStorage for recovery
448
- // The actual increment will happen when we can verify
449
- this.persistPendingJourneyIncrement(events.length);
450
- }
451
- else {
452
- // sendBeacon rejected (queue full, etc.)
453
- this.metrics.sendBeaconFailed++;
454
- this.reportMetric('sendBeacon_failure', 1);
455
- // Re-queue events
456
- this.queue.push(...events);
457
- }
458
- }
459
- else {
460
- // sendBeacon not available, re-queue
461
- this.queue.push(...events);
462
- }
463
- };
464
- // Listen for page hide events
465
- document.addEventListener('visibilitychange', () => {
466
- if (document.visibilityState === 'hidden') {
467
- this.pageHideHandler?.();
468
- }
469
- });
470
- // Also listen for beforeunload
471
- window.addEventListener('beforeunload', () => {
472
- this.pageHideHandler?.();
473
- });
474
- }
475
- /**
476
- * Persist pending journey counter increment to localStorage
477
- *
478
- * KNOWN LIMITATION: sendBeacon doesn't provide success/failure feedback.
479
- * The browser queues the request but we can't know if it reached the server.
480
- *
481
- * We do NOT increment the journey counter here because:
482
- * 1. sendBeacon may fail silently (network, server error, queue full)
483
- * 2. Counter increment would cause permanent gaps in sequence numbers
484
- * 3. There's no server validation endpoint to confirm receipt
485
- *
486
- * Consequence: On page hide, journey sequence numbers may not match
487
- * server-side sequences. This is accepted as a known limitation of
488
- * the sendBeacon API.
489
- */
490
- persistPendingJourneyIncrement(count) {
491
- try {
492
- const state = {
493
- count,
494
- timestamp: Date.now(),
495
- journeyId: (0, storage_1.getOrCreateJourneyId)(),
496
- };
497
- localStorage.setItem('selwise_pending_journey_increment', JSON.stringify(state));
498
- // NOTE: We do NOT increment journeyEventCount here
499
- // The counter is only incremented after confirmed success in sendBatch()
500
- // This means sendBeacon events will have sequence numbers that don't
501
- // match the actual counter, but this is unavoidable without server validation
502
- }
503
- catch {
504
- // Silently fail
505
- }
506
- }
507
- /**
508
- * Check and recover pending journey increment on initialization
509
- * If server confirmed receipt, the increment is valid
510
- * Otherwise we need to roll back
511
- */
512
- async recoverPendingJourneyIncrement() {
513
- try {
514
- const stored = localStorage.getItem('selwise_pending_journey_increment');
515
- if (!stored) {
516
- return;
517
- }
518
- const state = JSON.parse(stored);
519
- const age = Date.now() - state.timestamp;
520
- // If older than 5 minutes, assume it was processed or is stale
521
- if (age > 5 * 60 * 1000) {
522
- localStorage.removeItem('selwise_pending_journey_increment');
523
- return;
524
- }
525
- // Check with server if these events were received
526
- // For now, we'll just clear it after 5 minutes
527
- // In a production system, you'd have an endpoint to validate
528
- localStorage.removeItem('selwise_pending_journey_increment');
529
- }
530
- catch {
531
- localStorage.removeItem('selwise_pending_journey_increment');
532
- }
533
- }
534
- /**
535
- * Save queue to localStorage for offline persistence
536
- * Includes quota checking to prevent quota exhaustion DoS
537
- */
538
- saveToStorage() {
539
- if (!this.config.enablePersistence)
540
- return;
541
- try {
542
- // Check storage quota before saving to prevent quota exhaustion
543
- if (!this.checkStorageQuota()) {
544
- if (this.debugMode) {
545
- (0, logger_1.testModeLog)('EventBatcher', 'Storage quota exceeded, skipping save');
546
- }
547
- return;
548
- }
549
- const stored = {
550
- version: STORAGE_VERSION,
551
- queue: this.queue.slice(0, this.maxStorageEvents),
552
- timestamp: Date.now(),
553
- };
554
- localStorage.setItem(STORAGE_KEY, JSON.stringify(stored));
555
- if (this.debugMode) {
556
- (0, logger_1.testModeLog)('EventBatcher', 'Saved', stored.queue.length, 'events to storage');
557
- }
558
- }
559
- catch (e) {
560
- if (this.debugMode) {
561
- (0, logger_1.testModeLog)('EventBatcher', 'Failed to save to storage:', e);
562
- }
563
- }
564
- }
565
- /**
566
- * Check if we have enough storage quota for Selwise data
567
- * Returns false if quota would be exceeded (prevents DoS via quota exhaustion)
568
- */
569
- checkStorageQuota() {
570
- try {
571
- // Maximum storage quota for Selwise (2MB)
572
- const SELWISE_QUOTA = 2 * 1024 * 1024;
573
- // Calculate current Selwise storage usage
574
- let totalUsage = 0;
575
- for (let i = 0; i < localStorage.length; i++) {
576
- const key = localStorage.key(i);
577
- if (key && key.startsWith('selwise_')) {
578
- const value = localStorage.getItem(key);
579
- if (value) {
580
- totalUsage += key.length + value.length;
581
- }
582
- }
583
- }
584
- // Estimate the size of data we're about to save
585
- const estimatedSize = JSON.stringify({
586
- version: STORAGE_VERSION,
587
- queue: this.queue.slice(0, this.maxStorageEvents),
588
- timestamp: Date.now(),
589
- }).length;
590
- // Check if we'd exceed quota
591
- if (totalUsage + estimatedSize > SELWISE_QUOTA) {
592
- // Try cleanup first
593
- this.cleanupOldStorage();
594
- // Recalculate after cleanup
595
- let newUsage = 0;
596
- for (let i = 0; i < localStorage.length; i++) {
597
- const key = localStorage.key(i);
598
- if (key && key.startsWith('selwise_')) {
599
- const value = localStorage.getItem(key);
600
- if (value) {
601
- newUsage += key.length + value.length;
602
- }
603
- }
604
- }
605
- return (newUsage + estimatedSize) <= SELWISE_QUOTA;
606
- }
607
- return true;
608
- }
609
- catch {
610
- // If we can't check, assume OK
611
- return true;
612
- }
613
- }
614
- /**
615
- * Cleanup old Selwise storage items to free up quota
616
- */
617
- cleanupOldStorage() {
618
- try {
619
- // Clean up expired journey state
620
- const journeyKey = 'selwise_journey_state';
621
- const journeyData = localStorage.getItem(journeyKey);
622
- if (journeyData) {
623
- try {
624
- const journey = JSON.parse(journeyData);
625
- const JOURNEY_TIMEOUT = 30 * 60 * 1000; // 30 minutes
626
- if (journey.lastEventTime && (Date.now() - journey.lastEventTime) > JOURNEY_TIMEOUT) {
627
- localStorage.removeItem(journeyKey);
628
- if (this.debugMode) {
629
- (0, logger_1.testModeLog)('EventBatcher', 'Cleaned up expired journey state');
630
- }
631
- }
632
- }
633
- catch {
634
- localStorage.removeItem(journeyKey);
635
- }
636
- }
637
- }
638
- catch {
639
- // Ignore cleanup errors
640
- }
641
- }
642
- /**
643
- * Load queue from localStorage
644
- */
645
- loadFromStorage() {
646
- try {
647
- const stored = localStorage.getItem(STORAGE_KEY);
648
- if (!stored)
649
- return;
650
- const parsed = JSON.parse(stored);
651
- // Check version compatibility
652
- if (parsed.version === STORAGE_VERSION && Array.isArray(parsed.queue)) {
653
- // Filter out events older than 24 hours
654
- const cutoffTime = Date.now() - (24 * 60 * 60 * 1000);
655
- this.queue = parsed.queue
656
- .filter(e => e.timestamp > cutoffTime)
657
- .map((event) => ({
658
- ...event,
659
- metadata: (0, utils_1.sanitizeTrackingMetadata)(event.metadata),
660
- }));
661
- }
662
- // Clear storage after loading
663
- localStorage.removeItem(STORAGE_KEY);
664
- }
665
- catch {
666
- // Invalid storage, clear it
667
- localStorage.removeItem(STORAGE_KEY);
668
- }
669
- }
670
- /**
671
- * Get queue size
672
- */
673
- getQueueSize() {
674
- return this.queue.length;
675
- }
676
- /**
677
- * Get processed events count
678
- */
679
- getProcessedCount() {
680
- return this.processedEvents.size;
681
- }
682
- /**
683
- * Clear all queued events
684
- */
685
- clear() {
686
- this.queue = [];
687
- this.consentQueue = []; // Also clear consent queue
688
- this.processedEvents.clear();
689
- if (this.flushTimeout) {
690
- clearTimeout(this.flushTimeout);
691
- this.flushTimeout = null;
692
- }
693
- if (this.config.enablePersistence) {
694
- localStorage.removeItem(STORAGE_KEY);
695
- }
696
- }
697
- /**
698
- * Reset correlation tracking for new attribution journey
699
- * Call this after a conversion event to start fresh attribution
700
- */
701
- resetCorrelation() {
702
- this.lastEventId = null;
703
- if (this.debugMode) {
704
- (0, logger_1.testModeLog)('EventBatcher', 'Correlation tracking reset');
705
- }
706
- }
707
- /**
708
- * Get consent queue size
709
- */
710
- getConsentQueueSize() {
711
- return this.consentQueue.length;
712
- }
713
- /**
714
- * Flush consent queue - called when user grants consent
715
- * Re-evaluates each queued event and adds to main queue if consented
716
- */
717
- flushConsentQueue() {
718
- if (this.consentQueue.length === 0) {
719
- return;
720
- }
721
- if (this.debugMode) {
722
- (0, logger_1.testModeLog)('EventBatcher', 'Flushing consent queue:', this.consentQueue.length, 'events');
723
- }
724
- // Process each queued event
725
- const eventsToFlush = this.consentQueue.splice(0);
726
- for (const event of eventsToFlush) {
727
- // Re-check consent for each event
728
- const canSend = this.checkConsentForEvent(event);
729
- if (canSend) {
730
- // Add to main queue for sending
731
- this.queue.push(event);
732
- this.processedEvents.add(event.eventId);
733
- }
734
- else {
735
- // Still no consent for this category - keep in consent queue
736
- this.consentQueue.push(event);
737
- }
738
- }
739
- // Save state and schedule flush if events were added
740
- if (this.queue.length > 0) {
741
- if (this.config.enablePersistence) {
742
- this.saveToStorage();
743
- }
744
- // Check if we should flush immediately
745
- if (this.queue.length >= this.config.batchSize) {
746
- this.flush();
747
- }
748
- else {
749
- this.scheduleFlush();
750
- }
751
- }
752
- if (this.debugMode) {
753
- (0, logger_1.testModeLog)('EventBatcher', 'Consent queue flushed. Main queue:', this.queue.length, 'Remaining consent queue:', this.consentQueue.length);
754
- }
755
- }
756
- /**
757
- * Cleanup
758
- */
759
- destroy() {
760
- this.clear();
761
- // Clear cleanup interval
762
- if (this.cleanupInterval) {
763
- clearInterval(this.cleanupInterval);
764
- this.cleanupInterval = undefined;
765
- }
766
- if (this.pageHideHandler) {
767
- document.removeEventListener('visibilitychange', this.pageHideHandler);
768
- window.removeEventListener('beforeunload', this.pageHideHandler);
769
- this.pageHideHandler = null;
770
- }
771
- }
772
- /**
773
- * Start periodic cleanup of processed events set
774
- */
775
- startCleanupInterval() {
776
- // Cleanup every 5 minutes to prevent memory growth
777
- this.cleanupInterval = setInterval(() => {
778
- this.cleanupProcessedEvents();
779
- }, 5 * 60 * 1000);
780
- if (this.debugMode) {
781
- (0, logger_1.testModeLog)('EventBatcher', 'Cleanup interval started');
782
- }
783
- }
784
- /**
785
- * Cleanup old processed event IDs to prevent memory growth
786
- *
787
- * NOTE: After 10000 events, old event IDs can be re-sent and may create duplicates.
788
- * This is a known limitation - the deduplication Set is kept to a reasonable size
789
- * to prevent memory issues while still providing good duplicate detection for
790
- * typical user sessions.
791
- *
792
- * Server-side deduplication cache provides additional protection.
793
- */
794
- cleanupProcessedEvents() {
795
- // More aggressive cleanup - keep only last 5000 event IDs (reduced from 10000)
796
- // This provides better memory management for long-running sessions
797
- if (this.processedEvents.size > 5000) {
798
- const entries = Array.from(this.processedEvents);
799
- this.processedEvents = new Set(entries.slice(-5000));
800
- if (this.debugMode) {
801
- (0, logger_1.testModeLog)('EventBatcher', 'Cleaned up processed events, kept last 5000');
802
- }
803
- }
804
- // Also cleanup consent queue if it gets too large
805
- if (this.consentQueue.length > 100) {
806
- // Remove oldest consent-pending events (they likely expired)
807
- this.consentQueue = this.consentQueue.slice(-50);
808
- if (this.debugMode) {
809
- (0, logger_1.testModeLog)('EventBatcher', 'Cleaned up consent queue, kept last 50');
810
- }
811
- }
812
- }
813
- generateSessionId() {
814
- return `sess_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
815
- }
816
- generateVisitorId() {
817
- let visitorId = null;
818
- try {
819
- visitorId = localStorage.getItem('selwise_visitor_id');
820
- if (!visitorId) {
821
- visitorId = `vis_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
822
- localStorage.setItem('selwise_visitor_id', visitorId);
823
- }
824
- }
825
- catch {
826
- visitorId = `vis_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
827
- }
828
- return visitorId;
829
- }
830
- /**
831
- * Generate tab-specific correlation ID
832
- * This prevents correlation ID collisions between multiple tabs
833
- */
834
- generateTabCorrelationId() {
835
- // Use a random string for tab identification
836
- return `tab_${Math.random().toString(36).substring(2, 11)}`;
837
- }
838
- /**
839
- * Store events in IndexedDB overflow storage
840
- * Non-blocking - errors are logged but don't throw
841
- */
842
- storeInOverflow(events) {
843
- this.overflowStorage.store(events).then(() => {
844
- this.metrics.overflowStored += events.length;
845
- if (this.debugMode) {
846
- (0, logger_1.testModeLog)('EventBatcher', 'Stored', events.length, 'events in overflow storage');
847
- }
848
- }).catch(() => {
849
- // Silently fail - overflow storage is best-effort
850
- this.metrics.eventsDropped += events.length;
851
- if (this.debugMode) {
852
- (0, logger_1.testModeWarn)('EventBatcher', 'Overflow storage unavailable, dropped', events.length, 'events');
853
- }
854
- });
855
- }
856
- /**
857
- * Load events from IndexedDB overflow storage
858
- * Called during initialization to recover persisted events
859
- */
860
- async loadFromOverflowStorage() {
861
- if (!this.overflowStorage.isAvailable()) {
862
- return;
863
- }
864
- try {
865
- const events = await this.overflowStorage.retrieve(this.maxQueueSize);
866
- if (events.length > 0) {
867
- if (this.debugMode) {
868
- (0, logger_1.testModeLog)('EventBatcher', 'Loaded', events.length, 'events from overflow storage');
869
- }
870
- // Add events to queue (up to max queue size)
871
- for (const event of events) {
872
- if (this.queue.length < this.maxQueueSize) {
873
- // Re-assign journey sequence on recovery
874
- this.queue.push({
875
- ...event,
876
- metadata: (0, utils_1.sanitizeTrackingMetadata)(event.metadata),
877
- });
878
- }
879
- else {
880
- // Queue full, remaining events stay in overflow
881
- break;
882
- }
883
- }
884
- }
885
- }
886
- catch (error) {
887
- if (this.debugMode) {
888
- (0, logger_1.testModeError)('EventBatcher', 'Failed to load overflow storage:', error);
889
- }
890
- }
891
- }
892
- /**
893
- * Get metrics for monitoring
894
- */
895
- getMetrics() {
896
- return {
897
- ...this.metrics,
898
- queueSize: this.queue.length,
899
- processedCount: this.processedEvents.size,
900
- consentQueueSize: this.consentQueue.length,
901
- overflowStats: {
902
- count: 0, // Will be populated asynchronously
903
- oldestTimestamp: null,
904
- },
905
- };
906
- }
907
- /**
908
- * Get overflow storage stats (async)
909
- */
910
- async getOverflowStats() {
911
- return this.overflowStorage.getStats();
912
- }
913
- /**
914
- * Report metric to monitoring endpoint
915
- * Non-blocking - failures are ignored
916
- */
917
- reportMetric(name, value) {
918
- if (!this.config.siteKey) {
919
- return;
920
- }
921
- const url = `${this.config.apiUrl}/public/sites/${this.config.siteKey}/metrics`;
922
- // Use sendBeacon if available for non-blocking delivery
923
- if (navigator.sendBeacon) {
924
- const data = new Blob([JSON.stringify({ name, value, timestamp: Date.now() })], { type: 'application/json' });
925
- navigator.sendBeacon(url, data);
926
- }
927
- else {
928
- // Fallback to fetch with keepalive
929
- fetch(url, {
930
- method: 'POST',
931
- body: JSON.stringify({ name, value, timestamp: Date.now() }),
932
- keepalive: true,
933
- }).catch(() => {
934
- // Ignore failures
935
- });
936
- }
937
- }
938
- /**
939
- * Send all accumulated metrics to monitoring endpoint
940
- */
941
- async flushMetrics() {
942
- if (!this.config.siteKey) {
943
- return;
944
- }
945
- const metrics = await this.getOverflowStats();
946
- const payload = {
947
- metrics: {
948
- eventsDropped: this.metrics.eventsDropped,
949
- batchesFailed: this.metrics.batchesFailed,
950
- sendBeaconFailed: this.metrics.sendBeaconFailed,
951
- overflowStored: this.metrics.overflowStored,
952
- overflowCount: metrics.count,
953
- },
954
- timestamp: Date.now(),
955
- };
956
- try {
957
- await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/metrics`, {
958
- method: 'POST',
959
- headers: { 'Content-Type': 'application/json' },
960
- body: JSON.stringify(payload),
961
- keepalive: true,
962
- });
963
- // Reset metrics after successful send
964
- this.metrics = {
965
- eventsDropped: 0,
966
- batchesFailed: 0,
967
- sendBeaconFailed: 0,
968
- overflowStored: 0,
969
- };
970
- }
971
- catch {
972
- // Silently fail - metrics are best-effort
973
- }
974
- }
975
- }
976
- exports.EventBatcher = EventBatcher;
977
- //# sourceMappingURL=event-batcher.js.map