@beamimpact/web-sdk 1.35.0 → 1.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -9
- package/dist/chunks/{_share-dialog-dependencies--nCXrht1.esm.js → _share-dialog-dependencies-Sh_9ajqn.esm.js} +2 -2
- package/dist/chunks/_share-dialog-dependencies-Sh_9ajqn.esm.js.map +1 -0
- package/dist/chunks/{_share-dialog-dependencies-JnuxDcVY.esm.js → _share-dialog-dependencies-xo568n-h.esm.js} +2 -2
- package/dist/chunks/_share-dialog-dependencies-xo568n-h.esm.js.map +1 -0
- package/dist/chunks/{cart-contents-22-v_s94.esm.d.ts → cart-contents-tEvcY9ip.esm.d.ts} +1 -1
- package/dist/chunks/{events-rt-wdsLM.esm.d.ts → events-PZnG_xac.esm.d.ts} +1 -1
- package/dist/chunks/index--hSdkzxR.esm.js +2 -0
- package/dist/chunks/index--hSdkzxR.esm.js.map +1 -0
- package/dist/chunks/{index-Bz6dEI8C.esm.js → index--zKNaLmP.esm.js} +2 -2
- package/dist/chunks/{index-Bz6dEI8C.esm.js.map → index--zKNaLmP.esm.js.map} +1 -1
- package/dist/chunks/index-1yIQ8_af.esm.js +2 -0
- package/dist/chunks/index-1yIQ8_af.esm.js.map +1 -0
- package/dist/chunks/{index-iPDohPMx.esm.d.ts → index-5-EnaNnJ.esm.d.ts} +1 -1
- package/dist/chunks/index-FOIyVs4d.esm.js +2 -0
- package/dist/chunks/index-FOIyVs4d.esm.js.map +1 -0
- package/dist/chunks/{index-46wslZBu.esm.js → index-H8eCrtpq.esm.js} +2 -2
- package/dist/chunks/{index-46wslZBu.esm.js.map → index-H8eCrtpq.esm.js.map} +1 -1
- package/dist/chunks/{index-IOQZUYT9.esm.d.ts → index-PL4iasT1.esm.d.ts} +1 -1
- package/dist/chunks/{index-xERV1BQn.esm.d.ts → index-U2dW3lkm.esm.d.ts} +1 -1
- package/dist/chunks/index-XXbpivFV.esm.js +2 -0
- package/dist/chunks/index-XXbpivFV.esm.js.map +1 -0
- package/dist/chunks/index-aSHxjlvk.esm.js +2 -0
- package/dist/chunks/index-aSHxjlvk.esm.js.map +1 -0
- package/dist/chunks/{index-AMkIijwg.esm.d.ts → index-hbzssC4x.esm.d.ts} +1 -1
- package/dist/chunks/{index-iTqsULiK.esm.d.ts → index-nJEBkWPL.esm.d.ts} +1 -1
- package/dist/chunks/{index-m-fP6Gj8.esm.d.ts → index-rOz-i1aX.esm.d.ts} +4 -4
- package/dist/chunks/index-x02SNG40.esm.js +2 -0
- package/dist/chunks/index-x02SNG40.esm.js.map +1 -0
- package/dist/chunks/{openapi-spec-scRfHArN.esm.d.ts → openapi-spec-tJkr2i9K.esm.d.ts} +56 -1
- package/dist/chunks/{order-page-FTsKtTWj.esm.d.ts → order-page-cFAaDNWE.esm.d.ts} +6 -4
- package/dist/chunks/order-page-iki-LwqZ.esm.js +2 -0
- package/dist/chunks/{order-page-247E9hPD.esm.js.map → order-page-iki-LwqZ.esm.js.map} +1 -1
- package/dist/chunks/order-page-nw4ww0A4.esm.js +2 -0
- package/dist/chunks/{order-page-7VBIeXrp.esm.js.map → order-page-nw4ww0A4.esm.js.map} +1 -1
- package/dist/chunks/routes-oHbXmMIK.esm.js +2 -0
- package/dist/chunks/{routes-KzMkFmoc.esm.js.map → routes-oHbXmMIK.esm.js.map} +1 -1
- package/dist/chunks/routes-tF7SMdXL.esm.js +2 -0
- package/dist/chunks/{routes-zmj1xQav.esm.js.map → routes-tF7SMdXL.esm.js.map} +1 -1
- package/dist/chunks/update-cart-UgMNqKER.esm.js +2 -0
- package/dist/chunks/update-cart-UgMNqKER.esm.js.map +1 -0
- package/dist/chunks/{update-cart-DtpiRKny.esm.d.ts → update-cart-m3NdnSx2.esm.d.ts} +4 -2
- package/dist/chunks/update-cart-ylLlsQBX.esm.js +2 -0
- package/dist/chunks/update-cart-ylLlsQBX.esm.js.map +1 -0
- package/dist/components/community-impact.esm.js +1 -1
- package/dist/components/community-impact.js +1 -1
- package/dist/components/cumulative-impact.esm.js +1 -1
- package/dist/components/cumulative-impact.js +1 -1
- package/dist/components/impact-overview.esm.js +1 -1
- package/dist/components/impact-overview.js +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +3 -3
- package/dist/components/post-purchase.esm.js +1 -2
- package/dist/components/post-purchase.esm.js.map +1 -1
- package/dist/components/post-purchase.js +1 -2
- package/dist/components/post-purchase.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +3 -5
- package/dist/components/redeem-transaction.esm.js +5 -5
- package/dist/components/redeem-transaction.esm.js.map +1 -1
- package/dist/components/redeem-transaction.js +5 -5
- package/dist/components/redeem-transaction.js.map +1 -1
- package/dist/components/select-nonprofit.d.ts +4 -4
- package/dist/components/select-nonprofit.esm.js +1 -1
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +1 -1
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/shopify.d.ts +6 -6
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/index.d.ts +11 -11
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/beam.esm.js +1 -1
- package/dist/integrations/beam.js +1 -1
- package/dist/integrations/cart.d.ts +4 -3
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/index.d.ts +10 -10
- package/dist/integrations/index.esm.js +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/logs.d.ts +2 -2
- package/dist/integrations/logs.esm.js +1 -1
- package/dist/integrations/logs.js +1 -1
- package/dist/integrations/shopify.d.ts +5 -5
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.esm.js +1 -1
- package/dist/integrations/statsig.js +1 -1
- package/dist/integrations/utils.d.ts +3 -3
- package/dist/react/community-impact.esm.js +1 -1
- package/dist/react/community-impact.js +1 -1
- package/dist/react/cumulative-impact.esm.js +1 -1
- package/dist/react/cumulative-impact.js +1 -1
- package/dist/react/impact-overview.esm.js +1 -1
- package/dist/react/impact-overview.js +1 -1
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.d.ts +2 -2
- package/dist/react/post-purchase.esm.js +1 -1
- package/dist/react/post-purchase.js +1 -1
- package/dist/react/redeem-transaction.d.ts +3 -3
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.js +1 -1
- package/dist/react/select-nonprofit.d.ts +3 -3
- package/dist/react/select-nonprofit.esm.js +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/dist/utils/events.d.ts +3 -3
- package/dist/utils/index.d.ts +3 -3
- package/package.json +1 -1
- package/dist/chunks/_share-dialog-dependencies--nCXrht1.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-JnuxDcVY.esm.js.map +0 -1
- package/dist/chunks/index-Rd8mJjwe.esm.js +0 -2
- package/dist/chunks/index-Rd8mJjwe.esm.js.map +0 -1
- package/dist/chunks/index-W0iPV4vm.esm.js +0 -2
- package/dist/chunks/index-W0iPV4vm.esm.js.map +0 -1
- package/dist/chunks/index-Zk8iwKr5.esm.js +0 -2
- package/dist/chunks/index-Zk8iwKr5.esm.js.map +0 -1
- package/dist/chunks/index-eVAoZiya.esm.js +0 -2
- package/dist/chunks/index-eVAoZiya.esm.js.map +0 -1
- package/dist/chunks/index-iiDaaPdW.esm.js +0 -2
- package/dist/chunks/index-iiDaaPdW.esm.js.map +0 -1
- package/dist/chunks/index-jVPzg3uh.esm.js +0 -2
- package/dist/chunks/index-jVPzg3uh.esm.js.map +0 -1
- package/dist/chunks/order-page-247E9hPD.esm.js +0 -2
- package/dist/chunks/order-page-7VBIeXrp.esm.js +0 -2
- package/dist/chunks/routes-KzMkFmoc.esm.js +0 -2
- package/dist/chunks/routes-zmj1xQav.esm.js +0 -2
- package/dist/chunks/update-cart-lChG0pOq.esm.js +0 -2
- package/dist/chunks/update-cart-lChG0pOq.esm.js.map +0 -1
- package/dist/chunks/update-cart-zsVlorOS.esm.js +0 -2
- package/dist/chunks/update-cart-zsVlorOS.esm.js.map +0 -1
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.
|
|
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.
|
|
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,50 @@ 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"
|
|
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"
|
|
182
|
-
Select a nonprofit
|
|
183
|
-
</beam-select-nonprofit>
|
|
204
|
+
<beam-select-nonprofit apiKey="abc-123" chainId="1" storeId="1"> Select a nonprofit </beam-select-nonprofit>
|
|
184
205
|
```
|
|
185
206
|
|
|
207
|
+
- `chainId` = Beam customer ID
|
|
208
|
+
- `storeId` = Beam ID for site, i.e., EU or US online store (optional) - used to show relevant nonprofits to customers
|
|
209
|
+
- `countryCode` & `postalCode` = If `storeId` is not provided, location information can be provided instead (optional)
|
|
210
|
+
- `cart` = Usually set automatically by the cart integration (see below), the cart property allows customizing the
|
|
211
|
+
nonprofits shown based on the items in the cart
|
|
212
|
+
|
|
186
213
|
#### Events
|
|
187
214
|
|
|
188
215
|
```js
|
|
@@ -198,7 +225,7 @@ A wrapper component that registers transactions and renders either the `beam-imp
|
|
|
198
225
|
`beam-redeem-transaction` widget, depending on if the user made a selection before purchase or not.
|
|
199
226
|
|
|
200
227
|
```html
|
|
201
|
-
<script src="https://production-beam-widgets.beamimpact.com/web-sdk/v1.
|
|
228
|
+
<script src="https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/components/post-purchase.js"></script>
|
|
202
229
|
|
|
203
230
|
<beam-post-purchase apiKey="abc123"></beam-post-purchase>
|
|
204
231
|
```
|
|
@@ -209,6 +236,8 @@ const widget = document.createElement("beam-post-purchase");
|
|
|
209
236
|
// Config values:
|
|
210
237
|
widget.apiKey = "abc123"; // Required
|
|
211
238
|
widget.storeId = 100; // Beam Store ID
|
|
239
|
+
widget.countryCode = "GB"; // 2-letter country code for order
|
|
240
|
+
widget.postalCode = "11111"; // String - postalCode in country-specific format
|
|
212
241
|
widget.orderId = String(10101); // partner provides ID
|
|
213
242
|
widget.email = "test@beamimpact.com"; // customer email
|
|
214
243
|
widget.cartTotal = 100.01; // Cart total before tax
|
|
@@ -247,7 +276,7 @@ Use `beam-post-purchase::part(impact-overview)` or `beam-post-purchase::part(red
|
|
|
247
276
|
Integrating Beam with your cart allows for customizing the available nonprofits based on the items in the cart.
|
|
248
277
|
|
|
249
278
|
```ts
|
|
250
|
-
import { updateCart } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.
|
|
279
|
+
import { updateCart } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/integrations/cart.js";
|
|
251
280
|
|
|
252
281
|
// on cart change
|
|
253
282
|
const cart = {
|
|
@@ -273,6 +302,49 @@ const beamConfig = {
|
|
|
273
302
|
await updateCart(beamConfig, cart);
|
|
274
303
|
```
|
|
275
304
|
|
|
305
|
+
### Shopify
|
|
306
|
+
|
|
307
|
+
The `registerCartIntegration()` function integrates the Beam Nonprofit Select widget with the Shopify cart, which
|
|
308
|
+
allows Beam metadata for the nonprofitId and selectionId to be added to the order as the customer goes through the
|
|
309
|
+
checkout flow, and to track the cart token and cart value for the Beam ROI calculation.
|
|
310
|
+
|
|
311
|
+
**Add event tracking script to main layout:**
|
|
312
|
+
|
|
313
|
+
```html
|
|
314
|
+
<script type="module" async crossorigin>
|
|
315
|
+
import { registerCartIntegration } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
|
|
316
|
+
|
|
317
|
+
registerCartIntegration({
|
|
318
|
+
apiKey: "abc123",
|
|
319
|
+
storeId: 100,
|
|
320
|
+
chainId: 10,
|
|
321
|
+
});
|
|
322
|
+
</script>
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
Post-purchase script:
|
|
326
|
+
|
|
327
|
+
```ts
|
|
328
|
+
import { showOrderPageWidgets } from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.0/dist/integrations/shopify.esm.js";
|
|
329
|
+
|
|
330
|
+
await showBeamOrderPageWidgets({
|
|
331
|
+
apiKey: beam.apiKey,
|
|
332
|
+
chainId: beam.chainId,
|
|
333
|
+
storeId: beam.storeId,
|
|
334
|
+
orderId, // From Liquid
|
|
335
|
+
email, // From Liquid
|
|
336
|
+
cartTotal, // From Liquid
|
|
337
|
+
cart, // Cart line items
|
|
338
|
+
currencyCode, // From Liquid
|
|
339
|
+
countryCode, // From Liquid
|
|
340
|
+
postalCode, // From Liquid
|
|
341
|
+
parentSelector: ".step__sections", // CSS selector
|
|
342
|
+
lang: "en", // From Liquid
|
|
343
|
+
baseUrl: beam.baseUrl,
|
|
344
|
+
debug: false,
|
|
345
|
+
});
|
|
346
|
+
```
|
|
347
|
+
|
|
276
348
|
### Utils
|
|
277
349
|
|
|
278
350
|
Several utilities are exposed which making integrating with existing applications easier.
|
|
@@ -286,7 +358,7 @@ import {
|
|
|
286
358
|
waitForElement,
|
|
287
359
|
errors,
|
|
288
360
|
events,
|
|
289
|
-
} from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.
|
|
361
|
+
} from "https://production-beam-widgets.beamimpact.com/web-sdk/v1.36.1/dist/integrations/utils.js";
|
|
290
362
|
|
|
291
363
|
try {
|
|
292
364
|
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-
|
|
2
|
-
//# sourceMappingURL=_share-dialog-dependencies
|
|
1
|
+
import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-oHbXmMIK.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-Sh_9ajqn.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_share-dialog-dependencies-Sh_9ajqn.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-
|
|
2
|
-
//# sourceMappingURL=_share-dialog-dependencies-
|
|
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-tF7SMdXL.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-xo568n-h.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_share-dialog-dependencies-xo568n-h.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as paths } from './openapi-spec-
|
|
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 & {
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i}from"./index-w9_XpjIg.esm.js";import{i as o}from"./index-x02SNG40.esm.js";import{i as r}from"./index-Z1UUeVXR.esm.js";import{i as e}from"./index-aSHxjlvk.esm.js";import{i as m}from"./index-H8eCrtpq.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--hSdkzxR.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index--hSdkzxR.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as i,
|
|
2
|
-
//# sourceMappingURL=index
|
|
1
|
+
import{a as i,e as n}from"./routes-tF7SMdXL.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--zKNaLmP.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index
|
|
1
|
+
{"version":3,"file":"index--zKNaLmP.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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as e,C as r,A as t,s as a,N as o}from"./order-page-nw4ww0A4.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-1yIQ8_af.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-1yIQ8_af.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-
|
|
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{i}from"./index-FAF7tYU6.esm.js";import{i as o}from"./index-1yIQ8_af.esm.js";import{i as r}from"./index-9YcaEQju.esm.js";import{i as e}from"./index-XXbpivFV.esm.js";import{i as m}from"./index--zKNaLmP.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-FOIyVs4d.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-FOIyVs4d.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as i,
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{a as i,e as n}from"./routes-oHbXmMIK.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-H8eCrtpq.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-H8eCrtpq.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,5 +1,5 @@
|
|
|
1
1
|
import { b as beamErrors } from './beam-errors-bKCZlkvr.esm.js';
|
|
2
|
-
import { e as events } from './events-
|
|
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,5 +1,5 @@
|
|
|
1
1
|
import { b as beamErrors } from './beam-errors-bKCZlkvr.esm.js';
|
|
2
|
-
import { e as events } from './events-
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"index-XXbpivFV.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-aSHxjlvk.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-
|
|
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,8 +1,8 @@
|
|
|
1
|
-
import { i as index$5 } from './index-
|
|
2
|
-
import { i as index$4 } from './index-
|
|
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-
|
|
5
|
-
import { i as index$2 } from './index-
|
|
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
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as e,C as r,A as t,s as a,N as o}from"./order-page-iki-LwqZ.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-x02SNG40.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-x02SNG40.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -638,7 +638,7 @@ interface paths {
|
|
|
638
638
|
countryCode?: string;
|
|
639
639
|
postalCode?: string;
|
|
640
640
|
}>) & {
|
|
641
|
-
chainId
|
|
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,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
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';
|
|
3
4
|
import '../components/post-purchase.js';
|
|
4
5
|
import { T as TUrl, L as LANGUAGES } from './types-aju0qrRe.esm.js';
|
|
5
6
|
|
|
@@ -31,7 +32,7 @@ declare function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promi
|
|
|
31
32
|
/**
|
|
32
33
|
* trackCart - Backwards-compatible alias for updateCart
|
|
33
34
|
*/
|
|
34
|
-
declare const trackCart:
|
|
35
|
+
declare const trackCart: lodash.DebouncedFuncLeading<(config: BeamCartAPIConfig, cartValues: BeamCartValues) => Promise<void>>;
|
|
35
36
|
/**
|
|
36
37
|
* Sends Beam data to Shopify to integrate with order as custom attributes.
|
|
37
38
|
* Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.
|
|
@@ -241,9 +242,10 @@ type TBeamOrderPageParams = Parameters<typeof postTransaction>[0]["requestBody"]
|
|
|
241
242
|
parentSelector: string;
|
|
242
243
|
apiKey: string;
|
|
243
244
|
baseUrl: TUrl;
|
|
245
|
+
domain?: string;
|
|
244
246
|
lang: LANGUAGES;
|
|
245
247
|
debug: boolean;
|
|
246
248
|
};
|
|
247
|
-
declare function showBeamOrderPageWidgets({ parentSelector, apiKey, baseUrl, storeId, postalCode, countryCode, orderId, email, cartTotal, cart, discountCodes, currencyCode, lang, debug, }: TBeamOrderPageParams): Promise<void>;
|
|
249
|
+
declare function showBeamOrderPageWidgets({ parentSelector, apiKey, baseUrl, storeId, postalCode, countryCode, orderId, email, cartTotal, cart, discountCodes, currencyCode, domain, lang, debug, }: TBeamOrderPageParams): Promise<void>;
|
|
248
250
|
|
|
249
251
|
export { type TBeamOrderPageParams as T, addBeamAttributesToCart as a, getCurrentCart as g, registerCartIntegration as r, showBeamOrderPageWidgets as s, trackCart as t };
|
|
@@ -0,0 +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-UgMNqKER.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-oHbXmMIK.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-iki-LwqZ.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order-page-247E9hPD.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 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 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.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","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"order-page-iki-LwqZ.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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"}
|
|
@@ -0,0 +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-ylLlsQBX.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-tF7SMdXL.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-nw4ww0A4.esm.js.map
|