@adv-re/segment-wrapper 4.36.2 → 5.0.0-beta.0
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/README.md +50 -45
- package/dist/index.d.mts +17 -92
- package/dist/index.d.ts +17 -92
- package/dist/index.js +177 -307
- package/dist/index.mjs +174 -305
- package/package.json +2 -2
- package/umd/index.js +1 -1
package/dist/index.js
CHANGED
|
@@ -1517,7 +1517,6 @@ var require_adobeVisitorApi = __commonJS({
|
|
|
1517
1517
|
// src/index.ts
|
|
1518
1518
|
var index_exports = {};
|
|
1519
1519
|
__export(index_exports, {
|
|
1520
|
-
CONSENT_STATES: () => CONSENT_STATES,
|
|
1521
1520
|
EVENTS: () => EVENTS,
|
|
1522
1521
|
TCFEvents: () => TCFEvents,
|
|
1523
1522
|
UserGDPR: () => UserGDPR,
|
|
@@ -1527,6 +1526,7 @@ __export(index_exports, {
|
|
|
1527
1526
|
default: () => index_default,
|
|
1528
1527
|
getAdobeMCVisitorID: () => getAdobeMCVisitorID,
|
|
1529
1528
|
getAdobeVisitorData: () => getAdobeVisitorData,
|
|
1529
|
+
getCampaignDetails: () => getCampaignDetails,
|
|
1530
1530
|
getConfig: () => getConfig,
|
|
1531
1531
|
getStorageItem: () => getStorageItem,
|
|
1532
1532
|
getUniversalId: () => getUniversalId,
|
|
@@ -1541,7 +1541,8 @@ __export(index_exports, {
|
|
|
1541
1541
|
setConfig: () => setConfig,
|
|
1542
1542
|
setStorageItem: () => setStorageItem,
|
|
1543
1543
|
storage: () => storage,
|
|
1544
|
-
toCookieDomain: () => toCookieDomain
|
|
1544
|
+
toCookieDomain: () => toCookieDomain,
|
|
1545
|
+
trackingTagsTypes: () => trackingTagsTypes
|
|
1545
1546
|
});
|
|
1546
1547
|
module.exports = __toCommonJS(index_exports);
|
|
1547
1548
|
|
|
@@ -1645,237 +1646,6 @@ var getAdobeMCVisitorID = async () => {
|
|
|
1645
1646
|
return getConfig("importAdobeVisitorId") === true ? importVisitorApiAndGetAdobeMCVisitorID() : getAdobeMarketingCloudVisitorIdFromWindow();
|
|
1646
1647
|
};
|
|
1647
1648
|
|
|
1648
|
-
// src/events.ts
|
|
1649
|
-
var EVENTS = {
|
|
1650
|
-
GA4_INIT_EVENT_SENT: "ga4InitEventSent"
|
|
1651
|
-
};
|
|
1652
|
-
|
|
1653
|
-
// src/middlewares/source/pageReferrer.ts
|
|
1654
|
-
var referrerState = {
|
|
1655
|
-
spaReferrer: "",
|
|
1656
|
-
referrer: ""
|
|
1657
|
-
};
|
|
1658
|
-
var utils = {
|
|
1659
|
-
/**
|
|
1660
|
-
* @returns The referrer of the document
|
|
1661
|
-
*/
|
|
1662
|
-
getDocumentReferrer: () => document.referrer,
|
|
1663
|
-
/**
|
|
1664
|
-
* @returns The actual location with protocol, domain and pathname
|
|
1665
|
-
*/
|
|
1666
|
-
getActualLocation: () => {
|
|
1667
|
-
const { origin, pathname } = window.location;
|
|
1668
|
-
return `${origin}${pathname}`;
|
|
1669
|
-
},
|
|
1670
|
-
/**
|
|
1671
|
-
* @returns The actual query string
|
|
1672
|
-
*/
|
|
1673
|
-
getActualQueryString: () => {
|
|
1674
|
-
const { search } = window.location;
|
|
1675
|
-
return search;
|
|
1676
|
-
}
|
|
1677
|
-
};
|
|
1678
|
-
var getPageReferrer = ({ isPageTrack = false } = {}) => {
|
|
1679
|
-
const { referrer, spaReferrer } = referrerState;
|
|
1680
|
-
const referrerToUse = isPageTrack ? referrer : spaReferrer;
|
|
1681
|
-
return referrerToUse || utils.getDocumentReferrer();
|
|
1682
|
-
};
|
|
1683
|
-
var updatePageReferrer = () => {
|
|
1684
|
-
referrerState.spaReferrer = getPageReferrer({ isPageTrack: true });
|
|
1685
|
-
referrerState.referrer = utils.getActualLocation();
|
|
1686
|
-
};
|
|
1687
|
-
var pageReferrer = ({ payload, next }) => {
|
|
1688
|
-
const {
|
|
1689
|
-
obj: { context }
|
|
1690
|
-
} = payload;
|
|
1691
|
-
const { isPageTrack } = context;
|
|
1692
|
-
const referrer = getPageReferrer({ isPageTrack });
|
|
1693
|
-
payload.obj.context = {
|
|
1694
|
-
...context,
|
|
1695
|
-
page: {
|
|
1696
|
-
...context.page,
|
|
1697
|
-
referrer
|
|
1698
|
-
}
|
|
1699
|
-
};
|
|
1700
|
-
if (isPageTrack) {
|
|
1701
|
-
updatePageReferrer();
|
|
1702
|
-
}
|
|
1703
|
-
next(payload);
|
|
1704
|
-
};
|
|
1705
|
-
|
|
1706
|
-
// src/repositories/googleRepository.ts
|
|
1707
|
-
var FIELDS = {
|
|
1708
|
-
clientId: "client_id",
|
|
1709
|
-
sessionId: "session_id"
|
|
1710
|
-
};
|
|
1711
|
-
var DEFAULT_DATA_LAYER_NAME = "dataLayer";
|
|
1712
|
-
var CONSENT_STATES = {
|
|
1713
|
-
granted: "granted",
|
|
1714
|
-
denied: "denied"
|
|
1715
|
-
};
|
|
1716
|
-
var CONSENT_STATE_GRANTED_VALUE = 1;
|
|
1717
|
-
var CONSENT_STATE_DENIED_VALUE = 2;
|
|
1718
|
-
var STC = {
|
|
1719
|
-
QUERY: "stc",
|
|
1720
|
-
SPLIT_SYMBOL: "-",
|
|
1721
|
-
CAMPAIGN_SPLIT_SYMBOL: ":"
|
|
1722
|
-
};
|
|
1723
|
-
var UTM_CAMPAIGN = "utm_campaign";
|
|
1724
|
-
var UTM_MEDIUM = "utm_medium";
|
|
1725
|
-
var UTM_SOURCE = "utm_source";
|
|
1726
|
-
var UTM_CONTENT = "utm_content";
|
|
1727
|
-
var UTM_CAMPAIGN_ID = "utm_id";
|
|
1728
|
-
var UTM_TERM = "utm_term";
|
|
1729
|
-
var STC_MEDIUM_TRANSFORMATIONS = {
|
|
1730
|
-
aff: "affiliate",
|
|
1731
|
-
dis: "display",
|
|
1732
|
-
em: "email",
|
|
1733
|
-
met: "paid-metasearch",
|
|
1734
|
-
sem: "paid-search",
|
|
1735
|
-
rt: "display",
|
|
1736
|
-
sm: "social-media",
|
|
1737
|
-
sp: "paid-social",
|
|
1738
|
-
pn: "push-notification",
|
|
1739
|
-
cs: "cross-sites"
|
|
1740
|
-
};
|
|
1741
|
-
var STC_INVALID_CONTENT = "na";
|
|
1742
|
-
var DEFAULT_GA_INIT_EVENT = "sui";
|
|
1743
|
-
var EMPTY_STC = { medium: null, source: null, campaign: null };
|
|
1744
|
-
var loadScript = async (src) => new Promise(function(resolve, reject) {
|
|
1745
|
-
const script = document.createElement("script");
|
|
1746
|
-
script.src = src;
|
|
1747
|
-
script.onload = () => resolve();
|
|
1748
|
-
script.onerror = reject;
|
|
1749
|
-
document.head.appendChild(script);
|
|
1750
|
-
});
|
|
1751
|
-
var loadGoogleAnalytics = async () => {
|
|
1752
|
-
const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
|
|
1753
|
-
const dataLayerName = getConfig("googleAnalyticsDataLayer") || DEFAULT_DATA_LAYER_NAME;
|
|
1754
|
-
if (!googleAnalyticsMeasurementId) return Promise.resolve(false);
|
|
1755
|
-
const gtagScript = `https://www.googletagmanager.com/gtag/js?id=${googleAnalyticsMeasurementId}&l=${dataLayerName}`;
|
|
1756
|
-
return loadScript(gtagScript).then(() => true);
|
|
1757
|
-
};
|
|
1758
|
-
var triggerGoogleAnalyticsInitEvent = (sessionId) => {
|
|
1759
|
-
const eventName = getConfig("googleAnalyticsInitEvent") ?? DEFAULT_GA_INIT_EVENT;
|
|
1760
|
-
const eventPrefix = `ga_event_${eventName}_`;
|
|
1761
|
-
const eventKey = `${eventPrefix}${sessionId}`;
|
|
1762
|
-
if (typeof window.gtag === "undefined") return;
|
|
1763
|
-
if (!localStorage.getItem(eventKey)) {
|
|
1764
|
-
window.gtag("event", eventName);
|
|
1765
|
-
console.log(`Sending GA4 event "${eventName}" for the session "${sessionId}"`);
|
|
1766
|
-
localStorage.setItem(eventKey, "true");
|
|
1767
|
-
if (typeof window.dispatchEvent === "function") {
|
|
1768
|
-
const event = new CustomEvent(EVENTS.GA4_INIT_EVENT_SENT, {
|
|
1769
|
-
detail: { eventName, sessionId }
|
|
1770
|
-
});
|
|
1771
|
-
window.dispatchEvent(event);
|
|
1772
|
-
}
|
|
1773
|
-
}
|
|
1774
|
-
Object.keys(localStorage).forEach((key) => {
|
|
1775
|
-
if (key.startsWith(eventPrefix) && key !== eventKey) {
|
|
1776
|
-
localStorage.removeItem(key);
|
|
1777
|
-
}
|
|
1778
|
-
});
|
|
1779
|
-
};
|
|
1780
|
-
var getGoogleField = async (field) => {
|
|
1781
|
-
const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
|
|
1782
|
-
if (!googleAnalyticsMeasurementId) return Promise.resolve(void 0);
|
|
1783
|
-
return new Promise((resolve) => {
|
|
1784
|
-
window.gtag?.("get", googleAnalyticsMeasurementId, field, resolve);
|
|
1785
|
-
});
|
|
1786
|
-
};
|
|
1787
|
-
var trackingTagsTypes = {
|
|
1788
|
-
STC: "stc",
|
|
1789
|
-
UTM: "utm"
|
|
1790
|
-
};
|
|
1791
|
-
var getCampaignDetails = ({ needsTransformation = true } = {}) => {
|
|
1792
|
-
const { medium, source, campaign, content, term } = readQueryParams();
|
|
1793
|
-
if (!medium || !source || !campaign) return null;
|
|
1794
|
-
const [id, name] = campaign.split(STC.CAMPAIGN_SPLIT_SYMBOL);
|
|
1795
|
-
if (!id && !name) return null;
|
|
1796
|
-
const needsContent = typeof content !== "undefined" && content !== STC_INVALID_CONTENT;
|
|
1797
|
-
return {
|
|
1798
|
-
campaign: {
|
|
1799
|
-
medium: needsTransformation && STC_MEDIUM_TRANSFORMATIONS[medium] || medium,
|
|
1800
|
-
...typeof name !== "undefined" && { id },
|
|
1801
|
-
name: name ?? id,
|
|
1802
|
-
source,
|
|
1803
|
-
...needsContent && { content },
|
|
1804
|
-
...typeof term !== "undefined" && { term }
|
|
1805
|
-
}
|
|
1806
|
-
};
|
|
1807
|
-
};
|
|
1808
|
-
function readQueryParams() {
|
|
1809
|
-
const search = utils.getActualQueryString();
|
|
1810
|
-
const searchParams = new URLSearchParams(search);
|
|
1811
|
-
return getConfig("trackingTagsType") === trackingTagsTypes.UTM ? readFromUtm(searchParams) : readFromStc(searchParams);
|
|
1812
|
-
}
|
|
1813
|
-
function readFromStc(searchParams) {
|
|
1814
|
-
if (!hasStc(searchParams)) return EMPTY_STC;
|
|
1815
|
-
const stc = searchParams.get(STC.QUERY);
|
|
1816
|
-
const [medium, source, campaign, content, term] = stc?.split(STC.SPLIT_SYMBOL) || [];
|
|
1817
|
-
return { medium, source, campaign, content, term };
|
|
1818
|
-
}
|
|
1819
|
-
function hasStc(searchParams) {
|
|
1820
|
-
return searchParams.has(STC.QUERY);
|
|
1821
|
-
}
|
|
1822
|
-
function readFromUtm(searchParams) {
|
|
1823
|
-
const campaignId = searchParams.get(UTM_CAMPAIGN_ID);
|
|
1824
|
-
const campaignName = searchParams.get(UTM_CAMPAIGN);
|
|
1825
|
-
const medium = searchParams.get(UTM_MEDIUM);
|
|
1826
|
-
const source = searchParams.get(UTM_SOURCE);
|
|
1827
|
-
const content = searchParams.get(UTM_CONTENT);
|
|
1828
|
-
const term = searchParams.get(UTM_TERM);
|
|
1829
|
-
const campaign = campaignId ? `${campaignId}${STC.CAMPAIGN_SPLIT_SYMBOL}${campaignName}` : campaignName;
|
|
1830
|
-
const missingAnyMandatoryFields = !medium || !source || !campaign;
|
|
1831
|
-
if (missingAnyMandatoryFields && hasStc(searchParams)) {
|
|
1832
|
-
return readFromStc(searchParams);
|
|
1833
|
-
}
|
|
1834
|
-
return {
|
|
1835
|
-
campaign,
|
|
1836
|
-
medium,
|
|
1837
|
-
source,
|
|
1838
|
-
content: content ?? void 0,
|
|
1839
|
-
term: term ?? void 0
|
|
1840
|
-
};
|
|
1841
|
-
}
|
|
1842
|
-
var getGoogleClientId = async () => getGoogleField(FIELDS.clientId);
|
|
1843
|
-
var getGoogleSessionId = async () => {
|
|
1844
|
-
const sessionId = await getGoogleField(FIELDS.sessionId);
|
|
1845
|
-
if (sessionId) {
|
|
1846
|
-
triggerGoogleAnalyticsInitEvent(sessionId);
|
|
1847
|
-
}
|
|
1848
|
-
return sessionId;
|
|
1849
|
-
};
|
|
1850
|
-
function getGoogleConsentValue(consentType = "analytics_storage") {
|
|
1851
|
-
try {
|
|
1852
|
-
const value = window.google_tag_data?.ics?.getConsentState?.(consentType);
|
|
1853
|
-
if (value === CONSENT_STATE_GRANTED_VALUE) return CONSENT_STATES.granted;
|
|
1854
|
-
if (value === CONSENT_STATE_DENIED_VALUE) return CONSENT_STATES.denied;
|
|
1855
|
-
return void 0;
|
|
1856
|
-
} catch {
|
|
1857
|
-
return void 0;
|
|
1858
|
-
}
|
|
1859
|
-
}
|
|
1860
|
-
var getConsentState = () => getGoogleConsentValue() ?? CONSENT_STATES.denied;
|
|
1861
|
-
var setGoogleUserId = (userId) => {
|
|
1862
|
-
const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
|
|
1863
|
-
if (!googleAnalyticsMeasurementId || !userId) return;
|
|
1864
|
-
window.gtag?.("set", "user_id", userId);
|
|
1865
|
-
};
|
|
1866
|
-
var sendGoogleConsents = (mode = "default", consents) => {
|
|
1867
|
-
window.gtag?.(
|
|
1868
|
-
"consent",
|
|
1869
|
-
mode,
|
|
1870
|
-
consents || {
|
|
1871
|
-
analytics_storage: CONSENT_STATES.denied,
|
|
1872
|
-
ad_user_data: CONSENT_STATES.denied,
|
|
1873
|
-
ad_personalization: CONSENT_STATES.denied,
|
|
1874
|
-
ad_storage: CONSENT_STATES.denied
|
|
1875
|
-
}
|
|
1876
|
-
);
|
|
1877
|
-
};
|
|
1878
|
-
|
|
1879
1649
|
// src/tcf.ts
|
|
1880
1650
|
var TCF_COOKIE_KEY = "borosTcf";
|
|
1881
1651
|
var TCF_API_VERSION = 2;
|
|
@@ -1929,17 +1699,30 @@ var checkTcfIsAvailable = () => {
|
|
|
1929
1699
|
};
|
|
1930
1700
|
var checkHasUserConsentedAnalytics = (userConsents) => NEEDED_PURPOSES.analytics.every((purposeId) => userConsents[`${purposeId}`]);
|
|
1931
1701
|
var checkHasUserConsentedAdvertising = (userConsents) => NEEDED_PURPOSES.advertising.every((purposeId) => userConsents[`${purposeId}`]);
|
|
1932
|
-
var trackTcf = ({ gdprPrivacy }) =>
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
)
|
|
1702
|
+
var trackTcf = ({ gdprPrivacy }) => {
|
|
1703
|
+
const isAnalyticsAccepted = gdprPrivacy.analytics === USER_GDPR.ACCEPTED;
|
|
1704
|
+
const isAdvertisingAccepted = gdprPrivacy.advertising === USER_GDPR.ACCEPTED;
|
|
1705
|
+
return segmentWrapper_default.track(
|
|
1706
|
+
CMP_TRACK_EVENT,
|
|
1707
|
+
{
|
|
1708
|
+
...TCF_TRACK_PROPERTIES,
|
|
1709
|
+
...getConfig("tcfTrackDefaultProperties") || {}
|
|
1710
|
+
},
|
|
1711
|
+
{
|
|
1712
|
+
// Consent Mode properties for Segment → GA4 mapping (v5)
|
|
1713
|
+
// These are mapped in Segment Dashboard from context.google_consents.* to GA4 Consent Mode
|
|
1714
|
+
google_consents: {
|
|
1715
|
+
analytics_storage: isAnalyticsAccepted ? "granted" : "denied",
|
|
1716
|
+
ad_storage: isAdvertisingAccepted ? "granted" : "denied",
|
|
1717
|
+
ad_user_data: isAdvertisingAccepted ? "granted" : "denied",
|
|
1718
|
+
ad_personalization: isAdvertisingAccepted ? "granted" : "denied"
|
|
1719
|
+
},
|
|
1720
|
+
// Keep gdpr_privacy in context for compatibility with other integrations
|
|
1721
|
+
gdpr_privacy: gdprPrivacy.analytics,
|
|
1722
|
+
gdpr_privacy_advertising: gdprPrivacy.advertising
|
|
1723
|
+
}
|
|
1724
|
+
);
|
|
1725
|
+
};
|
|
1943
1726
|
var getGdprPrivacyValue = () => {
|
|
1944
1727
|
const gdprPrivacyValue = gdprState.get();
|
|
1945
1728
|
if (gdprPrivacyValue !== void 0) return Promise.resolve(gdprPrivacyValue);
|
|
@@ -2121,14 +1904,10 @@ var getTrackIntegrations = async ({
|
|
|
2121
1904
|
}) => {
|
|
2122
1905
|
const isGdprAccepted = checkAnalyticsGdprIsAccepted(gdprPrivacyValue);
|
|
2123
1906
|
let marketingCloudVisitorId;
|
|
2124
|
-
let sessionId;
|
|
2125
|
-
let clientId;
|
|
2126
1907
|
try {
|
|
2127
1908
|
if (isGdprAccepted) {
|
|
2128
1909
|
marketingCloudVisitorId = await getAdobeMCVisitorID();
|
|
2129
1910
|
}
|
|
2130
|
-
sessionId = await getGoogleSessionId();
|
|
2131
|
-
clientId = await getGoogleClientId();
|
|
2132
1911
|
} catch (error) {
|
|
2133
1912
|
console.error(error);
|
|
2134
1913
|
}
|
|
@@ -2136,10 +1915,7 @@ var getTrackIntegrations = async ({
|
|
|
2136
1915
|
return {
|
|
2137
1916
|
...restOfIntegrations,
|
|
2138
1917
|
"Adobe Analytics": marketingCloudVisitorId ? { marketingCloudVisitorId } : true,
|
|
2139
|
-
"Google Analytics 4":
|
|
2140
|
-
clientId,
|
|
2141
|
-
sessionId
|
|
2142
|
-
} : true
|
|
1918
|
+
"Google Analytics 4": true
|
|
2143
1919
|
};
|
|
2144
1920
|
};
|
|
2145
1921
|
var getRestOfIntegrations = ({
|
|
@@ -2178,9 +1954,6 @@ var getExternalIds = ({
|
|
|
2178
1954
|
);
|
|
2179
1955
|
return { externalIds: uniqueExternalIds };
|
|
2180
1956
|
};
|
|
2181
|
-
var getConsentValue = (gdprValue) => {
|
|
2182
|
-
return gdprValue === USER_GDPR.ACCEPTED ? CONSENT_STATES.granted : CONSENT_STATES.denied;
|
|
2183
|
-
};
|
|
2184
1957
|
var decorateContextWithNeededData = async ({
|
|
2185
1958
|
event = "",
|
|
2186
1959
|
context = {}
|
|
@@ -2192,10 +1965,6 @@ var decorateContextWithNeededData = async ({
|
|
|
2192
1965
|
getTrackIntegrations({ gdprPrivacyValue, event }),
|
|
2193
1966
|
getXandrId({ gdprPrivacyValueAdvertising })
|
|
2194
1967
|
]);
|
|
2195
|
-
const analyticsConsentValue = getGoogleConsentValue("analytics_storage") ?? getConsentValue(gdprPrivacyValueAnalytics);
|
|
2196
|
-
const adUserDataConsentValue = getGoogleConsentValue("ad_user_data") ?? getConsentValue(gdprPrivacyValueAdvertising);
|
|
2197
|
-
const adPersonalizationConsentValue = getGoogleConsentValue("ad_personalization") ?? getConsentValue(gdprPrivacyValueAdvertising);
|
|
2198
|
-
const adStorageConsentValue = getGoogleConsentValue("ad_storage") ?? getConsentValue(gdprPrivacyValueAdvertising);
|
|
2199
1968
|
if (!isGdprAccepted) {
|
|
2200
1969
|
context.integrations = {
|
|
2201
1970
|
...context.integrations ?? {},
|
|
@@ -2204,21 +1973,13 @@ var decorateContextWithNeededData = async ({
|
|
|
2204
1973
|
Webhook: true
|
|
2205
1974
|
};
|
|
2206
1975
|
}
|
|
2207
|
-
const google_consents = {
|
|
2208
|
-
analytics_storage: analyticsConsentValue,
|
|
2209
|
-
ad_user_data: adUserDataConsentValue,
|
|
2210
|
-
ad_personalization: adPersonalizationConsentValue,
|
|
2211
|
-
ad_storage: adStorageConsentValue
|
|
2212
|
-
};
|
|
2213
1976
|
return {
|
|
2214
1977
|
...context,
|
|
2215
1978
|
...!isGdprAccepted && { ip: "0.0.0.0" },
|
|
2216
1979
|
...getExternalIds({ context, xandrId }),
|
|
2217
|
-
|
|
2218
|
-
clientVersion: `segment-wrapper@${"4.36.2"}`,
|
|
1980
|
+
clientVersion: `segment-wrapper@${"5.0.0-beta.0"}`,
|
|
2219
1981
|
gdpr_privacy: gdprPrivacyValueAnalytics,
|
|
2220
1982
|
gdpr_privacy_advertising: gdprPrivacyValueAdvertising,
|
|
2221
|
-
google_consents,
|
|
2222
1983
|
integrations: {
|
|
2223
1984
|
...context.integrations,
|
|
2224
1985
|
...integrations
|
|
@@ -2244,10 +2005,6 @@ var track = (event, properties, context = {}, callback) => new Promise((resolve)
|
|
|
2244
2005
|
resolve();
|
|
2245
2006
|
}
|
|
2246
2007
|
};
|
|
2247
|
-
const needsConsentManagement = getConfig("googleAnalyticsConsentManagement");
|
|
2248
|
-
if (needsConsentManagement && event === CMP_TRACK_EVENT) {
|
|
2249
|
-
sendGoogleConsents("update", newContext.google_consents);
|
|
2250
|
-
}
|
|
2251
2008
|
window.analytics.track(
|
|
2252
2009
|
event,
|
|
2253
2010
|
newProperties,
|
|
@@ -2267,7 +2024,6 @@ var track = (event, properties, context = {}, callback) => new Promise((resolve)
|
|
|
2267
2024
|
var identify = async (userIdParam, traits, options, callback) => {
|
|
2268
2025
|
const gdprPrivacyValue = await getGdprPrivacyValue();
|
|
2269
2026
|
const userId = getUserId(userIdParam);
|
|
2270
|
-
setGoogleUserId(userId);
|
|
2271
2027
|
return window.analytics.identify(
|
|
2272
2028
|
userId,
|
|
2273
2029
|
checkAnalyticsGdprIsAccepted(gdprPrivacyValue) ? traits : {},
|
|
@@ -2311,16 +2067,148 @@ if (isClient) {
|
|
|
2311
2067
|
}
|
|
2312
2068
|
}
|
|
2313
2069
|
|
|
2070
|
+
// src/middlewares/source/pageReferrer.ts
|
|
2071
|
+
var referrerState = {
|
|
2072
|
+
spaReferrer: "",
|
|
2073
|
+
referrer: ""
|
|
2074
|
+
};
|
|
2075
|
+
var utils = {
|
|
2076
|
+
/**
|
|
2077
|
+
* @returns The referrer of the document
|
|
2078
|
+
*/
|
|
2079
|
+
getDocumentReferrer: () => document.referrer,
|
|
2080
|
+
/**
|
|
2081
|
+
* @returns The actual location with protocol, domain and pathname
|
|
2082
|
+
*/
|
|
2083
|
+
getActualLocation: () => {
|
|
2084
|
+
const { origin, pathname } = window.location;
|
|
2085
|
+
return `${origin}${pathname}`;
|
|
2086
|
+
},
|
|
2087
|
+
/**
|
|
2088
|
+
* @returns The actual query string
|
|
2089
|
+
*/
|
|
2090
|
+
getActualQueryString: () => {
|
|
2091
|
+
const { search } = window.location;
|
|
2092
|
+
return search;
|
|
2093
|
+
}
|
|
2094
|
+
};
|
|
2095
|
+
var getPageReferrer = ({ isPageTrack = false } = {}) => {
|
|
2096
|
+
const { referrer, spaReferrer } = referrerState;
|
|
2097
|
+
const referrerToUse = isPageTrack ? referrer : spaReferrer;
|
|
2098
|
+
return referrerToUse || utils.getDocumentReferrer();
|
|
2099
|
+
};
|
|
2100
|
+
var updatePageReferrer = () => {
|
|
2101
|
+
referrerState.spaReferrer = getPageReferrer({ isPageTrack: true });
|
|
2102
|
+
referrerState.referrer = utils.getActualLocation();
|
|
2103
|
+
};
|
|
2104
|
+
var pageReferrer = ({ payload, next }) => {
|
|
2105
|
+
const {
|
|
2106
|
+
obj: { context }
|
|
2107
|
+
} = payload;
|
|
2108
|
+
const { isPageTrack } = context;
|
|
2109
|
+
const referrer = getPageReferrer({ isPageTrack });
|
|
2110
|
+
payload.obj.context = {
|
|
2111
|
+
...context,
|
|
2112
|
+
page: {
|
|
2113
|
+
...context.page,
|
|
2114
|
+
referrer
|
|
2115
|
+
}
|
|
2116
|
+
};
|
|
2117
|
+
if (isPageTrack) {
|
|
2118
|
+
updatePageReferrer();
|
|
2119
|
+
}
|
|
2120
|
+
next(payload);
|
|
2121
|
+
};
|
|
2122
|
+
|
|
2123
|
+
// src/repositories/googleRepository.ts
|
|
2124
|
+
var STC = {
|
|
2125
|
+
QUERY: "stc",
|
|
2126
|
+
SPLIT_SYMBOL: "-",
|
|
2127
|
+
CAMPAIGN_SPLIT_SYMBOL: ":"
|
|
2128
|
+
};
|
|
2129
|
+
var UTM_CAMPAIGN = "utm_campaign";
|
|
2130
|
+
var UTM_MEDIUM = "utm_medium";
|
|
2131
|
+
var UTM_SOURCE = "utm_source";
|
|
2132
|
+
var UTM_CONTENT = "utm_content";
|
|
2133
|
+
var UTM_CAMPAIGN_ID = "utm_id";
|
|
2134
|
+
var UTM_TERM = "utm_term";
|
|
2135
|
+
var STC_MEDIUM_TRANSFORMATIONS = {
|
|
2136
|
+
aff: "affiliate",
|
|
2137
|
+
dis: "display",
|
|
2138
|
+
em: "email",
|
|
2139
|
+
met: "paid-metasearch",
|
|
2140
|
+
sem: "paid-search",
|
|
2141
|
+
rt: "display",
|
|
2142
|
+
sm: "social-media",
|
|
2143
|
+
sp: "paid-social",
|
|
2144
|
+
pn: "push-notification",
|
|
2145
|
+
cs: "cross-sites"
|
|
2146
|
+
};
|
|
2147
|
+
var STC_INVALID_CONTENT = "na";
|
|
2148
|
+
var EMPTY_STC = { medium: null, source: null, campaign: null };
|
|
2149
|
+
var trackingTagsTypes = {
|
|
2150
|
+
STC: "stc",
|
|
2151
|
+
UTM: "utm"
|
|
2152
|
+
};
|
|
2153
|
+
var getCampaignDetails = ({ needsTransformation = true } = {}) => {
|
|
2154
|
+
const { medium, source, campaign, content, term } = readQueryParams();
|
|
2155
|
+
if (!medium || !source || !campaign) return null;
|
|
2156
|
+
const [id, name] = campaign.split(STC.CAMPAIGN_SPLIT_SYMBOL);
|
|
2157
|
+
if (!id && !name) return null;
|
|
2158
|
+
const needsContent = typeof content !== "undefined" && content !== STC_INVALID_CONTENT;
|
|
2159
|
+
return {
|
|
2160
|
+
campaign: {
|
|
2161
|
+
medium: needsTransformation && STC_MEDIUM_TRANSFORMATIONS[medium] || medium,
|
|
2162
|
+
...typeof name !== "undefined" && { id },
|
|
2163
|
+
name: name ?? id,
|
|
2164
|
+
source,
|
|
2165
|
+
...needsContent && { content },
|
|
2166
|
+
...typeof term !== "undefined" && { term }
|
|
2167
|
+
}
|
|
2168
|
+
};
|
|
2169
|
+
};
|
|
2170
|
+
function readQueryParams() {
|
|
2171
|
+
const search = utils.getActualQueryString();
|
|
2172
|
+
const searchParams = new URLSearchParams(search);
|
|
2173
|
+
return getConfig("trackingTagsType") === trackingTagsTypes.UTM ? readFromUtm(searchParams) : readFromStc(searchParams);
|
|
2174
|
+
}
|
|
2175
|
+
function readFromStc(searchParams) {
|
|
2176
|
+
if (!hasStc(searchParams)) return EMPTY_STC;
|
|
2177
|
+
const stc = searchParams.get(STC.QUERY);
|
|
2178
|
+
const [medium, source, campaign, content, term] = stc?.split(STC.SPLIT_SYMBOL) || [];
|
|
2179
|
+
return { medium, source, campaign, content, term };
|
|
2180
|
+
}
|
|
2181
|
+
function hasStc(searchParams) {
|
|
2182
|
+
return searchParams.has(STC.QUERY);
|
|
2183
|
+
}
|
|
2184
|
+
function readFromUtm(searchParams) {
|
|
2185
|
+
const campaignId = searchParams.get(UTM_CAMPAIGN_ID);
|
|
2186
|
+
const campaignName = searchParams.get(UTM_CAMPAIGN);
|
|
2187
|
+
const medium = searchParams.get(UTM_MEDIUM);
|
|
2188
|
+
const source = searchParams.get(UTM_SOURCE);
|
|
2189
|
+
const content = searchParams.get(UTM_CONTENT);
|
|
2190
|
+
const term = searchParams.get(UTM_TERM);
|
|
2191
|
+
const campaign = campaignId ? `${campaignId}${STC.CAMPAIGN_SPLIT_SYMBOL}${campaignName}` : campaignName;
|
|
2192
|
+
const missingAnyMandatoryFields = !medium || !source || !campaign;
|
|
2193
|
+
if (missingAnyMandatoryFields && hasStc(searchParams)) {
|
|
2194
|
+
return readFromStc(searchParams);
|
|
2195
|
+
}
|
|
2196
|
+
return {
|
|
2197
|
+
campaign,
|
|
2198
|
+
medium,
|
|
2199
|
+
source,
|
|
2200
|
+
content: content ?? void 0,
|
|
2201
|
+
term: term ?? void 0
|
|
2202
|
+
};
|
|
2203
|
+
}
|
|
2204
|
+
|
|
2314
2205
|
// src/middlewares/source/campaignContext.ts
|
|
2315
2206
|
var campaignContext = ({ payload, next }) => {
|
|
2316
|
-
const
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
...campaignDetails
|
|
2322
|
-
};
|
|
2323
|
-
}
|
|
2207
|
+
const campaignDetails = getCampaignDetails();
|
|
2208
|
+
payload.obj.context = {
|
|
2209
|
+
...payload.obj.context,
|
|
2210
|
+
...campaignDetails
|
|
2211
|
+
};
|
|
2324
2212
|
next(payload);
|
|
2325
2213
|
};
|
|
2326
2214
|
|
|
@@ -2548,6 +2436,11 @@ var TCFEvents = /* @__PURE__ */ ((TCFEvents2) => {
|
|
|
2548
2436
|
return TCFEvents2;
|
|
2549
2437
|
})(TCFEvents || {});
|
|
2550
2438
|
|
|
2439
|
+
// src/events.ts
|
|
2440
|
+
var EVENTS = {
|
|
2441
|
+
GA4_INIT_EVENT_SENT: "ga4InitEventSent"
|
|
2442
|
+
};
|
|
2443
|
+
|
|
2551
2444
|
// src/utils/storage.ts
|
|
2552
2445
|
var storage = ({
|
|
2553
2446
|
type = "localStorage",
|
|
@@ -2613,37 +2506,12 @@ var addMiddlewares = () => {
|
|
|
2613
2506
|
}
|
|
2614
2507
|
};
|
|
2615
2508
|
if (isClient && window.analytics) {
|
|
2616
|
-
const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
|
|
2617
|
-
const dataLayerName = getConfig("googleAnalyticsDataLayer") || DEFAULT_DATA_LAYER_NAME;
|
|
2618
|
-
const needsConsentManagement = getConfig("googleAnalyticsConsentManagement");
|
|
2619
|
-
if (googleAnalyticsMeasurementId) {
|
|
2620
|
-
const googleAnalyticsConfig = getConfig("googleAnalyticsConfig");
|
|
2621
|
-
window[dataLayerName] = window[dataLayerName] || [];
|
|
2622
|
-
window.gtag = window.gtag || function gtag() {
|
|
2623
|
-
;
|
|
2624
|
-
window[dataLayerName].push(arguments);
|
|
2625
|
-
};
|
|
2626
|
-
window.gtag("js", /* @__PURE__ */ new Date());
|
|
2627
|
-
if (needsConsentManagement) {
|
|
2628
|
-
sendGoogleConsents();
|
|
2629
|
-
}
|
|
2630
|
-
window.gtag("config", googleAnalyticsMeasurementId, {
|
|
2631
|
-
cookie_prefix: "segment",
|
|
2632
|
-
send_page_view: false,
|
|
2633
|
-
...googleAnalyticsConfig,
|
|
2634
|
-
...getCampaignDetails()
|
|
2635
|
-
});
|
|
2636
|
-
loadGoogleAnalytics().catch((error) => {
|
|
2637
|
-
console.error("[segment-wrapper] Failed to load Google Analytics", error);
|
|
2638
|
-
});
|
|
2639
|
-
}
|
|
2640
2509
|
window.analytics.ready(checkAnonymousId);
|
|
2641
2510
|
window.analytics.addSourceMiddleware ? addMiddlewares() : window.analytics.ready(addMiddlewares);
|
|
2642
2511
|
}
|
|
2643
2512
|
var index_default = segmentWrapper_default;
|
|
2644
2513
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2645
2514
|
0 && (module.exports = {
|
|
2646
|
-
CONSENT_STATES,
|
|
2647
2515
|
EVENTS,
|
|
2648
2516
|
TCFEvents,
|
|
2649
2517
|
UserGDPR,
|
|
@@ -2652,6 +2520,7 @@ var index_default = segmentWrapper_default;
|
|
|
2652
2520
|
createUniversalId,
|
|
2653
2521
|
getAdobeMCVisitorID,
|
|
2654
2522
|
getAdobeVisitorData,
|
|
2523
|
+
getCampaignDetails,
|
|
2655
2524
|
getConfig,
|
|
2656
2525
|
getStorageItem,
|
|
2657
2526
|
getUniversalId,
|
|
@@ -2666,7 +2535,8 @@ var index_default = segmentWrapper_default;
|
|
|
2666
2535
|
setConfig,
|
|
2667
2536
|
setStorageItem,
|
|
2668
2537
|
storage,
|
|
2669
|
-
toCookieDomain
|
|
2538
|
+
toCookieDomain,
|
|
2539
|
+
trackingTagsTypes
|
|
2670
2540
|
});
|
|
2671
2541
|
/**
|
|
2672
2542
|
* @license
|