castled-js-sdk 0.0.1 → 0.0.2

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 (660) hide show
  1. package/.env.example +8 -0
  2. package/.eslintignore +15 -0
  3. package/.eslintrc.json +41 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  6. package/.github/pull_request_template.md +22 -0
  7. package/.github/workflows/build-and-quality-checks.yml +50 -0
  8. package/.github/workflows/deploy-beta.yml +55 -0
  9. package/.github/workflows/deploy-cdn.yml +113 -0
  10. package/.github/workflows/deploy-npm.yml +80 -0
  11. package/.github/workflows/deploy-sanity-suite.yml +46 -0
  12. package/.github/workflows/test.yml +39 -0
  13. package/.husky/commit-msg +4 -0
  14. package/.husky/pre-commit +4 -0
  15. package/.nvmrc +1 -0
  16. package/.prettierignore +10 -0
  17. package/.prettierrc +7 -0
  18. package/.size-limit.js +30 -0
  19. package/.versionrc +12 -0
  20. package/LICENSE +67 -0
  21. package/README.md +102 -22
  22. package/__mocks__/BraveBrowser.js +9 -0
  23. package/__mocks__/fixtures.js +130 -0
  24. package/__mocks__/msw.handlers.js +34 -0
  25. package/__mocks__/msw.server.js +6 -0
  26. package/__tests__/camelcase.test.js +29 -0
  27. package/__tests__/data-residency.test.js +238 -0
  28. package/__tests__/features/core/metrics/errorReporting/ErrorReportingService.test.js +80 -0
  29. package/__tests__/integrations/BingAds/__mocks__/data.js +17 -0
  30. package/__tests__/integrations/BingAds/browser.test.js +148 -0
  31. package/__tests__/integrations/BingAds/utils.test.js +138 -0
  32. package/__tests__/integrations/Braze/Braze.test.js +462 -0
  33. package/__tests__/integrations/FacebookPixel/FacebookPixel.test.js +347 -0
  34. package/__tests__/integrations/FacebookPixel/utils.test.js +688 -0
  35. package/__tests__/integrations/Fullstory/fullstory.test.js +147 -0
  36. package/__tests__/integrations/GA4/__mocks__/data.js +1480 -0
  37. package/__tests__/integrations/GA4/browser.test.js +94 -0
  38. package/__tests__/integrations/GA4/utils.test.js +337 -0
  39. package/__tests__/integrations/GoogleAds/__mocks__/data.js +235 -0
  40. package/__tests__/integrations/GoogleAds/browser.test.js +202 -0
  41. package/__tests__/integrations/GoogleAds/utils.test.js +110 -0
  42. package/__tests__/integrations/LaunchDarkly/__mocks__/data.js +61 -0
  43. package/__tests__/integrations/LaunchDarkly/browser.test.js +148 -0
  44. package/__tests__/integrations/LaunchDarkly/utils.test.js +36 -0
  45. package/__tests__/integrations/Lemnisk/lemnisk.test.js +156 -0
  46. package/__tests__/integrations/Mixpanel/browser.test.js +60 -0
  47. package/__tests__/integrations/PinterestTag/__mocks__/data.js +24 -0
  48. package/__tests__/integrations/PinterestTag/utils.test.js +19 -0
  49. package/__tests__/integrations/TikTokAds/tiktokads.test.js +231 -0
  50. package/__tests__/ketchConsent.test.js +49 -0
  51. package/__tests__/oneTrustCookieConsent.test.js +89 -0
  52. package/__tests__/script.test.js +167 -0
  53. package/__tests__/service-worker/__mocks__/fixtures.js +79 -0
  54. package/__tests__/service-worker/__mocks__/msw.server.js +12 -0
  55. package/__tests__/service-worker/index.test.js +109 -0
  56. package/__tests__/transformationHandler.test.js +169 -0
  57. package/__tests__/utils/IntegrationsData.test.js +105 -0
  58. package/__tests__/utils/ObjectUtils.test.js +227 -0
  59. package/__tests__/utils/cdnPaths.test.js +63 -0
  60. package/__tests__/utils/clientHint.test.js +87 -0
  61. package/__tests__/utils/commonUtils.test.js +271 -0
  62. package/__tests__/utils/errorHandler.test.js +60 -0
  63. package/__tests__/utils/eventProcessorUtils.test.js +266 -0
  64. package/__tests__/utils/navigator.test.js +38 -0
  65. package/__tests__/utils/preProcessQueue.test.js +78 -0
  66. package/__tests__/utils/screenDetails.test.js +19 -0
  67. package/__tests__/utils/utils.test.js +348 -0
  68. package/assets/integrations/AdobeAnalytics/adobe-analytics-heartbeat.js +12384 -0
  69. package/assets/integrations/AdobeAnalytics/adobe-analytics-js.js +5046 -0
  70. package/babel.config.json +34 -0
  71. package/commitlint.config.js +3 -0
  72. package/examples/SampleEventsTest.Html +133 -0
  73. package/examples/TC/TC_001.js +4 -0
  74. package/examples/TC/TC_002.js +4 -0
  75. package/examples/TC/TC_003.js +4 -0
  76. package/examples/TC/TC_004.js +4 -0
  77. package/examples/TC/TC_005.js +4 -0
  78. package/examples/chrome-extension/USAGE.md +131 -0
  79. package/examples/chrome-extension/background-script/LICENSE +21 -0
  80. package/examples/chrome-extension/background-script/README.md +101 -0
  81. package/examples/chrome-extension/background-script/foreground.js +7 -0
  82. package/examples/chrome-extension/background-script/logo/logo-128.png +0 -0
  83. package/examples/chrome-extension/background-script/logo/logo-16.png +0 -0
  84. package/examples/chrome-extension/background-script/logo/logo-48.png +0 -0
  85. package/examples/chrome-extension/background-script/logo/logo.svg +138 -0
  86. package/examples/chrome-extension/background-script/manifest.json +37 -0
  87. package/examples/chrome-extension/background-script/popup/popup.css +11 -0
  88. package/examples/chrome-extension/background-script/popup/popup.html +11 -0
  89. package/examples/chrome-extension/background-script/rudderAnalytics.js +5345 -0
  90. package/examples/chrome-extension/background-script/service-worker.js +32 -0
  91. package/examples/chrome-extension/background-script/settings/settings.css +8 -0
  92. package/examples/chrome-extension/background-script/settings/settings.html +12 -0
  93. package/examples/chrome-extension/background-script-websockets/LICENSE +21 -0
  94. package/examples/chrome-extension/background-script-websockets/README.md +101 -0
  95. package/examples/chrome-extension/background-script-websockets/foreground.js +7 -0
  96. package/examples/chrome-extension/background-script-websockets/logo/logo-128.png +0 -0
  97. package/examples/chrome-extension/background-script-websockets/logo/logo-16.png +0 -0
  98. package/examples/chrome-extension/background-script-websockets/logo/logo-48.png +0 -0
  99. package/examples/chrome-extension/background-script-websockets/logo/logo.svg +138 -0
  100. package/examples/chrome-extension/background-script-websockets/manifest.json +37 -0
  101. package/examples/chrome-extension/background-script-websockets/popup/popup.css +11 -0
  102. package/examples/chrome-extension/background-script-websockets/popup/popup.html +11 -0
  103. package/{service-worker/index.es.js → examples/chrome-extension/background-script-websockets/rudderAnalytics.js} +1283 -1274
  104. package/examples/chrome-extension/background-script-websockets/service-worker.js +60 -0
  105. package/examples/chrome-extension/background-script-websockets/settings/settings.css +8 -0
  106. package/examples/chrome-extension/background-script-websockets/settings/settings.html +12 -0
  107. package/examples/chrome-extension/content-script/LICENSE +21 -0
  108. package/examples/chrome-extension/content-script/README.md +101 -0
  109. package/examples/chrome-extension/content-script/foreground.js +65 -0
  110. package/examples/chrome-extension/content-script/logo/logo-128.png +0 -0
  111. package/examples/chrome-extension/content-script/logo/logo-16.png +0 -0
  112. package/examples/chrome-extension/content-script/logo/logo-48.png +0 -0
  113. package/examples/chrome-extension/content-script/logo/logo.svg +138 -0
  114. package/examples/chrome-extension/content-script/manifest.json +39 -0
  115. package/examples/chrome-extension/content-script/popup/popup.css +11 -0
  116. package/examples/chrome-extension/content-script/popup/popup.html +11 -0
  117. package/examples/chrome-extension/content-script/service-worker-utils.js +17 -0
  118. package/examples/chrome-extension/content-script/service-worker.js +12 -0
  119. package/examples/chrome-extension/content-script/settings/settings.css +8 -0
  120. package/examples/chrome-extension/content-script/settings/settings.html +12 -0
  121. package/examples/chrome-extension/websocket-server/server.mjs +19 -0
  122. package/examples/html/autotrack-test.html +96 -0
  123. package/examples/html/ecomm_test.html +358 -0
  124. package/examples/html/script-test.html +968 -0
  125. package/examples/html/segment.html +177 -0
  126. package/examples/html/test_poster.jpg +0 -0
  127. package/examples/umd/index.js +11 -0
  128. package/examples/umd/package.json +42 -0
  129. package/examples/umd/rollup.config.js +36 -0
  130. package/examples/umd/tests/test.html +5 -0
  131. package/examples/v1.1/tc1.html +139 -0
  132. package/examples/v1.1/tc2.1.html +140 -0
  133. package/examples/v1.1/tc2.2.html +139 -0
  134. package/examples/v1.1/tc2.3.html +143 -0
  135. package/examples/v1.1/tc3.1.html +139 -0
  136. package/examples/v1.1/tc3.2.html +142 -0
  137. package/examples/v1.1/tc3.3.html +142 -0
  138. package/examples/v1.1/tc3.4.html +144 -0
  139. package/examples/v1.1/tc3.5.html +142 -0
  140. package/examples/v1.1/tc4.html +142 -0
  141. package/examples/v1.1/tc5.html +150 -0
  142. package/github-release.config.js +5 -0
  143. package/jest/jest.global-setup.js +3 -0
  144. package/jest/jest.polyfills.js +10 -0
  145. package/jest/jest.setup-dom.js +49 -0
  146. package/jest.config.js +196 -0
  147. package/package.json +198 -39
  148. package/packages/npm/README.md +125 -0
  149. package/packages/npm/package.json +50 -0
  150. package/patches/@segment+localstorage-retry+1.3.0.patch +73 -0
  151. package/patches/@segment+top-domain+3.0.1.patch +34 -0
  152. package/public/index.html +136 -0
  153. package/public/list_integration_sdks.html +390 -0
  154. package/rollup-configs/rollup.integrations.config.js +29 -0
  155. package/rollup-configs/rollup.sdk.browser.js +32 -0
  156. package/rollup-configs/rollup.sdk.npm.js +43 -0
  157. package/rollup-configs/rollup.utilities.js +120 -0
  158. package/rollup-configs/rollup.worker.config.js +37 -0
  159. package/sanity-suite/.babelrc +33 -0
  160. package/sanity-suite/.env.example +6 -0
  161. package/sanity-suite/__mocks__/alias1.json +137 -0
  162. package/sanity-suite/__mocks__/alias2.json +97 -0
  163. package/sanity-suite/__mocks__/alias5.json +103 -0
  164. package/sanity-suite/__mocks__/alias6.json +137 -0
  165. package/sanity-suite/__mocks__/group1.json +120 -0
  166. package/sanity-suite/__mocks__/group2.json +86 -0
  167. package/sanity-suite/__mocks__/group4.json +101 -0
  168. package/sanity-suite/__mocks__/group5.json +67 -0
  169. package/sanity-suite/__mocks__/group6.json +66 -0
  170. package/sanity-suite/__mocks__/identify1.json +136 -0
  171. package/sanity-suite/__mocks__/identify2.json +102 -0
  172. package/sanity-suite/__mocks__/identify3.json +99 -0
  173. package/sanity-suite/__mocks__/identify4.json +65 -0
  174. package/sanity-suite/__mocks__/identify5.json +102 -0
  175. package/sanity-suite/__mocks__/identify6.json +103 -0
  176. package/sanity-suite/__mocks__/identify7.json +102 -0
  177. package/sanity-suite/__mocks__/identify8.json +103 -0
  178. package/sanity-suite/__mocks__/page1.json +119 -0
  179. package/sanity-suite/__mocks__/page2.json +86 -0
  180. package/sanity-suite/__mocks__/page4.json +112 -0
  181. package/sanity-suite/__mocks__/page5.json +79 -0
  182. package/sanity-suite/__mocks__/page6.json +77 -0
  183. package/sanity-suite/__mocks__/page7.json +77 -0
  184. package/sanity-suite/__mocks__/page8.json +75 -0
  185. package/sanity-suite/__mocks__/page9.json +155 -0
  186. package/sanity-suite/__mocks__/sourceConfig1.json +988 -0
  187. package/sanity-suite/__mocks__/track1.json +150 -0
  188. package/sanity-suite/__mocks__/track2.json +118 -0
  189. package/sanity-suite/__mocks__/track4.json +134 -0
  190. package/sanity-suite/__mocks__/track5.json +102 -0
  191. package/sanity-suite/__mocks__/track6.json +81 -0
  192. package/sanity-suite/__mocks__/track7.json +81 -0
  193. package/sanity-suite/package-lock.json +7951 -0
  194. package/sanity-suite/package.json +67 -0
  195. package/sanity-suite/public/eventFiltering/index-cdn.html +112 -0
  196. package/sanity-suite/public/eventFiltering/index-local.html +109 -0
  197. package/sanity-suite/public/eventFiltering/index-npm.html +92 -0
  198. package/sanity-suite/public/index-cdn.html +112 -0
  199. package/sanity-suite/public/index-local.html +109 -0
  200. package/sanity-suite/public/index-npm.html +92 -0
  201. package/sanity-suite/public/preloadBuffer/index-cdn.html +112 -0
  202. package/sanity-suite/public/preloadBuffer/index-local.html +109 -0
  203. package/sanity-suite/public/preloadBuffer/index-npm.html +92 -0
  204. package/sanity-suite/rollup.config.js +199 -0
  205. package/sanity-suite/src/index-npm.js +65 -0
  206. package/sanity-suite/src/index.js +5 -0
  207. package/sanity-suite/src/testBook/ResultAssertions.js +51 -0
  208. package/sanity-suite/src/testBook/TestBook.js +345 -0
  209. package/sanity-suite/src/testBook/ignoredProperties.js +150 -0
  210. package/sanity-suite/src/testBook/index.js +11 -0
  211. package/sanity-suite/src/testBookSuites/alias.js +287 -0
  212. package/sanity-suite/src/testBookSuites/group.js +240 -0
  213. package/sanity-suite/src/testBookSuites/identify.js +455 -0
  214. package/sanity-suite/src/testBookSuites/index.js +31 -0
  215. package/sanity-suite/src/testBookSuites/page.js +258 -0
  216. package/sanity-suite/src/testBookSuites/sourceConfig.js +84 -0
  217. package/sanity-suite/src/testBookSuites/track.js +451 -0
  218. package/scripts/integrationBuildScript.js +77 -0
  219. package/scripts/run_tests.sh +6 -0
  220. package/src/core/analytics.js +1668 -0
  221. package/src/features/core/cookieConsent/CookieConsentFactory.js +32 -0
  222. package/src/features/core/cookieConsent/OneTrust/browser.js +102 -0
  223. package/src/features/core/cookieConsent/OneTrust/index.js +3 -0
  224. package/src/features/core/cookieConsent/ketch/browser.js +114 -0
  225. package/src/features/core/cookieConsent/ketch/index.js +1 -0
  226. package/src/features/core/deviceModeTransformation/transformationHandler.js +189 -0
  227. package/src/features/core/deviceModeTransformation/util.js +23 -0
  228. package/src/features/core/metrics/errorReporting/ErrorReportingService.js +116 -0
  229. package/src/features/core/metrics/errorReporting/providers/Bugsnag.js +240 -0
  230. package/src/features/core/session/index.js +207 -0
  231. package/src/integrations/ActiveCampaign/browser.js +52 -0
  232. package/src/integrations/ActiveCampaign/constants.js +14 -0
  233. package/src/integrations/ActiveCampaign/index.js +3 -0
  234. package/src/integrations/ActiveCampaign/nativeSdkLoader.js +24 -0
  235. package/src/integrations/AdobeAnalytics/browser.js +276 -0
  236. package/src/integrations/AdobeAnalytics/constants.js +14 -0
  237. package/src/integrations/AdobeAnalytics/eCommHandle.js +56 -0
  238. package/src/integrations/AdobeAnalytics/heartbeatHandle.js +266 -0
  239. package/src/integrations/AdobeAnalytics/index.js +1 -0
  240. package/src/integrations/AdobeAnalytics/util.js +678 -0
  241. package/src/integrations/Adroll/browser.js +125 -0
  242. package/src/integrations/Adroll/constants.js +10 -0
  243. package/src/integrations/Adroll/index.js +1 -0
  244. package/src/integrations/Adroll/util.js +48 -0
  245. package/src/integrations/Amplitude/browser.js +352 -0
  246. package/src/integrations/Amplitude/constants.js +9 -0
  247. package/src/integrations/Amplitude/index.js +1 -0
  248. package/src/integrations/Amplitude/nativeSdkLoader.js +112 -0
  249. package/src/integrations/Amplitude/test/test_amplitude.html +157 -0
  250. package/src/integrations/Amplitude/utils.js +25 -0
  251. package/src/integrations/Appcues/browser.js +79 -0
  252. package/src/integrations/Appcues/constants.js +9 -0
  253. package/src/integrations/Appcues/index.js +1 -0
  254. package/src/integrations/Axeptio/browser.js +61 -0
  255. package/src/integrations/Axeptio/constants.js +8 -0
  256. package/src/integrations/Axeptio/index.js +1 -0
  257. package/src/integrations/Axeptio/nativeSdkLoader.js +14 -0
  258. package/src/integrations/Axeptio/utils.js +16 -0
  259. package/src/integrations/BingAds/browser.js +79 -0
  260. package/src/integrations/BingAds/constants.js +12 -0
  261. package/src/integrations/BingAds/index.js +1 -0
  262. package/src/integrations/BingAds/nativeSdkLoader.js +30 -0
  263. package/src/integrations/BingAds/utils.js +101 -0
  264. package/src/integrations/Braze/browser.js +284 -0
  265. package/src/integrations/Braze/constants.js +11 -0
  266. package/src/integrations/Braze/index.js +1 -0
  267. package/src/integrations/Braze/nativeSdkLoader.js +35 -0
  268. package/src/integrations/Braze/utils.js +51 -0
  269. package/src/integrations/Bugsnag/browser.js +60 -0
  270. package/src/integrations/Bugsnag/constants.js +8 -0
  271. package/src/integrations/Bugsnag/index.js +1 -0
  272. package/src/integrations/Chartbeat/browser.js +148 -0
  273. package/src/integrations/Chartbeat/constants.js +10 -0
  274. package/src/integrations/Chartbeat/index.js +1 -0
  275. package/src/integrations/Chartbeat/nativeSdkLoader.js +7 -0
  276. package/src/integrations/Clevertap/browser.js +206 -0
  277. package/src/integrations/Clevertap/constants.js +8 -0
  278. package/src/integrations/Clevertap/index.js +1 -0
  279. package/src/integrations/Comscore/browser.js +130 -0
  280. package/src/integrations/Comscore/constants.js +11 -0
  281. package/src/integrations/Comscore/index.js +1 -0
  282. package/src/integrations/Comscore/nativeSdkLoader.js +10 -0
  283. package/src/integrations/ConvertFlow/browser.js +59 -0
  284. package/src/integrations/ConvertFlow/constants.js +15 -0
  285. package/src/integrations/ConvertFlow/index.js +1 -0
  286. package/src/integrations/ConvertFlow/utils.js +107 -0
  287. package/src/integrations/Criteo/browser.js +155 -0
  288. package/src/integrations/Criteo/constants.js +11 -0
  289. package/src/integrations/Criteo/index.js +1 -0
  290. package/src/integrations/Criteo/utils.js +343 -0
  291. package/src/integrations/CustomerIO/browser.js +74 -0
  292. package/src/integrations/CustomerIO/constants.js +10 -0
  293. package/src/integrations/CustomerIO/index.js +1 -0
  294. package/src/integrations/CustomerIO/nativeSdkLoader.js +31 -0
  295. package/src/integrations/DCMFloodlight/browser.js +240 -0
  296. package/src/integrations/DCMFloodlight/constants.js +15 -0
  297. package/src/integrations/DCMFloodlight/index.js +1 -0
  298. package/src/integrations/DCMFloodlight/utils.js +336 -0
  299. package/src/integrations/Drip/browser.js +169 -0
  300. package/src/integrations/Drip/constants.js +8 -0
  301. package/src/integrations/Drip/index.js +1 -0
  302. package/src/integrations/Drip/nativeSdkLoader.js +10 -0
  303. package/src/integrations/Drip/utils.js +29 -0
  304. package/src/integrations/Engage/browser.js +124 -0
  305. package/src/integrations/Engage/constants.js +16 -0
  306. package/src/integrations/Engage/index.js +1 -0
  307. package/src/integrations/Engage/nativeSdkLoader.js +25 -0
  308. package/src/integrations/Engage/utils.js +69 -0
  309. package/src/integrations/FacebookPixel/browser.js +313 -0
  310. package/src/integrations/FacebookPixel/constants.js +77 -0
  311. package/src/integrations/FacebookPixel/index.js +1 -0
  312. package/src/integrations/FacebookPixel/utils.js +310 -0
  313. package/src/integrations/Fullstory/browser.js +169 -0
  314. package/src/integrations/Fullstory/constants.js +13 -0
  315. package/src/integrations/Fullstory/index.js +1 -0
  316. package/src/integrations/Fullstory/nativeSdkLoader.js +69 -0
  317. package/src/integrations/GA/browser.js +816 -0
  318. package/src/integrations/GA/constants.js +10 -0
  319. package/src/integrations/GA/index.js +1 -0
  320. package/src/integrations/GA/index.test.js +184 -0
  321. package/src/integrations/GA360/browser.js +58 -0
  322. package/src/integrations/GA360/constants.js +14 -0
  323. package/src/integrations/GA360/index.js +1 -0
  324. package/src/integrations/GA4/browser.js +264 -0
  325. package/src/integrations/GA4/config.js +296 -0
  326. package/src/integrations/GA4/constants.js +15 -0
  327. package/src/integrations/GA4/index.js +1 -0
  328. package/src/integrations/GA4/utils.js +329 -0
  329. package/src/integrations/GoogleAds/browser.js +212 -0
  330. package/src/integrations/GoogleAds/constants.js +11 -0
  331. package/src/integrations/GoogleAds/index.js +1 -0
  332. package/src/integrations/GoogleAds/nativeSdkLoader.js +26 -0
  333. package/src/integrations/GoogleAds/utils.js +117 -0
  334. package/src/integrations/GoogleOptimize/browser.js +79 -0
  335. package/src/integrations/GoogleOptimize/constants.js +13 -0
  336. package/src/integrations/GoogleOptimize/index.js +1 -0
  337. package/src/integrations/GoogleTagManager/browser.js +95 -0
  338. package/src/integrations/GoogleTagManager/constants.js +10 -0
  339. package/src/integrations/GoogleTagManager/index.js +1 -0
  340. package/src/integrations/GoogleTagManager/nativeSdkLoader.js +21 -0
  341. package/src/integrations/Heap/browser.js +67 -0
  342. package/src/integrations/Heap/constants.js +9 -0
  343. package/src/integrations/Heap/index.js +1 -0
  344. package/src/integrations/Heap/nativeSdkLoader.js +40 -0
  345. package/src/integrations/Heap/util.js +23 -0
  346. package/src/integrations/Hotjar/browser.js +86 -0
  347. package/src/integrations/Hotjar/constants.js +10 -0
  348. package/src/integrations/Hotjar/index.js +1 -0
  349. package/src/integrations/Hotjar/nativeSdkLoader.js +21 -0
  350. package/src/integrations/HubSpot/browser.js +96 -0
  351. package/src/integrations/HubSpot/constants.js +11 -0
  352. package/src/integrations/HubSpot/index.js +1 -0
  353. package/src/integrations/INTERCOM/browser.js +107 -0
  354. package/src/integrations/INTERCOM/constants.js +8 -0
  355. package/src/integrations/INTERCOM/index.js +1 -0
  356. package/src/integrations/INTERCOM/nativeSdkLoader.js +46 -0
  357. package/src/integrations/INTERCOM/utils.js +68 -0
  358. package/src/integrations/Iterable/browser.js +185 -0
  359. package/src/integrations/Iterable/constants.js +8 -0
  360. package/src/integrations/Iterable/index.js +1 -0
  361. package/src/integrations/Iterable/utils.js +111 -0
  362. package/src/integrations/June/browser.js +98 -0
  363. package/src/integrations/June/constants.js +8 -0
  364. package/src/integrations/June/index.js +1 -0
  365. package/src/integrations/Keen/browser.js +153 -0
  366. package/src/integrations/Keen/constants.js +10 -0
  367. package/src/integrations/Keen/index.js +1 -0
  368. package/src/integrations/Kissmetrics/browser.js +254 -0
  369. package/src/integrations/Kissmetrics/constants.js +8 -0
  370. package/src/integrations/Kissmetrics/index.js +1 -0
  371. package/src/integrations/Kissmetrics/nativeSdkLoader.js +23 -0
  372. package/src/integrations/Klaviyo/browser.js +195 -0
  373. package/src/integrations/Klaviyo/constants.js +8 -0
  374. package/src/integrations/Klaviyo/index.js +1 -0
  375. package/src/integrations/Klaviyo/util.js +91 -0
  376. package/src/integrations/LaunchDarkly/browser.js +74 -0
  377. package/src/integrations/LaunchDarkly/constants.js +11 -0
  378. package/src/integrations/LaunchDarkly/index.js +1 -0
  379. package/src/integrations/LaunchDarkly/utils.js +24 -0
  380. package/src/integrations/Lemnisk/browser.js +85 -0
  381. package/src/integrations/Lemnisk/constants.js +13 -0
  382. package/src/integrations/Lemnisk/index.js +1 -0
  383. package/src/integrations/Lemnisk/nativeSdkLoader.js +34 -0
  384. package/src/integrations/LinkedInInsightTag/browser.js +71 -0
  385. package/src/integrations/LinkedInInsightTag/constants.js +16 -0
  386. package/src/integrations/LinkedInInsightTag/index.js +1 -0
  387. package/src/integrations/LiveChat/browser.js +82 -0
  388. package/src/integrations/LiveChat/constants.js +12 -0
  389. package/src/integrations/LiveChat/index.js +1 -0
  390. package/src/integrations/LiveChat/nativeSdkLoader.js +40 -0
  391. package/src/integrations/LiveChat/util.js +71 -0
  392. package/src/integrations/Lotame/LotameStorage.js +21 -0
  393. package/src/integrations/Lotame/browser.js +172 -0
  394. package/src/integrations/Lotame/constants.js +8 -0
  395. package/src/integrations/Lotame/index.js +1 -0
  396. package/src/integrations/Lytics/browser.js +87 -0
  397. package/src/integrations/Lytics/constants.js +8 -0
  398. package/src/integrations/Lytics/index.js +1 -0
  399. package/src/integrations/Lytics/nativeSdkLoader.js +77 -0
  400. package/src/integrations/Lytics/test/script-test-lytics.html +250 -0
  401. package/src/integrations/Matomo/browser.js +188 -0
  402. package/src/integrations/Matomo/constants.js +8 -0
  403. package/src/integrations/Matomo/index.js +1 -0
  404. package/src/integrations/Matomo/nativeSdkLoader.js +20 -0
  405. package/src/integrations/Matomo/util.js +417 -0
  406. package/src/integrations/MicrosoftClarity/browser.js +70 -0
  407. package/src/integrations/MicrosoftClarity/constants.js +14 -0
  408. package/src/integrations/MicrosoftClarity/index.js +1 -0
  409. package/src/integrations/MicrosoftClarity/nativeSdkLoader.js +22 -0
  410. package/src/integrations/Mixpanel/browser.js +326 -0
  411. package/src/integrations/Mixpanel/constants.js +11 -0
  412. package/src/integrations/Mixpanel/index.js +1 -0
  413. package/src/integrations/Mixpanel/nativeSdkLoader.js +71 -0
  414. package/src/integrations/Mixpanel/util.js +178 -0
  415. package/src/integrations/MoEngage/browser.js +133 -0
  416. package/src/integrations/MoEngage/constants.js +12 -0
  417. package/src/integrations/MoEngage/index.js +1 -0
  418. package/src/integrations/MoEngage/nativeSdkLoader.js +66 -0
  419. package/src/integrations/MoEngage/test/script-test-moengage.html +216 -0
  420. package/src/integrations/Mouseflow/browser.js +98 -0
  421. package/src/integrations/Mouseflow/constants.js +14 -0
  422. package/src/integrations/Mouseflow/index.js +1 -0
  423. package/src/integrations/Mouseflow/utils.js +27 -0
  424. package/src/integrations/Olark/browser.js +94 -0
  425. package/src/integrations/Olark/constants.js +8 -0
  426. package/src/integrations/Olark/index.js +1 -0
  427. package/src/integrations/Olark/nativeSdkLoader.js +31 -0
  428. package/src/integrations/Olark/utils.js +51 -0
  429. package/src/integrations/Optimizely/browser.js +230 -0
  430. package/src/integrations/Optimizely/constants.js +8 -0
  431. package/src/integrations/Optimizely/index.js +1 -0
  432. package/src/integrations/Optimizely/utils.js +23 -0
  433. package/src/integrations/Pendo/browser.js +119 -0
  434. package/src/integrations/Pendo/constants.js +8 -0
  435. package/src/integrations/Pendo/index.js +1 -0
  436. package/src/integrations/Pendo/nativeSdkLoader.js +32 -0
  437. package/src/integrations/PinterestTag/browser.js +241 -0
  438. package/src/integrations/PinterestTag/constants.js +19 -0
  439. package/src/integrations/PinterestTag/index.js +1 -0
  440. package/src/integrations/PinterestTag/nativeSdkLoader.js +19 -0
  441. package/src/integrations/PinterestTag/propertyMappingConfig.js +57 -0
  442. package/src/integrations/PinterestTag/test/input.js +180 -0
  443. package/src/integrations/PinterestTag/test/output.js +129 -0
  444. package/src/integrations/PinterestTag/utils.js +47 -0
  445. package/src/integrations/Podsights/browser.js +178 -0
  446. package/src/integrations/Podsights/constants.js +206 -0
  447. package/src/integrations/Podsights/index.js +1 -0
  448. package/src/integrations/Podsights/utils.js +65 -0
  449. package/src/integrations/PostAffiliatePro/browser.js +133 -0
  450. package/src/integrations/PostAffiliatePro/constants.js +13 -0
  451. package/src/integrations/PostAffiliatePro/index.js +1 -0
  452. package/src/integrations/PostAffiliatePro/utils.js +40 -0
  453. package/src/integrations/Posthog/browser.js +154 -0
  454. package/src/integrations/Posthog/constants.js +12 -0
  455. package/src/integrations/Posthog/index.js +1 -0
  456. package/src/integrations/Posthog/nativeSdkLoader.js +48 -0
  457. package/src/integrations/Posthog/test/test_posthog.html +77 -0
  458. package/src/integrations/Posthog/utils.js +36 -0
  459. package/src/integrations/ProfitWell/browser.js +72 -0
  460. package/src/integrations/ProfitWell/constants.js +12 -0
  461. package/src/integrations/ProfitWell/index.js +1 -0
  462. package/src/integrations/ProfitWell/nativeSdkLoader.js +25 -0
  463. package/src/integrations/Qualaroo/browser.js +116 -0
  464. package/src/integrations/Qualaroo/constants.js +8 -0
  465. package/src/integrations/Qualaroo/index.js +1 -0
  466. package/src/integrations/Qualaroo/utils.js +83 -0
  467. package/src/integrations/Qualtrics/browser.js +89 -0
  468. package/src/integrations/Qualtrics/constants.js +8 -0
  469. package/src/integrations/Qualtrics/index.js +1 -0
  470. package/src/integrations/Qualtrics/nativeSdkLoader.js +79 -0
  471. package/src/integrations/QuantumMetric/browser.js +63 -0
  472. package/src/integrations/QuantumMetric/constants.js +13 -0
  473. package/src/integrations/QuantumMetric/index.js +1 -0
  474. package/src/integrations/QuoraPixel/browser.js +64 -0
  475. package/src/integrations/QuoraPixel/constants.js +15 -0
  476. package/src/integrations/QuoraPixel/index.js +1 -0
  477. package/src/integrations/QuoraPixel/nativeSdkLoader.js +21 -0
  478. package/src/integrations/RedditPixel/browser.js +98 -0
  479. package/src/integrations/RedditPixel/constants.js +13 -0
  480. package/src/integrations/RedditPixel/index.js +1 -0
  481. package/src/integrations/RedditPixel/nativeSdkLoader.js +21 -0
  482. package/src/integrations/Refiner/browser.js +119 -0
  483. package/src/integrations/Refiner/constants.js +8 -0
  484. package/src/integrations/Refiner/index.js +1 -0
  485. package/src/integrations/Refiner/nativeSdkLoader.js +20 -0
  486. package/src/integrations/Refiner/utils.js +44 -0
  487. package/src/integrations/Rockerbox/browser.js +89 -0
  488. package/src/integrations/Rockerbox/constants.js +12 -0
  489. package/src/integrations/Rockerbox/index.js +1 -0
  490. package/src/integrations/Rockerbox/nativeSdkLoader.js +32 -0
  491. package/src/integrations/RollBar/browser.js +92 -0
  492. package/src/integrations/RollBar/constants.js +13 -0
  493. package/src/integrations/RollBar/index.js +1 -0
  494. package/src/integrations/RollBar/nativeSdkLoader.js +383 -0
  495. package/src/integrations/Satismeter/browser.js +94 -0
  496. package/src/integrations/Satismeter/constants.js +9 -0
  497. package/src/integrations/Satismeter/index.js +1 -0
  498. package/src/integrations/Satismeter/nativeSdkLoader.js +23 -0
  499. package/src/integrations/Satismeter/util.js +54 -0
  500. package/src/integrations/Sendinblue/browser.js +111 -0
  501. package/src/integrations/Sendinblue/constants.js +25 -0
  502. package/src/integrations/Sendinblue/index.js +1 -0
  503. package/src/integrations/Sendinblue/nativeSdkLoader.js +36 -0
  504. package/src/integrations/Sendinblue/utils.js +112 -0
  505. package/src/integrations/Sentry/browser.js +118 -0
  506. package/src/integrations/Sentry/constants.js +8 -0
  507. package/src/integrations/Sentry/index.js +1 -0
  508. package/src/integrations/Sentry/utils.js +80 -0
  509. package/src/integrations/Shynet/browser.js +97 -0
  510. package/src/integrations/Shynet/constants.js +15 -0
  511. package/src/integrations/Shynet/index.js +1 -0
  512. package/src/integrations/SnapEngage/browser.js +75 -0
  513. package/src/integrations/SnapEngage/constants.js +12 -0
  514. package/src/integrations/SnapEngage/index.js +1 -0
  515. package/src/integrations/SnapEngage/nativeSdkLoader.js +24 -0
  516. package/src/integrations/SnapEngage/util.js +63 -0
  517. package/src/integrations/SnapPixel/browser.js +232 -0
  518. package/src/integrations/SnapPixel/constants.js +13 -0
  519. package/src/integrations/SnapPixel/index.js +1 -0
  520. package/src/integrations/SnapPixel/nativeSdkLoader.js +20 -0
  521. package/src/integrations/SnapPixel/util.js +211 -0
  522. package/src/integrations/TVSquared/browser.js +96 -0
  523. package/src/integrations/TVSquared/constants.js +14 -0
  524. package/src/integrations/TVSquared/index.js +1 -0
  525. package/src/integrations/TVSquared/utils.js +40 -0
  526. package/src/integrations/TiktokAds/browser.js +103 -0
  527. package/src/integrations/TiktokAds/constants.js +86 -0
  528. package/src/integrations/TiktokAds/index.js +1 -0
  529. package/src/integrations/TiktokAds/nativeSdkLoader.js +52 -0
  530. package/src/integrations/TiktokAds/util.js +71 -0
  531. package/src/integrations/VWO/browser.js +131 -0
  532. package/src/integrations/VWO/constants.js +13 -0
  533. package/src/integrations/VWO/index.js +1 -0
  534. package/src/integrations/VWO/nativeSdkLoader.js +64 -0
  535. package/src/integrations/Vero/browser.js +165 -0
  536. package/src/integrations/Vero/constants.js +8 -0
  537. package/src/integrations/Vero/index.js +1 -0
  538. package/src/integrations/Woopra/browser.js +83 -0
  539. package/src/integrations/Woopra/constants.js +8 -0
  540. package/src/integrations/Woopra/index.js +1 -0
  541. package/src/integrations/Woopra/nativeSdkLoader.js +43 -0
  542. package/src/integrations/YandexMetrica/browser.js +143 -0
  543. package/src/integrations/YandexMetrica/constants.js +10 -0
  544. package/src/integrations/YandexMetrica/index.js +1 -0
  545. package/src/integrations/YandexMetrica/nativeSdkLoader.js +35 -0
  546. package/src/integrations/YandexMetrica/utils.js +138 -0
  547. package/src/integrations/index.js +155 -0
  548. package/src/service-worker/index.js +466 -0
  549. package/src/utils/EventRepository.js +78 -0
  550. package/src/utils/HtElement.js +33 -0
  551. package/src/utils/HtElementBuilder.js +29 -0
  552. package/src/utils/IntegrationsData.js +61 -0
  553. package/src/utils/JSFileLoader.js +66 -0
  554. package/src/utils/ObjectUtils.js +68 -0
  555. package/src/utils/PreProcessQueue.js +66 -0
  556. package/src/utils/RudderApp.js +9 -0
  557. package/src/utils/RudderContext.js +21 -0
  558. package/src/utils/RudderInfo.js +41 -0
  559. package/src/utils/RudderMessage.js +28 -0
  560. package/src/utils/ScriptLoader.js +53 -0
  561. package/src/utils/beaconQueue.js +133 -0
  562. package/src/utils/camelcase.js +48 -0
  563. package/src/utils/cdnPaths.js +43 -0
  564. package/src/utils/clientHint.js +28 -0
  565. package/src/utils/client_server_name.js +78 -0
  566. package/src/utils/commonUtils.js +207 -0
  567. package/src/utils/config_to_integration_names.js +80 -0
  568. package/src/utils/constants.js +82 -0
  569. package/src/utils/errorHandler.js +88 -0
  570. package/src/utils/eventProcessorUtils.js +53 -0
  571. package/src/utils/integration_cname.js +156 -0
  572. package/src/utils/linker/base64decoder.js +31 -0
  573. package/src/utils/linker/crc32.js +42 -0
  574. package/src/utils/linker/index.js +134 -0
  575. package/src/utils/linker/userLib.js +20 -0
  576. package/src/utils/logUtil.js +51 -0
  577. package/src/utils/logger.js +106 -0
  578. package/src/utils/navigator.js +32 -0
  579. package/src/utils/notifyError.js +16 -0
  580. package/src/utils/pageProperties.js +74 -0
  581. package/src/utils/screenDetails.js +23 -0
  582. package/src/utils/storage/cookie.js +93 -0
  583. package/src/utils/storage/index.js +3 -0
  584. package/src/utils/storage/storage.js +459 -0
  585. package/src/utils/storage/store.js +72 -0
  586. package/src/utils/storage/v3DecryptionUtils.js +19 -0
  587. package/src/utils/utils.js +966 -0
  588. package/src/utils/xhrModule.js +111 -0
  589. package/stats/AdobeAnalytics.html +4044 -0
  590. package/stats/Adroll.html +4044 -0
  591. package/stats/Amplitude.html +4044 -0
  592. package/stats/Appcues.html +4044 -0
  593. package/stats/BingAds.html +4044 -0
  594. package/stats/Braze.html +4044 -0
  595. package/stats/Bugsnag.html +4044 -0
  596. package/stats/Chartbeat.html +4044 -0
  597. package/stats/Clevertap.html +4044 -0
  598. package/stats/Comscore.html +4044 -0
  599. package/stats/ConvertFlow.html +4044 -0
  600. package/stats/Criteo.html +4044 -0
  601. package/stats/CustomerIO.html +4044 -0
  602. package/stats/DCMFloodlight.html +4044 -0
  603. package/stats/Drip.html +4044 -0
  604. package/stats/Engage.html +4044 -0
  605. package/stats/FacebookPixel.html +4044 -0
  606. package/stats/Fullstory.html +4044 -0
  607. package/stats/GA.html +4044 -0
  608. package/stats/GA360.html +4044 -0
  609. package/stats/GA4.html +4044 -0
  610. package/stats/GoogleAds.html +4044 -0
  611. package/stats/GoogleOptimize.html +4044 -0
  612. package/stats/GoogleTagManager.html +4044 -0
  613. package/stats/Heap.html +4044 -0
  614. package/stats/Hotjar.html +4044 -0
  615. package/stats/HubSpot.html +4044 -0
  616. package/stats/INTERCOM.html +4044 -0
  617. package/stats/Iterable.html +4044 -0
  618. package/stats/June.html +4044 -0
  619. package/stats/Keen.html +4044 -0
  620. package/stats/Kissmetrics.html +4044 -0
  621. package/stats/Klaviyo.html +4044 -0
  622. package/stats/LaunchDarkly.html +4044 -0
  623. package/stats/LinkedInInsightTag.html +4044 -0
  624. package/stats/LiveChat.html +4044 -0
  625. package/stats/Lotame.html +4044 -0
  626. package/stats/Lytics.html +4044 -0
  627. package/stats/Matomo.html +4044 -0
  628. package/stats/Mixpanel.html +4044 -0
  629. package/stats/MoEngage.html +4044 -0
  630. package/stats/Mouseflow.html +4044 -0
  631. package/stats/Optimizely.html +4044 -0
  632. package/stats/Pendo.html +4044 -0
  633. package/stats/PinterestTag.html +4044 -0
  634. package/stats/Podsights.html +4044 -0
  635. package/stats/PostAffiliatePro.html +4044 -0
  636. package/stats/Posthog.html +4044 -0
  637. package/stats/ProfitWell.html +4044 -0
  638. package/stats/Qualaroo.html +4044 -0
  639. package/stats/Qualtrics.html +4044 -0
  640. package/stats/QuantumMetric.html +4044 -0
  641. package/stats/QuoraPixel.html +4044 -0
  642. package/stats/RedditPixel.html +4044 -0
  643. package/stats/Refiner.html +4044 -0
  644. package/stats/Rockerbox.html +4044 -0
  645. package/stats/RollBar.html +4044 -0
  646. package/stats/Sentry.html +4044 -0
  647. package/stats/Shynet.html +4044 -0
  648. package/stats/SnapEngage.html +4044 -0
  649. package/stats/SnapPixel.html +4044 -0
  650. package/stats/TVSquared.html +4044 -0
  651. package/stats/VWO.html +4044 -0
  652. package/stats/Vero.html +4044 -0
  653. package/stats/Woopra.html +4044 -0
  654. package/stats/YandexMetrica.html +4044 -0
  655. package/stats/rudder-analytics.html +4044 -0
  656. package/index.es.js +0 -1
  657. package/index.js +0 -1
  658. package/service-worker/index.js +0 -5346
  659. /package/{index.d.ts → packages/npm/index.d.ts} +0 -0
  660. /package/{service-worker → src/service-worker}/index.d.ts +0 -0
