@beamimpact/web-sdk 1.56.3 → 1.57.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/dist/chunks/_share-dialog-dependencies-BEUnzuWq.esm.js +2 -0
  2. package/dist/chunks/{_share-dialog-dependencies-Bk60ibnw.esm.js.map → _share-dialog-dependencies-BEUnzuWq.esm.js.map} +1 -1
  3. package/dist/chunks/{order-page-CSEjG6ma.esm.d.ts → cart-CKltrzQt.esm.d.ts} +22 -34
  4. package/dist/chunks/css-card-grid-CiqEjkwR.esm.js +21 -0
  5. package/dist/chunks/css-card-grid-CiqEjkwR.esm.js.map +1 -0
  6. package/dist/chunks/handlebars-B_i-to-h.esm.js +23 -0
  7. package/dist/chunks/handlebars-B_i-to-h.esm.js.map +1 -0
  8. package/dist/chunks/index-B4xKTDaF.esm.js +2 -0
  9. package/dist/chunks/index-B4xKTDaF.esm.js.map +1 -0
  10. package/dist/chunks/{index-C_u1FXtO.esm.d.ts → index-BAROgNYE.esm.d.ts} +7 -10
  11. package/dist/chunks/{index-BLlSL37B.esm.d.ts → index-BH3YaPLG.esm.d.ts} +1 -1
  12. package/dist/chunks/index-BHglsF5j.esm.js +2 -0
  13. package/dist/chunks/index-BHglsF5j.esm.js.map +1 -0
  14. package/dist/chunks/index-BgalrCS_.esm.js +32 -0
  15. package/dist/chunks/index-BgalrCS_.esm.js.map +1 -0
  16. package/dist/chunks/{index-hghrT7Z_.esm.d.ts → index-BoIHE1tC.esm.d.ts} +3 -0
  17. package/dist/chunks/index-C60Vejym.esm.js +32 -0
  18. package/dist/chunks/index-C60Vejym.esm.js.map +1 -0
  19. package/dist/chunks/{index-DDCtGN21.esm.d.ts → index-C6a13iqC.esm.d.ts} +3 -5
  20. package/dist/chunks/index-D6aFJ4cU.esm.js +2 -0
  21. package/dist/chunks/index-D6aFJ4cU.esm.js.map +1 -0
  22. package/dist/chunks/index-Dm-K2MLY.esm.js +31 -0
  23. package/dist/chunks/index-Dm-K2MLY.esm.js.map +1 -0
  24. package/dist/chunks/{index-BEEmYYxP.esm.js → index-DqhM4Yoj.esm.js} +11 -11
  25. package/dist/chunks/index-DqhM4Yoj.esm.js.map +1 -0
  26. package/dist/chunks/{index-UMeAzKTG.esm.js → index-HqfLVFOU.esm.js} +11 -11
  27. package/dist/chunks/index-HqfLVFOU.esm.js.map +1 -0
  28. package/dist/chunks/index-MAMeVd6l.esm.js +2 -0
  29. package/dist/chunks/index-MAMeVd6l.esm.js.map +1 -0
  30. package/dist/chunks/{index-DyUuvdr3.esm.d.ts → index-OYSJ-2mk.esm.d.ts} +1 -1
  31. package/dist/chunks/{index-BY5lSRmw.esm.d.ts → index-mBTWm4YP.esm.d.ts} +2 -2
  32. package/dist/chunks/{lit-JRlupCB5.esm.js → lit-BEag9MFp.esm.js} +2 -2
  33. package/dist/chunks/{lit-JRlupCB5.esm.js.map → lit-BEag9MFp.esm.js.map} +1 -1
  34. package/dist/chunks/{lodash-BSs6Il-c.esm.js → lodash-CrMU6wKg.esm.js} +2 -2
  35. package/dist/chunks/{lodash-BSs6Il-c.esm.js.map → lodash-CrMU6wKg.esm.js.map} +1 -1
  36. package/dist/chunks/{promo-pill-label-D_4zJ7uy.esm.js → promo-pill-label-5HmbDVmU.esm.js} +2 -2
  37. package/dist/chunks/{promo-pill-label-D_4zJ7uy.esm.js.map → promo-pill-label-5HmbDVmU.esm.js.map} +1 -1
  38. package/dist/chunks/{responsive-CIV4sFdH.esm.js → responsive-aN8P5PqD.esm.js} +2 -2
  39. package/dist/chunks/{responsive-CIV4sFdH.esm.js.map → responsive-aN8P5PqD.esm.js.map} +1 -1
  40. package/dist/chunks/{routes-OxC3Ah30.esm.d.ts → routes-D6Gtw6kZ.esm.d.ts} +1 -1
  41. package/dist/chunks/share-button-5gfPmeEh.esm.js +54 -0
  42. package/dist/chunks/share-button-5gfPmeEh.esm.js.map +1 -0
  43. package/dist/chunks/{share-button-Dzc7loia.esm.js → share-button-C4yPLL_t.esm.js} +2 -2
  44. package/dist/chunks/{share-button-DkTpGZk1.esm.js.map → share-button-C4yPLL_t.esm.js.map} +1 -1
  45. package/dist/chunks/{update-cart-DWgFuC7U.esm.d.ts → update-cart-DoJGAdoU.esm.d.ts} +2 -3
  46. package/dist/chunks/utils-C5hmbxa4.esm.js +2 -0
  47. package/dist/chunks/utils-C5hmbxa4.esm.js.map +1 -0
  48. package/dist/chunks/{openapi-spec-B4z4_CMq.esm.d.ts → utils-COGFpDER.esm.d.ts} +597 -11
  49. package/dist/chunks/{vendor-ckSdd6aH.esm.js → vendor-DUOg5fL-.esm.js} +2 -2
  50. package/dist/chunks/{vendor-ckSdd6aH.esm.js.map → vendor-DUOg5fL-.esm.js.map} +1 -1
  51. package/dist/components/beam-partner-logos.d.ts +3 -1
  52. package/dist/components/beam-partner-logos.esm.js +1 -1
  53. package/dist/components/beam-partner-logos.js +1 -1
  54. package/dist/components/community-impact.d.ts +3 -2
  55. package/dist/components/community-impact.esm.js +6 -6
  56. package/dist/components/community-impact.esm.js.map +1 -1
  57. package/dist/components/community-impact.js +6 -6
  58. package/dist/components/community-impact.js.map +1 -1
  59. package/dist/components/cumulative-impact.d.ts +3 -2
  60. package/dist/components/cumulative-impact.esm.js +11 -11
  61. package/dist/components/cumulative-impact.esm.js.map +1 -1
  62. package/dist/components/cumulative-impact.js +11 -11
  63. package/dist/components/cumulative-impact.js.map +1 -1
  64. package/dist/components/impact-overview.d.ts +3 -2
  65. package/dist/components/impact-overview.esm.js +5 -5
  66. package/dist/components/impact-overview.esm.js.map +1 -1
  67. package/dist/components/impact-overview.js +5 -5
  68. package/dist/components/impact-overview.js.map +1 -1
  69. package/dist/components/index.d.ts +5 -5
  70. package/dist/components/index.esm.js +1 -1
  71. package/dist/components/index.js +1 -1
  72. package/dist/components/post-purchase.d.ts +3 -4
  73. package/dist/components/post-purchase.esm.js +1 -31
  74. package/dist/components/post-purchase.esm.js.map +1 -1
  75. package/dist/components/post-purchase.js +1 -31
  76. package/dist/components/post-purchase.js.map +1 -1
  77. package/dist/components/product-details-page.d.ts +4 -2
  78. package/dist/components/product-details-page.esm.js +4 -4
  79. package/dist/components/product-details-page.esm.js.map +1 -1
  80. package/dist/components/product-details-page.js +4 -4
  81. package/dist/components/product-details-page.js.map +1 -1
  82. package/dist/components/redeem-transaction.d.ts +3 -4
  83. package/dist/components/redeem-transaction.esm.js +1 -1
  84. package/dist/components/redeem-transaction.js +1 -1
  85. package/dist/components/select-nonprofit.d.ts +3 -4
  86. package/dist/components/select-nonprofit.esm.js +12 -12
  87. package/dist/components/select-nonprofit.esm.js.map +1 -1
  88. package/dist/components/select-nonprofit.js +12 -12
  89. package/dist/components/select-nonprofit.js.map +1 -1
  90. package/dist/components/select-subscription-nonprofit.d.ts +3 -2
  91. package/dist/components/select-subscription-nonprofit.esm.js +11 -11
  92. package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
  93. package/dist/components/select-subscription-nonprofit.js +11 -11
  94. package/dist/components/select-subscription-nonprofit.js.map +1 -1
  95. package/dist/components/shopify.d.ts +9 -12
  96. package/dist/components/shopify.esm.js +1 -1
  97. package/dist/components/shopify.esm.js.map +1 -1
  98. package/dist/components/shopify.js +1 -1
  99. package/dist/components/shopify.js.map +1 -1
  100. package/dist/components/social-share.d.ts +3 -2
  101. package/dist/components/social-share.esm.js +2 -2
  102. package/dist/components/social-share.esm.js.map +1 -1
  103. package/dist/components/social-share.js +2 -2
  104. package/dist/components/social-share.js.map +1 -1
  105. package/dist/components/subscriber-select-nonprofit.d.ts +59 -0
  106. package/dist/components/subscriber-select-nonprofit.esm.js +137 -0
  107. package/dist/components/subscriber-select-nonprofit.esm.js.map +1 -0
  108. package/dist/components/subscriber-select-nonprofit.js +137 -0
  109. package/dist/components/subscriber-select-nonprofit.js.map +1 -0
  110. package/dist/components/subscription-impact.d.ts +3 -2
  111. package/dist/components/subscription-impact.esm.js +6 -6
  112. package/dist/components/subscription-impact.esm.js.map +1 -1
  113. package/dist/components/subscription-impact.js +6 -6
  114. package/dist/components/subscription-impact.js.map +1 -1
  115. package/dist/components/subscription-management.d.ts +4 -5
  116. package/dist/components/subscription-management.esm.js +3 -3
  117. package/dist/components/subscription-management.esm.js.map +1 -1
  118. package/dist/components/subscription-management.js +3 -3
  119. package/dist/components/subscription-management.js.map +1 -1
  120. package/dist/index.d.ts +39 -38
  121. package/dist/index.esm.js +1 -1
  122. package/dist/index.js +1 -1
  123. package/dist/integrations/beam.d.ts +3 -1
  124. package/dist/integrations/beam.esm.js +1 -1
  125. package/dist/integrations/beam.esm.js.map +1 -1
  126. package/dist/integrations/beam.js +1 -1
  127. package/dist/integrations/beam.js.map +1 -1
  128. package/dist/integrations/cart.d.ts +4 -4
  129. package/dist/integrations/cart.esm.js +1 -1
  130. package/dist/integrations/cart.js +1 -1
  131. package/dist/integrations/logs.d.ts +4 -2
  132. package/dist/integrations/logs.esm.js +1 -1
  133. package/dist/integrations/logs.js +1 -1
  134. package/dist/integrations/promoManager.d.ts +3 -1
  135. package/dist/integrations/promoManager.esm.js +1 -1
  136. package/dist/integrations/promoManager.esm.js.map +1 -1
  137. package/dist/integrations/promoManager.js +1 -1
  138. package/dist/integrations/promoManager.js.map +1 -1
  139. package/dist/integrations/session.d.ts +1 -1
  140. package/dist/integrations/session.esm.js +1 -1
  141. package/dist/integrations/session.js +1 -1
  142. package/dist/integrations/shopify-order.d.ts +38 -0
  143. package/dist/integrations/shopify-order.esm.js +2 -0
  144. package/dist/integrations/shopify-order.esm.js.map +1 -0
  145. package/dist/integrations/shopify-order.js +2 -0
  146. package/dist/integrations/shopify-order.js.map +1 -0
  147. package/dist/integrations/shopify.d.ts +5 -12
  148. package/dist/integrations/shopify.esm.js +1 -1
  149. package/dist/integrations/shopify.js +1 -1
  150. package/dist/integrations/statsig.d.ts +3 -1
  151. package/dist/integrations/statsig.esm.js +3 -3
  152. package/dist/integrations/statsig.esm.js.map +1 -1
  153. package/dist/integrations/statsig.js +3 -3
  154. package/dist/integrations/statsig.js.map +1 -1
  155. package/dist/integrations/utils.d.ts +1 -14
  156. package/dist/integrations/utils.esm.js +1 -1
  157. package/dist/integrations/utils.js +1 -1
  158. package/dist/react/beam-partner-logos.d.ts +3 -1
  159. package/dist/react/beam-partner-logos.esm.js +1 -1
  160. package/dist/react/beam-partner-logos.js +1 -1
  161. package/dist/react/community-impact.d.ts +3 -2
  162. package/dist/react/community-impact.esm.js +1 -1
  163. package/dist/react/community-impact.esm.js.map +1 -1
  164. package/dist/react/community-impact.js +1 -1
  165. package/dist/react/community-impact.js.map +1 -1
  166. package/dist/react/cumulative-impact.d.ts +3 -2
  167. package/dist/react/cumulative-impact.esm.js +1 -1
  168. package/dist/react/cumulative-impact.esm.js.map +1 -1
  169. package/dist/react/cumulative-impact.js +1 -1
  170. package/dist/react/cumulative-impact.js.map +1 -1
  171. package/dist/react/impact-overview.d.ts +3 -2
  172. package/dist/react/impact-overview.esm.js +1 -1
  173. package/dist/react/impact-overview.esm.js.map +1 -1
  174. package/dist/react/impact-overview.js +1 -1
  175. package/dist/react/impact-overview.js.map +1 -1
  176. package/dist/react/index.d.ts +6 -7
  177. package/dist/react/index.esm.js +1 -1
  178. package/dist/react/index.js +1 -1
  179. package/dist/react/post-purchase.d.ts +3 -4
  180. package/dist/react/post-purchase.esm.js +1 -1
  181. package/dist/react/post-purchase.esm.js.map +1 -1
  182. package/dist/react/post-purchase.js +1 -1
  183. package/dist/react/post-purchase.js.map +1 -1
  184. package/dist/react/product-details-page.d.ts +4 -2
  185. package/dist/react/product-details-page.esm.js +1 -1
  186. package/dist/react/product-details-page.esm.js.map +1 -1
  187. package/dist/react/product-details-page.js +1 -1
  188. package/dist/react/product-details-page.js.map +1 -1
  189. package/dist/react/redeem-transaction.d.ts +3 -6
  190. package/dist/react/redeem-transaction.esm.js +1 -1
  191. package/dist/react/redeem-transaction.esm.js.map +1 -1
  192. package/dist/react/redeem-transaction.js +1 -1
  193. package/dist/react/redeem-transaction.js.map +1 -1
  194. package/dist/react/select-nonprofit.d.ts +3 -6
  195. package/dist/react/select-nonprofit.esm.js +1 -1
  196. package/dist/react/select-nonprofit.esm.js.map +1 -1
  197. package/dist/react/select-nonprofit.js +1 -1
  198. package/dist/react/select-nonprofit.js.map +1 -1
  199. package/dist/react/select-subscription-nonprofit.d.ts +3 -6
  200. package/dist/react/select-subscription-nonprofit.esm.js +1 -1
  201. package/dist/react/select-subscription-nonprofit.esm.js.map +1 -1
  202. package/dist/react/select-subscription-nonprofit.js +1 -1
  203. package/dist/react/select-subscription-nonprofit.js.map +1 -1
  204. package/dist/react/shopify.d.ts +2 -2
  205. package/dist/react/shopify.esm.js +1 -1
  206. package/dist/react/shopify.esm.js.map +1 -1
  207. package/dist/react/shopify.js +1 -1
  208. package/dist/react/shopify.js.map +1 -1
  209. package/dist/react/social-share.d.ts +3 -2
  210. package/dist/react/social-share.esm.js +1 -1
  211. package/dist/react/social-share.esm.js.map +1 -1
  212. package/dist/react/social-share.js +1 -1
  213. package/dist/react/social-share.js.map +1 -1
  214. package/dist/react/subscriber-select-nonprofit.d.ts +14 -0
  215. package/dist/react/subscriber-select-nonprofit.esm.js +2 -0
  216. package/dist/react/subscriber-select-nonprofit.esm.js.map +1 -0
  217. package/dist/react/subscriber-select-nonprofit.js +2 -0
  218. package/dist/react/subscriber-select-nonprofit.js.map +1 -0
  219. package/dist/react/subscription-impact.d.ts +3 -2
  220. package/dist/react/subscription-impact.esm.js +1 -1
  221. package/dist/react/subscription-impact.esm.js.map +1 -1
  222. package/dist/react/subscription-impact.js +1 -1
  223. package/dist/react/subscription-impact.js.map +1 -1
  224. package/dist/react/subscription-management.d.ts +4 -5
  225. package/dist/react/subscription-management.esm.js +1 -1
  226. package/dist/react/subscription-management.esm.js.map +1 -1
  227. package/dist/react/subscription-management.js +1 -1
  228. package/dist/react/subscription-management.js.map +1 -1
  229. package/dist/utils/beam-errors.d.ts +3 -1
  230. package/dist/utils/beam-errors.esm.js +1 -1
  231. package/dist/utils/beam-errors.js +1 -1
  232. package/dist/utils/cart.d.ts +3 -18
  233. package/dist/utils/cart.esm.js +1 -1
  234. package/dist/utils/cart.esm.js.map +1 -1
  235. package/dist/utils/cart.js +1 -1
  236. package/dist/utils/cart.js.map +1 -1
  237. package/dist/utils/clear-beam-storage.d.ts +3 -0
  238. package/dist/utils/clear-beam-storage.esm.js +2 -0
  239. package/dist/utils/clear-beam-storage.esm.js.map +1 -0
  240. package/dist/utils/clear-beam-storage.js +2 -0
  241. package/dist/utils/clear-beam-storage.js.map +1 -0
  242. package/dist/utils/cookies.d.ts +3 -18
  243. package/dist/utils/cookies.esm.js +1 -1
  244. package/dist/utils/cookies.esm.js.map +1 -1
  245. package/dist/utils/cookies.js +1 -1
  246. package/dist/utils/cookies.js.map +1 -1
  247. package/dist/utils/debounce.esm.js +1 -1
  248. package/dist/utils/debounce.js +1 -1
  249. package/dist/utils/events.d.ts +3 -5
  250. package/dist/utils/events.esm.js +1 -1
  251. package/dist/utils/events.js +1 -1
  252. package/dist/utils/is-equal.esm.js +1 -1
  253. package/dist/utils/is-equal.js +1 -1
  254. package/dist/utils/local-storage.d.ts +3 -19
  255. package/dist/utils/local-storage.esm.js +1 -1
  256. package/dist/utils/local-storage.esm.js.map +1 -1
  257. package/dist/utils/local-storage.js +1 -1
  258. package/dist/utils/local-storage.js.map +1 -1
  259. package/dist/utils/logger.d.ts +3 -8
  260. package/dist/utils/logger.esm.js +1 -1
  261. package/dist/utils/logger.esm.js.map +1 -1
  262. package/dist/utils/logger.js +1 -1
  263. package/dist/utils/logger.js.map +1 -1
  264. package/dist/utils/makeApiKeyHeader.d.ts +3 -5
  265. package/dist/utils/makeApiKeyHeader.esm.js +1 -1
  266. package/dist/utils/makeApiKeyHeader.esm.js.map +1 -1
  267. package/dist/utils/makeApiKeyHeader.js +1 -1
  268. package/dist/utils/makeApiKeyHeader.js.map +1 -1
  269. package/dist/utils/memoize-last.d.ts +3 -17
  270. package/dist/utils/memoize-last.esm.js +1 -1
  271. package/dist/utils/memoize-last.esm.js.map +1 -1
  272. package/dist/utils/memoize-last.js +1 -1
  273. package/dist/utils/memoize-last.js.map +1 -1
  274. package/dist/utils/network-listeners.d.ts +3 -3
  275. package/dist/utils/network-listeners.esm.js +1 -1
  276. package/dist/utils/network-listeners.esm.js.map +1 -1
  277. package/dist/utils/network-listeners.js +1 -1
  278. package/dist/utils/network-listeners.js.map +1 -1
  279. package/dist/utils/promoManager.d.ts +3 -111
  280. package/dist/utils/promoManager.esm.js +1 -1
  281. package/dist/utils/promoManager.esm.js.map +1 -1
  282. package/dist/utils/promoManager.js +1 -1
  283. package/dist/utils/promoManager.js.map +1 -1
  284. package/dist/utils/remote-session.d.ts +3 -9
  285. package/dist/utils/remote-session.esm.js +1 -1
  286. package/dist/utils/remote-session.esm.js.map +1 -1
  287. package/dist/utils/remote-session.js +1 -1
  288. package/dist/utils/remote-session.js.map +1 -1
  289. package/dist/utils/wait-for-element.d.ts +3 -5
  290. package/dist/utils/wait-for-element.esm.js +1 -1
  291. package/dist/utils/wait-for-element.esm.js.map +1 -1
  292. package/dist/utils/wait-for-element.js +1 -1
  293. package/dist/utils/wait-for-element.js.map +1 -1
  294. package/package.json +9 -6
  295. package/dist/chunks/_share-dialog-dependencies-Bk60ibnw.esm.js +0 -2
  296. package/dist/chunks/_share-dialog-dependencies-D6vA_2f6.esm.js +0 -2
  297. package/dist/chunks/_share-dialog-dependencies-D6vA_2f6.esm.js.map +0 -1
  298. package/dist/chunks/beam-errors-Ci0d3926.esm.js +0 -2
  299. package/dist/chunks/beam-errors-Ci0d3926.esm.js.map +0 -1
  300. package/dist/chunks/beam-errors-DUQ9pK2V.esm.d.ts +0 -46
  301. package/dist/chunks/cart-contents-CEoSx3y4.esm.d.ts +0 -18
  302. package/dist/chunks/cart-contents-DkoytiZh.esm.js +0 -2
  303. package/dist/chunks/cart-contents-DkoytiZh.esm.js.map +0 -1
  304. package/dist/chunks/css-card-grid-DixMt6ek.esm.js +0 -20
  305. package/dist/chunks/css-card-grid-DixMt6ek.esm.js.map +0 -1
  306. package/dist/chunks/enforce-config-DHnpgqSK.esm.js +0 -3
  307. package/dist/chunks/enforce-config-DHnpgqSK.esm.js.map +0 -1
  308. package/dist/chunks/enforce-config-DUbQnaLO.esm.js +0 -3
  309. package/dist/chunks/enforce-config-DUbQnaLO.esm.js.map +0 -1
  310. package/dist/chunks/events-COWOQoLW.esm.js +0 -2
  311. package/dist/chunks/events-COWOQoLW.esm.js.map +0 -1
  312. package/dist/chunks/events-Dwqfqbij.esm.d.ts +0 -214
  313. package/dist/chunks/index-8rOpG9kf.esm.js +0 -2
  314. package/dist/chunks/index-8rOpG9kf.esm.js.map +0 -1
  315. package/dist/chunks/index-B1GmdVT3.esm.js +0 -2
  316. package/dist/chunks/index-B1GmdVT3.esm.js.map +0 -1
  317. package/dist/chunks/index-B2dxbh1d.esm.js +0 -2
  318. package/dist/chunks/index-B2dxbh1d.esm.js.map +0 -1
  319. package/dist/chunks/index-BEEmYYxP.esm.js.map +0 -1
  320. package/dist/chunks/index-BIEV1MH0.esm.js +0 -2
  321. package/dist/chunks/index-BIEV1MH0.esm.js.map +0 -1
  322. package/dist/chunks/index-BaWMWAyt.esm.js +0 -2
  323. package/dist/chunks/index-BaWMWAyt.esm.js.map +0 -1
  324. package/dist/chunks/index-BeX4QeUu.esm.js +0 -2
  325. package/dist/chunks/index-BeX4QeUu.esm.js.map +0 -1
  326. package/dist/chunks/index-C3hpHWh1.esm.js +0 -2
  327. package/dist/chunks/index-C3hpHWh1.esm.js.map +0 -1
  328. package/dist/chunks/index-C3v-y56g.esm.js +0 -2
  329. package/dist/chunks/index-C3v-y56g.esm.js.map +0 -1
  330. package/dist/chunks/index-CqqF1sQo.esm.js +0 -2
  331. package/dist/chunks/index-CqqF1sQo.esm.js.map +0 -1
  332. package/dist/chunks/index-Cs4Kp9X4.esm.js +0 -2
  333. package/dist/chunks/index-Cs4Kp9X4.esm.js.map +0 -1
  334. package/dist/chunks/index-D20ifskY.esm.d.ts +0 -21
  335. package/dist/chunks/index-D3hxLDQF.esm.js +0 -2
  336. package/dist/chunks/index-D3hxLDQF.esm.js.map +0 -1
  337. package/dist/chunks/index-D5TZB-zM.esm.js +0 -2
  338. package/dist/chunks/index-D5TZB-zM.esm.js.map +0 -1
  339. package/dist/chunks/index-D6qJfs7_.esm.js +0 -2
  340. package/dist/chunks/index-D6qJfs7_.esm.js.map +0 -1
  341. package/dist/chunks/index-DSJACB_p.esm.js +0 -2
  342. package/dist/chunks/index-DSJACB_p.esm.js.map +0 -1
  343. package/dist/chunks/index-DmjZnpod.esm.js +0 -2
  344. package/dist/chunks/index-DmjZnpod.esm.js.map +0 -1
  345. package/dist/chunks/index-EJRmgmQu.esm.d.ts +0 -74
  346. package/dist/chunks/index-UMeAzKTG.esm.js.map +0 -1
  347. package/dist/chunks/index-mppXVWCH.esm.js +0 -2
  348. package/dist/chunks/index-mppXVWCH.esm.js.map +0 -1
  349. package/dist/chunks/index-n62IxH5D.esm.js +0 -2
  350. package/dist/chunks/index-n62IxH5D.esm.js.map +0 -1
  351. package/dist/chunks/index-nAPzvUWE.esm.js +0 -2
  352. package/dist/chunks/index-nAPzvUWE.esm.js.map +0 -1
  353. package/dist/chunks/index-xcGPhpiO.esm.d.ts +0 -44
  354. package/dist/chunks/is-all-html-elements-fcB7UUA1.esm.js +0 -2
  355. package/dist/chunks/is-all-html-elements-fcB7UUA1.esm.js.map +0 -1
  356. package/dist/chunks/loading-template-BFvXaTlD.esm.js +0 -2
  357. package/dist/chunks/loading-template-BFvXaTlD.esm.js.map +0 -1
  358. package/dist/chunks/localize-Dg7NgKIP.esm.js +0 -31
  359. package/dist/chunks/localize-Dg7NgKIP.esm.js.map +0 -1
  360. package/dist/chunks/localize-DkAbsh05.esm.js +0 -31
  361. package/dist/chunks/localize-DkAbsh05.esm.js.map +0 -1
  362. package/dist/chunks/order-page-B0WbVrvh.esm.js +0 -2
  363. package/dist/chunks/order-page-B0WbVrvh.esm.js.map +0 -1
  364. package/dist/chunks/order-page-CT3hnhzf.esm.js +0 -2
  365. package/dist/chunks/order-page-CT3hnhzf.esm.js.map +0 -1
  366. package/dist/chunks/progress-bar-B82FOT8n.esm.js +0 -54
  367. package/dist/chunks/progress-bar-B82FOT8n.esm.js.map +0 -1
  368. package/dist/chunks/promo-pill-label-DcsiJS_N.esm.js +0 -16
  369. package/dist/chunks/promo-pill-label-DcsiJS_N.esm.js.map +0 -1
  370. package/dist/chunks/promo-types-CmZzhkpN.esm.d.ts +0 -15
  371. package/dist/chunks/promo-types-DKAOFHJr.esm.js +0 -2
  372. package/dist/chunks/promo-types-DKAOFHJr.esm.js.map +0 -1
  373. package/dist/chunks/routes-BIMwJ8u9.esm.js +0 -2
  374. package/dist/chunks/routes-BIMwJ8u9.esm.js.map +0 -1
  375. package/dist/chunks/routes-DSu5s3K7.esm.js +0 -2
  376. package/dist/chunks/routes-DSu5s3K7.esm.js.map +0 -1
  377. package/dist/chunks/share-button-CLMw49f5.esm.js +0 -2
  378. package/dist/chunks/share-button-CLMw49f5.esm.js.map +0 -1
  379. package/dist/chunks/share-button-DXS3zbJz.esm.js +0 -2
  380. package/dist/chunks/share-button-DXS3zbJz.esm.js.map +0 -1
  381. package/dist/chunks/share-button-DkTpGZk1.esm.js +0 -172
  382. package/dist/chunks/share-button-Dzc7loia.esm.js.map +0 -1
  383. package/dist/chunks/types-D_PLq1pj.esm.d.ts +0 -28
  384. package/dist/chunks/types-DfRc36jU.esm.d.ts +0 -15
  385. package/dist/chunks/update-cart-ByUvNLyZ.esm.js +0 -2
  386. package/dist/chunks/update-cart-ByUvNLyZ.esm.js.map +0 -1
  387. package/dist/chunks/update-cart-yj_9VGHp.esm.js +0 -2
  388. package/dist/chunks/update-cart-yj_9VGHp.esm.js.map +0 -1
  389. package/dist/integrations/index.d.ts +0 -31
  390. package/dist/integrations/index.esm.js +0 -2
  391. package/dist/integrations/index.esm.js.map +0 -1
  392. package/dist/integrations/index.js +0 -2
  393. package/dist/integrations/index.js.map +0 -1
  394. package/dist/utils/index.d.ts +0 -16
  395. package/dist/utils/index.esm.js +0 -2
  396. package/dist/utils/index.esm.js.map +0 -1
  397. package/dist/utils/index.js +0 -2
  398. package/dist/utils/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"makeApiKeyHeader.esm.js","sources":["../../src/utils/makeApiKeyHeader.ts"],"sourcesContent":["export function makeApiKeyHeader(apiKey: string) {\n return {\n authorization: `Api-Key ${apiKey}`,\n };\n}\n"],"names":["makeApiKeyHeader","apiKey"],"mappings":"AAAO,SAASA,EAAiBC,EAAgB,CAC/C,MAAO,CACL,cAAe,WAAWA,CAAM,EAClC,CACF"}
