{"version":3,"sources":["src/app/main/service/partner.service.ts","node_modules/date-fns/addMinutes.mjs","node_modules/date-fns/formatISO.mjs","src/app/main/service/session.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Partner } from '../model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PartnerService {\r\n private currentPartner = new Partner();\r\n\r\n assign(id: string) {\r\n if (!id) {\r\n return;\r\n }\r\n\r\n this.currentPartner.branding = id.toLowerCase();\r\n\r\n if (this.currentPartner.branding.includes('creditsesame')) {\r\n this.currentPartner.name = 'Credit Sesame';\r\n this.currentPartner.logo = 'assets/credit_sesame_round_logo.png';\r\n }\r\n }\r\n\r\n get partner(): Partner {\r\n return this.currentPartner;\r\n }\r\n}\r\n","import { addMilliseconds } from \"./addMilliseconds.mjs\";\nimport { millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount) {\n return addMilliseconds(date, amount * millisecondsInMinute);\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;","import { toDate } from \"./toDate.mjs\";\nimport { addLeadingZeros } from \"./_lib/addLeadingZeros.mjs\";\n\n/**\n * The {@link formatISO} function options.\n */\n\n/**\n * @name formatISO\n * @category Common Helpers\n * @summary Format the date according to the ISO 8601 standard (https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003169814.htm).\n *\n * @description\n * Return the formatted date string in ISO 8601 format. Options may be passed to control the parts and notations of the date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options.\n *\n * @returns The formatted date string (in loca.l time zone)\n *\n * @throws `date` must not be Invalid Date\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52))\n * //=> '2019-09-18T19:00:52Z'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601, short format (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { format: 'basic' })\n * //=> '20190918T190052'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, date only:\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'date' })\n * //=> '2019-09-18'\n *\n * @example\n * // Represent 18 September 2019 in ISO 8601 format, time only (local time zone is UTC):\n * const result = formatISO(new Date(2019, 8, 18, 19, 0, 52), { representation: 'time' })\n * //=> '19:00:52Z'\n */\nexport function formatISO(date, options) {\n const _date = toDate(date);\n if (isNaN(_date.getTime())) {\n throw new RangeError(\"Invalid time value\");\n }\n const format = options?.format ?? \"extended\";\n const representation = options?.representation ?? \"complete\";\n let result = \"\";\n let tzOffset = \"\";\n const dateDelimiter = format === \"extended\" ? \"-\" : \"\";\n const timeDelimiter = format === \"extended\" ? \":\" : \"\";\n\n // Representation is either 'date' or 'complete'\n if (representation !== \"time\") {\n const day = addLeadingZeros(_date.getDate(), 2);\n const month = addLeadingZeros(_date.getMonth() + 1, 2);\n const year = addLeadingZeros(_date.getFullYear(), 4);\n\n // yyyyMMdd or yyyy-MM-dd.\n result = `${year}${dateDelimiter}${month}${dateDelimiter}${day}`;\n }\n\n // Representation is either 'time' or 'complete'\n if (representation !== \"date\") {\n // Add the timezone.\n const offset = _date.getTimezoneOffset();\n if (offset !== 0) {\n const absoluteOffset = Math.abs(offset);\n const hourOffset = addLeadingZeros(Math.trunc(absoluteOffset / 60), 2);\n const minuteOffset = addLeadingZeros(absoluteOffset % 60, 2);\n // If less than 0, the sign is +, because it is ahead of time.\n const sign = offset < 0 ? \"+\" : \"-\";\n tzOffset = `${sign}${hourOffset}:${minuteOffset}`;\n } else {\n tzOffset = \"Z\";\n }\n const hour = addLeadingZeros(_date.getHours(), 2);\n const minute = addLeadingZeros(_date.getMinutes(), 2);\n const second = addLeadingZeros(_date.getSeconds(), 2);\n\n // If there's also date, separate it with time with 'T'\n const separator = result === \"\" ? \"\" : \"T\";\n\n // Creates a time string consisting of hour, minute, and second, separated by delimiters, if defined.\n const time = [hour, minute, second].join(timeDelimiter);\n\n // HHmmss or HH:mm:ss.\n result = `${result}${separator}${time}${tzOffset}`;\n }\n return result;\n}\n\n// Fallback for modularized imports:\nexport default formatISO;","import { Injectable } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { Router, Event, ActivationStart, NavigationEnd } from '@angular/router';\r\nimport { ActivityService } from './activity.service';\r\nimport { SessionResponse } from '../model';\r\nimport { GaInfo } from 'src/app/config/ga-info.constant';\r\nimport { PartnerService } from './partner.service';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { Observable, of, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { utils } from '../utils/utils.constant';\r\nimport { addMinutes, formatISO } from 'date-fns';\r\nimport { SpinnerSettings } from 'src/app/config/spinner-settings.constant';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SessionService {\r\n constructor(private router: Router, private httpClient: HttpClient, private location: Location, private activity: ActivityService, private cookieService: CookieService, private partnerService: PartnerService) { }\r\n\r\n sessionKey: string;\r\n offerCode: string;\r\n private landingUrl: string;\r\n private landingPath: string;\r\n private lastOfferCode: string;\r\n private sessionResponse: SessionResponse;\r\n private routerEvents$: Subscription;\r\n #destination: string;\r\n\r\n init() {\r\n this.landingUrl = window.location.href;\r\n this.landingPath = this.location.path();\r\n if (environment.isStatic) {\r\n this.sessionKey = environment.defaultSessionKey;\r\n }\r\n this.routerEvents$ = this.router.events.subscribe(evt => this.getOfferCodeFromRoute(evt));\r\n }\r\n\r\n startGuestSession(message?: string): Observable {\r\n return this.createGuestSession(message).pipe(map(res => this.setGuestSession(res)));\r\n }\r\n\r\n clearGuestSession() {\r\n this.sessionKey = null;\r\n this.activity.setField(GaInfo.dimension.sessionKey, null);\r\n }\r\n\r\n private setCampaignData() {\r\n this.activity.offerCode = this.lastOfferCode;\r\n\r\n const params = utils.getUrlParams(this.landingPath);\r\n\r\n const utmSource = params['utm_source'] || this.cookieService.get('referrer');\r\n const utmCampaign = params['utm_campaign'];\r\n const utmMedium = params['utm_medium'];\r\n const utmKeyword = params['utm_term'];\r\n const utmContent = params['utm_content'];\r\n\r\n this.activity.setCampaign(utmCampaign, utmSource, utmMedium, utmKeyword, utmContent, this.lastOfferCode);\r\n\r\n if (utmSource) {\r\n this.partnerService.assign(utmSource);\r\n }\r\n }\r\n\r\n private createGuestSession(message?: string): Observable {\r\n if (this.sessionResponse) {\r\n return of(this.sessionResponse);\r\n }\r\n\r\n let httpOptions = {};\r\n let url = `${environment.apiEndpoint}api/guest-sessions`;\r\n if (this.offerCode) {\r\n url += `?offerCode=${this.offerCode}`;\r\n if (this.landingUrl.toLowerCase().includes('offers/summary')) {\r\n url += '&a2a=true';\r\n }\r\n httpOptions = SpinnerSettings.message('Searching for your offers');\r\n }\r\n\r\n if (message) {\r\n httpOptions = SpinnerSettings.message(message);\r\n }\r\n\r\n const body = { offerCode: this.offerCode, landingUrl: this.landingUrl, lastOfferCode: this.lastOfferCode, destination: this.#destination };\r\n return this.httpClient.post(url, body, httpOptions);\r\n }\r\n\r\n private setGuestSession(res: SessionResponse): SessionResponse {\r\n this.sessionKey = res.sessionKey;\r\n this.sessionResponse = res;\r\n this.activity.setField(GaInfo.dimension.sessionKey, res.sessionKey);\r\n\r\n return res;\r\n }\r\n\r\n private getOfferCodeFromRoute(evt: Event) {\r\n if (evt instanceof ActivationStart && evt && evt.snapshot && evt.snapshot.params && evt.snapshot.params['offerCode']) {\r\n this.offerCode = evt.snapshot.params['offerCode'];\r\n sessionStorage.setItem('OfferLandingUrlExpiration', formatISO(addMinutes(new Date(), 15)));\r\n sessionStorage.setItem('OfferLandingUrl', this.landingPath);\r\n }\r\n\r\n if (!this.offerCode) {\r\n if (this.activity.offerCodeCookie && (this.landingPath.startsWith('/offers/') || this.landingPath.startsWith('/offer/')) ) {\r\n this.offerCode = this.activity.offerCodeCookie;\r\n }\r\n }\r\n\r\n if (evt instanceof ActivationStart && evt && evt.snapshot && evt.snapshot.params && evt.snapshot.params['destination']) {\r\n this.#destination = evt.snapshot.params['destination'];\r\n }\r\n\r\n if (evt instanceof NavigationEnd) {\r\n this.lastOfferCode = this.offerCode || this.activity.offerCodeCookie;\r\n this.routerEvents$.unsubscribe();\r\n this.setCampaignData();\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["PartnerService","constructor","currentPartner","Partner","assign","id","branding","toLowerCase","includes","name","logo","partner","factory","ɵfac","providedIn","_PartnerService","addMinutes","date","amount","addMilliseconds","millisecondsInMinute","formatISO","date","options","_date","toDate","format","representation","result","tzOffset","dateDelimiter","timeDelimiter","day","addLeadingZeros","month","offset","absoluteOffset","hourOffset","minuteOffset","hour","minute","second","separator","time","SessionService","_destination","constructor","router","httpClient","location","activity","cookieService","partnerService","__privateAdd","init","landingUrl","window","href","landingPath","path","environment","isStatic","sessionKey","defaultSessionKey","routerEvents$","events","subscribe","evt","getOfferCodeFromRoute","startGuestSession","message","createGuestSession","pipe","map","res","setGuestSession","clearGuestSession","setField","GaInfo","dimension","setCampaignData","offerCode","lastOfferCode","params","utils","getUrlParams","utmSource","get","utmCampaign","utmMedium","utmKeyword","utmContent","setCampaign","assign","sessionResponse","of","httpOptions","url","apiEndpoint","toLowerCase","includes","SpinnerSettings","body","destination","__privateGet","post","ActivationStart","snapshot","sessionStorage","setItem","formatISO","addMinutes","Date","offerCodeCookie","startsWith","__privateSet","NavigationEnd","unsubscribe","ɵɵinject","Router","HttpClient","Location","ActivityService","CookieService","PartnerService","factory","ɵfac","providedIn","_SessionService"],"x_google_ignoreList":[1,2]}