@@ -0,0 +1,678 @@
1
+ /* eslint-disable no-param-reassign */
2
+ /* eslint-disable no-undef */
3
+ import each from '@ndhoule/each';
4
+ import get from 'lodash.get';
5
+ import {
6
+ toIso,
7
+ getHashFromArray,
8
+ isDefinedAndNotNullAndNotEmpty,
9
+ isDefined,
10
+ } from '../../utils/commonUtils';
11
+ import logger from '../../utils/logUtil';
12
+
13
+ let dynamicKeys = [];
14
+
15
+ const setDynamicKeys = (dk) => {
16
+ dynamicKeys = dk;
17
+ };
18
+
19
+ const getDynamicKeys = () => dynamicKeys;
20
+
21
+ let config;
22
+ const setConfig = (c) => {
23
+ config = c;
24
+ };
25
+
26
+ const getConfig = () => config;
27
+
28
+ const topLevelProperties = ['messageId', 'anonymousId', 'event'];
29
+
30
+ /* eslint-disable camelcase */
31
+ /**
32
+ *
33
+ * @param {} htElement
34
+ * Quality of experience tracking includes quality of service (QoS) and error tracking, both are optional elements
35
+ * and are not required for core media tracking implementations.
36
+ *
37
+ * DOC: https://experienceleague.adobe.com/docs/media-analytics/using/sdk-implement/track-qos/track-qos-overview.html?lang=en
38
+ * DOC: https://experienceleague.adobe.com/docs/media-analytics/using/sdk-implement/track-qos/track-qos-js/track-qos-js.html?lang=en
39
+ */
40
+
41
+ const createQos = (htElement) => {
42
+ const { va } = window.ADB;
43
+ const { properties } = htElement.message;
44
+ const { bitrate, startupTime, fps, droppedFrames } = properties;
45
+
46
+ const qosData = va.MediaHeartbeat.createQoSObject(
47
+ bitrate || 0,
48
+ startupTime || 0,
49
+ fps || 0,
50
+ droppedFrames || 0,
51
+ );
52
+ return qosData;
53
+ };
54
+
55
+ /**
56
+ *
57
+ * @param {*} htElement
58
+ * @param {*} mediaObj
59
+ *
60
+ * DOC: https://experienceleague.adobe.com/docs/media-analytics/using/sdk-implement/track-ads/impl-std-ad-metadata/impl-std-ad-md-js/impl-std-ad-metadata-js.html?lang=en
61
+ */
62
+
63
+ const standardVideoMetadata = (htElement, mediaObj) => {
64
+ const { va } = window.ADB;
65
+ const { properties } = htElement.message;
66
+ const metaKeys = va.MediaHeartbeat.VideoMetadataKeys;
67
+ const { SHOW, SEASON, EPISODE, ASSET_ID, GENRE, FIRST_AIR_DATE, ORIGINATOR, NETWORK, RATING } =
68
+ metaKeys;
69
+ const stdVidMeta = {};
70
+ const rudderAdbMap = {
71
+ program: SHOW,
72
+ season: SEASON,
73
+ episode: EPISODE,
74
+ assetId: ASSET_ID,
75
+ contentAssetId: ASSET_ID,
76
+ genre: GENRE,
77
+ airdate: FIRST_AIR_DATE,
78
+ publisher: ORIGINATOR,
79
+ channel: NETWORK,
80
+ rating: RATING,
81
+ };
82
+
83
+ Object.keys(rudderAdbMap).forEach((value) => {
84
+ stdVidMeta[rudderAdbMap[value]] = properties[value] || `no ${rudderAdbMap[value]}`;
85
+ });
86
+
87
+ mediaObj.setValue(va.MediaHeartbeat.MediaObjectKey.StandardVideoMetadata, stdVidMeta);
88
+ };
89
+
90
+ const standardAdMetadata = (htElement, adObj) => {
91
+ const { va } = window.ADB;
92
+ const { properties } = htElement.message;
93
+ const metaKeys = va.MediaHeartbeat.AdMetadataKeys;
94
+ const stdAdMeta = {};
95
+ const rudderAdbMap = {
96
+ publisher: metaKeys.ADVERTISER,
97
+ };
98
+
99
+ // eslint-disable-next-line
100
+ Object.keys(rudderAdbMap).forEach((value) => {
101
+ stdAdMeta[rudderAdbMap[value]] = properties[value] || `no ${rudderAdbMap[value]}`;
102
+ });
103
+
104
+ adObj.setValue(va.MediaHeartbeat.MediaObjectKey.StandardAdMetadata, stdAdMeta);
105
+ };
106
+
107
+ // clear the previously set keys for adobe analytics
108
+
109
+ const clearWindowSKeys = (dk) => {
110
+ each((keys) => {
111
+ delete window.s[keys];
112
+ }, dk);
113
+ const presentKeys = dynamicKeys;
114
+ presentKeys.length = 0;
115
+ setDynamicKeys(presentKeys);
116
+ };
117
+
118
+ // update window keys for adobe analytics
119
+
120
+ const updateWindowSKeys = (value, key) => {
121
+ if (isDefinedAndNotNullAndNotEmpty(key)) {
122
+ dynamicKeys.push(key);
123
+ window.s[key] = value;
124
+ }
125
+ };
126
+
127
+ // update all the keys for adobe analytics which are common for all calls.
128
+
129
+ const updateCommonWindowSKeys = (htElement, pageName) => {
130
+ const { properties, type, context } = htElement.message;
131
+ let campaign;
132
+ if (context && context.campaign) {
133
+ campaign = context.campaign.name;
134
+ } else {
135
+ campaign = properties.campaign;
136
+ }
137
+ const channel = htElement.message.channel || properties.channel;
138
+ const zip = context.traits.zip || properties.zip;
139
+ const state = context.traits.state || properties.state;
140
+
141
+ updateWindowSKeys(channel, 'channel');
142
+ updateWindowSKeys(campaign, 'campaign');
143
+ updateWindowSKeys(state, 'state');
144
+ updateWindowSKeys(zip, 'zip');
145
+ const name = context.page ? context.page.name : undefined;
146
+
147
+ if (config.trackPageName && type === 'track') {
148
+ updateWindowSKeys(properties.pageName || pageName || name, 'pageName');
149
+ }
150
+ };
151
+ // TODO: Need to check why timestamp not setting
152
+ // DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/timestamp.html?lang=en
153
+
154
+ const calculateTimestamp = (htElement) => {
155
+ const { properties, originalTimestamp, timestamp } = htElement.message;
156
+ let timestampVal =
157
+ originalTimestamp || timestamp || properties.originalTimestamp || properties.timestamp;
158
+ // The s.timestamp variable is a string containing the date and time of the hit. Valid timestamp formats include ISO 8601 and Unix time.
159
+ if (timestampVal) {
160
+ if (typeof timestampVal !== 'string') {
161
+ timestampVal = toIso(timestampVal);
162
+ }
163
+ if (
164
+ (config.timestampOption === 'hybrid' && !config.preferVisitorId) ||
165
+ config.timestampOption === 'enabled'
166
+ ) {
167
+ updateWindowSKeys(timestampVal, 'timestamp');
168
+ }
169
+ }
170
+ };
171
+
172
+ /**
173
+ * @param {} contextMap { "page.name" : "pName", "page.url": "pUrl"}
174
+ * @param {} htElement
175
+ * Find page.name, page.url from context/properties of rudder message.
176
+ * If key is one of anonymousId/userId/messageId it will fetch from message.
177
+ * If context = {"page": {"name": "Home Page", "url":"https://example.com"},{"path", "/page1"}}
178
+ * @param {} return a hash map of {"pName": "Home Page", "pUrl": "https://example.com"}
179
+ */
180
+
181
+ const getDataFromContext = (contextMap, htElement) => {
182
+ const { context, properties } = htElement.message;
183
+ const contextDataMap = {};
184
+ Object.keys(contextMap).forEach((value) => {
185
+ let val;
186
+ if (value) {
187
+ if (topLevelProperties.includes(value)) {
188
+ val = htElement.message[value];
189
+ } else {
190
+ val = get(context, value) ? get(context, value) : get(properties, value);
191
+ }
192
+ if (val) {
193
+ contextDataMap[contextMap[value]] = val;
194
+ }
195
+ }
196
+ });
197
+ return contextDataMap;
198
+ };
199
+
200
+ /**
201
+ * @param {} contextDataKey
202
+ * @param {} contextDataValue
203
+ * Context data variables let you define custom variables on each page that processing rules can read.
204
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/contextdata.html?lang=en
205
+ */
206
+
207
+ const setContextData = (contextDataKey, contextDataValue, video = false) => {
208
+ const contextData = {};
209
+ window.s.contextData[contextDataKey] = contextDataValue;
210
+ dynamicKeys.push(`contextData.${contextDataKey}`);
211
+ if (video) {
212
+ contextData[contextDataKey] = contextDataValue;
213
+ return contextData;
214
+ }
215
+ return null;
216
+ };
217
+
218
+ /**
219
+ * @param {} htElement
220
+ * Context data variables let you define custom variables on each page that processing rules can read.
221
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/contextdata.html?lang=en
222
+ */
223
+
224
+ const handleContextData = (htElement) => {
225
+ window.s.contextData = {};
226
+ const { properties } = htElement.message;
227
+ const contextDataPrefixValue = config.contextDataPrefix ? `${config.contextDataPrefix}.` : '';
228
+ if (properties) {
229
+ each((value, key) => {
230
+ setContextData(contextDataPrefixValue + key, value);
231
+ }, properties);
232
+ }
233
+
234
+ const contextDataMappingHashmap = getHashFromArray(
235
+ config.contextDataMapping,
236
+ 'from',
237
+ 'to',
238
+ false,
239
+ );
240
+ const keyValueContextData = getDataFromContext(contextDataMappingHashmap, htElement);
241
+ if (keyValueContextData) {
242
+ each((value, key) => {
243
+ if (isDefinedAndNotNullAndNotEmpty(key)) {
244
+ setContextData(key, value);
245
+ }
246
+ }, keyValueContextData);
247
+ }
248
+ };
249
+
250
+ /**
251
+ * @param {} htElement
252
+ * eVars are custom variables that you can use however you’d like.
253
+ * Updates eVar variable of window.s
254
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/evar.html?lang=en
255
+ */
256
+
257
+ const handleEVars = (htElement) => {
258
+ const { properties } = htElement.message;
259
+ const eVarMappingHashmap = getHashFromArray(config.eVarMapping, 'from', 'to', false);
260
+ const eVarHashmapMod = {};
261
+ Object.keys(eVarMappingHashmap).forEach((value) => {
262
+ eVarHashmapMod[value] = `eVar${eVarMappingHashmap[value]}`;
263
+ });
264
+ if (eVarHashmapMod) {
265
+ each((value, key) => {
266
+ if (eVarHashmapMod[key]) {
267
+ updateWindowSKeys(value.toString(), eVarHashmapMod[key]);
268
+ }
269
+ }, properties);
270
+ }
271
+ };
272
+ /**
273
+ * @param {} htElement
274
+ * Hierarchy variables are custom variables that let you see a site’s structure.
275
+ * Updates hier varaible of window.s
276
+ *
277
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/hier.html?lang=en
278
+ */
279
+
280
+ const handleHier = (htElement) => {
281
+ const { properties } = htElement.message;
282
+ const hierMappingHashmap = getHashFromArray(config.hierMapping, 'from', 'to', false);
283
+ const hierHashmapMod = {};
284
+ Object.keys(hierMappingHashmap).forEach((value) => {
285
+ hierHashmapMod[value] = `hier${hierMappingHashmap[value]}`;
286
+ });
287
+ if (hierHashmapMod) {
288
+ each((value, key) => {
289
+ if (hierHashmapMod[key]) {
290
+ updateWindowSKeys(value.toString(), hierHashmapMod[key]);
291
+ }
292
+ }, properties);
293
+ }
294
+ };
295
+
296
+ /**
297
+ * @param {} htElement
298
+ * List variables are custom variables that you can use however you’d like.
299
+ * They work similarly to eVars, except they can contain multiple values in the same hit.
300
+ *
301
+ * If there are many values to be appended in a particular list it will be separated by
302
+ * the delimiter set.
303
+ *
304
+ * Sets list variable of window.s
305
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/list.html?lang=en
306
+ */
307
+
308
+ const handleLists = (htElement) => {
309
+ const { properties } = htElement.message;
310
+ const listMappingHashmap = getHashFromArray(config.listMapping, 'from', 'to', false);
311
+ let listDelimiterHashmap = getHashFromArray(config.listMapping, 'from', 'delimiter', false);
312
+ // Keeping listDelimiter usage as a fallback until transformer and integrations-config releases are done to reflect the latest config structure
313
+ if (config.listMapping?.length > 0 && !get(config, 'listMapping.0.delimiter')) {
314
+ listDelimiterHashmap = getHashFromArray(config.listDelimiter, 'from', 'to', false);
315
+ }
316
+ if (properties) {
317
+ each((value, key) => {
318
+ if (listMappingHashmap[key] && listDelimiterHashmap[key]) {
319
+ if (typeof value !== 'string' && !Array.isArray(value)) {
320
+ logger.error('list variable is neither a string nor an array');
321
+ return;
322
+ }
323
+ const delimiter = listDelimiterHashmap[key];
324
+ const listValue = `list${listMappingHashmap[key]}`;
325
+ if (typeof value === 'string') {
326
+ value = value.replace(/\s*,+\s*/g, delimiter);
327
+ } else {
328
+ value = value.join(delimiter);
329
+ }
330
+ updateWindowSKeys(value.toString(), listValue);
331
+ }
332
+ }, properties);
333
+ }
334
+ };
335
+
336
+ /**
337
+ * @param {} htElement
338
+ * @description Props are custom variables that you can use however you’d like.
339
+ * They do not persist beyond the hit that they are set.
340
+ * prop variable of window.s is updated
341
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/prop.html?lang=en
342
+ */
343
+
344
+ const handleCustomProps = (htElement) => {
345
+ const { properties } = htElement.message;
346
+ const customPropsMappingHashmap = getHashFromArray(
347
+ config.customPropsMapping,
348
+ 'from',
349
+ 'to',
350
+ false,
351
+ );
352
+ let propsDelimiterHashmap = getHashFromArray(
353
+ config.customPropsMapping,
354
+ 'from',
355
+ 'delimiter',
356
+ false,
357
+ );
358
+ // Keeping propsDelimiter usage as a fallback until transformer and integrations-config releases are done to reflect the latest config structure
359
+ if (config.customPropsMapping?.length > 0 && !get(config, 'customPropsMapping.0.delimiter')) {
360
+ propsDelimiterHashmap = getHashFromArray(config.propsDelimiter, 'from', 'to', false);
361
+ }
362
+ if (properties) {
363
+ each((value, key) => {
364
+ if (customPropsMappingHashmap[key]) {
365
+ if (typeof value !== 'string' && !Array.isArray(value)) {
366
+ logger.error('prop variable is neither a string nor an array');
367
+ return;
368
+ }
369
+ const delimiter = propsDelimiterHashmap[key] ? propsDelimiterHashmap[key] : '|';
370
+ const propValue = `prop${customPropsMappingHashmap[key]}`;
371
+ if (typeof value === 'string') {
372
+ value = value.replace(/\s*,+\s*/g, delimiter);
373
+ } else {
374
+ value = value.join(delimiter);
375
+ }
376
+ updateWindowSKeys(value.toString(), propValue);
377
+ }
378
+ }, properties);
379
+ }
380
+ };
381
+
382
+ const mapMerchEvents = (event, properties) => {
383
+ const eventMerchEventToAdobeEventHashmap = getHashFromArray(config.eventMerchEventToAdobeEvent);
384
+
385
+ const merchMap = [];
386
+ if (!eventMerchEventToAdobeEventHashmap[event.toLowerCase()] || !config.eventMerchProperties) {
387
+ return merchMap;
388
+ }
389
+ const adobeEvent = eventMerchEventToAdobeEventHashmap[event.toLowerCase()].split(',');
390
+ let eventString;
391
+ each((rudderProp) => {
392
+ if (rudderProp.eventMerchProperties in properties) {
393
+ each((value) => {
394
+ if (properties[rudderProp.eventMerchProperties])
395
+ eventString = `${value}=${properties[rudderProp.eventMerchProperties]}`;
396
+ merchMap.push(eventString);
397
+ }, adobeEvent);
398
+ }
399
+ }, config.eventMerchProperties);
400
+ return merchMap;
401
+ };
402
+
403
+ /**
404
+ * @param {} event
405
+ * @param {} properties
406
+ * @description Function to set event string of Ecomm events
407
+ * Updates the "events" property of window.s
408
+ */
409
+
410
+ const setEventsString = (event, properties, adobeEventName) => {
411
+ // adobe events are taken as comma separated string
412
+ let adobeEventArray = adobeEventName ? adobeEventName.split(',') : [];
413
+ const merchMap = mapMerchEvents(event, properties);
414
+ adobeEventArray = adobeEventArray.concat(merchMap);
415
+ adobeEventArray = adobeEventArray.filter((item) => !!item);
416
+
417
+ const productMerchEventToAdobeEventHashmap = getHashFromArray(
418
+ config.productMerchEventToAdobeEvent,
419
+ );
420
+ if (productMerchEventToAdobeEventHashmap[event.toLowerCase()]) {
421
+ each((value) => {
422
+ adobeEventArray.push(value);
423
+ }, productMerchEventToAdobeEventHashmap);
424
+ }
425
+ const adobeEvent = adobeEventArray.join(',');
426
+ updateWindowSKeys(adobeEvent, 'events');
427
+
428
+ /**
429
+ * The s.linkTrackEvents variable is a string containing a comma-delimited list of
430
+ * events that you want to include in link tracking image requests
431
+ */
432
+ window.s.linkTrackEvents = adobeEvent;
433
+ };
434
+
435
+ /**
436
+ * @param {} event
437
+ * @param {} properties
438
+ * @param {} adobeEvent
439
+ * @description Creates the merchendising product eventsString for each product which will be added to the
440
+ * key products along with the evars as set.
441
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/products.html?lang=en
442
+ * @returns [] merchMap
443
+ */
444
+
445
+ const mapMerchProductEvents = (event, properties, adobeEvent) => {
446
+ const productMerchEventToAdobeEventHashmap = getHashFromArray(
447
+ config.productMerchEventToAdobeEvent,
448
+ );
449
+ // converting string to array if more than 1 event is there.
450
+ adobeEvent = adobeEvent.split(',');
451
+ const merchMap = [];
452
+ let eventString;
453
+ if (
454
+ !productMerchEventToAdobeEventHashmap[event.toLowerCase()] ||
455
+ !config.productMerchProperties
456
+ ) {
457
+ return merchMap;
458
+ }
459
+
460
+ each((rudderProp) => {
461
+ // if property mapped with products. as starting handle differently
462
+ if (rudderProp.productMerchProperties.startsWith('products.')) {
463
+ const key = rudderProp.productMerchProperties.split('.');
464
+ // take the keys after products. and find the value in properties
465
+ const value = get(properties, key[1]);
466
+ if (isDefined(value)) {
467
+ each((val) => {
468
+ eventString = `${val}=${value}`;
469
+ merchMap.push(eventString);
470
+ }, adobeEvent);
471
+ }
472
+ } else if (rudderProp.productMerchProperties in properties) {
473
+ each((val) => {
474
+ eventString = `${val}=${properties[rudderProp.productMerchProperties]}`;
475
+ merchMap.push(eventString);
476
+ }, adobeEvent);
477
+ }
478
+ }, config.productMerchProperties);
479
+ return merchMap;
480
+ };
481
+
482
+ /**
483
+ * @param {} properties
484
+ * @description set eVars for product level properties
485
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/evar-merchandising.html?lang=en
486
+ * @returns eVars as a string with delimiter "|"
487
+ */
488
+
489
+ const mapMerchProductEVars = (properties) => {
490
+ const productMerchEvarsMapHashmap = getHashFromArray(
491
+ config.productMerchEvarsMap,
492
+ 'from',
493
+ 'to',
494
+ false,
495
+ );
496
+ const eVars = [];
497
+ each((value, key) => {
498
+ // if property mapped with products. as starting handle differently
499
+ if (key.startsWith('products.')) {
500
+ key = key.split('.');
501
+ // take the keys after products. and find the value in properties
502
+ const productValue = get(properties, key[1]);
503
+ if (isDefined(productValue)) {
504
+ eVars.push(`eVar${value}=${productValue}`);
505
+ }
506
+ } else if (key in properties) {
507
+ eVars.push(`eVar${value}=${properties[key]}`);
508
+ }
509
+ }, productMerchEvarsMapHashmap);
510
+ return eVars.join('|');
511
+ };
512
+
513
+ /**
514
+ * @param {} event
515
+ * @param {} prodFields
516
+ * @param {} adobeEvent
517
+ * @description set products key for window.s
518
+ * DOC: https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/products.html?lang=en
519
+ */
520
+
521
+ const mapProducts = (event, prodFields, adobeEvent) => {
522
+ const prodString = [];
523
+ prodFields.forEach((value) => {
524
+ const category = value.category || '';
525
+ const quantity = value.quantity || 1;
526
+ const total = value.price ? (value.price * quantity).toFixed(2) : 0;
527
+ let item;
528
+ if (config.productIdentifier === 'id') {
529
+ item = value.product_id || value.id;
530
+ } else {
531
+ item = value[config.productIdentifier];
532
+ }
533
+ const eventString = mapMerchProductEvents(event, value, adobeEvent).join('|');
534
+ const prodEVarsString = mapMerchProductEVars(value);
535
+ if (eventString !== '' || prodEVarsString !== '') {
536
+ const test = [category, item, quantity, total, eventString, prodEVarsString].map((val) => {
537
+ if (val == null) {
538
+ return String(val);
539
+ }
540
+ return val;
541
+ });
542
+ prodString.push(test.join(';'));
543
+ } else {
544
+ const test = [category, item, quantity, total]
545
+ .map((val) => {
546
+ if (val === null) {
547
+ return String(val);
548
+ }
549
+ return val;
550
+ })
551
+ .join(';');
552
+ prodString.push(test);
553
+ }
554
+ });
555
+ updateWindowSKeys(prodString, 'products');
556
+ };
557
+
558
+ /**
559
+ * @param {} event
560
+ * @param {} properties
561
+ * @description Function to set product string for product level of Ecomm events
562
+ */
563
+
564
+ const setProductString = (event, properties) => {
565
+ const productMerchEventToAdobeEventHashmap = getHashFromArray(
566
+ config.productMerchEventToAdobeEvent,
567
+ );
568
+ const adobeEvent = productMerchEventToAdobeEventHashmap[event.toLowerCase()];
569
+ if (adobeEvent) {
570
+ const isSingleProdEvent =
571
+ adobeEvent === 'scAdd' ||
572
+ adobeEvent === 'scRemove' ||
573
+ (adobeEvent === 'prodView' && event.toLowerCase() !== 'product list viewed') ||
574
+ !Array.isArray(properties.products);
575
+ const prodFields = isSingleProdEvent ? [properties] : properties.products;
576
+ mapProducts(event, prodFields, adobeEvent);
577
+ }
578
+ };
579
+
580
+ /**
581
+ * @param {} htElement
582
+ * @param {} adobeEventName
583
+ *
584
+ * Update window variables and do adobe track calls
585
+ */
586
+ const processEvent = (htElement, adobeEventName, pageName) => {
587
+ const { properties, event } = htElement.message;
588
+ const { currency } = properties;
589
+ updateCommonWindowSKeys(htElement, pageName);
590
+ calculateTimestamp(htElement);
591
+ // useful for setting evar as amount value if this is set
592
+ if (currency !== 'USD') {
593
+ updateWindowSKeys(currency, 'currencyCode');
594
+ }
595
+
596
+ setEventsString(event, properties, adobeEventName);
597
+ setProductString(event, properties);
598
+
599
+ handleContextData(htElement);
600
+ handleEVars(htElement);
601
+ handleHier(htElement);
602
+ handleLists(htElement);
603
+ handleCustomProps(htElement);
604
+
605
+ /**
606
+ * The s.linkTrackVars variable is a string containing a comma-delimited list of variables that you want to
607
+ * include in link tracking image requests
608
+ */
609
+
610
+ window.s.linkTrackVars = dynamicKeys.join(',');
611
+
612
+ /**
613
+ * The tl() method is an important core component to Adobe Analytics.
614
+ * It takes all Analytics variables defined on the page, compiles them into an image request,
615
+ * and sends that data to Adobe data collection servers. It works similarly to the t() method,
616
+ * however this method does not increment page views.
617
+ * It is useful for tracking links and other elements that wouldn’t be considered a full page load.
618
+ */
619
+ window.s.tl(true, 'o', event);
620
+ };
621
+
622
+ const handleVideoContextData = (htElement) => {
623
+ let contextData;
624
+ const { properties } = htElement.message;
625
+ const contextDataPrefixValue = config.contextDataPrefix ? `${config.contextDataPrefix}.` : '';
626
+ if (properties) {
627
+ each((value, key) => {
628
+ contextData = {
629
+ ...contextData,
630
+ ...setContextData(contextDataPrefixValue + key, value, true),
631
+ };
632
+ }, properties);
633
+ }
634
+ const contextDataMappingHashmap = getHashFromArray(
635
+ config.contextDataMapping,
636
+ 'from',
637
+ 'to',
638
+ false,
639
+ );
640
+ const keyValueContextData = getDataFromContext(contextDataMappingHashmap, htElement);
641
+ if (keyValueContextData) {
642
+ each((value, key) => {
643
+ if (isDefinedAndNotNullAndNotEmpty(key)) {
644
+ contextData = { ...contextData, ...setContextData(key, value, true) };
645
+ }
646
+ }, keyValueContextData);
647
+ }
648
+ return contextData;
649
+ };
650
+
651
+ export {
652
+ processEvent,
653
+ createQos,
654
+ standardVideoMetadata,
655
+ clearWindowSKeys,
656
+ updateWindowSKeys,
657
+ updateCommonWindowSKeys,
658
+ calculateTimestamp,
659
+ handleContextData,
660
+ setContextData,
661
+ handleEVars,
662
+ handleHier,
663
+ handleLists,
664
+ handleCustomProps,
665
+ setEventsString,
666
+ mapMerchEvents,
667
+ setProductString,
668
+ mapProducts,
669
+ mapMerchProductEvents,
670
+ mapMerchProductEVars,
671
+ getDataFromContext,
672
+ standardAdMetadata,
673
+ setDynamicKeys,
674
+ getDynamicKeys,
675
+ setConfig,
676
+ getConfig,
677
+ handleVideoContextData,
678
+ };