{"version":3,"sources":["jsdelivr-header.js","/gh/datm-cc/web@main/pixel.js"],"names":[],"mappings":"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","file":"/gh/datm-cc/web@main/pixel.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/datm-cc/web@main/pixel.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function(window) {\r\n\r\n  if (window.datm && window.datm.loaded) {\r\n    return;\r\n  }\r\n\r\n  var tracker = {\r\n    version: '2.1',\r\n    account: null,\r\n    subAccount: null,\r\n    script: true,\r\n    loaded: true,\r\n    config: false,\r\n    initialized: false,\r\n    maxBeaconSize: 14336,\r\n    serverDomain: null,\r\n    serverPath: '/web/v2',\r\n    useCookies: true,\r\n    cookieDomain: null,\r\n    sessionId: null,\r\n    clientId: null,\r\n    gaSessionId: null,\r\n    gaClientId: null,\r\n    sessionDuration: 30, // Duration in mins\r\n    sessionExpiration: null,\r\n    loggingEnabled: false,\r\n    pageStorage: null,\r\n    sessionStorage: null,\r\n    pageEvents: null,\r\n    sessionEvents: null,\r\n    sessionIdCookie: 'datm_sid',\r\n    clientIdCookie: 'datm_cid',\r\n    sessionStorageCookie: 'datm_ss',\r\n    sessionEventsCookie: 'datm_se',\r\n    sessionHandled: null,\r\n    eventIndex: 0,\r\n    trackPageview: false,\r\n    trackNewSession: false,\r\n    commonParams: {},\r\n    queue: [],\r\n\r\n    push: function(data) {\r\n      if (!data) return;\r\n\r\n      var action = typeof data === 'string' ? data : data.action;\r\n      this.sessionHandled = false;\r\n\r\n      // Push request to queue if object not intialized\r\n      if (!this.initialized && action !== 'initialize') {\r\n        this.queue.push(data);\r\n        this.log('Moved request to queue', request);\r\n        return;\r\n      }\r\n\r\n      // Delete action param from data object\r\n      if (data.action) {\r\n        delete data.action;\r\n      }\r\n\r\n      // Initialize\r\n      if (action === 'initialize') {\r\n        this.initialize(data);\r\n        return;\r\n      }\r\n\r\n      // Track\r\n      if (action === 'track') {\r\n        this.track(data);\r\n        return;\r\n      }\r\n\r\n      // Engage\r\n      if (action === 'engage') {\r\n        this.handleSession();\r\n        return;\r\n      }\r\n\r\n      // Set page param\r\n      if (action === 'setPageParam') {\r\n        this.setPageParam(data.name, data.value);\r\n        return;\r\n      }\r\n\r\n      // Set session param\r\n      if (action === 'setSessionParam') {\r\n        this.setSessionParam(data.name, data.value);\r\n        return;\r\n      }\r\n\r\n      this.log('Invalid action:', action);\r\n    },\r\n\r\n    initialize: function(config) {\r\n      this.log('Initializing Datm object');\r\n\r\n      // Set required config parameters\r\n      var domain = this.serverDomain = config.serverDomain || this.serverDomain;\r\n\r\n      if (!domain) {\r\n        this.log(\"Can't initialize.  Domain not provided\");\r\n        return;\r\n      }\r\n\r\n      // Clear common data from prior initializations\r\n      this.commonParams = {};\r\n\r\n      // Set optional config parameters if defined\r\n      this.account = config.account || this.account;\r\n      this.subAccount = config.subAccount || this.subAccount;\r\n      this.sessionDuration = config.sessionDuration || this.sessionDuration;\r\n      this.sessionIdCookie = config.sessionIdCookie || this.sessionIdCookie;\r\n      this.clientIdCookie = config.clientIdCookie || this.clientIdCookie;\r\n      this.sessionStorageCookie = config.sessionStorageCookie || this.sessionStorageCookie;\r\n      this.sessionEventsCookie = config.sessionEventsCookie || this.sessionEventsCookie;\r\n      this.commonParams = config.commonParams || this.commonParams;\r\n      this.trackPageview = config.trackPageview || this.trackPageview;\r\n      this.trackNewSession = config.trackNewSession || this.trackNewSession;\r\n\r\n      this.useCookies = config.useCookies !== undefined ?\r\n        config.useCookies : this.useCookies;\r\n\r\n      this.loggingEnabled = config.loggingEnabled !== undefined ?\r\n        config.loggingEnabled : this.loggingEnabled;\r\n\r\n      // Set cookie params and session info\r\n      if (this.useCookies === true) {\r\n        this.setCookieDomain(config.cookieDomain);\r\n        this.loadCookieData();\r\n        this.gaSessionId = config.gaSessionId || this.gaSessionId;\r\n        this.gaClientId = config.gaClientId || this.gaClientId;\r\n      }\r\n\r\n      // Mark as initialized\r\n      this.initialized = true;\r\n      this.log('Datm successfully initialized', this);\r\n\r\n      // Set up session\r\n      this.handleSession();\r\n\r\n      // Add page view event to queue\r\n      if (this.trackPageview) {\r\n        this.track({event_name: 'page_view'});\r\n      }\r\n\r\n      // Process request queue\r\n      while (this.queue.length > 0) {\r\n        var request = this.queue.shift();\r\n        this.log('Processing queue request', request);\r\n        this.push(request);\r\n      }\r\n    },\r\n\r\n    track: function(payload) {\r\n      if (!this.initialized) {\r\n        this.log('Datm object not initialized');\r\n        return;\r\n      }\r\n\r\n      if (!payload || !payload.event_name) {\r\n        this.log('No event defined');\r\n        return;\r\n      }\r\n      \r\n      // Extend or create new session\r\n      this.handleSession();\r\n\r\n      // Increment event count\r\n      this.eventIndex++;\r\n\r\n      // Set common event params\r\n      this.mergeObjects(payload, this.commonParams);\r\n\r\n      // Set tracker params\r\n      payload.account = this.account;\r\n      payload.sub_account = this.subAccount;\r\n      payload.event_index = this.eventIndex;\r\n\r\n      // Set page params\r\n      payload.page = payload.page || {};\r\n      payload.page.title = payload.page.title || document.title;\r\n\r\n      if (payload.page.url) {\r\n        var pageObj = this.createUrlObj(payload.page.url) || {};\r\n        payload.page.domain = payload.page.domain || pageObj.hostname || document.location.hostname;\r\n        payload.page.path = payload.page.path || pageObj.pathname || document.location.pathname;\r\n        payload.page.search = payload.page.search || pageObj.search || document.location.search;\r\n\r\n      }\r\n      else {\r\n        payload.page.url = document.location.href;\r\n        payload.page.domain = payload.page.domain || document.location.hostname;\r\n        payload.page.path = payload.page.path || document.location.pathname;\r\n        payload.page.search = payload.page.search || document.location.search;\r\n      }\r\n      \r\n      // Set query params\r\n      var searchObj = this.createSearchObj(payload.page.search);\r\n      \r\n      payload.page.params = this.getSearchKeys(searchObj);\r\n\r\n      payload.campaign = payload.campaign || {};\r\n      payload.campaign.medium = payload.campaign.medium || this.getSearchValue(searchObj, 'utm_medium');\r\n      payload.campaign.source = payload.campaign.source || this.getSearchValue(searchObj, 'utm_source');\r\n      payload.campaign.name = payload.campaign.name || this.getSearchValue(searchObj, 'utm_campaign');\r\n      payload.campaign.content = payload.campaign.content || this.getSearchValue(searchObj, 'utm_content');\r\n      payload.campaign.term = payload.campaign.term || this.getSearchValue(searchObj, 'utm_term');\r\n      payload.campaign.id = payload.campaign.id || this.getSearchValue(searchObj, 'utm_id');\r\n      \r\n      payload.promo = payload.promo || {};\r\n      payload.promo.name = payload.promo.name || this.getSearchValue(searchObj, 'promo');\r\n\r\n      payload.search = payload.search || {};\r\n      payload.search.term = payload.search.term || this.getSearchValue(searchObj, 'q'); // TODO add more search parameter values\r\n\r\n      // Set referrer params\r\n      payload.referrer = payload.referrer || {};\r\n      payload.referrer.url = payload.referrer.url || document.referrer || undefined;\r\n      \r\n      if (payload.referrer.url) {\r\n        var referrerObj = this.createUrlObj(payload.referrer.url) || {};\r\n        payload.referrer.domain = referrerObj.hostname;\r\n        payload.referrer.path = referrerObj.pathname;\r\n      }\r\n      \r\n      // Set link parameters\r\n      if (payload.link && payload.link.url) {\r\n        var linkObj = this.createUrlObj(payload.link.url);\r\n        \r\n        if (linkObj) {\r\n          payload.link.domain = payload.link.domain || linkObj.hostname;\r\n          payload.link.path = payload.link.path || linkObj.pathname;\r\n        }\r\n      }\r\n\r\n      // Set video parameters\r\n      if (payload.video && payload.video.url) {\r\n        var videoObj = this.createUrlObj(payload.video.url);\r\n        \r\n        if (videoObj) {\r\n          payload.video.domain = payload.video.domain || videoObj.hostname;\r\n          payload.video.path = payload.video.path || videoObj.pathname;\r\n        }\r\n      }\r\n      \r\n      // Set other standard params\r\n      payload.event_id = payload.event_id || this.createUniqueId();\r\n      payload.event_time = payload.event_time || new Date().toISOString();\r\n      payload.session_id = payload.session_id || this.sessionId;\r\n      payload.client_id = payload.client_id || this.clientId;\r\n      payload.ga_session_id = payload.ga_session_id || this.gaSessionId;\r\n      payload.ga_client_id = payload.ga_client_id || this.gaClientId;\r\n\r\n      // Convert payload to JSON\r\n      var payloadString = JSON.stringify(payload);\r\n\r\n      // Get debug config\r\n      var debug = payload.debug || {};\r\n\r\n      // Create full endpoint URL\r\n      var debugPath = debug.use_debug_endpoint ? '/debug' : '';\r\n      var postUrl = 'https://' + this.serverDomain + debugPath +\r\n        this.serverPath + '?event=' + payload.event_name;\r\n\r\n      // Send request\r\n      if (navigator.sendBeacon &&\r\n          payloadString.length < this.maxBeaconSize &&\r\n          !debug.preview_header) {\r\n        navigator.sendBeacon(postUrl, payloadString);\r\n      }\r\n      else {\r\n        var xhr = new XMLHttpRequest();\r\n        xhr.open(\"POST\", postUrl, true); //true for asynchronous request\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n        if (debug.preview_header) {\r\n          xhr.setRequestHeader(\"X-GTM-Preview\", debug.preview_header);\r\n        }\r\n        xhr.send(payloadString);\r\n      }\r\n    },\r\n\r\n    setCookieDomain: function(customDomain) {\r\n      if (customDomain) {\r\n        this.cookieDomain = customDomain;\r\n      }\r\n      else {\r\n        this.cookieDomain = '.' + document.location.hostname\r\n          .split('.')\r\n          .slice(-2)\r\n          .join('.');\r\n      }\r\n    },\r\n\r\n    handleSession: function() {\r\n      if (this.sessionHandled === true || !this.useCookies) {\r\n        return;\r\n      }\r\n\r\n      if (!this.sessionExpiration) {\r\n\r\n        if (this.sessionId) {\r\n          this.extendSession();\r\n        }\r\n        else {\r\n          this.createSession();\r\n        }\r\n        return;\r\n      }\r\n\r\n      var now = new Date();\r\n\r\n      if (now > this.sessionExpiration ) {\r\n        this.createSession();\r\n      }\r\n      else {\r\n        this.extendSession();\r\n      }\r\n    },\r\n\r\n    createSession: function() {\r\n      this.log('Creating new session');\r\n      this.eventIndex = 0;\r\n      this.sessionId = this.createUniqueId();\r\n      this.sessionExpiration = this.calculateSessionExpiration();\r\n      this.sessionStorage = null;\r\n      this.sessionEvents = null;\r\n      this.sessionHandled = true;\r\n\r\n      this.setClient();\r\n      this.setCookie(this.sessionIdCookie, this.sessionId, this.sessionExpiration);\r\n\r\n      if (this.trackNewSession) {\r\n        this.track({event_name: 'new_session'});\r\n      }\r\n    },\r\n\r\n    extendSession: function() {\r\n      var newExpiration = this.calculateSessionExpiration();\r\n      var priorExpiration = this.sessionExpiration;\r\n      this.sessionHandled = true;\r\n\r\n      // Only extend session if by more than 60 seconds\r\n      if (priorExpiration && newExpiration.getTime() < priorExpiration.getTime() + 60000) {\r\n        return;\r\n      }\r\n\r\n      this.sessionExpiration = newExpiration;\r\n      this.setCookie(this.sessionIdCookie, this.sessionId, this.sessionExpiration);\r\n\r\n      if (this.sessionStorage) {\r\n        var dataString = JSON.stringify(this.sessionStorage);\r\n        this.setCookie(this.sessionStorageCookie, encodeURIComponent(btoa(dataString)), this.sessionExpiration);\r\n      }\r\n\r\n      if (this.sessionEvents) {\r\n        this.setCookie(this.sessionEventsCookie, encodeURIComponent(btoa(this.sessionEvents)), this.sessionExpiration);\r\n      }\r\n\r\n      this.log('Extended session');\r\n    },\r\n    \r\n    setClient: function() {\r\n      var expiration = this.calculateClientExpiration();\r\n\r\n      // Existing user\r\n      if (!this.clientId) {\r\n        this.clientId = this.sessionId;\r\n        \r\n        if (this.trackNewSession) {\r\n          this.track({event_name: 'new_user'});\r\n        }\r\n      }\r\n\r\n      this.setCookie(this.clientIdCookie, this.clientId, expiration);\r\n    },\r\n\r\n    loadCookieData: function() {\r\n      var cookies = {};\r\n      var cookieString = document.cookie;\r\n\r\n      if (!cookieString) {\r\n        return;\r\n      }\r\n      \r\n      var cookieList = cookieString.split('; ');\r\n\r\n      for (var i = 0; i < cookieList.length; i++) {\r\n        var cookie = cookieList[i];\r\n        var p = cookie.indexOf('=');\r\n        var name = cookie.substring(0, p);\r\n        var value = cookie.substring(p + 1);\r\n        cookies[name] = value;\r\n      }\r\n\r\n      // Get External Cookies\r\n      this.gaClientId = cookies._ga;\r\n\r\n      // Get Datm Cookies\r\n      this.sessionId = cookies[this.sessionIdCookie];\r\n      this.clientId = cookies[this.clientIdCookie];\r\n      var storage = cookies[this.sessionStorageCookie];\r\n\r\n      if (storage) {\r\n        try {\r\n          this.sessionStorage = JSON.parse(atob(decodeURIComponent(storage)));\r\n        }\r\n        catch(e) {\r\n          this.sessionStorage = null;\r\n          this.log('Error parsing session storage cookie', e, storage);\r\n        }\r\n      }\r\n      else {\r\n        this.sessionStorage = null;\r\n      }\r\n\r\n      var events = cookies[this.sessionEventsCookie];\r\n\r\n      if (events) {\r\n        this.sessionEvents = atob(decodeURIComponent(events));\r\n      }\r\n      else {\r\n        this.sessionEvents = null;\r\n      }\r\n    },\r\n\r\n    setSessionParam: function(name, value) {\r\n      this.log('Setting session storage');\r\n      if (!name) {\r\n        this.log('Can\\'t set session param - missing parameter name');\r\n        return;\r\n      }\r\n\r\n      if (this.isSessionExpired()) {\r\n        this.log('Can\\'t set session param - session is expired');\r\n        return;\r\n      }\r\n \r\n      var data = this.sessionStorage = this.sessionStorage || {};\r\n      var nameParts = name.split('.');\r\n      var partCount = nameParts.length;\r\n      \r\n      for (var i = 0; i < partCount; i++ ) {\r\n        var part = nameParts[i];\r\n\r\n        if (i < partCount - 1) {\r\n          if (this.getType(data[part]) !== 'object') {\r\n            data[part] = {};\r\n          }\r\n          \r\n          data = data[part];\r\n        }\r\n        else {\r\n          data[part] = value;\r\n        }\r\n      }\r\n\r\n      var dataString = JSON.stringify(this.sessionStorage);\r\n      this.setCookie(this.sessionStorageCookie, encodeURIComponent(btoa(dataString)), this.sessionExpiration);\r\n    },\r\n\r\n    getSessionParam: function(name) {\r\n      if (this.isSessionExpired()) {\r\n        this.log('Can\\'t get session param - session is expired')\r\n        return\r\n      }\r\n      \r\n      if (!name) {\r\n        this.log('Can\\'t get session param - missing parameter name');\r\n        return;\r\n      }\r\n\r\n      var data = this.sessionStorage || {};\r\n      var nameParts = name.split('.');\r\n      var partCount = nameParts.length;\r\n      \r\n      for (var i = 0; i < partCount; i++ ) {\r\n        var part = nameParts[i];\r\n\r\n        if (i < partCount - 1) {\r\n          data = data[part]; // Move down one level\r\n\r\n          if (typeof data !== 'object') {\r\n            this.log('Error accessing object property. Object not defined');\r\n            return;\r\n          }\r\n        }\r\n        else {\r\n          return data[part];\r\n        }\r\n      }\r\n    },\r\n\r\n    setPageParam: function(name, value) {\r\n      if (!name) {\r\n        this.log('Can\\'t set page param - missing parameter name');\r\n      }\r\n      \r\n      var data = this.pageStorage = this.pageStorage || {};\r\n      var nameParts = name.split('.');\r\n      var partCount = nameParts.length;\r\n      \r\n      for (var i = 0; i < partCount; i++ ) {\r\n        var part = nameParts[i];\r\n\r\n        if (i < partCount - 1) {\r\n          if (this.getType(data[part]) !== 'object') {\r\n            data[part] = {};\r\n          }\r\n          \r\n          data = data[part];\r\n        }\r\n        else {\r\n          data[part] = value;\r\n        }\r\n      }\r\n    },\r\n\r\n    getPageParam: function(name) {\r\n      if (!name) {\r\n        this.log('Can\\'t get page param - missing parameter name');\r\n        return this.pageStorage[name];\r\n      }\r\n\r\n      var data = this.pageStorage || {};\r\n      var nameParts = name.split('.');\r\n      var partCount = nameParts.length;\r\n      \r\n      for (var i = 0; i < partCount; i++ ) {\r\n        var part = nameParts[i];\r\n\r\n        if (i < partCount - 1) {\r\n          data = data[part];\r\n\r\n          if (this.getType(data) !== 'object' && this.getType(data) !== 'array') {\r\n            this.log('Error accessing object property. Object not defined');\r\n            return;\r\n          }\r\n        }\r\n        else {\r\n          return data[part];\r\n        }\r\n      }\r\n    },\r\n\r\n    createUniqueId: function() {\r\n      return Date.now()\r\n        + '-'\r\n        + ('000000' + Math.floor(Math.random() * 0xffffff).toString(16))\r\n          .slice(-6)\r\n          .toUpperCase();\r\n    },\r\n\r\n    calculateSessionExpiration: function() {\r\n      var date = new Date();\r\n      date.setTime(date.getTime() + (this.sessionDuration * 60 * 1000));\r\n      return date;\r\n    },\r\n\r\n    calculateClientExpiration: function() {\r\n      var date = new Date();\r\n      date.setFullYear(date.getFullYear() + 1);  // Expire in 1 year      \r\n      return date;\r\n    },\r\n\r\n    setCookie: function(name, value, expireDate) {\r\n      this.log('Set cookie:', name);\r\n\r\n      document.cookie = name +\r\n      '=' +\r\n      value +\r\n      '; expires=' +\r\n      expireDate.toUTCString() +\r\n      '; domain=' +\r\n      this.cookieDomain +\r\n      '; path=/';\r\n    },\r\n\r\n    isNewSession: function() {\r\n      if (!this.useCookies) {\r\n        return;\r\n      }\r\n\r\n      if (!this.sessionExpiration) {\r\n        return true;\r\n      }\r\n\r\n      var now = new Date();\r\n      return this.sessionExpiration < now;\r\n    },\r\n\r\n    getType: function(value) {\r\n      var type = Object.prototype.toString.call(value)\r\n        .slice(8, -1)\r\n        .toLowerCase();\r\n      return type;\r\n    },\r\n\r\n    ifNull: function(value, defaultValue) {\r\n      if (value || value === 0 || value === false) {\r\n        return value;\r\n      }\r\n      else {\r\n        return defaultValue;\r\n      }\r\n    },\r\n\r\n    createUrlObj: function(url) {\r\n      if (url) {\r\n        try {\r\n          return new URL(url);\r\n        }\r\n        catch {\r\n          // Do nothing\r\n        }\r\n      }\r\n    },\r\n    \r\n    createSearchObj: function(search) {\r\n      if (search) {\r\n        try {\r\n          return new URLSearchParams(search);\r\n        }\r\n        catch {\r\n          // Do nothing;\r\n        }\r\n      }\r\n    },\r\n\r\n    getSearchKeys: function(search) {\r\n      if (search) {\r\n        var searchKeys = Array.from(search.keys());\r\n        return searchKeys.sort().join();\r\n      }\r\n    },\r\n\r\n    getSearchValue: function(search, key) {\r\n      if (search && key) {\r\n        return search.get(key) || undefined;\r\n      }\r\n    },\r\n\r\n    mergeObjects: function(primaryObj, secondaryObj) {\r\n      if (!primaryObj || !secondaryObj) {\r\n        return;\r\n      }\r\n      \r\n      for (var key in secondaryObj) {\r\n        if (Object.prototype.hasOwnProperty.call(secondaryObj, key) &&\r\n            secondaryObj[key] != null) {\r\n          if (primaryObj[key] == null) {\r\n            primaryObj[key] = secondaryObj[key];\r\n          }\r\n          else if (typeof secondaryObj[key] === 'object' &&\r\n            !Array.isArray(secondaryObj[key]) &&\r\n            typeof primaryObj[key] === 'object' &&\r\n            !Array.isArray(primaryObj[key])\r\n          ) {\r\n            this.mergeObjects(primaryObj[key], secondaryObj[key]);\r\n          }\r\n        }\r\n      }\r\n    },\r\n\r\n    log: function(value1, value2, value3) {\r\n      if (!this.loggingEnabled && !config.loggingEnabled) return;\r\n      \r\n      if (value3 !== undefined) {\r\n        console.log('[DATM]', value1, value2, value3);\r\n      }\r\n      else if (value2 !== undefined) {\r\n        console.log('[DATM]', value1, value2);\r\n      }\r\n      else {\r\n        console.log('[DATM]', value1);\r\n      }\r\n    }\r\n  };\r\n\r\n  // Process queue\r\n  var datmList = window.datm || [];\r\n  var config;\r\n  \r\n  while (datmList.length > 0) {\r\n    var request = datmList.shift();\r\n\r\n    if (request.action === 'initialize') {\r\n      config = request;\r\n      tracker.config = true;\r\n    }\r\n    else {\r\n      tracker.queue.push(request);\r\n    }\r\n  }\r\n\r\n  if (config) {\r\n    tracker.push(config);\r\n  }\r\n\r\n  // Global tracker\r\n  window.datm = tracker;\r\n\r\n})(window);"]}