{"version":3,"file":"chunk-h8y6p3rm.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":["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","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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"}