@beamimpact/web-sdk 1.36.6 → 1.36.8

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.
Files changed (225) hide show
  1. package/dist/chunks/_share-dialog-dependencies-FglfQ7YP.esm.js +2 -0
  2. package/dist/chunks/_share-dialog-dependencies-FglfQ7YP.esm.js.map +1 -0
  3. package/dist/chunks/_share-dialog-dependencies-YbNiVx56.esm.js +2 -0
  4. package/dist/chunks/_share-dialog-dependencies-YbNiVx56.esm.js.map +1 -0
  5. package/dist/chunks/beam-errors-P-Lu07Ce.esm.js +2 -0
  6. package/dist/chunks/beam-errors-P-Lu07Ce.esm.js.map +1 -0
  7. package/dist/chunks/{beam-errors-bKCZlkvr.esm.d.ts → beam-errors-fXDkG1zo.esm.d.ts} +7 -2
  8. package/dist/chunks/{cart-contents-tEvcY9ip.esm.d.ts → cart-contents-Shc27L1J.esm.d.ts} +1 -1
  9. package/dist/chunks/enforce-config-fo8kIfoY.esm.js +22 -0
  10. package/dist/chunks/enforce-config-fo8kIfoY.esm.js.map +1 -0
  11. package/dist/chunks/enforce-config-qna7hEL6.esm.js +22 -0
  12. package/dist/chunks/enforce-config-qna7hEL6.esm.js.map +1 -0
  13. package/dist/chunks/{events-PZnG_xac.esm.d.ts → events-qTu4iIOo.esm.d.ts} +1 -1
  14. package/dist/chunks/index-1qXot92e.esm.js +2 -0
  15. package/dist/chunks/index-1qXot92e.esm.js.map +1 -0
  16. package/dist/chunks/{index-hbzssC4x.esm.d.ts → index-3Xf6QzNV.esm.d.ts} +1 -1
  17. package/dist/chunks/{index-aGYbEHXq.esm.js → index-5yFqo0yl.esm.js} +2 -2
  18. package/dist/chunks/index-5yFqo0yl.esm.js.map +1 -0
  19. package/dist/chunks/{index-G6h0AEAz.esm.d.ts → index-6t9MtjyS.esm.d.ts} +3 -1
  20. package/dist/chunks/{index-FAF7tYU6.esm.js → index-9gijHGwh.esm.js} +2 -2
  21. package/dist/chunks/index-9gijHGwh.esm.js.map +1 -0
  22. package/dist/chunks/{index-JL12lEnO.esm.js → index-EHubF2KN.esm.js} +2 -2
  23. package/dist/chunks/index-EHubF2KN.esm.js.map +1 -0
  24. package/dist/chunks/{index-rOz-i1aX.esm.d.ts → index-EZ_Bg1n7.esm.d.ts} +4 -4
  25. package/dist/chunks/index-EpanGShY.esm.js +2 -0
  26. package/dist/chunks/index-EpanGShY.esm.js.map +1 -0
  27. package/dist/chunks/{index-U2dW3lkm.esm.d.ts → index-GkPHba-I.esm.d.ts} +2 -2
  28. package/dist/chunks/{index-5-EnaNnJ.esm.d.ts → index-I8DBdgx0.esm.d.ts} +1 -1
  29. package/dist/chunks/index-IzAvjker.esm.js +2 -0
  30. package/dist/chunks/index-IzAvjker.esm.js.map +1 -0
  31. package/dist/chunks/{index-uqEAgdEf.esm.js → index-OnjTwvAw.esm.js} +2 -2
  32. package/dist/chunks/index-OnjTwvAw.esm.js.map +1 -0
  33. package/dist/chunks/{index-rrdYIcOi.esm.js → index-U8Oy2aur.esm.js} +2 -2
  34. package/dist/chunks/index-U8Oy2aur.esm.js.map +1 -0
  35. package/dist/chunks/index-XMD0b6ql.esm.js +2 -0
  36. package/dist/chunks/index-XMD0b6ql.esm.js.map +1 -0
  37. package/dist/chunks/{index-e6o8bmIt.esm.js → index-fqDBrscF.esm.js} +2 -2
  38. package/dist/chunks/{index-e6o8bmIt.esm.js.map → index-fqDBrscF.esm.js.map} +1 -1
  39. package/dist/chunks/{index-JfA-djTR.esm.js → index-gULINFkH.esm.js} +2 -2
  40. package/dist/chunks/{index-JfA-djTR.esm.js.map → index-gULINFkH.esm.js.map} +1 -1
  41. package/dist/chunks/index-ll8zLjbu.esm.js +2 -0
  42. package/dist/chunks/index-ll8zLjbu.esm.js.map +1 -0
  43. package/dist/chunks/index-o7YiP4gC.esm.js +2 -0
  44. package/dist/chunks/index-o7YiP4gC.esm.js.map +1 -0
  45. package/dist/chunks/{index--eKbxy32.esm.d.ts → index-oLz4lmx2.esm.d.ts} +3 -1
  46. package/dist/chunks/{index-PL4iasT1.esm.d.ts → index-pDraUd1x.esm.d.ts} +2 -2
  47. package/dist/chunks/index-r9Yb1UY4.esm.js +2 -0
  48. package/dist/chunks/index-r9Yb1UY4.esm.js.map +1 -0
  49. package/dist/chunks/index-t4uX5Dg1.esm.js +2 -0
  50. package/dist/chunks/index-t4uX5Dg1.esm.js.map +1 -0
  51. package/dist/chunks/{index-nJEBkWPL.esm.d.ts → index-wbrSi6cp.esm.d.ts} +1 -1
  52. package/dist/chunks/{index-w9_XpjIg.esm.js → index-wsdeaTHd.esm.js} +2 -2
  53. package/dist/chunks/index-wsdeaTHd.esm.js.map +1 -0
  54. package/dist/chunks/localize-GCkVUD8S.esm.js +10 -0
  55. package/dist/chunks/localize-GCkVUD8S.esm.js.map +1 -0
  56. package/dist/chunks/localize-pzAAkBvG.esm.js +10 -0
  57. package/dist/chunks/localize-pzAAkBvG.esm.js.map +1 -0
  58. package/dist/chunks/{openapi-spec-tJkr2i9K.esm.d.ts → openapi-spec-D_Zzbl2J.esm.d.ts} +215 -5
  59. package/dist/chunks/{order-page-LMEdbSdq.esm.js → order-page-JdaAppB7.esm.js} +2 -2
  60. package/dist/chunks/{order-page-LMEdbSdq.esm.js.map → order-page-JdaAppB7.esm.js.map} +1 -1
  61. package/dist/chunks/{order-page-sDLRWj-E.esm.js → order-page-W1jR35W9.esm.js} +2 -2
  62. package/dist/chunks/{order-page-sDLRWj-E.esm.js.map → order-page-W1jR35W9.esm.js.map} +1 -1
  63. package/dist/chunks/{order-page-cFAaDNWE.esm.d.ts → order-page-ydw5uXTI.esm.d.ts} +21 -2
  64. package/dist/chunks/routes-CqjzL4oL.esm.js +2 -0
  65. package/dist/chunks/{routes-bWWE2fXp.esm.js.map → routes-CqjzL4oL.esm.js.map} +1 -1
  66. package/dist/chunks/routes-lsOWIDmE.esm.js +2 -0
  67. package/dist/chunks/{routes-h6eWTToy.esm.js.map → routes-lsOWIDmE.esm.js.map} +1 -1
  68. package/dist/chunks/{update-cart-k_Y-sCyt.esm.js → update-cart-T32-282v.esm.js} +2 -2
  69. package/dist/chunks/{update-cart-k_Y-sCyt.esm.js.map → update-cart-T32-282v.esm.js.map} +1 -1
  70. package/dist/chunks/{update-cart-m3NdnSx2.esm.d.ts → update-cart-yCIzgmve.esm.d.ts} +1 -1
  71. package/dist/chunks/{update-cart-PflL_pK3.esm.js → update-cart-yneR8zk1.esm.js} +2 -2
  72. package/dist/chunks/{update-cart-PflL_pK3.esm.js.map → update-cart-yneR8zk1.esm.js.map} +1 -1
  73. package/dist/components/community-impact.esm.js +5 -4
  74. package/dist/components/community-impact.esm.js.map +1 -1
  75. package/dist/components/community-impact.js +5 -4
  76. package/dist/components/community-impact.js.map +1 -1
  77. package/dist/components/cumulative-impact.esm.js +3 -2
  78. package/dist/components/cumulative-impact.esm.js.map +1 -1
  79. package/dist/components/cumulative-impact.js +3 -2
  80. package/dist/components/cumulative-impact.js.map +1 -1
  81. package/dist/components/impact-overview.d.ts +0 -2
  82. package/dist/components/impact-overview.esm.js +6 -5
  83. package/dist/components/impact-overview.esm.js.map +1 -1
  84. package/dist/components/impact-overview.js +6 -5
  85. package/dist/components/impact-overview.js.map +1 -1
  86. package/dist/components/index.d.ts +3 -2
  87. package/dist/components/index.esm.js +1 -1
  88. package/dist/components/index.js +1 -1
  89. package/dist/components/post-purchase.d.ts +3 -4
  90. package/dist/components/post-purchase.esm.js +4 -5
  91. package/dist/components/post-purchase.esm.js.map +1 -1
  92. package/dist/components/post-purchase.js +4 -5
  93. package/dist/components/post-purchase.js.map +1 -1
  94. package/dist/components/redeem-transaction.d.ts +16 -6
  95. package/dist/components/redeem-transaction.esm.js +12 -11
  96. package/dist/components/redeem-transaction.esm.js.map +1 -1
  97. package/dist/components/redeem-transaction.js +12 -11
  98. package/dist/components/redeem-transaction.js.map +1 -1
  99. package/dist/components/select-nonprofit.d.ts +3 -3
  100. package/dist/components/select-nonprofit.esm.js +2 -1
  101. package/dist/components/select-nonprofit.esm.js.map +1 -1
  102. package/dist/components/select-nonprofit.js +2 -1
  103. package/dist/components/select-nonprofit.js.map +1 -1
  104. package/dist/components/shopify.d.ts +6 -6
  105. package/dist/components/shopify.esm.js +1 -1
  106. package/dist/components/shopify.esm.js.map +1 -1
  107. package/dist/components/shopify.js +1 -1
  108. package/dist/components/shopify.js.map +1 -1
  109. package/dist/components/subscription-management.d.ts +114 -0
  110. package/dist/components/subscription-management.esm.js +62 -0
  111. package/dist/components/subscription-management.esm.js.map +1 -0
  112. package/dist/components/subscription-management.js +62 -0
  113. package/dist/components/subscription-management.js.map +1 -0
  114. package/dist/index.d.ts +16 -14
  115. package/dist/index.esm.js +1 -1
  116. package/dist/index.js +1 -1
  117. package/dist/integrations/beam.esm.js +1 -1
  118. package/dist/integrations/beam.js +1 -1
  119. package/dist/integrations/cart.d.ts +3 -3
  120. package/dist/integrations/cart.esm.js +1 -1
  121. package/dist/integrations/cart.js +1 -1
  122. package/dist/integrations/index.d.ts +10 -10
  123. package/dist/integrations/index.esm.js +1 -1
  124. package/dist/integrations/index.js +1 -1
  125. package/dist/integrations/logs.d.ts +2 -2
  126. package/dist/integrations/logs.esm.js +1 -1
  127. package/dist/integrations/logs.js +1 -1
  128. package/dist/integrations/session.esm.js +1 -1
  129. package/dist/integrations/session.js +1 -1
  130. package/dist/integrations/shopify.d.ts +4 -4
  131. package/dist/integrations/shopify.esm.js +1 -1
  132. package/dist/integrations/shopify.js +1 -1
  133. package/dist/integrations/statsig.esm.js +1 -1
  134. package/dist/integrations/statsig.js +1 -1
  135. package/dist/integrations/utils.d.ts +4 -4
  136. package/dist/integrations/utils.esm.js +1 -1
  137. package/dist/integrations/utils.js +1 -1
  138. package/dist/react/community-impact.esm.js +1 -1
  139. package/dist/react/community-impact.esm.js.map +1 -1
  140. package/dist/react/community-impact.js +1 -1
  141. package/dist/react/community-impact.js.map +1 -1
  142. package/dist/react/cumulative-impact.esm.js +1 -1
  143. package/dist/react/cumulative-impact.esm.js.map +1 -1
  144. package/dist/react/cumulative-impact.js +1 -1
  145. package/dist/react/cumulative-impact.js.map +1 -1
  146. package/dist/react/impact-overview.esm.js +1 -1
  147. package/dist/react/impact-overview.esm.js.map +1 -1
  148. package/dist/react/impact-overview.js +1 -1
  149. package/dist/react/impact-overview.js.map +1 -1
  150. package/dist/react/index.d.ts +5 -3
  151. package/dist/react/index.esm.js +1 -1
  152. package/dist/react/index.js +1 -1
  153. package/dist/react/post-purchase.d.ts +2 -2
  154. package/dist/react/post-purchase.esm.js +1 -1
  155. package/dist/react/post-purchase.esm.js.map +1 -1
  156. package/dist/react/post-purchase.js +1 -1
  157. package/dist/react/post-purchase.js.map +1 -1
  158. package/dist/react/redeem-transaction.d.ts +3 -3
  159. package/dist/react/redeem-transaction.esm.js +1 -1
  160. package/dist/react/redeem-transaction.esm.js.map +1 -1
  161. package/dist/react/redeem-transaction.js +1 -1
  162. package/dist/react/redeem-transaction.js.map +1 -1
  163. package/dist/react/select-nonprofit.d.ts +3 -3
  164. package/dist/react/select-nonprofit.esm.js +1 -1
  165. package/dist/react/select-nonprofit.esm.js.map +1 -1
  166. package/dist/react/select-nonprofit.js +1 -1
  167. package/dist/react/select-nonprofit.js.map +1 -1
  168. package/dist/react/subscription-management.d.ts +11 -0
  169. package/dist/react/subscription-management.esm.js +2 -0
  170. package/dist/react/subscription-management.esm.js.map +1 -0
  171. package/dist/react/subscription-management.js +2 -0
  172. package/dist/react/subscription-management.js.map +1 -0
  173. package/dist/utils/beam-errors.d.ts +1 -1
  174. package/dist/utils/beam-errors.esm.js +1 -1
  175. package/dist/utils/beam-errors.js +1 -1
  176. package/dist/utils/cookies.d.ts +1 -1
  177. package/dist/utils/cookies.esm.js +1 -1
  178. package/dist/utils/cookies.esm.js.map +1 -1
  179. package/dist/utils/cookies.js +1 -1
  180. package/dist/utils/cookies.js.map +1 -1
  181. package/dist/utils/events.d.ts +3 -3
  182. package/dist/utils/index.d.ts +4 -4
  183. package/dist/utils/index.esm.js +1 -1
  184. package/dist/utils/index.js +1 -1
  185. package/dist/utils/local-storage.esm.js +1 -1
  186. package/dist/utils/local-storage.js +1 -1
  187. package/dist/utils/remote-session.esm.js +1 -1
  188. package/dist/utils/remote-session.js +1 -1
  189. package/dist/utils/wait-for-element.esm.js +1 -1
  190. package/dist/utils/wait-for-element.js +1 -1
  191. package/package.json +2 -2
  192. package/dist/chunks/_share-dialog-dependencies-7OysCcbl.esm.js +0 -2
  193. package/dist/chunks/_share-dialog-dependencies-7OysCcbl.esm.js.map +0 -1
  194. package/dist/chunks/_share-dialog-dependencies-IH8H0M7S.esm.js +0 -2
  195. package/dist/chunks/_share-dialog-dependencies-IH8H0M7S.esm.js.map +0 -1
  196. package/dist/chunks/beam-errors-AMvTvR1C.esm.js +0 -2
  197. package/dist/chunks/beam-errors-AMvTvR1C.esm.js.map +0 -1
  198. package/dist/chunks/index-D7cyvlBG.esm.js +0 -2
  199. package/dist/chunks/index-D7cyvlBG.esm.js.map +0 -1
  200. package/dist/chunks/index-FAF7tYU6.esm.js.map +0 -1
  201. package/dist/chunks/index-Fvk8qalO.esm.js +0 -2
  202. package/dist/chunks/index-Fvk8qalO.esm.js.map +0 -1
  203. package/dist/chunks/index-JL12lEnO.esm.js.map +0 -1
  204. package/dist/chunks/index-K9rDxqim.esm.js +0 -2
  205. package/dist/chunks/index-K9rDxqim.esm.js.map +0 -1
  206. package/dist/chunks/index-LY8cCwxB.esm.js +0 -2
  207. package/dist/chunks/index-LY8cCwxB.esm.js.map +0 -1
  208. package/dist/chunks/index-Li9RyHWl.esm.js +0 -2
  209. package/dist/chunks/index-Li9RyHWl.esm.js.map +0 -1
  210. package/dist/chunks/index-YfVtHaFO.esm.js +0 -2
  211. package/dist/chunks/index-YfVtHaFO.esm.js.map +0 -1
  212. package/dist/chunks/index-YoXRWj_4.esm.js +0 -2
  213. package/dist/chunks/index-YoXRWj_4.esm.js.map +0 -1
  214. package/dist/chunks/index-aGYbEHXq.esm.js.map +0 -1
  215. package/dist/chunks/index-bo9Yq4jd.esm.js +0 -2
  216. package/dist/chunks/index-bo9Yq4jd.esm.js.map +0 -1
  217. package/dist/chunks/index-rrdYIcOi.esm.js.map +0 -1
  218. package/dist/chunks/index-uqEAgdEf.esm.js.map +0 -1
  219. package/dist/chunks/index-w9_XpjIg.esm.js.map +0 -1
  220. package/dist/chunks/localize-BGPniqcI.esm.js +0 -30
  221. package/dist/chunks/localize-BGPniqcI.esm.js.map +0 -1
  222. package/dist/chunks/localize-dXHrlK8g.esm.js +0 -30
  223. package/dist/chunks/localize-dXHrlK8g.esm.js.map +0 -1
  224. package/dist/chunks/routes-bWWE2fXp.esm.js +0 -2
  225. package/dist/chunks/routes-h6eWTToy.esm.js +0 -2
