@beamimpact/web-sdk 1.36.0 → 1.36.3

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 (130) hide show
  1. package/README.md +80 -9
  2. package/dist/chunks/{_share-dialog-dependencies-JkqAjyWn.esm.js → _share-dialog-dependencies--ymuf2iZ.esm.js} +2 -2
  3. package/dist/chunks/_share-dialog-dependencies--ymuf2iZ.esm.js.map +1 -0
  4. package/dist/chunks/{_share-dialog-dependencies-mxkp5-2m.esm.js → _share-dialog-dependencies-n9b_OCM7.esm.js} +2 -2
  5. package/dist/chunks/_share-dialog-dependencies-n9b_OCM7.esm.js.map +1 -0
  6. package/dist/chunks/{cart-contents-22-v_s94.esm.d.ts → cart-contents-tEvcY9ip.esm.d.ts} +1 -1
  7. package/dist/chunks/{events-rt-wdsLM.esm.d.ts → events-PZnG_xac.esm.d.ts} +1 -1
  8. package/dist/chunks/index--jVeJo2S.esm.js +2 -0
  9. package/dist/chunks/index--jVeJo2S.esm.js.map +1 -0
  10. package/dist/chunks/{index-W4Y5lVSA.esm.d.ts → index-5-EnaNnJ.esm.d.ts} +1 -1
  11. package/dist/chunks/index-DgHFjjme.esm.js +2 -0
  12. package/dist/chunks/index-DgHFjjme.esm.js.map +1 -0
  13. package/dist/chunks/index-JNiGr3KS.esm.js +2 -0
  14. package/dist/chunks/index-JNiGr3KS.esm.js.map +1 -0
  15. package/dist/chunks/index-KSxb-LPg.esm.js +2 -0
  16. package/dist/chunks/index-KSxb-LPg.esm.js.map +1 -0
  17. package/dist/chunks/{index-IOQZUYT9.esm.d.ts → index-PL4iasT1.esm.d.ts} +1 -1
  18. package/dist/chunks/index-PRMh7OXf.esm.js +2 -0
  19. package/dist/chunks/index-PRMh7OXf.esm.js.map +1 -0
  20. package/dist/chunks/{index-xERV1BQn.esm.d.ts → index-U2dW3lkm.esm.d.ts} +1 -1
  21. package/dist/chunks/{index-olIrMP04.esm.js → index-U4xez8rX.esm.js} +2 -2
  22. package/dist/chunks/{index-olIrMP04.esm.js.map → index-U4xez8rX.esm.js.map} +1 -1
  23. package/dist/chunks/{index-qerf6TiH.esm.d.ts → index-hbzssC4x.esm.d.ts} +1 -1
  24. package/dist/chunks/{index-e13I7Ozo.esm.js → index-j-NaeUKV.esm.js} +2 -2
  25. package/dist/chunks/{index-e13I7Ozo.esm.js.map → index-j-NaeUKV.esm.js.map} +1 -1
  26. package/dist/chunks/{index-iTqsULiK.esm.d.ts → index-nJEBkWPL.esm.d.ts} +1 -1
  27. package/dist/chunks/index-qyU4d_39.esm.js +2 -0
  28. package/dist/chunks/index-qyU4d_39.esm.js.map +1 -0
  29. package/dist/chunks/{index-rTMJFwfk.esm.d.ts → index-rOz-i1aX.esm.d.ts} +4 -4
  30. package/dist/chunks/{openapi-spec-scRfHArN.esm.d.ts → openapi-spec-tJkr2i9K.esm.d.ts} +56 -1
  31. package/dist/chunks/{order-page-Q9iJrRjP.esm.js → order-page-TnGjpqgX.esm.js} +2 -2
  32. package/dist/chunks/{order-page-Q9iJrRjP.esm.js.map → order-page-TnGjpqgX.esm.js.map} +1 -1
  33. package/dist/chunks/{order-page-ua17ZUZi.esm.js → order-page-WNM5eGtR.esm.js} +2 -2
  34. package/dist/chunks/{order-page-ua17ZUZi.esm.js.map → order-page-WNM5eGtR.esm.js.map} +1 -1
  35. package/dist/chunks/{order-page-scELdENh.esm.d.ts → order-page-cFAaDNWE.esm.d.ts} +2 -2
  36. package/dist/chunks/routes-0acj_R0M.esm.js +2 -0
  37. package/dist/chunks/{routes-2eYzHPEh.esm.js.map → routes-0acj_R0M.esm.js.map} +1 -1
  38. package/dist/chunks/routes-dou9TIdY.esm.js +2 -0
  39. package/dist/chunks/{routes-dMIUHq8Y.esm.js.map → routes-dou9TIdY.esm.js.map} +1 -1
  40. package/dist/chunks/{update-cart-rzsMaDu6.esm.js → update-cart-UXOGYRmF.esm.js} +2 -2
  41. package/dist/chunks/{update-cart-rzsMaDu6.esm.js.map → update-cart-UXOGYRmF.esm.js.map} +1 -1
  42. package/dist/chunks/{update-cart-1CVVu5Xc.esm.js → update-cart-ehKAwAKe.esm.js} +2 -2
  43. package/dist/chunks/{update-cart-1CVVu5Xc.esm.js.map → update-cart-ehKAwAKe.esm.js.map} +1 -1
  44. package/dist/chunks/{update-cart-lCgGJZvM.esm.d.ts → update-cart-m3NdnSx2.esm.d.ts} +1 -1
  45. package/dist/components/community-impact.esm.js +1 -1
  46. package/dist/components/community-impact.js +1 -1
  47. package/dist/components/cumulative-impact.esm.js +1 -1
  48. package/dist/components/cumulative-impact.js +1 -1
  49. package/dist/components/impact-overview.esm.js +1 -1
  50. package/dist/components/impact-overview.js +1 -1
  51. package/dist/components/index.d.ts +2 -2
  52. package/dist/components/index.esm.js +1 -1
  53. package/dist/components/index.js +1 -1
  54. package/dist/components/post-purchase.d.ts +3 -3
  55. package/dist/components/post-purchase.esm.js +1 -2
  56. package/dist/components/post-purchase.esm.js.map +1 -1
  57. package/dist/components/post-purchase.js +1 -2
  58. package/dist/components/post-purchase.js.map +1 -1
  59. package/dist/components/redeem-transaction.d.ts +3 -5
  60. package/dist/components/redeem-transaction.esm.js +5 -5
  61. package/dist/components/redeem-transaction.esm.js.map +1 -1
  62. package/dist/components/redeem-transaction.js +5 -5
  63. package/dist/components/redeem-transaction.js.map +1 -1
  64. package/dist/components/select-nonprofit.d.ts +6 -6
  65. package/dist/components/select-nonprofit.esm.js +5 -5
  66. package/dist/components/select-nonprofit.esm.js.map +1 -1
  67. package/dist/components/select-nonprofit.js +5 -5
  68. package/dist/components/select-nonprofit.js.map +1 -1
  69. package/dist/components/shopify.d.ts +5 -5
  70. package/dist/components/shopify.esm.js +1 -1
  71. package/dist/components/shopify.js +1 -1
  72. package/dist/index.d.ts +11 -11
  73. package/dist/index.esm.js +1 -1
  74. package/dist/index.js +1 -1
  75. package/dist/integrations/beam.esm.js +1 -1
  76. package/dist/integrations/beam.js +1 -1
  77. package/dist/integrations/cart.d.ts +3 -3
  78. package/dist/integrations/cart.esm.js +1 -1
  79. package/dist/integrations/cart.js +1 -1
  80. package/dist/integrations/index.d.ts +9 -9
  81. package/dist/integrations/index.esm.js +1 -1
  82. package/dist/integrations/index.js +1 -1
  83. package/dist/integrations/logs.d.ts +2 -2
  84. package/dist/integrations/logs.esm.js +1 -1
  85. package/dist/integrations/logs.js +1 -1
  86. package/dist/integrations/shopify.d.ts +4 -4
  87. package/dist/integrations/shopify.esm.js +1 -1
  88. package/dist/integrations/shopify.js +1 -1
  89. package/dist/integrations/statsig.esm.js +9 -9
  90. package/dist/integrations/statsig.esm.js.map +1 -1
  91. package/dist/integrations/statsig.js +9 -9
  92. package/dist/integrations/statsig.js.map +1 -1
  93. package/dist/integrations/utils.d.ts +3 -3
  94. package/dist/react/community-impact.esm.js +1 -1
  95. package/dist/react/community-impact.js +1 -1
  96. package/dist/react/cumulative-impact.esm.js +1 -1
  97. package/dist/react/cumulative-impact.js +1 -1
  98. package/dist/react/impact-overview.esm.js +1 -1
  99. package/dist/react/impact-overview.js +1 -1
  100. package/dist/react/index.d.ts +3 -3
  101. package/dist/react/index.esm.js +1 -1
  102. package/dist/react/index.js +1 -1
  103. package/dist/react/post-purchase.d.ts +2 -2
  104. package/dist/react/post-purchase.esm.js +1 -1
  105. package/dist/react/post-purchase.js +1 -1
  106. package/dist/react/redeem-transaction.d.ts +3 -3
  107. package/dist/react/redeem-transaction.esm.js +1 -1
  108. package/dist/react/redeem-transaction.js +1 -1
  109. package/dist/react/select-nonprofit.d.ts +3 -3
  110. package/dist/react/select-nonprofit.esm.js +1 -1
  111. package/dist/react/select-nonprofit.js +1 -1
  112. package/dist/utils/events.d.ts +3 -3
  113. package/dist/utils/index.d.ts +3 -3
  114. package/package.json +1 -1
  115. package/dist/chunks/_share-dialog-dependencies-JkqAjyWn.esm.js.map +0 -1
  116. package/dist/chunks/_share-dialog-dependencies-mxkp5-2m.esm.js.map +0 -1
  117. package/dist/chunks/index-Ex-M28eQ.esm.js +0 -2
  118. package/dist/chunks/index-Ex-M28eQ.esm.js.map +0 -1
  119. package/dist/chunks/index-QVOgLnoJ.esm.js +0 -2
  120. package/dist/chunks/index-QVOgLnoJ.esm.js.map +0 -1
  121. package/dist/chunks/index-R8Ga2jzl.esm.js +0 -2
  122. package/dist/chunks/index-R8Ga2jzl.esm.js.map +0 -1
  123. package/dist/chunks/index-XDPjy3-K.esm.js +0 -2
  124. package/dist/chunks/index-XDPjy3-K.esm.js.map +0 -1
  125. package/dist/chunks/index-nLDGmOkp.esm.js +0 -2
  126. package/dist/chunks/index-nLDGmOkp.esm.js.map +0 -1
  127. package/dist/chunks/index-rvzEx3Qj.esm.js +0 -2
  128. package/dist/chunks/index-rvzEx3Qj.esm.js.map +0 -1
  129. package/dist/chunks/routes-2eYzHPEh.esm.js +0 -2
  130. package/dist/chunks/routes-dMIUHq8Y.esm.js +0 -2
