{
  "version": 3,
  "sources": ["/cdn/shop/t/16/assets/soulyshine-cart-integrity.js?ssci=20260807-4"],
  "sourcesContent": ["(function () {\n  'use strict';\n\n  if (window.__soulyshineCartIntegrityBooted) return;\n  window.__soulyshineCartIntegrityBooted = true;\n  console.log('[Cart integrity] Ready');\n\n  var integrityRunning = false;\n  var integrityTimer = null;\n\n  function isProtectionPlan(item) {\n    var props = item.properties || {};\n    var handle = item.handle || item.product_handle || '';\n\n    return handle === 'the-2-year-jewelry-protection-plan' ||\n      Boolean(props.__inkbleApp_checkbox_id || props.__inkbleApp_master_product_id);\n  }\n\n  function repairCartAddons() {\n    if (integrityRunning) return Promise.resolve(false);\n    integrityRunning = true;\n\n    return fetch('/cart.js', {\n      credentials: 'same-origin',\n      headers: { Accept: 'application/json' }\n    })\n      .then(function (response) {\n        if (!response.ok) throw new Error('Cart read failed: ' + response.status);\n        return response.json();\n      })\n      .then(function (cart) {\n        var items = cart.items || [];\n        var masterProductIds = {};\n        var plans = [];\n        var customilyAddons = [];\n        var customilyMainUrls = {};\n        var customilyMainIds = {};\n        var customilyMainCount = 0;\n        var updates = {};\n\n        items.forEach(function (item) {\n          var props = item.properties || {};\n          var handle = item.handle || item.product_handle || '';\n          var isCustomilyAddon = handle === 'surcharge' ||\n            Boolean(props['_customily-upsell-id'] && !props['_customily-upsell-main-id']);\n\n          if (isProtectionPlan(item)) {\n            plans.push(item);\n          } else if (isCustomilyAddon) {\n            customilyAddons.push(item);\n          } else {\n            masterProductIds[String(item.product_id)] = true;\n\n            if (props['_customily-customization-url'] || props['_customily-upsell-main-id']) {\n              customilyMainCount += 1;\n              if (props['_customily-customization-url']) {\n                customilyMainUrls[String(props['_customily-customization-url'])] = true;\n              }\n              if (props['_customily-upsell-main-id']) {\n                customilyMainIds[String(props['_customily-upsell-main-id'])] = true;\n              }\n            }\n          }\n        });\n\n        var validPlans = [];\n        plans.forEach(function (plan) {\n          var props = plan.properties || {};\n          var masterId = props.__inkbleApp_master_product_id;\n          var canRemove = String(props.__inkbleApp_checkbox_can_remove_when_trigger_remove).toLowerCase() === 'true';\n\n          if (canRemove && masterId && !masterProductIds[String(masterId)]) {\n            updates[plan.key] = 0;\n          } else {\n            validPlans.push(plan);\n          }\n        });\n\n        var remainingQuantity = validPlans.reduce(function (sum, plan) {\n          return sum + (plan.quantity || 0);\n        }, 0);\n\n        if (remainingQuantity > 1) {\n          validPlans.forEach(function (plan, index) {\n            updates[plan.key] = index === 0 ? 1 : 0;\n          });\n        }\n\n        customilyAddons.forEach(function (addon) {\n          var props = addon.properties || {};\n          var customizationUrl = props['_customily-customization-url'];\n          var upsellId = props['_customily-upsell-id'];\n          var hasLinkedMain = Boolean(\n            (customizationUrl && customilyMainUrls[String(customizationUrl)]) ||\n            (upsellId && customilyMainIds[String(upsellId)])\n          );\n\n          if (!hasLinkedMain && (customizationUrl || upsellId || customilyMainCount === 0)) {\n            updates[addon.key] = 0;\n          }\n        });\n\n        if (Object.keys(updates).length === 0) return false;\n\n        return fetch('/cart/update.js', {\n          method: 'POST',\n          credentials: 'same-origin',\n          headers: {\n            'Content-Type': 'application/json',\n            Accept: 'application/json'\n          },\n          body: JSON.stringify({ updates: updates })\n        }).then(function (response) {\n          if (!response.ok) throw new Error('Cart repair failed: ' + response.status);\n          window.location.reload();\n          return true;\n        });\n      })\n      .catch(function (error) {\n        console.warn('[Cart integrity] Check failed:', error);\n        return false;\n      })\n      .finally(function () {\n        integrityRunning = false;\n      });\n  }\n\n  function scheduleIntegrityCheck(delay) {\n    clearTimeout(integrityTimer);\n    integrityTimer = setTimeout(function () {\n      integrityTimer = null;\n      repairCartAddons();\n    }, delay);\n  }\n\n  function handleRemoveIntent(event) {\n    var target = event.target && event.target.nodeType === 1\n      ? event.target\n      : event.target && event.target.parentElement;\n    var removeLink = target && target.closest\n      ? target.closest('a[href*=\"/cart/change\"][href*=\"quantity=0\"]')\n      : null;\n\n    if (removeLink) {\n      console.log('[Cart integrity] Remove intent captured');\n      scheduleIntegrityCheck(3200);\n    }\n  }\n\n  document.addEventListener('pointerdown', handleRemoveIntent, true);\n  document.addEventListener('click', handleRemoveIntent, true);\n\n  document.addEventListener('cart:updated', function () {\n    scheduleIntegrityCheck(2600);\n  });\n\n  // Some Shrine cart updates replace line-item markup without emitting the\n  // cart:updated event. Observe the stable main container so the cleanup also\n  // runs after those AJAX-only mutations.\n  function observeCartMutations() {\n    var main = document.getElementById('MainContent');\n    if (!main || typeof MutationObserver === 'undefined') return;\n\n    var observer = new MutationObserver(function () {\n      var planLink = main.querySelector('a[href*=\"/products/the-2-year-jewelry-protection-plan\"]');\n      if (planLink && integrityTimer === null && !integrityRunning) {\n        scheduleIntegrityCheck(1800);\n      }\n    });\n\n    observer.observe(main, { childList: true, subtree: true });\n  }\n\n  window.__soulyshineRunCartIntegrity = repairCartAddons;\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () {\n      observeCartMutations();\n      scheduleIntegrityCheck(0);\n    }, { once: true });\n  } else {\n    observeCartMutations();\n    scheduleIntegrityCheck(0);\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
