{"version":3,"file":"ngx-matomo.mjs","sources":["../../../projects/ngx-matomo/src/lib/matomo-configuration.ts","../../../projects/ngx-matomo/src/lib/matomo-injector.service.ts","../../../projects/ngx-matomo/src/lib/matomo-tracker.service.ts","../../../projects/ngx-matomo/src/helpers.ts","../../../projects/ngx-matomo/src/lib/matomo-route-tracker.service.ts","../../../projects/ngx-matomo/src/lib/matomo-track-click.directive.ts","../../../projects/ngx-matomo/src/lib/matomo.module.ts","../../../projects/ngx-matomo/src/public-api.ts","../../../projects/ngx-matomo/src/ngx-matomo.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface SanitizedMatomoConfiguration {\n  /**\n   * URL of the Matomo JS script to execute.\n   */\n  scriptUrl?: string;\n  /**\n   * Version of the Matomo JS script to download.\n   * (there is no easy way to know for sure which features will be supported in the script)\n   */\n  scriptVersion: number;\n  /**\n   * Array of trackers, each one of them being described by its URL and site id.\n   */\n  trackers: Array<{ trackerUrl: string; siteId: number }>;\n  /**\n   * If true, user consent will be required.\n   */\n  requireConsent?: boolean;\n  /**\n   * If true, user consent will be required for cookies to be stored and used.\n   */\n  requireCookieConsent?: boolean;\n  /**\n   * If true, initial page view will not be tracked.\n   */\n  skipTrackingInitialPageView?: boolean;\n  /**\n   * If true, link will be automatically tracked on the first page (if enabled).\n   */\n  trackLinks?: boolean;\n  /**\n   * When link tracking has been enabled, this sets the value to the call to `enableLinkTracking`\n   */\n  trackLinkValue?: boolean;\n  /**\n   * Parameters related to route tracking.\n   */\n  routeTracking?: {\n    /**\n     * If true, automatic route tracking is enabled.\n     */\n    enable: boolean;\n    /**\n     * List of DOM element ids for tracking content impressions.\n     */\n    contentIds?: Array<string>;\n  };\n}\n\n/**\n * Matomo module configuration interface.\n */\nexport interface MatomoConfiguration extends SanitizedMatomoConfiguration {\n  /**\n   * If true, automatically track the app being started.\n   * @deprecated\n   */\n  trackAppStart?: boolean;\n}\n\nexport function sanitizeConfiguration(\n  configuration: Partial<MatomoConfiguration>\n): Partial<SanitizedMatomoConfiguration> {\n  const sanitizedConfiguration: Partial<SanitizedMatomoConfiguration> = {\n    ...defaultConfiguration,\n    ...configuration,\n  };\n\n  if (configuration.trackAppStart !== undefined && configuration.trackAppStart !== null) {\n    sanitizedConfiguration.skipTrackingInitialPageView = !configuration.trackAppStart;\n  }\n\n  if (configuration.routeTracking !== undefined && configuration.routeTracking !== null) {\n    sanitizedConfiguration.routeTracking = configuration.routeTracking;\n  }\n\n  return sanitizedConfiguration;\n}\n\n/**\n * Injection token for Matomo configuration.\n */\nexport const MATOMO_CONFIGURATION = new InjectionToken<MatomoConfiguration>('MATOMO_CONFIGURATION');\n\n/**\n * Default configuration for the Matomo module.\n */\nconst defaultConfiguration: Partial<SanitizedMatomoConfiguration> = {\n  scriptVersion: 4,\n  trackers: [],\n  requireConsent: false,\n  requireCookieConsent: false,\n  skipTrackingInitialPageView: false,\n  trackLinks: true,\n  trackLinkValue: false,\n  routeTracking: {\n    enable: false,\n  },\n};\n","import { Inject, Injectable } from '@angular/core';\n\nimport { MatomoConfiguration, MATOMO_CONFIGURATION } from './matomo-configuration';\n\n/**\n * Access to the global window variable.\n */\ndeclare const window: {\n  [key: string]: any;\n  prototype: Window;\n  new (): Window;\n};\n\n/**\n * Service for injecting the Matomo tracker in the application.\n * This service shall no longer be used directly within an application.\n */\n@Injectable()\nexport class MatomoInjector {\n  /**\n   * Creates an instance of MatomoInjector.\n   *\n   * @param configuration Matomo configuration provided by DI.\n   */\n  constructor(@Inject(MATOMO_CONFIGURATION) private readonly configuration: MatomoConfiguration) {\n    try {\n      window['_paq'] = window['_paq'] || (!!this.configuration.scriptUrl ? [] : { push: () => {} });\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Configures and injects the Matomo tracker in the DOM.\n   */\n  init(): void {\n    try {\n      if (this.configuration?.requireConsent === true) {\n        window['_paq'].push(['requireConsent']);\n      } else if (this.configuration?.requireCookieConsent === true) {\n        window['_paq'].push(['requireCookieConsent']);\n      }\n      if (this.configuration?.skipTrackingInitialPageView === false) {\n        window['_paq'].push(['trackPageView']);\n        if (\n          this.configuration?.trackLinks === true &&\n          this.configuration?.routeTracking?.enable === false\n        ) {\n          setTimeout(() => {\n            window['_paq'].push([\n              'enableLinkTracking',\n              this.configuration?.trackLinkValue ?? false,\n            ]);\n          }, 0);\n        }\n      }\n      if (this.configuration.trackers?.length) {\n        const [mainTracker, ...otherTrackers] = this.configuration.trackers;\n        window['_paq'].push(['setTrackerUrl', mainTracker.trackerUrl]);\n        window['_paq'].push(['setSiteId', mainTracker.siteId.toString()]);\n        otherTrackers.forEach((tracker) =>\n          window['_paq'].push(['addTracker', tracker.trackerUrl, tracker.siteId.toString()])\n        );\n      }\n      if (!!this.configuration.scriptUrl) {\n        const script = document.createElement('script');\n        script.type = 'text/javascript';\n        script.async = true;\n        script.defer = true;\n        script.src = this.configuration.scriptUrl;\n        const firstScript = document.getElementsByTagName('script')[0];\n        firstScript.parentNode?.insertBefore(script, firstScript);\n      }\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { MATOMO_CONFIGURATION, MatomoConfiguration } from './matomo-configuration';\n\n/**\n * Access to the global window variable.\n */\ndeclare var window: {\n  [key: string]: any;\n  prototype: Window;\n  new (): Window;\n};\n// declare interface Window {\n//   _paq: any;\n// }\n\n/**\n * Matomo scope\n */\ntype MatomoScope = 'page' | 'visit' | 'event';\n\n/**\n * Wrapper for functions available in the Matomo Javascript tracker.\n *\n * @export\n */\n@Injectable()\nexport class MatomoTracker {\n  /**\n   * Creates an instance of MatomoTracker.\n   *\n   * @param configuration Matomo configuration provided by DI.\n   */\n  constructor(@Inject(MATOMO_CONFIGURATION) private readonly configuration: MatomoConfiguration) {\n    try {\n      if (typeof window['_paq'] === 'undefined') {\n        console.warn('Matomo has not yet been initialized!');\n      }\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Logs a visit to this page.\n   *\n   * @param [customTitle] Optional title of the visited page.\n   */\n  trackPageView(customTitle?: string): void {\n    try {\n      const args: any[] = [];\n      if (!!customTitle) {\n        args.push(customTitle);\n      }\n      window['_paq'].push(['trackPageView', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Logs an event with an event category (Videos, Music, Games…), an event action (Play, Pause, Duration,\n   * Add Playlist, Downloaded, Clicked…), and an optional event name and optional numeric value.\n   *\n   * @param category Category of the event.\n   * @param action Action of the event.\n   * @param [name] Optional name of the event.\n   * @param [value] Optional value for the event.\n   */\n  trackEvent(category: string, action: string, name?: string, value?: number): void {\n    try {\n      const args: any[] = [category, action];\n      if (!!name) {\n        args.push(name);\n        if (typeof value === 'number') {\n          args.push(value);\n        }\n      }\n      window['_paq'].push(['trackEvent', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Logs an internal site search for a specific keyword, in an optional category,\n   * specifying the optional count of search results in the page.\n   *\n   * @param keyword Keywords of the search query.\n   * @param [category] Optional category of the search query.\n   * @param [resultsCount] Optional number of results returned by the search query.\n   */\n  trackSiteSearch(keyword: string, category?: string, resultsCount?: number): void {\n    try {\n      const args: any[] = [keyword];\n      if (!!category) {\n        args.push(category);\n        if (typeof resultsCount === 'number') {\n          args.push(resultsCount);\n        }\n      }\n      window['_paq'].push(['trackSiteSearch', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Manually logs a conversion for the numeric goal ID, with an optional numeric custom revenue customRevenue.\n   *\n   * @param idGoal numeric ID of the goal to log a conversion for.\n   * @param [customRevenue] Optional custom revenue to log for the goal.\n   */\n  trackGoal(idGoal: number, customRevenue?: number): void {\n    try {\n      const args: any[] = [idGoal];\n      if (typeof customRevenue === 'number') {\n        args.push(customRevenue);\n      }\n      window['_paq'].push(['trackGoal', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Manually logs a click from your own code.\n   *\n   * @param url Full URL which is to be tracked as a click.\n   * @param linkType Either 'link' for an outlink or 'download' for a download.\n   */\n  trackLink(url: string, linkType: 'link' | 'download'): void {\n    try {\n      window['_paq'].push(['trackLink', url, linkType]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Scans the entire DOM for all content blocks and tracks all impressions once the DOM ready event has been triggered.\n   *\n   * @see {@link https://developer.matomo.org/guides/content-tracking|Content Tracking}\n   */\n  trackAllContentImpressions(): void {\n    try {\n      window['_paq'].push(['trackAllContentImpressions']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Scans the entire DOM for all content blocks as soon as the page is loaded.<br />\n   * It tracks an impression only if a content block is actually visible.\n   *\n   * @param checkOnScroll If true, checks for new content blocks while scrolling the page.\n   * @param timeInterval Duration, in milliseconds, between two checks upon scroll.\n   * @see {@link https://developer.matomo.org/guides/content-tracking|Content Tracking}\n   */\n  trackVisibleContentImpressions(checkOnScroll: boolean, timeInterval: number): void {\n    try {\n      window['_paq'].push(['trackVisibleContentImpressions', checkOnScroll, timeInterval]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Scans the given DOM node and its children for content blocks and tracks an impression for them\n   * if no impression was already tracked for it.\n   *\n   * @param node DOM node in which to look for content blocks which have not been previously tracked.\n   * @see {@link https://developer.matomo.org/guides/content-tracking|Content Tracking}\n   */\n  trackContentImpressionsWithinNode(node: Node): void {\n    try {\n      window['_paq'].push(['trackContentImpressionsWithinNode', node]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Tracks an interaction with the given DOM node/content block.\n   *\n   * @param node DOM node for which to track a content interaction.\n   * @param contentInteraction Name of the content interaction.\n   * @see {@link https://developer.matomo.org/guides/content-tracking|Content Tracking}\n   */\n  trackContentInteractionNode(node: Node, contentInteraction: string): void {\n    try {\n      window['_paq'].push(['trackContentInteractionNode', node, contentInteraction]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Tracks a content impression using the specified values.\n   *\n   * @param contentName Content name.\n   * @param contentPiece Content piece.\n   * @param contentTarget Content target.\n   * @see {@link https://developer.matomo.org/guides/content-tracking|Content Tracking}\n   */\n  trackContentImpression(contentName: string, contentPiece: string, contentTarget: string): void {\n    try {\n      window['_paq'].push(['trackContentImpression', contentName, contentPiece, contentTarget]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Tracks a content interaction using the specified values.\n   *\n   * @param contentInteraction Content interaction.\n   * @param contentName Content name.\n   * @param contentPiece Content piece.\n   * @param contentTarget Content target.\n   * @see {@link https://developer.matomo.org/guides/content-tracking|Content Tracking}\n   */\n  trackContentInteraction(\n    contentInteraction: string,\n    contentName: string,\n    contentPiece: string,\n    contentTarget: string\n  ): void {\n    try {\n      window['_paq'].push([\n        'trackContentInteraction',\n        contentInteraction,\n        contentName,\n        contentPiece,\n        contentTarget,\n      ]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Logs all found content blocks within a page to the console.<br />\n   * This is useful to debug / test content tracking.\n   */\n  logAllContentBlocksOnPage(): void {\n    try {\n      window['_paq'].push(['logAllContentBlocksOnPage']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sends a ping request.<br />\n   * Ping requests do not track new actions.\n   * If they are sent within the standard visit length, they will extend the existing visit and the current last action for the visit.\n   * If sent after the standard visit length, ping requests will create a new visit using the last action in the last known visit.<br />\n   * See also enableHeartBeatTimer.\n   */\n  ping(): void {\n    try {\n      window['_paq'].push(['ping']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Installs a Heart beat timer that will regularly send requests to Matomo in order to better measure the time spent on the page.<br />\n   * These requests will be sent only when the user is actively viewing the page (when the tab is active and in focus).<br />\n   * These requests will not track additional actions or page views.<br />\n   * By default, the delay is set to 15 seconds.\n   *\n   * @param delay Delay, in seconds, between two heart beats to the server.\n   */\n  enableHeartBeatTimer(delay: number): void {\n    try {\n      window['_paq'].push(['enableHeartBeatTimer', delay]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Installs link tracking on all applicable link elements.\n   *\n   * @param [enable=false] Set to true to use pseudo click-handler (treat middle click and open contextmenu as\n   * left click).<br />\n   * A right click (or any click that opens the context menu) on a link will be tracked as clicked even if \"Open in new tab\"\n   * is not selected.<br />\n   * If false (default), nothing will be tracked on open context menu or middle click.\n   */\n  enableLinkTracking(enable: boolean = false): void {\n    try {\n      window['_paq'].push(['enableLinkTracking', enable]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Enables cross domain linking. By default, the visitor ID that identifies a unique visitor is stored in the browser's\n   * first party cookies.<br />\n   * This means the cookie can only be accessed by pages on the same domain.<br />\n   * If you own multiple domains and would like to track all the actions and pageviews of a specific visitor into the same visit,\n   * you may enable cross domain linking.<br />\n   * Whenever a user clicks on a link it will append a URL parameter pk_vid to the clicked URL which forwards the current\n   * visitor ID value to the page of the different domain.\n   *\n   * @see {@link https://matomo.org/faq/how-to/faq_23654/|Cross Domain Linking}\n   */\n  enableCrossDomainLinking(): void {\n    try {\n      window['_paq'].push(['enableCrossDomainLinking']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the cross domain linking timeout.<br />\n   * By default, the two visits across domains will be linked together when the link is clicked and the page is loaded within\n   * a 180 seconds timeout window.\n   *\n   * @param timeout Timeout, in seconds, between two actions across two domains before creating a new visit.\n   * @see {@link https://matomo.org/faq/how-to/faq_23654/|Cross Domain Linking}\n   */\n  setCrossDomainLinkingTimeout(timeout: number): void {\n    try {\n      window['_paq'].push(['setCrossDomainLinkingTimeout', timeout]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Returns the query parameter to append to links to handle cross domain linking.<br />\n   * Use this to add cross domain support for links that are added to the DOM dynamically.\n   *\n   * @returns Promise for the `pk_vid` query parameter.\n   * @see {@link https://matomo.org/faq/how-to/faq_23654/|Cross Domain Linking}\n   */\n  getCrossDomainLinkingUrlParameter(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getCrossDomainLinkingUrlParameter());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Overrides document.title\n   *\n   * @param title Title of the document.\n   */\n  setDocumentTitle(title: string): void {\n    try {\n      window['_paq'].push(['setDocumentTitle', title]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets array of hostnames or domains to be treated as local.<br />\n   * For wildcard subdomains, you can use: `setDomains('.example.com')`; or `setDomains('*.example.com');`.<br />\n   * You can also specify a path along a domain: `setDomains('*.example.com/subsite1');`.\n   *\n   * @param domains List of hostnames or domains, with or without path, to be treated as local.\n   * @see {@link https://matomo.org/faq/how-to/faq_23654/|Cross Domain Linking}\n   */\n  setDomains(domains: string[]): void {\n    try {\n      window['_paq'].push(['setDomains', domains]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Override the page's reported URL.\n   *\n   * @param url URL to be reported for the page.\n   */\n  setCustomUrl(url: string): void {\n    try {\n      window['_paq'].push(['setCustomUrl', url]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Overrides the detected Http-Referer.\n   *\n   * @param url URL to be reported for the referer.\n   */\n  setReferrerUrl(url: string): void {\n    try {\n      window['_paq'].push(['setReferrerUrl', url]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Specifies the website ID.<br />\n   * Redundant: can be specified in getTracker() constructor.\n   *\n   * // TODO Investigate if setSiteId needs to be removed from MatomoTracker.\n   * @param siteId Site ID for the tracker.\n   */\n  setSiteId(siteId: number): void {\n    try {\n      window['_paq'].push(['setSiteId', siteId]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Specifies the Matomo HTTP API URL endpoint.<br />\n   * Points to the root directory of Matomo, e.g. http://matomo.example.org/ or https://example.org/matomo/.<br />\n   * This function is only useful when the 'Overlay' report is not working.<br />\n   * By default, you do not need to use this function.\n   *\n   * @param url URL for Matomo HTTP API endpoint.\n   */\n  setApiUrl(url: string): void {\n    try {\n      window['_paq'].push(['setApiUrl', url]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Specifies the Matomo server URL.<br />\n   * Redundant: can be specified in getTracker() constructor.\n   *\n   * // TODO Investigate if setTrackerUrl needs to be removed from MatomoTracker.\n   * @param url URL for the Matomo server.\n   */\n  setTrackerUrl(url: string): void {\n    try {\n      window['_paq'].push(['setTrackerUrl', url]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Returns the Matomo server URL.\n   *\n   * @returns Promise for the Matomo server URL.\n   */\n  getMatomoUrl(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getPiwikUrl());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the current url of the page that is currently being visited.<br />\n   * If a custom URL was set before calling this method, the custom URL will be returned.\n   *\n   * @returns Promise for the URL of the current page.\n   */\n  getCurrentUrl(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getCurrentUrl());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Sets classes to be treated as downloads (in addition to piwik_download).\n   *\n   * @param classes Class, or list of classes to be treated as downloads.\n   */\n  setDownloadClasses(classes: string | string[]): void {\n    try {\n      window['_paq'].push(['setDownloadClasses', classes]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets file extensions to be recognized as downloads.<br />\n   * Example: `'docx'` or `['docx', 'xlsx']`.\n   *\n   * @param extensions Extension, or list of extensions to be recognized as downloads.\n   */\n  setDownloadExtensions(extensions: string | string[]): void {\n    try {\n      window['_paq'].push(['setDownloadClasses', extensions]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets additional file extensions to be recognized as downloads.<br />\n   * Example: `'docx'` or `['docx', 'xlsx']`.\n   *\n   * @param extensions Extension, or list of extensions to be recognized as downloads.\n   */\n  addDownloadExtensions(extensions: string | string[]): void {\n    try {\n      window['_paq'].push(['setDownloadClasses', extensions]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Specifies file extensions to be removed from the list of download file extensions.<br />\n   * Example: `'docx'` or `['docx', 'xlsx']`.\n   *\n   * @param extensions Extension, or list of extensions not to be recognized as downloads.\n   */\n  removeDownloadExtensions(extensions: string | string[]): void {\n    try {\n      window['_paq'].push(['setDownloadClasses', extensions]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets classes to be ignored if present in link (in addition to piwik_ignore).\n   *\n   * @param classes Class, or list of classes to be ignored if present in link.\n   */\n  setIgnoreClasses(classes: string | string[]): void {\n    try {\n      window['_paq'].push(['setDownloadClasses', classes]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets classes to be treated as outlinks (in addition to piwik_link).\n   *\n   * @param classes Class, or list of classes to be treated as outlinks.\n   */\n  setLinkClasses(classes: string | string[]): void {\n    try {\n      window['_paq'].push(['setDownloadClasses', classes]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets delay for link tracking (in milliseconds).\n   *\n   * @param delay Delay, in milliseconds, for link tracking.\n   */\n  setLinkTrackingTimer(delay: number): void {\n    try {\n      window['_paq'].push(['setLinkTrackingTimer', delay]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Returns delay for link tracking.\n   *\n   * @returns Promise for the delay in milliseconds.\n   */\n  getLinkTrackingTimer(): Promise<number> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getLinkTrackingTimer());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Sets if or not to record the hash tag (anchor) portion of URLs.\n   *\n   * @param value If true, the hash tag portion of the URLs won't be recorded.\n   */\n  discardHashTag(value: boolean): void {\n    try {\n      window['_paq'].push(['discardHashTag', value]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * By default Matomo uses the browser DOM Timing API to accurately determine the time it takes to generate and download\n   * the page. You may overwrite this value with this function.\n   * This function is deprecated in Matomo 4.x.\n   *\n   * @param generationTime Time, in milliseconds, of the page generation.\n   */\n  setGenerationTimeMs(generationTime: number): void {\n    if (this.configuration.scriptVersion < 4) {\n      try {\n        window['_paq'].push(['setGenerationTimeMs', generationTime]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          throw e;\n        }\n      }\n    }\n  }\n\n  /**\n   * Appends a custom string to the end of the HTTP request to piwik.php.\n   *\n   * @param appendToUrl String to append to the end of the HTTP request to piwik.php/matomo.php.\n   */\n  appendToTrackingUrl(appendToUrl: string): void {\n    try {\n      window['_paq'].push(['appendToTrackingUrl', appendToUrl]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Enables a frame-buster to prevent the tracked web page from being framed/iframed.\n   */\n  killFrame(): void {\n    try {\n      window['_paq'].push(['killFrame']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Forces the browser to load the live URL if the tracked web page is loaded from a local file\n   * (e.g., saved to someone's desktop).\n   *\n   * @param url URL to track instead of file:// URLs.\n   */\n  redirectFile(url: string): void {\n    try {\n      window['_paq'].push(['redirectFile', url]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Records how long the page has been viewed if the minimumVisitLength is attained;\n   * the heartBeatDelay determines how frequently to update the server.\n   *\n   * @param minimumVisitLength Duration before notifying the server for the duration of the visit to a page.\n   * @param heartBeatDelay Delay, in seconds, between two updates to the server.\n   * @see {@link https://developer.matomo.org/guides/tracking-javascript-guide#accurately-measure-the-time-spent-on-each-page}\n   */\n  setHeartBeatTimer(minimumVisitLength: number, heartBeatDelay: number): void {\n    try {\n      window['_paq'].push(['setHeartBeatTimer', minimumVisitLength, heartBeatDelay]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Returns the 16 characters ID for the visitor.\n   *\n   * @returns Promise for the the 16 characters ID for the visitor.\n   */\n  getVisitorId(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getVisitorId());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the visitor cookie contents in an array.\n   *\n   * @returns Promise for the cookie contents in an array.\n   */\n  getVisitorInfo(): Promise<any[]> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getVisitorInfo());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the visitor attribution array (Referer information and/or Campaign name & keyword).<br />\n   * Attribution information is used by Matomo to credit the correct referrer (first or last referrer)\n   * used when a user triggers a goal conversion.\n   *\n   * @returns Promise for the visitor attribution array (Referer information and/or Campaign name & keyword).\n   */\n  getAttributionInfo(): Promise<any[]> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getAttributionInfo());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the attribution campaign name.\n   *\n   * @returns Promise for the the attribution campaign name.\n   */\n  getAttributionCampaignName(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getAttributionCampaignName());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the attribution campaign keyword.\n   *\n   * @returns Promise for the attribution campaign keyword.\n   */\n  getAttributionCampaignKeyword(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getAttributionCampaignKeyword());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the attribution referrer timestamp.\n   *\n   * @returns Promise for the attribution referrer timestamp (as string).\n   */\n  getAttributionReferrerTimestamp(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getAttributionReferrerTimestamp());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the attribution referrer URL.\n   *\n   * @returns Promise for the attribution referrer URL\n   */\n  getAttributionReferrerUrl(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getAttributionReferrerUrl());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Returns the User ID string if it was set.\n   *\n   * @returns Promise for the User ID for the visitor.\n   * @see {@link https://matomo.org/docs/user-id/|Matomo User ID}\n   */\n  getUserId(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getUserId());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Sets a User ID to this user (such as an email address or a username).\n   *\n   * @param userId User ID to set for the current visitor.\n   * @see {@link https://matomo.org/docs/user-id/|Matomo User ID}\n   */\n  setUserId(userId: string): void {\n    try {\n      window['_paq'].push(['setUserId', userId]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Resets the User ID which also generates a new Visitor ID.\n   *\n   * @see {@link https://matomo.org/docs/user-id/|Matomo User ID}\n   */\n  resetUserId(): void {\n    try {\n      window['_paq'].push(['resetUserId']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets a custom variable.\n   *\n   * @param index Index, the number from 1 to 5 where this custom variable name is stored for the current page view.\n   * @param name Name, the name of the variable, for example: Category, Sub-category, UserType.\n   * @param value Value, for example: \"Sports\", \"News\", \"World\", \"Business\"…\n   * @param scope Scope of the custom variable:<br />\n   * - 'page' means the custom variable applies to the current page view.\n   * - 'visit' means the custom variable applies to the current visitor.\n   * - 'event' means the custom variable applies to the current event.\n   * @see {@link https://matomo.org/docs/custom-variables/|Custom Variables}\n   */\n  setCustomVariable(index: number, name: string, value: string, scope: MatomoScope): void {\n    try {\n      window['_paq'].push(['setCustomVariable', index, name, value, scope]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Deletes a custom variable.\n   *\n   * @param index Index of the custom variable to delete.\n   * @param scope Scope of the custom variable to delete.\n   * @see {@link https://matomo.org/docs/custom-variables/|Custom Variables}\n   */\n  deleteCustomVariable(index: number, scope: MatomoScope): void {\n    try {\n      window['_paq'].push(['deleteCustomVariable', index, scope]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Deletes all custom variables.\n   *\n   * @param scope Scope of the custom variables to delete.\n   * @see {@link https://matomo.org/docs/custom-variables/|Custom Variables}\n   */\n  deleteCustomVariables(scope: MatomoScope): void {\n    try {\n      window['_paq'].push(['deleteCustomVariables', scope]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Retrieves a custom variable.\n   *\n   * @param index Index of the custom variable to retrieve.\n   * @param scope Scope of the custom variable to retrieve.\n   * @returns Promise for the value of custom variable.\n   * @see {@link https://matomo.org/docs/custom-variables/|Custom Variables}\n   */\n  getCustomVariable(index: number, scope: MatomoScope): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getCustomVariable(index, scope));\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * When called then the Custom Variables of scope 'visit' will be stored (persisted) in a first party cookie\n   * for the duration of the visit.<br />\n   * This is useful if you want to call getCustomVariable later in the visit.<br />\n   * (by default custom variables are not stored on the visitor's computer.)\n   *\n   * @see {@link https://matomo.org/docs/custom-variables/|Custom Variables}\n   */\n  storeCustomVariablesInCookie(): void {\n    try {\n      window['_paq'].push(['storeCustomVariablesInCookie']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets a custom dimension.<br />\n   * (requires Matomo 2.15.1 + Custom Dimensions plugin)\n   *\n   * @param customDimensionId ID of the custom dimension to set.\n   * @param customDimensionValue Value to be set.\n   * @see {@link https://plugins.piwik.org/CustomDimensions|Custom Dimensions}\n   */\n  setCustomDimension(customDimensionId: number, customDimensionValue: string): void {\n    try {\n      window['_paq'].push(['setCustomDimension', customDimensionId, customDimensionValue]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Deletes a custom dimension.<br />\n   * (requires Matomo 2.15.1 + Custom Dimensions plugin)\n   *\n   * @param customDimensionId ID of the custom dimension to delete.\n   * @see {@link https://plugins.piwik.org/CustomDimensions|Custom Dimensions}\n   */\n  deleteCustomDimension(customDimensionId: number): void {\n    try {\n      window['_paq'].push(['deleteCustomDimension', customDimensionId]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Retrieve a custom dimension.<br />\n   * (requires Matomo 2.15.1 + Custom Dimensions plugin)\n   *\n   * @param customDimensionId ID of the custom dimension to retrieve.\n   * @returns Promise for the value for the requested custom dimension.\n   * @see {@link https://plugins.piwik.org/CustomDimensions|Custom Dimensions}\n   */\n  getCustomDimension(customDimensionId: number): Promise<string> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getCustomDimension(customDimensionId));\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Sets campaign name parameter(s).\n   *\n   * @param name Name of the campaign\n   * @see {@link https://matomo.org/docs/tracking-campaigns/|Campaigns}\n   */\n  setCampaignNameKey(name: string): void {\n    try {\n      window['_paq'].push(['setCampaignNameKey', name]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets campaign keyword parameter(s).\n   *\n   * @param keyword Keyword parameter(s) of the campaign.\n   * @see {@link https://matomo.org/docs/tracking-campaigns/|Campaigns}\n   */\n  setCampaignKeywordKey(keyword: string): void {\n    try {\n      window['_paq'].push(['setCampaignKeywordKey', keyword]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets if or not to attribute a conversion to the first referrer.<br />\n   * By default, conversion is attributed to the most recent referrer.\n   *\n   * @param conversionToFirstReferrer If true, Matomo will attribute the Goal conversion to the first referrer used\n   * instead of the last one.\n   * @see {@link https://matomo.org/docs/tracking-campaigns/|Campaigns}\n   * @see {@link https://matomo.org/faq/general/faq_106/#faq_106|Conversions to the first referrer}\n   */\n  setConversionAttributionFirstReferrer(conversionToFirstReferrer: boolean): void {\n    try {\n      window['_paq'].push(['setConversionAttributionFirstReferrer', conversionToFirstReferrer]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the current page view as a product or category page view.<br />\n   * When you call setEcommerceView, it must be followed by a call to trackPageView to record the product or category page view.\n   *\n   * @param productSKU SKU of the viewed product.\n   * @param productName Name of the viewed product.\n   * @param productCategory Category of the viewed product.\n   * @param price Price of the viewed product.\n   */\n  setEcommerceView(\n    productSKU: string,\n    productName: string,\n    productCategory: string,\n    price: number\n  ): void {\n    try {\n      window['_paq'].push(['setEcommerceView', productSKU, productName, productCategory, price]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Adds a product into the eCommerce order.<br />\n   * Must be called for each product in the order.\n   *\n   * @param productSKU SKU of the product to add.\n   * @param [productName] Optional name of the product to add.\n   * @param [productCategory] Optional category of the product to add.\n   * @param [price] Optional price of the product to add.\n   * @param [quantity] Optional quantity of the product to add.\n   */\n  addEcommerceItem(\n    productSKU: string,\n    productName?: string,\n    productCategory?: string,\n    price?: number,\n    quantity?: number\n  ): void {\n    try {\n      const args: any[] = [productSKU];\n      if (!!productName) {\n        args.push(productName);\n        if (!!productCategory) {\n          args.push(productCategory);\n          if (typeof price === 'number') {\n            args.push(price);\n            if (typeof quantity === 'number') {\n              args.push(quantity);\n            }\n          }\n        }\n      }\n      window['_paq'].push(['addEcommerceItem', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Removes the specified product from the untracked ecommerce order.\n   *\n   * @param productSKU SKU of the product to remove.\n   */\n  removeEcommerceItem(productSKU: string): void {\n    try {\n      const args: any[] = [productSKU];\n      window['_paq'].push(['removeEcommerceItem', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Removes all products in the untracked ecommerce order.<br />\n   * Note: this is done automatically after trackEcommerceOrder() is called.\n   */\n  clearEcommerceCart(): void {\n    try {\n      window['_paq'].push(['clearEcommerceCart']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Returns all ecommerce items currently in the untracked ecommerce order.\n   * The returned array will be a copy, so changing it won't affect the ecommerce order.<br />\n   * To affect what gets tracked, use the addEcommerceItem()/removeEcommerceItem()/clearEcommerceCart() methods.<br />\n   * Use this method to see what will be tracked before you track an order or cart update.\n   */\n  getEcommerceItems(): Promise<\n    Array<{\n      productSKU: string;\n      productName?: string;\n      productCategory?: string;\n      price?: number;\n      quantity?: number;\n    }>\n  > {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.getEcommerceItems());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Tracks a shopping cart.<br />\n   * Call this function every time a user is adding, updating or deleting a product from the cart.\n   *\n   * @param grandTotal Grand total of the shopping cart.\n   */\n  trackEcommerceCartUpdate(grandTotal: number): void {\n    try {\n      window['_paq'].push(['trackEcommerceCartUpdate', grandTotal]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Tracks an Ecommerce order, including any eCommerce item previously added to the order.<br />\n   * orderId and grandTotal (ie.revenue) are required parameters.\n   *\n   * @param orderId ID of the tracked order.\n   * @param grandTotal Grand total of the tracked order.\n   * @param [subTotal] Sub total of the tracked order.\n   * @param [tax] Taxes for the tracked order.\n   * @param [shipping] Shipping fees for the tracked order.\n   * @param [discount] Discount granted for the tracked order.\n   */\n  trackEcommerceOrder(\n    orderId: string,\n    grandTotal: number,\n    subTotal?: number,\n    tax?: number,\n    shipping?: number,\n    discount?: number | boolean\n  ): void {\n    try {\n      const args: any[] = [orderId, grandTotal];\n      if (typeof subTotal === 'number') {\n        args.push(subTotal);\n        if (typeof tax === 'number') {\n          args.push(tax);\n          if (typeof shipping === 'number') {\n            args.push(shipping);\n            if (typeof discount === 'number' || typeof discount === 'boolean') {\n              args.push(discount);\n            }\n          }\n        }\n      }\n      window['_paq'].push(['trackEcommerceOrder', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * By default the Matomo tracker assumes consent to tracking.\n   * To change this behavior so nothing is tracked until a user consents, you must call requireConsent.\n   */\n  requireConsent(): void {\n    try {\n      window['_paq'].push(['requireConsent']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Require user cookie consent before storing and using any cookies.\n   */\n  requireCookieConsent(): void {\n    try {\n      window['_paq'].push(['requireCookieConsent']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Marks that the current user has consented.<br />\n   * The consent is one-time only, so in a subsequent browser session, the user will have to consent again.<br />\n   * To remember consent, see the method below: rememberConsentGiven.\n   */\n  setConsentGiven(): void {\n    try {\n      window['_paq'].push(['setConsentGiven']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Marks that the current user has consented to store and use cookies.<br />\n   * The consent is one-time only, so in a subsequent browser session, the user will have to consent again.<br />\n   * To remember consent, see the method below: rememberCookieConsentGiven.\n   */\n  setCookieConsentGiven(): void {\n    try {\n      window['_paq'].push(['setCookieConsentGiven']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Marks that the current user has consented, and remembers this consent through a browser cookie.<br />\n   * The next time the user visits the site, Matomo will remember that they consented, and track them.<br />\n   * If you call this method, you do not need to call setConsentGiven.\n   *\n   * @param hoursToExpire Expiry period for your user consent.\n   */\n  rememberConsentGiven(hoursToExpire?: number): void {\n    try {\n      const args: number[] = [];\n      if (typeof hoursToExpire === 'number') {\n        args.push(hoursToExpire);\n      }\n      window['_paq'].push(['rememberConsentGiven', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Marks that the current user has consented, and remembers this consent through a browser cookie.<br />\n   * The next time the user visits the site, Matomo will remember that they consented, and track them.<br />\n   * If you call this method, you do not need to call setCookieConsentGiven.\n   *\n   * @param hoursToExpire Expiry period for your user consent.\n   */\n  rememberCookieConsentGiven(hoursToExpire?: number): void {\n    try {\n      const args: number[] = [];\n      if (typeof hoursToExpire === 'number') {\n        args.push(hoursToExpire);\n      }\n      window['_paq'].push(['rememberCookieConsentGiven', ...args]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Removes a user's consent, both if the consent was one-time only and if the consent was remembered.<br />\n   * This makes sure the cookie that remembered the given consent is deleted.<br />\n   * After calling this method, the user will have to consent again in order to be tracked.\n   */\n  forgetConsentGiven(): void {\n    try {\n      window['_paq'].push(['forgetConsentGiven']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Removes a user's consent, both if the consent was one-time only and if the consent was remembered.<br />\n   * This makes sure the cookie that remembered the given consent is deleted.<br />\n   * After calling this method, the user will have to consent again in order to be tracked.\n   */\n  forgetCookieConsentGiven(): void {\n    try {\n      window['_paq'].push(['forgetCookieConsentGiven']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets if to not to track users who opt out of tracking using Mozilla's (proposed) Do Not Track setting.\n   *\n   * @param doNotTrack If true, users who opted for Do Not Track in their settings won't be tracked.\n   * @see {@link https://www.w3.org/TR/tracking-dnt/}\n   */\n  setDoNotTrack(doNotTrack: boolean): void {\n    try {\n      window['_paq'].push(['setDoNotTrack', doNotTrack]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Disables all first party cookies.<br />\n   * Existing Matomo cookies for this websites will be deleted on the next page view.\n   */\n  disableCookies(): void {\n    try {\n      window['_paq'].push(['disableCookies']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Deletes the tracking cookies currently set (useful when creating new visits).\n   */\n  deleteCookies(): void {\n    try {\n      window['_paq'].push(['deleteCookies']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Returns whether cookies are enabled and supported by this browser.\n   *\n   * @returns Promise for the support and activation of cookies.\n   */\n  hasCookies(): Promise<boolean> {\n    return new Promise((resolve, reject) => {\n      try {\n        window['_paq'].push([\n          function (this: any): void {\n            resolve(this.hasCookies());\n          },\n        ]);\n      } catch (e) {\n        if (!(e instanceof ReferenceError)) {\n          reject(e);\n        }\n      }\n    });\n  }\n\n  /**\n   * Sets the tracking cookie name prefix.<br />\n   * Default prefix is 'pk'.\n   *\n   * @param prefix Prefix for the tracking cookie names.\n   */\n  setCookieNamePrefix(prefix: string): void {\n    try {\n      window['_paq'].push(['setCookieNamePrefix', prefix]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the domain of the tracking cookies.<br />\n   * Default is the document domain.<br />\n   * If your website can be visited at both www.example.com and example.com, you would use: `'.example.com'` or `'*.example.com'`.\n   *\n   * @param domain Domain of the tracking cookies.\n   */\n  setCookieDomain(domain: string): void {\n    try {\n      window['_paq'].push(['setCookieDomain', domain]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the path of the tracking cookies.<br />\n   * Default is '/'.\n   *\n   * @param path Path of the tracking cookies.\n   */\n  setCookiePath(path: string): void {\n    try {\n      window['_paq'].push(['setCookiePath', path]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets if or not to enable the Secure cookie flag on all first party cookies.<br />\n   * This should be used when your website is only available under HTTPS so that all tracking cookies are always sent\n   * over secure connection.\n   *\n   * @param secure If true, the secure cookie flag will be set on all first party cookies.\n   */\n  setSecureCookie(secure: boolean): void {\n    try {\n      window['_paq'].push(['setSecureCookie', secure]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the visitor cookie timeout.<br />\n   * Default is 13 months.\n   *\n   * @param timeout Timeout, in seconds, for the visitor cookie timeout.\n   */\n  setVisitorCookieTimeout(timeout: number): void {\n    try {\n      window['_paq'].push(['setVisitorCookieTimeout', timeout]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the referral cookie timeout.<br />\n   * Default is 6 months.\n   *\n   * @param timeout Timeout, in seconds, for the referral cookie timeout.\n   */\n  setReferralCookieTimeout(timeout: number): void {\n    try {\n      window['_paq'].push(['setReferralCookieTimeout', timeout]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the session cookie timeout.<br />\n   * Default is 30 minutes.\n   *\n   * @param timeout Timeout, in seconds, for the session cookie timeout.\n   */\n  setSessionCookieTimeout(timeout: number): void {\n    try {\n      window['_paq'].push(['setSessionCookieTimeout', timeout]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Adds a click listener to a specific link element.<br />\n   * When clicked, Matomo will log the click automatically.\n   *\n   * @param element Element on which to add a click listener.\n   */\n  addListener(element: Element): void {\n    try {\n      window['_paq'].push(['addListener', element]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets the request method to either 'GET' or 'POST'. (The default is 'GET'.)<br />\n   * To use the POST request method, either:<br />\n   * 1) the Matomo host is the same as the tracked website host (Matomo installed in the same domain as your tracked website), or<br />\n   * 2) if Matomo is not installed on the same host as your website, you need to enable CORS (Cross domain requests).\n   *\n   * @param method HTTP method for sending information to the Matomo server.\n   */\n  setRequestMethod(method: 'GET' | 'POST'): void {\n    try {\n      window['_paq'].push(['setRequestMethod', method]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets a function that will process the request content.<br />\n   * The function will be called once the request (query parameters string) has been prepared, and before the request content is sent.\n   *\n   * @param callback Function that will process the request content.\n   */\n  setCustomRequestProcessing(callback: (queryParameters: string) => void): void {\n    try {\n      window['_paq'].push(['setCustomRequestProcessing', callback]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Sets request Content-Type header value.<br />\n   * Applicable when 'POST' request method is used via setRequestMethod.\n   *\n   * @param contentType Value for Content-Type HTTP header.\n   */\n  setRequestContentType(contentType: string): void {\n    try {\n      window['_paq'].push(['setRequestContentType', contentType]);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n\n  /**\n   * Disables the feature which groups together multiple tracking requests and send them as a bulk POST request.<br />\n   * Disabling this feature is useful when you want to be able to replay all logs: one must use disableQueueRequest\n   * to disable this behavior to later be able to replay logged Matomo logs (otherwise a subset of the requests\n   * wouldn't be able to be replayed).\n   */\n  disableQueueRequest(): void {\n    try {\n      window['_paq'].push(['disableQueueRequest']);\n    } catch (e) {\n      if (!(e instanceof ReferenceError)) {\n        throw e;\n      }\n    }\n  }\n}\n","/**\n * Type guard for checking if a value or object is non null.\n *\n * @export\n */\nexport function isNonNull<T>(value: T | undefined | null): value is NonNullable<T> {\n  return value != null;\n}\n\n/**\n * Type guard for checking if a value or object is defined.\n *\n * @export\n */\nexport function isDefined<T>(value: T | undefined | null): value is NonNullable<T> {\n  return <T>value !== undefined && <T>value !== null;\n}\n\n/**\n * Checks if a value or object is non null or undefined, throws an error otherwise.\n *\n * @export\n */\nexport function requireNonNull<T>(value: T | null | undefined, message: string): T {\n  if (value === null || value === undefined) {\n    throw new Error('Unexpected ' + value + ' value: ' + message);\n  }\n\n  return value;\n}\n","import { Injectable, Inject, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, NavigationStart, Router } from '@angular/router';\n\nimport { Subscription } from 'rxjs';\nimport { filter, map, pairwise } from 'rxjs/operators';\n\nimport { isNonNull } from '../helpers';\nimport { MatomoConfiguration, MATOMO_CONFIGURATION } from './matomo-configuration';\nimport { MatomoTracker } from './matomo-tracker.service';\n\n/**\n * Service for tracking route changes.\n *\n * @export\n */\n@Injectable()\nexport class MatomoRouteTracker implements OnDestroy {\n  /**\n   * Previous route url of matomo route tracker.\n   */\n  private previousPageUrl?: string;\n  /**\n   * Subscription for managing route events.\n   */\n  private subscription?: Subscription;\n\n  /**\n   * Creates an instance of MatomoRouteTracker.\n   *\n   * @param configuration Matomo configuration provided by DI.\n   * @param matomoTracker Instance of MatomoTracker provided by DI.\n   * @param router Instance of Router provided by DI.\n   * @param activatedRoute Instance of ActivatedRoute provided by DI.\n   */\n  constructor(\n    @Inject(MATOMO_CONFIGURATION) private readonly configuration: MatomoConfiguration,\n    private readonly matomoTracker: MatomoTracker,\n    private readonly router: Router,\n    private readonly activatedRoute: ActivatedRoute\n  ) {}\n\n  /**\n   * Starts tracking route changes.\n   * Matomo DocumentTitle will be set with `data.matomoTitle` of your routes.\n   *\n   * This service shall not be used directly within an application.\n   */\n  startTracking(): void {\n    this.subscription = this.router.events\n      .pipe(\n        filter((event) => event instanceof NavigationStart || event instanceof NavigationEnd),\n        map((event) => ({ timestamp: new Date().getTime(), event })),\n        pairwise(),\n        filter(([a, b]) => a.event instanceof NavigationStart && b.event instanceof NavigationEnd)\n      )\n      .subscribe({\n        next: ([start, end]) => {\n          let currentRoute = this.activatedRoute.root;\n          while (currentRoute.firstChild) {\n            currentRoute = currentRoute.firstChild;\n          }\n          // Set referrer if it exists\n          if (this.previousPageUrl) {\n            this.matomoTracker.setReferrerUrl(this.previousPageUrl);\n          }\n          // Track current page\n          if (!!currentRoute.snapshot.data['matomoTitle'] || !!currentRoute.snapshot.title) {\n            this.matomoTracker.setDocumentTitle(\n              currentRoute.snapshot.data['matomoTitle'] ?? currentRoute.snapshot.title\n            );\n          }\n          this.matomoTracker.setCustomUrl(window.location.href);\n          // Remove all previously assigned custom variables\n          // (requires Matomo (formerly Piwik) 3.0.2+)\n          this.matomoTracker.deleteCustomVariables('page');\n          this.matomoTracker.setGenerationTimeMs(end.timestamp - start.timestamp);\n          this.matomoTracker.trackPageView();\n          // Set previous route URL\n          this.previousPageUrl = window.location.href;\n\n          // Make Matomo aware of newly added content\n          this.configuration?.routeTracking?.contentIds\n            ?.map(document.getElementById)\n            ?.filter(isNonNull)\n            ?.forEach((content) => {\n              // TODO To be implemented when Media Analytics will be supported.\n              // this.matomoTracker.scanForMedia(content);\n              // TODO To be implemented when Form Analytics will be supported.\n              // this.matomoTracker.scanForForms(content);\n              this.matomoTracker.trackContentImpressionsWithinNode(content);\n            });\n\n          if (this.configuration.trackLinks === true) {\n            this.matomoTracker.enableLinkTracking(this.configuration.trackLinkValue);\n          }\n        },\n      });\n  }\n\n  /**\n   * Stops tracking route changes.\n   */\n  stopTracking(): void {\n    if (!!this.subscription) {\n      this.subscription.unsubscribe();\n      this.subscription = undefined;\n    }\n  }\n\n  /**\n   * Angular OnDestroy lifecycle hook.\n   */\n  ngOnDestroy(): void {\n    this.stopTracking();\n  }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { MatomoTracker } from './matomo-tracker.service';\nimport { requireNonNull } from '../helpers';\n\n@Directive({\n  selector: '[matomoClickCategory][matomoClickAction]',\n})\nexport class MatomoTrackClickDirective {\n  @Input() matomoClickCategory?: string;\n  @Input() matomoClickAction?: string;\n  @Input() matomoClickName?: string;\n  @Input() matomoClickValue?: number;\n\n  constructor(private readonly tracker: MatomoTracker) {}\n\n  @HostListener('click')\n  onClick(): void {\n    this.tracker.trackEvent(\n      requireNonNull(this.matomoClickCategory, 'matomo category is required'),\n      requireNonNull(this.matomoClickAction, 'matomo action is required'),\n      this.matomoClickName,\n      this.matomoClickValue\n    );\n  }\n}\n","import { NgModule, ModuleWithProviders, Inject, PLATFORM_ID, Injector } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { MatomoConfiguration, MATOMO_CONFIGURATION } from './matomo-configuration';\nimport { MatomoInjector } from './matomo-injector.service';\nimport { MatomoTracker } from './matomo-tracker.service';\nimport { MatomoRouteTracker } from './matomo-route-tracker.service';\nimport { MatomoTrackClickDirective } from './matomo-track-click.directive';\n\n/**\n * Angular module encapsulating Matomo features.\n */\n@NgModule({\n  declarations: [MatomoTrackClickDirective],\n  imports: [],\n  exports: [MatomoTrackClickDirective],\n  providers: [MatomoInjector, MatomoTracker, MatomoRouteTracker],\n})\nexport class MatomoModule {\n  /**\n   * Creates an instance of Matomo module.\n   *\n   * @param platformId Angular platform provided by DI.\n   * @param injector Instance of Angular Injector provided by DI.\n   * @param configuration Matomo configuration provided by DI.\n   * @param matomoInjector Instance of MatomoInjector provided by DI.\n   */\n  constructor(\n    @Inject(PLATFORM_ID) private readonly platformId: Object,\n    private readonly injector: Injector,\n    @Inject(MATOMO_CONFIGURATION) private readonly configuration: MatomoConfiguration,\n    private readonly matomoInjector: MatomoInjector\n  ) {\n    // Warn if module is not being loaded by a browser.\n    if (!isPlatformBrowser(this.platformId)) {\n      console.warn('ngx-Matomo does not support server platform');\n    }\n    // Inject the Matomo script and create trackers.\n    this.matomoInjector.init();\n    // Enable route tracking if requested.\n    if (this.configuration?.routeTracking?.enable === true) {\n      // Using Injector instead of DI in order to allow use in routerless apps.\n      this.injector.get(MatomoRouteTracker).startTracking();\n    }\n  }\n\n  /**\n   * Use this method in your root module to provide the MatomoTracker service.\n   */\n  static forRoot(configuration?: Partial<MatomoConfiguration>): ModuleWithProviders<MatomoModule> {\n    return {\n      ngModule: MatomoModule,\n      providers: [\n        {\n          provide: MATOMO_CONFIGURATION,\n          useValue: configuration,\n        },\n        MatomoTracker,\n        MatomoRouteTracker,\n      ],\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-matomo\n */\n\nexport { MatomoConfiguration, MATOMO_CONFIGURATION } from './lib/matomo-configuration';\nexport * from './lib/matomo-injector.service';\nexport * from './lib/matomo-tracker.service';\nexport * from './lib/matomo-route-tracker.service';\nexport * from './lib/matomo-track-click.directive';\nexport * from './lib/matomo.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MatomoTracker","i1.MatomoInjector"],"mappings":"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"}