{"version":3,"file":"fledge.js","sourceRoot":"","sources":["../../TypeScripts/fledge/fledge.ts"],"names":[],"mappings":"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","sourcesContent":["\n/// \n/// \n/// \n\nenum AvEventTypes {\n Visit = 'Visit',\n Consent = 'Consent',\n Interact = 'Interact',\n Convert = 'Convert',\n Topics = 'Topics',\n}\n\ninterface AvEvent {\n readonly type: AvEventTypes;\n readonly clientName: string | undefined;\n readonly recommendationId: string | undefined;\n}\n\ninterface AvVisitEvent extends AvEvent {\n readonly location: string;\n}\n\ninterface AvConsentEvent extends AvEvent {\n readonly gaveConsent: boolean;\n}\n\ninterface AvInteractEvent extends AvEvent {\n readonly action: string;\n readonly id: string;\n}\n\ninterface AvConvertEvent extends AvEvent {\n readonly action: string;\n readonly transactionId: string;\n readonly id: string | undefined;\n readonly price: number | undefined;\n}\n\ninterface AvTopicsEvent extends AvEvent {\n readonly configVersion: string;\n readonly modelVersion: string;\n readonly taxonomyVersion: string;\n readonly topics: number[];\n}\n\nclass AvLogger {\n public log(...data: any[]) {\n console.log(...data);\n }\n public warn(...data: any[]) {\n console.warn(...data);\n }\n public error(...data: any[]) {\n console.error(...data);\n }\n}\n\nclass AvEvents {\n push(event: AvEvent) {\n if (!this._clientName && event.clientName) {\n this._clientName = event.clientName.toLowerCase();\n }\n switch (event.type) {\n case AvEventTypes.Consent:\n this.processConsentEvent(event as AvConsentEvent);\n break;\n default:\n this._events.push(event);\n break;\n }\n setTimeout(() => {\n if (this._clientName && (this._gaveConsent === true /*|| (!this.shouldGiveConsent && this._gaveConsent !== false)*/)) {\n var length = this._events.length;\n if (length) {\n var events = this._events.splice(0, length);\n this.processEventsAsync(...events);\n }\n }\n }, 1_000);\n }\n shift?: () => AvEvent | undefined;\n length: number = 0;\n\n public readonly timeZone: string;\n public readonly shouldGiveConsent: boolean;\n public readonly fledgeEnabled: boolean;\n public readonly topicsEnabled: boolean;\n public readonly logger?: AvLogger;\n public readonly fledgeId: string;\n\n constructor() {\n if (new URLSearchParams(window.location.search).has(\"verbose\")) {\n this.logger = new AvLogger();\n }\n const EU_TIMEZONES = [\n 'Europe/Vienna',\n 'Europe/Brussels',\n 'Europe/Sofia',\n 'Europe/Zagreb',\n 'Asia/Famagusta',\n 'Asia/Nicosia',\n 'Europe/Prague',\n 'Europe/Copenhagen',\n 'Europe/Tallinn',\n 'Europe/Helsinki',\n 'Europe/Paris',\n 'Europe/Berlin',\n 'Europe/Busingen',\n 'Europe/Athens',\n 'Europe/Budapest',\n 'Europe/Dublin',\n 'Europe/Rome',\n 'Europe/Riga',\n 'Europe/Vilnius',\n 'Europe/Luxembourg',\n 'Europe/Malta',\n 'Europe/Amsterdam',\n 'Europe/Warsaw',\n 'Atlantic/Azores',\n 'Atlantic/Madeira',\n 'Europe/Lisbon',\n 'Europe/Bucharest',\n 'Europe/Bratislava',\n 'Europe/Ljubljana',\n 'Africa/Ceuta',\n 'Atlantic/Canary',\n 'Europe/Madrid',\n 'Europe/Stockholm'\n ];\n this.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n this.shouldGiveConsent = EU_TIMEZONES.indexOf(this.timeZone) >= 0;\n this.fledgeEnabled = 'joinAdInterestGroup' in navigator &&\n document.featurePolicy.allowsFeature('join-ad-interest-group');\n this.topicsEnabled = 'browsingTopics' in document &&\n document.featurePolicy.allowsFeature('browsing-topics') &&\n document.featurePolicy.allowsFeature('interest-cohort');\n this.fledgeId = window.localStorage.getItem(\"fid\") ?? crypto.randomUUID();\n this.logger?.log('AntVoice Fledge IFrame: ' + JSON.stringify({ timeZone: this.timeZone, shouldGiveConsent: this.shouldGiveConsent, fledgeEnabled: this.fledgeEnabled, topicsEnabled: this.topicsEnabled, fledgeId: this.fledgeId }));\n }\n\n private _events: AvEvent[] = [];\n private _clientName?: string;\n private _gaveConsent?: boolean;\n\n private processConsentEvent(event: AvConsentEvent) {\n this.logger?.log('AntVoice Consent: ' + JSON.stringify(event));\n this._gaveConsent = event.gaveConsent;\n if (this._gaveConsent === false) {\n window.localStorage.removeItem(\"fid\");\n if (navigator.clearOriginJoinedAdInterestGroups) {\n navigator.clearOriginJoinedAdInterestGroups(\"https://ps.avads.net\");\n }\n } else {\n if (window.localStorage.getItem(\"fid\") == null) {\n window.localStorage.setItem(\"fid\", this.fledgeId);\n }\n }\n }\n\n private async processEventsAsync(...events: AvEvent[]): Promise {\n try {\n this.logger?.log('AntVoice Events: ' + JSON.stringify(events));\n const requestInit: RequestInit = this.logger ?\n {\n browsingTopics: this.topicsEnabled,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ id: this.fledgeId, events: events })\n } : {\n browsingTopics: this.topicsEnabled,\n method: 'POST',\n headers: {\n 'Content-Encoding': 'gzip',\n 'Content-Type': 'application/json',\n },\n body: await this.gzipAsync(JSON.stringify({ id: this.fledgeId, events: events }))\n };\n const response = await fetch(\"https://ps.avads.net/join\" + (this.logger ? '?verbose' : ''), requestInit);\n if (response.status == 200) {\n var groups = await response.json() as AuctionAdInterestGroup[];\n for (var group of groups) {\n this.logger?.log('AntVoice Join: ' + JSON.stringify({ owner: group.owner, name: group.name }));\n await navigator.joinAdInterestGroup(group);\n }\n }\n } catch (exception) {\n await this.logExceptionAsync(exception);\n }\n }\n\n private async logExceptionAsync(exception: any): Promise {\n var body = JSON.stringify({ Name: exception.name, Message: exception.message, Stack: exception.stack }, null, 4);\n this.logger?.log('AntVoice Exception: \\n' + body);\n const requestInit: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: body,\n };\n const response = await fetch(\"https://ps.avads.net/log\", requestInit);\n }\n\n private gzipAsync(value: string): Promise {\n const bytes = new TextEncoder().encode(value);\n const compressionStream = new CompressionStream('gzip');\n const writer = compressionStream.writable.getWriter();\n writer.write(bytes);\n writer.close();\n return new Response(compressionStream.readable).blob();\n }\n}\n\ninterface Window {\n av_events: AvEvents | AvEvent[];\n}\n\nconst av_events = window.av_events;\nwindow.av_events = new AvEvents();\n\nif (av_events?.shift) {\n while (av_events.length > 0) {\n let av_event = av_events.shift();\n if (av_event) {\n window.av_events.push(av_event);\n }\n }\n}\n"]}