@adv-re/segment-wrapper 4.36.2 → 5.0.0-beta.1

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/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 }) => segmentWrapper_default.track(
1933
- CMP_TRACK_EVENT,
1934
- {
1935
- ...TCF_TRACK_PROPERTIES,
1936
- ...getConfig("tcfTrackDefaultProperties") || {}
1937
- },
1938
- {
1939
- gdpr_privacy: gdprPrivacy.analytics,
1940
- gdpr_privacy_advertising: gdprPrivacy.advertising
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 sent as event properties and mapped in Segment GA4 Device Mode 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);
@@ -1947,6 +1730,9 @@ var getGdprPrivacyValue = () => {
1947
1730
  gdprState.addListener((gdprPrivacyValue2) => resolve(gdprPrivacyValue2));
1948
1731
  });
1949
1732
  };
1733
+ var getGdprPrivacyValueSync = () => {
1734
+ return gdprState.get();
1735
+ };
1950
1736
  var checkAnalyticsGdprIsAccepted = (gdprPrivacyValue) => {
1951
1737
  return gdprPrivacyValue?.analytics === USER_GDPR.ACCEPTED;
1952
1738
  };
@@ -2009,11 +1795,7 @@ function initTcfTracking() {
2009
1795
  analytics: analyticsStateKey,
2010
1796
  advertising: advertisingStateKey
2011
1797
  };
2012
- const MIGRATION_DIDOMI_SEGMENT_WRAPPER_FLAG = "didomi-migration";
2013
- const isDidomiMigration = isClient && window.sessionStorage.getItem(MIGRATION_DIDOMI_SEGMENT_WRAPPER_FLAG);
2014
- return !isDidomiMigration && trackTcf({
2015
- gdprPrivacy
2016
- });
1798
+ trackTcf({ gdprPrivacy });
2017
1799
  }
2018
1800
  }
2019
1801
  });
