{"version":3,"sources":["webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/n-tracking/dist/browser.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/utils.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/settings.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/store.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/user.js","webpack:///./node_modules/@financial-times/o-tracking/src/libs/browser-cuid.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/session.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/send.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/queue.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/xhr.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/send-beacon.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/image.js","webpack:///./node_modules/@financial-times/o-tracking/src/libs/get-trace.js","webpack:///./node_modules/@financial-times/o-tracking/main.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/tracking.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/core/transports/index.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/events/custom.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/events/page-view.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/events/click.js","webpack:///./node_modules/@financial-times/o-tracking/src/javascript/events/component-view.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/n-tracking/node_modules/@financial-times/o-grid/browser.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/n-tracking/node_modules/@financial-times/o-viewport/browser.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/n-tracking/node_modules/@financial-times/o-viewport/dist/utils.js","webpack:///./node_modules/@financial-times/g-components/node_modules/@financial-times/o-utils/browser.js","webpack:///./node_modules/@financial-times/privacy-us-privacy/dist/main.js","webpack:///./node_modules/@financial-times/ads-personalised-consent/dist/ads-personalised-consent.js","webpack:///./node_modules/@financial-times/privacy-legislation-client/dist/esm/main.js","webpack:///./node_modules/web-vitals/dist/web-vitals.js","webpack:///./node_modules/ready-state/dist/ready-state.es.js"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","delegateYield","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","key","_createClass","protoProps","staticProps","asyncGeneratorStep","gen","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","obj","_toPrimitive","String","toPrimitive","Number","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","toString","Array","from","test","len","arr2","l","isArray","__signature__","reactHotLoaderGlobal","default","signature","getCookie","regex","RegExp","concat","match","document","cookie","getLibrarySession","getUserData","networkInfo","navigator","connection","mozConnection","webkitConnection","layout","oGrid","getCurrentLayout","orientation","oViewport","getOrientation","connectionType","ft_session_publib","getQueryParams","queryString","window","location","search","result","properties","searchParams","URLSearchParams","property","get","getErrorPageParams","errorStatus","errorReason","url","parent","referrer","transformListToObject","list","split","map","flag","_flag$split2","dataPropertyMap","appName","contentId","contentType","conceptId","conceptType","segmentid","cpccampaign","abTestState","transformContextData","contextData","content","uuid","asset_type","getConsentData","_getConsentData","_callee","consentValues","usprivacy","_context","getPersonalisedConsent","isAllowed","getUsPrivacyForTracking","broadcast","data","bubbles","rootEl","Element","isPrototypeOf","this","body","event","CustomEvent","cancelable","detail","dispatchEvent","commonjsGlobal","globalThis","global","createCommonjsModule","module","exports","seedRandom","pool","GLOBAL","startdenom","Math","pow","significance","overflow","oldRandom","random","ARC4","keylen","me","j","S","width","count","flatten","depth","prop","typ","mixkey","seed","smear","stringseed","charCodeAt","tostring","autoseed","crypto","getRandomValues","Uint8Array","Date","plugins","screen","fromCharCode","options","use_entropy","entropy","arc4","x","resetGlobal","seedIsInSample","percent","pseudoRandomNumber","randomNumberGenerator","round","getSpoorId","requiredMetrics","defaultSampleRate$1","isContextComplete","context","every","metric","realUserMonitoringForPerformance","_ref","sampleRate","spoorId","isFinite","navigation","performance","getEntriesByType","readyState","domInteractive","domComplete","hasAlreadyBroadcast","recordMetric","metricName","toLowerCase","firstInputDelay","largestContentfulPaint","timeToFirstByte","firstContentfulPaint","cumulativeLayoutShift","toFixed","interactionToNextPaint","href","console","log","performanceMetrics","action","category","onCLS","reportAllChanges","onFCP","onFID","onLCP","onTTFB","onINP","domContentLoadedEventStart","nodeName","nodeType","toUpperCase","replace","id","classList","trim","parentNode","addEventListener","persisted","timeStamp","activationStart","m","prerendering","wasDiscarded","rating","delta","entries","now","floor","navigationType","PerformanceObserver","supportedEntryTypes","includes","getEntries","observe","assign","buffered","requestAnimationFrame","visibilityState","T","E","b","L","removeEventListener","C","setTimeout","w","M","disconnect","startTime","firstHiddenTime","max","A","F","hadRecentInput","takeRecords","reduce","sources","find","node","attribution","largestShiftTarget","largestShiftTime","largestShiftValue","largestShiftSource","largestShiftEntry","loadState","P","passive","capture","B","D","q","k","entryType","processingStart","R","H","N","O","eventTarget","eventType","eventTime","eventEntry","ee","te","ne","responseStart","requestStart","responseEnd","element","resourceLoadDelay","resourceLoadTime","elementRenderDelay","navigationEntry","lcpEntry","lcpResourceEntry","defaultSampleRate","dataFromCWV","lcp","lcpDelta","fid","fidDelta","cls","clsDelta","realUserMonitoringWithAttribution","_ref2","broadcastCWV","proportionToSample","DEPTH_MARKERS","defaultOptions$1","onScroll","debug","ScrollDepth","init","_this","querySelector","observer","IntersectionObserver","handleIntersection","bind","style","position","percentage","marker","createElement","className","top","bottom","zIndex","setAttribute","appendChild","changes","_this2","change","isIntersecting","intersectionRatio","scrollDepth","getAttribute","removeChild","unobserve","__reactstandin__regenerateByEval","code","eval","ATTENTION_INTERVAL","ATTENTION_EVENTS","ATTENTION_LOST_EVENTS","PAGE_EXIT_EVENTS","defaultOptions","onExit","AttentionTime","totalAttentionTime","hasExited","_this3","startAttention","endAttention","handleExit","handleVisibilityChange","querySelectorAll","startConstantAttention","endConstantAttention","clearTimeout","attentionTimeout","startAttentionTime","getAttentionTime","time","constantAttentionInterval","setInterval","clearInterval","currentAttentionTime","pageAttention","attentionTime","attention","total","meta","percentagesViewed","MAX_LENGTH","TRUNCATED_TEXT","getTextExcerpt","text","newLength","left","right","ceil","substr","textCopying","getSelection","selection","characters","words","index","freeze","SPOOR_API_INGEST_URL","reactHotLoader","leaveModule","_ref3","appContext","extraContext","pageViewContext","queryParams","server","user","useSendBeacon","oTracking","hostname","pageViewEventParams","consents","page","warn","click","currentInstance","ourInstance","register","page_callbacks","_len","_key","_i","_args","is","variable","merge","src","copy","encode","str","encodeURIComponent","escape","decode","decodeURIComponent","unescape","addEvent","listener","attachEvent","namespace","onPage","cb","triggerPage","getValueFromCookie","matcher","$1","filterProperties","objectToFilter","allowedPropertyNames","_step","filteredObject","_iterator","_createForOfIteratorHelper","allowedName","sanitise","assignIfUndefined","subject","findCircularPathsIn","rootObject","traversedValues","WeakSet","circularPaths","_findCircularPathsIn","currentObject","path","has","add","_i2","_Object$entries","_Object$entries$_i","containsCircularPaths","Boolean","_containsCircularPaths","_i3","_Object$values","isDeepEqual","source","flags","valueOf","settings","config","clone","JSON","parse","stringify","setValue","getValue","destroy","set","rootID","setRootID","guid","getRootID","track","callback","currentSession","session","request","root_id","ft_session","ft_session_s","device","spoor_session","spoor_session_is_new","isNew","spoor_id","userID","settingsConfig","addAndRun","_default","Store","keyPrefix","undefinedName","message","cookieLoad","cookies","indexOf","substring","cookieSave","expiry","expires","setTime","getTime","toUTCString","domain","cookieRemove","storageKey","nameOverride","join","storage","_type","load","localStorage","getItem","save","setItem","remove","removeItem","loadStore","oldCookieStoreData","_Object$keys","read","write","errorMessage","store","cookieDomain","defaultUserConfig","setUser","discreteValues","pad","num","size","randomBlock","safeCounter","api","timestamp","fingerprint","slug","date","print","counter","globalCount","cache","mimeTypes","userAgent","defaultSessionConfig","setSession","getSession","parseInt","isUndefined","queue","should_use_sendBeacon","getSetting","sendBeacon","sendRequest","queueTime","offlineLag","transport","getTransport","XMLHttpRequest","user_callback","core_system","system","version","test_data","is_live","offset","stringifiedData","send","run","all_events","all","counts","label","URL","queue_length","nextRequest","shift","Queue","items","item","first","last","doAdd","created_at","invalidArg","xhr","open","withCredentials","setRequestHeader","onerror","onload","status","resolver","rejecter","image","Image","getSiblingsAndPosition","el","originalEl","selector","siblings","findIndex","elementPropertiesToCollect","getAllElementProperties","_elementPropertiesToC","hasAttribute","parseRawValue","rawValue","parsedValue","getAttributeValue","_parseRawValue2","isJSON","getDomPathProps","attrs","attribute","getContextProps","isOriginalEl","customProps","getTrace","trace","customContext","attributes","domPathProps","contextProps","initialise","tracking","initEvent","initPage","updateConfig","newConfig","user_id","initialised","destroySetting","hasDeclarativeConfig","getDeclarativeConfigElement","getDeclarativeConfig","initUser","initSession","initSend","declarativeConfigString","configEl","textContent","innerText","innerHTML","declarativeOptions","configError","view","core","mock","defaultEventConfig","trackingEvent","origamiElement","getOrigamiEventTarget","component_name","component_id","getComponentId","srcElement","_getElementPath","siblingIndex","srcParent","parentElement","childNodes","_generateHash","reduceRight","builder","setSetting","defaultPageConfig","pageViewEventHasAlreadyBeenSentBefore","previousPageConfigWithoutContextIDs","configWithoutContextIDs","eventPropertiesToCollect","getEventProperties","eventProperties","_eventPropertiesToCol","handleClickEvent","eventData","clickEvent","clickElement","_getTrace","domPathTokens","source_id","elementsToTrack","Delegate","on","sendAllEventsFromQueue","nextLink","TRACKING_ATTRIBUTES","decorateEventData","viewedEl","opts","getContextData","_toConsumableArray","onChange","threshold","enterModule","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","getCurrentGutter","getGridBreakpoints","enableLayoutChangeEvents","missingDataMessage","getGridProperties","getGridFromDoc","breakpoints","gridProperties","getComputedStyle","documentElement","getPropertyValue","gutter","gridLayouts","layouts","sort","parseFloat","setupQuery","query","handleMQChange","mql","matches","matchMedia","addListener","_breakpoints$index","layoutName","layoutWidth","nextLayoutWidth","_utils","_interopRequireDefault","require","__esModule","throttle","debounce","listeners","intervals","resize","visibility","scroll","setThrottleInterval","interval","listenToResize","handler","ev","viewport","getSize","originalEvent","listenToOrientation","listenToVisibility","hidden","getVisibility","listenToScroll","scrollPos","getScrollPosition","scrollHeight","height","scrollLeft","scrollTop","scrollWidth","listenTo","stopListeningTo","_debug","Utils","_interopRequireWildcard","_getRequireWildcardCache","WeakMap","newObj","hasPropertyDescriptor","desc","getHeight","ignoreScrollbars","clientHeight","innerHeight","getWidth","clientWidth","innerWidth","pageXOffset","scrollX","pageYOffset","scrollY","func","wait","timeout","later","API_URL","API_ENDPOINTS","complianceRegion","formatResponse","region","legislation","Set","sessionStorageOk","sessionStorage","fetchLegislation","_fetchLegislation","complianceStr","complianceObj","res","compliance","fetch","ok","json","getUsPrivacyCookie","uspCookie","row","startsWith","__uspapi","_x","_x2","_x3","_uspapi","_callee2","command","_yield$fetchLegislati","_context2","uspString","t0","setUSPrivacy","setUSPrivacyCookie","consent","_typeof2","_toPropertyKey2","_toPrimitive2","input","hint","prim","PersonalisedConsent","gpcValue","privacyLegislation","consentCookie","behavioral","demographic","programmatic","permutiveadsOnsite","personalisedmarketingOnsite","recommendedcontentOnsite","_updatePrivacyLegislation","_update","_init","updatePrivacyLegislation","updateGpcValue","updateConsentCookie","_callee3","_context3","globalPrivacyControl","CCPA","legislationPolicy","isCcpaAndGpc","_this$consentCookie","GDPR","_callee4","pc","_context4","allowArrayLike","it","_e","normalCompletion","didErr","step","_e2","getHostname","buildConsentPageUrl","decoratedUrl","append","I","interactionId","min","interactionCount","durationThreshold","_","z","G","J","K","duration","latency","splice","Q","some","PerformanceEventTiming","U","V","W","X","Z","Y","once","state","loading","interactive","domready","dom","ready"],"mappings":"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","file":"1.e746a71b.js","sourcesContent":["import oTracking from '@financial-times/o-tracking';\nimport oGrid from '@financial-times/o-grid';\nimport oViewport from '@financial-times/o-viewport';\nimport { getUsPrivacyForTracking } from '@financial-times/privacy-us-privacy';\nimport { getPersonalisedConsent } from '@financial-times/ads-personalised-consent';\nimport { onCLS, onFCP, onFID, onLCP, onTTFB, onINP } from 'web-vitals';\nimport readyState from 'ready-state';\n\nfunction getCookie (name) {\n\tconst regex = new RegExp(`(?:^| )${name}=([^;]+)`);\n\tconst match = document.cookie && document.cookie.match(regex);\n\treturn match ? match[1] : null;\n}\n\nconst getLibrarySession = () => getCookie('FTSession_PubLib');\n\nfunction getUserData () {\n\t// https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation\n\tconst networkInfo =\n\t\tnavigator.connection ||\n\t\tnavigator.mozConnection ||\n\t\tnavigator.webkitConnection;\n\n\treturn {\n\t\tlayout: oGrid.getCurrentLayout(),\n\t\torientation: oViewport.getOrientation(),\n\t\tconnectionType: networkInfo ? networkInfo.type : undefined,\n\t\tft_session_publib: getLibrarySession()\n\t};\n}\n\nfunction getQueryParams (queryString = window.location.search) {\n\tconst result = {};\n\tconst properties = ['segmentid', 'cpccampaign'];\n\tconst searchParams = new URLSearchParams(queryString);\n\n\t// NOTE: undefined parameters will return null values so fallback to undefined\n\tproperties.forEach((property) => {\n\t\tconst value = searchParams.get(property);\n\n\t\tif (value) {\n\t\t\tresult[property] = value;\n\t\t}\n\t});\n\n\treturn result;\n}\n\nfunction getErrorPageParams (queryString = window.location.search) {\n\tconst searchParams = new URLSearchParams(queryString);\n\n\tconst errorStatus = searchParams.get('nextErrorStatus');\n\tconst errorReason = searchParams.get('nextErrorReason');\n\n\tif (errorStatus || errorReason) {\n\t\treturn {\n\t\t\terrorStatus,\n\t\t\terrorReason,\n\t\t\turl: window.parent.location.toString(),\n\t\t\treferrer: window.parent.document.referrer,\n\t\t};\n\t}\n}\n\nfunction transformListToObject (list) {\n\tconst result = {};\n\n\tlist.split(',').map(flag => {\n\t\tconst [name, value] = flag.split(':');\n\n\t\tif (name && value) {\n\t\t\tresult[name] = value;\n\t\t}\n\t});\n\n\treturn result;\n}\n\n// Map of property names received to property names specified by the data team\n// <https://sites.google.com/ft.com/ftproductanalytics/tracking-documents>\nconst dataPropertyMap = {\n\tappName: 'app',\n\tcontentId: 'rootContentId',\n\tcontentType: 'rootContentType',\n\tconceptId: 'rootConceptId',\n\tconceptType: 'rootConceptType',\n\tsegmentid: 'marketing_segment_id',\n\tcpccampaign: 'cpc_campaign',\n\tabTestState: 'active_ammit_flags'\n};\n\nfunction transformContextData (contextData) {\n\tconst result = {};\n\n\tObject.keys(contextData).forEach((key) => {\n\t\tlet value = contextData[key];\n\n\t\tif (key === 'abTestState') {\n\t\t\tvalue = transformListToObject(value);\n\t\t}\n\n\t\t// HACK: ensure content UUID and type match the audio tracking spec\n\t\t// <https://docs.google.com/spreadsheets/d/1YjXO0_3Xojact4sU24tIo_Nnv7e38zbRHWjwmOfHkb0/edit?usp=sharing>\n\t\tif (key === 'contentId') {\n\t\t\tresult.content = { ...result.content, uuid: value };\n\t\t}\n\n\t\tif (key === 'contentType') {\n\t\t\tresult.content = { ...result.content, asset_type: value };\n\t\t}\n\n\t\tresult[dataPropertyMap[key] || key] = value;\n\t});\n\n\treturn result;\n}\n\nasync function getConsentData () {\n\tconst consentValues = (await getPersonalisedConsent()).isAllowed();\n\tconst usprivacy = getUsPrivacyForTracking();\n\treturn {\n\t\t...consentValues,\n\t\tusprivacy,\n\t};\n}\n\nfunction broadcast (name, data, bubbles = true) {\n\tconst rootEl = Element.prototype.isPrototypeOf(this) ? this : document.body;\n\n\t// This requires a polyfill for IE\n\t// <https://caniuse.com/#feat=customevent>\n\tconst event = new CustomEvent(name, {\n\t\tbubbles: bubbles,\n\t\tcancelable: true,\n\t\tdetail: data\n\t});\n\n\trootEl.dispatchEvent(event);\n}\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar seedRandom = createCommonjsModule(function (module) {\n\r\nvar width = 256;// each RC4 output is 0 <= x < 256\r\nvar chunks = 6;// at least six RC4 outputs for each double\r\nvar digits = 52;// there are 52 significant digits in a double\r\nvar pool = [];// pool: entropy pool starts empty\r\nvar GLOBAL = typeof commonjsGlobal === 'undefined' ? window : commonjsGlobal;\r\n\r\n//\r\n// The following constants are related to IEEE 754 limits.\r\n//\r\nvar startdenom = Math.pow(width, chunks),\r\n    significance = Math.pow(2, digits),\r\n    overflow = significance * 2,\r\n    mask = width - 1;\r\n\r\n\r\nvar oldRandom = Math.random;\r\n\r\n//\r\n// seedrandom()\r\n// This is the seedrandom function described above.\r\n//\r\nmodule.exports = function(seed, options) {\r\n  if (options && options.global === true) {\r\n    options.global = false;\r\n    Math.random = module.exports(seed, options);\r\n    options.global = true;\r\n    return Math.random;\r\n  }\r\n  var use_entropy = (options && options.entropy) || false;\r\n  var key = [];\r\n\r\n  // Flatten the seed string or build one from local entropy if needed.\r\n  mixkey(flatten(\r\n    use_entropy ? [seed, tostring(pool)] :\r\n    0 in arguments ? seed : autoseed(), 3), key);\r\n\r\n  // Use the seed to initialize an ARC4 generator.\r\n  var arc4 = new ARC4(key);\r\n\r\n  // Mix the randomness into accumulated entropy.\r\n  mixkey(tostring(arc4.S), pool);\r\n\r\n  // Override Math.random\r\n\r\n  // This function returns a random double in [0, 1) that contains\r\n  // randomness in every bit of the mantissa of the IEEE 754 value.\r\n\r\n  return function() {         // Closure to return a random double:\r\n    var n = arc4.g(chunks),             // Start with a numerator n < 2 ^ 48\r\n        d = startdenom,                 //   and denominator d = 2 ^ 48.\r\n        x = 0;                          //   and no 'extra last byte'.\r\n    while (n < significance) {          // Fill up all significant digits by\r\n      n = (n + x) * width;              //   shifting numerator and\r\n      d *= width;                       //   denominator and generating a\r\n      x = arc4.g(1);                    //   new least-significant-byte.\r\n    }\r\n    while (n >= overflow) {             // To avoid rounding up, before adding\r\n      n /= 2;                           //   last byte, shift everything\r\n      d /= 2;                           //   right using integer Math until\r\n      x >>>= 1;                         //   we have exactly the desired bits.\r\n    }\r\n    return (n + x) / d;                 // Form the number within [0, 1).\r\n  };\r\n};\r\n\r\nmodule.exports.resetGlobal = function () {\r\n  Math.random = oldRandom;\r\n};\r\n\r\n//\r\n// ARC4\r\n//\r\n// An ARC4 implementation.  The constructor takes a key in the form of\r\n// an array of at most (width) integers that should be 0 <= x < (width).\r\n//\r\n// The g(count) method returns a pseudorandom integer that concatenates\r\n// the next (count) outputs from ARC4.  Its return value is a number x\r\n// that is in the range 0 <= x < (width ^ count).\r\n//\r\n/** @constructor */\r\nfunction ARC4(key) {\r\n  var t, keylen = key.length,\r\n      me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\r\n\r\n  // The empty key [] is treated as [0].\r\n  if (!keylen) { key = [keylen++]; }\r\n\r\n  // Set up S using the standard key scheduling algorithm.\r\n  while (i < width) {\r\n    s[i] = i++;\r\n  }\r\n  for (i = 0; i < width; i++) {\r\n    s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\r\n    s[j] = t;\r\n  }\r\n\r\n  // The \"g\" method returns the next (count) outputs as one number.\r\n  (me.g = function(count) {\r\n    // Using instance members instead of closure state nearly doubles speed.\r\n    var t, r = 0,\r\n        i = me.i, j = me.j, s = me.S;\r\n    while (count--) {\r\n      t = s[i = mask & (i + 1)];\r\n      r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\r\n    }\r\n    me.i = i; me.j = j;\r\n    return r;\r\n    // For robust unpredictability discard an initial batch of values.\r\n    // See http://www.rsa.com/rsalabs/node.asp?id=2009\r\n  })(width);\r\n}\r\n\r\n//\r\n// flatten()\r\n// Converts an object tree to nested arrays of strings.\r\n//\r\nfunction flatten(obj, depth) {\r\n  var result = [], typ = (typeof obj)[0], prop;\r\n  if (depth && typ == 'o') {\r\n    for (prop in obj) {\r\n      try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\r\n    }\r\n  }\r\n  return (result.length ? result : typ == 's' ? obj : obj + '\\0');\r\n}\r\n\r\n//\r\n// mixkey()\r\n// Mixes a string seed into a key that is an array of integers, and\r\n// returns a shortened string seed that is equivalent to the result key.\r\n//\r\nfunction mixkey(seed, key) {\r\n  var stringseed = seed + '', smear, j = 0;\r\n  while (j < stringseed.length) {\r\n    key[mask & j] =\r\n      mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\r\n  }\r\n  return tostring(key);\r\n}\r\n\r\n//\r\n// autoseed()\r\n// Returns an object for autoseeding, using window.crypto if available.\r\n//\r\n/** @param {Uint8Array=} seed */\r\nfunction autoseed(seed) {\r\n  try {\r\n    GLOBAL.crypto.getRandomValues(seed = new Uint8Array(width));\r\n    return tostring(seed);\r\n  } catch (e) {\r\n    return [+new Date, GLOBAL, GLOBAL.navigator && GLOBAL.navigator.plugins,\r\n            GLOBAL.screen, tostring(pool)];\r\n  }\r\n}\r\n\r\n//\r\n// tostring()\r\n// Converts an array of charcodes to a string\r\n//\r\nfunction tostring(a) {\r\n  return String.fromCharCode.apply(0, a);\r\n}\r\n\r\n//\r\n// When seedrandom.js is loaded, we immediately mix a few bits\r\n// from the built-in RNG into the entropy pool.  Because we do\r\n// not want to intefere with determinstic PRNG state later,\r\n// seedrandom will not call Math.random on its own again after\r\n// initialization.\r\n//\r\nmixkey(Math.random(), pool);\n});\nseedRandom.resetGlobal;\n\nfunction seedIsInSample (seed, percent) {\n\tconst randomNumberGenerator = seedRandom(seed);\n\tconst pseudoRandomNumber = randomNumberGenerator();\n\n\treturn Math.round(pseudoRandomNumber * 100) <= percent;\n}\n\nconst getSpoorId = () => getCookie('spoor-id');\n\n// @see \"Important metrics to measure\" https://web.dev/metrics\nconst requiredMetrics = [\n\t'domInteractive',\n\t'domComplete',\n\t'timeToFirstByte',\n\t'largestContentfulPaint',\n\t'firstInputDelay',\n\t'cumulativeLayoutShift',\n\t'firstContentfulPaint',\n\t'interactionToNextPaint'\n];\n\nconst defaultSampleRate$1 = 10;\n\nconst isContextComplete = (context) => {\n\treturn requiredMetrics.every((metric) => typeof context[metric] === 'number');\n};\n\nconst realUserMonitoringForPerformance = ({ sampleRate } = {}) => {\n\n\t// Check browser support.\n\t// @see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming\n\tif (!'PerformanceLongTaskTiming' in window) return;\n\n\tconst spoorId = getSpoorId();\n\n\tsampleRate = Number.isFinite(sampleRate) && sampleRate <= 100 && sampleRate >= 0 ? sampleRate : defaultSampleRate$1;\n\n\t// Gather metrics for only a cohort of users.\n\tif (!seedIsInSample(spoorId, sampleRate)) return;\n\n\t// Proceed only if the page load event is a \"navigate\".\n\t// @see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type\n\t// When testing, you will need to open a new browser window and paste the URL in i.e. simply reloading the page will not work.\n\tconst navigation = performance.getEntriesByType('navigation') && performance.getEntriesByType('navigation')[0];\n\tif (!navigation || navigation.type !== 'navigate') return;\n\n\tconst context = {};\n\n\treadyState.complete.then(() => {\n\t\t// <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domInteractive>\n\t\tcontext.domInteractive = Math.round(navigation.domInteractive);\n\t\t// <https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/domComplete>\n\t\tcontext.domComplete = Math.round(navigation.domComplete);\n\t});\n\n\t/**\n\t * recordMetric()\n\t *\n\t * This function is called every time one of the performance events occurs.\n\t * The \"final\" event should be `firstInputDelay`, which is triggered by any \"input\" event (most likely to be a click.)\n\t * Once all the metrics are present, it fires a broadcast() to the Spoor API.\n\t */\n\tlet hasAlreadyBroadcast = false;\n\n\tconst recordMetric = ((metric) => {\n\t\tif (hasAlreadyBroadcast) return;\n\n\t\t// @see https://github.com/GoogleChrome/web-vitals#metric\n\t\t// for available properties of `metric`\n\t\tconst metricName = metric.name.toLowerCase();\n\t\tconst data = metric.value;\n\n\t\tif (metricName === 'fid') {\n\t\t\tcontext.firstInputDelay = Math.round(data);\n\t\t} else if (metricName === 'lcp') {\n\t\t\t//This fires twice, we are collecting the 'first firing' - see PR notes for more context https://github.com/Financial-Times/n-tracking/pull/86\n\t\t\tcontext.largestContentfulPaint = Math.round(data);\n\t\t} else if (metricName === 'ttfb') {\n\t\t\tcontext.timeToFirstByte = Math.round(data);\n\t\t} else if (metricName === 'fcp') {\n\t\t\tcontext.firstContentfulPaint = Math.round(data);\n\t\t} else if (metricName === 'cls') {\n\t\t\tcontext.cumulativeLayoutShift = Number(data.toFixed(4));\n\t\t} else if (metricName === 'inp') {\n\t\t\tcontext.interactionToNextPaint = Math.round(data);\n\t\t}\n\n\t\tcontext.url = window.document.location.href || null;\n\n\t\tif (isContextComplete(context)) {\n\t\t\tconsole.log({ performanceMetrics: context }); // eslint-disable-line no-console\n\n\t\t\tbroadcast('oTracking.event', {\n\t\t\t\taction: 'performance',\n\t\t\t\tcategory: 'page',\n\t\t\t\t...context\n\t\t\t});\n\n\t\t\thasAlreadyBroadcast = true;\n\t\t}\n\t});\n\n\tonCLS(recordMetric, { reportAllChanges: true });\n\tonFCP(recordMetric);\n\tonFID(recordMetric);\n\tonLCP(recordMetric);\n\tonTTFB(recordMetric);\n\tonINP(recordMetric);\n};\n\nvar e,t,n,r,a=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},o=function(e){if(\"loading\"===document.readyState)return \"loading\";var t=a();if(t){if(e<t.domInteractive)return \"loading\";if(0===t.domContentLoadedEventStart||e<t.domContentLoadedEventStart)return \"dom-interactive\";if(0===t.domComplete||e<t.domComplete)return \"dom-content-loaded\"}return \"complete\"},u=function(e){var t=e.nodeName;return 1===e.nodeType?t.toLowerCase():t.toUpperCase().replace(/^#/,\"\")},c=function(e,t){var n=\"\";try{for(;e&&9!==e.nodeType;){var r=e,i=r.id?\"#\"+r.id:u(r)+(r.classList&&r.classList.value&&r.classList.value.trim()&&r.classList.value.trim().length?\".\"+r.classList.value.trim().replace(/\\s+/g,\".\"):\"\");if(n.length+i.length>(t||100)-1)return n||i;if(n=n?i+\">\"+n:i,r.id)break;e=r.parentNode;}}catch(e){}return n},s=-1,f=function(){return s},d=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&(s=t.timeStamp,e(t));}),!0);},l=function(){var e=a();return e&&e.activationStart||0},m=function(e,t){var n=a(),r=\"navigate\";f()>=0?r=\"back-forward-cache\":n&&(document.prerendering||l()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":n.type&&(r=n.type.replace(/_/g,\"-\")));return {name:e,value:void 0===t?-1:t,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:r}},v=function(e,t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var r=new PerformanceObserver((function(e){Promise.resolve().then((function(){t(e.getEntries());}));}));return r.observe(Object.assign({type:e,buffered:!0},n||{})),r}}catch(e){}},p=function(e,t,n,r){var i,a;return function(o){t.value>=0&&(o||r)&&((a=t.value-(i||0))||void 0===i)&&(i=t.value,t.delta=a,t.rating=function(e,t){return e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\"}(t.value,n),e(t));}},h=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}));},g=function(e){var t=function(t){\"pagehide\"!==t.type&&\"hidden\"!==document.visibilityState||e(t);};addEventListener(\"visibilitychange\",t,!0),addEventListener(\"pagehide\",t,!0);},T=function(e){var t=!1;return function(n){t||(e(n),t=!0);}},y=-1,E=function(){return \"hidden\"!==document.visibilityState||document.prerendering?1/0:0},S=function(e){\"hidden\"===document.visibilityState&&y>-1&&(y=\"visibilitychange\"===e.type?e.timeStamp:0,b());},L=function(){addEventListener(\"visibilitychange\",S,!0),addEventListener(\"prerenderingchange\",S,!0);},b=function(){removeEventListener(\"visibilitychange\",S,!0),removeEventListener(\"prerenderingchange\",S,!0);},C=function(){return y<0&&(y=E(),L(),d((function(){setTimeout((function(){y=E(),L();}),0);}))),{get firstHiddenTime(){return y}}},w=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e();},M=[1800,3e3],x=function(e,t){t=t||{},w((function(){var n,r=C(),i=m(\"FCP\"),a=v(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<r.firstHiddenTime&&(i.value=Math.max(e.startTime-l(),0),i.entries.push(e),n(!0)));}));}));a&&(n=p(e,i,M,t.reportAllChanges),d((function(r){i=m(\"FCP\"),n=p(e,i,M,t.reportAllChanges),h((function(){i.value=performance.now()-r.timeStamp,n(!0);}));})));}));},A=[.1,.25],F=function(e,t){!function(e,t){t=t||{},x(T((function(){var n,r=m(\"CLS\",0),i=0,a=[],o=function(e){e.forEach((function(e){if(!e.hadRecentInput){var t=a[0],n=a[a.length-1];i&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(i+=e.value,a.push(e)):(i=e.value,a=[e]);}})),i>r.value&&(r.value=i,r.entries=a,n());},u=v(\"layout-shift\",o);u&&(n=p(e,r,A,t.reportAllChanges),g((function(){o(u.takeRecords()),n(!0);})),d((function(){i=0,r=m(\"CLS\",0),n=p(e,r,A,t.reportAllChanges),h((function(){return n()}));})),setTimeout(n,0));})));}((function(t){!function(e){if(e.entries.length){var t=e.entries.reduce((function(e,t){return e&&e.value>t.value?e:t}));if(t&&t.sources&&t.sources.length){var n=(r=t.sources).find((function(e){return e.node&&1===e.node.nodeType}))||r[0];if(n)return void(e.attribution={largestShiftTarget:c(n.node),largestShiftTime:t.startTime,largestShiftValue:t.value,largestShiftSource:n,largestShiftEntry:t,loadState:o(t.startTime)})}}var r;e.attribution={};}(t),e(t);}),t);},P={passive:!0,capture:!0},B=new Date,D=function(r,i){e||(e=i,t=r,n=new Date,q(removeEventListener),k());},k=function(){if(t>=0&&t<n-B){var i={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};r.forEach((function(e){e(i);})),r=[];}},R=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){D(e,t),i();},r=function(){i();},i=function(){removeEventListener(\"pointerup\",n,P),removeEventListener(\"pointercancel\",r,P);};addEventListener(\"pointerup\",n,P),addEventListener(\"pointercancel\",r,P);}(t,e):D(t,e);}},q=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,R,P)}));},H=[100,300],N=function(n,i){i=i||{},w((function(){var a,o=C(),u=m(\"FID\"),c=function(e){e.startTime<o.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0));},s=function(e){e.forEach(c);},f=v(\"first-input\",s);a=p(n,u,H,i.reportAllChanges),f&&g(T((function(){s(f.takeRecords()),f.disconnect();}))),f&&d((function(){var o;u=m(\"FID\"),a=p(n,u,H,i.reportAllChanges),r=[],t=-1,e=null,q(addEventListener),o=c,r.push(o),k();}));}));},O=function(e,t){N((function(t){!function(e){var t=e.entries[0];e.attribution={eventTarget:c(t.target),eventType:t.name,eventTime:t.startTime,eventEntry:t,loadState:o(t.startTime)};}(t),e(t);}),t);},ee=[2500,4e3],te={},ne=function(e,t){!function(e,t){t=t||{},w((function(){var n,r=C(),i=m(\"LCP\"),a=function(e){var t=e[e.length-1];t&&t.startTime<r.firstHiddenTime&&(i.value=Math.max(t.startTime-l(),0),i.entries=[t],n());},o=v(\"largest-contentful-paint\",a);if(o){n=p(e,i,ee,t.reportAllChanges);var u=T((function(){te[i.id]||(a(o.takeRecords()),o.disconnect(),te[i.id]=!0,n(!0));}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(u,0)}),!0);})),g(u),d((function(r){i=m(\"LCP\"),n=p(e,i,ee,t.reportAllChanges),h((function(){i.value=performance.now()-r.timeStamp,te[i.id]=!0,n(!0);}));}));}}));}((function(t){!function(e){if(e.entries.length){var t=a();if(t){var n=t.activationStart||0,r=e.entries[e.entries.length-1],i=r.url&&performance.getEntriesByType(\"resource\").filter((function(e){return e.name===r.url}))[0],o=Math.max(0,t.responseStart-n),u=Math.max(o,i?(i.requestStart||i.startTime)-n:0),s=Math.max(u,i?i.responseEnd-n:0),f=Math.max(s,r?r.startTime-n:0),d={element:c(r.element),timeToFirstByte:o,resourceLoadDelay:u-o,resourceLoadTime:s-u,elementRenderDelay:f-s,navigationEntry:t,lcpEntry:r};return r.url&&(d.url=r.url),i&&(d.lcpResourceEntry=i),void(e.attribution=d)}}e.attribution={timeToFirstByte:0,resourceLoadDelay:0,resourceLoadTime:0,elementRenderDelay:e.value};}(t),e(t);}),t);};\n\n// 1% of users\nconst defaultSampleRate = 1;\n\nconst dataFromCWV = (metric) => {\n\tif (metric.name === 'LCP') {\n\t\treturn {\n\t\t\tname: metric.name,\n\t\t\tlcp: metric.value,\n\t\t\tlcpDelta: metric.delta,\n\t\t\telement: metric.attribution.largestShiftTarget\n\t\t};\n\t}\n\tif (metric.name === 'FID') {\n\t\treturn {\n\t\t\tname: metric.name,\n\t\t\tfid: metric.value,\n\t\t\tfidDelta: metric.delta,\n\t\t\telement: metric.attribution.eventTarget\n\t\t};\n\t}\n\tif (metric.name === 'CLS') {\n\t\treturn {\n\t\t\tname: metric.name,\n\t\t\tcls: metric.value,\n\t\t\tclsDelta: metric.delta,\n\t\t\telement: metric.attribution.largestShiftTarget\n\t\t};\n\t}\n};\n\nconst realUserMonitoringWithAttribution = ({ sampleRate } = {}) => {\n\tconst broadcastCWV = (data) => {\n\t\t  broadcast('oTracking.event', {\n\t\t\taction: 'performance-attribution',\n\t\t\tcategory: 'page',\n\t\t\t...dataFromCWV(data),\n\t\t});\n\t};\n\n\t// Check browser support.\n\t// @see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming\n\tif (!'PerformanceLongTaskTiming' in window) return;\n\n\tconst spoorId = getSpoorId();\n\tconst proportionToSample = sampleRate || defaultSampleRate;\n\n\t// Gather metrics for only a cohort of users.\n\tif (!seedIsInSample(spoorId, proportionToSample)) return;\n\n\t// Proceed only if the page load event is a \"navigate\".\n\t// @see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type\n\t// When testing, you will need to open a new browser window and paste the URL in i.e. simply reloading the page will not work.\n\tconst navigation = performance.getEntriesByType('navigation') && performance.getEntriesByType('navigation')[0];\n\tif (!navigation || navigation.type !== 'navigate') return;\n\n\tF(broadcastCWV, { reportAllChanges: true });\n\tO(broadcastCWV);\n\tne(broadcastCWV);\n};\n\n// Create markers at each of these percentage points\nconst DEPTH_MARKERS = [25, 50, 75, 100];\n\nconst defaultOptions$1 = {\n\tonScroll: () => {},\n\ttarget: 'body',\n\tdebug: false\n};\n\nclass ScrollDepth {\n\tconstructor (options) {\n\t\tthis.options = { ...defaultOptions$1, ...options };\n\n\t\tthis.init();\n\t}\n\n\tinit () {\n\t\tconst target = document.querySelector(this.options.target);\n\n\t\tif (target && 'IntersectionObserver' in window) {\n\t\t\tthis.observer = new IntersectionObserver(this.handleIntersection.bind(this));\n\n\t\t\ttarget.style.position = 'relative';\n\n\t\t\tDEPTH_MARKERS.forEach((percentage) => {\n\t\t\t\tconst marker = document.createElement('div');\n\t\t\t\tmarker.className = 'n-tracking-scroll-depth-marker';\n\t\t\t\tmarker.style.position = 'absolute';\n\t\t\t\tmarker.style.top = `${percentage}%`;\n\t\t\t\tmarker.style.bottom = '0';\n\t\t\t\tmarker.style.width = '100%';\n\t\t\t\tmarker.style.zIndex = '-1';\n\t\t\t\tmarker.setAttribute('data-scroll-depth', percentage);\n\n\t\t\t\ttarget.appendChild(marker);\n\n\t\t\t\tthis.observer.observe(marker);\n\t\t\t});\n\t\t}\n\t}\n\n\thandleIntersection (changes) {\n\t\tchanges.forEach((change) => {\n\t\t\tif (change.isIntersecting || change.intersectionRatio > 0) {\n\t\t\t\tconst marker = change.target;\n\t\t\t\tconst scrollDepth = marker.getAttribute('data-scroll-depth');\n\n\t\t\t\tthis.options.onScroll(scrollDepth);\n\n\t\t\t\tif (this.options.debug) {\n\t\t\t\t\tconsole.log('ScrollDepth', { marker: scrollDepth }); // eslint-disable-line no-console\n\t\t\t\t}\n\n\t\t\t\tif (marker.parentNode) {\n\t\t\t\t\tmarker.parentNode.removeChild(marker);\n\t\t\t\t}\n\n\t\t\t\tthis.observer.unobserve(marker);\n\t\t\t}\n\t\t});\n\t};\n}\n\n// Automatically stop the attention timer after this time\nconst ATTENTION_INTERVAL = 15000;\n\n// These events re/start the attention timer\nconst ATTENTION_EVENTS = [\n\t'load',\n\t'click',\n\t'focus',\n\t'scroll',\n\t'mousemove',\n\t'touchstart',\n\t'touchend',\n\t'touchcancel',\n\t'touchleave'\n];\n\n// These events pause the attention timer\nconst ATTENTION_LOST_EVENTS = ['blur'];\n\n// These events will trigger the exit callback\nconst PAGE_EXIT_EVENTS = ['beforeunload', 'unload', 'pagehide'];\n\nconst defaultOptions = {\n\tonExit: () => {},\n\tdebug: false\n};\n\nclass AttentionTime {\n\tconstructor (options) {\n\t\tthis.options = { ...defaultOptions, ...options };\n\n\t\tthis.totalAttentionTime = 0;\n\t\tthis.hasExited = false;\n\n\t\tthis.init();\n\t}\n\n\tinit () {\n\t\tATTENTION_EVENTS.forEach((event) => {\n\t\t\twindow.addEventListener(event, this.startAttention.bind(this));\n\t\t});\n\n\t\tATTENTION_LOST_EVENTS.forEach((event) => {\n\t\t\twindow.addEventListener(event, this.endAttention.bind(this));\n\t\t});\n\n\t\tPAGE_EXIT_EVENTS.forEach((event) => {\n\t\t\twindow.addEventListener(event, this.handleExit.bind(this));\n\t\t});\n\n\t\tdocument.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));\n\n\t\tconst videoPlayers = document.querySelectorAll('video');\n\n\t\tvideoPlayers.forEach((element) => {\n\t\t\telement.addEventListener('playing', this.startConstantAttention.bind(this));\n\n\t\t\telement.addEventListener('pause', this.endConstantAttention.bind(this));\n\n\t\t\telement.addEventListener('ended', this.endConstantAttention.bind(this));\n\t\t});\n\t}\n\n\tstartAttention (event) {\n\t\tclearTimeout(this.attentionTimeout);\n\n\t\tif (!this.startAttentionTime) {\n\t\t\tthis.startAttentionTime = Date.now();\n\t\t}\n\n\t\tthis.attentionTimeout = setTimeout(\n\t\t\tthis.endAttention.bind(this, { type: 'timeout' }),\n\t\t\tATTENTION_INTERVAL\n\t\t);\n\n\t\tif (this.options.debug) {\n\t\t\tconsole.log('AttentionTime start', { event: event.type }); // eslint-disable-line no-console\n\t\t}\n\t}\n\n\tendAttention (event) {\n\t\tif (this.startAttentionTime) {\n\t\t\tclearTimeout(this.attentionTimeout);\n\n\t\t\tthis.totalAttentionTime = this.getAttentionTime();\n\t\t\tthis.startAttentionTime = null;\n\t\t}\n\n\t\tif (this.options.debug) {\n\t\t\tconsole.log('AttentionTime end', { event: event.type, time: this.totalAttentionTime }); // eslint-disable-line no-console\n\t\t}\n\t}\n\n\tstartConstantAttention () {\n\t\tthis.constantAttentionInterval = setInterval(\n\t\t\tthis.startAttention.bind(this),\n\t\t\tATTENTION_INTERVAL\n\t\t);\n\t}\n\n\tendConstantAttention (event) {\n\t\tthis.endAttention(event);\n\t\tclearInterval(this.constantAttentionInterval);\n\t}\n\n\tgetAttentionTime () {\n\t\tlet currentAttentionTime = 0;\n\n\t\tif (this.startAttentionTime) {\n\t\t\tcurrentAttentionTime = Math.round(\n\t\t\t\t(Date.now() - this.startAttentionTime) / 1000\n\t\t\t);\n\t\t}\n\n\t\treturn this.totalAttentionTime + currentAttentionTime;\n\t}\n\n\thandleVisibilityChange (event) {\n\t\tif (document.visibilityState === 'hidden') {\n\t\t\tthis.endAttention(event);\n\t\t} else {\n\t\t\tthis.startAttention(event);\n\t\t}\n\t}\n\n\thandleExit (event) {\n\t\tif (this.hasExited) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.endAttention(event);\n\n\t\tif (this.options.debug) {\n\t\t\tconsole.log('AttentionTime', { event: event.type, time: this.totalAttentionTime }); // eslint-disable-line no-console\n\t\t}\n\n\t\tthis.options.onExit(this.totalAttentionTime);\n\n\t\tthis.hasExited = true;\n\t}\n}\n\n// TODO: The tracking event data for the `page:interaction` and `page:scrolldepth`\n// events is needlessly different. We should work with the data team to align it.\nconst pageAttention = (options = {}) => {\n\tconst onExit = (attentionTime) => {\n\t\tbroadcast('oTracking.event', {\n\t\t\tcategory: 'page',\n\t\t\taction: 'interaction',\n\t\t\tcontext: {\n\t\t\t\tattention: {\n\t\t\t\t\ttotal: attentionTime\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tconst attention = new AttentionTime({ ...options, onExit });\n\n\tconst onScroll = (scrollDepth) => {\n\t\tbroadcast('oTracking.event', {\n\t\t\tcategory: 'page',\n\t\t\taction: 'scrolldepth',\n\t\t\tmeta: {\n\t\t\t\tpercentagesViewed: scrollDepth,\n\t\t\t\tattention: attention.getAttentionTime()\n\t\t\t}\n\t\t});\n\t};\n\n\tnew ScrollDepth({ ...options, onScroll });\n};\n\nconst MAX_LENGTH = 100;\n\nconst TRUNCATED_TEXT = ' … ';\n\nvar getTextExcerpt = (text) => {\n\tif (text.length > MAX_LENGTH) {\n\t\tconst newLength = MAX_LENGTH - TRUNCATED_TEXT.length;\n\t\tconst left = Math.floor(newLength / 2);\n\t\tconst right = Math.ceil(newLength / 2);\n\n\t\treturn text.substr(0, left) + TRUNCATED_TEXT + text.substr(right * -1);\n\t} else {\n\t\treturn text;\n\t}\n};\n\nconst textCopying = () => {\n\tdocument.addEventListener('copy', (event) => {\n\t\tconst context = {\n\t\t\tnodeName: event.target.nodeName.toLowerCase()\n\t\t};\n\n\t\tif (window.getSelection) {\n\t\t\tconst selection = window.getSelection().toString().trim();\n\n\t\t\tcontext.characters = selection.length;\n\t\t\tcontext.words = selection.split(/\\s+/).length;\n\t\t\tcontext.selection = getTextExcerpt(selection);\n\t\t}\n\n\t\tbroadcast('oTracking.event', {\n\t\t\taction: 'copy',\n\t\t\tcategory: 'text',\n\t\t\tcontext\n\t\t});\n\t});\n};\n\nvar index = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\trealUserMonitoringForPerformance: realUserMonitoringForPerformance,\n\trealUserMonitoringWithAttribution: realUserMonitoringWithAttribution,\n\tpageAttention: pageAttention,\n\ttextCopying: textCopying\n});\n\nconst SPOOR_API_INGEST_URL = 'https://spoor-api.ft.com/ingest';\n\nfunction init ({ appContext, extraContext, pageViewContext }) {\n\tconst queryParams = getQueryParams();\n\n\tconst options = {\n\t\tserver: SPOOR_API_INGEST_URL,\n\t\t// This data will be appended to _all_ events captured by o-tracking\n\t\tcontext: transformContextData({\n\t\t\t...queryParams,\n\t\t\t...appContext,\n\t\t\t...extraContext,\n\t\t}),\n\t\tuser: getUserData(),\n\t\t// Using the Beacon API ensures that no tracking event data is lost\n\t\t// when the document is being unloaded, which happens when navigating\n\t\t// to a different page.\n\t\tuseSendBeacon: true\n\t};\n\n\toTracking.init(options);\n\n\t// Automatically trigger the page view event unless we're in an iframe\n\tif (window === window.top || window.location.hostname === 'errors-next.ft.com') {\n\t\tconst errorPageParams = getErrorPageParams();\n\n\t\tconst pageViewEventParams = {\n\t\t\t...errorPageParams,\n\t\t\t...pageViewContext,\n\t\t};\n\n\t\tgetConsentData()\n\t\t\t.then((consents) => {\n\t\t\t\toTracking.page({\n\t\t\t\t\t...pageViewEventParams,\n\t\t\t\t\tconsents,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn('Could not get consent data', err);\n\t\t\t\toTracking.page(pageViewEventParams);\n\t\t\t});\n\t}\n\n\t//  Initialise click event tracking for interactive elements\n\toTracking.click.init('cta');\n\n\tif (window.oTracking) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn('An oTracking instance already exists on window, skipping', { currentInstance: window.oTracking, ourInstance: oTracking });\n\t} else {\n\t\twindow.oTracking = oTracking;\n\t}\n\n\treturn oTracking;\n}\n\nexport { SPOOR_API_INGEST_URL, broadcast, init, index as trackers };\n","/**\n * Shared 'internal' scope.\n */\nimport {get} from './core/settings.js';\n\n/**\n * CUID Generator\n */\nimport {api as cuid} from '../libs/browser-cuid.js';\n\n/**\n * Record of callbacks to call when a page is tracked.\n */\nconst page_callbacks = [];\n\n/**\n * Log messages to the browser console. Requires 'log' to be set on init.\n *\n * @param {*} args items to log\n * @returns {void}\n */\nfunction log(...args) {\n\tif (get('config').test && window.console) {\n\t\tfor (const arg of args) {\n\t\t\twindow.console.log(arg);\n\t\t}\n\t}\n}\n\n/**\n * Tests if variable is a certain type. Defaults to check for undefined if no type specified.\n *\n * @param {*} variable - The variable to check.\n * @param {string=} type - The type to test for. Defaults to undefined.\n *\n * @returns {boolean} - The answer for if the variable is of type.\n */\nfunction is(variable, type = 'undefined') {\n\treturn typeof variable === type;\n}\n\n/**\n * Merge objects together. Will remove undefined and null values.\n *\n * @param {object} target - The original object to merge in to.\n * @param {object} options - The object to merge into the target. If omitted, will merge target into a new empty Object.\n *\n * @returns {object} The merged object.\n */\nfunction merge(target, options) {\n\tif (!options) {\n\t\toptions = target;\n\t\ttarget = {};\n\t}\n\n\tlet name;\n\tlet src;\n\tlet copy;\n\n\t/* jshint -W089 */\n\t/* eslint guard-for-in: 0 */\n\tfor (name in options) {\n\t\tsrc = target[name];\n\t\tcopy = options[name];\n\n\t\t// Prevent never-ending loop\n\t\tif (target === copy) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Gets rid of missing values too\n\t\tif (typeof copy !== 'undefined' && copy !== null) {\n\t\t\ttarget[name] = src === Object(src) && !is(src, 'function') ? merge(src, copy) : copy;\n\t\t}\n\t}\n\t/* jshint +W089 */\n\t/* jslint forin:true */\n\n\treturn target;\n}\n\n/**\n * URL encode a string.\n *\n * @param {string} str - The string to be encoded.\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n\tif (window.encodeURIComponent) {\n\t\treturn window.encodeURIComponent(str);\n\t} else {\n\t\treturn window.escape(str);\n\t}\n}\n\n/**\n * URL decode a string.\n *\n * @param {string} str - The string to be decoded.\n * @returns {string} The decoded string.\n */\nfunction decode(str) {\n\tif (window.decodeURIComponent) {\n\t\treturn window.decodeURIComponent(str);\n\t} else {\n\t\treturn window.unescape(str);\n\t}\n}\n\n/**\n * Utility to add event listeners.\n *\n * @param {Element} element\n * @param {string} event\n * @param {EventListenerOrEventListenerObject} listener\n * @returns {void}\n */\nfunction addEvent(element, event, listener) {\n\tif (element.addEventListener) {\n\t\telement.addEventListener(event, listener, false);\n\t} else {\n\t\telement.attachEvent('on' + event, listener);\n\t}\n}\n\n/**\n * Utility for dispatching custom events from window\n *\n * @param {string} namespace\n * @param {string} eventType\n * @param {object} detail\n * @returns {void}\n */\nfunction broadcast(namespace, eventType, detail) {\n\tdetail = detail || {};\n\ttry {\n\t\twindow.dispatchEvent(new CustomEvent(namespace + '.' + eventType, {\n\t\t\tdetail: detail,\n\t\t\tbubbles: true\n\t\t}));\n\t} catch (error) {\n\t\t// empty\n\t}\n}\n\n/**\n * Listen for page tracking requests.\n *\n * @param {Function} cb - The callback to be called whenever a page is tracked.\n * @returns {void}\n */\nfunction onPage(cb) {\n\tif (is(cb, 'function') && !page_callbacks.includes(cb)) {\n\t\tpage_callbacks.push(cb);\n\t}\n}\n\n/**\n * Trigger the 'page' listeners.\n *\n * @returns {void}\n */\nfunction triggerPage() {\n\tfor (let i = 0; i < page_callbacks.length; i++) {\n\t\tpage_callbacks[i]();\n\t}\n}\n\n/**\n * Get a value from document.cookie matching the first match of the regexp you supply\n *\n * @param {RegExp} matcher - The Regex to match with\n * @returns {string} - The vale from the cookie\n */\nfunction getValueFromCookie(matcher) {\n\treturn document.cookie.match(matcher) && RegExp.$1 !== '' && RegExp.$1 !== 'null' ? RegExp.$1 : null;\n}\n\n/**\n * Filter an object to only have the properties which are listed in the `allowlist` parameter.\n *\n * @param {object} objectToFilter - An object whose props need to be filtered\n * @param {Array} allowedPropertyNames - The list of props to allow\n * @returns {object} An object containing only the allowed props\n */\nfunction filterProperties (objectToFilter, allowedPropertyNames) {\n\tconst filteredObject = {};\n\tfor (const allowedName of allowedPropertyNames) {\n\t\tif (objectToFilter[allowedName]) {\n\t\t\tfilteredObject[allowedName] = objectToFilter[allowedName];\n\t\t}\n\t}\n\treturn filteredObject;\n}\n\n/**\n * Trim strings\n *\n * @param {string} str - The string to trim.\n * @returns {string} The trimmed string.\n */\nfunction sanitise (str) {\n\treturn typeof str === 'string' ? str.trim() : str;\n}\n\n/**\n * Assign the subject value if the target properties are undefined\n *\n * @param {object} subject - assign the value\n * @param {object} target - be assigned the value\n * @returns {void}\n */\nfunction assignIfUndefined (subject, target) {\n\tfor (const prop in subject) {\n\t\tif (!target[prop]) {\n\t\t\ttarget[prop] = subject[prop];\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`You can't set a custom property called ${prop}`);\n\t\t}\n\t}\n}\n\n/**\n * Used to find out all the paths which contain a circular reference.\n *\n * @param {*} rootObject The object we want to search within for circular references\n * @returns {string[]} Returns an array of strings, the strings are the full paths to the circular references within the rootObject\n */\nfunction findCircularPathsIn(rootObject) {\n\tconst traversedValues = new WeakSet();\n\tconst circularPaths = [];\n\n\tfunction _findCircularPathsIn(currentObject, path) {\n\t\t// If we already saw this object\n\t\t// the rootObject contains a circular reference\n\t\t// and we can stop looking any further into this currentObj\n\t\tif (traversedValues.has(currentObject)) {\n\t\t\tcircularPaths.push(path);\n\t\t\treturn;\n\t\t}\n\n\t\t// Only Objects and things which inherit from Objects can contain circular references\n\t\t// I.E. string/number/boolean/template literals can not contain circular references\n\t\tif (currentObject instanceof Object) {\n\t\t\ttraversedValues.add(currentObject);\n\n\t\t\t// Loop through all the values of the current object and search those for circular references\n\t\t\tfor (const [key, value] of Object.entries(currentObject)) {\n\t\t\t\t// No need to recurse on every value because only things which inherit\n\t\t\t\t// from Objects can contain circular references\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tconst parentObjectIsAnArray = Array.isArray(currentObject);\n\t\t\t\t\tif (parentObjectIsAnArray) {\n\t\t\t\t\t// Store path in bracket notation when value is an array\n\t\t\t\t\t\t_findCircularPathsIn(value, `${path}[${key}]`);\n\t\t\t\t\t} else {\n\t\t\t\t\t// Store path in dot-notation when value is an object\n\t\t\t\t\t\t_findCircularPathsIn(value, `${path}.${key}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t_findCircularPathsIn(rootObject, \"\");\n\treturn circularPaths;\n}\n\n/**\n * Used to find out whether an object contains a circular reference.\n *\n * @param {object} rootObject The object we want to search within for circular references\n * @returns {boolean} Returns true if a circular reference was found, otherwise returns false\n */\nfunction containsCircularPaths(rootObject) {\n\t// Used to keep track of all the values the rootObject contains\n\tconst traversedValues = new WeakSet();\n\n\t/**\n\t *\n\t * @param {*} currentObject The current object we want to search within for circular references\n\t * @returns {boolean|undefined} Returns true if a circular reference was found, otherwise returns undefined\n\t */\n\tfunction _containsCircularPaths(currentObject) {\n\t\t// If we already saw this object\n\t\t// the rootObject contains a circular reference\n\t\t// and we can stop looking any further\n\t\tif (traversedValues.has(currentObject)) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Only Objects and things which inherit from Objects can contain circular references\n\t\t// I.E. string/number/boolean/template literals can not contain circular references\n\t\tif (currentObject instanceof Object) {\n\t\t\ttraversedValues.add(currentObject);\n\t\t\t// Loop through all the values of the current object and search those for circular references\n\t\t\tfor (const value of Object.values(currentObject)) {\n\t\t\t\t// No need to recurse on every value because only things which inherit\n\t\t\t\t// from Objects can contain circular references\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tif (_containsCircularPaths(value)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// _containsCircularPaths returns true or undefined.\n\t// By using Boolean we convert the undefined into false.\n\treturn Boolean(\n\t\t_containsCircularPaths(\n\t\t\trootObject\n\t\t)\n\t);\n}\n\n/**\n * Find out whether two objects are deeply equal to each other.\n *\n * @param {*} a\n * @param {*} b\n * @returns {boolean} - true if the two arguments are deeply equal\n */\nfunction isDeepEqual(a, b) {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\ta &&\n\t\tb &&\n\t\ttypeof a === \"object\" &&\n\t\ttypeof b === \"object\"\n\t) {\n\t\tif (a.constructor !== b.constructor) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (Array.isArray(a)) {\n\t\t\tconst length = a.length;\n\t\t\tif (length !== b.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = length; i-- !== 0; ) {\n\t\t\t\tif (!isDeepEqual(a[i], b[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (a.constructor === RegExp) {\n\t\t\treturn (\n\t\t\t\ta.source === b.source && a.flags === b.flags\n\t\t\t);\n\t\t}\n\t\tif (a.valueOf !== Object.prototype.valueOf) {\n\t\t\treturn a.valueOf() === b.valueOf();\n\t\t}\n\t\tif (a.toString !== Object.prototype.toString) {\n\t\t\treturn a.toString() === b.toString();\n\t\t}\n\n\t\tconst keys = Object.keys(a);\n\t\tconst length = keys.length;\n\t\tif (length !== Object.keys(b).length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let i = length; i-- !== 0; ) {\n\t\t\tif (!Object.prototype.hasOwnProperty.call(b, keys[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = length; i-- !== 0; ) {\n\t\t\tconst key = keys[i];\n\n\t\t\tif (!isDeepEqual(a[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\nexport {\n\tlog,\n\tis,\n\tis as isUndefined,\n\tmerge,\n\tencode,\n\tdecode,\n\tcuid as guid,\n\taddEvent,\n\tbroadcast,\n\tonPage,\n\ttriggerPage,\n\tgetValueFromCookie,\n\tsanitise,\n\tassignIfUndefined,\n\tfilterProperties,\n\tfindCircularPathsIn,\n\tcontainsCircularPaths,\n\tisDeepEqual\n};\n","\nconst settings = {config:{}};\n\n/**\n * Very basic implementation of deep clone, and only supports simple POJO objects and\n * native arrays.\n *\n * @param  {*} value Any value\n * @returns {*}       Copy of value\n * @private\n */\nfunction clone(value) {\n\tif (value === undefined) {\n\t\treturn value;\n\t}\n\tswitch (Object.prototype.toString.call(value)) {\n\t\tcase '[object Object]':\n\t\t\treturn JSON.parse(JSON.stringify(value));\n\t\tcase '[object Array]':\n\t\t\treturn [].slice.call(value);\n\t\tdefault:\n\t\t\treturn value;\n\t}\n}\n\n/**\n * Saves a value. Stores a copy rather than a reference, to avoid mutations leaking.\n *\n * @param {string} key - The key to use to store the object\n * @param {*} value - The value\n * @returns {void}\n */\nfunction setValue(key, value) {\n\tsettings[key] = clone(value);\n}\n\n/**\n * Retrieves a value from the settings object. Returns a copy rather than reference, to\n * avoid mutations leaking.\n *\n * @param {string} key - The key to get\n * @returns {*} - The setting.\n */\nfunction getValue(key) {\n\treturn clone(settings[key]);\n}\n\n/**\n * Deletes a value\n *\n * @param  {string} key - The key to delete\n * @returns {void}\n */\nfunction destroy(key) {\n\tdelete settings[key];\n}\nconst set = setValue;\nconst get = getValue;\n\nexport {\n\tset,\n\tget,\n\tdestroy\n};\n","import {addAndRun} from './core/send.js';\nimport { userID } from './core/user.js';\nimport { session } from './core/session.js';\nimport { get } from './core/settings.js';\nimport { guid, getValueFromCookie, merge, log } from './utils.js';\n\nlet rootID;\n\n/**\n * Generate and store a new rootID, used to mark a new root event that\n * subsequent events will be linked to.\n *\n * @returns {string|*} The rootID.\n */\nfunction setRootID() {\n\trootID = guid();\n\treturn rootID;\n}\n\n/**\n * Get the current rootID.\n *\n * @returns {string|*} The rootID.\n */\nfunction getRootID() {\n\tif (!rootID) {\n\t\tsetRootID();\n\t}\n\n\treturn rootID;\n}\n\n/**\n * Make a tracking request.\n *\n * @param {object} config - Should be passed an object containing a format and the values for that format\n * @param {Function} [callback] - Fired when the request has been made.\n *\n * @returns {object} request\n */\nfunction track(config, callback = function(){ /* empty */}) {\n\tconst currentSession = session();\n\n\t// Set up the base request object with some values which should always be sent.\n\tconst request = {\n\t\tcallback,\n\t\tcontext: {\n\t\t\tid: config.id || guid(), // Use a supplied id or generate one for this request\n\t\t\troot_id: getRootID(),\n\t\t},\n\t\tuser: {\n\t\t\tft_session: getValueFromCookie(/FTSession=([^;]+)/),\n\t\t\tft_session_s: getValueFromCookie(/FTSession_s=([^;]+)/)\n\t\t},\n\t\tdevice: {\n\t\t\tspoor_session: currentSession.id,\n\t\t\tspoor_session_is_new: currentSession.isNew,\n\t\t\tspoor_id: userID(),\n\t\t},\n\t};\n\n\t// Override any context, user, and device values with object-wide settings\n\tconst settingsConfig = get('config') || {};\n\tif (settingsConfig.context) {\n\t\tmerge(request.context, settingsConfig.context);\n\t}\n\tif (settingsConfig.user) {\n\t\tmerge(request.user, settingsConfig.user);\n\t}\n\tif (settingsConfig.device) {\n\t\tmerge(request.device, settingsConfig.device);\n\t}\n\n\t// Update the base config with the parameter-supplied config\n\tmerge(request, config);\n\n\tlog('Core.Track', request);\n\n\t// Send it.\n\taddAndRun(request);\n\n\treturn request;\n}\n\nexport default {\n\tsetRootID,\n\tgetRootID,\n\ttrack\n};\n","import {broadcast, containsCircularPaths, decode, encode, findCircularPathsIn, is} from '../utils.js';\n\n/**\n * Class for storing data\n * Will choose the 'best' storage method available. Can also specify a type of storage.\n *\n * @class  Store\n * @param {string} name - The name of the store\n * @param {object} config - Optional, config object for extra configuration\n * @param {string} [config.nameOverride] - The internal name for the store\n * @param {string} [config.domain] - The domain that should be used to store cookies on\n */\nconst Store = function (name, config = {}) {\n\n\t/**\n\t * Internal Storage key prefix.\n\t */\n\tconst keyPrefix = 'o-tracking';\n\n\n\tif (typeof name !== 'string' || name === '') {\n\t\tconst undefinedName = new Error('You must specify a name for the store.');\n\t\tbroadcast('oErrors', 'log', {\n\t\t\terror: undefinedName.message,\n\t\t\tinfo: { module: 'o-tracking' }\n\t\t});\n\t\tthrow undefinedName;\n\t}\n\n\tthis.config = Object.assign({}, config);\n\n\t/**\n\t * Store data.\n\t */\n\tthis.data = null;\n\n\t/**\n\t * The key/name of this store.\n\t */\n\tthis.storageKey = this.config.nameOverride ? this.config.nameOverride : [keyPrefix, name].join('_');\n\n\t/**\n\t * The storage method to use.\n\t *\n\t * @type {object}\n\t */\n\tthis.storage = {\n\t\t_type: 'localStorage',\n\t\tload: function (name) {\n\t\t\treturn window.localStorage.getItem(name);\n\t\t},\n\t\tsave: function (name, value) {\n\t\t\treturn window.localStorage.setItem(name, value);\n\t\t},\n\t\tremove: function (name) {\n\t\t\t// We attempt to remove the item from the old cookie storage\n\t\t\t// because otherwise the next time o-tracking is initialised for\n\t\t\t// this user, it will import the old value which was meant to\n\t\t\t// have been removed.\n\t\t\tcookieRemove(name);\n\t\t\treturn window.localStorage.removeItem(name);\n\t\t}\n\t};\n\n\tfunction cookieLoad(name) {\n\t\tname = name + '=';\n\n\t\tconst cookies = window.document.cookie.split(';');\n\t\tlet i;\n\t\tlet cookie;\n\n\t\tfor (i = 0; i < cookies.length; i = i + 1) {\n\t\t\tcookie = cookies[i].replace(/^\\s+|\\s+$/g, '');\n\t\t\tif (cookie.indexOf(name) === 0) {\n\t\t\t\treturn decode(cookie.substring(name.length, cookie.length));\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction cookieSave(name, value, expiry) {\n\t\tlet d;\n\t\tlet expires = '';\n\n\t\tif (is(expiry, 'number')) {\n\t\t\td = new Date();\n\t\t\td.setTime(d.getTime() + expiry);\n\t\t\texpires = 'expires=' + d.toUTCString() + ';';\n\t\t}\n\n\t\tconst cookie = encode(name) + '=' + encode(value) + ';' + expires + 'path=/;' + (config.domain ? 'domain=.' + config.domain + ';' : '');\n\t\twindow.document.cookie = cookie;\n\t}\n\n\tfunction cookieRemove(name) {\n\t\tcookieSave(name, '', -1);\n\t}\n\n\t/**\n\t * Temporary var containing data from a previously saved store.\n\t *\n\t * @property {string|undefined} loadStore - JSON string of the previously saved store or undefined.\n\t */\n\t// Retrieve any previous store with the same name.\n\tconst loadStore = this.storage.load(this.storageKey);\n\tif (loadStore) {\n\t\ttry {\n\t\t\tthis.data = JSON.parse(loadStore);\n\t\t} catch (error) {\n\t\t\tbroadcast('oErrors', 'log', {\n\t\t\t\terror: error.message,\n\t\t\t\tmodule: 'o-tracking'\n\t\t\t});\n\t\t\tthis.data = loadStore;\n\t\t}\n\t}\n\n\t// If the user has previous data stored in the old cookie storage system\n\t// import the data into the new storage system and remove them from the cookie.\n\tconst oldCookieStoreData = cookieLoad(this.storageKey);\n\tif (oldCookieStoreData) {\n\t\ttry {\n\t\t\tif (this.storageKey === 'spoor-id') {\n\t\t\t\t// spoor-id is stored directly as a string and not as an object\n\t\t\t\tthis.data = oldCookieStoreData;\n\t\t\t} else {\n\t\t\t\tconst data = JSON.parse(oldCookieStoreData);\n\t\t\t\tif (this.data) {\n\t\t\t\t\tObject.assign(this.data, data);\n\t\t\t\t} else {\n\t\t\t\t\tthis.data = data;\n\t\t\t\t}\n\t\t\t\tfor (const name of Object.keys(data)) {\n\t\t\t\t\tif (name !== 'spoor-id') {\n\t\t\t\t\t\tcookieRemove(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tbroadcast('oErrors', 'log', {\n\t\t\t\terror: error.message,\n\t\t\t\tmodule: 'o-tracking'\n\t\t\t});\n\t\t\tthis.data = loadStore;\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Get/Read the current data.\n *\n * @returns {object} Returns the data from the store.\n */\nStore.prototype.read = function () {\n\treturn this.data;\n};\n\n/**\n * Write the supplied data to the store.\n *\n * @param {string} data - The data to write.\n * @returns {Store} - The instance of the store\n */\nStore.prototype.write = function (data) {\n\t// Set this.data, in-case we're on a file:// domain and can't set cookies.\n\tthis.data = data;\n\tlet value;\n\n\tif (typeof this.data === 'string') {\n\t\tvalue = this.data;\n\t} else {\n\t\tif (containsCircularPaths(this.data)) {\n\t\t\tconst errorMessage = \"o-tracking does not support circular references in the analytics data.\\n\" +\n\t\t\t\"Please remove the circular references in the data.\\n\" +\n\t\t\t\"Here are the paths in the data which are circular:\\n\" +\n\t\t\tJSON.stringify(findCircularPathsIn(this.data), undefined, 4);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t\tvalue = JSON.stringify(this.data);\n\t}\n\n\tthis.storage.save(this.storageKey, value);\n\n\treturn this;\n};\n\n/**\n * Delete the current data.\n *\n * @returns {Store} - The instance of the store\n */\nStore.prototype.destroy = function () {\n\tthis.data = null;\n\tthis.storage.remove(this.storageKey);\n\treturn this;\n};\n\nexport { Store };\n","import {guid} from '../utils.js';\nimport {Store} from './store.js';\n\nlet userID;\nlet store;\n\n/**\n * Init\n *\n * @param {string} value The value of a userID to use if one is not stored\n * @param {string} cookieDomain The domain that should be used to cookie te user\n * @returns {string} - The user ID if present, or a generated UID if not\n */\nfunction init(value, cookieDomain) {\n\tconst defaultUserConfig = {\n\t\tstorage: 'cookie',\n\t\tname: 'spoor-id',\n\t\tnameOverride: 'spoor-id',\n\t\tvalue: null,\n\n\t\t// Set the store cookie domain to .ft.com for ft.com and all its subdomains\n\t\tdomain: location.hostname.match(/^(?:.+\\.)?ft\\.com$/) ? 'ft.com' : null,\n\t};\n\tif ( cookieDomain ) {\n\t\tdefaultUserConfig.domain = cookieDomain;\n\t}\n\n\tstore = new Store(defaultUserConfig.name, defaultUserConfig);\n\tlet id = store.read();\n\n\tif (!id) {\n\t\tid = value;\n\t}\n\n\treturn setUser(id); // Refresh cookies and update state\n}\n\n/**\n * setUser\n *\n * @param {string} id The userID to set.\n * @returns {string} - The user ID if present, or a generated UID if not\n */\nfunction setUser(id) {\n\tuserID = id;\n\n\tif (!userID) {\n\t\tuserID = guid();\n\t}\n\n\tstore.write(userID); // Refreshes the cookie...\n\n\treturn userID;\n}\n\n/**\n * Delete the current user data.\n *\n * @returns {void}\n */\nfunction destroy() {\n\tstore.destroy();\n}\n\n/**\n * Get the user ID\n *\n * @returns {string} - The user ID\n */\nfunction id() {\n\treturn userID;\n}\n\nexport {\n\tinit,\n\tsetUser,\n\tid as userID,\n\tdestroy\n};\n","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\nlet c = 0;\nconst blockSize = 4;\nconst base = 36;\nconst discreteValues = Math.pow(base, blockSize);\n\nconst pad = function pad(num, size) {\n\tconst s = \"000000000\" + num;\n\treturn s.substr(s.length-size);\n};\n\nconst randomBlock = function randomBlock() {\n\treturn pad((Math.random() *\n\t\tdiscreteValues << 0)\n\t\t.toString(base), blockSize);\n};\n\nconst safeCounter = () => {\n\tc = c < discreteValues ? c : 0;\n\tc++; // this is not subliminal\n\treturn c - 1;\n};\n\nconst api = function cuid() {\n\t// Starting with a lowercase letter makes\n\t// it HTML element ID friendly.\n\t// hard-coded allows for sequential access\n\tconst letter = 'c';\n\n\t// timestamp\n\t// warning: this exposes the exact date and time\n\t// that the uid was created.\n\tconst timestamp = new Date().getTime().toString(base);\n\n\n\t// A few chars to generate distinct ids for different\n\t// clients (so different computers are far less\n\t// likely to generate the same id)\n\tconst fingerprint = api.fingerprint();\n\n\t// Grab some more chars from Math.random()\n\tconst random = randomBlock() + randomBlock();\n\n\t// Prevent same-machine collisions.\n\tconst counter = pad(safeCounter().toString(base), blockSize);\n\n\treturn letter + timestamp + counter + fingerprint + random;\n};\n\napi.slug = function slug() {\n\tconst date = new Date().getTime().toString(36);\n\n\tconst print = api.fingerprint().slice(0,1) +\n\t\tapi.fingerprint().slice(-1);\n\n\tconst random = randomBlock().slice(-2);\n\n\tconst counter = safeCounter().toString(36).slice(-4);\n\n\treturn date.slice(-2) +\n\t\tcounter + print + random;\n};\n\napi.globalCount = function globalCount() {\n\t// We want to cache the results of this\n\tconst cache = (function calc() {\n\t\tlet count = 0;\n\n\t\tfor (const i in window) { // eslint-disable-line no-unused-vars, guard-for-in\n\t\t\tcount++;\n\t\t}\n\n\t\treturn count;\n\t}());\n\n\tapi.globalCount = () => cache;\n\treturn cache;\n};\n\napi.fingerprint = function browserPrint() {\n\treturn pad((navigator.mimeTypes.length +\n\t\tnavigator.userAgent.length).toString(36) +\n\t\tapi.globalCount().toString(36), 4);\n};\n\nexport { api };\n","import {is, merge, isUndefined, guid} from '../utils.js';\nimport {Store} from './store.js';\n\n/**\n * @typedef {object} Session\n * @property {string} id - The id of the session\n * @property {boolean} isNew - Whether it is a brand new session\n */\n\nlet store;\nconst defaultSessionConfig = {\n\tstorage: 'best',\n\tname: 'session',\n\texpires: 30 * 60 * 1000 // 30 minutes\n};\n\n/**\n * Set the session in the store.\n *\n * @param {string} session - The session to be stored.\n * @returns {void}\n */\nfunction setSession(session) {\n\tconst d = new Date();\n\td.setTime(d.getTime() + store.config.expires);\n\n\tstore.write({\n\t\tvalue: session,\n\t\texpiry: d.valueOf()\n\t});\n}\n\n/**\n * Get the session from the store. Expiry and gen of a new session are handled here.\n *\n * @returns {Session} the current session\n */\nfunction getSession() {\n\tconst s = store.read();\n\tlet session;\n\tlet isNew = false;\n\n\tif (s) {\n\t\tconst d = new Date().valueOf();\n\t\tconst exp = parseInt(s.expiry, 10);\n\n\t\t// If current session is active.\n\t\tif (exp >= d) {\n\t\t\tsession = s.value;\n\t\t}\n\t}\n\n\t// No active session, gen a new one.\n\tif (!session) {\n\t\tsession = guid();\n\t\tisNew = true;\n\t}\n\n\t// Refreshes the cookie...\n\tsetSession(session);\n\n\treturn {\n\t\tid: session,\n\t\tisNew: isNew\n\t};\n}\n\n/**\n * Init\n *\n * @param {string|object} [config] The name used to store the session or configuration object.\n * @returns {Session} - The session\n */\nfunction init(config) {\n\tif (is(config, 'string')) {\n\t\tconfig = { name: config };\n\t}\n\n\tif (isUndefined(config)) {\n\t\tconfig = {};\n\t}\n\n\tconst c = merge(defaultSessionConfig, config);\n\n\t// config.name is important here, means the user has specifically asked for a cookie name.\n\tif (c.storage === 'cookie' && config.name) {\n\t\tc.nameOverride = c.name;\n\t}\n\n\tstore = new Store(c.name, c);\n\n\treturn getSession();\n}\n\nexport { getSession as session, init };\n","import {get as getSetting} from './settings.js';\nimport {broadcast, is, findCircularPathsIn, containsCircularPaths, merge, addEvent, log} from '../utils.js';\nimport {Queue} from './queue.js';\nimport {get as getTransport} from './transports/index.js';\n\n/**\n * Queue queue.\n *\n * @type {Queue}\n */\nlet queue;\n\n/**\n * Consistent check to see if we should use sendBeacon or not.\n *\n * @returns {boolean} Should we use sendBeacon?\n */\nfunction should_use_sendBeacon() {\n\tlet config = getSetting('config') || {};\n\tif (config.queue === true) {\n\t\treturn false;\n\t} else {\n\t\treturn Boolean(navigator.sendBeacon);\n\t}\n}\n\n/**\n * Attempts to send a tracking request.\n *\n * @param {object} request The request to be sent.\n * @param {Function=} callback Callback to fire the next item in the queue.\n * @returns {void}\n */\nfunction sendRequest(request, callback) {\n\tconst queueTime = request.queueTime;\n\tconst offlineLag = new Date().getTime() - queueTime;\n\n\tconst transport = should_use_sendBeacon() ? getTransport('sendBeacon')() :\n\t\twindow.XMLHttpRequest && 'withCredentials' in new window.XMLHttpRequest() ? getTransport('xhr')() :\n\t\t\tgetTransport('image')();\n\tconst user_callback = request.callback;\n\n\tconst core_system = getSetting('config') && getSetting('config').system || {};\n\tconst system = merge(core_system, {\n\t\tversion: getSetting('version'), // Version of the tracking client e.g. '1.2'\n\t\tsource: getSetting('source'), // Source of the tracking client e.g. 'o-tracking'\n\t\ttransport: transport.name, // The transport method used.\n\t});\n\n\tif (getSetting('config').test || getSetting('config').test_data) {\n\t\tsystem.is_live = false;\n\t} else {\n\t\tsystem.is_live = true;\n\t}\n\n\n\trequest = merge({ system: system }, request);\n\n\t// Only bothered about offlineLag if it's longer than a second, but less than 12 months. (Especially as Date can be dodgy)\n\tif (offlineLag > 1000 && offlineLag < 12 * 30 * 24 * 60 * 60 * 1000) {\n\t\trequest.time = request.time || {};\n\t\trequest.time.offset = offlineLag;\n\t}\n\tdelete request.callback;\n\tdelete request.type;\n\tdelete request.queueTime;\n\n\tlog('user_callback', user_callback);\n\tlog('PreSend', request);\n\n\tif (containsCircularPaths(request)) {\n\t\tconst errorMessage = \"o-tracking does not support circular references in the analytics data.\\n\" +\n\t\t\"Please remove the circular references in the data.\\n\" +\n\t\t\"Here are the paths in the data which are circular:\\n\" +\n\t\tJSON.stringify(findCircularPathsIn(request), undefined, 4);\n\t\tthrow new Error(errorMessage);\n\t}\n\n\tconst stringifiedData = JSON.stringify(request);\n\n\ttransport.complete(function (error) {\n\t\tif (is(user_callback, 'function')) {\n\t\t\tuser_callback.call(request);\n\t\t\tlog('calling user_callback');\n\t\t}\n\n\t\tif (error) {\n\t\t\t// Re-add to the queue if it failed.\n\t\t\t// Re-apply queueTime here\n\t\t\trequest.queueTime = queueTime;\n\t\t\tqueue.add(request).save();\n\n\t\t\tbroadcast('oErrors', 'log', {\n\t\t\t\terror: error.message,\n\t\t\t\tinfo: { module: 'o-tracking' }\n\t\t\t});\n\t\t} else if (callback) {\n\t\t\tcallback();\n\t\t}\n\t});\n\t/**\n\t * Default collection server.\n\t */\n\tlet url = 'https://spoor-api.ft.com/ingest';\n\n\tif (request && request.category && request.action) {\n\t\turl += `?type=${request.category}:${request.action}`;\n\t}\n\n\ttransport.send(url, stringifiedData);\n}\n\n/**\n * Adds a new request to the list of pending requests\n *\n * @param {object} request The request to queue\n * @returns {void}\n */\nfunction add(request) {\n\trequest.queueTime = new Date().getTime();\n\tif (should_use_sendBeacon()) {\n\t\tsendRequest(request);\n\t} else {\n\t\tqueue.add(request).save();\n\t}\n\tlog('AddedToQueue', queue);\n}\n\n/**\n * If there are any requests queued, attempts to send the next one\n * Otherwise, does nothing\n *\n * @param {Function} [callback] - Optional callback\n * @returns {void}\n */\nfunction run(callback = function () { /* empty */}) {\n\t// Investigate queue lengths bug\n\t// https://jira.ft.com/browse/DTP-330\n\tconst all_events = queue.all();\n\n\tif (all_events.length > 200) {\n\t\tconst counts = {};\n\n\t\tall_events.forEach(function (event) {\n\t\t\tconst label = [event.category, event.action].join(':');\n\n\t\t\tif (!Object.prototype.hasOwnProperty.call(counts, label)) {\n\t\t\t\tcounts[label] = 0;\n\t\t\t}\n\n\t\t\tcounts[label] += 1;\n\t\t});\n\n\t\tqueue.replace([]);\n\n\t\tqueue.add({\n\t\t\tcategory: 'o-tracking',\n\t\t\taction: 'queue-bug',\n\t\t\tcontext: {\n\t\t\t\turl: document.URL,\n\t\t\t\tqueue_length: all_events.length,\n\t\t\t\tcounts: counts,\n\t\t\t\tstorage: queue.storage.storage._type\n\t\t\t}\n\t\t});\n\t}\n\n\tconst next = function () {\n\t\trun();\n\t\tcallback();\n\t};\n\tconst nextRequest = queue.shift();\n\n\t// Cancel if we've run out of requests.\n\tif (!nextRequest) {\n\t\treturn callback();\n\t}\n\n\t// Send this request, then try run again.\n\treturn sendRequest(nextRequest, next);\n}\n\n/**\n * Convenience function to add and run a request all in one go.\n *\n * @param {object} request The request to queue and run.\n * @returns {void}\n */\nfunction addAndRun(request) {\n\tadd(request);\n\trun();\n}\n\n/**\n * Init a queue and send any leftover events.\n *\n * @returns {Queue} An initialised queue.\n */\nfunction init() {\n\tqueue = new Queue('requests');\n\n\t// If any tracking calls are made whilst offline, try sending them the next time the device comes online\n\taddEvent(window, 'online', function() {\n\t\trun();\n\t});\n\n\t// On startup, try sending any requests queued from a previous session.\n\trun();\n\n\treturn queue;\n}\n\nexport {\n\tinit,\n\tadd,\n\trun,\n\taddAndRun\n};\n","import {is, isUndefined, broadcast} from '../utils.js';\nimport {Store} from './store.js';\n\n/**\n * Class for handling a queue backed up by a store.\n *\n * @class Queue\n *\n * @param {string} name - The name of the queue.\n * @returns {Queue} - Returns the instance of the queue.\n */\nfunction Queue (name) {\n\tif (isUndefined(name)) {\n\t\tconst undefinedName = new Error('You must specify a name for the queue.');\n\t\tbroadcast('oErrors', 'log', {\n\t\t\terror: undefinedName.message,\n\t\t\tinfo: { module: 'o-tracking' }\n\t\t});\n\t\tthrow undefinedName;\n\t}\n\n\t/**\n\t * Queue data.\n\t *\n\t * @type {Array}\n\t */\n\tthis.queue = [];\n\n\t/**\n\t * The storage method to use. Determines best storage method.\n\t *\n\t * @type {object}\n\t */\n\tthis.storage = new Store(name);\n\n\t// Retrieve any previous store with the same name.\n\tif (this.storage.read()) {\n\t\tthis.queue = this.storage.read();\n\t}\n\n\treturn this;\n}\n\n/**\n * Gets the contents of the store.\n *\n * @returns {Array} The array of items.\n */\nQueue.prototype.all = function () {\n\tif (this.queue.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst items = [];\n\n\tfor (let i = 0; i < this.queue.length; i = i + 1) {\n\t\titems.push(this.queue[i].item);\n\t}\n\n\treturn items;\n};\n\n/**\n * Gets the first item in the store.\n *\n * @returns {object} Returns the item.\n */\nQueue.prototype.first = function () {\n\tif (this.queue.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn this.queue[0].item;\n};\n\n/**\n * Gets the last item in the store.\n *\n * @returns {object} Returns the item.\n */\nQueue.prototype.last = function () {\n\tif (this.queue.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn this.queue.slice(-1)[0].item;\n};\n\n/**\n * Add data to the store.\n *\n * @param {object} item - An item or an array of items.\n *\n * @returns {Queue} - Returns the instance of the queue.\n */\nQueue.prototype.add = function (item) {\n\t// I was trying to turn this whole add function into a little module, to stop doAdd function being created everytime, but couldn't work out how to get to 'this' from within the module.\n\n\tconst self = this;\n\tlet i;\n\n\tfunction doAdd(item) {\n\t\tself.queue.push({\n\t\t\tcreated_at: new Date().valueOf(),\n\t\t\titem: item\n\t\t});\n\t}\n\n\tif (is(item, 'object') && item.constructor.toString().match(/array/i)) {\n\t\tfor (i = 0; i < item.length; i = i + 1) {\n\t\t\tdoAdd(item[i]);\n\t\t}\n\t} else {\n\t\tdoAdd(item);\n\t}\n\n\treturn self;\n};\n\n/**\n * Overwrite the store with something completely new.\n *\n * @param {Array} items The new array of data.\n *\n * @returns {Queue} - Returns the instance of the queue.\n */\nQueue.prototype.replace = function (items) {\n\tif (Array.isArray(items)) {\n\t\tthis.queue = [];\n\t\tthis.add(items).save();\n\n\t\treturn this;\n\t}\n\n\tconst invalidArg = new Error('Argument invalid, must be an array.');\n\tbroadcast('oErrors', 'log', {\n\t\terror: invalidArg.message,\n\t\tinfo: { module: 'o-tracking' }\n\t});\n\tthrow invalidArg;\n};\n\n/**\n * Pop the first item from the queue.\n *\n * @returns {object} The item.\n */\nQueue.prototype.shift = function () {\n\tif (this.queue.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst item = this.queue.shift().item;\n\n\tthis.save();\n\n\treturn item;\n};\n\n/**\n * Save the current store to localStorage so that old requests can still be sent after a page refresh.\n *\n * @returns {Queue} - Returns the instance of the queue.\n */\nQueue.prototype.save = function () {\n\tthis.storage.write(this.queue);\n\n\treturn this;\n};\n\nexport { Queue };\n","/**\n * XHR based transport mechanism\n *\n * @returns {object} - Object with three properties: name, send and complete\n */\nfunction xhr() {\n\tconst xhr = new window.XMLHttpRequest();\n\n\treturn {\n\t\tname: 'xhr',\n\t\tsend: function (url, data) {\n\t\t\txhr.open('POST', url, true);\n\t\t\txhr.withCredentials = true;\n\t\t\txhr.setRequestHeader('Content-type', 'application/json');\n\t\t\txhr.send(data);\n\t\t},\n\t\tcomplete: function (callback) {\n\t\t\txhr.onerror = function () {\n\t\t\t\tcallback(this);\n\t\t\t};\n\t\t\txhr.onload = function () {\n\t\t\t\tif (xhr.status >= 200 && xhr.status < 300) {\n\t\t\t\t\tcallback();\n\t\t\t\t} else {\n\t\t\t\t\tcallback('Incorrect response: ' + xhr.status);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n}\n\nexport { xhr };\n","/**\n * Beacon based transport mechanism\n *\n * @returns {object} - Object with three properties: name, send and complete\n */\nfunction sendBeacon() {\n\tlet resolver;\n\tlet rejecter;\n\tconst p = new Promise((resolve, reject) => {\n\t\tresolver = resolve;\n\t\trejecter = reject;\n\t});\n\treturn {\n\t\tname: 'sendBeacon',\n\t\tsend: function (url, data) {\n\t\t\tif (navigator.sendBeacon(url, data)) {\n\t\t\t\tresolver();\n\t\t\t} else {\n\t\t\t\trejecter(new Error('Failed to send beacon event: ' + data.toString()));\n\t\t\t}\n\n\t\t},\n\t\tcomplete: function (callback) {\n\t\t\tif (callback) {\n\t\t\t\tp.then(callback, callback);\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport { sendBeacon };\n","import {encode} from '../../utils.js';\n\n/**\n * Image based transport mechanism\n *\n * @returns {object} - Object with three properties: name, send and complete\n */\nfunction image () {\n\tconst image = new Image(1,1);\n\n\treturn {\n\t\tname: 'image',\n\t\tsend: function (url, data) {\n\t\t\turl = url.replace('https://spoor-api.ft.com/ingest', 'https://spoor-api.ft.com/px.gif');\n\t\t\timage.src = url + (url.indexOf('?') > -1 ? '&' : '?') + 'data=' + encode(data);\n\t\t},\n\t\tcomplete: function (callback) {\n\t\t\tif (image.addEventListener) {\n\t\t\t\timage.addEventListener('error', callback);\n\t\t\t\timage.addEventListener('load', () => callback());\n\t\t\t} else { // it's IE!\n\t\t\t\timage.attachEvent('onerror', callback);\n\t\t\t\timage.attachEvent('onload', () => callback());\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport { image };\n","// Trace the element and all of its parents, collecting properties as we go\nimport {sanitise, assignIfUndefined} from '../javascript/utils.js';\n\n// For a given container element, get the number of elements that match the\n// original element (siblings); and the index of the original element (position).\nconst getSiblingsAndPosition = (el, originalEl, selector) => {\n\tconst siblings = Array.from(el.querySelectorAll(selector));\n\tconst position = siblings.findIndex(item => item === originalEl);\n\tif(position === -1) {return;}\n\treturn {\n\t\tsiblings: siblings.length,\n\t\tposition,\n\t};\n};\n\n\nconst elementPropertiesToCollect = [\n\t\"nodeName\",\n\t\"className\",\n\t\"id\",\n\t\"href\",\n\t\"text\",\n\t\"role\",\n];\n// Get all (sanitised) properties of a given element.\nconst getAllElementProperties = element => {\n\n\tconst properties = {};\n\tfor (const property of elementPropertiesToCollect) {\n\t\tconst value = element[property] || element.getAttribute(property) || element.hasAttribute(property);\n\t\tif (value !== undefined) {\n\t\t\tif (typeof value === 'boolean') {\n\t\t\t\tproperties[property] = value;\n\t\t\t} else {\n\t\t\t\tproperties[property] = sanitise(value);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn properties;\n};\n\nconst parseRawValue = (rawValue) => {\n\ttry {\n\t\tconst parsedValue = JSON.parse(rawValue);\n\t\tconst type = Object.prototype.toString.call(parsedValue);\n\t\tconst isJSON = type === '[object Object]' || type === '[object Array]';\n\n\t\treturn [isJSON, parsedValue];\n\t} catch (error) {\n\t\treturn [false, null];\n\t}\n}\n\nconst getAttributeValue = (rawValue) => {\n\tconst [isJSON, value] = parseRawValue(rawValue);\n\n\treturn isJSON ? value : rawValue;\n}\n\n// Get some properties of a given element.\nconst getDomPathProps = (attrs, props) => {\n\n\t// Collect any attribute that matches given strings.\n\tattrs\n\t\t.filter(attribute => attribute.name.match(/^data-trackable|^data-o-|^aria-/i))\n\t\t.forEach(attribute => {\n\t\t\tprops[attribute.name] = attribute.value;\n\t\t});\n\n\treturn props;\n};\n\n// Get only the custom data-trackable-context-? properties of a given element\nconst getContextProps = (attrs, props, isOriginalEl) => {\n\n\tconst customProps = {};\n\n\t// for the original element collect properties like className, nodeName\n\tif (isOriginalEl) {\n\t\telementPropertiesToCollect.forEach(name => {\n\t\t\tif (typeof props[name] !== 'undefined' && name !== 'id') {\n\t\t\t\tcustomProps[name] = props[name];\n\t\t\t}\n\t\t});\n\t}\n\n\t// Collect any attribute that matches given strings.\n\tattrs\n\t\t.filter(attribute => attribute.name.match(/^data-trackable-context-/i))\n\t\t.forEach(attribute => {\n\t\t\tcustomProps[attribute.name.replace('data-trackable-context-', '')] = getAttributeValue(attribute.value);\n\t\t});\n\n\treturn customProps;\n};\n\nexport function getTrace (el) {\n\tconst rootEl = document;\n\tconst originalEl = el;\n\tconst selector = originalEl.getAttribute('data-trackable') ? `[data-trackable=\"${originalEl.getAttribute('data-trackable')}\"]` : originalEl.nodeName;\n\tconst trace = [];\n\tconst customContext = {};\n\twhile (el && el !== rootEl) {\n\t\tconst props = getAllElementProperties(el);\n\t\tconst attrs = Array.from(el.attributes);\n\t\tlet domPathProps = getDomPathProps(attrs, props);\n\n\t\t// If the element happens to have a data-trackable attribute, get the siblings\n\t\t// and position of the element (relative to the current element).\n\t\tif (domPathProps[\"data-trackable\"]) {\n\t\t\tdomPathProps = Object.assign(\n\t\t\t\tdomPathProps,\n\t\t\t\tgetSiblingsAndPosition(el, originalEl, selector)\n\t\t\t);\n\t\t}\n\n\t\ttrace.push(domPathProps);\n\n\t\tconst contextProps = getContextProps(attrs, props, el === originalEl);\n\n\t\tassignIfUndefined(contextProps, customContext);\n\n\t\tel = el.parentNode;\n\t}\n\treturn { trace, customContext };\n}\n","import tracking from './src/javascript/tracking.js';\n\n/**\n * Automatically initilise o-tracking\n *\n * @returns {void}\n */\nfunction initialise() {\n\ttracking.init();\n\tdocument.removeEventListener('o.DOMContentLoaded', initialise);\n}\n\n// Try and initialise on o.DOMContentLoaded. If it fails, defer to the\n// consumer of the library.\nif (typeof document !== 'undefined') {\n\tdocument.addEventListener('o.DOMContentLoaded', initialise);\n}\n\n/**\n * A constructed object, this module is a Singleton as we only want one\n * instance sending events. See {@link Tracking} for the publicly available\n * interface.\n *\n * @type {tracking}\n */\nexport default tracking;\n","import {set, get, destroy as destroySetting} from './core/settings.js';\nimport {setUser, init as initUser} from './core/user.js';\nimport {init as initSession} from './core/session.js';\nimport {init as initSend} from './core/send.js';\nimport {event} from './events/custom.js';\nimport {page} from './events/page-view.js';\nimport {click} from './events/click.js';\nimport core from './core.js';\nimport { merge, broadcast } from './utils.js';\nimport {view} from './events/component-view.js';\n\nconst initEvent = event.init;\nconst initPage = page.init;\n\n/**\n * The version of the tracking module.\n *\n * @type {string}\n */\nconst version = '4.5.0';\n\n/**\n * The source of this event.\n *\n * @type {string}\n */\nconst source = 'o-tracking';\n\n/**\n * Update the tracking configuration with any state changes. The supplied\n * config is merged with any existing config; to unset a value, set it as\n * null or undefined.\n *\n * @param {object} newConfig The configuration object to merge in - see init()\n * @returns {void}\n */\nfunction updateConfig(newConfig) {\n\tlet config = get('config') || {};\n\n\tconfig = merge(config, newConfig);\n\tset('config', config);\n\n\tif (config.user && config.user.user_id) {\n\t\tsetUser(config.user.user_id);\n\t}\n}\n\n/**\n * Clean up the tracking module.\n *\n * @returns {void}\n */\nfunction destroy() {\n\ttracking.initialised = false;\n\n\tdestroySetting('config');\n\tdestroySetting('page_sent');\n}\n/**\n * Overload toString method to show the version.\n *\n * @returns {string} The module's version.\n */\nfunction toString() {\n\treturn 'oTracking version ' + version;\n}\n\n/**\n * Initialises the Tracking object.\n *\n * All options are optional, if a configuration option is missing, the module\n * will try to initialise using any configuration found in the DOM using the\n * script config tag.\n *\n * @example\n * <!-- DOM configuration settings -->\n * <script type='application/json' data-o-tracking-config>\n * page: {\n * \t product: 'desktop'\n * },\n * user: {\n *   user_id: '023ur9jfokwenvcklwnfiwhfoi324'\n * }\n * </script>\n *\n * @param {object} config \t\t\t\t\t- See {@link Tracking} for the configuration options.\n * @param {boolean=} config.test             - Optional, if `true`, the data sent to Spoor will be marked as test data.\n * @param {string=} config.configId          - Optional\n * @param {string=} config.session           - Optional\n * @param {string=} config.cookieDomain      - Optional\n * @param {object=} config.context           - Optional\n * @param {object=} config.user              - Optional\n * @param {object=} config.system            - Optional\n * @param {object=} config.device            - Optional\n *\n * @returns {tracking|null} - The initialised tracking object or null if no configuration has been given.\n */\nfunction init(config = {}) {\n\tif (tracking.initialised) {\n\t\treturn tracking;\n\t}\n\n\tconst hasDeclarativeConfig = Boolean(\n\t\tgetDeclarativeConfigElement()\n\t);\n\n\tif (hasDeclarativeConfig) {\n\t\tconfig = getDeclarativeConfig(config);\n\t}\n\n\t// If there's no config, there is no point initialising!\n\t// http://stackoverflow.com/a/32108184\n\tif (Object.keys(config).length === 0 && config.constructor === Object) {\n\t\treturn null;\n\t}\n\n\tset('version', version);\n\tset('source', source);\n\n\tset('page_sent', false);\n\n\tconst cookieDomain = config ? config.cookieDomain : '';\n\n\t// Set up the user from stored - may later be updated by config\n\tinitUser('', cookieDomain);\n\tupdateConfig(config);\n\n\t// Session\n\tinitSession(config.session);\n\n\t// Initialize the sending queue.\n\tinitSend();\n\n\tinitEvent();\n\tinitPage();\n\ttracking.initialised = true;\n\treturn tracking;\n}\n\n/**\n * Retrieves the <script type='application/json' data-o-tracking-config> element that is in the DOM, otherwise returns null.\n *\n * @private\n * @returns {HTMLElement|null} - Returns the <script> element if found otherwise returns null.\n */\nfunction getDeclarativeConfigElement() {\n\treturn document.querySelector('script[data-o-tracking-config]');\n}\n\n/**\n * Initialises additional data using the <script type='application/json' data-o-tracking-config> element in the DOM.\n *\n * @private\n * @param {object} options - A partially, or fully filled options object.  If\n *                           an option is missing, this method will attempt to\n *                           initialise it from the DOM.\n * @returns {object|boolean} - The options modified to include the options gathered from the DOM\n */\nfunction getDeclarativeConfig(options) {\n\tconst configEl = getDeclarativeConfigElement();\n\tlet declarativeConfigString;\n\tif (configEl) {\n\t\tdeclarativeConfigString = configEl.textContent || configEl.innerText || configEl.innerHTML;\n\t} else {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst declarativeOptions = JSON.parse(declarativeConfigString);\n\t\tObject.assign(options, declarativeOptions);\n\t} catch(e) {\n\t\tconst configError = new Error('Invalid JSON configuration syntax, check validity for o-tracking configuration: \"' + e.message + '\"');\n\t\tbroadcast('oErrors', 'log', {\n\t\t\terror: configError.message,\n\t\t\tinfo: { module: 'o-tracking' }\n\t\t});\n\t\tthrow configError;\n\t}\n\n\treturn options;\n}\n\nconst tracking = {\n\t/**\n\t * The initialised state of the object.\n\t *\n\t * @type {boolean}\n\t */\n\tinitialised: false,\n\tversion,\n\tupdateConfig,\n\tsource,\n\tdestroy,\n\ttoString,\n\tinit,\n\tclick,\n\tevent,\n\tpage,\n\tview,\n\tgetRootID: core.getRootID\n};\n\nexport default tracking;\n","import {xhr} from './xhr.js';\nimport {sendBeacon} from './send-beacon.js';\nimport {image} from './image.js';\n\nexport {\n\txhr,\n\tsendBeacon,\n\timage\n};\n\n/**\n * @type {object|undefined} - mock transport for testing\n */\nexport const mock = {};\n\n/**\n * Given the name of a transport, returns that transport if it exists.\n *\n * @param {string} name - The name of the transport to use\n * @returns {Function|undefined} - The transport function or undefined if not found.\n */\nexport function get(name) {\n\tif (mock.transport) {\n\t\treturn mock.transport;\n\t}\n\tswitch (name) {\n\t\tcase 'xhr': {\n\t\t\treturn xhr;\n\t\t}\n\t\tcase 'sendBeacon': {\n\t\t\treturn sendBeacon;\n\t\t}\n\t\tcase 'image': {\n\t\t\treturn image;\n\t\t}\n\t\tdefault: {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n","import core from '../core.js';\nimport {\n\tis,\n\tbroadcast,\n\tmerge,\n\taddEvent} from '../utils.js';\n\n/**\n * Default properties for events.\n *\n * @type {object}\n * @returns {object} - Default configuration for events\n */\nconst defaultEventConfig = function () {\n\treturn {\n\t\tcategory: 'event',\n\t\taction: 'generic',\n\t\tcontext: {}\n\t};\n};\n\n/**\n * Track an event.\n *\n * @param {object} trackingEvent - The event, which could the following properties in its 'detail' key:\n * @param {object} [trackingEvent.detail] - Custom properties to add to the event.\n * @param {string} [trackingEvent.detail.category] - Category for this event e.g. page\n * @param {string} [trackingEvent.detail.action] - Action for this event e.g. view\n * @param {string} [trackingEvent.detail.component_id] - The ID for the component instance.\n * @param {object} [trackingEvent.detail.context] - Extra context to add to the event\n *\n * @param {Function} [callback] - Optional, Callback function. Called when request completed.\n * @returns {void}\n */\nfunction event(trackingEvent, callback) {\n\tif (is(trackingEvent.detail.category) || is(trackingEvent.detail.action)) {\n\t\tconst noCategoryActionVals = 'Missing category or action values';\n\t\tbroadcast('oErrors', 'log', {\n\t\t\terror: noCategoryActionVals,\n\t\t\tinfo: { module: 'o-tracking' }\n\t\t});\n\t\tthrow noCategoryActionVals;\n\t}\n\n\tconst config = merge(defaultEventConfig(), {\n\t\tcategory: trackingEvent.detail.category,\n\t\taction: trackingEvent.detail.action,\n\t\tcontext: trackingEvent.detail\n\t});\n\n\tdelete config.context.category;\n\tdelete config.context.action;\n\n\tconst origamiElement = getOrigamiEventTarget(trackingEvent);\n\tif (origamiElement) {\n\t\tconfig.context.component_name = origamiElement.getAttribute('data-o-component');\n\t\tconfig.context.component_id = config.context.component_id || getComponentId(origamiElement);\n\t}\n\n\tcore.track(config, callback);\n}\n\n/**\n * Helper function that gets the target of an event if it's an Origami component\n *\n * @param  {Event} event - The event triggered.\n * @returns {HTMLElement|undefined} - Returns the HTML element if an Origami component, else undefined.\n */\nfunction getOrigamiEventTarget(event) {\n\t// IE backwards compatibility (get the actual target). If not IE, uses\n\t// `event.target`\n\tconst element = event.target || event.srcElement;\n\n\tif (element && element.getAttribute('data-o-component')) {\n\t\treturn element;\n\t}\n}\n\n/**\n * Helper function that generates a component id based on its xpath\n *\n * @param {HTMLElement} element - The HTML Element to gen an ID for.\n *\n * @returns {number} hash\n */\nfunction getComponentId(element) {\n\tconst path = _getElementPath(element);\n\n\tif (typeof path === 'undefined') {\n\t\treturn;\n\t}\n\n\t// Select the source element (first item in the ordered sequence `path`)\n\tconst srcElement = path[0];\n\n\t// Because, you could have two identical elements in the DOM as siblings,\n\t// we need to determine the 'sibling index': the order they're sitting within a DOM node.\n\t// Although in reality this is unlikely to always be the same, it's just a\n\t// best guess - unless child elements are always appended to an element rather than added as the first child.\n\tconst siblingIndex = (function getSiblingIndex(element) {\n\t\tconst srcParent = element.parentElement;\n\t\tif (srcParent) {\n\t\t\tfor (let i = 0; i < srcParent.childNodes.length; i++) {\n\t\t\t\tif (srcParent.childNodes[i] === srcElement) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}(srcElement));\n\n\t// Generate a normalised string (normalising browser quirks) from the sequence of elements\n\tconst normalisedStringPath = path.reduceRight(function(builder, el) {\n\t\tif (!el.nodeName) {\n\t\t\treturn builder + ' - ' + el.constructor.name + '\\n';\n\t\t}\n\n\t\tconst nodeName = el.nodeName.toLowerCase();\n\n\t\t// In some browsers, document is prepended with a '#'\n\t\tif (nodeName.indexOf('#') === 0) {\n\t\t\treturn builder + '<' + nodeName + '>';\n\t\t}\n\n\t\t// Replace this stuff with stuff that makes each node unique - without including styling detail (as this may change depending on animation state etc, position)\n\t\treturn builder + '<' + nodeName +' id=\"' + (el.id || '') + '\">';\n\t}, '');\n\n\n\t// Append a sibling index to the string and use some simple, off the shelf string hashing algorithm.\n\treturn _generateHash(normalisedStringPath + '_siblingIndex=' + siblingIndex);\n}\n\n/**\n * Gets the xpath for an element\n *\n * @param  {HTMLElement} element - The element to get a path for.\n *\n * @private\n *\n * @returns {Array} The xpath\n */\nfunction _getElementPath(element) {\n\tconst path = [];\n\n\twhile (element) {\n\t\tpath.push(element);\n\t\telement = element.parentElement;\n\t}\n\n\treturn path;\n}\n\n/**\n * JS Implementation of MurmurHash2\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n * Copyright (c) 2011 Gary Court\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @param {string} str  - The string to hash, ASCII only.\n *\n * @returns {number} 32-bit positive integer hash\n *\n * @private\n */\nfunction _generateHash(str) {\n\tlet l = str.length;\n\tlet h = 1 ^ l;\n\tlet i = 0;\n\tlet k;\n\n\twhile (l >= 4) {\n\t\tk = str.charCodeAt(i) & 0xff |\n\t\t\t(str.charCodeAt(++i) & 0xff) << 8 |\n\t\t\t(str.charCodeAt(++i) & 0xff) << 16 |\n\t\t\t(str.charCodeAt(++i) & 0xff) << 24;\n\n\t\tk = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n\t\tk ^= k >>> 24;\n\t\tk = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n\n\t\th = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n\n\t\tl -= 4;\n\t\t++i;\n\t}\n\n\tswitch (l) {\n\t\tcase 3:\n\t\t\th ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\th ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\th ^= str.charCodeAt(i) & 0xff;\n\t\t\th = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\th ^= h >>> 13;\n\th = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n\th ^= h >>> 15;\n\n\treturn h >>> 0;\n}\n\nconst init = function init() {\n\taddEvent(window, 'oTracking.event', event);\n};\nevent.init = init;\n\nexport { event };\n","import core from '../core.js';\nimport {merge, triggerPage, addEvent, isDeepEqual} from '../utils.js';\nimport {set as setSetting, get as getSetting} from '../core/settings.js';\n\nsetSetting('page_has_already_been_viewed', false);\n\n/**\n * Default properties for page tracking requests.\n *\n * @returns {object} - The default properties for pages.\n */\nconst defaultPageConfig = function () {\n\treturn {\n\t\tcategory: 'page',\n\t\taction: 'view',\n\t\tcontext: {\n\t\t\turl: document.URL,\n\t\t\treferrer: document.referrer\n\t\t}\n\t};\n};\n\n/**\n * Make the page tracking request.\n *\n * @param {object} config - Configuration object. If omitted, will use the defaults.\n * @param {Function=} callback - Callback function. Called when request completed.\n * @returns {void}\n */\nfunction page(config, callback) {\n\tconfig = merge(defaultPageConfig(), {\n\t\tcontext: config\n\t});\n\n\t// Set a new root ID only if the page function has already been called once before.\n\t// This is because o-tracking assumes each page function call is for a different page being viewed\n\t// And o-tracking wants all other events on the page to share the same root_id so that Spoor can\n\t// relate those other events with the page view they were from.\n\t// If o-tracking events were fired before this `page` function was ever called, then the first\n\t// of those events would have created a `root_id` and we want the first page view event to reuse\n\t// that `root_id` so those earlier events can be related to the page view they were from.\n\tif (getSetting('page_has_already_been_viewed')) {\n\t\tcore.setRootID();\n\t}\n\tsetSetting('page_has_already_been_viewed', true);\n\n\t// Some applications which use o-tracking have a bug where they send thousands of page-view events\n\t// Instead of forwarding these errorneous events to Spoor, we ignore them.\n\t// GitHub Issue: https://github.com/Financial-Times/o-tracking/issues/296\n\tif (pageViewEventHasAlreadyBeenSentBefore(config)) {\n\t\tif (getSetting('config').test) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('A page event has already been sent for this page, refusing to send a duplicate page event.');\n\t\t}\n\t} else {\n\t\tcore.track(config, callback);\n\t\t// Alert internally that a new page has been tracked - for single page apps for example.\n\t\ttriggerPage();\n\t}\n}\n\nlet previousPageConfigWithoutContextIDs = {};\n\n/**\n * Detect whether the previously sent page-view event is the\n * same as the page-view event which is about to be sent.\n *\n * @param {object} config - The page configuration object\n * @returns {boolean} - Whether the event has been sent before\n */\nfunction pageViewEventHasAlreadyBeenSentBefore(config) {\n\tconst configWithoutContextIDs = JSON.parse(JSON.stringify(config));\n\tdelete configWithoutContextIDs.context.id;\n\tdelete configWithoutContextIDs.context.root_id;\n\n\tif (isDeepEqual(previousPageConfigWithoutContextIDs, configWithoutContextIDs)) {\n\t\treturn true;\n\t} else {\n\t\tpreviousPageConfigWithoutContextIDs = configWithoutContextIDs;\n\t\treturn false;\n\t}\n}\n\n/**\n * Listener for pages.\n *\n * @param {CustomEvent} e - The CustomEvent\n * @private\n * @returns {void}\n */\nfunction listener(e) {\n\tpage(e.detail);\n}\n\nconst init = function init() {\n\taddEvent(window, 'oTracking.page', listener);\n};\npage.init = init;\n\nexport { page };\n","import Delegate from 'ftdomdelegate';\nimport core from '../core.js';\nimport {sanitise, assignIfUndefined, merge } from '../utils.js';\nimport {get as getSetting} from '../core/settings.js';\nimport {getTrace} from '../../libs/get-trace.js';\nimport { Queue } from '../core/queue.js';\n\nlet delegate;\n\nconst eventPropertiesToCollect = [\n\t\"ctrlKey\",\n\t\"altKey\",\n\t\"shiftKey\",\n\t\"metaKey\",\n];\n\n// Get properties for the event (as opposed to properties of the clicked element)\n// Available properties include mouse x- and y co-ordinates, for example.\nconst getEventProperties = event => {\n\tconst eventProperties = {};\n\tfor (const property of eventPropertiesToCollect) {\n\t\tif (event[property]) {\n\t\t\ttry {\n\t\t\t\teventProperties[property] = sanitise(event[property]);\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn eventProperties;\n};\n\n// Controller for handling click events\nconst handleClickEvent = eventData => (clickEvent, clickElement) => {\n\t//we don't want to track clicks to anonymous services like securedrop\n\tif (clickElement.getAttribute(\"data-o-tracking-do-not-track\") === \"true\") {return;}\n\tconst context = getEventProperties(clickEvent);\n\tconst { trace, customContext} = getTrace(clickElement);\n\tcontext.domPathTokens = trace;\n\tcontext.url = window.document.location.href || null;\n\t// source_id is a field that is currently being used in some data analytics\n\t// before removing this field - check with the data analytics team first to see if it is still being used\n\tcontext.source_id = core.getRootID();\n\n\tassignIfUndefined(customContext, context);\n\n\teventData.context = context;\n\n\t// Merge the event data into the \"parent\" config data\n\tconst config = merge(getSetting('config'), eventData);\n\tcore.track(config);\n};\n\n/**\n * Listen for click events.\n *\n * @alias click#init\n * @param {string} category - The event category for clicks.\n * @param {string} elementsToTrack - A query selector string to select elements to track links on {@link https://github.com/ftlabs/ftdomdelegate#selector-string}.\n * @returns {void}\n */\nconst init = (category, elementsToTrack) => {\n\telementsToTrack = elementsToTrack || 'a, button, input, [role=\"button\"]'; // See https://github.com/ftlabs/ftdomdelegate#selector-string\n\n\t// Note: `context` is the term o-tracking uses for the data that is sent to spoor\n\tconst eventData = {\n\t\taction: 'click',\n\t\tcategory: category || 'o-tracking'\n\t};\n\n\t// Activate the click event listener\n\tdelegate = delegate || new Delegate(document.body);\n\tdelegate.on('click', elementsToTrack, handleClickEvent(eventData), true);\n\n\t// Fire all click events that were stored in the old queue used by o-tracking v2\n\tconst clickQueue = new Queue('clicks');\n\tsendAllEventsFromQueue(clickQueue);\n};\n\nfunction sendAllEventsFromQueue(queue) {\n\tconst nextLink = queue.shift();\n\tif (nextLink) {\n\t\tcore.track(nextLink, () => sendAllEventsFromQueue(queue));\n\t}\n}\n\nconst click = {\n\tinit\n};\n\nexport { click };\n","import core from '../core.js';\nimport {getTrace} from '../../libs/get-trace.js';\nimport {assignIfUndefined, filterProperties} from '../utils.js';\n\nconst TRACKING_ATTRIBUTES = [\n\t'componentContentId',\n\t'type',\n\t'subtype',\n\t'component',\n];\n\nconst decorateEventData = (eventData, viewedEl, opts) => {\n\n\tconst { trace, customContext } = getTrace(viewedEl);\n\tlet context;\n\n\tif (opts.getContextData) {\n\t\tif (typeof opts.getContextData !== 'function') {\n\t\t\tthrow new Error('opts.getContextData is not a function');\n\t\t}\n\n\t\tconst contextData = opts.getContextData(viewedEl);\n\n\t\tif (typeof contextData !== 'object') {\n\t\t\tthrow new Error('opts.getContextData function should return {object}');\n\t\t}\n\n\t\tcontext = filterProperties(contextData, TRACKING_ATTRIBUTES);\n\t} else {\n\t\tcontext = {};\n\t}\n\n\tcontext.domPathTokens = trace;\n\tcontext.url = window.document.location.href || null;\n\n\tassignIfUndefined(customContext, context);\n\n\teventData.context = context;\n};\n\n/**\n * Listen for view events.\n *\n * @alias view#init\n * @param {object} opts - To set custom category[String], selector[String], getContextData[Function]\n * @returns {undefined}\n */\nconst init = (opts = {}) => {\n\tif(!window.IntersectionObserver) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn('o-tracking: Unable to track component view events as \"window.IntersectionObserver\" is not supported.');\n\t\treturn;\n\t}\n\n\tconst selector = opts.selector || '[data-o-tracking-view]';\n\tconst elementsToTrack = [...document.querySelectorAll(selector)];\n\n\tif (!elementsToTrack.length) {\n\t\treturn;\n\t}\n\n\tfunction onChange (changes) {\n\t\tchanges.forEach(change => {\n\t\t\tif(change.isIntersecting || change.intersectionRatio > 0) {\n\t\t\t\tconst eventData = {\n\t\t\t\t\taction: opts.action || 'view',\n\t\t\t\t\tcategory: opts.category || 'component'\n\t\t\t\t};\n\t\t\t\tconst viewedEl = change.target;\n\n\t\t\t\tdecorateEventData(eventData, viewedEl, opts);\n\t\t\t\tcore.track(eventData);\n\t\t\t\tobserver.unobserve(viewedEl);\n\t\t\t}\n\t\t});\n\t}\n\n\tconst observer = new IntersectionObserver(onChange, { threshold: [ 1.0 ] });\n\n\telementsToTrack.forEach(el => observer.observe(el));\n};\n\nconst view = {\n\tinit\n};\n\nexport { view };\n\n\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getCurrentLayout = getCurrentLayout;\nexports.getCurrentGutter = getCurrentGutter;\nexports.getGridBreakpoints = getGridBreakpoints;\nexports.enableLayoutChangeEvents = enableLayoutChangeEvents;\nexports.default = void 0;\nvar missingDataMessage = 'Could not find layout information. ' + 'You may need to include o-grid css. See the README (https://registry.origami.ft.com/components/o-grid/readme) ' + 'for more information.';\n/**\n * Grab grid properties\n * @return {Object} layout names and gutter widths\n */\n\nfunction getGridProperties() {\n  var properties = getGridFromDoc('after');\n\n  if (Object.keys(properties).length === 0) {\n    console.warn(missingDataMessage);\n  }\n\n  return properties;\n}\n/**\n * Get all layout sizes.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n * @return {Object} layout names and sizes\n */\n\n\nfunction getGridBreakpoints() {\n  var breakpoints = getGridFromDoc('before');\n\n  if (Object.keys(breakpoints).length === 0) {\n    console.warn(missingDataMessage);\n  }\n\n  return breakpoints;\n}\n/**\n * Grab grid properties surfaced in html:after and html:before's content\n * @param {String} position Whether to get all properties in :before, or current properties in :after\n * @return {Object} layout names and gutter widths\n */\n\n\nfunction getGridFromDoc(position) {\n  // Contained in a try/catch as it should not error if o-grid styles are not (deliberately or accidentally) loaded\n  // e.g. o-tracking will always try to read this property, but the page is not obliged to use o-grid for layout\n  try {\n    var gridProperties = window.getComputedStyle(document.documentElement, ':' + position).getPropertyValue('content'); // Firefox computes: \"{\\\"foo\\\": \\\"bar\\\"}\"\n    // We want readable JSON: {\"foo\": \"bar\"}\n\n    gridProperties = gridProperties.replace(/'/g, '').replace(/\\\\/g, '').replace(/^\"/, '').replace(/\"$/, '');\n    return JSON.parse(gridProperties);\n  } catch (e) {\n    return {};\n  }\n}\n/**\n * Grab the current layout.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n * @return {String} Layout name\n */\n\n\nfunction getCurrentLayout() {\n  return getGridProperties().layout;\n}\n/**\n * Grab the current space between columns.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n * @return {String} Gutter width in pixels\n */\n\n\nfunction getCurrentGutter() {\n  return getGridProperties().gutter;\n}\n/**\n * This sets MediaQueryListeners on all the o-grid breakpoints\n * and fires a `o-grid.layoutChange` event on layout change.\n * CSS must be included so JavaScript can retrieve layout information.\n * See the README for more information.\n */\n\n\nfunction enableLayoutChangeEvents() {\n  // Create a map containing all breakpoints exposed via html:before\n  var gridLayouts = getGridBreakpoints();\n\n  if (gridLayouts.hasOwnProperty('layouts')) {\n    var layouts = gridLayouts.layouts;\n    var breakpoints = [...Object.entries(layouts), ['default', '240px']].sort((a, b) => parseFloat(a[1]) - parseFloat(b[1]));\n\n    var setupQuery = (query, size) => {\n      // matchMedia listener handler: Dispatch `o-grid.layoutChange` event if a match\n      var handleMQChange = mql => {\n        if (mql.matches) {\n          window.dispatchEvent(new CustomEvent('o-grid.layoutChange', {\n            detail: {\n              layout: size\n            }\n          }));\n        }\n      };\n\n      var mql = window.matchMedia(query);\n      mql.addListener(handleMQChange);\n      handleMQChange(mql);\n    }; // Generate media queries for each\n\n\n    var decr1 = val => \"\".concat(Number(val.replace('px', '') - 1), \"px\");\n\n    for (var index = 0; index < breakpoints.length; index++) {\n      var [layoutName, layoutWidth] = breakpoints[index];\n      var isLast = index === breakpoints.length - 1;\n\n      if (isLast) {\n        setupQuery(\"(min-width: \".concat(layoutWidth, \")\"), layoutName);\n        continue;\n      }\n\n      var [, nextLayoutWidth] = breakpoints[index + 1];\n      setupQuery(\"(min-width: \".concat(layoutWidth, \") and (max-width: \").concat(decr1(nextLayoutWidth), \")\"), layoutName);\n    }\n  } else {\n    console.error('Could not enable grid layout change events. Include o-grid css. See the README (https://registry.origami.ft.com/components/o-grid/readme) for more details.');\n  }\n}\n\nvar _default = {\n  getCurrentLayout,\n  getCurrentGutter,\n  getGridBreakpoints,\n  enableLayoutChangeEvents\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _utils = _interopRequireDefault(require(\"./dist/utils.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar throttle = _utils.default.throttle;\nvar debounce = _utils.default.debounce;\nvar listeners = {};\nvar intervals = {\n  resize: 100,\n  orientation: 100,\n  visibility: 100,\n  scroll: 100\n};\n/**\n *\n * @param {string} eventType - The type of event to throttle for this duration.\n * @param {number} interval - The duration to throttle in ms.\n * @example\n * \t   // throttle for different events at different durations\n *     setThrottleInterval('scroll', 100)\n *     setThrottleInterval('resize', 300)\n *     setThrottleInterval('orientation', 30)\n *     setThrottleInterval('visibility', 30)\n * \t\t// throttle all events at 30ms\n *     setThrottleInterval(30);\n */\n\nfunction setThrottleInterval(eventType, interval) {\n  if (typeof arguments[0] === 'number') {\n    setThrottleInterval('scroll', arguments[0]);\n    setThrottleInterval('resize', arguments[1]);\n    setThrottleInterval('orientation', arguments[2]);\n    setThrottleInterval('visibility', arguments[3]);\n  } else if (interval) {\n    intervals[eventType] = interval;\n  }\n}\n/**\n * @access private\n */\n\n\nfunction listenToResize() {\n  if (listeners.resize) {\n    return;\n  }\n\n  var eventType = 'resize';\n  var handler = debounce(function (ev) {\n    _utils.default.broadcast('resize', {\n      viewport: _utils.default.getSize(),\n      originalEvent: ev\n    });\n  }, intervals.resize);\n  window.addEventListener(eventType, handler);\n  listeners.resize = {\n    eventType: eventType,\n    handler: handler\n  };\n}\n/**\n * @access private\n */\n\n\nfunction listenToOrientation() {\n  if (listeners.orientation) {\n    return;\n  }\n\n  var eventType = 'orientationchange';\n  var handler = debounce(function (ev) {\n    _utils.default.broadcast('orientation', {\n      viewport: _utils.default.getSize(),\n      orientation: _utils.default.getOrientation(),\n      originalEvent: ev\n    });\n  }, intervals.orientation);\n  window.addEventListener(eventType, handler);\n  listeners.orientation = {\n    eventType: eventType,\n    handler: handler\n  };\n}\n/**\n * @access private\n */\n\n\nfunction listenToVisibility() {\n  if (listeners.visibility) {\n    return;\n  }\n\n  var eventType = 'visibilitychange';\n  var handler = debounce(function (ev) {\n    _utils.default.broadcast('visibility', {\n      hidden: _utils.default.getVisibility(),\n      originalEvent: ev\n    });\n  }, intervals.visibility);\n  window.addEventListener(eventType, handler);\n  listeners.visibility = {\n    eventType: eventType,\n    handler: handler\n  };\n}\n/**\n * @access private\n */\n\n\nfunction listenToScroll() {\n  if (listeners.scroll) {\n    return;\n  }\n\n  var eventType = 'scroll';\n  var handler = throttle(function (ev) {\n    var scrollPos = _utils.default.getScrollPosition();\n\n    _utils.default.broadcast('scroll', {\n      viewport: _utils.default.getSize(),\n      scrollHeight: scrollPos.height,\n      scrollLeft: scrollPos.left,\n      scrollTop: scrollPos.top,\n      scrollWidth: scrollPos.width,\n      originalEvent: ev\n    });\n  }, intervals.scroll);\n  window.addEventListener(eventType, handler);\n  listeners.scroll = {\n    eventType: eventType,\n    handler: handler\n  };\n}\n/**\n * Start listening for an event(s).\n * @param {string} eventType - The event to start listening for. One of `resize`, `scroll`, `orientation`, `visibility` or `all`.\n * @example\n * \t\t// Start listening for all events.\n * \t\toViewport.listenTo('all');\n *\n * \t\t// It is now possible to listen for debounce o-viewport events such as `oViewport.orientation`.\n *      document.body.addEventListener('oViewport.orientation', function(event) {\n *      \tconsole.log(event.type); // oViewport.orientation\n *      });\n */\n\n\nfunction listenTo(eventType) {\n  if (eventType === 'resize' || eventType === 'all') {\n    listenToResize();\n  }\n\n  if (eventType === 'scroll' || eventType === 'all') {\n    listenToScroll();\n  }\n\n  if (eventType === 'orientation' || eventType === 'all') {\n    listenToOrientation();\n  }\n\n  if (eventType === 'visibility' || eventType === 'all') {\n    listenToVisibility();\n  }\n}\n/**\n * Stop listening for an event(s).\n * @param {string} eventType - The event to stop listening for. One of `resize`, `scroll`, `orientation`, `visibility` or `all`.\n * @example\n * \t\t// Start listening for all events.\n * \t\toViewport.listenTo('all');\n * \t\t// We're done. Stop listening for all events.\n * \t\toViewport.stopListeningTo('all');\n */\n\n\nfunction stopListeningTo(eventType) {\n  if (eventType === 'all') {\n    Object.keys(listeners).forEach(stopListeningTo);\n  } else if (listeners[eventType]) {\n    window.removeEventListener(listeners[eventType].eventType, listeners[eventType].handler);\n    delete listeners[eventType];\n  }\n}\n\nvar _default = {\n  debug: function debug() {\n    _utils.default.debug();\n  },\n  listenTo,\n  stopListeningTo,\n  setThrottleInterval,\n  getOrientation: _utils.default.getOrientation,\n  getSize: _utils.default.getSize,\n  getScrollPosition: _utils.default.getScrollPosition,\n  getVisibility: _utils.default.getVisibility\n};\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar Utils = _interopRequireWildcard(require(\"@financial-times/o-utils\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar _debug;\n/**\n *\n * @param {string} eventType\n * @param {object} data\n * @param {EventTarget} target\n */\n\n\nfunction broadcast(eventType, data, target) {\n  target = target || document.body;\n\n  if (_debug) {\n    console.log('o-viewport', eventType, data);\n  }\n\n  target.dispatchEvent(new CustomEvent('oViewport.' + eventType, {\n    detail: data,\n    bubbles: true\n  }));\n}\n/**\n* Get the viewport height.\n* @param {boolean} ignoreScrollbars [false] - set to true to discount scrollbar height.\n* @return {number}\n*/\n\n\nfunction getHeight(ignoreScrollbars) {\n  return ignoreScrollbars ? document.documentElement.clientHeight : Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n}\n/**\n* Get the viewport width.\n* @param {boolean} ignoreScrollbars [false] - set to true to discount scrollbar width\n* @return {number}\n*/\n\n\nfunction getWidth(ignoreScrollbars) {\n  return ignoreScrollbars ? document.documentElement.clientWidth : Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n}\n/**\n * Viewport size.\n * @typedef {Object} Size\n * @property {number} height\n * @property {number} width\n */\n\n/**\n* Get the viewport width and height.\n* @param {boolean} ignoreScrollbars [false] - set to true to discount scrollbar width/height.\n* @return {Size}\n*/\n\n\nfunction getSize(ignoreScrollbars) {\n  return {\n    height: getHeight(ignoreScrollbars),\n    width: getWidth(ignoreScrollbars)\n  };\n}\n/**\n * Scroll position.\n * @typedef {Object} ScrollPosition\n * @property {number} height - `document.body.scrollHeight`\n * @property {number} width - `document.body.scrollWidth`\n * @property {number} left - `window.pageXOffset || window.scrollX`\n * @property {number} top - `window.pageYOffset || window.scrollY`\n */\n\n/**\n * @return {ScrollPosition}\n */\n\n\nfunction getScrollPosition() {\n  return {\n    height: document.body.scrollHeight,\n    width: document.body.scrollWidth,\n    left: window.pageXOffset || window.scrollX,\n    top: window.pageYOffset || window.scrollY\n  };\n}\n/**\n * @return {string} - 'portrait' or 'landscape'\n */\n\n\nfunction getOrientation() {\n  var orientation = window.screen.orientation;\n\n  if (orientation) {\n    return typeof orientation === 'string' ? orientation.split('-')[0] : orientation.type.split('-')[0];\n  } else if (window.matchMedia) {\n    return window.matchMedia('(orientation: portrait)').matches ? 'portrait' : 'landscape';\n  } else {\n    return getHeight() >= getWidth() ? 'portrait' : 'landscape';\n  }\n}\n/**\n * @return {boolean} - true if the viewport is visible\n */\n\n\nfunction getVisibility() {\n  return document.hidden;\n}\n\nvar _default = {\n  debug: function debug() {\n    _debug = true;\n  },\n  broadcast,\n  getWidth,\n  getHeight,\n  getSize,\n  getScrollPosition,\n  getVisibility,\n  getOrientation,\n  debounce: Utils.debounce,\n  throttle: Utils.throttle\n};\nexports.default = _default;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.debounce = debounce;\nexports.throttle = throttle;\n\n/**\n*\n* Debounces function so it is only called after n milliseconds\n* without it not being called\n*\n* @example\n* Utils.debounce(myFunction() {}, 100);\n*\n* @param {Function} func - Function to be debounced\n* @param {number} wait - Time in miliseconds\n*\n* @returns {Function} - Debounced function\n*/\nfunction debounce(func, wait) {\n  var timeout;\n  return function () {\n    var args = arguments;\n\n    var later = () => {\n      timeout = null;\n      func.apply(this, args);\n    };\n\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n}\n/**\n*\n* Throttle function so it is only called once every n milliseconds\n*\n* @example\n* Utils.throttle(myFunction() {}, 100);\n*\n* @param {Function} func - Function to be throttled\n* @param {number} wait - Time in miliseconds\n*\n* @returns {Function} - Throttled function\n*/\n\n\nfunction throttle(func, wait) {\n  var timeout;\n  return function () {\n    if (timeout) {\n      return;\n    }\n\n    var args = arguments;\n\n    var later = () => {\n      timeout = null;\n      func.apply(this, args);\n    };\n\n    timeout = setTimeout(later, wait);\n  };\n}","const API_URL = \"https://privacy.ft.com/api/v1\";\nconst API_ENDPOINTS = {\n  complianceRegion: \"/compliance-region.json\"\n};\nfunction formatResponse(obj) {\n  return {\n    region: obj.region,\n    legislation: new Set(obj.legislation.split(\",\"))\n  };\n}\nfunction sessionStorageOk() {\n  const test = \"test\";\n  try {\n    sessionStorage.setItem(test, test);\n    sessionStorage.removeItem(test);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\nasync function fetchLegislation() {\n  const complianceStr = sessionStorageOk() && sessionStorage.getItem(\"user-compliance\");\n  const complianceObj = complianceStr && JSON.parse(complianceStr);\n  if (complianceObj) {\n    return Promise.resolve(formatResponse(complianceObj));\n  } else {\n    const url = `${API_URL}${API_ENDPOINTS.complianceRegion}`;\n    const res = await fetch(url);\n    const compliance = await (res.ok ? res.json() : Promise.reject(res));\n    if (sessionStorageOk()) {\n      sessionStorage.setItem(\"user-compliance\", JSON.stringify(compliance));\n    }\n    return formatResponse(compliance);\n  }\n}\nconst NO_PRIVACY_COOKIE = \"no-privacy-cookie\";\nfunction getUsPrivacyCookie() {\n  const uspCookie = document.cookie.split(\"; \").find((row) => row.startsWith(\"usprivacy\"));\n  if (!uspCookie) {\n    return null;\n  }\n  return uspCookie.split(\"=\")[1];\n}\nfunction getUsPrivacyForTracking() {\n  return getUsPrivacyCookie() || NO_PRIVACY_COOKIE;\n}\nasync function __uspapi(command, version, callback) {\n  if (typeof callback !== \"function\") {\n    return console.error(\n      \"Please provide a valid callback to the __uspapi() function. __uspapi(command, version, callback)\"\n    );\n  }\n  if (version !== 1 || command !== \"getUSPData\") {\n    return console.error(\"Invalid version or command specified for the __uspapi() function\");\n  }\n  try {\n    const uspCookie = getUsPrivacyCookie();\n    if (uspCookie) {\n      return callback({ version, uspString: uspCookie }, true);\n    } else {\n      const { legislation } = await fetchLegislation();\n      if (legislation.has(\"ccpa\")) {\n        return callback({ version, uspString: \"1NNN\" }, true);\n      } else {\n        return callback({ version, uspString: \"1---\" }, true);\n      }\n    }\n  } catch (e) {\n    return console.error(e);\n  }\n}\nfunction setUSPrivacy() {\n  if (typeof window.__uspapi === \"function\") {\n    return;\n  }\n  window.__uspapi = __uspapi;\n}\nfunction setUSPrivacyCookie(consent, domain) {\n  domain = domain || (document.location.hostname || \"\").replace(\"www.\", \"\");\n  const uspString = `1Y${consent ? \"N\" : \"Y\"}N`;\n  const maxAge = 60 * 60 * 24 * 365 * 5;\n  document.cookie = `usprivacy=${uspString};max-age=${maxAge};path=/;domain=${domain}`;\n}\nexport {\n  NO_PRIVACY_COOKIE,\n  __uspapi,\n  getUsPrivacyCookie,\n  getUsPrivacyForTracking,\n  setUSPrivacy,\n  setUSPrivacyCookie\n};\n","import { fetchLegislation } from '@financial-times/privacy-legislation-client';\n\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\n\nfunction _toPrimitive(input, hint) {\n  if (_typeof(input) !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (_typeof(res) !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n  var key = _toPrimitive(arg, \"string\");\n  return _typeof(key) === \"symbol\" ? key : String(key);\n}\n\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\n\nclass PersonalisedConsent {\n  constructor() {\n    this.gpcValue = false;\n    /** @type {RegionalCompliance} */\n    this.privacyLegislation = {\n      legislation: undefined,\n      region: undefined\n    };\n    /** @type {ConsentInfo} */\n    this.consentCookie = {\n      behavioral: false,\n      demographic: false,\n      programmatic: false,\n      permutiveadsOnsite: false,\n      personalisedmarketingOnsite: false,\n      recommendedcontentOnsite: true,\n      all: false\n    };\n  }\n\n  /**\n   * init method initialises all the properties in the class by calling all the update functions\n   */\n  async init() {\n    await this.updatePrivacyLegislation();\n    this.updateGpcValue();\n    this.updateConsentCookie();\n  }\n\n  /**\n   * update method updates all the properties in the class, and is actaully an alias of init()\n   */\n  async update() {\n    await this.init();\n  }\n\n  /**\n   * updatePrivacyLegislation method updates the privacy policy and region\n   * by calling the 'fetchLegislation' function in package 'privacy-legislation-client'\n   * @returns {Promise<RegionalCompliance>}\n   */\n  async updatePrivacyLegislation() {\n    try {\n      const {\n        legislation,\n        region\n      } = await fetchLegislation();\n      this.privacyLegislation = {\n        legislation,\n        region\n      };\n    } catch (err) {\n      this.privacyLegislation = {\n        legislation: undefined,\n        region: undefined\n      };\n    }\n    return this.privacyLegislation;\n  }\n\n  /**\n   * updateGpcValue method updates the Global Privacy Control (GPC) flag in the browser\n   * @returns {boolean}\n   */\n  updateGpcValue() {\n    this.gpcValue = navigator.globalPrivacyControl;\n    return this.gpcValue;\n  }\n\n  /**\n   * updateConsentCookie method updates the consent settings from `FTConsent` cookie\n   * @returns {ConsentInfo}\n   */\n  updateConsentCookie() {\n    const FTCONSENT_COOKIE_PATTERN = /FTConsent=([^;]+)/;\n    const match = document.cookie.match(FTCONSENT_COOKIE_PATTERN);\n    if (!match) {\n      // cookie stasis or no consent cookie found\n      this.consentCookie = {\n        behavioral: false,\n        demographic: false,\n        programmatic: false,\n        permutiveadsOnsite: false,\n        recommendedcontentOnsite: true,\n        personalisedmarketingOnsite: false,\n        all: false\n      };\n    } else {\n      const consentCookie = decodeURIComponent(match[1]);\n      this.consentCookie = {\n        behavioral: consentCookie.includes(\"behaviouraladsOnsite:on\"),\n        demographic: consentCookie.includes(\"demographicadsOnsite:on\"),\n        programmatic: consentCookie.includes(\"programmaticadsOnsite:on\"),\n        permutiveadsOnsite: consentCookie.includes(\"permutiveadsOnsite:on\"),\n        recommendedcontentOnsite: consentCookie.includes(\"recommendedcontentOnsite:on\"),\n        personalisedmarketingOnsite: consentCookie.includes(\"personalisedmarketingOnsite:on\"),\n        all: consentCookie.includes(\"behaviouraladsOnsite:on\") && consentCookie.includes(\"demographicadsOnsite:on\") && consentCookie.includes(\"programmaticadsOnsite:on\")\n      };\n    }\n    return this.consentCookie;\n  }\n\n  /**\n   * isCcpaAndGpc method checks if the user is subject to CCPA legislation AND has GPC enabled\n   * it returns true when\n   * 1. the user is subject to CCPA legislation AND has GPC enabled\n   * 2. the legislation policies of the user cannot be retrieved via API AND has GPC enabled\n   * @returns {boolean}\n   */\n  isCcpaAndGpc() {\n    const {\n      legislation\n    } = this.privacyLegislation;\n    // if no privacy policy info, treat it as subject to CCPA\n    if (!legislation) {\n      return this.gpcValue;\n    }\n    const CCPA = PersonalisedConsent.legislationPolicy.CCPA;\n    const isGPCCompliant = legislation.has(CCPA);\n    return isGPCCompliant && this.gpcValue;\n  }\n\n  /**\n   * isAllowed method returns whether behavioral, demographic and programmatic ads is allowed or not\n   * A certain type of personalised ads is disallowed when\n   * 1. The user is in California, US AND has Global Privacy Control (GPC) enabled, OR\n   * 2. There is no 'FTConsent' cookie, OR\n   * 3. '(ads-type)Onsite:on' is not set in 'FTConsent' cookie, where ads-type = behavioral, demographic, or programmatic\n   * Otherwise, that type of personalised ads is allowed\n   * @returns {ConsentInfo}\n   */\n  isAllowed() {\n    const isCcpaAndGpc = this.isCcpaAndGpc();\n    if (isCcpaAndGpc) {\n      return {\n        behavioral: false,\n        demographic: false,\n        programmatic: false,\n        permutiveadsOnsite: false,\n        recommendedcontentOnsite: true,\n        personalisedmarketingOnsite: false,\n        all: false\n      };\n    }\n    const {\n      behavioral,\n      demographic,\n      programmatic,\n      permutiveadsOnsite,\n      personalisedmarketingOnsite,\n      recommendedcontentOnsite\n    } = this.consentCookie;\n    const all = behavioral && demographic && programmatic;\n    return {\n      behavioral,\n      demographic,\n      programmatic,\n      permutiveadsOnsite,\n      personalisedmarketingOnsite,\n      recommendedcontentOnsite,\n      all\n    };\n  }\n\n  /**\n   * getLegislation method returns the legislation policies which the user is subject to\n   * @returns {Legislation}\n   */\n  getLegislation() {\n    return this.privacyLegislation.legislation;\n  }\n\n  /**\n   * getRegion method returns the region which the user is in\n   * @returns {Region}\n   */\n  getRegion() {\n    return this.privacyLegislation.region;\n  }\n\n  /**\n   * getGpcValue method returns the globalPrivacyControl value in user's browser\n   * @returns {boolean}\n   */\n  getGpcValue() {\n    return this.gpcValue;\n  }\n\n  /**\n   * getConsentCookie method returns the consent settings in the cookie\n   * (i.e. personalised ads consent choices in 'FTConsent' cookie)\n   * @returns {ConsentInfo}\n   */\n  getConsentCookie() {\n    return this.consentCookie;\n  }\n}\n\n/**\n * getPersonalisedConsent is a helper function that creates a new instance of PersonalisedConsent, and then returns it with all properties updated\n * @returns {Promise<PersonalisedConsent>}\n */\n// existing legislation policies\n_defineProperty(PersonalisedConsent, \"legislationPolicy\", {\n  CCPA: \"ccpa\",\n  GDPR: \"gdpr\"\n});\nconst getPersonalisedConsent = async () => {\n  const pc = new PersonalisedConsent();\n  await pc.init();\n  return pc;\n};\n\nexport { PersonalisedConsent, getPersonalisedConsent };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const API_URL = \"https://privacy.ft.com/api/v1\";\nexport const API_ENDPOINTS = {\n    complianceRegion: \"/compliance-region.json\",\n};\nfunction formatResponse(obj) {\n    return {\n        region: obj.region,\n        legislation: new Set(obj.legislation.split(\",\")),\n    };\n}\nfunction sessionStorageOk() {\n    const test = \"test\";\n    try {\n        sessionStorage.setItem(test, test);\n        sessionStorage.removeItem(test);\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\nfunction getHostname(referrer) {\n    if (referrer) {\n        try {\n            return new URL(referrer).hostname;\n        }\n        catch (err) {\n            return referrer;\n        }\n    }\n    return typeof window === \"undefined\" ? \"\" : window.location.hostname;\n}\n/**\n * Return a promise resolving to an object containing information about the\n * user's legal protections: *\n * - region: A string consisting of a country code or country-region (\"GB\", \"US-CA\")\n * - legislation: A Set of the applicable legislationIds\n */\nexport async function fetchLegislation() {\n    // Look in session storage first\n    const complianceStr = sessionStorageOk() && sessionStorage.getItem(\"user-compliance\");\n    const complianceObj = complianceStr && JSON.parse(complianceStr);\n    if (complianceObj) {\n        return Promise.resolve(formatResponse(complianceObj));\n    }\n    // Not found in session storage, fetch from API\n    else {\n        try {\n            const url = `${API_URL}${API_ENDPOINTS.complianceRegion}`;\n            const res = await fetch(url);\n            const compliance = await (res.ok ? res.json() : Promise.reject(res));\n            if (sessionStorageOk()) {\n                sessionStorage.setItem(\"user-compliance\", JSON.stringify(compliance));\n            }\n            return formatResponse(compliance);\n        }\n        catch (err) {\n            throw new Error(err.status);\n        }\n    }\n}\n/**\n * Embed legislationIds and referrer as params to `url`\n * Allows customisation (e.g. skinning, granularity of consent, etc) of the destination page\n *\n * This method provides a standardised way to interface with x-privacy-manager\n */\nexport function buildConsentPageUrl({ url, legislation, referrer }) {\n    const decoratedUrl = new URL(url);\n    const hostname = getHostname(referrer);\n    for (const id of legislation) {\n        decoratedUrl.searchParams.append(\"legislation\", id);\n    }\n    if (hostname) {\n        decoratedUrl.searchParams.set(\"referrer\", hostname.toLowerCase());\n    }\n    return decoratedUrl.toString();\n}\n","var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n","var e={capture:!0,once:!0,passive:!0},t=function(){return\"interactive\"===document.readyState||\"complete\"===document.readyState},n=function(e,n){return!(!function(e){return document.readyState===e}(e)&&!t())&&(n(e),!0)},r=function(){return new Promise(function(t){n(\"loading\",t)||document.addEventListener(\"readystatechange\",function(){\"loading\"===document.readyState&&t(\"loading\")},e)})},o=function(){return new Promise(function(t){n(\"interactive\",t)||document.addEventListener(\"readystatechange\",function(){\"interactive\"===document.readyState&&t(\"interactive\")},e)})},u=function(){return new Promise(function(t){n(\"complete\",t)||document.addEventListener(\"readystatechange\",function(){\"complete\"===document.readyState&&t(\"complete\")},e)})},i=function(){return new Promise(function(t){n(\"domready\",t)||document.addEventListener(\"DOMContentLoaded\",function(){t(\"domready\")},e)})},c=function(){return new Promise(function(t){n(\"load\",t)||window.addEventListener(\"load\",function(){t(\"load\")},e)})},d={};Object.defineProperties(d,{state:{get:function(){return document.readyState}},loading:{get:function(){return r()}},interactive:{get:function(){return o()}},complete:{get:function(){return u()}},window:{get:function(){return c()}},load:{get:function(){return c()}},domready:{get:function(){return i()}},dom:{get:function(){return i()}},ready:{get:function(){return t()}}});export default d;export{r as loading,o as interactive,u as complete,i as domready,c as load};\n//# sourceMappingURL=ready-state.es.js.map\n"],"sourceRoot":""}