@adv-re/segment-wrapper 4.36.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 ADDED
@@ -0,0 +1,1145 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ CONSENT_STATES: () => CONSENT_STATES,
34
+ EVENTS: () => EVENTS,
35
+ TCFEvents: () => TCFEvents,
36
+ UserGDPR: () => UserGDPR,
37
+ checkAnonymousId: () => checkAnonymousId,
38
+ clearConfig: () => clearConfig,
39
+ createUniversalId: () => createUniversalId,
40
+ default: () => index_default,
41
+ getAdobeMCVisitorID: () => getAdobeMCVisitorID,
42
+ getAdobeVisitorData: () => getAdobeVisitorData,
43
+ getConfig: () => getConfig,
44
+ getStorageItem: () => getStorageItem,
45
+ getUniversalId: () => getUniversalId,
46
+ hashEmail: () => hashEmail,
47
+ initConfig: () => initConfig,
48
+ isClient: () => isClient,
49
+ normalizeEmail: () => normalizeEmail,
50
+ readCookie: () => readCookie2,
51
+ removeCookie: () => removeCookie,
52
+ removeStorageItem: () => removeStorageItem,
53
+ saveCookie: () => saveCookie,
54
+ setConfig: () => setConfig,
55
+ setStorageItem: () => setStorageItem,
56
+ storage: () => storage,
57
+ toCookieDomain: () => toCookieDomain
58
+ });
59
+ module.exports = __toCommonJS(index_exports);
60
+
61
+ // src/config.ts
62
+ var MPI_CONFIG_KEY = "__mpi";
63
+ var isClient = typeof window !== "undefined";
64
+ var getWindowWithMPI = () => {
65
+ return isClient ? window : void 0;
66
+ };
67
+ function getConfig(key) {
68
+ const win = getWindowWithMPI();
69
+ const config = win?.[MPI_CONFIG_KEY]?.segmentWrapper || {};
70
+ return key ? config[key] : config;
71
+ }
72
+ var setConfig = (key, value) => {
73
+ const win = getWindowWithMPI();
74
+ if (!win) {
75
+ console.warn("[segment-wrapper] Cannot set config in non-browser environment");
76
+ return;
77
+ }
78
+ win[MPI_CONFIG_KEY] = win[MPI_CONFIG_KEY] || {};
79
+ win[MPI_CONFIG_KEY].segmentWrapper = win[MPI_CONFIG_KEY].segmentWrapper || {};
80
+ win[MPI_CONFIG_KEY].segmentWrapper[key] = value;
81
+ };
82
+ var initConfig = (config) => {
83
+ const win = getWindowWithMPI();
84
+ if (!win) {
85
+ console.warn("[segment-wrapper] Cannot initialize config in non-browser environment");
86
+ return;
87
+ }
88
+ win[MPI_CONFIG_KEY] = win[MPI_CONFIG_KEY] || {};
89
+ win[MPI_CONFIG_KEY].segmentWrapper = {
90
+ ...win[MPI_CONFIG_KEY].segmentWrapper,
91
+ ...config
92
+ };
93
+ };
94
+ var clearConfig = () => {
95
+ const win = getWindowWithMPI();
96
+ if (!win || !win[MPI_CONFIG_KEY]) return;
97
+ win[MPI_CONFIG_KEY].segmentWrapper = {};
98
+ };
99
+
100
+ // src/repositories/adobeRepository.ts
101
+ var mcvid;
102
+ var getGlobalConfig = () => {
103
+ return {
104
+ ADOBE_ORG_ID: window.__SEGMENT_WRAPPER?.ADOBE_ORG_ID,
105
+ DEFAULT_DEMDEX_VERSION: window.__SEGMENT_WRAPPER?.DEFAULT_DEMDEX_VERSION ?? "3.3.0",
106
+ TIME_BETWEEN_RETRIES: window.__SEGMENT_WRAPPER?.TIME_BETWEEN_RETRIES ?? 15,
107
+ TIMES_TO_RETRY: window.__SEGMENT_WRAPPER?.TIMES_TO_RETRY ?? 80,
108
+ SERVERS: {
109
+ trackingServer: window.__SEGMENT_WRAPPER?.TRACKING_SERVER,
110
+ trackingServerSecure: window.__SEGMENT_WRAPPER?.TRACKING_SERVER
111
+ }
112
+ };
113
+ };
114
+ var getDemdex = () => {
115
+ const config = getGlobalConfig();
116
+ if (window.Visitor && config.ADOBE_ORG_ID) {
117
+ return window.Visitor.getInstance(config.ADOBE_ORG_ID, config.SERVERS);
118
+ }
119
+ return void 0;
120
+ };
121
+ var getMarketingCloudVisitorID = (demdex) => {
122
+ const mcvid2 = demdex?.getMarketingCloudVisitorID();
123
+ return mcvid2;
124
+ };
125
+ var getAdobeVisitorData = () => {
126
+ const demdex = getDemdex();
127
+ const config = getGlobalConfig();
128
+ const version = demdex?.version ?? config.DEFAULT_DEMDEX_VERSION;
129
+ const { trackingServer } = config.SERVERS;
130
+ return Promise.resolve({ trackingServer, version });
131
+ };
132
+ var getAdobeMarketingCloudVisitorIdFromWindow = () => {
133
+ if (mcvid) return Promise.resolve(mcvid);
134
+ const config = getGlobalConfig();
135
+ return new Promise((resolve) => {
136
+ function retry(retries) {
137
+ if (retries === 0) return resolve("");
138
+ const demdex = getDemdex();
139
+ mcvid = getMarketingCloudVisitorID(demdex);
140
+ if (mcvid) {
141
+ resolve(mcvid);
142
+ } else {
143
+ window.setTimeout(() => retry(--retries), config.TIME_BETWEEN_RETRIES);
144
+ }
145
+ }
146
+ retry(config.TIMES_TO_RETRY);
147
+ });
148
+ };
149
+ var importVisitorApiAndGetAdobeMCVisitorID = async () => {
150
+ return getAdobeMarketingCloudVisitorIdFromWindow();
151
+ };
152
+ var getAdobeMCVisitorID = async () => {
153
+ const getCustomAdobeVisitorId = getConfig("getCustomAdobeVisitorId");
154
+ if (typeof getCustomAdobeVisitorId === "function") {
155
+ return getCustomAdobeVisitorId();
156
+ }
157
+ return getConfig("importAdobeVisitorId") === true ? importVisitorApiAndGetAdobeMCVisitorID() : getAdobeMarketingCloudVisitorIdFromWindow();
158
+ };
159
+
160
+ // src/events.ts
161
+ var EVENTS = {
162
+ GA4_INIT_EVENT_SENT: "ga4InitEventSent"
163
+ };
164
+
165
+ // src/middlewares/source/pageReferrer.ts
166
+ var referrerState = {
167
+ spaReferrer: "",
168
+ referrer: ""
169
+ };
170
+ var utils = {
171
+ /**
172
+ * @returns The referrer of the document
173
+ */
174
+ getDocumentReferrer: () => document.referrer,
175
+ /**
176
+ * @returns The actual location with protocol, domain and pathname
177
+ */
178
+ getActualLocation: () => {
179
+ const { origin, pathname } = window.location;
180
+ return `${origin}${pathname}`;
181
+ },
182
+ /**
183
+ * @returns The actual query string
184
+ */
185
+ getActualQueryString: () => {
186
+ const { search } = window.location;
187
+ return search;
188
+ }
189
+ };
190
+ var getPageReferrer = ({ isPageTrack = false } = {}) => {
191
+ const { referrer, spaReferrer } = referrerState;
192
+ const referrerToUse = isPageTrack ? referrer : spaReferrer;
193
+ return referrerToUse || utils.getDocumentReferrer();
194
+ };
195
+ var updatePageReferrer = () => {
196
+ referrerState.spaReferrer = getPageReferrer({ isPageTrack: true });
197
+ referrerState.referrer = utils.getActualLocation();
198
+ };
199
+ var pageReferrer = ({ payload, next }) => {
200
+ const {
201
+ obj: { context }
202
+ } = payload;
203
+ const { isPageTrack } = context;
204
+ const referrer = getPageReferrer({ isPageTrack });
205
+ payload.obj.context = {
206
+ ...context,
207
+ page: {
208
+ ...context.page,
209
+ referrer
210
+ }
211
+ };
212
+ if (isPageTrack) {
213
+ updatePageReferrer();
214
+ }
215
+ next(payload);
216
+ };
217
+
218
+ // src/repositories/googleRepository.ts
219
+ var FIELDS = {
220
+ clientId: "client_id",
221
+ sessionId: "session_id"
222
+ };
223
+ var DEFAULT_DATA_LAYER_NAME = "dataLayer";
224
+ var CONSENT_STATES = {
225
+ granted: "granted",
226
+ denied: "denied"
227
+ };
228
+ var CONSENT_STATE_GRANTED_VALUE = 1;
229
+ var CONSENT_STATE_DENIED_VALUE = 2;
230
+ var STC = {
231
+ QUERY: "stc",
232
+ SPLIT_SYMBOL: "-",
233
+ CAMPAIGN_SPLIT_SYMBOL: ":"
234
+ };
235
+ var UTM_CAMPAIGN = "utm_campaign";
236
+ var UTM_MEDIUM = "utm_medium";
237
+ var UTM_SOURCE = "utm_source";
238
+ var UTM_CONTENT = "utm_content";
239
+ var UTM_CAMPAIGN_ID = "utm_id";
240
+ var UTM_TERM = "utm_term";
241
+ var STC_MEDIUM_TRANSFORMATIONS = {
242
+ aff: "affiliate",
243
+ dis: "display",
244
+ em: "email",
245
+ met: "paid-metasearch",
246
+ sem: "paid-search",
247
+ rt: "display",
248
+ sm: "social-media",
249
+ sp: "paid-social",
250
+ pn: "push-notification",
251
+ cs: "cross-sites"
252
+ };
253
+ var STC_INVALID_CONTENT = "na";
254
+ var DEFAULT_GA_INIT_EVENT = "sui";
255
+ var EMPTY_STC = { medium: null, source: null, campaign: null };
256
+ var loadScript = async (src) => new Promise(function(resolve, reject) {
257
+ const script = document.createElement("script");
258
+ script.src = src;
259
+ script.onload = () => resolve();
260
+ script.onerror = reject;
261
+ document.head.appendChild(script);
262
+ });
263
+ var loadGoogleAnalytics = async () => {
264
+ const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
265
+ const dataLayerName = getConfig("googleAnalyticsDataLayer") || DEFAULT_DATA_LAYER_NAME;
266
+ if (!googleAnalyticsMeasurementId) return Promise.resolve(false);
267
+ const gtagScript = `https://www.googletagmanager.com/gtag/js?id=${googleAnalyticsMeasurementId}&l=${dataLayerName}`;
268
+ return loadScript(gtagScript).then(() => true);
269
+ };
270
+ var triggerGoogleAnalyticsInitEvent = (sessionId) => {
271
+ const eventName = getConfig("googleAnalyticsInitEvent") ?? DEFAULT_GA_INIT_EVENT;
272
+ const eventPrefix = `ga_event_${eventName}_`;
273
+ const eventKey = `${eventPrefix}${sessionId}`;
274
+ if (typeof window.gtag === "undefined") return;
275
+ if (!localStorage.getItem(eventKey)) {
276
+ window.gtag("event", eventName);
277
+ console.log(`Sending GA4 event "${eventName}" for the session "${sessionId}"`);
278
+ localStorage.setItem(eventKey, "true");
279
+ if (typeof window.dispatchEvent === "function") {
280
+ const event = new CustomEvent(EVENTS.GA4_INIT_EVENT_SENT, {
281
+ detail: { eventName, sessionId }
282
+ });
283
+ window.dispatchEvent(event);
284
+ }
285
+ }
286
+ Object.keys(localStorage).forEach((key) => {
287
+ if (key.startsWith(eventPrefix) && key !== eventKey) {
288
+ localStorage.removeItem(key);
289
+ }
290
+ });
291
+ };
292
+ var getGoogleField = async (field) => {
293
+ const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
294
+ if (!googleAnalyticsMeasurementId) return Promise.resolve(void 0);
295
+ return new Promise((resolve) => {
296
+ window.gtag?.("get", googleAnalyticsMeasurementId, field, resolve);
297
+ });
298
+ };
299
+ var trackingTagsTypes = {
300
+ STC: "stc",
301
+ UTM: "utm"
302
+ };
303
+ var getCampaignDetails = ({ needsTransformation = true } = {}) => {
304
+ const { medium, source, campaign, content, term } = readQueryParams();
305
+ if (!medium || !source || !campaign) return null;
306
+ const [id, name] = campaign.split(STC.CAMPAIGN_SPLIT_SYMBOL);
307
+ if (!id && !name) return null;
308
+ const needsContent = typeof content !== "undefined" && content !== STC_INVALID_CONTENT;
309
+ return {
310
+ campaign: {
311
+ medium: needsTransformation && STC_MEDIUM_TRANSFORMATIONS[medium] || medium,
312
+ ...typeof name !== "undefined" && { id },
313
+ name: name ?? id,
314
+ source,
315
+ ...needsContent && { content },
316
+ ...typeof term !== "undefined" && { term }
317
+ }
318
+ };
319
+ };
320
+ function readQueryParams() {
321
+ const search = utils.getActualQueryString();
322
+ const searchParams = new URLSearchParams(search);
323
+ return getConfig("trackingTagsType") === trackingTagsTypes.UTM ? readFromUtm(searchParams) : readFromStc(searchParams);
324
+ }
325
+ function readFromStc(searchParams) {
326
+ if (!hasStc(searchParams)) return EMPTY_STC;
327
+ const stc = searchParams.get(STC.QUERY);
328
+ const [medium, source, campaign, content, term] = stc?.split(STC.SPLIT_SYMBOL) || [];
329
+ return { medium, source, campaign, content, term };
330
+ }
331
+ function hasStc(searchParams) {
332
+ return searchParams.has(STC.QUERY);
333
+ }
334
+ function readFromUtm(searchParams) {
335
+ const campaignId = searchParams.get(UTM_CAMPAIGN_ID);
336
+ const campaignName = searchParams.get(UTM_CAMPAIGN);
337
+ const medium = searchParams.get(UTM_MEDIUM);
338
+ const source = searchParams.get(UTM_SOURCE);
339
+ const content = searchParams.get(UTM_CONTENT);
340
+ const term = searchParams.get(UTM_TERM);
341
+ const campaign = campaignId ? `${campaignId}${STC.CAMPAIGN_SPLIT_SYMBOL}${campaignName}` : campaignName;
342
+ const missingAnyMandatoryFields = !medium || !source || !campaign;
343
+ if (missingAnyMandatoryFields && hasStc(searchParams)) {
344
+ return readFromStc(searchParams);
345
+ }
346
+ return {
347
+ campaign,
348
+ medium,
349
+ source,
350
+ content: content ?? void 0,
351
+ term: term ?? void 0
352
+ };
353
+ }
354
+ var getGoogleClientId = async () => getGoogleField(FIELDS.clientId);
355
+ var getGoogleSessionId = async () => {
356
+ const sessionId = await getGoogleField(FIELDS.sessionId);
357
+ if (sessionId) {
358
+ triggerGoogleAnalyticsInitEvent(sessionId);
359
+ }
360
+ return sessionId;
361
+ };
362
+ function getGoogleConsentValue(consentType = "analytics_storage") {
363
+ try {
364
+ const value = window.google_tag_data?.ics?.getConsentState?.(consentType);
365
+ if (value === CONSENT_STATE_GRANTED_VALUE) return CONSENT_STATES.granted;
366
+ if (value === CONSENT_STATE_DENIED_VALUE) return CONSENT_STATES.denied;
367
+ return void 0;
368
+ } catch {
369
+ return void 0;
370
+ }
371
+ }
372
+ var getConsentState = () => getGoogleConsentValue() ?? CONSENT_STATES.denied;
373
+ var setGoogleUserId = (userId) => {
374
+ const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
375
+ if (!googleAnalyticsMeasurementId || !userId) return;
376
+ window.gtag?.("set", "user_id", userId);
377
+ };
378
+ var sendGoogleConsents = (mode = "default", consents) => {
379
+ window.gtag?.(
380
+ "consent",
381
+ mode,
382
+ consents || {
383
+ analytics_storage: CONSENT_STATES.denied,
384
+ ad_user_data: CONSENT_STATES.denied,
385
+ ad_personalization: CONSENT_STATES.denied,
386
+ ad_storage: CONSENT_STATES.denied
387
+ }
388
+ );
389
+ };
390
+
391
+ // src/tcf.ts
392
+ var TCF_COOKIE_KEY = "borosTcf";
393
+ var TCF_API_VERSION = 2;
394
+ var TCF_TRACK_PROPERTIES = {
395
+ channel: "GDPR"
396
+ };
397
+ var NEEDED_PURPOSES = {
398
+ analytics: [1, 8, 10],
399
+ advertising: [3]
400
+ };
401
+ var TCF_EVENTS = {
402
+ /** Event that determines that the tcData has been loaded */
403
+ LOADED: "tcloaded",
404
+ /** Event that determines that the user has performed an action */
405
+ USER_ACTION_COMPLETE: "useractioncomplete"
406
+ };
407
+ var CMP_TRACK_EVENT = "CMP Submitted";
408
+ var USER_GDPR = {
409
+ ACCEPTED: "accepted",
410
+ DECLINED: "declined",
411
+ UNKNOWN: "unknown"
412
+ };
413
+ var gdprState = {
414
+ listeners: [],
415
+ value: void 0,
416
+ addListener: (callback) => gdprState.listeners.push(callback),
417
+ get: () => gdprState.value,
418
+ set: (value) => {
419
+ const { analytics, advertising } = value || {};
420
+ gdprState.value = {
421
+ analytics,
422
+ advertising
423
+ };
424
+ gdprState.listeners.forEach((fn) => fn(value));
425
+ gdprState.listeners = [];
426
+ }
427
+ };
428
+ function readCookie(key) {
429
+ if (!isClient) return null;
430
+ const re = new RegExp(key + "=([^;]+)");
431
+ const value = re.exec(document.cookie);
432
+ return value !== null ? unescape(value[1]) : null;
433
+ }
434
+ var checkTcfIsAvailable = () => {
435
+ if (getConfig("initialized")) return false;
436
+ const isTcfApiAvailable = !!window.__tcfapi;
437
+ if (!isTcfApiAvailable) {
438
+ console.warn("[tcfTracking] window.__tcfapi is not available on client and TCF won't be tracked.");
439
+ }
440
+ return isTcfApiAvailable;
441
+ };
442
+ var checkHasUserConsentedAnalytics = (userConsents) => NEEDED_PURPOSES.analytics.every((purposeId) => userConsents[`${purposeId}`]);
443
+ var checkHasUserConsentedAdvertising = (userConsents) => NEEDED_PURPOSES.advertising.every((purposeId) => userConsents[`${purposeId}`]);
444
+ var trackTcf = ({ gdprPrivacy }) => segmentWrapper_default.track(
445
+ CMP_TRACK_EVENT,
446
+ {
447
+ ...TCF_TRACK_PROPERTIES,
448
+ ...getConfig("tcfTrackDefaultProperties") || {}
449
+ },
450
+ {
451
+ gdpr_privacy: gdprPrivacy.analytics,
452
+ gdpr_privacy_advertising: gdprPrivacy.advertising
453
+ }
454
+ );
455
+ var getGdprPrivacyValue = () => {
456
+ const gdprPrivacyValue = gdprState.get();
457
+ if (gdprPrivacyValue !== void 0) return Promise.resolve(gdprPrivacyValue);
458
+ return new Promise((resolve) => {
459
+ gdprState.addListener((gdprPrivacyValue2) => resolve(gdprPrivacyValue2));
460
+ });
461
+ };
462
+ var checkAnalyticsGdprIsAccepted = (gdprPrivacyValue) => {
463
+ return gdprPrivacyValue?.analytics === USER_GDPR.ACCEPTED;
464
+ };
465
+ var setGdprStateBy = (purposeConsents) => {
466
+ const hasAnalyticsConsents = checkHasUserConsentedAnalytics(purposeConsents);
467
+ const hasAdvertisingConsents = checkHasUserConsentedAdvertising(purposeConsents);
468
+ const gdprAnalyticsStateKey = hasAnalyticsConsents ? USER_GDPR.ACCEPTED : USER_GDPR.DECLINED;
469
+ const gdprAdvertisingStateKey = hasAdvertisingConsents ? USER_GDPR.ACCEPTED : USER_GDPR.DECLINED;
470
+ gdprState.set({
471
+ analytics: gdprAnalyticsStateKey,
472
+ advertising: gdprAdvertisingStateKey
473
+ });
474
+ return {
475
+ analytics: gdprAnalyticsStateKey,
476
+ advertising: gdprAdvertisingStateKey
477
+ };
478
+ };
479
+ var getConsentsFromCookie = () => {
480
+ const cookieValue = readCookie(TCF_COOKIE_KEY);
481
+ if (!cookieValue) return;
482
+ try {
483
+ const { purpose } = JSON.parse(window.atob(cookieValue));
484
+ const { consents } = purpose;
485
+ return consents;
486
+ } catch (e) {
487
+ console.error(e);
488
+ return void 0;
489
+ }
490
+ };
491
+ var initializeGdprState = () => {
492
+ const consents = getConsentsFromCookie();
493
+ if (consents) setGdprStateBy(consents);
494
+ };
495
+ var initializeIsFirstVisit = () => {
496
+ const consents = getConsentsFromCookie();
497
+ setConfig("isFirstVisit", !consents);
498
+ };
499
+ function initTcfTracking() {
500
+ if (!isClient) return;
501
+ initializeGdprState();
502
+ initializeIsFirstVisit();
503
+ if (!checkTcfIsAvailable()) {
504
+ const analyticsGdprState = gdprState.get()?.analytics;
505
+ if (analyticsGdprState === void 0)
506
+ gdprState.set({
507
+ analytics: USER_GDPR.UNKNOWN,
508
+ advertising: USER_GDPR.UNKNOWN
509
+ });
510
+ return;
511
+ }
512
+ setConfig("initialized", true);
513
+ window.__tcfapi?.("addEventListener", TCF_API_VERSION, ({ eventStatus, purpose }, success) => {
514
+ if (!success) return Promise.resolve();
515
+ if (eventStatus === TCF_EVENTS.USER_ACTION_COMPLETE || eventStatus === TCF_EVENTS.LOADED) {
516
+ const { consents } = purpose;
517
+ const gdprStateKey = setGdprStateBy(consents);
518
+ if (eventStatus === TCF_EVENTS.USER_ACTION_COMPLETE) {
519
+ const { analytics: analyticsStateKey, advertising: advertisingStateKey } = gdprStateKey;
520
+ const gdprPrivacy = {
521
+ analytics: analyticsStateKey,
522
+ advertising: advertisingStateKey
523
+ };
524
+ const MIGRATION_DIDOMI_SEGMENT_WRAPPER_FLAG = "didomi-migration";
525
+ const isDidomiMigration = isClient && window.sessionStorage.getItem(MIGRATION_DIDOMI_SEGMENT_WRAPPER_FLAG);
526
+ return !isDidomiMigration && trackTcf({
527
+ gdprPrivacy
528
+ });
529
+ }
530
+ }
531
+ });
532
+ }
533
+
534
+ // src/utils/cookies.ts
535
+ var ONE_YEAR = 31536e3;
536
+ var DEFAULT_PATH = "/";
537
+ var DEFAULT_SAME_SITE = "Lax";
538
+ function readCookie2(cookieName) {
539
+ if (typeof document === "undefined") return null;
540
+ const re = new RegExp(`${cookieName}=([^;]+)`);
541
+ const value = re.exec(document.cookie);
542
+ return value !== null ? unescape(value[1]) : null;
543
+ }
544
+ function saveCookie(cookieName, data, options = {}) {
545
+ if (typeof document === "undefined" || typeof window === "undefined") return;
546
+ const { maxAge = ONE_YEAR, path = DEFAULT_PATH, reduceDomain = true, sameSite = DEFAULT_SAME_SITE } = options;
547
+ const domain = reduceDomain ? toCookieDomain() : window.location.hostname;
548
+ const cookieValue = [
549
+ `${cookieName}=${data}`,
550
+ `domain=${domain}`,
551
+ `path=${path}`,
552
+ `max-age=${maxAge}`,
553
+ `SameSite=${sameSite}`
554
+ ].join(";");
555
+ document.cookie = cookieValue;
556
+ }
557
+ function removeCookie(cookieName, options = {}) {
558
+ if (typeof document === "undefined" || typeof window === "undefined") return;
559
+ const { path = DEFAULT_PATH, reduceDomain = true } = options;
560
+ const domain = reduceDomain ? toCookieDomain() : window.location.hostname;
561
+ document.cookie = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${path}; domain=${domain}`;
562
+ }
563
+ var toCookieDomain = (domain) => {
564
+ const hostname = domain !== void 0 ? domain : typeof window !== "undefined" ? window.location.hostname : "";
565
+ const DOT = ".";
566
+ const hostDomainParts = hostname.split(DOT).reverse();
567
+ if (hostDomainParts.length === 1) {
568
+ return hostDomainParts[0];
569
+ }
570
+ const cookieDomainParts = [];
571
+ for (const part of hostDomainParts) {
572
+ cookieDomainParts.push(part);
573
+ if (part.length > 3) break;
574
+ }
575
+ return `${DOT}${cookieDomainParts.reverse().join(DOT)}`;
576
+ };
577
+
578
+ // src/repositories/xandrRepository.ts
579
+ var XANDR_ID_SERVER_URL = "https://secure.adnxs.com/getuidj?consent=1";
580
+ var XANDR_ID_COOKIE = "adit-xandr-id";
581
+ var USER_OPTED_OUT_XANDR_ID_VALUE = 0;
582
+ function getRemoteXandrId() {
583
+ if (!isClient) return Promise.resolve(null);
584
+ return window.fetch(XANDR_ID_SERVER_URL, {
585
+ credentials: "include"
586
+ }).then((response) => response.json()).then((json) => json?.uid).catch(() => null);
587
+ }
588
+ function getXandrId({ gdprPrivacyValueAdvertising }) {
589
+ if (!isClient) return null;
590
+ if (gdprPrivacyValueAdvertising !== USER_GDPR.ACCEPTED) {
591
+ removeCookie(XANDR_ID_COOKIE);
592
+ return null;
593
+ }
594
+ const checkValid = (xandrId) => xandrId !== null && Number(xandrId) > USER_OPTED_OUT_XANDR_ID_VALUE;
595
+ const storedXandrId = readCookie2(XANDR_ID_COOKIE);
596
+ const isValidXandrId = checkValid(storedXandrId);
597
+ if (!isValidXandrId) {
598
+ getRemoteXandrId().then((xandrId) => {
599
+ if (typeof xandrId === "string") {
600
+ saveCookie(XANDR_ID_COOKIE, xandrId);
601
+ }
602
+ });
603
+ }
604
+ setConfig("xandrId", storedXandrId);
605
+ return isValidXandrId ? storedXandrId : null;
606
+ }
607
+
608
+ // src/segmentWrapper.ts
609
+ var DEFAULT_PROPERTIES = { platform: "web" };
610
+ var INTEGRATIONS_WHEN_NO_CONSENTS = {
611
+ All: false
612
+ };
613
+ var INTEGRATIONS_WHEN_NO_CONSENTS_CMP_SUBMITTED = {
614
+ All: true
615
+ };
616
+ var getUserId = (userId) => {
617
+ const prefix = getConfig("userIdPrefix");
618
+ if (!prefix) {
619
+ return userId;
620
+ }
621
+ if (typeof userId === "number" || typeof userId === "string" && !userId.startsWith(prefix)) {
622
+ return `${prefix}${userId}`;
623
+ }
624
+ return userId;
625
+ };
626
+ var getDefaultProperties = () => ({
627
+ ...DEFAULT_PROPERTIES,
628
+ ...getConfig("defaultProperties")
629
+ });
630
+ var getTrackIntegrations = async ({
631
+ gdprPrivacyValue,
632
+ event
633
+ }) => {
634
+ const isGdprAccepted = checkAnalyticsGdprIsAccepted(gdprPrivacyValue);
635
+ let marketingCloudVisitorId;
636
+ let sessionId;
637
+ let clientId;
638
+ try {
639
+ if (isGdprAccepted) {
640
+ marketingCloudVisitorId = await getAdobeMCVisitorID();
641
+ }
642
+ sessionId = await getGoogleSessionId();
643
+ clientId = await getGoogleClientId();
644
+ } catch (error) {
645
+ console.error(error);
646
+ }
647
+ const restOfIntegrations = getRestOfIntegrations({ isGdprAccepted, event });
648
+ return {
649
+ ...restOfIntegrations,
650
+ "Adobe Analytics": marketingCloudVisitorId ? { marketingCloudVisitorId } : true,
651
+ "Google Analytics 4": clientId && sessionId ? {
652
+ clientId,
653
+ sessionId
654
+ } : true
655
+ };
656
+ };
657
+ var getRestOfIntegrations = ({
658
+ isGdprAccepted,
659
+ event
660
+ }) => {
661
+ const isCMPSubmittedEvent = event === "CMP Submitted";
662
+ if (isCMPSubmittedEvent) {
663
+ return INTEGRATIONS_WHEN_NO_CONSENTS_CMP_SUBMITTED;
664
+ }
665
+ return isGdprAccepted ? {} : INTEGRATIONS_WHEN_NO_CONSENTS;
666
+ };
667
+ var getExternalIds = ({
668
+ context,
669
+ xandrId
670
+ }) => {
671
+ const shouldSendXandrId = getConfig("sendXandrId") !== false;
672
+ const isValidXandrId = xandrId && parseInt(xandrId) !== 0;
673
+ if (!shouldSendXandrId || !isValidXandrId) {
674
+ return {};
675
+ }
676
+ const SEGMENT_COLLECTION = "users";
677
+ const SEGMENT_ENCODING = "none";
678
+ const SEGMENT_TYPE = "xandr_id";
679
+ const externalIds = [
680
+ ...Array.isArray(context?.externalIds) ? context.externalIds : [],
681
+ {
682
+ collection: SEGMENT_COLLECTION,
683
+ encoding: SEGMENT_ENCODING,
684
+ id: xandrId,
685
+ type: SEGMENT_TYPE
686
+ }
687
+ ];
688
+ const uniqueExternalIds = externalIds.filter(
689
+ ({ id: idFilter, type: typeFilter }, index) => index === externalIds.findIndex(({ id: idFind, type: typeFind }) => idFilter === idFind && typeFilter === typeFind)
690
+ );
691
+ return { externalIds: uniqueExternalIds };
692
+ };
693
+ var getConsentValue = (gdprValue) => {
694
+ return gdprValue === USER_GDPR.ACCEPTED ? CONSENT_STATES.granted : CONSENT_STATES.denied;
695
+ };
696
+ var decorateContextWithNeededData = async ({
697
+ event = "",
698
+ context = {}
699
+ }) => {
700
+ const gdprPrivacyValue = await getGdprPrivacyValue();
701
+ const { analytics: gdprPrivacyValueAnalytics, advertising: gdprPrivacyValueAdvertising } = gdprPrivacyValue || {};
702
+ const isGdprAccepted = checkAnalyticsGdprIsAccepted(gdprPrivacyValue);
703
+ const [integrations, xandrId] = await Promise.all([
704
+ getTrackIntegrations({ gdprPrivacyValue, event }),
705
+ getXandrId({ gdprPrivacyValueAdvertising })
706
+ ]);
707
+ const analyticsConsentValue = getGoogleConsentValue("analytics_storage") ?? getConsentValue(gdprPrivacyValueAnalytics);
708
+ const adUserDataConsentValue = getGoogleConsentValue("ad_user_data") ?? getConsentValue(gdprPrivacyValueAdvertising);
709
+ const adPersonalizationConsentValue = getGoogleConsentValue("ad_personalization") ?? getConsentValue(gdprPrivacyValueAdvertising);
710
+ const adStorageConsentValue = getGoogleConsentValue("ad_storage") ?? getConsentValue(gdprPrivacyValueAdvertising);
711
+ if (!isGdprAccepted) {
712
+ context.integrations = {
713
+ ...context.integrations ?? {},
714
+ Personas: false,
715
+ Webhooks: true,
716
+ Webhook: true
717
+ };
718
+ }
719
+ const google_consents = {
720
+ analytics_storage: analyticsConsentValue,
721
+ ad_user_data: adUserDataConsentValue,
722
+ ad_personalization: adPersonalizationConsentValue,
723
+ ad_storage: adStorageConsentValue
724
+ };
725
+ return {
726
+ ...context,
727
+ ...!isGdprAccepted && { ip: "0.0.0.0" },
728
+ ...getExternalIds({ context, xandrId }),
729
+ analytics_storage: getConsentState(),
730
+ clientVersion: `segment-wrapper@${"4.36.0-beta.0"}`,
731
+ gdpr_privacy: gdprPrivacyValueAnalytics,
732
+ gdpr_privacy_advertising: gdprPrivacyValueAdvertising,
733
+ google_consents,
734
+ integrations: {
735
+ ...context.integrations,
736
+ ...integrations
737
+ }
738
+ };
739
+ };
740
+ var track = (event, properties, context = {}, callback) => new Promise((resolve) => {
741
+ const initTrack = async () => {
742
+ const newContext = await decorateContextWithNeededData({
743
+ context,
744
+ event
745
+ });
746
+ const newProperties = {
747
+ ...getDefaultProperties(),
748
+ ...properties
749
+ };
750
+ const newCallback = async (...args) => {
751
+ if (callback) callback(...args);
752
+ const [gdprPrivacyValue] = await Promise.all([getGdprPrivacyValue()]);
753
+ if (checkAnalyticsGdprIsAccepted(gdprPrivacyValue)) {
754
+ resolve();
755
+ } else {
756
+ resolve();
757
+ }
758
+ };
759
+ const needsConsentManagement = getConfig("googleAnalyticsConsentManagement");
760
+ if (needsConsentManagement && event === CMP_TRACK_EVENT) {
761
+ sendGoogleConsents("update", newContext.google_consents);
762
+ }
763
+ window.analytics.track(
764
+ event,
765
+ newProperties,
766
+ {
767
+ ...newContext,
768
+ context: {
769
+ integrations: {
770
+ ...newContext.integrations
771
+ }
772
+ }
773
+ },
774
+ newCallback
775
+ );
776
+ };
777
+ initTrack();
778
+ });
779
+ var identify = async (userIdParam, traits, options, callback) => {
780
+ const gdprPrivacyValue = await getGdprPrivacyValue();
781
+ const userId = getUserId(userIdParam);
782
+ setGoogleUserId(userId);
783
+ return window.analytics.identify(
784
+ userId,
785
+ checkAnalyticsGdprIsAccepted(gdprPrivacyValue) ? traits : {},
786
+ options,
787
+ callback
788
+ );
789
+ };
790
+ var page = (event, properties, context = {}, callback) => {
791
+ ;
792
+ context.isPageTrack = true;
793
+ return track(event ?? "", properties, context, callback);
794
+ };
795
+ var reset = () => Promise.resolve(window.analytics.reset());
796
+ var segmentWrapper_default = { page, identify, track, reset };
797
+
798
+ // src/utils/patchAnalytics.ts
799
+ var MPI_PATCH_FIELD = "__mpi_patch";
800
+ function monkeyPatchAnalyticsTrack() {
801
+ const { track: originalTrack } = window.analytics;
802
+ window.analytics.track = (...args) => {
803
+ const [event, properties, contextFromArgs, fn] = args;
804
+ const newProperties = {
805
+ ...getDefaultProperties(),
806
+ ...properties
807
+ };
808
+ decorateContextWithNeededData({
809
+ context: contextFromArgs,
810
+ event
811
+ }).then((context) => {
812
+ originalTrack.call(window.analytics, event, newProperties, context, fn);
813
+ });
814
+ return window.analytics;
815
+ };
816
+ window.analytics[MPI_PATCH_FIELD] = true;
817
+ }
818
+ if (isClient) {
819
+ if (!window.analytics) {
820
+ console.warn("[segment-wrapper] Segment Analytics is not loaded so patch is not applied.");
821
+ } else if (!window.analytics[MPI_PATCH_FIELD]) {
822
+ void (window.analytics.initialized ? monkeyPatchAnalyticsTrack() : window.analytics.ready(monkeyPatchAnalyticsTrack));
823
+ }
824
+ }
825
+
826
+ // src/middlewares/source/campaignContext.ts
827
+ var campaignContext = ({ payload, next }) => {
828
+ const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
829
+ if (googleAnalyticsMeasurementId) {
830
+ const campaignDetails = getCampaignDetails();
831
+ payload.obj.context = {
832
+ ...payload.obj.context,
833
+ ...campaignDetails
834
+ };
835
+ }
836
+ next(payload);
837
+ };
838
+
839
+ // src/middlewares/source/defaultContextProperties.ts
840
+ var DEFAULT_CONTEXT = { platform: "web" };
841
+ var defaultContextProperties = ({ payload, next }) => {
842
+ const defaultContext = getConfig("defaultContext") || {};
843
+ payload.obj.context = {
844
+ ...DEFAULT_CONTEXT,
845
+ ...defaultContext,
846
+ ...payload.obj.context
847
+ };
848
+ next(payload);
849
+ };
850
+
851
+ // src/middlewares/source/pageData.ts
852
+ var createPageDataMiddleware = () => {
853
+ let last = null;
854
+ return ({ payload, next }) => {
855
+ try {
856
+ const { obj } = payload;
857
+ const { event, type } = obj;
858
+ if (type !== "track") {
859
+ next(payload);
860
+ return;
861
+ }
862
+ if (typeof event === "string" && event.endsWith("Viewed")) {
863
+ const { page_name: name, page_type: type2 } = obj.properties || {};
864
+ last = { name, type: type2 };
865
+ next(payload);
866
+ return;
867
+ }
868
+ if (!last) {
869
+ next(payload);
870
+ return;
871
+ }
872
+ next({
873
+ ...payload,
874
+ obj: {
875
+ ...obj,
876
+ properties: {
877
+ ...obj.properties,
878
+ page_name_origin: last.name,
879
+ page_type: obj.properties?.page_type || last.type
880
+ }
881
+ }
882
+ });
883
+ } catch (error) {
884
+ console.error(error);
885
+ next(payload);
886
+ }
887
+ };
888
+ };
889
+ var pageData = createPageDataMiddleware();
890
+
891
+ // src/middlewares/source/userScreenInfo.ts
892
+ var userScreenInfo = ({ payload, next }) => {
893
+ payload.obj.context = {
894
+ ...payload.obj.context,
895
+ screen: {
896
+ height: window.innerHeight,
897
+ width: window.innerWidth,
898
+ density: window.devicePixelRatio
899
+ }
900
+ };
901
+ next(payload);
902
+ };
903
+
904
+ // src/middlewares/source/userTraits.ts
905
+ var getUserTraits = (gdprPrivacyValue) => {
906
+ const isUserTraitsEnabled = getConfig("isUserTraitsEnabled");
907
+ const user = window.analytics.user?.();
908
+ const isGdprAccepted = checkAnalyticsGdprIsAccepted(gdprPrivacyValue);
909
+ const userId = user?.id();
910
+ return {
911
+ anonymousId: user?.anonymousId(),
912
+ ...userId && { userId },
913
+ ...isGdprAccepted && isUserTraitsEnabled && user?.traits() || {}
914
+ };
915
+ };
916
+ var userTraits = async ({ payload, next }) => {
917
+ const gdprPrivacyValue = await getGdprPrivacyValue();
918
+ let traits;
919
+ try {
920
+ traits = getUserTraits(gdprPrivacyValue);
921
+ } catch (error) {
922
+ console.error(error);
923
+ }
924
+ payload.obj.context = {
925
+ ...payload.obj.context,
926
+ traits: {
927
+ ...payload.obj.context.traits || {},
928
+ ...traits
929
+ }
930
+ };
931
+ next(payload);
932
+ };
933
+
934
+ // src/utils/hashEmail.ts
935
+ var import_md5 = __toESM(require("tiny-hashes/md5"));
936
+ var import_sha256 = __toESM(require("tiny-hashes/sha256"));
937
+ var PLUS_AND_DOT = /\.|\+.*$/g;
938
+ function normalizeEmail(email) {
939
+ if (typeof email !== "string") return "";
940
+ const lowercaseEmail = email.toLowerCase();
941
+ const emailParts = lowercaseEmail.split(/@/);
942
+ if (emailParts.length !== 2) return "";
943
+ const [usernameRaw, domain] = emailParts;
944
+ const username = usernameRaw.replace(PLUS_AND_DOT, "");
945
+ return `${username}@${domain}`;
946
+ }
947
+ function createUniversalId(email) {
948
+ const normalizedEmail = normalizeEmail(email);
949
+ return normalizedEmail ? (0, import_sha256.default)(normalizedEmail) : "";
950
+ }
951
+ function hashEmail(email) {
952
+ const normalizedEmail = normalizeEmail(email);
953
+ return normalizedEmail ? (0, import_md5.default)(normalizedEmail) : "";
954
+ }
955
+
956
+ // src/universalId.ts
957
+ var USER_DATA_READY_EVENT = "USER_DATA_READY";
958
+ var getUniversalIdFromConfig = () => getConfig("universalId");
959
+ var getUniversalId = () => {
960
+ let universalId = getUniversalIdFromConfig();
961
+ if (universalId) {
962
+ setUniversalIdInitialized();
963
+ return universalId;
964
+ }
965
+ const userEmail = getConfig("userEmail");
966
+ if (userEmail) {
967
+ universalId = createUniversalId(userEmail);
968
+ setUniversalId(universalId);
969
+ setUniversalIdInitialized();
970
+ return universalId;
971
+ }
972
+ setUniversalIdInitialized();
973
+ return void 0;
974
+ };
975
+ var getUserDataAndNotify = () => {
976
+ if (!isClient) return void 0;
977
+ const universalId = getUniversalId();
978
+ const userEmail = getConfig("userEmail");
979
+ if (typeof window !== "undefined" && typeof window.dispatchEvent === "function") {
980
+ const event = new CustomEvent(USER_DATA_READY_EVENT, {
981
+ detail: { universalId, userEmail }
982
+ });
983
+ window.dispatchEvent(event);
984
+ }
985
+ return { universalId, userEmail };
986
+ };
987
+ var setUniversalIdInitialized = () => {
988
+ setConfig("universalIdInitialized", true);
989
+ };
990
+ var setUniversalId = (universalId) => {
991
+ setConfig("universalId", universalId);
992
+ };
993
+
994
+ // src/utils/checkAnonymousId.ts
995
+ var checkAnonymousId = () => {
996
+ if (typeof window === "undefined") return;
997
+ const win = window;
998
+ const analytics = win.analytics;
999
+ if (!analytics) {
1000
+ console.warn("[segment-wrapper] Analytics is not available");
1001
+ return;
1002
+ }
1003
+ const SEGMENT_ID_USER_WITHOUT_CONSENTS = win.__SEGMENT_WRAPPER?.SEGMENT_ID_USER_WITHOUT_CONSENTS ?? "anonymous_user";
1004
+ const anonymousId = analytics.user?.()?.anonymousId();
1005
+ if (anonymousId === SEGMENT_ID_USER_WITHOUT_CONSENTS) {
1006
+ if ("setAnonymousId" in analytics && typeof analytics.setAnonymousId === "function") {
1007
+ ;
1008
+ analytics.setAnonymousId(null);
1009
+ }
1010
+ }
1011
+ };
1012
+
1013
+ // src/types/tcf.ts
1014
+ var UserGDPR = /* @__PURE__ */ ((UserGDPR2) => {
1015
+ UserGDPR2["ACCEPTED"] = "accepted";
1016
+ UserGDPR2["DECLINED"] = "declined";
1017
+ UserGDPR2["UNKNOWN"] = "unknown";
1018
+ return UserGDPR2;
1019
+ })(UserGDPR || {});
1020
+ var TCFEvents = /* @__PURE__ */ ((TCFEvents2) => {
1021
+ TCFEvents2["LOADED"] = "tcloaded";
1022
+ TCFEvents2["USER_ACTION_COMPLETE"] = "useractioncomplete";
1023
+ return TCFEvents2;
1024
+ })(TCFEvents || {});
1025
+
1026
+ // src/utils/storage.ts
1027
+ var storage = ({
1028
+ type = "localStorage",
1029
+ method = "getItem",
1030
+ key,
1031
+ value
1032
+ }) => {
1033
+ try {
1034
+ if (typeof window === "undefined") {
1035
+ return null;
1036
+ }
1037
+ const storageObj = window[type];
1038
+ if (!storageObj) {
1039
+ console.warn(`[segment-wrapper] ${type} is not available`);
1040
+ return null;
1041
+ }
1042
+ if (method === "getItem") {
1043
+ return storageObj.getItem(key);
1044
+ }
1045
+ if (method === "setItem") {
1046
+ if (value === void 0) {
1047
+ console.warn("[segment-wrapper] storage.setItem requires a value");
1048
+ return;
1049
+ }
1050
+ storageObj.setItem(key, value);
1051
+ return;
1052
+ }
1053
+ if (method === "removeItem") {
1054
+ storageObj.removeItem(key);
1055
+ return;
1056
+ }
1057
+ } catch (e) {
1058
+ console.error("[segment-wrapper] Storage error:", e);
1059
+ return null;
1060
+ }
1061
+ };
1062
+ var getStorageItem = (key, type = "localStorage") => {
1063
+ return storage({ key, type, method: "getItem" }) || null;
1064
+ };
1065
+ var setStorageItem = (key, value, type = "localStorage") => {
1066
+ storage({ key, value, type, method: "setItem" });
1067
+ };
1068
+ var removeStorageItem = (key, type = "localStorage") => {
1069
+ storage({ key, type, method: "removeItem" });
1070
+ };
1071
+
1072
+ // src/index.ts
1073
+ initTcfTracking();
1074
+ try {
1075
+ getUserDataAndNotify();
1076
+ } catch (error) {
1077
+ console.error("[segment-wrapper] UniversalID could not be initialized", error);
1078
+ }
1079
+ var addMiddlewares = () => {
1080
+ const experimentalPageDataMiddleware = getConfig("experimentalPageDataMiddleware");
1081
+ window.analytics.addSourceMiddleware?.(userTraits);
1082
+ window.analytics.addSourceMiddleware?.(defaultContextProperties);
1083
+ window.analytics.addSourceMiddleware?.(campaignContext);
1084
+ window.analytics.addSourceMiddleware?.(userScreenInfo);
1085
+ window.analytics.addSourceMiddleware?.(pageReferrer);
1086
+ if (experimentalPageDataMiddleware) {
1087
+ window.analytics.addSourceMiddleware?.(pageData);
1088
+ }
1089
+ };
1090
+ if (isClient && window.analytics) {
1091
+ const googleAnalyticsMeasurementId = getConfig("googleAnalyticsMeasurementId");
1092
+ const dataLayerName = getConfig("googleAnalyticsDataLayer") || DEFAULT_DATA_LAYER_NAME;
1093
+ const needsConsentManagement = getConfig("googleAnalyticsConsentManagement");
1094
+ if (googleAnalyticsMeasurementId) {
1095
+ const googleAnalyticsConfig = getConfig("googleAnalyticsConfig");
1096
+ window[dataLayerName] = window[dataLayerName] || [];
1097
+ window.gtag = window.gtag || function gtag() {
1098
+ ;
1099
+ window[dataLayerName].push(arguments);
1100
+ };
1101
+ window.gtag("js", /* @__PURE__ */ new Date());
1102
+ if (needsConsentManagement) {
1103
+ sendGoogleConsents();
1104
+ }
1105
+ window.gtag("config", googleAnalyticsMeasurementId, {
1106
+ cookie_prefix: "segment",
1107
+ send_page_view: false,
1108
+ ...googleAnalyticsConfig,
1109
+ ...getCampaignDetails()
1110
+ });
1111
+ loadGoogleAnalytics().catch((error) => {
1112
+ console.error("[segment-wrapper] Failed to load Google Analytics", error);
1113
+ });
1114
+ }
1115
+ window.analytics.ready(checkAnonymousId);
1116
+ window.analytics.addSourceMiddleware ? addMiddlewares() : window.analytics.ready(addMiddlewares);
1117
+ }
1118
+ var index_default = segmentWrapper_default;
1119
+ // Annotate the CommonJS export names for ESM import in node:
1120
+ 0 && (module.exports = {
1121
+ CONSENT_STATES,
1122
+ EVENTS,
1123
+ TCFEvents,
1124
+ UserGDPR,
1125
+ checkAnonymousId,
1126
+ clearConfig,
1127
+ createUniversalId,
1128
+ getAdobeMCVisitorID,
1129
+ getAdobeVisitorData,
1130
+ getConfig,
1131
+ getStorageItem,
1132
+ getUniversalId,
1133
+ hashEmail,
1134
+ initConfig,
1135
+ isClient,
1136
+ normalizeEmail,
1137
+ readCookie,
1138
+ removeCookie,
1139
+ removeStorageItem,
1140
+ saveCookie,
1141
+ setConfig,
1142
+ setStorageItem,
1143
+ storage,
1144
+ toCookieDomain
1145
+ });