@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/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 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": clientId && sessionId ? {
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
- analytics_storage: getConsentState(),
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 googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
2317
- if (googleAnalyticsMeasurementId) {
2318
- const campaignDetails = getCampaignDetails();
2319
- payload.obj.context = {
2320
- ...payload.obj.context,
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