{"version":3,"file":"src-mqqk18i0.js","sources":["packages/vanilla/tracking-feature/src/tracking.client-config.ts","packages/vanilla/tracking-feature/src/tracking-value-getters.service.ts","packages/vanilla/tracking-feature/src/tracking.models.ts","packages/vanilla/tracking-feature/src/data-layer-tracking.service.ts","packages/vanilla/tracking-feature/src/page-view-data-provider.ts","packages/vanilla/tracking-feature/src/page-view-tracking.service.ts","packages/vanilla/tracking-feature/src/data-layer-proxy.service.ts","packages/vanilla/tracking-feature/src/partytown.service.ts","packages/vanilla/tracking-feature/src/tag-manager.service.ts","packages/vanilla/tracking-feature/src/utm-service.ts","packages/vanilla/tracking-feature/src/tracking-bootstrap.service.ts","packages/vanilla/tracking-feature/src/tracking.feature.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { ClientConfigProductName, LazyClientConfig, LazyClientConfigBase, LazyClientConfigService } from '@frontend/vanilla/core';\n\nimport { ClientTagManager } from './tracking.models';\n\n@LazyClientConfig({ key: 'vnTracking', product: ClientConfigProductName.SF })\n@Injectable({\n providedIn: 'root',\n deps: [LazyClientConfigService],\n useFactory: trackingConfigFactory,\n})\nexport class TrackingConfig extends LazyClientConfigBase {\n isEnabled: boolean;\n dataLayerName: string;\n notTrackedQueryStrings: string[];\n tagManagerRenderers: string[];\n eventCallbackTimeoutInMilliseconds: number;\n dataLayerUpdateTimeoutInMilliseconds: number;\n pageViewDataProviderTimeout: number;\n clientTagManagers: ClientTagManager[];\n clientInjectionExcludes: string[];\n allowlist: string[];\n benchmarkThreshold: number;\n blocklist: string[];\n deviceBlockEnabled: boolean;\n deviceConcurrency: number;\n deviceMemory: number;\n enableLogging: boolean;\n enableOmitting: boolean;\n omitAll: boolean;\n omitPercentage: number;\n schedulerEnabled: boolean;\n trackingDelay: number;\n}\n\nexport function trackingConfigFactory(service: LazyClientConfigService) {\n return service.get(TrackingConfig);\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport {\n CookieName,\n CookieService,\n DeviceService,\n FrontendHelperService,\n NativeAppService,\n NavigationService,\n Page,\n ParsedUrl,\n UrlService,\n UserService,\n WINDOW,\n} from '@frontend/vanilla/core';\nimport { BalancePropertiesConfig } from '@frontend/vanilla/features/balance-properties';\nimport { firstValueFrom } from 'rxjs';\n\nimport { TrackingConfig } from './tracking.client-config';\n\n/**\n * @stable\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TrackingValueGettersService {\n private referrer: string;\n private entryUrl: ParsedUrl;\n readonly #window = inject(WINDOW);\n\n constructor(\n private trackingConfig: TrackingConfig,\n private user: UserService,\n private navigationService: NavigationService,\n private urlService: UrlService,\n private page: Page,\n private cookieService: CookieService,\n private deviceService: DeviceService,\n private nativeAppService: NativeAppService,\n private frontendHelperService: FrontendHelperService,\n private balancePropertiesConfig: BalancePropertiesConfig,\n ) {}\n\n accountId() {\n return this.user.accountId;\n }\n\n async userBalance() {\n if (this.user.isAuthenticated) {\n await firstValueFrom(this.balancePropertiesConfig.whenReady);\n return this.balancePropertiesConfig.balanceProperties.accountBalance;\n }\n return 0;\n }\n\n userCurrency() {\n return this.user.currency;\n }\n\n userCountry() {\n return this.user.country;\n }\n\n userGeoCountry() {\n return this.user.geoCountry;\n }\n\n userLoyalty() {\n return this.user.loyalty || '';\n }\n\n userCustomerId() {\n return this.user.customerId;\n }\n\n userSegmentId() {\n return this.user.segmentId;\n }\n\n userStage() {\n return this.user.lifeCycleStage || '';\n }\n\n userPrestage() {\n return this.user.eWarningVip || '';\n }\n\n userMicroSegmentId() {\n return this.user.microSegmentId;\n }\n\n userChurnRate() {\n return this.user.churnRate;\n }\n\n userFutureValue() {\n return this.user.futureValue;\n }\n\n userPotentialVip() {\n return this.user.potentialVip;\n }\n\n userAgent() {\n return this.#window.navigator.userAgent;\n }\n\n isAuthenticated() {\n return !!this.user.username;\n }\n\n async hasPositiveBalance() {\n if (this.user.isAuthenticated) {\n await firstValueFrom(this.balancePropertiesConfig.whenReady);\n return this.balancePropertiesConfig.balanceProperties.accountBalance > 0;\n }\n return false;\n }\n\n locationAbsUrl() {\n return this.removeNotTrackedQueryStrings(this.navigationService.location.absUrl(), true);\n }\n\n locationHost() {\n return this.navigationService.location.host();\n }\n\n locationPathQueryAndFragment() {\n return TrackingValueGettersService.removeLeadingSlashes(this.removeNotTrackedQueryStrings(this.navigationService.location.url(), false));\n }\n\n browserScreenResolution() {\n if (this.#window) {\n const { width, height } = this.deviceService.windowRect();\n return `${width}x${height}`;\n } else {\n return `${this.deviceService.displayWidth}x${this.deviceService.displayHeight}`;\n }\n }\n\n redirectedFrom() {\n return this.cookieService.get(CookieName.RedirexOriginal);\n }\n\n trackerID() {\n return this.cookieService.get(CookieName.TrackerId);\n }\n\n trackingAffiliate() {\n return this.cookieService.get(CookieName.TrackingAffiliate);\n }\n\n abTestGroup() {\n return this.cookieService.get(CookieName.MmcoreBwinvar);\n }\n\n pageName() {\n return this.getPageName();\n }\n\n pageReferrer() {\n return this.removeNotTrackedQueryStrings(this.referrer, true);\n }\n\n browserOrientation() {\n return this.deviceService.currentOrientation;\n }\n\n nativeMode() {\n return this.nativeAppService.nativeMode;\n }\n\n isTouch() {\n return this.deviceService.isTouch;\n }\n\n cpuCores() {\n return this.deviceService.cpuCores;\n }\n\n cpuMaxFrequency() {\n return this.deviceService.cpuMaxFrequency;\n }\n\n totalRam() {\n return this.deviceService.totalRam;\n }\n\n model() {\n return this.deviceService.model;\n }\n\n nightMode() {\n return `Night Mode ${parseInt(this.cookieService.get(CookieName.DarkMode)) > 0 ? 'ON' : 'OFF'}`;\n }\n\n userKnown() {\n return !!this.cookieService.get(CookieName.LastVisitor);\n }\n\n internalCampaign() {\n return this.navigationService.location.search.get('trid');\n }\n\n deviceId() {\n return this.cookieService.get(CookieName.DeviceId);\n }\n\n lang() {\n return this.page.languageCode;\n }\n\n culture() {\n return this.page.lang;\n }\n\n frontend() {\n return this.frontendHelperService.getFrontendDescription();\n }\n\n medium() {\n return this.getMedium();\n }\n\n domain() {\n return this.page.domain;\n }\n\n fullEntryUrl() {\n return this.entryUrl;\n }\n\n entryUrlReferrer() {\n return this.cookieService.get(CookieName.EntryUrlReferrer);\n }\n\n packageVersion(packageName: string) {\n const nativeWindow = this.#window;\n if (nativeWindow.VERSIONS) {\n return nativeWindow.VERSIONS[packageName];\n }\n }\n\n setReferrer(referrer: string) {\n this.referrer = referrer;\n }\n\n setEntryUrl(entryUrl: string) {\n this.entryUrl = this.urlService.parse(entryUrl);\n }\n\n terminalId() {\n return this.cookieService.get(CookieName.TerminalId);\n }\n\n shopId() {\n return this.cookieService.get(CookieName.ShopId) || '0';\n }\n\n terminalType() {\n return this.nativeAppService.applicationName;\n }\n\n isTerminal() {\n return this.nativeAppService.isTerminal;\n }\n\n private removeNotTrackedQueryStrings(url: string, absolute: boolean): string {\n if (!url) {\n return '';\n }\n\n const parsedUrl = this.urlService.parse(url);\n for (const notTrackedQueryString of this.trackingConfig.notTrackedQueryStrings || []) {\n parsedUrl.search.delete(notTrackedQueryString);\n }\n return decodeURIComponent(absolute ? parsedUrl.absUrl() : parsedUrl.url());\n }\n\n private getPageName() {\n const langPrefix = `/${this.page.lang}`;\n const path = this.navigationService.location.path();\n const lowerCasePath = path.toLowerCase();\n let pageName: string;\n if (lowerCasePath.indexOf(langPrefix) === 0) {\n const result = path.substring(langPrefix.length);\n if (result === '') {\n pageName = '/';\n } else {\n pageName = result;\n }\n } else {\n pageName = path;\n }\n\n pageName = TrackingValueGettersService.removeLeadingSlashes(pageName);\n return pageName;\n }\n\n private getMedium() {\n if (this.nativeAppService.nativeMode === 'Unknown') {\n if (this.deviceService.isTablet) return 'tablet web';\n else if (this.deviceService.isMobile) return 'mobile web';\n else return 'desktop web';\n }\n\n let os = '';\n if (this.nativeAppService.isNativeApp || this.nativeAppService.isNativeWrapper) {\n if (this.deviceService.isiOS) os = 'ios';\n if (this.deviceService.isChrome) os = 'android';\n }\n\n return `${this.nativeAppService.nativeMode} ${os}`;\n }\n\n private static removeLeadingSlashes(input: string) {\n return input.replace(/^\\/*/, '');\n }\n}\n","/**\n * Represents a client-side tag manager script configured in {@link TrackingConfig}.\n *\n * @stable\n */\nexport interface ClientTagManager {\n name: string;\n script: string;\n}\n\n/**\n * @stable\n */\nexport interface TrackingServiceOptions {\n timeout: number;\n}\n\n/**\n * @stable\n */\nexport interface EventNames {\n pageView: string;\n userLogout: string;\n}\n\n/**\n * @internal\n */\nexport const eventNames: EventNames = {\n pageView: 'pageView',\n userLogout: 'Event.Logout',\n};\n\n/**\n * @internal\n */\nexport interface CommunicationType {\n id: string;\n name: string;\n selected: boolean;\n}\n\n/**\n * @internal\n */\nexport interface CommunicationSettings {\n settings: CommunicationType[];\n}\n\n/**\n * @internal\n */\nexport interface ContentItemTracking {\n event: string;\n data: { [key: string]: string };\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport {\n CookieName,\n CookieService,\n LocalStoreKey,\n LocalStoreService,\n Logger,\n MenuContentItem,\n SharedFeaturesApiService,\n TimerService,\n TrackingServiceProvider,\n TriggerEventPromiseResult,\n WINDOW,\n WebAnalyticsEventType,\n WebAnalyticsEvents,\n WebWorkerService,\n WindowEvent,\n WorkerType,\n} from '@frontend/vanilla/core';\nimport { isObject, mapKeys, pickBy } from 'lodash-es';\n\nimport { TrackingValueGettersService } from './tracking-value-getters.service';\nimport { TrackingConfig } from './tracking.client-config';\nimport { CommunicationSettings, CommunicationType, ContentItemTracking, TrackingServiceOptions, eventNames } from './tracking.models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DataLayerTrackingService implements TrackingServiceProvider {\n readonly #window = inject(WINDOW);\n\n constructor(\n private trackingValueGettersService: TrackingValueGettersService,\n private trackingConfig: TrackingConfig,\n private cookieService: CookieService,\n private apiService: SharedFeaturesApiService,\n private log: Logger,\n private timerService: TimerService,\n private localStoreService: LocalStoreService,\n webWorkerService: WebWorkerService,\n ) {\n // Create interval to update data layer when GTM script loads.\n webWorkerService.createWorker(WorkerType.DataLayerTrackingInterval, { interval: 500 }, () => {\n if (this.gtmLoaded) {\n this.processLocalStore();\n webWorkerService.removeWorker(WorkerType.DataLayerTrackingInterval);\n }\n });\n }\n\n private get gtmEnabled(): boolean {\n return this.trackingConfig.tagManagerRenderers.includes('GoogleTagManagerRenderer') && !!this.#window.google_tag_manager;\n }\n\n private get gtmLoaded(): boolean {\n return (\n this.#window.dataLayer?.some((x: { event: string }) => x.event === WindowEvent.VanillaGtmLoaded) &&\n this.#window.dataLayer?.some((x: { event: string }) => x.event === WindowEvent.GtmLoad)\n );\n }\n\n async addInitialValues() {\n this.updateDataLayerEntryInfo();\n await this.updateUserValues();\n this.updateDataLayer({\n 'browser.userAgent': this.trackingValueGettersService.userAgent(),\n 'browser.isTouch': this.trackingValueGettersService.isTouch(),\n 'page.trackerID': this.trackingValueGettersService.trackerID(),\n 'page.redirectedFrom': this.trackingValueGettersService.redirectedFrom(),\n 'page.nightModeStatus': this.trackingValueGettersService.nightMode(),\n 'page.language': this.trackingValueGettersService.lang(),\n 'page.culture': this.trackingValueGettersService.culture(),\n 'page.frontend': this.trackingValueGettersService.frontend(),\n 'page.domain': this.trackingValueGettersService.domain(),\n 'page.medium': this.trackingValueGettersService.medium(),\n 'native.nativeMode': this.trackingValueGettersService.nativeMode(),\n 'user.profile.dvID': this.trackingValueGettersService.deviceId(),\n 'user.session.internalCampaign': this.trackingValueGettersService.internalCampaign(),\n 'device.cpuCores': this.trackingValueGettersService.cpuCores(),\n 'device.cpuMaxFrequency': this.trackingValueGettersService.cpuMaxFrequency(),\n 'device.totalRam': this.trackingValueGettersService.totalRam(),\n 'device.model': this.trackingValueGettersService.model(),\n 'page.trackingAffiliate': this.trackingValueGettersService.trackingAffiliate(),\n 'browser.orientation': this.trackingValueGettersService.browserOrientation(),\n 'browser.screenResolution': this.trackingValueGettersService.browserScreenResolution(),\n });\n\n this.updateDataLayerSessionId();\n }\n\n async updateUserValues() {\n this.updateDataLayer({\n 'user.profile.accountID': this.trackingValueGettersService.accountId(),\n 'user.profile.bal': await this.trackingValueGettersService.userBalance(),\n 'user.profile.currency': this.trackingValueGettersService.userCurrency(),\n 'user.profile.country': this.trackingValueGettersService.userCountry(),\n 'user.profile.loyaltyStatus': this.trackingValueGettersService.userLoyalty(),\n 'user.profile.opid': this.trackingValueGettersService.userCustomerId(),\n 'user.profile.vid': this.trackingValueGettersService.userSegmentId(),\n 'user.profile.stage': this.trackingValueGettersService.userStage(),\n 'user.profile.prestage': this.trackingValueGettersService.userPrestage(),\n 'user.profile.mid': this.trackingValueGettersService.userMicroSegmentId(),\n 'user.profile.chid': this.trackingValueGettersService.userChurnRate(),\n 'user.profile.fvid': this.trackingValueGettersService.userFutureValue(),\n 'user.profile.pvid': this.trackingValueGettersService.userPotentialVip(),\n 'user.session.geoIPCountry': this.trackingValueGettersService.userGeoCountry(),\n 'user.session.abTestGroup': this.trackingValueGettersService.abTestGroup(),\n 'user.hasPositiveBalance': await this.trackingValueGettersService.hasPositiveBalance(),\n 'user.isAuthenticated': this.trackingValueGettersService.isAuthenticated(),\n 'user.isExisting': this.trackingValueGettersService.userKnown(),\n 'browser.orientation': this.trackingValueGettersService.browserOrientation(),\n 'browser.screenResolution': this.trackingValueGettersService.browserScreenResolution(),\n });\n }\n\n async updateDataLayer(data?: any): Promise {\n return new Promise((resolve) => {\n if (isObject(data) && !Array.isArray(data)) {\n if (this.gtmLoaded) {\n if (!this.trackingConfig.schedulerEnabled && this.trackingConfig.dataLayerUpdateTimeoutInMilliseconds) {\n this.timerService.scheduleIdleCallback(() => {\n this.#window[this.trackingConfig.dataLayerName].push(data);\n resolve();\n }, this.trackingConfig.dataLayerUpdateTimeoutInMilliseconds);\n } else {\n this.#window[this.trackingConfig.dataLayerName].push(data);\n resolve();\n }\n } else {\n const tracking = this.getDataFromStore();\n tracking.push(data);\n\n this.localStoreService.set(LocalStoreKey.Tracking, JSON.stringify(tracking));\n resolve();\n }\n }\n });\n }\n\n async trackEvents(item: MenuContentItem, eventType: WebAnalyticsEventType) {\n if (item.webAnalytics) {\n try {\n const parsedValue: WebAnalyticsEvents = JSON.parse(item.webAnalytics);\n\n switch (eventType) {\n case WebAnalyticsEventType.load:\n const load = parsedValue?.load;\n\n if (load) {\n await this.triggerEvent(load.eventName, load.data);\n }\n break;\n case WebAnalyticsEventType.click:\n const click = parsedValue?.click;\n\n if (click) {\n if (click.data['component.URLClicked'] === 'link') {\n click.data['component.URLClicked'] = item.url;\n }\n await this.triggerEvent(click.eventName, click.data);\n }\n break;\n case WebAnalyticsEventType.close:\n const close = parsedValue?.close;\n\n if (close) {\n await this.triggerEvent(close.eventName, close.data);\n }\n break;\n }\n } catch (error) {\n this.log.errorRemote(\n `Failed to parse or track WebAnalytics data from item:${item.name}. Provided WebAnalytics data:${item.webAnalytics}`,\n error,\n );\n }\n }\n }\n\n async triggerEvent(eventName: string, data?: any, options?: TrackingServiceOptions): Promise {\n // GTM must be enabled, not only loaded to make sure it's injected into a page via Vanilla's data layer tracking implementation.\n const eventTimeout = this.gtmEnabled ? options?.timeout || this.trackingConfig.eventCallbackTimeoutInMilliseconds : 0;\n\n return this.runWithTimeout(\n new Promise((resolve, reject) => {\n if (eventName.indexOf('error.') === 0) {\n // \"error.*\" eventName is reserved for errors reporting\n return reject('The \"error.*\" eventName is reserved for errors reporting');\n }\n\n if (!data || Object.keys(data).length === 0) {\n return reject('Tracking data is required');\n }\n\n if (eventName === eventNames.userLogout) {\n this.updateUserValues();\n }\n\n data = {\n event: eventName,\n ...data,\n };\n\n if (this.gtmEnabled) {\n data = {\n eventCallback: resolve.bind(null, TriggerEventPromiseResult.Normal),\n eventTimeout,\n ...data,\n };\n }\n\n this.updateDataLayer(data);\n\n // Tracking cleanup\n this.cookieService.remove(CookieName.RedirexOriginal);\n\n // Resolve immediately when GTM is not present (other tag managers don't support event callback)\n if (!this.gtmEnabled) {\n resolve(TriggerEventPromiseResult.Normal);\n }\n }),\n eventTimeout,\n );\n }\n\n async reportErrorObject(error: any) {\n return this.updateDataLayer({\n event: 'error',\n error,\n });\n }\n\n reportError(errorDetail: any) {\n this.updateDataLayer({\n event: encodeURIComponent(`error.${JSON.stringify(errorDetail)}`),\n });\n }\n\n trackContentItemEvent(parameters: { [name: string]: string } | undefined, parameterName: string) {\n const tracking = this.getContentItemTracking(parameters, parameterName);\n\n if (tracking) {\n this.triggerEvent(tracking.event, tracking.data);\n }\n }\n\n setReferrer(referrer: string) {\n this.trackingValueGettersService.setReferrer(referrer);\n }\n\n /**\n * Gets user communication settings and trigger the tracking event `Event.Functionality.Cts`\n * with data formatted as follows: **Email:Yes|Post:No|SMS:Yes|Phone:No**\n */\n updateUserContactabilityStatus() {\n this.apiService.get('communicationsettings').subscribe((data: CommunicationSettings) => {\n const cts = data.settings.map((c: CommunicationType) => `${c.name}:${c.selected ? 'Yes' : 'No'}`).join('|');\n this.triggerEvent('Event.Functionality.Cts', { 'user.profile.cts': cts }); //Format to Send: Email:Yes|Post:No|SMS:Yes|Phone:No.\n });\n }\n\n getContentItemTracking(parameters: { [name: string]: string } | undefined, parameterName: string): ContentItemTracking | null {\n parameters = parameters || {};\n const event = parameters[parameterName];\n\n if (!event) {\n return null;\n }\n\n const trackingDataPrefix = parameterName + '.';\n const data = mapKeys(\n pickBy(parameters, (_: string, k: string) => k.startsWith(trackingDataPrefix)),\n (_: string, k: string) => k.replace(trackingDataPrefix, ''),\n );\n\n return { event, data };\n }\n\n private getDataFromStore(): any[] {\n const trackingData = this.localStoreService.get(LocalStoreKey.Tracking);\n\n return trackingData ? JSON.parse(trackingData) : [];\n }\n\n private processLocalStore() {\n const trackings = this.getDataFromStore();\n\n if (trackings.length > 0) {\n trackings.forEach((data: any) => this.updateDataLayer(data));\n\n this.localStoreService.remove(LocalStoreKey.Tracking);\n }\n }\n\n private runWithTimeout(promise: Promise, timeout: number): Promise {\n return new Promise((resolve, reject) => {\n const timeoutId = this.timerService.scheduleIdleCallback(() => resolve(TriggerEventPromiseResult.Timeout), timeout);\n\n promise.then(\n (result: TriggerEventPromiseResult) => {\n timeoutId();\n resolve(result);\n },\n (error: any) => {\n timeoutId();\n reject(error);\n },\n );\n });\n }\n\n private updateDataLayerEntryInfo() {\n const entryUrl = this.cookieService.get(CookieName.EntryUrl);\n\n if (entryUrl) {\n this.trackingValueGettersService.setEntryUrl(entryUrl);\n this.updateDataLayer({\n event: 'v8Launch',\n v8: {\n tech: {\n build: this.trackingValueGettersService.packageVersion('@frontend/vanilla'),\n label: this.trackingValueGettersService.domain(),\n },\n entry: {\n url: this.trackingValueGettersService.fullEntryUrl().absUrl(),\n path: this.trackingValueGettersService.fullEntryUrl().path(),\n referrer: this.trackingValueGettersService.entryUrlReferrer(),\n utms: {\n source: this.trackingValueGettersService.fullEntryUrl().search.get('utm_source'),\n medium: this.trackingValueGettersService.fullEntryUrl().search.get('utm_medium'),\n campaign: this.trackingValueGettersService.fullEntryUrl().search.get('utm_campaign'),\n content: this.trackingValueGettersService.fullEntryUrl().search.get('utm_content'),\n keyword: this.trackingValueGettersService.fullEntryUrl().search.get('utm_term'),\n },\n },\n },\n });\n }\n }\n\n private updateDataLayerSessionId() {\n if (this.#window.hasOwnProperty('decibelInsight')) {\n this.#window.decibelInsight('ready', () => {\n this.updateDataLayer({ 'user.decibelID': this.#window.decibelInsight('getSessionId') });\n });\n } else {\n this.#window._da_ready = () => {\n this.updateDataLayer({ 'user.decibelID': this.#window.decibelInsight('getSessionId') });\n };\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { PageViewContext, PageViewDataProvider, TrackingData } from '@frontend/vanilla/core';\nimport { Observable, of } from 'rxjs';\n\nimport { TrackingValueGettersService } from './tracking-value-getters.service';\n\n@Injectable()\nexport class DefaultPageViewDataProvider implements PageViewDataProvider {\n constructor(private valueGetters: TrackingValueGettersService) {}\n\n getData(context: PageViewContext = { navigationId: 0, utm: null }): Observable {\n let data: Record = {\n 'page.referrer': this.valueGetters.pageReferrer(),\n 'page.url': this.valueGetters.locationAbsUrl(),\n 'page.host': this.valueGetters.locationHost(),\n 'page.pathQueryAndFragment': this.valueGetters.locationPathQueryAndFragment(),\n 'page.name': this.valueGetters.pageName(),\n };\n\n if (this.valueGetters.isTerminal()) {\n data = {\n ...data,\n ...{\n 'page.terminalId': this.valueGetters.terminalId(),\n 'page.terminalType': this.valueGetters.terminalType(),\n 'page.shopId': this.valueGetters.shopId(),\n },\n };\n }\n\n if (context?.utm) {\n for (const key in context.utm) {\n if ((context.utm as any)[key]) {\n data[key.replace('utm_', 'utms.')] = (context.utm as any)[key];\n }\n }\n }\n\n return of(data);\n }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport {\n PAGE_VIEW_DATA_PROVIDER,\n PageViewContext,\n PageViewDataProvider,\n ProductInjector,\n TrackingData,\n TrackingService,\n Utm,\n} from '@frontend/vanilla/core';\nimport { NEVER, Observable, combineLatest, of, race } from 'rxjs';\nimport { catchError, first, map, timeout } from 'rxjs/operators';\n\nimport { TrackingConfig } from './tracking.client-config';\nimport { eventNames } from './tracking.models';\n\nclass PageView {\n data: TrackingData | null;\n\n private dataCallback: (() => void) | undefined;\n\n constructor(dataSource: Observable) {\n dataSource.subscribe((data: TrackingData) => {\n this.data = data;\n\n if (this.dataCallback) {\n this.dataCallback();\n }\n });\n }\n\n onData(fn: () => void) {\n if (this.data) {\n fn();\n } else {\n this.dataCallback = fn;\n }\n }\n}\n\n@Injectable()\nexport class PageViewTrackingService {\n private pageViewQueue: PageView[] = [];\n\n constructor(\n private productInjector: ProductInjector,\n private trackingConfig: TrackingConfig,\n private trackingService: TrackingService,\n @Inject(PAGE_VIEW_DATA_PROVIDER) private currentDataProviders: PageViewDataProvider[],\n ) {}\n\n trackPageView(navigationId: number): void;\n trackPageView(utm: Utm): void;\n trackPageView(utm: Utm, navigationId: number): void;\n trackPageView(...args: any[]): void {\n const navigationId = this.toNumberOrDefault(args[0], this.toNumberOrDefault(args[1], 0));\n const context: PageViewContext = { navigationId, utm: args[0].utm_source === undefined ? {} : args[0] };\n const providers = Object.assign(this.productInjector.getMultiple(PAGE_VIEW_DATA_PROVIDER), this.currentDataProviders);\n const data = combineLatest(\n providers.map((p: PageViewDataProvider) => {\n return race(\n p.getData(context),\n NEVER.pipe(\n timeout(this.trackingConfig.pageViewDataProviderTimeout),\n catchError(() => of({})),\n ),\n ).pipe(first());\n }),\n ).pipe(\n map((data: TrackingData[]) => {\n return Object.assign({}, ...data);\n }),\n );\n const pageView = new PageView(data);\n this.pageViewQueue.push(pageView);\n\n pageView.onData(() => this.processPageViewQueue());\n }\n\n private processPageViewQueue() {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const pageView = this.pageViewQueue[0];\n\n if (!pageView || !pageView.data) {\n break;\n }\n this.trackingService.triggerEvent(eventNames.pageView, pageView.data);\n this.pageViewQueue.shift();\n }\n }\n\n private toNumberOrDefault = (v: any, d: number) => {\n const value = Number(v);\n\n return isNaN(value) ? d : v;\n };\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { TimerService, WINDOW, WindowEvent } from '@frontend/vanilla/core';\nimport { RxStrategyProvider } from '@rx-angular/cdk/render-strategies';\nimport { firstValueFrom } from 'rxjs';\n\nimport { TrackingConfig } from './tracking.client-config';\n\n@Injectable({ providedIn: 'root' })\nexport class DataLayerProxyService {\n private trackingConfig = inject(TrackingConfig);\n private timerService = inject(TimerService);\n private strategyProvider = inject(RxStrategyProvider);\n readonly #window = inject(WINDOW);\n\n private requiredEvents = [\n WindowEvent.VanillaGtmLoaded,\n WindowEvent.GtmLoad,\n 'webVital',\n 'gtm.js',\n 'webVital',\n 'OptanonLoaded',\n 'OneTrustLoaded',\n 'OneTrustGroupsUpdated',\n ];\n private patched = false;\n private schedulerEnabled = false;\n\n async patchDataLayer(forceSchedulerDisabled = false) {\n await firstValueFrom(this.trackingConfig.whenReady);\n this.schedulerEnabled = !forceSchedulerDisabled && this.trackingConfig.schedulerEnabled;\n\n if (\n !this.patched &&\n this.trackingConfig.isEnabled &&\n (this.trackingConfig.enableLogging || this.schedulerEnabled || this.trackingConfig.enableOmitting)\n ) {\n this.#window[this.trackingConfig.dataLayerName] = this.createDataLayerProxy(this.#window[this.trackingConfig.dataLayerName]);\n this.patched = true;\n }\n }\n\n // this proxy is here to make sure the `requestIdleCallback` is always\n // wrapped around the most outer function call\n // all gtm containers apply monkey-patches to the dataLayer.push method\n // while respecting already applied patches\n // we end up in a chain of overridden function bodies\n // to make sure the `requestIdleCallback` is the most outer function\n // we use a Proxy that keeps track of overrides to the `push` method\n private createDataLayerProxy(origDataLayer = []) {\n const idleWrapper = (fn: Function) => {\n this.timerService.scheduleIdleCallback(() => {\n // make sure that tracking is executed after the render queue is empty\n this.strategyProvider\n .schedule(() => fn(), {\n patchZone: false,\n strategy: 'idle',\n })\n .subscribe();\n }, this.trackingConfig.trackingDelay);\n\n return origDataLayer.length + 1;\n };\n\n const { enableOmitting, omitAll, enableLogging } = this.trackingConfig;\n const schedulerEnabled = this.schedulerEnabled;\n const blockDevice = this.trackingConfig.deviceBlockEnabled && this.isLowTierDevice();\n const isNextCallSuppressed = this.isNextCallSuppressed.bind(this);\n const allowlist = new Set(...(this.trackingConfig.allowlist || []), ...this.requiredEvents);\n const blocklist = new Set(this.trackingConfig.blocklist || []);\n const window = this.#window;\n const measureTask = measureTaskDuration;\n\n return new Proxy(origDataLayer, {\n set(target, key, newValue: unknown) {\n if (key === 'push') {\n target[key] = (...args: any) => {\n const eventName = args?.[0]?.event;\n\n const shouldBeOmitted =\n // check if omitting feature is enabled\n enableOmitting &&\n // not in allowlist\n !allowlist.has(eventName) &&\n // omit all OR in blocklist OR low tier device blocking enabled and device is slow OR percentage blocking enabled and event got in range\n (omitAll || blocklist.has(eventName) || blockDevice || isNextCallSuppressed());\n\n if (shouldBeOmitted) {\n return () => 0;\n }\n\n const callback: Function = () => {\n const work = (newValue as Function).bind(target, ...args);\n\n if (enableLogging || window.logTrackingPerformance) {\n return measureTask(work, args, eventName);\n }\n return work();\n };\n\n return schedulerEnabled ? idleWrapper(callback) : callback();\n };\n } else {\n target[key as any] = newValue;\n }\n\n return true;\n },\n });\n }\n\n private isLowTierDevice(): boolean {\n const deviceConcurrency = navigator.hardwareConcurrency;\n const minDeviceConcurrency = this.trackingConfig.deviceConcurrency;\n\n if (minDeviceConcurrency && deviceConcurrency && deviceConcurrency <= minDeviceConcurrency) {\n return true;\n }\n\n const minDeviceMemory = this.trackingConfig.deviceMemory;\n const deviceMemory = (navigator as { deviceMemory?: number }).deviceMemory;\n\n if (minDeviceMemory && deviceMemory && deviceMemory <= minDeviceMemory) {\n return true;\n }\n\n const benchmarkThreshold = this.trackingConfig.benchmarkThreshold;\n\n return !!(benchmarkThreshold && benchmark() > benchmarkThreshold);\n }\n\n private isNextCallSuppressed(): boolean {\n const omitPercentage = this.trackingConfig.omitPercentage;\n\n return !!omitPercentage && Math.random() * 100 <= omitPercentage;\n }\n}\n\nfunction isPrime(num: number): boolean {\n for (let i = 2, s = Math.sqrt(num); i <= s; i++) {\n if (num % i === 0) {\n return false;\n }\n }\n\n return num > 1;\n}\n\nfunction calculatePrimes(max: number): number[] {\n const primes: number[] = [];\n\n for (let i = 1; i < max; i++) {\n if (isPrime(i)) {\n primes.push(i);\n }\n }\n\n return primes;\n}\n\nfunction benchmark(): number {\n const start = performance.now();\n calculatePrimes(20_000);\n\n return performance.now() - start;\n}\n\nfunction measureTaskDuration(work: Function, args: unknown, eventName: string) {\n const startTime = performance.now();\n const name = eventName || '[anonymous event]';\n const startMark = `GTM Event ${name} start`;\n performance.mark(`GTM Event ${name} start`);\n const r = work();\n const endMark = `GTM Event ${name} end`;\n performance.mark(endMark);\n performance.measure(`GTM Event ${name}`, startMark, endMark);\n const endTime = performance.now();\n\n const runtime = Math.ceil(endTime - startTime);\n const color = runtime >= 100 ? 'red' : 'green';\n\n // eslint-disable-next-line no-console\n console.log(`Analytics tracking: ${name} took %c${runtime}ms`, `color: ${color}`, {\n withArgs: args,\n });\n\n return r;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, Injector, effect, inject } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { DeviceService, NavigationService, WINDOW, WindowEvent } from '@frontend/vanilla/core';\nimport { Observable, fromEvent, interval, merge, startWith } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators';\n\nconst eventQueueKey = '_ptEventsQueue';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PartytownService {\n private deviceService = inject(DeviceService);\n private injector = inject(Injector);\n private navigationService = inject(NavigationService);\n // private cookieService = inject(CookieService);\n private router = inject(Router);\n readonly #window = inject(WINDOW);\n private readonly _doc = inject(DOCUMENT);\n private navigator = this.#window.navigator;\n private performance = this.#window.performance;\n\n private readonly ptSharedStorage: {\n set: (key: string, value: any) => void;\n };\n\n private readonly ptWorkerLocation: {\n set: (location: Location) => void;\n };\n\n constructor() {\n this.ptWorkerLocation = this.#window.ptWorkerLocation = this.#window.ptWorkerLocation ?? {\n set: () => {},\n };\n this.ptSharedStorage = this.#window.ptSharedStorage = this.#window.ptSharedStorage ?? {\n set: () => {},\n };\n }\n\n createEventReplayQueue() {\n const dataLayer = this.#window.dataLayer || [];\n replayEvents(dataLayer);\n const origPush = dataLayer.push;\n\n dataLayer.push = (...args: any) => {\n addToQueue(JSON.stringify(args));\n return origPush.apply(dataLayer, args);\n };\n }\n\n createSharedStorage() {\n this.setStaticProps();\n\n this.createDimensionsEffect();\n\n this.subscribeToDynamicProps();\n }\n\n private getWindowOffsetUpdates() {\n return fromEvent(this.#window, 'scroll').pipe(debounceTime(1000));\n }\n\n private getVisibilityUpdates() {\n return new Observable((observer) => {\n const handler = () => observer.next(this._doc.hidden);\n\n this.#window.addEventListener(WindowEvent.VisibilityChange, handler);\n\n return () => this.#window.removeEventListener(WindowEvent.VisibilityChange, handler);\n });\n }\n\n private setStaticProps() {\n // window props\n this.ptSharedStorage.set('window.opener', this.#window.opener);\n\n // document props\n this.ptSharedStorage.set('document.characterSet', this._doc.characterSet);\n this.ptSharedStorage.set('document.referrer', this._doc.referrer);\n this.ptSharedStorage.set('document.domain', this._doc.domain);\n this.ptSharedStorage.set('document.prerendering', (this._doc as any).prerendering);\n\n // navigator props\n this.ptSharedStorage.set('window.navigator.loadPurpose', (this.navigator as any).loadPurpose);\n this.ptSharedStorage.set('window.navigator.userLanguage', (this.navigator as any).userLanguage);\n this.ptSharedStorage.set('window.navigator.cookieEnabled', this.navigator.cookieEnabled);\n this.ptSharedStorage.set('window.navigator.cookieDeprecationLabel', (this.navigator as any).cookieDeprecationLabel);\n this.ptSharedStorage.set('window.navigator.vendor', this.navigator.vendor);\n this.ptSharedStorage.set('window.navigator.doNotTrack', this.navigator.doNotTrack);\n this.ptSharedStorage.set('window.navigator.maxTouchPoints', this.navigator.maxTouchPoints);\n this.ptSharedStorage.set('window.navigator.msDoNotTrack', (this.navigator as any)['msDoNotTrack']);\n\n // perf timings\n this.ptSharedStorage.set('performance.timeOrigin', this.performance.timeOrigin);\n this.ptSharedStorage.set('performancetiming.navigationStart', this.performance.timing.navigationStart);\n this.ptSharedStorage.set('performancetiming.redirectStart', this.performance.timing.redirectStart);\n this.ptSharedStorage.set('performancetiming.redirectEnd', this.performance.timing.redirectEnd);\n this.ptSharedStorage.set('performancetiming.fetchStart', this.performance.timing.fetchStart);\n this.ptSharedStorage.set('performancetiming.domainLookupStart', this.performance.timing.domainLookupStart);\n this.ptSharedStorage.set('performancetiming.domainLookupEnd', this.performance.timing.domainLookupEnd);\n this.ptSharedStorage.set('performancetiming.connectStart', this.performance.timing.connectStart);\n this.ptSharedStorage.set('performancetiming.secureConnectionStart', this.performance.timing.secureConnectionStart);\n this.ptSharedStorage.set('performancetiming.connectEnd', this.performance.timing.connectEnd);\n this.ptSharedStorage.set('performancetiming.requestStart', this.performance.timing.requestStart);\n this.ptSharedStorage.set('performancetiming.responseStart', this.performance.timing.responseStart);\n this.ptSharedStorage.set('performancetiming.responseEnd', this.performance.timing.responseEnd);\n this.ptSharedStorage.set('performancetiming.unloadEventStart', this.performance.timing.unloadEventStart);\n this.ptSharedStorage.set('performancetiming.unloadEventEnd', this.performance.timing.unloadEventEnd);\n this.ptSharedStorage.set('performancetiming.domLoading', this.performance.timing.domLoading);\n this.ptSharedStorage.set('performancetiming.domInteractive', this.performance.timing.domInteractive);\n this.ptSharedStorage.set('performancetiming.domContentLoadedEventStart', this.performance.timing.domContentLoadedEventStart);\n this.ptSharedStorage.set('performancetiming.domContentLoadedEventEnd', this.performance.timing.domContentLoadedEventEnd);\n this.ptSharedStorage.set('performancetiming.domComplete', this.performance.timing.domComplete);\n this.ptSharedStorage.set('performancetiming.loadEventStart', this.performance.timing.loadEventStart);\n this.ptSharedStorage.set('performancetiming.loadEventEnd', this.performance.timing.loadEventEnd);\n }\n\n private createDimensionsEffect() {\n effect(\n () => {\n const windowRect = this.deviceService.windowRect();\n const screenHeight = this.deviceService.visualViewportHeight();\n const screenWidth = this.deviceService.visualViewportWidth();\n\n // dimensions\n this.ptSharedStorage.set('screen.width', screenWidth);\n this.ptSharedStorage.set('screen.colorDepth', screen.colorDepth);\n this.ptSharedStorage.set('html.clientWidth', windowRect.width);\n this.ptSharedStorage.set('html.innerWidth', screenWidth);\n this.ptSharedStorage.set('html.scrollWidth', windowRect.width);\n this.ptSharedStorage.set('html.offsetWidth', windowRect.width);\n this.ptSharedStorage.set('html.offsetHeight', windowRect.height);\n this.ptSharedStorage.set('screen.height', screenHeight);\n this.ptSharedStorage.set('body.offsetHeight', windowRect.height);\n this.ptSharedStorage.set('body.scrollHeight', windowRect.height);\n this.ptSharedStorage.set('html.clientHeight', screenHeight);\n this.ptSharedStorage.set('html.innerHeight', screenHeight);\n this.ptSharedStorage.set('html.scrollHeight', windowRect.height);\n this.ptSharedStorage.set('window.innerWidth', windowRect.width);\n this.ptSharedStorage.set('window.innerHeight', windowRect.height);\n },\n { injector: this.injector },\n );\n }\n\n private subscribeToDynamicProps() {\n this.navigationService.locationChange\n .pipe(\n switchMap(() =>\n merge(\n // whenever queryParams change, update the route\n this.router.routerState.root.queryParamMap.pipe(startWith(this.router.routerState.root.snapshot.queryParamMap)),\n // We have to do polling here, as the angular router doesn't send us ANY\n // information that e.g. ?tab=score or ?market=5 changed\n // for the current hotfix state this is fine!\n interval(2500),\n ),\n ),\n startWith(true),\n map(() => this.#window.location.href),\n distinctUntilChanged(),\n )\n .subscribe(() => {\n this.ptWorkerLocation.set(this.#window.location);\n this.ptSharedStorage.set('document.title', this._doc.title);\n this.ptSharedStorage.set('window.location', this.#window.location);\n });\n\n // ToDo: fix duplicated cookies issue to uncomment\n // this.cookieService\n // .getCookieUpdates()\n // .pipe(debounceTime(100), startWith(document.cookie))\n // .subscribe((value) => this.ptSharedStorage.set('document.cookie', value));\n\n this.getVisibilityUpdates()\n .pipe(startWith(this._doc.hidden))\n .subscribe((value) => this.ptSharedStorage.set('document.hidden', value));\n\n this.getWindowOffsetUpdates()\n .pipe(startWith(true))\n .subscribe(() => {\n this.ptSharedStorage.set('window.pageYOffset', this.#window.pageYOffset);\n this.ptSharedStorage.set('window.scrollY', this.#window.scrollY);\n });\n\n this.getSnowplowCounterUpdates()\n .pipe(startWith(true))\n .subscribe(() => {\n this.ptSharedStorage.set('window.i', this.#window.i);\n });\n }\n\n private getSnowplowCounterUpdates() {\n const nativeWindow = this.#window;\n nativeWindow._i = nativeWindow.i;\n\n return new Observable((observer) => {\n Object.defineProperty(this.#window, 'i', {\n enumerable: true,\n configurable: true,\n get() {\n return nativeWindow._i;\n },\n set(value) {\n nativeWindow._i = value;\n observer.next(value);\n },\n });\n });\n }\n}\n\nconst getEventsQueue = (): string[] => {\n try {\n const savedEventsItem = localStorage.getItem(eventQueueKey);\n return savedEventsItem ? JSON.parse(savedEventsItem) : [];\n } catch (e) {\n console.error('Failed to parse events queue:', e);\n return [];\n }\n};\n\nconst addToQueue = (event: string) => {\n try {\n const eventsQueue = getEventsQueue();\n eventsQueue.push(event);\n localStorage.setItem(eventQueueKey, JSON.stringify(eventsQueue));\n } catch (e) {\n console.error('Failed to store event in a queue:', e);\n }\n};\n\nconst replayEvents = (dataLayer: unknown[]) => {\n try {\n const eventsQueue = getEventsQueue();\n\n eventsQueue.forEach((event) => {\n const parsedArgs = JSON.parse(event);\n dataLayer.push(...parsedArgs);\n });\n } catch (e) {\n console.error('Failed to restore events:', e);\n }\n\n localStorage.removeItem(eventQueueKey);\n};\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, NgZone, inject } from '@angular/core';\n\nimport { WINDOW, WindowEvent } from '@frontend/vanilla/core';\nimport { fromEvent, take } from 'rxjs';\n\nimport { DataLayerProxyService } from './data-layer-proxy.service';\nimport { PartytownService } from './partytown.service';\nimport { TrackingConfig } from './tracking.client-config';\nimport { ClientTagManager } from './tracking.models';\n\n/**\n * @whatItDoes Injects all configured client-side tag manager scripts into the DOM.\n *\n * @description\n *\n * Client-side tag managers can be configured using TrackingConfig.\n *\n * @stable\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class TagManagerService {\n private readonly _doc = inject(DOCUMENT);\n readonly #window = inject(WINDOW);\n private partytownService = inject(PartytownService);\n\n /**\n * @internal\n */\n constructor(\n private trackingConfig: TrackingConfig,\n private dataLayerProxy: DataLayerProxyService,\n private ngZone: NgZone,\n ) {}\n\n /** @internal */\n init() {\n if (!this.trackingConfig.isEnabled) {\n return;\n }\n\n const configured = this.trackingConfig.clientTagManagers || [];\n const excludes = this.trackingConfig.clientInjectionExcludes || [];\n\n configured.filter((current) => !excludes.includes(current.name)).forEach((current) => this.injectScript(current));\n }\n\n /** @stable */\n get availableClientTagManagers(): string[] {\n return (this.trackingConfig.clientTagManagers || []).map((t: ClientTagManager) => t.name);\n }\n\n /** Adds a tag manager init script for the given tag managerer renderer name to the script unless present.\n *\n * @stable\n */\n async load(rendererName: string, type?: string): Promise {\n const configured = this.trackingConfig.clientTagManagers || [];\n const tagManager = configured.find((current) => current.name === rendererName);\n\n if (!tagManager) {\n throw new Error(`Client TagManager \"${rendererName}\" does not exist.`);\n }\n\n const existing = this._doc.querySelector('#' + tagManager.name);\n\n if (existing) {\n return existing;\n }\n\n const forceSchedulerDisabled = type === 'text/partytown';\n\n await this.dataLayerProxy.patchDataLayer(forceSchedulerDisabled);\n return this.injectScript(tagManager, type);\n }\n\n private injectScript(tagManager: ClientTagManager, type = 'text/javascript'): Promise {\n const id = tagManager.name;\n const script = this._doc.createElement('script');\n script.async = true;\n script.id = id;\n script.text = tagManager.script;\n script.type = type;\n\n const promise = new Promise((resolve, reject) => {\n script.onload = () => resolve(script);\n script.onerror = () => reject(new Error(`Client TagManager \"${id}\" failed to load.`));\n });\n\n this._doc.body.append(script);\n\n return promise;\n }\n\n public loadPartyTownGTM() {\n const isDisabledLocally = localStorage.getItem('partytown-disabled') === '1';\n const isServiceWorkerSupported = 'serviceWorker' in navigator;\n if (isServiceWorkerSupported && !isDisabledLocally && this.#window.partytown && this.#window._ptReady) {\n this.#window._ptReady\n .then(() => {\n this.#window.dataLayer = this.#window.dataLayer ?? [];\n\n this.partytownService.createSharedStorage();\n\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this._doc, 'gtm_loaded')\n .pipe(take(1))\n .subscribe(() => {\n // tell tracking system gtm was loaded\n this.push({ event: WindowEvent.VanillaGtmLoaded });\n this.push({ event: WindowEvent.GtmLoad });\n if (this.#window.partytown.enableEventReplay) {\n setTimeout(() => {\n this.partytownService.createEventReplayQueue();\n }, 5000);\n }\n });\n\n this.load('GoogleTagManagerRenderer', 'text/partytown');\n\n if (this._doc.readyState === 'complete') {\n // we need to do that async, as the script injection also is async\n setTimeout(() => this.#window.dispatchEvent(new CustomEvent('ptupdate')));\n } else {\n this.#window.addEventListener('load', () => {\n setTimeout(() => {\n // notify partytown that we've added a new script\n this.#window.dispatchEvent(new CustomEvent('ptupdate'));\n });\n });\n }\n });\n })\n .catch(() => {\n this.load('GoogleTagManagerRenderer');\n });\n } else {\n this.load('GoogleTagManagerRenderer');\n }\n }\n\n private push(payload: object) {\n if (this.#window.dataLayer) {\n const dataLayer = this.#window.dataLayer;\n // workaround to don't trigger dataLayer.push\n // since it is patched by partytown and unnecessarily propagates data to the worker\n dataLayer[dataLayer.length] = payload;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { UrlService, Utm } from '@frontend/vanilla/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UtmService {\n public static storageKey: string = 'utm';\n\n constructor(private urlService: UrlService) {}\n\n parseFromUrl(url: string): Utm {\n const queryParameters = this.urlService.parse(url).search;\n\n const utm: Utm = {\n utm_source: '',\n utm_medium: '',\n utm_campaign: '',\n utm_term: '',\n utm_content: '',\n utm_keyword: '',\n };\n\n queryParameters.keys().forEach((key) => {\n const value = queryParameters.get(key);\n if (key in utm && value !== null) {\n (utm as any)[key] = value;\n }\n });\n\n return utm;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, inject } from '@angular/core';\n\nimport {\n DeviceService,\n LocationChangeEvent,\n NavigationService,\n OnFeatureInit,\n TRACKING_SERVICE_PROVIDER,\n TagManagerService as TagManagerCoreService,\n TrackingService,\n TrackingServiceProvider,\n UserEvent,\n UserLoginEvent,\n UserService,\n WINDOW,\n} from '@frontend/vanilla/core';\nimport { firstValueFrom } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { PageViewTrackingService } from './page-view-tracking.service';\nimport { TagManagerService } from './tag-manager.service';\nimport { TrackingValueGettersService } from './tracking-value-getters.service';\nimport { TrackingConfig } from './tracking.client-config';\nimport { UtmService } from './utm-service';\n\n@Injectable()\nexport class TrackingBootstrapService implements OnFeatureInit {\n readonly #window = inject(WINDOW);\n private readonly _doc = inject(DOCUMENT);\n\n constructor(\n private navigationService: NavigationService,\n private pageViewTrackingService: PageViewTrackingService,\n private user: UserService,\n private trackingConfig: TrackingConfig,\n private tagManagerService: TagManagerService,\n private valueGetters: TrackingValueGettersService,\n private utmService: UtmService,\n private deviceService: DeviceService,\n private trackingService: TrackingService,\n private tagManagerCoreService: TagManagerCoreService,\n @Inject(TRACKING_SERVICE_PROVIDER) private trackingServiceProvider: TrackingServiceProvider,\n ) {}\n\n async onFeatureInit() {\n await firstValueFrom(this.trackingConfig.whenReady);\n if (!this.trackingConfig.isEnabled) {\n return;\n }\n\n this.tagManagerCoreService.set(this.tagManagerService);\n this.trackingService.set(this.trackingServiceProvider);\n\n await this.trackingService.addInitialValues();\n\n // Browser data\n this.trackingServiceProvider.updateDataLayer({\n 'browser.screenResolution': this.valueGetters.browserScreenResolution(),\n });\n\n this.deviceService.orientation.subscribe(() => {\n this.trackingServiceProvider.updateDataLayer({\n 'browser.orientation': this.valueGetters.browserOrientation(),\n });\n });\n\n this.trackingServiceProvider.setReferrer(this._doc.referrer);\n this.pageViewTrackingService.trackPageView(this.utmService.parseFromUrl(this.#window.location.href));\n this.navigationService.locationChange.subscribe((e: LocationChangeEvent) => {\n if (e.previousUrl === e.nextUrl) {\n return;\n }\n\n this.trackingServiceProvider.setReferrer(e.previousUrl);\n this.pageViewTrackingService.trackPageView(this.utmService.parseFromUrl(e.nextUrl), e.id);\n });\n\n this.user.events.pipe(first((e: UserEvent) => e instanceof UserLoginEvent)).subscribe(() => {\n this.trackingServiceProvider.updateUserContactabilityStatus();\n });\n this.tagManagerService.init();\n }\n}\n","import { PAGE_VIEW_DATA_PROVIDER, TRACKING_SERVICE_PROVIDER, runOnFeatureInit } from '@frontend/vanilla/core';\n\nimport { DataLayerTrackingService } from './data-layer-tracking.service';\nimport { DefaultPageViewDataProvider } from './page-view-data-provider';\nimport { PageViewTrackingService } from './page-view-tracking.service';\nimport { TrackingBootstrapService } from './tracking-bootstrap.service';\n\nexport function provide() {\n return [\n { provide: PAGE_VIEW_DATA_PROVIDER, useClass: DefaultPageViewDataProvider, multi: true },\n { provide: TRACKING_SERVICE_PROVIDER, useClass: DataLayerTrackingService },\n PageViewTrackingService,\n runOnFeatureInit(TrackingBootstrapService),\n ];\n}\n"],"names":["at","TrackingConfig","_a","LazyClientConfigBase","__ngFactoryType__","d","factory","__ngConditionalFactory__","trackingConfigFactory","ɵɵinject","LazyClientConfigService","__decorate","LazyClientConfig","key","product","ClientConfigProductName","SF","service","get","TrackingValueGettersService","_window","constructor","trackingConfig","user","navigationService","urlService","page","cookieService","deviceService","nativeAppService","frontendHelperService","balancePropertiesConfig","__privateAdd","inject","WINDOW","accountId","userBalance","__async","isAuthenticated","firstValueFrom","whenReady","balanceProperties","accountBalance","userCurrency","currency","userCountry","country","userGeoCountry","geoCountry","userLoyalty","loyalty","userCustomerId","customerId","userSegmentId","segmentId","userStage","lifeCycleStage","userPrestage","eWarningVip","userMicroSegmentId","microSegmentId","userChurnRate","churnRate","userFutureValue","futureValue","userPotentialVip","potentialVip","userAgent","__privateGet","navigator","username","hasPositiveBalance","locationAbsUrl","removeNotTrackedQueryStrings","location","absUrl","locationHost","host","locationPathQueryAndFragment","removeLeadingSlashes","url","browserScreenResolution","width","height","windowRect","displayWidth","displayHeight","redirectedFrom","CookieName","RedirexOriginal","trackerID","TrackerId","trackingAffiliate","TrackingAffiliate","abTestGroup","MmcoreBwinvar","pageName","getPageName","pageReferrer","referrer","browserOrientation","currentOrientation","nativeMode","isTouch","cpuCores","cpuMaxFrequency","totalRam","model","nightMode","parseInt","DarkMode","userKnown","LastVisitor","internalCampaign","search","deviceId","DeviceId","lang","languageCode","culture","frontend","getFrontendDescription","medium","getMedium","domain","fullEntryUrl","entryUrl","entryUrlReferrer","EntryUrlReferrer","packageVersion","packageName","nativeWindow","VERSIONS","setReferrer","setEntryUrl","parse","terminalId","TerminalId","shopId","ShopId","terminalType","applicationName","isTerminal","absolute","parsedUrl","notTrackedQueryString","notTrackedQueryStrings","delete","decodeURIComponent","langPrefix","path","lowerCasePath","toLowerCase","indexOf","result","substring","length","isTablet","isMobile","os","isNativeApp","isNativeWrapper","isiOS","isChrome","input","replace","UserService","NavigationService","UrlService","Page","CookieService","DeviceService","NativeAppService","FrontendHelperService","BalancePropertiesConfig","ɵfac","providedIn","_TrackingValueGettersService","eventNames","pageView","userLogout","DataLayerTrackingService","trackingValueGettersService","apiService","log","timerService","localStoreService","webWorkerService","createWorker","WorkerType","DataLayerTrackingInterval","interval","gtmLoaded","processLocalStore","removeWorker","gtmEnabled","tagManagerRenderers","includes","google_tag_manager","_b","dataLayer","some","x","event","WindowEvent","VanillaGtmLoaded","GtmLoad","addInitialValues","updateDataLayerEntryInfo","updateUserValues","updateDataLayer","updateDataLayerSessionId","data","Promise","resolve","isObject","Array","isArray","schedulerEnabled","dataLayerUpdateTimeoutInMilliseconds","scheduleIdleCallback","dataLayerName","push","tracking","getDataFromStore","set","LocalStoreKey","Tracking","JSON","stringify","trackEvents","item","eventType","webAnalytics","parsedValue","WebAnalyticsEventType","load","triggerEvent","eventName","click","close","error","errorRemote","name","options","eventTimeout","timeout","eventCallbackTimeoutInMilliseconds","runWithTimeout","reject","Object","keys","__spreadValues","eventCallback","bind","TriggerEventPromiseResult","Normal","remove","reportErrorObject","reportError","errorDetail","encodeURIComponent","trackContentItemEvent","parameters","parameterName","getContentItemTracking","updateUserContactabilityStatus","subscribe","cts","settings","map","c","selected","join","trackingDataPrefix","mapKeys","pickBy","_","k","startsWith","trackingData","trackings","forEach","promise","timeoutId","Timeout","then","EntryUrl","v8","tech","build","label","entry","utms","source","campaign","content","keyword","hasOwnProperty","decibelInsight","_da_ready","SharedFeaturesApiService","Logger","TimerService","LocalStoreService","WebWorkerService","_DataLayerTrackingService","DefaultPageViewDataProvider","valueGetters","getData","context","navigationId","utm","__spreadProps","of","_DefaultPageViewDataProvider","PageView","dataSource","dataCallback","onData","fn","PageViewTrackingService","productInjector","trackingService","currentDataProviders","pageViewQueue","toNumberOrDefault","v","value","Number","isNaN","trackPageView","args","utm_source","undefined","providers","assign","getMultiple","PAGE_VIEW_DATA_PROVIDER","combineLatest","p","race","NEVER","pipe","pageViewDataProviderTimeout","catchError","first","processPageViewQueue","shift","ProductInjector","TrackingService","_PageViewTrackingService","DataLayerProxyService","strategyProvider","RxStrategyProvider","__privateSet","requiredEvents","patched","patchDataLayer","forceSchedulerDisabled","isEnabled","enableLogging","enableOmitting","createDataLayerProxy","origDataLayer","idleWrapper","schedule","patchZone","strategy","trackingDelay","omitAll","blockDevice","deviceBlockEnabled","isLowTierDevice","isNextCallSuppressed","allowlist","Set","blocklist","window","measureTask","measureTaskDuration","Proxy","target","newValue","has","callback","work","logTrackingPerformance","deviceConcurrency","hardwareConcurrency","minDeviceConcurrency","minDeviceMemory","deviceMemory","benchmarkThreshold","benchmark","omitPercentage","Math","random","_DataLayerProxyService","start","performance","now","calculatePrimes","startTime","startMark","mark","r","endMark","measure","endTime","runtime","ceil","color","console","withArgs","eventQueueKey","PartytownService","injector","Injector","router","Router","_doc","DOCUMENT","ptWorkerLocation","ptSharedStorage","createEventReplayQueue","replayEvents","origPush","addToQueue","apply","createSharedStorage","setStaticProps","createDimensionsEffect","subscribeToDynamicProps","getWindowOffsetUpdates","fromEvent","debounceTime","getVisibilityUpdates","Observable","observer","handler","next","hidden","addEventListener","VisibilityChange","removeEventListener","opener","characterSet","prerendering","loadPurpose","userLanguage","cookieEnabled","cookieDeprecationLabel","vendor","doNotTrack","maxTouchPoints","timeOrigin","timing","navigationStart","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","responseEnd","unloadEventStart","unloadEventEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd","effect","screenHeight","visualViewportHeight","screenWidth","visualViewportWidth","screen","colorDepth","locationChange","switchMap","merge","routerState","root","queryParamMap","startWith","snapshot","href","distinctUntilChanged","title","pageYOffset","scrollY","getSnowplowCounterUpdates","i","_i","defineProperty","enumerable","configurable","_PartytownService","getEventsQueue","savedEventsItem","localStorage","getItem","e","eventsQueue","setItem","parsedArgs","removeItem","TagManagerService","dataLayerProxy","ngZone","partytownService","init","configured","clientTagManagers","excludes","clientInjectionExcludes","filter","current","injectScript","availableClientTagManagers","t","rendererName","type","tagManager","find","Error","existing","querySelector","id","script","createElement","async","text","onload","onerror","body","append","loadPartyTownGTM","isDisabledLocally","partytown","_ptReady","runOutsideAngular","take","enableEventReplay","setTimeout","readyState","dispatchEvent","CustomEvent","catch","payload","NgZone","_TagManagerService","UtmService","parseFromUrl","queryParameters","utm_medium","utm_campaign","utm_term","utm_content","utm_keyword","_UtmService","storageKey","TrackingBootstrapService","pageViewTrackingService","tagManagerService","utmService","tagManagerCoreService","trackingServiceProvider","onFeatureInit","orientation","previousUrl","nextUrl","events","UserLoginEvent","TRACKING_SERVICE_PROVIDER","_TrackingBootstrapService","provide","useClass","multi","runOnFeatureInit"],"mappings":"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"}