{"version":3,"file":"seattlecoffeegear.com/index.min.js","sources":["seattlecoffeegear.com/index.js"],"sourcesContent":["/*! DFC AB Testing Framework: 2.0.0.2025-03-05T21:15:35.893Z */\n\"use strict\";\n\n// framework v2 helper functions / bootstrapping\nif (!function lsTest() {\n const test = 'test';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n}()) {\n throw new Error('DFC: localStorage required.');\n}\n(() => {\n const dfc = window.dfc; // for minification\n\n const doNotTrack = () => {\n localStorage.setItem('dfc-do-not-track', 'true');\n dfc.DO_NOT_TRACK = true;\n };\n dfc.DO_NOT_TRACK = localStorage.getItem('dfc-do-not-track') === 'true';\n if (/\\b(bot|crawler|spider|slurp)\\b/i.test(navigator.userAgent)) {\n doNotTrack();\n }\n const searchParams = new URLSearchParams(location.search);\n\n // first we reset params if needed\n if (searchParams.get('dfc-reset') || searchParams.get('dfc-reset-all')) {\n for (const key in localStorage) {\n if (/^dfc[-:]/.test(key)) {\n localStorage.removeItem(key);\n }\n }\n }\n\n // then we recoup the params set from preview link\n const prefix = 'dfc-exp-';\n try {\n const force = new RegExp(`^${prefix}`);\n searchParams.forEach((value, key) => {\n if (force.test(key)) {\n localStorage.setItem(key, value);\n doNotTrack();\n }\n });\n } catch (e) {\n // do nothing b/c old browsers don't support URLSearchParams\n // eslint-disable-next-line no-console\n console.error(e);\n }\n\n // Reset disable if searchParams.get('dfc-env')\n if (searchParams.get('dfc-env')) {\n localStorage.removeItem('dfc-disable');\n }\n\n // iife flags for closure\n const [env, disable] = (() => {\n return ['env', 'disable'].map(key => {\n const ns = `dfc-${key}`;\n const value = searchParams.get(ns) || getWithExpiry(ns);\n if (value) {\n setWithExpiry(ns, value);\n }\n dfc[key] = value;\n return value;\n });\n })();\n\n // then we disable and adjust based on config\n if (disable) {\n throw new Error('dfc: disabled');\n }\n\n // add do not track flag for any env\n if (env) doNotTrack();\n if (!dfc.onExp) {\n dfc.onExp = fn => {\n dfc.experiments.forEach(arr => fn(arr[0], arr[1]));\n dfc.trackers.push(fn);\n };\n }\n const loadScript = (url, callback, onerror) => {\n // log('loadScript', url);\n const script = document.createElement('script');\n const scripts = document.getElementsByTagName('script')[0];\n script.src = url;\n if (callback) script.onload = () => callback(script);\n // eslint-disable-next-line no-console\n script.onerror = onerror || (e => console.error('dfc.loadScript', url, e));\n scripts.parentNode.insertBefore(script, scripts);\n };\n dfc.loadScript = src => new Promise(loadScript.bind(null, src));\n dfc.loadLink = url => {\n // log('loadLink', url);\n const head = document.getElementsByTagName('HEAD')[0];\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n head.appendChild(link);\n };\n if (env === 'dev') {\n dfc.host = `https://localhost:8888`;\n } else if (!env || env === 'main') {\n // dfc.host = `https://digitalfuelcapital.pages.dev`;\n dfc.host = `https://digitalfueloptimize.com`;\n } else {\n // shouldn't be possible to get here but just in case\n if (!env) throw new Error('DFC ENV required for non-main env');\n dfc.host = `https://${env}.digitalfuelcapital.pages.dev`;\n }\n\n /****************************************************************************\n * Pivot off environment flag for loading preview links\n *****************************************************************************/\n\n if (/^(staging|dev|(pr|release)-\\d+)$/.test(env) && !window._dfcEnvLoaded) {\n window._dfcEnvLoaded = {\n env\n };\n const client = (() => {\n const script = document.querySelector('script[src*=\"digitalfueloptimize.com/\"], script[src*=\"digitalfuelcapital.pages.dev/\"], script[src*=\"dgjvwr5wei7tc.amplifyapp.com/\"]');\n const src = (script && script.getAttribute('src') || '//./').split('//')[1];\n const client = src.split('/')[1];\n return client;\n })();\n\n // if we're not on the desired env then load it\n loadScript(`${dfc.host}/${client}/index.js`);\n throw new Error(`dfc-env set - stopping execution to load ${env}`);\n }\n\n // prevent double framework load from timex\n if (dfc.loaded) {\n throw new Error(`window.dfc.loaded===true - don't load twice`);\n }\n dfc.loaded = true;\n\n // Logging\n const noop = () => {};\n dfc.log = noop;\n dfc.error = noop;\n if (env) {\n // eslint-disable-next-line no-console\n dfc.log = console.log.bind(console, 'dfc');\n // eslint-disable-next-line no-console\n dfc.error = console.error.bind(console, 'dfc');\n dfc.log('running v2.js version', JSON.stringify({\n env: env,\n inline: dfc.version\n }));\n if (env === 'dev') {\n loadScript(`https://localhost:35729/livereload.js?snipver=1`);\n }\n loadScript(`${dfc.host}/notify.js`);\n }\n async function wrap(str, fn, ...args) {\n try {\n return await fn(...args);\n } catch (e) {\n if (e) {\n dfc.error(str, e);\n }\n }\n }\n dfc.wrap = wrap;\n async function safe(fn, ...args) {\n try {\n return await fn(...args);\n } catch (e) {\n if (env) {\n // eslint-disable-next-line no-console\n console.error('DFC ERROR', e);\n }\n }\n }\n dfc.safe = safe;\n dfc.getCookie = function (cname) {\n const nameEQ = cname + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n };\n\n // domReady\n dfc.ready = new Promise(res => {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n res();\n } else {\n document.addEventListener('DOMContentLoaded', res);\n }\n });\n\n // window load\n dfc.load = new Promise(res => {\n dfc.log('document.readyState', document.readyState);\n if (document.readyState === 'complete') {\n res();\n } else {\n window.addEventListener('load', res);\n }\n });\n let stop = false;\n dfc.load.then(() => {\n dfc.log('page loaded');\n // eslint-disable-next-line no-restricted-globals\n setTimeout(() => {\n stop = true;\n }, 250);\n });\n\n /**\n * Add a style tag to the head\n * @param {*} css\n * @returns {HTMLStyleElement}\n * @example\n * dfc.addStyle(`.el-class { color: red; }`);\n * @example with id for removal later\n * const styleId = dfc.addStyle('body {display:none}');\n * await dfc.load\n * dfc.qs(`#${styleId}`).remove();\n * @example remove after load event\n * dfc.load.then(() => {\n * const $style = dfc.qs(`#${styleId}`);\n * $style && $style.remove();\n * });\n */\n let _idx = 0;\n dfc.addStyle = css => {\n const head = document.head || document.getElementsByTagName('head')[0];\n const style = document.createElement('style');\n style.id = `dfc-style-${_idx++}`;\n head.appendChild(style);\n style.type = 'text/css';\n style.appendChild(document.createTextNode(css));\n return style.id;\n };\n const jq = (callback, onError) => {\n const $ = window.jQuery;\n if ($ && $.fn && $.fn.jquery) safe(callback.bind(null, $));else if (stop) onError(new Error('dfc.jQuery jQuery not found'));else window.requestAnimationFrame(jq.bind(null, callback, onError));\n };\n\n // weird cache so we don't poll all the time\n let jQuery = null;\n Object.defineProperty(dfc, 'jQuery', {\n get: function () {\n return jQuery || (jQuery = new Promise(jq.bind(null)));\n }\n });\n const raf = (selector, callback, onError) => {\n const $els = document.querySelectorAll(selector);\n const found = !!$els.length;\n if (found) return safe(callback.bind(null, $els));\n if (stop) onError && onError();else window.requestAnimationFrame(raf.bind(null, selector, callback, onError));\n };\n\n /**\n * @param {*} selector\n * @returns {Promise}\n * @example\n * const els = await dfc.raf('.el-class');\n * els.forEach(el => el.style.color = 'red');\n */\n dfc.raf = selector => new Promise(raf.bind(null, selector));\n\n /**\n * @param {*} selector\n * @returns {Promise}\n * @example\n * const el = await dfc.find('#my-id');\n * el.style.color = 'red';\n */\n dfc.find = selector => dfc.raf(selector).then($els => $els[0]);\n dfc.$raf = selector => new Promise(jq.bind(null)).then(async $ => {\n const $els = await dfc.raf(selector);\n return $($els);\n });\n dfc.qs = document.querySelector.bind(document);\n dfc.qsa = (selector, context = document) => Array.from(context.querySelectorAll(selector));\n dfc.createEl = str => {\n const div = document.createElement('div');\n div.innerHTML = str.trim();\n\n // Change this to div.childNodes to support multiple top-level nodes.\n return div.firstChild;\n };\n dfc.live = (selector, event, callback, context) => {\n // helper for enabling IE 8 event bindings\n function addEvent(el, type, handler) {\n if (el.attachEvent) el.attachEvent('on' + type, handler);else el.addEventListener(type, handler);\n }\n // live binding helper using matchesSelector\n function live(selector, event, callback, context) {\n addEvent(context || document, event, e => {\n let found,\n el = e.target || e.srcElement;\n while (el && el.matches && el !== context && !(found = el.matches(selector))) el = el.parentElement;\n if (found) callback.call(el, e);\n });\n }\n live(selector, event, callback, context);\n };\n\n // eslint-disable-next-line no-restricted-globals\n dfc.sleep = ms => new Promise(resolve => setTimeout(resolve, ms));\n dfc.waitFor = async f => {\n let resp;\n while (!(resp = f()) && !stop) await new Promise(requestAnimationFrame);\n if (resp) return resp;else throw new Error('dfc.waitFor: f() not true by stop', f);\n };\n dfc.waitForever = async f => {\n let resp;\n while (!(resp = f())) await new Promise(requestAnimationFrame);\n return resp;\n };\n dfc.waitForSeconds = async (f, seconds = 5) => {\n let resp,\n stop = false;\n // eslint-disable-next-line no-restricted-globals\n setTimeout(() => {\n stop = true;\n }, seconds * 1000);\n while (!(resp = f()) && !stop) await new Promise(requestAnimationFrame);\n return resp;\n };\n\n // dfc.removeElementById = (id) => {\n // const elem = document.getElementById(id);\n // return elem && elem.parentNode.removeChild(elem);\n // };\n\n // dfc.setParam = (str, k, v) => {\n // const url = (() => {\n // try {\n // return new URL(str);\n // } catch (e) {\n // return new URL(str, location.href);\n // }\n // })();\n // url.searchParams.set(k, v);\n // return url.toString();\n // };\n\n // dfc.$setParam = ($a, k, v) => {\n // const href = $a.attr('href');\n // return $a.attr('href', dfc.setParam(href, k, v));\n // };\n\n // cspell:ignore cvalue, exdays\n // function setCookie(cname, cvalue, exdays) {\n // const d = new Date();\n // d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n // const expires = 'expires=' + d.toUTCString();\n // document.cookie = cname + '=' + cvalue + ';' + expires + ';path`=/';\n // }\n\n /**\n * Hoisted Helper Functions\n */\n\n async function run(row, fn, ...args) {\n // weird hack to paste run in console when in dev\n if (typeof row === 'function') {\n // eslint-disable-next-line no-console\n console.error('The DFC files should only be utilized after they have undergone compilation. This code ' + 'is intended to serve as a starting point, it should not be implemented as is and ' + 'should be refactored before being integrated into production.');\n return env && dfc.wrap('run', row, ...[fn, ...args]);\n }\n const {\n experiment,\n expId,\n status\n } = row;\n const key = `dfc-exp-${expId}`;\n dfc.friendly[expId] = row;\n // set 1 for 100%s\n if (status === '100%' && parseInt(localStorage.getItem(key), 10) !== 1) {\n localStorage.setItem(key, 1);\n }\n\n // run everything on non main envs\n if (env && env !== 'main') {\n return dfc.wrap(experiment, fn, ...args);\n } else {\n // on deck run only when env flag set:\n if (status === 'ONDECK' && env === 'main') return dfc.wrap(experiment, fn, ...args);\n // on main, run live and 100%s\n if (status === 'LIVE' || status === '100%') return dfc.wrap(experiment, fn, ...args);\n }\n }\n dfc.run = run;\n dfc.friendly = {};\n dfc.prebucket = (id, variations = 2) => {\n let idx = window.dfc(`prebucket-${id}`, variations);\n if (/^100-/.test(id)) idx = 1;\n localStorage.setItem(`dfc-exp-${id}`, idx);\n return {\n idx,\n activate: () => window.dfc(id, variations)\n };\n };\n\n /**\n * Optimize and Experience Linking\n */\n\n dfc.shouldIgnoreRegex = /^(100|preview|prebucket|sku|ignore|todo|ondeck)/i;\n dfc.shouldIgnore = id => {\n if (!id) {\n dfc.log('dfc.shouldIgnore: ID IS NULL', id);\n return true;\n }\n if (dfc.DO_NOT_TRACK) {\n dfc.log('dfc.shouldIgnore: DO_NOT_TRACK', id);\n return true;\n }\n if (dfc.shouldIgnoreRegex.test(id)) {\n dfc.log('dfc.shouldIgnore: ignore', id);\n return true;\n }\n return false;\n };\n dfc.trackExperiences = async ({\n dedupeMs = 1000 * 60 * 60 * 12,\n onReady = false\n } = {}) => {\n // https://developers.google.com/analytics/devguides/collection/ga4/integration\n await dfc[onReady ? 'ready' : 'load'];\n dfc.onExp((id, idx) => {\n if (dfc.shouldIgnore(id)) return;\n if (dedupeMs > 1) {\n // hack to confirm valid number\n const ns = `dfc-ga4exp-${id}`;\n const value = dfc.getWithExpiry(ns);\n if (parseInt(value, 10) === parseInt(idx, 10)) return;\n dfc.setWithExpiry(ns, idx, dedupeMs);\n }\n window.dataLayer = window.dataLayer || [];\n function gtag() {\n window.dataLayer.push(arguments);\n }\n gtag('event', 'experience_impression', {\n // Replace the value with the Experiment-variant ID\n exp_variant_string: `DFC-${id}-${idx}`\n });\n });\n };\n dfc.trackExperimentsLocally = async ({\n dedupeMs = 1000 * 60 * 60 * 24,\n onReady = false\n } = {}) => {\n // Wait for the document to be ready or fully loaded\n await dfc[onReady ? 'ready' : 'load'];\n const localStorageKey = 'dfc-experiment-interactions';\n const timestamp = Date.now();\n\n // Ensure the local storage array exists\n const getExperimentData = () => {\n const data = localStorage.getItem(localStorageKey);\n return data ? JSON.parse(data) : [];\n };\n const saveExperimentData = data => {\n localStorage.setItem(localStorageKey, JSON.stringify(data));\n };\n\n // Clean up old experiments\n const cleanOldExperiments = () => {\n const experiments = getExperimentData();\n const filteredExperiments = experiments.filter(exp => timestamp - exp.timestamp <= 1000 * 60 * 60 * 24); // 24 hours\n saveExperimentData(filteredExperiments);\n };\n\n // Initial cleanup to ensure no stale data\n cleanOldExperiments();\n dfc.onExp((id, idx) => {\n if (dedupeMs > 1) {\n const ns = `dfc-local-exp-${id}`;\n const value = dfc.getWithExpiry(ns);\n if (parseInt(value, 10) === parseInt(idx, 10)) return;\n dfc.setWithExpiry(ns, idx, dedupeMs);\n }\n\n // Add the experiment interaction to local storage\n const experiments = getExperimentData();\n experiments.push({\n id,\n idx,\n timestamp // Useful for tracking when the interaction occurred\n });\n\n // Clean up old experiments and save updated data back to local storage\n cleanOldExperiments();\n saveExperimentData(experiments);\n });\n };\n dfc.getExperimentString = () => {\n const localStorageKey = 'dfc-experiment-interactions';\n\n // Retrieve the experiment data from localStorage\n const experiments = JSON.parse(localStorage.getItem(localStorageKey)) || [];\n\n // Map the data to `id-idx` format and join them with commas\n const experimentString = experiments.map(exp => `${exp.id}-${exp.idx}`).join(',');\n return experimentString;\n };\n dfc.trackClarity = async () => {\n await dfc.load;\n if (!window.clarity) return;\n /*global clarity*/\n\n const activated = [];\n dfc.onExp((id, idx) => {\n if (dfc.shouldIgnore(id)) return;\n activated.push([id, idx]);\n });\n if (activated.length) {\n // prettier-ignore\n clarity('set', 'experiment', activated.map(([id, idx]) => `${id}:v${idx}`));\n }\n activated.push = ([id, idx]) => {\n clarity('set', 'experiment', `${id}:v${idx}`);\n };\n };\n\n // call like this: dfc.track('exp1-right-click');\n dfc.track = async _name => {\n dfc.log('dfc.track: ', _name);\n if (dfc.DO_NOT_TRACK) return dfc.log('dfc.DO_NOT_TRACK');\n await dfc.load; // wait till load\n\n window.dataLayer = window.dataLayer || [];\n function gtag() {\n window.dataLayer.push(arguments);\n }\n gtag('event', 'dfc_track_' + _name.toLowerCase().replace(/[-\\s]+/g, '_').replace(/[^a-z0-9_]/g, '').replace(/__+/g, '_').replace(/^_|_$/g, ''));\n };\n dfc.setWithExpiry = setWithExpiry;\n function setWithExpiry(key, value, ms = 1000 * 60 * 30) {\n const now = new Date();\n const item = {\n value: value,\n expiry: now.getTime() + ms\n };\n localStorage.setItem(key, JSON.stringify(item));\n }\n dfc.getWithExpiry = getWithExpiry;\n function getWithExpiry(key) {\n const itemStr = localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n if (now.getTime() > item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n }\n})();\nif (/^(www\\.)?seattlecoffeegear\\.com$/i.test(window.location.hostname)) {\n dfc.trackClarity();\n dfc.trackExperiences();\n}\nwindow.scgAnalytics = async (action, label) => {\n dfc.track(`scg-${action}-${label}`);\n};\ndfc.loadScript(dfc.host + '/statsig.scg.js').then(async () => {\n /*global statsigMicrolib*/\n\n // track back on load\n await dfc.load;\n dfc.onExp((id, idx) => {\n if (dfc.shouldIgnore(id)) return;\n statsigMicrolib.onBucket(id, idx);\n });\n});"],"names":["test","localStorage","setItem","removeItem","e","Error","dfc","window","doNotTrack","DO_NOT_TRACK","searchParams","getItem","navigator","userAgent","URLSearchParams","location","search","get","key","force","RegExp","forEach","value","console","error","env","disable","map","ns","getWithExpiry","setWithExpiry","onExp","fn","experiments","arr","trackers","push","loadScript","url","callback","onerror","script","document","createElement","scripts","getElementsByTagName","src","onload","parentNode","insertBefore","Promise","bind","loadLink","head","link","rel","type","href","appendChild","host","_dfcEnvLoaded","client","querySelector","getAttribute","split","loaded","noop","async","safe","args","log","JSON","stringify","inline","version","wrap","str","getCookie","cname","nameEQ","ca","cookie","let","i","length","c","charAt","substring","indexOf","ready","res","readyState","addEventListener","load","stop","_idx","then","setTimeout","addStyle","css","style","id","createTextNode","jq","onError","$","jQuery","jquery","requestAnimationFrame","Object","defineProperty","raf","selector","$els","querySelectorAll","ms","now","Date","item","expiry","getTime","itemStr","parse","find","$raf","qs","qsa","context","Array","from","createEl","div","innerHTML","trim","firstChild","live","event","el","handler","found","target","srcElement","matches","parentElement","call","attachEvent","sleep","resolve","waitFor","f","resp","waitForever","waitForSeconds","seconds","run","row","experiment","expId","status","friendly","parseInt","prebucket","variations","idx","activate","shouldIgnoreRegex","shouldIgnore","trackExperiences","dedupeMs","onReady","dataLayer","arguments","gtag","exp_variant_string","trackExperimentsLocally","localStorageKey","timestamp","getExperimentData","data","saveExperimentData","cleanOldExperiments","filteredExperiments","filter","exp","getExperimentString","join","trackClarity","clarity","activated","track","_name","toLowerCase","replace","hostname","scgAnalytics","action","label","statsigMicrolib","onBucket"],"mappings":"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"}