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

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.
@@ -1173,13 +1173,13 @@ function useAbra({ React, useTapcart, tapcartData }) {
1173
1173
  );
1174
1174
 
1175
1175
  const graphqlDefaultBody = React.useCallback(
1176
- (query, variables, storefrontAccessToken) => {
1176
+ (query, variables, storeFrontAccessToken) => {
1177
1177
  return {
1178
1178
  async: true,
1179
1179
  crossDomain: true,
1180
1180
  method: "POST",
1181
1181
  headers: {
1182
- "X-Shopify-Storefront-Access-Token": storefrontAccessToken,
1182
+ "X-Shopify-Storefront-Access-Token": storeFrontAccessToken,
1183
1183
  "Content-Type": "application/json",
1184
1184
  },
1185
1185
  body: JSON.stringify({
@@ -1192,8 +1192,8 @@ function useAbra({ React, useTapcart, tapcartData }) {
1192
1192
  );
1193
1193
 
1194
1194
  const fetchProducts = React.useCallback(
1195
- async (ids, storeUrl, storefrontAccessToken, country) => {
1196
- if (!storeUrl || !storefrontAccessToken) {
1195
+ async (ids, storeUrl, storeFrontAccessToken, country) => {
1196
+ if (!storeUrl || !storeFrontAccessToken) {
1197
1197
  return { error: "Missing required configuration" };
1198
1198
  }
1199
1199
 
@@ -1207,7 +1207,7 @@ function useAbra({ React, useTapcart, tapcartData }) {
1207
1207
  try {
1208
1208
  const response = await fetch(
1209
1209
  GRAPHQL_URL,
1210
- graphqlDefaultBody(query, {}, storefrontAccessToken),
1210
+ graphqlDefaultBody(query, {}, storeFrontAccessToken),
1211
1211
  );
1212
1212
 
1213
1213
  if (response?.ok) {
@@ -1604,4 +1604,4 @@ function useAbra({ React, useTapcart, tapcartData }) {
1604
1604
  }
1605
1605
 
1606
1606
  exports.useAbra = useAbra;
1607
- //# sourceMappingURL=index.js.map
1607
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +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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"}
package/dist/index.esm.js CHANGED
@@ -1171,13 +1171,13 @@ function useAbra({ React, useTapcart, tapcartData }) {
1171
1171
  );
1172
1172
 
1173
1173
  const graphqlDefaultBody = React.useCallback(
1174
- (query, variables, storefrontAccessToken) => {
1174
+ (query, variables, storeFrontAccessToken) => {
1175
1175
  return {
1176
1176
  async: true,
1177
1177
  crossDomain: true,
1178
1178
  method: "POST",
1179
1179
  headers: {
1180
- "X-Shopify-Storefront-Access-Token": storefrontAccessToken,
1180
+ "X-Shopify-Storefront-Access-Token": storeFrontAccessToken,
1181
1181
  "Content-Type": "application/json",
1182
1182
  },
1183
1183
  body: JSON.stringify({
@@ -1190,8 +1190,8 @@ function useAbra({ React, useTapcart, tapcartData }) {
1190
1190
  );
1191
1191
 
1192
1192
  const fetchProducts = React.useCallback(
1193
- async (ids, storeUrl, storefrontAccessToken, country) => {
1194
- if (!storeUrl || !storefrontAccessToken) {
1193
+ async (ids, storeUrl, storeFrontAccessToken, country) => {
1194
+ if (!storeUrl || !storeFrontAccessToken) {
1195
1195
  return { error: "Missing required configuration" };
1196
1196
  }
1197
1197
 
@@ -1205,7 +1205,7 @@ function useAbra({ React, useTapcart, tapcartData }) {
1205
1205
  try {
1206
1206
  const response = await fetch(
1207
1207
  GRAPHQL_URL,
1208
- graphqlDefaultBody(query, {}, storefrontAccessToken),
1208
+ graphqlDefaultBody(query, {}, storeFrontAccessToken),
1209
1209
  );
1210
1210
 
1211
1211
  if (response?.ok) {
@@ -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\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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"}
package/package.json CHANGED
@@ -1,11 +1,22 @@
1
1
  {
2
2
  "name": "@abra-promotions/webhooks-for-tapcart",
3
- "version": "2.0.0-beta.0",
3
+ "version": "2.0.0-beta.1",
4
4
  "type": "module",
5
5
  "description": "Abra webhooks for enabling abra promotions inside the Tapcart platform",
6
- "main": "dist/index.js",
6
+ "main": "dist/index.cjs",
7
7
  "module": "dist/index.esm.js",
8
8
  "types": "dist/index.d.ts",
9
+ "react-native": "dist/index.esm.js",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "react-native": "./dist/index.esm.js",
14
+ "import": "./dist/index.esm.js",
15
+ "require": "./dist/index.cjs",
16
+ "default": "./dist/index.esm.js"
17
+ },
18
+ "./package.json": "./package.json"
19
+ },
9
20
  "files": [
10
21
  "dist"
11
22
  ],
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.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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"}