@shopify/hydrogen-react 2025.5.0 → 2025.7.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.
- package/customer-account.schema.json +1 -1
- package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
- package/dist/browser-dev/BaseButton.mjs.map +1 -1
- package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
- package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
- package/dist/browser-dev/CartCost.mjs.map +1 -1
- package/dist/browser-dev/CartLineProvider.mjs.map +1 -1
- package/dist/browser-dev/CartLineQuantity.mjs.map +1 -1
- package/dist/browser-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
- package/dist/browser-dev/CartProvider.mjs.map +1 -1
- package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
- package/dist/browser-dev/Image.mjs.map +1 -1
- package/dist/browser-dev/MediaFile.mjs.map +1 -1
- package/dist/browser-dev/ModelViewer.mjs.map +1 -1
- package/dist/browser-dev/Money.mjs.map +1 -1
- package/dist/browser-dev/ProductPrice.mjs.map +1 -1
- package/dist/browser-dev/ProductProvider.mjs.map +1 -1
- package/dist/browser-dev/RichText.components.mjs.map +1 -1
- package/dist/browser-dev/RichText.mjs.map +1 -1
- package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
- package/dist/browser-dev/ShopifyProvider.mjs +18 -1
- package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
- package/dist/browser-dev/Video.mjs.map +1 -1
- package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs +4 -3
- package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
- package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
- package/dist/browser-dev/analytics-utils.mjs.map +1 -1
- package/dist/browser-dev/analytics.mjs +4 -5
- package/dist/browser-dev/analytics.mjs.map +1 -1
- package/dist/browser-dev/cart-hooks.mjs +25 -7
- package/dist/browser-dev/cart-hooks.mjs.map +1 -1
- package/dist/browser-dev/cart-queries.mjs.map +1 -1
- package/dist/browser-dev/codegen.helpers.mjs.map +1 -1
- package/dist/browser-dev/cookies-utils.mjs +4 -4
- package/dist/browser-dev/cookies-utils.mjs.map +1 -1
- package/dist/browser-dev/flatten-connection.mjs.map +1 -1
- package/dist/browser-dev/getProductOptions.mjs.map +1 -1
- package/dist/browser-dev/index.mjs +4 -0
- package/dist/browser-dev/index.mjs.map +1 -1
- package/dist/browser-dev/load-script.mjs.map +1 -1
- package/dist/browser-dev/node_modules/@xstate/fsm/es/index.mjs +17 -17
- package/dist/browser-dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
- package/dist/browser-dev/node_modules/@xstate/react/es/fsm.mjs +2 -2
- package/dist/browser-dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
- package/dist/browser-dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
- package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
- package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
- package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
- package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
- package/dist/browser-dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
- package/dist/browser-dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
- package/dist/browser-dev/optionValueDecoder.mjs.map +1 -1
- package/dist/browser-dev/packages/hydrogen-react/package.json.mjs +1 -1
- package/dist/browser-dev/parse-metafield.mjs +26 -1
- package/dist/browser-dev/parse-metafield.mjs.map +1 -1
- package/dist/browser-dev/storefront-api-constants.mjs +1 -1
- package/dist/browser-dev/storefront-api-constants.mjs.map +1 -1
- package/dist/browser-dev/storefront-client.mjs.map +1 -1
- package/dist/browser-dev/tracking-utils.mjs +92 -0
- package/dist/browser-dev/tracking-utils.mjs.map +1 -0
- package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/browser-dev/useCartActions.mjs.map +1 -1
- package/dist/browser-dev/useMoney.mjs +53 -7
- package/dist/browser-dev/useMoney.mjs.map +1 -1
- package/dist/browser-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
- package/dist/browser-dev/useShopifyCookies.mjs +96 -9
- package/dist/browser-dev/useShopifyCookies.mjs.map +1 -1
- package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
- package/dist/browser-prod/BaseButton.mjs.map +1 -1
- package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
- package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
- package/dist/browser-prod/CartCost.mjs.map +1 -1
- package/dist/browser-prod/CartLineProvider.mjs.map +1 -1
- package/dist/browser-prod/CartLineQuantity.mjs.map +1 -1
- package/dist/browser-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
- package/dist/browser-prod/CartProvider.mjs.map +1 -1
- package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
- package/dist/browser-prod/Image.mjs.map +1 -1
- package/dist/browser-prod/MediaFile.mjs.map +1 -1
- package/dist/browser-prod/ModelViewer.mjs.map +1 -1
- package/dist/browser-prod/Money.mjs.map +1 -1
- package/dist/browser-prod/ProductPrice.mjs.map +1 -1
- package/dist/browser-prod/ProductProvider.mjs.map +1 -1
- package/dist/browser-prod/RichText.components.mjs.map +1 -1
- package/dist/browser-prod/RichText.mjs.map +1 -1
- package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
- package/dist/browser-prod/ShopifyProvider.mjs +18 -1
- package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
- package/dist/browser-prod/Video.mjs.map +1 -1
- package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs +4 -3
- package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
- package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
- package/dist/browser-prod/analytics-utils.mjs.map +1 -1
- package/dist/browser-prod/analytics.mjs +4 -5
- package/dist/browser-prod/analytics.mjs.map +1 -1
- package/dist/browser-prod/cart-hooks.mjs +25 -7
- package/dist/browser-prod/cart-hooks.mjs.map +1 -1
- package/dist/browser-prod/cart-queries.mjs.map +1 -1
- package/dist/browser-prod/codegen.helpers.mjs.map +1 -1
- package/dist/browser-prod/cookies-utils.mjs +4 -4
- package/dist/browser-prod/cookies-utils.mjs.map +1 -1
- package/dist/browser-prod/flatten-connection.mjs.map +1 -1
- package/dist/browser-prod/getProductOptions.mjs.map +1 -1
- package/dist/browser-prod/index.mjs +4 -0
- package/dist/browser-prod/index.mjs.map +1 -1
- package/dist/browser-prod/load-script.mjs.map +1 -1
- package/dist/browser-prod/node_modules/@xstate/fsm/es/index.mjs +17 -17
- package/dist/browser-prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
- package/dist/browser-prod/node_modules/@xstate/react/es/fsm.mjs +2 -2
- package/dist/browser-prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
- package/dist/browser-prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
- package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
- package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
- package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
- package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
- package/dist/browser-prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
- package/dist/browser-prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
- package/dist/browser-prod/optionValueDecoder.mjs.map +1 -1
- package/dist/browser-prod/packages/hydrogen-react/package.json.mjs +1 -1
- package/dist/browser-prod/parse-metafield.mjs +27 -1
- package/dist/browser-prod/parse-metafield.mjs.map +1 -1
- package/dist/browser-prod/storefront-api-constants.mjs +1 -1
- package/dist/browser-prod/storefront-api-constants.mjs.map +1 -1
- package/dist/browser-prod/storefront-client.mjs.map +1 -1
- package/dist/browser-prod/tracking-utils.mjs +92 -0
- package/dist/browser-prod/tracking-utils.mjs.map +1 -0
- package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/browser-prod/useCartActions.mjs.map +1 -1
- package/dist/browser-prod/useMoney.mjs +53 -7
- package/dist/browser-prod/useMoney.mjs.map +1 -1
- package/dist/browser-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
- package/dist/browser-prod/useShopifyCookies.mjs +96 -9
- package/dist/browser-prod/useShopifyCookies.mjs.map +1 -1
- package/dist/node-dev/AddToCartButton.js.map +1 -1
- package/dist/node-dev/AddToCartButton.mjs.map +1 -1
- package/dist/node-dev/BaseButton.js.map +1 -1
- package/dist/node-dev/BaseButton.mjs.map +1 -1
- package/dist/node-dev/BuyNowButton.js.map +1 -1
- package/dist/node-dev/BuyNowButton.mjs.map +1 -1
- package/dist/node-dev/CartCheckoutButton.js.map +1 -1
- package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
- package/dist/node-dev/CartCost.js.map +1 -1
- package/dist/node-dev/CartCost.mjs.map +1 -1
- package/dist/node-dev/CartLineProvider.js.map +1 -1
- package/dist/node-dev/CartLineProvider.mjs.map +1 -1
- package/dist/node-dev/CartLineQuantity.js.map +1 -1
- package/dist/node-dev/CartLineQuantity.mjs.map +1 -1
- package/dist/node-dev/CartLineQuantityAdjustButton.js.map +1 -1
- package/dist/node-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
- package/dist/node-dev/CartProvider.js.map +1 -1
- package/dist/node-dev/CartProvider.mjs.map +1 -1
- package/dist/node-dev/ExternalVideo.js.map +1 -1
- package/dist/node-dev/ExternalVideo.mjs.map +1 -1
- package/dist/node-dev/Image.js.map +1 -1
- package/dist/node-dev/Image.mjs.map +1 -1
- package/dist/node-dev/MediaFile.js.map +1 -1
- package/dist/node-dev/MediaFile.mjs.map +1 -1
- package/dist/node-dev/ModelViewer.js.map +1 -1
- package/dist/node-dev/ModelViewer.mjs.map +1 -1
- package/dist/node-dev/Money.js.map +1 -1
- package/dist/node-dev/Money.mjs.map +1 -1
- package/dist/node-dev/ProductPrice.js.map +1 -1
- package/dist/node-dev/ProductPrice.mjs.map +1 -1
- package/dist/node-dev/ProductProvider.js.map +1 -1
- package/dist/node-dev/ProductProvider.mjs.map +1 -1
- package/dist/node-dev/RichText.components.js.map +1 -1
- package/dist/node-dev/RichText.components.mjs.map +1 -1
- package/dist/node-dev/RichText.js.map +1 -1
- package/dist/node-dev/RichText.mjs.map +1 -1
- package/dist/node-dev/ShopPayButton.js.map +1 -1
- package/dist/node-dev/ShopPayButton.mjs.map +1 -1
- package/dist/node-dev/ShopifyProvider.js +18 -1
- package/dist/node-dev/ShopifyProvider.js.map +1 -1
- package/dist/node-dev/ShopifyProvider.mjs +18 -1
- package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
- package/dist/node-dev/Video.js.map +1 -1
- package/dist/node-dev/Video.mjs.map +1 -1
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js +4 -3
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs +4 -3
- package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
- package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
- package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
- package/dist/node-dev/analytics-utils.js.map +1 -1
- package/dist/node-dev/analytics-utils.mjs.map +1 -1
- package/dist/node-dev/analytics.js +4 -5
- package/dist/node-dev/analytics.js.map +1 -1
- package/dist/node-dev/analytics.mjs +4 -5
- package/dist/node-dev/analytics.mjs.map +1 -1
- package/dist/node-dev/cart-hooks.js +24 -6
- package/dist/node-dev/cart-hooks.js.map +1 -1
- package/dist/node-dev/cart-hooks.mjs +25 -7
- package/dist/node-dev/cart-hooks.mjs.map +1 -1
- package/dist/node-dev/cart-queries.js.map +1 -1
- package/dist/node-dev/cart-queries.mjs.map +1 -1
- package/dist/node-dev/codegen.helpers.js.map +1 -1
- package/dist/node-dev/codegen.helpers.mjs.map +1 -1
- package/dist/node-dev/cookies-utils.js +4 -4
- package/dist/node-dev/cookies-utils.js.map +1 -1
- package/dist/node-dev/cookies-utils.mjs +4 -4
- package/dist/node-dev/cookies-utils.mjs.map +1 -1
- package/dist/node-dev/flatten-connection.js.map +1 -1
- package/dist/node-dev/flatten-connection.mjs.map +1 -1
- package/dist/node-dev/getProductOptions.js.map +1 -1
- package/dist/node-dev/getProductOptions.mjs.map +1 -1
- package/dist/node-dev/index.js +4 -0
- package/dist/node-dev/index.js.map +1 -1
- package/dist/node-dev/index.mjs +4 -0
- package/dist/node-dev/index.mjs.map +1 -1
- package/dist/node-dev/load-script.js.map +1 -1
- package/dist/node-dev/load-script.mjs.map +1 -1
- package/dist/node-dev/node_modules/@xstate/fsm/es/index.js +17 -17
- package/dist/node-dev/node_modules/@xstate/fsm/es/index.js.map +1 -1
- package/dist/node-dev/node_modules/@xstate/fsm/es/index.mjs +17 -17
- package/dist/node-dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
- package/dist/node-dev/node_modules/@xstate/react/es/fsm.js +2 -2
- package/dist/node-dev/node_modules/@xstate/react/es/fsm.js.map +1 -1
- package/dist/node-dev/node_modules/@xstate/react/es/fsm.mjs +2 -2
- package/dist/node-dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
- package/dist/node-dev/node_modules/@xstate/react/es/useConstant.js.map +1 -1
- package/dist/node-dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/shim/index.js.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
- package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
- package/dist/node-dev/optionValueDecoder.js.map +1 -1
- package/dist/node-dev/optionValueDecoder.mjs.map +1 -1
- package/dist/node-dev/packages/hydrogen-react/package.json.js +1 -1
- package/dist/node-dev/packages/hydrogen-react/package.json.mjs +1 -1
- package/dist/node-dev/parse-metafield.js +26 -1
- package/dist/node-dev/parse-metafield.js.map +1 -1
- package/dist/node-dev/parse-metafield.mjs +26 -1
- package/dist/node-dev/parse-metafield.mjs.map +1 -1
- package/dist/node-dev/storefront-api-constants.js +1 -1
- package/dist/node-dev/storefront-api-constants.js.map +1 -1
- package/dist/node-dev/storefront-api-constants.mjs +1 -1
- package/dist/node-dev/storefront-api-constants.mjs.map +1 -1
- package/dist/node-dev/storefront-client.js.map +1 -1
- package/dist/node-dev/storefront-client.mjs.map +1 -1
- package/dist/node-dev/tracking-utils.js +92 -0
- package/dist/node-dev/tracking-utils.js.map +1 -0
- package/dist/node-dev/tracking-utils.mjs +92 -0
- package/dist/node-dev/tracking-utils.mjs.map +1 -0
- package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
- package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/node-dev/useCartActions.js.map +1 -1
- package/dist/node-dev/useCartActions.mjs.map +1 -1
- package/dist/node-dev/useMoney.js +53 -7
- package/dist/node-dev/useMoney.js.map +1 -1
- package/dist/node-dev/useMoney.mjs +53 -7
- package/dist/node-dev/useMoney.mjs.map +1 -1
- package/dist/node-dev/useSelectedOptionInUrlParam.js.map +1 -1
- package/dist/node-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
- package/dist/node-dev/useShopifyCookies.js +94 -7
- package/dist/node-dev/useShopifyCookies.js.map +1 -1
- package/dist/node-dev/useShopifyCookies.mjs +96 -9
- package/dist/node-dev/useShopifyCookies.mjs.map +1 -1
- package/dist/node-prod/AddToCartButton.js.map +1 -1
- package/dist/node-prod/AddToCartButton.mjs.map +1 -1
- package/dist/node-prod/BaseButton.js.map +1 -1
- package/dist/node-prod/BaseButton.mjs.map +1 -1
- package/dist/node-prod/BuyNowButton.js.map +1 -1
- package/dist/node-prod/BuyNowButton.mjs.map +1 -1
- package/dist/node-prod/CartCheckoutButton.js.map +1 -1
- package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
- package/dist/node-prod/CartCost.js.map +1 -1
- package/dist/node-prod/CartCost.mjs.map +1 -1
- package/dist/node-prod/CartLineProvider.js.map +1 -1
- package/dist/node-prod/CartLineProvider.mjs.map +1 -1
- package/dist/node-prod/CartLineQuantity.js.map +1 -1
- package/dist/node-prod/CartLineQuantity.mjs.map +1 -1
- package/dist/node-prod/CartLineQuantityAdjustButton.js.map +1 -1
- package/dist/node-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
- package/dist/node-prod/CartProvider.js.map +1 -1
- package/dist/node-prod/CartProvider.mjs.map +1 -1
- package/dist/node-prod/ExternalVideo.js.map +1 -1
- package/dist/node-prod/ExternalVideo.mjs.map +1 -1
- package/dist/node-prod/Image.js.map +1 -1
- package/dist/node-prod/Image.mjs.map +1 -1
- package/dist/node-prod/MediaFile.js.map +1 -1
- package/dist/node-prod/MediaFile.mjs.map +1 -1
- package/dist/node-prod/ModelViewer.js.map +1 -1
- package/dist/node-prod/ModelViewer.mjs.map +1 -1
- package/dist/node-prod/Money.js.map +1 -1
- package/dist/node-prod/Money.mjs.map +1 -1
- package/dist/node-prod/ProductPrice.js.map +1 -1
- package/dist/node-prod/ProductPrice.mjs.map +1 -1
- package/dist/node-prod/ProductProvider.js.map +1 -1
- package/dist/node-prod/ProductProvider.mjs.map +1 -1
- package/dist/node-prod/RichText.components.js.map +1 -1
- package/dist/node-prod/RichText.components.mjs.map +1 -1
- package/dist/node-prod/RichText.js.map +1 -1
- package/dist/node-prod/RichText.mjs.map +1 -1
- package/dist/node-prod/ShopPayButton.js.map +1 -1
- package/dist/node-prod/ShopPayButton.mjs.map +1 -1
- package/dist/node-prod/ShopifyProvider.js +18 -1
- package/dist/node-prod/ShopifyProvider.js.map +1 -1
- package/dist/node-prod/ShopifyProvider.mjs +18 -1
- package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
- package/dist/node-prod/Video.js.map +1 -1
- package/dist/node-prod/Video.mjs.map +1 -1
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js +4 -3
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs +4 -3
- package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
- package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
- package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
- package/dist/node-prod/analytics-utils.js.map +1 -1
- package/dist/node-prod/analytics-utils.mjs.map +1 -1
- package/dist/node-prod/analytics.js +4 -5
- package/dist/node-prod/analytics.js.map +1 -1
- package/dist/node-prod/analytics.mjs +4 -5
- package/dist/node-prod/analytics.mjs.map +1 -1
- package/dist/node-prod/cart-hooks.js +24 -6
- package/dist/node-prod/cart-hooks.js.map +1 -1
- package/dist/node-prod/cart-hooks.mjs +25 -7
- package/dist/node-prod/cart-hooks.mjs.map +1 -1
- package/dist/node-prod/cart-queries.js.map +1 -1
- package/dist/node-prod/cart-queries.mjs.map +1 -1
- package/dist/node-prod/codegen.helpers.js.map +1 -1
- package/dist/node-prod/codegen.helpers.mjs.map +1 -1
- package/dist/node-prod/cookies-utils.js +4 -4
- package/dist/node-prod/cookies-utils.js.map +1 -1
- package/dist/node-prod/cookies-utils.mjs +4 -4
- package/dist/node-prod/cookies-utils.mjs.map +1 -1
- package/dist/node-prod/flatten-connection.js.map +1 -1
- package/dist/node-prod/flatten-connection.mjs.map +1 -1
- package/dist/node-prod/getProductOptions.js.map +1 -1
- package/dist/node-prod/getProductOptions.mjs.map +1 -1
- package/dist/node-prod/index.js +4 -0
- package/dist/node-prod/index.js.map +1 -1
- package/dist/node-prod/index.mjs +4 -0
- package/dist/node-prod/index.mjs.map +1 -1
- package/dist/node-prod/load-script.js.map +1 -1
- package/dist/node-prod/load-script.mjs.map +1 -1
- package/dist/node-prod/node_modules/@xstate/fsm/es/index.js +17 -17
- package/dist/node-prod/node_modules/@xstate/fsm/es/index.js.map +1 -1
- package/dist/node-prod/node_modules/@xstate/fsm/es/index.mjs +17 -17
- package/dist/node-prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
- package/dist/node-prod/node_modules/@xstate/react/es/fsm.js +2 -2
- package/dist/node-prod/node_modules/@xstate/react/es/fsm.js.map +1 -1
- package/dist/node-prod/node_modules/@xstate/react/es/fsm.mjs +2 -2
- package/dist/node-prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
- package/dist/node-prod/node_modules/@xstate/react/es/useConstant.js.map +1 -1
- package/dist/node-prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/shim/index.js.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
- package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
- package/dist/node-prod/optionValueDecoder.js.map +1 -1
- package/dist/node-prod/optionValueDecoder.mjs.map +1 -1
- package/dist/node-prod/packages/hydrogen-react/package.json.js +1 -1
- package/dist/node-prod/packages/hydrogen-react/package.json.mjs +1 -1
- package/dist/node-prod/parse-metafield.js +27 -1
- package/dist/node-prod/parse-metafield.js.map +1 -1
- package/dist/node-prod/parse-metafield.mjs +27 -1
- package/dist/node-prod/parse-metafield.mjs.map +1 -1
- package/dist/node-prod/storefront-api-constants.js +1 -1
- package/dist/node-prod/storefront-api-constants.js.map +1 -1
- package/dist/node-prod/storefront-api-constants.mjs +1 -1
- package/dist/node-prod/storefront-api-constants.mjs.map +1 -1
- package/dist/node-prod/storefront-client.js.map +1 -1
- package/dist/node-prod/storefront-client.mjs.map +1 -1
- package/dist/node-prod/tracking-utils.js +92 -0
- package/dist/node-prod/tracking-utils.js.map +1 -0
- package/dist/node-prod/tracking-utils.mjs +92 -0
- package/dist/node-prod/tracking-utils.mjs.map +1 -0
- package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
- package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/node-prod/useCartActions.js.map +1 -1
- package/dist/node-prod/useCartActions.mjs.map +1 -1
- package/dist/node-prod/useMoney.js +53 -7
- package/dist/node-prod/useMoney.js.map +1 -1
- package/dist/node-prod/useMoney.mjs +53 -7
- package/dist/node-prod/useMoney.mjs.map +1 -1
- package/dist/node-prod/useSelectedOptionInUrlParam.js.map +1 -1
- package/dist/node-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
- package/dist/node-prod/useShopifyCookies.js +94 -7
- package/dist/node-prod/useShopifyCookies.js.map +1 -1
- package/dist/node-prod/useShopifyCookies.mjs +96 -9
- package/dist/node-prod/useShopifyCookies.mjs.map +1 -1
- package/dist/types/CartLineProvider.d.ts +1 -1
- package/dist/types/CartProvider.d.ts +2 -2
- package/dist/types/Image.d.ts +1 -1
- package/dist/types/ModelViewer.d.ts +1 -1
- package/dist/types/Money.d.ts +13 -5
- package/dist/types/ShopifyProvider.d.ts +5 -0
- package/dist/types/Video.d.ts +1 -1
- package/dist/types/analytics-schema-custom-storefront-customer-tracking.d.ts +3 -3
- package/dist/types/analytics-types.d.ts +24 -4
- package/dist/types/cart-hooks.d.ts +3 -4
- package/dist/types/codegen.helpers.d.ts +2 -2
- package/dist/types/cookies-utils.d.ts +4 -0
- package/dist/types/customer-account-api-types.d.ts +9386 -0
- package/dist/types/index.d.cts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/optionValueDecoder.d.ts +2 -2
- package/dist/types/storefront-api-constants.d.ts +1 -1
- package/dist/types/storefront-api-types.d.ts +143 -8
- package/dist/types/tracking-utils.d.ts +21 -0
- package/dist/types/useCartAPIStateMachine.d.ts +2 -2
- package/dist/types/useCartActions.d.ts +2 -2
- package/dist/types/useMoney.d.ts +16 -2
- package/dist/types/useShopifyCookies.d.ts +28 -2
- package/dist/umd/hydrogen-react.dev.js +376 -118
- package/dist/umd/hydrogen-react.dev.js.map +1 -1
- package/dist/umd/hydrogen-react.prod.js +18 -18
- package/dist/umd/hydrogen-react.prod.js.map +1 -1
- package/package.json +26 -25
- package/storefront.schema.json +1 -1
- package/dist/browser-dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +0 -6
- package/dist/browser-dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs.map +0 -1
- package/dist/browser-prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs +0 -6
- package/dist/browser-prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs.map +0 -1
- package/dist/node-dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.js +0 -5
- package/dist/node-dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.js.map +0 -1
- package/dist/node-dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.mjs +0 -6
- package/dist/node-dev/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.mjs.map +0 -1
- package/dist/node-prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.js +0 -5
- package/dist/node-prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.js.map +0 -1
- package/dist/node-prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.mjs +0 -6
- package/dist/node-prod/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.esm.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function(global, factory) {
|
|
2
2
|
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react")) : typeof define === "function" && define.amd ? define(["exports", "react"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.hydrogenreact = {}, global.React));
|
|
3
|
-
})(this, function(exports2, React$1) {
|
|
3
|
+
})(this, (function(exports2, React$1) {
|
|
4
4
|
"use strict";
|
|
5
5
|
function _interopNamespaceDefault(e2) {
|
|
6
6
|
const n2 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
@@ -51,9 +51,9 @@
|
|
|
51
51
|
return a2;
|
|
52
52
|
}
|
|
53
53
|
var n;
|
|
54
|
-
!function(t2) {
|
|
54
|
+
!(function(t2) {
|
|
55
55
|
t2[t2.NotStarted = 0] = "NotStarted", t2[t2.Running = 1] = "Running", t2[t2.Stopped = 2] = "Stopped";
|
|
56
|
-
}(n || (n = {}));
|
|
56
|
+
})(n || (n = {}));
|
|
57
57
|
var e = { type: "xstate.init" };
|
|
58
58
|
function r(t2) {
|
|
59
59
|
return void 0 === t2 ? [] : [].concat(t2);
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
return t2 === n2;
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
|
-
function u
|
|
72
|
+
function u(t2) {
|
|
73
73
|
return "string" == typeof t2 ? { type: t2 } : t2;
|
|
74
74
|
}
|
|
75
75
|
function c(t2, n2) {
|
|
@@ -77,45 +77,45 @@
|
|
|
77
77
|
}
|
|
78
78
|
function f(t2, n2, e2) {
|
|
79
79
|
var r2 = n2, i2 = false;
|
|
80
|
-
return [t2.filter(function(t3) {
|
|
80
|
+
return [t2.filter((function(t3) {
|
|
81
81
|
if ("xstate.assign" === t3.type) {
|
|
82
82
|
i2 = true;
|
|
83
83
|
var n3 = Object.assign({}, r2);
|
|
84
|
-
return "function" == typeof t3.assignment ? n3 = t3.assignment(r2, e2) : Object.keys(t3.assignment).forEach(function(i3) {
|
|
84
|
+
return "function" == typeof t3.assignment ? n3 = t3.assignment(r2, e2) : Object.keys(t3.assignment).forEach((function(i3) {
|
|
85
85
|
n3[i3] = "function" == typeof t3.assignment[i3] ? t3.assignment[i3](r2, e2) : t3.assignment[i3];
|
|
86
|
-
}), r2 = n3, false;
|
|
86
|
+
})), r2 = n3, false;
|
|
87
87
|
}
|
|
88
88
|
return true;
|
|
89
|
-
}), r2, i2];
|
|
89
|
+
})), r2, i2];
|
|
90
90
|
}
|
|
91
91
|
function s(n2, i2) {
|
|
92
92
|
void 0 === i2 && (i2 = {});
|
|
93
|
-
var s2 = t(f(r(n2.states[n2.initial].entry).map(function(t2) {
|
|
93
|
+
var s2 = t(f(r(n2.states[n2.initial].entry).map((function(t2) {
|
|
94
94
|
return o(t2, i2.actions);
|
|
95
|
-
}), n2.context, e), 2), l2 = s2[0], v2 = s2[1], y = { config: n2, _options: i2, initialState: { value: n2.initial, actions: l2, context: v2, matches: a(n2.initial) }, transition: function(e2, i3) {
|
|
96
|
-
var s3, l3, v3 = "string" == typeof e2 ? { value: e2, context: n2.context } : e2, p = v3.value,
|
|
95
|
+
})), n2.context, e), 2), l2 = s2[0], v2 = s2[1], y = { config: n2, _options: i2, initialState: { value: n2.initial, actions: l2, context: v2, matches: a(n2.initial) }, transition: function(e2, i3) {
|
|
96
|
+
var s3, l3, v3 = "string" == typeof e2 ? { value: e2, context: n2.context } : e2, p = v3.value, g = v3.context, d = u(i3), x = n2.states[p];
|
|
97
97
|
if (x.on) {
|
|
98
98
|
var m = r(x.on[d.type]);
|
|
99
99
|
try {
|
|
100
|
-
for (var h = function(t2) {
|
|
100
|
+
for (var h = (function(t2) {
|
|
101
101
|
var n3 = "function" == typeof Symbol && Symbol.iterator, e3 = n3 && t2[n3], r2 = 0;
|
|
102
102
|
if (e3) return e3.call(t2);
|
|
103
103
|
if (t2 && "number" == typeof t2.length) return { next: function() {
|
|
104
104
|
return t2 && r2 >= t2.length && (t2 = void 0), { value: t2 && t2[r2++], done: !t2 };
|
|
105
105
|
} };
|
|
106
106
|
throw new TypeError(n3 ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
107
|
-
}(m), b = h.next(); !b.done; b = h.next()) {
|
|
107
|
+
})(m), b = h.next(); !b.done; b = h.next()) {
|
|
108
108
|
var S = b.value;
|
|
109
|
-
if (void 0 === S) return c(p,
|
|
109
|
+
if (void 0 === S) return c(p, g);
|
|
110
110
|
var w = "string" == typeof S ? { target: S } : S, j = w.target, E = w.actions, R = void 0 === E ? [] : E, N = w.cond, O = void 0 === N ? function() {
|
|
111
111
|
return true;
|
|
112
112
|
} : N, _ = void 0 === j, k = null != j ? j : p, T = n2.states[k];
|
|
113
|
-
if (O(
|
|
114
|
-
var q = t(f((_ ? r(R) : [].concat(x.exit, R, T.entry).filter(function(t2) {
|
|
113
|
+
if (O(g, d)) {
|
|
114
|
+
var q = t(f((_ ? r(R) : [].concat(x.exit, R, T.entry).filter((function(t2) {
|
|
115
115
|
return t2;
|
|
116
|
-
})).map(function(t2) {
|
|
116
|
+
}))).map((function(t2) {
|
|
117
117
|
return o(t2, y._options.actions);
|
|
118
|
-
}),
|
|
118
|
+
})), g, d), 3), z = q[0], A = q[1], B = q[2], C = null != j ? j : p;
|
|
119
119
|
return { value: C, context: A, actions: z, changed: j !== p || z.length > 0 || B, matches: a(C) };
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -129,21 +129,21 @@
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
return c(p,
|
|
132
|
+
return c(p, g);
|
|
133
133
|
} };
|
|
134
134
|
return y;
|
|
135
135
|
}
|
|
136
136
|
var l$1 = function(t2, n2) {
|
|
137
|
-
return t2.actions.forEach(function(e2) {
|
|
137
|
+
return t2.actions.forEach((function(e2) {
|
|
138
138
|
var r2 = e2.exec;
|
|
139
139
|
return r2 && r2(t2.context, n2);
|
|
140
|
-
});
|
|
140
|
+
}));
|
|
141
141
|
};
|
|
142
142
|
function v(t2) {
|
|
143
143
|
var r2 = t2.initialState, i2 = n.NotStarted, o2 = /* @__PURE__ */ new Set(), c2 = { _machine: t2, send: function(e2) {
|
|
144
|
-
i2 === n.Running && (r2 = t2.transition(r2, e2), l$1(r2, u
|
|
144
|
+
i2 === n.Running && (r2 = t2.transition(r2, e2), l$1(r2, u(e2)), o2.forEach((function(t3) {
|
|
145
145
|
return t3(r2);
|
|
146
|
-
}));
|
|
146
|
+
})));
|
|
147
147
|
}, subscribe: function(t3) {
|
|
148
148
|
return o2.add(t3), t3(r2), { unsubscribe: function() {
|
|
149
149
|
return o2.delete(t3);
|
|
@@ -807,7 +807,7 @@
|
|
|
807
807
|
}
|
|
808
808
|
`
|
|
809
809
|
);
|
|
810
|
-
const SFAPI_VERSION = "2025-
|
|
810
|
+
const SFAPI_VERSION = "2025-07";
|
|
811
811
|
const MOCK_SHOP_DOMAIN = "mock.shop";
|
|
812
812
|
const isMockShop = (domain) => domain.includes(MOCK_SHOP_DOMAIN);
|
|
813
813
|
function createStorefrontClient({
|
|
@@ -929,6 +929,21 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
929
929
|
const ShopifyContext = React$1.createContext(
|
|
930
930
|
defaultShopifyContext
|
|
931
931
|
);
|
|
932
|
+
function isSfapiProxyEnabled() {
|
|
933
|
+
var _a, _b, _c;
|
|
934
|
+
if (typeof window === "undefined") return false;
|
|
935
|
+
try {
|
|
936
|
+
const navigationEntry = (_b = (_a = window.performance) == null ? void 0 : _a.getEntriesByType) == null ? void 0 : _b.call(
|
|
937
|
+
_a,
|
|
938
|
+
"navigation"
|
|
939
|
+
)[0];
|
|
940
|
+
return !!((_c = navigationEntry == null ? void 0 : navigationEntry.serverTiming) == null ? void 0 : _c.some(
|
|
941
|
+
(entry) => entry.name === "_sfapi_proxy"
|
|
942
|
+
));
|
|
943
|
+
} catch (e2) {
|
|
944
|
+
return false;
|
|
945
|
+
}
|
|
946
|
+
}
|
|
932
947
|
function ShopifyProvider({
|
|
933
948
|
children,
|
|
934
949
|
...shopifyConfig
|
|
@@ -944,12 +959,14 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
944
959
|
);
|
|
945
960
|
}
|
|
946
961
|
const finalConfig = React$1.useMemo(() => {
|
|
962
|
+
const sameDomainForStorefrontApi = shopifyConfig.sameDomainForStorefrontApi ?? isSfapiProxyEnabled();
|
|
947
963
|
function getShopifyDomain(overrideProps) {
|
|
948
964
|
const domain = (overrideProps == null ? void 0 : overrideProps.storeDomain) ?? shopifyConfig.storeDomain;
|
|
949
965
|
return domain.includes("://") ? domain : `https://${domain}`;
|
|
950
966
|
}
|
|
951
967
|
return {
|
|
952
968
|
...shopifyConfig,
|
|
969
|
+
sameDomainForStorefrontApi,
|
|
953
970
|
getPublicTokenHeaders(overrideProps) {
|
|
954
971
|
return getPublicTokenHeadersRaw(
|
|
955
972
|
overrideProps.contentType,
|
|
@@ -959,7 +976,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
959
976
|
},
|
|
960
977
|
getShopifyDomain,
|
|
961
978
|
getStorefrontApiUrl(overrideProps) {
|
|
962
|
-
const finalDomainUrl = getShopifyDomain({
|
|
979
|
+
const finalDomainUrl = sameDomainForStorefrontApi && typeof window !== "undefined" ? window.location.origin : getShopifyDomain({
|
|
963
980
|
storeDomain: (overrideProps == null ? void 0 : overrideProps.storeDomain) ?? shopifyConfig.storeDomain
|
|
964
981
|
});
|
|
965
982
|
return `${finalDomainUrl}${finalDomainUrl.endsWith("/") ? "" : "/"}api/${(overrideProps == null ? void 0 : overrideProps.storefrontApiVersion) ?? shopifyConfig.storefrontApiVersion}/graphql.json`;
|
|
@@ -981,77 +998,98 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
981
998
|
const SHOPIFY_STOREFRONT_S_HEADER = "Shopify-Storefront-S";
|
|
982
999
|
const SHOPIFY_Y = "_shopify_y";
|
|
983
1000
|
const SHOPIFY_S = "_shopify_s";
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
"
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
+
const SHOPIFY_VISIT_TOKEN_HEADER = "X-Shopify-VisitToken";
|
|
1002
|
+
const SHOPIFY_UNIQUE_TOKEN_HEADER = "X-Shopify-UniqueToken";
|
|
1003
|
+
const cachedTrackingValues = { current: null };
|
|
1004
|
+
function getTrackingValues() {
|
|
1005
|
+
var _a, _b, _c;
|
|
1006
|
+
let trackingValues;
|
|
1007
|
+
if (typeof window !== "undefined" && typeof window.performance !== "undefined") {
|
|
1008
|
+
try {
|
|
1009
|
+
const resourceRE = /^https?:\/\/([^/]+)(\/api\/(?:unstable|2\d{3}-\d{2})\/graphql\.json(?=$|\?))?/;
|
|
1010
|
+
const entries = performance.getEntriesByType(
|
|
1011
|
+
"resource"
|
|
1012
|
+
);
|
|
1013
|
+
let matchedValues;
|
|
1014
|
+
for (let i2 = entries.length - 1; i2 >= 0; i2--) {
|
|
1015
|
+
const entry = entries[i2];
|
|
1016
|
+
if (entry.initiatorType !== "fetch") continue;
|
|
1017
|
+
const currentHost = window.location.host;
|
|
1018
|
+
const match = entry.name.match(resourceRE);
|
|
1019
|
+
if (!match) continue;
|
|
1020
|
+
const [, matchedHost, sfapiPath] = match;
|
|
1021
|
+
const isMatch = (
|
|
1022
|
+
// Same origin (exact host match)
|
|
1023
|
+
matchedHost === currentHost || // Subdomain with SFAPI path
|
|
1024
|
+
sfapiPath && (matchedHost == null ? void 0 : matchedHost.endsWith(`.${currentHost}`))
|
|
1025
|
+
);
|
|
1026
|
+
if (isMatch) {
|
|
1027
|
+
const values = extractFromPerformanceEntry(entry);
|
|
1028
|
+
if (values) {
|
|
1029
|
+
matchedValues = values;
|
|
1030
|
+
break;
|
|
1031
|
+
}
|
|
1001
1032
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
hash = tokenHash.replace(/[x]/g, (c2) => {
|
|
1020
|
-
const r2 = randomValuesArray[i2] % 16;
|
|
1021
|
-
const v2 = c2 === "x" ? r2 : r2 & 3 | 8;
|
|
1022
|
-
i2++;
|
|
1023
|
-
return v2.toString(16);
|
|
1024
|
-
}).toUpperCase();
|
|
1025
|
-
} catch (err) {
|
|
1026
|
-
hash = tokenHash.replace(/[x]/g, (c2) => {
|
|
1027
|
-
const r2 = Math.random() * 16 | 0;
|
|
1028
|
-
const v2 = c2 === "x" ? r2 : r2 & 3 | 8;
|
|
1029
|
-
return v2.toString(16);
|
|
1030
|
-
}).toUpperCase();
|
|
1033
|
+
}
|
|
1034
|
+
if (matchedValues) {
|
|
1035
|
+
trackingValues = matchedValues;
|
|
1036
|
+
}
|
|
1037
|
+
if (trackingValues) {
|
|
1038
|
+
cachedTrackingValues.current = trackingValues;
|
|
1039
|
+
} else if (cachedTrackingValues.current) {
|
|
1040
|
+
trackingValues = cachedTrackingValues.current;
|
|
1041
|
+
}
|
|
1042
|
+
if (!trackingValues) {
|
|
1043
|
+
const navigationEntries = performance.getEntriesByType(
|
|
1044
|
+
"navigation"
|
|
1045
|
+
)[0];
|
|
1046
|
+
trackingValues = extractFromPerformanceEntry(navigationEntries, false);
|
|
1047
|
+
}
|
|
1048
|
+
} catch {
|
|
1049
|
+
}
|
|
1031
1050
|
}
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1051
|
+
if (!trackingValues) {
|
|
1052
|
+
const cookie = (
|
|
1053
|
+
// Read from arguments to avoid declaring parameters in this function signature.
|
|
1054
|
+
// This logic is only used internally from `getShopifyCookies` and will be deprecated.
|
|
1055
|
+
typeof arguments[0] === "string" ? arguments[0] : typeof document !== "undefined" ? document.cookie : ""
|
|
1056
|
+
);
|
|
1057
|
+
trackingValues = {
|
|
1058
|
+
uniqueToken: ((_a = cookie.match(/\b_shopify_y=([^;]+)/)) == null ? void 0 : _a[1]) || "",
|
|
1059
|
+
visitToken: ((_b = cookie.match(/\b_shopify_s=([^;]+)/)) == null ? void 0 : _b[1]) || "",
|
|
1060
|
+
consent: ((_c = cookie.match(/\b_tracking_consent=([^;]+)/)) == null ? void 0 : _c[1]) || ""
|
|
1061
|
+
};
|
|
1042
1062
|
}
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1063
|
+
return trackingValues;
|
|
1064
|
+
}
|
|
1065
|
+
function extractFromPerformanceEntry(entry, isConsentRequired = true) {
|
|
1066
|
+
let uniqueToken = "";
|
|
1067
|
+
let visitToken = "";
|
|
1068
|
+
let consent = "";
|
|
1069
|
+
const serverTiming = entry.serverTiming;
|
|
1070
|
+
if (serverTiming && serverTiming.length >= 3) {
|
|
1071
|
+
for (let i2 = serverTiming.length - 1; i2 >= 0; i2--) {
|
|
1072
|
+
const { name, description } = serverTiming[i2];
|
|
1073
|
+
if (!name || !description) continue;
|
|
1074
|
+
if (name === "_y") {
|
|
1075
|
+
uniqueToken = description;
|
|
1076
|
+
} else if (name === "_s") {
|
|
1077
|
+
visitToken = description;
|
|
1078
|
+
} else if (name === "_cmp") {
|
|
1079
|
+
consent = description;
|
|
1080
|
+
}
|
|
1081
|
+
if (uniqueToken && visitToken && consent) break;
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
return uniqueToken && visitToken && (isConsentRequired ? consent : true) ? { uniqueToken, visitToken, consent } : void 0;
|
|
1052
1085
|
}
|
|
1053
1086
|
function useCartFetch() {
|
|
1054
|
-
const {
|
|
1087
|
+
const {
|
|
1088
|
+
storefrontId,
|
|
1089
|
+
getPublicTokenHeaders,
|
|
1090
|
+
getStorefrontApiUrl,
|
|
1091
|
+
sameDomainForStorefrontApi
|
|
1092
|
+
} = useShop();
|
|
1055
1093
|
return React$1.useCallback(
|
|
1056
1094
|
({
|
|
1057
1095
|
query,
|
|
@@ -1061,9 +1099,17 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
1061
1099
|
if (storefrontId) {
|
|
1062
1100
|
headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;
|
|
1063
1101
|
}
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1102
|
+
if (!sameDomainForStorefrontApi) {
|
|
1103
|
+
const { uniqueToken, visitToken } = getTrackingValues();
|
|
1104
|
+
if (uniqueToken) {
|
|
1105
|
+
headers[SHOPIFY_STOREFRONT_Y_HEADER] = uniqueToken;
|
|
1106
|
+
headers[SHOPIFY_UNIQUE_TOKEN_HEADER] = uniqueToken;
|
|
1107
|
+
}
|
|
1108
|
+
if (visitToken) {
|
|
1109
|
+
headers[SHOPIFY_STOREFRONT_S_HEADER] = visitToken;
|
|
1110
|
+
headers[SHOPIFY_VISIT_TOKEN_HEADER] = visitToken;
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1067
1113
|
return fetch(getStorefrontApiUrl(), {
|
|
1068
1114
|
method: "POST",
|
|
1069
1115
|
headers,
|
|
@@ -1081,7 +1127,12 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
1081
1127
|
};
|
|
1082
1128
|
});
|
|
1083
1129
|
},
|
|
1084
|
-
[
|
|
1130
|
+
[
|
|
1131
|
+
getPublicTokenHeaders,
|
|
1132
|
+
storefrontId,
|
|
1133
|
+
getStorefrontApiUrl,
|
|
1134
|
+
sameDomainForStorefrontApi
|
|
1135
|
+
]
|
|
1085
1136
|
);
|
|
1086
1137
|
}
|
|
1087
1138
|
function useCartActions({
|
|
@@ -2358,6 +2409,48 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2358
2409
|
}
|
|
2359
2410
|
return false;
|
|
2360
2411
|
}
|
|
2412
|
+
const tokenHash = "xxxx-4xxx-xxxx-xxxxxxxxxxxx";
|
|
2413
|
+
function buildUUID() {
|
|
2414
|
+
let hash = "";
|
|
2415
|
+
try {
|
|
2416
|
+
const crypto = window.crypto;
|
|
2417
|
+
const randomValuesArray = new Uint16Array(31);
|
|
2418
|
+
crypto.getRandomValues(randomValuesArray);
|
|
2419
|
+
let i2 = 0;
|
|
2420
|
+
hash = tokenHash.replace(/[x]/g, (c2) => {
|
|
2421
|
+
const r2 = randomValuesArray[i2] % 16;
|
|
2422
|
+
const v2 = c2 === "x" ? r2 : r2 & 3 | 8;
|
|
2423
|
+
i2++;
|
|
2424
|
+
return v2.toString(16);
|
|
2425
|
+
}).toUpperCase();
|
|
2426
|
+
} catch (err) {
|
|
2427
|
+
hash = tokenHash.replace(/[x]/g, (c2) => {
|
|
2428
|
+
const r2 = Math.random() * 16 | 0;
|
|
2429
|
+
const v2 = c2 === "x" ? r2 : r2 & 3 | 8;
|
|
2430
|
+
return v2.toString(16);
|
|
2431
|
+
}).toUpperCase();
|
|
2432
|
+
}
|
|
2433
|
+
return `${hexTime()}-${hash}`;
|
|
2434
|
+
}
|
|
2435
|
+
function hexTime() {
|
|
2436
|
+
let dateNumber = 0;
|
|
2437
|
+
let perfNumber = 0;
|
|
2438
|
+
dateNumber = (/* @__PURE__ */ new Date()).getTime() >>> 0;
|
|
2439
|
+
try {
|
|
2440
|
+
perfNumber = performance.now() >>> 0;
|
|
2441
|
+
} catch (err) {
|
|
2442
|
+
perfNumber = 0;
|
|
2443
|
+
}
|
|
2444
|
+
const output = Math.abs(dateNumber + perfNumber).toString(16).toLowerCase();
|
|
2445
|
+
return output.padStart(8, "0");
|
|
2446
|
+
}
|
|
2447
|
+
function getShopifyCookies(cookies) {
|
|
2448
|
+
const trackingValues = getTrackingValues(cookies);
|
|
2449
|
+
return {
|
|
2450
|
+
[SHOPIFY_Y]: trackingValues.uniqueToken,
|
|
2451
|
+
[SHOPIFY_S]: trackingValues.visitToken
|
|
2452
|
+
};
|
|
2453
|
+
}
|
|
2361
2454
|
const SCHEMA_ID$1 = "trekkie_storefront_page_view/1.4";
|
|
2362
2455
|
const OXYGEN_DOMAIN = "myshopify.dev";
|
|
2363
2456
|
function pageView$1(payload) {
|
|
@@ -2409,7 +2502,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2409
2502
|
}
|
|
2410
2503
|
return false;
|
|
2411
2504
|
}
|
|
2412
|
-
const version = "2025.
|
|
2505
|
+
const version = "2025.7.1";
|
|
2413
2506
|
const SCHEMA_ID = "custom_storefront_customer_tracking/1.2";
|
|
2414
2507
|
const PAGE_RENDERED_EVENT_NAME = "page_rendered";
|
|
2415
2508
|
const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
|
|
@@ -2584,6 +2677,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2584
2677
|
];
|
|
2585
2678
|
}
|
|
2586
2679
|
function formatPayload(payload) {
|
|
2680
|
+
const payloadWithPrivacy = payload;
|
|
2587
2681
|
return {
|
|
2588
2682
|
source: payload.shopifySalesChannel || ShopifySalesChannel.headless,
|
|
2589
2683
|
asset_version_id: payload.assetVersionId || version,
|
|
@@ -2600,9 +2694,9 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2600
2694
|
navigation_api: payload.navigationApi,
|
|
2601
2695
|
shop_id: parseInt(parseGid(payload.shopId).id),
|
|
2602
2696
|
currency: payload.currency,
|
|
2603
|
-
ccpa_enforced:
|
|
2604
|
-
gdpr_enforced:
|
|
2605
|
-
gdpr_enforced_as_string:
|
|
2697
|
+
ccpa_enforced: payloadWithPrivacy.ccpaEnforced || false,
|
|
2698
|
+
gdpr_enforced: payloadWithPrivacy.gdprEnforced || false,
|
|
2699
|
+
gdpr_enforced_as_string: payloadWithPrivacy.gdprEnforced ? "true" : "false",
|
|
2606
2700
|
analytics_allowed: payload.analyticsAllowed || false,
|
|
2607
2701
|
marketing_allowed: payload.marketingAllowed || false,
|
|
2608
2702
|
sale_of_data_allowed: payload.saleOfDataAllowed || false
|
|
@@ -2727,10 +2821,10 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2727
2821
|
};
|
|
2728
2822
|
}
|
|
2729
2823
|
const [navigationType, navigationApi] = getNavigationType();
|
|
2730
|
-
const
|
|
2824
|
+
const trackingValues = getTrackingValues();
|
|
2731
2825
|
return {
|
|
2732
|
-
uniqueToken:
|
|
2733
|
-
visitToken:
|
|
2826
|
+
uniqueToken: trackingValues.uniqueToken,
|
|
2827
|
+
visitToken: trackingValues.visitToken,
|
|
2734
2828
|
url: location.href,
|
|
2735
2829
|
path: location.pathname,
|
|
2736
2830
|
search: location.search,
|
|
@@ -2861,6 +2955,17 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2861
2955
|
);
|
|
2862
2956
|
}
|
|
2863
2957
|
const amount = parseFloat(money.amount);
|
|
2958
|
+
let isCurrencySupported = true;
|
|
2959
|
+
try {
|
|
2960
|
+
new Intl.NumberFormat(locale, {
|
|
2961
|
+
style: "currency",
|
|
2962
|
+
currency: money.currencyCode
|
|
2963
|
+
});
|
|
2964
|
+
} catch (e2) {
|
|
2965
|
+
if (e2 instanceof RangeError && e2.message.includes("currency")) {
|
|
2966
|
+
isCurrencySupported = false;
|
|
2967
|
+
}
|
|
2968
|
+
}
|
|
2864
2969
|
const {
|
|
2865
2970
|
defaultFormatter,
|
|
2866
2971
|
nameFormatter,
|
|
@@ -2869,9 +2974,13 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2869
2974
|
withoutCurrencyFormatter,
|
|
2870
2975
|
withoutTrailingZerosOrCurrencyFormatter
|
|
2871
2976
|
} = React$1.useMemo(() => {
|
|
2872
|
-
const options = {
|
|
2977
|
+
const options = isCurrencySupported ? {
|
|
2873
2978
|
style: "currency",
|
|
2874
2979
|
currency: money.currencyCode
|
|
2980
|
+
} : {
|
|
2981
|
+
style: "decimal",
|
|
2982
|
+
minimumFractionDigits: 2,
|
|
2983
|
+
maximumFractionDigits: 2
|
|
2875
2984
|
};
|
|
2876
2985
|
return {
|
|
2877
2986
|
defaultFormatter: getLazyFormatter(locale, options),
|
|
@@ -2888,21 +2997,39 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2888
2997
|
minimumFractionDigits: 0,
|
|
2889
2998
|
maximumFractionDigits: 0
|
|
2890
2999
|
}),
|
|
2891
|
-
withoutCurrencyFormatter: getLazyFormatter(locale
|
|
3000
|
+
withoutCurrencyFormatter: getLazyFormatter(locale, {
|
|
3001
|
+
minimumFractionDigits: 2,
|
|
3002
|
+
maximumFractionDigits: 2
|
|
3003
|
+
}),
|
|
2892
3004
|
withoutTrailingZerosOrCurrencyFormatter: getLazyFormatter(locale, {
|
|
2893
3005
|
minimumFractionDigits: 0,
|
|
2894
3006
|
maximumFractionDigits: 0
|
|
2895
3007
|
})
|
|
2896
3008
|
};
|
|
2897
|
-
}, [money.currencyCode, locale]);
|
|
3009
|
+
}, [money.currencyCode, locale, isCurrencySupported]);
|
|
2898
3010
|
const isPartCurrency = (part) => part.type === "currency";
|
|
2899
3011
|
const lazyFormatters = React$1.useMemo(
|
|
2900
3012
|
() => ({
|
|
2901
3013
|
original: () => money,
|
|
2902
3014
|
currencyCode: () => money.currencyCode,
|
|
2903
|
-
localizedString: () =>
|
|
2904
|
-
|
|
2905
|
-
|
|
3015
|
+
localizedString: () => {
|
|
3016
|
+
const formatted = defaultFormatter().format(amount);
|
|
3017
|
+
return isCurrencySupported ? formatted : `${formatted} ${money.currencyCode}`;
|
|
3018
|
+
},
|
|
3019
|
+
parts: () => {
|
|
3020
|
+
const parts = defaultFormatter().formatToParts(amount);
|
|
3021
|
+
if (!isCurrencySupported) {
|
|
3022
|
+
parts.push(
|
|
3023
|
+
{ type: "literal", value: " " },
|
|
3024
|
+
{ type: "currency", value: money.currencyCode }
|
|
3025
|
+
);
|
|
3026
|
+
}
|
|
3027
|
+
return parts;
|
|
3028
|
+
},
|
|
3029
|
+
withoutTrailingZeros: () => {
|
|
3030
|
+
const formatted = amount % 1 === 0 ? withoutTrailingZerosFormatter().format(amount) : defaultFormatter().format(amount);
|
|
3031
|
+
return isCurrencySupported ? formatted : `${formatted} ${money.currencyCode}`;
|
|
3032
|
+
},
|
|
2906
3033
|
withoutTrailingZerosAndCurrency: () => amount % 1 === 0 ? withoutTrailingZerosOrCurrencyFormatter().format(amount) : withoutCurrencyFormatter().format(amount),
|
|
2907
3034
|
currencyName: () => {
|
|
2908
3035
|
var _a;
|
|
@@ -2928,6 +3055,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2928
3055
|
[
|
|
2929
3056
|
money,
|
|
2930
3057
|
amount,
|
|
3058
|
+
isCurrencySupported,
|
|
2931
3059
|
nameFormatter,
|
|
2932
3060
|
defaultFormatter,
|
|
2933
3061
|
narrowSymbolFormatter,
|
|
@@ -2953,7 +3081,19 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
2953
3081
|
return function() {
|
|
2954
3082
|
let formatter = formatterCache.get(key);
|
|
2955
3083
|
if (!formatter) {
|
|
2956
|
-
|
|
3084
|
+
try {
|
|
3085
|
+
formatter = new Intl.NumberFormat(locale, options);
|
|
3086
|
+
} catch (error) {
|
|
3087
|
+
if (error instanceof RangeError && error.message.includes("currency")) {
|
|
3088
|
+
const fallbackOptions = { ...options };
|
|
3089
|
+
delete fallbackOptions.currency;
|
|
3090
|
+
delete fallbackOptions.currencyDisplay;
|
|
3091
|
+
delete fallbackOptions.currencySign;
|
|
3092
|
+
formatter = new Intl.NumberFormat(locale, fallbackOptions);
|
|
3093
|
+
} else {
|
|
3094
|
+
throw error;
|
|
3095
|
+
}
|
|
3096
|
+
}
|
|
2957
3097
|
formatterCache.set(key, formatter);
|
|
2958
3098
|
}
|
|
2959
3099
|
return formatter;
|
|
@@ -4127,8 +4267,33 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4127
4267
|
parsedValue: metafield.value
|
|
4128
4268
|
};
|
|
4129
4269
|
// TODO: 'money' should probably be parsed even further to like `useMoney()`, but that logic needs to be extracted first so it's not a hook
|
|
4270
|
+
case "money": {
|
|
4271
|
+
let parsedValue = null;
|
|
4272
|
+
try {
|
|
4273
|
+
const parsed = parseJSON(metafield.value ?? "");
|
|
4274
|
+
if (parsed && typeof parsed === "object" && "currency_code" in parsed) {
|
|
4275
|
+
const moneyData = parsed;
|
|
4276
|
+
parsedValue = {
|
|
4277
|
+
amount: moneyData.amount,
|
|
4278
|
+
currencyCode: moneyData.currency_code
|
|
4279
|
+
};
|
|
4280
|
+
} else if (parsed && typeof parsed === "object" && "currencyCode" in parsed) {
|
|
4281
|
+
parsedValue = parsed;
|
|
4282
|
+
} else {
|
|
4283
|
+
parsedValue = parsed;
|
|
4284
|
+
}
|
|
4285
|
+
} catch (err) {
|
|
4286
|
+
const parseError = `parseMetafield(): attempted to JSON.parse the 'metafield.value' property, but failed.`;
|
|
4287
|
+
{
|
|
4288
|
+
throw new Error(parseError);
|
|
4289
|
+
}
|
|
4290
|
+
}
|
|
4291
|
+
return {
|
|
4292
|
+
...metafield,
|
|
4293
|
+
parsedValue
|
|
4294
|
+
};
|
|
4295
|
+
}
|
|
4130
4296
|
case "dimension":
|
|
4131
|
-
case "money":
|
|
4132
4297
|
case "json":
|
|
4133
4298
|
case "rating":
|
|
4134
4299
|
case "volume":
|
|
@@ -4557,17 +4722,29 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4557
4722
|
}, [JSON.stringify(selectedOptions)]);
|
|
4558
4723
|
return null;
|
|
4559
4724
|
}
|
|
4725
|
+
function l(a2, r2, e2 = {}) {
|
|
4726
|
+
let t2 = a2 + "=" + encodeURIComponent(r2);
|
|
4727
|
+
return e2.expires && (t2 += "; Expires=" + new Date(e2.expires).toUTCString()), e2.maxage != null && e2.maxage >= 0 && (t2 += "; Max-Age=" + (e2.maxage | 0)), e2.domain && (t2 += "; Domain=" + e2.domain), e2.path && (t2 += "; Path=" + e2.path), e2.samesite && (t2 += "; SameSite=" + e2.samesite), (e2.secure || e2.samesite === "None") && (t2 += "; Secure"), e2.httponly && (t2 += "; HttpOnly"), t2;
|
|
4728
|
+
}
|
|
4560
4729
|
const longTermLength = 60 * 60 * 24 * 360 * 1;
|
|
4561
4730
|
const shortTermLength = 60 * 30;
|
|
4562
4731
|
function useShopifyCookies(options) {
|
|
4563
4732
|
const {
|
|
4564
|
-
hasUserConsent
|
|
4733
|
+
hasUserConsent,
|
|
4565
4734
|
domain = "",
|
|
4566
|
-
checkoutDomain = ""
|
|
4735
|
+
checkoutDomain = "",
|
|
4736
|
+
storefrontAccessToken,
|
|
4737
|
+
fetchTrackingValues,
|
|
4738
|
+
ignoreDeprecatedCookies = false
|
|
4567
4739
|
} = options || {};
|
|
4740
|
+
const coreCookiesReady = useCoreShopifyCookies({
|
|
4741
|
+
storefrontAccessToken,
|
|
4742
|
+
fetchTrackingValues,
|
|
4743
|
+
checkoutDomain
|
|
4744
|
+
});
|
|
4568
4745
|
React$1.useEffect(() => {
|
|
4569
|
-
|
|
4570
|
-
let currentDomain = domain || window.
|
|
4746
|
+
if (ignoreDeprecatedCookies || !coreCookiesReady) return;
|
|
4747
|
+
let currentDomain = domain || window.location.host;
|
|
4571
4748
|
if (checkoutDomain) {
|
|
4572
4749
|
const checkoutDomainParts = checkoutDomain.split(".").reverse();
|
|
4573
4750
|
const currentDomainParts = currentDomain.split(".").reverse();
|
|
@@ -4582,15 +4759,19 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4582
4759
|
if (/^localhost/.test(currentDomain)) currentDomain = "";
|
|
4583
4760
|
const domainWithLeadingDot = currentDomain ? /^\./.test(currentDomain) ? currentDomain : `.${currentDomain}` : "";
|
|
4584
4761
|
if (hasUserConsent) {
|
|
4762
|
+
const trackingValues = getTrackingValues();
|
|
4763
|
+
if ((trackingValues.uniqueToken || trackingValues.visitToken || "").startsWith("00000000-")) {
|
|
4764
|
+
return;
|
|
4765
|
+
}
|
|
4585
4766
|
setCookie(
|
|
4586
4767
|
SHOPIFY_Y,
|
|
4587
|
-
|
|
4768
|
+
trackingValues.uniqueToken || buildUUID(),
|
|
4588
4769
|
longTermLength,
|
|
4589
4770
|
domainWithLeadingDot
|
|
4590
4771
|
);
|
|
4591
4772
|
setCookie(
|
|
4592
4773
|
SHOPIFY_S,
|
|
4593
|
-
|
|
4774
|
+
trackingValues.visitToken || buildUUID(),
|
|
4594
4775
|
shortTermLength,
|
|
4595
4776
|
domainWithLeadingDot
|
|
4596
4777
|
);
|
|
@@ -4598,7 +4779,14 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4598
4779
|
setCookie(SHOPIFY_Y, "", 0, domainWithLeadingDot);
|
|
4599
4780
|
setCookie(SHOPIFY_S, "", 0, domainWithLeadingDot);
|
|
4600
4781
|
}
|
|
4601
|
-
}, [
|
|
4782
|
+
}, [
|
|
4783
|
+
coreCookiesReady,
|
|
4784
|
+
hasUserConsent,
|
|
4785
|
+
domain,
|
|
4786
|
+
checkoutDomain,
|
|
4787
|
+
ignoreDeprecatedCookies
|
|
4788
|
+
]);
|
|
4789
|
+
return coreCookiesReady;
|
|
4602
4790
|
}
|
|
4603
4791
|
function setCookie(name, value, maxage, domain) {
|
|
4604
4792
|
document.cookie = l(name, value, {
|
|
@@ -4608,6 +4796,73 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4608
4796
|
path: "/"
|
|
4609
4797
|
});
|
|
4610
4798
|
}
|
|
4799
|
+
async function fetchTrackingValuesFromBrowser(storefrontAccessToken, storefrontApiDomain = "") {
|
|
4800
|
+
const { uniqueToken, visitToken } = getTrackingValues();
|
|
4801
|
+
const response = await fetch(
|
|
4802
|
+
// TODO: update this endpoint when it becomes stable
|
|
4803
|
+
`${storefrontApiDomain.replace(/\/+$/, "")}/api/unstable/graphql.json`,
|
|
4804
|
+
{
|
|
4805
|
+
method: "POST",
|
|
4806
|
+
headers: {
|
|
4807
|
+
"Content-Type": "application/json",
|
|
4808
|
+
...storefrontAccessToken && {
|
|
4809
|
+
"X-Shopify-Storefront-Access-Token": storefrontAccessToken
|
|
4810
|
+
},
|
|
4811
|
+
...visitToken || uniqueToken ? {
|
|
4812
|
+
[SHOPIFY_VISIT_TOKEN_HEADER]: visitToken,
|
|
4813
|
+
[SHOPIFY_UNIQUE_TOKEN_HEADER]: uniqueToken
|
|
4814
|
+
} : void 0
|
|
4815
|
+
},
|
|
4816
|
+
body: JSON.stringify({
|
|
4817
|
+
query: (
|
|
4818
|
+
// This query ensures we get _cmp (consent) server-timing header, which is not available in other queries.
|
|
4819
|
+
// This value can be passed later to consent-tracking-api and privacy-banner scripts to avoid extra requests.
|
|
4820
|
+
"query ensureCookies { consentManagement { cookies(visitorConsent:{}) { cookieDomain } } }"
|
|
4821
|
+
)
|
|
4822
|
+
})
|
|
4823
|
+
}
|
|
4824
|
+
);
|
|
4825
|
+
if (!response.ok) {
|
|
4826
|
+
throw new Error(
|
|
4827
|
+
`Failed to fetch consent from browser: ${response.status} ${response.statusText}`
|
|
4828
|
+
);
|
|
4829
|
+
}
|
|
4830
|
+
await response.json();
|
|
4831
|
+
getTrackingValues();
|
|
4832
|
+
}
|
|
4833
|
+
function useCoreShopifyCookies({
|
|
4834
|
+
checkoutDomain,
|
|
4835
|
+
storefrontAccessToken,
|
|
4836
|
+
fetchTrackingValues = false
|
|
4837
|
+
}) {
|
|
4838
|
+
const [cookiesReady, setCookiesReady] = React$1.useState(!fetchTrackingValues);
|
|
4839
|
+
const hasFetchedTrackingValues = React$1.useRef(false);
|
|
4840
|
+
React$1.useEffect(() => {
|
|
4841
|
+
if (!fetchTrackingValues) {
|
|
4842
|
+
setCookiesReady(true);
|
|
4843
|
+
return;
|
|
4844
|
+
}
|
|
4845
|
+
if (hasFetchedTrackingValues.current) return;
|
|
4846
|
+
hasFetchedTrackingValues.current = true;
|
|
4847
|
+
fetchTrackingValuesFromBrowser(storefrontAccessToken).catch(
|
|
4848
|
+
(error) => checkoutDomain ? (
|
|
4849
|
+
// Retry with checkout domain if available to at least
|
|
4850
|
+
// get the server-timing values for tracking.
|
|
4851
|
+
fetchTrackingValuesFromBrowser(
|
|
4852
|
+
storefrontAccessToken,
|
|
4853
|
+
checkoutDomain
|
|
4854
|
+
)
|
|
4855
|
+
) : Promise.reject(error)
|
|
4856
|
+
).catch((error) => {
|
|
4857
|
+
console.warn(
|
|
4858
|
+
"[h2:warn:useShopifyCookies] Failed to fetch tracking values from browser: " + (error instanceof Error ? error.message : String(error))
|
|
4859
|
+
);
|
|
4860
|
+
}).finally(() => {
|
|
4861
|
+
setCookiesReady(true);
|
|
4862
|
+
});
|
|
4863
|
+
}, [checkoutDomain, fetchTrackingValues, storefrontAccessToken]);
|
|
4864
|
+
return cookiesReady;
|
|
4865
|
+
}
|
|
4611
4866
|
exports2.AddToCartButton = AddToCartButton;
|
|
4612
4867
|
exports2.AnalyticsEventName = AnalyticsEventName;
|
|
4613
4868
|
exports2.AnalyticsPageType = AnalyticsPageType;
|
|
@@ -4631,6 +4886,8 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4631
4886
|
exports2.SHOPIFY_STOREFRONT_ID_HEADER = SHOPIFY_STOREFRONT_ID_HEADER;
|
|
4632
4887
|
exports2.SHOPIFY_STOREFRONT_S_HEADER = SHOPIFY_STOREFRONT_S_HEADER;
|
|
4633
4888
|
exports2.SHOPIFY_STOREFRONT_Y_HEADER = SHOPIFY_STOREFRONT_Y_HEADER;
|
|
4889
|
+
exports2.SHOPIFY_UNIQUE_TOKEN_HEADER = SHOPIFY_UNIQUE_TOKEN_HEADER;
|
|
4890
|
+
exports2.SHOPIFY_VISIT_TOKEN_HEADER = SHOPIFY_VISIT_TOKEN_HEADER;
|
|
4634
4891
|
exports2.SHOPIFY_Y = SHOPIFY_Y;
|
|
4635
4892
|
exports2.ShopPayButton = ShopPayButton;
|
|
4636
4893
|
exports2.ShopifyProvider = ShopifyProvider;
|
|
@@ -4644,6 +4901,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4644
4901
|
exports2.getClientBrowserParameters = getClientBrowserParameters;
|
|
4645
4902
|
exports2.getProductOptions = getProductOptions;
|
|
4646
4903
|
exports2.getShopifyCookies = getShopifyCookies;
|
|
4904
|
+
exports2.getTrackingValues = getTrackingValues;
|
|
4647
4905
|
exports2.isOptionValueCombinationInEncodedVariant = isOptionValueCombinationInEncodedVariant;
|
|
4648
4906
|
exports2.mapSelectedProductOptionToObject = mapSelectedProductOptionToObject;
|
|
4649
4907
|
exports2.parseGid = parseGid;
|
|
@@ -4659,5 +4917,5 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
|
|
|
4659
4917
|
exports2.useShop = useShop;
|
|
4660
4918
|
exports2.useShopifyCookies = useShopifyCookies;
|
|
4661
4919
|
Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
|
|
4662
|
-
});
|
|
4920
|
+
}));
|
|
4663
4921
|
//# sourceMappingURL=hydrogen-react.dev.js.map
|