@selwise/widget 0.0.3 → 1.0.1

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 (638) hide show
  1. package/README.md +2 -1
  2. package/package.json +18 -16
  3. package/dist/npm/cjs/constants.js +0 -167
  4. package/dist/npm/cjs/constants.js.map +0 -1
  5. package/dist/npm/cjs/core/conflict-resolver.js +0 -203
  6. package/dist/npm/cjs/core/conflict-resolver.js.map +0 -1
  7. package/dist/npm/cjs/core/event-batcher.js +0 -977
  8. package/dist/npm/cjs/core/event-batcher.js.map +0 -1
  9. package/dist/npm/cjs/core/experiment-overrides.js +0 -178
  10. package/dist/npm/cjs/core/experiment-overrides.js.map +0 -1
  11. package/dist/npm/cjs/core/experiments.js +0 -317
  12. package/dist/npm/cjs/core/experiments.js.map +0 -1
  13. package/dist/npm/cjs/core/frequency-caps.js +0 -297
  14. package/dist/npm/cjs/core/frequency-caps.js.map +0 -1
  15. package/dist/npm/cjs/core/index.js +0 -27
  16. package/dist/npm/cjs/core/index.js.map +0 -1
  17. package/dist/npm/cjs/core/indexeddb-queue.js +0 -333
  18. package/dist/npm/cjs/core/indexeddb-queue.js.map +0 -1
  19. package/dist/npm/cjs/core/journey-tracker.js +0 -243
  20. package/dist/npm/cjs/core/journey-tracker.js.map +0 -1
  21. package/dist/npm/cjs/core/page-targeting/index.js +0 -72
  22. package/dist/npm/cjs/core/page-targeting/index.js.map +0 -1
  23. package/dist/npm/cjs/core/script-executor.js +0 -80
  24. package/dist/npm/cjs/core/script-executor.js.map +0 -1
  25. package/dist/npm/cjs/core/segments.js +0 -172
  26. package/dist/npm/cjs/core/segments.js.map +0 -1
  27. package/dist/npm/cjs/core/tracker.js +0 -798
  28. package/dist/npm/cjs/core/tracker.js.map +0 -1
  29. package/dist/npm/cjs/datalayer/basket.js +0 -385
  30. package/dist/npm/cjs/datalayer/basket.js.map +0 -1
  31. package/dist/npm/cjs/datalayer/cart-association.js +0 -226
  32. package/dist/npm/cjs/datalayer/cart-association.js.map +0 -1
  33. package/dist/npm/cjs/datalayer/checkout.js +0 -382
  34. package/dist/npm/cjs/datalayer/checkout.js.map +0 -1
  35. package/dist/npm/cjs/datalayer/constants.js +0 -163
  36. package/dist/npm/cjs/datalayer/constants.js.map +0 -1
  37. package/dist/npm/cjs/datalayer/index.js +0 -1010
  38. package/dist/npm/cjs/datalayer/index.js.map +0 -1
  39. package/dist/npm/cjs/datalayer/listener.js +0 -416
  40. package/dist/npm/cjs/datalayer/listener.js.map +0 -1
  41. package/dist/npm/cjs/datalayer/page.js +0 -343
  42. package/dist/npm/cjs/datalayer/page.js.map +0 -1
  43. package/dist/npm/cjs/datalayer/product.js +0 -517
  44. package/dist/npm/cjs/datalayer/product.js.map +0 -1
  45. package/dist/npm/cjs/datalayer/reverse-mappings.js +0 -139
  46. package/dist/npm/cjs/datalayer/reverse-mappings.js.map +0 -1
  47. package/dist/npm/cjs/datalayer/search.js +0 -363
  48. package/dist/npm/cjs/datalayer/search.js.map +0 -1
  49. package/dist/npm/cjs/datalayer/types.js +0 -134
  50. package/dist/npm/cjs/datalayer/types.js.map +0 -1
  51. package/dist/npm/cjs/datalayer/user.js +0 -372
  52. package/dist/npm/cjs/datalayer/user.js.map +0 -1
  53. package/dist/npm/cjs/debug/index.js +0 -679
  54. package/dist/npm/cjs/debug/index.js.map +0 -1
  55. package/dist/npm/cjs/entries/cdn.js +0 -72
  56. package/dist/npm/cjs/entries/cdn.js.map +0 -1
  57. package/dist/npm/cjs/index.js +0 -55
  58. package/dist/npm/cjs/index.js.map +0 -1
  59. package/dist/npm/cjs/modules/contract/recommendation-contract.js +0 -119
  60. package/dist/npm/cjs/modules/contract/recommendation-contract.js.map +0 -1
  61. package/dist/npm/cjs/modules/contract/search-contract.js +0 -18
  62. package/dist/npm/cjs/modules/contract/search-contract.js.map +0 -1
  63. package/dist/npm/cjs/modules/contract/tracking-contract.js +0 -16
  64. package/dist/npm/cjs/modules/contract/tracking-contract.js.map +0 -1
  65. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js +0 -164
  66. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  67. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js +0 -21
  68. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  69. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js +0 -3
  70. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  71. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js +0 -107
  72. package/dist/npm/cjs/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  73. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js +0 -404
  74. package/dist/npm/cjs/modules/contract/vendor/search-contract/configs.js.map +0 -1
  75. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js +0 -21
  76. package/dist/npm/cjs/modules/contract/vendor/search-contract/index.js.map +0 -1
  77. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js +0 -8
  78. package/dist/npm/cjs/modules/contract/vendor/search-contract/types.js.map +0 -1
  79. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js +0 -126
  80. package/dist/npm/cjs/modules/contract/vendor/search-contract/validators.js.map +0 -1
  81. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js +0 -133
  82. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  83. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js +0 -21
  84. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  85. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js +0 -3
  86. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  87. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js +0 -154
  88. package/dist/npm/cjs/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  89. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js +0 -1481
  90. package/dist/npm/cjs/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  91. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js +0 -22
  92. package/dist/npm/cjs/modules/contract/vendor/widget-contract/index.js.map +0 -1
  93. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js +0 -21
  94. package/dist/npm/cjs/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  95. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js +0 -8
  96. package/dist/npm/cjs/modules/contract/vendor/widget-contract/types.js.map +0 -1
  97. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js +0 -139
  98. package/dist/npm/cjs/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  99. package/dist/npm/cjs/modules/contract/widget-contract.js +0 -10
  100. package/dist/npm/cjs/modules/contract/widget-contract.js.map +0 -1
  101. package/dist/npm/cjs/modules/products/tracking.js +0 -214
  102. package/dist/npm/cjs/modules/products/tracking.js.map +0 -1
  103. package/dist/npm/cjs/modules/recommendation/cart-handlers.js +0 -52
  104. package/dist/npm/cjs/modules/recommendation/cart-handlers.js.map +0 -1
  105. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js +0 -287
  106. package/dist/npm/cjs/modules/recommendation/components/product-card-renderer.js.map +0 -1
  107. package/dist/npm/cjs/modules/recommendation/index.js +0 -678
  108. package/dist/npm/cjs/modules/recommendation/index.js.map +0 -1
  109. package/dist/npm/cjs/modules/recommendation/renderers/grid.js +0 -21
  110. package/dist/npm/cjs/modules/recommendation/renderers/grid.js.map +0 -1
  111. package/dist/npm/cjs/modules/recommendation/renderers/list.js +0 -22
  112. package/dist/npm/cjs/modules/recommendation/renderers/list.js.map +0 -1
  113. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js +0 -22
  114. package/dist/npm/cjs/modules/recommendation/renderers/masonry.js.map +0 -1
  115. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js +0 -145
  116. package/dist/npm/cjs/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  117. package/dist/npm/cjs/modules/recommendation/slider-controls.js +0 -201
  118. package/dist/npm/cjs/modules/recommendation/slider-controls.js.map +0 -1
  119. package/dist/npm/cjs/modules/recommendation/tracking.js +0 -247
  120. package/dist/npm/cjs/modules/recommendation/tracking.js.map +0 -1
  121. package/dist/npm/cjs/modules/recommendation/utils/dom.js +0 -70
  122. package/dist/npm/cjs/modules/recommendation/utils/dom.js.map +0 -1
  123. package/dist/npm/cjs/modules/recommendation/utils/format.js +0 -13
  124. package/dist/npm/cjs/modules/recommendation/utils/format.js.map +0 -1
  125. package/dist/npm/cjs/modules/recommendation/utils/index.js +0 -22
  126. package/dist/npm/cjs/modules/recommendation/utils/index.js.map +0 -1
  127. package/dist/npm/cjs/modules/renderer/helpers.js +0 -16
  128. package/dist/npm/cjs/modules/renderer/helpers.js.map +0 -1
  129. package/dist/npm/cjs/modules/renderer/index.js +0 -52
  130. package/dist/npm/cjs/modules/renderer/index.js.map +0 -1
  131. package/dist/npm/cjs/modules/renderer/style-resolver.js +0 -11
  132. package/dist/npm/cjs/modules/renderer/style-resolver.js.map +0 -1
  133. package/dist/npm/cjs/modules/renderer/styles/index.js +0 -254
  134. package/dist/npm/cjs/modules/renderer/styles/index.js.map +0 -1
  135. package/dist/npm/cjs/modules/renderer/styles.js +0 -7
  136. package/dist/npm/cjs/modules/renderer/styles.js.map +0 -1
  137. package/dist/npm/cjs/modules/renderer/utils/helpers.js +0 -243
  138. package/dist/npm/cjs/modules/renderer/utils/helpers.js.map +0 -1
  139. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js +0 -65
  140. package/dist/npm/cjs/modules/renderer/utils/image-renderer.js.map +0 -1
  141. package/dist/npm/cjs/modules/renderer/utils/placement.js +0 -34
  142. package/dist/npm/cjs/modules/renderer/utils/placement.js.map +0 -1
  143. package/dist/npm/cjs/modules/renderer/utils.js +0 -61
  144. package/dist/npm/cjs/modules/renderer/utils.js.map +0 -1
  145. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js +0 -84
  146. package/dist/npm/cjs/modules/renderer/widgets/announcement-bar.js.map +0 -1
  147. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js +0 -211
  148. package/dist/npm/cjs/modules/renderer/widgets/cart-count.js.map +0 -1
  149. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js +0 -459
  150. package/dist/npm/cjs/modules/renderer/widgets/cookie-consent.js.map +0 -1
  151. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js +0 -132
  152. package/dist/npm/cjs/modules/renderer/widgets/countdown-timer.js.map +0 -1
  153. package/dist/npm/cjs/modules/renderer/widgets/custom.js +0 -58
  154. package/dist/npm/cjs/modules/renderer/widgets/custom.js.map +0 -1
  155. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js +0 -97
  156. package/dist/npm/cjs/modules/renderer/widgets/embedded-card.js.map +0 -1
  157. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js +0 -151
  158. package/dist/npm/cjs/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  159. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js +0 -70
  160. package/dist/npm/cjs/modules/renderer/widgets/floating-button.js.map +0 -1
  161. package/dist/npm/cjs/modules/renderer/widgets/helpers.js +0 -87
  162. package/dist/npm/cjs/modules/renderer/widgets/helpers.js.map +0 -1
  163. package/dist/npm/cjs/modules/renderer/widgets/index.js +0 -39
  164. package/dist/npm/cjs/modules/renderer/widgets/index.js.map +0 -1
  165. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js +0 -124
  166. package/dist/npm/cjs/modules/renderer/widgets/inline-banner.js.map +0 -1
  167. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js +0 -280
  168. package/dist/npm/cjs/modules/renderer/widgets/newsletter.js.map +0 -1
  169. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js +0 -197
  170. package/dist/npm/cjs/modules/renderer/widgets/product-view-count.js.map +0 -1
  171. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js +0 -105
  172. package/dist/npm/cjs/modules/renderer/widgets/slide-in.js.map +0 -1
  173. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js +0 -47
  174. package/dist/npm/cjs/modules/renderer/widgets/sticky-footer.js.map +0 -1
  175. package/dist/npm/cjs/modules/search/cart/index.js +0 -42
  176. package/dist/npm/cjs/modules/search/cart/index.js.map +0 -1
  177. package/dist/npm/cjs/modules/search/components/index.js +0 -13
  178. package/dist/npm/cjs/modules/search/components/index.js.map +0 -1
  179. package/dist/npm/cjs/modules/search/components/search-box.js +0 -28
  180. package/dist/npm/cjs/modules/search/components/search-box.js.map +0 -1
  181. package/dist/npm/cjs/modules/search/components/search-item.js +0 -197
  182. package/dist/npm/cjs/modules/search/components/search-item.js.map +0 -1
  183. package/dist/npm/cjs/modules/search/components/suggestions.js +0 -132
  184. package/dist/npm/cjs/modules/search/components/suggestions.js.map +0 -1
  185. package/dist/npm/cjs/modules/search/index.js +0 -646
  186. package/dist/npm/cjs/modules/search/index.js.map +0 -1
  187. package/dist/npm/cjs/modules/search/renderers/position-renderers.js +0 -229
  188. package/dist/npm/cjs/modules/search/renderers/position-renderers.js.map +0 -1
  189. package/dist/npm/cjs/modules/search/renderers/results-renderer.js +0 -180
  190. package/dist/npm/cjs/modules/search/renderers/results-renderer.js.map +0 -1
  191. package/dist/npm/cjs/modules/search/services/api-service.js +0 -121
  192. package/dist/npm/cjs/modules/search/services/api-service.js.map +0 -1
  193. package/dist/npm/cjs/modules/search/services/tracking-service.js +0 -263
  194. package/dist/npm/cjs/modules/search/services/tracking-service.js.map +0 -1
  195. package/dist/npm/cjs/modules/search/styles.js +0 -864
  196. package/dist/npm/cjs/modules/search/styles.js.map +0 -1
  197. package/dist/npm/cjs/modules/search/utils/helpers.js +0 -100
  198. package/dist/npm/cjs/modules/search/utils/helpers.js.map +0 -1
  199. package/dist/npm/cjs/modules/search/utils/icons.js +0 -41
  200. package/dist/npm/cjs/modules/search/utils/icons.js.map +0 -1
  201. package/dist/npm/cjs/modules/search/utils/index.js +0 -22
  202. package/dist/npm/cjs/modules/search/utils/index.js.map +0 -1
  203. package/dist/npm/cjs/modules/search/utils/storage.js +0 -58
  204. package/dist/npm/cjs/modules/search/utils/storage.js.map +0 -1
  205. package/dist/npm/cjs/selwise.js +0 -1166
  206. package/dist/npm/cjs/selwise.js.map +0 -1
  207. package/dist/npm/cjs/sentry-test.js +0 -118
  208. package/dist/npm/cjs/sentry-test.js.map +0 -1
  209. package/dist/npm/cjs/sentry.js +0 -451
  210. package/dist/npm/cjs/sentry.js.map +0 -1
  211. package/dist/npm/cjs/shared/cart/handlers.js +0 -259
  212. package/dist/npm/cjs/shared/cart/handlers.js.map +0 -1
  213. package/dist/npm/cjs/shared/cart/index.js +0 -23
  214. package/dist/npm/cjs/shared/cart/index.js.map +0 -1
  215. package/dist/npm/cjs/shared/cart/types.js +0 -7
  216. package/dist/npm/cjs/shared/cart/types.js.map +0 -1
  217. package/dist/npm/cjs/shared/product-card/index.js +0 -24
  218. package/dist/npm/cjs/shared/product-card/index.js.map +0 -1
  219. package/dist/npm/cjs/shared/product-card/renderer.js +0 -341
  220. package/dist/npm/cjs/shared/product-card/renderer.js.map +0 -1
  221. package/dist/npm/cjs/shared/product-card/styles.js +0 -195
  222. package/dist/npm/cjs/shared/product-card/styles.js.map +0 -1
  223. package/dist/npm/cjs/shared/product-card/types.js +0 -67
  224. package/dist/npm/cjs/shared/product-card/types.js.map +0 -1
  225. package/dist/npm/cjs/types/config.js +0 -6
  226. package/dist/npm/cjs/types/config.js.map +0 -1
  227. package/dist/npm/cjs/types/experiments.js +0 -17
  228. package/dist/npm/cjs/types/experiments.js.map +0 -1
  229. package/dist/npm/cjs/types/global-api.js +0 -3
  230. package/dist/npm/cjs/types/global-api.js.map +0 -1
  231. package/dist/npm/cjs/types/index.js +0 -27
  232. package/dist/npm/cjs/types/index.js.map +0 -1
  233. package/dist/npm/cjs/types/recommendation.js +0 -6
  234. package/dist/npm/cjs/types/recommendation.js.map +0 -1
  235. package/dist/npm/cjs/types/renderer.js +0 -6
  236. package/dist/npm/cjs/types/renderer.js.map +0 -1
  237. package/dist/npm/cjs/types/search.js +0 -6
  238. package/dist/npm/cjs/types/search.js.map +0 -1
  239. package/dist/npm/cjs/utils/api-url.js +0 -35
  240. package/dist/npm/cjs/utils/api-url.js.map +0 -1
  241. package/dist/npm/cjs/utils/debounce.js +0 -74
  242. package/dist/npm/cjs/utils/debounce.js.map +0 -1
  243. package/dist/npm/cjs/utils/event-id.js +0 -23
  244. package/dist/npm/cjs/utils/event-id.js.map +0 -1
  245. package/dist/npm/cjs/utils/index.js +0 -28
  246. package/dist/npm/cjs/utils/index.js.map +0 -1
  247. package/dist/npm/cjs/utils/logger.js +0 -74
  248. package/dist/npm/cjs/utils/logger.js.map +0 -1
  249. package/dist/npm/cjs/utils/sanitize.js +0 -159
  250. package/dist/npm/cjs/utils/sanitize.js.map +0 -1
  251. package/dist/npm/cjs/utils/storage.js +0 -285
  252. package/dist/npm/cjs/utils/storage.js.map +0 -1
  253. package/dist/npm/cjs/utils/tracking-metadata.js +0 -18
  254. package/dist/npm/cjs/utils/tracking-metadata.js.map +0 -1
  255. package/dist/npm/cjs/utils/url-matcher.js +0 -11
  256. package/dist/npm/cjs/utils/url-matcher.js.map +0 -1
  257. package/dist/npm/esm/constants.d.ts +0 -130
  258. package/dist/npm/esm/constants.js +0 -164
  259. package/dist/npm/esm/constants.js.map +0 -1
  260. package/dist/npm/esm/core/conflict-resolver.d.ts +0 -96
  261. package/dist/npm/esm/core/conflict-resolver.js +0 -198
  262. package/dist/npm/esm/core/conflict-resolver.js.map +0 -1
  263. package/dist/npm/esm/core/event-batcher.d.ts +0 -253
  264. package/dist/npm/esm/core/event-batcher.js +0 -973
  265. package/dist/npm/esm/core/event-batcher.js.map +0 -1
  266. package/dist/npm/esm/core/experiment-overrides.d.ts +0 -7
  267. package/dist/npm/esm/core/experiment-overrides.js +0 -172
  268. package/dist/npm/esm/core/experiment-overrides.js.map +0 -1
  269. package/dist/npm/esm/core/experiments.d.ts +0 -90
  270. package/dist/npm/esm/core/experiments.js +0 -313
  271. package/dist/npm/esm/core/experiments.js.map +0 -1
  272. package/dist/npm/esm/core/frequency-caps.d.ts +0 -124
  273. package/dist/npm/esm/core/frequency-caps.js +0 -292
  274. package/dist/npm/esm/core/frequency-caps.js.map +0 -1
  275. package/dist/npm/esm/core/index.d.ts +0 -10
  276. package/dist/npm/esm/core/index.js +0 -11
  277. package/dist/npm/esm/core/index.js.map +0 -1
  278. package/dist/npm/esm/core/indexeddb-queue.d.ts +0 -83
  279. package/dist/npm/esm/core/indexeddb-queue.js +0 -328
  280. package/dist/npm/esm/core/indexeddb-queue.js.map +0 -1
  281. package/dist/npm/esm/core/journey-tracker.d.ts +0 -102
  282. package/dist/npm/esm/core/journey-tracker.js +0 -237
  283. package/dist/npm/esm/core/journey-tracker.js.map +0 -1
  284. package/dist/npm/esm/core/page-targeting/index.d.ts +0 -8
  285. package/dist/npm/esm/core/page-targeting/index.js +0 -67
  286. package/dist/npm/esm/core/page-targeting/index.js.map +0 -1
  287. package/dist/npm/esm/core/script-executor.d.ts +0 -31
  288. package/dist/npm/esm/core/script-executor.js +0 -76
  289. package/dist/npm/esm/core/script-executor.js.map +0 -1
  290. package/dist/npm/esm/core/segments.d.ts +0 -39
  291. package/dist/npm/esm/core/segments.js +0 -168
  292. package/dist/npm/esm/core/segments.js.map +0 -1
  293. package/dist/npm/esm/core/tracker.d.ts +0 -182
  294. package/dist/npm/esm/core/tracker.js +0 -794
  295. package/dist/npm/esm/core/tracker.js.map +0 -1
  296. package/dist/npm/esm/datalayer/basket.d.ts +0 -104
  297. package/dist/npm/esm/datalayer/basket.js +0 -381
  298. package/dist/npm/esm/datalayer/basket.js.map +0 -1
  299. package/dist/npm/esm/datalayer/cart-association.d.ts +0 -65
  300. package/dist/npm/esm/datalayer/cart-association.js +0 -222
  301. package/dist/npm/esm/datalayer/cart-association.js.map +0 -1
  302. package/dist/npm/esm/datalayer/checkout.d.ts +0 -96
  303. package/dist/npm/esm/datalayer/checkout.js +0 -378
  304. package/dist/npm/esm/datalayer/checkout.js.map +0 -1
  305. package/dist/npm/esm/datalayer/constants.d.ts +0 -77
  306. package/dist/npm/esm/datalayer/constants.js +0 -160
  307. package/dist/npm/esm/datalayer/constants.js.map +0 -1
  308. package/dist/npm/esm/datalayer/index.d.ts +0 -212
  309. package/dist/npm/esm/datalayer/index.js +0 -991
  310. package/dist/npm/esm/datalayer/index.js.map +0 -1
  311. package/dist/npm/esm/datalayer/listener.d.ts +0 -108
  312. package/dist/npm/esm/datalayer/listener.js +0 -411
  313. package/dist/npm/esm/datalayer/listener.js.map +0 -1
  314. package/dist/npm/esm/datalayer/page.d.ts +0 -94
  315. package/dist/npm/esm/datalayer/page.js +0 -339
  316. package/dist/npm/esm/datalayer/page.js.map +0 -1
  317. package/dist/npm/esm/datalayer/product.d.ts +0 -133
  318. package/dist/npm/esm/datalayer/product.js +0 -513
  319. package/dist/npm/esm/datalayer/product.js.map +0 -1
  320. package/dist/npm/esm/datalayer/reverse-mappings.d.ts +0 -62
  321. package/dist/npm/esm/datalayer/reverse-mappings.js +0 -135
  322. package/dist/npm/esm/datalayer/reverse-mappings.js.map +0 -1
  323. package/dist/npm/esm/datalayer/search.d.ts +0 -108
  324. package/dist/npm/esm/datalayer/search.js +0 -359
  325. package/dist/npm/esm/datalayer/search.js.map +0 -1
  326. package/dist/npm/esm/datalayer/types.d.ts +0 -292
  327. package/dist/npm/esm/datalayer/types.js +0 -131
  328. package/dist/npm/esm/datalayer/types.js.map +0 -1
  329. package/dist/npm/esm/datalayer/user.d.ts +0 -104
  330. package/dist/npm/esm/datalayer/user.js +0 -368
  331. package/dist/npm/esm/datalayer/user.js.map +0 -1
  332. package/dist/npm/esm/debug/index.d.ts +0 -173
  333. package/dist/npm/esm/debug/index.js +0 -673
  334. package/dist/npm/esm/debug/index.js.map +0 -1
  335. package/dist/npm/esm/entries/cdn.d.ts +0 -1
  336. package/dist/npm/esm/entries/cdn.js +0 -35
  337. package/dist/npm/esm/entries/cdn.js.map +0 -1
  338. package/dist/npm/esm/index.d.ts +0 -7
  339. package/dist/npm/esm/index.js +0 -17
  340. package/dist/npm/esm/index.js.map +0 -1
  341. package/dist/npm/esm/modules/contract/recommendation-contract.d.ts +0 -5
  342. package/dist/npm/esm/modules/contract/recommendation-contract.js +0 -107
  343. package/dist/npm/esm/modules/contract/recommendation-contract.js.map +0 -1
  344. package/dist/npm/esm/modules/contract/search-contract.d.ts +0 -1
  345. package/dist/npm/esm/modules/contract/search-contract.js +0 -2
  346. package/dist/npm/esm/modules/contract/search-contract.js.map +0 -1
  347. package/dist/npm/esm/modules/contract/tracking-contract.d.ts +0 -1
  348. package/dist/npm/esm/modules/contract/tracking-contract.js +0 -2
  349. package/dist/npm/esm/modules/contract/tracking-contract.js.map +0 -1
  350. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.d.ts +0 -8
  351. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js +0 -160
  352. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/configs.js.map +0 -1
  353. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.d.ts +0 -3
  354. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js +0 -5
  355. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/index.js.map +0 -1
  356. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.d.ts +0 -56
  357. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js +0 -2
  358. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/types.js.map +0 -1
  359. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.d.ts +0 -3
  360. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js +0 -103
  361. package/dist/npm/esm/modules/contract/vendor/recommendation-contract/validators.js.map +0 -1
  362. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.d.ts +0 -35
  363. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js +0 -396
  364. package/dist/npm/esm/modules/contract/vendor/search-contract/configs.js.map +0 -1
  365. package/dist/npm/esm/modules/contract/vendor/search-contract/index.d.ts +0 -3
  366. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js +0 -5
  367. package/dist/npm/esm/modules/contract/vendor/search-contract/index.js.map +0 -1
  368. package/dist/npm/esm/modules/contract/vendor/search-contract/types.d.ts +0 -119
  369. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js +0 -7
  370. package/dist/npm/esm/modules/contract/vendor/search-contract/types.js.map +0 -1
  371. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.d.ts +0 -22
  372. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js +0 -118
  373. package/dist/npm/esm/modules/contract/vendor/search-contract/validators.js.map +0 -1
  374. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.d.ts +0 -7
  375. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js +0 -130
  376. package/dist/npm/esm/modules/contract/vendor/tracking-contract/configs.js.map +0 -1
  377. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.d.ts +0 -3
  378. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js +0 -5
  379. package/dist/npm/esm/modules/contract/vendor/tracking-contract/index.js.map +0 -1
  380. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.d.ts +0 -37
  381. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js +0 -2
  382. package/dist/npm/esm/modules/contract/vendor/tracking-contract/types.js.map +0 -1
  383. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.d.ts +0 -6
  384. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js +0 -147
  385. package/dist/npm/esm/modules/contract/vendor/tracking-contract/validators.js.map +0 -1
  386. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.d.ts +0 -22
  387. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js +0 -1472
  388. package/dist/npm/esm/modules/contract/vendor/widget-contract/configs.js.map +0 -1
  389. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.d.ts +0 -4
  390. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js +0 -6
  391. package/dist/npm/esm/modules/contract/vendor/widget-contract/index.js.map +0 -1
  392. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.d.ts +0 -14
  393. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js +0 -18
  394. package/dist/npm/esm/modules/contract/vendor/widget-contract/layout.js.map +0 -1
  395. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.d.ts +0 -128
  396. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js +0 -7
  397. package/dist/npm/esm/modules/contract/vendor/widget-contract/types.js.map +0 -1
  398. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.d.ts +0 -11
  399. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js +0 -132
  400. package/dist/npm/esm/modules/contract/vendor/widget-contract/validators.js.map +0 -1
  401. package/dist/npm/esm/modules/contract/widget-contract.d.ts +0 -1
  402. package/dist/npm/esm/modules/contract/widget-contract.js +0 -2
  403. package/dist/npm/esm/modules/contract/widget-contract.js.map +0 -1
  404. package/dist/npm/esm/modules/products/tracking.d.ts +0 -122
  405. package/dist/npm/esm/modules/products/tracking.js +0 -203
  406. package/dist/npm/esm/modules/products/tracking.js.map +0 -1
  407. package/dist/npm/esm/modules/recommendation/cart-handlers.d.ts +0 -10
  408. package/dist/npm/esm/modules/recommendation/cart-handlers.js +0 -49
  409. package/dist/npm/esm/modules/recommendation/cart-handlers.js.map +0 -1
  410. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.d.ts +0 -37
  411. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js +0 -281
  412. package/dist/npm/esm/modules/recommendation/components/product-card-renderer.js.map +0 -1
  413. package/dist/npm/esm/modules/recommendation/index.d.ts +0 -11
  414. package/dist/npm/esm/modules/recommendation/index.js +0 -674
  415. package/dist/npm/esm/modules/recommendation/index.js.map +0 -1
  416. package/dist/npm/esm/modules/recommendation/renderers/grid.d.ts +0 -5
  417. package/dist/npm/esm/modules/recommendation/renderers/grid.js +0 -18
  418. package/dist/npm/esm/modules/recommendation/renderers/grid.js.map +0 -1
  419. package/dist/npm/esm/modules/recommendation/renderers/list.d.ts +0 -5
  420. package/dist/npm/esm/modules/recommendation/renderers/list.js +0 -19
  421. package/dist/npm/esm/modules/recommendation/renderers/list.js.map +0 -1
  422. package/dist/npm/esm/modules/recommendation/renderers/masonry.d.ts +0 -5
  423. package/dist/npm/esm/modules/recommendation/renderers/masonry.js +0 -19
  424. package/dist/npm/esm/modules/recommendation/renderers/masonry.js.map +0 -1
  425. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.d.ts +0 -10
  426. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js +0 -140
  427. package/dist/npm/esm/modules/recommendation/renderers/slider-renderer.js.map +0 -1
  428. package/dist/npm/esm/modules/recommendation/slider-controls.d.ts +0 -17
  429. package/dist/npm/esm/modules/recommendation/slider-controls.js +0 -187
  430. package/dist/npm/esm/modules/recommendation/slider-controls.js.map +0 -1
  431. package/dist/npm/esm/modules/recommendation/tracking.d.ts +0 -28
  432. package/dist/npm/esm/modules/recommendation/tracking.js +0 -237
  433. package/dist/npm/esm/modules/recommendation/tracking.js.map +0 -1
  434. package/dist/npm/esm/modules/recommendation/utils/dom.d.ts +0 -10
  435. package/dist/npm/esm/modules/recommendation/utils/dom.js +0 -63
  436. package/dist/npm/esm/modules/recommendation/utils/dom.js.map +0 -1
  437. package/dist/npm/esm/modules/recommendation/utils/format.d.ts +0 -4
  438. package/dist/npm/esm/modules/recommendation/utils/format.js +0 -10
  439. package/dist/npm/esm/modules/recommendation/utils/format.js.map +0 -1
  440. package/dist/npm/esm/modules/recommendation/utils/index.d.ts +0 -5
  441. package/dist/npm/esm/modules/recommendation/utils/index.js +0 -6
  442. package/dist/npm/esm/modules/recommendation/utils/index.js.map +0 -1
  443. package/dist/npm/esm/modules/renderer/helpers.d.ts +0 -5
  444. package/dist/npm/esm/modules/renderer/helpers.js +0 -6
  445. package/dist/npm/esm/modules/renderer/helpers.js.map +0 -1
  446. package/dist/npm/esm/modules/renderer/index.d.ts +0 -8
  447. package/dist/npm/esm/modules/renderer/index.js +0 -48
  448. package/dist/npm/esm/modules/renderer/index.js.map +0 -1
  449. package/dist/npm/esm/modules/renderer/style-resolver.d.ts +0 -1
  450. package/dist/npm/esm/modules/renderer/style-resolver.js +0 -8
  451. package/dist/npm/esm/modules/renderer/style-resolver.js.map +0 -1
  452. package/dist/npm/esm/modules/renderer/styles/index.d.ts +0 -12
  453. package/dist/npm/esm/modules/renderer/styles/index.js +0 -250
  454. package/dist/npm/esm/modules/renderer/styles/index.js.map +0 -1
  455. package/dist/npm/esm/modules/renderer/styles.d.ts +0 -1
  456. package/dist/npm/esm/modules/renderer/styles.js +0 -2
  457. package/dist/npm/esm/modules/renderer/styles.js.map +0 -1
  458. package/dist/npm/esm/modules/renderer/utils/helpers.d.ts +0 -58
  459. package/dist/npm/esm/modules/renderer/utils/helpers.js +0 -225
  460. package/dist/npm/esm/modules/renderer/utils/helpers.js.map +0 -1
  461. package/dist/npm/esm/modules/renderer/utils/image-renderer.d.ts +0 -17
  462. package/dist/npm/esm/modules/renderer/utils/image-renderer.js +0 -60
  463. package/dist/npm/esm/modules/renderer/utils/image-renderer.js.map +0 -1
  464. package/dist/npm/esm/modules/renderer/utils/placement.d.ts +0 -6
  465. package/dist/npm/esm/modules/renderer/utils/placement.js +0 -31
  466. package/dist/npm/esm/modules/renderer/utils/placement.js.map +0 -1
  467. package/dist/npm/esm/modules/renderer/utils.d.ts +0 -11
  468. package/dist/npm/esm/modules/renderer/utils.js +0 -44
  469. package/dist/npm/esm/modules/renderer/utils.js.map +0 -1
  470. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.d.ts +0 -5
  471. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js +0 -81
  472. package/dist/npm/esm/modules/renderer/widgets/announcement-bar.js.map +0 -1
  473. package/dist/npm/esm/modules/renderer/widgets/cart-count.d.ts +0 -6
  474. package/dist/npm/esm/modules/renderer/widgets/cart-count.js +0 -208
  475. package/dist/npm/esm/modules/renderer/widgets/cart-count.js.map +0 -1
  476. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.d.ts +0 -18
  477. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js +0 -454
  478. package/dist/npm/esm/modules/renderer/widgets/cookie-consent.js.map +0 -1
  479. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.d.ts +0 -5
  480. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js +0 -129
  481. package/dist/npm/esm/modules/renderer/widgets/countdown-timer.js.map +0 -1
  482. package/dist/npm/esm/modules/renderer/widgets/custom.d.ts +0 -5
  483. package/dist/npm/esm/modules/renderer/widgets/custom.js +0 -55
  484. package/dist/npm/esm/modules/renderer/widgets/custom.js.map +0 -1
  485. package/dist/npm/esm/modules/renderer/widgets/embedded-card.d.ts +0 -5
  486. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js +0 -94
  487. package/dist/npm/esm/modules/renderer/widgets/embedded-card.js.map +0 -1
  488. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.d.ts +0 -6
  489. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js +0 -147
  490. package/dist/npm/esm/modules/renderer/widgets/exit-intent-popup.js.map +0 -1
  491. package/dist/npm/esm/modules/renderer/widgets/floating-button.d.ts +0 -5
  492. package/dist/npm/esm/modules/renderer/widgets/floating-button.js +0 -67
  493. package/dist/npm/esm/modules/renderer/widgets/floating-button.js.map +0 -1
  494. package/dist/npm/esm/modules/renderer/widgets/helpers.d.ts +0 -29
  495. package/dist/npm/esm/modules/renderer/widgets/helpers.js +0 -82
  496. package/dist/npm/esm/modules/renderer/widgets/helpers.js.map +0 -1
  497. package/dist/npm/esm/modules/renderer/widgets/index.d.ts +0 -17
  498. package/dist/npm/esm/modules/renderer/widgets/index.js +0 -19
  499. package/dist/npm/esm/modules/renderer/widgets/index.js.map +0 -1
  500. package/dist/npm/esm/modules/renderer/widgets/inline-banner.d.ts +0 -5
  501. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js +0 -121
  502. package/dist/npm/esm/modules/renderer/widgets/inline-banner.js.map +0 -1
  503. package/dist/npm/esm/modules/renderer/widgets/newsletter.d.ts +0 -6
  504. package/dist/npm/esm/modules/renderer/widgets/newsletter.js +0 -277
  505. package/dist/npm/esm/modules/renderer/widgets/newsletter.js.map +0 -1
  506. package/dist/npm/esm/modules/renderer/widgets/product-view-count.d.ts +0 -6
  507. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js +0 -194
  508. package/dist/npm/esm/modules/renderer/widgets/product-view-count.js.map +0 -1
  509. package/dist/npm/esm/modules/renderer/widgets/slide-in.d.ts +0 -5
  510. package/dist/npm/esm/modules/renderer/widgets/slide-in.js +0 -102
  511. package/dist/npm/esm/modules/renderer/widgets/slide-in.js.map +0 -1
  512. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.d.ts +0 -5
  513. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js +0 -44
  514. package/dist/npm/esm/modules/renderer/widgets/sticky-footer.js.map +0 -1
  515. package/dist/npm/esm/modules/search/cart/index.d.ts +0 -26
  516. package/dist/npm/esm/modules/search/cart/index.js +0 -39
  517. package/dist/npm/esm/modules/search/cart/index.js.map +0 -1
  518. package/dist/npm/esm/modules/search/components/index.d.ts +0 -6
  519. package/dist/npm/esm/modules/search/components/index.js +0 -7
  520. package/dist/npm/esm/modules/search/components/index.js.map +0 -1
  521. package/dist/npm/esm/modules/search/components/search-box.d.ts +0 -11
  522. package/dist/npm/esm/modules/search/components/search-box.js +0 -25
  523. package/dist/npm/esm/modules/search/components/search-box.js.map +0 -1
  524. package/dist/npm/esm/modules/search/components/search-item.d.ts +0 -20
  525. package/dist/npm/esm/modules/search/components/search-item.js +0 -193
  526. package/dist/npm/esm/modules/search/components/search-item.js.map +0 -1
  527. package/dist/npm/esm/modules/search/components/suggestions.d.ts +0 -10
  528. package/dist/npm/esm/modules/search/components/suggestions.js +0 -129
  529. package/dist/npm/esm/modules/search/components/suggestions.js.map +0 -1
  530. package/dist/npm/esm/modules/search/index.d.ts +0 -67
  531. package/dist/npm/esm/modules/search/index.js +0 -642
  532. package/dist/npm/esm/modules/search/index.js.map +0 -1
  533. package/dist/npm/esm/modules/search/renderers/position-renderers.d.ts +0 -23
  534. package/dist/npm/esm/modules/search/renderers/position-renderers.js +0 -221
  535. package/dist/npm/esm/modules/search/renderers/position-renderers.js.map +0 -1
  536. package/dist/npm/esm/modules/search/renderers/results-renderer.d.ts +0 -20
  537. package/dist/npm/esm/modules/search/renderers/results-renderer.js +0 -176
  538. package/dist/npm/esm/modules/search/renderers/results-renderer.js.map +0 -1
  539. package/dist/npm/esm/modules/search/services/api-service.d.ts +0 -18
  540. package/dist/npm/esm/modules/search/services/api-service.js +0 -115
  541. package/dist/npm/esm/modules/search/services/api-service.js.map +0 -1
  542. package/dist/npm/esm/modules/search/services/tracking-service.d.ts +0 -16
  543. package/dist/npm/esm/modules/search/services/tracking-service.js +0 -250
  544. package/dist/npm/esm/modules/search/services/tracking-service.js.map +0 -1
  545. package/dist/npm/esm/modules/search/styles.d.ts +0 -13
  546. package/dist/npm/esm/modules/search/styles.js +0 -860
  547. package/dist/npm/esm/modules/search/styles.js.map +0 -1
  548. package/dist/npm/esm/modules/search/utils/helpers.d.ts +0 -24
  549. package/dist/npm/esm/modules/search/utils/helpers.js +0 -93
  550. package/dist/npm/esm/modules/search/utils/helpers.js.map +0 -1
  551. package/dist/npm/esm/modules/search/utils/icons.d.ts +0 -16
  552. package/dist/npm/esm/modules/search/utils/icons.js +0 -36
  553. package/dist/npm/esm/modules/search/utils/icons.js.map +0 -1
  554. package/dist/npm/esm/modules/search/utils/index.d.ts +0 -6
  555. package/dist/npm/esm/modules/search/utils/index.js +0 -7
  556. package/dist/npm/esm/modules/search/utils/index.js.map +0 -1
  557. package/dist/npm/esm/modules/search/utils/storage.d.ts +0 -7
  558. package/dist/npm/esm/modules/search/utils/storage.js +0 -52
  559. package/dist/npm/esm/modules/search/utils/storage.js.map +0 -1
  560. package/dist/npm/esm/package.json +0 -1
  561. package/dist/npm/esm/selwise.d.ts +0 -235
  562. package/dist/npm/esm/selwise.js +0 -1129
  563. package/dist/npm/esm/selwise.js.map +0 -1
  564. package/dist/npm/esm/sentry-test.d.ts +0 -45
  565. package/dist/npm/esm/sentry-test.js +0 -109
  566. package/dist/npm/esm/sentry-test.js.map +0 -1
  567. package/dist/npm/esm/sentry.d.ts +0 -86
  568. package/dist/npm/esm/sentry.js +0 -441
  569. package/dist/npm/esm/sentry.js.map +0 -1
  570. package/dist/npm/esm/shared/cart/handlers.d.ts +0 -46
  571. package/dist/npm/esm/shared/cart/handlers.js +0 -249
  572. package/dist/npm/esm/shared/cart/handlers.js.map +0 -1
  573. package/dist/npm/esm/shared/cart/index.d.ts +0 -6
  574. package/dist/npm/esm/shared/cart/index.js +0 -7
  575. package/dist/npm/esm/shared/cart/index.js.map +0 -1
  576. package/dist/npm/esm/shared/cart/types.d.ts +0 -30
  577. package/dist/npm/esm/shared/cart/types.js +0 -6
  578. package/dist/npm/esm/shared/cart/types.js.map +0 -1
  579. package/dist/npm/esm/shared/product-card/index.d.ts +0 -7
  580. package/dist/npm/esm/shared/product-card/index.js +0 -8
  581. package/dist/npm/esm/shared/product-card/index.js.map +0 -1
  582. package/dist/npm/esm/shared/product-card/renderer.d.ts +0 -35
  583. package/dist/npm/esm/shared/product-card/renderer.js +0 -334
  584. package/dist/npm/esm/shared/product-card/renderer.js.map +0 -1
  585. package/dist/npm/esm/shared/product-card/styles.d.ts +0 -17
  586. package/dist/npm/esm/shared/product-card/styles.js +0 -190
  587. package/dist/npm/esm/shared/product-card/styles.js.map +0 -1
  588. package/dist/npm/esm/shared/product-card/types.d.ts +0 -84
  589. package/dist/npm/esm/shared/product-card/types.js +0 -63
  590. package/dist/npm/esm/shared/product-card/types.js.map +0 -1
  591. package/dist/npm/esm/types/config.d.ts +0 -26
  592. package/dist/npm/esm/types/config.js +0 -5
  593. package/dist/npm/esm/types/config.js.map +0 -1
  594. package/dist/npm/esm/types/experiments.d.ts +0 -47
  595. package/dist/npm/esm/types/experiments.js +0 -14
  596. package/dist/npm/esm/types/experiments.js.map +0 -1
  597. package/dist/npm/esm/types/global-api.d.ts +0 -40
  598. package/dist/npm/esm/types/global-api.js +0 -2
  599. package/dist/npm/esm/types/global-api.js.map +0 -1
  600. package/dist/npm/esm/types/index.d.ts +0 -9
  601. package/dist/npm/esm/types/index.js +0 -11
  602. package/dist/npm/esm/types/index.js.map +0 -1
  603. package/dist/npm/esm/types/recommendation.d.ts +0 -186
  604. package/dist/npm/esm/types/recommendation.js +0 -5
  605. package/dist/npm/esm/types/recommendation.js.map +0 -1
  606. package/dist/npm/esm/types/renderer.d.ts +0 -99
  607. package/dist/npm/esm/types/renderer.js +0 -5
  608. package/dist/npm/esm/types/renderer.js.map +0 -1
  609. package/dist/npm/esm/types/search.d.ts +0 -186
  610. package/dist/npm/esm/types/search.js +0 -5
  611. package/dist/npm/esm/types/search.js.map +0 -1
  612. package/dist/npm/esm/utils/api-url.d.ts +0 -1
  613. package/dist/npm/esm/utils/api-url.js +0 -32
  614. package/dist/npm/esm/utils/api-url.js.map +0 -1
  615. package/dist/npm/esm/utils/debounce.d.ts +0 -27
  616. package/dist/npm/esm/utils/debounce.js +0 -70
  617. package/dist/npm/esm/utils/debounce.js.map +0 -1
  618. package/dist/npm/esm/utils/event-id.d.ts +0 -5
  619. package/dist/npm/esm/utils/event-id.js +0 -20
  620. package/dist/npm/esm/utils/event-id.js.map +0 -1
  621. package/dist/npm/esm/utils/index.d.ts +0 -11
  622. package/dist/npm/esm/utils/index.js +0 -12
  623. package/dist/npm/esm/utils/index.js.map +0 -1
  624. package/dist/npm/esm/utils/logger.d.ts +0 -31
  625. package/dist/npm/esm/utils/logger.js +0 -66
  626. package/dist/npm/esm/utils/logger.js.map +0 -1
  627. package/dist/npm/esm/utils/sanitize.d.ts +0 -38
  628. package/dist/npm/esm/utils/sanitize.js +0 -148
  629. package/dist/npm/esm/utils/sanitize.js.map +0 -1
  630. package/dist/npm/esm/utils/storage.d.ts +0 -72
  631. package/dist/npm/esm/utils/storage.js +0 -271
  632. package/dist/npm/esm/utils/storage.js.map +0 -1
  633. package/dist/npm/esm/utils/tracking-metadata.d.ts +0 -1
  634. package/dist/npm/esm/utils/tracking-metadata.js +0 -15
  635. package/dist/npm/esm/utils/tracking-metadata.js.map +0 -1
  636. package/dist/npm/esm/utils/url-matcher.d.ts +0 -4
  637. package/dist/npm/esm/utils/url-matcher.js +0 -8
  638. 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