{
  "version": 3,
  "sources": ["../src/utils/window_slots.ts", "../src/runtime/d8a_global.ts", "../src/runtime/state.ts", "../src/runtime/consent_resolver.ts", "../src/runtime/consent_update_ping.ts", "../src/utils/is_record.ts", "../src/runtime/queue_consumer.ts", "../src/cookies/d8a_cookies.ts", "../src/utils/gtag_primitives.ts", "../src/cookies/cookie_jar.ts", "../src/ga4/gtag_mapper.ts", "../src/utils/endpoint.ts", "../src/runtime/browser_context.ts", "../src/transport/send.ts", "../src/cookies/consent.ts", "../src/cookies/identity.ts", "../src/runtime/uach.ts", "../src/ga4/consent_wire.ts", "../src/runtime/anon_cid.ts", "../src/runtime/engagement_timer.ts", "../src/runtime/config_resolver.ts", "../src/runtime/debug_logger.ts", "../src/runtime/param_precedence.ts", "../src/cookies/cookie_settings.ts", "../src/cookies/session_manager.ts", "../src/version.ts", "../src/utils/collect_metadata.ts", "../src/runtime/dispatcher.ts", "../src/runtime/runtime_names.ts", "../src/runtime/gtag_consent_bridge.ts", "../src/runtime/enhanced_measurement.ts", "../src/runtime/linker.ts", "../src/install.ts"],
  "sourcesContent": ["import type { WindowLike } from \"../types.ts\";\n\ntype WindowSlotContainer = WindowLike & Record<string, unknown>;\n\nfunction windowDict(w: WindowLike): WindowSlotContainer {\n  // WindowLike intentionally does NOT have an index signature because we want it to remain\n  // assignable from the real `window` object. Keep the string-key indexing isolated here.\n  return w as WindowSlotContainer;\n}\n\nexport function getWindowSlot<T = unknown>(w: WindowLike, key: string): T | undefined {\n  return windowDict(w)[key] as T | undefined;\n}\n\nexport function setWindowSlot<T = unknown>(w: WindowLike, key: string, value: T) {\n  windowDict(w)[key] = value;\n}\n\nexport function ensureArraySlot<T = unknown>(w: WindowLike, key: string): T[] {\n  const v = getWindowSlot<unknown>(w, key);\n  if (Array.isArray(v)) return v;\n  const arr: T[] = [];\n  setWindowSlot<T[]>(w, key, arr);\n  return arr;\n}\n", "/**\n * Creates a `d8a(...)` function compatible with the snippet API.\n *\n * Required behavior:\n * - `d8a('event', ...)` behaves the same as `d8a.event(...)` etc.\n * - The function form pushes to `dataLayer`.\n */\nimport { ensureArraySlot } from \"../utils/window_slots.ts\";\n\nexport function createD8aGlobal({\n  windowRef,\n  dataLayerName = \"d8aLayer\",\n}: {\n  windowRef: import(\"../types.ts\").WindowLike;\n  dataLayerName?: string;\n}) {\n  const w = windowRef;\n  if (!w) throw new Error(\"createD8aGlobal: windowRef is required\");\n\n  function d8a(..._args: unknown[]) {\n    // We intentionally ignore `_args` and push the raw `arguments` object (snippet compatibility).\n    void _args;\n    // Match the snippet: push the raw arguments so a loader can interpret them.\n    const dl = dataLayerName;\n    const arr = ensureArraySlot<unknown>(w, dl);\n    arr.push(arguments);\n  }\n\n  // Method aliases (same behavior as commands).\n  d8a.js = (date: unknown) => d8a(\"js\", date);\n  d8a.config = (propertyId: unknown, params: unknown) => d8a(\"config\", propertyId, params);\n  d8a.event = (eventName: unknown, params: unknown) => d8a(\"event\", eventName, params);\n  d8a.set = (a: unknown, b?: unknown) => (b === undefined ? d8a(\"set\", a) : d8a(\"set\", a, b));\n  d8a.consent = (action: unknown, state: unknown) => d8a(\"consent\", action, state);\n\n  return d8a;\n}\n", "import type { RuntimeState } from \"../types.ts\";\n\nexport function createRuntimeState(): RuntimeState {\n  const state: RuntimeState = {\n    jsDate: null,\n    pageLoadMs: null, // maps to GA `_p`\n    // Multi-property support:\n    // - propertyIds preserves insertion order for default fan-out routing\n    // - propertyConfigs holds per-property config objects as passed to `config()`\n    // - primaryPropertyId is the first configured property\n    propertyIds: [],\n    propertyConfigs: {},\n    primaryPropertyId: \"\",\n    consent: {}, // effective consent state (default + update merged)\n    consentDefault: {},\n    consentUpdate: {},\n\n    // If gtag/GTM is present and pushes consent commands into `window.dataLayer`,\n    // we mirror those here and prefer them over d8a's own consent commands.\n    consentGtag: {},\n    consentDefaultGtag: {},\n    consentUpdateGtag: {},\n\n    userId: null,\n    set: {},\n    linker: { domains: [] },\n    incomingDl: null,\n    events: [],\n    __onEvent: null,\n    __onConfig: null,\n    __onSet: null,\n\n    // Request-scoped counters/timing\n    hitCounter: 0, // maps to `_s`\n    // `_et` is computed from an engagement timer (not wall-clock delta),\n    // but we still keep session-level engagement accumulation to flip `g` in session context cookie.\n    sessionEngagementMs: 0,\n    sessionEngaged: false,\n\n    // Cookieless (analytics_storage denied) ephemeral identity.\n    // We keep this in-memory for the lifetime of the page so SPAs can have a\n    // stable identifier without reading/writing cookies.\n    anonCid: null,\n\n    // Tracks the last applied cookie attribute signature so we can apply\n    // security-related cookie attribute changes even when cookie_update=false.\n    // Note: when cookie_update=false we do not refresh/update cookie values; only attributes may be rewritten.\n    cookieAttrsSig: null,\n\n    // Multi-property shared session state:\n    // We compute session tokens once per event and write the same serialized\n    // value to each destination property cookie.\n    sharedSessionTokens: null,\n    sharedSessionValue: null,\n\n    // Enhanced measurement\n    emInstalled: false,\n    emSiteSearchFired: false,\n\n    // Consent transition tracking (for best-effort consent-update pings).\n    // We track the *effective* Consent Mode value (preferring mirrored gtag consent if present).\n    __lastEffectiveAnalyticsStorage: undefined,\n  };\n  return state;\n}\n", "import type { ConsentState, RuntimeState } from \"../types.ts\";\n\nexport function getEffectiveConsent(getState: () => RuntimeState): ConsentState {\n  const s = typeof getState === \"function\" ? getState() : null;\n  const g = s?.consentGtag && typeof s.consentGtag === \"object\" ? s.consentGtag : {};\n  if (g && Object.keys(g).length > 0) return g;\n  return s?.consent && typeof s.consent === \"object\" ? s.consent : {};\n}\n\nexport function getConsentParts(getState: () => RuntimeState): {\n  consent: ConsentState;\n  consentDefault: ConsentState;\n  consentUpdate: ConsentState;\n} {\n  const s = typeof getState === \"function\" ? getState() : null;\n  const gConsent = s?.consentGtag && typeof s.consentGtag === \"object\" ? s.consentGtag : {};\n  const gDefault =\n    s?.consentDefaultGtag && typeof s.consentDefaultGtag === \"object\" ? s.consentDefaultGtag : {};\n  const gUpdate =\n    s?.consentUpdateGtag && typeof s.consentUpdateGtag === \"object\" ? s.consentUpdateGtag : {};\n  const hasGtag =\n    (gConsent && Object.keys(gConsent).length > 0) ||\n    (gDefault && Object.keys(gDefault).length > 0) ||\n    (gUpdate && Object.keys(gUpdate).length > 0);\n\n  if (hasGtag) {\n    return { consent: gConsent, consentDefault: gDefault, consentUpdate: gUpdate };\n  }\n\n  return {\n    consent: s?.consent && typeof s.consent === \"object\" ? s.consent : {},\n    consentDefault:\n      s?.consentDefault && typeof s.consentDefault === \"object\" ? s.consentDefault : {},\n    consentUpdate: s?.consentUpdate && typeof s.consentUpdate === \"object\" ? s.consentUpdate : {},\n  };\n}\n", "import { getEffectiveConsent } from \"./consent_resolver.ts\";\nimport type { RuntimeState } from \"../types.ts\";\n\nfunction scheduleMicrotask(fn: () => void) {\n  if (typeof queueMicrotask === \"function\") {\n    queueMicrotask(fn);\n    return;\n  }\n  // Fallback (older environments)\n  Promise.resolve().then(fn);\n}\n\n/**\n * Tracks effective `analytics_storage` and emits a best-effort ping when it changes.\n *\n * Behavior:\n * - Only fires if at least one property is configured.\n * - Emits `user_engagement` with `consent_update=1` as an event param.\n * - Uses effective consent (prefers mirrored gtag/GTM consent if present).\n */\nexport function maybeEmitConsentUpdatePing(getState: () => RuntimeState) {\n  const s = typeof getState === \"function\" ? getState() : null;\n  if (!s) return;\n\n  const consent = getEffectiveConsent(getState);\n  const next =\n    consent && typeof consent.analytics_storage === \"string\"\n      ? consent.analytics_storage\n      : undefined;\n\n  const prev = s.__lastEffectiveAnalyticsStorage;\n  // First observation initializes consent state; no ping.\n  // We also start a one-tick \"init window\" so immediate default->update (same tick)\n  // is treated as initial consent setup rather than a user-visible consent change.\n  if (prev === undefined) {\n    s.__lastEffectiveAnalyticsStorage = next;\n    if (!s.__consentPingInitScheduled) {\n      s.__consentPingInitScheduled = true;\n      scheduleMicrotask(() => {\n        s.__consentPingInitDone = true;\n      });\n    }\n    return;\n  }\n\n  if (next === prev) return;\n  s.__lastEffectiveAnalyticsStorage = next;\n\n  // Suppress pings during the initialization tick (matches gtag behavior for\n  // immediate default+update sequences during boot).\n  if (!s.__consentPingInitDone) return;\n\n  // Drop before config: no destinations exist yet.\n  if (!Array.isArray(s.propertyIds) || s.propertyIds.length === 0) return;\n  if (typeof s.__onEvent !== \"function\") return;\n\n  s.__onEvent(\"user_engagement\", { consent_update: 1 });\n}\n", "export function isRecord(v: unknown): v is Record<string, unknown> {\n  return !!v && typeof v === \"object\" && !Array.isArray(v);\n}\n", "import { createRuntimeState } from \"./state.ts\";\nimport { maybeEmitConsentUpdatePing } from \"./consent_update_ping.ts\";\nimport { isRecord } from \"../utils/is_record.ts\";\nimport { ensureArraySlot, getWindowSlot } from \"../utils/window_slots.ts\";\nimport type {\n  ConsentState,\n  LinkerConfig,\n  LinkerUrlPosition,\n  PropertyConfig,\n  RuntimeState,\n  SetCommandArgs,\n  WindowLike,\n} from \"../types.ts\";\n\n/**\n * Consumes a dataLayer-like queue on `window` used by the snippet/global function\n * (default: `window.d8aLayer`).\n *\n * - The snippet pushes `arguments` (array-like) or arrays into `window[dataLayerName]`.\n * - The runtime drains existing entries and then patches `push` to intercept future commands.\n *\n */\ntype QueueItem = unknown; // can be `arguments` (array-like) or an actual array\ntype NormalizedArgs = unknown[] | null;\ntype DataLayerLike = Array<unknown> & {\n  push: (...args: unknown[]) => number;\n  __d8aQueueConsumerPatched?: boolean;\n  __d8aQueueConsumerOriginalPush?: ((...args: unknown[]) => number) | null;\n};\n\nfunction readUserIdFromObject(v: unknown) {\n  if (!isRecord(v)) return null;\n  const raw = v.user_id;\n  if (typeof raw !== \"string\") return null;\n  const trimmed = raw.trim();\n  return trimmed ? trimmed : null;\n}\n\nfunction readSendPageViewFromConfig(v: unknown) {\n  if (!isRecord(v)) return undefined;\n  const raw = v.send_page_view;\n  return typeof raw === \"boolean\" ? raw : undefined;\n}\n\nfunction readConsentPatch(v: unknown): ConsentState {\n  return isRecord(v) ? v : {};\n}\n\nfunction mergeLinkerConfig(state: RuntimeState, patch: unknown) {\n  if (!state) return;\n  if (!isRecord(patch)) return;\n\n  const next: LinkerConfig = { ...(state.linker || { domains: [] }) };\n\n  const domainsRaw = patch.domains;\n  if (Array.isArray(domainsRaw)) {\n    const domains = domainsRaw\n      .filter((x) => typeof x === \"string\" && x.trim())\n      .map((x) => x.trim());\n    next.domains = domains;\n  }\n\n  const acceptIncomingRaw = patch.accept_incoming;\n  if (typeof acceptIncomingRaw === \"boolean\") next.accept_incoming = acceptIncomingRaw;\n\n  const decorateFormsRaw = patch.decorate_forms;\n  if (typeof decorateFormsRaw === \"boolean\") next.decorate_forms = decorateFormsRaw;\n\n  const urlPosRaw = patch.url_position;\n  const urlPos = typeof urlPosRaw === \"string\" ? urlPosRaw : \"\";\n  if (urlPos === \"query\" || urlPos === \"fragment\") next.url_position = urlPos as LinkerUrlPosition;\n\n  if (!Array.isArray(next.domains)) next.domains = [];\n  state.linker = next;\n}\n\nexport function createQueueConsumer({\n  windowRef,\n  dataLayerName = \"d8aLayer\",\n}: {\n  windowRef?: WindowLike;\n  dataLayerName?: string;\n}) {\n  if (!windowRef) throw new Error(\"createQueueConsumer: windowRef is required\");\n  const w = windowRef;\n\n  const state: RuntimeState = createRuntimeState();\n  let started = false;\n  let originalPush: ((...args: unknown[]) => number) | null = null;\n  let patched = false;\n\n  function normalizeDataLayerItem(item: QueueItem): NormalizedArgs {\n    // Snippet pushes `arguments` (array-like, not a real array).\n    const maybeArrayLikeLength = isRecord(item) ? item.length : null;\n    if (item && typeof maybeArrayLikeLength === \"number\" && typeof item !== \"string\") {\n      return Array.from(item as ArrayLike<unknown>);\n    }\n    if (Array.isArray(item)) return item;\n    return null;\n  }\n\n  function handleCommand(args: unknown[]) {\n    const cmd = args[0];\n    const a = args[1];\n    const b = args[2];\n    switch (String(cmd || \"\")) {\n      case \"js\": {\n        // Note: `d8a('js', ...)` is snippet-compatible; callers may pass various values.\n        // We preserve runtime behavior by passing the value through to Date() coercion,\n        // while keeping TypeScript happy without `any`.\n        state.jsDate = a instanceof Date ? a : new Date(a as string | number | Date);\n        if (\n          state.pageLoadMs == null &&\n          state.jsDate instanceof Date &&\n          !Number.isNaN(state.jsDate.getTime())\n        ) {\n          state.pageLoadMs = state.jsDate.getTime();\n        }\n        return;\n      }\n      case \"config\": {\n        const propertyId = String(a || \"\");\n        if (!propertyId) return;\n\n        if (!state.propertyIds.includes(propertyId)) state.propertyIds.push(propertyId);\n\n        if (!state.primaryPropertyId) {\n          state.primaryPropertyId = propertyId;\n        }\n\n        const existingCfg: PropertyConfig = state.propertyConfigs[propertyId] || {};\n        const patchCfg: PropertyConfig = isRecord(b) ? b : {};\n        state.propertyConfigs[propertyId] = { ...existingCfg, ...patchCfg };\n\n        const userId = readUserIdFromObject(patchCfg);\n        if (userId) state.userId = userId;\n\n        if (typeof state.__onConfig === \"function\") {\n          state.__onConfig(propertyId, patchCfg);\n        }\n\n        const sendPv = readSendPageViewFromConfig(patchCfg);\n        if (sendPv !== false && typeof state.__onEvent === \"function\") {\n          // Auto page_view on config unless explicitly disabled.\n          // Target only the configured property to avoid fan-out duplication per config call.\n          state.__onEvent(\"page_view\", { send_to: propertyId });\n        }\n        return;\n      }\n      case \"consent\": {\n        const action = String(a || \"\");\n        if (action === \"default\" || action === \"update\") {\n          const patch = readConsentPatch(b);\n          if (action === \"default\") {\n            state.consentDefault = { ...(state.consentDefault || {}), ...(patch || {}) };\n          } else {\n            state.consentUpdate = { ...(state.consentUpdate || {}), ...(patch || {}) };\n          }\n          state.consent = { ...(state.consentDefault || {}), ...(state.consentUpdate || {}) };\n          maybeEmitConsentUpdatePing(() => state);\n        }\n        return;\n      }\n      case \"set\": {\n        // Supported:\n        // - d8a('set', { ... }) (existing behavior; global defaults)\n        // - d8a('set', '<field>', <value>)\n        if (typeof a === \"string\" && a.trim()) {\n          const field = a.trim();\n          // Special-case linker: d8a('set','linker',{...})\n          if (field === \"linker\") {\n            mergeLinkerConfig(state, b);\n          } else {\n            state.set = { ...(state.set || {}), [field]: b };\n          }\n          // Keep `user_id` mirrored in state.userId for convenience.\n          if (field === \"user_id\" && typeof b === \"string\" && b.trim()) {\n            state.userId = b.trim();\n          }\n          const payload: SetCommandArgs = { type: \"field\", field, value: b };\n          state.__onSet?.(payload);\n          return;\n        }\n\n        if (isRecord(a)) {\n          // Restore object-form `set` (existing behavior).\n          state.set = { ...(state.set || {}), ...a };\n          const userId = readUserIdFromObject(a);\n          if (userId) state.userId = userId;\n          // Support configuring linker via object-form `set` for consistency with other fields:\n          // d8a('set', { user_id: '...', linker: { ... } })\n          if (\"linker\" in a) {\n            mergeLinkerConfig(state, (a as any).linker);\n          }\n          const payload: SetCommandArgs = { type: \"object\", obj: a };\n          state.__onSet?.(payload);\n        }\n        return;\n      }\n      case \"event\": {\n        // Store for debugging/tests; the dispatcher is responsible for mapping + sending.\n        const params = isRecord(b) ? b : {};\n        state.events.push({ name: String(a || \"\"), params });\n        if (typeof state.__onEvent === \"function\") {\n          state.__onEvent(String(a || \"\"), params);\n        }\n        return;\n      }\n      default:\n        // Unknown commands are ignored.\n        return;\n    }\n  }\n\n  function drainExisting() {\n    const dl = dataLayerName;\n    const existing = getWindowSlot<unknown>(w, dl);\n    const items = Array.isArray(existing) ? existing : ensureArraySlot<unknown>(w, dl);\n    for (const item of items) {\n      const args = normalizeDataLayerItem(item);\n      if (!args) continue;\n      handleCommand(args);\n    }\n  }\n\n  function patchPush() {\n    const dl = dataLayerName;\n    const dlArr = ensureArraySlot<unknown>(w, dl) as DataLayerLike;\n    if (dlArr.__d8aQueueConsumerPatched) {\n      // If already patched, reuse the original push so stop() can restore it.\n      originalPush = dlArr.__d8aQueueConsumerOriginalPush || null;\n      patched = false;\n      return;\n    }\n\n    originalPush = dlArr.push.bind(dlArr);\n    dlArr.__d8aQueueConsumerOriginalPush = originalPush;\n    dlArr.push = function patchedPush(...forwarded: unknown[]) {\n      const item = forwarded[0];\n      const args = normalizeDataLayerItem(item);\n      if (args) handleCommand(args);\n      return (originalPush as (...args: unknown[]) => number)(...forwarded);\n    };\n    dlArr.__d8aQueueConsumerPatched = true;\n    patched = true;\n  }\n\n  function start() {\n    if (started) return;\n    started = true;\n    drainExisting();\n    patchPush();\n  }\n\n  return {\n    start,\n    getState: () => state,\n    setOnEvent: (fn: RuntimeState[\"__onEvent\"]) => {\n      state.__onEvent = fn;\n    },\n    setOnConfig: (fn: RuntimeState[\"__onConfig\"]) => {\n      state.__onConfig = fn;\n    },\n    setOnSet: (fn: RuntimeState[\"__onSet\"]) => {\n      state.__onSet = fn;\n    },\n    stop: () => {\n      if (!started) return;\n      const dl = dataLayerName;\n      const dlArrMaybe = getWindowSlot<unknown>(w, dl);\n      if (patched && originalPush && Array.isArray(dlArrMaybe)) {\n        const dlArr = dlArrMaybe as DataLayerLike;\n        dlArr.push = originalPush;\n        try {\n          delete dlArr.__d8aQueueConsumerPatched;\n          delete dlArr.__d8aQueueConsumerOriginalPush;\n        } catch {\n          // ignore\n        }\n      }\n      started = false;\n    },\n  };\n}\n", "function nowSeconds(nowMs: unknown) {\n  return Math.floor((Number(nowMs ?? Date.now()) || Date.now()) / 1000);\n}\n\nfunction randInt31() {\n  return Math.floor(Math.random() * 2147483647);\n}\n\nexport function applyCookiePrefix(cookiePrefix: unknown, cookieName: unknown) {\n  const p = typeof cookiePrefix === \"string\" ? cookiePrefix : \"\";\n  const n = String(cookieName || \"\");\n  if (!p) return n;\n  // Avoid awkward double underscores if caller uses a trailing \"_\" prefix.\n  if (p.endsWith(\"_\") && n.startsWith(\"_\")) return `${p.slice(0, -1)}${n}`;\n  return `${p}${n}`;\n}\n\nexport function buildD8aClientCookieName(cookiePrefix?: unknown) {\n  return applyCookiePrefix(cookiePrefix, \"_d8a\");\n}\n\nexport function buildD8aCookieName(propertyId: unknown, cookiePrefix?: unknown) {\n  return applyCookiePrefix(cookiePrefix, `_d8a_${propertyId}`);\n}\n\nexport function parseD8aClientCookie(value: unknown) {\n  const v = String(value || \"\");\n  // Expected: C1.1.<part1>.<part2>\n  const m = v.match(/^C1\\.1\\.([0-9]+)\\.([0-9]+)$/);\n  if (!m) return null;\n  return { cid: `${m[1]}.${m[2]}` };\n}\n\n/**\n * Generates the core cid parts (random + timestamp).\n * Shared by both cookie-based and anonymous cid flows.\n */\nexport function generateCidParts({ nowMs }: { nowMs?: unknown } = {}) {\n  return {\n    random: randInt31(),\n    timestampSec: nowSeconds(nowMs),\n  };\n}\n\n/**\n * Formats cid parts into the canonical cid string.\n */\nexport function formatCid({ random, timestampSec }: { random: unknown; timestampSec: unknown }) {\n  return `${random}.${timestampSec}`;\n}\n\nexport function buildD8aClientCookieValue({ nowMs }: { nowMs?: unknown } = {}) {\n  const { random, timestampSec } = generateCidParts({ nowMs });\n  // C1.1.<rand>.<timestampSeconds>\n  return `C1.1.${random}.${timestampSec}`;\n}\n\nexport function buildD8aClientCookieValueFromCid(cid: unknown) {\n  const v = String(cid || \"\").trim();\n  // cid format: <rand>.<timestampSeconds>\n  const m = v.match(/^([0-9]+)\\.([0-9]+)$/);\n  if (!m) return null;\n  return `C1.1.${m[1]}.${m[2]}`;\n}\n\nconst SESSION_PREFIX = \"S1.1.\";\nconst KNOWN_KEYS = new Set([\"s\", \"o\", \"g\", \"t\", \"j\", \"d\"]);\n\nexport type SessionToken = { key: string; val: string; raw?: string; known: boolean };\n\nfunction tokenizeSessionCookie(raw: unknown) {\n  const v = String(raw || \"\");\n  if (!v.startsWith(SESSION_PREFIX)) return null;\n  const rest = v.slice(SESSION_PREFIX.length);\n  const tokens = rest\n    .split(\"$\")\n    .map((t) => t.trim())\n    .filter(Boolean);\n  const parsed: SessionToken[] = tokens.map((tok) => {\n    const key = tok[0];\n    const val = tok.slice(1);\n    return { key, val, raw: tok, known: KNOWN_KEYS.has(key) };\n  });\n  return parsed;\n}\n\nfunction detokenizeSessionCookie(tokens: SessionToken[]) {\n  const rawTokens = tokens.map((t) => `${t.key}${t.val}`);\n  return `${SESSION_PREFIX}${rawTokens.join(\"$\")}`;\n}\n\nfunction getToken(tokens: SessionToken[], key: string) {\n  const t = tokens.find((x) => x.key === key);\n  return t ? t.val : null;\n}\n\nfunction setToken(tokens: SessionToken[], key: string, val: unknown) {\n  const idx = tokens.findIndex((x) => x.key === key);\n  if (idx >= 0) tokens[idx] = { ...tokens[idx], val: String(val), known: KNOWN_KEYS.has(key) };\n  else tokens.push({ key, val: String(val), known: KNOWN_KEYS.has(key) });\n}\n\nfunction generateOpaqueSessionId() {\n  // Opaque, high-entropy-ish, URL-safe.\n  const a = randInt31().toString(36);\n  const b = randInt31().toString(36);\n  const c = randInt31().toString(36);\n  return `${a}${b}${c}`;\n}\n\nexport function parseD8aSessionCookie(value: unknown) {\n  const tokens = tokenizeSessionCookie(value);\n  if (!tokens) return null;\n\n  const sid = getToken(tokens, \"s\");\n  const sct = getToken(tokens, \"o\");\n  const last = getToken(tokens, \"t\");\n  const segRaw = getToken(tokens, \"g\");\n\n  const sidNum = sid != null ? Number(sid) : NaN;\n  const sctNum = sct != null ? Number(sct) : NaN;\n  const lastNum = last != null ? Number(last) : NaN;\n  const segNum = segRaw != null ? Number(segRaw) : NaN;\n\n  return {\n    tokens,\n    sid: Number.isFinite(sidNum) ? sidNum : null,\n    sct: Number.isFinite(sctNum) ? sctNum : null,\n    lastEventTs: Number.isFinite(lastNum) ? lastNum : null,\n    seg: Number.isFinite(segNum) ? segNum : null,\n  };\n}\n\n/**\n * Updates an existing session cookie tokens array or creates a new one.\n *\n * This is intentionally minimal in the current implementation:\n * - inactivity timeout creates a new session (new `s`, increment `o`)\n * - every event updates `t` and increments `j`\n * - preserves unknown tokens and token order where possible\n */\nexport function updateD8aSessionCookieTokens(\n  existingTokens: SessionToken[] | null,\n  { nowMs, sessionTimeoutMs }: { nowMs?: unknown; sessionTimeoutMs?: unknown } = {},\n) {\n  const now = nowSeconds(nowMs);\n  const timeoutSec = Math.floor((Number(sessionTimeoutMs ?? 30 * 60 * 1000) || 0) / 1000);\n\n  const isValid = Array.isArray(existingTokens) && existingTokens.length > 0;\n  let tokens: SessionToken[] = isValid ? existingTokens.map((t) => ({ ...t })) : [];\n\n  if (!isValid) {\n    setToken(tokens, \"s\", now);\n    setToken(tokens, \"o\", 1);\n    setToken(tokens, \"g\", 0);\n    setToken(tokens, \"t\", now);\n    setToken(tokens, \"j\", 0);\n    setToken(tokens, \"d\", generateOpaqueSessionId());\n    return { tokens, isNewSession: true };\n  }\n\n  const last = Number(getToken(tokens, \"t\") ?? NaN);\n  const lastOk = Number.isFinite(last);\n  const expired = !lastOk || now - last > timeoutSec;\n\n  if (expired) {\n    const prevSct = Number(getToken(tokens, \"o\") ?? NaN);\n    const nextSct = Number.isFinite(prevSct) ? prevSct + 1 : 1;\n    setToken(tokens, \"s\", now);\n    setToken(tokens, \"o\", nextSct);\n    setToken(tokens, \"g\", 0);\n    setToken(tokens, \"t\", now);\n    setToken(tokens, \"j\", 0);\n    setToken(tokens, \"d\", generateOpaqueSessionId());\n    return { tokens, isNewSession: true };\n  }\n\n  // Same session.\n  const prevJ = Number(getToken(tokens, \"j\") ?? 0);\n  setToken(tokens, \"j\", Number.isFinite(prevJ) ? prevJ + 1 : 1);\n  setToken(tokens, \"t\", now);\n  return { tokens, isNewSession: false };\n}\n\nexport function serializeD8aSessionCookieTokens(tokens: SessionToken[]) {\n  return detokenizeSessionCookie(tokens);\n}\n\nexport const __internal = {\n  SESSION_PREFIX,\n  tokenizeSessionCookie,\n  detokenizeSessionCookie,\n  getToken,\n  setToken,\n  nowSeconds,\n  applyCookiePrefix,\n};\n", "/**\n * Small helpers used to implement a gtag-compatible integration surface.\n *\n * Important: this code is a clean reimplementation of behaviors we need for compatibility\n * (e.g. cookie domain candidate ordering).\n */\n\nexport function getCookieDomainCandidates(hostname: unknown) {\n  const host = String(hostname || \"\").trim();\n  if (!host) return [\"none\"];\n\n  const parts = host.split(\".\");\n\n  // IP address detection: treat IPv4-like hostnames as host-only cookie candidates.\n  if (parts.length === 4) {\n    const last = parts[parts.length - 1];\n    if (String(Number(last)) === last) return [\"none\"];\n  }\n\n  // Broadest-to-narrowest to prefer the widest cookie domain that still works.\n  // For docs.d8a.tech => [\"d8a.tech\", \"docs.d8a.tech\", \"none\"]\n  const out: string[] = [];\n  for (let i = parts.length - 2; i >= 0; i -= 1) {\n    out.push(parts.slice(i).join(\".\"));\n  }\n  out.push(\"none\");\n  return out;\n}\n\nexport function stripTrailingSlashes(s: unknown) {\n  return String(s).replace(/\\/+$/, \"\");\n}\n", "import { getCookieDomainCandidates } from \"../utils/gtag_primitives.ts\";\n\ntype CookieMap = Map<string, string>;\n\ntype DocumentLike = {\n  cookie: string;\n};\n\ntype WindowRefLike = {\n  document?: DocumentLike;\n  location?: { protocol?: string; hostname?: string };\n};\n\ntype CookieSetOptions = {\n  path?: string;\n  domain?: string;\n  sameSite?: string;\n  secure?: boolean;\n  maxAgeSeconds?: number | null;\n  expires?: Date | null;\n};\n\ntype CookieSetAttempt = {\n  candidate: string;\n  domain: string | null;\n  cookieStr: string;\n  before: string;\n  after: string;\n  readBack: string | undefined;\n  stuck: boolean;\n};\n\ntype CookieSetResult = {\n  ok: boolean;\n  domain: string | null;\n  cookieStr: string | null;\n  attempts: CookieSetAttempt[];\n};\n\nfunction parseCookieHeader(header: unknown): CookieMap {\n  const out: CookieMap = new Map();\n  const raw = String(header || \"\");\n  if (!raw) return out;\n  for (const part of raw.split(\";\")) {\n    const s = part.trim();\n    if (!s) continue;\n    const idx = s.indexOf(\"=\");\n    if (idx < 0) continue;\n    const name = s.slice(0, idx).trim();\n    const value = s.slice(idx + 1).trim();\n    if (!name) continue;\n    out.set(name, value);\n  }\n  return out;\n}\n\nexport { parseCookieHeader };\n\nfunction isHttps(w: WindowRefLike) {\n  try {\n    return String(w?.location?.protocol || \"\").toLowerCase() === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction buildSetCookieString(name: string, value: string, attrs: Record<string, unknown>) {\n  const parts: string[] = [];\n  parts.push(`${name}=${value}`);\n  if (attrs.path) parts.push(`Path=${String(attrs.path)}`);\n  if (attrs.expires) parts.push(`Expires=${(attrs.expires as Date).toUTCString()}`);\n  if (attrs.maxAgeSeconds != null) parts.push(`Max-Age=${String(attrs.maxAgeSeconds)}`);\n  if (attrs.sameSite) parts.push(`SameSite=${String(attrs.sameSite)}`);\n  if (attrs.domain) parts.push(`Domain=${String(attrs.domain)}`);\n  if (attrs.secure) parts.push(\"Secure\");\n  return parts.join(\"; \");\n}\n\nfunction ensureDotDomain(domain: string) {\n  if (!domain) return domain;\n  if (domain === \"none\") return null;\n  return domain.startsWith(\".\") ? domain : `.${domain}`;\n}\n\nexport function createCookieJar({ windowRef }: { windowRef: WindowRefLike }) {\n  const w = windowRef;\n  if (!w?.document) throw new Error(\"createCookieJar: windowRef.document is required\");\n  const doc = w.document;\n\n  function getAll() {\n    return parseCookieHeader(w.document?.cookie);\n  }\n\n  function get(name: string) {\n    return getAll().get(name);\n  }\n\n  /**\n   * Sets a cookie, optionally using `domain: 'auto'` to select a\n   * domain that sticks by trying candidates broadest-first.\n   *\n   * Returns an object describing what it did; primarily useful for debugging/tests.\n   */\n  function set(name: string, value: string, opts: CookieSetOptions = {}): CookieSetResult {\n    const path = opts.path || \"/\";\n    const https = isHttps(w);\n    // Browsers require Secure for SameSite=None cookies. On http://, we can't set\n    // Secure cookies, so we downgrade SameSite=None to Lax for local dev.\n    const requestedSameSite = opts.sameSite || \"Lax\";\n    const sameSite =\n      !https && String(requestedSameSite).toLowerCase() === \"none\" ? \"Lax\" : requestedSameSite;\n    // Browsers won't accept `Secure` cookies on non-HTTPS pages. For local dev\n    // (http://), we ignore an explicit Secure request rather than failing to\n    // set/update the cookie at all.\n    const secure = opts.secure != null ? !!opts.secure && https : https;\n    const maxAgeSeconds = opts.maxAgeSeconds ?? null;\n    const expires = opts.expires ?? null;\n\n    const baseAttrs = { path, sameSite, secure, maxAgeSeconds, expires };\n\n    const domainOpt = opts.domain || \"auto\";\n    const host = String(w.location?.hostname || \"\");\n    const candidates = domainOpt === \"auto\" ? getCookieDomainCandidates(host) : [domainOpt];\n\n    // gtag semantics: \"none\" means host-only (no domain attribute).\n    const attempts: CookieSetAttempt[] = [];\n    for (const candidate of candidates) {\n      const domain = ensureDotDomain(candidate);\n      const cookieStr = buildSetCookieString(name, value, { ...baseAttrs, domain });\n\n      const before = String(doc.cookie || \"\");\n      doc.cookie = cookieStr;\n      const after = String(doc.cookie || \"\");\n\n      const stuck = before !== after || get(name) === value;\n      attempts.push({\n        candidate,\n        domain: candidate === \"none\" ? null : domain,\n        cookieStr,\n        before,\n        after,\n        readBack: get(name),\n        stuck,\n      });\n      if (stuck) {\n        return { ok: true, domain: candidate === \"none\" ? null : domain, cookieStr, attempts };\n      }\n    }\n\n    return { ok: false, domain: null, cookieStr: null, attempts };\n  }\n\n  function del(name: string, opts: CookieSetOptions = {}) {\n    // Delete by setting an expired cookie; attempt with same domain selection.\n    return set(name, \"deleted\", { ...opts, expires: new Date(0) });\n  }\n\n  return { get, set, del, __internal: { parseCookieHeader, buildSetCookieString } };\n}\n", "import {\n  buildD8aClientCookieName,\n  buildD8aCookieName,\n  parseD8aClientCookie,\n  parseD8aSessionCookie,\n} from \"../cookies/d8a_cookies.ts\";\nimport { parseCookieHeader } from \"../cookies/cookie_jar.ts\";\nimport type { BrowserContext, ConsentState } from \"../types.ts\";\n\nconst CORE_ECOMMERCE_NUMBER = new Set([\"value\", \"tax\", \"shipping\"]);\n\nconst ITEM_KEY_MAP: Record<string, string> = {\n  item_id: \"id\",\n  item_name: \"nm\",\n  affiliation: \"af\",\n  coupon: \"cp\",\n  discount: \"ds\",\n  index: \"lp\",\n  item_brand: \"br\",\n  item_category: \"ca\",\n  item_category2: \"c2\",\n  item_category3: \"c3\",\n  item_category4: \"c4\",\n  item_category5: \"c5\",\n  item_list_id: \"li\",\n  item_list_name: \"ln\",\n  item_variant: \"va\",\n  location_id: \"lo\",\n  price: \"pr\",\n  quantity: \"qt\",\n  promotion_id: \"pi\",\n  promotion_name: \"pn\",\n};\n\n// Note: we intentionally treat arrays as \"object-like\" here to preserve the historical\n// runtime behavior of `encodeItemToPrValue` (previously `typeof v === \"object\"`).\nfunction isObjectLike(v: unknown): v is Record<string, unknown> {\n  return !!v && typeof v === \"object\";\n}\n\nfunction toEpValue(v: unknown) {\n  if (v == null) return null;\n  if (typeof v === \"string\") return v;\n  if (typeof v === \"boolean\") return v ? \"1\" : \"0\";\n  if (typeof v === \"number\") return String(v);\n  // Arrays: convert to comma-separated string\n  if (Array.isArray(v)) return v.join(\",\");\n  return String(v);\n}\n\nfunction toEpnValue(v: unknown) {\n  if (typeof v === \"number\") return v;\n  if (typeof v === \"boolean\") return v ? 1 : 0;\n  if (typeof v === \"string\") {\n    const n = Number(v);\n    return Number.isFinite(n) ? n : null;\n  }\n  return null;\n}\n\nfunction addEp(params: URLSearchParams, key: string, value: unknown) {\n  if (value == null) return;\n  params.set(`ep.${key}`, String(value));\n}\n\nfunction addEpn(params: URLSearchParams, key: string, value: unknown) {\n  if (value == null) return;\n  // Keep numeric formatting stable (72.05 not \"72.0500\")\n  params.set(`epn.${key}`, String(value));\n}\n\nexport function encodeItemToPrValue(item: unknown) {\n  const it = isObjectLike(item) ? item : {};\n\n  const knownParts: string[] = [];\n  const customParts: string[] = [];\n\n  // Preserve a stable, GA-like ordering: known mapped keys first (in map order),\n  // then custom key/value tokens.\n  for (const [srcKey, dstKey] of Object.entries(ITEM_KEY_MAP)) {\n    if (!(srcKey in it)) continue;\n    const v = it[srcKey];\n    const str = toEpValue(v);\n    if (str == null) continue;\n    knownParts.push(`${dstKey}${str}`);\n  }\n\n  // Custom params: any key not in ITEM_KEY_MAP.\n  let idx = 0;\n  for (const key of Object.keys(it)) {\n    if (key in ITEM_KEY_MAP) continue;\n    const v = it[key];\n    const str = toEpValue(v);\n    if (str == null) continue;\n    customParts.push(`k${idx}${key}`);\n    customParts.push(`v${idx}${str}`);\n    idx += 1;\n  }\n\n  return [...knownParts, ...customParts].join(\"~\");\n}\n\n/**\n * Builds the query params for a GA4 gtag `/g/collect` request.\n *\n * This returns a URLSearchParams with already-stringified values. The caller is\n * responsible for attaching it to a URL or sending as body.\n */\nexport function buildGa4CollectQueryParams({\n  propertyId,\n  eventName,\n  eventParams,\n  cookieHeader,\n  clientId,\n  userId,\n  cookiePrefix,\n  ignoreReferrer,\n  browser,\n  pageLoadMs,\n  hitCounter,\n  engagementTimeMs,\n  uachParams,\n  campaign,\n  contentGroup,\n  consentParams,\n  debugMode,\n}: {\n  propertyId: string;\n  eventName: string;\n  eventParams: Record<string, unknown>;\n  cookieHeader: string;\n  clientId: string | null;\n  userId: string | null;\n  cookiePrefix: string;\n  ignoreReferrer: boolean;\n  browser: BrowserContext;\n  pageLoadMs: number | null;\n  hitCounter: number | null;\n  engagementTimeMs: number | null;\n  uachParams: Record<string, string> | null;\n  campaign: {\n    campaign_id?: string | null;\n    campaign_source?: string | null;\n    campaign_medium?: string | null;\n    campaign_name?: string | null;\n    campaign_term?: string | null;\n    campaign_content?: string | null;\n  } | null;\n  contentGroup: string | null;\n  consentParams: { gcs?: string | null; gcd?: string | null; consent?: ConsentState } | null;\n  debugMode: boolean;\n}) {\n  const params = new URLSearchParams();\n\n  // Core request identity.\n  params.set(\"v\", \"2\");\n  params.set(\"tid\", String(propertyId || \"\"));\n  params.set(\"en\", String(eventName || \"\"));\n\n  // GA4-style debug mode:\n  // - `_dbg=1` enables DebugView-style ingestion on the backend\n  // - `ep.debug_mode=1` is included for parity with gtag semantics\n  if (debugMode === true) params.set(\"_dbg\", \"1\");\n\n  if (pageLoadMs != null) params.set(\"_p\", String(pageLoadMs));\n  if (hitCounter != null) params.set(\"_s\", String(hitCounter));\n  if (engagementTimeMs != null) params.set(\"_et\", String(engagementTimeMs));\n\n  // Cookies.\n  const cookieMap = parseCookieHeader(cookieHeader);\n\n  // Client id:\n  // - If `clientId` is provided, it wins (used for cookieless / consent denied).\n  // - Otherwise derive from the first-party `_d8a` cookie.\n  if (clientId != null && String(clientId)) {\n    params.set(\"cid\", String(clientId));\n  } else {\n    const client = parseD8aClientCookie(cookieMap.get(buildD8aClientCookieName(cookiePrefix)));\n    if (client?.cid) params.set(\"cid\", client.cid);\n  }\n\n  // User id (provided by caller): maps to GA `uid`\n  if (typeof userId === \"string\" && userId.trim()) {\n    params.set(\"uid\", userId.trim());\n  }\n\n  // Campaign overrides. These map to standard GA parameters.\n  const c = campaign || {};\n  if (typeof c.campaign_id === \"string\" && c.campaign_id.trim())\n    params.set(\"ci\", c.campaign_id.trim());\n  if (typeof c.campaign_source === \"string\" && c.campaign_source.trim())\n    params.set(\"cs\", c.campaign_source.trim());\n  if (typeof c.campaign_medium === \"string\" && c.campaign_medium.trim())\n    params.set(\"cm\", c.campaign_medium.trim());\n  if (typeof c.campaign_name === \"string\" && c.campaign_name.trim())\n    params.set(\"cn\", c.campaign_name.trim());\n  if (typeof c.campaign_term === \"string\" && c.campaign_term.trim())\n    params.set(\"ct\", c.campaign_term.trim());\n  if (typeof c.campaign_content === \"string\" && c.campaign_content.trim())\n    params.set(\"cc\", c.campaign_content.trim());\n\n  if (typeof contentGroup === \"string\" && contentGroup.trim()) {\n    // Use event-param namespace for content group as requested.\n    addEp(params, \"content_group\", contentGroup.trim());\n  }\n\n  const sessionCookieName = buildD8aCookieName(propertyId, cookiePrefix);\n  const session = parseD8aSessionCookie(cookieMap.get(sessionCookieName));\n\n  // sid: use cookie value or default to current timestamp (seconds since epoch)\n  if (session?.sid != null) {\n    params.set(\"sid\", String(session.sid));\n  } else {\n    params.set(\"sid\", String(Math.floor(Date.now() / 1000)));\n  }\n\n  // sct: use cookie value or default to 1\n  if (session?.sct != null) {\n    params.set(\"sct\", String(session.sct));\n  } else {\n    params.set(\"sct\", \"1\");\n  }\n\n  if (session?.seg != null) params.set(\"seg\", String(session.seg));\n\n  const b = browser;\n\n  // Browser-derived.\n  if (b.dl) params.set(\"dl\", String(b.dl));\n  if (b.dt) params.set(\"dt\", String(b.dt));\n  // ignore_referrer: include ir=1 only when explicitly enabled\n  if (ignoreReferrer === true) params.set(\"ir\", \"1\");\n  // Send empty referrer explicitly (GA commonly sends `dr=` for direct).\n  params.set(\"dr\", String(b.dr));\n  if (b.ul) params.set(\"ul\", String(b.ul));\n  if (b.sr) params.set(\"sr\", String(b.sr));\n\n  if (uachParams) {\n    for (const [k, v] of Object.entries(uachParams)) {\n      if (v == null || v === \"\") continue;\n      params.set(k, String(v));\n    }\n  }\n\n  if (consentParams) {\n    if (consentParams.gcs) params.set(\"gcs\", String(consentParams.gcs));\n    if (consentParams.gcd) params.set(\"gcd\", String(consentParams.gcd));\n  }\n\n  const p = eventParams || {};\n\n  if (debugMode === true && !Object.prototype.hasOwnProperty.call(p, \"debug_mode\")) {\n    addEp(params, \"debug_mode\", \"1\");\n  }\n\n  // Ecommerce / reserved keys.\n  const currency = p[\"currency\"];\n  if (typeof currency === \"string\") params.set(\"cu\", currency);\n  if (p[\"transaction_id\"] != null) addEp(params, \"transaction_id\", toEpValue(p[\"transaction_id\"]));\n  if (p[\"coupon\"] != null) addEp(params, \"coupon\", toEpValue(p[\"coupon\"]));\n  if (p[\"customer_type\"] != null) addEp(params, \"customer_type\", toEpValue(p[\"customer_type\"]));\n\n  for (const k of CORE_ECOMMERCE_NUMBER) {\n    if (p[k] == null) continue;\n    addEpn(params, k, toEpnValue(p[k]));\n  }\n\n  // Items.\n  // GA4 limit: items array can include up to 200 elements.\n  // https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtag\n  const itemsRaw = p[\"items\"];\n  if (Array.isArray(itemsRaw)) {\n    const items = itemsRaw.slice(0, 200);\n    for (let i = 0; i < items.length; i += 1) {\n      const pr = encodeItemToPrValue(items[i]);\n      if (pr) params.set(`pr${i + 1}`, pr);\n    }\n  }\n\n  // Generic mapping: remaining keys -> ep/epn based on type.\n  for (const key of Object.keys(p)) {\n    if (key === \"items\") continue;\n    if (key === \"currency\") continue;\n    if (key === \"transaction_id\") continue;\n    if (key === \"coupon\") continue;\n    if (key === \"customer_type\") continue;\n    if (CORE_ECOMMERCE_NUMBER.has(key)) continue;\n    // Reserved keys we handle elsewhere (config/set overrides)\n    if (key === \"user_id\") continue;\n    if (key === \"client_id\") continue;\n    if (key === \"campaign_id\") continue;\n    if (key === \"campaign_source\") continue;\n    if (key === \"campaign_medium\") continue;\n    if (key === \"campaign_name\") continue;\n    if (key === \"campaign_term\") continue;\n    if (key === \"campaign_content\") continue;\n    if (key === \"page_location\") continue;\n    if (key === \"page_title\") continue;\n    if (key === \"page_referrer\") continue;\n    if (key === \"content_group\") continue;\n    if (key === \"ignore_referrer\") continue;\n    if (key === \"language\") continue;\n    if (key === \"screen_resolution\") continue;\n    if (key === \"cookie_domain\") continue;\n    if (key === \"cookie_expires\") continue;\n    if (key === \"cookie_flags\") continue;\n    if (key === \"cookie_path\") continue;\n    if (key === \"cookie_prefix\") continue;\n    if (key === \"cookie_update\") continue;\n    if (key === \"send_page_view\") continue;\n    if (key === \"send_to\") continue;\n\n    const v = p[key];\n    if (typeof v === \"number\") addEpn(params, key, v);\n    else addEp(params, key, toEpValue(v));\n  }\n\n  return params;\n}\n\nexport const __internal = {\n  ITEM_KEY_MAP,\n  toEpValue,\n  toEpnValue,\n};\n", "import { stripTrailingSlashes } from \"./gtag_primitives.ts\";\n\nfunction isProbablyUrl(s: unknown) {\n  return /^https?:\\/\\//i.test(String(s || \"\"));\n}\n\ntype TrackingConfigLike = { server_container_url?: string };\n\n/**\n * Resolves the final tracking URL.\n *\n * `server_container_url` is required and is treated as the final endpoint URL.\n * Examples:\n * - Cloud: \"https://global.t.d8a.tech/<property_id>/d/c\"\n * - On-prem: \"https://example.org/d/c\"\n */\nexport function resolveTrackingUrl(configOrUrl?: unknown) {\n  // Back-compat: allow passing a string directly (old helper signature).\n  if (typeof configOrUrl === \"string\" && isProbablyUrl(configOrUrl)) {\n    return resolveTrackingUrl({ server_container_url: configOrUrl });\n  }\n\n  const cfg =\n    configOrUrl && typeof configOrUrl === \"object\" ? (configOrUrl as TrackingConfigLike) : {};\n  const baseRaw = (cfg.server_container_url || \"\").trim();\n  if (!baseRaw) {\n    throw new Error(\"server_container_url is required\");\n  }\n  return stripTrailingSlashes(baseRaw);\n}\n\nexport const __internal = {\n  isProbablyUrl,\n};\n", "import type { BrowserContext, WindowLike } from \"../types.ts\";\n\nexport function getBrowserContext(w: WindowLike): BrowserContext {\n  const dl = (() => {\n    try {\n      return String(w?.location?.href || \"\");\n    } catch {\n      return \"\";\n    }\n  })();\n\n  const dt = (() => {\n    try {\n      return String(w?.document?.title || \"\");\n    } catch {\n      return \"\";\n    }\n  })();\n\n  const dr = (() => {\n    try {\n      return String(w?.document?.referrer || \"\");\n    } catch {\n      return \"\";\n    }\n  })();\n\n  const dh = (() => {\n    try {\n      return String(w?.location?.hostname || \"\");\n    } catch {\n      return \"\";\n    }\n  })();\n\n  const ul = (() => {\n    try {\n      return String(w?.navigator?.language || \"\").toLowerCase();\n    } catch {\n      return \"\";\n    }\n  })();\n\n  const sr = (() => {\n    try {\n      const sw = w?.screen?.width;\n      const sh = w?.screen?.height;\n      if (typeof sw === \"number\" && typeof sh === \"number\") return `${sw}x${sh}`;\n    } catch {\n      // ignore\n    }\n    return \"\";\n  })();\n\n  return { dl, dt, dr, dh, ul, sr };\n}\n", "function sleep(ms: number) {\n  return new Promise((r) => setTimeout(r, ms));\n}\n\nfunction shouldRetryHttpStatus(status: number) {\n  if (status === 429) return true;\n  if (status >= 500) return true;\n  return false;\n}\n\nimport type { WindowLikeTransport } from \"../types.ts\";\n\nexport async function sendWithRetries({\n  url,\n  windowRef,\n  useBeacon,\n  maxRetries = 1,\n  initialBackoffMs = 200,\n}: {\n  url: string;\n  windowRef: WindowLikeTransport;\n  useBeacon: boolean;\n  maxRetries?: number;\n  initialBackoffMs?: number;\n}) {\n  const w = windowRef;\n  const beacon = w?.navigator?.sendBeacon;\n\n  if (useBeacon && typeof beacon === \"function\") {\n    // sendBeacon doesn't give us status, so it's best-effort.\n    try {\n      beacon.call(w.navigator, url);\n      return { ok: true, via: \"beacon\" as const };\n    } catch {\n      // fall back to fetch path\n    }\n  }\n\n  const fetchFn = w?.fetch;\n  if (typeof fetchFn !== \"function\") {\n    throw new Error(\"fetch is not available\");\n  }\n\n  const options = {\n    method: \"POST\",\n    keepalive: true,\n    credentials: \"include\",\n    cache: \"no-store\",\n    redirect: \"follow\",\n    mode: \"no-cors\",\n  } as const;\n\n  let attempt = 0;\n  let backoff = initialBackoffMs;\n  while (true) {\n    attempt += 1;\n    try {\n      const res = await fetchFn.call(w, url, options);\n\n      // With `no-cors`, response is often opaque (status 0). Treat as success.\n      const status = typeof res?.status === \"number\" ? res.status : 0;\n      if (!shouldRetryHttpStatus(status)) {\n        return { ok: true, via: \"fetch\" as const, status };\n      }\n    } catch {\n      // retry below\n    }\n\n    if (attempt > maxRetries) {\n      return { ok: false, via: \"fetch\" as const, status: null };\n    }\n    await sleep(backoff);\n    backoff *= 2;\n  }\n}\n", "export type ConsentStateLike = { analytics_storage?: string };\n\nexport function canWriteAnalyticsCookies(consentState: ConsentStateLike) {\n  const s = consentState || {};\n  // Requirement: if analytics_storage explicitly denied, do not write cookies.\n  return String(s.analytics_storage || \"\").toLowerCase() !== \"denied\";\n}\n", "import {\n  buildD8aClientCookieValue,\n  buildD8aClientCookieValueFromCid,\n  buildD8aClientCookieName,\n  buildD8aCookieName,\n  parseD8aClientCookie,\n  parseD8aSessionCookie,\n  serializeD8aSessionCookieTokens,\n  updateD8aSessionCookieTokens,\n} from \"./d8a_cookies.ts\";\nimport { canWriteAnalyticsCookies } from \"./consent.ts\";\n\nconst TWO_YEARS_SECONDS = 2 * 365 * 24 * 60 * 60;\n\ntype CookieJarLike = {\n  get: (name: string) => string | undefined;\n  set: (name: string, value: string, opts?: Record<string, unknown>) => unknown;\n};\n\ntype ConsentStateLike = { analytics_storage?: string };\n\nexport function ensureClientId({\n  jar,\n  consent,\n  nowMs,\n  cookieDomain = \"auto\",\n  cookiePrefix = \"\",\n  cookiePath = \"/\",\n  cookieSameSite = \"Lax\",\n  cookieSecure = undefined,\n  cookieMaxAgeSeconds = TWO_YEARS_SECONDS,\n  cookieUpdate = true,\n  forceCookieAttrsWrite = false,\n}: {\n  jar?: CookieJarLike;\n  consent?: ConsentStateLike;\n  nowMs?: number;\n  cookieDomain?: string;\n  cookiePrefix?: string;\n  cookiePath?: string;\n  cookieSameSite?: string;\n  cookieSecure?: boolean;\n  cookieMaxAgeSeconds?: number;\n  cookieUpdate?: boolean;\n  forceCookieAttrsWrite?: boolean;\n} = {}) {\n  const name = buildD8aClientCookieName(cookiePrefix);\n  const existing = jar?.get(name);\n  const parsed = parseD8aClientCookie(existing);\n  // If cookie exists, we may still need to rewrite it to apply new attributes\n  // (SameSite/Secure/max-age/path/domain). This is controlled by cookieUpdate.\n  if (parsed?.cid) {\n    if (!canWriteAnalyticsCookies(consent || {})) return { cid: parsed.cid, wrote: false };\n    // For security-related changes (SameSite/Secure/etc.) we still want to be\n    // able to apply updated attributes even if cookie_update is false.\n    if (cookieUpdate === false && !forceCookieAttrsWrite) return { cid: parsed.cid, wrote: false };\n    jar?.set(name, String(existing || \"\"), {\n      domain: cookieDomain,\n      path: cookiePath,\n      sameSite: cookieSameSite,\n      secure: cookieSecure,\n      maxAgeSeconds: cookieMaxAgeSeconds,\n    });\n    return { cid: parsed.cid, wrote: true };\n  }\n\n  const newVal = buildD8aClientCookieValue({ nowMs });\n  const newParsed = parseD8aClientCookie(newVal);\n  const cid = newParsed?.cid || null;\n\n  if (!canWriteAnalyticsCookies(consent || {})) {\n    // Cookieless: return a generated id but do not persist.\n    return { cid, wrote: false };\n  }\n\n  // Only update cookies when enabled; however, if cookie is missing, we still\n  // create it even when cookieUpdate is false.\n  if (cookieUpdate === false && existing) return { cid, wrote: false };\n\n  jar?.set(name, newVal, {\n    domain: cookieDomain,\n    path: cookiePath,\n    sameSite: cookieSameSite,\n    secure: cookieSecure,\n    maxAgeSeconds: cookieMaxAgeSeconds,\n  });\n  return { cid, wrote: true };\n}\n\n/**\n * Applies an explicit client id to the d8a client cookie, honoring cookie_update\n * semantics: do not overwrite existing cookies when cookie_update=false,\n * but still create missing cookies.\n */\nexport function applyClientIdCookie({\n  jar,\n  cid,\n  consent,\n  cookieDomain = \"auto\",\n  cookiePrefix = \"\",\n  cookiePath = \"/\",\n  cookieSameSite = \"Lax\",\n  cookieSecure = undefined,\n  cookieMaxAgeSeconds = TWO_YEARS_SECONDS,\n  cookieUpdate = true,\n  forceCookieAttrsWrite = false,\n}: {\n  jar?: CookieJarLike;\n  cid?: unknown;\n  consent?: ConsentStateLike;\n  cookieDomain?: string;\n  cookiePrefix?: string;\n  cookiePath?: string;\n  cookieSameSite?: string;\n  cookieSecure?: boolean;\n  cookieMaxAgeSeconds?: number;\n  cookieUpdate?: boolean;\n  forceCookieAttrsWrite?: boolean;\n} = {}) {\n  const cidStr = typeof cid === \"string\" ? cid.trim() : String(cid || \"\").trim();\n  const cookieValue = buildD8aClientCookieValueFromCid(cidStr);\n  if (!cookieValue) return { cid: null, wrote: false };\n\n  const name = buildD8aClientCookieName(cookiePrefix);\n  const existing = jar?.get(name);\n  const parsed = parseD8aClientCookie(existing);\n  const existingCid = parsed?.cid || null;\n\n  if (!canWriteAnalyticsCookies(consent || {})) return { cid: cidStr, wrote: false };\n\n  // If cookie exists and updates are disabled, don't overwrite its value.\n  if (existing && cookieUpdate === false) {\n    if (!forceCookieAttrsWrite) return { cid: existingCid || cidStr, wrote: false };\n    jar?.set(name, String(existing || \"\"), {\n      domain: cookieDomain,\n      path: cookiePath,\n      sameSite: cookieSameSite,\n      secure: cookieSecure,\n      maxAgeSeconds: cookieMaxAgeSeconds,\n    });\n    return { cid: existingCid || cidStr, wrote: true };\n  }\n\n  // Create missing cookie even when cookie_update=false.\n  jar?.set(name, cookieValue, {\n    domain: cookieDomain,\n    path: cookiePath,\n    sameSite: cookieSameSite,\n    secure: cookieSecure,\n    maxAgeSeconds: cookieMaxAgeSeconds,\n  });\n  return { cid: cidStr, wrote: true };\n}\n\n/**\n * Applies an explicit serialized session cookie value to a d8a per-property cookie,\n * honoring cookie_update semantics: do not overwrite existing cookies when cookie_update=false,\n * but still create missing cookies.\n */\nexport function applySessionCookie({\n  jar,\n  propertyId,\n  value,\n  consent,\n  cookieDomain = \"auto\",\n  cookiePrefix = \"\",\n  cookiePath = \"/\",\n  cookieSameSite = \"Lax\",\n  cookieSecure = undefined,\n  cookieMaxAgeSeconds = TWO_YEARS_SECONDS,\n  cookieUpdate = true,\n  forceCookieAttrsWrite = false,\n}: {\n  jar?: CookieJarLike;\n  propertyId?: string;\n  value?: unknown;\n  consent?: ConsentStateLike;\n  cookieDomain?: string;\n  cookiePrefix?: string;\n  cookiePath?: string;\n  cookieSameSite?: string;\n  cookieSecure?: boolean;\n  cookieMaxAgeSeconds?: number;\n  cookieUpdate?: boolean;\n  forceCookieAttrsWrite?: boolean;\n} = {}) {\n  const pid = String(propertyId || \"\");\n  if (!pid) return { wrote: false };\n  const rawValue = String(value || \"\");\n  // Basic validation: only accept well-formed d8a session cookie values.\n  if (!parseD8aSessionCookie(rawValue)?.tokens) return { wrote: false };\n\n  const name = buildD8aCookieName(pid, cookiePrefix);\n  const existing = jar?.get(name);\n\n  if (!canWriteAnalyticsCookies(consent || {})) return { wrote: false };\n\n  if (existing && cookieUpdate === false) {\n    if (!forceCookieAttrsWrite) return { wrote: false };\n    jar?.set(name, String(existing || \"\"), {\n      domain: cookieDomain,\n      path: cookiePath,\n      sameSite: cookieSameSite,\n      secure: cookieSecure,\n      maxAgeSeconds: cookieMaxAgeSeconds,\n    });\n    return { wrote: true };\n  }\n\n  // Create missing cookie even when cookie_update=false.\n  jar?.set(name, rawValue, {\n    domain: cookieDomain,\n    path: cookiePath,\n    sameSite: cookieSameSite,\n    secure: cookieSecure,\n    maxAgeSeconds: cookieMaxAgeSeconds,\n  });\n  return { wrote: true };\n}\n\nexport function ensureSession({\n  jar,\n  propertyId,\n  consent,\n  nowMs,\n  cookieDomain = \"auto\",\n  cookiePrefix = \"\",\n  cookiePath = \"/\",\n  cookieSameSite = \"Lax\",\n  cookieSecure = undefined,\n  cookieMaxAgeSeconds = TWO_YEARS_SECONDS,\n  cookieUpdate = true,\n  forceCookieAttrsWrite = false,\n  sessionTimeoutMs,\n}: {\n  jar?: CookieJarLike;\n  propertyId?: string;\n  consent?: ConsentStateLike;\n  nowMs?: number;\n  cookieDomain?: string;\n  cookiePrefix?: string;\n  cookiePath?: string;\n  cookieSameSite?: string;\n  cookieSecure?: boolean;\n  cookieMaxAgeSeconds?: number;\n  cookieUpdate?: boolean;\n  forceCookieAttrsWrite?: boolean;\n  sessionTimeoutMs?: number;\n} = {}) {\n  const name = buildD8aCookieName(propertyId, cookiePrefix);\n  const existing = jar?.get(name);\n  const parsed = parseD8aSessionCookie(existing);\n\n  // If cookie_update is disabled and the cookie already exists, don't refresh it.\n  if (cookieUpdate === false && parsed?.tokens) {\n    if (!canWriteAnalyticsCookies(consent || {})) {\n      return { sid: parsed.sid, sct: parsed.sct, isNewSession: false, wrote: false };\n    }\n    if (!forceCookieAttrsWrite) {\n      return { sid: parsed.sid, sct: parsed.sct, isNewSession: false, wrote: false };\n    }\n    // Apply updated cookie attributes without changing the cookie value/tokens.\n    jar?.set(name, String(existing || \"\"), {\n      domain: cookieDomain,\n      path: cookiePath,\n      sameSite: cookieSameSite,\n      secure: cookieSecure,\n      maxAgeSeconds: cookieMaxAgeSeconds,\n    });\n    return { sid: parsed.sid, sct: parsed.sct, isNewSession: false, wrote: true };\n  }\n\n  const updated = updateD8aSessionCookieTokens(parsed?.tokens || null, { nowMs, sessionTimeoutMs });\n  const value = serializeD8aSessionCookieTokens(updated.tokens);\n\n  const sid = Number(updated.tokens.find((t) => t.key === \"s\")?.val ?? NaN);\n  const sct = Number(updated.tokens.find((t) => t.key === \"o\")?.val ?? NaN);\n\n  const sidOk = Number.isFinite(sid) ? sid : null;\n  const sctOk = Number.isFinite(sct) ? sct : null;\n\n  if (!canWriteAnalyticsCookies(consent || {})) {\n    return { sid: sidOk, sct: sctOk, isNewSession: updated.isNewSession, wrote: false };\n  }\n\n  jar?.set(name, value, {\n    domain: cookieDomain,\n    path: cookiePath,\n    sameSite: cookieSameSite,\n    secure: cookieSecure,\n    maxAgeSeconds: cookieMaxAgeSeconds,\n  });\n  return { sid: sidOk, sct: sctOk, isNewSession: updated.isNewSession, wrote: true };\n}\n", "/**\n * User-Agent Client Hints (UA-CH) helpers.\n *\n * - Fetches high-entropy UA-CH values when supported (`navigator.userAgentData`)\n * - Caches the result on `window.d8a_tag_data` so it is fetched at most once per page\n * - Maps cached UA-CH fields into GA4-style query params (uaa/uab/uafvl/...)\n */\nconst HIGH_ENTROPY_KEYS = [\n  \"platform\",\n  \"platformVersion\",\n  \"architecture\",\n  \"model\",\n  \"bitness\",\n  \"fullVersionList\",\n  \"wow64\",\n  \"mobile\",\n] as const;\n\ntype UachFullVersion = { brand?: string; version?: string };\n\ntype Uach = {\n  architecture?: string;\n  bitness?: string;\n  fullVersionList?: UachFullVersion[];\n  mobile?: boolean;\n  model?: string;\n  platform?: string;\n  platformVersion?: string;\n  wow64?: boolean;\n};\n\ntype UserAgentDataLike = {\n  // UA-CH API accepts an array of hints; treat it as readonly to allow `as const` lists.\n  getHighEntropyValues: (hints: readonly string[]) => Promise<Uach>;\n};\n\ntype UachStore = {\n  uach?: Uach;\n  uach_promise?: Promise<Uach>;\n};\n\ntype WindowLike = import(\"../types.ts\").WindowLike;\ntype WindowUachCapable = WindowLike & {\n  navigator: NonNullable<WindowLike[\"navigator\"]> & { userAgentData: UserAgentDataLike };\n};\n\nimport { isRecord } from \"../utils/is_record.ts\";\n\nfunction getStore(w: WindowLike) {\n  // Keep a singleton cache object on window so we only fetch UA-CH values once per page.\n  w.d8a_tag_data = w.d8a_tag_data || {};\n  const store = w.d8a_tag_data;\n  const existing = store.uach_store;\n  if (!isRecord(existing)) {\n    store.uach_store = {} as UachStore;\n  }\n  return store.uach_store as UachStore;\n}\n\nexport function hasUachApi(w: WindowLike): w is WindowUachCapable {\n  const nav = w.navigator;\n  if (!isRecord(nav)) return false;\n  const uad = nav.userAgentData;\n  if (!isRecord(uad)) return false;\n  const ghev = uad.getHighEntropyValues;\n  return typeof ghev === \"function\";\n}\n\nexport function getUachCached(w: WindowLike) {\n  const store = getStore(w);\n  return store.uach || null;\n}\n\nexport function fetchUach(w: WindowLike) {\n  if (!hasUachApi(w)) return null;\n  const store = getStore(w);\n  if (store.uach_promise) return store.uach_promise;\n\n  store.uach_promise = w.navigator.userAgentData\n    .getHighEntropyValues(HIGH_ENTROPY_KEYS)\n    .then((d: Uach) => {\n      store.uach = store.uach || d;\n      return store.uach;\n    });\n  return store.uach_promise;\n}\n\nfunction enc(v: unknown) {\n  return encodeURIComponent(String(v || \"\"));\n}\n\nexport function uachToParams(uach: Uach | null) {\n  if (!uach) return null;\n  const out: Record<string, string> = {};\n\n  if (uach.architecture) out.uaa = String(uach.architecture);\n  if (uach.bitness) out.uab = String(uach.bitness);\n  if (Array.isArray(uach.fullVersionList)) {\n    out.uafvl = uach.fullVersionList\n      .map((c) => `${enc(c.brand || \"\")};${enc(c.version || \"\")}`)\n      .join(\"|\");\n  }\n  out.uamb = uach.mobile ? \"1\" : \"0\";\n  if (uach.model) out.uam = String(uach.model);\n  if (uach.platform) out.uap = String(uach.platform);\n  if (uach.platformVersion) out.uapv = String(uach.platformVersion);\n  out.uaw = uach.wow64 ? \"1\" : \"0\";\n\n  return out;\n}\n\nexport const __internal = { HIGH_ENTROPY_KEYS };\n", "import type { ConsentState } from \"../types.ts\";\n\nfunction encodeConsentStateBit(a: unknown) {\n  // Encode consent state into the `gcs` bit representation used by the Google tag / GA4 collect\n  // wire format:\n  // - 1 => \"1\"\n  // - 2 or 4 => \"0\"\n  // - else => \"-\"\n  switch (a) {\n    case 1:\n      return \"1\";\n    case 2:\n    case 4:\n      return \"0\";\n    default:\n      return \"-\";\n  }\n}\n\nfunction consentStatusToQl(status: unknown) {\n  // Map consent status to the internal states used by `buildGcs`.\n  // - granted => 1 (\"1\")\n  // - denied => 2 (\"0\")\n  // - undefined => 1 (treat as granted by default in our tracker)\n  const s = String(status || \"\").toLowerCase();\n  if (s === \"denied\") return 2;\n  return 1;\n}\n\n/**\n * Build `gcs` in the shape expected by the Google tag / GA4 collect wire format:\n * `G1` + encode(ad_storage_state) + encode(analytics_storage_state)\n */\nexport function buildGcs({ consent }: { consent: ConsentState }) {\n  const c = consent || {};\n  const ad = consentStatusToQl(c.ad_storage);\n  const an = consentStatusToQl(c.analytics_storage);\n  return `G1${encodeConsentStateBit(ad)}${encodeConsentStateBit(an)}`;\n}\n\n/**\n * Build `gcd` based on Consent Mode v2 state transitions.\n *\n * Uses the letter meanings described in Simo Ahava\u2019s Consent Mode v2 guide:\n * - `l`: not set\n * - `p`: denied by default (no update)\n * - `q`: denied by default and after update\n * - `t`: granted by default (no update)\n * - `r`: denied by default, granted after update\n * - `m`: denied after update (no default)\n * - `n`: granted after update (no default)\n * - `u`: granted by default, denied after update\n * - `v`: granted by default and after update\n *\n * Reference: https://www.simoahava.com/analytics/consent-mode-v2-google-tags/\n *\n * Note: The official `gcd` encoding contains more metadata than just the\n * consent transitions. For our purposes we encode the transition letters for\n * the 4 main consent signals and preserve the observed framing:\n * - prefix: `13`\n * - suffix: `l1`\n *\n * This ensures the known baselines match:\n * - all denied (default denied, no update): `13p3p3p2p5l1`\n * - all granted (default denied, update granted): `13r3r3r2r5l1`\n */\nexport function buildGcd({\n  consentDefault,\n  consentUpdate,\n}: {\n  consentDefault: ConsentState;\n  consentUpdate: ConsentState;\n}) {\n  const d = consentDefault || {};\n  const u = consentUpdate || {};\n\n  function status(v: unknown) {\n    const s = String(v || \"\").toLowerCase();\n    if (s === \"granted\") return \"granted\";\n    if (s === \"denied\") return \"denied\";\n    return null;\n  }\n\n  function letterFor(def: unknown, upd: unknown) {\n    const defS = status(def);\n    const updS = status(upd);\n\n    // no default, no update\n    if (!defS && !updS) return \"l\";\n\n    // default only\n    if (defS === \"denied\" && !updS) return \"p\";\n    if (defS === \"granted\" && !updS) return \"t\";\n\n    // update only\n    if (!defS && updS === \"denied\") return \"m\";\n    if (!defS && updS === \"granted\") return \"n\";\n\n    // both present\n    if (defS === \"denied\" && updS === \"denied\") return \"q\";\n    if (defS === \"granted\" && updS === \"granted\") return \"v\";\n    if (defS === \"denied\" && updS === \"granted\") return \"r\";\n    if (defS === \"granted\" && updS === \"denied\") return \"u\";\n\n    return \"l\";\n  }\n\n  // The digits after each letter match the observed Consent Mode v2 wire strings.\n  const parts: Array<[string, string]> = [\n    [\"ad_storage\", \"3\"],\n    [\"analytics_storage\", \"3\"],\n    [\"ad_user_data\", \"2\"],\n    [\"ad_personalization\", \"5\"],\n  ];\n\n  let out = \"13\";\n  for (const [k, digit] of parts) {\n    out += `${letterFor(d[k], u[k])}${digit}`;\n  }\n  out += \"l1\";\n  return out;\n}\n", "import { generateCidParts, formatCid } from \"../cookies/d8a_cookies.ts\";\n\n/**\n * Generates a cookieless cid using the same logic as our normal `_d8a` cookie\n * value generator, but without persisting it anywhere.\n *\n * This keeps the cid format consistent across consented and non-consented flows.\n */\nexport function generateAnonCid() {\n  const parts = generateCidParts({ nowMs: Date.now() });\n  return formatCid(parts);\n}\n\nexport function getOrCreateAnonCid({\n  windowRef,\n  state,\n}: {\n  windowRef?: unknown;\n  state?: { anonCid?: string | null } | null;\n}) {\n  // windowRef kept for future use (e.g., crypto-based generator), but not needed today.\n  void windowRef;\n  if (!state) return generateAnonCid();\n  if (typeof state.anonCid === \"string\" && state.anonCid) return state.anonCid;\n  state.anonCid = generateAnonCid();\n  return state.anonCid;\n}\n", "/**\n * Engagement timer\n *\n * Counts time only while the page is:\n * - focused\n * - visible\n * - active (not pagehidden)\n *\n */\nimport type { WindowLike } from \"../types.ts\";\n\nexport function createEngagementTimer({\n  windowRef,\n  nowMs = () => Date.now(),\n}: {\n  windowRef?: WindowLike;\n  nowMs?: () => number;\n} = {}) {\n  if (!windowRef) throw new Error(\"createEngagementTimer: windowRef is required\");\n  const w = windowRef;\n\n  let started = false;\n  let hasFocus = true;\n  let isVisible = true;\n  let isActive = true;\n\n  let runningSinceMs: number | null = null;\n  let accumulatedMs = 0;\n\n  function readHasFocus() {\n    try {\n      if (typeof w.hasFocus === \"function\") return !!w.hasFocus();\n      if (typeof w.document?.hasFocus === \"function\") return !!w.document.hasFocus();\n    } catch {\n      // ignore\n    }\n    return true;\n  }\n\n  function readIsVisible() {\n    try {\n      // In browsers: document.hidden is boolean.\n      if (typeof w.document?.hidden === \"boolean\") return !w.document.hidden;\n      if (typeof w.document?.visibilityState === \"string\")\n        return w.document.visibilityState !== \"hidden\";\n    } catch {\n      // ignore\n    }\n    return true;\n  }\n\n  function shouldRun() {\n    return hasFocus && isVisible && isActive;\n  }\n\n  function sync() {\n    const now = nowMs();\n    if (runningSinceMs != null) {\n      const delta = Math.max(0, now - runningSinceMs);\n      accumulatedMs += delta;\n      runningSinceMs = now;\n    }\n\n    if (shouldRun()) {\n      if (runningSinceMs == null) runningSinceMs = now;\n    } else {\n      runningSinceMs = null;\n    }\n  }\n\n  function onFocus() {\n    sync();\n    hasFocus = true;\n    sync();\n  }\n\n  function onBlur() {\n    sync();\n    hasFocus = false;\n    sync();\n  }\n\n  function onVisibilityChange() {\n    sync();\n    isVisible = readIsVisible();\n    sync();\n  }\n\n  function onPageShow() {\n    sync();\n    isActive = true;\n    sync();\n  }\n\n  function onPageHide() {\n    sync();\n    isActive = false;\n    sync();\n  }\n\n  function start() {\n    if (started) return;\n    started = true;\n\n    hasFocus = readHasFocus();\n    isVisible = readIsVisible();\n    isActive = true;\n    sync();\n\n    if (typeof w.addEventListener === \"function\") {\n      w.addEventListener(\"focus\", onFocus);\n      w.addEventListener(\"blur\", onBlur);\n      w.addEventListener(\"pageshow\", onPageShow);\n      w.addEventListener(\"pagehide\", onPageHide);\n    }\n    if (typeof w.document?.addEventListener === \"function\") {\n      w.document.addEventListener(\"visibilitychange\", onVisibilityChange);\n    }\n  }\n\n  function peek() {\n    sync();\n    return accumulatedMs | 0;\n  }\n\n  function getAndReset() {\n    sync();\n    const out = accumulatedMs | 0;\n    accumulatedMs = 0;\n    runningSinceMs = shouldRun() ? nowMs() : null;\n    return out;\n  }\n\n  return { start, peek, getAndReset, __internal: { sync } };\n}\n", "import type { PropertyConfig, RuntimeState } from \"../types.ts\";\n\nexport function getPropertyIds(getState: () => RuntimeState) {\n  const s = typeof getState === \"function\" ? getState() : null;\n  if (Array.isArray(s?.propertyIds) && s.propertyIds.length > 0) return s.propertyIds.slice();\n  return [];\n}\n\nexport function getPropertyConfig(\n  getState: () => RuntimeState,\n  propertyId: string,\n): PropertyConfig {\n  const s = typeof getState === \"function\" ? getState() : null;\n  const cfg = s?.propertyConfigs?.[propertyId];\n  return cfg && typeof cfg === \"object\" ? cfg : {};\n}\n\nexport function getSetParams(getState: () => RuntimeState): Record<string, unknown> {\n  const s = typeof getState === \"function\" ? getState() : null;\n  return s?.set && typeof s.set === \"object\" ? s.set : {};\n}\n", "export function createDebugLogger({ enabled }: { enabled?: boolean }) {\n  return {\n    enabled: enabled === true,\n    log: (...args: unknown[]) => {\n      if (enabled !== true) return;\n      try {\n        console.log(...args);\n      } catch {\n        // ignore\n      }\n    },\n  };\n}\n", "/**\n * Param resolution helpers with precedence rules:\n * - event params (per-event) override\n * - config params (per-property) fallback\n * - set params (global defaults) fallback\n *\n * `resolveString` returns a trimmed, non-empty string or null.\n * `resolveBool` returns a boolean or null.\n */\nexport function resolveWithPrecedence({\n  key,\n  eventParams,\n  config,\n  setParams,\n}: {\n  key: string;\n  eventParams?: Record<string, unknown> | null;\n  config?: Record<string, unknown> | null;\n  setParams?: Record<string, unknown> | null;\n}) {\n  const ep = eventParams || {};\n  const cfg = config || {};\n  const sp = setParams || {};\n  if (Object.prototype.hasOwnProperty.call(ep, key) && ep[key] != null) return ep[key];\n  if (Object.prototype.hasOwnProperty.call(cfg, key) && cfg[key] != null) return cfg[key];\n  if (Object.prototype.hasOwnProperty.call(sp, key) && sp[key] != null) return sp[key];\n  return null;\n}\n\nexport function resolveString({\n  key,\n  eventParams,\n  config,\n  setParams,\n}: {\n  key: string;\n  eventParams?: Record<string, unknown> | null;\n  config?: Record<string, unknown> | null;\n  setParams?: Record<string, unknown> | null;\n}) {\n  const v = resolveWithPrecedence({ key, eventParams, config, setParams });\n  return typeof v === \"string\" && v.trim() ? v.trim() : null;\n}\n\nexport function resolveBool({\n  key,\n  eventParams,\n  config,\n  setParams,\n}: {\n  key: string;\n  eventParams?: Record<string, unknown> | null;\n  config?: Record<string, unknown> | null;\n  setParams?: Record<string, unknown> | null;\n}) {\n  const v = resolveWithPrecedence({ key, eventParams, config, setParams });\n  if (typeof v === \"boolean\") return v;\n  return null;\n}\n", "type CookieFlagsParsed = { secure?: boolean; sameSite?: \"Lax\" | \"Strict\" | \"None\" };\n\nfunction parseCookieFlags(cookieFlags: unknown): CookieFlagsParsed {\n  const raw = typeof cookieFlags === \"string\" ? cookieFlags : \"\";\n  if (!raw.trim()) return {};\n  const parts = raw\n    .split(\";\")\n    .map((s) => s.trim())\n    .filter(Boolean);\n  const out: CookieFlagsParsed = {};\n  for (const p of parts) {\n    const lower = p.toLowerCase();\n    if (lower === \"secure\") out.secure = true;\n    if (lower.startsWith(\"samesite=\")) {\n      const vRaw = p.split(\"=\").slice(1).join(\"=\").trim();\n      const v = vRaw.toLowerCase();\n      if (v === \"lax\") out.sameSite = \"Lax\";\n      if (v === \"strict\") out.sameSite = \"Strict\";\n      if (v === \"none\") out.sameSite = \"None\";\n    }\n  }\n  return out;\n}\n\ntype DebugEnabledFn = (args: {\n  config: Record<string, unknown>;\n  setParams: Record<string, unknown>;\n}) => boolean;\n\nimport { isRecord } from \"../utils/is_record.ts\";\n\nexport type CookieSettings = {\n  cookieDomain: string;\n  cookiePrefix: string;\n  cookiePath: string;\n  cookieSameSite: \"Lax\" | \"Strict\" | \"None\";\n  cookieSecure: boolean;\n  cookieUpdate: boolean;\n  cookieMaxAgeSeconds: number;\n  forceCookieAttrsWrite: boolean;\n  debug: boolean;\n};\n\nexport function resolveCookieSettings({\n  propertyCfg,\n  setParams,\n  https,\n  state,\n  isDebugEnabled,\n}: {\n  propertyCfg?: import(\"../types.ts\").PropertyConfig;\n  setParams?: Record<string, unknown>;\n  https?: boolean;\n  state?: import(\"../types.ts\").RuntimeState;\n  isDebugEnabled?: DebugEnabledFn;\n}): CookieSettings {\n  const cfg: Record<string, unknown> = isRecord(propertyCfg) ? propertyCfg : {};\n  const sp: Record<string, unknown> = isRecord(setParams) ? setParams : {};\n\n  const cookieDomainRaw = cfg.cookie_domain ?? sp.cookie_domain;\n  const cookieDomain =\n    typeof cookieDomainRaw === \"string\" && cookieDomainRaw.trim()\n      ? cookieDomainRaw\n      : cookieDomainRaw == null\n        ? \"auto\"\n        : String(cookieDomainRaw);\n\n  const cookiePrefixRaw = cfg.cookie_prefix ?? sp.cookie_prefix;\n  const cookiePrefix = typeof cookiePrefixRaw === \"string\" ? cookiePrefixRaw : \"\";\n\n  const cookiePathRaw = cfg.cookie_path ?? sp.cookie_path;\n  const cookiePath =\n    typeof cookiePathRaw === \"string\" && cookiePathRaw.trim() ? cookiePathRaw : \"/\";\n\n  const cookieUpdateRaw = cfg.cookie_update ?? sp.cookie_update;\n  const cookieUpdate = typeof cookieUpdateRaw === \"boolean\" ? cookieUpdateRaw : true;\n\n  // NOTE: Do not default this to null; Number(null) === 0 which would set Max-Age=0\n  // and immediately delete cookies in browsers.\n  const cookieExpires = cfg.cookie_expires ?? sp.cookie_expires;\n  const parsedExpires = Number.isFinite(Number(cookieExpires)) ? Number(cookieExpires) : null;\n  // Default lifetime: 2 years for both client + per-property cookies.\n  // (The per-property cookie contains session state, but the cookie itself persists.)\n  const cookieMaxAgeSeconds = parsedExpires != null ? parsedExpires : 2 * 365 * 24 * 60 * 60;\n\n  const flagsRaw = cfg.cookie_flags ?? sp.cookie_flags ?? \"\";\n  const flags = parseCookieFlags(flagsRaw);\n  const cookieSameSite: \"Lax\" | \"Strict\" | \"None\" = flags.sameSite || \"Lax\";\n  // Cookie flags can request Secure, but we never set Secure on non-HTTPS pages.\n  const cookieSecure = https === true && flags.secure === true ? true : https === true;\n  const debug =\n    typeof isDebugEnabled === \"function\" ? isDebugEnabled({ config: cfg, setParams: sp }) : false;\n\n  // Detect attribute changes so we can apply security changes even when cookie_update=false.\n  const sig = JSON.stringify({\n    domain: cookieDomain,\n    prefix: cookiePrefix,\n    path: cookiePath,\n    sameSite: cookieSameSite,\n    secure: cookieSecure,\n    maxAgeSeconds: cookieMaxAgeSeconds,\n  });\n  const sigKey = `${cookiePrefix}|${cookieDomain}|${cookiePath}`;\n  if (state && !state.cookieAttrsSig) state.cookieAttrsSig = {};\n  const prev = state?.cookieAttrsSig ? state.cookieAttrsSig[sigKey] : undefined;\n  const forceCookieAttrsWrite = prev !== sig;\n  if (state?.cookieAttrsSig) state.cookieAttrsSig[sigKey] = sig;\n\n  return {\n    cookieDomain,\n    cookiePrefix,\n    cookiePath,\n    cookieSameSite,\n    cookieSecure,\n    cookieUpdate,\n    cookieMaxAgeSeconds,\n    forceCookieAttrsWrite,\n    debug,\n  };\n}\n", "import {\n  buildD8aCookieName,\n  parseD8aSessionCookie,\n  serializeD8aSessionCookieTokens,\n  updateD8aSessionCookieTokens,\n  __internal as d8aCookiesInternal,\n} from \"./d8a_cookies.ts\";\nimport type { PropertyConfig, RuntimeState } from \"../types.ts\";\nimport type { CookieSettings } from \"./cookie_settings.ts\";\nimport { isRecord } from \"../utils/is_record.ts\";\n\ntype CookieJarLike = {\n  get: (name: string) => string | undefined;\n  set: (\n    name: string,\n    value: string,\n    opts?: {\n      domain?: string;\n      path?: string;\n      sameSite?: string;\n      secure?: boolean;\n      maxAgeSeconds?: number;\n    },\n  ) =>\n    | { ok?: boolean; domain?: string | null; cookieStr?: string | null; attempts?: unknown[] }\n    | unknown;\n};\n\nfunction pickCookieSetDebugFields(res: unknown) {\n  if (!isRecord(res)) return {};\n  return {\n    ok: res.ok,\n    domain: res.domain,\n    cookieStr: res.cookieStr,\n    attempts: res.attempts,\n  };\n}\n\n/**\n * Updates shared session tokens once per event and writes the same serialized\n * session cookie value to each destination property cookie (when allowed).\n *\n * This preserves the current dispatcher behavior while making it testable and reusable.\n */\nexport function updateAndWriteSharedSession({\n  state,\n  destinations,\n  jar,\n  getPropertyConfig,\n  resolveCookieSettings,\n  sessionTimeoutMs,\n  engagementTimeMs,\n  engagedThresholdMs,\n  nowMs,\n  log,\n}: {\n  state: RuntimeState;\n  destinations: string[];\n  jar: CookieJarLike;\n  getPropertyConfig: (pid: string) => PropertyConfig;\n  resolveCookieSettings: (pcfg: PropertyConfig) => CookieSettings;\n  sessionTimeoutMs?: number;\n  engagementTimeMs?: number;\n  engagedThresholdMs?: number;\n  nowMs?: number;\n  log?: ((...args: unknown[]) => void) | null;\n}) {\n  if (!state) return;\n  if (!Array.isArray(destinations) || destinations.length === 0) return;\n  if (!jar) return;\n  if (typeof getPropertyConfig !== \"function\") return;\n  if (typeof resolveCookieSettings !== \"function\") return;\n\n  const now = Number.isFinite(Number(nowMs)) ? Number(nowMs) : Date.now();\n\n  let tokens = Array.isArray(state.sharedSessionTokens) ? state.sharedSessionTokens : null;\n  if (!tokens) {\n    // Try to parse from any existing per-property cookie.\n    for (const pid of destinations) {\n      const pcfg = getPropertyConfig(pid);\n      const cs = resolveCookieSettings(pcfg);\n      const cookieName = buildD8aCookieName(pid, cs.cookiePrefix);\n      const existing = jar.get(cookieName);\n      const parsed = parseD8aSessionCookie(existing);\n      if (parsed?.tokens) {\n        tokens = parsed.tokens;\n        break;\n      }\n    }\n  }\n\n  const updated = updateD8aSessionCookieTokens(tokens || null, { nowMs: now, sessionTimeoutMs });\n\n  // Track engagement within the current session and flip `g` once threshold is reached.\n  if (updated.isNewSession) {\n    state.sessionEngagementMs = 0;\n    state.sessionEngaged = false;\n  }\n  const prevG = d8aCookiesInternal.getToken(updated.tokens, \"g\");\n  state.sessionEngagementMs =\n    (Number(state.sessionEngagementMs) || 0) + (Number(engagementTimeMs) || 0);\n  if (\n    !state.sessionEngaged &&\n    Number(engagedThresholdMs) > 0 &&\n    state.sessionEngagementMs >= Number(engagedThresholdMs)\n  ) {\n    d8aCookiesInternal.setToken(updated.tokens, \"g\", 1);\n    state.sessionEngaged = true;\n  }\n  const nextG = d8aCookiesInternal.getToken(updated.tokens, \"g\");\n  const shouldWriteSessionValue = updated.isNewSession || prevG !== nextG;\n\n  state.sharedSessionTokens = updated.tokens;\n  state.sharedSessionValue = serializeD8aSessionCookieTokens(updated.tokens);\n\n  // Write the same session cookie value to every destination property cookie.\n  for (const pid of destinations) {\n    const pcfg = getPropertyConfig(pid);\n    const cs = resolveCookieSettings(pcfg);\n    const cookieName = buildD8aCookieName(pid, cs.cookiePrefix);\n    const existing = jar.get(cookieName);\n\n    if (!existing) {\n      // Always create missing cookie (recreation behavior).\n      const res = jar.set(cookieName, state.sharedSessionValue, {\n        domain: cs.cookieDomain,\n        path: cs.cookiePath,\n        sameSite: cs.cookieSameSite,\n        secure: cs.cookieSecure,\n        maxAgeSeconds: cs.cookieMaxAgeSeconds ?? undefined,\n      });\n      if (cs.debug)\n        log?.(\"[d8a] set session cookie (create)\", {\n          pid,\n          cookieName,\n          ...pickCookieSetDebugFields(res),\n          cookieReadBack: jar.get(cookieName),\n        });\n      continue;\n    }\n\n    if (cs.cookieUpdate === true || shouldWriteSessionValue) {\n      const res = jar.set(cookieName, state.sharedSessionValue, {\n        domain: cs.cookieDomain,\n        path: cs.cookiePath,\n        sameSite: cs.cookieSameSite,\n        secure: cs.cookieSecure,\n        maxAgeSeconds: cs.cookieMaxAgeSeconds ?? undefined,\n      });\n      if (cs.debug)\n        log?.(\"[d8a] set session cookie (value+attrs update)\", {\n          pid,\n          cookieName,\n          ...pickCookieSetDebugFields(res),\n          cookieReadBack: jar.get(cookieName),\n        });\n      continue;\n    }\n\n    if (cs.forceCookieAttrsWrite) {\n      // Security attribute change: rewrite attrs without changing value when cookie_update=false.\n      const res = jar.set(cookieName, existing, {\n        domain: cs.cookieDomain,\n        path: cs.cookiePath,\n        sameSite: cs.cookieSameSite,\n        secure: cs.cookieSecure,\n        maxAgeSeconds: cs.cookieMaxAgeSeconds ?? undefined,\n      });\n      if (cs.debug)\n        log?.(\"[d8a] set session cookie (attrs update)\", {\n          pid,\n          cookieName,\n          ...pickCookieSetDebugFields(res),\n          cookieReadBack: jar.get(cookieName),\n        });\n      continue;\n    }\n\n    if (cs.debug) {\n      log?.(\"[d8a] set session cookie (no write)\", {\n        pid,\n        cookieName,\n        reason:\n          \"cookie_update=false and session value unchanged and force_cookie_attrs_write=false\",\n        cookieUpdate: cs.cookieUpdate,\n        shouldWriteSessionValue,\n        forceCookieAttrsWrite: cs.forceCookieAttrsWrite,\n        cookieReadBack: jar.get(cookieName),\n      });\n    }\n  }\n}\n", "/**\n * Package version identifier.\n * This value is replaced at build time via esbuild define.\n */\ndeclare const __D8A_VERSION__: string;\n\nfunction devVersionUtc(): string {\n  const now = new Date();\n  const year = String(now.getUTCFullYear()).slice(-2);\n  const month = String(now.getUTCMonth() + 1).padStart(2, \"0\");\n  return `dev-${year}-${month}`;\n}\n\nexport const version: string =\n  typeof __D8A_VERSION__ !== \"undefined\" && __D8A_VERSION__ ? __D8A_VERSION__ : devVersionUtc();\n", "import { version } from \"../version.ts\";\n\n/** Short name for the web-tracker library (D8A client). */\nconst D8A_WEB_TRACKER_NAME = \"wt\";\n\n/**\n * Appends D8A request metadata (_dtv, _dtn) to collect query params.\n * Call this after building GA4 params and before building the request URL.\n */\nexport function attachD8aCollectMetadata(params: URLSearchParams): void {\n  params.set(\"_dtv\", version);\n  params.set(\"_dtn\", D8A_WEB_TRACKER_NAME);\n}\n", "import { buildGa4CollectQueryParams } from \"../ga4/gtag_mapper.ts\";\nimport { resolveTrackingUrl } from \"../utils/endpoint.ts\";\nimport { getBrowserContext } from \"./browser_context.ts\";\nimport { sendWithRetries } from \"../transport/send.ts\";\nimport { createCookieJar } from \"../cookies/cookie_jar.ts\";\nimport { ensureClientId } from \"../cookies/identity.ts\";\nimport { buildD8aClientCookieName } from \"../cookies/d8a_cookies.ts\";\nimport { fetchUach, getUachCached, uachToParams } from \"./uach.ts\";\nimport { buildGcd, buildGcs } from \"../ga4/consent_wire.ts\";\nimport { getOrCreateAnonCid } from \"./anon_cid.ts\";\nimport { createEngagementTimer } from \"./engagement_timer.ts\";\nimport { getPropertyConfig, getPropertyIds } from \"./config_resolver.ts\";\nimport { getConsentParts, getEffectiveConsent } from \"./consent_resolver.ts\";\nimport { createDebugLogger } from \"./debug_logger.ts\";\nimport { resolveBool, resolveString } from \"./param_precedence.ts\";\nimport { resolveCookieSettings } from \"../cookies/cookie_settings.ts\";\nimport { updateAndWriteSharedSession } from \"../cookies/session_manager.ts\";\nimport { attachD8aCollectMetadata } from \"../utils/collect_metadata.ts\";\nimport { isRecord } from \"../utils/is_record.ts\";\nimport type { BrowserContext, PropertyConfig, RuntimeState, WindowLike } from \"../types.ts\";\n\nfunction normalizeSendTo(v: unknown) {\n  if (typeof v === \"string\" && v.trim()) return [v.trim()];\n  if (Array.isArray(v))\n    return v.filter((x) => typeof x === \"string\" && x.trim()).map((x) => String(x).trim());\n  return null;\n}\n\nconst SET_PARAMS_EXCLUDED_FROM_EVENT_MERGE = new Set([\n  \"send_to\",\n  \"user_id\",\n  \"client_id\",\n  \"campaign_id\",\n  \"campaign_source\",\n  \"campaign_medium\",\n  \"campaign_name\",\n  \"campaign_term\",\n  \"campaign_content\",\n  \"page_location\",\n  \"page_title\",\n  \"page_referrer\",\n  \"content_group\",\n  \"ignore_referrer\",\n  \"language\",\n  \"screen_resolution\",\n  \"cookie_domain\",\n  \"cookie_expires\",\n  \"cookie_flags\",\n  \"cookie_path\",\n  \"cookie_prefix\",\n  \"cookie_update\",\n  \"send_page_view\",\n  \"session_engagement_time_sec\",\n  \"site_search_enabled\",\n  \"site_search_query_params\",\n  \"outbound_clicks_enabled\",\n  \"outbound_exclude_domains\",\n  \"file_downloads_enabled\",\n  \"file_download_extensions\",\n  \"linker\",\n]);\n\nfunction getGlobalCustomEventParams(setParams: Record<string, unknown>) {\n  const merged: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(setParams || {})) {\n    if (SET_PARAMS_EXCLUDED_FROM_EVENT_MERGE.has(key)) continue;\n    merged[key] = value;\n  }\n  return merged;\n}\n\nexport function createDispatcher({\n  windowRef,\n  getState,\n}: {\n  windowRef: WindowLike;\n  getState: () => RuntimeState;\n}) {\n  const w = windowRef;\n  if (!w) throw new Error(\"createDispatcher: windowRef is required\");\n\n  const queue: Array<{ name: string; params: Record<string, unknown> }> = [];\n  let timerId: number | null = null;\n  let lifecycleAttached = false;\n  const jar = createCookieJar({ windowRef: w });\n\n  // Kick off UA-CH fetching early, but don't block sends.\n  fetchUach(w);\n\n  // Engagement timer for `_et`.\n  const engagementTimer = createEngagementTimer({ windowRef: w });\n  engagementTimer.start();\n\n  // Avoid emitting user_engagement on every tab switch. Only emit on\n  // visibilitychange(hidden) when we have at least N ms of engaged time to flush.\n  // Default 10s (configurable via `session_engagement_time_sec`).\n  const USER_ENGAGEMENT_VISIBILITY_MIN_MS = 10_000;\n\n  function getPrimaryConfig() {\n    const ids = getPropertyIds(getState);\n    const primaryId = ids[0] || \"\";\n    return primaryId ? getPropertyConfig(getState, primaryId) : {};\n  }\n\n  function isDebugEnabled({ config, setParams }: { config: unknown; setParams: unknown }) {\n    const cfg = isRecord(config) ? config : {};\n    const sp = isRecord(setParams) ? setParams : {};\n    return cfg.debug_mode === true || sp.debug_mode === true;\n  }\n\n  function isHttps() {\n    try {\n      return String(w?.location?.protocol || \"\").toLowerCase() === \"https:\";\n    } catch {\n      return false;\n    }\n  }\n\n  function ensurePageLoadMs() {\n    const s = getState();\n    if (!s) return null;\n    if (s.pageLoadMs != null) return s.pageLoadMs;\n    if (s.jsDate instanceof Date && !Number.isNaN(s.jsDate.getTime())) {\n      s.pageLoadMs = s.jsDate.getTime();\n      return s.pageLoadMs;\n    }\n    s.pageLoadMs = Date.now();\n    return s.pageLoadMs;\n  }\n\n  function enqueueEvent(name: string, params: Record<string, unknown>) {\n    queue.push({ name, params: params || {} });\n\n    const cfg = getPrimaryConfig();\n    const maxBatchSize = Number(cfg?.max_batch_size ?? 25);\n    if (queue.length >= maxBatchSize) {\n      flush({ useBeacon: false });\n      return;\n    }\n\n    ensureTimer();\n  }\n\n  function ensureTimer() {\n    if (timerId != null) return;\n    const cfg = getPrimaryConfig();\n    const interval = Number(cfg?.flush_interval_ms ?? 1000);\n    timerId = w.setTimeout(() => {\n      timerId = null;\n      flush({ useBeacon: false });\n    }, interval);\n  }\n\n  async function flush({ useBeacon }: { useBeacon: boolean }) {\n    if (timerId != null) {\n      w.clearTimeout(timerId);\n      timerId = null;\n    }\n    if (queue.length === 0) return { sent: 0 };\n\n    const propertyIds = getPropertyIds(getState);\n    const primaryId = propertyIds[0] || \"\";\n    const cfgPrimary = primaryId ? getPropertyConfig(getState, primaryId) : {};\n    const maxBatchSize = Number(cfgPrimary?.max_batch_size ?? 25);\n    const batch = queue.splice(0, maxBatchSize);\n\n    const consent = getEffectiveConsent(getState);\n    const consentParts = getConsentParts(getState);\n    const sessionTimeoutMsRaw = cfgPrimary[\"session_timeout_ms\"];\n    const sessionTimeoutMs =\n      typeof sessionTimeoutMsRaw === \"number\" ? sessionTimeoutMsRaw : 30 * 60 * 1000;\n    const state = getState();\n    const pageLoadMs = ensurePageLoadMs();\n\n    const analyticsStorage = String(consent?.analytics_storage || \"\").toLowerCase();\n    const analyticsDenied = analyticsStorage === \"denied\";\n    const setParams = state?.set && typeof state.set === \"object\" ? state.set : {};\n    const globalCustomEventParams = getGlobalCustomEventParams(setParams);\n    const https = isHttps();\n    const debugPrimary = isDebugEnabled({ config: cfgPrimary, setParams });\n    const engagedThresholdSecRaw =\n      cfgPrimary?.session_engagement_time_sec ?? setParams?.session_engagement_time_sec ?? 10;\n    const engagedThresholdSec = Number.isFinite(Number(engagedThresholdSecRaw))\n      ? Number(engagedThresholdSecRaw)\n      : 10;\n    const engagedThresholdMs = Math.max(0, Math.floor(engagedThresholdSec * 1000));\n\n    const logger = createDebugLogger({ enabled: debugPrimary });\n    logger.log(\"[d8a] flush\", {\n      href: String(w?.location?.href || \"\"),\n      propertyIds,\n      analyticsStorage: analyticsStorage || \"(unset)\",\n      analyticsDenied,\n      cookieHeader: String(w?.document?.cookie || \"\"),\n    });\n\n    function resolveCookiesFor(propertyCfg: PropertyConfig) {\n      return resolveCookieSettings({\n        propertyCfg,\n        setParams,\n        https,\n        state,\n        isDebugEnabled,\n      });\n    }\n\n    let sent = 0;\n    for (const ev of batch) {\n      const rawParams = isRecord(ev.params) ? ev.params : {};\n      const sendTo = normalizeSendTo(rawParams[\"send_to\"]);\n      const destinations = sendTo ? sendTo : propertyIds;\n      if (!destinations || destinations.length === 0) continue;\n\n      // Merge global set() custom params into each event; event payload wins.\n      // This mirrors gtag semantics for custom params without changing\n      // precedence handling for reserved override keys.\n      const eventParams: Record<string, unknown> = { ...globalCustomEventParams, ...rawParams };\n      // Remove routing metadata from params so it doesn't end up in `ep.*`.\n      delete eventParams[\"send_to\"];\n\n      // Engagement time `_et`: active+visible+focused time since last reset.\n      // We compute this once per event and reuse it:\n      // - send as `_et`\n      // - accumulate to flip session engagement (`seg`) after N seconds\n      const engagementTimeMs = engagementTimer.getAndReset();\n\n      // Shared session update (one per event) to keep per-property cookies identical.\n      if (!analyticsDenied && state) {\n        updateAndWriteSharedSession({\n          state,\n          destinations,\n          jar,\n          getPropertyConfig: (pid: string) => getPropertyConfig(getState, pid),\n          resolveCookieSettings: resolveCookiesFor,\n          sessionTimeoutMs,\n          engagementTimeMs,\n          engagedThresholdMs,\n          nowMs: Date.now(),\n          log: logger.enabled ? logger.log : null,\n        });\n      }\n\n      // Maintain GA hit counter `_s` per session (shared).\n      if (state) state.hitCounter = (state.hitCounter || 0) + 1;\n\n      const sendPromises: Array<Promise<unknown>> = [];\n      for (const pid of destinations) {\n        const pcfg = getPropertyConfig(getState, pid);\n        const collectBase = resolveTrackingUrl(pcfg);\n        const cs = resolveCookiesFor(pcfg);\n\n        const resolvedUserId = resolveString({\n          key: \"user_id\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n        const resolvedClientId = resolveString({\n          key: \"client_id\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n        const resolvedDebugMode =\n          resolveBool({ key: \"debug_mode\", eventParams, config: pcfg, setParams }) === true;\n\n        const campaign = {\n          campaign_id: resolveString({ key: \"campaign_id\", eventParams, config: pcfg, setParams }),\n          campaign_source: resolveString({\n            key: \"campaign_source\",\n            eventParams,\n            config: pcfg,\n            setParams,\n          }),\n          campaign_medium: resolveString({\n            key: \"campaign_medium\",\n            eventParams,\n            config: pcfg,\n            setParams,\n          }),\n          campaign_name: resolveString({\n            key: \"campaign_name\",\n            eventParams,\n            config: pcfg,\n            setParams,\n          }),\n          campaign_term: resolveString({\n            key: \"campaign_term\",\n            eventParams,\n            config: pcfg,\n            setParams,\n          }),\n          campaign_content: resolveString({\n            key: \"campaign_content\",\n            eventParams,\n            config: pcfg,\n            setParams,\n          }),\n        };\n        const contentGroup = resolveString({\n          key: \"content_group\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n\n        const ignoreReferrer =\n          resolveBool({ key: \"ignore_referrer\", eventParams, config: pcfg, setParams }) === true;\n\n        const browser: BrowserContext & Record<string, unknown> = { ...getBrowserContext(w) };\n        const pageLocation = resolveString({\n          key: \"page_location\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n        const pageTitle = resolveString({\n          key: \"page_title\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n        const pageReferrer = resolveString({\n          key: \"page_referrer\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n        const language = resolveString({ key: \"language\", eventParams, config: pcfg, setParams });\n        const screenResolution = resolveString({\n          key: \"screen_resolution\",\n          eventParams,\n          config: pcfg,\n          setParams,\n        });\n\n        if (pageLocation) browser.dl = pageLocation;\n        if (pageTitle) browser.dt = pageTitle;\n        if (pageReferrer != null) browser.dr = pageReferrer;\n        if (language) browser.ul = language;\n        if (screenResolution) browser.sr = screenResolution;\n\n        // Ensure client cookie exists for this property cookie namespace (if allowed).\n        if (!analyticsDenied) {\n          if (cs.debug) {\n            const clientCookieName = buildD8aClientCookieName(cs.cookiePrefix);\n            const clientCookieBefore = jar.get(clientCookieName);\n            const clientRes = ensureClientId({\n              jar,\n              consent,\n              cookieDomain: cs.cookieDomain,\n              cookiePrefix: cs.cookiePrefix,\n              cookiePath: cs.cookiePath,\n              cookieSameSite: cs.cookieSameSite,\n              cookieSecure: cs.cookieSecure,\n              cookieMaxAgeSeconds: cs.cookieMaxAgeSeconds ?? undefined,\n              cookieUpdate: cs.cookieUpdate,\n              forceCookieAttrsWrite: cs.forceCookieAttrsWrite,\n            });\n\n            const clientCookieAction = !clientRes?.wrote\n              ? \"no write\"\n              : clientCookieBefore\n                ? \"attrs update\"\n                : \"create\";\n            logger.log(`[d8a] set client cookie (${clientCookieAction})`, {\n              pid,\n              cookiePrefix: cs.cookiePrefix,\n              result: clientRes,\n              cookieName: clientCookieName,\n              cookieBefore: clientCookieBefore,\n              cookieReadBack: jar.get(clientCookieName),\n              documentCookie: String(w?.document?.cookie || \"\"),\n            });\n          } else {\n            ensureClientId({\n              jar,\n              consent,\n              cookieDomain: cs.cookieDomain,\n              cookiePrefix: cs.cookiePrefix,\n              cookiePath: cs.cookiePath,\n              cookieSameSite: cs.cookieSameSite,\n              cookieSecure: cs.cookieSecure,\n              cookieMaxAgeSeconds: cs.cookieMaxAgeSeconds ?? undefined,\n              cookieUpdate: cs.cookieUpdate,\n              forceCookieAttrsWrite: cs.forceCookieAttrsWrite,\n            });\n          }\n        }\n\n        const q = buildGa4CollectQueryParams({\n          propertyId: pid,\n          eventName: ev.name,\n          eventParams,\n          cookieHeader: analyticsDenied ? \"\" : String(w.document?.cookie || \"\"),\n          clientId:\n            resolvedClientId ||\n            (analyticsDenied ? getOrCreateAnonCid({ windowRef: w, state }) : null),\n          userId: resolvedUserId,\n          cookiePrefix: cs.cookiePrefix,\n          browser,\n          ignoreReferrer,\n          pageLoadMs: pageLoadMs != null ? Number(pageLoadMs) : null,\n          hitCounter: state?.hitCounter ?? null,\n          engagementTimeMs: engagementTimeMs != null ? Number(engagementTimeMs) : null,\n          uachParams: uachToParams(getUachCached(w)),\n          campaign,\n          contentGroup: contentGroup || null,\n          consentParams: {\n            gcs: buildGcs({ consent: consentParts.consent }),\n            gcd: buildGcd({\n              consentDefault: consentParts.consentDefault,\n              consentUpdate: consentParts.consentUpdate,\n            }),\n          },\n          debugMode: resolvedDebugMode,\n        });\n        attachD8aCollectMetadata(q);\n        const url = `${collectBase}?${q.toString()}`;\n        sendPromises.push(sendWithRetries({ url, windowRef: w, useBeacon }));\n      }\n      if (sendPromises.length > 0) {\n        await Promise.all(sendPromises);\n        sent += sendPromises.length;\n      }\n    }\n\n    // If there are more events pending, schedule another flush.\n    if (queue.length > 0) ensureTimer();\n    return { sent };\n  }\n\n  function flushNow({ useBeacon = false }: { useBeacon?: boolean } = {}) {\n    return flush({ useBeacon: useBeacon === true });\n  }\n\n  function attachLifecycleFlush() {\n    if (!w?.addEventListener) return;\n    if (lifecycleAttached) return;\n    lifecycleAttached = true;\n\n    w.addEventListener(\"pagehide\", () => {\n      // Ensure user_engagement carries the accumulated engagement time.\n      try {\n        const ids = getPropertyIds(getState);\n        if (ids.length > 0 && engagementTimer.peek() > 0) {\n          queue.unshift({ name: \"user_engagement\", params: {} });\n        }\n      } catch {\n        // ignore\n      }\n      flush({ useBeacon: false });\n    });\n\n    if (w.document?.addEventListener) {\n      w.document.addEventListener(\"visibilitychange\", () => {\n        if (w.document.hidden) {\n          try {\n            const ids = getPropertyIds(getState);\n            if (ids.length > 0 && engagementTimer.peek() >= USER_ENGAGEMENT_VISIBILITY_MIN_MS) {\n              queue.unshift({ name: \"user_engagement\", params: {} });\n            }\n          } catch {\n            // ignore\n          }\n          // Always use fetch(keepalive) on lifecycle flushes (no sendBeacon/ping).\n          flush({ useBeacon: false });\n        }\n      });\n    }\n  }\n\n  return { enqueueEvent, flush, flushNow, attachLifecycleFlush };\n}\n", "function safeString(v: unknown) {\n  return typeof v === \"string\" ? v : \"\";\n}\n\nimport { isRecord } from \"../utils/is_record.ts\";\n\ntype CurrentScriptLike = { src?: unknown };\ntype DocumentLike = { currentScript?: unknown; location?: { href?: unknown } };\n\nfunction detectFromCurrentScript(documentRef: unknown, key: string) {\n  try {\n    const doc = isRecord(documentRef) ? (documentRef as DocumentLike) : null;\n    const cs = doc && isRecord(doc.currentScript) ? (doc.currentScript as CurrentScriptLike) : null;\n    const src = safeString(cs?.src);\n    if (!src) return \"\";\n    const baseHref = doc && isRecord(doc.location) ? safeString(doc.location?.href) : \"\";\n    const u = new URL(src, baseHref || undefined);\n    return safeString(u.searchParams.get(key));\n  } catch {\n    return \"\";\n  }\n}\n\nexport function resolveDataLayerName({\n  windowRef,\n  dataLayerName,\n}: {\n  windowRef?: import(\"../types.ts\").WindowLike;\n  dataLayerName?: unknown;\n}) {\n  // Explicit override (ESM usage or programmatic install)\n  if (typeof dataLayerName === \"string\" && dataLayerName.trim()) return dataLayerName.trim();\n\n  // Optional global hint (script-tag usage if desired)\n  const hinted = safeString(windowRef?.d8aDataLayerName);\n  if (hinted.trim()) return hinted.trim();\n\n  // Script src query param `?l=...`\n  const fromScript = detectFromCurrentScript(windowRef?.document, \"l\");\n  if (fromScript.trim()) return fromScript.trim();\n\n  // Default to avoid collisions with GTM/gtag which commonly use `dataLayer`.\n  return \"d8aLayer\";\n}\n\nexport function resolveGlobalName({\n  windowRef,\n  globalName,\n}: {\n  windowRef?: import(\"../types.ts\").WindowLike;\n  globalName?: unknown;\n}) {\n  // Explicit override (ESM usage or programmatic install)\n  if (typeof globalName === \"string\" && globalName.trim()) return globalName.trim();\n\n  // Optional global hint (script-tag usage if desired)\n  const hinted = safeString(windowRef?.d8aGlobalName);\n  if (hinted.trim()) return hinted.trim();\n\n  // Script src query param `?g=...`\n  const fromScript = detectFromCurrentScript(windowRef?.document, \"g\");\n  if (fromScript.trim()) return fromScript.trim();\n\n  return \"d8a\";\n}\n\nexport function resolveGtagDataLayerName({\n  windowRef,\n  gtagDataLayerName,\n}: {\n  windowRef?: import(\"../types.ts\").WindowLike;\n  gtagDataLayerName?: unknown;\n}) {\n  // Explicit override (ESM usage or programmatic install)\n  if (typeof gtagDataLayerName === \"string\" && gtagDataLayerName.trim())\n    return gtagDataLayerName.trim();\n\n  // Optional global hint (script-tag usage if desired)\n  const hinted = safeString(windowRef?.d8aGtagDataLayerName);\n  if (hinted.trim()) return hinted.trim();\n\n  // Script src query param `?gl=...` (consent queue name)\n  const fromScript = detectFromCurrentScript(windowRef?.document, \"gl\");\n  if (fromScript.trim()) return fromScript.trim();\n\n  // Default gtag/GTM queue name.\n  return \"dataLayer\";\n}\n", "/**\n * Mirrors Consent Mode commands pushed into `window.dataLayer` (via `gtag(...)`)\n * into d8a runtime state.\n *\n * Requirement: prefer gtag consent state if available; fall back to d8a consent\n * otherwise.\n *\n * We intentionally only consume `consent` commands and leave all other gtag/GTM\n * plumbing alone.\n */\nimport { maybeEmitConsentUpdatePing } from \"./consent_update_ping.ts\";\nimport { isRecord } from \"../utils/is_record.ts\";\nimport type { ConsentState, RuntimeState, WindowLike } from \"../types.ts\";\nimport { ensureArraySlot, getWindowSlot, setWindowSlot } from \"../utils/window_slots.ts\";\n\nconst HUBS_KEY = \"__d8aConsentBridgeHubs\";\n\ntype DataLayerLike = Array<unknown> & {\n  push: (...args: unknown[]) => number;\n  __d8aConsentBridgePatched?: boolean;\n};\n\ntype DataLayerHub = {\n  subscribers: Set<(args: unknown[]) => void>;\n  originalPush: ((...args: unknown[]) => number) | null;\n  patched: boolean;\n  dataLayerName: string;\n};\n\ntype HubsMap = Record<string, DataLayerHub>;\n\ntype ConsentAction = \"default\" | \"update\";\ntype GtagConsentCommand = [\"consent\", ConsentAction, ConsentState];\n\nfunction isHubsMap(v: unknown): v is HubsMap {\n  // This slot is owned by this module, so the same `isRecord()` check we used before\n  // is sufficient for our type purposes (behavior-preserving).\n  return isRecord(v);\n}\n\nfunction getHub(w: WindowLike, dataLayerName: unknown) {\n  if (!w) return null;\n  const dl = String(dataLayerName || \"dataLayer\");\n  const existingHubs = getWindowSlot<unknown>(w, HUBS_KEY);\n  const hubs: HubsMap = isHubsMap(existingHubs) ? existingHubs : {};\n  if (!existingHubs || existingHubs !== hubs) setWindowSlot(w, HUBS_KEY, hubs);\n\n  const existing = hubs[dl];\n  if (existing && typeof existing === \"object\") return existing;\n\n  const hub: DataLayerHub = {\n    subscribers: new Set<(args: unknown[]) => void>(),\n    originalPush: null,\n    patched: false,\n    dataLayerName: dl,\n  };\n  hubs[dl] = hub;\n  return hub;\n}\n\nexport function createGtagConsentBridge({\n  windowRef,\n  getState,\n  dataLayerName = \"dataLayer\",\n}: {\n  windowRef?: WindowLike;\n  getState: () => RuntimeState;\n  dataLayerName?: string;\n}) {\n  if (!windowRef) throw new Error(\"createGtagConsentBridge: windowRef is required\");\n  const w = windowRef;\n  if (!w) throw new Error(\"createGtagConsentBridge: windowRef is required\");\n  if (typeof getState !== \"function\")\n    throw new Error(\"createGtagConsentBridge: getState is required\");\n\n  let started = false;\n  let unsubscribe: null | (() => void) = null;\n\n  function normalizeDataLayerItem(item: unknown) {\n    // gtag snippet pushes `arguments` (array-like), but sometimes arrays are used.\n    const maybeArrayLikeLength = isRecord(item) ? item.length : null;\n    if (item && typeof maybeArrayLikeLength === \"number\" && typeof item !== \"string\") {\n      try {\n        return Array.from(item as ArrayLike<unknown>);\n      } catch {\n        return null;\n      }\n    }\n    if (Array.isArray(item)) return item;\n    return null;\n  }\n\n  function applyConsentPatch({ action, patch }: { action: string; patch: ConsentState }) {\n    const state = getState();\n    if (!state) return;\n\n    if (action === \"default\") {\n      state.consentDefaultGtag = { ...(state.consentDefaultGtag || {}), ...(patch || {}) };\n    } else if (action === \"update\") {\n      state.consentUpdateGtag = { ...(state.consentUpdateGtag || {}), ...(patch || {}) };\n    } else {\n      return;\n    }\n    state.consentGtag = { ...(state.consentDefaultGtag || {}), ...(state.consentUpdateGtag || {}) };\n    maybeEmitConsentUpdatePing(getState);\n  }\n\n  function parseConsentCommand(args: unknown[]): GtagConsentCommand | null {\n    const [cmd, a, b] = args;\n    if (cmd !== \"consent\") return null;\n    const action = String(a || \"\");\n    if (action !== \"default\" && action !== \"update\") return null;\n    if (!isRecord(b)) return null;\n    return [\"consent\", action, b];\n  }\n\n  function handleArgs(args: unknown[]) {\n    const c = parseConsentCommand(args);\n    if (!c) return;\n    const [, action, patch] = c;\n    applyConsentPatch({ action, patch });\n  }\n\n  function drainExisting() {\n    const dl = dataLayerName;\n    const dlArr = getWindowSlot<unknown>(w, dl);\n    if (!Array.isArray(dlArr)) return;\n    for (const item of dlArr) {\n      const args = normalizeDataLayerItem(item);\n      if (!args) continue;\n      handleArgs(args);\n    }\n  }\n\n  function patchPush() {\n    const dl = dataLayerName;\n    const dlArr = ensureArraySlot<unknown>(w, dl) as DataLayerLike;\n\n    const hub = getHub(w, dl);\n    if (!hub) return;\n\n    // Avoid double-patching (hub fan-outs to all subscribers).\n    if (hub.patched) return;\n\n    hub.originalPush = dlArr.push.bind(dlArr);\n    dlArr.push = function patchedPush(...forwarded: unknown[]) {\n      const item = forwarded[0];\n      const args = normalizeDataLayerItem(item);\n      if (args) {\n        for (const sub of hub.subscribers) {\n          try {\n            sub(args);\n          } catch {\n            // ignore subscriber errors\n          }\n        }\n      }\n      return (hub.originalPush as (...args: unknown[]) => number)(...forwarded);\n    };\n    hub.patched = true;\n    dlArr.__d8aConsentBridgePatched = true;\n  }\n\n  function start() {\n    if (started) return;\n    started = true;\n\n    const hub = getHub(w, dataLayerName);\n    if (!hub) return;\n    hub.subscribers.add(handleArgs);\n    unsubscribe = () => {\n      hub.subscribers.delete(handleArgs);\n    };\n\n    drainExisting();\n    patchPush();\n  }\n\n  return {\n    start,\n    stop: () => {\n      if (!started) return;\n      const dl = dataLayerName;\n      const hub = getHub(w, dl);\n      if (!hub) return;\n      if (typeof unsubscribe === \"function\") unsubscribe();\n      unsubscribe = null;\n\n      const dlArrMaybe = getWindowSlot<unknown>(w, dl);\n      if (hub.subscribers.size === 0 && hub.originalPush && Array.isArray(dlArrMaybe)) {\n        const dlArr = dlArrMaybe as DataLayerLike;\n        dlArr.push = hub.originalPush;\n        hub.originalPush = null;\n        hub.patched = false;\n        try {\n          delete dlArr.__d8aConsentBridgePatched;\n          const maybeHubs = getWindowSlot<unknown>(w, HUBS_KEY);\n          const hubs = isRecord(maybeHubs) ? (maybeHubs as HubsMap) : null;\n          if (hubs) {\n            delete hubs[dl];\n            if (Object.keys(hubs).length === 0) setWindowSlot(w, HUBS_KEY, undefined);\n          }\n        } catch {\n          // ignore\n        }\n      }\n      started = false;\n    },\n  };\n}\n", "import { getPropertyConfig, getPropertyIds, getSetParams } from \"./config_resolver.ts\";\nimport type { RuntimeState, WindowLike } from \"../types.ts\";\nimport { isRecord } from \"../utils/is_record.ts\";\n\nfunction parseList(v: unknown, fallback: string[] = []) {\n  if (Array.isArray(v)) return v.map((x) => String(x).trim()).filter(Boolean);\n  if (typeof v === \"string\") {\n    return v\n      .split(\",\")\n      .map((s) => s.trim())\n      .filter(Boolean);\n  }\n  return fallback;\n}\n\nfunction safeUrl(href: unknown, baseHref: unknown) {\n  try {\n    return new URL(String(href || \"\"), baseHref ? String(baseHref) : undefined);\n  } catch {\n    return null;\n  }\n}\n\ntype NodeLike = Record<string, unknown> & { parentNode?: unknown; tagName?: unknown };\ntype ElementLike = NodeLike & { getAttribute?: (name: string) => unknown };\n\nfunction closestAnchor(node: unknown) {\n  let n = node;\n  for (let i = 0; i < 100 && n; i += 1) {\n    const nn = isRecord(n) ? (n as NodeLike) : null;\n    const tag = String(nn?.tagName || \"\").toLowerCase();\n    if (tag === \"a\" || tag === \"area\") return n;\n    n = (nn?.parentNode as unknown) || null;\n  }\n  return null;\n}\n\nfunction getAttr(el: unknown, name: string) {\n  if (!el) return null;\n  const ee = isRecord(el) ? (el as ElementLike) : null;\n  try {\n    if (typeof ee?.getAttribute === \"function\") {\n      const attr = ee.getAttribute(name);\n      if (attr != null) return attr;\n    }\n  } catch {\n    // ignore\n  }\n  const v = ee ? ee[name] : null;\n  return v != null ? String(v) : null;\n}\n\nfunction isHttpUrl(u: unknown) {\n  const p = String((u as { protocol?: unknown } | null)?.protocol || \"\").toLowerCase();\n  return p === \"http:\" || p === \"https:\";\n}\n\nfunction hostnameMatches(host: unknown, domain: unknown) {\n  const h = String(host || \"\").toLowerCase();\n  const d = String(domain || \"\")\n    .toLowerCase()\n    .replace(/^\\./, \"\");\n  if (!h || !d) return false;\n  return h === d || h.endsWith(`.${d}`);\n}\n\nfunction fileNameFromUrl(u: unknown) {\n  const p = String((u as { pathname?: unknown } | null)?.pathname || \"\");\n  const seg = p.split(\"/\").filter(Boolean).slice(-1)[0] || \"\";\n  return seg;\n}\n\nfunction fileExtension(name: unknown) {\n  const n = String(name || \"\");\n  const idx = n.lastIndexOf(\".\");\n  if (idx < 0) return \"\";\n  return n.slice(idx + 1).toLowerCase();\n}\n\nfunction normalizeWhitespace(s: unknown) {\n  return String(s || \"\")\n    .replace(/\\s+/g, \" \")\n    .trim();\n}\n\nfunction getLinkId(a: unknown) {\n  const v = getAttr(a, \"id\");\n  const out = normalizeWhitespace(v);\n  return out || null;\n}\n\nfunction getLinkClasses(a: unknown) {\n  // Most reliable is className; fall back to attribute.\n  const v = getAttr(a, \"className\") || getAttr(a, \"class\");\n  const out = normalizeWhitespace(v);\n  return out || null;\n}\n\nfunction getLinkText(a: unknown) {\n  const v = getAttr(a, \"textContent\") || getAttr(a, \"innerText\");\n  const out = normalizeWhitespace(v);\n  return out || null;\n}\n\nexport function createEnhancedMeasurement({\n  windowRef,\n  getState,\n  dispatcher,\n}: {\n  windowRef: WindowLike;\n  getState: () => RuntimeState;\n  dispatcher: {\n    enqueueEvent: (name: string, params: Record<string, unknown>) => void;\n    flushNow?: (opts?: { useBeacon?: boolean }) => unknown;\n  };\n}) {\n  const w = windowRef;\n  if (!w) throw new Error(\"createEnhancedMeasurement: windowRef is required\");\n  if (typeof getState !== \"function\")\n    throw new Error(\"createEnhancedMeasurement: getState is required\");\n  if (!dispatcher) throw new Error(\"createEnhancedMeasurement: dispatcher is required\");\n\n  type BoolKey = \"site_search_enabled\" | \"outbound_clicks_enabled\" | \"file_downloads_enabled\";\n  type ListKey =\n    | \"site_search_query_params\"\n    | \"outbound_exclude_domains\"\n    | \"file_download_extensions\";\n\n  function readBoolKey(source: Record<string, unknown>, key: BoolKey): boolean | undefined {\n    const v = source[key];\n    return typeof v === \"boolean\" ? v : undefined;\n  }\n\n  function readListKey(source: Record<string, unknown>, key: ListKey): unknown {\n    return source[key];\n  }\n\n  function isEnabledForProperty({\n    propertyId,\n    key,\n    defaultValue,\n  }: {\n    propertyId: string;\n    key: BoolKey;\n    defaultValue: boolean;\n  }) {\n    const setParams = getSetParams(getState);\n    const cfg = getPropertyConfig(getState, propertyId);\n    const c = readBoolKey(cfg, key);\n    if (c != null) return c;\n    const s = readBoolKey(setParams, key);\n    if (s != null) return s;\n    return defaultValue;\n  }\n\n  function getListForProperty({\n    propertyId,\n    key,\n    defaultList,\n  }: {\n    propertyId: string;\n    key: ListKey;\n    defaultList: string[];\n  }) {\n    const setParams = getSetParams(getState);\n    const cfg = getPropertyConfig(getState, propertyId);\n    const cfgV = readListKey(cfg, key);\n    const setV = readListKey(setParams, key);\n    if (cfgV != null) return parseList(cfgV, defaultList);\n    if (setV != null) return parseList(setV, defaultList);\n    return defaultList;\n  }\n\n  function markInstalledOnce() {\n    const s = getState();\n    if (!s) return false;\n    if (s.emInstalled) return false;\n    s.emInstalled = true;\n    return true;\n  }\n\n  function markSiteSearchOnce() {\n    const s = getState();\n    if (!s) return false;\n    if (s.emSiteSearchFired) return false;\n    s.emSiteSearchFired = true;\n    return true;\n  }\n\n  function maybeFireSiteSearch() {\n    const propertyIds = getPropertyIds(getState);\n    // If no properties are configured yet, do nothing (and don't mark fired).\n    if (propertyIds.length === 0) return;\n\n    // Only run once per page load per instance (user request: no SPA tracking).\n    if (!markSiteSearchOnce()) return;\n\n    const search = String(w?.location?.search || \"\");\n    if (!search || search === \"?\") return;\n    const sp = new URLSearchParams(search.startsWith(\"?\") ? search.slice(1) : search);\n\n    const defaultKeys = [\"q\", \"s\", \"search\", \"query\", \"keyword\"];\n\n    // Determine which properties have a search term, and group by term value.\n    const termToProps = new Map<string, string[]>();\n    for (const pid of propertyIds) {\n      const enabled = isEnabledForProperty({\n        propertyId: pid,\n        key: \"site_search_enabled\",\n        defaultValue: true,\n      });\n      if (!enabled) continue;\n      const keys = getListForProperty({\n        propertyId: pid,\n        key: \"site_search_query_params\",\n        defaultList: defaultKeys,\n      });\n      let found = \"\";\n      for (const k of keys) {\n        const v = sp.get(k);\n        if (v && String(v).trim()) {\n          found = String(v).trim();\n          break;\n        }\n      }\n      if (!found) continue;\n      const list = termToProps.get(found) || [];\n      list.push(pid);\n      termToProps.set(found, list);\n    }\n\n    for (const [term, pids] of termToProps.entries()) {\n      dispatcher.enqueueEvent(\"view_search_results\", {\n        search_term: term,\n        send_to: pids,\n      });\n    }\n  }\n\n  function shouldTrackOutbound({\n    propertyId,\n    linkHostname,\n  }: {\n    propertyId: string;\n    linkHostname: string;\n  }) {\n    const enabled = isEnabledForProperty({\n      propertyId,\n      key: \"outbound_clicks_enabled\",\n      defaultValue: true,\n    });\n    if (!enabled) return false;\n\n    const excludes = getListForProperty({\n      propertyId,\n      key: \"outbound_exclude_domains\",\n      defaultList: [String(w?.location?.hostname || \"\")],\n    });\n    for (const d of excludes) {\n      if (hostnameMatches(linkHostname, d)) return false;\n    }\n    return true;\n  }\n\n  function shouldTrackDownload({ propertyId, ext }: { propertyId: string; ext: string }) {\n    const enabled = isEnabledForProperty({\n      propertyId,\n      key: \"file_downloads_enabled\",\n      defaultValue: true,\n    });\n    if (!enabled) return false;\n    const list = getListForProperty({\n      propertyId,\n      key: \"file_download_extensions\",\n      defaultList: [\n        \"pdf\",\n        \"doc\",\n        \"docx\",\n        \"xls\",\n        \"xlsx\",\n        \"ppt\",\n        \"pptx\",\n        \"csv\",\n        \"txt\",\n        \"rtf\",\n        \"zip\",\n        \"rar\",\n        \"7z\",\n        \"dmg\",\n        \"exe\",\n        \"apk\",\n      ],\n    });\n    const set = new Set(list.map((x) => String(x).toLowerCase().replace(/^\\./, \"\")));\n    return !!ext && set.has(String(ext).toLowerCase().replace(/^\\./, \"\"));\n  }\n\n  function onClick(evt: unknown) {\n    const propertyIds = getPropertyIds(getState);\n    if (propertyIds.length === 0) return;\n\n    const target = isRecord(evt) ? evt.target : null;\n    const a = closestAnchor(target);\n    if (!a) return;\n\n    const href = getAttr(a, \"href\");\n    if (!href) return;\n    const u = safeUrl(href, String(w?.location?.href || \"\"));\n    if (!u || !isHttpUrl(u)) return;\n\n    const linkUrl = String(u.href || \"\");\n    const linkHostname = String(u.hostname || \"\");\n\n    const linkId = getLinkId(a);\n    const linkClasses = getLinkClasses(a);\n    const linkText = getLinkText(a);\n\n    const fileName = fileNameFromUrl(u) || getAttr(a, \"download\") || \"\";\n    const ext = fileExtension(fileName);\n\n    // Determine destinations per-event (per-property config).\n    const downloadDestinations: string[] = [];\n    const outboundDestinations: string[] = [];\n    for (const pid of propertyIds) {\n      if (shouldTrackDownload({ propertyId: pid, ext })) downloadDestinations.push(pid);\n      if (shouldTrackOutbound({ propertyId: pid, linkHostname })) outboundDestinations.push(pid);\n    }\n\n    // Prefer file_download over outbound click if both apply.\n    if (downloadDestinations.length > 0) {\n      dispatcher.enqueueEvent(\"file_download\", {\n        link_url: linkUrl,\n        ...(linkId ? { link_id: linkId } : {}),\n        ...(linkClasses ? { link_classes: linkClasses } : {}),\n        ...(linkText ? { link_text: linkText } : {}),\n        file_name: fileName,\n        file_extension: ext,\n        send_to: downloadDestinations,\n      });\n      // For click-driven events prefer fetch(keepalive) instead of sendBeacon,\n      // since some browsers/extensions block beacons/pings by default.\n      dispatcher.flushNow?.({ useBeacon: false });\n      return;\n    }\n\n    if (outboundDestinations.length > 0) {\n      dispatcher.enqueueEvent(\"click\", {\n        link_url: linkUrl,\n        ...(linkId ? { link_id: linkId } : {}),\n        ...(linkClasses ? { link_classes: linkClasses } : {}),\n        link_domain: linkHostname,\n        outbound: \"1\",\n        send_to: outboundDestinations,\n      });\n      // For click-driven events prefer fetch(keepalive) instead of sendBeacon,\n      // since some browsers/extensions block beacons/pings by default.\n      dispatcher.flushNow?.({ useBeacon: false });\n    }\n  }\n\n  function start() {\n    // Attach listeners only once per instance.\n    if (!markInstalledOnce()) return;\n\n    // Site search: check once on page load (after config is available). If config\n    // isn't available yet (programmatic installs), retry once asynchronously.\n    try {\n      maybeFireSiteSearch();\n      if (!getState()?.emSiteSearchFired && typeof w?.setTimeout === \"function\") {\n        w.setTimeout(() => {\n          try {\n            maybeFireSiteSearch();\n          } catch {\n            // ignore\n          }\n        }, 0);\n      }\n    } catch {\n      // ignore\n    }\n\n    // Outbound/download: click listeners.\n    const doc = w?.document;\n    if (doc && typeof doc.addEventListener === \"function\") {\n      doc.addEventListener(\"click\", onClick, true);\n      doc.addEventListener(\"auxclick\", onClick, true);\n    }\n  }\n\n  function onConfig() {\n    try {\n      maybeFireSiteSearch();\n    } catch {\n      // ignore\n    }\n  }\n\n  return { start, onConfig };\n}\n", "import { parseCookieHeader, createCookieJar } from \"../cookies/cookie_jar.ts\";\nimport {\n  buildD8aClientCookieName,\n  buildD8aCookieName,\n  parseD8aClientCookie,\n  parseD8aSessionCookie,\n} from \"../cookies/d8a_cookies.ts\";\nimport { applyClientIdCookie, applySessionCookie } from \"../cookies/identity.ts\";\nimport { resolveCookieSettings, type CookieSettings } from \"../cookies/cookie_settings.ts\";\nimport { getEffectiveConsent } from \"./consent_resolver.ts\";\nimport { getPropertyConfig, getPropertyIds, getSetParams } from \"./config_resolver.ts\";\nimport { isRecord } from \"../utils/is_record.ts\";\nimport { getWindowSlot, setWindowSlot } from \"../utils/window_slots.ts\";\nimport type {\n  IncomingDlPayload,\n  LinkerConfig,\n  LinkerUrlPosition,\n  RuntimeState,\n  WindowLike,\n} from \"../types.ts\";\n\nconst DL_PARAM = \"_dl\";\nconst DL_VERSION = \"1\";\n\n// Web-safe base64 (Base64URL alphabet, RFC 4648 \u00A75)\nconst B64_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nconst B64_PAD = \"=\";\nlet B64_REV: Record<string, number> | null = null;\nfunction b64Rev() {\n  if (B64_REV) return B64_REV;\n  const rev: Record<string, number> = {};\n  for (let i = 0; i < B64_ALPHABET.length; i += 1) rev[B64_ALPHABET[i]!] = i;\n  // Accept both padded and unpadded inputs, and tolerate '.' as padding for backward compatibility.\n  rev[B64_PAD] = 64;\n  rev[\".\"] = 64;\n  B64_REV = rev;\n  return rev;\n}\n\nfunction utf8Encode(s: string): Uint8Array {\n  try {\n    if (typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(s);\n  } catch {\n    // ignore\n  }\n  // ASCII-safe fallback (cookie values should be ASCII)\n  const out = new Uint8Array(s.length);\n  for (let i = 0; i < s.length; i += 1) out[i] = s.charCodeAt(i) & 0xff;\n  return out;\n}\n\nfunction utf8Decode(bytes: Uint8Array): string {\n  try {\n    if (typeof TextDecoder !== \"undefined\") return new TextDecoder().decode(bytes);\n  } catch {\n    // ignore\n  }\n  let s = \"\";\n  for (let i = 0; i < bytes.length; i += 1) s += String.fromCharCode(bytes[i]!);\n  return s;\n}\n\nfunction webSafeBase64Encode(raw: string): string {\n  const bytes = utf8Encode(raw);\n  const out: string[] = [];\n  for (let i = 0; i < bytes.length; i += 3) {\n    const has2 = i + 1 < bytes.length;\n    const has3 = i + 2 < bytes.length;\n    const b1 = bytes[i]!;\n    const b2 = has2 ? bytes[i + 1]! : 0;\n    const b3 = has3 ? bytes[i + 2]! : 0;\n\n    const c1 = b1 >> 2;\n    const c2 = ((b1 & 0x03) << 4) | (b2 >> 4);\n    let c3 = ((b2 & 0x0f) << 2) | (b3 >> 6);\n    let c4 = b3 & 0x3f;\n    if (!has3) {\n      c4 = 64; // '.'\n      if (!has2) c3 = 64; // '.'\n    }\n    out.push(\n      B64_ALPHABET[c1]!,\n      B64_ALPHABET[c2]!,\n      c3 === 64 ? B64_PAD : B64_ALPHABET[c3]!,\n      c4 === 64 ? B64_PAD : B64_ALPHABET[c4]!,\n    );\n  }\n  // Strip padding to keep URLs short (decoder tolerates missing padding).\n  return out.join(\"\").replace(/=+$/, \"\");\n}\n\nfunction webSafeBase64Decode(enc: string): string {\n  const s = String(enc || \"\");\n  const rev = b64Rev();\n  const bytes: number[] = [];\n  let i = 0;\n\n  function next(defaultValue: number): number {\n    for (; i < s.length; ) {\n      const ch = s.charAt(i++);\n      const v = rev[ch];\n      if (v != null) return v;\n      if (!/^[\\s\\xa0]*$/.test(ch)) throw new Error(`Invalid base64 char: ${ch}`);\n    }\n    return defaultValue;\n  }\n\n  for (;;) {\n    const e = next(-1);\n    const f = next(0);\n    const g = next(64);\n    const h = next(64);\n\n    // End of input\n    if (h === 64 && e === -1) break;\n\n    bytes.push(((e << 2) | (f >> 4)) & 0xff);\n    if (g !== 64) {\n      bytes.push((((f << 4) & 0xf0) | (g >> 2)) & 0xff);\n      if (h !== 64) bytes.push((((g << 6) & 0xc0) | h) & 0xff);\n    }\n  }\n\n  return utf8Decode(new Uint8Array(bytes));\n}\n\nfunction isHttps(w: WindowLike) {\n  try {\n    return String(w?.location?.protocol || \"\").toLowerCase() === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction resolveLinkerConfig(cfg: LinkerConfig): Required<LinkerConfig> {\n  const domains = Array.isArray(cfg?.domains)\n    ? cfg.domains.filter((x) => typeof x === \"string\")\n    : [];\n  const hasDomains = domains.length > 0;\n  return {\n    domains,\n    accept_incoming: typeof cfg?.accept_incoming === \"boolean\" ? cfg.accept_incoming : hasDomains,\n    decorate_forms: typeof cfg?.decorate_forms === \"boolean\" ? cfg.decorate_forms : false,\n    url_position: cfg?.url_position === \"fragment\" ? \"fragment\" : \"query\",\n  };\n}\n\nfunction splitUrl(u: string) {\n  // Split into base/query/fragment.\n  const m = String(u || \"\").match(/([^?#]+)(\\?[^#]*)?(#.*)?/);\n  if (!m) return { base: String(u || \"\"), query: \"\", fragment: \"\" };\n  return { base: m[1] || \"\", query: m[2] || \"\", fragment: m[3] || \"\" };\n}\n\nfunction parseParams(part: string, lead: \"?\" | \"#\") {\n  const raw = String(part || \"\");\n  const s = raw.startsWith(lead) ? raw.slice(1) : raw;\n  const out: Array<[string, string]> = [];\n  if (!s) return out;\n  for (const kv of s.split(\"&\")) {\n    const item = kv.trim();\n    if (!item) continue;\n    const idx = item.indexOf(\"=\");\n    if (idx < 0) {\n      out.push([decodeURIComponent(item), \"\"]);\n      continue;\n    }\n    const k = decodeURIComponent(item.slice(0, idx));\n    const v = decodeURIComponent(item.slice(idx + 1));\n    out.push([k, v]);\n  }\n  return out;\n}\n\nfunction buildParams(pairs: Array<[string, string]>, lead: \"?\" | \"#\") {\n  if (!pairs || pairs.length === 0) return \"\";\n  const encoded = pairs\n    .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n    .join(\"&\");\n  return lead + encoded;\n}\n\nfunction getParamFromUrl(\n  url: string,\n  name: string,\n): { value: string | null; where: \"query\" | \"fragment\" | null } {\n  const { query, fragment } = splitUrl(url);\n  for (const [k, v] of parseParams(query, \"?\")) {\n    if (k === name) return { value: v, where: \"query\" };\n  }\n  for (const [k, v] of parseParams(fragment, \"#\")) {\n    if (k === name) return { value: v, where: \"fragment\" };\n  }\n  return { value: null, where: null };\n}\n\nfunction stripParamFromUrl(url: string, name: string) {\n  const { base, query, fragment } = splitUrl(url);\n  const q = parseParams(query, \"?\").filter(([k]) => k !== name);\n  const f = parseParams(fragment, \"#\").filter(([k]) => k !== name);\n  return `${base}${buildParams(q, \"?\")}${buildParams(f, \"#\")}`;\n}\n\nfunction setParamInUrl(url: string, name: string, value: string, pos: LinkerUrlPosition) {\n  const { base, query, fragment } = splitUrl(url);\n  if (pos === \"fragment\") {\n    const f = parseParams(fragment, \"#\").filter(([k]) => k !== name);\n    f.push([name, value]);\n    return `${base}${query}${buildParams(f, \"#\")}`;\n  }\n  const q = parseParams(query, \"?\").filter(([k]) => k !== name);\n  q.push([name, value]);\n  return `${base}${buildParams(q, \"?\")}${fragment}`;\n}\n\nfunction getHostnameFromUrl(url: string, baseHref: string | undefined) {\n  try {\n    // Prefer URL for correctness (handles relative urls)\n    const u = new URL(url, baseHref || \"https://example.invalid/\");\n    return String(u.hostname || \"\");\n  } catch {\n    // Very small fallback: try to parse `//host/` form.\n    const m = String(url || \"\").match(/^https?:\\/\\/([^/]+)/i);\n    return m ? String(m[1] || \"\") : \"\";\n  }\n}\n\nfunction shouldDecorateHost(hostname: string, domains: string[]) {\n  const host = String(hostname || \"\");\n  if (!host) return false;\n  for (const d of domains) {\n    const dom = String(d || \"\").trim();\n    if (!dom) continue;\n    if (host.indexOf(dom) >= 0) return true;\n  }\n  return false;\n}\n\n// CRC32 (base36) fingerprint hash\nlet CRC_TABLE: number[] | null = null;\nfunction crcTable() {\n  if (CRC_TABLE) return CRC_TABLE;\n  const t: number[] = new Array(256);\n  for (let i = 0; i < 256; i += 1) {\n    let c = i;\n    for (let j = 0; j < 8; j += 1) {\n      c = c & 1 ? (c >>> 1) ^ 0xedb88320 : c >>> 1;\n    }\n    t[i] = c >>> 0;\n  }\n  CRC_TABLE = t;\n  return t;\n}\n\nfunction crc32Base36(s: string) {\n  const tbl = crcTable();\n  let crc = 0xffffffff;\n  for (let i = 0; i < s.length; i += 1) {\n    const code = s.charCodeAt(i);\n    crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xff];\n  }\n  const out = (crc ^ 0xffffffff) >>> 0;\n  return out.toString(36);\n}\n\nfunction fingerprintHash({\n  payload,\n  offset,\n  windowRef,\n}: {\n  payload: string;\n  offset: number;\n  windowRef: WindowLike;\n}) {\n  const ua =\n    String((windowRef.navigator as any)?.userAgent || \"\") ||\n    String((windowRef as any)?.navigator?.userAgent || \"\");\n  const tz = new Date().getTimezoneOffset();\n  const lang =\n    String(windowRef.navigator?.language || \"\") ||\n    String((windowRef.navigator as any)?.userLanguage || \"\");\n  const minuteIndex = Math.floor(Date.now() / 60_000) - (Number(offset) || 0);\n  return crc32Base36([ua, tz, lang, minuteIndex, payload].join(\"*\"));\n}\n\nfunction encodeDl({\n  cookies,\n  ts,\n  windowRef,\n}: {\n  cookies: Record<string, string>;\n  ts: number;\n  windowRef: WindowLike;\n}) {\n  const pairs: Array<[string, string]> = [];\n  pairs.push([\"ts\", String(ts)]);\n  for (const [k, v] of Object.entries(cookies || {})) {\n    if (!k) continue;\n    if (v == null) continue;\n    pairs.push([k, String(v)]);\n  }\n  // Deterministic ordering (helps hashing + tests)\n  const stable = pairs.slice(1).sort((a, b) => a[0].localeCompare(b[0]));\n  const kv = [pairs[0], ...stable];\n  // Encode values in web-safe base64 to avoid plaintext + reduce URL length vs percent-encoding.\n  const payload = kv.map(([k, v]) => `${k}*${webSafeBase64Encode(v)}`).join(\"*\");\n  const hash = fingerprintHash({ payload, offset: 0, windowRef });\n  return `${DL_VERSION}*${hash}*${payload}`;\n}\n\nfunction decodeDl({\n  value,\n  windowRef,\n  ttlMs = 2 * 60 * 1000,\n}: {\n  value: string;\n  windowRef: WindowLike;\n  ttlMs?: number;\n}): IncomingDlPayload | null {\n  const raw = String(value || \"\");\n  if (!raw) return null;\n  const parts = raw.split(\"*\").filter((x) => x !== \"\");\n  if (parts.length < 5) return null;\n  const version = parts[0];\n  const hash = parts[1];\n  if (version !== DL_VERSION) return null;\n\n  // Reconstruct payload string as `<k>*<encodedV>*<k>*<encodedV>...`\n  const payloadParts = parts.slice(2);\n  const payload = payloadParts.join(\"*\");\n  let hashOk = false;\n  for (let off = 0; off < 3; off += 1) {\n    if (fingerprintHash({ payload, offset: off, windowRef }) === hash) {\n      hashOk = true;\n      break;\n    }\n  }\n  if (!hashOk) return null;\n\n  // Parse key/value pairs out of the payload.\n  const kvRaw = payloadParts;\n  const kv: Record<string, string> = {};\n  for (let i = 0; i + 1 < kvRaw.length; i += 2) {\n    const k = kvRaw[i];\n    const encV = kvRaw[i + 1];\n    if (!k) continue;\n    // New format: web-safe base64, but accept legacy encodeURIComponent values for compatibility.\n    try {\n      kv[k] = webSafeBase64Decode(encV || \"\");\n    } catch {\n      kv[k] = decodeURIComponent(encV || \"\");\n    }\n  }\n  const ts = Number(kv.ts);\n  if (!Number.isFinite(ts)) return null;\n  const age = Date.now() - ts;\n  if (!(age >= 0 && age <= ttlMs)) return null;\n\n  const cookies: Record<string, string> = {};\n  for (const [k, v] of Object.entries(kv)) {\n    if (k === \"ts\") continue;\n    if (!k) continue;\n    if (v == null) continue;\n    cookies[k] = String(v);\n  }\n  return { ts, cookies };\n}\n\ntype CookieSpec =\n  | { kind: \"client\"; name: string; settings: CookieSettings; getState: () => RuntimeState }\n  | {\n      kind: \"session\";\n      name: string;\n      propertyId: string;\n      settings: CookieSettings;\n      getState: () => RuntimeState;\n    };\n\nconst LINKER_COORDINATOR_SLOT = \"__d8a_linker_coordinator\";\n\ntype SharedLinkerCoordinator = ReturnType<typeof createSharedLinkerCoordinator>;\n\nfunction buildCookieSpecsUnion({\n  getStates,\n  windowRef,\n}: {\n  getStates: Array<() => RuntimeState>;\n  windowRef: WindowLike;\n}): Record<string, CookieSpec> {\n  const https = isHttps(windowRef);\n  const specs: Record<string, CookieSpec> = {};\n\n  const prefixes = new Map<string, { settings: CookieSettings; getState: () => RuntimeState }>();\n\n  for (const getState of getStates) {\n    const s = getState();\n    const sp = getSetParams(getState);\n    const pids = getPropertyIds(getState);\n    if (pids && pids.length > 0) {\n      for (const pid of pids) {\n        const pcfg = getPropertyConfig(getState, pid);\n        const cs = resolveCookieSettings({ propertyCfg: pcfg, setParams: sp, https, state: s });\n\n        const sessName = buildD8aCookieName(pid, cs.cookiePrefix);\n        if (!specs[sessName]) {\n          specs[sessName] = {\n            kind: \"session\",\n            name: sessName,\n            propertyId: pid,\n            settings: cs,\n            getState,\n          };\n        }\n\n        if (!prefixes.has(cs.cookiePrefix))\n          prefixes.set(cs.cookiePrefix, { settings: cs, getState });\n      }\n      continue;\n    }\n\n    // If no properties are configured yet, still include the client cookie for the current\n    // cookie namespace derived from global `set` params. This matches the previous behavior\n    // and allows decoration/acceptance early in the page lifecycle.\n    const cs = resolveCookieSettings({ propertyCfg: {}, setParams: sp, https, state: s });\n    if (!prefixes.has(cs.cookiePrefix)) prefixes.set(cs.cookiePrefix, { settings: cs, getState });\n  }\n\n  for (const [prefix, entry] of prefixes.entries()) {\n    const clientName = buildD8aClientCookieName(prefix);\n    if (!specs[clientName]) {\n      specs[clientName] = {\n        kind: \"client\",\n        name: clientName,\n        settings: entry.settings,\n        getState: entry.getState,\n      };\n    }\n  }\n\n  return specs;\n}\n\nfunction createSharedLinkerCoordinator({ windowRef }: { windowRef: WindowLike }) {\n  const w = windowRef;\n  if (!w) throw new Error(\"createSharedLinkerCoordinator: windowRef is required\");\n  const jar = createCookieJar({ windowRef: w });\n\n  const runtimes = new Set<() => RuntimeState>();\n\n  function isDebugEnabled(): boolean {\n    for (const gs of runtimes.values()) {\n      try {\n        const s = gs();\n        if ((s as any)?.set && (s as any).set.debug_mode === true) return true;\n        const cfgs = (s as any)?.propertyConfigs;\n        if (cfgs && typeof cfgs === \"object\") {\n          for (const v of Object.values(cfgs)) {\n            if (isRecord(v) && v.debug_mode === true) return true;\n          }\n        }\n      } catch {\n        // ignore\n      }\n    }\n    return false;\n  }\n\n  function dbg(...args: unknown[]) {\n    if (!isDebugEnabled()) return;\n    try {\n      console.log(\"[d8a][linker]\", ...args);\n    } catch {\n      // ignore\n    }\n  }\n\n  // Global merged config:\n  // - domains: union\n  // - other fields: last-write-wins\n  let rev = 0;\n  const domains = new Set<string>();\n  let acceptIncoming: { value: boolean; rev: number } | null = null;\n  let decorateForms: { value: boolean; rev: number } | null = null;\n  let urlPosition: { value: LinkerUrlPosition; rev: number } | null = null;\n\n  // Pending incoming payload (parsed once, applied once).\n  let incomingDl: IncomingDlPayload | null = null;\n\n  let started = false;\n  let formSubmitPatched = false;\n  let originalFormSubmit: unknown = null;\n\n  function getStatesList() {\n    return Array.from(runtimes.values());\n  }\n\n  function currentConfig(): Required<LinkerConfig> {\n    const doms = Array.from(domains.values()).sort();\n    const hasDomains = doms.length > 0;\n    return {\n      domains: doms,\n      accept_incoming: acceptIncoming ? acceptIncoming.value : hasDomains,\n      decorate_forms: decorateForms ? decorateForms.value : false,\n      url_position: urlPosition ? urlPosition.value : \"query\",\n    };\n  }\n\n  function updateConfigPatch(patch: unknown) {\n    if (!isRecord(patch)) return;\n    rev += 1;\n\n    const domainsRaw = patch.domains;\n    if (Array.isArray(domainsRaw)) {\n      for (const x of domainsRaw) {\n        if (typeof x !== \"string\") continue;\n        const v = x.trim();\n        if (!v) continue;\n        domains.add(v);\n      }\n    }\n\n    const acceptIncomingRaw = patch.accept_incoming;\n    if (typeof acceptIncomingRaw === \"boolean\") acceptIncoming = { value: acceptIncomingRaw, rev };\n\n    const decorateFormsRaw = patch.decorate_forms;\n    if (typeof decorateFormsRaw === \"boolean\") decorateForms = { value: decorateFormsRaw, rev };\n\n    const urlPosRaw = patch.url_position;\n    const urlPos = typeof urlPosRaw === \"string\" ? urlPosRaw : \"\";\n    if (urlPos === \"query\" || urlPos === \"fragment\")\n      urlPosition = { value: urlPos as LinkerUrlPosition, rev };\n  }\n\n  function mergeConfigSnapshot(cfg: unknown) {\n    updateConfigPatch(cfg);\n  }\n\n  function registerRuntime(getState: () => RuntimeState) {\n    runtimes.add(getState);\n    // Best-effort: seed config from current state snapshot (helps tests and edge cases).\n    try {\n      mergeConfigSnapshot(getState().linker);\n    } catch {\n      // ignore\n    }\n    return () => {\n      runtimes.delete(getState);\n    };\n  }\n\n  function tryStripDlFromUrl(where: \"query\" | \"fragment\" | null) {\n    if (!where) return;\n    const href = String(w.location?.href || \"\");\n    if (!href) return;\n    const next = stripParamFromUrl(href, DL_PARAM);\n    if (next !== href && typeof w.history?.replaceState === \"function\") {\n      try {\n        w.history.replaceState({}, \"\", next);\n      } catch {\n        // ignore\n      }\n      if (w.location) w.location.href = next;\n    }\n  }\n\n  function parseIncomingFromLocation() {\n    const href = String(w.location?.href || \"\");\n    if (!href) return;\n    const { value, where } = getParamFromUrl(href, DL_PARAM);\n    if (!value) return;\n    const decoded = decodeDl({ value, windowRef: w });\n    if (decoded) {\n      incomingDl = decoded;\n      dbg(\"parsed incoming _dl\", {\n        cookieNames: Object.keys(decoded.cookies || {}),\n        ts: decoded.ts,\n        where,\n      });\n    }\n    // Strip regardless of decode success.\n    tryStripDlFromUrl(where);\n  }\n\n  function buildOutgoingCookies(): Record<string, string> {\n    const specs = buildCookieSpecsUnion({ getStates: getStatesList(), windowRef: w });\n    const header = String(w.document?.cookie || \"\");\n    const all = parseCookieHeader(header);\n    const out: Record<string, string> = {};\n    for (const spec of Object.values(specs)) {\n      const v = all.get(spec.name);\n      if (!v) continue;\n      if (spec.kind === \"client\" && !parseD8aClientCookie(v)?.cid) continue;\n      if (spec.kind === \"session\" && !parseD8aSessionCookie(v)?.tokens) continue;\n      out[spec.name] = v;\n    }\n    return out;\n  }\n\n  function buildDlValue(): string | null {\n    const cfg = currentConfig();\n    if (!cfg.domains || cfg.domains.length === 0) return null;\n    const cookies = buildOutgoingCookies();\n    if (!cookies || Object.keys(cookies).length === 0) return null;\n    const ts = Date.now();\n    return encodeDl({ cookies, ts, windowRef: w });\n  }\n\n  function decorateUrlIfNeeded(rawUrl: string): string {\n    const cfg = currentConfig();\n    if (!cfg.domains || cfg.domains.length === 0) return rawUrl;\n    const value = buildDlValue();\n    if (!value) return rawUrl;\n\n    const host = getHostnameFromUrl(rawUrl, String(w.location?.href || \"\"));\n    if (!shouldDecorateHost(host, cfg.domains)) return rawUrl;\n\n    return setParamInUrl(rawUrl, DL_PARAM, value, cfg.url_position);\n  }\n\n  function decorateAnchor(el: unknown) {\n    if (!isRecord(el)) return;\n    const href = typeof el.href === \"string\" ? el.href : null;\n    if (!href) return;\n    const next = decorateUrlIfNeeded(href);\n    if (next !== href) {\n      try {\n        (el as any).href = next;\n      } catch {\n        // ignore\n      }\n    }\n  }\n\n  function decorateForm(el: unknown) {\n    if (!isRecord(el)) return;\n    const cfg = currentConfig();\n    if (!cfg.decorate_forms) return;\n    const action = typeof el.action === \"string\" ? el.action : \"\";\n    if (!action) return;\n    const value = buildDlValue();\n    if (!value) return;\n\n    const host = getHostnameFromUrl(action, String(w.location?.href || \"\"));\n    if (!shouldDecorateHost(host, cfg.domains)) return;\n\n    const method = typeof el.method === \"string\" ? el.method.toLowerCase() : \"\";\n    if (cfg.url_position === \"query\" && method === \"get\") {\n      const children = Array.isArray((el as any).childNodes) ? (el as any).childNodes : [];\n      let found = false;\n      for (const c of children) {\n        if (!isRecord(c)) continue;\n        if (String((c as any).name || \"\") === DL_PARAM) {\n          try {\n            (c as any).value = value;\n          } catch {\n            // ignore\n          }\n          found = true;\n          break;\n        }\n      }\n      if (!found && typeof (w.document as any)?.createElement === \"function\") {\n        try {\n          const input = (w.document as any).createElement(\"input\");\n          input.setAttribute(\"type\", \"hidden\");\n          input.setAttribute(\"name\", DL_PARAM);\n          input.setAttribute(\"value\", value);\n          (el as any).appendChild?.(input);\n        } catch {\n          // ignore\n        }\n      }\n      return;\n    }\n\n    const nextAction = setParamInUrl(action, DL_PARAM, value, cfg.url_position);\n    if (nextAction !== action) {\n      try {\n        (el as any).action = nextAction;\n      } catch {\n        // ignore\n      }\n    }\n  }\n\n  function findClosestTarget(start: unknown, tags: string[]): unknown | null {\n    let cur: any = start;\n    for (let i = 0; i < 8; i += 1) {\n      if (!cur || typeof cur !== \"object\") return null;\n      const tag = String(cur.tagName || \"\").toUpperCase();\n      if (tags.includes(tag)) return cur;\n      cur = cur.parentElement || cur.parentNode || null;\n    }\n    return null;\n  }\n\n  function onMouseDown(ev: unknown) {\n    const t = isRecord(ev) ? (ev as any).target : null;\n    const a = findClosestTarget(t, [\"A\"]);\n    if (a) decorateAnchor(a);\n  }\n\n  function onKeyUp(ev: unknown) {\n    const t = isRecord(ev) ? (ev as any).target : null;\n    const a = findClosestTarget(t, [\"A\"]);\n    if (a) decorateAnchor(a);\n  }\n\n  function onSubmit(ev: unknown) {\n    const t = isRecord(ev) ? (ev as any).target : null;\n    const f = findClosestTarget(t, [\"FORM\"]);\n    if (f) decorateForm(f);\n  }\n\n  function applyIncomingIfReady() {\n    const cfg = currentConfig();\n    if (!cfg.accept_incoming) return;\n    if (!incomingDl) return;\n\n    const getStates = getStatesList();\n    const primaryGetState = getStates[0] || null;\n    const consent = primaryGetState ? getEffectiveConsent(primaryGetState) : {};\n    const analyticsDenied =\n      String((consent as any)?.analytics_storage || \"\").toLowerCase() === \"denied\";\n\n    if (analyticsDenied) {\n      let cid: string | null = null;\n      for (const v of Object.values(incomingDl.cookies)) {\n        const parsed = parseD8aClientCookie(v);\n        if (parsed?.cid) {\n          cid = parsed.cid;\n          break;\n        }\n      }\n      if (cid) {\n        for (const gs of getStates) {\n          try {\n            gs().anonCid = cid;\n            gs().incomingDl = null;\n          } catch {\n            // ignore\n          }\n        }\n      }\n      incomingDl = null;\n      return;\n    }\n\n    const specs = buildCookieSpecsUnion({ getStates, windowRef: w });\n\n    // If we don't yet have enough config to recognize any cookies in the payload,\n    // keep the payload around and retry later (for example, after `config()` registers\n    // property IDs / cookie prefixes). This is important because `set('linker', ...)`\n    // may be processed before any `config()` calls.\n    let hasAnyRelevantCookie = false;\n    for (const name of Object.keys(incomingDl.cookies || {})) {\n      if (specs[name]) {\n        hasAnyRelevantCookie = true;\n        break;\n      }\n    }\n    if (!hasAnyRelevantCookie) return;\n\n    // Apply cookies that we can recognize *now*, but keep the rest so they can be\n    // applied later when additional property configs (and thus cookie specs) become known.\n    for (const [name, value] of Object.entries(incomingDl.cookies || {})) {\n      const spec = specs[name];\n      if (!spec) continue;\n      if (spec.kind === \"client\") {\n        const parsed = parseD8aClientCookie(value);\n        if (!parsed?.cid) continue;\n        const before = jar.get(spec.name);\n        applyClientIdCookie({\n          jar,\n          cid: parsed.cid,\n          consent,\n          cookieDomain: spec.settings.cookieDomain,\n          cookiePrefix: spec.settings.cookiePrefix,\n          cookiePath: spec.settings.cookiePath,\n          cookieSameSite: spec.settings.cookieSameSite,\n          cookieSecure: spec.settings.cookieSecure,\n          cookieMaxAgeSeconds: spec.settings.cookieMaxAgeSeconds,\n          cookieUpdate: spec.settings.cookieUpdate,\n          forceCookieAttrsWrite: spec.settings.forceCookieAttrsWrite,\n        });\n        const after = jar.get(spec.name);\n        dbg(\"applied client cookie\", {\n          name: spec.name,\n          cid: parsed.cid,\n          cookieUpdate: spec.settings.cookieUpdate,\n          before,\n          after,\n        });\n        // Consider this cookie handled (even if cookie_update=false prevents overwriting).\n        delete (incomingDl.cookies as any)[name];\n        continue;\n      }\n      if (spec.kind === \"session\") {\n        const s = spec.getState();\n        const sp = getSetParams(spec.getState);\n        const https = isHttps(w);\n        const pcfg = getPropertyConfig(spec.getState, spec.propertyId);\n        const cs = resolveCookieSettings({ propertyCfg: pcfg, setParams: sp, https, state: s });\n        const parsed = parseD8aSessionCookie(value);\n        const before = jar.get(spec.name);\n        const res = applySessionCookie({\n          jar,\n          propertyId: spec.propertyId,\n          value,\n          consent,\n          cookieDomain: cs.cookieDomain,\n          cookiePrefix: cs.cookiePrefix,\n          cookiePath: cs.cookiePath,\n          cookieSameSite: cs.cookieSameSite,\n          cookieSecure: cs.cookieSecure,\n          cookieMaxAgeSeconds: cs.cookieMaxAgeSeconds,\n          cookieUpdate: cs.cookieUpdate,\n          forceCookieAttrsWrite: cs.forceCookieAttrsWrite,\n        });\n        const after = jar.get(spec.name);\n        dbg(\"applied session cookie\", {\n          name: spec.name,\n          propertyId: spec.propertyId,\n          cookieUpdate: cs.cookieUpdate,\n          wrote: (res as any)?.wrote === true,\n          sid: parsed?.sid,\n          sct: parsed?.sct,\n          before,\n          after,\n        });\n        // Seed runtime shared session state so the first auto page_view doesn't\n        // overwrite an incoming linker session with a freshly generated one.\n        if ((res as any)?.wrote && parsed?.tokens) {\n          s.sharedSessionTokens = parsed.tokens;\n          s.sharedSessionValue = String(value || \"\");\n          dbg(\"seeded shared session state\", { propertyId: spec.propertyId });\n        }\n        delete (incomingDl.cookies as any)[name];\n      }\n    }\n\n    // If all cookies from the payload have been handled, clear the payload.\n    if (!incomingDl.cookies || Object.keys(incomingDl.cookies).length === 0) {\n      // Clear any per-runtime pending payloads after applying.\n      for (const gs of getStates) {\n        try {\n          gs().incomingDl = null;\n        } catch {\n          // ignore\n        }\n      }\n      incomingDl = null;\n    }\n  }\n\n  function patchFormSubmit() {\n    if (formSubmitPatched) return;\n    const proto = (w as any).HTMLFormElement?.prototype;\n    const submit = proto?.submit;\n    if (typeof submit !== \"function\") return;\n    originalFormSubmit = submit;\n    proto.submit = function patchedSubmit(this: unknown) {\n      try {\n        decorateForm(this);\n      } catch {\n        // ignore\n      }\n      return submit.call(this);\n    };\n    formSubmitPatched = true;\n  }\n\n  function start() {\n    if (started) return;\n    started = true;\n    parseIncomingFromLocation();\n    applyIncomingIfReady();\n\n    w.document?.addEventListener?.(\"mousedown\", onMouseDown);\n    w.document?.addEventListener?.(\"keyup\", onKeyUp);\n    w.document?.addEventListener?.(\"submit\", onSubmit);\n    patchFormSubmit();\n  }\n\n  function stop() {\n    if (!started) return;\n    started = false;\n    w.document?.removeEventListener?.(\"mousedown\", onMouseDown);\n    w.document?.removeEventListener?.(\"keyup\", onKeyUp);\n    w.document?.removeEventListener?.(\"submit\", onSubmit);\n    if (formSubmitPatched) {\n      const proto = (w as any).HTMLFormElement?.prototype;\n      if (proto && originalFormSubmit) {\n        try {\n          proto.submit = originalFormSubmit;\n        } catch {\n          // ignore\n        }\n      }\n      formSubmitPatched = false;\n      originalFormSubmit = null;\n    }\n  }\n\n  return {\n    start,\n    stop,\n    applyIncomingIfReady,\n    registerRuntime,\n    updateConfigPatch,\n    // exported for tests\n    __internal: {\n      encodeDl,\n      decodeDl,\n      decorateUrlIfNeeded,\n      stripParamFromUrl,\n      setParamInUrl,\n      resolveLinkerConfig,\n    },\n  };\n}\n\nexport function getSharedLinkerCoordinator({\n  windowRef,\n}: {\n  windowRef: WindowLike;\n}): SharedLinkerCoordinator {\n  const w = windowRef;\n  const existing = getWindowSlot<SharedLinkerCoordinator>(w, LINKER_COORDINATOR_SLOT);\n  if (existing) return existing;\n  const created = createSharedLinkerCoordinator({ windowRef: w });\n  setWindowSlot(w, LINKER_COORDINATOR_SLOT, created);\n  return created;\n}\n\nexport function createLinker({\n  windowRef,\n  getState,\n}: {\n  windowRef: WindowLike;\n  getState: () => RuntimeState;\n}) {\n  const coordinator = getSharedLinkerCoordinator({ windowRef });\n  const unregister = coordinator.registerRuntime(getState);\n\n  return {\n    start: () => coordinator.start(),\n    stop: () => unregister(),\n    applyIncomingIfReady: () => coordinator.applyIncomingIfReady(),\n    updateConfigPatch: (patch: unknown) => coordinator.updateConfigPatch(patch),\n    // exported for tests\n    __internal: coordinator.__internal,\n  };\n}\n", "import { createD8aGlobal } from \"./runtime/d8a_global.ts\";\nimport { createQueueConsumer } from \"./runtime/queue_consumer.ts\";\nimport { createDispatcher } from \"./runtime/dispatcher.ts\";\nimport {\n  resolveDataLayerName,\n  resolveGlobalName,\n  resolveGtagDataLayerName,\n} from \"./runtime/runtime_names.ts\";\nimport { createGtagConsentBridge } from \"./runtime/gtag_consent_bridge.ts\";\nimport { createEnhancedMeasurement } from \"./runtime/enhanced_measurement.ts\";\nimport { createLinker } from \"./runtime/linker.ts\";\nimport type { D8aTagData, WindowLike } from \"./types.ts\";\nimport { ensureArraySlot, getWindowSlot, setWindowSlot } from \"./utils/window_slots.ts\";\n\ntype InstallResult = {\n  consumer: ReturnType<typeof createQueueConsumer>;\n  dispatcher: ReturnType<typeof createDispatcher>;\n  dataLayerName: string;\n  globalName: string;\n};\n\n/**\n * Installs the tracker runtime and begins consuming queued `dataLayer` entries.\n *\n * This is the programmatic installer used by both consumption modes:\n * - script-tag bundle (`src/browser_entry.ts`) installs on load\n * - ESM usage (`src/index.ts`) can call this explicitly\n */\nexport function installD8a({\n  windowRef = window,\n  dataLayerName,\n  globalName,\n  gtagDataLayerName,\n}: {\n  windowRef?: WindowLike;\n  dataLayerName?: unknown;\n  globalName?: unknown;\n  gtagDataLayerName?: unknown;\n} = {}) {\n  const w = windowRef;\n  if (!w) throw new Error(\"installD8a: window is required\");\n\n  // Keep installation records on window, so repeated installs with the\n  // same names are safe, but multiple tracker instances can still be created when\n  // users provide different `dataLayerName` and/or `globalName` (see example/index.html).\n  w.d8a_tag_data = w.d8a_tag_data || {};\n  type InstallStores = D8aTagData & {\n    __d8aInstallResults?: Record<string, InstallResult>;\n    __d8aInstallResultsByDataLayer?: Record<string, InstallResult>;\n  };\n  const tagData = w.d8a_tag_data as InstallStores;\n\n  const dl = resolveDataLayerName({ windowRef: w, dataLayerName });\n  const gn = resolveGlobalName({ windowRef: w, globalName });\n  const gdl = resolveGtagDataLayerName({ windowRef: w, gtagDataLayerName });\n\n  if (!tagData.__d8aInstallResults) tagData.__d8aInstallResults = {};\n  if (!tagData.__d8aInstallResultsByDataLayer) tagData.__d8aInstallResultsByDataLayer = {};\n  const installResults = tagData.__d8aInstallResults;\n  const installResultsByDl = tagData.__d8aInstallResultsByDataLayer;\n  const key = `${dl}|${gn}`;\n  if (installResults[key]) {\n    return installResults[key];\n  }\n\n  ensureArraySlot<unknown>(w, dl);\n\n  // If the data layer is already being consumed by an existing runtime, create an alias\n  // result for this (dl|gn) pair without creating a second consumer/dispatcher.\n  const existingForDl = installResultsByDl[dl] || null;\n  if (existingForDl) {\n    // Ensure the requested global exists and points at this data layer.\n    if (typeof getWindowSlot<unknown>(w, gn) !== \"function\") {\n      setWindowSlot(w, gn, createD8aGlobal({ windowRef: w, dataLayerName: dl }));\n    }\n\n    const alias = {\n      consumer: existingForDl.consumer,\n      dispatcher: existingForDl.dispatcher,\n      dataLayerName: dl,\n      globalName: gn,\n    };\n    installResults[key] = alias;\n    return alias;\n  }\n\n  // If the user already defined a snippet `d8a()` (or custom global) that pushes into dataLayer,\n  // leave it alone. Otherwise create the global function.\n  if (typeof getWindowSlot<unknown>(w, gn) !== \"function\") {\n    setWindowSlot(w, gn, createD8aGlobal({ windowRef: w, dataLayerName: dl }));\n  }\n\n  const consumer = createQueueConsumer({ windowRef: w, dataLayerName: dl });\n\n  const onConfigCbs: Array<(propertyId: string, patchCfg: Record<string, unknown>) => void> = [];\n  consumer.setOnConfig((propertyId, patchCfg) => {\n    for (const cb of onConfigCbs) cb(propertyId, patchCfg);\n  });\n\n  const onSetCbs: Array<(args: unknown) => void> = [];\n  consumer.setOnSet((args) => {\n    for (const cb of onSetCbs) cb(args);\n  });\n\n  const dispatcher = createDispatcher({ windowRef: w, getState: consumer.getState });\n  dispatcher.attachLifecycleFlush();\n  consumer.setOnEvent((name: string, params: Record<string, unknown>) => {\n    dispatcher.enqueueEvent(name, params);\n  });\n\n  // Cross-domain linker (`_dl`) for client/session continuity across unrelated domains.\n  const linker = createLinker({ windowRef: w, getState: consumer.getState });\n  linker.start();\n  // Apply pending incoming payload when:\n  // - linker config changes (accept_incoming/domains)\n  // - new properties are configured (cookie settings become known)\n  onSetCbs.push((args) => {\n    // Keep shared linker config in sync (when multiple runtimes are installed).\n    if (\n      args &&\n      typeof args === \"object\" &&\n      (args as any).type === \"field\" &&\n      (args as any).field === \"linker\"\n    ) {\n      linker.updateConfigPatch((args as any).value);\n    }\n    if (args && typeof args === \"object\" && (args as any).type === \"object\") {\n      linker.updateConfigPatch((args as any)?.obj?.linker);\n    }\n    linker.applyIncomingIfReady();\n  });\n  onConfigCbs.push(() => linker.applyIncomingIfReady());\n\n  // If gtag/GTM is present, prefer consent pushed into `window.dataLayer`.\n  // This runs regardless of d8a's own dataLayerName to avoid requiring users\n  // to align queue names.\n  const gtagConsentBridge = createGtagConsentBridge({\n    windowRef: w,\n    getState: consumer.getState,\n    dataLayerName: gdl,\n  });\n\n  consumer.start();\n  gtagConsentBridge.start();\n\n  // Enhanced measurement\n  try {\n    const em = createEnhancedMeasurement({ windowRef: w, getState: consumer.getState, dispatcher });\n    onConfigCbs.push(() => em.onConfig());\n    em.start();\n  } catch {\n    // ignore\n  }\n\n  const result = { consumer, dispatcher, dataLayerName: dl, globalName: gn };\n  installResults[key] = result;\n  installResultsByDl[dl] = result;\n  return result;\n}\n"],
  "mappings": "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",
  "names": ["getWindowSlot", "w", "key", "setWindowSlot", "value", "ensureArraySlot", "v", "arr", "createD8aGlobal", "windowRef", "dataLayerName", "w", "d8a", "_args", "ensureArraySlot", "date", "propertyId", "params", "eventName", "a", "b", "action", "state", "createRuntimeState", "getEffectiveConsent", "getState", "s", "g", "getConsentParts", "gConsent", "gDefault", "gUpdate", "scheduleMicrotask", "fn", "maybeEmitConsentUpdatePing", "getState", "s", "consent", "getEffectiveConsent", "next", "prev", "isRecord", "v", "readUserIdFromObject", "v", "isRecord", "raw", "trimmed", "readSendPageViewFromConfig", "readConsentPatch", "mergeLinkerConfig", "state", "patch", "next", "domainsRaw", "domains", "x", "acceptIncomingRaw", "decorateFormsRaw", "urlPosRaw", "urlPos", "createQueueConsumer", "windowRef", "dataLayerName", "w", "createRuntimeState", "started", "originalPush", "patched", "normalizeDataLayerItem", "item", "maybeArrayLikeLength", "handleCommand", "args", "_a", "_b", "cmd", "a", "b", "propertyId", "existingCfg", "patchCfg", "userId", "action", "maybeEmitConsentUpdatePing", "field", "payload", "params", "drainExisting", "dl", "existing", "getWindowSlot", "items", "ensureArraySlot", "patchPush", "dlArr", "forwarded", "start", "fn", "dlArrMaybe", "e", "nowSeconds", "nowMs", "randInt31", "applyCookiePrefix", "cookiePrefix", "cookieName", "p", "n", "buildD8aClientCookieName", "buildD8aCookieName", "propertyId", "parseD8aClientCookie", "value", "m", "generateCidParts", "formatCid", "random", "timestampSec", "buildD8aClientCookieValue", "buildD8aClientCookieValueFromCid", "cid", "SESSION_PREFIX", "KNOWN_KEYS", "tokenizeSessionCookie", "raw", "v", "t", "tok", "key", "val", "detokenizeSessionCookie", "tokens", "rawTokens", "getToken", "x", "setToken", "idx", "generateOpaqueSessionId", "a", "b", "c", "parseD8aSessionCookie", "sid", "sct", "last", "segRaw", "sidNum", "sctNum", "lastNum", "segNum", "updateD8aSessionCookieTokens", "existingTokens", "sessionTimeoutMs", "_a", "_b", "_c", "now", "timeoutSec", "isValid", "prevSct", "nextSct", "prevJ", "serializeD8aSessionCookieTokens", "__internal", "getCookieDomainCandidates", "hostname", "host", "parts", "last", "out", "i", "stripTrailingSlashes", "s", "parseCookieHeader", "header", "out", "raw", "part", "s", "idx", "name", "value", "isHttps", "w", "_a", "e", "buildSetCookieString", "name", "value", "attrs", "parts", "ensureDotDomain", "domain", "createCookieJar", "windowRef", "doc", "getAll", "parseCookieHeader", "get", "set", "opts", "_b", "_c", "path", "https", "requestedSameSite", "sameSite", "secure", "maxAgeSeconds", "expires", "baseAttrs", "domainOpt", "host", "candidates", "getCookieDomainCandidates", "attempts", "candidate", "cookieStr", "before", "after", "stuck", "del", "CORE_ECOMMERCE_NUMBER", "ITEM_KEY_MAP", "isObjectLike", "v", "toEpValue", "toEpnValue", "addEp", "params", "key", "value", "addEpn", "encodeItemToPrValue", "item", "it", "knownParts", "customParts", "srcKey", "dstKey", "str", "idx", "buildGa4CollectQueryParams", "propertyId", "eventName", "eventParams", "cookieHeader", "clientId", "userId", "cookiePrefix", "ignoreReferrer", "browser", "pageLoadMs", "hitCounter", "engagementTimeMs", "uachParams", "campaign", "contentGroup", "consentParams", "debugMode", "cookieMap", "parseCookieHeader", "client", "parseD8aClientCookie", "buildD8aClientCookieName", "c", "sessionCookieName", "buildD8aCookieName", "session", "parseD8aSessionCookie", "b", "k", "p", "currency", "itemsRaw", "items", "i", "pr", "isProbablyUrl", "s", "resolveTrackingUrl", "configOrUrl", "baseRaw", "stripTrailingSlashes", "getBrowserContext", "w", "dl", "_a", "e", "dt", "dr", "dh", "ul", "sr", "_b", "sw", "sh", "sleep", "ms", "r", "shouldRetryHttpStatus", "status", "sendWithRetries", "url", "windowRef", "useBeacon", "maxRetries", "initialBackoffMs", "_a", "w", "beacon", "e", "fetchFn", "options", "attempt", "backoff", "res", "canWriteAnalyticsCookies", "consentState", "TWO_YEARS_SECONDS", "ensureClientId", "jar", "consent", "nowMs", "cookieDomain", "cookiePrefix", "cookiePath", "cookieSameSite", "cookieSecure", "cookieMaxAgeSeconds", "cookieUpdate", "forceCookieAttrsWrite", "name", "buildD8aClientCookieName", "existing", "parsed", "parseD8aClientCookie", "canWriteAnalyticsCookies", "newVal", "buildD8aClientCookieValue", "newParsed", "cid", "applyClientIdCookie", "cidStr", "cookieValue", "buildD8aClientCookieValueFromCid", "existingCid", "applySessionCookie", "propertyId", "value", "_a", "pid", "rawValue", "parseD8aSessionCookie", "buildD8aCookieName", "HIGH_ENTROPY_KEYS", "getStore", "w", "store", "existing", "isRecord", "hasUachApi", "nav", "uad", "getUachCached", "fetchUach", "d", "enc", "v", "uachToParams", "uach", "out", "c", "encodeConsentStateBit", "a", "consentStatusToQl", "status", "buildGcs", "consent", "c", "ad", "an", "buildGcd", "consentDefault", "consentUpdate", "d", "u", "v", "s", "letterFor", "def", "upd", "defS", "updS", "parts", "out", "k", "digit", "generateAnonCid", "parts", "generateCidParts", "formatCid", "getOrCreateAnonCid", "windowRef", "state", "createEngagementTimer", "windowRef", "nowMs", "w", "started", "hasFocus", "isVisible", "isActive", "runningSinceMs", "accumulatedMs", "readHasFocus", "_a", "e", "readIsVisible", "_b", "shouldRun", "sync", "now", "delta", "onFocus", "onBlur", "onVisibilityChange", "onPageShow", "onPageHide", "start", "peek", "getAndReset", "out", "getPropertyIds", "getState", "s", "getPropertyConfig", "propertyId", "_a", "cfg", "getSetParams", "createDebugLogger", "enabled", "args", "e", "resolveWithPrecedence", "key", "eventParams", "config", "setParams", "ep", "cfg", "sp", "resolveString", "v", "resolveBool", "parseCookieFlags", "cookieFlags", "raw", "parts", "s", "out", "p", "lower", "v", "resolveCookieSettings", "propertyCfg", "setParams", "https", "state", "isDebugEnabled", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "cfg", "isRecord", "sp", "cookieDomainRaw", "cookieDomain", "cookiePrefixRaw", "cookiePrefix", "cookiePathRaw", "cookiePath", "cookieUpdateRaw", "cookieUpdate", "cookieExpires", "parsedExpires", "cookieMaxAgeSeconds", "flagsRaw", "flags", "cookieSameSite", "cookieSecure", "debug", "sig", "sigKey", "forceCookieAttrsWrite", "pickCookieSetDebugFields", "res", "isRecord", "updateAndWriteSharedSession", "state", "destinations", "jar", "getPropertyConfig", "resolveCookieSettings", "sessionTimeoutMs", "engagementTimeMs", "engagedThresholdMs", "nowMs", "log", "_a", "_b", "_c", "now", "tokens", "pid", "pcfg", "cs", "cookieName", "buildD8aCookieName", "existing", "parsed", "parseD8aSessionCookie", "updated", "updateD8aSessionCookieTokens", "prevG", "__internal", "nextG", "shouldWriteSessionValue", "serializeD8aSessionCookieTokens", "version", "D8A_WEB_TRACKER_NAME", "attachD8aCollectMetadata", "params", "version", "normalizeSendTo", "v", "x", "SET_PARAMS_EXCLUDED_FROM_EVENT_MERGE", "getGlobalCustomEventParams", "setParams", "merged", "key", "value", "createDispatcher", "windowRef", "getState", "w", "queue", "timerId", "lifecycleAttached", "jar", "createCookieJar", "fetchUach", "engagementTimer", "createEngagementTimer", "USER_ENGAGEMENT_VISIBILITY_MIN_MS", "getPrimaryConfig", "primaryId", "getPropertyIds", "getPropertyConfig", "isDebugEnabled", "config", "cfg", "isRecord", "sp", "isHttps", "_a", "e", "ensurePageLoadMs", "s", "enqueueEvent", "name", "params", "maxBatchSize", "flush", "ensureTimer", "interval", "useBeacon", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "propertyIds", "cfgPrimary", "batch", "consent", "getEffectiveConsent", "consentParts", "getConsentParts", "sessionTimeoutMsRaw", "sessionTimeoutMs", "state", "pageLoadMs", "analyticsStorage", "analyticsDenied", "globalCustomEventParams", "https", "debugPrimary", "engagedThresholdSecRaw", "engagedThresholdSec", "engagedThresholdMs", "logger", "createDebugLogger", "resolveCookiesFor", "propertyCfg", "resolveCookieSettings", "sent", "ev", "rawParams", "sendTo", "destinations", "eventParams", "engagementTimeMs", "updateAndWriteSharedSession", "pid", "sendPromises", "pcfg", "collectBase", "resolveTrackingUrl", "cs", "resolvedUserId", "resolveString", "resolvedClientId", "resolvedDebugMode", "resolveBool", "campaign", "contentGroup", "ignoreReferrer", "browser", "getBrowserContext", "pageLocation", "pageTitle", "pageReferrer", "language", "screenResolution", "clientCookieName", "buildD8aClientCookieName", "clientCookieBefore", "clientRes", "ensureClientId", "clientCookieAction", "q", "buildGa4CollectQueryParams", "getOrCreateAnonCid", "uachToParams", "getUachCached", "buildGcs", "buildGcd", "attachD8aCollectMetadata", "url", "sendWithRetries", "flushNow", "attachLifecycleFlush", "safeString", "v", "detectFromCurrentScript", "documentRef", "key", "_a", "doc", "isRecord", "cs", "src", "baseHref", "u", "e", "resolveDataLayerName", "windowRef", "dataLayerName", "hinted", "fromScript", "resolveGlobalName", "globalName", "resolveGtagDataLayerName", "gtagDataLayerName", "HUBS_KEY", "isHubsMap", "v", "isRecord", "getHub", "w", "dataLayerName", "dl", "existingHubs", "getWindowSlot", "hubs", "setWindowSlot", "existing", "hub", "createGtagConsentBridge", "windowRef", "getState", "started", "unsubscribe", "normalizeDataLayerItem", "item", "maybeArrayLikeLength", "e", "applyConsentPatch", "action", "patch", "state", "maybeEmitConsentUpdatePing", "parseConsentCommand", "args", "cmd", "a", "b", "handleArgs", "c", "drainExisting", "dlArr", "patchPush", "ensureArraySlot", "forwarded", "sub", "start", "dlArrMaybe", "maybeHubs", "parseList", "v", "fallback", "x", "s", "safeUrl", "href", "baseHref", "e", "closestAnchor", "node", "i", "nn", "isRecord", "tag", "getAttr", "el", "name", "ee", "attr", "isHttpUrl", "u", "p", "hostnameMatches", "host", "domain", "h", "d", "fileNameFromUrl", "fileExtension", "idx", "normalizeWhitespace", "getLinkId", "a", "getLinkClasses", "getLinkText", "createEnhancedMeasurement", "windowRef", "getState", "dispatcher", "w", "readBoolKey", "source", "key", "readListKey", "isEnabledForProperty", "propertyId", "defaultValue", "setParams", "getSetParams", "cfg", "getPropertyConfig", "c", "getListForProperty", "defaultList", "cfgV", "setV", "markInstalledOnce", "markSiteSearchOnce", "maybeFireSiteSearch", "_a", "propertyIds", "getPropertyIds", "search", "sp", "defaultKeys", "termToProps", "pid", "keys", "found", "k", "list", "term", "pids", "shouldTrackOutbound", "linkHostname", "excludes", "shouldTrackDownload", "ext", "set", "onClick", "evt", "_b", "_c", "target", "linkUrl", "linkId", "linkClasses", "linkText", "fileName", "downloadDestinations", "outboundDestinations", "start", "doc", "onConfig", "DL_PARAM", "DL_VERSION", "B64_ALPHABET", "B64_PAD", "B64_REV", "b64Rev", "rev", "i", "utf8Encode", "s", "e", "out", "utf8Decode", "bytes", "webSafeBase64Encode", "raw", "has2", "has3", "b1", "b2", "b3", "c1", "c2", "c3", "c4", "webSafeBase64Decode", "enc", "next", "defaultValue", "ch", "v", "f", "g", "h", "isHttps", "w", "_a", "resolveLinkerConfig", "cfg", "domains", "x", "hasDomains", "splitUrl", "u", "m", "parseParams", "part", "lead", "kv", "item", "idx", "k", "buildParams", "pairs", "encoded", "getParamFromUrl", "url", "name", "query", "fragment", "stripParamFromUrl", "base", "q", "setParamInUrl", "value", "pos", "getHostnameFromUrl", "baseHref", "shouldDecorateHost", "hostname", "host", "d", "dom", "CRC_TABLE", "crcTable", "t", "c", "j", "crc32Base36", "tbl", "crc", "code", "fingerprintHash", "payload", "offset", "windowRef", "_b", "_c", "_d", "ua", "tz", "lang", "minuteIndex", "encodeDl", "cookies", "ts", "stable", "a", "b", "hash", "decodeDl", "ttlMs", "parts", "version", "payloadParts", "hashOk", "off", "kvRaw", "encV", "age", "LINKER_COORDINATOR_SLOT", "buildCookieSpecsUnion", "getStates", "https", "specs", "prefixes", "getState", "sp", "getSetParams", "pids", "getPropertyIds", "pid", "pcfg", "getPropertyConfig", "cs", "resolveCookieSettings", "sessName", "buildD8aCookieName", "prefix", "entry", "clientName", "buildD8aClientCookieName", "createSharedLinkerCoordinator", "jar", "createCookieJar", "runtimes", "isDebugEnabled", "gs", "cfgs", "isRecord", "dbg", "args", "acceptIncoming", "decorateForms", "urlPosition", "incomingDl", "started", "formSubmitPatched", "originalFormSubmit", "getStatesList", "currentConfig", "doms", "updateConfigPatch", "patch", "domainsRaw", "acceptIncomingRaw", "decorateFormsRaw", "urlPosRaw", "urlPos", "mergeConfigSnapshot", "registerRuntime", "tryStripDlFromUrl", "where", "href", "parseIncomingFromLocation", "decoded", "buildOutgoingCookies", "header", "all", "parseCookieHeader", "spec", "parseD8aClientCookie", "parseD8aSessionCookie", "buildDlValue", "decorateUrlIfNeeded", "rawUrl", "decorateAnchor", "el", "decorateForm", "action", "method", "children", "found", "input", "nextAction", "findClosestTarget", "start", "tags", "cur", "tag", "onMouseDown", "ev", "onKeyUp", "onSubmit", "applyIncomingIfReady", "primaryGetState", "consent", "getEffectiveConsent", "cid", "parsed", "hasAnyRelevantCookie", "before", "applyClientIdCookie", "after", "res", "applySessionCookie", "patchFormSubmit", "proto", "submit", "_e", "_f", "stop", "_g", "getSharedLinkerCoordinator", "existing", "getWindowSlot", "created", "setWindowSlot", "createLinker", "coordinator", "unregister", "installD8a", "windowRef", "dataLayerName", "globalName", "gtagDataLayerName", "w", "tagData", "dl", "resolveDataLayerName", "gn", "resolveGlobalName", "gdl", "resolveGtagDataLayerName", "installResults", "installResultsByDl", "key", "ensureArraySlot", "existingForDl", "getWindowSlot", "setWindowSlot", "createD8aGlobal", "alias", "consumer", "createQueueConsumer", "onConfigCbs", "propertyId", "patchCfg", "cb", "onSetCbs", "args", "dispatcher", "createDispatcher", "name", "params", "linker", "createLinker", "_a", "gtagConsentBridge", "createGtagConsentBridge", "em", "createEnhancedMeasurement", "e", "result"]
}
