@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,1166 +0,0 @@
1
- "use strict";
2
- /**
3
- * Selwise - Lightweight Embed Script
4
- * Campaign-Centric Architecture
5
- * Target: < 15KB gzipped
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.Selwise = void 0;
42
- const renderer_1 = require("./modules/renderer");
43
- const core_1 = require("./core");
44
- const experiment_overrides_1 = require("./core/experiment-overrides");
45
- const segments_1 = require("./core/segments");
46
- const utils_1 = require("./utils");
47
- const logger_1 = require("./utils/logger");
48
- const sentry_1 = require("./sentry");
49
- const datalayer_1 = require("./datalayer");
50
- const helpers_1 = require("./modules/renderer/utils/helpers");
51
- const defaultModuleLoaders = {
52
- loadSearchModule: () => Promise.resolve().then(() => __importStar(require(
53
- /* webpackChunkName: "selwise-search" */
54
- './modules/search'))),
55
- loadRecommendationModule: () => Promise.resolve().then(() => __importStar(require(
56
- /* webpackChunkName: "selwise-reco" */
57
- './modules/recommendation'))),
58
- };
59
- class Selwise {
60
- constructor(moduleLoaders = {}) {
61
- this.experiments = null;
62
- this.segments = null;
63
- this.dataLayerManager = null; // Data layer for GTM-style tracking
64
- this.searchModule = null; // Dynamically loaded module
65
- this.recommendationsCleanup = null; // Cleanup function for recommendations
66
- this.recommendationsInitialized = false;
67
- this.campaigns = [];
68
- this.widgets = [];
69
- this.recommendationWidgets = [];
70
- this.isDestroyed = false;
71
- this.renderedEntities = new Set(); // Track rendered entities to prevent duplicates
72
- this.frequencyCapManager = (0, core_1.getFrequencyCapManager)();
73
- this.conflictResolver = (0, core_1.getConflictResolver)();
74
- // Store original History API methods for cleanup
75
- this.originalPushState = null;
76
- this.originalReplaceState = null;
77
- this.popStateListener = null;
78
- // Track pending timeouts for cleanup
79
- this.pendingTimeouts = new Set();
80
- this.spaCleanupSetup = false;
81
- this.config = {
82
- siteKey: '',
83
- apiUrl: (0, utils_1.resolveApiUrl)(),
84
- };
85
- this.renderer = new renderer_1.WidgetRenderer();
86
- this.tracker = new core_1.Tracker(this.config.apiUrl, this.config.siteKey);
87
- this.moduleLoaders = {
88
- ...defaultModuleLoaders,
89
- ...moduleLoaders,
90
- };
91
- }
92
- isBrowserEnvironment() {
93
- return typeof window !== 'undefined' && typeof document !== 'undefined';
94
- }
95
- bindGlobalInstance() {
96
- if (!this.isBrowserEnvironment())
97
- return;
98
- try {
99
- window.Selwise = this;
100
- }
101
- catch {
102
- // ignore
103
- }
104
- }
105
- clearGlobalInstanceBinding() {
106
- if (!this.isBrowserEnvironment())
107
- return;
108
- try {
109
- const globalWindow = window;
110
- if (globalWindow.Selwise !== this)
111
- return;
112
- delete globalWindow.Selwise;
113
- }
114
- catch {
115
- try {
116
- if (window.Selwise === this) {
117
- window.Selwise = undefined;
118
- }
119
- }
120
- catch {
121
- // ignore
122
- }
123
- }
124
- }
125
- // Public getters for external access
126
- get siteKey() {
127
- return this.config.siteKey || '';
128
- }
129
- /**
130
- * Detect missing browser features
131
- * Returns array of missing feature names for graceful degradation
132
- */
133
- detectMissingFeatures() {
134
- const missing = [];
135
- // Check for fetch API
136
- if (typeof fetch === 'undefined') {
137
- missing.push('fetch');
138
- }
139
- // Check for Promise support
140
- if (typeof Promise === 'undefined') {
141
- missing.push('Promise');
142
- }
143
- // Check for IntersectionObserver (used in view tracking)
144
- if (typeof IntersectionObserver === 'undefined') {
145
- missing.push('IntersectionObserver');
146
- }
147
- // Check for Map/Set (used for caching)
148
- if (typeof Map === 'undefined' || typeof Set === 'undefined') {
149
- missing.push('Map/Set');
150
- }
151
- // Check for MutationObserver (used for SPA navigation)
152
- if (typeof MutationObserver === 'undefined') {
153
- missing.push('MutationObserver');
154
- }
155
- // Check for URL/URLSearchParams (used in search)
156
- if (typeof URL === 'undefined' || typeof URLSearchParams === 'undefined') {
157
- missing.push('URL/URLSearchParams');
158
- }
159
- return missing;
160
- }
161
- get apiUrl() {
162
- return this.config.apiUrl || '';
163
- }
164
- get trackingConfig() {
165
- return this._trackingConfig || null;
166
- }
167
- cleanupRenderedEntityRoots() {
168
- this.renderedEntities.clear();
169
- (0, helpers_1.cleanupDeferredRenderers)();
170
- (0, helpers_1.removeEntityRootsFromDOM)();
171
- document.querySelectorAll('[data-widget-id]').forEach((element) => {
172
- const htmlElement = element;
173
- if (htmlElement.getAttribute('data-selwise-recommendation') === 'true')
174
- return;
175
- htmlElement.remove();
176
- });
177
- }
178
- cleanupRenderedEntityById(entityId, entityType) {
179
- (0, helpers_1.removeEntityRootsById)(entityId, entityType);
180
- document.querySelectorAll('[data-widget-id]').forEach((element) => {
181
- const htmlElement = element;
182
- if (htmlElement.dataset.widgetId !== entityId)
183
- return;
184
- if (htmlElement.getAttribute('data-selwise-recommendation') === 'true')
185
- return;
186
- htmlElement.remove();
187
- });
188
- }
189
- /**
190
- * Setup SPA navigation detection for cleanup
191
- * Listens for popstate and detects URL changes
192
- *
193
- * FIXED: Race condition by reading location.href directly instead of caching
194
- */
195
- setupSPACleanup() {
196
- // Store original History API methods for restoration on destroy
197
- this.originalPushState = history.pushState.bind(history);
198
- this.originalReplaceState = history.replaceState.bind(history);
199
- // Listen for back/forward navigation - store listener for cleanup
200
- this.popStateListener = () => {
201
- this.onNavigate();
202
- };
203
- window.addEventListener('popstate', this.popStateListener);
204
- // Intercept pushState and replaceState for modern SPAs
205
- // Capture URL before and after to detect actual changes
206
- history.pushState = (...args) => {
207
- const previousUrl = window.location.href;
208
- this.originalPushState(...args);
209
- const currentUrl = window.location.href;
210
- if (previousUrl !== currentUrl) {
211
- this.onNavigate();
212
- }
213
- };
214
- history.replaceState = (...args) => {
215
- const previousUrl = window.location.href;
216
- this.originalReplaceState(...args);
217
- const currentUrl = window.location.href;
218
- if (previousUrl !== currentUrl) {
219
- this.onNavigate();
220
- }
221
- };
222
- }
223
- /**
224
- * Called when SPA navigation is detected
225
- * Cleans up current page resources and re-initializes for new page
226
- */
227
- onNavigate() {
228
- const currentUrl = window.location.href;
229
- (0, logger_1.testModeDebug)('Selwise', 'SPA navigation detected:', currentUrl, '- cleaning up...');
230
- // Clear any pending timeouts from previous navigation
231
- this.pendingTimeouts.forEach((id) => clearTimeout(id));
232
- this.pendingTimeouts.clear();
233
- // Cleanup search module
234
- if (this.searchModule?.destroy) {
235
- this.searchModule.destroy();
236
- this.searchModule = null;
237
- }
238
- // Cleanup recommendations module
239
- if (this.recommendationsCleanup) {
240
- this.recommendationsCleanup();
241
- this.recommendationsCleanup = null;
242
- }
243
- this.recommendationsInitialized = false;
244
- // Cleanup rendered campaign/widget roots and pending deferred observers
245
- this.cleanupRenderedEntityRoots();
246
- // Cleanup tracker state (IntersectionObservers, caches)
247
- this.tracker.cleanup();
248
- // Cleanup and reinitialize data layer for new page
249
- if (this.dataLayerManager) {
250
- this.dataLayerManager.destroy();
251
- this.dataLayerManager = null;
252
- }
253
- const dataLayerTimeout = window.setTimeout(() => {
254
- this.pendingTimeouts.delete(dataLayerTimeout);
255
- this.initDataLayer();
256
- }, 50);
257
- this.pendingTimeouts.add(dataLayerTimeout);
258
- // Cleanup custom scripts
259
- document.querySelectorAll('script[data-selwise-script]').forEach((el) => el.remove());
260
- document.querySelectorAll('style[data-selwise-script-css]').forEach((el) => el.remove());
261
- // Cleanup custom widget JS/CSS
262
- document.querySelectorAll('script[data-selwise-custom-js]').forEach((el) => el.remove());
263
- document.querySelectorAll('style[data-selwise-custom-css]').forEach((el) => el.remove());
264
- // Cleanup product card JS
265
- document.querySelectorAll('script[data-selwise-card-js]').forEach((el) => el.remove());
266
- // Re-initialize for new page (after a small delay to let DOM settle)
267
- const initTimeout = window.setTimeout(() => {
268
- this.pendingTimeouts.delete(initTimeout);
269
- this.initSearch();
270
- this.initRecommendations();
271
- this.renderEntitiesWithPolicies().catch((error) => {
272
- (0, logger_1.testModeDebug)('Selwise', 'Failed to render entities after navigation:', error);
273
- });
274
- }, 100);
275
- this.pendingTimeouts.add(initTimeout);
276
- }
277
- /**
278
- * Destroy the entire Selwise instance
279
- * Call this when completely removing the widget from the page
280
- */
281
- destroy() {
282
- if (this.isDestroyed)
283
- return;
284
- this.isDestroyed = true;
285
- // Clear all pending timeouts
286
- this.pendingTimeouts.forEach((id) => clearTimeout(id));
287
- this.pendingTimeouts.clear();
288
- // Restore original History API methods to prevent memory leaks
289
- if (this.originalPushState) {
290
- history.pushState = this.originalPushState;
291
- this.originalPushState = null;
292
- }
293
- if (this.originalReplaceState) {
294
- history.replaceState = this.originalReplaceState;
295
- this.originalReplaceState = null;
296
- }
297
- if (this.popStateListener) {
298
- window.removeEventListener('popstate', this.popStateListener);
299
- this.popStateListener = null;
300
- }
301
- this.spaCleanupSetup = false;
302
- // Cleanup search module
303
- if (this.searchModule?.destroy) {
304
- this.searchModule.destroy();
305
- }
306
- // Cleanup recommendations module
307
- if (this.recommendationsCleanup) {
308
- this.recommendationsCleanup();
309
- }
310
- // Cleanup data layer manager
311
- if (this.dataLayerManager) {
312
- this.dataLayerManager.destroy();
313
- }
314
- // Cleanup tracker
315
- this.tracker.flush();
316
- this.tracker.cleanup();
317
- if (this.isBrowserEnvironment()) {
318
- this.cleanupRenderedEntityRoots();
319
- }
320
- this.clearGlobalInstanceBinding();
321
- (0, logger_1.testModeDebug)('Selwise', 'Instance destroyed');
322
- }
323
- async init(config) {
324
- if (!this.isBrowserEnvironment()) {
325
- (0, logger_1.testModeWarn)('Selwise', 'init() must be called in a browser environment');
326
- return;
327
- }
328
- this.isDestroyed = false;
329
- // Feature detection - check for required browser APIs
330
- const missingFeatures = this.detectMissingFeatures();
331
- if (missingFeatures.length > 0) {
332
- (0, logger_1.testModeWarn)('Selwise', 'Browser missing required features:', missingFeatures.join(', '), '- Widget may not function correctly');
333
- // Don't completely fail - allow partial functionality
334
- }
335
- this.config = { ...this.config, ...config };
336
- this.tracker = new core_1.Tracker(this.config.apiUrl, this.config.siteKey);
337
- this.bindGlobalInstance();
338
- this.tracker.setupConsentCallback();
339
- if (!this.spaCleanupSetup) {
340
- this.setupSPACleanup();
341
- this.spaCleanupSetup = true;
342
- }
343
- if (!this.config.siteKey) {
344
- (0, logger_1.testModeWarn)('Selwise', 'No site key provided');
345
- return;
346
- }
347
- // Initialize Sentry early - only if explicitly configured
348
- // This loads asynchronously from CDN to avoid bundle size impact
349
- (0, sentry_1.initSentryFromConfig)().catch(() => {
350
- // Silently fail - Sentry issues shouldn't block widget initialization
351
- });
352
- try {
353
- // Initialize experiments first to get variants
354
- this.experiments = new core_1.ExperimentManager(this.config.siteKey, this.tracker.getVisitorId(), this.config.apiUrl);
355
- await this.experiments.init();
356
- // Initialize segment manager
357
- this.segments = new segments_1.SegmentManager(this.config.apiUrl, this.config.siteKey, this.tracker.getVisitorId(), this.tracker.getSessionId(), this.tracker.getSiteUserId(), this.tracker.getSiteUserProfileId());
358
- // PERFORMANCE: Use batch config endpoint for campaigns, widgets, recommendations, and tracking config
359
- // This replaces 4 separate requests with 1
360
- const [configResult, scriptsResult, integrationsResult] = await Promise.allSettled([
361
- this.loadSiteConfig().catch((e) => {
362
- (0, logger_1.testModeError)('Selwise', 'Failed to load site config:', e);
363
- return null;
364
- }),
365
- this.loadScripts().catch((e) => {
366
- (0, logger_1.testModeError)('Selwise', 'Failed to load scripts:', e);
367
- return null;
368
- }),
369
- fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/integrations`).catch(() => null),
370
- ]);
371
- // Process integration configs for reverse event mapping
372
- if (integrationsResult.status === 'fulfilled' &&
373
- integrationsResult.value &&
374
- integrationsResult.value.ok) {
375
- const integrations = await integrationsResult.value.json();
376
- const reverseMapping = {};
377
- // Collect all reverse mappings from enabled integrations
378
- for (const integration of integrations.integrations || []) {
379
- const reverseEventMapping = integration.reverseEventMapping || {};
380
- if (integration.enabled && reverseEventMapping) {
381
- Object.assign(reverseMapping, reverseEventMapping);
382
- }
383
- }
384
- if (Object.keys(reverseMapping).length > 0) {
385
- this.config.reverseEventMapping = reverseMapping;
386
- (0, logger_1.testModeLog)('Selwise', 'Reverse event mapping loaded:', reverseMapping);
387
- }
388
- }
389
- // Process batch config result
390
- if (configResult.status === 'fulfilled' && configResult.value) {
391
- const { campaigns, widgets, recommendations, tracking } = configResult.value;
392
- this.campaigns = campaigns || [];
393
- this.widgets = widgets || [];
394
- this.recommendationWidgets = recommendations || [];
395
- // Apply tracking config from batch endpoint
396
- if (tracking) {
397
- this._trackingConfig = tracking;
398
- // Check for subscription requirement
399
- if (tracking.subscriptionRequired) {
400
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required:', tracking.subscriptionMessage);
401
- this.handleSubscriptionInactive(tracking.subscriptionMessage);
402
- return;
403
- }
404
- // Convert flush interval from seconds to milliseconds
405
- const flushIntervalMs = tracking.flushInterval
406
- ? tracking.flushInterval * 1000
407
- : undefined;
408
- // Apply configuration to tracker's batcher
409
- this.tracker.setBatcherConfig({
410
- enabled: tracking.batchingEnabled,
411
- batchSize: tracking.batchSize,
412
- flushInterval: flushIntervalMs,
413
- enablePersistence: tracking.offlinePersistence,
414
- enableSendBeacon: tracking.sendBeaconOnUnload,
415
- maxRetries: tracking.maxRetries,
416
- maxQueueSize: tracking.maxQueueSize,
417
- maxStorageEvents: tracking.maxStorageEvents,
418
- debugMode: tracking.debugMode,
419
- });
420
- // Set global debug mode for logger
421
- (0, logger_1.setDebugMode)(tracking.debugMode || false);
422
- // Initialize the batcher (loads overflow events and flushes them)
423
- await this.tracker.initialize();
424
- // Store data layer config for initialization
425
- this.config.dataLayerConfig = tracking.dataLayerConfig;
426
- if (tracking.debugMode) {
427
- (0, logger_1.testModeLog)('Selwise', 'Tracking config loaded from batch endpoint:', tracking);
428
- }
429
- }
430
- (0, logger_1.testModeLog)('Selwise', 'Loaded site config from batch endpoint:', {
431
- campaigns: this.campaigns.length,
432
- widgets: this.widgets.length,
433
- recommendations: this.recommendationWidgets.length,
434
- });
435
- // Initialize data layer (after tracking config is loaded)
436
- this.initDataLayer();
437
- }
438
- else {
439
- // Fallback to individual endpoints if batch fails
440
- (0, logger_1.testModeWarn)('Selwise', 'Batch endpoint failed, falling back to individual endpoints');
441
- this.recommendationWidgets = [];
442
- // Fall back to loading tracking config separately
443
- await this.loadTrackingConfig();
444
- // Initialize data layer (after tracking config is loaded)
445
- this.initDataLayer();
446
- // Load campaigns and widgets
447
- await this.loadCampaignsAndWidgets();
448
- }
449
- // Render campaigns and widgets immediately using requestIdleCallback for non-blocking execution
450
- if ('requestIdleCallback' in window) {
451
- requestIdleCallback(() => {
452
- this.renderEntitiesWithPolicies();
453
- }, { timeout: 100 }); // Force rendering after 100ms even if idle doesn't fire
454
- }
455
- else {
456
- // Fallback for browsers without requestIdleCallback
457
- setTimeout(() => {
458
- this.renderEntitiesWithPolicies();
459
- }, 0);
460
- }
461
- // Initialize search module (lazy loaded) - run in background
462
- if ('requestIdleCallback' in window) {
463
- requestIdleCallback(() => this.initSearch(), { timeout: 200 });
464
- }
465
- else {
466
- setTimeout(() => this.initSearch(), 50);
467
- }
468
- // Initialize recommendations module (lazy loaded) - run in background after critical path
469
- if ('requestIdleCallback' in window) {
470
- requestIdleCallback(() => this.initRecommendations(), { timeout: 300 });
471
- }
472
- else {
473
- setTimeout(() => this.initRecommendations(), 100);
474
- }
475
- }
476
- catch (error) {
477
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load data', error);
478
- // Send to Sentry if initialized
479
- if (error instanceof Error) {
480
- (0, sentry_1.captureException)(error, { context: 'init' });
481
- }
482
- }
483
- }
484
- /**
485
- * Fetch and apply tracking configuration from server
486
- * This allows dashboard settings to control client-side batching behavior
487
- * and data layer configuration
488
- */
489
- async loadTrackingConfig() {
490
- if (!this.config.siteKey || !this.config.apiUrl)
491
- return;
492
- try {
493
- const [trackingResponse, integrationsResponse] = await Promise.allSettled([
494
- fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/tracking-config`),
495
- fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/integrations`),
496
- ]);
497
- // Process tracking config
498
- if (trackingResponse.status === 'fulfilled' && trackingResponse.value.ok) {
499
- const config = await trackingResponse.value.json();
500
- // Store full config for external access (e.g., cookie consent widget)
501
- this._trackingConfig = config;
502
- // Check for subscription requirement
503
- if (config.subscriptionRequired) {
504
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required:', config.subscriptionMessage);
505
- this.handleSubscriptionInactive(config.subscriptionMessage);
506
- return; // Stop initialization
507
- }
508
- // Convert flush interval from seconds to milliseconds
509
- const flushIntervalMs = config.flushInterval ? config.flushInterval * 1000 : undefined;
510
- // Apply configuration to tracker's batcher
511
- this.tracker.setBatcherConfig({
512
- enabled: config.batchingEnabled,
513
- batchSize: config.batchSize,
514
- flushInterval: flushIntervalMs,
515
- enablePersistence: config.offlinePersistence,
516
- enableSendBeacon: config.sendBeaconOnUnload,
517
- maxRetries: config.maxRetries,
518
- maxQueueSize: config.maxQueueSize,
519
- maxStorageEvents: config.maxStorageEvents,
520
- debugMode: config.debugMode,
521
- });
522
- // Set global debug mode for logger
523
- (0, logger_1.setDebugMode)(config.debugMode || false);
524
- // Initialize the batcher (loads overflow events and flushes them)
525
- await this.tracker.initialize();
526
- if (config.debugMode) {
527
- (0, logger_1.testModeLog)('Selwise', 'Tracking config loaded:', config);
528
- }
529
- // Store data layer config for initialization
530
- this.config.dataLayerConfig = config.dataLayerConfig;
531
- }
532
- else if (trackingResponse.status === 'fulfilled' && trackingResponse.value.status === 403) {
533
- // Subscription check failed at HTTP level
534
- const error = await trackingResponse.value.json().catch(() => ({}));
535
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required (HTTP 403):', error.message || 'Subscription inactive');
536
- this.handleSubscriptionInactive(error.message || 'Subscription required');
537
- return;
538
- }
539
- // Process integration configs for reverse event mapping
540
- if (integrationsResponse.status === 'fulfilled' && integrationsResponse.value.ok) {
541
- const integrations = await integrationsResponse.value.json();
542
- const reverseMapping = {};
543
- // Collect all reverse mappings from enabled integrations
544
- for (const integration of integrations.integrations || []) {
545
- const reverseEventMapping = integration.reverseEventMapping || {};
546
- if (integration.enabled && reverseEventMapping) {
547
- Object.assign(reverseMapping, reverseEventMapping);
548
- }
549
- }
550
- if (Object.keys(reverseMapping).length > 0) {
551
- this.config.reverseEventMapping = reverseMapping;
552
- (0, logger_1.testModeLog)('Selwise', 'Reverse event mapping loaded:', reverseMapping);
553
- }
554
- }
555
- }
556
- catch (error) {
557
- // Silently fail, use defaults
558
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load tracking config, using defaults');
559
- }
560
- }
561
- /**
562
- * Load campaigns, widgets, and recommendations using the batch config endpoint
563
- * PERFORMANCE: Single request instead of 3 separate requests
564
- * Falls back to individual endpoints if batch endpoint fails
565
- */
566
- async loadSiteConfig() {
567
- if (!this.config.siteKey || !this.config.apiUrl)
568
- return null;
569
- try {
570
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/config`, {
571
- method: 'GET',
572
- });
573
- if (!response.ok) {
574
- if (response.status === 403) {
575
- const error = await response.json().catch(() => ({}));
576
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required:', error.message || 'Subscription inactive');
577
- this.handleSubscriptionInactive(error.message || 'Subscription required');
578
- }
579
- return null;
580
- }
581
- const data = await response.json();
582
- return data;
583
- }
584
- catch (error) {
585
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load batch config, falling back to individual endpoints');
586
- return null;
587
- }
588
- }
589
- /**
590
- * Fallback path: load campaigns and widgets individually
591
- * Used only if batch endpoint fails
592
- */
593
- async loadCampaignsAndWidgets() {
594
- const campaignsPromise = this.loadCampaigns().catch((e) => {
595
- (0, logger_1.testModeError)('Selwise', 'Failed to load campaigns:', e);
596
- return null;
597
- });
598
- const widgetsPromise = this.loadWidgets().catch((e) => {
599
- (0, logger_1.testModeError)('Selwise', 'Failed to load widgets:', e);
600
- return null;
601
- });
602
- await Promise.allSettled([campaignsPromise, widgetsPromise]);
603
- }
604
- /**
605
- * Initialize the data layer manager
606
- * Called after tracking config is loaded to respect server-side settings
607
- */
608
- initDataLayer() {
609
- if (!this.config.siteKey)
610
- return;
611
- const dlConfig = this.config.dataLayerConfig || {};
612
- const reverseMapping = this.config.reverseEventMapping || {};
613
- this.dataLayerManager = new datalayer_1.DataLayerManager(this.tracker, this.config.siteKey, (0, utils_1.resolveApiUrl)(this.config.apiUrl), {
614
- enabled: dlConfig.enabled ?? true, // Enabled by default for comprehensive event tracking
615
- variableName: dlConfig.variableName ?? 'selwiseLayer',
616
- pageDetection: dlConfig.pageDetection ?? 'auto',
617
- autoPageTracking: dlConfig.autoPageTracking ?? true,
618
- cartAbandonmentTimeout: dlConfig.cartAbandonmentTimeout ?? 30,
619
- pageTypePatterns: dlConfig.pageTypePatterns ?? undefined,
620
- debugMode: dlConfig.debugMode ?? false,
621
- cookieConsent: dlConfig.cookieConsent,
622
- trackingModules: dlConfig.trackingModules,
623
- bufferSize: dlConfig.bufferSize,
624
- flushInterval: dlConfig.flushInterval,
625
- reverseEventMapping: Object.keys(reverseMapping).length > 0 ? reverseMapping : undefined,
626
- externalDataLayerName: 'dataLayer',
627
- });
628
- // Initialize if enabled (enabled by default)
629
- if (dlConfig.enabled ?? true) {
630
- this.dataLayerManager.init();
631
- (0, logger_1.testModeLog)('Selwise', 'Data layer manager initialized and started');
632
- }
633
- else {
634
- (0, logger_1.testModeLog)('Selwise', 'Data layer manager created but NOT enabled (disabled in dashboard settings)');
635
- }
636
- if (dlConfig.debugMode) {
637
- (0, logger_1.testModeLog)('Selwise', 'Data layer initialized with config:', dlConfig);
638
- }
639
- }
640
- /**
641
- * Public helper for experiment variant access
642
- * Returns the full variant assignment for an experiment
643
- */
644
- getVariant(experimentId) {
645
- return this.experiments?.getVariant(experimentId);
646
- }
647
- /**
648
- * Public helper for getting the assigned variant ID
649
- * Returns just the variant ID (e.g., 'variant_a', 'control')
650
- */
651
- getExperimentVariant(experimentId) {
652
- if (!this.experiments)
653
- return null;
654
- return this.experiments.getAssignedVariant(experimentId);
655
- }
656
- /**
657
- * Public helper for getting all active experiment assignments
658
- * Returns an array of all experiment assignments for the current visitor
659
- */
660
- getActiveExperiments() {
661
- if (!this.experiments)
662
- return [];
663
- return this.experiments.getAllAssignments();
664
- }
665
- /**
666
- * Public helper for purchase/order tracking.
667
- * Merchants can call: window.Selwise.trackOrder({...})
668
- */
669
- async trackOrder(order) {
670
- return this.tracker.trackOrder(order);
671
- }
672
- /**
673
- * Identify a user.
674
- * Call this when a user logs in or is identified.
675
- * @param userId Unique user ID from your system
676
- * @param metadata Optional metadata about the user
677
- * @returns Promise with success status and merge indicator
678
- */
679
- async identify(userId, metadata) {
680
- if (!userId)
681
- return { success: false, merged: false };
682
- const result = await this.tracker.identify(userId, metadata);
683
- // Update segment manager with new user identifiers for accurate evaluation
684
- if (this.segments) {
685
- this.segments.updateUserIdentifiers(this.tracker.getSiteUserId(), this.tracker.getSiteUserProfileId());
686
- }
687
- return result;
688
- }
689
- /**
690
- * Set user traits without changing identity.
691
- * Call this to update user attributes like name, email, plan, etc.
692
- * @param traits Key-value pairs of user attributes
693
- * @returns Promise with success status
694
- */
695
- async setTraits(traits) {
696
- return this.tracker.setTraits(traits);
697
- }
698
- /**
699
- * Track a custom event.
700
- * Call this to track custom events like 'button_clicked', 'form_submitted', etc.
701
- * @param name Event name (e.g., 'product_viewed', 'button_clicked')
702
- * @param args Optional event data including entityType, entityId, and metadata
703
- *
704
- * @example
705
- * window.Selwise.track('product_viewed', {
706
- * entityType: 'product',
707
- * entityId: 'prod_123',
708
- * metadata: { price: 99.99, category: 'electronics' }
709
- * })
710
- */
711
- track(name, args) {
712
- return this.tracker.track(name, args);
713
- }
714
- /**
715
- * Get current site user ID (if user has been identified)
716
- * @returns The site user ID or undefined
717
- */
718
- getSiteUserId() {
719
- return this.tracker.getSiteUserId();
720
- }
721
- /**
722
- * Get current visitor ID
723
- * @returns The visitor ID
724
- */
725
- getVisitorId() {
726
- return this.tracker.getVisitorId();
727
- }
728
- /**
729
- * Get current session ID
730
- * @returns The session ID
731
- */
732
- getSessionId() {
733
- return this.tracker.getSessionId();
734
- }
735
- /**
736
- * Get current journey ID
737
- * @returns The journey ID or null if no active journey
738
- */
739
- getJourneyId() {
740
- return this.tracker.getJourneyId();
741
- }
742
- /**
743
- * Get current journey state for debugging
744
- * @returns Journey state including ID, age, and validity
745
- */
746
- getJourneyState() {
747
- return this.tracker.getJourneyState();
748
- }
749
- /**
750
- * End the current journey
751
- * Clears the journey ID and starts a new one on the next event
752
- */
753
- endJourney() {
754
- this.tracker.endJourney();
755
- }
756
- /**
757
- * Search module - dynamically imported for code splitting
758
- */
759
- async initSearch() {
760
- try {
761
- const { SearchModule } = await this.moduleLoaders.loadSearchModule();
762
- this.searchModule = new SearchModule(this.config.apiUrl, this.config.siteKey, this.experiments ?? undefined, this.segments ?? undefined);
763
- await this.searchModule.init();
764
- }
765
- catch (error) {
766
- (0, logger_1.testModeDebug)('Selwise', 'Search module initialization failed', error);
767
- }
768
- }
769
- /**
770
- * Recommendations module - dynamically imported for code splitting
771
- */
772
- async initRecommendations() {
773
- if (this.recommendationsInitialized)
774
- return;
775
- try {
776
- const { initRecommendations, cleanup } = await this.moduleLoaders.loadRecommendationModule();
777
- await initRecommendations({
778
- siteKey: this.config.siteKey,
779
- apiEndpoint: this.config.apiUrl,
780
- experimentManager: this.experiments ?? undefined,
781
- segmentManager: this.segments ?? undefined,
782
- widgets: this.recommendationWidgets,
783
- });
784
- this.recommendationsInitialized = true;
785
- this.recommendationsCleanup = cleanup; // Store cleanup function
786
- (0, logger_1.testModeLog)('Selwise', 'Recommendations module initialized');
787
- }
788
- catch (error) {
789
- (0, logger_1.testModeDebug)('Selwise', 'Recommendations module initialization failed', error);
790
- }
791
- }
792
- async loadCampaigns() {
793
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/campaigns`, {
794
- method: 'GET',
795
- });
796
- if (!response.ok) {
797
- if (response.status === 403) {
798
- const error = await response.json().catch(() => ({}));
799
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required for campaigns:', error.message || 'Subscription inactive');
800
- this.handleSubscriptionInactive(error.message || 'Subscription required');
801
- }
802
- throw new Error('Failed to fetch campaigns');
803
- }
804
- const data = await response.json();
805
- this.campaigns = data.campaigns || [];
806
- }
807
- async loadWidgets() {
808
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/widgets`, {
809
- method: 'GET',
810
- });
811
- if (!response.ok) {
812
- if (response.status === 403) {
813
- const error = await response.json().catch(() => ({}));
814
- (0, logger_1.testModeWarn)('Selwise', 'Subscription required for widgets:', error.message || 'Subscription inactive');
815
- this.handleSubscriptionInactive(error.message || 'Subscription required');
816
- }
817
- // Silently fail when endpoint is unavailable
818
- return;
819
- }
820
- const data = await response.json();
821
- this.widgets = data.widgets || [];
822
- }
823
- async loadScripts() {
824
- const currentPath = window.location.pathname;
825
- try {
826
- const response = await fetch(`${this.config.apiUrl}/public/sites/${this.config.siteKey}/scripts?path=${encodeURIComponent(currentPath)}`, {
827
- method: 'GET',
828
- });
829
- if (!response.ok) {
830
- (0, logger_1.testModeDebug)('Selwise', 'Failed to fetch scripts');
831
- return;
832
- }
833
- const data = await response.json();
834
- const scripts = data.scripts || [];
835
- (0, logger_1.testModeLog)('Selwise', 'Loading custom scripts:', scripts.length);
836
- scripts.forEach((script) => {
837
- try {
838
- // Inject CSS first if provided
839
- if (script.css) {
840
- const styleElement = document.createElement('style');
841
- styleElement.setAttribute('data-selwise-script-css', script.id);
842
- styleElement.textContent = script.css;
843
- document.head.appendChild(styleElement);
844
- (0, logger_1.testModeLog)('Selwise', `Injected script CSS: ${script.name}`);
845
- }
846
- // Create and execute the script
847
- const scriptElement = document.createElement('script');
848
- scriptElement.setAttribute('data-selwise-script', script.id);
849
- scriptElement.textContent = script.code;
850
- document.body.appendChild(scriptElement);
851
- (0, logger_1.testModeLog)('Selwise', `Injected script: ${script.name}`);
852
- this.tracker.track('script_injected', {
853
- entityType: 'script',
854
- entityId: script.id,
855
- metadata: { name: script.name },
856
- });
857
- }
858
- catch (error) {
859
- (0, logger_1.testModeError)('Selwise', `Failed to execute script: ${script.name}`);
860
- (0, logger_1.testModeDebug)('Selwise', 'Script execution error details:', error);
861
- if (error instanceof SyntaxError) {
862
- (0, logger_1.testModeWarn)('Selwise', 'Script syntax error. Please check for invalid characters or escapes.');
863
- }
864
- try {
865
- this.tracker.track('script_error', {
866
- entityType: 'script',
867
- entityId: script.id,
868
- metadata: {
869
- name: script.name,
870
- message: error?.message,
871
- },
872
- });
873
- }
874
- catch {
875
- // ignore
876
- }
877
- }
878
- });
879
- }
880
- catch (error) {
881
- (0, logger_1.testModeDebug)('Selwise', 'Failed to load scripts', error);
882
- }
883
- }
884
- shouldRenderForCurrentPage(entity, type) {
885
- const shouldRender = (0, core_1.evaluatePageTargeting)(entity.pageTargetingJson, window.location.href);
886
- if (!shouldRender) {
887
- (0, logger_1.testModeLog)('Selwise', `Skipping ${type} due to page targeting: ${entity.id}`);
888
- }
889
- return shouldRender;
890
- }
891
- buildDisplayCandidates() {
892
- const allEntities = [
893
- ...this.campaigns.map((campaign) => ({ entity: campaign, type: 'campaign' })),
894
- ...this.widgets.map((widget) => ({ entity: widget, type: 'widget' })),
895
- ];
896
- return allEntities
897
- .filter(({ entity, type }) => this.shouldRenderForCurrentPage(entity, type))
898
- .map(({ entity, type }) => {
899
- const placementConfig = (entity.placementConfigJson || {});
900
- const selector = placementConfig.selector;
901
- const placementPosition = placementConfig.position || placementConfig.insertPosition;
902
- const conflictResolution = placementConfig.conflictResolution || {};
903
- const candidate = this.conflictResolver.applyConfig({
904
- id: `${type}:${entity.id}`,
905
- type,
906
- selector,
907
- placementPosition,
908
- priority: entity.priority ?? conflictResolution.priority,
909
- conflictBehavior: conflictResolution.behavior,
910
- placementConfigJson: placementConfig,
911
- });
912
- return {
913
- id: candidate.id,
914
- type,
915
- priority: candidate.priority,
916
- conflictBehavior: candidate.conflictBehavior,
917
- selector: candidate.selector,
918
- placementPosition: candidate.placementPosition,
919
- placementConfigJson: placementConfig,
920
- sourceId: entity.id,
921
- sourceEntity: entity,
922
- frequencyCapConfig: placementConfig.frequencyCap,
923
- };
924
- });
925
- }
926
- async renderEntitiesWithPolicies() {
927
- const candidates = this.buildDisplayCandidates();
928
- (0, logger_1.testModeLog)('Selwise', 'Rendering entities with policies:', candidates.length);
929
- this.renderedEntities.clear();
930
- this.frequencyCapManager.cleanup();
931
- if (candidates.length === 0)
932
- return;
933
- const resolutionResults = this.conflictResolver.resolveAll(candidates);
934
- const selectedIds = new Set(resolutionResults.flatMap((result) => result.selected.map((candidate) => candidate.id)));
935
- for (const candidate of candidates) {
936
- if (!selectedIds.has(candidate.id)) {
937
- continue;
938
- }
939
- const frequencyKey = `display:${candidate.id}`;
940
- if (candidate.frequencyCapConfig) {
941
- const check = this.frequencyCapManager.canShow(frequencyKey, candidate.frequencyCapConfig);
942
- if (!check.allowed) {
943
- (0, logger_1.testModeLog)('Selwise', `Skipping ${candidate.type} due to frequency cap (${check.reason || 'limit'}):`, candidate.sourceId);
944
- continue;
945
- }
946
- }
947
- const rendered = await this.renderEntity(candidate.sourceEntity, candidate.type);
948
- if (rendered && candidate.frequencyCapConfig) {
949
- this.frequencyCapManager.recordShown(frequencyKey);
950
- }
951
- }
952
- }
953
- /**
954
- * Unified entity rendering for campaigns and widgets
955
- * @param skipVariantCheck - Skip variant module lookup (used when rendering variant modules to prevent infinite loops)
956
- */
957
- async renderEntity(entity, type, skipVariantCheck = false) {
958
- const testModeEnabled = (0, utils_1.isTestModeEnabled)();
959
- const entityName = type === 'campaign' ? 'campaign' : 'widget';
960
- // Skip if already rendered (prevents duplicate rendering when both control and variant are in the list)
961
- if (this.renderedEntities.has(entity.id)) {
962
- (0, logger_1.testModeLog)('Selwise', `Skipping already rendered ${entityName}: ${entity.id}`);
963
- return false;
964
- }
965
- // Skip test mode entities if test mode is not enabled
966
- if (entity.isTestMode && !testModeEnabled) {
967
- (0, logger_1.testModeWarn)('Selwise', `Skipping test mode ${entityName}: ${entity.id}${type === 'campaign' ? " (Run localStorage.setItem('selwise_test_mode', 'true') to view)" : ''}`);
968
- return false;
969
- }
970
- // Re-check page targeting at render time to avoid stale route races.
971
- if (!this.shouldRenderForCurrentPage(entity, type)) {
972
- return false;
973
- }
974
- // Check for different_module mode experiment FIRST (before shouldRenderTarget check)
975
- // If this entity has a variant module, render it instead and skip the original
976
- // Skip this check if we're already rendering a variant module (to prevent infinite loops)
977
- const variantAssignment = skipVariantCheck
978
- ? null
979
- : this.experiments?.getVariantModuleForTarget(entity.id);
980
- if (variantAssignment && variantAssignment.moduleData) {
981
- (0, logger_1.testModeLog)('Selwise', `Rendering variant module for ${entityName}: ${entity.id} -> variant: ${variantAssignment.moduleData.id}`);
982
- // This entity has a variant module that should be rendered instead
983
- await this.renderVariantModule(variantAssignment.moduleData, variantAssignment.experimentId, variantAssignment.variantId, variantAssignment.targetType || type // Use assignment's targetType or current entity type
984
- );
985
- // Don't render the original entity
986
- return false;
987
- }
988
- // Check if this entity should be rendered (e.g. not replaced by an experiment)
989
- if (this.experiments && !this.experiments.shouldRenderTarget(entity.id)) {
990
- (0, logger_1.testModeLog)('Selwise', `Skipping ${entityName} (excluded by experiment): ${entity.id}`);
991
- return false;
992
- }
993
- // Check segment targeting
994
- if (this.segments && entity.segmentTargetingMode && entity.segmentIds) {
995
- const shouldShow = await this.segments.shouldShow(entity.segmentTargetingMode, entity.segmentIds);
996
- if (!shouldShow) {
997
- (0, logger_1.testModeLog)('Selwise', `Skipping ${entityName} due to segment targeting: ${entity.id}`);
998
- return false;
999
- }
1000
- }
1001
- // Skip if no content
1002
- if (!entity.contentJson || Object.keys(entity.contentJson).length === 0) {
1003
- (0, logger_1.testModeWarn)('Selwise', `Skipping empty ${entityName}: ${entity.id}`);
1004
- return false;
1005
- }
1006
- // Check for experiment variant override (config_override mode)
1007
- let variantContent = (0, experiment_overrides_1.normalizeContentFields)(entity.contentJson || {});
1008
- let variantStyles = entity.stylesJson || {};
1009
- let variantPlacement = entity.placementConfigJson || {};
1010
- const assignment = this.experiments?.getVariant(entity.id) ||
1011
- this.experiments?.getAssignmentByTargetId(entity.id);
1012
- if (assignment) {
1013
- const config = (0, experiment_overrides_1.getEffectiveConfig)(assignment);
1014
- if (config?.content && typeof config.content === 'object') {
1015
- variantContent = (0, experiment_overrides_1.deepMergeExperimentConfig)(variantContent, (0, experiment_overrides_1.normalizeContentFields)(config.content));
1016
- }
1017
- if (config?.styles && typeof config.styles === 'object') {
1018
- variantStyles = (0, experiment_overrides_1.deepMergeExperimentConfig)(variantStyles, config.styles);
1019
- }
1020
- if (config?.placement && typeof config.placement === 'object') {
1021
- variantPlacement = (0, experiment_overrides_1.deepMergeExperimentConfig)(variantPlacement, config.placement);
1022
- }
1023
- }
1024
- // Create renderer objects
1025
- const widgetForRenderer = {
1026
- id: entity.id,
1027
- type: entity.type,
1028
- placementConfigJson: variantPlacement,
1029
- __entityType: type,
1030
- };
1031
- const campaignForRenderer = {
1032
- id: entity.id,
1033
- contentJson: variantContent,
1034
- stylesJson: variantStyles,
1035
- };
1036
- // Idempotency guard for SPA re-renders.
1037
- this.cleanupRenderedEntityById(entity.id, type);
1038
- const element = this.renderer.render(widgetForRenderer, campaignForRenderer);
1039
- if (element) {
1040
- // Mark as rendered to prevent duplicates
1041
- this.renderedEntities.add(entity.id);
1042
- // Track impression
1043
- this.tracker.track('impression', {
1044
- entityType: type === 'campaign' ? 'campaign' : 'widget',
1045
- entityId: entity.id,
1046
- });
1047
- // Track experiment impression if applicable
1048
- if (assignment) {
1049
- this.experiments?.trackImpression(assignment.experimentId);
1050
- }
1051
- // Setup click tracking
1052
- element.addEventListener('click', (e) => {
1053
- const target = e.target;
1054
- if (target.tagName === 'A' || target.tagName === 'BUTTON') {
1055
- const buttonText = target.textContent?.toLowerCase() || '';
1056
- const isAddToCart = /add to cart|buy now|purchase|add to bag|sepete ekle|satın al|buy now/i.test(buttonText);
1057
- this.tracker.track('click', {
1058
- entityType: type === 'campaign' ? 'campaign' : 'widget',
1059
- entityId: entity.id,
1060
- });
1061
- if (type === 'campaign') {
1062
- // Track add_to_cart for campaign buttons that are clearly purchase-related
1063
- if (isAddToCart) {
1064
- this.tracker.track('add_to_cart', {
1065
- entityType: 'campaign',
1066
- entityId: entity.id,
1067
- metadata: {
1068
- buttonText: target.textContent,
1069
- },
1070
- });
1071
- }
1072
- }
1073
- // Track experiment conversion
1074
- if (assignment) {
1075
- this.experiments?.trackConversion(assignment.experimentId);
1076
- }
1077
- }
1078
- });
1079
- return true;
1080
- }
1081
- return false;
1082
- }
1083
- /**
1084
- * Render a variant module from different_module mode experiment
1085
- * @param moduleData The module data containing target type and full entity data
1086
- * @param experimentId The experiment ID
1087
- * @param variantId The variant ID
1088
- * @param targetType The target type (widget, campaign, recommendation, etc.)
1089
- */
1090
- async renderVariantModule(moduleData, experimentId, variantId, targetType) {
1091
- // Handle both wrapped and direct moduleData formats
1092
- // Wrapped: { targetType, data }
1093
- // Direct: moduleData IS the entity, targetType comes from parameter
1094
- let data;
1095
- let effectiveTargetType;
1096
- if (moduleData.data) {
1097
- // Wrapped format
1098
- data = moduleData.data;
1099
- effectiveTargetType = moduleData.targetType || targetType || 'widget';
1100
- }
1101
- else {
1102
- // Direct format - moduleData IS the entity
1103
- data = moduleData;
1104
- effectiveTargetType = targetType || 'widget';
1105
- }
1106
- // Track experiment impression
1107
- if (this.experiments) {
1108
- this.experiments.trackImpression(experimentId);
1109
- }
1110
- // Track impression for the variant
1111
- this.tracker.track('impression', {
1112
- entityType: effectiveTargetType,
1113
- entityId: data.id,
1114
- metadata: {
1115
- experimentId,
1116
- variantId,
1117
- isVariantModule: true,
1118
- },
1119
- });
1120
- // Render based on target type
1121
- // Pass skipVariantCheck=true to prevent infinite loops when rendering variant modules
1122
- switch (effectiveTargetType) {
1123
- case 'widget':
1124
- await this.renderEntity(data, 'widget', true);
1125
- break;
1126
- case 'campaign':
1127
- await this.renderEntity(data, 'campaign', true);
1128
- break;
1129
- case 'recommendation':
1130
- // Recommendations are handled by the recommendations module
1131
- // The module will pick up the variant from the experiment manager
1132
- (0, logger_1.testModeLog)('Selwise', 'Variant recommendation module will be rendered by recommendations module');
1133
- break;
1134
- case 'search_config':
1135
- // Search is handled by the search module
1136
- (0, logger_1.testModeLog)('Selwise', 'Variant search config will be applied by search module');
1137
- break;
1138
- default:
1139
- (0, logger_1.testModeWarn)('Selwise', `Unknown target type for variant module: ${effectiveTargetType}`);
1140
- }
1141
- }
1142
- /**
1143
- * Handle inactive subscription
1144
- * Disables widget and emits event for parent application to handle
1145
- *
1146
- * @param message Error message from server
1147
- */
1148
- handleSubscriptionInactive(message) {
1149
- // Mark widget as disabled
1150
- this.enabled = false;
1151
- this.subscriptionInactive = true;
1152
- this.subscriptionMessage = message;
1153
- // Emit event for parent to handle
1154
- if (typeof window !== 'undefined') {
1155
- const event = new CustomEvent('selwise:subscription-inactive', {
1156
- detail: { message },
1157
- });
1158
- window.dispatchEvent(event);
1159
- }
1160
- // Optionally show a subtle console warning for developers
1161
- (0, logger_1.testModeWarn)('Selwise', 'Subscription inactive. Widget will not display. ' + 'Message: ' + message);
1162
- }
1163
- }
1164
- exports.Selwise = Selwise;
1165
- exports.default = Selwise;
1166
- //# sourceMappingURL=selwise.js.map