@@ -2121,14 +1903,10 @@ var getTrackIntegrations = async ({
2121
1903
  }) => {
2122
1904
  const isGdprAccepted = checkAnalyticsGdprIsAccepted(gdprPrivacyValue);
2123
1905
  let marketingCloudVisitorId;
2124
- let sessionId;
2125
- let clientId;
2126
1906
  try {
2127
1907
  if (isGdprAccepted) {
2128
1908
  marketingCloudVisitorId = await getAdobeMCVisitorID();
2129
1909
  }
2130
- sessionId = await getGoogleSessionId();
2131
- clientId = await getGoogleClientId();
2132
1910
  } catch (error) {
2133
1911
  console.error(error);
2134
1912
  }
@@ -2136,10 +1914,7 @@ var getTrackIntegrations = async ({
2136
1914
  return {
2137
1915
  ...restOfIntegrations,
2138
1916
  "Adobe Analytics": marketingCloudVisitorId ? { marketingCloudVisitorId } : true,
2139
- "Google Analytics 4": clientId && sessionId ? {
2140
- clientId,
2141
- sessionId
2142
- } : true
1917
+ "Google Analytics 4 Web": true
2143
1918
  };
2144
1919
  };
2145
1920
  var getRestOfIntegrations = ({
@@ -2178,9 +1953,6 @@ var getExternalIds = ({
2178
1953
  );
2179
1954
  return { externalIds: uniqueExternalIds };
2180
1955
  };
2181
- var getConsentValue = (gdprValue) => {
2182
- return gdprValue === USER_GDPR.ACCEPTED ? CONSENT_STATES.granted : CONSENT_STATES.denied;
2183
- };
2184
1956
  var decorateContextWithNeededData = async ({
2185
1957
  event = "",
2186
1958
  context = {}
@@ -2192,10 +1964,6 @@ var decorateContextWithNeededData = async ({
2192
1964
  getTrackIntegrations({ gdprPrivacyValue, event }),
2193
1965
  getXandrId({ gdprPrivacyValueAdvertising })
2194
1966
  ]);
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
1967
  if (!isGdprAccepted) {
2200
1968
  context.integrations = {
2201
1969
  ...context.integrations ?? {},
@@ -2204,21 +1972,13 @@ var decorateContextWithNeededData = async ({
2204
1972
  Webhook: true
2205
1973
  };
2206
1974
  }
2207
- const google_consents = {
2208
- analytics_storage: analyticsConsentValue,
2209
- ad_user_data: adUserDataConsentValue,
2210
- ad_personalization: adPersonalizationConsentValue,
2211
- ad_storage: adStorageConsentValue
2212
- };
2213
1975
  return {
2214
1976
  ...context,
2215
1977
  ...!isGdprAccepted && { ip: "0.0.0.0" },
2216
1978
  ...getExternalIds({ context, xandrId }),
2217
- analytics_storage: getConsentState(),
2218
- clientVersion: `segment-wrapper@${"4.36.2"}`,
1979
+ clientVersion: `segment-wrapper@${"5.0.0-beta.1"}`,
2219
1980
  gdpr_privacy: gdprPrivacyValueAnalytics,
2220
1981
  gdpr_privacy_advertising: gdprPrivacyValueAdvertising,
2221
- google_consents,
2222
1982
  integrations: {
2223
1983
  ...context.integrations,
2224
1984
  ...integrations
@@ -2244,10 +2004,6 @@ var track = (event, properties, context = {}, callback) => new Promise((resolve)
2244
2004
  resolve();
2245
2005
  }
2246
2006
  };
2247
- const needsConsentManagement = getConfig("googleAnalyticsConsentManagement");
2248
- if (needsConsentManagement && event === CMP_TRACK_EVENT) {
2249
- sendGoogleConsents("update", newContext.google_consents);
2250
- }
2251
2007
  window.analytics.track(
2252
2008
  event,
2253
2009
  newProperties,
@@ -2267,7 +2023,6 @@ var track = (event, properties, context = {}, callback) => new Promise((resolve)
2267
2023
  var identify = async (userIdParam, traits, options, callback) => {
2268
2024
  const gdprPrivacyValue = await getGdprPrivacyValue();
2269
2025
  const userId = getUserId(userIdParam);
2270
- setGoogleUserId(userId);
2271
2026
  return window.analytics.identify(
2272
2027
  userId,
2273
2028
  checkAnalyticsGdprIsAccepted(gdprPrivacyValue) ? traits : {},
@@ -2311,14 +2066,166 @@ if (isClient) {
2311
2066
  }
2312
2067
  }
2313
2068
 
2069
+ // src/middlewares/source/pageReferrer.ts
2070
+ var referrerState = {
2071
+ spaReferrer: "",
2072
+ referrer: ""
2073
+ };
2074
+ var utils = {
2075
+ /**
2076
+ * @returns The referrer of the document
2077
+ */
2078
+ getDocumentReferrer: () => document.referrer,
2079
+ /**
2080
+ * @returns The actual location with protocol, domain and pathname
2081
+ */
2082
+ getActualLocation: () => {
2083
+ const { origin, pathname } = window.location;
2084
+ return `${origin}${pathname}`;
2085
+ },
2086
+ /**
2087
+ * @returns The actual query string
2088
+ */
2089
+ getActualQueryString: () => {
2090
+ const { search } = window.location;
2091
+ return search;
2092
+ }
2093
+ };
2094
+ var getPageReferrer = ({ isPageTrack = false } = {}) => {
2095
+ const { referrer, spaReferrer } = referrerState;
2096
+ const referrerToUse = isPageTrack ? referrer : spaReferrer;
2097
+ return referrerToUse || utils.getDocumentReferrer();
2098
+ };
2099
+ var updatePageReferrer = () => {
2100
+ referrerState.spaReferrer = getPageReferrer({ isPageTrack: true });
2101
+ referrerState.referrer = utils.getActualLocation();
2102
+ };
2103
+ var pageReferrer = ({ payload, next }) => {
2104
+ const {
2105
+ obj: { context }
2106
+ } = payload;
2107
+ const { isPageTrack } = context;
2108
+ const referrer = getPageReferrer({ isPageTrack });
2109
+ payload.obj.context = {
2110
+ ...context,
2111
+ page: {
2112
+ ...context.page,
2113
+ referrer
2114
+ }
2115
+ };
2116
+ if (isPageTrack) {
2117
+ updatePageReferrer();
2118
+ }
2119
+ next(payload);
2120
+ };
2121
+
2122
+ // src/repositories/googleRepository.ts
2123
+ var STC = {
2124
+ QUERY: "stc",
2125
+ SPLIT_SYMBOL: "-",
2126
+ CAMPAIGN_SPLIT_SYMBOL: ":"
2127
+ };
2128
+ var UTM_CAMPAIGN = "utm_campaign";
2129
+ var UTM_MEDIUM = "utm_medium";
2130
+ var UTM_SOURCE = "utm_source";
2131
+ var UTM_CONTENT = "utm_content";
2132
+ var UTM_CAMPAIGN_ID = "utm_id";
2133
+ var UTM_TERM = "utm_term";
2134
+ var STC_MEDIUM_TRANSFORMATIONS = {
2135
+ aff: "affiliate",
2136
+ dis: "display",
2137
+ em: "email",
2138
+ met: "paid-metasearch",
2139
+ sem: "paid-search",
2140
+ rt: "display",
2141
+ sm: "social-media",
2142
+ sp: "paid-social",
2143
+ pn: "push-notification",
2144
+ cs: "cross-sites"
2145
+ };
2146
+ var STC_INVALID_CONTENT = "na";
2147
+ var EMPTY_STC = { medium: null, source: null, campaign: null };
2148
+ var trackingTagsTypes = {
2149
+ STC: "stc",
2150
+ UTM: "utm"
2151
+ };
2152
+ var getCampaignDetails = ({ needsTransformation = true } = {}) => {
2153
+ const { medium, source, campaign, content, term } = readQueryParams();
2154
+ if (!medium || !source || !campaign) return null;
2155
+ const [id, name] = campaign.split(STC.CAMPAIGN_SPLIT_SYMBOL);
2156
+ if (!id && !name) return null;
2157
+ const needsContent = typeof content !== "undefined" && content !== STC_INVALID_CONTENT;
2158
+ return {
2159
+ campaign: {
2160
+ medium: needsTransformation && STC_MEDIUM_TRANSFORMATIONS[medium] || medium,
2161
+ ...typeof name !== "undefined" && { id },
2162
+ name: name ?? id,
2163
+ source,
2164
+ ...needsContent && { content },
2165
+ ...typeof term !== "undefined" && { term }
2166
+ }
2167
+ };
2168
+ };
2169
+ function readQueryParams() {
2170
+ const search = utils.getActualQueryString();
2171
+ const searchParams = new URLSearchParams(search);
2172
+ return getConfig("trackingTagsType") === trackingTagsTypes.UTM ? readFromUtm(searchParams) : readFromStc(searchParams);
2173
+ }
2174
+ function readFromStc(searchParams) {
2175
+ if (!hasStc(searchParams)) return EMPTY_STC;
2176
+ const stc = searchParams.get(STC.QUERY);
2177
+ const [medium, source, campaign, content, term] = stc?.split(STC.SPLIT_SYMBOL) || [];
2178
+ return { medium, source, campaign, content, term };
2179
+ }
2180
+ function hasStc(searchParams) {
2181
+ return searchParams.has(STC.QUERY);
2182
+ }
2183
+ function readFromUtm(searchParams) {
2184
+ const campaignId = searchParams.get(UTM_CAMPAIGN_ID);
2185
+ const campaignName = searchParams.get(UTM_CAMPAIGN);
2186
+ const medium = searchParams.get(UTM_MEDIUM);
2187
+ const source = searchParams.get(UTM_SOURCE);
2188
+ const content = searchParams.get(UTM_CONTENT);
2189
+ const term = searchParams.get(UTM_TERM);
2190
+ const campaign = campaignId ? `${campaignId}${STC.CAMPAIGN_SPLIT_SYMBOL}${campaignName}` : campaignName;
2191
+ const missingAnyMandatoryFields = !medium || !source || !campaign;
2192
+ if (missingAnyMandatoryFields && hasStc(searchParams)) {
2193
+ return readFromStc(searchParams);
2194
+ }
2195
+ return {
2196
+ campaign,
2197
+ medium,
2198
+ source,
2199
+ content: content ?? void 0,
2200
+ term: term ?? void 0
2201
+ };
2202
+ }
2203
+
2314
2204
  // src/middlewares/source/campaignContext.ts
2315
2205
  var campaignContext = ({ payload, next }) => {
2316
- const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
2317
- if (googleAnalyticsMeasurementId) {
2318
- const campaignDetails = getCampaignDetails();
2206
+ const campaignDetails = getCampaignDetails();
2207
+ payload.obj.context = {
2208
+ ...payload.obj.context,
2209
+ ...campaignDetails
2210
+ };
2211
+ next(payload);
2212
+ };
2213
+
2214
+ // src/middlewares/source/consentMode.ts
2215
+ var consentMode = ({ payload, next }) => {
2216
+ const gdprPrivacyValue = getGdprPrivacyValueSync();
2217
+ if (gdprPrivacyValue) {
2218
+ const { analytics, advertising } = gdprPrivacyValue;
2219
+ const isAnalyticsAccepted = analytics === USER_GDPR.ACCEPTED;
2220
+ const isAdvertisingAccepted = advertising === USER_GDPR.ACCEPTED;
2319
2221
  payload.obj.context = {
2320
2222
  ...payload.obj.context,
2321
- ...campaignDetails
2223
+ google_consents: {
2224
+ analytics_storage: isAnalyticsAccepted ? "granted" : "denied",
2225
+ ad_storage: isAdvertisingAccepted ? "granted" : "denied",
2226
+ ad_user_data: isAdvertisingAccepted ? "granted" : "denied",
2227
+ ad_personalization: isAdvertisingAccepted ? "granted" : "denied"
2228
+ }
2322
2229
  };
2323
2230
  }
2324
2231
  next(payload);
@@ -2548,6 +2455,11 @@ var TCFEvents = /* @__PURE__ */ ((TCFEvents2) => {
2548
2455
  return TCFEvents2;
2549
2456
  })(TCFEvents || {});
2550
2457
 
2458
+ // src/events.ts
2459
+ var EVENTS = {
2460
+ GA4_INIT_EVENT_SENT: "ga4InitEventSent"
2461
+ };
2462
+
2551
2463
  // src/utils/storage.ts
2552
2464
  var storage = ({
2553
2465
  type = "localStorage",
@@ -2605,6 +2517,7 @@ var addMiddlewares = () => {
2605
2517
  const experimentalPageDataMiddleware = getConfig("experimentalPageDataMiddleware");
2606
2518
  window.analytics.addSourceMiddleware?.(userTraits);
2607
2519
  window.analytics.addSourceMiddleware?.(defaultContextProperties);
2520
+ window.analytics.addSourceMiddleware?.(consentMode);
2608
2521
  window.analytics.addSourceMiddleware?.(campaignContext);
2609
2522
  window.analytics.addSourceMiddleware?.(userScreenInfo);
2610
2523
  window.analytics.addSourceMiddleware?.(pageReferrer);
@@ -2613,37 +2526,12 @@ var addMiddlewares = () => {
2613
2526
  }
2614
2527
  };
2615
2528
  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
2529
  window.analytics.ready(checkAnonymousId);
2641
2530
  window.analytics.addSourceMiddleware ? addMiddlewares() : window.analytics.ready(addMiddlewares);
2642
2531
  }
2643
2532
  var index_default = segmentWrapper_default;
2644
2533
  // Annotate the CommonJS export names for ESM import in node:
2645
2534
  0 && (module.exports = {
2646
- CONSENT_STATES,
2647
2535
  EVENTS,
2648
2536
  TCFEvents,
2649
2537
  UserGDPR,
@@ -2652,6 +2540,7 @@ var index_default = segmentWrapper_default;
2652
2540
  createUniversalId,
2653
2541
  getAdobeMCVisitorID,
2654
2542
  getAdobeVisitorData,
2543
+ getCampaignDetails,
2655
2544
  getConfig,
2656
2545
  getStorageItem,
2657
2546
  getUniversalId,
@@ -2666,7 +2555,8 @@ var index_default = segmentWrapper_default;
2666
2555
  setConfig,
2667
2556
  setStorageItem,
2668
2557
  storage,
2669
- toCookieDomain
2558
+ toCookieDomain,
2559
+ trackingTagsTypes
2670
2560
  });
2671
2561
  /**
2672
2562
  * @license