castled-js-sdk 0.0.1 → 0.0.3

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,966 @@
1
+ /* eslint-disable unicorn/no-for-loop */
2
+ /* eslint-disable sonarjs/no-redundant-boolean */
3
+ /* eslint-disable eqeqeq */
4
+ /* eslint-disable no-param-reassign */
5
+ import get from 'get-value';
6
+ import { v4 as uuid } from '@lukeed/uuid';
7
+ import { v4 as uuidSecure } from '@lukeed/uuid/secure';
8
+ import logger from './logUtil';
9
+ import { commonNames } from './integration_cname';
10
+ import { clientToServerNames } from './client_server_name';
11
+ import {
12
+ CONFIG_URL,
13
+ RESERVED_KEYS,
14
+ DEFAULT_REGION,
15
+ RESIDENCY_SERVERS,
16
+ SUPPORTED_CONSENT_MANAGERS,
17
+ FAILED_REQUEST_ERR_MSG_PREFIX,
18
+ } from './constants';
19
+ import { handleError } from './errorHandler';
20
+
21
+ /**
22
+ *
23
+ * Utility method for excluding null and empty values in JSON
24
+ * @param {*} key
25
+ * @param {*} value
26
+ * @returns
27
+ */
28
+ function replacer(key, value) {
29
+ if (value === null || value === undefined) {
30
+ return undefined;
31
+ }
32
+ return value;
33
+ }
34
+
35
+ /**
36
+ * Utility method to remove '/' at the end of URL
37
+ * @param {*} inURL
38
+ */
39
+ function removeTrailingSlashes(inURL) {
40
+ return inURL && inURL.endsWith('/') ? inURL.replace(/\/+$/, '') : inURL;
41
+ }
42
+
43
+ /**
44
+ *
45
+ * Utility function for UUID generation
46
+ * @returns
47
+ */
48
+ function generateUUID() {
49
+ if (window.crypto && typeof window.crypto.getRandomValues === 'function') {
50
+ return uuidSecure();
51
+ }
52
+
53
+ return uuid();
54
+ }
55
+
56
+ /**
57
+ *
58
+ * Utility function to get current time (formatted) for including in sent_at field
59
+ * @returns
60
+ */
61
+ function getCurrentTimeFormatted() {
62
+ const curDateTime = new Date().toISOString();
63
+ return curDateTime;
64
+ }
65
+
66
+ /**
67
+ *
68
+ * Utility function to retrieve configuration JSON from server
69
+ * @param {*} url
70
+ * @param {*} wrappers
71
+ * @param {*} isLoaded
72
+ * @param {*} callback
73
+ */
74
+ function getJSON(url, wrappers, isLoaded, callback) {
75
+ // server-side integration, XHR is node module
76
+
77
+ const xhr = new XMLHttpRequest();
78
+
79
+ xhr.open('GET', url, false);
80
+ xhr.onload = function () {
81
+ const { status, responseText } = xhr;
82
+ if (status === 200) {
83
+ // logger.debug("status 200");
84
+ callback(null, responseText, wrappers, isLoaded);
85
+ } else {
86
+ callback(status);
87
+ }
88
+ };
89
+ xhr.send();
90
+ }
91
+
92
+ /**
93
+ *
94
+ * Utility function to retrieve configuration JSON from server
95
+ * @param {*} context
96
+ * @param {*} url
97
+ * @param {*} callback
98
+ */
99
+ function getJSONTrimmed(context, url, writeKey, callback) {
100
+ // server-side integration, XHR is node module
101
+ // eslint-disable-next-line no-underscore-dangle
102
+ const cb_ = callback.bind(context);
103
+
104
+ const xhr = new XMLHttpRequest();
105
+
106
+ xhr.open('GET', url, true);
107
+ xhr.setRequestHeader(
108
+ 'Authorization',
109
+ `Basic ${btoa(`${writeKey}:`)}`,
110
+ // `Basic ${Buffer.from(`${writeKey}:`).toString("base64")}`
111
+ );
112
+
113
+ // eslint-disable-next-line func-names
114
+ xhr.onload = function () {
115
+ const { status, responseText } = xhr;
116
+ if (status === 200) {
117
+ // logger.debug("status 200 " + "calling callback");
118
+ cb_(200, responseText);
119
+ } else {
120
+ handleError(new Error(`${FAILED_REQUEST_ERR_MSG_PREFIX} ${status} for url: ${url}`));
121
+ cb_(status);
122
+ }
123
+ };
124
+ xhr.send();
125
+ }
126
+
127
+ function getCurrency(val) {
128
+ if (!val) {
129
+ return null;
130
+ }
131
+
132
+ if (typeof val === 'number') {
133
+ return val;
134
+ }
135
+
136
+ if (typeof val === 'string') {
137
+ const parsedValue = parseFloat(val.replace(/\$/g, ''));
138
+
139
+ if (!Number.isNaN(parsedValue)) {
140
+ return parsedValue;
141
+ }
142
+ }
143
+
144
+ return null;
145
+ }
146
+
147
+ function getRevenue(properties, eventName) {
148
+ let { revenue } = properties;
149
+ const { total } = properties;
150
+ const orderCompletedRegExp = /^[ _]?completed[ _]?order[ _]?|^[ _]?order[ _]?completed[ _]?$/i;
151
+
152
+ // it's always revenue, unless it's called during an order completion.
153
+ if (!revenue && eventName && eventName.match(orderCompletedRegExp)) {
154
+ revenue = total;
155
+ }
156
+
157
+ return getCurrency(revenue);
158
+ }
159
+
160
+ function transformNamesCore(integrationObject, namesObj) {
161
+ Object.keys(integrationObject).forEach((key) => {
162
+ // eslint-disable-next-line no-prototype-builtins
163
+ if (integrationObject.hasOwnProperty(key)) {
164
+ if (namesObj[key]) {
165
+ integrationObject[namesObj[key]] = integrationObject[key];
166
+ }
167
+ if (
168
+ key !== 'All' && // delete user supplied keys except All and if except those where oldkeys are not present or oldkeys are same as transformed keys
169
+ namesObj[key] !== undefined &&
170
+ namesObj[key] !== key
171
+ ) {
172
+ delete integrationObject[key];
173
+ }
174
+ }
175
+ });
176
+ }
177
+
178
+ /**
179
+ *
180
+ *
181
+ * @param {*} integrationObject
182
+ */
183
+ function transformToRudderNames(integrationObject) {
184
+ transformNamesCore(integrationObject, commonNames);
185
+ }
186
+
187
+ function transformToServerNames(integrationObject) {
188
+ transformNamesCore(integrationObject, clientToServerNames);
189
+ }
190
+
191
+ /**
192
+ *
193
+ * @param {*} sdkSuppliedIntegrations
194
+ * @param {*} configPlaneEnabledIntegrations
195
+ */
196
+ function findAllEnabledDestinations(sdkSuppliedIntegrations, configPlaneEnabledIntegrations) {
197
+ const enabledList = [];
198
+ if (!configPlaneEnabledIntegrations || configPlaneEnabledIntegrations.length === 0) {
199
+ return enabledList;
200
+ }
201
+ let allValue = true;
202
+ if (sdkSuppliedIntegrations.All !== undefined) {
203
+ allValue = sdkSuppliedIntegrations.All;
204
+ }
205
+ const intgData = [];
206
+ if (typeof configPlaneEnabledIntegrations[0] === 'string') {
207
+ configPlaneEnabledIntegrations.forEach((intg) => {
208
+ intgData.push({
209
+ intgName: intg,
210
+ intObj: intg,
211
+ });
212
+ });
213
+ } else if (typeof configPlaneEnabledIntegrations[0] === 'object') {
214
+ configPlaneEnabledIntegrations.forEach((intg) => {
215
+ intgData.push({
216
+ intgName: intg.name,
217
+ intObj: intg,
218
+ });
219
+ });
220
+ }
221
+
222
+ intgData.forEach(({ intgName, intObj }) => {
223
+ if (!allValue) {
224
+ // All false ==> check if intg true supplied
225
+ if (
226
+ sdkSuppliedIntegrations[intgName] !== undefined &&
227
+ Boolean(sdkSuppliedIntegrations[intgName]) === true
228
+ ) {
229
+ enabledList.push(intObj);
230
+ }
231
+ } else {
232
+ // All true ==> intg true by default
233
+ let intgValue = true;
234
+ // check if intg false supplied
235
+ if (
236
+ sdkSuppliedIntegrations[intgName] !== undefined &&
237
+ Boolean(sdkSuppliedIntegrations[intgName]) === false
238
+ ) {
239
+ intgValue = false;
240
+ }
241
+ if (intgValue) {
242
+ enabledList.push(intObj);
243
+ }
244
+ }
245
+ });
246
+
247
+ return enabledList;
248
+ }
249
+
250
+ /**
251
+ * check type of object incoming in the rejectArr function
252
+ * @param {} val
253
+ */
254
+ function type(val) {
255
+ switch (Object.prototype.toString.call(val)) {
256
+ case '[object Function]':
257
+ return 'function';
258
+ case '[object Date]':
259
+ return 'date';
260
+ case '[object RegExp]':
261
+ return 'regexp';
262
+ case '[object Arguments]':
263
+ return 'arguments';
264
+ case '[object Array]':
265
+ return 'array';
266
+ default:
267
+ }
268
+
269
+ if (val === null) return 'null';
270
+ if (val === undefined) return 'undefined';
271
+ if (val === Object(val)) return 'object';
272
+
273
+ return typeof val;
274
+ }
275
+
276
+ function compact(value) {
277
+ return value == null;
278
+ }
279
+
280
+ /**
281
+ * particular case when rejecting an array
282
+ * @param {} arr
283
+ * @param {} fn
284
+ */
285
+ const rejectArray = (arr, fn) => arr.filter((value, index) => !fn(value, index));
286
+
287
+ /**
288
+ * Rejecting null from any object other than arrays
289
+ * @param {} obj
290
+ * @param {} fn
291
+ *
292
+ */
293
+ const rejectObject = (obj, fn) =>
294
+ Object.entries(obj).reduce((acc, [key, value]) => {
295
+ if (!fn(value, key)) {
296
+ acc[key] = value;
297
+ }
298
+ return acc;
299
+ }, {});
300
+
301
+ /**
302
+ * reject all null values from array/object
303
+ * @param {} obj
304
+ * @param {} fn
305
+ */
306
+ function rejectArr(obj, fn) {
307
+ fn = fn || compact;
308
+ return type(obj) === 'array' ? rejectArray(obj, fn) : rejectObject(obj, fn);
309
+ }
310
+
311
+ function getUserProvidedConfigUrl(configUrl, defConfigUrl) {
312
+ let url = configUrl;
313
+ if (url.indexOf('sourceConfig') === -1) {
314
+ url = `${removeTrailingSlashes(url)}/sourceConfig/`;
315
+ }
316
+ url = url.slice(-1) === '/' ? url : `${url}/`;
317
+ const defQueryParams = defConfigUrl.split('?')[1];
318
+ const urlSplitItems = url.split('?');
319
+ if (urlSplitItems.length > 1 && urlSplitItems[1] !== defQueryParams) {
320
+ url = `${urlSplitItems[0]}?${defQueryParams}`;
321
+ } else {
322
+ url = `${url}?${defQueryParams}`;
323
+ }
324
+ return url;
325
+ }
326
+ /**
327
+ * Check if a reserved keyword is present in properties/traits
328
+ * @param {*} properties
329
+ * @param {*} reservedKeywords
330
+ * @param {*} type
331
+ */
332
+ function checkReservedKeywords(message, messageType) {
333
+ // properties, traits, contextualTraits are either undefined or object
334
+ const { properties, traits, context } = message;
335
+ if (properties) {
336
+ Object.keys(properties).forEach((property) => {
337
+ if (RESERVED_KEYS.indexOf(property.toLowerCase()) >= 0) {
338
+ logger.error(
339
+ `Warning! : Reserved keyword used in properties--> ${property} with ${messageType} call`,
340
+ );
341
+ }
342
+ });
343
+ }
344
+ if (traits) {
345
+ Object.keys(traits).forEach((trait) => {
346
+ if (RESERVED_KEYS.indexOf(trait.toLowerCase()) >= 0) {
347
+ logger.error(
348
+ `Warning! : Reserved keyword used in traits--> ${trait} with ${messageType} call`,
349
+ );
350
+ }
351
+ });
352
+ }
353
+
354
+ const contextualTraits = context.traits;
355
+ if (contextualTraits) {
356
+ Object.keys(contextualTraits).forEach((contextTrait) => {
357
+ if (RESERVED_KEYS.indexOf(contextTrait.toLowerCase()) >= 0) {
358
+ logger.error(
359
+ `Warning! : Reserved keyword used in traits --> ${contextTrait} with ${messageType} call`,
360
+ );
361
+ }
362
+ });
363
+ }
364
+ }
365
+
366
+ /* ------- Start FlattenJson -----------
367
+ * This function flatten given json object to single level.
368
+ * So if there is nested object or array, all will appear in first level properties of an object.
369
+ * Following is case we are handling in this function ::
370
+ * condition 1: String
371
+ * condition 2: Array
372
+ * condition 3: Nested object
373
+ */
374
+ function recurse(cur, prop, result) {
375
+ const res = result;
376
+ if (Object(cur) !== cur) {
377
+ res[prop] = cur;
378
+ } else if (Array.isArray(cur)) {
379
+ const l = cur.length;
380
+ for (let i = 0; i < l; i += 1) recurse(cur[i], prop ? `${prop}.${i}` : `${i}`, res);
381
+ if (l === 0) res[prop] = [];
382
+ } else {
383
+ let isEmpty = true;
384
+ Object.keys(cur).forEach((key) => {
385
+ isEmpty = false;
386
+ recurse(cur[key], prop ? `${prop}.${key}` : key, res);
387
+ });
388
+ if (isEmpty) res[prop] = {};
389
+ }
390
+ return res;
391
+ }
392
+
393
+ function flattenJsonPayload(data, property = '') {
394
+ return recurse(data, property, {});
395
+ }
396
+ /* ------- End FlattenJson ----------- */
397
+ /**
398
+ *
399
+ * @param {*} message
400
+ * @param {*} destination
401
+ * @param {*} keys
402
+ * @param {*} exclusionFields
403
+ * Extract fields from message with exclusions
404
+ * Pass the keys of message for extraction and
405
+ * exclusion fields to exclude and the payload to map into
406
+ * -----------------Example-------------------
407
+ * extractCustomFields(message,payload,["traits", "context.traits", "properties"], "email",
408
+ * ["firstName",
409
+ * "lastName",
410
+ * "phone",
411
+ * "title",
412
+ * "organization",
413
+ * "city",
414
+ * "region",
415
+ * "country",
416
+ * "zip",
417
+ * "image",
418
+ * "timezone"])
419
+ * -------------------------------------------
420
+ * The above call will map the fields other than the
421
+ * exclusion list from the given keys to the destination payload
422
+ *
423
+ */
424
+
425
+ function extractCustomFields(message, dest, keys, exclusionFields) {
426
+ const mappingKeys = [];
427
+ const destination = dest || {};
428
+ if (Array.isArray(keys)) {
429
+ keys.forEach((key) => {
430
+ const messageContext = get(message, key);
431
+ if (messageContext) {
432
+ Object.keys(messageContext).forEach((k) => {
433
+ if (!exclusionFields.includes(k)) mappingKeys.push(k);
434
+ });
435
+ mappingKeys.forEach((mappingKey) => {
436
+ if (!(typeof messageContext[mappingKey] === 'undefined')) {
437
+ destination[mappingKey] = get(messageContext, mappingKey);
438
+ }
439
+ });
440
+ }
441
+ });
442
+ } else if (keys === 'root') {
443
+ Object.keys(message).forEach((k) => {
444
+ if (!exclusionFields.includes(k)) mappingKeys.push(k);
445
+ });
446
+ mappingKeys.forEach((mappingKey) => {
447
+ if (!(typeof message[mappingKey] === 'undefined')) {
448
+ destination[mappingKey] = get(message, mappingKey);
449
+ }
450
+ });
451
+ } else {
452
+ logger.debug('unable to parse keys');
453
+ }
454
+ return destination;
455
+ }
456
+ /**
457
+ *
458
+ * @param {*} message
459
+ *
460
+ * Use get-value to retrieve defined traits from message traits
461
+ */
462
+ function getDefinedTraits(message) {
463
+ const traitsValue = {
464
+ userId:
465
+ get(message, 'userId') ||
466
+ get(message, 'context.traits.userId') ||
467
+ get(message, 'anonymousId'),
468
+ userIdOnly: get(message, 'userId') || get(message, 'context.traits.userId'),
469
+ email:
470
+ get(message, 'context.traits.email') ||
471
+ get(message, 'context.traits.Email') ||
472
+ get(message, 'context.traits.E-mail'),
473
+ phone: get(message, 'context.traits.phone') || get(message, 'context.traits.Phone'),
474
+ firstName:
475
+ get(message, 'context.traits.firstName') ||
476
+ get(message, 'context.traits.firstname') ||
477
+ get(message, 'context.traits.first_name'),
478
+ lastName:
479
+ get(message, 'context.traits.lastName') ||
480
+ get(message, 'context.traits.lastname') ||
481
+ get(message, 'context.traits.last_name'),
482
+ name: get(message, 'context.traits.name') || get(message, 'context.traits.Name'),
483
+ state:
484
+ get(message, 'context.traits.state') ||
485
+ get(message, 'context.traits.State') ||
486
+ get(message, 'context.traits.address.state') ||
487
+ get(message, 'context.traits.address.State'),
488
+ city:
489
+ get(message, 'context.traits.city') ||
490
+ get(message, 'context.traits.City') ||
491
+ get(message, 'context.traits.address.city') ||
492
+ get(message, 'context.traits.address.City'),
493
+ country:
494
+ get(message, 'context.traits.country') ||
495
+ get(message, 'context.traits.Country') ||
496
+ get(message, 'context.traits.address.country') ||
497
+ get(message, 'context.traits.address.Country'),
498
+ };
499
+
500
+ if (!get(traitsValue, 'name') && get(traitsValue, 'firstName') && get(traitsValue, 'lastName')) {
501
+ traitsValue.name = `${get(traitsValue, 'firstName')} ${get(traitsValue, 'lastName')}`;
502
+ }
503
+ return traitsValue;
504
+ }
505
+
506
+ /**
507
+ * To check if a variable is storing object or not
508
+ */
509
+ const isObject = (obj) => type(obj) === 'object';
510
+
511
+ /**
512
+ * Returns true for empty object {}
513
+ * @param {*} obj
514
+ * @returns
515
+ */
516
+ const isEmptyObject = (obj) => {
517
+ if (!obj) {
518
+ logger.warn('input is undefined or null');
519
+ return true;
520
+ }
521
+ return Object.keys(obj).length === 0;
522
+ };
523
+
524
+ /**
525
+ * To check if a variable is storing array or not
526
+ */
527
+ const isArray = (obj) => type(obj) === 'array';
528
+
529
+ const isDefined = (x) => x !== undefined;
530
+ const isNotNull = (x) => x !== null;
531
+ const isDefinedAndNotNull = (x) => isDefined(x) && isNotNull(x);
532
+
533
+ const getDataFromSource = (src, dest, properties) => {
534
+ const data = {};
535
+ if (isArray(src)) {
536
+ for (let index = 0; index < src.length; index += 1) {
537
+ if (properties[src[index]]) {
538
+ data[dest] = properties[src[index]];
539
+ if (data) {
540
+ // return only if the value is valid.
541
+ // else look for next possible source in precedence
542
+ return data;
543
+ }
544
+ }
545
+ }
546
+ } else if (typeof src === 'string' && properties[src]) {
547
+ data[dest] = properties[src];
548
+ }
549
+ return data;
550
+ };
551
+
552
+ const getConfigUrl = (writeKey) =>
553
+ CONFIG_URL.concat(CONFIG_URL.includes('?') ? '&' : '?').concat(
554
+ writeKey ? `writeKey=${writeKey}` : '',
555
+ );
556
+
557
+ const getSDKUrlInfo = () => {
558
+ const scripts = document.getElementsByTagName('script');
559
+ let sdkURL;
560
+ let isStaging = false;
561
+ for (let i = 0; i < scripts.length; i += 1) {
562
+ const curScriptSrc = removeTrailingSlashes(scripts[i].getAttribute('src'));
563
+ if (curScriptSrc) {
564
+ const urlMatches = curScriptSrc.match(/^.*events(-staging)?(\.min)?\.js$/);
565
+ if (urlMatches) {
566
+ sdkURL = curScriptSrc;
567
+ isStaging = urlMatches[1] !== undefined;
568
+ break;
569
+ }
570
+ }
571
+ }
572
+ return { sdkURL, isStaging };
573
+ };
574
+
575
+ /**
576
+ * This method handles the operations between two keys from the sourceKeys. One of the possible
577
+ * Use case is to calculate the value from the "price" and "quantity"
578
+ * Definition of the operation object is as follows
579
+ * {
580
+ * "operation": "multiplication",
581
+ * "args": [
582
+ * {
583
+ * "sourceKeys": "properties.price"
584
+ * },
585
+ * {
586
+ * "sourceKeys": "properties.quantity",
587
+ * "defaultVal": 1
588
+ * }
589
+ * ]
590
+ * }
591
+ * Supported operations are "addition", "multiplication"
592
+ * @param {*} param0
593
+ * @returns
594
+ */
595
+ const handleSourceKeysOperation = ({ message, operationObject }) => {
596
+ const { operation, args } = operationObject;
597
+
598
+ // populate the values from the arguments
599
+ // in the same order it is populated
600
+ const argValues = args.map((arg) => {
601
+ const { sourceKeys, defaultVal } = arg;
602
+ const val = get(message, sourceKeys);
603
+ if (val || val === false || val === 0) {
604
+ return val;
605
+ }
606
+ return defaultVal;
607
+ });
608
+
609
+ // quick sanity check for the undefined values in the list.
610
+ // if there is any undefined values, return null
611
+ // without going further for operations
612
+ const isAllDefined = argValues.every((value) => isDefinedAndNotNull(value));
613
+ if (!isAllDefined) {
614
+ return null;
615
+ }
616
+
617
+ // start handling operations
618
+ let result = null;
619
+ switch (operation) {
620
+ case 'multiplication':
621
+ result = 1;
622
+ // eslint-disable-next-line no-restricted-syntax
623
+ for (const v of argValues) {
624
+ if (typeof v === 'number') {
625
+ result *= v;
626
+ } else {
627
+ // if there is a non number argument simply return null
628
+ // non numbers can't be operated arithmatically
629
+ return null;
630
+ }
631
+ }
632
+ return result.toFixed(2);
633
+ case 'addition':
634
+ result = 0;
635
+ // eslint-disable-next-line no-restricted-syntax
636
+ for (const v of argValues) {
637
+ if (typeof v === 'number') {
638
+ result += v;
639
+ } else {
640
+ // if there is a non number argument simply return null
641
+ // non numbers can't be operated arithmatically
642
+ return null;
643
+ }
644
+ }
645
+ return result.toFixed(2);
646
+ default:
647
+ return null;
648
+ }
649
+ };
650
+
651
+ /**
652
+ * Handle type and format
653
+ * @param {*} formattedVal
654
+ * @param {*} formattingType
655
+ * @returns
656
+ */
657
+ const formatValues = (formattedVal, formattingType) => {
658
+ let curFormattedVal = formattedVal;
659
+
660
+ const formattingFunctions = {
661
+ jsonStringify: () => {
662
+ curFormattedVal = JSON.stringify(formattedVal);
663
+ },
664
+ jsonStringifyOnObject: () => {
665
+ if (typeof formattedVal !== 'string') {
666
+ curFormattedVal = JSON.stringify(formattedVal);
667
+ }
668
+ },
669
+ toString: () => {
670
+ curFormattedVal = String(formattedVal);
671
+ },
672
+ toNumber: () => {
673
+ curFormattedVal = Number(formattedVal);
674
+ },
675
+ toFloat: () => {
676
+ curFormattedVal = parseFloat(formattedVal);
677
+ },
678
+ toInt: () => {
679
+ curFormattedVal = parseInt(formattedVal, 10);
680
+ },
681
+ toLower: () => {
682
+ curFormattedVal = formattedVal.toString().toLowerCase();
683
+ },
684
+ trim: () => {
685
+ if (typeof formattedVal === 'string') {
686
+ curFormattedVal = formattedVal.trim();
687
+ }
688
+ },
689
+ IsBoolean: () => {
690
+ curFormattedVal = true;
691
+ if (!(typeof formattedVal === 'boolean')) {
692
+ logger.debug('Boolean value missing, so dropping it');
693
+ curFormattedVal = false;
694
+ }
695
+ },
696
+ };
697
+
698
+ if (formattingType in formattingFunctions) {
699
+ const formattingFunction = formattingFunctions[formattingType];
700
+ formattingFunction();
701
+ }
702
+
703
+ return curFormattedVal;
704
+ };
705
+
706
+ /**
707
+ * format the value as per the metadata values
708
+ * Expected metadata keys are: (according to precedence)
709
+ * type, typeFormat: expected data type
710
+ * @param {*} value
711
+ * @param {*} metadata
712
+ * @returns
713
+ */
714
+ const handleMetadataForValue = (value, metadata) => {
715
+ if (!metadata) {
716
+ return value;
717
+ }
718
+
719
+ const { type: valFormat, defaultValue } = metadata;
720
+
721
+ // if value is null and defaultValue is supplied - use that
722
+ if (!isDefinedAndNotNull(value)) {
723
+ return defaultValue || value;
724
+ }
725
+
726
+ // we've got a correct value. start processing
727
+ let formattedVal = value;
728
+ if (valFormat) {
729
+ if (Array.isArray(valFormat)) {
730
+ valFormat.forEach((eachType) => {
731
+ formattedVal = formatValues(formattedVal, eachType);
732
+ });
733
+ } else {
734
+ formattedVal = formatValues(formattedVal, valFormat);
735
+ }
736
+ }
737
+
738
+ return formattedVal;
739
+ };
740
+
741
+ /**
742
+ * Finds and returns the value of key from message
743
+ * @param {*} message
744
+ * @param {*} sourceKeys
745
+ * @returns
746
+ */
747
+ const getValueFromMessage = (message, sourceKeys) => {
748
+ if (Array.isArray(sourceKeys) && sourceKeys.length > 0) {
749
+ // eslint-disable-next-line no-restricted-syntax
750
+ for (const sourceKey of sourceKeys) {
751
+ let val;
752
+ if (typeof sourceKey === 'object') {
753
+ val = handleSourceKeysOperation({
754
+ message,
755
+ operationObject: sourceKey,
756
+ });
757
+ } else {
758
+ val = get(message, sourceKey);
759
+ }
760
+ if (val || val === false || val === 0) {
761
+ // return only if the value is valid.
762
+ // else look for next possible source in precedence
763
+ return val;
764
+ }
765
+ }
766
+ return null;
767
+ }
768
+
769
+ if (typeof sourceKeys === 'object') {
770
+ // if the sourceKey is an object we expect it to be a operation
771
+ return handleSourceKeysOperation({ message, operationObject: sourceKeys });
772
+ }
773
+
774
+ return get(message, sourceKeys);
775
+ };
776
+
777
+ /**
778
+ * Using this function we can create a payload from a mapping object.
779
+ * @param {*} object = {
780
+ traits:{
781
+ name: "abcd efgh",
782
+ address: {
783
+ city: "xyz"
784
+ }
785
+ }
786
+ }
787
+ * @param {*} mapper = [
788
+ {
789
+ destKey: "userName",
790
+ sourceKeys: "traits.name",
791
+ },
792
+ {
793
+ destKey: "city",
794
+ sourceKeys: "traits.address.city",
795
+ },
796
+ ]
797
+ * @returns {
798
+ userName : "abcd efgh",
799
+ city : "xyz"
800
+ }
801
+
802
+ */
803
+ const constructPayload = (message, mapper) => {
804
+ const payload = {};
805
+ // Mapping JSON should be an array
806
+ if (Array.isArray(mapper) && mapper.length > 0) {
807
+ mapper.forEach((mapping) => {
808
+ const { sourceKeys, destKey, metadata } = mapping;
809
+ const value = handleMetadataForValue(getValueFromMessage(message, sourceKeys), metadata);
810
+ if ((value || value === 0 || value === false) && destKey) {
811
+ // set the value only if correct
812
+ payload[destKey] = value;
813
+ }
814
+ });
815
+ }
816
+ return payload;
817
+ };
818
+
819
+ const countDigits = (number) => (number ? number.toString().length : 0);
820
+
821
+ /**
822
+ * A function to convert non-string IDs to string format
823
+ * @param {any} id
824
+ * @returns
825
+ */
826
+ const getStringId = (id) =>
827
+ typeof id === 'string' || typeof id === 'undefined' || id === null ? id : JSON.stringify(id);
828
+
829
+ /**
830
+ * A function to validate and return Residency server input
831
+ * @returns string/undefined
832
+ */
833
+ const getResidencyServer = (options) => {
834
+ const region = options ? options.residencyServer : undefined;
835
+ if (region) {
836
+ if (typeof region !== 'string' || !RESIDENCY_SERVERS.includes(region.toUpperCase())) {
837
+ logger.error('Invalid residencyServer input');
838
+ return undefined;
839
+ }
840
+ return region.toUpperCase();
841
+ }
842
+ return undefined;
843
+ };
844
+
845
+ const isValidServerUrl = (serverUrl) =>
846
+ typeof serverUrl === 'string' && serverUrl.trim().length > 0;
847
+
848
+ /**
849
+ * A function to get url from source config response
850
+ * @param {array} urls An array of objects containing urls
851
+ * @returns
852
+ */
853
+ const getDefaultUrlofRegion = (urls) => {
854
+ let url;
855
+ if (Array.isArray(urls) && urls.length > 0) {
856
+ const obj = urls.find((elem) => elem.default === true);
857
+ if (obj && isValidServerUrl(obj.url)) {
858
+ return obj.url;
859
+ }
860
+ }
861
+ return url;
862
+ };
863
+
864
+ /**
865
+ * A function to determine the dataPlaneUrl
866
+ * @param {Object} dataPlaneUrls An object containing dataPlaneUrl for different region
867
+ * @returns string
868
+ */
869
+ const resolveDataPlaneUrl = (response, serverUrl, options) => {
870
+ try {
871
+ const dataPlanes = response.source.dataplanes || {};
872
+ // Check if dataPlanes object is present in source config
873
+ if (Object.keys(dataPlanes).length > 0) {
874
+ const inputRegion = getResidencyServer(options);
875
+ const regionUrlArr = dataPlanes[inputRegion] || dataPlanes[DEFAULT_REGION];
876
+
877
+ if (regionUrlArr) {
878
+ const defaultUrl = getDefaultUrlofRegion(regionUrlArr);
879
+ if (defaultUrl) {
880
+ return defaultUrl;
881
+ }
882
+ }
883
+ }
884
+ // return the dataPlaneUrl provided in load API(if available)
885
+ if (isValidServerUrl(serverUrl)) {
886
+ return serverUrl;
887
+ }
888
+ // return the default dataPlaneUrl
889
+ // return DEFAULT_DATAPLANE_URL; // we do not want to divert the events to hosted data plane url
890
+
891
+ // Throw error if correct data plane url is not provided
892
+ throw Error('Unable to load the SDK due to invalid data plane url');
893
+ } catch (e) {
894
+ throw Error(e);
895
+ }
896
+ };
897
+
898
+ /**
899
+ * Function to return the state of consent management based on config passed in load options
900
+ * @param {Object} cookieConsentOptions
901
+ * @returns
902
+ */
903
+ const fetchCookieConsentState = (cookieConsentOptions) => {
904
+ let isEnabled = false;
905
+ // eslint-disable-next-line consistent-return
906
+ Object.keys(cookieConsentOptions).forEach((e) => {
907
+ const isSupportedAndEnabled =
908
+ SUPPORTED_CONSENT_MANAGERS.includes(e) &&
909
+ typeof cookieConsentOptions[e].enabled === 'boolean' &&
910
+ cookieConsentOptions[e].enabled === true;
911
+
912
+ if (isSupportedAndEnabled) {
913
+ isEnabled = true;
914
+ }
915
+ });
916
+ return isEnabled;
917
+ };
918
+
919
+ const parseQueryString = (url) => {
920
+ const result = {};
921
+ try {
922
+ const urlObj = new URL(url);
923
+ urlObj.searchParams.forEach((value, qParam) => {
924
+ result[qParam] = value;
925
+ });
926
+ } catch (err) {
927
+ // Do nothing
928
+ }
929
+ return result;
930
+ };
931
+
932
+ export {
933
+ replacer,
934
+ generateUUID,
935
+ getCurrentTimeFormatted,
936
+ getJSONTrimmed,
937
+ getJSON,
938
+ getRevenue,
939
+ getUserProvidedConfigUrl,
940
+ findAllEnabledDestinations,
941
+ transformToRudderNames,
942
+ transformToServerNames,
943
+ rejectArr,
944
+ type,
945
+ flattenJsonPayload,
946
+ checkReservedKeywords,
947
+ extractCustomFields,
948
+ getDefinedTraits,
949
+ isObject,
950
+ isArray,
951
+ isDefinedAndNotNull,
952
+ getDataFromSource,
953
+ removeTrailingSlashes,
954
+ constructPayload,
955
+ getConfigUrl,
956
+ getSDKUrlInfo,
957
+ countDigits,
958
+ getStringId,
959
+ resolveDataPlaneUrl,
960
+ fetchCookieConsentState,
961
+ parseQueryString,
962
+ isEmptyObject,
963
+ };
964
+
965
+ export { commonNames } from './integration_cname';
966
+ export { default as get } from 'get-value';