1
+ {"version":3,"file":"makeApiKeyHeader.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- function i(e){return{authorization:`Api-Key ${e}`}}export{i as makeApiKeyHeader};
1
+ import{x as m}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{m as makeApiKeyHeader};
2
2
  //# sourceMappingURL=makeApiKeyHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"makeApiKeyHeader.js","sources":["../../src/utils/makeApiKeyHeader.ts"],"sourcesContent":["export function makeApiKeyHeader(apiKey: string) {\n return {\n authorization: `Api-Key ${apiKey}`,\n };\n}\n"],"names":["makeApiKeyHeader","apiKey"],"mappings":"AAAO,SAASA,EAAiBC,EAAgB,CAC/C,MAAO,CACL,cAAe,WAAWA,CAAM,EAClC,CACF"}
1
+ {"version":3,"file":"makeApiKeyHeader.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,17 +1,3 @@
1
- type Func<T extends any[], R> = (...args: T) => R;
2
- /**
3
- * Takes a function and returns a new memoized function.
4
- * If the same arguments are passed to the memoized function, it will return the previously computed result.
5
- * This is a "memoize once" function meaning it only compares the previous and current arguments, not historic values.
6
- * Results that throw errors or return rejected Promises are not cached.
7
- *
8
- * @param {Function} fn - The function to be memoized.
9
- * @param {(value: any) => boolean} [isEqual]- The equality function used to compare arguments.
10
- * @returns {Function} - The memoized function.
11
- * @param func
12
- */
13
- declare function memoizeLast<T extends any[], R>(func: Func<T, R>, { isEqual }?: {
14
- isEqual?: ((value: any, other: any) => boolean) | undefined;
15
- }): Func<T, R>;
16
-
17
- export { memoizeLast };
1
+ export { M as MemoizedLast, A as memoizeLast } from '../chunks/utils-COGFpDER.esm.js';
2
+ import 'lodash-es/debounce';
3
+ import 'lodash-es/isEqual';
@@ -1,2 +1,2 @@
1
- import{i as a}from"../chunks/lodash-BSs6Il-c.esm.js";function f(o,{isEqual:u=a}={}){let i=null,l=null,e=!1,r=0;return(...s)=>{if(e&&u(i,s))return l;const t=o(...s);if(t instanceof Promise){r++;const n=r;t.catch(()=>{n===r&&(e=!1)})}return i=s,l=t,e=!0,t}}export{f as memoizeLast};
1
+ import"../chunks/lodash-CrMU6wKg.esm.js";import{Q as r}from"../chunks/utils-C5hmbxa4.esm.js";export{r as memoizeLast};
2
2
  //# sourceMappingURL=memoize-last.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoize-last.esm.js","sources":["../../src/utils/memoize-last.ts"],"sourcesContent":["import { isEqual as defaultIsEqual } from \"./is-equal\";\n\ntype Func<T extends any[], R> = (...args: T) => R;\n\n/**\n * Takes a function and returns a new memoized function.\n * If the same arguments are passed to the memoized function, it will return the previously computed result.\n * This is a \"memoize once\" function meaning it only compares the previous and current arguments, not historic values.\n * Results that throw errors or return rejected Promises are not cached.\n *\n * @param {Function} fn - The function to be memoized.\n * @param {(value: any) => boolean} [isEqual]- The equality function used to compare arguments.\n * @returns {Function} - The memoized function.\n * @param func\n */\nexport function memoizeLast<T extends any[], R>(func: Func<T, R>, { isEqual = defaultIsEqual } = {}): Func<T, R> {\n let lastArgs: T | null = null;\n let lastResult: R | null = null;\n let hasResult = false; // Separate variable to track whether lastResult exists because lastResult could be falsy\n let promiseCounter = 0; // Used to keep track of result order in async invocation so we know to replace cache or not\n\n return (...args: T): R => {\n if (hasResult && isEqual(lastArgs, args)) {\n return lastResult as R;\n }\n\n const result = func(...args); // Errors here are not caught, so result will not cache if there is an error\n\n if (result instanceof Promise) {\n promiseCounter++;\n const promiseCounterAtStart = promiseCounter;\n result.catch(() => {\n // Don't return cached result next time if the Promise rejects, unless a new Promise has already replaced\n // the one that rejected\n if (promiseCounterAtStart === promiseCounter) {\n hasResult = false;\n }\n });\n }\n\n // Cache the latest args and result.\n lastArgs = args;\n lastResult = result;\n hasResult = true;\n\n return result;\n };\n}\n"],"names":["memoizeLast","func","isEqual","defaultIsEqual","lastArgs","lastResult","hasResult","promiseCounter","args","result","promiseCounterAtStart"],"mappings":"qDAeO,SAASA,EAAgCC,EAAkB,CAAE,QAAAC,EAAUC,CAAe,EAAI,CAAA,EAAgB,CAC/G,IAAIC,EAAqB,KACrBC,EAAuB,KACvBC,EAAY,GACZC,EAAiB,EAErB,MAAO,IAAIC,IAAe,CACxB,GAAIF,GAAaJ,EAAQE,EAAUI,CAAI,EACrC,OAAOH,EAGT,MAAMI,EAASR,EAAK,GAAGO,CAAI,EAE3B,GAAIC,aAAkB,QAAS,CAC7BF,IACA,MAAMG,EAAwBH,EAC9BE,EAAO,MAAM,IAAM,CAGbC,IAA0BH,IAC5BD,EAAY,GAEhB,CAAC,CACH,CAGA,OAAAF,EAAWI,EACXH,EAAaI,EACbH,EAAY,GAELG,CACT,CACF"}
1
+ {"version":3,"file":"memoize-last.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{i as a}from"../chunks/lodash-BSs6Il-c.esm.js";function f(o,{isEqual:u=a}={}){let i=null,l=null,e=!1,r=0;return(...s)=>{if(e&&u(i,s))return l;const t=o(...s);if(t instanceof Promise){r++;const n=r;t.catch(()=>{n===r&&(e=!1)})}return i=s,l=t,e=!0,t}}export{f as memoizeLast};
1
+ import"../chunks/lodash-CrMU6wKg.esm.js";import{Q as r}from"../chunks/utils-C5hmbxa4.esm.js";export{r as memoizeLast};
2
2
  //# sourceMappingURL=memoize-last.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memoize-last.js","sources":["../../src/utils/memoize-last.ts"],"sourcesContent":["import { isEqual as defaultIsEqual } from \"./is-equal\";\n\ntype Func<T extends any[], R> = (...args: T) => R;\n\n/**\n * Takes a function and returns a new memoized function.\n * If the same arguments are passed to the memoized function, it will return the previously computed result.\n * This is a \"memoize once\" function meaning it only compares the previous and current arguments, not historic values.\n * Results that throw errors or return rejected Promises are not cached.\n *\n * @param {Function} fn - The function to be memoized.\n * @param {(value: any) => boolean} [isEqual]- The equality function used to compare arguments.\n * @returns {Function} - The memoized function.\n * @param func\n */\nexport function memoizeLast<T extends any[], R>(func: Func<T, R>, { isEqual = defaultIsEqual } = {}): Func<T, R> {\n let lastArgs: T | null = null;\n let lastResult: R | null = null;\n let hasResult = false; // Separate variable to track whether lastResult exists because lastResult could be falsy\n let promiseCounter = 0; // Used to keep track of result order in async invocation so we know to replace cache or not\n\n return (...args: T): R => {\n if (hasResult && isEqual(lastArgs, args)) {\n return lastResult as R;\n }\n\n const result = func(...args); // Errors here are not caught, so result will not cache if there is an error\n\n if (result instanceof Promise) {\n promiseCounter++;\n const promiseCounterAtStart = promiseCounter;\n result.catch(() => {\n // Don't return cached result next time if the Promise rejects, unless a new Promise has already replaced\n // the one that rejected\n if (promiseCounterAtStart === promiseCounter) {\n hasResult = false;\n }\n });\n }\n\n // Cache the latest args and result.\n lastArgs = args;\n lastResult = result;\n hasResult = true;\n\n return result;\n };\n}\n"],"names":["memoizeLast","func","isEqual","defaultIsEqual","lastArgs","lastResult","hasResult","promiseCounter","args","result","promiseCounterAtStart"],"mappings":"qDAeO,SAASA,EAAgCC,EAAkB,CAAE,QAAAC,EAAUC,CAAe,EAAI,CAAA,EAAgB,CAC/G,IAAIC,EAAqB,KACrBC,EAAuB,KACvBC,EAAY,GACZC,EAAiB,EAErB,MAAO,IAAIC,IAAe,CACxB,GAAIF,GAAaJ,EAAQE,EAAUI,CAAI,EACrC,OAAOH,EAGT,MAAMI,EAASR,EAAK,GAAGO,CAAI,EAE3B,GAAIC,aAAkB,QAAS,CAC7BF,IACA,MAAMG,EAAwBH,EAC9BE,EAAO,MAAM,IAAM,CAGbC,IAA0BH,IAC5BD,EAAY,GAEhB,CAAC,CACH,CAGA,OAAAF,EAAWI,EACXH,EAAaI,EACbH,EAAY,GAELG,CACT,CACF"}
1
+ {"version":3,"file":"memoize-last.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,3 +1,3 @@
1
- declare const initNetworkListeners: () => void;
2
-
3
- export { initNetworkListeners };
1
+ export { i as initNetworkListeners, J as teardownNetworkListeners } from '../chunks/utils-COGFpDER.esm.js';
2
+ import 'lodash-es/debounce';
3
+ import 'lodash-es/isEqual';
@@ -1,2 +1,2 @@
1
- import{d as i}from"../chunks/events-COWOQoLW.esm.js";const a={apply:function(o,r,t){return o(...t).then(e=>{if(e.ok){const n=e.clone();window.dispatchEvent(new i({url:t[0].toString(),method:(t[1]?.method||"get").toLowerCase(),type:"fetch",response:n}))}return e})}},d={construct(o,r){const t=new o(...r),e=t.open;let n,s;return t.open=function(c,p){n=c,s=p,e.apply(this,arguments)},t.addEventListener("load",()=>{window.dispatchEvent(new i({url:(s||"").toString(),method:(n||"get").toLowerCase(),type:"xhr",xhr:t}))}),t}};let w=!1;const h=()=>{w||(window.fetch=new Proxy(window.fetch,a),XMLHttpRequest=new Proxy(XMLHttpRequest,d),w=!0)};export{h as initNetworkListeners};
1
+ import{b as o,X as s}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{o as initNetworkListeners,s as teardownNetworkListeners};
2
2
  //# sourceMappingURL=network-listeners.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network-listeners.esm.js","sources":["../../src/utils/network-listeners.ts"],"sourcesContent":["import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst fetchHandler = {\n apply: function (target: any, _thisArg: any, args: any[]) {\n return target(...args).then((response: Response) => {\n if (response.ok) {\n const responseCopy = response.clone();\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: args[0].toString(),\n method: (args[1]?.method || \"get\").toLowerCase(),\n type: \"fetch\",\n response: responseCopy,\n }),\n );\n }\n return response;\n });\n },\n};\n\n/**\n * XMLHTTPRequest Listener\n */\nconst xhrHandler = {\n construct(TargetConstructor: any, args: any[]) {\n const xhr: XMLHttpRequest = new TargetConstructor(...args);\n const _open: (method: string, url: string | URL) => void = xhr.open;\n let _method: string;\n let _url: string | URL;\n\n xhr.open = function (method: string, url: string | URL) {\n _method = method;\n _url = url;\n // @ts-expect-error arguments is untyped since xhr.open is an overloaded method\n // eslint-disable-next-line prefer-rest-params\n _open.apply(this, arguments);\n };\n\n xhr.addEventListener(\"load\", () => {\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: (_url || \"\").toString(),\n method: (_method || \"get\").toLowerCase(),\n type: \"xhr\",\n xhr,\n }),\n );\n });\n\n return xhr;\n },\n};\n\n/**\n * Side-Effects Setup (initialize listeners)\n */\n\nlet initializedListeners = false;\n\nexport const initNetworkListeners = () => {\n if (initializedListeners) return;\n window.fetch = new Proxy(window.fetch, fetchHandler);\n XMLHttpRequest = new Proxy(XMLHttpRequest, xhrHandler);\n initializedListeners = true;\n};\n"],"names":["fetchHandler","target","_thisArg","args","response","responseCopy","BeamNetworkCallEvent","xhrHandler","TargetConstructor","xhr","_open","_method","_url","method","url","initializedListeners","initNetworkListeners"],"mappings":"qDAMA,MAAMA,EAAe,CACnB,MAAO,SAAUC,EAAaC,EAAeC,EAAa,CACxD,OAAOF,EAAO,GAAGE,CAAI,EAAE,KAAMC,GAAuB,CAClD,GAAIA,EAAS,GAAI,CACf,MAAMC,EAAeD,EAAS,MAAA,EAC9B,OAAO,cACL,IAAIE,EAAqB,CACvB,IAAKH,EAAK,CAAC,EAAE,SAAA,EACb,QAASA,EAAK,CAAC,GAAG,QAAU,OAAO,YAAA,EACnC,KAAM,QACN,SAAUE,CACZ,CAAC,CACH,CACF,CACA,OAAOD,CACT,CAAC,CACH,CACF,EAKMG,EAAa,CACjB,UAAUC,EAAwBL,EAAa,CAC7C,MAAMM,EAAsB,IAAID,EAAkB,GAAGL,CAAI,EACnDO,EAAqDD,EAAI,KAC/D,IAAIE,EACAC,EAEJ,OAAAH,EAAI,KAAO,SAAUI,EAAgBC,EAAmB,CACtDH,EAAUE,EACVD,EAAOE,EAGPJ,EAAM,MAAM,KAAM,SAAS,CAC7B,EAEAD,EAAI,iBAAiB,OAAQ,IAAM,CACjC,OAAO,cACL,IAAIH,EAAqB,CACvB,KAAMM,GAAQ,IAAI,SAAA,EAClB,QAASD,GAAW,OAAO,YAAA,EAC3B,KAAM,MACN,IAAAF,CACF,CAAC,CACH,CACF,CAAC,EAEMA,CACT,CACF,EAMA,IAAIM,EAAuB,GAEpB,MAAMC,EAAuB,IAAM,CACpCD,IACJ,OAAO,MAAQ,IAAI,MAAM,OAAO,MAAOf,CAAY,EACnD,eAAiB,IAAI,MAAM,eAAgBO,CAAU,EACrDQ,EAAuB,GACzB"}
1
+ {"version":3,"file":"network-listeners.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{d as i}from"../chunks/events-COWOQoLW.esm.js";const a={apply:function(o,r,t){return o(...t).then(e=>{if(e.ok){const n=e.clone();window.dispatchEvent(new i({url:t[0].toString(),method:(t[1]?.method||"get").toLowerCase(),type:"fetch",response:n}))}return e})}},d={construct(o,r){const t=new o(...r),e=t.open;let n,s;return t.open=function(c,p){n=c,s=p,e.apply(this,arguments)},t.addEventListener("load",()=>{window.dispatchEvent(new i({url:(s||"").toString(),method:(n||"get").toLowerCase(),type:"xhr",xhr:t}))}),t}};let w=!1;const h=()=>{w||(window.fetch=new Proxy(window.fetch,a),XMLHttpRequest=new Proxy(XMLHttpRequest,d),w=!0)};export{h as initNetworkListeners};
1
+ import{b as o,X as s}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{o as initNetworkListeners,s as teardownNetworkListeners};
2
2
  //# sourceMappingURL=network-listeners.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network-listeners.js","sources":["../../src/utils/network-listeners.ts"],"sourcesContent":["import { BeamNetworkCallEvent } from \"./events\";\n\n/**\n * Fetch Listener\n */\n\nconst fetchHandler = {\n apply: function (target: any, _thisArg: any, args: any[]) {\n return target(...args).then((response: Response) => {\n if (response.ok) {\n const responseCopy = response.clone();\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: args[0].toString(),\n method: (args[1]?.method || \"get\").toLowerCase(),\n type: \"fetch\",\n response: responseCopy,\n }),\n );\n }\n return response;\n });\n },\n};\n\n/**\n * XMLHTTPRequest Listener\n */\nconst xhrHandler = {\n construct(TargetConstructor: any, args: any[]) {\n const xhr: XMLHttpRequest = new TargetConstructor(...args);\n const _open: (method: string, url: string | URL) => void = xhr.open;\n let _method: string;\n let _url: string | URL;\n\n xhr.open = function (method: string, url: string | URL) {\n _method = method;\n _url = url;\n // @ts-expect-error arguments is untyped since xhr.open is an overloaded method\n // eslint-disable-next-line prefer-rest-params\n _open.apply(this, arguments);\n };\n\n xhr.addEventListener(\"load\", () => {\n window.dispatchEvent(\n new BeamNetworkCallEvent({\n url: (_url || \"\").toString(),\n method: (_method || \"get\").toLowerCase(),\n type: \"xhr\",\n xhr,\n }),\n );\n });\n\n return xhr;\n },\n};\n\n/**\n * Side-Effects Setup (initialize listeners)\n */\n\nlet initializedListeners = false;\n\nexport const initNetworkListeners = () => {\n if (initializedListeners) return;\n window.fetch = new Proxy(window.fetch, fetchHandler);\n XMLHttpRequest = new Proxy(XMLHttpRequest, xhrHandler);\n initializedListeners = true;\n};\n"],"names":["fetchHandler","target","_thisArg","args","response","responseCopy","BeamNetworkCallEvent","xhrHandler","TargetConstructor","xhr","_open","_method","_url","method","url","initializedListeners","initNetworkListeners"],"mappings":"qDAMA,MAAMA,EAAe,CACnB,MAAO,SAAUC,EAAaC,EAAeC,EAAa,CACxD,OAAOF,EAAO,GAAGE,CAAI,EAAE,KAAMC,GAAuB,CAClD,GAAIA,EAAS,GAAI,CACf,MAAMC,EAAeD,EAAS,MAAA,EAC9B,OAAO,cACL,IAAIE,EAAqB,CACvB,IAAKH,EAAK,CAAC,EAAE,SAAA,EACb,QAASA,EAAK,CAAC,GAAG,QAAU,OAAO,YAAA,EACnC,KAAM,QACN,SAAUE,CACZ,CAAC,CACH,CACF,CACA,OAAOD,CACT,CAAC,CACH,CACF,EAKMG,EAAa,CACjB,UAAUC,EAAwBL,EAAa,CAC7C,MAAMM,EAAsB,IAAID,EAAkB,GAAGL,CAAI,EACnDO,EAAqDD,EAAI,KAC/D,IAAIE,EACAC,EAEJ,OAAAH,EAAI,KAAO,SAAUI,EAAgBC,EAAmB,CACtDH,EAAUE,EACVD,EAAOE,EAGPJ,EAAM,MAAM,KAAM,SAAS,CAC7B,EAEAD,EAAI,iBAAiB,OAAQ,IAAM,CACjC,OAAO,cACL,IAAIH,EAAqB,CACvB,KAAMM,GAAQ,IAAI,SAAA,EAClB,QAASD,GAAW,OAAO,YAAA,EAC3B,KAAM,MACN,IAAAF,CACF,CAAC,CACH,CACF,CAAC,EAEMA,CACT,CACF,EAMA,IAAIM,EAAuB,GAEpB,MAAMC,EAAuB,IAAM,CACpCD,IACJ,OAAO,MAAQ,IAAI,MAAM,OAAO,MAAOf,CAAY,EACnD,eAAiB,IAAI,MAAM,eAAgBO,CAAU,EACrDQ,EAAuB,GACzB"}
1
+ {"version":3,"file":"network-listeners.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,111 +1,3 @@
1
- import { b as TBeamCartLocalStorage } from '../chunks/cart-contents-CEoSx3y4.esm.js';
2
- import { a as TPromoCodeAttribute, T as TPromoCodeRequest, b as TPromoCodeResponse, c as TUnvalidatedPromoRequest, d as TValidatedPromoResponse } from '../chunks/promo-types-CmZzhkpN.esm.js';
3
- import '../chunks/openapi-spec-B4z4_CMq.esm.js';
4
-
5
- /**
6
- * Retrieves all validated promo codes stored in the "beam_promo_codes" cookie and parses it
7
- *
8
- * @returns {TPromoCodeResponse | undefined} An array of `ValidatedPromoCode` objects if found and parsed successfully, otherwise `undefined`
9
- */
10
- declare const getAllPromoCodesFromCookie: () => TPromoCodeResponse | undefined;
11
- /**
12
- * Stores the validated promo codes in the "beam_promo_codes" cookie, replaces and does not merge
13
- *
14
- * @param {TValidatedPromoResponse} validatedPromoCodes
15
- * @param {string} domain
16
- */
17
- declare const setPromoCodeInCookie: ({ validatedPromoCodes, domain, }: {
18
- validatedPromoCodes: TValidatedPromoResponse;
19
- domain?: string;
20
- }) => void;
21
- /**
22
- * Retrieves promo codes from localStorage, scoped by API key
23
- * @param {string} apiKey API key used for storage scoping
24
- * @returns {TPromoCodeRequest | null} - Returns stored promo codes object containing both
25
- * validated and unvalidated codes
26
- * - If no codes exist, returns a fresh object with empty arrays
27
- *
28
- */
29
- declare const getPromoCodesLocalStorage: ({ apiKey }: {
30
- apiKey: string;
31
- }) => TPromoCodeRequest | null;
32
- /**
33
- * Sets promo codes in localStorage
34
- * @param {TPromoCodeRequest} promoCodes New promo codes to add
35
- * @param {string} apiKey API key for storage scoping
36
- */
37
- declare const setPromoCodesInLocalStorage: ({ apiKey, promoCodes, }: {
38
- apiKey?: string;
39
- promoCodes: Partial<TPromoCodeRequest>;
40
- }) => void;
41
- /**
42
- * Merges new promo codes with existing ones and returns the combined result
43
- * @param {Partial<TPromoCodeRequest>} newPromos New promo codes to add
44
- * @param {string} apiKey API key for storage scoping
45
- * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes
46
- * @example
47
- * const result = mergePromoCodes({
48
- * apiKey: 'beam_123',
49
- * newPromos: {
50
- * unvalidatedPromoCodes: [
51
- * { type: 'manual', attributes: { value: 'WINTER20' } },
52
- * { type: 'url', attributes: { url: 'www.example.com/?promo=HOLIDAY25' } }
53
- * ]
54
- * }
55
- * });
56
- */
57
- declare const mergeStoreAndReturnPromos: ({ newPromos, apiKey, }: {
58
- newPromos: Partial<TPromoCodeRequest>;
59
- apiKey: string;
60
- }) => TPromoCodeRequest;
61
- /**
62
- * Formats unvalidated promo codes by determining their source and attributes
63
- * The function will assign `QueryParam` as the source if a `url` exists,
64
- * otherwise, it will assign `Manual` as the source
65
- *
66
- * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted
67
- * @returns {TUnvalidatedPromoRequest} - An array of UnvalidatedPromoCode objects,
68
- * each with a source and attributes object
69
- */
70
- declare const mapToUnvalidatedPromoCodes: (promoAttributes: TPromoCodeAttribute[]) => TUnvalidatedPromoRequest;
71
- /**
72
- * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted
73
- * @param {string} apiKey API key for storage scoping
74
- * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes
75
- */
76
- declare const formatStoreAndReturnPromoCodes: (promoAttributes: TPromoCodeAttribute[], apiKey: string) => TPromoCodeRequest;
77
- /**
78
- * Extracts applicable promo codes from the cart object
79
- * This function retrieves discounts stored in the cart's `content.discounts` array,
80
- * filters out only the applicable promo codes, and returns them as an array of strings
81
- *
82
- * @param {TBeamCartLocalStorage} cart The cart object retrieved from local storage
83
- * @returns {string[]} An array of applicable promo codes
84
- */
85
- declare const getPromoCodesFromCart: (cart: TBeamCartLocalStorage) => string[];
86
- /**
87
- * Gets promo code exclusively from Shopify discount cookie
88
- * @returns {string | null} Single discount code or null if not found
89
- */
90
- declare const getPromoCodeFromShopifyCookie: () => string | null;
91
- /**
92
- * Safely parses a JSON string into an array of strings
93
- * If parsing fails or the input is not a valid JSON array, it returns an empty array
94
- *
95
- * @param {string | undefined | null} jsonString The JSON string to parse
96
- * @returns {string[]} The parsed array of strings or an empty array if parsing fails
97
- */
98
- declare const parseJsonStringArray: (jsonString: string | undefined | null) => string[];
99
- /**
100
- * Retrieves and sanitizes the current URL for storage, preserving only safe query parameters
101
- *
102
- * @returns {TPromoCodeAttribute} Returns an object with only the `url` property set
103
- */
104
- declare const getSanitizedUrlForStorage: () => TPromoCodeAttribute | undefined;
105
- declare const promoCodesAreEqual: (a: TPromoCodeRequest, b: TPromoCodeRequest) => boolean;
106
- declare const isEmptyPromoData: (promos: {
107
- unvalidatedPromoCodes?: unknown[];
108
- validatedPromoCodes?: unknown[];
109
- }) => boolean;
110
-
111
- export { formatStoreAndReturnPromoCodes, getAllPromoCodesFromCookie, getPromoCodeFromShopifyCookie, getPromoCodesFromCart, getPromoCodesLocalStorage, getSanitizedUrlForStorage, isEmptyPromoData, mapToUnvalidatedPromoCodes, mergeStoreAndReturnPromos, parseJsonStringArray, promoCodesAreEqual, setPromoCodeInCookie, setPromoCodesInLocalStorage };
1
+ export { n as formatStoreAndReturnPromoCodes, o as getAllPromoCodesFromCookie, r as getPromoCodeFromShopifyCookie, s as getPromoCodesFromCart, t as getPromoCodesLocalStorage, v as getSanitizedUrlForStorage, x as isEmptyPromoData, z as mapToUnvalidatedPromoCodes, C as mergeStoreAndReturnPromos, D as parseJsonStringArray, E as promoCodesAreEqual, H as setPromoCodeInCookie, I as setPromoCodesInLocalStorage } from '../chunks/utils-COGFpDER.esm.js';
2
+ import 'lodash-es/debounce';
3
+ import 'lodash-es/isEqual';
@@ -1,2 +1,2 @@
1
- import{P as n,b as m,a as l}from"../chunks/promo-types-DKAOFHJr.esm.js";import{L as u}from"../chunks/beam-errors-Ci0d3926.esm.js";import{setCookieValue as f,getCookieValue as c}from"./cookies.esm.js";import{createScopedLocalStorage as p}from"./local-storage.esm.js";import{logger as s}from"./logger.esm.js";const S=100,h="utm_",A="discount_code",O=()=>{const o=c(l);if(o)try{return JSON.parse(o)}catch(e){s.error("Failed to parse beam_promo_codes cookie:",e);return}},w=({validatedPromoCodes:o,domain:e})=>{const r={validatedPromoCodes:o},a=Date.now()+1e3*60*60*24*90;f({name:l,value:JSON.stringify(r),path:"/",domain:e,expires:a})},C=({apiKey:o})=>o?p({apiKey:o}).getItemJson(n)??{unvalidatedPromoCodes:[],validatedPromoCodes:[]}:(s.error(new u("API key is required to get promo codes")),null),P=({apiKey:o,promoCodes:e})=>{if(!o){s.error(new u("API key is required to set promo codes"));return}const r=p({apiKey:o}),a={unvalidatedPromoCodes:e?.unvalidatedPromoCodes||[],validatedPromoCodes:e?.validatedPromoCodes||[]};r.setItemJson(n,a)},v=({newPromos:o,apiKey:e})=>{const r=C({apiKey:e})??{unvalidatedPromoCodes:[],validatedPromoCodes:[]},a=(o?.unvalidatedPromoCodes||[]).filter(d=>!r.unvalidatedPromoCodes.some(i=>JSON.stringify(i)===JSON.stringify(d))),t={unvalidatedPromoCodes:[...r.unvalidatedPromoCodes,...a],validatedPromoCodes:[...r.validatedPromoCodes,...o?.validatedPromoCodes||[]]};return(t.unvalidatedPromoCodes.length>0||t.validatedPromoCodes.length>0)&&P({apiKey:e,promoCodes:t}),{...t}},g=o=>o.reduce((e,r)=>{const a=e||[];return r.url?a.push({type:m.Url,attributes:{url:r.url}}):r.value?a.push({type:m.Manual,attributes:{value:r.value}}):s.error("Invalid PromoAttribute - must contain either 'url' or 'value'",{attr:r}),a},[]),K=(o,e)=>{const r=g(o);return v({newPromos:{unvalidatedPromoCodes:r},apiKey:e})},_=o=>{if(!o?.content)return[];const e=o.content.discounts?.filter(t=>t.applicable)?.map(t=>t.code)||[],r=o.content.items?.flatMap(t=>t.discounts?.filter(d=>d.applicable)?.map(d=>d.code)||[])||[],a=[...e,...r];return[...new Set(a)]},b=()=>c(A)??null,E=o=>{if(!o)return[];try{const e=JSON.parse(o);return Array.isArray(e)&&e.every(r=>typeof r=="string")?e:[]}catch(e){return s.error("Failed to parse JSON:",e),[]}},J=()=>{try{const o=new URL(window.location.href);if(!o.search)return;const e=new URL(o.origin+o.pathname);let r=!1;o.searchParams.forEach((t,d)=>{const i=d.startsWith(h),y=t.length<=S;i&&y&&(e.searchParams.append(d,t),r=!0)});const a=e.toString();return r?{url:a}:void 0}catch{return}},L=(o,e)=>{const r=a=>(Array.isArray(a)?a:[]).map(t=>t.type==="manual"?t.attributes?.value:t.type==="url"?t.attributes?.url:"").filter(Boolean).sort().join(",");return r(o?.unvalidatedPromoCodes)===r(e?.unvalidatedPromoCodes)},k=o=>(!o.unvalidatedPromoCodes||o.unvalidatedPromoCodes.length===0)&&(!o.validatedPromoCodes||o.validatedPromoCodes.length===0);export{K as formatStoreAndReturnPromoCodes,O as getAllPromoCodesFromCookie,b as getPromoCodeFromShopifyCookie,_ as getPromoCodesFromCart,C as getPromoCodesLocalStorage,J as getSanitizedUrlForStorage,k as isEmptyPromoData,g as mapToUnvalidatedPromoCodes,v as mergeStoreAndReturnPromos,E as parseJsonStringArray,L as promoCodesAreEqual,w as setPromoCodeInCookie,P as setPromoCodesInLocalStorage};
1
+ import{h as a,_ as s,k as t,G as m,f as d,j as C,C as g,$ as i,a0 as n,F as P,p,I as S,H as l}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{a as formatStoreAndReturnPromoCodes,s as getAllPromoCodesFromCookie,t as getPromoCodeFromShopifyCookie,m as getPromoCodesFromCart,d as getPromoCodesLocalStorage,C as getSanitizedUrlForStorage,g as isEmptyPromoData,i as mapToUnvalidatedPromoCodes,n as mergeStoreAndReturnPromos,P as parseJsonStringArray,p as promoCodesAreEqual,S as setPromoCodeInCookie,l as setPromoCodesInLocalStorage};
2
2
  //# sourceMappingURL=promoManager.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promoManager.esm.js","sources":["../../src/utils/promoManager.ts"],"sourcesContent":["import { Discount, TBeamCartLocalStorage } from \"../shared/cart-contents\";\nimport {\n TPromoCodeAttribute,\n PromoCodeSource,\n TPromoCodeRequest,\n TPromoCodeResponse,\n TValidatedPromoResponse,\n TUnvalidatedPromoRequest,\n PROMO_LOCAL_STORAGE_KEY,\n PROMO_CODES_COOKIE_NAME,\n TUnvalidatedPromoCode,\n} from \"../shared/promo-types\";\nimport { LocalStorageError } from \"./beam-errors\";\nimport { getCookieValue, setCookieValue } from \"./cookies\";\nimport { createScopedLocalStorage } from \"./local-storage\";\nimport { logger } from \"./logger\";\n\nconst URL_QUERY_PARAM_CHAR_LIMIT = 100;\nconst ALLOWED_URL_PREFIX = \"utm_\";\n// Standard name for Shopify's discount tracking cookie\nconst DISCOUNT_CODE_COOKIE_NAME = \"discount_code\";\n// < --------- Cookie ------- >\n\n/**\n * Retrieves all validated promo codes stored in the \"beam_promo_codes\" cookie and parses it\n *\n * @returns {TPromoCodeResponse | undefined} An array of `ValidatedPromoCode` objects if found and parsed successfully, otherwise `undefined`\n */\nexport const getAllPromoCodesFromCookie = (): TPromoCodeResponse | undefined => {\n const promoCodesString = getCookieValue(PROMO_CODES_COOKIE_NAME);\n\n if (!promoCodesString) return undefined;\n\n try {\n const promoCodes: TPromoCodeResponse = JSON.parse(promoCodesString);\n return promoCodes;\n } catch (error) {\n logger.error(\"Failed to parse beam_promo_codes cookie:\", error);\n return undefined;\n }\n};\n\n/**\n * Stores the validated promo codes in the \"beam_promo_codes\" cookie, replaces and does not merge\n *\n * @param {TValidatedPromoResponse} validatedPromoCodes\n * @param {string} domain\n */\nexport const setPromoCodeInCookie = ({\n validatedPromoCodes,\n domain,\n}: {\n validatedPromoCodes: TValidatedPromoResponse;\n domain?: string;\n}) => {\n const promoCodeData = {\n validatedPromoCodes: validatedPromoCodes,\n };\n const threeMonthsFromNow = Date.now() + 1000 * 60 * 60 * 24 * 90;\n\n setCookieValue({\n name: PROMO_CODES_COOKIE_NAME,\n value: JSON.stringify(promoCodeData),\n path: \"/\",\n domain,\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: threeMonthsFromNow,\n });\n};\n\n// < --------- Local Storage ------- >\n/**\n * Retrieves promo codes from localStorage, scoped by API key\n * @param {string} apiKey API key used for storage scoping\n * @returns {TPromoCodeRequest | null} - Returns stored promo codes object containing both\n * validated and unvalidated codes\n * - If no codes exist, returns a fresh object with empty arrays\n *\n */\nexport const getPromoCodesLocalStorage = ({ apiKey }: { apiKey: string }): TPromoCodeRequest | null => {\n if (!apiKey) {\n logger.error(new LocalStorageError(\"API key is required to get promo codes\"));\n return null;\n }\n\n const storage = createScopedLocalStorage({ apiKey });\n const allPromos = storage.getItemJson<TPromoCodeRequest>(PROMO_LOCAL_STORAGE_KEY) ?? {\n unvalidatedPromoCodes: [],\n validatedPromoCodes: [],\n };\n\n return allPromos;\n};\n\n/**\n * Sets promo codes in localStorage\n * @param {TPromoCodeRequest} promoCodes New promo codes to add\n * @param {string} apiKey API key for storage scoping\n */\nexport const setPromoCodesInLocalStorage = ({\n apiKey,\n promoCodes,\n}: {\n apiKey?: string;\n promoCodes: Partial<TPromoCodeRequest>;\n}): void => {\n if (!apiKey) {\n logger.error(new LocalStorageError(\"API key is required to set promo codes\"));\n return;\n }\n const storage = createScopedLocalStorage({ apiKey });\n const completePromoCodes: TPromoCodeRequest = {\n unvalidatedPromoCodes: promoCodes?.unvalidatedPromoCodes || [],\n validatedPromoCodes: promoCodes?.validatedPromoCodes || [],\n };\n storage.setItemJson(PROMO_LOCAL_STORAGE_KEY, completePromoCodes);\n};\n\n/**\n * Merges new promo codes with existing ones and returns the combined result\n * @param {Partial<TPromoCodeRequest>} newPromos New promo codes to add\n * @param {string} apiKey API key for storage scoping\n * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes\n * @example\n * const result = mergePromoCodes({\n * apiKey: 'beam_123',\n * newPromos: {\n * unvalidatedPromoCodes: [\n * { type: 'manual', attributes: { value: 'WINTER20' } },\n * { type: 'url', attributes: { url: 'www.example.com/?promo=HOLIDAY25' } }\n * ]\n * }\n * });\n */\nexport const mergeStoreAndReturnPromos = ({\n newPromos,\n apiKey,\n}: {\n newPromos: Partial<TPromoCodeRequest>;\n apiKey: string;\n}): TPromoCodeRequest => {\n const existing = getPromoCodesLocalStorage({ apiKey }) ?? {\n unvalidatedPromoCodes: [],\n validatedPromoCodes: [],\n };\n\n const uniqueNewUnvalidatedPromos = (newPromos?.unvalidatedPromoCodes || []).filter((newPromo) => {\n const isDuplicate = existing.unvalidatedPromoCodes.some((existingPromo) => {\n return JSON.stringify(existingPromo) === JSON.stringify(newPromo);\n });\n return !isDuplicate;\n });\n\n const mergedCodes: TPromoCodeRequest = {\n unvalidatedPromoCodes: [...existing.unvalidatedPromoCodes, ...uniqueNewUnvalidatedPromos],\n validatedPromoCodes: [...existing.validatedPromoCodes, ...(newPromos?.validatedPromoCodes || [])],\n };\n\n const shouldStore = mergedCodes.unvalidatedPromoCodes.length > 0 || mergedCodes.validatedPromoCodes.length > 0;\n\n if (shouldStore) {\n setPromoCodesInLocalStorage({ apiKey, promoCodes: mergedCodes });\n }\n return {\n ...mergedCodes,\n };\n};\n\n/**\n * Formats unvalidated promo codes by determining their source and attributes\n * The function will assign `QueryParam` as the source if a `url` exists,\n * otherwise, it will assign `Manual` as the source\n *\n * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted\n * @returns {TUnvalidatedPromoRequest} - An array of UnvalidatedPromoCode objects,\n * each with a source and attributes object\n */\nexport const mapToUnvalidatedPromoCodes = (promoAttributes: TPromoCodeAttribute[]): TUnvalidatedPromoRequest => {\n return promoAttributes.reduce<TUnvalidatedPromoRequest>((acc, attr) => {\n const result: TUnvalidatedPromoRequest = acc || [];\n if (attr.url) {\n result.push({\n type: PromoCodeSource.Url,\n attributes: { url: attr.url },\n });\n } else if (attr.value) {\n result.push({\n type: PromoCodeSource.Manual,\n attributes: { value: attr.value },\n });\n } else {\n logger.error(\"Invalid PromoAttribute - must contain either 'url' or 'value'\", { attr });\n }\n return result;\n }, []);\n};\n\n/**\n * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted\n * @param {string} apiKey API key for storage scoping\n * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes\n */\nexport const formatStoreAndReturnPromoCodes = (\n promoAttributes: TPromoCodeAttribute[],\n apiKey: string,\n): TPromoCodeRequest => {\n const unvalidatedPromoCodes = mapToUnvalidatedPromoCodes(promoAttributes);\n return mergeStoreAndReturnPromos({ newPromos: { unvalidatedPromoCodes }, apiKey });\n};\n\n/**\n * Extracts applicable promo codes from the cart object\n * This function retrieves discounts stored in the cart's `content.discounts` array,\n * filters out only the applicable promo codes, and returns them as an array of strings\n *\n * @param {TBeamCartLocalStorage} cart The cart object retrieved from local storage\n * @returns {string[]} An array of applicable promo codes\n */\nexport const getPromoCodesFromCart = (cart: TBeamCartLocalStorage): string[] => {\n if (!cart?.content) return [];\n\n const cartLevelCodes = cart.content.discounts?.filter((d) => d.applicable)?.map((d) => d.code) || [];\n\n const itemLevelCodes =\n cart.content.items?.flatMap(\n (item) => item.discounts?.filter((d: Discount) => d.applicable)?.map((d: Discount) => d.code) || [],\n ) || [];\n\n const allCodes = [...cartLevelCodes, ...itemLevelCodes];\n\n return [...new Set(allCodes)];\n};\n\n/**\n * Gets promo code exclusively from Shopify discount cookie\n * @returns {string | null} Single discount code or null if not found\n */\nexport const getPromoCodeFromShopifyCookie = (): string | null => {\n return getCookieValue(DISCOUNT_CODE_COOKIE_NAME) ?? null;\n};\n\n/**\n * Safely parses a JSON string into an array of strings\n * If parsing fails or the input is not a valid JSON array, it returns an empty array\n *\n * @param {string | undefined | null} jsonString The JSON string to parse\n * @returns {string[]} The parsed array of strings or an empty array if parsing fails\n */\nexport const parseJsonStringArray = (jsonString: string | undefined | null): string[] => {\n if (!jsonString) return [];\n try {\n const parsed = JSON.parse(jsonString);\n if (Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\")) {\n return parsed;\n }\n return [];\n } catch (error) {\n logger.error(\"Failed to parse JSON:\", error);\n return [];\n }\n};\n\n/**\n * Retrieves and sanitizes the current URL for storage, preserving only safe query parameters\n *\n * @returns {TPromoCodeAttribute} Returns an object with only the `url` property set\n */\nexport const getSanitizedUrlForStorage = (): TPromoCodeAttribute | undefined => {\n try {\n const url = new URL(window.location.href);\n\n if (!url.search) return undefined;\n\n // Create NEW URL instead of modifying existing one\n const cleanUrl = new URL(url.origin + url.pathname);\n let hasValidParams = false;\n\n // Process all parameters\n url.searchParams.forEach((value, key) => {\n const isAllowed = key.startsWith(ALLOWED_URL_PREFIX);\n const isValidLength = value.length <= URL_QUERY_PARAM_CHAR_LIMIT;\n\n if (isAllowed && isValidLength) {\n cleanUrl.searchParams.append(key, value);\n hasValidParams = true;\n }\n });\n\n const finalUrl = cleanUrl.toString();\n return hasValidParams ? { url: finalUrl } : undefined;\n } catch (error) {\n return undefined;\n }\n};\n\nexport const promoCodesAreEqual = (a: TPromoCodeRequest, b: TPromoCodeRequest): boolean => {\n const extract = (codes: unknown): string => {\n const validCodes = (Array.isArray(codes) ? codes : []) as TUnvalidatedPromoCode[];\n\n const flattened = validCodes\n .map((c) => {\n if (c.type === \"manual\") {\n return c.attributes?.value;\n }\n if (c.type === \"url\") {\n return c.attributes?.url;\n }\n return \"\";\n })\n .filter(Boolean)\n .sort()\n .join(\",\");\n return flattened;\n };\n\n return extract(a?.unvalidatedPromoCodes) === extract(b?.unvalidatedPromoCodes);\n};\n\nexport const isEmptyPromoData = (promos: {\n unvalidatedPromoCodes?: unknown[];\n validatedPromoCodes?: unknown[];\n}): boolean => {\n return (\n (!promos.unvalidatedPromoCodes || promos.unvalidatedPromoCodes.length === 0) &&\n (!promos.validatedPromoCodes || promos.validatedPromoCodes.length === 0)\n );\n};\n"],"names":["URL_QUERY_PARAM_CHAR_LIMIT","ALLOWED_URL_PREFIX","DISCOUNT_CODE_COOKIE_NAME","getAllPromoCodesFromCookie","promoCodesString","getCookieValue","PROMO_CODES_COOKIE_NAME","error","logger","setPromoCodeInCookie","validatedPromoCodes","domain","promoCodeData","threeMonthsFromNow","setCookieValue","getPromoCodesLocalStorage","apiKey","createScopedLocalStorage","PROMO_LOCAL_STORAGE_KEY","LocalStorageError","setPromoCodesInLocalStorage","promoCodes","storage","completePromoCodes","mergeStoreAndReturnPromos","newPromos","existing","uniqueNewUnvalidatedPromos","newPromo","existingPromo","mergedCodes","mapToUnvalidatedPromoCodes","promoAttributes","acc","attr","result","PromoCodeSource","formatStoreAndReturnPromoCodes","unvalidatedPromoCodes","getPromoCodesFromCart","cart","cartLevelCodes","d","itemLevelCodes","item","allCodes","getPromoCodeFromShopifyCookie","parseJsonStringArray","jsonString","parsed","getSanitizedUrlForStorage","url","cleanUrl","hasValidParams","value","key","isAllowed","isValidLength","finalUrl","promoCodesAreEqual","a","b","extract","codes","c","isEmptyPromoData","promos"],"mappings":"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"}
1
+ {"version":3,"file":"promoManager.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{P as n,b as m,a as l}from"../chunks/promo-types-DKAOFHJr.esm.js";import{L as u}from"../chunks/beam-errors-Ci0d3926.esm.js";import{setCookieValue as f,getCookieValue as c}from"./cookies.js";import{createScopedLocalStorage as p}from"./local-storage.js";import{logger as s}from"./logger.js";const S=100,h="utm_",A="discount_code",O=()=>{const o=c(l);if(o)try{return JSON.parse(o)}catch(e){s.error("Failed to parse beam_promo_codes cookie:",e);return}},w=({validatedPromoCodes:o,domain:e})=>{const r={validatedPromoCodes:o},a=Date.now()+1e3*60*60*24*90;f({name:l,value:JSON.stringify(r),path:"/",domain:e,expires:a})},C=({apiKey:o})=>o?p({apiKey:o}).getItemJson(n)??{unvalidatedPromoCodes:[],validatedPromoCodes:[]}:(s.error(new u("API key is required to get promo codes")),null),P=({apiKey:o,promoCodes:e})=>{if(!o){s.error(new u("API key is required to set promo codes"));return}const r=p({apiKey:o}),a={unvalidatedPromoCodes:e?.unvalidatedPromoCodes||[],validatedPromoCodes:e?.validatedPromoCodes||[]};r.setItemJson(n,a)},v=({newPromos:o,apiKey:e})=>{const r=C({apiKey:e})??{unvalidatedPromoCodes:[],validatedPromoCodes:[]},a=(o?.unvalidatedPromoCodes||[]).filter(d=>!r.unvalidatedPromoCodes.some(i=>JSON.stringify(i)===JSON.stringify(d))),t={unvalidatedPromoCodes:[...r.unvalidatedPromoCodes,...a],validatedPromoCodes:[...r.validatedPromoCodes,...o?.validatedPromoCodes||[]]};return(t.unvalidatedPromoCodes.length>0||t.validatedPromoCodes.length>0)&&P({apiKey:e,promoCodes:t}),{...t}},g=o=>o.reduce((e,r)=>{const a=e||[];return r.url?a.push({type:m.Url,attributes:{url:r.url}}):r.value?a.push({type:m.Manual,attributes:{value:r.value}}):s.error("Invalid PromoAttribute - must contain either 'url' or 'value'",{attr:r}),a},[]),K=(o,e)=>{const r=g(o);return v({newPromos:{unvalidatedPromoCodes:r},apiKey:e})},_=o=>{if(!o?.content)return[];const e=o.content.discounts?.filter(t=>t.applicable)?.map(t=>t.code)||[],r=o.content.items?.flatMap(t=>t.discounts?.filter(d=>d.applicable)?.map(d=>d.code)||[])||[],a=[...e,...r];return[...new Set(a)]},b=()=>c(A)??null,E=o=>{if(!o)return[];try{const e=JSON.parse(o);return Array.isArray(e)&&e.every(r=>typeof r=="string")?e:[]}catch(e){return s.error("Failed to parse JSON:",e),[]}},J=()=>{try{const o=new URL(window.location.href);if(!o.search)return;const e=new URL(o.origin+o.pathname);let r=!1;o.searchParams.forEach((t,d)=>{const i=d.startsWith(h),y=t.length<=S;i&&y&&(e.searchParams.append(d,t),r=!0)});const a=e.toString();return r?{url:a}:void 0}catch{return}},L=(o,e)=>{const r=a=>(Array.isArray(a)?a:[]).map(t=>t.type==="manual"?t.attributes?.value:t.type==="url"?t.attributes?.url:"").filter(Boolean).sort().join(",");return r(o?.unvalidatedPromoCodes)===r(e?.unvalidatedPromoCodes)},k=o=>(!o.unvalidatedPromoCodes||o.unvalidatedPromoCodes.length===0)&&(!o.validatedPromoCodes||o.validatedPromoCodes.length===0);export{K as formatStoreAndReturnPromoCodes,O as getAllPromoCodesFromCookie,b as getPromoCodeFromShopifyCookie,_ as getPromoCodesFromCart,C as getPromoCodesLocalStorage,J as getSanitizedUrlForStorage,k as isEmptyPromoData,g as mapToUnvalidatedPromoCodes,v as mergeStoreAndReturnPromos,E as parseJsonStringArray,L as promoCodesAreEqual,w as setPromoCodeInCookie,P as setPromoCodesInLocalStorage};
1
+ import{h as a,_ as s,k as t,G as m,f as d,j as C,C as g,$ as i,a0 as n,F as P,p,I as S,H as l}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{a as formatStoreAndReturnPromoCodes,s as getAllPromoCodesFromCookie,t as getPromoCodeFromShopifyCookie,m as getPromoCodesFromCart,d as getPromoCodesLocalStorage,C as getSanitizedUrlForStorage,g as isEmptyPromoData,i as mapToUnvalidatedPromoCodes,n as mergeStoreAndReturnPromos,P as parseJsonStringArray,p as promoCodesAreEqual,S as setPromoCodeInCookie,l as setPromoCodesInLocalStorage};
2
2
  //# sourceMappingURL=promoManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promoManager.js","sources":["../../src/utils/promoManager.ts"],"sourcesContent":["import { Discount, TBeamCartLocalStorage } from \"../shared/cart-contents\";\nimport {\n TPromoCodeAttribute,\n PromoCodeSource,\n TPromoCodeRequest,\n TPromoCodeResponse,\n TValidatedPromoResponse,\n TUnvalidatedPromoRequest,\n PROMO_LOCAL_STORAGE_KEY,\n PROMO_CODES_COOKIE_NAME,\n TUnvalidatedPromoCode,\n} from \"../shared/promo-types\";\nimport { LocalStorageError } from \"./beam-errors\";\nimport { getCookieValue, setCookieValue } from \"./cookies\";\nimport { createScopedLocalStorage } from \"./local-storage\";\nimport { logger } from \"./logger\";\n\nconst URL_QUERY_PARAM_CHAR_LIMIT = 100;\nconst ALLOWED_URL_PREFIX = \"utm_\";\n// Standard name for Shopify's discount tracking cookie\nconst DISCOUNT_CODE_COOKIE_NAME = \"discount_code\";\n// < --------- Cookie ------- >\n\n/**\n * Retrieves all validated promo codes stored in the \"beam_promo_codes\" cookie and parses it\n *\n * @returns {TPromoCodeResponse | undefined} An array of `ValidatedPromoCode` objects if found and parsed successfully, otherwise `undefined`\n */\nexport const getAllPromoCodesFromCookie = (): TPromoCodeResponse | undefined => {\n const promoCodesString = getCookieValue(PROMO_CODES_COOKIE_NAME);\n\n if (!promoCodesString) return undefined;\n\n try {\n const promoCodes: TPromoCodeResponse = JSON.parse(promoCodesString);\n return promoCodes;\n } catch (error) {\n logger.error(\"Failed to parse beam_promo_codes cookie:\", error);\n return undefined;\n }\n};\n\n/**\n * Stores the validated promo codes in the \"beam_promo_codes\" cookie, replaces and does not merge\n *\n * @param {TValidatedPromoResponse} validatedPromoCodes\n * @param {string} domain\n */\nexport const setPromoCodeInCookie = ({\n validatedPromoCodes,\n domain,\n}: {\n validatedPromoCodes: TValidatedPromoResponse;\n domain?: string;\n}) => {\n const promoCodeData = {\n validatedPromoCodes: validatedPromoCodes,\n };\n const threeMonthsFromNow = Date.now() + 1000 * 60 * 60 * 24 * 90;\n\n setCookieValue({\n name: PROMO_CODES_COOKIE_NAME,\n value: JSON.stringify(promoCodeData),\n path: \"/\",\n domain,\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: threeMonthsFromNow,\n });\n};\n\n// < --------- Local Storage ------- >\n/**\n * Retrieves promo codes from localStorage, scoped by API key\n * @param {string} apiKey API key used for storage scoping\n * @returns {TPromoCodeRequest | null} - Returns stored promo codes object containing both\n * validated and unvalidated codes\n * - If no codes exist, returns a fresh object with empty arrays\n *\n */\nexport const getPromoCodesLocalStorage = ({ apiKey }: { apiKey: string }): TPromoCodeRequest | null => {\n if (!apiKey) {\n logger.error(new LocalStorageError(\"API key is required to get promo codes\"));\n return null;\n }\n\n const storage = createScopedLocalStorage({ apiKey });\n const allPromos = storage.getItemJson<TPromoCodeRequest>(PROMO_LOCAL_STORAGE_KEY) ?? {\n unvalidatedPromoCodes: [],\n validatedPromoCodes: [],\n };\n\n return allPromos;\n};\n\n/**\n * Sets promo codes in localStorage\n * @param {TPromoCodeRequest} promoCodes New promo codes to add\n * @param {string} apiKey API key for storage scoping\n */\nexport const setPromoCodesInLocalStorage = ({\n apiKey,\n promoCodes,\n}: {\n apiKey?: string;\n promoCodes: Partial<TPromoCodeRequest>;\n}): void => {\n if (!apiKey) {\n logger.error(new LocalStorageError(\"API key is required to set promo codes\"));\n return;\n }\n const storage = createScopedLocalStorage({ apiKey });\n const completePromoCodes: TPromoCodeRequest = {\n unvalidatedPromoCodes: promoCodes?.unvalidatedPromoCodes || [],\n validatedPromoCodes: promoCodes?.validatedPromoCodes || [],\n };\n storage.setItemJson(PROMO_LOCAL_STORAGE_KEY, completePromoCodes);\n};\n\n/**\n * Merges new promo codes with existing ones and returns the combined result\n * @param {Partial<TPromoCodeRequest>} newPromos New promo codes to add\n * @param {string} apiKey API key for storage scoping\n * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes\n * @example\n * const result = mergePromoCodes({\n * apiKey: 'beam_123',\n * newPromos: {\n * unvalidatedPromoCodes: [\n * { type: 'manual', attributes: { value: 'WINTER20' } },\n * { type: 'url', attributes: { url: 'www.example.com/?promo=HOLIDAY25' } }\n * ]\n * }\n * });\n */\nexport const mergeStoreAndReturnPromos = ({\n newPromos,\n apiKey,\n}: {\n newPromos: Partial<TPromoCodeRequest>;\n apiKey: string;\n}): TPromoCodeRequest => {\n const existing = getPromoCodesLocalStorage({ apiKey }) ?? {\n unvalidatedPromoCodes: [],\n validatedPromoCodes: [],\n };\n\n const uniqueNewUnvalidatedPromos = (newPromos?.unvalidatedPromoCodes || []).filter((newPromo) => {\n const isDuplicate = existing.unvalidatedPromoCodes.some((existingPromo) => {\n return JSON.stringify(existingPromo) === JSON.stringify(newPromo);\n });\n return !isDuplicate;\n });\n\n const mergedCodes: TPromoCodeRequest = {\n unvalidatedPromoCodes: [...existing.unvalidatedPromoCodes, ...uniqueNewUnvalidatedPromos],\n validatedPromoCodes: [...existing.validatedPromoCodes, ...(newPromos?.validatedPromoCodes || [])],\n };\n\n const shouldStore = mergedCodes.unvalidatedPromoCodes.length > 0 || mergedCodes.validatedPromoCodes.length > 0;\n\n if (shouldStore) {\n setPromoCodesInLocalStorage({ apiKey, promoCodes: mergedCodes });\n }\n return {\n ...mergedCodes,\n };\n};\n\n/**\n * Formats unvalidated promo codes by determining their source and attributes\n * The function will assign `QueryParam` as the source if a `url` exists,\n * otherwise, it will assign `Manual` as the source\n *\n * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted\n * @returns {TUnvalidatedPromoRequest} - An array of UnvalidatedPromoCode objects,\n * each with a source and attributes object\n */\nexport const mapToUnvalidatedPromoCodes = (promoAttributes: TPromoCodeAttribute[]): TUnvalidatedPromoRequest => {\n return promoAttributes.reduce<TUnvalidatedPromoRequest>((acc, attr) => {\n const result: TUnvalidatedPromoRequest = acc || [];\n if (attr.url) {\n result.push({\n type: PromoCodeSource.Url,\n attributes: { url: attr.url },\n });\n } else if (attr.value) {\n result.push({\n type: PromoCodeSource.Manual,\n attributes: { value: attr.value },\n });\n } else {\n logger.error(\"Invalid PromoAttribute - must contain either 'url' or 'value'\", { attr });\n }\n return result;\n }, []);\n};\n\n/**\n * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted\n * @param {string} apiKey API key for storage scoping\n * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes\n */\nexport const formatStoreAndReturnPromoCodes = (\n promoAttributes: TPromoCodeAttribute[],\n apiKey: string,\n): TPromoCodeRequest => {\n const unvalidatedPromoCodes = mapToUnvalidatedPromoCodes(promoAttributes);\n return mergeStoreAndReturnPromos({ newPromos: { unvalidatedPromoCodes }, apiKey });\n};\n\n/**\n * Extracts applicable promo codes from the cart object\n * This function retrieves discounts stored in the cart's `content.discounts` array,\n * filters out only the applicable promo codes, and returns them as an array of strings\n *\n * @param {TBeamCartLocalStorage} cart The cart object retrieved from local storage\n * @returns {string[]} An array of applicable promo codes\n */\nexport const getPromoCodesFromCart = (cart: TBeamCartLocalStorage): string[] => {\n if (!cart?.content) return [];\n\n const cartLevelCodes = cart.content.discounts?.filter((d) => d.applicable)?.map((d) => d.code) || [];\n\n const itemLevelCodes =\n cart.content.items?.flatMap(\n (item) => item.discounts?.filter((d: Discount) => d.applicable)?.map((d: Discount) => d.code) || [],\n ) || [];\n\n const allCodes = [...cartLevelCodes, ...itemLevelCodes];\n\n return [...new Set(allCodes)];\n};\n\n/**\n * Gets promo code exclusively from Shopify discount cookie\n * @returns {string | null} Single discount code or null if not found\n */\nexport const getPromoCodeFromShopifyCookie = (): string | null => {\n return getCookieValue(DISCOUNT_CODE_COOKIE_NAME) ?? null;\n};\n\n/**\n * Safely parses a JSON string into an array of strings\n * If parsing fails or the input is not a valid JSON array, it returns an empty array\n *\n * @param {string | undefined | null} jsonString The JSON string to parse\n * @returns {string[]} The parsed array of strings or an empty array if parsing fails\n */\nexport const parseJsonStringArray = (jsonString: string | undefined | null): string[] => {\n if (!jsonString) return [];\n try {\n const parsed = JSON.parse(jsonString);\n if (Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\")) {\n return parsed;\n }\n return [];\n } catch (error) {\n logger.error(\"Failed to parse JSON:\", error);\n return [];\n }\n};\n\n/**\n * Retrieves and sanitizes the current URL for storage, preserving only safe query parameters\n *\n * @returns {TPromoCodeAttribute} Returns an object with only the `url` property set\n */\nexport const getSanitizedUrlForStorage = (): TPromoCodeAttribute | undefined => {\n try {\n const url = new URL(window.location.href);\n\n if (!url.search) return undefined;\n\n // Create NEW URL instead of modifying existing one\n const cleanUrl = new URL(url.origin + url.pathname);\n let hasValidParams = false;\n\n // Process all parameters\n url.searchParams.forEach((value, key) => {\n const isAllowed = key.startsWith(ALLOWED_URL_PREFIX);\n const isValidLength = value.length <= URL_QUERY_PARAM_CHAR_LIMIT;\n\n if (isAllowed && isValidLength) {\n cleanUrl.searchParams.append(key, value);\n hasValidParams = true;\n }\n });\n\n const finalUrl = cleanUrl.toString();\n return hasValidParams ? { url: finalUrl } : undefined;\n } catch (error) {\n return undefined;\n }\n};\n\nexport const promoCodesAreEqual = (a: TPromoCodeRequest, b: TPromoCodeRequest): boolean => {\n const extract = (codes: unknown): string => {\n const validCodes = (Array.isArray(codes) ? codes : []) as TUnvalidatedPromoCode[];\n\n const flattened = validCodes\n .map((c) => {\n if (c.type === \"manual\") {\n return c.attributes?.value;\n }\n if (c.type === \"url\") {\n return c.attributes?.url;\n }\n return \"\";\n })\n .filter(Boolean)\n .sort()\n .join(\",\");\n return flattened;\n };\n\n return extract(a?.unvalidatedPromoCodes) === extract(b?.unvalidatedPromoCodes);\n};\n\nexport const isEmptyPromoData = (promos: {\n unvalidatedPromoCodes?: unknown[];\n validatedPromoCodes?: unknown[];\n}): boolean => {\n return (\n (!promos.unvalidatedPromoCodes || promos.unvalidatedPromoCodes.length === 0) &&\n (!promos.validatedPromoCodes || promos.validatedPromoCodes.length === 0)\n );\n};\n"],"names":["URL_QUERY_PARAM_CHAR_LIMIT","ALLOWED_URL_PREFIX","DISCOUNT_CODE_COOKIE_NAME","getAllPromoCodesFromCookie","promoCodesString","getCookieValue","PROMO_CODES_COOKIE_NAME","error","logger","setPromoCodeInCookie","validatedPromoCodes","domain","promoCodeData","threeMonthsFromNow","setCookieValue","getPromoCodesLocalStorage","apiKey","createScopedLocalStorage","PROMO_LOCAL_STORAGE_KEY","LocalStorageError","setPromoCodesInLocalStorage","promoCodes","storage","completePromoCodes","mergeStoreAndReturnPromos","newPromos","existing","uniqueNewUnvalidatedPromos","newPromo","existingPromo","mergedCodes","mapToUnvalidatedPromoCodes","promoAttributes","acc","attr","result","PromoCodeSource","formatStoreAndReturnPromoCodes","unvalidatedPromoCodes","getPromoCodesFromCart","cart","cartLevelCodes","d","itemLevelCodes","item","allCodes","getPromoCodeFromShopifyCookie","parseJsonStringArray","jsonString","parsed","getSanitizedUrlForStorage","url","cleanUrl","hasValidParams","value","key","isAllowed","isValidLength","finalUrl","promoCodesAreEqual","a","b","extract","codes","c","isEmptyPromoData","promos"],"mappings":"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"}
1
+ {"version":3,"file":"promoManager.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,9 +1,3 @@
1
- declare function saveRemoteSession({ remoteSessionId, apiKey }: {
2
- remoteSessionId: string;
3
- apiKey?: string;
4
- }): void;
5
- declare function getRemoteSession({ apiKey }: {
6
- apiKey?: string;
7
- }): string | null;
8
-
9
- export { getRemoteSession, saveRemoteSession };
1
+ export { u as getRemoteSession, F as saveRemoteSession } from '../chunks/utils-COGFpDER.esm.js';
2
+ import 'lodash-es/debounce';
3
+ import 'lodash-es/isEqual';
@@ -1,2 +1,2 @@
1
- import{createScopedLocalStorage as o}from"./local-storage.esm.js";import"../chunks/beam-errors-Ci0d3926.esm.js";import"./logger.esm.js";const t="remote_session_id";function s({remoteSessionId:e,apiKey:i=""}){o({apiKey:i}).setItem(t,e)}function r({apiKey:e=""}){return o({apiKey:e}).getItem(t)}export{r as getRemoteSession,s as saveRemoteSession};
1
+ import{R as t,s as m}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{t as getRemoteSession,m as saveRemoteSession};
2
2
  //# sourceMappingURL=remote-session.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-session.esm.js","sources":["../../src/utils/remote-session.ts"],"sourcesContent":["import { createScopedLocalStorage } from \"./local-storage\";\n\nconst REMOTE_SESSION_ID_KEY = \"remote_session_id\";\n\nexport function saveRemoteSession({ remoteSessionId, apiKey = \"\" }: { remoteSessionId: string; apiKey?: string }) {\n const beamLocalStorage = createScopedLocalStorage({\n apiKey,\n });\n beamLocalStorage.setItem(REMOTE_SESSION_ID_KEY, remoteSessionId);\n}\n\nexport function getRemoteSession({ apiKey = \"\" }: { apiKey?: string }) {\n const beamLocalStorage = createScopedLocalStorage({\n apiKey,\n });\n return beamLocalStorage.getItem(REMOTE_SESSION_ID_KEY);\n}\n"],"names":["REMOTE_SESSION_ID_KEY","saveRemoteSession","remoteSessionId","apiKey","createScopedLocalStorage","getRemoteSession"],"mappings":"wIAEA,MAAMA,EAAwB,oBAEvB,SAASC,EAAkB,CAAE,gBAAAC,EAAiB,OAAAC,EAAS,EAAG,EAAiD,CACvFC,EAAyB,CAChD,OAAAD,CACF,CAAC,EACgB,QAAQH,EAAuBE,CAAe,CACjE,CAEO,SAASG,EAAiB,CAAE,OAAAF,EAAS,EAAG,EAAwB,CAIrE,OAHyBC,EAAyB,CAChD,OAAAD,CACF,CAAC,EACuB,QAAQH,CAAqB,CACvD"}
1
+ {"version":3,"file":"remote-session.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{createScopedLocalStorage as o}from"./local-storage.js";import"../chunks/beam-errors-Ci0d3926.esm.js";import"./logger.js";const t="remote_session_id";function s({remoteSessionId:e,apiKey:i=""}){o({apiKey:i}).setItem(t,e)}function r({apiKey:e=""}){return o({apiKey:e}).getItem(t)}export{r as getRemoteSession,s as saveRemoteSession};
1
+ import{R as t,s as m}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{t as getRemoteSession,m as saveRemoteSession};
2
2
  //# sourceMappingURL=remote-session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-session.js","sources":["../../src/utils/remote-session.ts"],"sourcesContent":["import { createScopedLocalStorage } from \"./local-storage\";\n\nconst REMOTE_SESSION_ID_KEY = \"remote_session_id\";\n\nexport function saveRemoteSession({ remoteSessionId, apiKey = \"\" }: { remoteSessionId: string; apiKey?: string }) {\n const beamLocalStorage = createScopedLocalStorage({\n apiKey,\n });\n beamLocalStorage.setItem(REMOTE_SESSION_ID_KEY, remoteSessionId);\n}\n\nexport function getRemoteSession({ apiKey = \"\" }: { apiKey?: string }) {\n const beamLocalStorage = createScopedLocalStorage({\n apiKey,\n });\n return beamLocalStorage.getItem(REMOTE_SESSION_ID_KEY);\n}\n"],"names":["REMOTE_SESSION_ID_KEY","saveRemoteSession","remoteSessionId","apiKey","createScopedLocalStorage","getRemoteSession"],"mappings":"gIAEA,MAAMA,EAAwB,oBAEvB,SAASC,EAAkB,CAAE,gBAAAC,EAAiB,OAAAC,EAAS,EAAG,EAAiD,CACvFC,EAAyB,CAChD,OAAAD,CACF,CAAC,EACgB,QAAQH,EAAuBE,CAAe,CACjE,CAEO,SAASG,EAAiB,CAAE,OAAAF,EAAS,EAAG,EAAwB,CAIrE,OAHyBC,EAAyB,CAChD,OAAAD,CACF,CAAC,EACuB,QAAQH,CAAqB,CACvD"}
1
+ {"version":3,"file":"remote-session.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,3 @@
1
- declare function waitForElement(selector: string, { timeout }?: {
2
- timeout?: number | undefined;
3
- }): Promise<Element>;
4
-
5
- export { waitForElement };
1
+ export { w as waitForElement } from '../chunks/utils-COGFpDER.esm.js';
2
+ import 'lodash-es/debounce';
3
+ import 'lodash-es/isEqual';
@@ -1,2 +1,2 @@
1
- import{B as s}from"../chunks/beam-errors-Ci0d3926.esm.js";function l(t,{timeout:c=1e4}={}){return new Promise((r,i)=>{let e=document.querySelector(t);if(e){r(e);return}let o;const m=setTimeout(()=>{e||(o?.disconnect(),i(new s(`Timed out waiting for '${t}'`)))},c);new MutationObserver((a,n)=>{o=n,Array.from(document.querySelectorAll(t)).forEach(u=>{e=u,r(u),n.disconnect(),clearTimeout(m)})}).observe(document.documentElement,{childList:!0,subtree:!0})})}export{l as waitForElement};
1
+ import{w as e}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{e as waitForElement};
2
2
  //# sourceMappingURL=wait-for-element.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-element.esm.js","sources":["../../src/utils/wait-for-element.ts"],"sourcesContent":["// Based on https://gist.github.com/jwilson8767/db379026efcbd932f64382db4b02853e (MIT License, JWilson)\n\nimport { BeamError } from \"./beam-errors\";\n\nexport function waitForElement(selector: string, { timeout = 10000 } = {}): Promise<Element> {\n return new Promise((resolve, reject) => {\n let el = document.querySelector(selector);\n if (el) {\n resolve(el);\n return;\n }\n\n let mutationObserver: MutationObserver;\n\n const timer = setTimeout(() => {\n if (el) return; // no need to reject\n mutationObserver?.disconnect();\n reject(new BeamError(`Timed out waiting for '${selector}'`));\n }, timeout);\n\n new MutationObserver((_mutationRecords, observer) => {\n mutationObserver = observer;\n // Query for elements matching the specified selector\n Array.from(document.querySelectorAll(selector)).forEach((element) => {\n el = element;\n resolve(element);\n // Once we have resolved we don't need the observer anymore.\n observer.disconnect();\n clearTimeout(timer);\n });\n }).observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n });\n}\n"],"names":["waitForElement","selector","timeout","resolve","reject","el","mutationObserver","timer","BeamError","_mutationRecords","observer","element"],"mappings":"0DAIO,SAASA,EAAeC,EAAkB,CAAE,QAAAC,EAAU,GAAM,EAAI,CAAA,EAAsB,CAC3F,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,IAAIC,EAAK,SAAS,cAAcJ,CAAQ,EACxC,GAAII,EAAI,CACNF,EAAQE,CAAE,EACV,MACF,CAEA,IAAIC,EAEJ,MAAMC,EAAQ,WAAW,IAAM,CACzBF,IACJC,GAAkB,WAAA,EAClBF,EAAO,IAAII,EAAU,0BAA0BP,CAAQ,GAAG,CAAC,EAC7D,EAAGC,CAAO,EAEV,IAAI,iBAAiB,CAACO,EAAkBC,IAAa,CACnDJ,EAAmBI,EAEnB,MAAM,KAAK,SAAS,iBAAiBT,CAAQ,CAAC,EAAE,QAASU,GAAY,CACnEN,EAAKM,EACLR,EAAQQ,CAAO,EAEfD,EAAS,WAAA,EACT,aAAaH,CAAK,CACpB,CAAC,CACH,CAAC,EAAE,QAAQ,SAAS,gBAAiB,CACnC,UAAW,GACX,QAAS,EACX,CAAC,CACH,CAAC,CACH"}
1
+ {"version":3,"file":"wait-for-element.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{B as s}from"../chunks/beam-errors-Ci0d3926.esm.js";function l(t,{timeout:c=1e4}={}){return new Promise((r,i)=>{let e=document.querySelector(t);if(e){r(e);return}let o;const m=setTimeout(()=>{e||(o?.disconnect(),i(new s(`Timed out waiting for '${t}'`)))},c);new MutationObserver((a,n)=>{o=n,Array.from(document.querySelectorAll(t)).forEach(u=>{e=u,r(u),n.disconnect(),clearTimeout(m)})}).observe(document.documentElement,{childList:!0,subtree:!0})})}export{l as waitForElement};
1
+ import{w as e}from"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";export{e as waitForElement};
2
2
  //# sourceMappingURL=wait-for-element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-element.js","sources":["../../src/utils/wait-for-element.ts"],"sourcesContent":["// Based on https://gist.github.com/jwilson8767/db379026efcbd932f64382db4b02853e (MIT License, JWilson)\n\nimport { BeamError } from \"./beam-errors\";\n\nexport function waitForElement(selector: string, { timeout = 10000 } = {}): Promise<Element> {\n return new Promise((resolve, reject) => {\n let el = document.querySelector(selector);\n if (el) {\n resolve(el);\n return;\n }\n\n let mutationObserver: MutationObserver;\n\n const timer = setTimeout(() => {\n if (el) return; // no need to reject\n mutationObserver?.disconnect();\n reject(new BeamError(`Timed out waiting for '${selector}'`));\n }, timeout);\n\n new MutationObserver((_mutationRecords, observer) => {\n mutationObserver = observer;\n // Query for elements matching the specified selector\n Array.from(document.querySelectorAll(selector)).forEach((element) => {\n el = element;\n resolve(element);\n // Once we have resolved we don't need the observer anymore.\n observer.disconnect();\n clearTimeout(timer);\n });\n }).observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n });\n}\n"],"names":["waitForElement","selector","timeout","resolve","reject","el","mutationObserver","timer","BeamError","_mutationRecords","observer","element"],"mappings":"0DAIO,SAASA,EAAeC,EAAkB,CAAE,QAAAC,EAAU,GAAM,EAAI,CAAA,EAAsB,CAC3F,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,IAAIC,EAAK,SAAS,cAAcJ,CAAQ,EACxC,GAAII,EAAI,CACNF,EAAQE,CAAE,EACV,MACF,CAEA,IAAIC,EAEJ,MAAMC,EAAQ,WAAW,IAAM,CACzBF,IACJC,GAAkB,WAAA,EAClBF,EAAO,IAAII,EAAU,0BAA0BP,CAAQ,GAAG,CAAC,EAC7D,EAAGC,CAAO,EAEV,IAAI,iBAAiB,CAACO,EAAkBC,IAAa,CACnDJ,EAAmBI,EAEnB,MAAM,KAAK,SAAS,iBAAiBT,CAAQ,CAAC,EAAE,QAASU,GAAY,CACnEN,EAAKM,EACLR,EAAQQ,CAAO,EAEfD,EAAS,WAAA,EACT,aAAaH,CAAK,CACpB,CAAC,CACH,CAAC,EAAE,QAAQ,SAAS,gBAAiB,CACnC,UAAW,GACX,QAAS,EACX,CAAC,CACH,CAAC,CACH"}
1
+ {"version":3,"file":"wait-for-element.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@beamimpact/web-sdk",
3
3
  "private": false,
4
- "version": "1.56.3",
4
+ "version": "1.57.1",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
8
8
  "engines": {
9
- "node": "^24.0.0"
9
+ "node": "18.x || 20.x || 22.x || 24.x"
10
10
  },
11
11
  "packageManager": "npm@11.0.0",
12
12
  "browserslist": [
@@ -56,18 +56,21 @@
56
56
  "@lit/react": "1.0.8",
57
57
  "@lukeed/uuid": "2.0.1",
58
58
  "@shoelace-style/shoelace": "2.20.1",
59
+ "dayjs": "1.11.21",
60
+ "handlebars": "4.7.9",
59
61
  "lit": "3.3.2",
60
62
  "lodash-es": "4.18.1",
61
63
  "lucide-static": "0.292.0"
62
64
  },
63
65
  "devDependencies": {
64
- "@cypress/vite-dev-server": "7.3.1",
66
+ "@cypress/vite-dev-server": "7.3.3",
65
67
  "@devcontainers/cli": "0.86.0",
66
68
  "@eslint/eslintrc": "3.3.5",
67
69
  "@eslint/js": "9.39.4",
68
70
  "@fastify/compress": "8.3.1",
69
71
  "@fastify/cors": "11.2.0",
70
72
  "@fastify/static": "9.1.3",
73
+ "@rollup/plugin-commonjs": "29.0.3",
71
74
  "@rollup/plugin-json": "6.1.0",
72
75
  "@rollup/plugin-node-resolve": "16.0.3",
73
76
  "@types/lodash-es": "4.17.12",
@@ -75,8 +78,8 @@
75
78
  "@typescript-eslint/parser": "8.59.0",
76
79
  "@web-types/lit": "2.0.0-3",
77
80
  "browserslist": "4.28.4",
78
- "commitizen": "4.3.1",
79
- "cypress": "15.16.0",
81
+ "commitizen": "4.3.2",
82
+ "cypress": "15.18.1",
80
83
  "cz-conventional-changelog": "3.3.0",
81
84
  "esbuild": "0.28.1",
82
85
  "eslint": "9.39.4",
@@ -93,7 +96,7 @@
93
96
  "npm-run-all": "4.1.5",
94
97
  "prettier": "3.8.3",
95
98
  "react": "18.2.0",
96
- "rollup": "4.60.2",
99
+ "rollup": "4.61.1",
97
100
  "rollup-plugin-copy": "3.5.0",
98
101
  "rollup-plugin-dts": "6.4.1",
99
102
  "rollup-plugin-esbuild": "6.2.1",
@@ -1,2 +0,0 @@
1
- import{r as a,s as c}from"./vendor-ckSdd6aH.esm.js";import{k as t}from"./routes-DSu5s3K7.esm.js";import"./lit-JRlupCB5.esm.js";import"./promo-types-DKAOFHJr.esm.js";import"./beam-errors-Ci0d3926.esm.js";import"../utils/logger.esm.js";import"./events-COWOQoLW.esm.js";import"../utils/memoize-last.esm.js";import"./lodash-BSs6Il-c.esm.js";const i="https://sdk.beamimpact.com",s=`${i}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,o=`${i}/lib/lucide-static/v${t["lucide-static"]}`;if(a("lucide",{resolver:e=>`${o}/icons/${e}.svg`}),c(s),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${s}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
- //# sourceMappingURL=_share-dialog-dependencies-Bk60ibnw.esm.js.map
@@ -1,2 +0,0 @@
1
- import{r as a,s as c}from"./vendor-ckSdd6aH.esm.js";import{k as t}from"./routes-BIMwJ8u9.esm.js";import"./lit-JRlupCB5.esm.js";import"./promo-types-DKAOFHJr.esm.js";import"./beam-errors-Ci0d3926.esm.js";import"../utils/logger.js";import"./events-COWOQoLW.esm.js";import"../utils/memoize-last.js";import"./lodash-BSs6Il-c.esm.js";const i="https://sdk.beamimpact.com",s=`${i}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,o=`${i}/lib/lucide-static/v${t["lucide-static"]}`;if(a("lucide",{resolver:e=>`${o}/icons/${e}.svg`}),c(s),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${s}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
2
- //# sourceMappingURL=_share-dialog-dependencies-D6vA_2f6.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_share-dialog-dependencies-D6vA_2f6.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"yUASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
@@ -1,2 +0,0 @@
1
- class s extends Error{constructor(r,{cause:e,name:a="BeamError"}={}){super(r,{cause:e}),this.name=a,this.supportUrl="https://beamimpact.com"}}class t extends s{constructor(r,e,a){super(a,{name:"BeamNetworkError"}),this.response=r,this.body=e}}class n extends s{constructor(r=[],e){super(e,{name:"BeamMissingConfig"}),this.missingConfigKeyNames=r}}class c extends s{constructor(r){super(r,{name:"BeamLocalStorageError"})}}class m extends s{constructor(r){super(r,{name:"BeamSetupError"})}}var i=Object.freeze({__proto__:null,BeamError:s,LocalStorageError:c,MissingConfig:n,NetworkError:t,SetupError:m});export{s as B,c as L,n as M,t as N,m as S,i as b};
2
- //# sourceMappingURL=beam-errors-Ci0d3926.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"beam-errors-Ci0d3926.esm.js","sources":["../../src/utils/beam-errors.ts"],"sourcesContent":["export class BeamError extends Error {\n supportUrl: string;\n constructor(msg?: string, { cause, name = \"BeamError\" }: { cause?: any; name?: string } = {}) {\n super(msg, { cause });\n this.name = name;\n this.supportUrl = \"https://beamimpact.com\";\n }\n}\n\nexport class NetworkError extends BeamError {\n /** Fetch Response object with .ok, .status, etc.*/\n response: Response;\n /** If network response included JSON payload, it is parsed and available here */\n body?: Record<string, string>;\n constructor(response: Response, body?: Record<string, string>, msg?: string) {\n super(msg, { name: \"BeamNetworkError\" });\n this.response = response;\n this.body = body;\n }\n}\n\nexport class MissingConfig extends BeamError {\n missingConfigKeyNames: string[];\n constructor(missingConfigKeyNames: string[] = [], msg?: string) {\n super(msg, { name: \"BeamMissingConfig\" });\n this.missingConfigKeyNames = missingConfigKeyNames;\n }\n}\n\nexport class LocalStorageError extends BeamError {\n constructor(msg?: string) {\n super(msg, { name: \"BeamLocalStorageError\" });\n }\n}\n\nexport class SetupError extends BeamError {\n constructor(msg?: string) {\n super(msg, { name: \"BeamSetupError\" });\n }\n}\n"],"names":["BeamError","msg","cause","name","NetworkError","response","body","MissingConfig","missingConfigKeyNames","LocalStorageError","SetupError"],"mappings":"AAAO,MAAMA,UAAkB,KAAM,CAEnC,YAAYC,EAAc,CAAE,MAAAC,EAAO,KAAAC,EAAO,WAAY,EAAoC,GAAI,CAC5F,MAAMF,EAAK,CAAE,MAAAC,CAAM,CAAC,EACpB,KAAK,KAAOC,EACZ,KAAK,WAAa,wBACpB,CACF,CAEO,MAAMC,UAAqBJ,CAAU,CAK1C,YAAYK,EAAoBC,EAA+BL,EAAc,CAC3E,MAAMA,EAAK,CAAE,KAAM,kBAAmB,CAAC,EACvC,KAAK,SAAWI,EAChB,KAAK,KAAOC,CACd,CACF,CAEO,MAAMC,UAAsBP,CAAU,CAE3C,YAAYQ,EAAkC,CAAA,EAAIP,EAAc,CAC9D,MAAMA,EAAK,CAAE,KAAM,mBAAoB,CAAC,EACxC,KAAK,sBAAwBO,CAC/B,CACF,CAEO,MAAMC,UAA0BT,CAAU,CAC/C,YAAYC,EAAc,CACxB,MAAMA,EAAK,CAAE,KAAM,uBAAwB,CAAC,CAC9C,CACF,CAEO,MAAMS,UAAmBV,CAAU,CACxC,YAAYC,EAAc,CACxB,MAAMA,EAAK,CAAE,KAAM,gBAAiB,CAAC,CACvC,CACF"}
@@ -1,46 +0,0 @@
1
- declare class BeamError extends Error {
2
- supportUrl: string;
3
- constructor(msg?: string, { cause, name }?: {
4
- cause?: any;
5
- name?: string;
6
- });
7
- }
8
- declare class NetworkError extends BeamError {
9
- /** Fetch Response object with .ok, .status, etc.*/
10
- response: Response;
11
- /** If network response included JSON payload, it is parsed and available here */
12
- body?: Record<string, string>;
13
- constructor(response: Response, body?: Record<string, string>, msg?: string);
14
- }
15
- declare class MissingConfig extends BeamError {
16
- missingConfigKeyNames: string[];
17
- constructor(missingConfigKeyNames?: string[], msg?: string);
18
- }
19
- declare class LocalStorageError extends BeamError {
20
- constructor(msg?: string);
21
- }
22
- declare class SetupError extends BeamError {
23
- constructor(msg?: string);
24
- }
25
-
26
- type beamErrors_BeamError = BeamError;
27
- declare const beamErrors_BeamError: typeof BeamError;
28
- type beamErrors_LocalStorageError = LocalStorageError;
29
- declare const beamErrors_LocalStorageError: typeof LocalStorageError;
30
- type beamErrors_MissingConfig = MissingConfig;
31
- declare const beamErrors_MissingConfig: typeof MissingConfig;
32
- type beamErrors_NetworkError = NetworkError;
33
- declare const beamErrors_NetworkError: typeof NetworkError;
34
- type beamErrors_SetupError = SetupError;
35
- declare const beamErrors_SetupError: typeof SetupError;
36
- declare namespace beamErrors {
37
- export {
38
- beamErrors_BeamError as BeamError,
39
- beamErrors_LocalStorageError as LocalStorageError,
40
- beamErrors_MissingConfig as MissingConfig,
41
- beamErrors_NetworkError as NetworkError,
42
- beamErrors_SetupError as SetupError,
43
- };
44
- }
45
-
46
- export { BeamError as B, LocalStorageError as L, MissingConfig as M, NetworkError as N, SetupError as S, beamErrors as b };
@@ -1,18 +0,0 @@
1
- import { p as paths } from './openapi-spec-B4z4_CMq.esm.js';
2
-
3
- type TCartApi = paths["/chain/findEligibleNonprofitsForCart"]["post"]["requestBody"]["content"]["application/json"]["cart"];
4
- type TCart = TCartApi & {
5
- content: {
6
- items: Record<string, any>[];
7
- discounts?: Record<string, any>[] | undefined | null;
8
- };
9
- };
10
- type TBeamCartLocalStorage = {
11
- cartId: string;
12
- beamCartId?: string;
13
- subtotal: number;
14
- itemCount: number;
15
- currencyCode: string;
16
- } & TCart;
17
-
18
- export type { TCart as T, TCartApi as a, TBeamCartLocalStorage as b };
@@ -1,2 +0,0 @@
1
- const _="beam_cart";export{_ as B};
2
- //# sourceMappingURL=cart-contents-DkoytiZh.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cart-contents-DkoytiZh.esm.js","sources":["../../src/shared/cart-contents.ts"],"sourcesContent":["import { paths } from \"../api-sdk/openapi-spec\";\nexport type TCartApi =\n paths[\"/chain/findEligibleNonprofitsForCart\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"][\"cart\"];\n\n// Same as type from API but with non-optional fields, so we can use where Shopify guarantees values\nexport type TCart = TCartApi & {\n content: {\n items: Record<string, any>[];\n discounts?: Record<string, any>[] | undefined | null;\n };\n};\n\nexport type TCartItems = TCart[\"content\"][\"items\"];\n\nexport type TCartDiscounts = TCart[\"content\"][\"discounts\"];\n\nexport type TBeamCartLocalStorage = {\n cartId: string;\n beamCartId?: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n} & TCart;\n\nexport const BEAM_CART_COOKIE_NAME = \"beam_cart\";\n\nexport type Discount = {\n code: string;\n applicable: boolean;\n};\n"],"names":["BEAM_CART_COOKIE_NAME"],"mappings":"AAwBO,MAAMA,EAAwB"}