@abra-promotions/webhooks-for-tapcart 2.0.0-beta.1 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1118,6 +1118,22 @@ const parsePromotionIfActive = (promotionObject, now = new Date()) => {
1118
1118
  }
1119
1119
  };
1120
1120
 
1121
+ let lastConsoleLine = "";
1122
+ const consoleLog = (message, data) => {
1123
+ let json = "";
1124
+ if (data != null) {
1125
+ try {
1126
+ json = ` ${JSON.stringify(data)}`;
1127
+ } catch {
1128
+ json = ` ${String(data)}`;
1129
+ }
1130
+ }
1131
+ const line = `[Abra useAbra] ${message}${json}`;
1132
+ if (line === lastConsoleLine) return;
1133
+ lastConsoleLine = line;
1134
+ console.log(line);
1135
+ };
1136
+
1121
1137
  function useAbra({ React, useTapcart, tapcartData }) {
1122
1138
  const Tapcart = useTapcart();
1123
1139
  const [activePromotion, setActivePromotion] = React.useState(undefined);
@@ -1308,6 +1324,7 @@ function useAbra({ React, useTapcart, tapcartData }) {
1308
1324
 
1309
1325
  // Stable logging function that doesn't cause re-renders
1310
1326
  const log = React.useCallback((message, data = null) => {
1327
+ consoleLog(message, data);
1311
1328
  const timestamp = new Date().toISOString();
1312
1329
  const logEntry = {
1313
1330
  timestamp,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storeFrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storeFrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storeFrontAccessToken, country) => {\n if (!storeUrl || !storeFrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storeFrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\n// Prints log() lines (including the discount math's) to the console, read on a device over WebView\n// remote debugging. Consecutive identical lines are dropped: some fire on every render.\nconst CONSOLE_LOGS = true;\nlet lastConsoleLine = \"\";\nconst consoleLog = (message, data) => {\n if (!CONSOLE_LOGS) return;\n let json = \"\";\n if (data != null) {\n try {\n json = ` ${JSON.stringify(data)}`;\n } catch {\n json = ` ${String(data)}`;\n }\n }\n const line = `[Abra useAbra] ${message}${json}`;\n if (line === lastConsoleLine) return;\n lastConsoleLine = line;\n console.log(line);\n};\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storeFrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storeFrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storeFrontAccessToken, country) => {\n if (!storeUrl || !storeFrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storeFrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n consoleLog(message, data);\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
package/dist/index.esm.js CHANGED
@@ -1116,6 +1116,22 @@ const parsePromotionIfActive = (promotionObject, now = new Date()) => {
1116
1116
  }
1117
1117
  };
1118
1118
 
1119
+ let lastConsoleLine = "";
1120
+ const consoleLog = (message, data) => {
1121
+ let json = "";
1122
+ if (data != null) {
1123
+ try {
1124
+ json = ` ${JSON.stringify(data)}`;
1125
+ } catch {
1126
+ json = ` ${String(data)}`;
1127
+ }
1128
+ }
1129
+ const line = `[Abra useAbra] ${message}${json}`;
1130
+ if (line === lastConsoleLine) return;
1131
+ lastConsoleLine = line;
1132
+ console.log(line);
1133
+ };
1134
+
1119
1135
  function useAbra({ React, useTapcart, tapcartData }) {
1120
1136
  const Tapcart = useTapcart();
1121
1137
  const [activePromotion, setActivePromotion] = React.useState(undefined);
@@ -1306,6 +1322,7 @@ function useAbra({ React, useTapcart, tapcartData }) {
1306
1322
 
1307
1323
  // Stable logging function that doesn't cause re-renders
1308
1324
  const log = React.useCallback((message, data = null) => {
1325
+ consoleLog(message, data);
1309
1326
  const timestamp = new Date().toISOString();
1310
1327
  const logEntry = {
1311
1328
  timestamp,
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storeFrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storeFrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storeFrontAccessToken, country) => {\n if (!storeUrl || !storeFrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storeFrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/discounts.js","../src/useAbra.js"],"sourcesContent":["// Pure discount math for useAbra. Moved verbatim from src/code-for-updating-custom-component.jsx.\n// getIdFromGid and productGidFromId are copied from @tapcart/mobile-components so the package has no imports.\nexport const getIdFromGid = (gid) => {\n if (!gid) return \"\";\n const arr = gid.split(\"/\");\n return arr[arr.length - 1] || \"\";\n};\n\nexport const productGidFromId = (id) => {\n if (!id) return null;\n if (id.startsWith(\"gid://shopify/Product/\")) return id;\n return \"gid://shopify/Product/\" + id;\n};\n\n// BXGY customer-gets: new payloads carry cards on customerGets.productCards,\n// legacy payloads a single {quantity, items} pair at the root.\nexport const getBxgyGetsCards = (customerGets) => {\n if (\n Array.isArray(customerGets?.productCards) &&\n customerGets.productCards.length > 0\n ) {\n return customerGets.productCards;\n }\n if (customerGets?.items != null) {\n return [\n {\n quantity: customerGets.quantity,\n items: customerGets.items,\n purchaseType: customerGets.purchaseType,\n },\n ];\n }\n return [];\n};\n\nexport const getDiscountForProductDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n}) => {\n const isProductEntitledForProductDiscount = () => {\n if (targetDiscount.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.entitled?.variants) {\n if (variantId && targetDiscount.entitled.variants.includes(variantId)) {\n return true;\n }\n }\n\n if (targetDiscount.entitled?.products) {\n if (handle && targetDiscount.entitled.products.includes(handle)) {\n return true;\n }\n }\n return false;\n };\n if (!isProductEntitledForProductDiscount()) return 0;\n\n if (targetDiscount.discountValue?.type === \"DiscountAmount\") {\n return targetDiscount.discountValue.discountAmount.cents / 100;\n } else if (targetDiscount.discountValue?.type === \"DiscountPercentage\") {\n return (\n parseFloat(selectedVariant.price.amount) *\n targetDiscount.discountValue.percentage\n );\n }\n};\n\nexport const getDiscountForMultiValueCollection = ({\n targetDiscount,\n handle,\n selectedVariant,\n}) => {\n if (\n !targetDiscount?.discountValue?.productDiscounts ||\n targetDiscount.discountValue.productDiscounts.length === 0\n )\n return 0;\n\n const entitledProductDiscounts =\n targetDiscount.discountValue.productDiscounts.filter((discount) =>\n (discount.products ?? []).includes(handle),\n ) || [];\n\n return entitledProductDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForMultiValueProduct = ({\n targetDiscount,\n variantId,\n selectedVariant,\n}) => {\n if (!variantId) return 0;\n if (\n !targetDiscount?.discountValue?.variantDiscounts ||\n targetDiscount?.discountValue?.variantDiscounts.length === 0\n )\n return 0;\n\n const entitledVariantDiscounts =\n targetDiscount.discountValue.variantDiscounts.filter((discount) =>\n (discount.variants ?? []).includes(variantId),\n ) ?? [];\n\n return entitledVariantDiscounts.reduce((max, discountValue) => {\n let discountAmount = 0;\n\n if (discountValue.value.type === \"DiscountAmount\") {\n discountAmount = discountValue.value.discountAmount.cents / 100;\n } else if (discountValue.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discountValue.value.percentage / 100);\n }\n\n return Math.max(max, discountAmount);\n }, 0);\n};\n\nexport const getDiscountForTierDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToTierDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.products) {\n if (\n handle &&\n targetDiscount.discountValue?.entitled?.products.includes(handle)\n ) {\n return true;\n }\n }\n\n if (targetDiscount.discountValue?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount.discountValue?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToTierDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForVolumeDiscount = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n}) => {\n if (!targetDiscount.discountValue?.tiers) return 0;\n if (targetDiscount.discountValue?.tiersType === \"FREE_GIFT\") return 0;\n\n // customer-gets purchaseType gates the displayed price; per-variant mode\n // (ELIGIBLE_VARIANTS) ignores it\n const customerGets = targetDiscount.discountValue?.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n if (getsPurchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return 0;\n if (getsPurchaseType === \"ONE_TIME\" && selectedHasSellingPlan) return 0;\n\n const currentCollectionHandle = product.sourceCollection?.handle;\n const isProductEntitledToVolumeDiscount = () => {\n if (targetDiscount.discountValue?.entitled?.all) {\n return true;\n }\n\n if (targetDiscount.discountValue?.entitled?.collections) {\n if (\n currentCollectionHandle &&\n targetDiscount.discountValue?.entitled?.collections.includes(\n currentCollectionHandle,\n )\n ) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.products) {\n if (handle && targetDiscount?.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (targetDiscount?.entitled?.variants) {\n if (\n variantId &&\n targetDiscount?.entitled?.variants.includes(variantId)\n ) {\n return true;\n }\n }\n\n return false;\n };\n if (!isProductEntitledToVolumeDiscount()) return 0;\n\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n if (targetDiscount.entitled.products?.includes(item.handle)) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const biggestEligibleTier =\n targetDiscount.discountValue.tiers[biggestEligibleTierIndex];\n if (!biggestEligibleTier || !biggestEligibleTier.value) return 0;\n\n if (\n biggestEligibleTier.value.type === \"DiscountPercentage\" &&\n biggestEligibleTier.value.percentage\n ) {\n const discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (biggestEligibleTier.value.percentage / 100);\n\n return discountAmount;\n }\n};\n\nexport const getDiscountForMultiEffectTiers = ({\n targetDiscount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const isProductEntitledToDiscount = (discount) => {\n if (discount.entitled?.all) {\n return true;\n }\n\n if (discount.entitled?.collections) {\n if (\n currentCollectionHandle &&\n discount.entitled?.collections.includes(currentCollectionHandle)\n ) {\n return true;\n }\n }\n\n if (discount.entitled?.products) {\n if (handle && discount.entitled?.products.includes(handle)) {\n return true;\n }\n }\n\n if (discount.entitled?.variants) {\n if (variantId && discount.entitled?.variants.includes(variantId)) {\n return true;\n }\n }\n\n return false;\n };\n const getBiggestEligibleTier = () => {\n const isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (\n discount.appliesOnSubscription &&\n !discount.appliesOnOneTimePurchase\n ) {\n return Boolean(item.sellingPlanAllocation);\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation;\n } else {\n return true;\n }\n };\n const isCartItemEntitledToGiveDiscount = (item) => {\n if (!targetDiscount || !targetDiscount.entitled) {\n return false;\n }\n\n if (targetDiscount.entitled.all) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n if (targetDiscount.entitled.variants) {\n if (\n targetDiscount.entitled.variants?.includes(\n item.variantId.toString(),\n )\n ) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n }\n\n if (targetDiscount.entitled.products) {\n return isItemEligibleWithSelectedPurchaseType(item, targetDiscount);\n }\n\n return false;\n };\n\n const getEntitledQuantityAndTotal = () => {\n const entitledItems = (cart?.items || []).filter((item) => {\n return isCartItemEntitledToGiveDiscount(item);\n });\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item.quantity;\n acc.entitledTotal +=\n parseFloat((item.price?.amount ?? 0) * 100) * item.quantity;\n\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n return { entitledQuantity, entitledTotal };\n };\n\n const isPrerequisiteValid = (prerequisite, quantity, subtotal) => {\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n Number(quantity) <\n Number(prerequisite.minimumRequirement.greaterThanOrEqualToQuantity)\n ) {\n return false;\n }\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n subtotal <\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal.cents\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n log(\"getEntitledQuantityAndTotal\");\n const { entitledQuantity, entitledTotal } = getEntitledQuantityAndTotal();\n\n log(\"getEntitledQuantityAndTotal\", { entitledQuantity, entitledTotal });\n\n let currentBiggestTierIndex = -1;\n for (let i = 0; i < targetDiscount.discountValue?.tiers?.length; i++) {\n const currentTier = targetDiscount.discountValue.tiers[i];\n if (\n isPrerequisiteValid(\n currentTier.prerequisite,\n entitledQuantity,\n entitledTotal,\n )\n ) {\n currentBiggestTierIndex = i;\n } else {\n break;\n }\n }\n return currentBiggestTierIndex;\n };\n\n if (\n !targetDiscount.discountValue?.tiers ||\n targetDiscount.discountValue?.tiers.length === 0\n )\n return 0;\n\n log(\"getBiggestEligibleTier\");\n const currentCollectionHandle = product?.sourceCollection?.handle;\n const biggestEligibleTierIndex = getBiggestEligibleTier();\n log(\"getBiggestEligibleTier\", { biggestEligibleTierIndex });\n\n if (biggestEligibleTierIndex < 0) return 0;\n\n const productDiscountsAvailableOnTier =\n targetDiscount.discountValue.tiers\n .slice(0, biggestEligibleTierIndex + 1)\n ?.filter((tier) =>\n tier.discounts.some(\n (discount) => discount.type === \"ProductDiscount\",\n ),\n )\n ?.flatMap(\n (tier) =>\n tier.discounts.find(\n (discount) => discount.type === \"ProductDiscount\",\n )?.value ?? [],\n ) ?? [];\n\n // Per-entry purchaseType replaces the promotion-level flags: an entry only\n // affects the price branch matching the selected purchase state.\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => {\n if (discount.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (discount.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return isProductEntitledToDiscount(discount);\n },\n );\n\n const maxDiscountAmount = eligibleProductDiscounts.reduce(\n (max, discount) => {\n let discountAmount = 0;\n if (discount.value.type === \"DiscountAmount\") {\n discountAmount = parseFloat(discount.value.discountAmount.amount);\n } else if (discount.value.type === \"DiscountPercentage\") {\n discountAmount =\n parseFloat(selectedVariant.price.amount) *\n (discount.value.percentage / 100);\n }\n return Math.max(max, discountAmount);\n },\n 0,\n );\n return maxDiscountAmount;\n};\n\nexport const isProductMatchingBxgyCardItems = (handle, variantId, items) => {\n if (!items) return false;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n for (const product of items.products) {\n if (product.handle === handle) {\n if (!product.variants || product.variants.length === 0) return true;\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === variantId || variant.id === variantId) return true;\n }\n }\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (collection.products?.includes(handle)) return true;\n }\n }\n\n return false;\n};\n\nexport const isCartItemMatchingBxgyCard = (item, card) => {\n const items = card.items;\n if (items.type === \"AllProducts\") return true;\n\n if (items.type === \"SpecificProducts\" && items.products) {\n const itemVariantId = item.variantId?.toString();\n for (const product of items.products) {\n if (product.variants && product.variants.length > 0) {\n for (const variant of product.variants) {\n const vId = variant.id?.includes(\"/\")\n ? variant.id.split(\"/\").pop()\n : variant.id;\n if (vId === itemVariantId || variant.id === itemVariantId)\n return true;\n }\n }\n if (item.handle && product.handle === item.handle) return true;\n }\n }\n\n if (items.type === \"SpecificCollections\" && items.collections) {\n for (const collection of items.collections) {\n if (item.handle && collection.products?.includes(item.handle))\n return true;\n }\n }\n\n return false;\n};\n\nexport const areAllBxgyProductCardsMet = (cart, bxgy) => {\n if (!bxgy?.productCards?.length || !cart?.items) return false;\n\n const globalRequirementType = bxgy.requirementType ?? \"QUANTITY\";\n\n for (const card of bxgy.productCards) {\n const requirementType = card.requirementType ?? globalRequirementType;\n let totalQuantity = 0;\n let totalSubtotal = 0;\n\n for (const item of cart.items) {\n if (isCartItemMatchingBxgyCard(item, card)) {\n // Check purchaseType on the card against the cart item\n const itemHasSellingPlan = Boolean(item.sellingPlanAllocation);\n if (card.purchaseType === \"SUBSCRIPTION\" && !itemHasSellingPlan) {\n continue;\n }\n if (card.purchaseType === \"ONE_TIME\" && itemHasSellingPlan) {\n continue;\n }\n\n totalQuantity += item.quantity || 0;\n totalSubtotal +=\n parseFloat(item.price?.amount || 0) * 100 * (item.quantity || 0);\n }\n }\n\n if (requirementType === \"SUBTOTAL\") {\n const required = card.minimumSubtotal?.cents || 0;\n if (required > 0 && totalSubtotal < required) return false;\n } else {\n const required = card.quantity || 0;\n if (required > 0 && totalQuantity < required) return false;\n }\n }\n\n return true;\n};\n\nexport const getDiscountForBxgyDiscount = ({\n targetDiscount,\n handle,\n variantId,\n selectedVariant,\n cart,\n}) => {\n const bxgy = targetDiscount.discountValue;\n if (!bxgy?.productCards || !bxgy?.customerGets) return 0;\n\n const customerGetsValueType = bxgy.customerGets.value?.type;\n\n if (\n customerGetsValueType === \"Gift\" ||\n customerGetsValueType === \"FixedPrice\"\n ) {\n return 0;\n }\n\n // Gets-card purchaseType gates the displayed price against the selected\n // purchase state (new payloads carry gets cards; legacy has plain items).\n const getsCards = getBxgyGetsCards(bxgy.customerGets);\n const selectedHasSellingPlan = Boolean(\n selectedVariant?.sellingPlanAllocation,\n );\n const matchesGetsPurchaseType = (card) => {\n if (card.purchaseType === \"SUBSCRIPTION\" && !selectedHasSellingPlan)\n return false;\n if (card.purchaseType === \"ONE_TIME\" && selectedHasSellingPlan)\n return false;\n return true;\n };\n\n const isEntitledToReceive = () => {\n if (bxgy.customerGets.applyToProductCardItems) {\n return bxgy.productCards.some((card) =>\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n }\n return getsCards.some(\n (card) =>\n matchesGetsPurchaseType(card) &&\n isProductMatchingBxgyCardItems(handle, variantId, card.items),\n );\n };\n\n if (!isEntitledToReceive()) return 0;\n\n // Check if this product matches a productCard with purchase type requirement\n // Look up the actual cart item to check if it has a subscription selected\n const matchingCartItem = (cart?.items || []).find(\n (item) => item.variantId?.toString() === variantId?.toString() || item.handle === handle\n );\n const cartItemHasSellingPlan = Boolean(matchingCartItem?.sellingPlanAllocation);\n\n for (const card of bxgy.productCards) {\n if (isProductMatchingBxgyCardItems(handle, variantId, card.items)) {\n if (card.purchaseType === \"SUBSCRIPTION\" && !cartItemHasSellingPlan) {\n return 0;\n } else if (card.purchaseType === \"ONE_TIME\" && cartItemHasSellingPlan) {\n return 0;\n }\n }\n }\n\n\n if (!areAllBxgyProductCardsMet(cart, bxgy)) return 0;\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount || 0);\n if (originalPrice <= 0) return 0;\n\n if (customerGetsValueType === \"DiscountPercentage\") {\n const percentage = bxgy.customerGets.value.percentage || 0;\n return originalPrice * (percentage / 100);\n } else if (customerGetsValueType === \"DiscountAmount\") {\n const cents = bxgy.customerGets.value.discountAmount?.cents || 0;\n return Math.min(cents / 100, originalPrice);\n }\n\n return 0;\n};\n\nexport const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n}) => {\n const handle = product?.handle;\n const variantId = getIdFromGid(selectedVariant?.id);\n\n if (!handle || !discount) return 0;\n\n if (discount.discountValue?.type === \"DiscountCodeBxgy\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"Gift\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"BxgyDiscount\") {\n return getDiscountForBxgyDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueProduct\") {\n return getDiscountForMultiValueProduct({\n targetDiscount: discount,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"DiscountMultiValueCollection\") {\n return getDiscountForMultiValueCollection({\n targetDiscount: discount,\n handle,\n selectedVariant,\n });\n }\n\n if (discount.discountValue?.type === \"TieredDiscount\") {\n return getDiscountForTierDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n return getDiscountForVolumeDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n });\n }\n\n if (discount.discountValue?.type === \"CollectionOrderDiscount\") {\n return 0;\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n log(\"getDiscountForMultiEffectTiers\");\n return getDiscountForMultiEffectTiers({\n targetDiscount: discount,\n handle,\n variantId,\n product,\n selectedVariant,\n cart,\n log,\n });\n }\n\n if (discount.discountValue?.type === \"ProductDiscount\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n if (discount.discountClass === \"ORDER\") {\n return 0;\n }\n if (discount.discountClass === \"SHIPPING\") {\n return 0;\n }\n\n if (discount.discountClass === \"PRODUCT\") {\n return getDiscountForProductDiscount({\n targetDiscount: discount,\n handle,\n variantId,\n selectedVariant,\n });\n }\n\n return 0;\n};\n\nexport const getBiggestDiscount = ({\n activePromotion,\n product,\n selectedVariant,\n cart,\n log,\n}) => {\n const discounts = Object.values(activePromotion?.discounts ?? []);\n log(\"Calculating biggest discount\", {\n discountCount: discounts.length,\n productId: product?.handle,\n collectionId: product?.sourceCollection?.handle,\n variantId: selectedVariant?.id,\n hasSellingPlan: !!selectedVariant?.sellingPlanAllocation,\n });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\n const hasSellingPlan = Boolean(selectedVariant?.sellingPlanAllocation);\n\n // For BXGY discounts, purchase type is checked PER CARD (card.purchaseType),\n // not at the top level. Skip top-level appliesOnSubscription/appliesOnOneTimePurchase.\n // For other discount types, still use the top-level flags — unless a\n // customer-gets purchaseType overrides them (checked per discount type below).\n if (discount.discountValue?.type !== \"BxgyDiscount\") {\n let appliesOnSubscription = discount.appliesOnSubscription;\n let appliesOnOneTimePurchase = discount.appliesOnOneTimePurchase;\n\n if (discount.discountValue?.type === \"VolumeDiscount\") {\n const customerGets = discount.discountValue.customerGets;\n const getsAppliesTo = customerGets?.appliesTo || \"ELIGIBLE_VARIANTS\";\n const getsPurchaseType =\n getsAppliesTo !== \"ELIGIBLE_VARIANTS\"\n ? customerGets?.purchaseType\n : undefined;\n if (getsPurchaseType) {\n appliesOnSubscription = getsPurchaseType !== \"ONE_TIME\";\n appliesOnOneTimePurchase = getsPurchaseType !== \"SUBSCRIPTION\";\n }\n }\n\n if (discount.discountValue?.type === \"MultiEffectTiers\") {\n // Entries with their own purchaseType filter themselves in\n // getDiscountForMultiEffectTiers; don't gate the whole discount here.\n const hasPerEntryPurchaseType = (\n discount.discountValue.tiers ?? []\n ).some((tier) =>\n (tier.discounts ?? []).some(\n (tierDiscount) =>\n tierDiscount.type === \"ProductDiscount\" &&\n (Array.isArray(tierDiscount.value)\n ? tierDiscount.value\n : []\n ).some((entry) => entry.purchaseType),\n ),\n );\n if (hasPerEntryPurchaseType) {\n appliesOnSubscription = true;\n appliesOnOneTimePurchase = true;\n }\n }\n\n if (appliesOnSubscription && !appliesOnOneTimePurchase) {\n if (!hasSellingPlan) {\n log(\"Skipping subscription-only discount (no subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n\n if (!appliesOnSubscription && appliesOnOneTimePurchase) {\n if (hasSellingPlan) {\n log(\"Skipping one-time-only discount (subscription selected)\", {\n discountType: discount.discountValue?.type,\n });\n return max;\n }\n }\n }\n\n const discountValue = getDiscountValueForDiscount({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n });\n log(\"Discount calculated\", {\n discountType: discount.discountValue?.type,\n discountValue,\n maxSoFar: max,\n appliesOnSubscription: discount.appliesOnSubscription,\n appliesOnOneTimePurchase: discount.appliesOnOneTimePurchase,\n hasSellingPlan,\n });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n};\n\nexport const parsePromotionIfActive = (promotionObject, now = new Date()) => {\n try {\n // Handle both object and string cases for backward compatibility\n const promotion =\n typeof promotionObject === \"string\"\n ? JSON.parse(promotionObject ?? \"{}\")\n : promotionObject;\n\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const startsAt = new Date(promotion.startsAt);\n const endsAt = promotion.endsAt ? new Date(promotion.endsAt) : null;\n\n if (\n (promotion.status === \"ACTIVE\" || promotion.status === \"SCHEDULED\") &&\n now >= startsAt &&\n (!endsAt || now <= endsAt)\n ) {\n return promotion;\n }\n\n return undefined;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return undefined;\n }\n};\n","import {\n getBiggestDiscount,\n parsePromotionIfActive,\n getIdFromGid,\n productGidFromId,\n} from \"./discounts.js\";\n\n// Prints log() lines (including the discount math's) to the console, read on a device over WebView\n// remote debugging. Consecutive identical lines are dropped: some fire on every render.\nconst CONSOLE_LOGS = true;\nlet lastConsoleLine = \"\";\nconst consoleLog = (message, data) => {\n if (!CONSOLE_LOGS) return;\n let json = \"\";\n if (data != null) {\n try {\n json = ` ${JSON.stringify(data)}`;\n } catch {\n json = ` ${String(data)}`;\n }\n }\n const line = `[Abra useAbra] ${message}${json}`;\n if (line === lastConsoleLine) return;\n lastConsoleLine = line;\n console.log(line);\n};\n\nexport default function useAbra({ React, useTapcart, tapcartData }) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(undefined);\n const renderCountRef = React.useRef(0);\n const logRef = React.useRef([]);\n const variables = Tapcart?.variables;\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable GraphQL fragment and functions\n const PRODUCT_FRAGMENT = React.useMemo(\n () => `\n id\n handle\n variants(first: 100) {\n edges {\n node {\n id\n handle: title\n price {\n amount\n currencyCode\n }\n }\n }\n }\n `,\n [],\n );\n\n const generateProductsQuery = React.useCallback(\n (ids, country) => {\n const productQueries = ids\n .map(\n (id, index) =>\n `product_${index}: product(id: \"${productGidFromId(id)}\") {\n ${PRODUCT_FRAGMENT}\n }`,\n )\n .join(\"\\n \");\n\n const inContextDirective = country\n ? `@inContext(country: ${country})`\n : \"\";\n\n return `\n query Products ${inContextDirective} {\n ${productQueries}\n }\n `;\n },\n [PRODUCT_FRAGMENT],\n );\n\n const graphqlDefaultBody = React.useCallback(\n (query, variables, storeFrontAccessToken) => {\n return {\n async: true,\n crossDomain: true,\n method: \"POST\",\n headers: {\n \"X-Shopify-Storefront-Access-Token\": storeFrontAccessToken,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n query,\n variables,\n }),\n };\n },\n [],\n );\n\n const fetchProducts = React.useCallback(\n async (ids, storeUrl, storeFrontAccessToken, country) => {\n if (!storeUrl || !storeFrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n if (!ids || ids.length === 0) {\n return { data: [], error: \"No ids\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const query = generateProductsQuery(ids, country);\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(query, {}, storeFrontAccessToken),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const data = responseBody?.data;\n\n if (!data) {\n return { data: [], error: \"No data\" };\n }\n\n const products = Object.values(data).filter((item) => item !== null);\n\n return {\n data: products,\n error: null,\n };\n }\n\n const error = await response.text();\n return { data: [], error: error };\n } catch (err) {\n return { data: [], error: err.message };\n }\n },\n [generateProductsQuery, graphqlDefaultBody],\n );\n\n const useProductsCustom = React.useCallback(\n ({ ids, storeUrl, storeFrontAccessToken, country }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Memoize ids to prevent infinite loops\n const idsString = React.useMemo(() => {\n if (!ids || !Array.isArray(ids) || ids.length === 0) return \"\";\n return [...ids].sort().join(\",\");\n }, [ids ? JSON.stringify([...ids].sort()) : \"\"]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!storeUrl || !storeFrontAccessToken) {\n if (!storeUrl) {\n setError(\"no store url\");\n }\n if (!storeFrontAccessToken) {\n setError(\"no store front access token\");\n }\n setProducts([]);\n setLoading(false);\n return;\n }\n\n if (!ids || ids.length === 0) {\n setProducts([]);\n setLoading(false);\n return;\n }\n\n const result = await fetchProducts(\n ids,\n storeUrl,\n storeFrontAccessToken,\n country,\n );\n\n try {\n if (result.data && result.data.length > 0) {\n const formattedProducts = result?.data?.map((product) => ({\n id: getIdFromGid(product.id),\n handle: product?.handle,\n variants: product?.variants?.edges?.map((variant) => ({\n id: getIdFromGid(variant?.node?.id),\n handle: variant?.node?.handle,\n price: variant?.node?.price,\n })),\n }));\n setProducts(formattedProducts);\n setError(result.error);\n } else {\n setProducts([]);\n setError(result.error);\n }\n } catch (error) {\n setError(error.message);\n }\n\n setLoading(false);\n };\n\n fetchData();\n }, [idsString, storeUrl, storeFrontAccessToken, country, fetchProducts]);\n\n return { products, loading, error };\n },\n [fetchProducts],\n );\n\n // Stable logging function that doesn't cause re-renders\n const log = React.useCallback((message, data = null) => {\n consoleLog(message, data);\n const timestamp = new Date().toISOString();\n const logEntry = {\n timestamp,\n message,\n data: data ? JSON.parse(JSON.stringify(data)) : null,\n renderCount: renderCountRef.current,\n };\n logRef.current.push(logEntry);\n\n // Keep only last 50 logs to prevent memory issues\n if (logRef.current.length > 100) {\n logRef.current = logRef.current.slice(-100);\n }\n }, []);\n\n // Create stable cart items reference to prevent infinite recreations\n const stableCartItems = React.useMemo(() => {\n const currentCartItems = variables?.cart?.items ?? [];\n\n if (!currentCartItems || currentCartItems.length === 0) {\n return [];\n }\n\n const mappedItems = currentCartItems.map((item) => ({\n productId: item.productId,\n variantId: item.variantId,\n quantity: item.quantity,\n sellingPlanAllocation: item.sellingPlanAllocation,\n }));\n\n return mappedItems;\n }, [\n (variables?.cart?.items || [])\n ?.map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n const ids = React.useMemo(\n () => (stableCartItems ?? []).map((item) => item.productId),\n [stableCartItems],\n );\n\n // Get country from cart currency or tapcartData\n const country = React.useMemo(() => {\n return (\n Tapcart?.variables?.cart?.currency?.slice(0, 2) || tapcartData?.country\n );\n }, [Tapcart?.variables?.cart?.currency, tapcartData?.country]);\n\n const {\n products: cartItems,\n loading: cartItemsLoading,\n error: cartItemsError,\n } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n country: country,\n });\n\n // Render limiter to prevent infinite recreations\n renderCountRef.current += 1;\n\n // Create stable cart reference to prevent infinite recreations\n const stableCart = React.useMemo(() => {\n if (!variables?.cart) {\n return null;\n }\n if (cartItemsLoading || cartItemsError) {\n return variables.cart;\n }\n\n if (!cartItems || cartItems.length === 0) {\n return variables.cart;\n }\n\n const processedItems = (stableCartItems || []).map((item) => {\n const _cartItem = cartItems?.find(\n (cartItem) => getIdFromGid(cartItem?.id) === item.productId,\n );\n if (!_cartItem) {\n return item;\n }\n const _variant = _cartItem?.variants?.find(\n (variant) => getIdFromGid(variant?.id) === item?.variantId,\n );\n if (!_variant) {\n return item;\n }\n\n const processedItem = {\n ...item,\n handle: _cartItem?.handle,\n price: _variant?.price,\n };\n\n return processedItem;\n });\n\n const result = {\n ...variables.cart,\n items: processedItems,\n };\n\n return result;\n }, [\n cartItems,\n cartItemsLoading,\n cartItemsError,\n (variables?.cart?.items || [])\n ?.map((item) => `${item.variantId}-${item.quantity}`)\n ?.join(\",\"),\n ]);\n\n // Effect: Initialize from storage and observe changes\n React.useEffect(() => {\n const storage = Tapcart?.variables?.storage || {};\n const abraData = storage[\"abra\"] || {};\n const storedPromotion = parsePromotionIfActive(\n abraData[\"active-promotion\"],\n );\n\n log(\"Storage promotion retrieved\", { storedPromotion });\n\n // Only update activePromotion if the promotion has actually changed\n if (\n storedPromotion?.title &&\n JSON.stringify(activePromotion) !== JSON.stringify(storedPromotion)\n ) {\n setActivePromotion(storedPromotion);\n } else if (!storedPromotion?.title && activePromotion) {\n // Clear promotion if it was removed from storage\n setActivePromotion(undefined);\n }\n }, [Tapcart?.variables?.storage?.[\"abra\"]?.[\"active-promotion\"]]);\n\n let getProductWithDiscount = React.useCallback(\n (product) => {\n if (!activePromotion || !activePromotion.title || !product) {\n log(\"No active promotion or product, returning original product\", {\n hasActivePromotion: !!activePromotion,\n hasProduct: !!product,\n });\n return product;\n }\n\n const _product = JSON.parse(JSON.stringify(product));\n let currencyCode = undefined;\n const variants = _product.variants.map((variant) => {\n const selectedVariant = JSON.parse(JSON.stringify(variant));\n currencyCode = currencyCode || selectedVariant?.price?.currencyCode;\n let biggestDiscount = 0;\n try {\n biggestDiscount = getBiggestDiscount({\n activePromotion,\n product: _product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n } catch (error) {\n log(\"Error calculating discount\", {\n error: error.message,\n variantId: selectedVariant?.id,\n });\n biggestDiscount = 0;\n }\n\n const originalPrice = parseFloat(selectedVariant?.price?.amount ?? 0);\n const compareAtPrice = parseFloat(\n selectedVariant?.compareAtPrice?.amount ?? 0,\n );\n\n let referencePrice = originalPrice;\n if (compareAtPrice) {\n referencePrice = Math.max(originalPrice, compareAtPrice ?? 0);\n }\n\n let discountedPrice = Math.max(originalPrice - biggestDiscount, 0);\n\n selectedVariant.price = {\n amount: discountedPrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n selectedVariant.compareAtPrice = {\n amount: referencePrice,\n currencyCode: selectedVariant.price.currencyCode,\n };\n return selectedVariant;\n });\n _product.variants = variants;\n currencyCode = currencyCode || \"USD\";\n _product.compareAtPriceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(\n max,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, 0),\n currencyCode: currencyCode,\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(\n min,\n parseFloat(variant.compareAtPrice.amount ?? variant.price.amount),\n );\n }, Infinity),\n currencyCode: currencyCode,\n },\n };\n _product.priceRange = {\n maxVariantPrice: {\n amount: variants.reduce((max, variant) => {\n return Math.max(max, parseFloat(variant.price.amount));\n }, 0),\n currencyCode: currencyCode || \"USD\",\n },\n minVariantPrice: {\n amount: variants.reduce((min, variant) => {\n return Math.min(min, parseFloat(variant.price.amount));\n }, Infinity),\n currencyCode: currencyCode || \"USD\",\n },\n };\n _product.abra = true;\n\n return _product;\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n // Discounted price for a single price point (e.g. a selling-plan option in a\n // subscription selector). hasSellingPlan forces the subscription vs one-time\n // price branch regardless of what the variant carries.\n const getDiscountedPrice = React.useCallback(\n (product, variant, price, hasSellingPlan = false) => {\n const basePrice = parseFloat(price ?? variant?.price?.amount ?? 0);\n if (!activePromotion || !activePromotion.title || !product || !variant) {\n return basePrice;\n }\n\n const selectedVariant = {\n ...variant,\n price: {\n amount: basePrice,\n currencyCode: variant?.price?.currencyCode,\n },\n sellingPlanAllocation: hasSellingPlan\n ? (variant?.sellingPlanAllocation ?? { sellingPlan: {} })\n : null,\n };\n\n try {\n const biggestDiscount = getBiggestDiscount({\n activePromotion,\n product,\n selectedVariant,\n cart: stableCart,\n log,\n });\n return Math.max(basePrice - biggestDiscount, 0);\n } catch (error) {\n log(\"Error calculating discounted price\", {\n error: error.message,\n variantId: variant?.id,\n });\n return basePrice;\n }\n },\n [\n activePromotion?.title,\n activePromotion?.discounts?.map((discount) => discount.title).join(\",\"),\n stableCart,\n ],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n getDiscountedPrice,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount, getDiscountedPrice],\n );\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abra-promotions/webhooks-for-tapcart",
3
- "version": "2.0.0-beta.1",
3
+ "version": "2.0.0-beta.2",
4
4
  "type": "module",
5
5
  "description": "Abra webhooks for enabling abra promotions inside the Tapcart platform",
6
6
  "main": "dist/index.cjs",