@beamimpact/web-sdk 1.46.1 → 1.47.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/_share-dialog-dependencies-0ivyNKvC.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-0ivyNKvC.esm.js.map +1 -0
- package/dist/chunks/_share-dialog-dependencies-tTzjG045.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-tTzjG045.esm.js.map +1 -0
- package/dist/chunks/{cart-contents-MrYQNVDx.esm.d.ts → cart-contents-CMm57qu0.esm.d.ts} +1 -1
- package/dist/chunks/{events-_4nImo3u.esm.js → events-6Z5MkCRr.esm.js} +2 -2
- package/dist/chunks/{events-_4nImo3u.esm.js.map → events-6Z5MkCRr.esm.js.map} +1 -1
- package/dist/chunks/{events--Qgk7Mel.esm.d.ts → events-ZCTR9JGZ.esm.d.ts} +1 -1
- package/dist/chunks/index--z5MSe4-.esm.d.ts +17 -0
- package/dist/chunks/{index-8gDNc2to.esm.d.ts → index-2bLOkP4H.esm.d.ts} +3 -5
- package/dist/chunks/{index-dvBJt1Qq.esm.js → index-59K_SAPn.esm.js} +2 -2
- package/dist/chunks/{index-dvBJt1Qq.esm.js.map → index-59K_SAPn.esm.js.map} +1 -1
- package/dist/chunks/index-B6jnCB4o.esm.js +2 -0
- package/dist/chunks/index-B6jnCB4o.esm.js.map +1 -0
- package/dist/chunks/index-BPg2EdL3.esm.js +2 -0
- package/dist/chunks/index-BPg2EdL3.esm.js.map +1 -0
- package/dist/chunks/index-CsWTfuok.esm.js +2 -0
- package/dist/chunks/index-CsWTfuok.esm.js.map +1 -0
- package/dist/chunks/{index-S_lCvtkH.esm.d.ts → index-GynYZRPI.esm.d.ts} +3 -5
- package/dist/chunks/{index-1W93aRCe.esm.js → index-KOSC2Z9-.esm.js} +2 -2
- package/dist/chunks/{index-1W93aRCe.esm.js.map → index-KOSC2Z9-.esm.js.map} +1 -1
- package/dist/chunks/index-MIp7LlXH.esm.js +2 -0
- package/dist/chunks/index-MIp7LlXH.esm.js.map +1 -0
- package/dist/chunks/{index-gQHtJWVP.esm.d.ts → index-PA0NAKHV.esm.d.ts} +1 -1
- package/dist/chunks/{index-ikzViFqS.esm.d.ts → index-XH3OS_sy.esm.d.ts} +4 -4
- package/dist/chunks/index-YJNgLCif.esm.js +2 -0
- package/dist/chunks/index-YJNgLCif.esm.js.map +1 -0
- package/dist/chunks/index-YcyQB-6f.esm.js +2 -0
- package/dist/chunks/index-YcyQB-6f.esm.js.map +1 -0
- package/dist/chunks/index-ZZthq-Fl.esm.js +2 -0
- package/dist/chunks/index-ZZthq-Fl.esm.js.map +1 -0
- package/dist/chunks/index-b3WjW4PD.esm.js +2 -0
- package/dist/chunks/index-b3WjW4PD.esm.js.map +1 -0
- package/dist/chunks/index-cuCnejll.esm.js +2 -0
- package/dist/chunks/index-cuCnejll.esm.js.map +1 -0
- package/dist/chunks/index-iK195-B9.esm.js +2 -0
- package/dist/chunks/index-iK195-B9.esm.js.map +1 -0
- package/dist/chunks/{index-wqLh9Pnq.esm.d.ts → index-v6fG3D6u.esm.d.ts} +1 -1
- package/dist/chunks/{openapi-spec--os_utEo.esm.d.ts → openapi-spec-hjdK2L9Q.esm.d.ts} +2 -0
- package/dist/chunks/order-page-84vnjksY.esm.js +2 -0
- package/dist/chunks/order-page-84vnjksY.esm.js.map +1 -0
- package/dist/chunks/{order-page-GwRa273v.esm.d.ts → order-page-9clVUPaS.esm.d.ts} +28 -4
- package/dist/chunks/order-page-dERTuQ8T.esm.js +2 -0
- package/dist/chunks/order-page-dERTuQ8T.esm.js.map +1 -0
- package/dist/chunks/{routes-o0OWqrXe.esm.js → routes-Jhhqcsg7.esm.js} +2 -2
- package/dist/chunks/{routes-o0OWqrXe.esm.js.map → routes-Jhhqcsg7.esm.js.map} +1 -1
- package/dist/chunks/{routes-DWNnzqXL.esm.js → routes-tB5fHy2T.esm.js} +2 -2
- package/dist/chunks/{routes-DWNnzqXL.esm.js.map → routes-tB5fHy2T.esm.js.map} +1 -1
- package/dist/chunks/{share-button-18T-n7FU.esm.js → share-button-DeVQh1aE.esm.js} +2 -2
- package/dist/chunks/{share-button-18T-n7FU.esm.js.map → share-button-DeVQh1aE.esm.js.map} +1 -1
- package/dist/chunks/{share-button-W7QRecW0.esm.js → share-button-bUM2WBaV.esm.js} +2 -2
- package/dist/chunks/{share-button-W7QRecW0.esm.js.map → share-button-bUM2WBaV.esm.js.map} +1 -1
- package/dist/chunks/{shoelace-components-H1SnT4Dq.esm.js → shoelace-components-JZANE20x.esm.js} +2 -2
- package/dist/chunks/{shoelace-components-H1SnT4Dq.esm.js.map → shoelace-components-JZANE20x.esm.js.map} +1 -1
- package/dist/chunks/{shoelace-components-scmUU5La.esm.js → shoelace-components-Jghvahj3.esm.js} +2 -2
- package/dist/chunks/{shoelace-components-scmUU5La.esm.js.map → shoelace-components-Jghvahj3.esm.js.map} +1 -1
- package/dist/chunks/update-cart-i5yZ2fyd.esm.js +2 -0
- package/dist/chunks/update-cart-i5yZ2fyd.esm.js.map +1 -0
- package/dist/chunks/{update-cart-KjKc8Cls.esm.d.ts → update-cart-l86bU5uS.esm.d.ts} +2 -2
- package/dist/chunks/update-cart-v61CI4O9.esm.js +2 -0
- package/dist/chunks/update-cart-v61CI4O9.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 +8 -8
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +8 -8
- package/dist/components/impact-overview.js.map +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 -1
- package/dist/components/post-purchase.js +1 -1
- package/dist/components/product-details-page.d.ts +1 -1
- package/dist/components/product-details-page.esm.js +1 -1
- package/dist/components/product-details-page.js +1 -1
- package/dist/components/redeem-transaction.d.ts +3 -3
- package/dist/components/redeem-transaction.esm.js +1 -1
- package/dist/components/redeem-transaction.js +1 -1
- package/dist/components/select-nonprofit.d.ts +6 -6
- package/dist/components/select-nonprofit.esm.js +3 -3
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +3 -3
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.d.ts +1 -1
- package/dist/components/select-subscription-nonprofit.esm.js +1 -1
- package/dist/components/select-subscription-nonprofit.js +1 -1
- package/dist/components/shopify.d.ts +5 -5
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.esm.js.map +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/components/shopify.js.map +1 -1
- package/dist/components/social-share.esm.js +1 -1
- package/dist/components/social-share.js +1 -1
- package/dist/components/subscription-impact.d.ts +1 -1
- package/dist/components/subscription-impact.esm.js +1 -1
- package/dist/components/subscription-impact.js +1 -1
- package/dist/components/subscription-management.d.ts +3 -3
- package/dist/components/subscription-management.esm.js +1 -1
- package/dist/components/subscription-management.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 +3 -3
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/index.d.ts +9 -9
- 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 +4 -4
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.esm.js +2 -2
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +2 -2
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/integrations/utils.d.ts +4 -4
- package/dist/integrations/utils.esm.js +1 -1
- package/dist/integrations/utils.js +1 -1
- 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/product-details-page.esm.js +1 -1
- package/dist/react/product-details-page.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.esm.js.map +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/dist/react/select-nonprofit.js.map +1 -1
- package/dist/react/select-subscription-nonprofit.d.ts +3 -3
- package/dist/react/select-subscription-nonprofit.esm.js +1 -1
- package/dist/react/select-subscription-nonprofit.js +1 -1
- package/dist/react/social-share.esm.js +1 -1
- package/dist/react/social-share.js +1 -1
- package/dist/react/subscription-impact.esm.js +1 -1
- package/dist/react/subscription-impact.js +1 -1
- package/dist/react/subscription-management.d.ts +2 -2
- package/dist/react/subscription-management.esm.js +1 -1
- package/dist/react/subscription-management.js +1 -1
- package/dist/utils/events.d.ts +3 -3
- package/dist/utils/events.esm.js +1 -1
- package/dist/utils/events.js +1 -1
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/network-listeners.d.ts +1 -3
- package/dist/utils/network-listeners.esm.js +1 -1
- package/dist/utils/network-listeners.esm.js.map +1 -1
- package/dist/utils/network-listeners.js +1 -1
- package/dist/utils/network-listeners.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/_share-dialog-dependencies-PFFpDNAX.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-PFFpDNAX.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-ctThmFDw.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-ctThmFDw.esm.js.map +0 -1
- package/dist/chunks/index-Hb6pipkL.esm.js +0 -2
- package/dist/chunks/index-Hb6pipkL.esm.js.map +0 -1
- package/dist/chunks/index-Ie9en2n6.esm.d.ts +0 -14
- package/dist/chunks/index-NOF_HeFP.esm.js +0 -2
- package/dist/chunks/index-NOF_HeFP.esm.js.map +0 -1
- package/dist/chunks/index-cGU2h6FW.esm.js +0 -2
- package/dist/chunks/index-cGU2h6FW.esm.js.map +0 -1
- package/dist/chunks/index-hGumnpwj.esm.js +0 -2
- package/dist/chunks/index-hGumnpwj.esm.js.map +0 -1
- package/dist/chunks/index-hOkyesad.esm.js +0 -2
- package/dist/chunks/index-hOkyesad.esm.js.map +0 -1
- package/dist/chunks/index-n6QNFLXV.esm.js +0 -2
- package/dist/chunks/index-n6QNFLXV.esm.js.map +0 -1
- package/dist/chunks/index-pLSxG_UY.esm.js +0 -2
- package/dist/chunks/index-pLSxG_UY.esm.js.map +0 -1
- package/dist/chunks/index-rmlKdwmx.esm.js +0 -2
- package/dist/chunks/index-rmlKdwmx.esm.js.map +0 -1
- package/dist/chunks/index-x2kxA_Xo.esm.js +0 -2
- package/dist/chunks/index-x2kxA_Xo.esm.js.map +0 -1
- package/dist/chunks/index-z8c9I9IQ.esm.js +0 -2
- package/dist/chunks/index-z8c9I9IQ.esm.js.map +0 -1
- package/dist/chunks/order-page-CqyWx-7V.esm.js +0 -2
- package/dist/chunks/order-page-CqyWx-7V.esm.js.map +0 -1
- package/dist/chunks/order-page-PE7XPoJe.esm.js +0 -2
- package/dist/chunks/order-page-PE7XPoJe.esm.js.map +0 -1
- package/dist/chunks/update-cart-Tv_fewXm.esm.js +0 -2
- package/dist/chunks/update-cart-Tv_fewXm.esm.js.map +0 -1
- package/dist/chunks/update-cart-YDnJT-2Q.esm.js +0 -2
- package/dist/chunks/update-cart-YDnJT-2Q.esm.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as r}from"../chunks/events-6Z5MkCRr.esm.js";const i={apply:function(n,e,t){return n(...t).then(o=>{if(o.ok){const w=o.clone();window.dispatchEvent(new r({url:t[0].toString(),method:(t[1]?.method||"get").toLowerCase(),type:"fetch",response:w}))}return o})}},c={construct(n,e){const t=new n(...e);return t.addEventListener("load",()=>{window.dispatchEvent(new r({url:(e[1]||"").toString(),method:(e[0]||"get").toLowerCase(),type:"xhr",xhr:t}))}),t}};let s=!1;const d=()=>{s||(window.fetch=new Proxy(window.fetch,i),XMLHttpRequest=new Proxy(XMLHttpRequest,c),s=!0)};export{d as initNetworkListeners};
|
|
2
2
|
//# sourceMappingURL=network-listeners.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-listeners.esm.js","sources":["../../src/utils/network-listeners.ts"],"sourcesContent":["import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst
|
|
1
|
+
{"version":3,"file":"network-listeners.esm.js","sources":["../../src/utils/network-listeners.ts"],"sourcesContent":["import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst fetchHandler = {\n apply: function (target: any, _thisArg: any, args: any[]) {\n return target(...args).then((response: Response) => {\n if (response.ok) {\n const responseCopy = response.clone();\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: args[0].toString(),\n method: (args[1]?.method || \"get\").toLowerCase(),\n type: \"fetch\",\n response: responseCopy,\n })\n );\n }\n return response;\n });\n },\n};\n\n/**\n * XMLHTTPRequest Listener\n */\n\nconst xhrHandler = {\n construct(TargetConstructor: any, args: any[]) {\n const xhr: XMLHttpRequest = new TargetConstructor(...args);\n xhr.addEventListener(\"load\", () => {\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: (args[1] || \"\").toString(),\n method: (args[0] || \"get\").toLowerCase(),\n type: \"xhr\",\n xhr,\n })\n );\n });\n return xhr;\n },\n};\n\n/**\n * Side-Effects Setup (initialize listeners)\n */\n\nlet initializedListeners = false;\n\nexport const initNetworkListeners = () => {\n if (initializedListeners) return;\n window.fetch = new Proxy(window.fetch, fetchHandler);\n XMLHttpRequest = new Proxy(XMLHttpRequest, xhrHandler);\n initializedListeners = true;\n};\n"],"names":["fetchHandler","target","_thisArg","args","response","responseCopy","BeamNetworkCallEvent","xhrHandler","TargetConstructor","xhr","initializedListeners","initNetworkListeners"],"mappings":"qDAMA,MAAMA,EAAe,CACnB,MAAO,SAAUC,EAAaC,EAAeC,EAAa,CACxD,OAAOF,EAAO,GAAGE,CAAI,EAAE,KAAMC,GAAuB,CAClD,GAAIA,EAAS,GAAI,CACf,MAAMC,EAAeD,EAAS,QAC9B,OAAO,cACL,IAAIE,EAAqB,CACvB,IAAKH,EAAK,CAAC,EAAE,SAAS,EACtB,QAASA,EAAK,CAAC,GAAG,QAAU,OAAO,cACnC,KAAM,QACN,SAAUE,CACZ,CAAC,CACH,CACF,CACA,OAAOD,CACT,CAAC,CACH,CACF,EAMMG,EAAa,CACjB,UAAUC,EAAwBL,EAAa,CAC7C,MAAMM,EAAsB,IAAID,EAAkB,GAAGL,CAAI,EACzD,OAAAM,EAAI,iBAAiB,OAAQ,IAAM,CACjC,OAAO,cACL,IAAIH,EAAqB,CACvB,KAAMH,EAAK,CAAC,GAAK,IAAI,WACrB,QAASA,EAAK,CAAC,GAAK,OAAO,YAAA,EAC3B,KAAM,MACN,IAAAM,CACF,CAAC,CACH,CACF,CAAC,EACMA,CACT,CACF,EAMA,IAAIC,EAAuB,GAEpB,MAAMC,EAAuB,IAAM,CACpCD,IACJ,OAAO,MAAQ,IAAI,MAAM,OAAO,MAAOV,CAAY,EACnD,eAAiB,IAAI,MAAM,eAAgBO,CAAU,EACrDG,EAAuB,GACzB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as r}from"../chunks/events-6Z5MkCRr.esm.js";const i={apply:function(n,e,t){return n(...t).then(o=>{if(o.ok){const w=o.clone();window.dispatchEvent(new r({url:t[0].toString(),method:(t[1]?.method||"get").toLowerCase(),type:"fetch",response:w}))}return o})}},c={construct(n,e){const t=new n(...e);return t.addEventListener("load",()=>{window.dispatchEvent(new r({url:(e[1]||"").toString(),method:(e[0]||"get").toLowerCase(),type:"xhr",xhr:t}))}),t}};let s=!1;const d=()=>{s||(window.fetch=new Proxy(window.fetch,i),XMLHttpRequest=new Proxy(XMLHttpRequest,c),s=!0)};export{d as initNetworkListeners};
|
|
2
2
|
//# sourceMappingURL=network-listeners.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-listeners.js","sources":["../../src/utils/network-listeners.ts"],"sourcesContent":["import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst
|
|
1
|
+
{"version":3,"file":"network-listeners.js","sources":["../../src/utils/network-listeners.ts"],"sourcesContent":["import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst fetchHandler = {\n apply: function (target: any, _thisArg: any, args: any[]) {\n return target(...args).then((response: Response) => {\n if (response.ok) {\n const responseCopy = response.clone();\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: args[0].toString(),\n method: (args[1]?.method || \"get\").toLowerCase(),\n type: \"fetch\",\n response: responseCopy,\n })\n );\n }\n return response;\n });\n },\n};\n\n/**\n * XMLHTTPRequest Listener\n */\n\nconst xhrHandler = {\n construct(TargetConstructor: any, args: any[]) {\n const xhr: XMLHttpRequest = new TargetConstructor(...args);\n xhr.addEventListener(\"load\", () => {\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: (args[1] || \"\").toString(),\n method: (args[0] || \"get\").toLowerCase(),\n type: \"xhr\",\n xhr,\n })\n );\n });\n return xhr;\n },\n};\n\n/**\n * Side-Effects Setup (initialize listeners)\n */\n\nlet initializedListeners = false;\n\nexport const initNetworkListeners = () => {\n if (initializedListeners) return;\n window.fetch = new Proxy(window.fetch, fetchHandler);\n XMLHttpRequest = new Proxy(XMLHttpRequest, xhrHandler);\n initializedListeners = true;\n};\n"],"names":["fetchHandler","target","_thisArg","args","response","responseCopy","BeamNetworkCallEvent","xhrHandler","TargetConstructor","xhr","initializedListeners","initNetworkListeners"],"mappings":"qDAMA,MAAMA,EAAe,CACnB,MAAO,SAAUC,EAAaC,EAAeC,EAAa,CACxD,OAAOF,EAAO,GAAGE,CAAI,EAAE,KAAMC,GAAuB,CAClD,GAAIA,EAAS,GAAI,CACf,MAAMC,EAAeD,EAAS,QAC9B,OAAO,cACL,IAAIE,EAAqB,CACvB,IAAKH,EAAK,CAAC,EAAE,SAAS,EACtB,QAASA,EAAK,CAAC,GAAG,QAAU,OAAO,cACnC,KAAM,QACN,SAAUE,CACZ,CAAC,CACH,CACF,CACA,OAAOD,CACT,CAAC,CACH,CACF,EAMMG,EAAa,CACjB,UAAUC,EAAwBL,EAAa,CAC7C,MAAMM,EAAsB,IAAID,EAAkB,GAAGL,CAAI,EACzD,OAAAM,EAAI,iBAAiB,OAAQ,IAAM,CACjC,OAAO,cACL,IAAIH,EAAqB,CACvB,KAAMH,EAAK,CAAC,GAAK,IAAI,WACrB,QAASA,EAAK,CAAC,GAAK,OAAO,YAAA,EAC3B,KAAM,MACN,IAAAM,CACF,CAAC,CACH,CACF,CAAC,EACMA,CACT,CACF,EAMA,IAAIC,EAAuB,GAEpB,MAAMC,EAAuB,IAAM,CACpCD,IACJ,OAAO,MAAQ,IAAI,MAAM,OAAO,MAAOV,CAAY,EACnD,eAAiB,IAAI,MAAM,eAAgBO,CAAU,EACrDG,EAAuB,GACzB"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_share-dialog-dependencies-PFFpDNAX.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./vendor-GKiOHg2N.esm.js";import"./shoelace-components-scmUU5La.esm.js";import"./lit-iNN5L_Qk.esm.js";import"./routes-o0OWqrXe.esm.js";import"./beam-errors-P-Lu07Ce.esm.js";import"../utils/logger.esm.js";
|
|
2
|
-
//# sourceMappingURL=_share-dialog-dependencies-ctThmFDw.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_share-dialog-dependencies-ctThmFDw.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-Hb6pipkL.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { B as BeamShopifyCartIntegrationConfig, T as TBeamOrderPageParams, a as addBeamAttributesToCart, g as getCurrentCart, r as registerCartIntegration, s as showBeamOrderPageWidgets, t as trackCart } from './order-page-GwRa273v.esm.js';
|
|
2
|
-
|
|
3
|
-
declare const index_BeamShopifyCartIntegrationConfig: typeof BeamShopifyCartIntegrationConfig;
|
|
4
|
-
declare const index_TBeamOrderPageParams: typeof TBeamOrderPageParams;
|
|
5
|
-
declare const index_addBeamAttributesToCart: typeof addBeamAttributesToCart;
|
|
6
|
-
declare const index_getCurrentCart: typeof getCurrentCart;
|
|
7
|
-
declare const index_registerCartIntegration: typeof registerCartIntegration;
|
|
8
|
-
declare const index_showBeamOrderPageWidgets: typeof showBeamOrderPageWidgets;
|
|
9
|
-
declare const index_trackCart: typeof trackCart;
|
|
10
|
-
declare namespace index {
|
|
11
|
-
export { index_BeamShopifyCartIntegrationConfig as BeamShopifyCartIntegrationConfig, index_TBeamOrderPageParams as TBeamOrderPageParams, index_addBeamAttributesToCart as addBeamAttributesToCart, index_getCurrentCart as getCurrentCart, index_registerCartIntegration as registerCartIntegration, index_showBeamOrderPageWidgets as showBeamOrderPageWidgets, index_trackCart as trackCart };
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export { index as i };
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as e}from"./beam-errors-P-Lu07Ce.esm.js";import{e as o}from"./events-_4nImo3u.esm.js";import{logger as r}from"../utils/logger.js";import{fetchProxy as t,initNetworkListeners as i,xhrProxy as m}from"../utils/network-listeners.js";import{createScopedLocalStorage as a}from"../utils/local-storage.js";import{waitForElement as s}from"../utils/wait-for-element.js";import{deleteCookieValue as l,getCookieMap as n,getCookieValue as p,setCookieValue as f}from"../utils/cookies.js";import{getRemoteSession as g,saveRemoteSession as c}from"../utils/remote-session.js";import{memoizeLast as u}from"../utils/memoize-last.js";import{d as k,i as d}from"./lodash-P8OIs-at.esm.js";var x=Object.freeze({__proto__:null,createScopedLocalStorage:a,debounce:k,deleteCookieValue:l,errors:e,events:o,fetchProxy:t,getCookieMap:n,getCookieValue:p,getRemoteSession:g,initNetworkListeners:i,isEqual:d,logger:r,memoizeLast:u,saveRemoteSession:c,setCookieValue:f,waitForElement:s,xhrProxy:m});export{x as i};
|
|
2
|
-
//# sourceMappingURL=index-NOF_HeFP.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-NOF_HeFP.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as e,w as r,J as t,s as a,q as o}from"./order-page-CqyWx-7V.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-cGU2h6FW.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-cGU2h6FW.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i}from"./index-x2kxA_Xo.esm.js";import{i as o}from"./index-cGU2h6FW.esm.js";import{i as r}from"./index-JDZQClkA.esm.js";import{i as e}from"./index-rmlKdwmx.esm.js";import{i as m}from"./index-dvBJt1Qq.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-hGumnpwj.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-hGumnpwj.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i}from"./index-z8c9I9IQ.esm.js";import{i as o}from"./index-pLSxG_UY.esm.js";import{i as r}from"./index-eXilYHHK.esm.js";import{i as e}from"./index-Hb6pipkL.esm.js";import{i as m}from"./index-1W93aRCe.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-hOkyesad.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-hOkyesad.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as e}from"./beam-errors-P-Lu07Ce.esm.js";import{e as o}from"./events-_4nImo3u.esm.js";import{logger as r}from"../utils/logger.esm.js";import{fetchProxy as t,initNetworkListeners as i,xhrProxy as m}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as a}from"../utils/local-storage.esm.js";import{waitForElement as s}from"../utils/wait-for-element.esm.js";import{deleteCookieValue as l,getCookieMap as n,getCookieValue as p,setCookieValue as f}from"../utils/cookies.esm.js";import{getRemoteSession as g,saveRemoteSession as c}from"../utils/remote-session.esm.js";import{memoizeLast as u}from"../utils/memoize-last.esm.js";import{d as k,i as d}from"./lodash-P8OIs-at.esm.js";var x=Object.freeze({__proto__:null,createScopedLocalStorage:a,debounce:k,deleteCookieValue:l,errors:e,events:o,fetchProxy:t,getCookieMap:n,getCookieValue:p,getRemoteSession:g,initNetworkListeners:i,isEqual:d,logger:r,memoizeLast:u,saveRemoteSession:c,setCookieValue:f,waitForElement:s,xhrProxy:m});export{x as i};
|
|
2
|
-
//# sourceMappingURL=index-n6QNFLXV.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-n6QNFLXV.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{p as e,w as r,J as t,s as a,q as o}from"./order-page-PE7XPoJe.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-pLSxG_UY.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-pLSxG_UY.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-rmlKdwmx.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as e}from"./beam-errors-P-Lu07Ce.esm.js";import{e as o}from"./events-_4nImo3u.esm.js";import{logger as r}from"../utils/logger.js";import{fetchProxy as t,initNetworkListeners as i,xhrProxy as m}from"../utils/network-listeners.js";import{createScopedLocalStorage as a}from"../utils/local-storage.js";import{waitForElement as s}from"../utils/wait-for-element.js";import{deleteCookieValue as l,getCookieMap as n,getCookieValue as p,setCookieValue as f}from"../utils/cookies.js";import{getRemoteSession as g,saveRemoteSession as c}from"../utils/remote-session.js";import{memoizeLast as u}from"../utils/memoize-last.js";import{d as k,i as d}from"./lodash-P8OIs-at.esm.js";var x=Object.freeze({__proto__:null,createScopedLocalStorage:a,debounce:k,deleteCookieValue:l,errors:e,events:o,fetchProxy:t,getCookieMap:n,getCookieValue:p,getRemoteSession:g,initNetworkListeners:i,isEqual:d,logger:r,memoizeLast:u,saveRemoteSession:c,setCookieValue:f,waitForElement:s,xhrProxy:m});export{x as i};
|
|
2
|
-
//# sourceMappingURL=index-x2kxA_Xo.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-x2kxA_Xo.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as e}from"./beam-errors-P-Lu07Ce.esm.js";import{e as o}from"./events-_4nImo3u.esm.js";import{logger as r}from"../utils/logger.esm.js";import{fetchProxy as t,initNetworkListeners as i,xhrProxy as m}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as a}from"../utils/local-storage.esm.js";import{waitForElement as s}from"../utils/wait-for-element.esm.js";import{deleteCookieValue as l,getCookieMap as n,getCookieValue as p,setCookieValue as f}from"../utils/cookies.esm.js";import{getRemoteSession as g,saveRemoteSession as c}from"../utils/remote-session.esm.js";import{memoizeLast as u}from"../utils/memoize-last.esm.js";import{d as k,i as d}from"./lodash-P8OIs-at.esm.js";var x=Object.freeze({__proto__:null,createScopedLocalStorage:a,debounce:k,deleteCookieValue:l,errors:e,events:o,fetchProxy:t,getCookieMap:n,getCookieValue:p,getRemoteSession:g,initNetworkListeners:i,isEqual:d,logger:r,memoizeLast:u,saveRemoteSession:c,setCookieValue:f,waitForElement:s,xhrProxy:m});export{x as i};
|
|
2
|
-
//# sourceMappingURL=index-z8c9I9IQ.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-z8c9I9IQ.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as J}from"./lodash-P8OIs-at.esm.js";import{b as O,d as j,c as k,g as D}from"./events-_4nImo3u.esm.js";import{logger as N}from"../utils/logger.js";import{initNetworkListeners as K}from"../utils/network-listeners.js";import{createScopedLocalStorage as S}from"../utils/local-storage.js";import{getCookieValue as B}from"../utils/cookies.js";import{memoizeLast as R}from"../utils/memoize-last.js";import{B as y}from"./cart-contents-h60geKWa.esm.js";import{K as C}from"./update-cart-Tv_fewXm.esm.js";import{W as x,D as q}from"./routes-DWNnzqXL.esm.js";import{getExternalCartId as L,getBeamCartId as b}from"../utils/cart.js";import"../components/post-purchase.js";import{waitForElement as M}from"../utils/wait-for-element.js";import{B as P}from"./beam-errors-P-Lu07Ce.esm.js";const T=window.Shopify?.routes?.root||"/";let A=!1;const E="cart";async function W(t){if(A)return!1;const l=await v(t),p=B(E);l.cart.cartId!==p&&await C(t,l.cart),await _({}),K(),window.addEventListener(O.eventName,async s=>{const n=s,r=/cart\/(add|change|update|clear)/,a=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,e=new URL(a);if(!r.test(e.pathname))return;const i=await v(t);if(!i.changed)return;const c={schema:i.cart.schema,content:{items:i.cart.content.items,discounts:i.cart.content.discounts}};window.dispatchEvent(new j(c)),await C(t,i.cart)});let d,m;return window.addEventListener(k.eventName,async s=>{const n=s,{source:r,selectedNonprofitId:a,selectionId:e}=n.detail;if(r===x.select_nonprofit){const i=L(E,t),c=b(y,t),{chainId:u,storeId:I}=t;if(d===a&&m===e)return;await _({selectedNonprofitId:a,selectionId:e,beamCartId:c||void 0,cartId:i||void 0,chainId:u,storeId:I}),m=e,d=a}}),window.addEventListener(D.eventName,async s=>{const n=s,{newNonprofitId:r,selectionId:a}=n.detail,e=L(E,t),i=b(y,t),{chainId:c,storeId:u}=t;d===r&&m===a||(await _({selectedNonprofitId:r,beamCartId:i||void 0,selectionId:a,cartId:e||void 0,chainId:c,storeId:u}),m=a,d=r)}),A=!0,!0}async function v(t){const{token:l,total_price:p,item_count:d,currency:m,items:s,cart_level_discount_applications:n}=await window.fetch(T+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(c=>c.json());let r=!1;const a=S(t).getItemJson("cart"),e=b(y,t),i={cartId:l,beamCartId:e,subtotal:p/100,itemCount:d,currencyCode:m,schema:{source:"generic"},content:{items:s.map(({sku:c,final_line_price:u,product_id:I,line_level_discount_allocations:g})=>{const f=c||String(I),w=u/100,o=g?.map(({discount_application:h})=>({code:h?.title,applicable:!0}));return{remoteProductIdentifier:f,localAmount:w,discounts:o}}),discounts:n.map(({title:c})=>({code:c,applicable:!0}))}};return J(i,{...a,beamCartId:a?.beamCartId})||(r=!0),{changed:r,cart:i}}const F=C,_=R(async function({selectedNonprofitId:t,selectionId:l,beamCartId:p,cartId:d,chainId:m,storeId:s}){let n,r;try{if(window.statsig){const e=window.statsig;n=e.getLayer("beam_trial_layer").get("show_beam",!1),r=e.getStableID()}}catch(e){N.error(e)}const a={beam:JSON.stringify({nonprofit_id:t,selection_id:l,beam_cart_id:p,shopify_cart_id:d,chain_id:m,store_id:s,show_beam:n,remote_session_id:r})};try{await window.fetch(T+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:a})})}catch(e){N.error(e)}});async function G({parentSelector:t=".step__sections",apiKey:l,baseUrl:p=q,storeId:d,postalCode:m,countryCode:s,orderId:n,email:r,cartTotal:a,cart:e,discountCodes:i,currencyCode:c="USD",domain:u,lang:I="en",debug:g=!1}){const f=document.querySelector(t)||await M(t);if(!f)throw new P(`Timed out waiting for selector '${t}'. Could not render Beam post-purchase widget.`);const w=await B("cart");if(w){const h=S({apiKey:l}),U=h.getItemJson("cart")||{};h.setItemJson("cart",{...U,cartId:w})}const o=document.createElement("beam-post-purchase");o.apiKey=l,o.baseUrl=p,o.storeId=d,o.postalCode=m,o.countryCode=s,o.orderId=String(n),o.email=r,o.cartTotal=a,o.cart=e,o.discountCodes=i,o.currencyCode=c,o.domain=u,o.lang=I,o.debug=g,f.appendChild(o)}export{W as J,_ as p,F as q,G as s,v as w};
|
|
2
|
-
//# sourceMappingURL=order-page-CqyWx-7V.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"order-page-CqyWx-7V.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 { logger, memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport {\n BeamCartChangeEvent,\n BeamNetworkCallEvent,\n BeamNonprofitSelectEvent,\n BeamNonprofitSelectionRemovedEvent,\n} from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\nimport { WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { getBeamCartId, getExternalCartId } from \"../../utils/cart\";\n\nexport type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\ntype ShopifyDiscountApplication = {\n title: string;\n value: string;\n};\n\ntype ShopifyLineLevelDiscountAllocations = {\n amount?: string;\n discount_application: ShopifyDiscountApplication;\n};\n\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 const cartCookie = getCookieValue(SHOPIFY_CART_COOKIE_NAME);\n // only update on initial load if Shopify cart has changed since last visit\n if (currentCart.cart.cartId !== cartCookie) {\n await updateCart(config, currentCart.cart);\n }\n // pre load beam cart attribute to save statsig info\n await addBeamAttributesToCart({});\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 discounts: currentCart.cart.content.discounts 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 { source, selectedNonprofitId, selectionId } = event.detail;\n\n if (source === WIDGET_NAMES.select_nonprofit) {\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config); // Shopify cart ID\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config); // Beam cart ID\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: beamCartId ? beamCartId : undefined,\n cartId: cartId ? cartId : undefined,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n }\n });\n\n /**\n * Upon removal of the selected nonprofit from the widget and local storage,\n * an event is emitted and that event is then used to update the cart attributes accordingly\n * This event listener updates the cart attributes based on the emitted event\n */\n window.addEventListener(BeamNonprofitSelectionRemovedEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectionRemovedEvent;\n const { newNonprofitId, selectionId } = event.detail;\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config);\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n const { chainId, storeId } = config;\n if (lastNonprofitId === newNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n await addBeamAttributesToCart({\n selectedNonprofitId: newNonprofitId,\n beamCartId: beamCartId ? beamCartId : undefined,\n selectionId,\n cartId: cartId ? cartId : undefined,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = newNonprofitId;\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 cart_level_discount_applications,\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 let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n\n const cart = {\n cartId: token,\n beamCartId,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id, line_level_discount_allocations }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n const discounts = (line_level_discount_allocations as ShopifyLineLevelDiscountAllocations[])?.map(\n ({ discount_application }) => {\n return { code: discount_application?.title, applicable: true };\n }\n );\n return { remoteProductIdentifier, localAmount, discounts };\n }),\n discounts: (cart_level_discount_applications as ShopifyDiscountApplication[]).map(({ title }) => {\n return { code: title, applicable: true };\n }),\n },\n };\n\n if (\n !isEqual(cart, {\n ...cachedCart,\n beamCartId: cachedCart?.beamCartId,\n })\n ) {\n changed = true;\n }\n\n 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 let showBeam;\n let remoteSessionId;\n try {\n if (window.statsig) {\n const statsig = window.statsig as any;\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n } catch (e) {\n logger.error(e);\n }\n 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 show_beam: showBeam,\n remote_session_id: remoteSessionId,\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 logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\nexport { 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","cartCookie","getCookieValue","updateCart","addBeamAttributesToCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","source","selectedNonprofitId","selectionId","WIDGET_NAMES","cartId","getExternalCartId","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","BeamNonprofitSelectionRemovedEvent","newNonprofitId","token","total_price","item_count","currency","items","cart_level_discount_applications","res","changed","cachedCart","createScopedLocalStorage","cart","sku","final_line_price","product_id","line_level_discount_allocations","remoteProductIdentifier","localAmount","discounts","discount_application","title","isEqual","trackCart","memoizeLast","showBeam","remoteSessionId","statsig","e","logger","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 +0,0 @@
|
|
|
1
|
-
import{i as J}from"./lodash-P8OIs-at.esm.js";import{b as O,d as j,c as k,g as D}from"./events-_4nImo3u.esm.js";import{logger as N}from"../utils/logger.esm.js";import{initNetworkListeners as K}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as S}from"../utils/local-storage.esm.js";import{getCookieValue as B}from"../utils/cookies.esm.js";import{memoizeLast as R}from"../utils/memoize-last.esm.js";import{B as y}from"./cart-contents-h60geKWa.esm.js";import{K as C}from"./update-cart-YDnJT-2Q.esm.js";import{W as x,D as q}from"./routes-o0OWqrXe.esm.js";import{getExternalCartId as L,getBeamCartId as b}from"../utils/cart.esm.js";import"../components/post-purchase.esm.js";import{waitForElement as M}from"../utils/wait-for-element.esm.js";import{B as P}from"./beam-errors-P-Lu07Ce.esm.js";const T=window.Shopify?.routes?.root||"/";let A=!1;const E="cart";async function W(t){if(A)return!1;const l=await v(t),p=B(E);l.cart.cartId!==p&&await C(t,l.cart),await _({}),K(),window.addEventListener(O.eventName,async s=>{const n=s,r=/cart\/(add|change|update|clear)/,a=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,e=new URL(a);if(!r.test(e.pathname))return;const i=await v(t);if(!i.changed)return;const c={schema:i.cart.schema,content:{items:i.cart.content.items,discounts:i.cart.content.discounts}};window.dispatchEvent(new j(c)),await C(t,i.cart)});let d,m;return window.addEventListener(k.eventName,async s=>{const n=s,{source:r,selectedNonprofitId:a,selectionId:e}=n.detail;if(r===x.select_nonprofit){const i=L(E,t),c=b(y,t),{chainId:u,storeId:I}=t;if(d===a&&m===e)return;await _({selectedNonprofitId:a,selectionId:e,beamCartId:c||void 0,cartId:i||void 0,chainId:u,storeId:I}),m=e,d=a}}),window.addEventListener(D.eventName,async s=>{const n=s,{newNonprofitId:r,selectionId:a}=n.detail,e=L(E,t),i=b(y,t),{chainId:c,storeId:u}=t;d===r&&m===a||(await _({selectedNonprofitId:r,beamCartId:i||void 0,selectionId:a,cartId:e||void 0,chainId:c,storeId:u}),m=a,d=r)}),A=!0,!0}async function v(t){const{token:l,total_price:p,item_count:d,currency:m,items:s,cart_level_discount_applications:n}=await window.fetch(T+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(c=>c.json());let r=!1;const a=S(t).getItemJson("cart"),e=b(y,t),i={cartId:l,beamCartId:e,subtotal:p/100,itemCount:d,currencyCode:m,schema:{source:"generic"},content:{items:s.map(({sku:c,final_line_price:u,product_id:I,line_level_discount_allocations:g})=>{const f=c||String(I),w=u/100,o=g?.map(({discount_application:h})=>({code:h?.title,applicable:!0}));return{remoteProductIdentifier:f,localAmount:w,discounts:o}}),discounts:n.map(({title:c})=>({code:c,applicable:!0}))}};return J(i,{...a,beamCartId:a?.beamCartId})||(r=!0),{changed:r,cart:i}}const F=C,_=R(async function({selectedNonprofitId:t,selectionId:l,beamCartId:p,cartId:d,chainId:m,storeId:s}){let n,r;try{if(window.statsig){const e=window.statsig;n=e.getLayer("beam_trial_layer").get("show_beam",!1),r=e.getStableID()}}catch(e){N.error(e)}const a={beam:JSON.stringify({nonprofit_id:t,selection_id:l,beam_cart_id:p,shopify_cart_id:d,chain_id:m,store_id:s,show_beam:n,remote_session_id:r})};try{await window.fetch(T+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:a})})}catch(e){N.error(e)}});async function G({parentSelector:t=".step__sections",apiKey:l,baseUrl:p=q,storeId:d,postalCode:m,countryCode:s,orderId:n,email:r,cartTotal:a,cart:e,discountCodes:i,currencyCode:c="USD",domain:u,lang:I="en",debug:g=!1}){const f=document.querySelector(t)||await M(t);if(!f)throw new P(`Timed out waiting for selector '${t}'. Could not render Beam post-purchase widget.`);const w=await B("cart");if(w){const h=S({apiKey:l}),U=h.getItemJson("cart")||{};h.setItemJson("cart",{...U,cartId:w})}const o=document.createElement("beam-post-purchase");o.apiKey=l,o.baseUrl=p,o.storeId=d,o.postalCode=m,o.countryCode=s,o.orderId=String(n),o.email=r,o.cartTotal=a,o.cart=e,o.discountCodes=i,o.currencyCode=c,o.domain=u,o.lang=I,o.debug=g,f.appendChild(o)}export{W as J,_ as p,F as q,G as s,v as w};
|
|
2
|
-
//# sourceMappingURL=order-page-PE7XPoJe.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"order-page-PE7XPoJe.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 { logger, memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport {\n BeamCartChangeEvent,\n BeamNetworkCallEvent,\n BeamNonprofitSelectEvent,\n BeamNonprofitSelectionRemovedEvent,\n} from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\nimport { WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { getBeamCartId, getExternalCartId } from \"../../utils/cart\";\n\nexport type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\ntype ShopifyDiscountApplication = {\n title: string;\n value: string;\n};\n\ntype ShopifyLineLevelDiscountAllocations = {\n amount?: string;\n discount_application: ShopifyDiscountApplication;\n};\n\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 const cartCookie = getCookieValue(SHOPIFY_CART_COOKIE_NAME);\n // only update on initial load if Shopify cart has changed since last visit\n if (currentCart.cart.cartId !== cartCookie) {\n await updateCart(config, currentCart.cart);\n }\n // pre load beam cart attribute to save statsig info\n await addBeamAttributesToCart({});\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 discounts: currentCart.cart.content.discounts 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 { source, selectedNonprofitId, selectionId } = event.detail;\n\n if (source === WIDGET_NAMES.select_nonprofit) {\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config); // Shopify cart ID\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config); // Beam cart ID\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: beamCartId ? beamCartId : undefined,\n cartId: cartId ? cartId : undefined,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n }\n });\n\n /**\n * Upon removal of the selected nonprofit from the widget and local storage,\n * an event is emitted and that event is then used to update the cart attributes accordingly\n * This event listener updates the cart attributes based on the emitted event\n */\n window.addEventListener(BeamNonprofitSelectionRemovedEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectionRemovedEvent;\n const { newNonprofitId, selectionId } = event.detail;\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config);\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n const { chainId, storeId } = config;\n if (lastNonprofitId === newNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n await addBeamAttributesToCart({\n selectedNonprofitId: newNonprofitId,\n beamCartId: beamCartId ? beamCartId : undefined,\n selectionId,\n cartId: cartId ? cartId : undefined,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = newNonprofitId;\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 cart_level_discount_applications,\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 let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n\n const cart = {\n cartId: token,\n beamCartId,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id, line_level_discount_allocations }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n const discounts = (line_level_discount_allocations as ShopifyLineLevelDiscountAllocations[])?.map(\n ({ discount_application }) => {\n return { code: discount_application?.title, applicable: true };\n }\n );\n return { remoteProductIdentifier, localAmount, discounts };\n }),\n discounts: (cart_level_discount_applications as ShopifyDiscountApplication[]).map(({ title }) => {\n return { code: title, applicable: true };\n }),\n },\n };\n\n if (\n !isEqual(cart, {\n ...cachedCart,\n beamCartId: cachedCart?.beamCartId,\n })\n ) {\n changed = true;\n }\n\n 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 let showBeam;\n let remoteSessionId;\n try {\n if (window.statsig) {\n const statsig = window.statsig as any;\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n } catch (e) {\n logger.error(e);\n }\n 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 show_beam: showBeam,\n remote_session_id: remoteSessionId,\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 logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\nexport { 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","cartCookie","getCookieValue","updateCart","addBeamAttributesToCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","source","selectedNonprofitId","selectionId","WIDGET_NAMES","cartId","getExternalCartId","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","BeamNonprofitSelectionRemovedEvent","newNonprofitId","token","total_price","item_count","currency","items","cart_level_discount_applications","res","changed","cachedCart","createScopedLocalStorage","cart","sku","final_line_price","product_id","line_level_discount_allocations","remoteProductIdentifier","localAmount","discounts","discount_application","title","isEqual","trackCart","memoizeLast","showBeam","remoteSessionId","statsig","e","logger","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 +0,0 @@
|
|
|
1
|
-
import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-DWNnzqXL.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.js";import{createScopedLocalStorage as U}from"../utils/local-storage.js";import{setCookieValue as _}from"../utils/cookies.js";import{getRemoteSession as L}from"../utils/remote-session.js";import{memoizeLast as x}from"../utils/memoize-last.js";import{B as f}from"./cart-contents-h60geKWa.esm.js";import{getBeamCartId as D}from"../utils/cart.js";const R=50,T=y(x(async function(e,c){try{const t=U({apiKey:e.apiKey}),l=e.baseUrl??g,o=t.getItemJson("cart"),a=D(f,e),E=L(e)??void 0,{cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:a};if(B(p,{...o,cartId:o?.cartId})||c.itemCount===0&&(!a||o?.itemCount===0))return;const h=await A({baseUrl:l,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:a,storeId:e.storeId,remoteSessionId:E,cartId:r,subtotal:m,itemCount:i,currencyCode:s}}),{beamCartId:n,expiresAt:I,beamCartCreated:w}=h;n&&I&&await _({name:f,domain:e.domain,value:n,path:"/",expires:new Date(I).getTime()}),t.setItemJson("cart",{...p,beamCartId:n});const b={schema:C,content:{items:d,discounts:u},subtotal:m,itemCount:i,currencyCode:s,cartId:r,beamCartId:a};window.dispatchEvent(new K(b)),w&&window.dispatchEvent(new S(b))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
|
|
2
|
-
//# sourceMappingURL=update-cart-Tv_fewXm.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-cart-Tv_fewXm.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\nimport { getBeamCartId } from \"../../utils/cart\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n beamCartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"wkBA8BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA4BC,EAAcC,EAAuBT,CAAM,EAEvEU,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,GAAI,UAAAC,EAAY,CAAG,CAAA,EAAI,CAAA,EAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,EACA,WAAAL,CACF,EAGA,OAAO,cAAc,IAAIqB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-o0OWqrXe.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.esm.js";import{createScopedLocalStorage as U}from"../utils/local-storage.esm.js";import{setCookieValue as _}from"../utils/cookies.esm.js";import{getRemoteSession as L}from"../utils/remote-session.esm.js";import{memoizeLast as x}from"../utils/memoize-last.esm.js";import{B as f}from"./cart-contents-h60geKWa.esm.js";import{getBeamCartId as D}from"../utils/cart.esm.js";const R=50,T=y(x(async function(e,c){try{const t=U({apiKey:e.apiKey}),l=e.baseUrl??g,o=t.getItemJson("cart"),a=D(f,e),E=L(e)??void 0,{cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:m,itemCount:i,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:a};if(B(p,{...o,cartId:o?.cartId})||c.itemCount===0&&(!a||o?.itemCount===0))return;const h=await A({baseUrl:l,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:a,storeId:e.storeId,remoteSessionId:E,cartId:r,subtotal:m,itemCount:i,currencyCode:s}}),{beamCartId:n,expiresAt:I,beamCartCreated:w}=h;n&&I&&await _({name:f,domain:e.domain,value:n,path:"/",expires:new Date(I).getTime()}),t.setItemJson("cart",{...p,beamCartId:n});const b={schema:C,content:{items:d,discounts:u},subtotal:m,itemCount:i,currencyCode:s,cartId:r,beamCartId:a};window.dispatchEvent(new K(b)),w&&window.dispatchEvent(new S(b))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
|
|
2
|
-
//# sourceMappingURL=update-cart-YDnJT-2Q.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-cart-YDnJT-2Q.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\nimport { getBeamCartId } from \"../../utils/cart\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n beamCartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"gmBA8BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA4BC,EAAcC,EAAuBT,CAAM,EAEvEU,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,GAAI,UAAAC,EAAY,CAAG,CAAA,EAAI,CAAA,EAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,EACA,WAAAL,CACF,EAGA,OAAO,cAAc,IAAIqB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
|