@beamimpact/web-sdk 1.36.8 → 1.36.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/chunks/{_share-dialog-dependencies-FglfQ7YP.esm.js → _share-dialog-dependencies-KMjpyJhT.esm.js} +2 -2
  2. package/dist/chunks/_share-dialog-dependencies-KMjpyJhT.esm.js.map +1 -0
  3. package/dist/chunks/{_share-dialog-dependencies-YbNiVx56.esm.js → _share-dialog-dependencies-MLhW3eyp.esm.js} +2 -2
  4. package/dist/chunks/_share-dialog-dependencies-MLhW3eyp.esm.js.map +1 -0
  5. package/dist/chunks/{cart-contents-Shc27L1J.esm.d.ts → cart-contents-Z-r5GpWA.esm.d.ts} +1 -1
  6. package/dist/chunks/{events-qTu4iIOo.esm.d.ts → events-q1pdogmn.esm.d.ts} +1 -1
  7. package/dist/chunks/index-0XoQisEb.esm.js +2 -0
  8. package/dist/chunks/index-0XoQisEb.esm.js.map +1 -0
  9. package/dist/chunks/{index-I8DBdgx0.esm.d.ts → index-1yMQlmZQ.esm.d.ts} +1 -1
  10. package/dist/chunks/index-44M_qqUx.esm.js +2 -0
  11. package/dist/chunks/index-44M_qqUx.esm.js.map +1 -0
  12. package/dist/chunks/{index-fqDBrscF.esm.js → index-58VYn82f.esm.js} +2 -2
  13. package/dist/chunks/{index-fqDBrscF.esm.js.map → index-58VYn82f.esm.js.map} +1 -1
  14. package/dist/chunks/index-8Rkw987L.esm.js +2 -0
  15. package/dist/chunks/index-8Rkw987L.esm.js.map +1 -0
  16. package/dist/chunks/{index-GkPHba-I.esm.d.ts → index-DU9Zy88b.esm.d.ts} +1 -1
  17. package/dist/chunks/{index-gULINFkH.esm.js → index-KbG1GoVy.esm.js} +2 -2
  18. package/dist/chunks/{index-gULINFkH.esm.js.map → index-KbG1GoVy.esm.js.map} +1 -1
  19. package/dist/chunks/index-YN68B9ro.esm.js +2 -0
  20. package/dist/chunks/index-YN68B9ro.esm.js.map +1 -0
  21. package/dist/chunks/{index-pDraUd1x.esm.d.ts → index-_XbXZetF.esm.d.ts} +1 -1
  22. package/dist/chunks/{index-3Xf6QzNV.esm.d.ts → index-mrZj61ji.esm.d.ts} +1 -1
  23. package/dist/chunks/index-nb5G3fNW.esm.js +2 -0
  24. package/dist/chunks/index-nb5G3fNW.esm.js.map +1 -0
  25. package/dist/chunks/index-oCRI089I.esm.js +2 -0
  26. package/dist/chunks/index-oCRI089I.esm.js.map +1 -0
  27. package/dist/chunks/{index-EZ_Bg1n7.esm.d.ts → index-vziJysPD.esm.d.ts} +4 -4
  28. package/dist/chunks/{index-wbrSi6cp.esm.d.ts → index-xRdmiNwx.esm.d.ts} +1 -1
  29. package/dist/chunks/{openapi-spec-D_Zzbl2J.esm.d.ts → openapi-spec-S9cYW1SA.esm.d.ts} +80 -2
  30. package/dist/chunks/{order-page-W1jR35W9.esm.js → order-page-OFWAlLqS.esm.js} +2 -2
  31. package/dist/chunks/{order-page-W1jR35W9.esm.js.map → order-page-OFWAlLqS.esm.js.map} +1 -1
  32. package/dist/chunks/{order-page-ydw5uXTI.esm.d.ts → order-page-lfbHIKul.esm.d.ts} +3 -2
  33. package/dist/chunks/{order-page-JdaAppB7.esm.js → order-page-zZ0JffzK.esm.js} +2 -2
  34. package/dist/chunks/{order-page-JdaAppB7.esm.js.map → order-page-zZ0JffzK.esm.js.map} +1 -1
  35. package/dist/chunks/{routes-CqjzL4oL.esm.js → routes-1-1FXngS.esm.js} +2 -2
  36. package/dist/chunks/{routes-CqjzL4oL.esm.js.map → routes-1-1FXngS.esm.js.map} +1 -1
  37. package/dist/chunks/{routes-lsOWIDmE.esm.js → routes-RgILh2Qy.esm.js} +2 -2
  38. package/dist/chunks/{routes-lsOWIDmE.esm.js.map → routes-RgILh2Qy.esm.js.map} +1 -1
  39. package/dist/chunks/{update-cart-yCIzgmve.esm.d.ts → update-cart-9-QjPC1E.esm.d.ts} +1 -1
  40. package/dist/chunks/{update-cart-T32-282v.esm.js → update-cart-EVuB41Qg.esm.js} +2 -2
  41. package/dist/chunks/{update-cart-T32-282v.esm.js.map → update-cart-EVuB41Qg.esm.js.map} +1 -1
  42. package/dist/chunks/{update-cart-yneR8zk1.esm.js → update-cart-V2ysW2LO.esm.js} +2 -2
  43. package/dist/chunks/{update-cart-yneR8zk1.esm.js.map → update-cart-V2ysW2LO.esm.js.map} +1 -1
  44. package/dist/components/community-impact.esm.js +1 -1
  45. package/dist/components/community-impact.js +1 -1
  46. package/dist/components/cumulative-impact.esm.js +1 -1
  47. package/dist/components/cumulative-impact.js +1 -1
  48. package/dist/components/impact-overview.esm.js +1 -1
  49. package/dist/components/impact-overview.js +1 -1
  50. package/dist/components/index.d.ts +2 -2
  51. package/dist/components/index.esm.js +1 -1
  52. package/dist/components/index.js +1 -1
  53. package/dist/components/post-purchase.d.ts +3 -3
  54. package/dist/components/post-purchase.esm.js +1 -1
  55. package/dist/components/post-purchase.js +1 -1
  56. package/dist/components/redeem-transaction.d.ts +3 -3
  57. package/dist/components/redeem-transaction.esm.js +1 -1
  58. package/dist/components/redeem-transaction.js +1 -1
  59. package/dist/components/select-nonprofit.d.ts +3 -3
  60. package/dist/components/select-nonprofit.esm.js +1 -1
  61. package/dist/components/select-nonprofit.js +1 -1
  62. package/dist/components/shopify.d.ts +5 -5
  63. package/dist/components/shopify.esm.js +1 -1
  64. package/dist/components/shopify.js +1 -1
  65. package/dist/components/subscription-management.d.ts +19 -6
  66. package/dist/components/subscription-management.esm.js +6 -6
  67. package/dist/components/subscription-management.esm.js.map +1 -1
  68. package/dist/components/subscription-management.js +6 -6
  69. package/dist/components/subscription-management.js.map +1 -1
  70. package/dist/index.d.ts +11 -11
  71. package/dist/index.esm.js +1 -1
  72. package/dist/index.js +1 -1
  73. package/dist/integrations/beam.esm.js +1 -1
  74. package/dist/integrations/beam.js +1 -1
  75. package/dist/integrations/cart.d.ts +3 -3
  76. package/dist/integrations/cart.esm.js +1 -1
  77. package/dist/integrations/cart.js +1 -1
  78. package/dist/integrations/index.d.ts +9 -9
  79. package/dist/integrations/index.esm.js +1 -1
  80. package/dist/integrations/index.js +1 -1
  81. package/dist/integrations/logs.d.ts +2 -2
  82. package/dist/integrations/logs.esm.js +1 -1
  83. package/dist/integrations/logs.js +1 -1
  84. package/dist/integrations/shopify.d.ts +4 -4
  85. package/dist/integrations/shopify.esm.js +1 -1
  86. package/dist/integrations/shopify.js +1 -1
  87. package/dist/integrations/statsig.esm.js +1 -1
  88. package/dist/integrations/statsig.js +1 -1
  89. package/dist/integrations/utils.d.ts +3 -3
  90. package/dist/react/community-impact.esm.js +1 -1
  91. package/dist/react/community-impact.js +1 -1
  92. package/dist/react/cumulative-impact.esm.js +1 -1
  93. package/dist/react/cumulative-impact.js +1 -1
  94. package/dist/react/impact-overview.esm.js +1 -1
  95. package/dist/react/impact-overview.js +1 -1
  96. package/dist/react/index.d.ts +3 -3
  97. package/dist/react/index.esm.js +1 -1
  98. package/dist/react/index.js +1 -1
  99. package/dist/react/post-purchase.d.ts +2 -2
  100. package/dist/react/post-purchase.esm.js +1 -1
  101. package/dist/react/post-purchase.js +1 -1
  102. package/dist/react/redeem-transaction.d.ts +3 -3
  103. package/dist/react/redeem-transaction.esm.js +1 -1
  104. package/dist/react/redeem-transaction.js +1 -1
  105. package/dist/react/select-nonprofit.d.ts +3 -3
  106. package/dist/react/select-nonprofit.esm.js +1 -1
  107. package/dist/react/select-nonprofit.js +1 -1
  108. package/dist/react/subscription-management.d.ts +2 -2
  109. package/dist/react/subscription-management.esm.js +1 -1
  110. package/dist/react/subscription-management.js +1 -1
  111. package/dist/utils/events.d.ts +3 -3
  112. package/dist/utils/index.d.ts +3 -3
  113. package/package.json +1 -1
  114. package/dist/chunks/_share-dialog-dependencies-FglfQ7YP.esm.js.map +0 -1
  115. package/dist/chunks/_share-dialog-dependencies-YbNiVx56.esm.js.map +0 -1
  116. package/dist/chunks/index-1qXot92e.esm.js +0 -2
  117. package/dist/chunks/index-1qXot92e.esm.js.map +0 -1
  118. package/dist/chunks/index-EpanGShY.esm.js +0 -2
  119. package/dist/chunks/index-EpanGShY.esm.js.map +0 -1
  120. package/dist/chunks/index-XMD0b6ql.esm.js +0 -2
  121. package/dist/chunks/index-XMD0b6ql.esm.js.map +0 -1
  122. package/dist/chunks/index-ll8zLjbu.esm.js +0 -2
  123. package/dist/chunks/index-ll8zLjbu.esm.js.map +0 -1
  124. package/dist/chunks/index-r9Yb1UY4.esm.js +0 -2
  125. package/dist/chunks/index-r9Yb1UY4.esm.js.map +0 -1
  126. package/dist/chunks/index-t4uX5Dg1.esm.js +0 -2
  127. package/dist/chunks/index-t4uX5Dg1.esm.js.map +0 -1
