@abra-promotions/webhooks-for-tapcart 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/useAbra.js","../src/useAbraActivate.js","../src/useAbraCart.js"],"sourcesContent":["import React from \"react\";\nimport { getIdFromGid, productGidFromId } from \"@tapcart/mobile-components\";\n\nexport default function useAbra({ 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 actions = Tapcart.actions;\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) => {\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 return `\n query Products {\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) => {\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);\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 }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\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 );\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 }, [ids, storeUrl, storeFrontAccessToken, 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 > 50) {\n logRef.current = logRef.current.slice(-50);\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 }));\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 const { products: cartItems } = useProductsCustom({\n ids,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\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\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 }, [stableCartItems, cartItems]);\n\n 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\n 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\n 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\n 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 item.sellingPlanAllocation; //TODO Verify correct structure of selling plan\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation?.name;\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\n 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 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 item.sellingPlanAllocation; //TODO Verify correct structure of selling plan\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation?.name;\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\n 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 item.sellingPlanAllocation; //TODO Verify correct structure of selling plan\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation?.name;\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 const eligibleProductDiscounts = productDiscountsAvailableOnTier.filter(\n (discount) => isProductEntitledToDiscount(discount),\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\n const getDiscountValueForDiscount = ({\n product,\n selectedVariant,\n cart,\n discount,\n log,\n }) => {\n log(\"getDiscountValueForDiscount\");\n const handle = product?.handle;\n log(\"handle\", { handle });\n log(\"crudeva\", { selectedVariant });\n const variantId = getIdFromGid(selectedVariant?.id);\n log(\"variantId\", { variantId });\n\n if (!handle || !discount) return 0;\n log(\"handle and discount exist\");\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 === \"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\n const getBiggestDiscount = ({ product, selectedVariant, cart, log }) => {\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 });\n\n const biggestDiscount = discounts.reduce((max, discount) => {\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 });\n return Math.max(max, discountValue);\n }, 0);\n\n log(\"Final biggest discount\", { biggestDiscount });\n return biggestDiscount;\n };\n\n const parsePromotionIfActive = (vaultActivePromotion) => {\n let promotion = JSON.parse(vaultActivePromotion ?? \"{}\");\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const now = new Date();\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 };\n\n React.useEffect(() => {\n async function initializeVault() {\n try {\n if (!actions?.vault) return;\n\n log(\"Initializing vault\");\n const vault = await actions.vault.initialize(\"abra\", \"global\");\n const vaultActivePromotion = await vault.get(\"active-promotion\");\n log(\"Vault initialized, active promotion retrieved\", {\n vaultActivePromotion,\n });\n setActivePromotion(parsePromotionIfActive(vaultActivePromotion));\n\n vault.observe(\n \"active-promotion\",\n (newPromotionValue) => {\n log(\"Vault promotion changed\", { newPromotionValue });\n setActivePromotion(parsePromotionIfActive(newPromotionValue));\n },\n (error) => {\n log(\"Vault observe error\", { error: error.message });\n },\n );\n } catch (error) {\n log(\"Vault initialization error\", { error: error.message });\n }\n }\n initializeVault();\n }, [actions?.vault]);\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 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 [activePromotion?.title, stableCart],\n );\n\n return React.useMemo(\n () => ({\n abra: {\n activePromotion,\n getProductWithDiscount,\n logs: logRef.current,\n },\n }),\n [activePromotion, getProductWithDiscount],\n );\n}\n","import React, { useState, useEffect } from \"react\";\n\nconst SHOP_METAFIELD_QUERY = `\n query ShopMetafield($namespace: String!, $key: String!) {\n shop {\n metafield(namespace: $namespace, key: $key) {\n id\n key\n namespace\n updatedAt\n value\n }\n }\n }\n`;\n\nconst SHOP_METAFIELDS_QUERY = `\n query ShopMetafields($identifiers: [HasMetafieldsIdentifier!]!) {\n shop {\n metafields(identifiers: $identifiers) {\n id\n key\n namespace\n updatedAt\n value\n }\n }\n }\n`;\n\nconst graphqlDefaultBody = (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\nconst fetchShopPromotionMetafield = async (\n key,\n storeUrl,\n storefrontAccessToken,\n) => {\n if (!storeUrl || !storefrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n\n try {\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(\n SHOP_METAFIELD_QUERY,\n { namespace: `$app:tapcart-promotions`, key },\n storefrontAccessToken,\n ),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const metafieldValue = responseBody?.data?.shop?.metafield?.value;\n\n if (!metafieldValue) {\n return { error: \"Metafield value not found\" };\n }\n\n try {\n return { data: JSON.parse(metafieldValue) };\n } catch (parseError) {\n return {\n error: `Failed to parse metafield value: ${parseError.message}`,\n };\n }\n }\n\n const error = await response.text();\n return { error };\n } catch (err) {\n return { error: err.message };\n }\n};\n\nconst fetchShopDiscountMetafields = async (\n keys,\n storeUrl,\n storefrontAccessToken,\n) => {\n if (!storeUrl || !storefrontAccessToken) {\n return { error: \"Missing required configuration\" };\n }\n\n const GRAPHQL_URL = `https://${storeUrl}/api/2024-04/graphql.json`;\n const namespace = `$app:discounts`;\n try {\n const identifiers = keys.map((key) => ({ namespace, key }));\n const response = await fetch(\n GRAPHQL_URL,\n graphqlDefaultBody(\n SHOP_METAFIELDS_QUERY,\n { identifiers },\n storefrontAccessToken,\n ),\n );\n\n if (response?.ok) {\n const responseBody = await response.json();\n const metafields = responseBody?.data?.shop?.metafields;\n\n if (!metafields || !Array.isArray(metafields)) {\n return { error: \"Metafields not found or invalid format\" };\n }\n\n try {\n const parsedMetafields = metafields.map((metafield) => {\n if (!metafield?.value) {\n throw new Error(\n `Metafield ${metafield?.key || \"unknown\"} has no value`,\n );\n }\n return JSON.parse(metafield.value);\n });\n return { data: parsedMetafields };\n } catch (parseError) {\n return { error: `Failed to parse metafields: ${parseError.message}` };\n }\n }\n\n const error = await response.text();\n return { error };\n } catch (err) {\n return { error: err.message };\n }\n};\n\nconst usePromotion = (key, storeUrl, storefrontAccessToken) => {\n const [promotion, setPromotion] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n const fetchData = async () => {\n const result = await fetchShopPromotionMetafield(\n key,\n storeUrl,\n storefrontAccessToken,\n );\n\n if (result.data) {\n const metafieldData = result.data;\n\n if (\n metafieldData?.discountCodes &&\n Array.isArray(metafieldData.discountCodes)\n ) {\n const metafieldsResult = await fetchShopDiscountMetafields(\n metafieldData.discountCodes,\n storeUrl,\n storefrontAccessToken,\n );\n\n if (metafieldsResult.error) {\n setError(metafieldsResult.error);\n } else {\n // Combine first metafield with additional metafields array\n const combinedResponse = {\n ...metafieldData,\n new: true,\n discounts: metafieldsResult.data || [],\n };\n\n setPromotion(combinedResponse);\n setError(null);\n }\n } else if (\n !metafieldData?.discountCodes &&\n metafieldData?.discounts &&\n !Array.isArray(metafieldData?.discounts)\n ) {\n const newPromotion = {\n ...metafieldData,\n new: true,\n discounts: Object.values(metafieldData?.discounts || {}),\n };\n setPromotion(newPromotion);\n setError(null);\n }\n } else {\n setError(result.error);\n setPromotion(result.data);\n setError(result.error);\n }\n\n setLoading(false);\n };\n\n if (!key) {\n setPromotion(null);\n setLoading(false);\n return;\n }\n\n if (!storeUrl || !storefrontAccessToken) {\n setPromotion(null);\n setLoading(false);\n setError(\"Missing integration configuration\");\n return;\n }\n\n fetchData();\n }, [key, storeUrl, storefrontAccessToken]);\n\n return { promotion, loading, error };\n};\n\n// Helper functions for promotion logic\nconst parsePromotionIfActive = (promotionString) => {\n try {\n const promotion = JSON.parse(promotionString ?? \"{}\");\n if (\n !promotion ||\n !promotion.startsAt ||\n !promotion.status ||\n !promotion.title ||\n promotion.status === \"DRAFT\"\n ) {\n return null;\n }\n return promotion;\n } catch (error) {\n console.error(\"Failed to parse promotion:\", error);\n return null;\n }\n};\n\nconst shouldSkipPromotion = (vaultPromotion, nextPromotion) => {\n return (\n vaultPromotion &&\n vaultPromotion.title === nextPromotion?.title &&\n JSON.stringify(vaultPromotion) === JSON.stringify(nextPromotion)\n );\n};\n\nconst isDeviceAllowed = (deviceId, allowedTestDevices) => {\n if (!allowedTestDevices) return true;\n return allowedTestDevices.includes(deviceId);\n};\n\nexport default function useAbraActivate({\n useTapcart,\n tapcartData,\n discountCode = \"PUBLIC\",\n allowedTestDevices = undefined,\n displayToast = false,\n redirectPath = undefined,\n testDeviceId = null,\n testPromotionCode = null,\n}) {\n const Tapcart = useTapcart();\n const actions = Tapcart?.actions;\n const [currentCode, setCurrentCode] = useState(null);\n const [currentPromotion, setCurrentPromotion] = useState(null);\n\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n const { promotion, error: promotionError } = usePromotion(\n currentCode,\n storeUrl,\n storeFrontAccessToken,\n );\n\n const loadPromotion = React.useCallback(\n async (promotion) => {\n try {\n if (!promotion || !promotion.title) {\n return;\n }\n const vault = await Tapcart?.actions?.vault?.initialize(\n \"abra\",\n \"global\",\n );\n const vaultPromotionString = await vault.get(\"active-promotion\");\n const vaultPromotion = parsePromotionIfActive(vaultPromotionString);\n const nextPromotion = promotion;\n\n if (shouldSkipPromotion(vaultPromotion, nextPromotion)) {\n return;\n }\n\n if (!nextPromotion?.title) {\n return;\n }\n\n await vault.set(\"active-promotion\", JSON.stringify(nextPromotion));\n\n setCurrentCode(null);\n setCurrentPromotion(nextPromotion);\n\n if (displayToast) {\n await actions.showToast({\n message: `Activated ${nextPromotion.title}`,\n type: \"success\",\n });\n }\n\n if (redirectPath) {\n await actions.openScreen({\n destination: { type: \"internal\", url: redirectPath },\n });\n }\n } catch (error) {\n console.error(\"Failed to load promotion:\", error);\n if (displayToast) {\n await actions.showToast({\n message: error.message,\n type: \"error\",\n });\n }\n }\n },\n [displayToast, redirectPath],\n );\n\n // Store latest callback values in refs to avoid dependency issues\n const callbacksRef = React.useRef({\n loadPromotion,\n });\n\n // Update refs with latest callbacks\n React.useEffect(() => {\n callbacksRef.current = {\n loadPromotion,\n };\n }, [loadPromotion]);\n\n React.useEffect(() => {\n const loadDiscountCode = async () => {\n if (!Tapcart?.variables?.device?.id || !Tapcart?.variables?.session?.id)\n return;\n const vault = await Tapcart?.actions?.vault?.initialize(\"abra\", \"global\");\n const previousSessionId = await vault.get(\"session-id\");\n\n if (previousSessionId !== Tapcart?.variables?.session?.id) {\n await Promise.allSettled([\n vault.remove(\"active-promotion\"),\n vault.remove(\"abra-latest-discount-code\"),\n vault.remove(\"session-id\"),\n ]);\n }\n await Promise.allSettled([\n vault.set(\"session-id\", Tapcart.variables.session.id),\n vault.set(\"storefront-access-token\", storeFrontAccessToken ?? \"\"),\n vault.set(\n \"shopify-api-graphql-url\",\n storeUrl ? `https://${storeUrl}/api/2024-04/graphql.json` : \"\",\n ),\n ]);\n\n if (\n !isDeviceAllowed(Tapcart?.variables?.device?.id, allowedTestDevices)\n ) {\n if (currentCode !== undefined) {\n setCurrentCode(undefined);\n return;\n }\n }\n\n if (Tapcart?.variables?.device?.id === testDeviceId) {\n if (currentCode !== testPromotionCode) {\n setCurrentCode(testPromotionCode);\n return;\n }\n }\n\n if (discountCode && currentCode !== discountCode) {\n setCurrentCode(discountCode);\n return;\n }\n };\n\n if (!Tapcart?.variables?.device?.id || !Tapcart?.variables?.session?.id)\n return;\n loadDiscountCode();\n }, [\n Tapcart?.variables?.device?.id,\n Tapcart?.variables?.session?.id,\n storeFrontAccessToken,\n storeUrl,\n discountCode,\n testDeviceId,\n testPromotionCode,\n ]);\n\n useEffect(() => {\n callbacksRef.current.loadPromotion(promotion);\n }, [promotion]);\n\n return { promotion: currentPromotion, error: promotionError };\n}\n","import * as React from \"react\";\nimport { getIdFromGid, productGidFromId } from \"@tapcart/mobile-components\";\n\nconst PRODUCT_FRAGMENT = `\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\nconst generateProductsQuery = (ids) => {\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 return `\n query Products {\n ${productQueries}\n }\n `;\n};\n\nconst graphqlDefaultBody = (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\nconst fetchProducts = async (ids, storeUrl, storefrontAccessToken) => {\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);\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\nconst useProducts = ({ ids, storeUrl, storeFrontAccessToken }) => {\n const [products, setProducts] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [error, setError] = React.useState(null);\n\n // Create stable IDs string to prevent unnecessary refetches\n const idsString = React.useMemo(() => {\n return ids?.sort().join(\",\") || \"\";\n }, [ids]);\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!ids || ids.length === 0 || !storeUrl || !storeFrontAccessToken) {\n if (ids.length === 0) {\n setError(\"no ids\");\n }\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 const result = await fetchProducts(ids, storeUrl, storeFrontAccessToken);\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]);\n\n return { products, loading, error };\n};\n\nconst enrichCartItems = (cartItems, productsDetails) => {\n return cartItems.map((lineItem) => {\n const product = productsDetails.find(\n (p) => getIdFromGid(p?.id) === lineItem.productId,\n );\n const variant = product?.variants?.find(\n (v) => getIdFromGid(v?.id) === lineItem.variantId,\n );\n return {\n ...lineItem,\n productDetails: {\n handle: product?.handle,\n },\n variantDetails: variant,\n };\n });\n};\n\nconst useCartWithPrices = ({ Tapcart, tapcartData }) => {\n const tapcartCart = Tapcart?.variables?.cart;\n const [cart, setCart] = React.useState(null);\n\n // Use ref to track previous signature and avoid infinite recalculations\n const previousSignatureRef = React.useRef(null);\n const [stableCartData, setStableCartData] = React.useState(null);\n\n const createCartSignatureString = (_cart) => {\n const items = (_cart?.items || [])\n .map((item) => `${item.productId}-${item.variantId}-${item.quantity}`)\n .sort()\n .join(\",\");\n\n const discounts = (_cart?.discounts || []).join(\",\");\n const attributes = JSON.stringify(_cart?.attributes || {});\n\n return `${items}|${discounts}|${attributes}`;\n };\n const currentSignatureString = createCartSignatureString(tapcartCart);\n\n // Calculate new signature only when content actually changes\n React.useEffect(() => {\n if (!tapcartCart) {\n if (previousSignatureRef.current !== null) {\n previousSignatureRef.current = null;\n }\n return;\n }\n\n // Always update on first render or when signature actually changed\n if (\n previousSignatureRef.current === null ||\n previousSignatureRef.current !== currentSignatureString\n ) {\n setStableCartData(tapcartCart);\n previousSignatureRef.current = currentSignatureString;\n }\n }, [currentSignatureString]);\n\n const { storeFrontAccessToken, storeUrl } =\n tapcartData?.integrations?.find((x) => x.name === \"abra-promotions\") ?? {};\n\n // Stable product IDs that only change when cart items change\n const productIds = React.useMemo(\n () => stableCartData?.items?.map((item) => item.productId) ?? [],\n [stableCartData?.items],\n );\n\n const { products, error, loading } = useProducts({\n ids: productIds,\n storeUrl: storeUrl,\n storeFrontAccessToken: storeFrontAccessToken,\n });\n\n // Update cart with enriched items only when products or cart changes\n React.useEffect(() => {\n if (!stableCartData) {\n setCart(null);\n return;\n }\n\n if (error || products?.length === 0) {\n setCart(null);\n return;\n }\n\n const enrichedCart = {\n ...stableCartData,\n items: enrichCartItems(stableCartData.items ?? [], products),\n };\n\n setCart(enrichedCart);\n }, [products, stableCartData, error, loading]);\n\n return { cart, error };\n};\n\nfunction itemWitchCorrectEntitledQuantityToGiveDiscount(\n item,\n discount,\n quantitiOfItemsIgnored = 0,\n giftsInCart = [],\n) {\n const itemCopy = { ...item };\n if (!discount || !discount.entitled) {\n itemCopy.quantity = 0;\n return itemCopy;\n }\n\n if (giftsInCart.some((gift) => gift.variantId === item.variantDetails.id)) {\n itemCopy.quantity =\n itemCopy.quantity -\n giftsInCart.find((gift) => gift.variantId === item.variantDetails.id)\n .quantity;\n return itemCopy;\n }\n\n let quantityIgnored = 0;\n if (discount.discountValue?.type === \"BXGY\") {\n if (\n discount.discountValue.customerGets.value.quantity >\n quantitiOfItemsIgnored\n ) {\n const quantityLeftToIgnore =\n discount.discountValue.customerGets.value.quantity -\n quantitiOfItemsIgnored;\n const isItemToIgnore =\n discount.discountValue.customerGets.items.products.includes(\n item.productDetails.handle,\n );\n\n const quantityToIgnore = Math.min(\n isItemToIgnore ? quantityLeftToIgnore : 0,\n itemCopy.quantity,\n );\n itemCopy.quantity = itemCopy.quantity - quantityToIgnore;\n quantityIgnored = quantityToIgnore;\n }\n }\n\n let entitledOnItem = false;\n\n let listOfEligibleItems = {};\n if (discount.discountValue?.type === \"BXGY\") {\n listOfEligibleItems = discount.discountValue.customerBuys.items;\n } else {\n listOfEligibleItems = discount.entitled;\n }\n\n if (listOfEligibleItems.all) {\n entitledOnItem = true;\n }\n\n if (listOfEligibleItems.variants) {\n if (\n listOfEligibleItems.variants?.includes(\n getIdFromGid(item.variantDetails.id),\n )\n ) {\n entitledOnItem = true;\n }\n }\n\n if (listOfEligibleItems.products) {\n if (listOfEligibleItems.products?.includes(item.productDetails.handle)) {\n entitledOnItem = true;\n }\n }\n\n if (discount.discountValue?.productDiscounts) {\n const entitledProducts = discount?.discountValue?.productDiscounts\n ?.map((discount) => discount.products)\n .flat();\n\n if (\n entitledProducts &&\n entitledProducts.length > 0 &&\n entitledProducts.includes(item.productDetails.handle)\n ) {\n entitledOnItem = true;\n } else if (\n entitledProducts &&\n entitledProducts.length > 0 &&\n !entitledProducts.includes(item.productDetails.handle)\n ) {\n entitledOnItem = false;\n }\n }\n\n if (discount.discountValue?.variantDiscounts) {\n const entitledVariants = discount?.discountValue?.variantDiscounts\n ?.map((discount) => discount.variants)\n .flat();\n\n if (\n entitledVariants &&\n entitledVariants.length > 0 &&\n entitledVariants.includes(getIdFromGid(item.variantDetails.id))\n ) {\n entitledOnItem = true;\n } else if (\n entitledVariants &&\n entitledVariants.length > 0 &&\n !entitledVariants.includes(getIdFromGid(item.variantDetails.id))\n ) {\n entitledOnItem = false;\n }\n }\n\n if (!entitledOnItem) {\n itemCopy.quantity = 0;\n }\n\n return { item: itemCopy, quantity: quantityIgnored };\n}\n\nfunction getAmountPrerequisiteValid(\n prerequisite,\n entitledQuantity,\n entitledTotal,\n) {\n if (\n !prerequisite?.minimumRequirement ||\n Object.keys(prerequisite?.minimumRequirement).length === 0\n )\n return 1;\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToQuantity) {\n if (\n parseInt(\n prerequisite.minimumRequirement.greaterThanOrEqualToQuantity,\n 10,\n ) === 0\n ) {\n return 1;\n }\n return Math.floor(\n entitledQuantity /\n parseInt(\n prerequisite.minimumRequirement.greaterThanOrEqualToQuantity,\n 10,\n ),\n );\n }\n\n if (prerequisite?.minimumRequirement?.greaterThanOrEqualToSubtotal) {\n if (\n Number(\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal?.cents ??\n 0,\n ) === 0\n ) {\n return 1;\n }\n return Math.floor(\n entitledTotal /\n Number(\n prerequisite.minimumRequirement.greaterThanOrEqualToSubtotal?.cents ??\n 0,\n ),\n );\n }\n return 0;\n}\n\nfunction getCustomerBuysValueAmmount(\n customerBuys,\n entitledQuantity,\n entitledTotal,\n) {\n if (customerBuys.value.type === \"DiscountQuantity\") {\n return Math.floor(entitledQuantity / customerBuys.value.quantity);\n }\n\n if (customerBuys.value.type === \"DiscountAmount\") {\n return Math.floor(entitledTotal / customerBuys.value.amount);\n }\n\n return 0;\n}\n\nfunction getEligibleRewardTier({\n entitledQuantity,\n entitledTotal,\n discount,\n log,\n}) {\n log(\"discount type\", discount?.discountValue?.type);\n if (discount?.discountValue?.type === \"BXGY\") {\n return getCustomerBuysValueAmmount(\n discount.discountValue.customerBuys,\n entitledQuantity,\n entitledTotal,\n );\n }\n\n let amountPrerequisiteValid = getAmountPrerequisiteValid(\n discount?.prerequisite,\n entitledQuantity,\n entitledTotal,\n );\n\n const discountValue = discount?.discountValue;\n if (\n (discountValue?.type === \"TieredDiscount\" ||\n discountValue?.type === \"MultiEffectTiers\" ||\n discountValue?.type === \"VolumeDiscount\") &&\n amountPrerequisiteValid > 0 &&\n discountValue?.tiers?.[0]?.prerequisite\n ) {\n amountPrerequisiteValid = 0;\n for (const [i, tier] of discountValue.tiers.entries()) {\n let tierIsValid = getAmountPrerequisiteValid(\n tier?.prerequisite,\n entitledQuantity,\n entitledTotal,\n );\n if (tierIsValid <= 0) {\n break;\n }\n amountPrerequisiteValid = i + 1;\n }\n }\n\n return amountPrerequisiteValid;\n}\n\nfunction getTargetStateForDiscount({ cart, discount, giftsInCart, log }) {\n if (!discount || !discount.discountValue) {\n return 0;\n }\n\n if (!cart || !cart.items || cart.items.length === 0) {\n return 0;\n }\n\n let quantityOfItemsIgnored = 0;\n const entitledItems = cart.items\n .reduce((acc, item) => {\n const { item: itemWithCorrectQuantity, quantity: quantityIgnored } =\n itemWitchCorrectEntitledQuantityToGiveDiscount(\n item,\n discount,\n quantityOfItemsIgnored,\n giftsInCart,\n );\n quantityOfItemsIgnored += quantityIgnored;\n acc.push(itemWithCorrectQuantity);\n return acc;\n }, [])\n .filter((item) => (item?.quantity ?? 0) > 0);\n\n const { entitledQuantity, entitledTotal } = entitledItems.reduce(\n (acc, item) => {\n acc.entitledQuantity += item?.quantity;\n acc.entitledTotal +=\n parseFloat(item?.variantDetails?.price?.amount ?? 0) * item?.quantity;\n return acc;\n },\n { entitledQuantity: 0, entitledTotal: 0 },\n );\n\n log(\"entitledQuantity\", entitledQuantity);\n log(\"entitledTotal\", entitledTotal);\n\n const entitledTotalCents = entitledTotal * 100;\n return getEligibleRewardTier({\n entitledQuantity,\n entitledTotal: entitledTotalCents,\n discount,\n log,\n });\n}\n\nfunction getTargetStateForPromotion({\n cart,\n promotion,\n giftsInCart,\n log,\n eligibleDiscounts,\n}) {\n const discounts = Object.values(promotion?.discounts ?? {});\n\n return discounts.map((discount) => {\n const isDiscountEligible = eligibleDiscounts.find(\n (d) => d.title === discount.title,\n ).isEligible;\n return {\n title: discount.title,\n target: isDiscountEligible\n ? getTargetStateForDiscount({ cart, discount, giftsInCart, log })\n : 0,\n };\n });\n}\n\nconst isItemEligibleWithSelectedPurchaseType = (item, discount) => {\n if (discount.appliesOnSubscription && !discount.appliesOnOneTimePurchase) {\n return item.sellingPlanAllocation; //TODO Verify correct structure of selling plan\n } else if (\n !discount.appliesOnSubscription &&\n discount.appliesOnOneTimePurchase\n ) {\n return !item.sellingPlanAllocation?.name;\n } else {\n return true;\n }\n};\n\nconst isItemEligibleForDiscount = (item, discount, log) => {\n log(\"isItemEligibleForDiscount\", discount);\n if (!discount || !discount.entitled) {\n return false;\n }\n\n const eligibleOnPurchaseType = isItemEligibleWithSelectedPurchaseType(\n item,\n discount,\n );\n let eligibleOnItem = false;\n let listOfEligibleItems = {};\n\n if (discount.discountValue?.type === \"BXGY\") {\n listOfEligibleItems = discount.discountValue.customerGets.items;\n } else if (discount.discountValue?.type === \"VolumeDiscount\") {\n listOfEligibleItems = discount.discountValue.customerGets;\n } else {\n listOfEligibleItems = discount.entitled;\n }\n\n if (listOfEligibleItems.all) {\n eligibleOnItem = true;\n }\n\n if (listOfEligibleItems.variants) {\n if (\n listOfEligibleItems.variants?.includes(\n getIdFromGid(item.variantDetails.id),\n )\n ) {\n eligibleOnItem = true;\n }\n }\n\n if (listOfEligibleItems.products) {\n if (listOfEligibleItems.products?.includes(item.productDetails.handle)) {\n eligibleOnItem = true;\n }\n }\n\n if (discount.discountValue?.productDiscounts) {\n const entitledProducts = discount?.discountValue?.productDiscounts\n ?.map((discount) => discount.products)\n .flat();\n\n if (\n entitledProducts &&\n entitledProducts.length > 0 &&\n entitledProducts.includes(item.productDetails.handle)\n ) {\n eligibleOnItem = true;\n } else if (\n entitledProducts &&\n entitledProducts.length > 0 &&\n !entitledProducts.includes(item.productDetails.handle)\n ) {\n eligibleOnItem = false;\n }\n }\n\n if (discount.discountValue?.variantDiscounts) {\n const entitledVariants = discount?.discountValue?.variantDiscounts\n ?.map((discount) => discount.variants)\n .flat();\n\n if (\n entitledVariants &&\n entitledVariants.length > 0 &&\n entitledVariants.includes(getIdFromGid(item.variantDetails.id))\n ) {\n eligibleOnItem = true;\n } else if (\n entitledVariants &&\n entitledVariants.length > 0 &&\n !entitledVariants.includes(getIdFromGid(item.variantDetails.id))\n ) {\n eligibleOnItem = false;\n }\n }\n return eligibleOnItem && eligibleOnPurchaseType;\n};\n\nfunction isCartEligibleForDiscount({ cart, discount, log }) {\n log(\"isCartEligibleForDiscount\");\n if (!cart || !cart.items || cart.items.length === 0) {\n return false;\n }\n\n const eligibleItems =\n cart.items?.filter((item) =>\n isItemEligibleForDiscount(item, discount, log),\n ) ?? [];\n\n log(\"eligibleItems\", eligibleItems);\n\n return eligibleItems.length > 0;\n}\n\nfunction getGiftsToAdd({ promotion, targetState, log }) {\n const giftsToAdd = [];\n const giftsToRemove = [];\n\n log(\"getGiftsToAdd\", targetState);\n Object.values(promotion?.discounts ?? {}).forEach((discount) => {\n const discountTargetState = targetState?.find(\n (state) => state.title === discount.title,\n );\n\n if (discount.discountValue.type === \"Gift\") {\n const giftVariantId = discount.discountValue.products\n ?.at(0)\n ?.variants?.at(0)?.id;\n\n if (!giftVariantId) return;\n const compound = discount?.discountValue?.compound;\n const targetQuantity = discountTargetState?.target || 0;\n\n if (targetQuantity > 0) {\n giftsToAdd.push({\n variantId: giftVariantId,\n quantity: compound ? targetQuantity : 1,\n });\n } else {\n giftsToRemove.push({\n variantId: giftVariantId,\n quantity: compound ? 100 : 1,\n });\n }\n }\n\n if (\n discount.discountValue.type === \"TieredDiscount\" &&\n discount.discountValue.tiersType === \"FREE_GIFT\"\n ) {\n discount.discountValue.tiers.forEach((tier, index) => {\n const tierGiftVariantId = tier.value.products\n ?.at(0)\n ?.variants?.at(0)?.id;\n\n if (!tierGiftVariantId) return;\n\n let shouldReceiveGift = false;\n if (\n discount.discountValue?.compound === false &&\n index === discountTargetState.target - 1\n ) {\n shouldReceiveGift = true;\n }\n if (\n discount.discountValue?.compound === true &&\n index <= discountTargetState.target - 1\n ) {\n shouldReceiveGift = true;\n }\n\n if (shouldReceiveGift) {\n giftsToAdd.push({\n variantId: tierGiftVariantId,\n quantity: 1,\n });\n } else {\n giftsToRemove.push({\n variantId: tierGiftVariantId,\n quantity: 1,\n });\n }\n });\n }\n\n if (discount.discountValue.type === \"MultiEffectTiers\") {\n discount.discountValue.tiers.forEach((tier, index) => {\n tier.discounts.forEach((tierDiscount) => {\n if (tierDiscount?.value?.type !== \"Gift\") {\n return;\n }\n\n const tierGiftVariantId = tierDiscount.value.products\n ?.at(0)\n ?.variants?.at(0)?.id;\n\n if (!tierGiftVariantId) return;\n\n let shouldReceiveGift = false;\n if (\n !tierDiscount.value?.compound &&\n index === discountTargetState.target - 1\n ) {\n shouldReceiveGift = true;\n }\n if (\n tierDiscount.value?.compound === true &&\n index <= discountTargetState.target - 1\n ) {\n shouldReceiveGift = true;\n }\n\n if (shouldReceiveGift) {\n giftsToAdd.push({\n variantId: tierGiftVariantId,\n quantity: 1,\n });\n } else {\n giftsToRemove.push({\n variantId: tierGiftVariantId,\n quantity: 1,\n });\n }\n });\n });\n }\n });\n\n return { giftsToAdd, giftsToRemove };\n}\n\nconst parsePromotionIfActive = (vaultActivePromotion) => {\n let promotion = JSON.parse(vaultActivePromotion ?? \"{}\");\n if (!promotion.startsAt || !promotion.status || !promotion.title)\n return undefined;\n const now = new Date();\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};\n\nconst useForceRender = (intervalMs = 500) => {\n const hasForceRenderedRef = React.useRef(false);\n const [, forceUpdate] = React.useReducer((x) => x + 1, 0);\n\n // Force re-render at intervals, but only if we haven't force rendered since last real render\n React.useEffect(() => {\n const interval = setInterval(() => {\n if (!hasForceRenderedRef.current) {\n hasForceRenderedRef.current = true;\n forceUpdate();\n }\n }, intervalMs);\n return () => clearInterval(interval);\n }, [intervalMs]);\n\n // Reset force render flag when there's a real update\n React.useEffect(() => {\n hasForceRenderedRef.current = false;\n });\n};\n\nexport default function useAbraCart({\n useTapcart,\n tapcartData,\n addGiftOncePerSession = false,\n isAutomaticDiscount = false,\n}) {\n const Tapcart = useTapcart();\n const [activePromotion, setActivePromotion] = React.useState(null);\n const [logs, setLogs] = React.useState([]);\n const [giftsAlreadyAddedOnce, setGiftsAlreadyAddedOnce] = React.useState({});\n const [giftsInCart, setGiftsInCart] = React.useState([]);\n const [desiredState, setDesiredState] = React.useState({\n ok: true,\n giftsToAdd: [],\n giftsToRemove: [],\n discountsToApply: [],\n discountsToRemove: [],\n });\n\n const renderCountRef = React.useRef(0);\n renderCountRef.current += 1;\n\n const giftsRequested = React.useRef([]);\n const discountsRequested = React.useRef([]);\n\n // Capture Tapcart.action once it's available and stable\n const stableTapcartAction = React.useRef(null);\n React.useEffect(() => {\n if (Tapcart.action && !stableTapcartAction.current) {\n stableTapcartAction.current = Tapcart.action;\n }\n });\n\n const actions = Tapcart.actions;\n\n // Force re-render after 500ms of the last render\n useForceRender(1000);\n\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\n setLogs((prevLogs) => {\n const newLogs = [...prevLogs, logEntry];\n // Keep only last 50 logs to prevent memory issues\n return newLogs.length > 50 ? newLogs.slice(-50) : newLogs;\n });\n }, []);\n\n const { cart: cartFromUseCart } = useCartWithPrices({\n Tapcart,\n tapcartData: tapcartData,\n });\n\n const computeDesiredCartState = React.useCallback(\n ({ promotion, cart, giftsInCart }) => {\n log(\"computeDesiredCartState\");\n if (\n !promotion ||\n !promotion.discounts ||\n promotion.discounts.length === 0 ||\n !cart ||\n !cart.items ||\n cart.items.length === 0\n ) {\n log(\"no stuff\");\n return {\n ok: true,\n giftsToAdd: [],\n giftsToRemove: [],\n discountsToApply: [],\n discountsToRemove: [],\n };\n }\n log(\"has stuff 2\");\n\n try {\n log(\"trying\", promotion);\n const eligibleDiscounts = promotion?.discounts\n ?.filter((discount) => discount != null)\n ?.map((discount) => {\n log(\"discount\", discount);\n return {\n title: discount?.title,\n isEligible: isCartEligibleForDiscount({ cart, discount, log }),\n };\n });\n\n log(\"eligibleDiscounts\");\n const targetState =\n getTargetStateForPromotion({\n cart,\n promotion,\n giftsInCart,\n log,\n eligibleDiscounts,\n }) ?? [];\n\n log(\"targetState\");\n\n const { giftsToAdd, giftsToRemove } = getGiftsToAdd({\n promotion,\n targetState,\n log,\n });\n\n log(\"giftsToAdd\");\n\n if (!targetState || targetState.length === 0) {\n return {\n ok: true,\n giftsToAdd: [],\n giftsToRemove: [],\n discountsToApply: [],\n discountsToRemove: [],\n };\n }\n\n log(\"toApply\");\n\n // Determine which discounts to apply/remove\n const toApply = [];\n const toRemove = [];\n eligibleDiscounts.forEach((discount) => {\n const discountTargetState = targetState?.find(\n (target) => target.title === discount.title,\n );\n const shouldApplyDiscount =\n discount?.isEligible && discountTargetState?.target > 0;\n\n if (shouldApplyDiscount) {\n toApply.push(discount.title);\n } else {\n toRemove.push(discount.title);\n }\n });\n\n log(\"toRemove\");\n\n return {\n ok: true,\n giftsToAdd,\n giftsToRemove,\n discountsToApply: toApply,\n discountsToRemove: toRemove,\n };\n } catch (error) {\n log(`ComputeDesiredCartState error: ${error.message}`);\n return {\n ok: false,\n error: error.message,\n };\n }\n },\n [],\n );\n\n const applyDiscount = React.useCallback(\n async (discountCode) => {\n if (!stableTapcartAction.current) {\n return;\n }\n return new Promise((resolve, reject) => {\n stableTapcartAction.current(\n \"cart/discount/add\",\n {\n code: discountCode,\n },\n {\n onSuccess: (cart) => {\n resolve(cart);\n },\n onError: (error) => {\n reject(error);\n },\n },\n );\n });\n },\n [stableTapcartAction],\n );\n\n const removeDiscount = React.useCallback(\n async (discountCode) => {\n if (!stableTapcartAction.current) {\n return;\n }\n return new Promise((resolve, reject) => {\n stableTapcartAction.current(\n \"cart/discount/remove\",\n {\n discountCode,\n },\n {\n onSuccess: (cart) => {\n resolve(cart);\n },\n onError: (error) => {\n log(\n `Failed to remove discount ${discountCode}: ${error.message}`,\n );\n reject(error);\n },\n },\n );\n });\n },\n [stableTapcartAction],\n );\n\n const addLineItems = React.useCallback(\n async (items) => {\n if (!stableTapcartAction.current) {\n return;\n }\n return new Promise((resolve, reject) => {\n stableTapcartAction.current(\n \"cart/add\",\n {\n lineItems: items,\n },\n {\n onSuccess: (cart) => {\n resolve(cart);\n },\n onError: (error) => {\n log(`Failed to add items: ${error.message}`);\n reject(error);\n },\n },\n );\n });\n },\n [stableTapcartAction],\n );\n\n const removeLineItems = React.useCallback(\n async (items) => {\n if (!stableTapcartAction.current) {\n return;\n }\n return new Promise((resolve, reject) => {\n stableTapcartAction.current(\n \"cart/remove\",\n {\n lineItems: items,\n },\n {\n onSuccess: (cart) => {\n resolve(cart);\n },\n onError: (error) => {\n log(`Failed to remove items: ${error.message}`);\n reject(error);\n },\n },\n );\n });\n },\n [stableTapcartAction],\n );\n\n const upsertAttribute = React.useCallback(\n async (attribute) => {\n if (!stableTapcartAction.current) {\n return;\n }\n return new Promise((resolve, reject) => {\n const currentAttributes = cartFromUseCart?.attributes || [];\n const existingAttribute = currentAttributes.find(\n (attr) => attr.key === attribute.key,\n );\n const existingValue = existingAttribute\n ? existingAttribute.value\n : null;\n\n // If attribute already exists with the same value, no need to update\n if (existingValue && existingValue === attribute.value) {\n resolve(cartFromUseCart);\n }\n\n const newAttributes = [\n ...currentAttributes.filter((attr) => attr.key !== attribute.key),\n {\n key: attribute.key,\n value: attribute.value,\n },\n ];\n stableTapcartAction.current(\n \"cart/updateAttributes\",\n {\n attributes: newAttributes,\n },\n {\n onSuccess: (cart) => {\n resolve(cart);\n },\n onError: (error) => {\n log(`Failed to add attribute ${attribute.key}: ${error.message}`);\n reject(error);\n },\n },\n );\n });\n },\n [cartFromUseCart, stableTapcartAction],\n );\n\n const removeAttribute = React.useCallback(\n async (attributeKey) => {\n if (!stableTapcartAction.current) {\n return;\n }\n return new Promise((resolve, reject) => {\n const currentAttributes = cartFromUseCart?.attributes || [];\n const existingAttribute = currentAttributes.find(\n (attr) => attr.key === attributeKey,\n );\n\n // If attribute doesn't exist, no need to update\n if (!existingAttribute) {\n log(`Attribute ${attributeKey} doesn't exist, skipping removal`);\n resolve(cartFromUseCart);\n }\n\n const newAttributes = currentAttributes.filter(\n (attr) => attr.key !== attributeKey,\n );\n\n stableTapcartAction.current(\n \"cart/updateAttributes\",\n {\n attributes: newAttributes,\n },\n {\n onSuccess: (cart) => {\n resolve(cart);\n },\n onError: (error) => {\n log(\n `Failed to remove attribute ${attributeKey}: ${error.message}`,\n );\n reject(error);\n },\n },\n );\n });\n },\n [cartFromUseCart, stableTapcartAction],\n );\n\n const addAbraAttribute = React.useCallback(\n async (value) => {\n await upsertAttribute({ key: \"__abra\", value });\n },\n [upsertAttribute],\n );\n\n const addTapcartAttribute = React.useCallback(async () => {\n await upsertAttribute({ key: \"Tapcart\", value: \"1\" });\n }, [upsertAttribute]);\n\n const applyDesiredCartState = React.useCallback(\n async (newState) => {\n log(\"Applying desired cart state\", newState);\n\n try {\n if (!newState?.ok) {\n return;\n }\n\n const currentDiscounts = new Set(cartFromUseCart?.discounts || []);\n const currentAttributes = cartFromUseCart?.attributes || [];\n const currentItems = cartFromUseCart?.items || [];\n\n // Current quantities by variant id\n const currentQtyByVariant = new Map();\n for (const item of currentItems) {\n const variantId = item?.variantDetails?.id;\n const qty = Number(item?.quantity || 0);\n if (!variantId || qty <= 0) continue;\n currentQtyByVariant.set(\n variantId,\n (currentQtyByVariant.get(variantId) || 0) + qty,\n );\n }\n\n // Previously requested gift quantities (to avoid double adds)\n const prevRequestedQtyByVariant = new Map();\n (giftsRequested?.current || []).forEach((req) => {\n if (!req?.variantId) return;\n const qty = Number(req?.quantity || 0);\n if (qty <= 0) return;\n prevRequestedQtyByVariant.set(\n req.variantId,\n (prevRequestedQtyByVariant.get(req.variantId) || 0) + qty,\n );\n });\n\n // Desired target quantities by variant (adds minus removes)\n const desiredQtyByVariant = new Map();\n (newState?.giftsToAdd || []).forEach((g) => {\n if (!g?.variantId) return;\n const qty = Number(g?.quantity || 0);\n if (qty <= 0) return;\n desiredQtyByVariant.set(\n g.variantId,\n (desiredQtyByVariant.get(g.variantId) || 0) + qty,\n );\n });\n (newState?.giftsToRemove || []).forEach((g) => {\n if (!g?.variantId) return;\n const qty = Number(g?.quantity || 0);\n if (qty <= 0) return;\n const currentDesired = desiredQtyByVariant.get(g.variantId) || 0;\n const nextDesired = Math.max(0, currentDesired - qty);\n desiredQtyByVariant.set(g.variantId, nextDesired);\n });\n\n // 1) Remove discounts that should be removed and are currently in cart\n const discountsToRemoveNow = Array.from(\n new Set(newState?.discountsToRemove || []),\n ).filter((code) => currentDiscounts.has(code));\n for (const code of discountsToRemoveNow) {\n try {\n await removeDiscount(code);\n // Clear from pending requested\n discountsRequested.current = (\n discountsRequested.current || []\n ).filter((c) => c !== code);\n } catch (e) {\n log(`Remove discount failed`, { code, error: e?.message });\n }\n }\n\n // 2) Remove gifts where current > desired\n const giftsToRemoveNow = [];\n desiredQtyByVariant.forEach((desired, variantId) => {\n const current = Number(currentQtyByVariant.get(variantId) || 0);\n if (current > desired) {\n const removeQty = current - desired;\n if (removeQty > 0)\n giftsToRemoveNow.push({ variantId, quantity: removeQty });\n }\n });\n if (giftsToRemoveNow.length > 0) {\n try {\n await removeLineItems(giftsToRemoveNow);\n } catch (e) {\n log(`Remove gifts failed`, {\n items: giftsToRemoveNow,\n error: e?.message,\n });\n }\n }\n\n // 3) Add gifts where desired > current, factoring in outstanding requested adds\n const giftsToAddNow = [];\n desiredQtyByVariant.forEach((desired, variantId) => {\n const current = Number(currentQtyByVariant.get(variantId) || 0);\n const prevRequested = Number(\n prevRequestedQtyByVariant.get(variantId) || 0,\n );\n const outstandingAdd = Math.max(0, prevRequested - current);\n const neededAdd = Math.max(0, desired - current);\n let addNow = Math.max(0, neededAdd - outstandingAdd);\n\n if (addGiftOncePerSession && giftsAlreadyAddedOnce?.[variantId]) {\n addNow = 0;\n }\n\n if (addNow > 0) {\n giftsToAddNow.push({ variantId, quantity: addNow });\n }\n });\n if (giftsToAddNow.length > 0) {\n try {\n await addLineItems(giftsToAddNow);\n if (addGiftOncePerSession) {\n setGiftsAlreadyAddedOnce((prev) => {\n const next = { ...prev };\n giftsToAddNow.forEach((g) => {\n next[g.variantId] = true;\n });\n return next;\n });\n }\n } catch (e) {\n log(`Add gifts failed`, {\n items: giftsToAddNow,\n error: e?.message,\n });\n }\n }\n\n // Refresh requested gifts tracker to match desired target\n const updatedRequested = [];\n desiredQtyByVariant.forEach((qty, variantId) => {\n if (qty > 0) updatedRequested.push({ variantId, quantity: qty });\n });\n giftsRequested.current = updatedRequested;\n\n // 4) Apply discounts not present or pending\n const pendingApplied = new Set(discountsRequested.current || []);\n const discountsToApplyNow = Array.from(\n new Set(newState?.discountsToApply || []),\n ).filter(\n (code) => !currentDiscounts.has(code) && !pendingApplied.has(code),\n );\n\n let appliedAnyDiscount = false;\n for (const code of discountsToApplyNow) {\n try {\n discountsRequested.current = [\n ...(discountsRequested.current || []),\n code,\n ];\n if (!isAutomaticDiscount) {\n await applyDiscount(code);\n }\n appliedAnyDiscount = true;\n // Clear from pending after attempt\n discountsRequested.current = (\n discountsRequested.current || []\n ).filter((c) => c !== code);\n } catch (e) {\n log(`Apply discount failed`, { code, error: e?.message });\n discountsRequested.current = (\n discountsRequested.current || []\n ).filter((c) => c !== code);\n }\n }\n\n // 5) Ensure __abra attribute exists after discount application (idempotent)\n if (appliedAnyDiscount) {\n try {\n const existingAbra = currentAttributes.find(\n (a) => a?.key === \"__abra\",\n );\n await addAbraAttribute(existingAbra?.value || \"1\");\n } catch (e) {\n log(`Add __abra attribute failed`, { error: e?.message });\n }\n }\n } catch (err) {\n log(`applyDesiredCartState error`, { error: err?.message });\n }\n },\n [\n cartFromUseCart,\n discountsRequested,\n giftsRequested,\n giftsAlreadyAddedOnce,\n addLineItems,\n removeLineItems,\n applyDiscount,\n removeDiscount,\n addAbraAttribute,\n removeAttribute,\n ],\n );\n\n // Store latest callback values in refs to avoid dependency issues\n const callbacksRef = React.useRef({\n addLineItems,\n removeLineItems,\n removeDiscount,\n applyDiscount,\n removeAttribute,\n addAbraAttribute,\n applyDesiredCartState,\n addTapcartAttribute,\n });\n\n // Update refs with latest callbacks\n React.useEffect(() => {\n callbacksRef.current = {\n addLineItems,\n removeLineItems,\n removeDiscount,\n applyDiscount,\n removeAttribute,\n addAbraAttribute,\n applyDesiredCartState,\n addTapcartAttribute,\n };\n });\n\n React.useEffect(() => {\n async function addTapcartAttribute() {\n await callbacksRef.current.addTapcartAttribute();\n }\n addTapcartAttribute();\n }, []);\n\n React.useEffect(() => {\n async function initializeVault() {\n if (!actions?.vault) {\n return;\n }\n try {\n const vault = await actions.vault.initialize(\"abra\", \"global\");\n const vaultActivePromotion = await vault.get(\"active-promotion\");\n setActivePromotion(parsePromotionIfActive(vaultActivePromotion));\n\n // // Load previous gifts state from vault\n // const savedGiftsRequested = await vault.get(\"gifts-requested\");\n // const savedGiftsAlreadyAddedOnce = await vault.get(\"gifts-already-added-once\");\n\n // if (savedGiftsRequested) {\n // setGiftsRequested(JSON.parse(savedGiftsRequested));\n // }\n\n // if (savedGiftsAlreadyAddedOnce) {\n // setGiftsAlreadyAddedOnce(JSON.parse(savedGiftsAlreadyAddedOnce));\n // }\n\n vault.observe(\n \"active-promotion\",\n (newPromotionValue) => {\n setActivePromotion(parsePromotionIfActive(newPromotionValue));\n },\n (error) => {\n log(`Vault observation error: ${error.message}`);\n console.log(error);\n },\n );\n } catch (error) {\n log(`Vault initialization error: ${error.message}`);\n console.error(error);\n }\n }\n initializeVault();\n }, [actions?.vault]);\n\n // Effect 2: Compute cart state if Tapcart attribute exists\n React.useEffect(() => {\n async function computeCartState() {\n try {\n const newDesiredState = computeDesiredCartState({\n promotion: activePromotion,\n cart: cartFromUseCart,\n giftsInCart,\n });\n\n if (!newDesiredState.ok) {\n log(`Compute cart state failed:`, newDesiredState);\n return;\n }\n\n // Only update if at least one property is different\n const hasChanged = Object.keys(newDesiredState).some(\n (key) =>\n JSON.stringify(desiredState[key]) !==\n JSON.stringify(newDesiredState[key]),\n );\n\n if (hasChanged) {\n setDesiredState(newDesiredState);\n }\n } catch (error) {\n log(`Compute cart state error: ${error.message}`);\n }\n }\n\n computeCartState();\n }, [computeDesiredCartState, activePromotion, cartFromUseCart, giftsInCart]);\n\n React.useEffect(() => {\n callbacksRef.current.applyDesiredCartState(desiredState);\n }, [desiredState]);\n\n React.useEffect(() => {\n if (\n !cartFromUseCart?.items ||\n cartFromUseCart?.items?.length == 0 ||\n !giftsRequested?.current ||\n giftsRequested?.current?.length == 0\n ) {\n if (giftsInCart?.length > 0) {\n setGiftsInCart([]);\n }\n return;\n }\n\n const gifts = [];\n giftsRequested.current.forEach((request) => {\n const currentRequestInCart = cartFromUseCart?.items?.find(\n (item) => item?.variantDetails?.id === request.variantId,\n );\n if (!currentRequestInCart) {\n return;\n }\n\n gifts.push({\n variantId: request.variantId,\n quantity: Math.min(currentRequestInCart.quantity, request.quantity),\n });\n });\n\n if (JSON.stringify(gifts) !== JSON.stringify(giftsInCart)) {\n setGiftsInCart(gifts);\n }\n }, [cartFromUseCart]);\n\n return {\n logs,\n giftsInCart,\n desiredState,\n };\n}\n"],"names":["productGidFromId","getIdFromGid","graphqlDefaultBody","useState","useEffect","parsePromotionIfActive","React"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@abra-promotions/webhooks-for-tapcart",
3
+ "version": "1.0.1",
4
+ "type": "module",
5
+ "description": "Abra webhooks for enabling abra promotions inside the Tapcart platform",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.esm.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "rollup -c",
14
+ "build:watch": "rollup -c -w",
15
+ "clean": "rimraf dist",
16
+ "prepublishOnly": "npm run clean && npm run build",
17
+ "test": "echo \"No tests specified\" && exit 0",
18
+ "lint": "eslint --config eslint.config.mjs src/**/*.js",
19
+ "prettier": "prettier --write src/**/*.js"
20
+ },
21
+ "keywords": [
22
+ "tapcart",
23
+ "abra",
24
+ "webhooks",
25
+ "promotions",
26
+ "cart",
27
+ "shopify"
28
+ ],
29
+ "author": "Abra",
30
+ "license": "MIT",
31
+ "peerDependencies": {
32
+ "react": ">=16.8.0",
33
+ "@tapcart/mobile-components": "^0.7.25"
34
+ },
35
+ "devDependencies": {
36
+ "@eslint/js": "^9.14.0",
37
+ "@rollup/plugin-commonjs": "^25.0.7",
38
+ "@rollup/plugin-node-resolve": "^15.2.3",
39
+ "@rollup/plugin-terser": "^0.4.4",
40
+ "rollup": "^4.9.1",
41
+ "rollup-plugin-dts": "^6.1.0",
42
+ "rimraf": "^5.0.5",
43
+ "eslint": "^9.14.0",
44
+ "prettier": "^3.3.3"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public",
48
+ "registry": "https://registry.npmjs.org/"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "https://github.com/abra/tapcart-custom-blocks.git",
53
+ "directory": "npm-package"
54
+ }
55
+ }