@beamimpact/web-sdk 1.48.0 → 1.51.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/dist/chunks/_share-dialog-dependencies-B3N69ml2.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-B3N69ml2.esm.js.map +1 -0
- package/dist/chunks/_share-dialog-dependencies-CHbTSPha.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-CHbTSPha.esm.js.map +1 -0
- package/dist/chunks/{beam-errors-fXDkG1zo.esm.d.ts → beam-errors-CCe004HS.esm.d.ts} +2 -7
- package/dist/chunks/beam-errors-Ci0d3926.esm.js +2 -0
- package/dist/chunks/beam-errors-Ci0d3926.esm.js.map +1 -0
- package/dist/chunks/cart-contents-CUgc4y1N.esm.d.ts +18 -0
- package/dist/chunks/cart-contents-DkoytiZh.esm.js +2 -0
- package/dist/chunks/{cart-contents-h60geKWa.esm.js.map → cart-contents-DkoytiZh.esm.js.map} +1 -1
- package/dist/chunks/{css-card-grid-nEc--M5M.esm.js → css-card-grid-B6IEaTiP.esm.js} +2 -2
- package/dist/chunks/{css-card-grid-nEc--M5M.esm.js.map → css-card-grid-B6IEaTiP.esm.js.map} +1 -1
- package/dist/chunks/enforce-config-CQb5MiAV.esm.js +3 -0
- package/dist/chunks/enforce-config-CQb5MiAV.esm.js.map +1 -0
- package/dist/chunks/enforce-config-Cw52SuAc.esm.js +3 -0
- package/dist/chunks/enforce-config-Cw52SuAc.esm.js.map +1 -0
- package/dist/chunks/{events-ZCTR9JGZ.esm.d.ts → events-BKkf9u9l.esm.d.ts} +33 -4
- package/dist/chunks/events-BohmT6Lp.esm.js +2 -0
- package/dist/chunks/events-BohmT6Lp.esm.js.map +1 -0
- package/dist/chunks/{index-JDZQClkA.esm.js → index-BQ4Nr7Ux.esm.js} +2 -2
- package/dist/chunks/{index-JDZQClkA.esm.js.map → index-BQ4Nr7Ux.esm.js.map} +1 -1
- package/dist/chunks/index-B_8DexDX.esm.js +2 -0
- package/dist/chunks/index-B_8DexDX.esm.js.map +1 -0
- package/dist/chunks/{index-v6fG3D6u.esm.d.ts → index-BqBEii8E.esm.d.ts} +1 -1
- package/dist/chunks/index-C-beNpP0.esm.js +2 -0
- package/dist/chunks/index-C-beNpP0.esm.js.map +1 -0
- package/dist/chunks/{index-E8H5A7Qq.esm.js → index-C3hpHWh1.esm.js} +1 -1
- package/dist/chunks/index-C3hpHWh1.esm.js.map +1 -0
- package/dist/chunks/{index-XHm2EBaD.esm.js → index-CFYWEffm.esm.js} +2 -2
- package/dist/chunks/{index-XHm2EBaD.esm.js.map → index-CFYWEffm.esm.js.map} +1 -1
- package/dist/chunks/{index-FQExZDX9.esm.js → index-CFtmDAHb.esm.js} +1 -1
- package/dist/chunks/index-CFtmDAHb.esm.js.map +1 -0
- package/dist/chunks/{index-eXilYHHK.esm.js → index-C_ZNnJIS.esm.js} +2 -2
- package/dist/chunks/{index-eXilYHHK.esm.js.map → index-C_ZNnJIS.esm.js.map} +1 -1
- package/dist/chunks/{index-PA0NAKHV.esm.d.ts → index-CbKkAM6h.esm.d.ts} +1 -1
- package/dist/chunks/index-CbWdmBet.esm.js +2 -0
- package/dist/chunks/index-CbWdmBet.esm.js.map +1 -0
- package/dist/chunks/index-CpPbNdWA.esm.js +2 -0
- package/dist/chunks/index-CpPbNdWA.esm.js.map +1 -0
- package/dist/chunks/index-CyiXyHi8.esm.js +2 -0
- package/dist/chunks/index-CyiXyHi8.esm.js.map +1 -0
- package/dist/chunks/{index-XCMf22lv.esm.js → index-D6qJfs7_.esm.js} +1 -1
- package/dist/chunks/index-D6qJfs7_.esm.js.map +1 -0
- package/dist/chunks/index-DhtZDPvk.esm.js +2 -0
- package/dist/chunks/index-DhtZDPvk.esm.js.map +1 -0
- package/dist/chunks/index-Dnm34FcO.esm.d.ts +46 -0
- package/dist/chunks/index-DvbUE31b.esm.d.ts +46 -0
- package/dist/chunks/index-GcpuX_TZ.esm.js +2 -0
- package/dist/chunks/index-GcpuX_TZ.esm.js.map +1 -0
- package/dist/chunks/index-JSoHc6g1.esm.js +2 -0
- package/dist/chunks/index-JSoHc6g1.esm.js.map +1 -0
- package/dist/chunks/index-MS8_Vije.esm.d.ts +15 -0
- package/dist/chunks/index-XZRQN4Rs.esm.js +2 -0
- package/dist/chunks/index-XZRQN4Rs.esm.js.map +1 -0
- package/dist/chunks/{index-JJjxnRZK.esm.js → index-kDoWfjd5.esm.js} +2 -2
- package/dist/chunks/{index-JJjxnRZK.esm.js.map → index-kDoWfjd5.esm.js.map} +1 -1
- package/dist/chunks/index-n7pxZENA.esm.js +2 -0
- package/dist/chunks/index-n7pxZENA.esm.js.map +1 -0
- package/dist/chunks/{index-PiMq5a49.esm.js → index-oGObXjk6.esm.js} +1 -1
- package/dist/chunks/index-oGObXjk6.esm.js.map +1 -0
- package/dist/chunks/{index--z5MSe4-.esm.d.ts → index-v0tUXySN.esm.d.ts} +3 -2
- package/dist/chunks/{is-all-html-elements-SdSkxirh.esm.js → is-all-html-elements-fcB7UUA1.esm.js} +1 -1
- package/dist/chunks/{is-all-html-elements-SdSkxirh.esm.js.map → is-all-html-elements-fcB7UUA1.esm.js.map} +1 -1
- package/dist/chunks/lit-5uUWs2aX.esm.js +34 -0
- package/dist/chunks/{lit-iNN5L_Qk.esm.js.map → lit-5uUWs2aX.esm.js.map} +1 -1
- package/dist/chunks/loading-template-DXNS89Th.esm.js +2 -0
- package/dist/chunks/{loading-template-t4fFsYtr.esm.js.map → loading-template-DXNS89Th.esm.js.map} +1 -1
- package/dist/chunks/{localize-m-_ESmpk.esm.js → localize-CQCRjY9s.esm.js} +6 -6
- package/dist/chunks/{localize-m-_ESmpk.esm.js.map → localize-CQCRjY9s.esm.js.map} +1 -1
- package/dist/chunks/{localize-o-cYvHQf.esm.js → localize-cDQFOecn.esm.js} +6 -6
- package/dist/chunks/{localize-o-cYvHQf.esm.js.map → localize-cDQFOecn.esm.js.map} +1 -1
- package/dist/chunks/lodash-7H4x2457.esm.js +2 -0
- package/dist/chunks/lodash-7H4x2457.esm.js.map +1 -0
- package/dist/chunks/{openapi-spec-hjdK2L9Q.esm.d.ts → openapi-spec-VAt3phhg.esm.d.ts} +332 -0
- package/dist/chunks/order-page-CMGPM57D.esm.js +2 -0
- package/dist/chunks/order-page-CMGPM57D.esm.js.map +1 -0
- package/dist/chunks/order-page-FzVtMkga.esm.js +2 -0
- package/dist/chunks/order-page-FzVtMkga.esm.js.map +1 -0
- package/dist/chunks/{order-page-9clVUPaS.esm.d.ts → order-page-tSPKLQ24.esm.d.ts} +11 -8
- package/dist/chunks/{progress-bar-PMU_xI3L.esm.js → progress-bar-oJB_t7od.esm.js} +4 -4
- package/dist/chunks/{progress-bar-PMU_xI3L.esm.js.map → progress-bar-oJB_t7od.esm.js.map} +1 -1
- package/dist/chunks/promo-pill-label-D9ptiGak.esm.js +16 -0
- package/dist/chunks/{promo-pill-label-P1X4xeAx.esm.js.map → promo-pill-label-D9ptiGak.esm.js.map} +1 -1
- package/dist/chunks/promo-types-C1unMpo2.esm.d.ts +14 -0
- package/dist/chunks/promoManager-B9cTR1R3.esm.js +2 -0
- package/dist/chunks/promoManager-B9cTR1R3.esm.js.map +1 -0
- package/dist/chunks/promoManager-fl54hq13.esm.js +2 -0
- package/dist/chunks/promoManager-fl54hq13.esm.js.map +1 -0
- package/dist/chunks/{responsive-2lC2Wrtg.esm.js → responsive-9jAzOYoE.esm.js} +2 -2
- package/dist/chunks/{responsive-2lC2Wrtg.esm.js.map → responsive-9jAzOYoE.esm.js.map} +1 -1
- package/dist/chunks/routes-CaSRr919.esm.js +2 -0
- package/dist/chunks/routes-CaSRr919.esm.js.map +1 -0
- package/dist/chunks/{routes-iurI6dvR.esm.d.ts → routes-DDRd747e.esm.d.ts} +76 -3
- package/dist/chunks/routes-KHEaM_40.esm.js +2 -0
- package/dist/chunks/routes-KHEaM_40.esm.js.map +1 -0
- package/dist/chunks/{share-button-k_Xn5956.esm.js → share-button-BbG-gnwj.esm.js} +4 -4
- package/dist/chunks/{share-button-diP8wKOc.esm.js.map → share-button-BbG-gnwj.esm.js.map} +1 -1
- package/dist/chunks/{share-button-diP8wKOc.esm.js → share-button-CvTUluNq.esm.js} +4 -4
- package/dist/chunks/{share-button-k_Xn5956.esm.js.map → share-button-CvTUluNq.esm.js.map} +1 -1
- package/dist/chunks/{share-button-hDn8fnBI.esm.d.ts → share-button-DBVhw4qa.esm.d.ts} +1 -1
- package/dist/chunks/{share-button-SNvuFDC9.esm.js → share-button-R7jgVCPv.esm.js} +1 -1
- package/dist/chunks/{share-button-SNvuFDC9.esm.js.map → share-button-R7jgVCPv.esm.js.map} +1 -1
- package/dist/chunks/{types-zbTZ8-KP.esm.d.ts → types-CPxMwnoR.esm.d.ts} +5 -1
- package/dist/chunks/update-cart-3JFUCJLD.esm.js +2 -0
- package/dist/chunks/update-cart-3JFUCJLD.esm.js.map +1 -0
- package/dist/chunks/update-cart-DNfl9QP2.esm.js +2 -0
- package/dist/chunks/update-cart-DNfl9QP2.esm.js.map +1 -0
- package/dist/chunks/{update-cart-l86bU5uS.esm.d.ts → update-cart-NiToHHJH.esm.d.ts} +2 -2
- package/dist/chunks/{vendor-GKiOHg2N.esm.js → vendor-DRA8u-S7.esm.js} +2 -2
- package/dist/chunks/{vendor-GKiOHg2N.esm.js.map → vendor-DRA8u-S7.esm.js.map} +1 -1
- package/dist/components/beam-partner-logos.d.ts +1 -1
- package/dist/components/beam-partner-logos.esm.js +4 -4
- package/dist/components/beam-partner-logos.esm.js.map +1 -1
- package/dist/components/beam-partner-logos.js +4 -4
- package/dist/components/beam-partner-logos.js.map +1 -1
- package/dist/components/community-impact.d.ts +3 -3
- package/dist/components/community-impact.esm.js +13 -13
- package/dist/components/community-impact.esm.js.map +1 -1
- package/dist/components/community-impact.js +13 -13
- package/dist/components/community-impact.js.map +1 -1
- package/dist/components/cumulative-impact.d.ts +2 -2
- package/dist/components/cumulative-impact.esm.js +8 -8
- package/dist/components/cumulative-impact.esm.js.map +1 -1
- package/dist/components/cumulative-impact.js +8 -8
- package/dist/components/cumulative-impact.js.map +1 -1
- package/dist/components/impact-overview.d.ts +9 -5
- package/dist/components/impact-overview.esm.js +19 -19
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +19 -19
- package/dist/components/impact-overview.js.map +1 -1
- package/dist/components/index.d.ts +8 -8
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +15 -7
- package/dist/components/post-purchase.esm.js +4 -4
- package/dist/components/post-purchase.esm.js.map +1 -1
- package/dist/components/post-purchase.js +4 -4
- package/dist/components/post-purchase.js.map +1 -1
- package/dist/components/product-details-page.d.ts +25 -7
- package/dist/components/product-details-page.esm.js +39 -28
- package/dist/components/product-details-page.esm.js.map +1 -1
- package/dist/components/product-details-page.js +39 -28
- package/dist/components/product-details-page.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +8 -17
- package/dist/components/redeem-transaction.esm.js +27 -27
- package/dist/components/redeem-transaction.esm.js.map +1 -1
- package/dist/components/redeem-transaction.js +27 -27
- package/dist/components/redeem-transaction.js.map +1 -1
- package/dist/components/select-nonprofit.d.ts +13 -6
- package/dist/components/select-nonprofit.esm.js +50 -45
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +50 -45
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.d.ts +3 -3
- package/dist/components/select-subscription-nonprofit.esm.js +13 -13
- package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.js +13 -13
- package/dist/components/select-subscription-nonprofit.js.map +1 -1
- package/dist/components/shopify.d.ts +12 -11
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.esm.js.map +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/components/shopify.js.map +1 -1
- package/dist/components/social-share.d.ts +3 -3
- package/dist/components/social-share.esm.js +3 -3
- package/dist/components/social-share.esm.js.map +1 -1
- package/dist/components/social-share.js +3 -3
- package/dist/components/social-share.js.map +1 -1
- package/dist/components/subscription-impact.d.ts +5 -4
- package/dist/components/subscription-impact.esm.js +16 -16
- package/dist/components/subscription-impact.esm.js.map +1 -1
- package/dist/components/subscription-impact.js +16 -16
- package/dist/components/subscription-impact.js.map +1 -1
- package/dist/components/subscription-management.d.ts +18 -7
- package/dist/components/subscription-management.esm.js +9 -9
- package/dist/components/subscription-management.esm.js.map +1 -1
- package/dist/components/subscription-management.js +9 -9
- package/dist/components/subscription-management.js.map +1 -1
- package/dist/index.d.ts +23 -21
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/beam.d.ts +1 -1
- package/dist/integrations/beam.esm.js +1 -1
- package/dist/integrations/beam.esm.js.map +1 -1
- package/dist/integrations/beam.js +1 -1
- package/dist/integrations/beam.js.map +1 -1
- package/dist/integrations/cart.d.ts +4 -4
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/index.d.ts +19 -17
- package/dist/integrations/index.esm.js +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/logs.d.ts +2 -2
- package/dist/integrations/logs.esm.js +1 -1
- package/dist/integrations/logs.js +1 -1
- package/dist/integrations/promoManager.d.ts +36 -0
- package/dist/integrations/promoManager.esm.js +2 -0
- package/dist/integrations/promoManager.esm.js.map +1 -0
- package/dist/integrations/promoManager.js +2 -0
- package/dist/integrations/promoManager.js.map +1 -0
- package/dist/integrations/session.d.ts +1 -1
- package/dist/integrations/session.esm.js +1 -1
- package/dist/integrations/session.js +1 -1
- package/dist/integrations/shopify.d.ts +10 -10
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.d.ts +1 -1
- package/dist/integrations/statsig.esm.js +2 -2
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +2 -2
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/integrations/utils.d.ts +7 -5
- package/dist/integrations/utils.esm.js +1 -1
- package/dist/integrations/utils.js +1 -1
- package/dist/react/beam-partner-logos.d.ts +1 -1
- package/dist/react/beam-partner-logos.esm.js +1 -1
- package/dist/react/beam-partner-logos.js +1 -1
- package/dist/react/community-impact.d.ts +3 -3
- package/dist/react/community-impact.esm.js +1 -1
- package/dist/react/community-impact.js +1 -1
- package/dist/react/cumulative-impact.d.ts +2 -2
- package/dist/react/cumulative-impact.esm.js +1 -1
- package/dist/react/cumulative-impact.js +1 -1
- package/dist/react/impact-overview.d.ts +4 -4
- package/dist/react/impact-overview.esm.js +1 -1
- package/dist/react/impact-overview.esm.js.map +1 -1
- package/dist/react/impact-overview.js +1 -1
- package/dist/react/impact-overview.js.map +1 -1
- package/dist/react/index.d.ts +10 -9
- package/dist/react/index.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.d.ts +7 -7
- package/dist/react/post-purchase.esm.js +1 -1
- package/dist/react/post-purchase.esm.js.map +1 -1
- package/dist/react/post-purchase.js +1 -1
- package/dist/react/post-purchase.js.map +1 -1
- package/dist/react/product-details-page.d.ts +3 -3
- package/dist/react/product-details-page.esm.js +1 -1
- package/dist/react/product-details-page.esm.js.map +1 -1
- package/dist/react/product-details-page.js +1 -1
- package/dist/react/product-details-page.js.map +1 -1
- package/dist/react/redeem-transaction.d.ts +8 -7
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.js +1 -1
- package/dist/react/select-nonprofit.d.ts +8 -7
- package/dist/react/select-nonprofit.esm.js +1 -1
- package/dist/react/select-nonprofit.esm.js.map +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/dist/react/select-nonprofit.js.map +1 -1
- package/dist/react/select-subscription-nonprofit.d.ts +7 -6
- package/dist/react/select-subscription-nonprofit.esm.js +1 -1
- package/dist/react/select-subscription-nonprofit.js +1 -1
- package/dist/react/social-share.d.ts +3 -3
- package/dist/react/social-share.esm.js +1 -1
- package/dist/react/social-share.esm.js.map +1 -1
- package/dist/react/social-share.js +1 -1
- package/dist/react/social-share.js.map +1 -1
- package/dist/react/subscription-impact.d.ts +4 -4
- package/dist/react/subscription-impact.esm.js +1 -1
- package/dist/react/subscription-impact.js +1 -1
- package/dist/react/subscription-management.d.ts +7 -7
- package/dist/react/subscription-management.esm.js +1 -1
- package/dist/react/subscription-management.js +1 -1
- package/dist/utils/beam-errors.d.ts +1 -1
- package/dist/utils/beam-errors.esm.js +1 -1
- package/dist/utils/beam-errors.js +1 -1
- package/dist/utils/cart.esm.js +1 -1
- package/dist/utils/cart.js +1 -1
- package/dist/utils/cookies.esm.js +1 -1
- package/dist/utils/cookies.esm.js.map +1 -1
- package/dist/utils/cookies.js +1 -1
- package/dist/utils/cookies.js.map +1 -1
- package/dist/utils/debounce.esm.js +1 -1
- package/dist/utils/debounce.js +1 -1
- package/dist/utils/events.d.ts +5 -4
- package/dist/utils/events.esm.js +1 -1
- package/dist/utils/events.js +1 -1
- package/dist/utils/index.d.ts +7 -5
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/is-equal.esm.js +1 -1
- package/dist/utils/is-equal.js +1 -1
- package/dist/utils/local-storage.esm.js +1 -1
- package/dist/utils/local-storage.js +1 -1
- package/dist/utils/memoize-last.esm.js +1 -1
- package/dist/utils/memoize-last.esm.js.map +1 -1
- package/dist/utils/memoize-last.js +1 -1
- package/dist/utils/memoize-last.js.map +1 -1
- package/dist/utils/network-listeners.esm.js +1 -1
- package/dist/utils/network-listeners.esm.js.map +1 -1
- package/dist/utils/network-listeners.js +1 -1
- package/dist/utils/network-listeners.js.map +1 -1
- package/dist/utils/promoManager.d.ts +123 -0
- package/dist/utils/promoManager.esm.js +2 -0
- package/dist/utils/promoManager.esm.js.map +1 -0
- package/dist/utils/promoManager.js +2 -0
- package/dist/utils/promoManager.js.map +1 -0
- package/dist/utils/remote-session.esm.js +1 -1
- package/dist/utils/remote-session.js +1 -1
- package/dist/utils/wait-for-element.esm.js +1 -1
- package/dist/utils/wait-for-element.js +1 -1
- package/package.json +4 -4
- package/dist/chunks/_share-dialog-dependencies-2jzbs44g.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-2jzbs44g.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-C8uChjuF.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-C8uChjuF.esm.js.map +0 -1
- package/dist/chunks/beam-errors-P-Lu07Ce.esm.js +0 -2
- package/dist/chunks/beam-errors-P-Lu07Ce.esm.js.map +0 -1
- package/dist/chunks/cart-contents-CMm57qu0.esm.d.ts +0 -11
- package/dist/chunks/cart-contents-h60geKWa.esm.js +0 -2
- package/dist/chunks/enforce-config-ZAI7WYAd.esm.js +0 -3
- package/dist/chunks/enforce-config-ZAI7WYAd.esm.js.map +0 -1
- package/dist/chunks/enforce-config-ZyPq_4CF.esm.js +0 -3
- package/dist/chunks/enforce-config-ZyPq_4CF.esm.js.map +0 -1
- package/dist/chunks/events-6Z5MkCRr.esm.js +0 -2
- package/dist/chunks/events-6Z5MkCRr.esm.js.map +0 -1
- package/dist/chunks/index-2bLOkP4H.esm.d.ts +0 -32
- package/dist/chunks/index-CsWTfuok.esm.js +0 -2
- package/dist/chunks/index-CsWTfuok.esm.js.map +0 -1
- package/dist/chunks/index-E8H5A7Qq.esm.js.map +0 -1
- package/dist/chunks/index-FQExZDX9.esm.js.map +0 -1
- package/dist/chunks/index-GynYZRPI.esm.d.ts +0 -32
- package/dist/chunks/index-M7Ut5U3j.esm.js +0 -2
- package/dist/chunks/index-M7Ut5U3j.esm.js.map +0 -1
- package/dist/chunks/index-MIp7LlXH.esm.js +0 -2
- package/dist/chunks/index-MIp7LlXH.esm.js.map +0 -1
- package/dist/chunks/index-PiMq5a49.esm.js.map +0 -1
- package/dist/chunks/index-WvOCqhxv.esm.js +0 -2
- package/dist/chunks/index-WvOCqhxv.esm.js.map +0 -1
- package/dist/chunks/index-XCMf22lv.esm.js.map +0 -1
- package/dist/chunks/index-XH3OS_sy.esm.d.ts +0 -15
- package/dist/chunks/index-YJNgLCif.esm.js +0 -2
- package/dist/chunks/index-YJNgLCif.esm.js.map +0 -1
- package/dist/chunks/index-a6oXV2ro.esm.js +0 -2
- package/dist/chunks/index-a6oXV2ro.esm.js.map +0 -1
- package/dist/chunks/index-dkwGkvOu.esm.js +0 -2
- package/dist/chunks/index-dkwGkvOu.esm.js.map +0 -1
- package/dist/chunks/index-iK195-B9.esm.js +0 -2
- package/dist/chunks/index-iK195-B9.esm.js.map +0 -1
- package/dist/chunks/index-nstmHC95.esm.js +0 -2
- package/dist/chunks/index-nstmHC95.esm.js.map +0 -1
- package/dist/chunks/index-vq14EaW4.esm.js +0 -2
- package/dist/chunks/index-vq14EaW4.esm.js.map +0 -1
- package/dist/chunks/lit-iNN5L_Qk.esm.js +0 -34
- package/dist/chunks/loading-template-t4fFsYtr.esm.js +0 -2
- package/dist/chunks/lodash-P8OIs-at.esm.js +0 -2
- package/dist/chunks/lodash-P8OIs-at.esm.js.map +0 -1
- package/dist/chunks/order-page-Z3WcYluU.esm.js +0 -2
- package/dist/chunks/order-page-Z3WcYluU.esm.js.map +0 -1
- package/dist/chunks/order-page-rrfJ4w9F.esm.js +0 -2
- package/dist/chunks/order-page-rrfJ4w9F.esm.js.map +0 -1
- package/dist/chunks/promo-pill-label-P1X4xeAx.esm.js +0 -16
- package/dist/chunks/routes-Dmf2ZNnZ.esm.js +0 -2
- package/dist/chunks/routes-Dmf2ZNnZ.esm.js.map +0 -1
- package/dist/chunks/routes-o1QpF40R.esm.js +0 -2
- package/dist/chunks/routes-o1QpF40R.esm.js.map +0 -1
- package/dist/chunks/shoelace-components-wBxNHnyr.esm.js +0 -2
- package/dist/chunks/shoelace-components-wBxNHnyr.esm.js.map +0 -1
- package/dist/chunks/shoelace-components-xrhk189_.esm.js +0 -2
- package/dist/chunks/shoelace-components-xrhk189_.esm.js.map +0 -1
- package/dist/chunks/update-cart-EGTcbNRX.esm.js +0 -2
- package/dist/chunks/update-cart-EGTcbNRX.esm.js.map +0 -1
- package/dist/chunks/update-cart-FwtFnnGe.esm.js +0 -2
- package/dist/chunks/update-cart-FwtFnnGe.esm.js.map +0 -1
- /package/dist/chunks/{index-EGiUuWe-.esm.d.ts → index-C-hPf29c.esm.d.ts} +0 -0
- /package/dist/chunks/{index-hn6JhG_w.esm.d.ts → index-DXj15KHe.esm.d.ts} +0 -0
- /package/dist/chunks/{index-mTXm0DPh.esm.d.ts → index-DbaDUPup.esm.d.ts} +0 -0
- /package/dist/chunks/{progress-bar-0VS_AmEf.esm.d.ts → progress-bar-CveZ8E6Q.esm.d.ts} +0 -0
- /package/dist/chunks/{promo-pill-label-3bA1z-la.esm.d.ts → promo-pill-label-BXRqZHET.esm.d.ts} +0 -0
- /package/dist/chunks/{types-aju0qrRe.esm.d.ts → types-C7gqAyyH.esm.d.ts} +0 -0
|
@@ -261,6 +261,7 @@ interface paths {
|
|
|
261
261
|
goalProgressPercentage: number;
|
|
262
262
|
};
|
|
263
263
|
promo?: {
|
|
264
|
+
type?: string;
|
|
264
265
|
isActive: boolean;
|
|
265
266
|
/**
|
|
266
267
|
* @description When a promo is active, the total amount donated is multiplied by this value. ex:\ (subtotal * donationAmount) * multiplier -> ($100 * 1%) * 2 = $2.00 donated
|
|
@@ -277,6 +278,21 @@ interface paths {
|
|
|
277
278
|
region: {
|
|
278
279
|
id: string | null;
|
|
279
280
|
};
|
|
281
|
+
promos?: {
|
|
282
|
+
validatedPromoCodes: {
|
|
283
|
+
/** @description promoCodeId */
|
|
284
|
+
promoCodeId: string | null;
|
|
285
|
+
promoCodeGroupId?: string | null;
|
|
286
|
+
promoId?: number;
|
|
287
|
+
/**
|
|
288
|
+
* Format: date-time
|
|
289
|
+
* @description ISO formatted date
|
|
290
|
+
* @example 2023-04-19T03:23:59.301Z
|
|
291
|
+
*/
|
|
292
|
+
validatedAt: string;
|
|
293
|
+
apply: boolean;
|
|
294
|
+
}[];
|
|
295
|
+
};
|
|
280
296
|
};
|
|
281
297
|
};
|
|
282
298
|
};
|
|
@@ -797,6 +813,7 @@ interface paths {
|
|
|
797
813
|
goalProgressPercentage: number;
|
|
798
814
|
};
|
|
799
815
|
promo?: {
|
|
816
|
+
type?: string;
|
|
800
817
|
isActive: boolean;
|
|
801
818
|
/**
|
|
802
819
|
* @description When a promo is active, the total amount donated is multiplied by this value. ex:\ (subtotal * donationAmount) * multiplier -> ($100 * 1%) * 2 = $2.00 donated
|
|
@@ -813,6 +830,21 @@ interface paths {
|
|
|
813
830
|
region: {
|
|
814
831
|
id: string | null;
|
|
815
832
|
};
|
|
833
|
+
promos?: {
|
|
834
|
+
validatedPromoCodes: {
|
|
835
|
+
/** @description promoCodeId */
|
|
836
|
+
promoCodeId: string | null;
|
|
837
|
+
promoCodeGroupId?: string | null;
|
|
838
|
+
promoId?: number;
|
|
839
|
+
/**
|
|
840
|
+
* Format: date-time
|
|
841
|
+
* @description ISO formatted date
|
|
842
|
+
* @example 2023-04-19T03:23:59.301Z
|
|
843
|
+
*/
|
|
844
|
+
validatedAt: string;
|
|
845
|
+
apply: boolean;
|
|
846
|
+
}[];
|
|
847
|
+
};
|
|
816
848
|
};
|
|
817
849
|
};
|
|
818
850
|
};
|
|
@@ -960,6 +992,51 @@ interface paths {
|
|
|
960
992
|
}[];
|
|
961
993
|
};
|
|
962
994
|
};
|
|
995
|
+
promos?: {
|
|
996
|
+
unvalidatedPromoCodes: (Partial<{
|
|
997
|
+
/** @enum {string} */
|
|
998
|
+
type?: "manual" | "url";
|
|
999
|
+
} & {
|
|
1000
|
+
attributes?: {
|
|
1001
|
+
value?: string;
|
|
1002
|
+
};
|
|
1003
|
+
}> & Partial<{
|
|
1004
|
+
/** @enum {string} */
|
|
1005
|
+
type?: "manual" | "url";
|
|
1006
|
+
} & {
|
|
1007
|
+
attributes?: {
|
|
1008
|
+
url?: string;
|
|
1009
|
+
};
|
|
1010
|
+
}>)[];
|
|
1011
|
+
validatedPromoCodes: {
|
|
1012
|
+
/** @description promoCodeId */
|
|
1013
|
+
promoCodeId: string | null;
|
|
1014
|
+
promoCodeGroupId?: string | null;
|
|
1015
|
+
promoId?: number;
|
|
1016
|
+
/**
|
|
1017
|
+
* Format: date-time
|
|
1018
|
+
* @description ISO formatted date
|
|
1019
|
+
* @example 2023-04-19T03:23:59.301Z
|
|
1020
|
+
*/
|
|
1021
|
+
validatedAt: string;
|
|
1022
|
+
apply: boolean;
|
|
1023
|
+
}[];
|
|
1024
|
+
};
|
|
1025
|
+
/**
|
|
1026
|
+
* @description UUID
|
|
1027
|
+
* @example bqkdk-0393b-jbkdd-02difj
|
|
1028
|
+
*/
|
|
1029
|
+
transactionId?: string;
|
|
1030
|
+
/**
|
|
1031
|
+
* @description UUID
|
|
1032
|
+
* @example bqkdk-0393b-jbkdd-02difj
|
|
1033
|
+
*/
|
|
1034
|
+
beamCartId?: string;
|
|
1035
|
+
/**
|
|
1036
|
+
* @description UUID
|
|
1037
|
+
* @example bqkdk-0393b-jbkdd-02difj
|
|
1038
|
+
*/
|
|
1039
|
+
cartId?: string;
|
|
963
1040
|
options?: {
|
|
964
1041
|
config?: {
|
|
965
1042
|
/** @description Removes the themes object from the remote config object in the response. */
|
|
@@ -1340,6 +1417,7 @@ interface paths {
|
|
|
1340
1417
|
filters?: string[];
|
|
1341
1418
|
}[];
|
|
1342
1419
|
promo: {
|
|
1420
|
+
type?: string;
|
|
1343
1421
|
isActive: boolean;
|
|
1344
1422
|
/**
|
|
1345
1423
|
* @description When a promo is active, the total amount donated is multiplied by this value. ex:\ (subtotal * donationAmount) * multiplier -> ($100 * 1%) * 2 = $2.00 donated
|
|
@@ -1719,6 +1797,7 @@ interface paths {
|
|
|
1719
1797
|
filters?: string[];
|
|
1720
1798
|
}[];
|
|
1721
1799
|
promo: {
|
|
1800
|
+
type?: string;
|
|
1722
1801
|
isActive: boolean;
|
|
1723
1802
|
/**
|
|
1724
1803
|
* @description When a promo is active, the total amount donated is multiplied by this value. ex:\ (subtotal * donationAmount) * multiplier -> ($100 * 1%) * 2 = $2.00 donated
|
|
@@ -2024,6 +2103,11 @@ interface paths {
|
|
|
2024
2103
|
* @example bqkdk-0393b-jbkdd-02difj
|
|
2025
2104
|
*/
|
|
2026
2105
|
beamUserId: string;
|
|
2106
|
+
/**
|
|
2107
|
+
* @description UUID
|
|
2108
|
+
* @example bqkdk-0393b-jbkdd-02difj
|
|
2109
|
+
*/
|
|
2110
|
+
beamCartId?: string | null;
|
|
2027
2111
|
/**
|
|
2028
2112
|
* @description Numeric ID
|
|
2029
2113
|
* @example 1001
|
|
@@ -2283,6 +2367,11 @@ interface paths {
|
|
|
2283
2367
|
* @example bqkdk-0393b-jbkdd-02difj
|
|
2284
2368
|
*/
|
|
2285
2369
|
beamUserId: string;
|
|
2370
|
+
/**
|
|
2371
|
+
* @description UUID
|
|
2372
|
+
* @example bqkdk-0393b-jbkdd-02difj
|
|
2373
|
+
*/
|
|
2374
|
+
beamCartId?: string | null;
|
|
2286
2375
|
/**
|
|
2287
2376
|
* @description Numeric ID
|
|
2288
2377
|
* @example 1001
|
|
@@ -2745,6 +2834,36 @@ interface paths {
|
|
|
2745
2834
|
discountCodes?: string[];
|
|
2746
2835
|
/** @enum {string|null} */
|
|
2747
2836
|
creationMethod?: "recurring" | null;
|
|
2837
|
+
promos?: {
|
|
2838
|
+
unvalidatedPromoCodes: (Partial<{
|
|
2839
|
+
/** @enum {string} */
|
|
2840
|
+
type?: "manual" | "url";
|
|
2841
|
+
} & {
|
|
2842
|
+
attributes?: {
|
|
2843
|
+
value?: string;
|
|
2844
|
+
};
|
|
2845
|
+
}> & Partial<{
|
|
2846
|
+
/** @enum {string} */
|
|
2847
|
+
type?: "manual" | "url";
|
|
2848
|
+
} & {
|
|
2849
|
+
attributes?: {
|
|
2850
|
+
url?: string;
|
|
2851
|
+
};
|
|
2852
|
+
}>)[];
|
|
2853
|
+
validatedPromoCodes: {
|
|
2854
|
+
/** @description promoCodeId */
|
|
2855
|
+
promoCodeId: string | null;
|
|
2856
|
+
promoCodeGroupId?: string | null;
|
|
2857
|
+
promoId?: number;
|
|
2858
|
+
/**
|
|
2859
|
+
* Format: date-time
|
|
2860
|
+
* @description ISO formatted date
|
|
2861
|
+
* @example 2023-04-19T03:23:59.301Z
|
|
2862
|
+
*/
|
|
2863
|
+
validatedAt: string;
|
|
2864
|
+
apply: boolean;
|
|
2865
|
+
}[];
|
|
2866
|
+
};
|
|
2748
2867
|
};
|
|
2749
2868
|
};
|
|
2750
2869
|
};
|
|
@@ -6869,6 +6988,219 @@ interface paths {
|
|
|
6869
6988
|
};
|
|
6870
6989
|
};
|
|
6871
6990
|
};
|
|
6991
|
+
post: {
|
|
6992
|
+
parameters: {
|
|
6993
|
+
query: {
|
|
6994
|
+
lang?: "en" | "fr" | "de" | "es" | "it" | "pl";
|
|
6995
|
+
/** The version of the config */
|
|
6996
|
+
version: string;
|
|
6997
|
+
storeId: number;
|
|
6998
|
+
/** When set to true, draft themes are returned */
|
|
6999
|
+
draftConfig?: boolean;
|
|
7000
|
+
widgetName?: "community-impact" | "impact-overview" | "select-nonprofit" | "redeem-transaction" | "cumulative-impact" | "mobile-full-screen-nonprofit-selection" | "mobile-impact-list" | "mobile-minimal-nonprofit-selection" | "mobile-personal-impact" | "mobile-selected-nonprofit" | "mobile-progress-bar" | "select-nonprofit-cta" | "mobile-share-button" | "subscription-management" | "product-details-page" | "select-subscription-nonprofit" | "subscription-impact";
|
|
7001
|
+
/** The identifier for the product */
|
|
7002
|
+
remoteProductIdentifier?: string;
|
|
7003
|
+
};
|
|
7004
|
+
};
|
|
7005
|
+
responses: {
|
|
7006
|
+
/** Fetches config/copy for product display page widget */
|
|
7007
|
+
200: {
|
|
7008
|
+
content: {
|
|
7009
|
+
"application/json": {
|
|
7010
|
+
/** @description Widget config for the product display page widget */
|
|
7011
|
+
config: {
|
|
7012
|
+
web: {
|
|
7013
|
+
/**
|
|
7014
|
+
* @description Header/title for the widget
|
|
7015
|
+
* @example Choose your impact
|
|
7016
|
+
*/
|
|
7017
|
+
title: string;
|
|
7018
|
+
/** @description Subtitle/description for the widget */
|
|
7019
|
+
description: string;
|
|
7020
|
+
/**
|
|
7021
|
+
* @description The prefix promo description for the widget for web
|
|
7022
|
+
* @example At no extra cost,
|
|
7023
|
+
*/
|
|
7024
|
+
promoDescriptionPrefix?: string;
|
|
7025
|
+
/**
|
|
7026
|
+
* @description The promo description for the widget for web
|
|
7027
|
+
* @example At no extra cost, select a nonprofit and 1% of your purchase will be donated
|
|
7028
|
+
*/
|
|
7029
|
+
promoDescription?: string;
|
|
7030
|
+
/**
|
|
7031
|
+
* @description confirm button
|
|
7032
|
+
* @example Confirm free donation
|
|
7033
|
+
*/
|
|
7034
|
+
confirmButton?: string;
|
|
7035
|
+
/**
|
|
7036
|
+
* @description copy once confirm button is clicked
|
|
7037
|
+
* @example Confirmed!
|
|
7038
|
+
*/
|
|
7039
|
+
confirmedButton?: string;
|
|
7040
|
+
/**
|
|
7041
|
+
* @description collapsed button copy
|
|
7042
|
+
* @example Choose a nonprofit
|
|
7043
|
+
*/
|
|
7044
|
+
collapsedButton?: string;
|
|
7045
|
+
/** @description Remote config theme data as requested by the given widgetName & version query params */
|
|
7046
|
+
theme?: {
|
|
7047
|
+
[key: string]: unknown;
|
|
7048
|
+
} | null;
|
|
7049
|
+
/**
|
|
7050
|
+
* @description nonprofit Selected Header for select-nonprofit-cta widget
|
|
7051
|
+
* @example Your impact
|
|
7052
|
+
*/
|
|
7053
|
+
nonprofitSelectedHeader?: string;
|
|
7054
|
+
/**
|
|
7055
|
+
* @description nonprofit Unselected Header for select-nonprofit-cta widget
|
|
7056
|
+
* @example Make your purchase a force for good
|
|
7057
|
+
*/
|
|
7058
|
+
nonprofitUnselectedHeader?: string;
|
|
7059
|
+
/** @description An object containing dynamic strings for the widget. These strings serve as templates and include dynamic variables that vary based on the widget type. */
|
|
7060
|
+
dynamicStrings?: {
|
|
7061
|
+
[key: string]: string;
|
|
7062
|
+
} | null;
|
|
7063
|
+
/** @description An object containing additional static strings specific to each widget. These strings are unique to the widget and are not shared across different widgets. */
|
|
7064
|
+
additionalStrings?: {
|
|
7065
|
+
[key: string]: string;
|
|
7066
|
+
} | null;
|
|
7067
|
+
/** @description Disables counter animation for cumulative-impact widget */
|
|
7068
|
+
disableAnimation?: boolean;
|
|
7069
|
+
/** @description promo copy is sent in this object to be used in conditionally rendered UI components. This object serves as a repository for server-generated copy */
|
|
7070
|
+
promo?: {
|
|
7071
|
+
/** @example Donations are 2x for Black History Month */
|
|
7072
|
+
"promo-text-long": string;
|
|
7073
|
+
/** @example Donations are 2x */
|
|
7074
|
+
"promo-text-short": string;
|
|
7075
|
+
/**
|
|
7076
|
+
* @description replaces cause copy
|
|
7077
|
+
* @example 2x boosting donations
|
|
7078
|
+
*/
|
|
7079
|
+
"promo-cause-alt-text": string;
|
|
7080
|
+
};
|
|
7081
|
+
};
|
|
7082
|
+
mobileWeb?: {
|
|
7083
|
+
/**
|
|
7084
|
+
* @description Header/title for the widget
|
|
7085
|
+
* @example Choose your impact
|
|
7086
|
+
*/
|
|
7087
|
+
title: string;
|
|
7088
|
+
/**
|
|
7089
|
+
* @description Subtitle/description for the widget
|
|
7090
|
+
* @example At no extra cost, select a nonprofit and 1% of your purchase will be donated
|
|
7091
|
+
*/
|
|
7092
|
+
description: string;
|
|
7093
|
+
/**
|
|
7094
|
+
* @description nonprofit Selected Header for select-nonprofit-cta widget
|
|
7095
|
+
* @example Your impact
|
|
7096
|
+
*/
|
|
7097
|
+
nonprofitSelectedHeader?: string;
|
|
7098
|
+
/**
|
|
7099
|
+
* @description nonprofit Unselected Header for select-nonprofit-cta widget
|
|
7100
|
+
* @example Make your purchase a force for good
|
|
7101
|
+
*/
|
|
7102
|
+
nonprofitUnselectedHeader?: string;
|
|
7103
|
+
};
|
|
7104
|
+
mobile: {
|
|
7105
|
+
/**
|
|
7106
|
+
* @description Header/title for the widget
|
|
7107
|
+
* @example Choose your impact
|
|
7108
|
+
*/
|
|
7109
|
+
title: string;
|
|
7110
|
+
/**
|
|
7111
|
+
* @description Subtitle/description for the widget
|
|
7112
|
+
* @example At no extra cost, select a nonprofit and 1% of your purchase will be donated
|
|
7113
|
+
*/
|
|
7114
|
+
description: string;
|
|
7115
|
+
/**
|
|
7116
|
+
* @description nonprofit Selected Header for select-nonprofit-cta widget
|
|
7117
|
+
* @example Your impact
|
|
7118
|
+
*/
|
|
7119
|
+
nonprofitSelectedHeader?: string;
|
|
7120
|
+
/**
|
|
7121
|
+
* @description nonprofit Unselected Header for select-nonprofit-cta widget
|
|
7122
|
+
* @example Make your purchase a force for good
|
|
7123
|
+
*/
|
|
7124
|
+
nonprofitUnselectedHeader?: string;
|
|
7125
|
+
};
|
|
7126
|
+
/**
|
|
7127
|
+
* @description determines if a chain can enable nonprofit deselection for the select-nonprofit widget
|
|
7128
|
+
* @default false
|
|
7129
|
+
*/
|
|
7130
|
+
enableNonprofitDeselection?: boolean;
|
|
7131
|
+
};
|
|
7132
|
+
ppgfDisclosure?: {
|
|
7133
|
+
copy: string;
|
|
7134
|
+
};
|
|
7135
|
+
ppgfDisclosureHyperlink?: {
|
|
7136
|
+
/** Format: uri */
|
|
7137
|
+
url: string;
|
|
7138
|
+
copy: string;
|
|
7139
|
+
};
|
|
7140
|
+
promos?: {
|
|
7141
|
+
/** @description The list of validated promo codes */
|
|
7142
|
+
validatedPromoCodes?: {
|
|
7143
|
+
/** @description promoCodeId */
|
|
7144
|
+
promoCodeId: string | null;
|
|
7145
|
+
promoCodeGroupId?: string | null;
|
|
7146
|
+
promoId?: number;
|
|
7147
|
+
/**
|
|
7148
|
+
* Format: date-time
|
|
7149
|
+
* @description ISO formatted date
|
|
7150
|
+
* @example 2023-04-19T03:23:59.301Z
|
|
7151
|
+
*/
|
|
7152
|
+
validatedAt: string;
|
|
7153
|
+
apply: boolean;
|
|
7154
|
+
}[];
|
|
7155
|
+
};
|
|
7156
|
+
};
|
|
7157
|
+
};
|
|
7158
|
+
};
|
|
7159
|
+
};
|
|
7160
|
+
requestBody: {
|
|
7161
|
+
content: {
|
|
7162
|
+
"application/json": {
|
|
7163
|
+
lang?: string;
|
|
7164
|
+
version?: string;
|
|
7165
|
+
storeId?: number;
|
|
7166
|
+
widgetName?: string;
|
|
7167
|
+
remoteProductIdentifier?: string;
|
|
7168
|
+
beamCartId?: string;
|
|
7169
|
+
draftConfig?: boolean;
|
|
7170
|
+
promos?: {
|
|
7171
|
+
unvalidatedPromoCodes: (Partial<{
|
|
7172
|
+
/** @enum {string} */
|
|
7173
|
+
type?: "manual" | "url";
|
|
7174
|
+
} & {
|
|
7175
|
+
attributes?: {
|
|
7176
|
+
value?: string;
|
|
7177
|
+
};
|
|
7178
|
+
}> & Partial<{
|
|
7179
|
+
/** @enum {string} */
|
|
7180
|
+
type?: "manual" | "url";
|
|
7181
|
+
} & {
|
|
7182
|
+
attributes?: {
|
|
7183
|
+
url?: string;
|
|
7184
|
+
};
|
|
7185
|
+
}>)[];
|
|
7186
|
+
validatedPromoCodes: {
|
|
7187
|
+
/** @description promoCodeId */
|
|
7188
|
+
promoCodeId: string | null;
|
|
7189
|
+
promoCodeGroupId?: string | null;
|
|
7190
|
+
promoId?: number;
|
|
7191
|
+
/**
|
|
7192
|
+
* Format: date-time
|
|
7193
|
+
* @description ISO formatted date
|
|
7194
|
+
* @example 2023-04-19T03:23:59.301Z
|
|
7195
|
+
*/
|
|
7196
|
+
validatedAt: string;
|
|
7197
|
+
apply: boolean;
|
|
7198
|
+
}[];
|
|
7199
|
+
};
|
|
7200
|
+
};
|
|
7201
|
+
};
|
|
7202
|
+
};
|
|
7203
|
+
};
|
|
6872
7204
|
};
|
|
6873
7205
|
"/webhooks/shopify/redactCustomer": {
|
|
6874
7206
|
post: {
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as L,i as T,a as O}from"./lodash-7H4x2457.esm.js";import{d as k,c as K,i as x,h as W,g as M}from"./events-BohmT6Lp.esm.js";import{logger as p}from"../utils/logger.js";import{initNetworkListeners as q}from"../utils/network-listeners.js";import{createScopedLocalStorage as U}from"../utils/local-storage.js";import{memoizeLast as J}from"../utils/memoize-last.js";import"./promoManager-B9cTR1R3.esm.js";import{B as j}from"./cart-contents-DkoytiZh.esm.js";import{O as v}from"./update-cart-3JFUCJLD.esm.js";import{W as z,D as F}from"./routes-KHEaM_40.esm.js";import{getBeamCartId as A,getExternalCartId as G}from"../utils/cart.js";import"../components/post-purchase.js";import{waitForElement as H}from"../utils/wait-for-element.js";import{B as V}from"./beam-errors-Ci0d3926.esm.js";import{getCookieValue as Y}from"../utils/cookies.js";const E=window.Shopify?.routes?.root||"/";let D=!1;const $="cart";async function Q(t,s=!0){if(D)return!1;q(),window.addEventListener(k.eventName,async n=>{const e=n,o=/cart\/(add|change|update|clear)/,i=e.detail.type==="xhr"?e.detail.xhr.responseURL:e.detail.response.url,d=new URL(i);if(!o.test(d.pathname))return;const a=await S(t);a.changed&&v(t,a.cart)});let l,c;window.addEventListener(K.eventName,async n=>{const e=n;p.debug("[cart-page][BeamNonprofitSelectEvent]",e.detail);const{source:o,selectedNonprofitId:i,selectionId:d}=e.detail;if(o===z.select_nonprofit){if(l===i&&c===d)return;const a=await I(t);await _({...a,selectedNonprofitId:i,selectionId:d}),c=d,l=i}}),window.addEventListener(x.eventName,async n=>{const e=n;p.debug("[cart-page][BeamNonprofitSelectionRemovedEvent]",e.detail);const{newNonprofitId:o,selectionId:i}=e.detail;if(l===o&&c===i)return;const d=await I(t);await _({...d,selectedNonprofitId:null,selectionId:i}),c=i,l=o}),window.addEventListener(W.eventName,async n=>{const e=n;if(p.debug("[cart-page][BeamCartCreatedEvent]",e.detail),window.statsig||s){const o=await I(t);await _(o)}}),window.addEventListener(M.eventName,async n=>{const e=n;if(p.debug("[cart-page][BeamCartChangeEvent]",e.detail),window.statsig||s){const o=await I(t);await _(o)}});const m=await S(t);return await v(t,m.cart,!0),D=!0,!0}async function P(t){const s=await I(t);await _(s)}async function I(t){let s,l;if(window.statsig){const o=window.statsig;s=o.getLayer("beam_trial_layer").get("show_beam",!1),l=o.getStableID()}const c=G($,t),m=A(j,t),{chainId:n,storeId:e}=t;return{showBeam:s??void 0,remoteSessionId:l??void 0,beamCartId:m&&m!=="null"?m:void 0,cartId:c&&c!=="null"?c:void 0,chainId:n,storeId:e}}const X=P;async function S(t){const{token:s,total_price:l,item_count:c,currency:m,items:n,cart_level_discount_applications:e}=await N();let o=!1;const i=U(t).getItemJson("cart"),d=A(j,t),a={cartId:s,beamCartId:d,subtotal:l/100,itemCount:c,currencyCode:m,schema:{source:"generic"},content:{items:n.map(({sku:u,final_line_price:f,product_id:g,line_level_discount_allocations:w})=>{const C=u||String(g),b=f/100,h=w?.map(({discount_application:y})=>({code:y?.title,applicable:!0}));return{remoteProductIdentifier:C,localAmount:b,discounts:h}}),discounts:e.map(({title:u})=>({code:u,applicable:!0}))}};return T(a,{...i,beamCartId:i?.beamCartId})||(o=!0),{changed:o,cart:a}}const Z=v,N=async function(){return await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(t=>t.json())},_=J(async function({selectedNonprofitId:t,selectionId:s,beamCartId:l,cartId:c,chainId:m,storeId:n,showBeam:e,remoteSessionId:o}){const{attributes:i}=await N(),d=i?.beam;let a={};try{d&&(a=JSON.parse(d))}catch(w){p.error(w)}const u=L({nonprofit_id:t,selection_id:s,beam_cart_id:l,shopify_cart_id:c,chain_id:m,store_id:n,show_beam:e,remote_session_id:o},O),f={...a,...u};t===null&&(f.nonprofit_id=void 0);const g={beam:JSON.stringify(f)};if(!T(f,a))try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:g})})}catch(w){p.error(w)}}),tt=J(async function({selectedNonprofitId:t,selectionId:s,beamCartId:l,cartId:c,chainId:m,storeId:n}){let e,o;try{if(window.statsig){const a=window.statsig;e=a.getLayer("beam_trial_layer").get("show_beam",!1),o=a.getStableID()}}catch(a){p.error(a)}const i=L({nonprofit_id:t,selection_id:s,beam_cart_id:l,shopify_cart_id:c,chain_id:m,store_id:n,show_beam:e,remote_session_id:o},O);t===null&&(i.nonprofit_id=void 0);const d={beam:JSON.stringify(i)};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:d})})}catch(a){p.error(a)}});async function et({parentSelector:t=".step__sections",apiKey:s,baseUrl:l=F,storeId:c,postalCode:m,discountCodes:n,countryCode:e,orderId:o,email:i,cartTotal:d,cart:a,promoCodes:u,htmlPromoCodes:f,currencyCode:g="USD",domain:w,lang:C="en",debug:b=!1}){const h=document.querySelector(t)||await H(t);if(!h)throw new V(`Timed out waiting for selector '${t}'. Could not render Beam post-purchase widget.`);const y=await Y("cart");if(y){const B=U({apiKey:s}),R=B.getItemJson("cart")||{};B.setItemJson("cart",{...R,cartId:y})}const r=document.createElement("beam-post-purchase");r.apiKey=s,r.baseUrl=l,r.storeId=c,r.postalCode=m,r.countryCode=e,r.orderId=String(o),r.email=i,r.cartTotal=d,r.cart=a,r.promoCodes=u,r.htmlPromoCodes=f,r.discountCodes=n,r.currencyCode=g,r.domain=w,r.lang=C,r.debug=b,h.appendChild(r)}export{N as I,Q as K,P as L,X as W,Z as Y,S as _,_ as p,et as s,tt as z};
|
|
2
|
+
//# sourceMappingURL=order-page-CMGPM57D.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-page-CMGPM57D.esm.js","sources":["../../src/integrations/shopify/cart-page.ts","../../src/integrations/shopify/order-page.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport isUndefined from \"lodash-es/isUndefined\";\nimport omitBy from \"lodash-es/omitBy\";\nimport { logger, memoizeLast } from \"../../utils\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport {\n BeamCartChangeEvent,\n BeamCartCreatedEvent,\n BeamNetworkCallEvent,\n BeamNonprofitSelectEvent,\n BeamNonprofitSelectionRemovedEvent,\n} from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\nimport { WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { getBeamCartId, getExternalCartId } from \"../../utils/cart\";\n\nexport type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\ntype ShopifyDiscountApplication = {\n title: string;\n value: string;\n};\n\ntype ShopifyLineLevelDiscountAllocations = {\n amount?: string;\n discount_application: ShopifyDiscountApplication;\n};\n\ntype ShopifyCartBeamAttribute = {\n nonprofit_id?: number | null;\n selection_id?: string;\n beam_cart_id?: string;\n shopify_cart_id?: string;\n chain_id?: number;\n store_id?: number;\n show_beam?: boolean;\n remote_session_id?: string;\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet isBeamCartIntegrationRegistered = false; // Skip registering event listeners if already set up\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(\n config: BeamShopifyCartIntegrationConfig,\n autoUpdateShopifyCartAttributes = true\n) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\n }\n\n // logger.debug(\"[cart-page][registerCartIntegration] initializing network listeners\");\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\n // When any network call happens, check if it's for the Shopify /cart AJAX Api.\n // If so, and the cart is updated, send the cart to Beam\n window.addEventListener(BeamNetworkCallEvent.eventName, async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n // logger.debug(\"[cart-page][BeamNetworkCallEvent] getting current cart\");\n const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n // logger.debug(`[cart-page][BeamNetworkCallEvent] cart has not changed from URL ${requestUrlStr}`, currentCart.cart);\n return;\n }\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n // logger.debug(`[cart-page][BeamNetworkCallEvent] cart has changed from URL ${requestUrlStr}`, currentCart.cart);\n updateCart(config, currentCart.cart);\n });\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n logger.debug(\"[cart-page][BeamNonprofitSelectEvent]\", event.detail);\n const { source, selectedNonprofitId, selectionId } = event.detail;\n\n // On nonprofit selection, we always write Beam's attributes\n // to the Shopify cart attributes\n if (source === WIDGET_NAMES.select_nonprofit) {\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart({\n ...beamCartData,\n selectedNonprofitId,\n selectionId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n }\n });\n\n /**\n * Upon removal of the selected nonprofit from the widget and local storage,\n * an event is emitted and that event is then used to update the cart attributes accordingly\n * This event listener updates the cart attributes based on the emitted event\n */\n window.addEventListener(BeamNonprofitSelectionRemovedEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectionRemovedEvent;\n logger.debug(\"[cart-page][BeamNonprofitSelectionRemovedEvent]\", event.detail);\n const { newNonprofitId, selectionId } = event.detail;\n\n if (lastNonprofitId === newNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n\n // On nonprofit deselection, we always write Beam's attributes\n // to the Shopify cart attributes\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart({\n ...beamCartData,\n selectedNonprofitId: null,\n selectionId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = newNonprofitId;\n });\n\n /**\n * When a BeamCart is created, write beam metadata to the Shopify cart if\n * we need to capture it for Statsig or Extensibility\n */\n window.addEventListener(BeamCartCreatedEvent.eventName, async (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n logger.debug(\"[cart-page][BeamCartCreatedEvent]\", event.detail);\n if (window.statsig || autoUpdateShopifyCartAttributes) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n }\n });\n\n /**\n * On any cart changes, write beam metadata to the Shopify cart if\n * we need to capture it for Statsig or Extensibility\n */\n window.addEventListener(BeamCartChangeEvent.eventName, async (_event: Event) => {\n const event = _event as BeamCartChangeEvent;\n logger.debug(\"[cart-page][BeamCartChangeEvent]\", event.detail);\n if (window.statsig || autoUpdateShopifyCartAttributes) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n }\n });\n\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n const currentCart = await getCurrentCart(config);\n // logger.debug(\"[cart-page][registerCartIntegration] initial cart fetch result\", currentCart);\n await updateCart(config, currentCart.cart, true);\n\n isBeamCartIntegrationRegistered = true;\n\n return true;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\nasync function appendToShopifyCartBeamAttribute(config: BeamShopifyCartIntegrationConfig) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n}\n\n/**\n * Gathers the base Beam data needed for updating a Shopify cart's metadata\n */\nasync function getBeamAttributesForCart(config: BeamShopifyCartIntegrationConfig) {\n let showBeam;\n let remoteSessionId;\n\n if (window.statsig) {\n const statsig = window.statsig as any;\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config);\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n const { chainId, storeId } = config;\n\n return {\n showBeam: showBeam ?? undefined,\n remoteSessionId: remoteSessionId ?? undefined,\n beamCartId: beamCartId && beamCartId !== \"null\" ? beamCartId : undefined,\n cartId: cartId && cartId !== \"null\" ? cartId : undefined,\n chainId,\n storeId,\n };\n}\n\n/**\n * Adds Statsig data to a Shopify cart\n */\nconst appendStatsigToShopifyCartAttributes = appendToShopifyCartBeamAttribute;\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n cart_level_discount_applications,\n } = await getShopifyCart();\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n\n const cart = {\n cartId: token,\n beamCartId,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id, line_level_discount_allocations }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n const discounts = (line_level_discount_allocations as ShopifyLineLevelDiscountAllocations[])?.map(\n ({ discount_application }) => {\n return { code: discount_application?.title, applicable: true };\n }\n );\n return { remoteProductIdentifier, localAmount, discounts };\n }),\n discounts: (cart_level_discount_applications as ShopifyDiscountApplication[]).map(({ title }) => {\n return { code: title, applicable: true };\n }),\n },\n };\n\n if (\n !isEqual(cart, {\n ...cachedCart,\n beamCartId: cachedCart?.beamCartId,\n })\n ) {\n changed = true;\n }\n\n // logger.debug(\"[cart-page][getCurrentCart] has cart changed?\", changed, cart);\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Helper function to get the Shopify cart attributes\n */\nconst getShopifyCart = async function () {\n const cart = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n return cart;\n};\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n * This will do an append, not a full overwrite of the attributes in the beam property\n */\nconst appendBeamAttributesToCart = memoizeLast(async function appendBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n showBeam,\n remoteSessionId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n showBeam?: boolean;\n remoteSessionId?: string;\n}) {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] fetching existing cart\");\n const { attributes } = await getShopifyCart();\n\n // Get only the Beam attribute, if it exists\n const existingBeamCartAttrString = attributes?.beam;\n let existingBeamCartAttr = {};\n try {\n if (existingBeamCartAttrString) {\n existingBeamCartAttr = JSON.parse(existingBeamCartAttrString);\n }\n } catch (err) {\n logger.error(err);\n }\n\n const newBeamAttrs = omitBy(\n {\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n show_beam: showBeam,\n remote_session_id: remoteSessionId,\n },\n isUndefined\n );\n\n const appendedBeamAttributes = {\n ...existingBeamCartAttr,\n ...newBeamAttrs,\n } as ShopifyCartBeamAttribute;\n\n // For the nonprofitId, if we specifically get a null value here,\n // we want to remove it from the cart attributes, not just write \"null\"\n if (selectedNonprofitId === null) {\n appendedBeamAttributes.nonprofit_id = undefined;\n }\n\n const beamCartAttrs = {\n beam: JSON.stringify(appendedBeamAttributes),\n };\n\n // If the attributes match, no reason to update the cart\n if (isEqual(appendedBeamAttributes, existingBeamCartAttr)) {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] cart attributes match, skipping update\");\n return;\n }\n\n try {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] updating Shopify cart\");\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n * This method force-updates the \"beam\" attribute with the values passed in\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n let showBeam;\n let remoteSessionId;\n try {\n if (window.statsig) {\n const statsig = window.statsig as any;\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n } catch (e) {\n logger.error(e);\n }\n\n const allBeamAttributes = omitBy(\n {\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n show_beam: showBeam,\n remote_session_id: remoteSessionId,\n },\n isUndefined\n ) as ShopifyCartBeamAttribute;\n\n // For the nonprofitId, if we specifically get a null value here,\n // we want to remove it from the cart attributes, not just write \"null\"\n if (selectedNonprofitId === null) {\n allBeamAttributes.nonprofit_id = undefined;\n }\n\n const beamCartAttrs = {\n beam: JSON.stringify(allBeamAttributes),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\nexport {\n trackCart,\n getCurrentCart,\n addBeamAttributesToCart,\n appendStatsigToShopifyCartAttributes,\n appendToShopifyCartBeamAttribute,\n registerCartIntegration,\n appendBeamAttributesToCart,\n getShopifyCart,\n};\n","import \"../../components/post-purchase\";\nimport { postTransaction } from \"../../api-sdk/v3/routes\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { LANGUAGES, TUrl } from \"../../api-sdk/types\";\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { TCart } from \"../../shared/cart-contents\";\n\n// Shopify admin page: admin/settings/checkout\n\nexport type TBeamOrderPageParams = Parameters<typeof postTransaction>[0][\"requestBody\"] & {\n // Either storeId or postalCode + countryCode must be provided\n storeId?: number;\n postalCode?: string;\n countryCode?: string;\n orderId: string;\n email: string;\n cartTotal: number;\n cart: TCart;\n discountCodes: string[];\n promoCodes: string[];\n htmlPromoCodes: string;\n currencyCode: string;\n parentSelector: string; // CSS Selector for parent of widget to be inserted into DOM\n apiKey: string;\n baseUrl: TUrl;\n domain?: string; // Base domain for setting cookies\n lang: LANGUAGES;\n debug: boolean;\n};\n\nexport async function showBeamOrderPageWidgets({\n parentSelector = \".step__sections\",\n apiKey,\n baseUrl = DEFAULT_BASE_URL,\n storeId,\n postalCode,\n discountCodes,\n countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n promoCodes,\n htmlPromoCodes,\n currencyCode = \"USD\",\n domain,\n lang = \"en\",\n debug = false,\n}: TBeamOrderPageParams) {\n const parentElement = document.querySelector(parentSelector) || (await waitForElement(parentSelector));\n if (!parentElement) {\n throw new BeamError(\n `Timed out waiting for selector '${parentSelector}'. Could not render Beam post-purchase widget.`\n );\n }\n\n // If checkout and order page are on different subdomains, we can't access localStorage\n // We can make postTransaction work by copying the cart cookie to the expected localStorage key on the current domain\n const cartId = await getCookieValue(\"cart\"); // Shopify-only cart identifier\n if (cartId) {\n const beamLocalStorage = createScopedLocalStorage({ apiKey });\n const existingValue = beamLocalStorage.getItemJson(\"cart\") || {};\n beamLocalStorage.setItemJson(\"cart\", { ...existingValue, cartId });\n }\n\n // Note: assign properties one by one instead of bulk Object.assign to type check assignments\n const widget = document.createElement(\"beam-post-purchase\");\n widget.apiKey = apiKey;\n widget.baseUrl = baseUrl;\n widget.storeId = storeId;\n widget.postalCode = postalCode;\n widget.countryCode = countryCode;\n widget.orderId = String(orderId);\n widget.email = email;\n widget.cartTotal = cartTotal;\n widget.cart = cart;\n widget.promoCodes = promoCodes;\n widget.htmlPromoCodes = htmlPromoCodes;\n widget.discountCodes = discountCodes;\n widget.currencyCode = currencyCode;\n widget.domain = domain;\n widget.lang = lang;\n widget.debug = debug;\n\n // Insert widget into DOM\n parentElement.appendChild(widget);\n}\n"],"names":["SHOPIFY_BASE_URL","isBeamCartIntegrationRegistered","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","autoUpdateShopifyCartAttributes","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","currentCart","getCurrentCart","updateCart","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","logger","source","selectedNonprofitId","selectionId","WIDGET_NAMES","beamCartData","getBeamAttributesForCart","appendBeamAttributesToCart","BeamNonprofitSelectionRemovedEvent","newNonprofitId","BeamCartCreatedEvent","BeamCartChangeEvent","appendToShopifyCartBeamAttribute","showBeam","remoteSessionId","statsig","cartId","getExternalCartId","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","appendStatsigToShopifyCartAttributes","token","total_price","item_count","currency","items","cart_level_discount_applications","getShopifyCart","changed","cachedCart","createScopedLocalStorage","cart","sku","final_line_price","product_id","line_level_discount_allocations","remoteProductIdentifier","localAmount","discounts","discount_application","title","isEqual","trackCart","res","memoizeLast","attributes","existingBeamCartAttrString","existingBeamCartAttr","err","newBeamAttrs","omitBy","isUndefined","appendedBeamAttributes","beamCartAttrs","addBeamAttributesToCart","e","allBeamAttributes","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","discountCodes","countryCode","orderId","email","cartTotal","promoCodes","htmlPromoCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","getCookieValue","beamLocalStorage","existingValue","widget"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as L,i as T,a as O}from"./lodash-7H4x2457.esm.js";import{d as k,c as K,i as x,h as W,g as M}from"./events-BohmT6Lp.esm.js";import{logger as p}from"../utils/logger.esm.js";import{initNetworkListeners as q}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as U}from"../utils/local-storage.esm.js";import{memoizeLast as J}from"../utils/memoize-last.esm.js";import"./promoManager-fl54hq13.esm.js";import{B as j}from"./cart-contents-DkoytiZh.esm.js";import{O as v}from"./update-cart-DNfl9QP2.esm.js";import{W as z,D as F}from"./routes-CaSRr919.esm.js";import{getBeamCartId as A,getExternalCartId as G}from"../utils/cart.esm.js";import"../components/post-purchase.esm.js";import{waitForElement as H}from"../utils/wait-for-element.esm.js";import{B as V}from"./beam-errors-Ci0d3926.esm.js";import{getCookieValue as Y}from"../utils/cookies.esm.js";const E=window.Shopify?.routes?.root||"/";let D=!1;const $="cart";async function Q(t,s=!0){if(D)return!1;q(),window.addEventListener(k.eventName,async n=>{const e=n,o=/cart\/(add|change|update|clear)/,i=e.detail.type==="xhr"?e.detail.xhr.responseURL:e.detail.response.url,d=new URL(i);if(!o.test(d.pathname))return;const a=await S(t);a.changed&&v(t,a.cart)});let l,c;window.addEventListener(K.eventName,async n=>{const e=n;p.debug("[cart-page][BeamNonprofitSelectEvent]",e.detail);const{source:o,selectedNonprofitId:i,selectionId:d}=e.detail;if(o===z.select_nonprofit){if(l===i&&c===d)return;const a=await I(t);await _({...a,selectedNonprofitId:i,selectionId:d}),c=d,l=i}}),window.addEventListener(x.eventName,async n=>{const e=n;p.debug("[cart-page][BeamNonprofitSelectionRemovedEvent]",e.detail);const{newNonprofitId:o,selectionId:i}=e.detail;if(l===o&&c===i)return;const d=await I(t);await _({...d,selectedNonprofitId:null,selectionId:i}),c=i,l=o}),window.addEventListener(W.eventName,async n=>{const e=n;if(p.debug("[cart-page][BeamCartCreatedEvent]",e.detail),window.statsig||s){const o=await I(t);await _(o)}}),window.addEventListener(M.eventName,async n=>{const e=n;if(p.debug("[cart-page][BeamCartChangeEvent]",e.detail),window.statsig||s){const o=await I(t);await _(o)}});const m=await S(t);return await v(t,m.cart,!0),D=!0,!0}async function P(t){const s=await I(t);await _(s)}async function I(t){let s,l;if(window.statsig){const o=window.statsig;s=o.getLayer("beam_trial_layer").get("show_beam",!1),l=o.getStableID()}const c=G($,t),m=A(j,t),{chainId:n,storeId:e}=t;return{showBeam:s??void 0,remoteSessionId:l??void 0,beamCartId:m&&m!=="null"?m:void 0,cartId:c&&c!=="null"?c:void 0,chainId:n,storeId:e}}const X=P;async function S(t){const{token:s,total_price:l,item_count:c,currency:m,items:n,cart_level_discount_applications:e}=await N();let o=!1;const i=U(t).getItemJson("cart"),d=A(j,t),a={cartId:s,beamCartId:d,subtotal:l/100,itemCount:c,currencyCode:m,schema:{source:"generic"},content:{items:n.map(({sku:u,final_line_price:f,product_id:g,line_level_discount_allocations:w})=>{const C=u||String(g),b=f/100,h=w?.map(({discount_application:y})=>({code:y?.title,applicable:!0}));return{remoteProductIdentifier:C,localAmount:b,discounts:h}}),discounts:e.map(({title:u})=>({code:u,applicable:!0}))}};return T(a,{...i,beamCartId:i?.beamCartId})||(o=!0),{changed:o,cart:a}}const Z=v,N=async function(){return await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(t=>t.json())},_=J(async function({selectedNonprofitId:t,selectionId:s,beamCartId:l,cartId:c,chainId:m,storeId:n,showBeam:e,remoteSessionId:o}){const{attributes:i}=await N(),d=i?.beam;let a={};try{d&&(a=JSON.parse(d))}catch(w){p.error(w)}const u=L({nonprofit_id:t,selection_id:s,beam_cart_id:l,shopify_cart_id:c,chain_id:m,store_id:n,show_beam:e,remote_session_id:o},O),f={...a,...u};t===null&&(f.nonprofit_id=void 0);const g={beam:JSON.stringify(f)};if(!T(f,a))try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:g})})}catch(w){p.error(w)}}),tt=J(async function({selectedNonprofitId:t,selectionId:s,beamCartId:l,cartId:c,chainId:m,storeId:n}){let e,o;try{if(window.statsig){const a=window.statsig;e=a.getLayer("beam_trial_layer").get("show_beam",!1),o=a.getStableID()}}catch(a){p.error(a)}const i=L({nonprofit_id:t,selection_id:s,beam_cart_id:l,shopify_cart_id:c,chain_id:m,store_id:n,show_beam:e,remote_session_id:o},O);t===null&&(i.nonprofit_id=void 0);const d={beam:JSON.stringify(i)};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:d})})}catch(a){p.error(a)}});async function et({parentSelector:t=".step__sections",apiKey:s,baseUrl:l=F,storeId:c,postalCode:m,discountCodes:n,countryCode:e,orderId:o,email:i,cartTotal:d,cart:a,promoCodes:u,htmlPromoCodes:f,currencyCode:g="USD",domain:w,lang:C="en",debug:b=!1}){const h=document.querySelector(t)||await H(t);if(!h)throw new V(`Timed out waiting for selector '${t}'. Could not render Beam post-purchase widget.`);const y=await Y("cart");if(y){const B=U({apiKey:s}),R=B.getItemJson("cart")||{};B.setItemJson("cart",{...R,cartId:y})}const r=document.createElement("beam-post-purchase");r.apiKey=s,r.baseUrl=l,r.storeId=c,r.postalCode=m,r.countryCode=e,r.orderId=String(o),r.email=i,r.cartTotal=d,r.cart=a,r.promoCodes=u,r.htmlPromoCodes=f,r.discountCodes=n,r.currencyCode=g,r.domain=w,r.lang=C,r.debug=b,h.appendChild(r)}export{N as I,Q as K,P as L,X as W,Z as Y,S as _,_ as p,et as s,tt as z};
|
|
2
|
+
//# sourceMappingURL=order-page-FzVtMkga.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-page-FzVtMkga.esm.js","sources":["../../src/integrations/shopify/cart-page.ts","../../src/integrations/shopify/order-page.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport isUndefined from \"lodash-es/isUndefined\";\nimport omitBy from \"lodash-es/omitBy\";\nimport { logger, memoizeLast } from \"../../utils\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport {\n BeamCartChangeEvent,\n BeamCartCreatedEvent,\n BeamNetworkCallEvent,\n BeamNonprofitSelectEvent,\n BeamNonprofitSelectionRemovedEvent,\n} from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\nimport { WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { getBeamCartId, getExternalCartId } from \"../../utils/cart\";\n\nexport type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\ntype ShopifyDiscountApplication = {\n title: string;\n value: string;\n};\n\ntype ShopifyLineLevelDiscountAllocations = {\n amount?: string;\n discount_application: ShopifyDiscountApplication;\n};\n\ntype ShopifyCartBeamAttribute = {\n nonprofit_id?: number | null;\n selection_id?: string;\n beam_cart_id?: string;\n shopify_cart_id?: string;\n chain_id?: number;\n store_id?: number;\n show_beam?: boolean;\n remote_session_id?: string;\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet isBeamCartIntegrationRegistered = false; // Skip registering event listeners if already set up\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(\n config: BeamShopifyCartIntegrationConfig,\n autoUpdateShopifyCartAttributes = true\n) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\n }\n\n // logger.debug(\"[cart-page][registerCartIntegration] initializing network listeners\");\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\n // When any network call happens, check if it's for the Shopify /cart AJAX Api.\n // If so, and the cart is updated, send the cart to Beam\n window.addEventListener(BeamNetworkCallEvent.eventName, async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n // logger.debug(\"[cart-page][BeamNetworkCallEvent] getting current cart\");\n const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n // logger.debug(`[cart-page][BeamNetworkCallEvent] cart has not changed from URL ${requestUrlStr}`, currentCart.cart);\n return;\n }\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n // logger.debug(`[cart-page][BeamNetworkCallEvent] cart has changed from URL ${requestUrlStr}`, currentCart.cart);\n updateCart(config, currentCart.cart);\n });\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n logger.debug(\"[cart-page][BeamNonprofitSelectEvent]\", event.detail);\n const { source, selectedNonprofitId, selectionId } = event.detail;\n\n // On nonprofit selection, we always write Beam's attributes\n // to the Shopify cart attributes\n if (source === WIDGET_NAMES.select_nonprofit) {\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart({\n ...beamCartData,\n selectedNonprofitId,\n selectionId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n }\n });\n\n /**\n * Upon removal of the selected nonprofit from the widget and local storage,\n * an event is emitted and that event is then used to update the cart attributes accordingly\n * This event listener updates the cart attributes based on the emitted event\n */\n window.addEventListener(BeamNonprofitSelectionRemovedEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectionRemovedEvent;\n logger.debug(\"[cart-page][BeamNonprofitSelectionRemovedEvent]\", event.detail);\n const { newNonprofitId, selectionId } = event.detail;\n\n if (lastNonprofitId === newNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n\n // On nonprofit deselection, we always write Beam's attributes\n // to the Shopify cart attributes\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart({\n ...beamCartData,\n selectedNonprofitId: null,\n selectionId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = newNonprofitId;\n });\n\n /**\n * When a BeamCart is created, write beam metadata to the Shopify cart if\n * we need to capture it for Statsig or Extensibility\n */\n window.addEventListener(BeamCartCreatedEvent.eventName, async (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n logger.debug(\"[cart-page][BeamCartCreatedEvent]\", event.detail);\n if (window.statsig || autoUpdateShopifyCartAttributes) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n }\n });\n\n /**\n * On any cart changes, write beam metadata to the Shopify cart if\n * we need to capture it for Statsig or Extensibility\n */\n window.addEventListener(BeamCartChangeEvent.eventName, async (_event: Event) => {\n const event = _event as BeamCartChangeEvent;\n logger.debug(\"[cart-page][BeamCartChangeEvent]\", event.detail);\n if (window.statsig || autoUpdateShopifyCartAttributes) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n }\n });\n\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n const currentCart = await getCurrentCart(config);\n // logger.debug(\"[cart-page][registerCartIntegration] initial cart fetch result\", currentCart);\n await updateCart(config, currentCart.cart, true);\n\n isBeamCartIntegrationRegistered = true;\n\n return true;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\nasync function appendToShopifyCartBeamAttribute(config: BeamShopifyCartIntegrationConfig) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n}\n\n/**\n * Gathers the base Beam data needed for updating a Shopify cart's metadata\n */\nasync function getBeamAttributesForCart(config: BeamShopifyCartIntegrationConfig) {\n let showBeam;\n let remoteSessionId;\n\n if (window.statsig) {\n const statsig = window.statsig as any;\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config);\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n const { chainId, storeId } = config;\n\n return {\n showBeam: showBeam ?? undefined,\n remoteSessionId: remoteSessionId ?? undefined,\n beamCartId: beamCartId && beamCartId !== \"null\" ? beamCartId : undefined,\n cartId: cartId && cartId !== \"null\" ? cartId : undefined,\n chainId,\n storeId,\n };\n}\n\n/**\n * Adds Statsig data to a Shopify cart\n */\nconst appendStatsigToShopifyCartAttributes = appendToShopifyCartBeamAttribute;\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n cart_level_discount_applications,\n } = await getShopifyCart();\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n\n const cart = {\n cartId: token,\n beamCartId,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id, line_level_discount_allocations }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n const discounts = (line_level_discount_allocations as ShopifyLineLevelDiscountAllocations[])?.map(\n ({ discount_application }) => {\n return { code: discount_application?.title, applicable: true };\n }\n );\n return { remoteProductIdentifier, localAmount, discounts };\n }),\n discounts: (cart_level_discount_applications as ShopifyDiscountApplication[]).map(({ title }) => {\n return { code: title, applicable: true };\n }),\n },\n };\n\n if (\n !isEqual(cart, {\n ...cachedCart,\n beamCartId: cachedCart?.beamCartId,\n })\n ) {\n changed = true;\n }\n\n // logger.debug(\"[cart-page][getCurrentCart] has cart changed?\", changed, cart);\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Helper function to get the Shopify cart attributes\n */\nconst getShopifyCart = async function () {\n const cart = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n return cart;\n};\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n * This will do an append, not a full overwrite of the attributes in the beam property\n */\nconst appendBeamAttributesToCart = memoizeLast(async function appendBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n showBeam,\n remoteSessionId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n showBeam?: boolean;\n remoteSessionId?: string;\n}) {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] fetching existing cart\");\n const { attributes } = await getShopifyCart();\n\n // Get only the Beam attribute, if it exists\n const existingBeamCartAttrString = attributes?.beam;\n let existingBeamCartAttr = {};\n try {\n if (existingBeamCartAttrString) {\n existingBeamCartAttr = JSON.parse(existingBeamCartAttrString);\n }\n } catch (err) {\n logger.error(err);\n }\n\n const newBeamAttrs = omitBy(\n {\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n show_beam: showBeam,\n remote_session_id: remoteSessionId,\n },\n isUndefined\n );\n\n const appendedBeamAttributes = {\n ...existingBeamCartAttr,\n ...newBeamAttrs,\n } as ShopifyCartBeamAttribute;\n\n // For the nonprofitId, if we specifically get a null value here,\n // we want to remove it from the cart attributes, not just write \"null\"\n if (selectedNonprofitId === null) {\n appendedBeamAttributes.nonprofit_id = undefined;\n }\n\n const beamCartAttrs = {\n beam: JSON.stringify(appendedBeamAttributes),\n };\n\n // If the attributes match, no reason to update the cart\n if (isEqual(appendedBeamAttributes, existingBeamCartAttr)) {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] cart attributes match, skipping update\");\n return;\n }\n\n try {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] updating Shopify cart\");\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n * This method force-updates the \"beam\" attribute with the values passed in\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n let showBeam;\n let remoteSessionId;\n try {\n if (window.statsig) {\n const statsig = window.statsig as any;\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n } catch (e) {\n logger.error(e);\n }\n\n const allBeamAttributes = omitBy(\n {\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n show_beam: showBeam,\n remote_session_id: remoteSessionId,\n },\n isUndefined\n ) as ShopifyCartBeamAttribute;\n\n // For the nonprofitId, if we specifically get a null value here,\n // we want to remove it from the cart attributes, not just write \"null\"\n if (selectedNonprofitId === null) {\n allBeamAttributes.nonprofit_id = undefined;\n }\n\n const beamCartAttrs = {\n beam: JSON.stringify(allBeamAttributes),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\nexport {\n trackCart,\n getCurrentCart,\n addBeamAttributesToCart,\n appendStatsigToShopifyCartAttributes,\n appendToShopifyCartBeamAttribute,\n registerCartIntegration,\n appendBeamAttributesToCart,\n getShopifyCart,\n};\n","import \"../../components/post-purchase\";\nimport { postTransaction } from \"../../api-sdk/v3/routes\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { LANGUAGES, TUrl } from \"../../api-sdk/types\";\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { TCart } from \"../../shared/cart-contents\";\n\n// Shopify admin page: admin/settings/checkout\n\nexport type TBeamOrderPageParams = Parameters<typeof postTransaction>[0][\"requestBody\"] & {\n // Either storeId or postalCode + countryCode must be provided\n storeId?: number;\n postalCode?: string;\n countryCode?: string;\n orderId: string;\n email: string;\n cartTotal: number;\n cart: TCart;\n discountCodes: string[];\n promoCodes: string[];\n htmlPromoCodes: string;\n currencyCode: string;\n parentSelector: string; // CSS Selector for parent of widget to be inserted into DOM\n apiKey: string;\n baseUrl: TUrl;\n domain?: string; // Base domain for setting cookies\n lang: LANGUAGES;\n debug: boolean;\n};\n\nexport async function showBeamOrderPageWidgets({\n parentSelector = \".step__sections\",\n apiKey,\n baseUrl = DEFAULT_BASE_URL,\n storeId,\n postalCode,\n discountCodes,\n countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n promoCodes,\n htmlPromoCodes,\n currencyCode = \"USD\",\n domain,\n lang = \"en\",\n debug = false,\n}: TBeamOrderPageParams) {\n const parentElement = document.querySelector(parentSelector) || (await waitForElement(parentSelector));\n if (!parentElement) {\n throw new BeamError(\n `Timed out waiting for selector '${parentSelector}'. Could not render Beam post-purchase widget.`\n );\n }\n\n // If checkout and order page are on different subdomains, we can't access localStorage\n // We can make postTransaction work by copying the cart cookie to the expected localStorage key on the current domain\n const cartId = await getCookieValue(\"cart\"); // Shopify-only cart identifier\n if (cartId) {\n const beamLocalStorage = createScopedLocalStorage({ apiKey });\n const existingValue = beamLocalStorage.getItemJson(\"cart\") || {};\n beamLocalStorage.setItemJson(\"cart\", { ...existingValue, cartId });\n }\n\n // Note: assign properties one by one instead of bulk Object.assign to type check assignments\n const widget = document.createElement(\"beam-post-purchase\");\n widget.apiKey = apiKey;\n widget.baseUrl = baseUrl;\n widget.storeId = storeId;\n widget.postalCode = postalCode;\n widget.countryCode = countryCode;\n widget.orderId = String(orderId);\n widget.email = email;\n widget.cartTotal = cartTotal;\n widget.cart = cart;\n widget.promoCodes = promoCodes;\n widget.htmlPromoCodes = htmlPromoCodes;\n widget.discountCodes = discountCodes;\n widget.currencyCode = currencyCode;\n widget.domain = domain;\n widget.lang = lang;\n widget.debug = debug;\n\n // Insert widget into DOM\n parentElement.appendChild(widget);\n}\n"],"names":["SHOPIFY_BASE_URL","isBeamCartIntegrationRegistered","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","autoUpdateShopifyCartAttributes","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","currentCart","getCurrentCart","updateCart","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","logger","source","selectedNonprofitId","selectionId","WIDGET_NAMES","beamCartData","getBeamAttributesForCart","appendBeamAttributesToCart","BeamNonprofitSelectionRemovedEvent","newNonprofitId","BeamCartCreatedEvent","BeamCartChangeEvent","appendToShopifyCartBeamAttribute","showBeam","remoteSessionId","statsig","cartId","getExternalCartId","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","appendStatsigToShopifyCartAttributes","token","total_price","item_count","currency","items","cart_level_discount_applications","getShopifyCart","changed","cachedCart","createScopedLocalStorage","cart","sku","final_line_price","product_id","line_level_discount_allocations","remoteProductIdentifier","localAmount","discounts","discount_application","title","isEqual","trackCart","res","memoizeLast","attributes","existingBeamCartAttrString","existingBeamCartAttr","err","newBeamAttrs","omitBy","isUndefined","appendedBeamAttributes","beamCartAttrs","addBeamAttributesToCart","e","allBeamAttributes","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","discountCodes","countryCode","orderId","email","cartTotal","promoCodes","htmlPromoCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","getCookieValue","beamLocalStorage","existingValue","widget"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as lodash from 'lodash';
|
|
2
|
-
import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-
|
|
3
|
-
import { T as TCart } from './cart-contents-
|
|
2
|
+
import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-NiToHHJH.esm.js';
|
|
3
|
+
import { T as TCart } from './cart-contents-CUgc4y1N.esm.js';
|
|
4
4
|
import '../components/post-purchase.js';
|
|
5
|
-
import {
|
|
6
|
-
import { T as TUrl, L as LANGUAGES } from './types-
|
|
5
|
+
import { b as postTransaction } from './routes-DDRd747e.esm.js';
|
|
6
|
+
import { T as TUrl, L as LANGUAGES } from './types-C7gqAyyH.esm.js';
|
|
7
7
|
|
|
8
8
|
type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {
|
|
9
9
|
storeId: number;
|
|
@@ -13,11 +13,12 @@ type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {
|
|
|
13
13
|
* @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart
|
|
14
14
|
* @return {boolean} returns true if NEW listeners were created, false if setup was already done
|
|
15
15
|
*/
|
|
16
|
-
declare function registerCartIntegration(config: BeamShopifyCartIntegrationConfig): Promise<boolean>;
|
|
16
|
+
declare function registerCartIntegration(config: BeamShopifyCartIntegrationConfig, autoUpdateShopifyCartAttributes?: boolean): Promise<boolean>;
|
|
17
|
+
declare function appendToShopifyCartBeamAttribute(config: BeamShopifyCartIntegrationConfig): Promise<void>;
|
|
17
18
|
/**
|
|
18
19
|
* Adds Statsig data to a Shopify cart
|
|
19
20
|
*/
|
|
20
|
-
declare
|
|
21
|
+
declare const appendStatsigToShopifyCartAttributes: typeof appendToShopifyCartBeamAttribute;
|
|
21
22
|
/**
|
|
22
23
|
* Detects change in cart since last page load,
|
|
23
24
|
* by calling GET /cart.js, and returns cart values.
|
|
@@ -85,6 +86,8 @@ type TBeamOrderPageParams = Parameters<typeof postTransaction>[0]["requestBody"]
|
|
|
85
86
|
cartTotal: number;
|
|
86
87
|
cart: TCart;
|
|
87
88
|
discountCodes: string[];
|
|
89
|
+
promoCodes: string[];
|
|
90
|
+
htmlPromoCodes: string;
|
|
88
91
|
currencyCode: string;
|
|
89
92
|
parentSelector: string;
|
|
90
93
|
apiKey: string;
|
|
@@ -93,6 +96,6 @@ type TBeamOrderPageParams = Parameters<typeof postTransaction>[0]["requestBody"]
|
|
|
93
96
|
lang: LANGUAGES;
|
|
94
97
|
debug: boolean;
|
|
95
98
|
};
|
|
96
|
-
declare function showBeamOrderPageWidgets({ parentSelector, apiKey, baseUrl, storeId, postalCode, countryCode, orderId, email, cartTotal, cart,
|
|
99
|
+
declare function showBeamOrderPageWidgets({ parentSelector, apiKey, baseUrl, storeId, postalCode, discountCodes, countryCode, orderId, email, cartTotal, cart, promoCodes, htmlPromoCodes, currencyCode, domain, lang, debug, }: TBeamOrderPageParams): Promise<void>;
|
|
97
100
|
|
|
98
|
-
export { type BeamShopifyCartIntegrationConfig as B, type TBeamOrderPageParams as T, addBeamAttributesToCart as a, appendStatsigToShopifyCartAttributes as b,
|
|
101
|
+
export { type BeamShopifyCartIntegrationConfig as B, type TBeamOrderPageParams as T, addBeamAttributesToCart as a, appendStatsigToShopifyCartAttributes as b, appendToShopifyCartBeamAttribute as c, appendBeamAttributesToCart as d, getShopifyCart as e, getCurrentCart as g, registerCartIntegration as r, showBeamOrderPageWidgets as s, trackCart as t };
|