@@ -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-CqjzL4oL.esm.js";import"./beam-errors-P-Lu07Ce.esm.js";import"../utils/logger.js";import"./progress-bar-7gWYaGlq.esm.js";import"./enforce-config-fo8kIfoY.esm.js";import"./localize-pzAAkBvG.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-FglfQ7YP.esm.js.map
1
+ import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-1-1FXngS.esm.js";import"./beam-errors-P-Lu07Ce.esm.js";import"../utils/logger.js";import"./progress-bar-7gWYaGlq.esm.js";import"./enforce-config-fo8kIfoY.esm.js";import"./localize-pzAAkBvG.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-KMjpyJhT.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_share-dialog-dependencies-KMjpyJhT.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-lsOWIDmE.esm.js";import"./beam-errors-P-Lu07Ce.esm.js";import"../utils/logger.esm.js";import"./progress-bar-7gWYaGlq.esm.js";import"./enforce-config-qna7hEL6.esm.js";import"./localize-GCkVUD8S.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-YbNiVx56.esm.js.map
1
+ import"./vendor-eeJfrOkP.esm.js";import"../components/impact-overview.esm.js";import"./lit-yVXn5Cbs.esm.js";import"./lodash-P8OIs-at.esm.js";import"./routes-RgILh2Qy.esm.js";import"./beam-errors-P-Lu07Ce.esm.js";import"../utils/logger.esm.js";import"./progress-bar-7gWYaGlq.esm.js";import"./enforce-config-qna7hEL6.esm.js";import"./localize-GCkVUD8S.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-MLhW3eyp.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_share-dialog-dependencies-MLhW3eyp.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { p as paths } from './openapi-spec-D_Zzbl2J.esm.js';
1
+ import { p as paths } from './openapi-spec-S9cYW1SA.esm.js';
2
2
 
3
3
  type TCartApi = paths["/chain/findEligibleNonprofitsForCart"]["post"]["requestBody"]["content"]["application/json"]["cart"];
4
4
  type TCart = TCartApi & {
@@ -1,4 +1,4 @@
1
- import { a as TCartApi } from './cart-contents-Shc27L1J.esm.js';
1
+ import { a as TCartApi } from './cart-contents-Z-r5GpWA.esm.js';
2
2
  import { c as TId } from './types-7kSi85Gv.esm.js';
3
3
 
4
4
  type NetworkEventDetail = {
@@ -0,0 +1,2 @@
1
+ import{i}from"./index-9gijHGwh.esm.js";import{i as o}from"./index-8Rkw987L.esm.js";import{i as r}from"./index-9YcaEQju.esm.js";import{i as e}from"./index-oCRI089I.esm.js";import{i as m}from"./index-KbG1GoVy.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-0XoQisEb.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-0XoQisEb.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-ydw5uXTI.esm.js';
1
+ import { T as TBeamOrderPageParams, a as addBeamAttributesToCart, g as getCurrentCart, r as registerCartIntegration, s as showBeamOrderPageWidgets, t as trackCart } from './order-page-lfbHIKul.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{x as e}from"./update-cart-EVuB41Qg.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
+ //# sourceMappingURL=index-44M_qqUx.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-44M_qqUx.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{a as i,e as n}from"./routes-CqjzL4oL.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-fqDBrscF.esm.js.map
1
+ import{a as i,e as n}from"./routes-1-1FXngS.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-58VYn82f.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-fqDBrscF.esm.js","sources":["../../src/integrations/logs/index.ts"],"sourcesContent":["import { postLogs } from \"../../api-sdk/v3/routes\";\nimport { paths } from \"../../api-sdk/v3/openapi-spec\";\nimport { logger } from \"../../utils/logger\";\nimport { DEFAULT_LOG_URL } from \"../../api-sdk/constants\";\n\ntype PostLogsReq = paths[\"/logs\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\n\ninterface SendLogConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport async function sendLog(config: SendLogConfig, payload: PostLogsReq): Promise<void> {\n const { apiKey, baseUrl } = config;\n try {\n await postLogs({\n baseUrl: baseUrl || DEFAULT_LOG_URL,\n headers: {\n authorization: `Api-Key ${apiKey}`,\n },\n requestBody: {\n ...payload,\n },\n });\n } catch (err) {\n logger.error(\"Failed to send log\", err);\n }\n}\n"],"names":["sendLog","config","payload","apiKey","baseUrl","postLogs","DEFAULT_LOG_URL","err","logger"],"mappings":"gGAYA,eAAsBA,EAAQC,EAAuBC,EAAqC,CACxF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,EAAIH,EAC5B,GAAI,CACF,MAAMI,EAAS,CACb,QAASD,GAAWE,EACpB,QAAS,CACP,cAAe,WAAWH,CAAM,EAClC,EACA,YAAa,CACX,GAAGD,CACL,CACF,CAAC,CACH,OAASK,EAAK,CACZC,EAAO,MAAM,qBAAsBD,CAAG,CACxC,CACF"}
1
+ {"version":3,"file":"index-58VYn82f.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"}
@@ -0,0 +1,2 @@
1
+ import{h as e,C as r,O as t,s as a,L as o}from"./order-page-zZ0JffzK.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-8Rkw987L.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-8Rkw987L.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { b as beamErrors } from './beam-errors-fXDkG1zo.esm.js';
2
- import { e as events } from './events-qTu4iIOo.esm.js';
2
+ import { e as events } from './events-q1pdogmn.esm.js';
3
3
  import { logger } from '../utils/logger.js';
4
4
  import { fetchProxy, initNetworkListeners, xhrProxy } from '../utils/network-listeners.js';
5
5
  import { createScopedLocalStorage } from '../utils/local-storage.js';
@@ -1,2 +1,2 @@
1
- import{a as i,e as n}from"./routes-lsOWIDmE.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-gULINFkH.esm.js.map
1
+ import{a as i,e as n}from"./routes-RgILh2Qy.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-KbG1GoVy.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-gULINFkH.esm.js","sources":["../../src/integrations/logs/index.ts"],"sourcesContent":["import { postLogs } from \"../../api-sdk/v3/routes\";\nimport { paths } from \"../../api-sdk/v3/openapi-spec\";\nimport { logger } from \"../../utils/logger\";\nimport { DEFAULT_LOG_URL } from \"../../api-sdk/constants\";\n\ntype PostLogsReq = paths[\"/logs\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\n\ninterface SendLogConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport async function sendLog(config: SendLogConfig, payload: PostLogsReq): Promise<void> {\n const { apiKey, baseUrl } = config;\n try {\n await postLogs({\n baseUrl: baseUrl || DEFAULT_LOG_URL,\n headers: {\n authorization: `Api-Key ${apiKey}`,\n },\n requestBody: {\n ...payload,\n },\n });\n } catch (err) {\n logger.error(\"Failed to send log\", err);\n }\n}\n"],"names":["sendLog","config","payload","apiKey","baseUrl","postLogs","DEFAULT_LOG_URL","err","logger"],"mappings":"oGAYA,eAAsBA,EAAQC,EAAuBC,EAAqC,CACxF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,EAAIH,EAC5B,GAAI,CACF,MAAMI,EAAS,CACb,QAASD,GAAWE,EACpB,QAAS,CACP,cAAe,WAAWH,CAAM,EAClC,EACA,YAAa,CACX,GAAGD,CACL,CACF,CAAC,CACH,OAASK,EAAK,CACZC,EAAO,MAAM,qBAAsBD,CAAG,CACxC,CACF"}
1
+ {"version":3,"file":"index-KbG1GoVy.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{i}from"./index-wsdeaTHd.esm.js";import{i as o}from"./index-nb5G3fNW.esm.js";import{i as r}from"./index-Z1UUeVXR.esm.js";import{i as e}from"./index-44M_qqUx.esm.js";import{i as m}from"./index-58VYn82f.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-YN68B9ro.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-YN68B9ro.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { b as beamErrors } from './beam-errors-fXDkG1zo.esm.js';
2
- import { e as events } from './events-qTu4iIOo.esm.js';
2
+ import { e as events } from './events-q1pdogmn.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,4 +1,4 @@
1
- import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-yCIzgmve.esm.js';
1
+ import { B as BeamCartAPIConfig, a as BeamCartValues, u as updateCart } from './update-cart-9-QjPC1E.esm.js';
2
2
 
3
3
  declare const index_BeamCartAPIConfig: typeof BeamCartAPIConfig;
4
4
  declare const index_BeamCartValues: typeof BeamCartValues;
@@ -0,0 +1,2 @@
1
+ import{h as e,C as r,O as t,s as a,L as o}from"./order-page-OFWAlLqS.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-nb5G3fNW.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-nb5G3fNW.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{x as e}from"./update-cart-V2ysW2LO.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
+ //# sourceMappingURL=index-oCRI089I.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-oCRI089I.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,8 +1,8 @@
1
- import { i as index$5 } from './index-pDraUd1x.esm.js';
2
- import { i as index$4 } from './index-I8DBdgx0.esm.js';
1
+ import { i as index$5 } from './index-DU9Zy88b.esm.js';
2
+ import { i as index$4 } from './index-1yMQlmZQ.esm.js';
3
3
  import { i as index$3 } from './index-EGiUuWe-.esm.js';
4
- import { i as index$1 } from './index-3Xf6QzNV.esm.js';
5
- import { i as index$2 } from './index-wbrSi6cp.esm.js';
4
+ import { i as index$1 } from './index-mrZj61ji.esm.js';
5
+ import { i as index$2 } from './index-xRdmiNwx.esm.js';
6
6
 
7
7
  /**
8
8
  * This file is used to provide type definitions
@@ -1,4 +1,4 @@
1
- import { p as paths } from './openapi-spec-D_Zzbl2J.esm.js';
1
+ import { p as paths } from './openapi-spec-S9cYW1SA.esm.js';
2
2
 
3
3
  type PostLogsReq = paths["/logs"]["post"]["requestBody"]["content"]["application/json"];
4
4
  interface SendLogConfig {
@@ -1807,6 +1807,8 @@ interface paths {
1807
1807
  /** @description The amount in the cart */
1808
1808
  cartTotal?: number;
1809
1809
  discountCodes?: string[];
1810
+ /** @enum {string} */
1811
+ creationMethod?: "recurring";
1810
1812
  };
1811
1813
  };
1812
1814
  };