@@ -648,7 +648,7 @@ interface paths {
648
648
  */
649
649
  lang?: "en" | "fr" | "de" | "es" | "it" | "pl";
650
650
  /** @enum {string} */
651
- widgetName: "select-nonprofit" | "redeem-transaction";
651
+ widgetName: "select-nonprofit" | "redeem-transaction" | "post-purchase" | "subscription-management";
652
652
  /** @example 1.0 */
653
653
  version: string;
654
654
  cart?: {
@@ -675,6 +675,10 @@ interface paths {
675
675
  product_type?: string | null;
676
676
  variant_id?: number | null;
677
677
  }[];
678
+ subscriptions?: {
679
+ remoteSubscriptionId: string;
680
+ isNew?: boolean;
681
+ }[];
678
682
  };
679
683
  } | {
680
684
  schema: {
@@ -698,6 +702,10 @@ interface paths {
698
702
  product_id?: number | null;
699
703
  variant_id?: number | null;
700
704
  }[];
705
+ subscriptions?: {
706
+ remoteSubscriptionId: string;
707
+ isNew?: boolean;
708
+ }[];
701
709
  };
702
710
  } | {
703
711
  schema: {
@@ -709,10 +717,15 @@ interface paths {
709
717
  variant?: "default";
710
718
  };
711
719
  content: {
720
+ localAmount?: number;
712
721
  items: {
713
722
  /** @description Maps to destination that which a customer is traveling to. Used to enable localization. */
714
723
  placeId: string;
715
724
  }[];
725
+ subscriptions?: {
726
+ remoteSubscriptionId: string;
727
+ isNew?: boolean;
728
+ }[];
716
729
  };
717
730
  } | {
718
731
  schema: {
@@ -726,9 +739,15 @@ interface paths {
726
739
  version?: string;
727
740
  };
728
741
  content: {
742
+ localAmount?: number;
729
743
  items: {
730
744
  remoteProductIdentifier: string;
731
745
  localAmount: number;
746
+ remoteSubscriptionId?: string;
747
+ }[];
748
+ subscriptions?: {
749
+ remoteSubscriptionId: string;
750
+ isNew?: boolean;
732
751
  }[];
733
752
  };
734
753
  };
@@ -747,7 +766,8 @@ interface paths {
747
766
  get: {
748
767
  parameters: {
749
768
  query: {
750
- chainId: number;
769
+ /** @deprecated No longer needed, chainId inferred from API Key */
770
+ chainId?: number;
751
771
  beamUserId?: string;
752
772
  /** Nonprofit ID */
753
773
  nonprofitId?: number;
@@ -1687,6 +1707,10 @@ interface paths {
1687
1707
  product_type?: string | null;
1688
1708
  variant_id?: number | null;
1689
1709
  }[];
1710
+ subscriptions?: {
1711
+ remoteSubscriptionId: string;
1712
+ isNew?: boolean;
1713
+ }[];
1690
1714
  };
1691
1715
  } | {
1692
1716
  schema: {
@@ -1710,6 +1734,10 @@ interface paths {
1710
1734
  product_id?: number | null;
1711
1735
  variant_id?: number | null;
1712
1736
  }[];
1737
+ subscriptions?: {
1738
+ remoteSubscriptionId: string;
1739
+ isNew?: boolean;
1740
+ }[];
1713
1741
  };
1714
1742
  } | {
1715
1743
  schema: {
@@ -1721,10 +1749,15 @@ interface paths {
1721
1749
  variant?: "default";
1722
1750
  };
1723
1751
  content: {
1752
+ localAmount?: number;
1724
1753
  items: {
1725
1754
  /** @description Maps to destination that which a customer is traveling to. Used to enable localization. */
1726
1755
  placeId: string;
1727
1756
  }[];
1757
+ subscriptions?: {
1758
+ remoteSubscriptionId: string;
1759
+ isNew?: boolean;
1760
+ }[];
1728
1761
  };
1729
1762
  } | {
1730
1763
  schema: {
@@ -1738,9 +1771,15 @@ interface paths {
1738
1771
  version?: string;
1739
1772
  };
1740
1773
  content: {
1774
+ localAmount?: number;
1741
1775
  items: {
1742
1776
  remoteProductIdentifier: string;
1743
1777
  localAmount: number;
1778
+ remoteSubscriptionId?: string;
1779
+ }[];
1780
+ subscriptions?: {
1781
+ remoteSubscriptionId: string;
1782
+ isNew?: boolean;
1744
1783
  }[];
1745
1784
  };
1746
1785
  };
@@ -2202,13 +2241,113 @@ interface paths {
2202
2241
  countryCode?: string;
2203
2242
  isCanceled?: boolean;
2204
2243
  discountCodes?: string[];
2244
+ cart?: {
2245
+ schema: {
2246
+ /** @enum {string} */
2247
+ source: "shopify";
2248
+ /** @enum {string} */
2249
+ variant: "ajax";
2250
+ version?: string;
2251
+ };
2252
+ content: {
2253
+ localAmount?: number;
2254
+ items: {
2255
+ id?: number | null;
2256
+ gift_card?: boolean | null;
2257
+ /** @description Price for line item (qty * unit price), after discounts, in integer cents format (3.50 => 350) */
2258
+ final_line_price: number | null;
2259
+ /** @description Unit price for line item, in integer cents format (3.50 => 350) */
2260
+ final__price?: number | null;
2261
+ quantity?: number | null;
2262
+ sku: string | null;
2263
+ product_id?: number | null;
2264
+ product_title?: string | null;
2265
+ product_type?: string | null;
2266
+ variant_id?: number | null;
2267
+ }[];
2268
+ subscriptions?: {
2269
+ remoteSubscriptionId: string;
2270
+ isNew?: boolean;
2271
+ }[];
2272
+ };
2273
+ } | {
2274
+ schema: {
2275
+ /** @enum {string} */
2276
+ source: "shopify";
2277
+ /** @enum {string} */
2278
+ variant: "liquid";
2279
+ version?: string;
2280
+ };
2281
+ content: {
2282
+ localAmount?: number;
2283
+ items: {
2284
+ id?: number | null;
2285
+ gift_card?: boolean | null;
2286
+ /** @description Price for line item (qty * unit price), after discounts, in decimal format (3.50) */
2287
+ final_line_price: number | null;
2288
+ /** @description Unit price for line item in decimal format (3.50) */
2289
+ final_price?: number | null;
2290
+ quantity?: number | null;
2291
+ sku: string | null;
2292
+ product_id?: number | null;
2293
+ variant_id?: number | null;
2294
+ }[];
2295
+ subscriptions?: {
2296
+ remoteSubscriptionId: string;
2297
+ isNew?: boolean;
2298
+ }[];
2299
+ };
2300
+ } | {
2301
+ schema: {
2302
+ /** @enum {string} */
2303
+ source: "expedia_group";
2304
+ /** @example 1.0.0 */
2305
+ version?: string;
2306
+ /** @enum {string} */
2307
+ variant?: "default";
2308
+ };
2309
+ content: {
2310
+ localAmount?: number;
2311
+ items: {
2312
+ /** @description Maps to destination that which a customer is traveling to. Used to enable localization. */
2313
+ placeId: string;
2314
+ }[];
2315
+ subscriptions?: {
2316
+ remoteSubscriptionId: string;
2317
+ isNew?: boolean;
2318
+ }[];
2319
+ };
2320
+ } | {
2321
+ schema: {
2322
+ /**
2323
+ * @default generic
2324
+ * @enum {string}
2325
+ */
2326
+ source: "generic";
2327
+ /** @enum {string} */
2328
+ variant?: "default";
2329
+ version?: string;
2330
+ };
2331
+ content: {
2332
+ localAmount?: number;
2333
+ items: {
2334
+ remoteProductIdentifier: string;
2335
+ localAmount: number;
2336
+ remoteSubscriptionId?: string;
2337
+ }[];
2338
+ subscriptions?: {
2339
+ remoteSubscriptionId: string;
2340
+ isNew?: boolean;
2341
+ }[];
2342
+ };
2343
+ };
2205
2344
  }> & Partial<{
2206
2345
  chainId: number;
2207
2346
  orderId: string;
2208
2347
  nonprofitId?: number;
2209
2348
  isCanceled?: boolean;
2210
2349
  /** @enum {string} */
2211
- 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";
2350
+ 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";
2212
2351
  version?: string;
2213
2352
  options?: {
2214
2353
  response?: {
@@ -2227,6 +2366,77 @@ interface paths {
2227
2366
  };
2228
2367
  };
2229
2368
  };
2369
+ "/subscriptions/updateSubscriptionNonprofit": {
2370
+ post: {
2371
+ responses: {
2372
+ /** Subscription updated */
2373
+ 200: unknown;
2374
+ };
2375
+ requestBody: {
2376
+ content: {
2377
+ "application/json": {
2378
+ /** @description Id derived from partner services. Not the Beam subscription ID. */
2379
+ remoteSubscriptionId: string;
2380
+ nonprofitId: number | null;
2381
+ };
2382
+ };
2383
+ };
2384
+ };
2385
+ };
2386
+ "/subscriptions/findSubscriptionByRemoteId": {
2387
+ post: {
2388
+ responses: {
2389
+ /** Sends subscription info along with corresponding nonprofit and cause data */
2390
+ 200: {
2391
+ content: {
2392
+ "application/json": {
2393
+ beamUserId: string;
2394
+ remoteSubscriptionId: string;
2395
+ nonprofit: {
2396
+ /**
2397
+ * @description Numeric ID
2398
+ * @example 1001
2399
+ */
2400
+ id: number;
2401
+ } | null;
2402
+ };
2403
+ };
2404
+ };
2405
+ /** Standard error */
2406
+ default: {
2407
+ content: {
2408
+ "application/json": {
2409
+ /** @description Beam code for the error, meant to be used programmatically */
2410
+ code: string;
2411
+ /** @description A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization */
2412
+ title: string;
2413
+ /** @description A human-readable explanation specific to this occurrence of the problem. Like title, this field's value can be localized */
2414
+ detail: string;
2415
+ /** @description a JSON Pointer to the associated entity in the request document */
2416
+ field?: string;
2417
+ /** @description A meta object containing non-standard meta-information about the error */
2418
+ metadata?: {
2419
+ [key: string]: unknown;
2420
+ };
2421
+ /** @description Whether the API or user can resend the request */
2422
+ retryable?: boolean;
2423
+ } & {
2424
+ source: unknown;
2425
+ meta: unknown;
2426
+ };
2427
+ };
2428
+ };
2429
+ };
2430
+ requestBody: {
2431
+ content: {
2432
+ "application/json": {
2433
+ remoteSubscriptionId: string;
2434
+ email: string;
2435
+ };
2436
+ };
2437
+ };
2438
+ };
2439
+ };
2230
2440
  "/selectNonprofit": {
2231
2441
  post: {
2232
2442
  responses: {
@@ -2355,7 +2565,7 @@ interface paths {
2355
2565
  parameters: {
2356
2566
  query: {
2357
2567
  chainId: number;
2358
- 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";
2568
+ 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";
2359
2569
  version: string;
2360
2570
  };
2361
2571
  };
@@ -2407,7 +2617,7 @@ interface paths {
2407
2617
  /** @example 4058 */
2408
2618
  chainId: number;
2409
2619
  /** @enum {string} */
2410
- 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";
2620
+ 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";
2411
2621
  /** @example 1.0 */
2412
2622
  version: string;
2413
2623
  config: {
@@ -1,2 +1,2 @@
1
- import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as _}from"../utils/local-storage.esm.js";import{getCookieValue as w}from"../utils/cookies.esm.js";import{memoizeLast as A}from"../utils/memoize-last.esm.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-PflL_pK3.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-bWWE2fXp.esm.js";import{waitForElement as J}from"../utils/wait-for-element.esm.js";import{B as x}from"./beam-errors-AMvTvR1C.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
- //# sourceMappingURL=order-page-LMEdbSdq.esm.js.map
1
+ import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as _}from"../utils/local-storage.esm.js";import{getCookieValue as w}from"../utils/cookies.esm.js";import{memoizeLast as A}from"../utils/memoize-last.esm.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-yneR8zk1.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-lsOWIDmE.esm.js";import{waitForElement as J}from"../utils/wait-for-element.esm.js";import{B as x}from"./beam-errors-P-Lu07Ce.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
+ //# sourceMappingURL=order-page-JdaAppB7.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-page-LMEdbSdq.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 { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype 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\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(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\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 await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\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 const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await 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 const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\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 await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\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\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 } = 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\n const cart = {\n cartId: token,\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 }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\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 */\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 const beamCartAttrs = {\n beam: JSON.stringify({\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 }),\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 console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\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 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 countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\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.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","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"gqBAeA,MAAMA,EAAmB,OAAO,SAAS,QAAQ,MAAQ,IAEzD,IAAIC,EAAkC,GAEtC,MAAMC,EAA2B,OAMjC,eAAeC,EAAwBC,EAA0C,CAC/E,GAAIH,EACF,MAAO,GAKT,MAAMI,EAAc,MAAMC,EAAeF,CAAM,EAC/C,MAAMG,EAAWH,EAAQC,EAAY,IAAI,EAGzCG,EAAqB,EAErB,OAAO,iBAAiBC,EAAqB,UAAW,MAAOC,GAAkB,CAC/E,MAAMC,EAAQD,EACRE,EAAkB,kCAElBC,EAAgBF,EAAM,OAAO,OAAS,MAAQA,EAAM,OAAO,IAAI,YAAcA,EAAM,OAAO,SAAS,IACnGG,EAAM,IAAI,IAAID,CAAa,EACjC,GAAI,CAACD,EAAgB,KAAKE,EAAI,QAAQ,EACpC,OAEF,MAAMT,EAAc,MAAMC,EAAeF,CAAM,EAC/C,GAAI,CAACC,EAAY,QACf,OAEF,MAAMU,EAAwB,CAC5B,OAAQV,EAAY,KAAK,OACzB,QAAS,CACP,MAAOA,EAAY,KAAK,QAAQ,KAClC,CACF,EACA,OAAO,cAAc,IAAIW,EAAoBD,CAAW,CAAC,EAEzD,MAAMR,EAAWH,EAAQC,EAAY,IAAI,CAC3C,CAAC,EAGD,IAAIY,EACAC,EACJ,OAAA,OAAO,iBAAiBC,EAAyB,UAAW,MAAOT,GAAW,CAC5E,MAAMC,EAAQD,EACR,CAAE,oBAAAU,EAAqB,YAAAC,CAAY,EAAIV,EAAM,OAC7CW,EAAS,MAAMC,EAAerB,CAAwB,EACtDsB,EAAa,MAAMD,EAAeE,CAAqB,EACvD,CAAE,QAAAC,EAAS,QAAAC,CAAQ,EAAIvB,EAGzBa,IAAoBG,GAAuBF,IAAoBG,IAGnE,MAAMO,EAAwB,CAC5B,oBAAAR,EACA,YAAAC,EACA,WAAAG,EACA,OAAAF,EACA,QAAAI,EACA,QAAAC,CACF,CAAC,EACDT,EAAkBG,EAClBJ,EAAkBG,EACpB,CAAC,EAEDnB,EAAkC,GAE3B,EACT,CAcA,eAAeK,EAAeF,EAQ3B,CACD,KAAM,CACJ,MAAAyB,EACA,YAAAC,EACA,WAAAC,EACA,SAAAC,EACA,MAAAC,CACF,EAAI,MAAM,OACP,MAAMjC,EAAmB,UAAW,CACnC,OAAQ,MACR,QAAS,CAAE,eAAgB,kBAAmB,CAChD,CAAC,EACA,KAAMkC,GAAQA,EAAI,KAAM,CAAA,EAErBC,EAAO,CACX,OAAQN,EACR,SAAUC,EAAc,IACxB,UAAWC,EACX,aAAcC,EACd,OAAQ,CAAE,OAAQ,SAAU,EAC5B,QAAS,CAEP,MAAQC,EAAqB,IAAI,CAAC,CAAE,IAAAG,EAAK,iBAAAC,EAAkB,WAAAC,CAAW,IAAM,CAC1E,MAAMC,EAA0BH,GAAO,OAAOE,CAAU,EAClDE,EAAcH,EAAmB,IACvC,MAAO,CAAE,wBAAAE,EAAyB,YAAAC,CAAY,CAChD,CAAC,CACH,CACF,EAEA,IAAIC,EAAU,GAId,MAAMC,EAFeC,EAAyBvC,CAAM,EAEpB,YAAY,MAAM,EAElD,OAAKwC,EAAQT,EAAMO,CAAU,IAC3BD,EAAU,IAGL,CAAE,QAAAA,EAAS,KAAAN,CAAK,CACzB,OAKMU,EAAYtC,EAMZqB,EAA0BkB,EAAY,eAAuC,CACjF,oBAAA1B,EACA,YAAAC,EACA,WAAAG,EACA,OAAAF,EACA,QAAAI,EACA,QAAAC,CACF,EAOG,CACD,MAAMoB,EAAgB,CACpB,KAAM,KAAK,UAAU,CACnB,aAAc3B,EACd,aAAcC,EACd,aAAcG,EACd,gBAAiBF,EACjB,SAAUI,EACV,SAAUC,CACZ,CAAC,CACH,EAEA,GAAI,CACF,MAAM,OAAO,MAAM3B,EAAmB,iBAAkB,CACtD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,WAAY+C,CAAc,CAAC,CACpD,CAAC,CACH,OAASC,EAAK,CACZ,QAAQ,MAAMA,CAAG,CACnB,CACF,CAAC,iBCzKqBC,EAAyB,CAC7C,eAAAC,EAAiB,kBACjB,OAAAC,EACA,QAAAC,EAAUC,EACV,QAAA1B,EACA,WAAA2B,EACA,YAAAC,EACA,QAAAC,EACA,MAAAC,EACA,UAAAC,EACA,KAAAvB,EACA,cAAAwB,EACA,aAAAC,EAAe,MACf,OAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EAAQ,EACV,EAAyB,CACvB,MAAMC,EAAgB,SAAS,cAAcd,CAAc,GAAM,MAAMe,EAAef,CAAc,EACpG,GAAI,CAACc,EACH,MAAM,IAAIE,EACR,mCAAmChB,CAAc,gDACnD,EAKF,MAAM5B,EAAS,MAAMC,EAAe,MAAM,EAC1C,GAAID,EAAQ,CACV,MAAM6C,EAAmBxB,EAAyB,CAAE,OAAAQ,CAAO,CAAC,EACtDiB,EAAgBD,EAAiB,YAAY,MAAM,GAAK,CAAC,EAC/DA,EAAiB,YAAY,OAAQ,CAAE,GAAGC,EAAe,OAAA9C,CAAO,CAAC,CACnE,CAGA,MAAM+C,EAAS,SAAS,cAAc,oBAAoB,EAC1DA,EAAO,OAASlB,EAChBkB,EAAO,QAAUjB,EACjBiB,EAAO,QAAU1C,EACjB0C,EAAO,WAAaf,EACpBe,EAAO,YAAcd,EACrBc,EAAO,QAAU,OAAOb,CAAO,EAC/Ba,EAAO,MAAQZ,EACfY,EAAO,UAAYX,EACnBW,EAAO,KAAOlC,EACdkC,EAAO,cAAgBV,EACvBU,EAAO,aAAeT,EACtBS,EAAO,OAASR,EAChBQ,EAAO,KAAOP,EACdO,EAAO,MAAQN,EAGfC,EAAc,YAAYK,CAAM,CAClC"}
1
+ {"version":3,"file":"order-page-JdaAppB7.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 { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype 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\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(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\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 await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\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 const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await 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 const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\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 await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\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\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 } = 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\n const cart = {\n cartId: token,\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 }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\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 */\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 const beamCartAttrs = {\n beam: JSON.stringify({\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 }),\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 console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\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 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 countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\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.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","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.js";import{createScopedLocalStorage as _}from"../utils/local-storage.js";import{getCookieValue as w}from"../utils/cookies.js";import{memoizeLast as A}from"../utils/memoize-last.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-k_Y-sCyt.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-h6eWTToy.esm.js";import{waitForElement as J}from"../utils/wait-for-element.js";import{B as x}from"./beam-errors-AMvTvR1C.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
- //# sourceMappingURL=order-page-sDLRWj-E.esm.js.map
1
+ import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.js";import{createScopedLocalStorage as _}from"../utils/local-storage.js";import{getCookieValue as w}from"../utils/cookies.js";import{memoizeLast as A}from"../utils/memoize-last.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-T32-282v.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-CqjzL4oL.esm.js";import{waitForElement as J}from"../utils/wait-for-element.js";import{B as x}from"./beam-errors-P-Lu07Ce.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
+ //# sourceMappingURL=order-page-W1jR35W9.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-page-sDLRWj-E.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 { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype 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\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(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\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 await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\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 const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await 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 const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\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 await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\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\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 } = 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\n const cart = {\n cartId: token,\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 }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\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 */\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 const beamCartAttrs = {\n beam: JSON.stringify({\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 }),\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 console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\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 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 countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\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.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","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"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"}
1
+ {"version":3,"file":"order-page-W1jR35W9.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 { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype 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\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(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\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 await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\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 const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await 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 const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\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 await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\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\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 } = 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\n const cart = {\n cartId: token,\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 }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\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 */\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 const beamCartAttrs = {\n beam: JSON.stringify({\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 }),\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 console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\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 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 countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\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.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","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as lodash from 'lodash';
2
- import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-m3NdnSx2.esm.js';
3
- import { T as TCart } from './cart-contents-tEvcY9ip.esm.js';
2
+ import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-yCIzgmve.esm.js';
3
+ import { T as TCart } from './cart-contents-Shc27L1J.esm.js';
4
4
  import '../components/post-purchase.js';
5
5
  import { T as TUrl, L as LANGUAGES } from './types-aju0qrRe.esm.js';
6
6
 
@@ -85,6 +85,10 @@ declare const postTransaction: ({ headers, baseUrl, apiRoot, pathParams, queryPa
85
85
  product_type?: string | null | undefined;
86
86
  variant_id?: number | null | undefined;
87
87
  }[];
88
+ subscriptions?: {
89
+ remoteSubscriptionId: string;
90
+ isNew?: boolean | undefined;
91
+ }[] | undefined;
88
92
  };
89
93
  } | {
90
94
  schema: {
@@ -104,6 +108,10 @@ declare const postTransaction: ({ headers, baseUrl, apiRoot, pathParams, queryPa
104
108
  product_id?: number | null | undefined;
105
109
  variant_id?: number | null | undefined;
106
110
  }[];
111
+ subscriptions?: {
112
+ remoteSubscriptionId: string;
113
+ isNew?: boolean | undefined;
114
+ }[] | undefined;
107
115
  };
108
116
  } | {
109
117
  schema: {
@@ -112,9 +120,14 @@ declare const postTransaction: ({ headers, baseUrl, apiRoot, pathParams, queryPa
112
120
  variant?: "default" | undefined;
113
121
  };
114
122
  content: {
123
+ localAmount?: number | undefined;
115
124
  items: {
116
125
  placeId: string;
117
126
  }[];
127
+ subscriptions?: {
128
+ remoteSubscriptionId: string;
129
+ isNew?: boolean | undefined;
130
+ }[] | undefined;
118
131
  };
119
132
  } | {
120
133
  schema: {
@@ -123,10 +136,16 @@ declare const postTransaction: ({ headers, baseUrl, apiRoot, pathParams, queryPa
123
136
  version?: string | undefined;
124
137
  };
125
138
  content: {
139
+ localAmount?: number | undefined;
126
140
  items: {
127
141
  remoteProductIdentifier: string;
128
142
  localAmount: number;
143
+ remoteSubscriptionId?: string | undefined;
129
144
  }[];
145
+ subscriptions?: {
146
+ remoteSubscriptionId: string;
147
+ isNew?: boolean | undefined;
148
+ }[] | undefined;
130
149
  };
131
150
  } | undefined;
132
151
  options?: {
@@ -0,0 +1,2 @@
1
+ import{B as E,N as l}from"./beam-errors-P-Lu07Ce.esm.js";import{logger as p}from"../utils/logger.js";var w="1.36.8",C={"@lit/react":"1.0.0","@lukeed/uuid":"2.0.0","@shoelace-style/shoelace":"2.11.2",lit:"2.6.1","lodash-es":"4.17.21","lucide-static":"0.292.0"};async function O(s,a){const c={method:"GET",...a,headers:{"Content-Type":"application/json",Accept:"application/json","X-Beam-Client":"WebSDK","X-Beam-Client-Version":w,...a?.headers},preflightContinue:!0,mode:a?.mode||"cors",body:a?.body!=null?a.body:void 0};let r;try{r=await fetch(s,c)}catch(e){const o=new E(`Network call failed (${c?.method.toUpperCase()} ${s})`);throw o.cause=e,p.error(o,s),o}let n,i;try{i=await r.text(),i&&(n=JSON.parse(i))}catch(e){let o=e;throw e instanceof SyntaxError&&(o=new l(r,n,`Response invalid. Expected JSON. Received: "${i}"`),o.cause=e),p.error(o),o}if(!r.ok){const e=new l(r,n,"Response was not OK");throw p.error(e),e}return n}const u="https://production-central-backend-ne.beamimpact.com",v="https://production.beamimpactlogs.com",R={en:"en",fr:"fr",de:"de",es:"es",it:"it",pl:"pl"},t=(s,a,c)=>({[s]:async function({headers:r={},baseUrl:n=u,apiRoot:i="/api/v3",pathParams:e={},queryParams:o={},requestBody:m}){const h=Object.entries(e).reduce((y,[g,N])=>y.replace(`{${g}}`,N),s),f=JSON.parse(JSON.stringify(o)),d=new URLSearchParams(f).toString(),S=n+i+h+(d&&`?${d}`),b={headers:r,method:a,body:JSON.stringify(m)};return O(S,b)}})[s],U=t("/impact","get"),L=t("/chain/{chainId}/cumulativeImpact","get"),T=t("/selectNonprofit","post"),k=t("/transaction","post"),A=t("/transaction/{transactionId}","put"),B=t("/cart","post"),x=t("/chain/findEligibleNonprofitsForCart","post"),I=t("/logs","post"),J=t("/experimentSession","post"),D=t("/subscriptions/updateSubscriptionNonprofit","post"),F=t("/subscriptions/findSubscriptionByRemoteId","post");export{u as D,R as S,v as a,x as b,k as c,B as d,I as e,T as f,U as g,F as h,A as i,L as j,C as k,J as p,D as u};
2
+ //# sourceMappingURL=routes-CqjzL4oL.esm.js.map