{"version":3,"sources":["node_modules/@auth0/angular-jwt/fesm2020/auth0-angular-jwt.mjs","src/app/shared/auth/auth.service.ts","server/collections/users/enums/user-roles.enums.ts","server/collections/users/enums/user-status.enums.ts","server/elasticSearch/enums/elasticsearch.enums.ts","src/app/shared/services/google-tag-manager/analytics/data-layer-custom-dimensions.ts","src/app/shared/services/google-tag-manager/analytics/analytics.service.ts"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, Inject, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { defer, of } from 'rxjs';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nconst JWT_OPTIONS = new InjectionToken('JWT_OPTIONS');\n\n/* eslint-disable no-bitwise */\nlet JwtHelperService = /*#__PURE__*/(() => {\n class JwtHelperService {\n constructor(config = null) {\n this.tokenGetter = config && config.tokenGetter || function () {};\n }\n urlBase64Decode(str) {\n let output = str.replace(/-/g, '+').replace(/_/g, '/');\n switch (output.length % 4) {\n case 0:\n {\n break;\n }\n case 2:\n {\n output += '==';\n break;\n }\n case 3:\n {\n output += '=';\n break;\n }\n default:\n {\n throw new Error('Illegal base64url string!');\n }\n }\n return this.b64DecodeUnicode(output);\n }\n // credits for decoder goes to https://github.com/atk\n b64decode(str) {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let output = '';\n str = String(str).replace(/=+$/, '');\n if (str.length % 4 === 1) {\n throw new Error(`'atob' failed: The string to be decoded is not correctly encoded.`);\n }\n for (\n // initialize result and counters\n let bc = 0, bs, buffer, idx = 0;\n // get next character\n buffer = str.charAt(idx++);\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n }\n b64DecodeUnicode(str) {\n return decodeURIComponent(Array.prototype.map.call(this.b64decode(str), c => {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n }\n decodeToken(token = this.tokenGetter()) {\n if (token instanceof Promise) {\n return token.then(t => this._decodeToken(t));\n }\n return this._decodeToken(token);\n }\n _decodeToken(token) {\n if (!token || token === '') {\n return null;\n }\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error(`The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.`);\n }\n const decoded = this.urlBase64Decode(parts[1]);\n if (!decoded) {\n throw new Error('Cannot decode the token.');\n }\n return JSON.parse(decoded);\n }\n getTokenExpirationDate(token = this.tokenGetter()) {\n if (token instanceof Promise) {\n return token.then(t => this._getTokenExpirationDate(t));\n }\n return this._getTokenExpirationDate(token);\n }\n _getTokenExpirationDate(token) {\n let decoded;\n decoded = this.decodeToken(token);\n if (!decoded || !decoded.hasOwnProperty('exp')) {\n return null;\n }\n const date = new Date(0);\n date.setUTCSeconds(decoded.exp);\n return date;\n }\n isTokenExpired(token = this.tokenGetter(), offsetSeconds) {\n if (token instanceof Promise) {\n return token.then(t => this._isTokenExpired(t, offsetSeconds));\n }\n return this._isTokenExpired(token, offsetSeconds);\n }\n _isTokenExpired(token, offsetSeconds) {\n if (!token || token === '') {\n return true;\n }\n const date = this.getTokenExpirationDate(token);\n offsetSeconds = offsetSeconds || 0;\n if (date === null) {\n return false;\n }\n return !(date.valueOf() > new Date().valueOf() + offsetSeconds * 1000);\n }\n getAuthScheme(authScheme, request) {\n if (typeof authScheme === 'function') {\n return authScheme(request);\n }\n return authScheme;\n }\n }\n JwtHelperService.ɵfac = function JwtHelperService_Factory(t) {\n return new (t || JwtHelperService)(i0.ɵɵinject(JWT_OPTIONS));\n };\n JwtHelperService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: JwtHelperService,\n factory: JwtHelperService.ɵfac\n });\n return JwtHelperService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst fromPromiseOrValue = input => {\n if (input instanceof Promise) {\n return defer(() => input);\n }\n return of(input);\n};\nlet JwtInterceptor = /*#__PURE__*/(() => {\n class JwtInterceptor {\n constructor(config, jwtHelper, document) {\n this.jwtHelper = jwtHelper;\n this.document = document;\n this.standardPorts = ['80', '443'];\n this.tokenGetter = config.tokenGetter;\n this.headerName = config.headerName || 'Authorization';\n this.authScheme = config.authScheme || config.authScheme === '' ? config.authScheme : 'Bearer ';\n this.allowedDomains = config.allowedDomains || [];\n this.disallowedRoutes = config.disallowedRoutes || [];\n this.throwNoTokenError = config.throwNoTokenError || false;\n this.skipWhenExpired = config.skipWhenExpired;\n }\n isAllowedDomain(request) {\n const requestUrl = new URL(request.url, this.document.location.origin);\n // If the host equals the current window origin,\n // the domain is allowed by default\n if (requestUrl.host === this.document.location.host) {\n return true;\n }\n // If not the current domain, check the allowed list\n const hostName = `${requestUrl.hostname}${requestUrl.port && !this.standardPorts.includes(requestUrl.port) ? ':' + requestUrl.port : ''}`;\n return this.allowedDomains.findIndex(domain => typeof domain === 'string' ? domain === hostName : domain instanceof RegExp ? domain.test(hostName) : false) > -1;\n }\n isDisallowedRoute(request) {\n const requestedUrl = new URL(request.url, this.document.location.origin);\n return this.disallowedRoutes.findIndex(route => {\n if (typeof route === 'string') {\n const parsedRoute = new URL(route, this.document.location.origin);\n return parsedRoute.hostname === requestedUrl.hostname && parsedRoute.pathname === requestedUrl.pathname;\n }\n if (route instanceof RegExp) {\n return route.test(request.url);\n }\n return false;\n }) > -1;\n }\n handleInterception(token, request, next) {\n const authScheme = this.jwtHelper.getAuthScheme(this.authScheme, request);\n if (!token && this.throwNoTokenError) {\n throw new Error('Could not get token from tokenGetter function.');\n }\n let tokenIsExpired = of(false);\n if (this.skipWhenExpired) {\n tokenIsExpired = token ? fromPromiseOrValue(this.jwtHelper.isTokenExpired(token)) : of(true);\n }\n if (token) {\n return tokenIsExpired.pipe(map(isExpired => isExpired && this.skipWhenExpired ? request.clone() : request.clone({\n setHeaders: {\n [this.headerName]: `${authScheme}${token}`\n }\n })), mergeMap(innerRequest => next.handle(innerRequest)));\n }\n return next.handle(request);\n }\n intercept(request, next) {\n if (!this.isAllowedDomain(request) || this.isDisallowedRoute(request)) {\n return next.handle(request);\n }\n const token = this.tokenGetter(request);\n return fromPromiseOrValue(token).pipe(mergeMap(asyncToken => {\n return this.handleInterception(asyncToken, request, next);\n }));\n }\n }\n JwtInterceptor.ɵfac = function JwtInterceptor_Factory(t) {\n return new (t || JwtInterceptor)(i0.ɵɵinject(JWT_OPTIONS), i0.ɵɵinject(JwtHelperService), i0.ɵɵinject(DOCUMENT));\n };\n JwtInterceptor.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: JwtInterceptor,\n factory: JwtInterceptor.ɵfac\n });\n return JwtInterceptor;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet JwtModule = /*#__PURE__*/(() => {\n class JwtModule {\n constructor(parentModule) {\n if (parentModule) {\n throw new Error(`JwtModule is already loaded. It should only be imported in your application's main module.`);\n }\n }\n static forRoot(options) {\n return {\n ngModule: JwtModule,\n providers: [{\n provide: HTTP_INTERCEPTORS,\n useClass: JwtInterceptor,\n multi: true\n }, options.jwtOptionsProvider || {\n provide: JWT_OPTIONS,\n useValue: options.config\n }, JwtHelperService]\n };\n }\n }\n JwtModule.ɵfac = function JwtModule_Factory(t) {\n return new (t || JwtModule)(i0.ɵɵinject(JwtModule, 12));\n };\n JwtModule.ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n type: JwtModule\n });\n JwtModule.ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n return JwtModule;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/*\n * Public API Surface of angular-jwt\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { JWT_OPTIONS, JwtHelperService, JwtInterceptor, JwtModule };\n","import { Observable, of, merge, Subject, catchError } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Router } from '@angular/router';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { IAuthToken } from '@server/auth/interfaces/authtoken.interface';\r\nimport { IUserRegisterInput } from '@server/auth/interfaces/user-registration.interface';\r\nexport interface ITokenResponse {\r\n token: string;\r\n}\r\nexport type ConfirmMethod = 'url' | 'code';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n private authTokenSubject: Subject;\r\n\r\n get authTokenChange(): Observable {\r\n return merge(this.authToken, this.authTokenSubject.asObservable());\r\n }\r\n\r\n get isAuthenticated(): boolean {\r\n // Check whether the token is expired and return\r\n // true or false\r\n if (this._jwtHelperService.isTokenExpired()) {\r\n this.invalidate();\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private get authToken(): Observable {\r\n const offset = (13 * 24 * 60 * 60) + (23 * 60 * 60); // 13 giorni e 23 ore. Un'ora in meno della validità iniziale del token.\r\n // se è passata almeno un'ora dall'ultima visita / refresh del token, eseguo un ulteriore refresh\r\n // https://stackoverflow.com/questions/26739167/jwt-json-web-token-automatic-prolongation-of-expiration\r\n if (this._jwtHelperService.isTokenExpired(undefined, offset)) {\r\n return this.refreshToken();\r\n }\r\n // return this.refreshToken();\r\n return of(this._jwtHelperService.decodeToken() as IAuthToken);\r\n }\r\n\r\n constructor(\r\n protected readonly router: Router,\r\n protected readonly http: HttpClient,\r\n private _jwtHelperService: JwtHelperService,\r\n ) {\r\n\r\n this.authTokenSubject = new Subject();\r\n }\r\n\r\n authenticate(email: string, password: string, redirectUrl?: string): Observable {\r\n const endPoint = this.getEndPointUrl('login');\r\n // occorre inserire Accept header altrimenti sul server il body della richiesta risulta vuoto.\r\n const _headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/json').set('Accept', 'application/json');\r\n\r\n const body = JSON.stringify({ email, password });\r\n\r\n return this.http.post(endPoint,\r\n body,\r\n {\r\n headers: _headers\r\n }).pipe(\r\n map((data: ITokenResponse) => {\r\n if (data) {\r\n this.setauthToken(data.token, redirectUrl);\r\n return true;\r\n }\r\n return false;\r\n })\r\n );\r\n }\r\n\r\n registerUser(userInput: IUserRegisterInput, confirmMethod: ConfirmMethod = 'url'): Observable {\r\n const endPoint = this.getEndPointUrl('register');\r\n const _headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/json').set('Accept', 'application/json');\r\n let httpParams = new HttpParams()\r\n .append('confirm-method', confirmMethod);\r\n return this.http.post(endPoint,\r\n JSON.stringify(userInput),\r\n {\r\n headers: _headers,\r\n params: httpParams\r\n }).pipe(\r\n map((data: ITokenResponse) => {\r\n if (data) {\r\n this.setauthToken(data.token, null);\r\n return true;\r\n }\r\n\r\n return false;\r\n }));\r\n }\r\n\r\n confirmCode(code: { code: string }): Observable {\r\n const endPoint = this.getEndPointUrl('confirm-code');\r\n const _headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/json').set('Accept', 'application/json');\r\n\r\n return this.http.post(endPoint,\r\n JSON.stringify(code),\r\n {\r\n headers: _headers\r\n }).pipe(\r\n map((data: ITokenResponse) => {\r\n if (data) {\r\n this.setauthToken(data.token, null);\r\n this.authTokenSubject.next(this._jwtHelperService.decodeToken() as IAuthToken);\r\n return true;\r\n }\r\n\r\n return false;\r\n }));\r\n }\r\n\r\n resendConfirmCode(id: string): Observable {\r\n const endPoint = this.getEndPointUrl('resend-confirm-code');\r\n const _headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/json').set('Accept', 'application/json');\r\n\r\n return this.http.post(endPoint,\r\n {id: id},\r\n {\r\n headers: _headers\r\n }).pipe(\r\n map((res: boolean) => res)\r\n );\r\n }\r\n\r\n invalidate(): void {\r\n this.setauthToken(null, this.router.url);\r\n }\r\n\r\n // protected getUrlSearchParams = (params: Array): URLSearchParams => {\r\n // const res = new URLSearchParams();\r\n\r\n // for (const item of params)\r\n // res.append(item.key, item.value);\r\n\r\n // return res;\r\n // };\r\n\r\n protected getEndPointUrl = (url: string) => {\r\n return '/auth/' + url;\r\n }\r\n\r\n setauthToken(token: string, redirectUrl?: string): void {\r\n if (token) {\r\n localStorage.setItem('token', token);\r\n } else {\r\n localStorage.removeItem('token');\r\n }\r\n this.authTokenSubject.next(this._jwtHelperService.decodeToken() as IAuthToken);\r\n if (redirectUrl) {\r\n this.router.navigated = false;\r\n this.router.navigateByUrl(redirectUrl);\r\n }\r\n }\r\n\r\n // protected handleError(error: Response): Observable {\r\n // // in a real world app, we may send the server to some remote logging infrastructure\r\n // // instead of just logging it to the console\r\n // return observableThrowError(error || \"Server Error\");\r\n // }\r\n\r\n refreshToken(): Observable {\r\n const endPoint = this.getEndPointUrl('refresh-token');\r\n if (!this._jwtHelperService.isTokenExpired()) {\r\n return this.http.get(endPoint, { headers: {\"authorization\": `Bearer ${localStorage.getItem('token') || null}`}})\r\n .pipe(\r\n tap((data: ITokenResponse) => this.setauthToken(data.token)),\r\n map((data) => this._jwtHelperService.decodeToken() as IAuthToken)\r\n );\r\n } else {\r\n return of(null);\r\n }\r\n }\r\n\r\n forgotPassword(email:string): Observable{\r\n const endPoint = this.getEndPointUrl('forgot-password');\r\n const _headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/json').set('Accept', 'application/json');\r\n\r\n const body = JSON.stringify({ email });\r\n\r\n return this.http.post(endPoint,\r\n body,\r\n {\r\n headers: _headers\r\n }).pipe(map((success: boolean) => success));\r\n }\r\n\r\n resetPassword(token: string, password: string): Observable{\r\n const endPoint = this.getEndPointUrl('reset-password');\r\n const _headers: HttpHeaders = new HttpHeaders().set('Content-Type', 'application/json').set('Accept', 'application/json');\r\n\r\n const body = JSON.stringify({ token, password });\r\n\r\n return this.http.post(endPoint,\r\n body,\r\n {\r\n headers: _headers\r\n }).pipe(map((success: boolean) => success));\r\n\r\n }\r\n}\r\n","\r\nenum UserRolesEnum {\r\n basic = 'basic',\r\n customer = 'customer',\r\n admin = 'admin',\r\n stand_admin = 'stand_admin:',\r\n all = 'all'\r\n}\r\nexport { UserRolesEnum };\r\n","enum UserStatusEnum {\r\n all = 'all',\r\n active = 'active',\r\n inactive = 'inactive',\r\n retired = 'retired',\r\n unknow = 'unknow'\r\n}\r\nexport { UserStatusEnum };\r\n","enum EsType {\r\n category = 'Category',\r\n company = 'Company',\r\n product = 'Product',\r\n news = 'News',\r\n all = 'all'\r\n}\r\n\r\nexport { EsType };\r\n","import { UserRolesEnum } from '@collections/users/enums';\r\nexport type AppPageType = 'news' | 'product' | 'company' | 'event' | 'halls' | 'website';\r\n\r\nexport class DataLayerCustomDimensions {\r\n userId: string = undefined;\r\n userRole1: string = undefined;\r\n userRole2: string = undefined;\r\n loginStatus: 'logged_in' | 'logged_out';\r\n category: string = undefined;\r\n pageType: AppPageType = undefined;\r\n authorId: string = undefined;\r\n companySlug: string = undefined;\r\n\r\n constructor(userId: string, userRoles: string[]) {\r\n this.userId = userId;\r\n if (userRoles && userRoles.length > 1) {\r\n const roles = userRoles.filter(r => r !== UserRolesEnum.basic);\r\n this.userRole1 = roles[0];\r\n this.userRole2 = roles[1] ?? undefined;\r\n } else {\r\n this.userRole1 = userRoles[0];\r\n }\r\n\r\n this.loginStatus = userId ? 'logged_in' : 'logged_out';\r\n }\r\n}\r\n","import { ICompany } from '@collections/companies/interfaces/company.interface';\r\nimport { IProduct } from '@collections/products/interfaces/product.interface';\r\nimport { AuthService } from '@shared/auth/auth.service';\r\n/* import { CookieService } from 'ngx-cookie-service'; */\r\nimport { LazyLoadService } from 'app/lazy-load/lazy-load.service';\r\nimport { ApplicationRef, createComponent, EmbeddedViewRef, Inject, Injectable, LOCALE_ID, NgZone } from '@angular/core';\r\n// import { WindowToken } from '@shared/tokens/window';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { forkJoin, Observable, of, tap, Subject, ReplaySubject, Subscription, filter, bufferTime, groupBy, mergeMap, toArray, from, catchError } from 'rxjs';\r\n// import { GA4_ID, GMT_ID } from '@shared/tokens/GMT';\r\nimport { PageMetadata } from '../../meta-data-service/meta-data.commons';\r\nimport { DataLayerCustomDimensions } from './data-layer-custom-dimensions';\r\nimport { Router } from '@angular/router';\r\nimport { INews } from '@collections/news/interfaces';\r\nimport { IElasticSearchItem } from '@server/elasticSearch/interfaces';\r\nimport { EsType } from '@server/elasticSearch/enums';\r\nimport { environment } from '@env/environment';\r\ndeclare global {\r\n interface Window {\r\n dataLayer: any[];\r\n requestIdleCallback(callback: IdleRequestCallback, options?: IdleRequestOptions): number;\r\n }\r\n interface IdleRequestCallback {\r\n (deadline: IdleDeadline): void;\r\n }\r\n\r\n interface IdleDeadline {\r\n timeRemaining(): DOMHighResTimeStamp;\r\n readonly didTimeout: boolean;\r\n }\r\n\r\n interface IdleRequestOptions {\r\n timeout?: number | undefined;\r\n }\r\n}\r\n\r\nexport class GA4EcommerceItem {\r\n item_list_id?: string;\r\n item_list_name?: string;\r\n promotion_id?: string;\r\n promotion_name?: string;\r\n item_id: string;\r\n item_name: string;\r\n item_brand: string;\r\n item_variant?: string;\r\n item_category?: string;\r\n item_category1?: string;\r\n item_category2?: string;\r\n item_category3?: string;\r\n item_category4?: string;\r\n item_category5?: string;\r\n}\r\n\r\n@Injectable()\r\nexport class AnalyticsService {\r\n public dataLayerCustomDimensions: DataLayerCustomDimensions;\r\n private trackPage$ = new ReplaySubject();\r\n private trackPageSubscription: Subscription;\r\n private queueSubject: Subject = new Subject();\r\n private hasConsent: boolean;\r\n private gmtId: string;\r\n private gmtIsLoaded = false;\r\n private userId: string;\r\n private userRoles: string[];\r\n\r\n\r\n constructor(\r\n // @Inject(WindowToken) private window: Window,\r\n @Inject(DOCUMENT) private document: Document,\r\n private lazyLoadService: LazyLoadService,\r\n /* private cookieService: CookieService, */\r\n private appRef: ApplicationRef,\r\n private router: Router,\r\n private authService: AuthService,\r\n @Inject(LOCALE_ID) private locale: string,\r\n private zone: NgZone\r\n ) {\r\n this.gmtId = environment.GTM_Id;\r\n // this.window.dataLayer = this.window.dataLayer || [{ 'gtm.start': new Date().getTime(), event: 'gtm.js', lang: locale, ga4id: environment.GA4_id, gtmserv: environment.gtmserv , dev: environment.debugOn}];\r\n window.dataLayer = window.dataLayer || [{ 'gtm.start': new Date().getTime(), event: 'gtm.js', lang: locale, ga4id: environment.GA4_id, gtmserv: environment.gtmserv , dev: environment.debugOn}];\r\n\r\n this.zone.runOutsideAngular(() => {\r\n this.queueSubject\r\n .pipe(\r\n bufferTime(2000),\r\n filter(items => items.length > 0),\r\n )\r\n .subscribe((items) => {\r\n from(items)\r\n .pipe(\r\n groupBy((item) => item.item_list_id),\r\n mergeMap((group) => group.pipe(toArray())),\r\n )\r\n .subscribe(items => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'view_item_list',\r\n ecommerce: {\r\n item_list_id: items[0].item_list_id,\r\n item_list_name: items[0].item_list_name,\r\n items: items\r\n }\r\n });\r\n })\r\n });\r\n });\r\n\r\n\r\n this.authService.authTokenChange\r\n .subscribe(token => {\r\n if (this.trackPageSubscription) {\r\n this.trackPageSubscription.unsubscribe();\r\n }\r\n \r\n this.userId = token ? token.id : this.generateTemporaryId() + '_guest';\r\n // console.log(this.userId);\r\n this.userRoles = token ? token.roles : ['none'];\r\n this.dataLayerCustomDimensions = new DataLayerCustomDimensions(this.userId, this.userRoles);\r\n this.trackPageSubscription = this.trackPage$\r\n .subscribe((pageMetadata: PageMetadata) => {\r\n this._track(pageMetadata);\r\n });\r\n });\r\n\r\n/* if ('requestIdleCallback' in window) {\r\n this.window.requestIdleCallback(() => this.loadCookieConsentModule());\r\n } else {\r\n this.loadCookieConsentModule();\r\n } */\r\n }\r\n\r\n generateTemporaryId(): string {\r\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n const idLength = 10; // Lunghezza desiderata dell'ID temporaneo\r\n\r\n let temporaryId = '';\r\n for (let i = 0; i < idLength; i++) {\r\n const randomIndex = Math.floor(Math.random() * characters.length);\r\n temporaryId += characters[randomIndex];\r\n }\r\n\r\n return temporaryId;\r\n }\r\n\r\n async trackPageView(pageMetadata: PageMetadata): Promise {\r\n this.trackPage$.next(pageMetadata);\r\n }\r\n\r\n private _track(pageMetadata: PageMetadata): void {\r\n const dimensions = this.dataLayerCustomDimensions;\r\n try {\r\n dimensions.category = pageMetadata?.categories ? pageMetadata?.categories[0] : dimensions.category;\r\n dimensions.authorId = pageMetadata.authorId ?? dimensions.authorId;\r\n dimensions.pageType = pageMetadata.pageType ?? dimensions.pageType;\r\n dimensions.companySlug = pageMetadata.company?.slug ?? dimensions.companySlug;\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n window.dataLayer.push({\r\n ...dimensions,\r\n event: 'virtualPageview',\r\n pageTitle: pageMetadata.title,\r\n pagePath: `/${this.locale}${pageMetadata.url || this.router.url}`,\r\n ecommerce: null,\r\n eventCallback : () => {\r\n // reset data\r\n this.dataLayerCustomDimensions = new DataLayerCustomDimensions(this.userId, this.userRoles);\r\n }\r\n });\r\n });\r\n }\r\n\r\n async ecTracKViewItemList(item: ICompany | IProduct | INews, itemListId: string, itemListName: string): Promise {\r\n let data = this.getEcItem(item, itemListId, itemListName);\r\n if (item)\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.queueSubject.next(data);\r\n });\r\n }\r\n\r\n async ecTrackViewItem(item: ICompany | IProduct | INews, itemListId: string, itemListName: string): Promise {\r\n let data = this.getEcItem(item, itemListId, itemListName);\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'view_item',\r\n ecommerce: {\r\n currency: 'EUR',\r\n value: 0.5,\r\n items: [data]\r\n }\r\n });\r\n });\r\n }\r\n\r\n async ecTrackSelectItem(item: ICompany | IProduct | INews | IElasticSearchItem, itemListId: string, itemListName: string): Promise {\r\n const data = this.getEcItem(item, itemListId, itemListName);\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'select_item',\r\n ecommerce: {\r\n item_list_id: itemListId,\r\n item_list_name: itemListName,\r\n items: [data]\r\n }\r\n });\r\n });\r\n }\r\n\r\n async ecTrackViewPromotion(item: ICompany | IProduct | INews, promotionId: string, promotionName: string): Promise {\r\n const data = this.getEcItem(item, null, null, promotionId, promotionName);\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'view_promotion',\r\n ecommerce: {\r\n promotion_id: promotionId,\r\n promotion_name: promotionName,\r\n items: [data]\r\n }\r\n });\r\n });\r\n }\r\n\r\n async ecTrackSelectPromotion(item: ICompany | IProduct | INews, promotionId: string, promotionName: string): Promise {\r\n const data = this.getEcItem(item, null, null, promotionId, promotionName);\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'select_promotion',\r\n ecommerce: {\r\n promotion_id: promotionId,\r\n promotion_name: promotionName,\r\n items: [data]\r\n }\r\n });\r\n });\r\n }\r\n\r\n async ecTrackAddRemoveToCart(item: ICompany | IProduct | INews, add: boolean): Promise {\r\n const data = this.getEcItem(item);\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: add ? 'add_to_cart' : 'remove_from_cart',\r\n ecommerce: {\r\n currency: 'EUR',\r\n value: 1,\r\n items: [data]\r\n }\r\n });\r\n });\r\n }\r\n\r\n // evento personalizzato\r\n ecTrackRateItem(item: IProduct, rate: number): void {\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'rate_item',\r\n item_brand: item.companySlug,\r\n item_id: item._id,\r\n item_name: item.name,\r\n rate: rate\r\n });\r\n });\r\n }\r\n\r\n async trackCustomSearch(searchText: string): Promise {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: 'customSearch',\r\n customSearchInput: searchText\r\n });\r\n }\r\n\r\n private getEcItem(item: ICompany | IProduct | INews | IElasticSearchItem, itemListId?: string, itemListName?: string, promotionId?: string, promotionName?: string): GA4EcommerceItem {\r\n let data: GA4EcommerceItem = new GA4EcommerceItem();\r\n data.item_id = item._id;\r\n\r\n if (promotionId) {\r\n data.promotion_id = promotionId;\r\n data.promotion_name = promotionName;\r\n } else if (itemListId) {\r\n data.item_list_name = itemListName;\r\n data.item_list_id = itemListId;\r\n }\r\n\r\n // data.item_type = item.__typename;\r\n\r\n let categories: Array = [];\r\n\r\n let __typename;\r\n if (item.hasOwnProperty('itemTypeName')) {\r\n __typename = (item as IElasticSearchItem).itemTypeName;\r\n } else {\r\n __typename = (item as any).__typename;\r\n }\r\n\r\n switch (item.__typename) {\r\n case 'ElasticSearchItem':\r\n item = item as IElasticSearchItem;\r\n switch(item.itemTypeName) {\r\n case EsType.company:\r\n data.item_name = item.company.fullName;\r\n data.item_brand = item.company.slug;\r\n categories = item.company.primaryPath.split('/');\r\n break;\r\n case EsType.product:\r\n data.item_name = item.title,\r\n data.item_variant = 'product';\r\n data.item_brand = item.company.slug;\r\n if (item.categories && item.categories.length > 0) {\r\n categories = item.categories;\r\n }\r\n break;\r\n case 'News':\r\n data.item_name = item.title;\r\n data.item_variant = 'news';\r\n if (item.company) {\r\n categories = item.company.primaryPath.split('/');\r\n }\r\n break;\r\n }\r\n break;\r\n case 'Company':\r\n item = item as ICompany;\r\n data.item_name = item.fullName;\r\n data.item_brand = item.slug;\r\n categories = item.primaryPath.split('/');\r\n break;\r\n case 'Product':\r\n item = item as IProduct;\r\n data.item_name = item.name,\r\n data.item_variant = 'product';\r\n data.item_brand = item.companySlug;\r\n if (item.categories && item.categories.length > 0) {\r\n categories = item.categories[0].path.split('/');\r\n }\r\n break;\r\n case 'News':\r\n item = item as INews;\r\n data.item_name = item.title;\r\n data.item_variant = 'news';\r\n if (item.categories && item.categories.length > 0) {\r\n categories = item.categories[0].path.split('/');\r\n }\r\n\r\n break;\r\n }\r\n let i = 0;\r\n for (const cat of categories) {\r\n if (!cat) {\r\n continue;\r\n }\r\n data['item_category' + (i === 0 ? '' : (i + 1).toString())] = cat;\r\n i++;\r\n }\r\n return data;\r\n }\r\n\r\n trackCustomEvent(event: string): void {\r\n this.ensureGMT()\r\n .subscribe(() => {\r\n this.resetEc();\r\n window.dataLayer.push({\r\n event: event\r\n })\r\n });\r\n }\r\n\r\n private resetEc(): void {\r\n window.dataLayer.push({ ecommerce: null });\r\n }\r\n\r\n/* private async loadCookieConsentModule(): Promise {\r\n const consentCookie = this.cookieService.get('cookieconsent_status');\r\n this.hasConsent = consentCookie ? consentCookie === 'allow' : false;\r\n\r\n if (!this.hasConsent) {\r\n forkJoin([\r\n this.lazyLoadService.loadScript('cookie-consent-3.1.1.js', true),\r\n this.lazyLoadService.loadStyle('cookie-consent-3.1.1.css', true)\r\n ])\r\n .subscribe(async () => {\r\n const { CookieConsentComponent } = await import('app/shared/components/cookie-consent/cookie-consent.component')\r\n const componentRef = createComponent(CookieConsentComponent, {environmentInjector: this.appRef.injector});\r\n this.appRef.attachView(componentRef.hostView);\r\n // 3. Get DOM element from component\r\n const domElem = (componentRef.hostView as EmbeddedViewRef)\r\n .rootNodes[0] as HTMLElement;\r\n // 4. Append DOM element to the body\r\n this.document.body.appendChild(domElem);\r\n });\r\n }\r\n } */\r\n\r\n ensureGMT(): Observable {\r\n const cdn = environment.debugOn ? 'https://www.googletagmanager.com/gtm.js?id=' : 'https://load.gtm.expometals.net/uxrskhme.js?id=';\r\n return this.gmtIsLoaded ? of(true) :\r\n // this.lazyLoadService.loadScript(`${cdn}${this.gmtId}`, false, 3500)\r\n this.lazyLoadService.loadScript(`${cdn}${this.gmtId}`, false, true)\r\n .pipe(\r\n tap(() => this.gmtIsLoaded = true),\r\n catchError(err => of(false)), // https://load.gtm.expometals.net é impostato a disallow * nel robots.txt stape, quindi viene ignorato da goolgebot e genera errore\r\n filter(loaded => loaded === true) // pensare se si può gestire meglio, magari aggiungendo un retry per l'utente comune, (non bot).\r\n );\r\n }\r\n}\r\n"],"mappings":"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","names":["JWT_OPTIONS","InjectionToken","JwtHelperService","config","str","output","chars","bc","bs","buffer","idx","c","token","t","parts","decoded","date","offsetSeconds","authScheme","request","ɵɵinject","ɵɵdefineInjectable","fromPromiseOrValue","input","defer","of","JwtInterceptor","jwtHelper","document","requestUrl","hostName","domain","requestedUrl","route","parsedRoute","next","tokenIsExpired","map","isExpired","mergeMap","innerRequest","asyncToken","DOCUMENT","JwtModule","parentModule","options","HTTP_INTERCEPTORS","ɵɵdefineNgModule","ɵɵdefineInjector","AuthService","authTokenChange","merge","authToken","authTokenSubject","asObservable","isAuthenticated","_jwtHelperService","isTokenExpired","invalidate","undefined","offset","refreshToken","of","decodeToken","constructor","router","http","getEndPointUrl","url","Subject","authenticate","email","password","redirectUrl","endPoint","_headers","HttpHeaders","set","body","JSON","stringify","post","headers","pipe","map","data","setauthToken","token","registerUser","userInput","confirmMethod","httpParams","HttpParams","append","params","confirmCode","code","next","resendConfirmCode","id","res","localStorage","setItem","removeItem","navigated","navigateByUrl","get","getItem","tap","forgotPassword","success","resetPassword","ɵɵinject","Router","HttpClient","JwtHelperService","factory","ɵfac","providedIn","_AuthService","UserRolesEnum","UserStatusEnum","EsType","DataLayerCustomDimensions","constructor","userId","userRoles","undefined","userRole1","userRole2","category","pageType","authorId","companySlug","length","roles","filter","r","UserRolesEnum","basic","loginStatus","GA4EcommerceItem","AnalyticsService","constructor","document","lazyLoadService","appRef","router","authService","locale","zone","trackPage$","ReplaySubject","queueSubject","Subject","gmtIsLoaded","gmtId","environment","GTM_Id","window","dataLayer","Date","getTime","event","lang","ga4id","GA4_id","gtmserv","dev","debugOn","runOutsideAngular","pipe","bufferTime","filter","items","length","subscribe","from","groupBy","item","item_list_id","mergeMap","group","toArray","resetEc","push","ecommerce","item_list_name","authTokenChange","token","trackPageSubscription","unsubscribe","userId","id","generateTemporaryId","userRoles","roles","dataLayerCustomDimensions","DataLayerCustomDimensions","pageMetadata","_track","characters","temporaryId","i","idLength","randomIndex","Math","floor","random","trackPageView","__async","next","dimensions","category","categories","authorId","pageType","companySlug","company","slug","e","console","log","ensureGMT","__spreadProps","__spreadValues","pageTitle","title","pagePath","url","eventCallback","ecTracKViewItemList","itemListId","itemListName","data","getEcItem","ecTrackViewItem","currency","value","ecTrackSelectItem","ecTrackViewPromotion","promotionId","promotionName","promotion_id","promotion_name","ecTrackSelectPromotion","ecTrackAddRemoveToCart","add","ecTrackRateItem","rate","item_brand","item_id","_id","item_name","name","trackCustomSearch","searchText","customSearchInput","__typename","hasOwnProperty","itemTypeName","EsType","fullName","primaryPath","split","product","item_variant","path","cat","toString","trackCustomEvent","cdn","of","loadScript","tap","catchError","err","loaded","ɵɵinject","DOCUMENT","LazyLoadService","ApplicationRef","Router","AuthService","LOCALE_ID","NgZone","factory","ɵfac","_AnalyticsService"],"x_google_ignoreList":[0]}