@@ -2241,6 +2243,8 @@ interface paths {
2241
2243
  countryCode?: string;
2242
2244
  isCanceled?: boolean;
2243
2245
  discountCodes?: string[];
2246
+ /** @enum {string} */
2247
+ creationMethod?: "recurring";
2244
2248
  cart?: {
2245
2249
  schema: {
2246
2250
  /** @enum {string} */
@@ -2383,7 +2387,23 @@ interface paths {
2383
2387
  };
2384
2388
  };
2385
2389
  };
2386
- "/subscriptions/findSubscriptionByRemoteId": {
2390
+ "/subscriptions/cancelSubscription": {
2391
+ post: {
2392
+ responses: {
2393
+ /** Subscription updated */
2394
+ 200: unknown;
2395
+ };
2396
+ requestBody: {
2397
+ content: {
2398
+ "application/json": {
2399
+ /** @description Id derived from partner services. Not the Beam subscription ID. */
2400
+ remoteSubscriptionId: string;
2401
+ };
2402
+ };
2403
+ };
2404
+ };
2405
+ };
2406
+ "/subscriptions/findOrCreateSubscription": {
2387
2407
  post: {
2388
2408
  responses: {
2389
2409
  /** Sends subscription info along with corresponding nonprofit and cause data */
@@ -2392,6 +2412,7 @@ interface paths {
2392
2412
  "application/json": {
2393
2413
  beamUserId: string;
2394
2414
  remoteSubscriptionId: string;
2415
+ internalSubscriptionId: string;
2395
2416
  nonprofit: {
2396
2417
  /**
2397
2418
  * @description Numeric ID
@@ -2429,9 +2450,66 @@ interface paths {
2429
2450
  };
2430
2451
  requestBody: {
2431
2452
  content: {
2432
- "application/json": {
2453
+ "application/json": Partial<{
2454
+ remoteSubscriptionId: string;
2455
+ partnerUserId: string;
2456
+ }> & Partial<{
2433
2457
  remoteSubscriptionId: string;
2434
2458
  email: string;
2459
+ }>;
2460
+ };
2461
+ };
2462
+ };
2463
+ };
2464
+ "/subscriptions/findSubscriptionByRemoteId": {
2465
+ post: {
2466
+ responses: {
2467
+ /** Sends subscription info along with corresponding nonprofit and cause data */
2468
+ 200: {
2469
+ content: {
2470
+ "application/json": {
2471
+ beamUserId: string | null;
2472
+ remoteSubscriptionId: string;
2473
+ internalSubscriptionId: string | null;
2474
+ nonprofit: {
2475
+ /**
2476
+ * @description Numeric ID
2477
+ * @example 1001
2478
+ */
2479
+ id: number;
2480
+ } | null;
2481
+ };
2482
+ };
2483
+ };
2484
+ /** Standard error */
2485
+ default: {
2486
+ content: {
2487
+ "application/json": {
2488
+ /** @description Beam code for the error, meant to be used programmatically */
2489
+ code: string;
2490
+ /** @description A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization */
2491
+ title: string;
2492
+ /** @description A human-readable explanation specific to this occurrence of the problem. Like title, this field's value can be localized */
2493
+ detail: string;
2494
+ /** @description a JSON Pointer to the associated entity in the request document */
2495
+ field?: string;
2496
+ /** @description A meta object containing non-standard meta-information about the error */
2497
+ metadata?: {
2498
+ [key: string]: unknown;
2499
+ };
2500
+ /** @description Whether the API or user can resend the request */
2501
+ retryable?: boolean;
2502
+ } & {
2503
+ source: unknown;
2504
+ meta: unknown;
2505
+ };
2506
+ };
2507
+ };
2508
+ };
2509
+ requestBody: {
2510
+ content: {
2511
+ "application/json": {
2512
+ remoteSubscriptionId: string;
2435
2513
  };
2436
2514
  };
2437
2515
  };
@@ -1,2 +1,2 @@
1
- import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.js";import{createScopedLocalStorage as _}from"../utils/local-storage.js";import{getCookieValue as w}from"../utils/cookies.js";import{memoizeLast as A}from"../utils/memoize-last.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-T32-282v.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-CqjzL4oL.esm.js";import{waitForElement as J}from"../utils/wait-for-element.js";import{B as x}from"./beam-errors-P-Lu07Ce.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
- //# sourceMappingURL=order-page-W1jR35W9.esm.js.map
1
+ import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.js";import{createScopedLocalStorage as _}from"../utils/local-storage.js";import{getCookieValue as w}from"../utils/cookies.js";import{memoizeLast as A}from"../utils/memoize-last.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-EVuB41Qg.esm.js";import"../components/post-purchase.js";import{D as k}from"./routes-1-1FXngS.esm.js";import{waitForElement as J}from"../utils/wait-for-element.js";import{B as x}from"./beam-errors-P-Lu07Ce.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
+ //# sourceMappingURL=order-page-OFWAlLqS.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-page-W1jR35W9.esm.js","sources":["../../src/integrations/shopify/cart-page.ts","../../src/integrations/shopify/order-page.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet isBeamCartIntegrationRegistered = false; // Skip registering event listeners if already set up\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\n }\n\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n const currentCart = await getCurrentCart(config);\n await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\n window.addEventListener(BeamNetworkCallEvent.eventName, async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await updateCart(config, currentCart.cart);\n });\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\n\n isBeamCartIntegrationRegistered = true;\n\n return true;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n } = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n\n const cart = {\n cartId: token,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n const beamCartAttrs = {\n beam: JSON.stringify({\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n }),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\n","import \"../../components/post-purchase\";\nimport { postTransaction } from \"../../api-sdk/v3/routes\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { LANGUAGES, TUrl } from \"../../api-sdk/types\";\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { TCart } from \"../../shared/cart-contents\";\n\n// Shopify admin page: admin/settings/checkout\n\nexport type TBeamOrderPageParams = Parameters<typeof postTransaction>[0][\"requestBody\"] & {\n // Either storeId or postalCode + countryCode must be provided\n storeId?: number;\n postalCode?: string;\n countryCode?: string;\n orderId: string;\n email: string;\n cartTotal: number;\n cart: TCart;\n discountCodes: string[];\n currencyCode: string;\n parentSelector: string; // CSS Selector for parent of widget to be inserted into DOM\n apiKey: string;\n baseUrl: TUrl;\n domain?: string; // Base domain for setting cookies\n lang: LANGUAGES;\n debug: boolean;\n};\n\nexport async function showBeamOrderPageWidgets({\n parentSelector = \".step__sections\",\n apiKey,\n baseUrl = DEFAULT_BASE_URL,\n storeId,\n postalCode,\n countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\n currencyCode = \"USD\",\n domain,\n lang = \"en\",\n debug = false,\n}: TBeamOrderPageParams) {\n const parentElement = document.querySelector(parentSelector) || (await waitForElement(parentSelector));\n if (!parentElement) {\n throw new BeamError(\n `Timed out waiting for selector '${parentSelector}'. Could not render Beam post-purchase widget.`\n );\n }\n\n // If checkout and order page are on different subdomains, we can't access localStorage\n // We can make postTransaction work by copying the cart cookie to the expected localStorage key on the current domain\n const cartId = await getCookieValue(\"cart\"); // Shopify-only cart identifier\n if (cartId) {\n const beamLocalStorage = createScopedLocalStorage({ apiKey });\n const existingValue = beamLocalStorage.getItemJson(\"cart\") || {};\n beamLocalStorage.setItemJson(\"cart\", { ...existingValue, cartId });\n }\n\n // Note: assign properties one by one instead of bulk Object.assign to type check assignments\n const widget = document.createElement(\"beam-post-purchase\");\n widget.apiKey = apiKey;\n widget.baseUrl = baseUrl;\n widget.storeId = storeId;\n widget.postalCode = postalCode;\n widget.countryCode = countryCode;\n widget.orderId = String(orderId);\n widget.email = email;\n widget.cartTotal = cartTotal;\n widget.cart = cart;\n widget.discountCodes = discountCodes;\n widget.currencyCode = currencyCode;\n widget.domain = domain;\n widget.lang = lang;\n widget.debug = debug;\n\n // Insert widget into DOM\n parentElement.appendChild(widget);\n}\n"],"names":["SHOPIFY_BASE_URL","isBeamCartIntegrationRegistered","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"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"}
1
+ {"version":3,"file":"order-page-OFWAlLqS.esm.js","sources":["../../src/integrations/shopify/cart-page.ts","../../src/integrations/shopify/order-page.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet isBeamCartIntegrationRegistered = false; // Skip registering event listeners if already set up\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\n }\n\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n const currentCart = await getCurrentCart(config);\n await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\n window.addEventListener(BeamNetworkCallEvent.eventName, async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await updateCart(config, currentCart.cart);\n });\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\n\n isBeamCartIntegrationRegistered = true;\n\n return true;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n } = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n\n const cart = {\n cartId: token,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n const beamCartAttrs = {\n beam: JSON.stringify({\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n }),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\n","import \"../../components/post-purchase\";\nimport { postTransaction } from \"../../api-sdk/v3/routes\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { LANGUAGES, TUrl } from \"../../api-sdk/types\";\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { TCart } from \"../../shared/cart-contents\";\n\n// Shopify admin page: admin/settings/checkout\n\nexport type TBeamOrderPageParams = Parameters<typeof postTransaction>[0][\"requestBody\"] & {\n // Either storeId or postalCode + countryCode must be provided\n storeId?: number;\n postalCode?: string;\n countryCode?: string;\n orderId: string;\n email: string;\n cartTotal: number;\n cart: TCart;\n discountCodes: string[];\n currencyCode: string;\n parentSelector: string; // CSS Selector for parent of widget to be inserted into DOM\n apiKey: string;\n baseUrl: TUrl;\n domain?: string; // Base domain for setting cookies\n lang: LANGUAGES;\n debug: boolean;\n};\n\nexport async function showBeamOrderPageWidgets({\n parentSelector = \".step__sections\",\n apiKey,\n baseUrl = DEFAULT_BASE_URL,\n storeId,\n postalCode,\n countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\n currencyCode = \"USD\",\n domain,\n lang = \"en\",\n debug = false,\n}: TBeamOrderPageParams) {\n const parentElement = document.querySelector(parentSelector) || (await waitForElement(parentSelector));\n if (!parentElement) {\n throw new BeamError(\n `Timed out waiting for selector '${parentSelector}'. Could not render Beam post-purchase widget.`\n );\n }\n\n // If checkout and order page are on different subdomains, we can't access localStorage\n // We can make postTransaction work by copying the cart cookie to the expected localStorage key on the current domain\n const cartId = await getCookieValue(\"cart\"); // Shopify-only cart identifier\n if (cartId) {\n const beamLocalStorage = createScopedLocalStorage({ apiKey });\n const existingValue = beamLocalStorage.getItemJson(\"cart\") || {};\n beamLocalStorage.setItemJson(\"cart\", { ...existingValue, cartId });\n }\n\n // Note: assign properties one by one instead of bulk Object.assign to type check assignments\n const widget = document.createElement(\"beam-post-purchase\");\n widget.apiKey = apiKey;\n widget.baseUrl = baseUrl;\n widget.storeId = storeId;\n widget.postalCode = postalCode;\n widget.countryCode = countryCode;\n widget.orderId = String(orderId);\n widget.email = email;\n widget.cartTotal = cartTotal;\n widget.cart = cart;\n widget.discountCodes = discountCodes;\n widget.currencyCode = currencyCode;\n widget.domain = domain;\n widget.lang = lang;\n widget.debug = debug;\n\n // Insert widget into DOM\n parentElement.appendChild(widget);\n}\n"],"names":["SHOPIFY_BASE_URL","isBeamCartIntegrationRegistered","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as lodash from 'lodash';
2
- import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-yCIzgmve.esm.js';
3
- import { T as TCart } from './cart-contents-Shc27L1J.esm.js';
2
+ import { B as BeamCartAPIConfig, a as BeamCartValues } from './update-cart-9-QjPC1E.esm.js';
3
+ import { T as TCart } from './cart-contents-Z-r5GpWA.esm.js';
4
4
  import '../components/post-purchase.js';
5
5
  import { T as TUrl, L as LANGUAGES } from './types-aju0qrRe.esm.js';
6
6
 
@@ -165,6 +165,7 @@ declare const postTransaction: ({ headers, baseUrl, apiRoot, pathParams, queryPa
165
165
  } | undefined;
166
166
  cartTotal?: number | undefined;
167
167
  discountCodes?: string[] | undefined;
168
+ creationMethod?: "recurring" | undefined;
168
169
  } | undefined;
169
170
  headers?: Record<string, string> | undefined;
170
171
  }) => Promise<{
@@ -1,2 +1,2 @@
1
- import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as _}from"../utils/local-storage.esm.js";import{getCookieValue as w}from"../utils/cookies.esm.js";import{memoizeLast as A}from"../utils/memoize-last.esm.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-yneR8zk1.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-lsOWIDmE.esm.js";import{waitForElement as J}from"../utils/wait-for-element.esm.js";import{B as x}from"./beam-errors-P-Lu07Ce.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
- //# sourceMappingURL=order-page-JdaAppB7.esm.js.map
1
+ import{i as L}from"./lodash-P8OIs-at.esm.js";import{d as T,f as v,c as O}from"./events-5IECSF-x.esm.js";import{initNetworkListeners as U}from"../utils/network-listeners.esm.js";import{createScopedLocalStorage as _}from"../utils/local-storage.esm.js";import{getCookieValue as w}from"../utils/cookies.esm.js";import{memoizeLast as A}from"../utils/memoize-last.esm.js";import{B as j}from"./cart-contents-h60geKWa.esm.js";import{x as h}from"./update-cart-V2ysW2LO.esm.js";import"../components/post-purchase.esm.js";import{D as k}from"./routes-RgILh2Qy.esm.js";import{waitForElement as J}from"../utils/wait-for-element.esm.js";import{B as x}from"./beam-errors-P-Lu07Ce.esm.js";const E=window.Shopify?.routes?.root||"/";let b=!1;const K="cart";async function R(e){if(b)return!1;const c=await I(e);await h(e,c.cart),U(),window.addEventListener(T.eventName,async i=>{const n=i,o=/cart\/(add|change|update|clear)/,r=n.detail.type==="xhr"?n.detail.xhr.responseURL:n.detail.response.url,m=new URL(r);if(!o.test(m.pathname))return;const a=await I(e);if(!a.changed)return;const p={schema:a.cart.schema,content:{items:a.cart.content.items}};window.dispatchEvent(new v(p)),await h(e,a.cart)});let s,d;return window.addEventListener(O.eventName,async i=>{const n=i,{selectedNonprofitId:o,selectionId:r}=n.detail,m=await w(K),a=await w(j),{chainId:p,storeId:l}=e;s===o&&d===r||(await S({selectedNonprofitId:o,selectionId:r,beamCartId:a,cartId:m,chainId:p,storeId:l}),d=r,s=o)}),b=!0,!0}async function I(e){const{token:c,total_price:s,item_count:d,currency:i,items:n}=await window.fetch(E+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(a=>a.json()),o={cartId:c,subtotal:s/100,itemCount:d,currencyCode:i,schema:{source:"generic"},content:{items:n.map(({sku:a,final_line_price:p,product_id:l})=>{const u=a||String(l),f=p/100;return{remoteProductIdentifier:u,localAmount:f}})}};let r=!1;const m=_(e).getItemJson("cart");return L(o,m)||(r=!0),{changed:r,cart:o}}const D=h,S=A(async function({selectedNonprofitId:e,selectionId:c,beamCartId:s,cartId:d,chainId:i,storeId:n}){const o={beam:JSON.stringify({nonprofit_id:e,selection_id:c,beam_cart_id:s,shopify_cart_id:d,chain_id:i,store_id:n})};try{await window.fetch(E+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:o})})}catch(r){console.error(r)}});async function P({parentSelector:e=".step__sections",apiKey:c,baseUrl:s=k,storeId:d,postalCode:i,countryCode:n,orderId:o,email:r,cartTotal:m,cart:a,discountCodes:p,currencyCode:l="USD",domain:u,lang:f="en",debug:N=!1}){const y=document.querySelector(e)||await J(e);if(!y)throw new x(`Timed out waiting for selector '${e}'. Could not render Beam post-purchase widget.`);const C=await w("cart");if(C){const g=_({apiKey:c}),B=g.getItemJson("cart")||{};g.setItemJson("cart",{...B,cartId:C})}const t=document.createElement("beam-post-purchase");t.apiKey=c,t.baseUrl=s,t.storeId=d,t.postalCode=i,t.countryCode=n,t.orderId=String(o),t.email=r,t.cartTotal=m,t.cart=a,t.discountCodes=p,t.currencyCode=l,t.domain=u,t.lang=f,t.debug=N,y.appendChild(t)}export{I as C,D as L,R as O,S as h,P as s};
2
+ //# sourceMappingURL=order-page-zZ0JffzK.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-page-JdaAppB7.esm.js","sources":["../../src/integrations/shopify/cart-page.ts","../../src/integrations/shopify/order-page.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet isBeamCartIntegrationRegistered = false; // Skip registering event listeners if already set up\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\n }\n\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n const currentCart = await getCurrentCart(config);\n await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\n window.addEventListener(BeamNetworkCallEvent.eventName, async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await updateCart(config, currentCart.cart);\n });\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\n\n isBeamCartIntegrationRegistered = true;\n\n return true;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n } = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n\n const cart = {\n cartId: token,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n const beamCartAttrs = {\n beam: JSON.stringify({\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n }),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\n","import \"../../components/post-purchase\";\nimport { postTransaction } from \"../../api-sdk/v3/routes\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { LANGUAGES, TUrl } from \"../../api-sdk/types\";\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { TCart } from \"../../shared/cart-contents\";\n\n// Shopify admin page: admin/settings/checkout\n\nexport type TBeamOrderPageParams = Parameters<typeof postTransaction>[0][\"requestBody\"] & {\n // Either storeId or postalCode + countryCode must be provided\n storeId?: number;\n postalCode?: string;\n countryCode?: string;\n orderId: string;\n email: string;\n cartTotal: number;\n cart: TCart;\n discountCodes: string[];\n currencyCode: string;\n parentSelector: string; // CSS Selector for parent of widget to be inserted into DOM\n apiKey: string;\n baseUrl: TUrl;\n domain?: string; // Base domain for setting cookies\n lang: LANGUAGES;\n debug: boolean;\n};\n\nexport async function showBeamOrderPageWidgets({\n parentSelector = \".step__sections\",\n apiKey,\n baseUrl = DEFAULT_BASE_URL,\n storeId,\n postalCode,\n countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\n currencyCode = \"USD\",\n domain,\n lang = \"en\",\n debug = false,\n}: TBeamOrderPageParams) {\n const parentElement = document.querySelector(parentSelector) || (await waitForElement(parentSelector));\n if (!parentElement) {\n throw new BeamError(\n `Timed out waiting for selector '${parentSelector}'. Could not render Beam post-purchase widget.`\n );\n }\n\n // If checkout and order page are on different subdomains, we can't access localStorage\n // We can make postTransaction work by copying the cart cookie to the expected localStorage key on the current domain\n const cartId = await getCookieValue(\"cart\"); // Shopify-only cart identifier\n if (cartId) {\n const beamLocalStorage = createScopedLocalStorage({ apiKey });\n const existingValue = beamLocalStorage.getItemJson(\"cart\") || {};\n beamLocalStorage.setItemJson(\"cart\", { ...existingValue, cartId });\n }\n\n // Note: assign properties one by one instead of bulk Object.assign to type check assignments\n const widget = document.createElement(\"beam-post-purchase\");\n widget.apiKey = apiKey;\n widget.baseUrl = baseUrl;\n widget.storeId = storeId;\n widget.postalCode = postalCode;\n widget.countryCode = countryCode;\n widget.orderId = String(orderId);\n widget.email = email;\n widget.cartTotal = cartTotal;\n widget.cart = cart;\n widget.discountCodes = discountCodes;\n widget.currencyCode = currencyCode;\n widget.domain = domain;\n widget.lang = lang;\n widget.debug = debug;\n\n // Insert widget into DOM\n parentElement.appendChild(widget);\n}\n"],"names":["SHOPIFY_BASE_URL","isBeamCartIntegrationRegistered","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"gqBAeA,MAAMA,EAAmB,OAAO,SAAS,QAAQ,MAAQ,IAEzD,IAAIC,EAAkC,GAEtC,MAAMC,EAA2B,OAMjC,eAAeC,EAAwBC,EAA0C,CAC/E,GAAIH,EACF,MAAO,GAKT,MAAMI,EAAc,MAAMC,EAAeF,CAAM,EAC/C,MAAMG,EAAWH,EAAQC,EAAY,IAAI,EAGzCG,EAAqB,EAErB,OAAO,iBAAiBC,EAAqB,UAAW,MAAOC,GAAkB,CAC/E,MAAMC,EAAQD,EACRE,EAAkB,kCAElBC,EAAgBF,EAAM,OAAO,OAAS,MAAQA,EAAM,OAAO,IAAI,YAAcA,EAAM,OAAO,SAAS,IACnGG,EAAM,IAAI,IAAID,CAAa,EACjC,GAAI,CAACD,EAAgB,KAAKE,EAAI,QAAQ,EACpC,OAEF,MAAMT,EAAc,MAAMC,EAAeF,CAAM,EAC/C,GAAI,CAACC,EAAY,QACf,OAEF,MAAMU,EAAwB,CAC5B,OAAQV,EAAY,KAAK,OACzB,QAAS,CACP,MAAOA,EAAY,KAAK,QAAQ,KAClC,CACF,EACA,OAAO,cAAc,IAAIW,EAAoBD,CAAW,CAAC,EAEzD,MAAMR,EAAWH,EAAQC,EAAY,IAAI,CAC3C,CAAC,EAGD,IAAIY,EACAC,EACJ,OAAA,OAAO,iBAAiBC,EAAyB,UAAW,MAAOT,GAAW,CAC5E,MAAMC,EAAQD,EACR,CAAE,oBAAAU,EAAqB,YAAAC,CAAY,EAAIV,EAAM,OAC7CW,EAAS,MAAMC,EAAerB,CAAwB,EACtDsB,EAAa,MAAMD,EAAeE,CAAqB,EACvD,CAAE,QAAAC,EAAS,QAAAC,CAAQ,EAAIvB,EAGzBa,IAAoBG,GAAuBF,IAAoBG,IAGnE,MAAMO,EAAwB,CAC5B,oBAAAR,EACA,YAAAC,EACA,WAAAG,EACA,OAAAF,EACA,QAAAI,EACA,QAAAC,CACF,CAAC,EACDT,EAAkBG,EAClBJ,EAAkBG,EACpB,CAAC,EAEDnB,EAAkC,GAE3B,EACT,CAcA,eAAeK,EAAeF,EAQ3B,CACD,KAAM,CACJ,MAAAyB,EACA,YAAAC,EACA,WAAAC,EACA,SAAAC,EACA,MAAAC,CACF,EAAI,MAAM,OACP,MAAMjC,EAAmB,UAAW,CACnC,OAAQ,MACR,QAAS,CAAE,eAAgB,kBAAmB,CAChD,CAAC,EACA,KAAMkC,GAAQA,EAAI,KAAM,CAAA,EAErBC,EAAO,CACX,OAAQN,EACR,SAAUC,EAAc,IACxB,UAAWC,EACX,aAAcC,EACd,OAAQ,CAAE,OAAQ,SAAU,EAC5B,QAAS,CAEP,MAAQC,EAAqB,IAAI,CAAC,CAAE,IAAAG,EAAK,iBAAAC,EAAkB,WAAAC,CAAW,IAAM,CAC1E,MAAMC,EAA0BH,GAAO,OAAOE,CAAU,EAClDE,EAAcH,EAAmB,IACvC,MAAO,CAAE,wBAAAE,EAAyB,YAAAC,CAAY,CAChD,CAAC,CACH,CACF,EAEA,IAAIC,EAAU,GAId,MAAMC,EAFeC,EAAyBvC,CAAM,EAEpB,YAAY,MAAM,EAElD,OAAKwC,EAAQT,EAAMO,CAAU,IAC3BD,EAAU,IAGL,CAAE,QAAAA,EAAS,KAAAN,CAAK,CACzB,OAKMU,EAAYtC,EAMZqB,EAA0BkB,EAAY,eAAuC,CACjF,oBAAA1B,EACA,YAAAC,EACA,WAAAG,EACA,OAAAF,EACA,QAAAI,EACA,QAAAC,CACF,EAOG,CACD,MAAMoB,EAAgB,CACpB,KAAM,KAAK,UAAU,CACnB,aAAc3B,EACd,aAAcC,EACd,aAAcG,EACd,gBAAiBF,EACjB,SAAUI,EACV,SAAUC,CACZ,CAAC,CACH,EAEA,GAAI,CACF,MAAM,OAAO,MAAM3B,EAAmB,iBAAkB,CACtD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,WAAY+C,CAAc,CAAC,CACpD,CAAC,CACH,OAASC,EAAK,CACZ,QAAQ,MAAMA,CAAG,CACnB,CACF,CAAC,iBCzKqBC,EAAyB,CAC7C,eAAAC,EAAiB,kBACjB,OAAAC,EACA,QAAAC,EAAUC,EACV,QAAA1B,EACA,WAAA2B,EACA,YAAAC,EACA,QAAAC,EACA,MAAAC,EACA,UAAAC,EACA,KAAAvB,EACA,cAAAwB,EACA,aAAAC,EAAe,MACf,OAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EAAQ,EACV,EAAyB,CACvB,MAAMC,EAAgB,SAAS,cAAcd,CAAc,GAAM,MAAMe,EAAef,CAAc,EACpG,GAAI,CAACc,EACH,MAAM,IAAIE,EACR,mCAAmChB,CAAc,gDACnD,EAKF,MAAM5B,EAAS,MAAMC,EAAe,MAAM,EAC1C,GAAID,EAAQ,CACV,MAAM6C,EAAmBxB,EAAyB,CAAE,OAAAQ,CAAO,CAAC,EACtDiB,EAAgBD,EAAiB,YAAY,MAAM,GAAK,CAAC,EAC/DA,EAAiB,YAAY,OAAQ,CAAE,GAAGC,EAAe,OAAA9C,CAAO,CAAC,CACnE,CAGA,MAAM+C,EAAS,SAAS,cAAc,oBAAoB,EAC1DA,EAAO,OAASlB,EAChBkB,EAAO,QAAUjB,EACjBiB,EAAO,QAAU1C,EACjB0C,EAAO,WAAaf,EACpBe,EAAO,YAAcd,EACrBc,EAAO,QAAU,OAAOb,CAAO,EAC/Ba,EAAO,MAAQZ,EACfY,EAAO,UAAYX,EACnBW,EAAO,KAAOlC,EACdkC,EAAO,cAAgBV,EACvBU,EAAO,aAAeT,EACtBS,EAAO,OAASR,EAChBQ,EAAO,KAAOP,EACdO,EAAO,MAAQN,EAGfC,EAAc,YAAYK,CAAM,CAClC"}
1
+ {"version":3,"file":"order-page-zZ0JffzK.esm.js","sources":["../../src/integrations/shopify/cart-page.ts","../../src/integrations/shopify/order-page.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport { memoizeLast } from \"../../utils\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { initNetworkListeners } from \"../../utils/network-listeners\";\nimport { BeamCartChangeEvent, BeamNetworkCallEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TCart, TCartApi, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\n\ntype BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet isBeamCartIntegrationRegistered = false; // Skip registering event listeners if already set up\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(config: BeamShopifyCartIntegrationConfig) {\n if (isBeamCartIntegrationRegistered) {\n return false; // Do nothing if listeners are already attached\n }\n\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n const currentCart = await getCurrentCart(config);\n await updateCart(config, currentCart.cart);\n\n // Set up event listeners for AJAX events\n initNetworkListeners();\n\n window.addEventListener(BeamNetworkCallEvent.eventName, async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n const currentCart = await getCurrentCart(config);\n if (!currentCart.changed) {\n return;\n }\n const eventDetail: TCartApi = {\n schema: currentCart.cart.schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: currentCart.cart.content.items as any,\n },\n };\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n await updateCart(config, currentCart.cart);\n });\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n const cartId = await getCookieValue(SHOPIFY_CART_COOKIE_NAME); // Shopify cart ID cookie\n const beamCartId = await getCookieValue(BEAM_CART_COOKIE_NAME); // Beam cart ID cookie\n const { chainId, storeId } = config;\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n await addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n });\n\n isBeamCartIntegrationRegistered = true;\n\n return true;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(config: BeamShopifyCartIntegrationConfig): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n } = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n\n const cart = {\n cartId: token,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n return { remoteProductIdentifier, localAmount };\n }),\n },\n };\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n const cachedCart = localStorage.getItemJson(\"cart\");\n\n if (!isEqual(cart, cachedCart)) {\n changed = true;\n }\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n const beamCartAttrs = {\n beam: JSON.stringify({\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n }),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n console.error(err); // don't throw, allow later calls to continue\n }\n});\n\nexport { trackCart, getCurrentCart, addBeamAttributesToCart, registerCartIntegration };\n","import \"../../components/post-purchase\";\nimport { postTransaction } from \"../../api-sdk/v3/routes\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { LANGUAGES, TUrl } from \"../../api-sdk/types\";\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { TCart } from \"../../shared/cart-contents\";\n\n// Shopify admin page: admin/settings/checkout\n\nexport type TBeamOrderPageParams = Parameters<typeof postTransaction>[0][\"requestBody\"] & {\n // Either storeId or postalCode + countryCode must be provided\n storeId?: number;\n postalCode?: string;\n countryCode?: string;\n orderId: string;\n email: string;\n cartTotal: number;\n cart: TCart;\n discountCodes: string[];\n currencyCode: string;\n parentSelector: string; // CSS Selector for parent of widget to be inserted into DOM\n apiKey: string;\n baseUrl: TUrl;\n domain?: string; // Base domain for setting cookies\n lang: LANGUAGES;\n debug: boolean;\n};\n\nexport async function showBeamOrderPageWidgets({\n parentSelector = \".step__sections\",\n apiKey,\n baseUrl = DEFAULT_BASE_URL,\n storeId,\n postalCode,\n countryCode,\n orderId,\n email,\n cartTotal,\n cart,\n discountCodes,\n currencyCode = \"USD\",\n domain,\n lang = \"en\",\n debug = false,\n}: TBeamOrderPageParams) {\n const parentElement = document.querySelector(parentSelector) || (await waitForElement(parentSelector));\n if (!parentElement) {\n throw new BeamError(\n `Timed out waiting for selector '${parentSelector}'. Could not render Beam post-purchase widget.`\n );\n }\n\n // If checkout and order page are on different subdomains, we can't access localStorage\n // We can make postTransaction work by copying the cart cookie to the expected localStorage key on the current domain\n const cartId = await getCookieValue(\"cart\"); // Shopify-only cart identifier\n if (cartId) {\n const beamLocalStorage = createScopedLocalStorage({ apiKey });\n const existingValue = beamLocalStorage.getItemJson(\"cart\") || {};\n beamLocalStorage.setItemJson(\"cart\", { ...existingValue, cartId });\n }\n\n // Note: assign properties one by one instead of bulk Object.assign to type check assignments\n const widget = document.createElement(\"beam-post-purchase\");\n widget.apiKey = apiKey;\n widget.baseUrl = baseUrl;\n widget.storeId = storeId;\n widget.postalCode = postalCode;\n widget.countryCode = countryCode;\n widget.orderId = String(orderId);\n widget.email = email;\n widget.cartTotal = cartTotal;\n widget.cart = cart;\n widget.discountCodes = discountCodes;\n widget.currencyCode = currencyCode;\n widget.domain = domain;\n widget.lang = lang;\n widget.debug = debug;\n\n // Insert widget into DOM\n parentElement.appendChild(widget);\n}\n"],"names":["SHOPIFY_BASE_URL","isBeamCartIntegrationRegistered","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","currentCart","getCurrentCart","updateCart","initNetworkListeners","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","eventDetail","BeamCartChangeEvent","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","cartId","getCookieValue","beamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","addBeamAttributesToCart","token","total_price","item_count","currency","items","res","cart","sku","final_line_price","product_id","remoteProductIdentifier","localAmount","changed","cachedCart","createScopedLocalStorage","isEqual","trackCart","memoizeLast","beamCartAttrs","err","showBeamOrderPageWidgets","parentSelector","apiKey","baseUrl","DEFAULT_BASE_URL","postalCode","countryCode","orderId","email","cartTotal","discountCodes","currencyCode","domain","lang","debug","parentElement","waitForElement","BeamError","beamLocalStorage","existingValue","widget"],"mappings":"gqBAeA,MAAMA,EAAmB,OAAO,SAAS,QAAQ,MAAQ,IAEzD,IAAIC,EAAkC,GAEtC,MAAMC,EAA2B,OAMjC,eAAeC,EAAwBC,EAA0C,CAC/E,GAAIH,EACF,MAAO,GAKT,MAAMI,EAAc,MAAMC,EAAeF,CAAM,EAC/C,MAAMG,EAAWH,EAAQC,EAAY,IAAI,EAGzCG,EAAqB,EAErB,OAAO,iBAAiBC,EAAqB,UAAW,MAAOC,GAAkB,CAC/E,MAAMC,EAAQD,EACRE,EAAkB,kCAElBC,EAAgBF,EAAM,OAAO,OAAS,MAAQA,EAAM,OAAO,IAAI,YAAcA,EAAM,OAAO,SAAS,IACnGG,EAAM,IAAI,IAAID,CAAa,EACjC,GAAI,CAACD,EAAgB,KAAKE,EAAI,QAAQ,EACpC,OAEF,MAAMT,EAAc,MAAMC,EAAeF,CAAM,EAC/C,GAAI,CAACC,EAAY,QACf,OAEF,MAAMU,EAAwB,CAC5B,OAAQV,EAAY,KAAK,OACzB,QAAS,CACP,MAAOA,EAAY,KAAK,QAAQ,KAClC,CACF,EACA,OAAO,cAAc,IAAIW,EAAoBD,CAAW,CAAC,EAEzD,MAAMR,EAAWH,EAAQC,EAAY,IAAI,CAC3C,CAAC,EAGD,IAAIY,EACAC,EACJ,OAAA,OAAO,iBAAiBC,EAAyB,UAAW,MAAOT,GAAW,CAC5E,MAAMC,EAAQD,EACR,CAAE,oBAAAU,EAAqB,YAAAC,CAAY,EAAIV,EAAM,OAC7CW,EAAS,MAAMC,EAAerB,CAAwB,EACtDsB,EAAa,MAAMD,EAAeE,CAAqB,EACvD,CAAE,QAAAC,EAAS,QAAAC,CAAQ,EAAIvB,EAGzBa,IAAoBG,GAAuBF,IAAoBG,IAGnE,MAAMO,EAAwB,CAC5B,oBAAAR,EACA,YAAAC,EACA,WAAAG,EACA,OAAAF,EACA,QAAAI,EACA,QAAAC,CACF,CAAC,EACDT,EAAkBG,EAClBJ,EAAkBG,EACpB,CAAC,EAEDnB,EAAkC,GAE3B,EACT,CAcA,eAAeK,EAAeF,EAQ3B,CACD,KAAM,CACJ,MAAAyB,EACA,YAAAC,EACA,WAAAC,EACA,SAAAC,EACA,MAAAC,CACF,EAAI,MAAM,OACP,MAAMjC,EAAmB,UAAW,CACnC,OAAQ,MACR,QAAS,CAAE,eAAgB,kBAAmB,CAChD,CAAC,EACA,KAAMkC,GAAQA,EAAI,KAAM,CAAA,EAErBC,EAAO,CACX,OAAQN,EACR,SAAUC,EAAc,IACxB,UAAWC,EACX,aAAcC,EACd,OAAQ,CAAE,OAAQ,SAAU,EAC5B,QAAS,CAEP,MAAQC,EAAqB,IAAI,CAAC,CAAE,IAAAG,EAAK,iBAAAC,EAAkB,WAAAC,CAAW,IAAM,CAC1E,MAAMC,EAA0BH,GAAO,OAAOE,CAAU,EAClDE,EAAcH,EAAmB,IACvC,MAAO,CAAE,wBAAAE,EAAyB,YAAAC,CAAY,CAChD,CAAC,CACH,CACF,EAEA,IAAIC,EAAU,GAId,MAAMC,EAFeC,EAAyBvC,CAAM,EAEpB,YAAY,MAAM,EAElD,OAAKwC,EAAQT,EAAMO,CAAU,IAC3BD,EAAU,IAGL,CAAE,QAAAA,EAAS,KAAAN,CAAK,CACzB,OAKMU,EAAYtC,EAMZqB,EAA0BkB,EAAY,eAAuC,CACjF,oBAAA1B,EACA,YAAAC,EACA,WAAAG,EACA,OAAAF,EACA,QAAAI,EACA,QAAAC,CACF,EAOG,CACD,MAAMoB,EAAgB,CACpB,KAAM,KAAK,UAAU,CACnB,aAAc3B,EACd,aAAcC,EACd,aAAcG,EACd,gBAAiBF,EACjB,SAAUI,EACV,SAAUC,CACZ,CAAC,CACH,EAEA,GAAI,CACF,MAAM,OAAO,MAAM3B,EAAmB,iBAAkB,CACtD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,WAAY+C,CAAc,CAAC,CACpD,CAAC,CACH,OAASC,EAAK,CACZ,QAAQ,MAAMA,CAAG,CACnB,CACF,CAAC,iBCzKqBC,EAAyB,CAC7C,eAAAC,EAAiB,kBACjB,OAAAC,EACA,QAAAC,EAAUC,EACV,QAAA1B,EACA,WAAA2B,EACA,YAAAC,EACA,QAAAC,EACA,MAAAC,EACA,UAAAC,EACA,KAAAvB,EACA,cAAAwB,EACA,aAAAC,EAAe,MACf,OAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EAAQ,EACV,EAAyB,CACvB,MAAMC,EAAgB,SAAS,cAAcd,CAAc,GAAM,MAAMe,EAAef,CAAc,EACpG,GAAI,CAACc,EACH,MAAM,IAAIE,EACR,mCAAmChB,CAAc,gDACnD,EAKF,MAAM5B,EAAS,MAAMC,EAAe,MAAM,EAC1C,GAAID,EAAQ,CACV,MAAM6C,EAAmBxB,EAAyB,CAAE,OAAAQ,CAAO,CAAC,EACtDiB,EAAgBD,EAAiB,YAAY,MAAM,GAAK,CAAC,EAC/DA,EAAiB,YAAY,OAAQ,CAAE,GAAGC,EAAe,OAAA9C,CAAO,CAAC,CACnE,CAGA,MAAM+C,EAAS,SAAS,cAAc,oBAAoB,EAC1DA,EAAO,OAASlB,EAChBkB,EAAO,QAAUjB,EACjBiB,EAAO,QAAU1C,EACjB0C,EAAO,WAAaf,EACpBe,EAAO,YAAcd,EACrBc,EAAO,QAAU,OAAOb,CAAO,EAC/Ba,EAAO,MAAQZ,EACfY,EAAO,UAAYX,EACnBW,EAAO,KAAOlC,EACdkC,EAAO,cAAgBV,EACvBU,EAAO,aAAeT,EACtBS,EAAO,OAASR,EAChBQ,EAAO,KAAOP,EACdO,EAAO,MAAQN,EAGfC,EAAc,YAAYK,CAAM,CAClC"}
@@ -1,2 +1,2 @@
1
- import{B as E,N as l}from"./beam-errors-P-Lu07Ce.esm.js";import{logger as p}from"../utils/logger.js";var w="1.36.8",C={"@lit/react":"1.0.0","@lukeed/uuid":"2.0.0","@shoelace-style/shoelace":"2.11.2",lit:"2.6.1","lodash-es":"4.17.21","lucide-static":"0.292.0"};async function O(s,a){const c={method:"GET",...a,headers:{"Content-Type":"application/json",Accept:"application/json","X-Beam-Client":"WebSDK","X-Beam-Client-Version":w,...a?.headers},preflightContinue:!0,mode:a?.mode||"cors",body:a?.body!=null?a.body:void 0};let r;try{r=await fetch(s,c)}catch(e){const o=new E(`Network call failed (${c?.method.toUpperCase()} ${s})`);throw o.cause=e,p.error(o,s),o}let n,i;try{i=await r.text(),i&&(n=JSON.parse(i))}catch(e){let o=e;throw e instanceof SyntaxError&&(o=new l(r,n,`Response invalid. Expected JSON. Received: "${i}"`),o.cause=e),p.error(o),o}if(!r.ok){const e=new l(r,n,"Response was not OK");throw p.error(e),e}return n}const u="https://production-central-backend-ne.beamimpact.com",v="https://production.beamimpactlogs.com",R={en:"en",fr:"fr",de:"de",es:"es",it:"it",pl:"pl"},t=(s,a,c)=>({[s]:async function({headers:r={},baseUrl:n=u,apiRoot:i="/api/v3",pathParams:e={},queryParams:o={},requestBody:m}){const h=Object.entries(e).reduce((y,[g,N])=>y.replace(`{${g}}`,N),s),f=JSON.parse(JSON.stringify(o)),d=new URLSearchParams(f).toString(),S=n+i+h+(d&&`?${d}`),b={headers:r,method:a,body:JSON.stringify(m)};return O(S,b)}})[s],U=t("/impact","get"),L=t("/chain/{chainId}/cumulativeImpact","get"),T=t("/selectNonprofit","post"),k=t("/transaction","post"),A=t("/transaction/{transactionId}","put"),B=t("/cart","post"),x=t("/chain/findEligibleNonprofitsForCart","post"),I=t("/logs","post"),J=t("/experimentSession","post"),D=t("/subscriptions/updateSubscriptionNonprofit","post"),F=t("/subscriptions/findSubscriptionByRemoteId","post");export{u as D,R as S,v as a,x as b,k as c,B as d,I as e,T as f,U as g,F as h,A as i,L as j,C as k,J as p,D as u};
2
- //# sourceMappingURL=routes-CqjzL4oL.esm.js.map
1
+ import{B as E,N as l}from"./beam-errors-P-Lu07Ce.esm.js";import{logger as p}from"../utils/logger.js";var w="1.36.9",C={"@lit/react":"1.0.0","@lukeed/uuid":"2.0.0","@shoelace-style/shoelace":"2.11.2",lit:"2.6.1","lodash-es":"4.17.21","lucide-static":"0.292.0"};async function O(s,a){const c={method:"GET",...a,headers:{"Content-Type":"application/json",Accept:"application/json","X-Beam-Client":"WebSDK","X-Beam-Client-Version":w,...a?.headers},preflightContinue:!0,mode:a?.mode||"cors",body:a?.body!=null?a.body:void 0};let r;try{r=await fetch(s,c)}catch(e){const o=new E(`Network call failed (${c?.method.toUpperCase()} ${s})`);throw o.cause=e,p.error(o,s),o}let n,i;try{i=await r.text(),i&&(n=JSON.parse(i))}catch(e){let o=e;throw e instanceof SyntaxError&&(o=new l(r,n,`Response invalid. Expected JSON. Received: "${i}"`),o.cause=e),p.error(o),o}if(!r.ok){const e=new l(r,n,"Response was not OK");throw p.error(e),e}return n}const u="https://production-central-backend-ne.beamimpact.com",v="https://production.beamimpactlogs.com",U={en:"en",fr:"fr",de:"de",es:"es",it:"it",pl:"pl"},t=(s,a,c)=>({[s]:async function({headers:r={},baseUrl:n=u,apiRoot:i="/api/v3",pathParams:e={},queryParams:o={},requestBody:m}){const h=Object.entries(e).reduce((g,[y,N])=>g.replace(`{${y}}`,N),s),f=JSON.parse(JSON.stringify(o)),d=new URLSearchParams(f).toString(),S=n+i+h+(d&&`?${d}`),b={headers:r,method:a,body:JSON.stringify(m)};return O(S,b)}})[s],L=t("/impact","get"),R=t("/chain/{chainId}/cumulativeImpact","get"),T=t("/selectNonprofit","post"),k=t("/transaction","post"),A=t("/transaction/{transactionId}","put"),x=t("/cart","post"),B=t("/chain/findEligibleNonprofitsForCart","post"),J=t("/logs","post"),D=t("/experimentSession","post"),F=t("/subscriptions/updateSubscriptionNonprofit","post"),I=t("/subscriptions/findOrCreateSubscription","post");export{u as D,U as S,v as a,B as b,k as c,x as d,J as e,T as f,L as g,I as h,A as i,R as j,C as k,D as p,F as u};
2
+ //# sourceMappingURL=routes-1-1FXngS.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes-CqjzL4oL.esm.js","sources":["../../src/api-sdk/fetch-json.ts","../../src/api-sdk/constants.ts","../../src/api-sdk/v3/make-openapi-method.ts","../../src/api-sdk/v3/routes.ts"],"sourcesContent":["/**\n * Wrapper over window.fetch that expects/returns JSON\n */\nimport { BeamError, NetworkError } from \"../utils/beam-errors\";\nimport { logger } from \"../utils/logger\";\nimport { version as pkgVersion } from \"../../package.json\";\n\nexport async function fetchJson<T = unknown>(url: RequestInfo, options?: RequestInit): Promise<T> {\n const fetchOptions = {\n method: \"GET\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-Beam-Client\": \"WebSDK\",\n \"X-Beam-Client-Version\": pkgVersion,\n ...options?.headers,\n },\n preflightContinue: true,\n mode: options?.mode || \"cors\",\n body: options?.body != null ? options.body : undefined,\n };\n\n let response;\n try {\n response = await fetch(url, fetchOptions);\n // fetch can throw a TypeError if the server can't be reached, catch and log below\n } catch (err) {\n const error = new BeamError(`Network call failed (${fetchOptions?.method.toUpperCase()} ${url})`);\n error.cause = err;\n logger.error(error, url);\n throw error;\n }\n let body;\n let text;\n // This can throw a SyntaxError if response payload is malformed JSON\n try {\n text = await response.text();\n if (text) {\n // (response can be empty)\n body = JSON.parse(text);\n }\n } catch (err) {\n let error = err as Error;\n if (err instanceof SyntaxError) {\n error = new NetworkError(response, body, `Response invalid. Expected JSON. Received: \"${text}\"`);\n error.cause = err;\n }\n logger.error(error);\n throw error;\n }\n // Translate 4xx, 5xx status to runtime error\n if (!response.ok) {\n const error = new NetworkError(response, body, \"Response was not OK\");\n logger.error(error);\n throw error;\n }\n\n return body;\n}\n","import { LANGUAGES, TUrl } from \"./types\";\n\nexport const DEFAULT_BASE_URL: TUrl = \"https://production-central-backend-ne.beamimpact.com\";\n\nexport const DEFAULT_LOG_URL = \"https://production.beamimpactlogs.com\";\n\nexport const SUPPORTED_LANGUAGES: Record<string, LANGUAGES> = {\n en: \"en\",\n fr: \"fr\",\n de: \"de\",\n es: \"es\",\n it: \"it\",\n pl: \"pl\",\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { fetchJson } from \"../fetch-json\";\nimport { DEFAULT_BASE_URL } from \"../constants\";\nimport { THttpMethod } from \"../types\";\nimport { paths } from \"./openapi-spec\";\n\nexport const makeOpenApiMethod = <\n TPathName extends keyof paths,\n TMethod extends keyof paths[TPathName],\n TStatusCode extends paths[TPathName][TMethod] extends { responses: any }\n ? keyof paths[TPathName][TMethod][\"responses\"]\n : never\n>(\n pathName: TPathName,\n method: TMethod,\n okHttpStatus: TStatusCode\n) => {\n type TRouteSpec = paths[typeof pathName];\n type TRouteMethod = TRouteSpec[typeof method];\n type TParams = \"parameters\" extends keyof TRouteMethod ? TRouteMethod[\"parameters\"] : never;\n type TPathParams = TParams extends { path: any } ? TParams[\"path\"] : Record<string, never>;\n type TQueryParams = TParams extends { query: any } ? TParams[\"query\"] : Record<string, never>;\n type TRequestBody = TRouteMethod extends { requestBody: { content: { \"application/json\": any } } }\n ? TRouteMethod[\"requestBody\"][\"content\"][\"application/json\"]\n : never;\n type TAllResponses = TRouteMethod extends { responses: any } ? TRouteMethod[\"responses\"] : never;\n type TOkResponse = TAllResponses[typeof okHttpStatus] extends { content: { \"application/json\": any } }\n ? TAllResponses[typeof okHttpStatus][\"content\"][\"application/json\"]\n : never;\n const openApi = {\n [pathName]: async function ({\n headers = {},\n baseUrl = DEFAULT_BASE_URL,\n apiRoot = \"/api/v3\",\n pathParams = {},\n queryParams = {},\n requestBody,\n }: {\n baseUrl?: string;\n apiRoot?: string;\n pathParams?: TPathParams;\n queryParams?: TQueryParams;\n requestBody?: TRequestBody;\n headers?: Record<string, string>;\n }) {\n const pathWithParams: string = Object.entries(pathParams).reduce((newPath: string, [k, v]) => {\n return newPath.replace(`{${k}}`, v as string);\n }, pathName as string);\n const cleanQueryParams = JSON.parse(JSON.stringify(queryParams));\n const search = new URLSearchParams(cleanQueryParams as unknown as Record<string, string>).toString();\n const url = baseUrl + apiRoot + pathWithParams + (search && `?${search}`);\n const options = { headers, method: method as THttpMethod, body: JSON.stringify(requestBody) };\n\n return fetchJson<TOkResponse>(url, options);\n },\n };\n\n // Use object to create function with dynamic name, for better stacktraces\n return openApi[pathName];\n};\n","import { makeOpenApiMethod } from \"./make-openapi-method\";\n\nexport const getChainNonprofits = makeOpenApiMethod(\"/chain/{chainId}/nonprofits\", \"get\", 200);\n\nexport const getImpact = makeOpenApiMethod(\"/impact\", \"get\", 200);\n\nexport const getCumulativeImpact = makeOpenApiMethod(\"/chain/{chainId}/cumulativeImpact\", \"get\", 200);\n\nexport const postSelectNonprofit = makeOpenApiMethod(\"/selectNonprofit\", \"post\", 201);\n\nexport const postTransaction = makeOpenApiMethod(\"/transaction\", \"post\", 201);\n\nexport const putTransaction = makeOpenApiMethod(\"/transaction/{transactionId}\", \"put\", 204);\n\nexport const postCart = makeOpenApiMethod(\"/cart\", \"post\", 200);\n\nexport const postChainEligibleNonprofitsForCart = makeOpenApiMethod(\n \"/chain/findEligibleNonprofitsForCart\",\n \"post\",\n 200\n);\n\nexport const postLogs = makeOpenApiMethod(\"/logs\", \"post\", 200);\n\nexport const postExperimentSession = makeOpenApiMethod(\"/experimentSession\", \"post\", 200);\n\nexport const updateSubscription = makeOpenApiMethod(\"/subscriptions/updateSubscriptionNonprofit\", \"post\", 200);\n\nexport const postFindSubscription = makeOpenApiMethod(\"/subscriptions/findSubscriptionByRemoteId\", \"post\", 200);\n"],"names":["fetchJson","url","options","fetchOptions","pkgVersion","response","err","error","BeamError","logger","body","text","NetworkError","DEFAULT_BASE_URL","DEFAULT_LOG_URL","SUPPORTED_LANGUAGES","makeOpenApiMethod","pathName","method","okHttpStatus","headers","baseUrl","apiRoot","pathParams","queryParams","requestBody","pathWithParams","newPath","k","v","cleanQueryParams","search","getImpact","getCumulativeImpact","postSelectNonprofit","postTransaction","putTransaction","postCart","postChainEligibleNonprofitsForCart","postLogs","postExperimentSession","updateSubscription","postFindSubscription"],"mappings":"oQAOA,eAAsBA,EAAuBC,EAAkBC,EAAmC,CAChG,MAAMC,EAAe,CACnB,OAAQ,MACR,GAAGD,EACH,QAAS,CACP,eAAgB,mBAChB,OAAQ,mBACR,gBAAiB,SACjB,wBAAyBE,EACzB,GAAGF,GAAS,OACd,EACA,kBAAmB,GACnB,KAAMA,GAAS,MAAQ,OACvB,KAAMA,GAAS,MAAQ,KAAOA,EAAQ,KAAO,MAC/C,EAEA,IAAIG,EACJ,GAAI,CACFA,EAAW,MAAM,MAAMJ,EAAKE,CAAY,CAE1C,OAASG,EAAK,CACZ,MAAMC,EAAQ,IAAIC,EAAU,wBAAwBL,GAAc,OAAO,YAAa,CAAA,IAAIF,CAAG,GAAG,EAChG,MAAAM,EAAM,MAAQD,EACdG,EAAO,MAAMF,EAAON,CAAG,EACjBM,CACR,CACA,IAAIG,EACAC,EAEJ,GAAI,CACFA,EAAO,MAAMN,EAAS,OAClBM,IAEFD,EAAO,KAAK,MAAMC,CAAI,EAE1B,OAASL,EAAK,CACZ,IAAIC,EAAQD,EACZ,MAAIA,aAAe,cACjBC,EAAQ,IAAIK,EAAaP,EAAUK,EAAM,+CAA+CC,CAAI,GAAG,EAC/FJ,EAAM,MAAQD,GAEhBG,EAAO,MAAMF,CAAK,EACZA,CACR,CAEA,GAAI,CAACF,EAAS,GAAI,CAChB,MAAME,EAAQ,IAAIK,EAAaP,EAAUK,EAAM,qBAAqB,EACpE,MAAAD,EAAO,MAAMF,CAAK,EACZA,CACR,CAEA,OAAOG,CACT,CCzDO,MAAMG,EAAyB,uDAEzBC,EAAkB,wCAElBC,EAAiD,CAC5D,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,ECNaC,EAAoB,CAO/BC,EACAC,EACAC,KAcgB,CACd,CAACF,CAAQ,EAAG,eAAgB,CAC1B,QAAAG,EAAU,CAAA,EACV,QAAAC,EAAUR,EACV,QAAAS,EAAU,UACV,WAAAC,EAAa,CACb,EAAA,YAAAC,EAAc,CAAA,EACd,YAAAC,CACF,EAOG,CACD,MAAMC,EAAyB,OAAO,QAAQH,CAAU,EAAE,OAAO,CAACI,EAAiB,CAACC,EAAGC,CAAC,IAC/EF,EAAQ,QAAQ,IAAIC,CAAC,IAAKC,CAAW,EAC3CZ,CAAkB,EACfa,EAAmB,KAAK,MAAM,KAAK,UAAUN,CAAW,CAAC,EACzDO,EAAS,IAAI,gBAAgBD,CAAqD,EAAE,SACpF7B,EAAAA,EAAMoB,EAAUC,EAAUI,GAAkBK,GAAU,IAAIA,CAAM,IAChE7B,EAAU,CAAE,QAAAkB,EAAS,OAAQF,EAAuB,KAAM,KAAK,UAAUO,CAAW,CAAE,EAE5F,OAAOzB,EAAuBC,EAAKC,CAAO,CAC5C,CACF,GAGee,CAAQ,ECvDZe,EAAYhB,EAAkB,UAAW,KAAU,EAEnDiB,EAAsBjB,EAAkB,oCAAqC,KAAU,EAEvFkB,EAAsBlB,EAAkB,mBAAoB,MAAW,EAEvEmB,EAAkBnB,EAAkB,eAAgB,MAAW,EAE/DoB,EAAiBpB,EAAkB,+BAAgC,KAAU,EAE7EqB,EAAWrB,EAAkB,QAAS,MAAW,EAEjDsB,EAAqCtB,EAChD,uCACA,MAEF,EAEauB,EAAWvB,EAAkB,QAAS,MAAW,EAEjDwB,EAAwBxB,EAAkB,qBAAsB,MAAW,EAE3EyB,EAAqBzB,EAAkB,6CAA8C,MAAW,EAEhG0B,EAAuB1B,EAAkB,4CAA6C,MAAW"}
1
+ {"version":3,"file":"routes-1-1FXngS.esm.js","sources":["../../src/api-sdk/fetch-json.ts","../../src/api-sdk/constants.ts","../../src/api-sdk/v3/make-openapi-method.ts","../../src/api-sdk/v3/routes.ts"],"sourcesContent":["/**\n * Wrapper over window.fetch that expects/returns JSON\n */\nimport { BeamError, NetworkError } from \"../utils/beam-errors\";\nimport { logger } from \"../utils/logger\";\nimport { version as pkgVersion } from \"../../package.json\";\n\nexport async function fetchJson<T = unknown>(url: RequestInfo, options?: RequestInit): Promise<T> {\n const fetchOptions = {\n method: \"GET\",\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-Beam-Client\": \"WebSDK\",\n \"X-Beam-Client-Version\": pkgVersion,\n ...options?.headers,\n },\n preflightContinue: true,\n mode: options?.mode || \"cors\",\n body: options?.body != null ? options.body : undefined,\n };\n\n let response;\n try {\n response = await fetch(url, fetchOptions);\n // fetch can throw a TypeError if the server can't be reached, catch and log below\n } catch (err) {\n const error = new BeamError(`Network call failed (${fetchOptions?.method.toUpperCase()} ${url})`);\n error.cause = err;\n logger.error(error, url);\n throw error;\n }\n let body;\n let text;\n // This can throw a SyntaxError if response payload is malformed JSON\n try {\n text = await response.text();\n if (text) {\n // (response can be empty)\n body = JSON.parse(text);\n }\n } catch (err) {\n let error = err as Error;\n if (err instanceof SyntaxError) {\n error = new NetworkError(response, body, `Response invalid. Expected JSON. Received: \"${text}\"`);\n error.cause = err;\n }\n logger.error(error);\n throw error;\n }\n // Translate 4xx, 5xx status to runtime error\n if (!response.ok) {\n const error = new NetworkError(response, body, \"Response was not OK\");\n logger.error(error);\n throw error;\n }\n\n return body;\n}\n","import { LANGUAGES, TUrl } from \"./types\";\n\nexport const DEFAULT_BASE_URL: TUrl = \"https://production-central-backend-ne.beamimpact.com\";\n\nexport const DEFAULT_LOG_URL = \"https://production.beamimpactlogs.com\";\n\nexport const SUPPORTED_LANGUAGES: Record<string, LANGUAGES> = {\n en: \"en\",\n fr: \"fr\",\n de: \"de\",\n es: \"es\",\n it: \"it\",\n pl: \"pl\",\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { fetchJson } from \"../fetch-json\";\nimport { DEFAULT_BASE_URL } from \"../constants\";\nimport { THttpMethod } from \"../types\";\nimport { paths } from \"./openapi-spec\";\n\nexport const makeOpenApiMethod = <\n TPathName extends keyof paths,\n TMethod extends keyof paths[TPathName],\n TStatusCode extends paths[TPathName][TMethod] extends { responses: any }\n ? keyof paths[TPathName][TMethod][\"responses\"]\n : never\n>(\n pathName: TPathName,\n method: TMethod,\n okHttpStatus: TStatusCode\n) => {\n type TRouteSpec = paths[typeof pathName];\n type TRouteMethod = TRouteSpec[typeof method];\n type TParams = \"parameters\" extends keyof TRouteMethod ? TRouteMethod[\"parameters\"] : never;\n type TPathParams = TParams extends { path: any } ? TParams[\"path\"] : Record<string, never>;\n type TQueryParams = TParams extends { query: any } ? TParams[\"query\"] : Record<string, never>;\n type TRequestBody = TRouteMethod extends { requestBody: { content: { \"application/json\": any } } }\n ? TRouteMethod[\"requestBody\"][\"content\"][\"application/json\"]\n : never;\n type TAllResponses = TRouteMethod extends { responses: any } ? TRouteMethod[\"responses\"] : never;\n type TOkResponse = TAllResponses[typeof okHttpStatus] extends { content: { \"application/json\": any } }\n ? TAllResponses[typeof okHttpStatus][\"content\"][\"application/json\"]\n : never;\n const openApi = {\n [pathName]: async function ({\n headers = {},\n baseUrl = DEFAULT_BASE_URL,\n apiRoot = \"/api/v3\",\n pathParams = {},\n queryParams = {},\n requestBody,\n }: {\n baseUrl?: string;\n apiRoot?: string;\n pathParams?: TPathParams;\n queryParams?: TQueryParams;\n requestBody?: TRequestBody;\n headers?: Record<string, string>;\n }) {\n const pathWithParams: string = Object.entries(pathParams).reduce((newPath: string, [k, v]) => {\n return newPath.replace(`{${k}}`, v as string);\n }, pathName as string);\n const cleanQueryParams = JSON.parse(JSON.stringify(queryParams));\n const search = new URLSearchParams(cleanQueryParams as unknown as Record<string, string>).toString();\n const url = baseUrl + apiRoot + pathWithParams + (search && `?${search}`);\n const options = { headers, method: method as THttpMethod, body: JSON.stringify(requestBody) };\n\n return fetchJson<TOkResponse>(url, options);\n },\n };\n\n // Use object to create function with dynamic name, for better stacktraces\n return openApi[pathName];\n};\n","import { makeOpenApiMethod } from \"./make-openapi-method\";\n\nexport const getChainNonprofits = makeOpenApiMethod(\"/chain/{chainId}/nonprofits\", \"get\", 200);\n\nexport const getImpact = makeOpenApiMethod(\"/impact\", \"get\", 200);\n\nexport const getCumulativeImpact = makeOpenApiMethod(\"/chain/{chainId}/cumulativeImpact\", \"get\", 200);\n\nexport const postSelectNonprofit = makeOpenApiMethod(\"/selectNonprofit\", \"post\", 201);\n\nexport const postTransaction = makeOpenApiMethod(\"/transaction\", \"post\", 201);\n\nexport const putTransaction = makeOpenApiMethod(\"/transaction/{transactionId}\", \"put\", 204);\n\nexport const postCart = makeOpenApiMethod(\"/cart\", \"post\", 200);\n\nexport const postChainEligibleNonprofitsForCart = makeOpenApiMethod(\n \"/chain/findEligibleNonprofitsForCart\",\n \"post\",\n 200\n);\n\nexport const postLogs = makeOpenApiMethod(\"/logs\", \"post\", 200);\n\nexport const postExperimentSession = makeOpenApiMethod(\"/experimentSession\", \"post\", 200);\n\nexport const updateSubscription = makeOpenApiMethod(\"/subscriptions/updateSubscriptionNonprofit\", \"post\", 200);\n\nexport const postFindOrCreateSubscription = makeOpenApiMethod(\"/subscriptions/findOrCreateSubscription\", \"post\", 200);\n"],"names":["fetchJson","url","options","fetchOptions","pkgVersion","response","err","error","BeamError","logger","body","text","NetworkError","DEFAULT_BASE_URL","DEFAULT_LOG_URL","SUPPORTED_LANGUAGES","makeOpenApiMethod","pathName","method","okHttpStatus","headers","baseUrl","apiRoot","pathParams","queryParams","requestBody","pathWithParams","newPath","k","v","cleanQueryParams","search","getImpact","getCumulativeImpact","postSelectNonprofit","postTransaction","putTransaction","postCart","postChainEligibleNonprofitsForCart","postLogs","postExperimentSession","updateSubscription","postFindOrCreateSubscription"],"mappings":"oQAOA,eAAsBA,EAAuBC,EAAkBC,EAAmC,CAChG,MAAMC,EAAe,CACnB,OAAQ,MACR,GAAGD,EACH,QAAS,CACP,eAAgB,mBAChB,OAAQ,mBACR,gBAAiB,SACjB,wBAAyBE,EACzB,GAAGF,GAAS,OACd,EACA,kBAAmB,GACnB,KAAMA,GAAS,MAAQ,OACvB,KAAMA,GAAS,MAAQ,KAAOA,EAAQ,KAAO,MAC/C,EAEA,IAAIG,EACJ,GAAI,CACFA,EAAW,MAAM,MAAMJ,EAAKE,CAAY,CAE1C,OAASG,EAAK,CACZ,MAAMC,EAAQ,IAAIC,EAAU,wBAAwBL,GAAc,OAAO,YAAa,CAAA,IAAIF,CAAG,GAAG,EAChG,MAAAM,EAAM,MAAQD,EACdG,EAAO,MAAMF,EAAON,CAAG,EACjBM,CACR,CACA,IAAIG,EACAC,EAEJ,GAAI,CACFA,EAAO,MAAMN,EAAS,OAClBM,IAEFD,EAAO,KAAK,MAAMC,CAAI,EAE1B,OAASL,EAAK,CACZ,IAAIC,EAAQD,EACZ,MAAIA,aAAe,cACjBC,EAAQ,IAAIK,EAAaP,EAAUK,EAAM,+CAA+CC,CAAI,GAAG,EAC/FJ,EAAM,MAAQD,GAEhBG,EAAO,MAAMF,CAAK,EACZA,CACR,CAEA,GAAI,CAACF,EAAS,GAAI,CAChB,MAAME,EAAQ,IAAIK,EAAaP,EAAUK,EAAM,qBAAqB,EACpE,MAAAD,EAAO,MAAMF,CAAK,EACZA,CACR,CAEA,OAAOG,CACT,CCzDO,MAAMG,EAAyB,uDAEzBC,EAAkB,wCAElBC,EAAiD,CAC5D,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,ECNaC,EAAoB,CAO/BC,EACAC,EACAC,KAcgB,CACd,CAACF,CAAQ,EAAG,eAAgB,CAC1B,QAAAG,EAAU,CAAA,EACV,QAAAC,EAAUR,EACV,QAAAS,EAAU,UACV,WAAAC,EAAa,CACb,EAAA,YAAAC,EAAc,CAAA,EACd,YAAAC,CACF,EAOG,CACD,MAAMC,EAAyB,OAAO,QAAQH,CAAU,EAAE,OAAO,CAACI,EAAiB,CAACC,EAAGC,CAAC,IAC/EF,EAAQ,QAAQ,IAAIC,CAAC,IAAKC,CAAW,EAC3CZ,CAAkB,EACfa,EAAmB,KAAK,MAAM,KAAK,UAAUN,CAAW,CAAC,EACzDO,EAAS,IAAI,gBAAgBD,CAAqD,EAAE,SACpF7B,EAAAA,EAAMoB,EAAUC,EAAUI,GAAkBK,GAAU,IAAIA,CAAM,IAChE7B,EAAU,CAAE,QAAAkB,EAAS,OAAQF,EAAuB,KAAM,KAAK,UAAUO,CAAW,CAAE,EAE5F,OAAOzB,EAAuBC,EAAKC,CAAO,CAC5C,CACF,GAGee,CAAQ,ECvDZe,EAAYhB,EAAkB,UAAW,KAAU,EAEnDiB,EAAsBjB,EAAkB,oCAAqC,KAAU,EAEvFkB,EAAsBlB,EAAkB,mBAAoB,MAAW,EAEvEmB,EAAkBnB,EAAkB,eAAgB,MAAW,EAE/DoB,EAAiBpB,EAAkB,+BAAgC,KAAU,EAE7EqB,EAAWrB,EAAkB,QAAS,MAAW,EAEjDsB,EAAqCtB,EAChD,uCACA,MAEF,EAEauB,EAAWvB,EAAkB,QAAS,MAAW,EAEjDwB,EAAwBxB,EAAkB,qBAAsB,MAAW,EAE3EyB,EAAqBzB,EAAkB,6CAA8C,MAAW,EAEhG0B,EAA+B1B,EAAkB,0CAA2C,MAAW"}