castled-js-sdk 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +8 -0
- package/.eslintignore +15 -0
- package/.eslintrc.json +41 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- package/.github/pull_request_template.md +22 -0
- package/.github/workflows/build-and-quality-checks.yml +50 -0
- package/.github/workflows/deploy-beta.yml +55 -0
- package/.github/workflows/deploy-cdn.yml +113 -0
- package/.github/workflows/deploy-npm.yml +80 -0
- package/.github/workflows/deploy-sanity-suite.yml +46 -0
- package/.github/workflows/test.yml +39 -0
- package/.husky/commit-msg +4 -0
- package/.husky/pre-commit +4 -0
- package/.nvmrc +1 -0
- package/.prettierignore +10 -0
- package/.prettierrc +7 -0
- package/.size-limit.js +30 -0
- package/.versionrc +12 -0
- package/LICENSE +67 -0
- package/README.md +102 -22
- package/__mocks__/BraveBrowser.js +9 -0
- package/__mocks__/fixtures.js +130 -0
- package/__mocks__/msw.handlers.js +34 -0
- package/__mocks__/msw.server.js +6 -0
- package/__tests__/camelcase.test.js +29 -0
- package/__tests__/data-residency.test.js +238 -0
- package/__tests__/features/core/metrics/errorReporting/ErrorReportingService.test.js +80 -0
- package/__tests__/integrations/BingAds/__mocks__/data.js +17 -0
- package/__tests__/integrations/BingAds/browser.test.js +148 -0
- package/__tests__/integrations/BingAds/utils.test.js +138 -0
- package/__tests__/integrations/Braze/Braze.test.js +462 -0
- package/__tests__/integrations/FacebookPixel/FacebookPixel.test.js +347 -0
- package/__tests__/integrations/FacebookPixel/utils.test.js +688 -0
- package/__tests__/integrations/Fullstory/fullstory.test.js +147 -0
- package/__tests__/integrations/GA4/__mocks__/data.js +1480 -0
- package/__tests__/integrations/GA4/browser.test.js +94 -0
- package/__tests__/integrations/GA4/utils.test.js +337 -0
- package/__tests__/integrations/GoogleAds/__mocks__/data.js +235 -0
- package/__tests__/integrations/GoogleAds/browser.test.js +202 -0
- package/__tests__/integrations/GoogleAds/utils.test.js +110 -0
- package/__tests__/integrations/LaunchDarkly/__mocks__/data.js +61 -0
- package/__tests__/integrations/LaunchDarkly/browser.test.js +148 -0
- package/__tests__/integrations/LaunchDarkly/utils.test.js +36 -0
- package/__tests__/integrations/Lemnisk/lemnisk.test.js +156 -0
- package/__tests__/integrations/Mixpanel/browser.test.js +60 -0
- package/__tests__/integrations/PinterestTag/__mocks__/data.js +24 -0
- package/__tests__/integrations/PinterestTag/utils.test.js +19 -0
- package/__tests__/integrations/TikTokAds/tiktokads.test.js +231 -0
- package/__tests__/ketchConsent.test.js +49 -0
- package/__tests__/oneTrustCookieConsent.test.js +89 -0
- package/__tests__/script.test.js +167 -0
- package/__tests__/service-worker/__mocks__/fixtures.js +79 -0
- package/__tests__/service-worker/__mocks__/msw.server.js +12 -0
- package/__tests__/service-worker/index.test.js +109 -0
- package/__tests__/transformationHandler.test.js +169 -0
- package/__tests__/utils/IntegrationsData.test.js +105 -0
- package/__tests__/utils/ObjectUtils.test.js +227 -0
- package/__tests__/utils/cdnPaths.test.js +63 -0
- package/__tests__/utils/clientHint.test.js +87 -0
- package/__tests__/utils/commonUtils.test.js +271 -0
- package/__tests__/utils/errorHandler.test.js +60 -0
- package/__tests__/utils/eventProcessorUtils.test.js +266 -0
- package/__tests__/utils/navigator.test.js +38 -0
- package/__tests__/utils/preProcessQueue.test.js +78 -0
- package/__tests__/utils/screenDetails.test.js +19 -0
- package/__tests__/utils/utils.test.js +348 -0
- package/assets/integrations/AdobeAnalytics/adobe-analytics-heartbeat.js +12384 -0
- package/assets/integrations/AdobeAnalytics/adobe-analytics-js.js +5046 -0
- package/babel.config.json +34 -0
- package/commitlint.config.js +3 -0
- package/examples/SampleEventsTest.Html +133 -0
- package/examples/TC/TC_001.js +4 -0
- package/examples/TC/TC_002.js +4 -0
- package/examples/TC/TC_003.js +4 -0
- package/examples/TC/TC_004.js +4 -0
- package/examples/TC/TC_005.js +4 -0
- package/examples/chrome-extension/USAGE.md +131 -0
- package/examples/chrome-extension/background-script/LICENSE +21 -0
- package/examples/chrome-extension/background-script/README.md +101 -0
- package/examples/chrome-extension/background-script/foreground.js +7 -0
- package/examples/chrome-extension/background-script/logo/logo-128.png +0 -0
- package/examples/chrome-extension/background-script/logo/logo-16.png +0 -0
- package/examples/chrome-extension/background-script/logo/logo-48.png +0 -0
- package/examples/chrome-extension/background-script/logo/logo.svg +138 -0
- package/examples/chrome-extension/background-script/manifest.json +37 -0
- package/examples/chrome-extension/background-script/popup/popup.css +11 -0
- package/examples/chrome-extension/background-script/popup/popup.html +11 -0
- package/examples/chrome-extension/background-script/rudderAnalytics.js +5345 -0
- package/examples/chrome-extension/background-script/service-worker.js +32 -0
- package/examples/chrome-extension/background-script/settings/settings.css +8 -0
- package/examples/chrome-extension/background-script/settings/settings.html +12 -0
- package/examples/chrome-extension/background-script-websockets/LICENSE +21 -0
- package/examples/chrome-extension/background-script-websockets/README.md +101 -0
- package/examples/chrome-extension/background-script-websockets/foreground.js +7 -0
- package/examples/chrome-extension/background-script-websockets/logo/logo-128.png +0 -0
- package/examples/chrome-extension/background-script-websockets/logo/logo-16.png +0 -0
- package/examples/chrome-extension/background-script-websockets/logo/logo-48.png +0 -0
- package/examples/chrome-extension/background-script-websockets/logo/logo.svg +138 -0
- package/examples/chrome-extension/background-script-websockets/manifest.json +37 -0
- package/examples/chrome-extension/background-script-websockets/popup/popup.css +11 -0
- package/examples/chrome-extension/background-script-websockets/popup/popup.html +11 -0
- package/{service-worker/index.es.js → examples/chrome-extension/background-script-websockets/rudderAnalytics.js} +1283 -1274
- package/examples/chrome-extension/background-script-websockets/service-worker.js +60 -0
- package/examples/chrome-extension/background-script-websockets/settings/settings.css +8 -0
- package/examples/chrome-extension/background-script-websockets/settings/settings.html +12 -0
- package/examples/chrome-extension/content-script/LICENSE +21 -0
- package/examples/chrome-extension/content-script/README.md +101 -0
- package/examples/chrome-extension/content-script/foreground.js +65 -0
- package/examples/chrome-extension/content-script/logo/logo-128.png +0 -0
- package/examples/chrome-extension/content-script/logo/logo-16.png +0 -0
- package/examples/chrome-extension/content-script/logo/logo-48.png +0 -0
- package/examples/chrome-extension/content-script/logo/logo.svg +138 -0
- package/examples/chrome-extension/content-script/manifest.json +39 -0
- package/examples/chrome-extension/content-script/popup/popup.css +11 -0
- package/examples/chrome-extension/content-script/popup/popup.html +11 -0
- package/examples/chrome-extension/content-script/service-worker-utils.js +17 -0
- package/examples/chrome-extension/content-script/service-worker.js +12 -0
- package/examples/chrome-extension/content-script/settings/settings.css +8 -0
- package/examples/chrome-extension/content-script/settings/settings.html +12 -0
- package/examples/chrome-extension/websocket-server/server.mjs +19 -0
- package/examples/html/autotrack-test.html +96 -0
- package/examples/html/ecomm_test.html +358 -0
- package/examples/html/script-test.html +968 -0
- package/examples/html/segment.html +177 -0
- package/examples/html/test_poster.jpg +0 -0
- package/examples/umd/index.js +11 -0
- package/examples/umd/package.json +42 -0
- package/examples/umd/rollup.config.js +36 -0
- package/examples/umd/tests/test.html +5 -0
- package/examples/v1.1/tc1.html +139 -0
- package/examples/v1.1/tc2.1.html +140 -0
- package/examples/v1.1/tc2.2.html +139 -0
- package/examples/v1.1/tc2.3.html +143 -0
- package/examples/v1.1/tc3.1.html +139 -0
- package/examples/v1.1/tc3.2.html +142 -0
- package/examples/v1.1/tc3.3.html +142 -0
- package/examples/v1.1/tc3.4.html +144 -0
- package/examples/v1.1/tc3.5.html +142 -0
- package/examples/v1.1/tc4.html +142 -0
- package/examples/v1.1/tc5.html +150 -0
- package/github-release.config.js +5 -0
- package/jest/jest.global-setup.js +3 -0
- package/jest/jest.polyfills.js +10 -0
- package/jest/jest.setup-dom.js +49 -0
- package/jest.config.js +196 -0
- package/package.json +198 -39
- package/packages/npm/README.md +125 -0
- package/packages/npm/package.json +50 -0
- package/patches/@segment+localstorage-retry+1.3.0.patch +73 -0
- package/patches/@segment+top-domain+3.0.1.patch +34 -0
- package/public/index.html +136 -0
- package/public/list_integration_sdks.html +390 -0
- package/rollup-configs/rollup.integrations.config.js +29 -0
- package/rollup-configs/rollup.sdk.browser.js +32 -0
- package/rollup-configs/rollup.sdk.npm.js +43 -0
- package/rollup-configs/rollup.utilities.js +120 -0
- package/rollup-configs/rollup.worker.config.js +37 -0
- package/sanity-suite/.babelrc +33 -0
- package/sanity-suite/.env.example +6 -0
- package/sanity-suite/__mocks__/alias1.json +137 -0
- package/sanity-suite/__mocks__/alias2.json +97 -0
- package/sanity-suite/__mocks__/alias5.json +103 -0
- package/sanity-suite/__mocks__/alias6.json +137 -0
- package/sanity-suite/__mocks__/group1.json +120 -0
- package/sanity-suite/__mocks__/group2.json +86 -0
- package/sanity-suite/__mocks__/group4.json +101 -0
- package/sanity-suite/__mocks__/group5.json +67 -0
- package/sanity-suite/__mocks__/group6.json +66 -0
- package/sanity-suite/__mocks__/identify1.json +136 -0
- package/sanity-suite/__mocks__/identify2.json +102 -0
- package/sanity-suite/__mocks__/identify3.json +99 -0
- package/sanity-suite/__mocks__/identify4.json +65 -0
- package/sanity-suite/__mocks__/identify5.json +102 -0
- package/sanity-suite/__mocks__/identify6.json +103 -0
- package/sanity-suite/__mocks__/identify7.json +102 -0
- package/sanity-suite/__mocks__/identify8.json +103 -0
- package/sanity-suite/__mocks__/page1.json +119 -0
- package/sanity-suite/__mocks__/page2.json +86 -0
- package/sanity-suite/__mocks__/page4.json +112 -0
- package/sanity-suite/__mocks__/page5.json +79 -0
- package/sanity-suite/__mocks__/page6.json +77 -0
- package/sanity-suite/__mocks__/page7.json +77 -0
- package/sanity-suite/__mocks__/page8.json +75 -0
- package/sanity-suite/__mocks__/page9.json +155 -0
- package/sanity-suite/__mocks__/sourceConfig1.json +988 -0
- package/sanity-suite/__mocks__/track1.json +150 -0
- package/sanity-suite/__mocks__/track2.json +118 -0
- package/sanity-suite/__mocks__/track4.json +134 -0
- package/sanity-suite/__mocks__/track5.json +102 -0
- package/sanity-suite/__mocks__/track6.json +81 -0
- package/sanity-suite/__mocks__/track7.json +81 -0
- package/sanity-suite/package-lock.json +7951 -0
- package/sanity-suite/package.json +67 -0
- package/sanity-suite/public/eventFiltering/index-cdn.html +112 -0
- package/sanity-suite/public/eventFiltering/index-local.html +109 -0
- package/sanity-suite/public/eventFiltering/index-npm.html +92 -0
- package/sanity-suite/public/index-cdn.html +112 -0
- package/sanity-suite/public/index-local.html +109 -0
- package/sanity-suite/public/index-npm.html +92 -0
- package/sanity-suite/public/preloadBuffer/index-cdn.html +112 -0
- package/sanity-suite/public/preloadBuffer/index-local.html +109 -0
- package/sanity-suite/public/preloadBuffer/index-npm.html +92 -0
- package/sanity-suite/rollup.config.js +199 -0
- package/sanity-suite/src/index-npm.js +65 -0
- package/sanity-suite/src/index.js +5 -0
- package/sanity-suite/src/testBook/ResultAssertions.js +51 -0
- package/sanity-suite/src/testBook/TestBook.js +345 -0
- package/sanity-suite/src/testBook/ignoredProperties.js +150 -0
- package/sanity-suite/src/testBook/index.js +11 -0
- package/sanity-suite/src/testBookSuites/alias.js +287 -0
- package/sanity-suite/src/testBookSuites/group.js +240 -0
- package/sanity-suite/src/testBookSuites/identify.js +455 -0
- package/sanity-suite/src/testBookSuites/index.js +31 -0
- package/sanity-suite/src/testBookSuites/page.js +258 -0
- package/sanity-suite/src/testBookSuites/sourceConfig.js +84 -0
- package/sanity-suite/src/testBookSuites/track.js +451 -0
- package/scripts/integrationBuildScript.js +77 -0
- package/scripts/run_tests.sh +6 -0
- package/src/core/analytics.js +1668 -0
- package/src/features/core/cookieConsent/CookieConsentFactory.js +32 -0
- package/src/features/core/cookieConsent/OneTrust/browser.js +102 -0
- package/src/features/core/cookieConsent/OneTrust/index.js +3 -0
- package/src/features/core/cookieConsent/ketch/browser.js +114 -0
- package/src/features/core/cookieConsent/ketch/index.js +1 -0
- package/src/features/core/deviceModeTransformation/transformationHandler.js +189 -0
- package/src/features/core/deviceModeTransformation/util.js +23 -0
- package/src/features/core/metrics/errorReporting/ErrorReportingService.js +116 -0
- package/src/features/core/metrics/errorReporting/providers/Bugsnag.js +240 -0
- package/src/features/core/session/index.js +207 -0
- package/src/integrations/ActiveCampaign/browser.js +52 -0
- package/src/integrations/ActiveCampaign/constants.js +14 -0
- package/src/integrations/ActiveCampaign/index.js +3 -0
- package/src/integrations/ActiveCampaign/nativeSdkLoader.js +24 -0
- package/src/integrations/AdobeAnalytics/browser.js +276 -0
- package/src/integrations/AdobeAnalytics/constants.js +14 -0
- package/src/integrations/AdobeAnalytics/eCommHandle.js +56 -0
- package/src/integrations/AdobeAnalytics/heartbeatHandle.js +266 -0
- package/src/integrations/AdobeAnalytics/index.js +1 -0
- package/src/integrations/AdobeAnalytics/util.js +678 -0
- package/src/integrations/Adroll/browser.js +125 -0
- package/src/integrations/Adroll/constants.js +10 -0
- package/src/integrations/Adroll/index.js +1 -0
- package/src/integrations/Adroll/util.js +48 -0
- package/src/integrations/Amplitude/browser.js +352 -0
- package/src/integrations/Amplitude/constants.js +9 -0
- package/src/integrations/Amplitude/index.js +1 -0
- package/src/integrations/Amplitude/nativeSdkLoader.js +112 -0
- package/src/integrations/Amplitude/test/test_amplitude.html +157 -0
- package/src/integrations/Amplitude/utils.js +25 -0
- package/src/integrations/Appcues/browser.js +79 -0
- package/src/integrations/Appcues/constants.js +9 -0
- package/src/integrations/Appcues/index.js +1 -0
- package/src/integrations/Axeptio/browser.js +61 -0
- package/src/integrations/Axeptio/constants.js +8 -0
- package/src/integrations/Axeptio/index.js +1 -0
- package/src/integrations/Axeptio/nativeSdkLoader.js +14 -0
- package/src/integrations/Axeptio/utils.js +16 -0
- package/src/integrations/BingAds/browser.js +79 -0
- package/src/integrations/BingAds/constants.js +12 -0
- package/src/integrations/BingAds/index.js +1 -0
- package/src/integrations/BingAds/nativeSdkLoader.js +30 -0
- package/src/integrations/BingAds/utils.js +101 -0
- package/src/integrations/Braze/browser.js +284 -0
- package/src/integrations/Braze/constants.js +11 -0
- package/src/integrations/Braze/index.js +1 -0
- package/src/integrations/Braze/nativeSdkLoader.js +35 -0
- package/src/integrations/Braze/utils.js +51 -0
- package/src/integrations/Bugsnag/browser.js +60 -0
- package/src/integrations/Bugsnag/constants.js +8 -0
- package/src/integrations/Bugsnag/index.js +1 -0
- package/src/integrations/Chartbeat/browser.js +148 -0
- package/src/integrations/Chartbeat/constants.js +10 -0
- package/src/integrations/Chartbeat/index.js +1 -0
- package/src/integrations/Chartbeat/nativeSdkLoader.js +7 -0
- package/src/integrations/Clevertap/browser.js +206 -0
- package/src/integrations/Clevertap/constants.js +8 -0
- package/src/integrations/Clevertap/index.js +1 -0
- package/src/integrations/Comscore/browser.js +130 -0
- package/src/integrations/Comscore/constants.js +11 -0
- package/src/integrations/Comscore/index.js +1 -0
- package/src/integrations/Comscore/nativeSdkLoader.js +10 -0
- package/src/integrations/ConvertFlow/browser.js +59 -0
- package/src/integrations/ConvertFlow/constants.js +15 -0
- package/src/integrations/ConvertFlow/index.js +1 -0
- package/src/integrations/ConvertFlow/utils.js +107 -0
- package/src/integrations/Criteo/browser.js +155 -0
- package/src/integrations/Criteo/constants.js +11 -0
- package/src/integrations/Criteo/index.js +1 -0
- package/src/integrations/Criteo/utils.js +343 -0
- package/src/integrations/CustomerIO/browser.js +74 -0
- package/src/integrations/CustomerIO/constants.js +10 -0
- package/src/integrations/CustomerIO/index.js +1 -0
- package/src/integrations/CustomerIO/nativeSdkLoader.js +31 -0
- package/src/integrations/DCMFloodlight/browser.js +240 -0
- package/src/integrations/DCMFloodlight/constants.js +15 -0
- package/src/integrations/DCMFloodlight/index.js +1 -0
- package/src/integrations/DCMFloodlight/utils.js +336 -0
- package/src/integrations/Drip/browser.js +169 -0
- package/src/integrations/Drip/constants.js +8 -0
- package/src/integrations/Drip/index.js +1 -0
- package/src/integrations/Drip/nativeSdkLoader.js +10 -0
- package/src/integrations/Drip/utils.js +29 -0
- package/src/integrations/Engage/browser.js +124 -0
- package/src/integrations/Engage/constants.js +16 -0
- package/src/integrations/Engage/index.js +1 -0
- package/src/integrations/Engage/nativeSdkLoader.js +25 -0
- package/src/integrations/Engage/utils.js +69 -0
- package/src/integrations/FacebookPixel/browser.js +313 -0
- package/src/integrations/FacebookPixel/constants.js +77 -0
- package/src/integrations/FacebookPixel/index.js +1 -0
- package/src/integrations/FacebookPixel/utils.js +310 -0
- package/src/integrations/Fullstory/browser.js +169 -0
- package/src/integrations/Fullstory/constants.js +13 -0
- package/src/integrations/Fullstory/index.js +1 -0
- package/src/integrations/Fullstory/nativeSdkLoader.js +69 -0
- package/src/integrations/GA/browser.js +816 -0
- package/src/integrations/GA/constants.js +10 -0
- package/src/integrations/GA/index.js +1 -0
- package/src/integrations/GA/index.test.js +184 -0
- package/src/integrations/GA360/browser.js +58 -0
- package/src/integrations/GA360/constants.js +14 -0
- package/src/integrations/GA360/index.js +1 -0
- package/src/integrations/GA4/browser.js +264 -0
- package/src/integrations/GA4/config.js +296 -0
- package/src/integrations/GA4/constants.js +15 -0
- package/src/integrations/GA4/index.js +1 -0
- package/src/integrations/GA4/utils.js +329 -0
- package/src/integrations/GoogleAds/browser.js +212 -0
- package/src/integrations/GoogleAds/constants.js +11 -0
- package/src/integrations/GoogleAds/index.js +1 -0
- package/src/integrations/GoogleAds/nativeSdkLoader.js +26 -0
- package/src/integrations/GoogleAds/utils.js +117 -0
- package/src/integrations/GoogleOptimize/browser.js +79 -0
- package/src/integrations/GoogleOptimize/constants.js +13 -0
- package/src/integrations/GoogleOptimize/index.js +1 -0
- package/src/integrations/GoogleTagManager/browser.js +95 -0
- package/src/integrations/GoogleTagManager/constants.js +10 -0
- package/src/integrations/GoogleTagManager/index.js +1 -0
- package/src/integrations/GoogleTagManager/nativeSdkLoader.js +21 -0
- package/src/integrations/Heap/browser.js +67 -0
- package/src/integrations/Heap/constants.js +9 -0
- package/src/integrations/Heap/index.js +1 -0
- package/src/integrations/Heap/nativeSdkLoader.js +40 -0
- package/src/integrations/Heap/util.js +23 -0
- package/src/integrations/Hotjar/browser.js +86 -0
- package/src/integrations/Hotjar/constants.js +10 -0
- package/src/integrations/Hotjar/index.js +1 -0
- package/src/integrations/Hotjar/nativeSdkLoader.js +21 -0
- package/src/integrations/HubSpot/browser.js +96 -0
- package/src/integrations/HubSpot/constants.js +11 -0
- package/src/integrations/HubSpot/index.js +1 -0
- package/src/integrations/INTERCOM/browser.js +107 -0
- package/src/integrations/INTERCOM/constants.js +8 -0
- package/src/integrations/INTERCOM/index.js +1 -0
- package/src/integrations/INTERCOM/nativeSdkLoader.js +46 -0
- package/src/integrations/INTERCOM/utils.js +68 -0
- package/src/integrations/Iterable/browser.js +185 -0
- package/src/integrations/Iterable/constants.js +8 -0
- package/src/integrations/Iterable/index.js +1 -0
- package/src/integrations/Iterable/utils.js +111 -0
- package/src/integrations/June/browser.js +98 -0
- package/src/integrations/June/constants.js +8 -0
- package/src/integrations/June/index.js +1 -0
- package/src/integrations/Keen/browser.js +153 -0
- package/src/integrations/Keen/constants.js +10 -0
- package/src/integrations/Keen/index.js +1 -0
- package/src/integrations/Kissmetrics/browser.js +254 -0
- package/src/integrations/Kissmetrics/constants.js +8 -0
- package/src/integrations/Kissmetrics/index.js +1 -0
- package/src/integrations/Kissmetrics/nativeSdkLoader.js +23 -0
- package/src/integrations/Klaviyo/browser.js +195 -0
- package/src/integrations/Klaviyo/constants.js +8 -0
- package/src/integrations/Klaviyo/index.js +1 -0
- package/src/integrations/Klaviyo/util.js +91 -0
- package/src/integrations/LaunchDarkly/browser.js +74 -0
- package/src/integrations/LaunchDarkly/constants.js +11 -0
- package/src/integrations/LaunchDarkly/index.js +1 -0
- package/src/integrations/LaunchDarkly/utils.js +24 -0
- package/src/integrations/Lemnisk/browser.js +85 -0
- package/src/integrations/Lemnisk/constants.js +13 -0
- package/src/integrations/Lemnisk/index.js +1 -0
- package/src/integrations/Lemnisk/nativeSdkLoader.js +34 -0
- package/src/integrations/LinkedInInsightTag/browser.js +71 -0
- package/src/integrations/LinkedInInsightTag/constants.js +16 -0
- package/src/integrations/LinkedInInsightTag/index.js +1 -0
- package/src/integrations/LiveChat/browser.js +82 -0
- package/src/integrations/LiveChat/constants.js +12 -0
- package/src/integrations/LiveChat/index.js +1 -0
- package/src/integrations/LiveChat/nativeSdkLoader.js +40 -0
- package/src/integrations/LiveChat/util.js +71 -0
- package/src/integrations/Lotame/LotameStorage.js +21 -0
- package/src/integrations/Lotame/browser.js +172 -0
- package/src/integrations/Lotame/constants.js +8 -0
- package/src/integrations/Lotame/index.js +1 -0
- package/src/integrations/Lytics/browser.js +87 -0
- package/src/integrations/Lytics/constants.js +8 -0
- package/src/integrations/Lytics/index.js +1 -0
- package/src/integrations/Lytics/nativeSdkLoader.js +77 -0
- package/src/integrations/Lytics/test/script-test-lytics.html +250 -0
- package/src/integrations/Matomo/browser.js +188 -0
- package/src/integrations/Matomo/constants.js +8 -0
- package/src/integrations/Matomo/index.js +1 -0
- package/src/integrations/Matomo/nativeSdkLoader.js +20 -0
- package/src/integrations/Matomo/util.js +417 -0
- package/src/integrations/MicrosoftClarity/browser.js +70 -0
- package/src/integrations/MicrosoftClarity/constants.js +14 -0
- package/src/integrations/MicrosoftClarity/index.js +1 -0
- package/src/integrations/MicrosoftClarity/nativeSdkLoader.js +22 -0
- package/src/integrations/Mixpanel/browser.js +326 -0
- package/src/integrations/Mixpanel/constants.js +11 -0
- package/src/integrations/Mixpanel/index.js +1 -0
- package/src/integrations/Mixpanel/nativeSdkLoader.js +71 -0
- package/src/integrations/Mixpanel/util.js +178 -0
- package/src/integrations/MoEngage/browser.js +133 -0
- package/src/integrations/MoEngage/constants.js +12 -0
- package/src/integrations/MoEngage/index.js +1 -0
- package/src/integrations/MoEngage/nativeSdkLoader.js +66 -0
- package/src/integrations/MoEngage/test/script-test-moengage.html +216 -0
- package/src/integrations/Mouseflow/browser.js +98 -0
- package/src/integrations/Mouseflow/constants.js +14 -0
- package/src/integrations/Mouseflow/index.js +1 -0
- package/src/integrations/Mouseflow/utils.js +27 -0
- package/src/integrations/Olark/browser.js +94 -0
- package/src/integrations/Olark/constants.js +8 -0
- package/src/integrations/Olark/index.js +1 -0
- package/src/integrations/Olark/nativeSdkLoader.js +31 -0
- package/src/integrations/Olark/utils.js +51 -0
- package/src/integrations/Optimizely/browser.js +230 -0
- package/src/integrations/Optimizely/constants.js +8 -0
- package/src/integrations/Optimizely/index.js +1 -0
- package/src/integrations/Optimizely/utils.js +23 -0
- package/src/integrations/Pendo/browser.js +119 -0
- package/src/integrations/Pendo/constants.js +8 -0
- package/src/integrations/Pendo/index.js +1 -0
- package/src/integrations/Pendo/nativeSdkLoader.js +32 -0
- package/src/integrations/PinterestTag/browser.js +241 -0
- package/src/integrations/PinterestTag/constants.js +19 -0
- package/src/integrations/PinterestTag/index.js +1 -0
- package/src/integrations/PinterestTag/nativeSdkLoader.js +19 -0
- package/src/integrations/PinterestTag/propertyMappingConfig.js +57 -0
- package/src/integrations/PinterestTag/test/input.js +180 -0
- package/src/integrations/PinterestTag/test/output.js +129 -0
- package/src/integrations/PinterestTag/utils.js +47 -0
- package/src/integrations/Podsights/browser.js +178 -0
- package/src/integrations/Podsights/constants.js +206 -0
- package/src/integrations/Podsights/index.js +1 -0
- package/src/integrations/Podsights/utils.js +65 -0
- package/src/integrations/PostAffiliatePro/browser.js +133 -0
- package/src/integrations/PostAffiliatePro/constants.js +13 -0
- package/src/integrations/PostAffiliatePro/index.js +1 -0
- package/src/integrations/PostAffiliatePro/utils.js +40 -0
- package/src/integrations/Posthog/browser.js +154 -0
- package/src/integrations/Posthog/constants.js +12 -0
- package/src/integrations/Posthog/index.js +1 -0
- package/src/integrations/Posthog/nativeSdkLoader.js +48 -0
- package/src/integrations/Posthog/test/test_posthog.html +77 -0
- package/src/integrations/Posthog/utils.js +36 -0
- package/src/integrations/ProfitWell/browser.js +72 -0
- package/src/integrations/ProfitWell/constants.js +12 -0
- package/src/integrations/ProfitWell/index.js +1 -0
- package/src/integrations/ProfitWell/nativeSdkLoader.js +25 -0
- package/src/integrations/Qualaroo/browser.js +116 -0
- package/src/integrations/Qualaroo/constants.js +8 -0
- package/src/integrations/Qualaroo/index.js +1 -0
- package/src/integrations/Qualaroo/utils.js +83 -0
- package/src/integrations/Qualtrics/browser.js +89 -0
- package/src/integrations/Qualtrics/constants.js +8 -0
- package/src/integrations/Qualtrics/index.js +1 -0
- package/src/integrations/Qualtrics/nativeSdkLoader.js +79 -0
- package/src/integrations/QuantumMetric/browser.js +63 -0
- package/src/integrations/QuantumMetric/constants.js +13 -0
- package/src/integrations/QuantumMetric/index.js +1 -0
- package/src/integrations/QuoraPixel/browser.js +64 -0
- package/src/integrations/QuoraPixel/constants.js +15 -0
- package/src/integrations/QuoraPixel/index.js +1 -0
- package/src/integrations/QuoraPixel/nativeSdkLoader.js +21 -0
- package/src/integrations/RedditPixel/browser.js +98 -0
- package/src/integrations/RedditPixel/constants.js +13 -0
- package/src/integrations/RedditPixel/index.js +1 -0
- package/src/integrations/RedditPixel/nativeSdkLoader.js +21 -0
- package/src/integrations/Refiner/browser.js +119 -0
- package/src/integrations/Refiner/constants.js +8 -0
- package/src/integrations/Refiner/index.js +1 -0
- package/src/integrations/Refiner/nativeSdkLoader.js +20 -0
- package/src/integrations/Refiner/utils.js +44 -0
- package/src/integrations/Rockerbox/browser.js +89 -0
- package/src/integrations/Rockerbox/constants.js +12 -0
- package/src/integrations/Rockerbox/index.js +1 -0
- package/src/integrations/Rockerbox/nativeSdkLoader.js +32 -0
- package/src/integrations/RollBar/browser.js +92 -0
- package/src/integrations/RollBar/constants.js +13 -0
- package/src/integrations/RollBar/index.js +1 -0
- package/src/integrations/RollBar/nativeSdkLoader.js +383 -0
- package/src/integrations/Satismeter/browser.js +94 -0
- package/src/integrations/Satismeter/constants.js +9 -0
- package/src/integrations/Satismeter/index.js +1 -0
- package/src/integrations/Satismeter/nativeSdkLoader.js +23 -0
- package/src/integrations/Satismeter/util.js +54 -0
- package/src/integrations/Sendinblue/browser.js +111 -0
- package/src/integrations/Sendinblue/constants.js +25 -0
- package/src/integrations/Sendinblue/index.js +1 -0
- package/src/integrations/Sendinblue/nativeSdkLoader.js +36 -0
- package/src/integrations/Sendinblue/utils.js +112 -0
- package/src/integrations/Sentry/browser.js +118 -0
- package/src/integrations/Sentry/constants.js +8 -0
- package/src/integrations/Sentry/index.js +1 -0
- package/src/integrations/Sentry/utils.js +80 -0
- package/src/integrations/Shynet/browser.js +97 -0
- package/src/integrations/Shynet/constants.js +15 -0
- package/src/integrations/Shynet/index.js +1 -0
- package/src/integrations/SnapEngage/browser.js +75 -0
- package/src/integrations/SnapEngage/constants.js +12 -0
- package/src/integrations/SnapEngage/index.js +1 -0
- package/src/integrations/SnapEngage/nativeSdkLoader.js +24 -0
- package/src/integrations/SnapEngage/util.js +63 -0
- package/src/integrations/SnapPixel/browser.js +232 -0
- package/src/integrations/SnapPixel/constants.js +13 -0
- package/src/integrations/SnapPixel/index.js +1 -0
- package/src/integrations/SnapPixel/nativeSdkLoader.js +20 -0
- package/src/integrations/SnapPixel/util.js +211 -0
- package/src/integrations/TVSquared/browser.js +96 -0
- package/src/integrations/TVSquared/constants.js +14 -0
- package/src/integrations/TVSquared/index.js +1 -0
- package/src/integrations/TVSquared/utils.js +40 -0
- package/src/integrations/TiktokAds/browser.js +103 -0
- package/src/integrations/TiktokAds/constants.js +86 -0
- package/src/integrations/TiktokAds/index.js +1 -0
- package/src/integrations/TiktokAds/nativeSdkLoader.js +52 -0
- package/src/integrations/TiktokAds/util.js +71 -0
- package/src/integrations/VWO/browser.js +131 -0
- package/src/integrations/VWO/constants.js +13 -0
- package/src/integrations/VWO/index.js +1 -0
- package/src/integrations/VWO/nativeSdkLoader.js +64 -0
- package/src/integrations/Vero/browser.js +165 -0
- package/src/integrations/Vero/constants.js +8 -0
- package/src/integrations/Vero/index.js +1 -0
- package/src/integrations/Woopra/browser.js +83 -0
- package/src/integrations/Woopra/constants.js +8 -0
- package/src/integrations/Woopra/index.js +1 -0
- package/src/integrations/Woopra/nativeSdkLoader.js +43 -0
- package/src/integrations/YandexMetrica/browser.js +143 -0
- package/src/integrations/YandexMetrica/constants.js +10 -0
- package/src/integrations/YandexMetrica/index.js +1 -0
- package/src/integrations/YandexMetrica/nativeSdkLoader.js +35 -0
- package/src/integrations/YandexMetrica/utils.js +138 -0
- package/src/integrations/index.js +155 -0
- package/src/service-worker/index.js +466 -0
- package/src/utils/EventRepository.js +78 -0
- package/src/utils/HtElement.js +33 -0
- package/src/utils/HtElementBuilder.js +29 -0
- package/src/utils/IntegrationsData.js +61 -0
- package/src/utils/JSFileLoader.js +66 -0
- package/src/utils/ObjectUtils.js +68 -0
- package/src/utils/PreProcessQueue.js +66 -0
- package/src/utils/RudderApp.js +9 -0
- package/src/utils/RudderContext.js +21 -0
- package/src/utils/RudderInfo.js +41 -0
- package/src/utils/RudderMessage.js +28 -0
- package/src/utils/ScriptLoader.js +53 -0
- package/src/utils/beaconQueue.js +133 -0
- package/src/utils/camelcase.js +48 -0
- package/src/utils/cdnPaths.js +43 -0
- package/src/utils/clientHint.js +28 -0
- package/src/utils/client_server_name.js +78 -0
- package/src/utils/commonUtils.js +207 -0
- package/src/utils/config_to_integration_names.js +80 -0
- package/src/utils/constants.js +82 -0
- package/src/utils/errorHandler.js +88 -0
- package/src/utils/eventProcessorUtils.js +53 -0
- package/src/utils/integration_cname.js +156 -0
- package/src/utils/linker/base64decoder.js +31 -0
- package/src/utils/linker/crc32.js +42 -0
- package/src/utils/linker/index.js +134 -0
- package/src/utils/linker/userLib.js +20 -0
- package/src/utils/logUtil.js +51 -0
- package/src/utils/logger.js +106 -0
- package/src/utils/navigator.js +32 -0
- package/src/utils/notifyError.js +16 -0
- package/src/utils/pageProperties.js +74 -0
- package/src/utils/screenDetails.js +23 -0
- package/src/utils/storage/cookie.js +93 -0
- package/src/utils/storage/index.js +3 -0
- package/src/utils/storage/storage.js +459 -0
- package/src/utils/storage/store.js +72 -0
- package/src/utils/storage/v3DecryptionUtils.js +19 -0
- package/src/utils/utils.js +966 -0
- package/src/utils/xhrModule.js +111 -0
- package/stats/AdobeAnalytics.html +4044 -0
- package/stats/Adroll.html +4044 -0
- package/stats/Amplitude.html +4044 -0
- package/stats/Appcues.html +4044 -0
- package/stats/BingAds.html +4044 -0
- package/stats/Braze.html +4044 -0
- package/stats/Bugsnag.html +4044 -0
- package/stats/Chartbeat.html +4044 -0
- package/stats/Clevertap.html +4044 -0
- package/stats/Comscore.html +4044 -0
- package/stats/ConvertFlow.html +4044 -0
- package/stats/Criteo.html +4044 -0
- package/stats/CustomerIO.html +4044 -0
- package/stats/DCMFloodlight.html +4044 -0
- package/stats/Drip.html +4044 -0
- package/stats/Engage.html +4044 -0
- package/stats/FacebookPixel.html +4044 -0
- package/stats/Fullstory.html +4044 -0
- package/stats/GA.html +4044 -0
- package/stats/GA360.html +4044 -0
- package/stats/GA4.html +4044 -0
- package/stats/GoogleAds.html +4044 -0
- package/stats/GoogleOptimize.html +4044 -0
- package/stats/GoogleTagManager.html +4044 -0
- package/stats/Heap.html +4044 -0
- package/stats/Hotjar.html +4044 -0
- package/stats/HubSpot.html +4044 -0
- package/stats/INTERCOM.html +4044 -0
- package/stats/Iterable.html +4044 -0
- package/stats/June.html +4044 -0
- package/stats/Keen.html +4044 -0
- package/stats/Kissmetrics.html +4044 -0
- package/stats/Klaviyo.html +4044 -0
- package/stats/LaunchDarkly.html +4044 -0
- package/stats/LinkedInInsightTag.html +4044 -0
- package/stats/LiveChat.html +4044 -0
- package/stats/Lotame.html +4044 -0
- package/stats/Lytics.html +4044 -0
- package/stats/Matomo.html +4044 -0
- package/stats/Mixpanel.html +4044 -0
- package/stats/MoEngage.html +4044 -0
- package/stats/Mouseflow.html +4044 -0
- package/stats/Optimizely.html +4044 -0
- package/stats/Pendo.html +4044 -0
- package/stats/PinterestTag.html +4044 -0
- package/stats/Podsights.html +4044 -0
- package/stats/PostAffiliatePro.html +4044 -0
- package/stats/Posthog.html +4044 -0
- package/stats/ProfitWell.html +4044 -0
- package/stats/Qualaroo.html +4044 -0
- package/stats/Qualtrics.html +4044 -0
- package/stats/QuantumMetric.html +4044 -0
- package/stats/QuoraPixel.html +4044 -0
- package/stats/RedditPixel.html +4044 -0
- package/stats/Refiner.html +4044 -0
- package/stats/Rockerbox.html +4044 -0
- package/stats/RollBar.html +4044 -0
- package/stats/Sentry.html +4044 -0
- package/stats/Shynet.html +4044 -0
- package/stats/SnapEngage.html +4044 -0
- package/stats/SnapPixel.html +4044 -0
- package/stats/TVSquared.html +4044 -0
- package/stats/VWO.html +4044 -0
- package/stats/Vero.html +4044 -0
- package/stats/Woopra.html +4044 -0
- package/stats/YandexMetrica.html +4044 -0
- package/stats/rudder-analytics.html +4044 -0
- package/index.es.js +0 -1
- package/index.js +0 -1
- package/service-worker/index.js +0 -5346
- /package/{index.d.ts → packages/npm/index.d.ts} +0 -0
- /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';
|