{
  "version": 3,
  "sources": ["/cdn/shop/t/76/assets/hugfig-event-bridge.js?hf=20260821-preview-2-1-merge"],
  "sourcesContent": ["(function() {\n  if (window.HugfigEvents) return;\n\n  const SESSION_KEY = 'hugfig_config_session_id';\n  const BRIDGE_VERSION = '3.0.0';\n  const RETRY_INTERVAL_MS = 250;\n  const MAX_RETRY_ATTEMPTS = 40;\n  const SAFE_EVENT_DATA_KEYS = new Set([\n    'journey_type', 'category', 'style', 'generation_class', 'variant_id',\n    'slot_index', 'required_slot_count', 'upload_source',\n    'replacing_existing_photo', 'generation_mode', 'attempt_no',\n    'previous_attempt_no', 'is_retry', 'latency_ms', 'preview_option_count',\n    'error_code', 'quantity', 'value', 'currency', 'has_generated_preview',\n    'cta_action', 'size', 'bridge_version', 'recovered_event_count',\n    'recovered_event_name', 'placement', 'available_keychain_styles',\n    'keychain_style', 'destination', 'previous_keychain_style', 'price',\n    'option_group', 'option_value', 'previous_option_value', 'is_reselect',\n    'product_count', 'product_id', 'product_handle', 'card_position',\n    'experiment_id', 'experiment_variant', 'entry_placement', 'ui_version',\n    'generation_run_id'\n  ]);\n  const pendingEvents = [];\n  let retryTimer = null;\n  let retryAttempts = 0;\n\n  function createId() {\n    if (window.crypto && typeof window.crypto.randomUUID === 'function') {\n      return window.crypto.randomUUID();\n    }\n    return 'hf-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 12);\n  }\n\n  function getConfigSessionId() {\n    try {\n      let sessionId = window.sessionStorage.getItem(SESSION_KEY);\n      if (!sessionId) {\n        sessionId = createId();\n        window.sessionStorage.setItem(SESSION_KEY, sessionId);\n      }\n      return sessionId;\n    } catch (error) {\n      return createId();\n    }\n  }\n\n  function getSourceEntry() {\n    const template = document.querySelector('main[data-template]')?.dataset.template;\n    if (template === 'index') return 'homepage';\n    if (template === 'product') return 'product_page';\n    return window.location.pathname === '/' ? 'homepage' : 'product_page';\n  }\n\n  function cleanValue(value) {\n    if (value === undefined || value === null || typeof value === 'function') return undefined;\n    if (typeof File !== 'undefined' && value instanceof File) return undefined;\n    if (typeof Blob !== 'undefined' && value instanceof Blob) return undefined;\n    if (typeof value === 'string') {\n      const normalized = value.trim();\n      if (/^(data:|blob:|https?:\\/\\/)/i.test(normalized)) return undefined;\n      if (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(normalized)) return undefined;\n      return normalized.slice(0, 100);\n    }\n    if (typeof value === 'number' || typeof value === 'boolean') return value;\n    return undefined;\n  }\n\n  function buildPayload(eventData) {\n    const payload = {\n      event_id: createId(),\n      config_session_id: getConfigSessionId(),\n      source_entry: getSourceEntry(),\n      page_path: window.location.pathname,\n      journey_type: 'ai_preview',\n      bridge_version: BRIDGE_VERSION\n    };\n\n    Object.entries(eventData || {}).forEach(function(entry) {\n      if (!SAFE_EVENT_DATA_KEYS.has(entry[0])) return;\n      const cleaned = cleanValue(entry[1]);\n      if (cleaned !== undefined) payload[entry[0]] = cleaned;\n    });\n    return payload;\n  }\n\n  function publisherAvailable() {\n    return Boolean(window.Shopify && window.Shopify.analytics &&\n      typeof window.Shopify.analytics.publish === 'function');\n  }\n\n  function publish(item) {\n    try {\n      window.Shopify.analytics.publish('hugfig:' + item.eventName, item.payload);\n      return true;\n    } catch (error) {\n      item.lastError = error && error.message ? String(error.message).slice(0, 100) : 'publish_exception';\n      return false;\n    }\n  }\n\n  function scheduleFlush() {\n    if (retryTimer || retryAttempts >= MAX_RETRY_ATTEMPTS) return;\n    retryTimer = window.setTimeout(flushQueue, RETRY_INTERVAL_MS);\n  }\n\n  function flushQueue() {\n    retryTimer = null;\n    retryAttempts += 1;\n    if (!publisherAvailable()) {\n      scheduleFlush();\n      return;\n    }\n\n    const recoveredEvents = [];\n    while (pendingEvents.length) {\n      const item = pendingEvents[0];\n      if (!publish(item)) {\n        scheduleFlush();\n        return;\n      }\n      pendingEvents.shift();\n      if (item.eventName !== 'publish_recovered') recoveredEvents.push(item.eventName);\n    }\n\n    if (recoveredEvents.length) {\n      publish({\n        eventName: 'publish_recovered',\n        payload: buildPayload({\n          recovered_event_count: recoveredEvents.length,\n          recovered_event_name: recoveredEvents[0]\n        })\n      });\n    }\n  }\n\n  function track(eventName, eventData) {\n    if (!eventName) return false;\n    const item = { eventName: eventName, payload: buildPayload(eventData) };\n    if (publisherAvailable() && publish(item)) return true;\n\n    pendingEvents.push(item);\n    scheduleFlush();\n    document.dispatchEvent(new CustomEvent('hugfig:publish-pending', {\n      detail: { eventName: eventName, pendingCount: pendingEvents.length }\n    }));\n    return false;\n  }\n\n  window.HugfigEvents = {\n    version: BRIDGE_VERSION,\n    getConfigSessionId: getConfigSessionId,\n    getSourceEntry: getSourceEntry,\n    pendingCount: function() { return pendingEvents.length; },\n    track: track\n  };\n\n  // Backward-compatible alias for the existing configurator scripts.\n  window.HugfigAnalytics = window.HugfigEvents;\n\n  track('bridge_loaded', { bridge_version: BRIDGE_VERSION });\n  document.addEventListener('DOMContentLoaded', flushQueue, { once: true });\n  window.addEventListener('load', flushQueue, { once: true });\n})();\n"],
  "mappings": "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",
  "names": []
}
