castled-js-sdk 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
+ };