package/README.md CHANGED
@@ -32,6 +32,7 @@ Beam takes care of all the nonprofit management and compliance, impact tracking,
32
32
  - [Customizing inner widgets](#customizing-inner-widgets)
33
33
  - [Integrations](#integrations)
34
34
  - [Cart Integration](#cart-integration)
35
+ - [Shopify](#shopify)
35
36
  - [Utils](#utils)
36
37
  - [Integrations](#integrations-1)
37
38
  - [Statsig A/B Testing](#statsig-ab-testing)
@@ -61,13 +62,13 @@ Include the script for the widget you want to use at the top of the page:
61
62
  <script
62
63
  type="module"
63
64
  crossorigin
64
- src="https://production-beam-widgets.beamimpact.com/web-sdk/v1.29.0/dist/components/community-impact.js"
65
+ src="https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/components/community-impact.js"
65
66
  ></script>
66
67
  ```
67
68
 
68
69
  > **Versions**
69
70
  >
70
- > Replace `v1.29.0` with the [latest version available on NPM](https://www.npmjs.com/package/@beamimpact/web-sdk?activeTab=versions)
71
+ > Replace `v1.36.1` with the [latest version available on NPM](https://www.npmjs.com/package/@beamimpact/web-sdk?activeTab=versions)
71
72
 
72
73
  - `type="module"` is required to parse the bundle correctly
73
74
  - This script will register the Beam custom element so it can be used anywhere in the page
@@ -96,6 +97,8 @@ Beam web components are custom elements, so they can be used in HTML:
96
97
  <beam-impact-overview chainId="1000"></beam-impact-overview>
97
98
  ```
98
99
 
100
+ Because they are standard HTML elements, Beam widgets can have attributes like `class`, `style`, and `data-attributes`.
101
+
99
102
  Components can also be created using Javascript:
100
103
 
101
104
  ```js
@@ -163,26 +166,49 @@ console logs.
163
166
 
164
167
  ## Widget Options
165
168
 
169
+ Required props for all widgets:
170
+
171
+ - `apiKey` - Beam API Key
172
+
173
+ Optional props:
174
+
175
+ - `baseUrl` - (provided by Beam) - URL for a dev or staging API
176
+ - `lang` - `en`, `fr`, etc. Language code for a Beam-supported translation target
177
+
166
178
  ### beam-community impact
167
179
 
180
+ Shows impact progress cards for each nonprofit supported by a brand, for brand impact pages, etc.
181
+
168
182
  ```html
169
183
  <beam-community-impact apiKey="abc123" chainId="1" cardStyle="image | icon"></beam-community-impact>
170
184
  ```
171
185
 
186
+ - `chainId` = Beam customer ID
187
+ - `cardStyle` = `image` or `icon` - visual style to use for impact cards
188
+
172
189
  ### beam-cumulative-impact
173
190
 
191
+ Shows total impact in terms of nonprofit funding goals - e.g., "9,000 lbs of ocean trash removed"
192
+
174
193
  ```html
175
- <beam-cumulative-impact apiKey="abc123" chainId="1" storeId="1"></beam-cumulative-impact>
194
+ <beam-cumulative-impact apiKey="abc123" chainId="1"></beam-cumulative-impact>
176
195
  ```
177
196
 
197
+ - `chainId` = Beam customer ID
198
+
178
199
  ### beam-select-nonprofit
179
200
 
201
+ Widget that integrates into a cart to allow customers to support a nonprofit as they check out.
202
+
180
203
  ```html
181
- <beam-select-nonprofit apiKey="abc-123" chainId="1" storeId="1" countryCode="US" postalCode="11111" class="custom">
182
- Select a nonprofit
183
- </beam-select-nonprofit>
204
+ <beam-select-nonprofit apiKey="abc-123" storeId="1"> Select a nonprofit </beam-select-nonprofit>
184
205
  ```
185
206
 
207
+ - `storeId` = Beam ID for site, i.e., EU or US online store (optional) - used to show relevant nonprofits to customers
208
+ - `countryCode` & `postalCode` = If `storeId` is not provided, location information can be provided instead (optional)
209
+ - `cart` = Usually set automatically by the cart integration (see below), the cart property allows customizing the
210
+ nonprofits shown based on the items in the cart
211
+
186
212
  #### Events
187
213
 
188
214
  ```js
@@ -198,7 +224,7 @@ A wrapper component that registers transactions and renders either the `beam-imp
198
224
  `beam-redeem-transaction` widget, depending on if the user made a selection before purchase or not.
199
225
 
200
226
  ```html
201
- <script src="https://production-beam-widgets.beamimpact.com/web-sdk/v1.29.0/dist/components/post-purchase.js"></script>
227
+ <script src="https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/components/post-purchase.js"></script>
202
228
 
203
229
  <beam-post-purchase apiKey="abc123"></beam-post-purchase>
204
230
  ```
@@ -209,6 +235,8 @@ const widget = document.createElement("beam-post-purchase");
209
235
  // Config values:
210
236
  widget.apiKey = "abc123"; // Required
211
237
  widget.storeId = 100; // Beam Store ID
238
+ widget.countryCode = "GB"; // 2-letter country code for order
239
+ widget.postalCode = "11111"; // String - postalCode in country-specific format
212
240
  widget.orderId = String(10101); // partner provides ID
213
241
  widget.email = "test@beamimpact.com"; // customer email
214
242
  widget.cartTotal = 100.01; // Cart total before tax
@@ -247,7 +275,7 @@ Use `beam-post-purchase::part(impact-overview)` or `beam-post-purchase::part(red
247
275
  Integrating Beam with your cart allows for customizing the available nonprofits based on the items in the cart.
248
276
 
249
277
  ```ts
250
- import { updateCart } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.29.0/dist/integrations/cart.js";
278
+ import { updateCart } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/integrations/cart.js";
251
279
 
252
280
  // on cart change
253
281
  const cart = {
@@ -273,6 +301,49 @@ const beamConfig = {
273
301
  await updateCart(beamConfig, cart);
274
302
  ```
275
303
 
304
+ ### Shopify
305
+
306
+ The `registerCartIntegration()` function integrates the Beam Nonprofit Select widget with the Shopify cart, which
307
+ allows Beam metadata for the nonprofitId and selectionId to be added to the order as the customer goes through the
308
+ checkout flow, and to track the cart token and cart value for the Beam ROI calculation.
309
+
310
+ **Add event tracking script to main layout:**
311
+
312
+ ```html
313
+ <script type="module" async crossorigin>
314
+ import { registerCartIntegration } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
315
+
316
+ registerCartIntegration({
317
+ apiKey: "abc123",
318
+ storeId: 100,
319
+ chainId: 10,
320
+ });
321
+ </script>
322
+ ```
323
+
324
+ Post-purchase script:
325
+
326
+ ```ts
327
+ import { showOrderPageWidgets } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
328
+
329
+ await showBeamOrderPageWidgets({
330
+ apiKey: beam.apiKey,
331
+ chainId: beam.chainId,
332
+ storeId: beam.storeId,
333
+ orderId, // From Liquid
334
+ email, // From Liquid
335
+ cartTotal, // From Liquid
336
+ cart, // Cart line items
337
+ currencyCode, // From Liquid
338
+ countryCode, // From Liquid
339
+ postalCode, // From Liquid
340
+ parentSelector: ".step__sections", // CSS selector
341
+ lang: "en", // From Liquid
342
+ baseUrl: beam.baseUrl,
343
+ debug: false,
344
+ });
345
+ ```
346
+
276
347
  ### Utils
277
348
 
278
349
  Several utilities are exposed which making integrating with existing applications easier.
@@ -286,7 +357,7 @@ import {
286
357
  waitForElement,
287
358
  errors,
288
359
  events,
289
- } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.29.0/dist/integrations/utils.js";
360
+ } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/integrations/utils.js";
290
361
 
291
362
  try {
292
363
  const parentElement = await waitForElement("#my-selector", { timeout: 1000 });
@@ -1,2 +1,2 @@
1
- import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-dMIUHq8Y.esm.js";import"./beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"./progress-bar-7gWYaGlq.esm.js";import"./localize-dXHrlK8g.esm.js";import"./is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.js";import"./responsive-LYEag6TI.esm.js";
2
- //# sourceMappingURL=_share-dialog-dependencies-JkqAjyWn.esm.js.map
1
+ import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-0acj_R0M.esm.js";import"./beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"./progress-bar-7gWYaGlq.esm.js";import"./localize-dXHrlK8g.esm.js";import"./is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.js";import"./responsive-LYEag6TI.esm.js";
2
+ //# sourceMappingURL=_share-dialog-dependencies--ymuf2iZ.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_share-dialog-dependencies--ymuf2iZ.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.esm.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-2eYzHPEh.esm.js";import"./beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"./progress-bar-7gWYaGlq.esm.js";import"./localize-BGPniqcI.esm.js";import"./is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.esm.js";import"./responsive-LYEag6TI.esm.js";
2
- //# sourceMappingURL=_share-dialog-dependencies-mxkp5-2m.esm.js.map
1
+ import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.esm.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-dou9TIdY.esm.js";import"./beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"./progress-bar-7gWYaGlq.esm.js";import"./localize-BGPniqcI.esm.js";import"./is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.esm.js";import"./responsive-LYEag6TI.esm.js";
2
+ //# sourceMappingURL=_share-dialog-dependencies-n9b_OCM7.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_share-dialog-dependencies-n9b_OCM7.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { p as paths } from './openapi-spec-scRfHArN.esm.js';
1
+ import { p as paths } from './openapi-spec-tJkr2i9K.esm.js';
2
2
 
3
3
  type TCartApi = paths["/chain/findEligibleNonprofitsForCart"]["post"]["requestBody"]["content"]["application/json"]["cart"];
4
4
  type TCart = TCartApi & {
@@ -1,4 +1,4 @@
1
- import { a as TCartApi } from './cart-contents-22-v_s94.esm.js';
1
+ import { a as TCartApi } from './cart-contents-tEvcY9ip.esm.js';
2
2
  import { c as TId } from './types-7kSi85Gv.esm.js';
3
3
 
4
4
  type NetworkEventDetail = {
@@ -0,0 +1,2 @@
1
+ import{x as e}from"./update-cart-ehKAwAKe.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
+ //# sourceMappingURL=index--jVeJo2S.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index--jVeJo2S.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { T as TBeamOrderPageParams, a as addBeamAttributesToCart, g as getCurrentCart, r as registerCartIntegration, s as showBeamOrderPageWidgets, t as trackCart } from './order-page-scELdENh.esm.js';
1
+ import { T as TBeamOrderPageParams, a as addBeamAttributesToCart, g as getCurrentCart, r as registerCartIntegration, s as showBeamOrderPageWidgets, t as trackCart } from './order-page-cFAaDNWE.esm.js';
2
2
 
3
3
  declare const index_TBeamOrderPageParams: typeof TBeamOrderPageParams;
4
4
  declare const index_addBeamAttributesToCart: typeof addBeamAttributesToCart;
@@ -0,0 +1,2 @@
1
+ import{h as e,C as r,A as t,s as a,N as o}from"./order-page-TnGjpqgX.esm.js";var s=Object.freeze({__proto__:null,addBeamAttributesToCart:e,getCurrentCart:r,registerCartIntegration:t,showBeamOrderPageWidgets:a,trackCart:o});export{s as i};
2
+ //# sourceMappingURL=index-DgHFjjme.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DgHFjjme.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{i}from"./index-w9_XpjIg.esm.js";import{i as o}from"./index-DgHFjjme.esm.js";import{i as r}from"./index-Z1UUeVXR.esm.js";import{i as e}from"./index-qyU4d_39.esm.js";import{i as m}from"./index-U4xez8rX.esm.js";var s=Object.freeze({__proto__:null,Cart:e,Logs:m,Session:r,Shopify:o,Utils:i});export{s as i};
2
+ //# sourceMappingURL=index-JNiGr3KS.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-JNiGr3KS.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{i}from"./index-uqEAgdEf.esm.js";import{i as o}from"./index-PRMh7OXf.esm.js";import{i as r}from"./index-9YcaEQju.esm.js";import{i as e}from"./index--jVeJo2S.esm.js";import{i as m}from"./index-j-NaeUKV.esm.js";var s=Object.freeze({__proto__:null,Cart:e,Logs:m,Session:r,Shopify:o,Utils:i});export{s as i};
2
+ //# sourceMappingURL=index-KSxb-LPg.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-KSxb-LPg.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { b as beamErrors } from './beam-errors-bKCZlkvr.esm.js';
2
- import { e as events } from './events-rt-wdsLM.esm.js';
2
+ import { e as events } from './events-PZnG_xac.esm.js';
3
3
  import { logger } from '../utils/logger.js';
4
4
  import { fetchProxy, initNetworkListeners, xhrProxy } from '../utils/network-listeners.js';
5
5
  import { createScopedLocalStorage } from '../utils/local-storage.js';
@@ -0,0 +1,2 @@
1
+ import{h as e,C as r,A as t,s as a,N as o}from"./order-page-WNM5eGtR.esm.js";var s=Object.freeze({__proto__:null,addBeamAttributesToCart:e,getCurrentCart:r,registerCartIntegration:t,showBeamOrderPageWidgets:a,trackCart:o});export{s as i};
2
+ //# sourceMappingURL=index-PRMh7OXf.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-PRMh7OXf.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { b as beamErrors } from './beam-errors-bKCZlkvr.esm.js';
2
- import { e as events } from './events-rt-wdsLM.esm.js';
2
+ import { e as events } from './events-PZnG_xac.esm.js';
3
3
  import { logger } from '../utils/logger.js';
4
4
  import { fetchProxy, initNetworkListeners, xhrProxy } from '../utils/network-listeners.js';
5
5
  import { createScopedLocalStorage } from '../utils/local-storage.js';
@@ -1,2 +1,2 @@
1
- import{a as i,d as n}from"./routes-dMIUHq8Y.esm.js";import{logger as d}from"../utils/logger.js";async function e(o,r){const{apiKey:a,baseUrl:s}=o;try{await n({baseUrl:s||i,headers:{authorization:`Api-Key ${a}`},requestBody:{...r}})}catch(t){d.error("Failed to send log",t)}}var l=Object.freeze({__proto__:null,sendLog:e});export{l as i,e as s};
2
- //# sourceMappingURL=index-olIrMP04.esm.js.map
1
+ import{a as i,e as n}from"./routes-0acj_R0M.esm.js";import{logger as d}from"../utils/logger.js";async function e(o,r){const{apiKey:a,baseUrl:s}=o;try{await n({baseUrl:s||i,headers:{authorization:`Api-Key ${a}`},requestBody:{...r}})}catch(t){d.error("Failed to send log",t)}}var l=Object.freeze({__proto__:null,sendLog:e});export{l as i,e as s};
2
+ //# sourceMappingURL=index-U4xez8rX.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-olIrMP04.esm.js","sources":["../../src/integrations/logs/index.ts"],"sourcesContent":["import { postLogs } from \"../../api-sdk/v3/routes\";\nimport { paths } from \"../../api-sdk/v3/openapi-spec\";\nimport { logger } from \"../../utils/logger\";\nimport { DEFAULT_LOG_URL } from \"../../api-sdk/constants\";\n\ntype PostLogsReq = paths[\"/logs\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\n\ninterface SendLogConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport async function sendLog(config: SendLogConfig, payload: PostLogsReq): Promise<void> {\n const { apiKey, baseUrl } = config;\n try {\n await postLogs({\n baseUrl: baseUrl || DEFAULT_LOG_URL,\n headers: {\n authorization: `Api-Key ${apiKey}`,\n },\n requestBody: {\n ...payload,\n },\n });\n } catch (err) {\n logger.error(\"Failed to send log\", err);\n }\n}\n"],"names":["sendLog","config","payload","apiKey","baseUrl","postLogs","DEFAULT_LOG_URL","err","logger"],"mappings":"gGAYA,eAAsBA,EAAQC,EAAuBC,EAAqC,CACxF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,EAAIH,EAC5B,GAAI,CACF,MAAMI,EAAS,CACb,QAASD,GAAWE,EACpB,QAAS,CACP,cAAe,WAAWH,CAAM,EAClC,EACA,YAAa,CACX,GAAGD,CACL,CACF,CAAC,CACH,OAASK,EAAK,CACZC,EAAO,MAAM,qBAAsBD,CAAG,CACxC,CACF"}
1
+ {"version":3,"file":"index-U4xez8rX.esm.js","sources":["../../src/integrations/logs/index.ts"],"sourcesContent":["import { postLogs } from \"../../api-sdk/v3/routes\";\nimport { paths } from \"../../api-sdk/v3/openapi-spec\";\nimport { logger } from \"../../utils/logger\";\nimport { DEFAULT_LOG_URL } from \"../../api-sdk/constants\";\n\ntype PostLogsReq = paths[\"/logs\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\n\ninterface SendLogConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport async function sendLog(config: SendLogConfig, payload: PostLogsReq): Promise<void> {\n const { apiKey, baseUrl } = config;\n try {\n await postLogs({\n baseUrl: baseUrl || DEFAULT_LOG_URL,\n headers: {\n authorization: `Api-Key ${apiKey}`,\n },\n requestBody: {\n ...payload,\n },\n });\n } catch (err) {\n logger.error(\"Failed to send log\", err);\n }\n}\n"],"names":["sendLog","config","payload","apiKey","baseUrl","postLogs","DEFAULT_LOG_URL","err","logger"],"mappings":"gGAYA,eAAsBA,EAAQC,EAAuBC,EAAqC,CACxF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,EAAIH,EAC5B,GAAI,CACF,MAAMI,EAAS,CACb,QAASD,GAAWE,EACpB,QAAS,CACP,cAAe,WAAWH,CAAM,EAClC,EACA,YAAa,CACX,GAAGD,CACL,CACF,CAAC,CACH,OAASK,EAAK,CACZC,EAAO,MAAM,qBAAsBD,CAAG,CACxC,CACF"}
@@ -1,4 +1,4 @@
1
- import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-lCgGJZvM.esm.js';
1
+ import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-m3NdnSx2.esm.js';
2
2
 
3
3
  declare const index_BeamCartAPIConfig: typeof BeamCartAPIConfig;
4
4
  declare const index_BeamCartValues: typeof BeamCartValues;
@@ -1,2 +1,2 @@
1
- import{a as i,d as n}from"./routes-2eYzHPEh.esm.js";import{logger as d}from"../utils/logger.esm.js";async function e(o,r){const{apiKey:a,baseUrl:s}=o;try{await n({baseUrl:s||i,headers:{authorization:`Api-Key ${a}`},requestBody:{...r}})}catch(t){d.error("Failed to send log",t)}}var l=Object.freeze({__proto__:null,sendLog:e});export{l as i,e as s};
2
- //# sourceMappingURL=index-e13I7Ozo.esm.js.map
1
+ import{a as i,e as n}from"./routes-dou9TIdY.esm.js";import{logger as d}from"../utils/logger.esm.js";async function e(o,r){const{apiKey:a,baseUrl:s}=o;try{await n({baseUrl:s||i,headers:{authorization:`Api-Key ${a}`},requestBody:{...r}})}catch(t){d.error("Failed to send log",t)}}var l=Object.freeze({__proto__:null,sendLog:e});export{l as i,e as s};
2
+ //# sourceMappingURL=index-j-NaeUKV.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-e13I7Ozo.esm.js","sources":["../../src/integrations/logs/index.ts"],"sourcesContent":["import { postLogs } from \"../../api-sdk/v3/routes\";\nimport { paths } from \"../../api-sdk/v3/openapi-spec\";\nimport { logger } from \"../../utils/logger\";\nimport { DEFAULT_LOG_URL } from \"../../api-sdk/constants\";\n\ntype PostLogsReq = paths[\"/logs\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\n\ninterface SendLogConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport async function sendLog(config: SendLogConfig, payload: PostLogsReq): Promise<void> {\n const { apiKey, baseUrl } = config;\n try {\n await postLogs({\n baseUrl: baseUrl || DEFAULT_LOG_URL,\n headers: {\n authorization: `Api-Key ${apiKey}`,\n },\n requestBody: {\n ...payload,\n },\n });\n } catch (err) {\n logger.error(\"Failed to send log\", err);\n }\n}\n"],"names":["sendLog","config","payload","apiKey","baseUrl","postLogs","DEFAULT_LOG_URL","err","logger"],"mappings":"oGAYA,eAAsBA,EAAQC,EAAuBC,EAAqC,CACxF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,EAAIH,EAC5B,GAAI,CACF,MAAMI,EAAS,CACb,QAASD,GAAWE,EACpB,QAAS,CACP,cAAe,WAAWH,CAAM,EAClC,EACA,YAAa,CACX,GAAGD,CACL,CACF,CAAC,CACH,OAASK,EAAK,CACZC,EAAO,MAAM,qBAAsBD,CAAG,CACxC,CACF"}
1
+ {"version":3,"file":"index-j-NaeUKV.esm.js","sources":["../../src/integrations/logs/index.ts"],"sourcesContent":["import { postLogs } from \"../../api-sdk/v3/routes\";\nimport { paths } from \"../../api-sdk/v3/openapi-spec\";\nimport { logger } from \"../../utils/logger\";\nimport { DEFAULT_LOG_URL } from \"../../api-sdk/constants\";\n\ntype PostLogsReq = paths[\"/logs\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\n\ninterface SendLogConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport async function sendLog(config: SendLogConfig, payload: PostLogsReq): Promise<void> {\n const { apiKey, baseUrl } = config;\n try {\n await postLogs({\n baseUrl: baseUrl || DEFAULT_LOG_URL,\n headers: {\n authorization: `Api-Key ${apiKey}`,\n },\n requestBody: {\n ...payload,\n },\n });\n } catch (err) {\n logger.error(\"Failed to send log\", err);\n }\n}\n"],"names":["sendLog","config","payload","apiKey","baseUrl","postLogs","DEFAULT_LOG_URL","err","logger"],"mappings":"oGAYA,eAAsBA,EAAQC,EAAuBC,EAAqC,CACxF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,EAAIH,EAC5B,GAAI,CACF,MAAMI,EAAS,CACb,QAASD,GAAWE,EACpB,QAAS,CACP,cAAe,WAAWH,CAAM,EAClC,EACA,YAAa,CACX,GAAGD,CACL,CACF,CAAC,CACH,OAASK,EAAK,CACZC,EAAO,MAAM,qBAAsBD,CAAG,CACxC,CACF"}
@@ -1,4 +1,4 @@
1
- import { p as paths } from './openapi-spec-scRfHArN.esm.js';
1
+ import { p as paths } from './openapi-spec-tJkr2i9K.esm.js';
2
2
 
3
3
  type PostLogsReq = paths["/logs"]["post"]["requestBody"]["content"]["application/json"];
4
4
  interface SendLogConfig {
@@ -0,0 +1,2 @@
1
+ import{x as e}from"./update-cart-UXOGYRmF.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
+ //# sourceMappingURL=index-qyU4d_39.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-qyU4d_39.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,8 +1,8 @@
1
- import { i as index$5 } from './index-IOQZUYT9.esm.js';
2
- import { i as index$4 } from './index-W4Y5lVSA.esm.js';
1
+ import { i as index$5 } from './index-PL4iasT1.esm.js';
2
+ import { i as index$4 } from './index-5-EnaNnJ.esm.js';
3
3
  import { i as index$3 } from './index-EGiUuWe-.esm.js';
4
- import { i as index$1 } from './index-qerf6TiH.esm.js';
5
- import { i as index$2 } from './index-iTqsULiK.esm.js';
4
+ import { i as index$1 } from './index-hbzssC4x.esm.js';
5
+ import { i as index$2 } from './index-nJEBkWPL.esm.js';
6
6
 
7
7
  /**
8
8
  * This file is used to provide type definitions
@@ -638,7 +638,7 @@ interface paths {
638
638
  countryCode?: string;
639
639
  postalCode?: string;
640
640
  }>) & {
641
- chainId: number;
641
+ chainId?: number;
642
642
  storeId?: number;
643
643
  postalCode?: string;
644
644
  countryCode?: string;
@@ -3601,6 +3601,10 @@ interface paths {
3601
3601
  causeHighlightsTitle?: string;
3602
3602
  /** @description Title for the themes section of the homepage. */
3603
3603
  themeHighlightsTitle?: string;
3604
+ /** @description Title for the nonprofits section of the homepage. */
3605
+ nonprofitHighlightsTitle?: string;
3606
+ /** @description Title for the category section of the homepage. */
3607
+ categoryHighlightsTitle?: string;
3604
3608
  /** @description The list of themes to highlight. */
3605
3609
  themes?: {
3606
3610
  /** @description The ID of the theme */
@@ -3610,6 +3614,51 @@ interface paths {
3610
3614
  /** @description The link to the preview image */
3611
3615
  previewImage: string;
3612
3616
  }[];
3617
+ /** @description The nonprofits the cause relates to */
3618
+ nonprofits?: {
3619
+ /**
3620
+ * @description The ID of the nonprofit
3621
+ * @example 1001
3622
+ */
3623
+ id?: number;
3624
+ /**
3625
+ * @description Name of the nonprofit
3626
+ * @example Arbor Day Foundation
3627
+ */
3628
+ name?: string;
3629
+ /**
3630
+ * @description Short summary of the nonprofit
3631
+ * @example Protect our planet's most critcal ecosystems
3632
+ */
3633
+ summary?: string;
3634
+ /**
3635
+ * @description The image for the nonprofit
3636
+ * @example https://cdn.beamimpact.com/logos/beam.png
3637
+ */
3638
+ image?: string | null;
3639
+ /**
3640
+ * @description The number of brands funding this nonprofit. Displayed as "10 Brands Funding". Note that this should reflect the number of brands where that nonprofit is part of a store, not just isActive — if this intros too much complexity we may need to add another bool to rep what isActive is representing right now. Currently isActive basically means shouldShow on community impact which is different than isActive. Probably makes sense to clean up this logic inconsistency
3641
+ * @example 10
3642
+ */
3643
+ brandsFunding?: number;
3644
+ /** @description Determines whether or not user has saved this chain into favorites */
3645
+ saved?: boolean;
3646
+ }[];
3647
+ /** @description The list of categories to highlight. */
3648
+ categories?: {
3649
+ /**
3650
+ * @description UUID
3651
+ * @example bqkdk-0393b-jbkdd-02difj
3652
+ */
3653
+ id: string;
3654
+ /**
3655
+ * @description The ID of the category
3656
+ * @example 1001
3657
+ */
3658
+ categoryId: number;
3659
+ /** @description The name of the category */
3660
+ name: string;
3661
+ }[];
3613
3662
  };
3614
3663
  };
3615
3664
  };
@@ -3803,6 +3852,12 @@ interface paths {
3803
3852
  }[];
3804
3853
  /** @description Determines whether or not user has saved this chain into favorites */
3805
3854
  saved: boolean;
3855
+ /** @description The nonprofits website */
3856
+ website?: string | null;
3857
+ /** @description A link to the nonprofits instagram */
3858
+ socialLink?: string | null;
3859
+ /** @description Other ways the nonprofit can be helped beyond beams impact */
3860
+ howToHelpBeyondBeam?: string | null;
3806
3861
  };
3807
3862
  };
3808
3863
  };
@@ -1,2 +1,2 @@
1
- import{i as v}from"./lodash-P8OIs-at.esm.js";import{d as L,f as T,c as A}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.js";import{createScopedLocalStorage as C}from"../utils/local-storage.js";import{getCookieValue as u}from"../utils/cookies.js";import{memoizeLast as O}from"../utils/memoize-last.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as f}from"./update-cart-rzsMaDu6.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-dMIUHq8Y.esm.js";import{waitForElement as J}from"../utils/wait-for-element.js";import{B as x}from"./beam-errors-AMvTvR1C.esm.js";const g=window.Shopify?.routes?.root||"/";let _=!1;const K="cart";async function R(e){if(_)return!1;const c=await w(e);await f(e,c.cart),U(),window.addEventListener(L.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,a=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(a);if(!o.test(m.pathname))return;const r=await w(e);if(!r.changed)return;const p={schema:r.cart.schema,content:{items:r.cart.content.items}};window.dispatchEvent(new T(p)),await f(e,r.cart)});let s,d;return window.addEventListener(A.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:a}=n.detail,m=await u(K),r=await u(j),{chainId:p,storeId:l}=e;s===o&&d===a||(await E({selectedNonprofitId:o,selectionId:a,beamCartId:r,cartId:m,chainId:p,storeId:l}),d=a,s=o)}),_=!0,!0}async function w(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(g+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(r=>r.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:r,final_line_price:p})=>({remoteProductIdentifier:r,localAmount:p}))}};let a=!1;const m=C(e).getItemJson("cart");return v(o,m)||(a=!0),{changed:a,cart:o}}const D=f,E=O(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(g+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(a){console.error(a)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:a,cartTotal:m,cart:r,discountCodes:p,currencyCode:l="USD",domain:b,lang:N="en",debug:S=!1}){const h=document.querySelector(e)||await J(e);if(!h)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const I=await u("cart");if(I){const y=C({apiKey:c}),B=y.getItemJson("cart")||{};y.setItemJson("cart",{...B,cartId:I})}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=a,t.cartTotal=m,t.cart=r,t.discountCodes=p,t.currencyCode=l,t.domain=b,t.lang=N,t.debug=S,h.appendChild(t)}export{R as A,w as C,D as N,E as h,P as s};
2
- //# sourceMappingURL=order-page-Q9iJrRjP.esm.js.map
1
+ import{i as v}from"./lodash-P8OIs-at.esm.js";import{d as L,f as T,c as A}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.js";import{createScopedLocalStorage as C}from"../utils/local-storage.js";import{getCookieValue as u}from"../utils/cookies.js";import{memoizeLast as O}from"../utils/memoize-last.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as f}from"./update-cart-UXOGYRmF.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-0acj_R0M.esm.js";import{waitForElement as J}from"../utils/wait-for-element.js";import{B as x}from"./beam-errors-AMvTvR1C.esm.js";const g=window.Shopify?.routes?.root||"/";let _=!1;const K="cart";async function R(e){if(_)return!1;const c=await w(e);await f(e,c.cart),U(),window.addEventListener(L.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,a=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(a);if(!o.test(m.pathname))return;const r=await w(e);if(!r.changed)return;const p={schema:r.cart.schema,content:{items:r.cart.content.items}};window.dispatchEvent(new T(p)),await f(e,r.cart)});let s,d;return window.addEventListener(A.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:a}=n.detail,m=await u(K),r=await u(j),{chainId:p,storeId:l}=e;s===o&&d===a||(await E({selectedNonprofitId:o,selectionId:a,beamCartId:r,cartId:m,chainId:p,storeId:l}),d=a,s=o)}),_=!0,!0}async function w(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(g+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(r=>r.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:r,final_line_price:p})=>({remoteProductIdentifier:r,localAmount:p}))}};let a=!1;const m=C(e).getItemJson("cart");return v(o,m)||(a=!0),{changed:a,cart:o}}const D=f,E=O(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(g+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(a){console.error(a)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:a,cartTotal:m,cart:r,discountCodes:p,currencyCode:l="USD",domain:b,lang:N="en",debug:S=!1}){const h=document.querySelector(e)||await J(e);if(!h)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const I=await u("cart");if(I){const y=C({apiKey:c}),B=y.getItemJson("cart")||{};y.setItemJson("cart",{...B,cartId:I})}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=a,t.cartTotal=m,t.cart=r,t.discountCodes=p,t.currencyCode=l,t.domain=b,t.lang=N,t.debug=S,h.appendChild(t)}export{R as A,w as C,D as N,E as h,P as s};
2
+ //# sourceMappingURL=order-page-TnGjpqgX.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-page-Q9iJrRjP.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 }) => {\n return { remoteProductIdentifier: sku, localAmount: final_line_price };\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","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-TnGjpqgX.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 }) => {\n return { remoteProductIdentifier: sku, localAmount: final_line_price };\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","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 v}from"./lodash-P8OIs-at.esm.js";import{d as L,f as T,c as A}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as C}from"../utils/local-storage.esm.js";import{getCookieValue as u}from"../utils/cookies.esm.js";import{memoizeLast as O}from"../utils/memoize-last.esm.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as f}from"./update-cart-1CVVu5Xc.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-2eYzHPEh.esm.js";import{waitForElement as J}from"../utils/wait-for-element.esm.js";import{B as x}from"./beam-errors-AMvTvR1C.esm.js";const g=window.Shopify?.routes?.root||"/";let _=!1;const K="cart";async function R(e){if(_)return!1;const c=await w(e);await f(e,c.cart),U(),window.addEventListener(L.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,a=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(a);if(!o.test(m.pathname))return;const r=await w(e);if(!r.changed)return;const p={schema:r.cart.schema,content:{items:r.cart.content.items}};window.dispatchEvent(new T(p)),await f(e,r.cart)});let s,d;return window.addEventListener(A.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:a}=n.detail,m=await u(K),r=await u(j),{chainId:p,storeId:l}=e;s===o&&d===a||(await E({selectedNonprofitId:o,selectionId:a,beamCartId:r,cartId:m,chainId:p,storeId:l}),d=a,s=o)}),_=!0,!0}async function w(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(g+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(r=>r.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:r,final_line_price:p})=>({remoteProductIdentifier:r,localAmount:p}))}};let a=!1;const m=C(e).getItemJson("cart");return v(o,m)||(a=!0),{changed:a,cart:o}}const D=f,E=O(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(g+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(a){console.error(a)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:a,cartTotal:m,cart:r,discountCodes:p,currencyCode:l="USD",domain:b,lang:N="en",debug:S=!1}){const h=document.querySelector(e)||await J(e);if(!h)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const I=await u("cart");if(I){const y=C({apiKey:c}),B=y.getItemJson("cart")||{};y.setItemJson("cart",{...B,cartId:I})}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=a,t.cartTotal=m,t.cart=r,t.discountCodes=p,t.currencyCode=l,t.domain=b,t.lang=N,t.debug=S,h.appendChild(t)}export{R as A,w as C,D as N,E as h,P as s};
2
- //# sourceMappingURL=order-page-ua17ZUZi.esm.js.map
1
+ import{i as v}from"./lodash-P8OIs-at.esm.js";import{d as L,f as T,c as A}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as C}from"../utils/local-storage.esm.js";import{getCookieValue as u}from"../utils/cookies.esm.js";import{memoizeLast as O}from"../utils/memoize-last.esm.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as f}from"./update-cart-ehKAwAKe.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-dou9TIdY.esm.js";import{waitForElement as J}from"../utils/wait-for-element.esm.js";import{B as x}from"./beam-errors-AMvTvR1C.esm.js";const g=window.Shopify?.routes?.root||"/";let _=!1;const K="cart";async function R(e){if(_)return!1;const c=await w(e);await f(e,c.cart),U(),window.addEventListener(L.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,a=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(a);if(!o.test(m.pathname))return;const r=await w(e);if(!r.changed)return;const p={schema:r.cart.schema,content:{items:r.cart.content.items}};window.dispatchEvent(new T(p)),await f(e,r.cart)});let s,d;return window.addEventListener(A.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:a}=n.detail,m=await u(K),r=await u(j),{chainId:p,storeId:l}=e;s===o&&d===a||(await E({selectedNonprofitId:o,selectionId:a,beamCartId:r,cartId:m,chainId:p,storeId:l}),d=a,s=o)}),_=!0,!0}async function w(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(g+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(r=>r.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:r,final_line_price:p})=>({remoteProductIdentifier:r,localAmount:p}))}};let a=!1;const m=C(e).getItemJson("cart");return v(o,m)||(a=!0),{changed:a,cart:o}}const D=f,E=O(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(g+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(a){console.error(a)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:a,cartTotal:m,cart:r,discountCodes:p,currencyCode:l="USD",domain:b,lang:N="en",debug:S=!1}){const h=document.querySelector(e)||await J(e);if(!h)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const I=await u("cart");if(I){const y=C({apiKey:c}),B=y.getItemJson("cart")||{};y.setItemJson("cart",{...B,cartId:I})}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=a,t.cartTotal=m,t.cart=r,t.discountCodes=p,t.currencyCode=l,t.domain=b,t.lang=N,t.debug=S,h.appendChild(t)}export{R as A,w as C,D as N,E as h,P as s};
2
+ //# sourceMappingURL=order-page-WNM5eGtR.esm.js.map