@beamimpact/web-sdk 1.55.6 → 1.55.8

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 (223) hide show
  1. package/dist/chunks/{_share-dialog-dependencies-BA9f_o0p.esm.js → _share-dialog-dependencies-BG0p8uUr.esm.js} +2 -2
  2. package/dist/chunks/{_share-dialog-dependencies-BA9f_o0p.esm.js.map → _share-dialog-dependencies-BG0p8uUr.esm.js.map} +1 -1
  3. package/dist/chunks/{_share-dialog-dependencies-C9KUQdZi.esm.js → _share-dialog-dependencies-dHlBUqo0.esm.js} +2 -2
  4. package/dist/chunks/{_share-dialog-dependencies-C9KUQdZi.esm.js.map → _share-dialog-dependencies-dHlBUqo0.esm.js.map} +1 -1
  5. package/dist/chunks/beam-errors-Ci0d3926.esm.js.map +1 -1
  6. package/dist/chunks/css-card-grid-CvoGpsJH.esm.js.map +1 -1
  7. package/dist/chunks/enforce-config-Ba1JkOHs.esm.js.map +1 -1
  8. package/dist/chunks/enforce-config-CZ3ToOgr.esm.js.map +1 -1
  9. package/dist/chunks/{events-B7l6VPsF.esm.d.ts → events-CSyogxoH.esm.d.ts} +2 -2
  10. package/dist/chunks/events-Dki0ka4F.esm.js.map +1 -1
  11. package/dist/chunks/{index-DkN5rVx1.esm.js → index-2OQzw7UI.esm.js} +2 -2
  12. package/dist/chunks/{index-DkN5rVx1.esm.js.map → index-2OQzw7UI.esm.js.map} +1 -1
  13. package/dist/chunks/index-B1Y88trP.esm.js +2 -0
  14. package/dist/chunks/index-B1Y88trP.esm.js.map +1 -0
  15. package/dist/chunks/{index-Bliur1O3.esm.d.ts → index-B1lGZARl.esm.d.ts} +1 -1
  16. package/dist/chunks/{index-DHK-p5LV.esm.d.ts → index-B7hOLixE.esm.d.ts} +2 -2
  17. package/dist/chunks/index-BNjsFEGn.esm.js.map +1 -1
  18. package/dist/chunks/{index-CQNxdYCM.esm.js → index-BTDB5Gk-.esm.js} +2 -2
  19. package/dist/chunks/index-BTDB5Gk-.esm.js.map +1 -0
  20. package/dist/chunks/index-BX6GnRsb.esm.js +2 -0
  21. package/dist/chunks/index-BX6GnRsb.esm.js.map +1 -0
  22. package/dist/chunks/{index-DbaDUPup.esm.d.ts → index-BjGPkgs-.esm.d.ts} +11 -11
  23. package/dist/chunks/{index-B-y_clPF.esm.js → index-C5gnsl34.esm.js} +2 -2
  24. package/dist/chunks/{index-B-y_clPF.esm.js.map → index-C5gnsl34.esm.js.map} +1 -1
  25. package/dist/chunks/{index-DEoMwStx.esm.d.ts → index-CJ1y1kTs.esm.d.ts} +1 -1
  26. package/dist/chunks/index-CWKcDbs6.esm.js +2 -0
  27. package/dist/chunks/index-CWKcDbs6.esm.js.map +1 -0
  28. package/dist/chunks/{index-Cvwx-mJw.esm.js → index-Cg65EbvX.esm.js} +2 -2
  29. package/dist/chunks/index-Cg65EbvX.esm.js.map +1 -0
  30. package/dist/chunks/{index-R8pxCm8G.esm.js → index-DEaZqGi7.esm.js} +2 -2
  31. package/dist/chunks/{index-R8pxCm8G.esm.js.map → index-DEaZqGi7.esm.js.map} +1 -1
  32. package/dist/chunks/{index-Cc56yRag.esm.js → index-DnTE6QlY.esm.js} +2 -2
  33. package/dist/chunks/index-DnTE6QlY.esm.js.map +1 -0
  34. package/dist/chunks/{index-D4P62wPH.esm.js → index-DrxhkT6Y.esm.js} +2 -2
  35. package/dist/chunks/index-DrxhkT6Y.esm.js.map +1 -0
  36. package/dist/chunks/index-IKiJwo5v.esm.js.map +1 -1
  37. package/dist/chunks/{index-Dcs5wzZR.esm.js → index-RhV6PBPH.esm.js} +2 -2
  38. package/dist/chunks/{index-Dcs5wzZR.esm.js.map → index-RhV6PBPH.esm.js.map} +1 -1
  39. package/dist/chunks/index-eCVyk0rc.esm.js +2 -0
  40. package/dist/chunks/index-eCVyk0rc.esm.js.map +1 -0
  41. package/dist/chunks/{index-DTPlqZRf.esm.d.ts → index-iqYDqEil.esm.d.ts} +1 -1
  42. package/dist/chunks/lit-WqMxC_PA.esm.js.map +1 -1
  43. package/dist/chunks/localize-Btu9xYcE.esm.js.map +1 -1
  44. package/dist/chunks/localize-C25pEGnx.esm.js.map +1 -1
  45. package/dist/chunks/lodash-D3TLHRR_.esm.js.map +1 -1
  46. package/dist/chunks/{order-page-BrgnL0la.esm.js → order-page-BRG7MXZ2.esm.js} +2 -2
  47. package/dist/chunks/{order-page-BrgnL0la.esm.js.map → order-page-BRG7MXZ2.esm.js.map} +1 -1
  48. package/dist/chunks/{order-page-BVDbpEg3.esm.js → order-page-BbHDQfmy.esm.js} +2 -2
  49. package/dist/chunks/{order-page-BVDbpEg3.esm.js.map → order-page-BbHDQfmy.esm.js.map} +1 -1
  50. package/dist/chunks/{order-page-M7a2TINy.esm.d.ts → order-page-Qn1yyNbN.esm.d.ts} +2 -2
  51. package/dist/chunks/progress-bar-DF7UuuHb.esm.js.map +1 -1
  52. package/dist/chunks/{promo-pill-label-B5ymzjIe.esm.js → promo-pill-label-ByFGhdxh.esm.js} +2 -2
  53. package/dist/chunks/{promo-pill-label-B5ymzjIe.esm.js.map → promo-pill-label-ByFGhdxh.esm.js.map} +1 -1
  54. package/dist/chunks/{promo-pill-label-Fdt5WTOL.esm.js → promo-pill-label-WGLW3bql.esm.js} +2 -2
  55. package/dist/chunks/{promo-pill-label-Fdt5WTOL.esm.js.map → promo-pill-label-WGLW3bql.esm.js.map} +1 -1
  56. package/dist/chunks/{promo-types-BPmDZ5dF.esm.d.ts → promo-types-7r9-UuiP.esm.d.ts} +1 -1
  57. package/dist/chunks/promo-types-DKAOFHJr.esm.js.map +1 -1
  58. package/dist/chunks/responsive-BR8qUfBa.esm.js.map +1 -1
  59. package/dist/chunks/{routes-DpniIBF7.esm.js → routes-BvX92EDq.esm.js} +2 -2
  60. package/dist/chunks/{routes-DpniIBF7.esm.js.map → routes-BvX92EDq.esm.js.map} +1 -1
  61. package/dist/chunks/{routes-BoeGe1RQ.esm.d.ts → routes-DahRzf8t.esm.d.ts} +1 -1
  62. package/dist/chunks/{routes-DzqKnt5D.esm.js → routes-DguZveS3.esm.js} +2 -2
  63. package/dist/chunks/{routes-DzqKnt5D.esm.js.map → routes-DguZveS3.esm.js.map} +1 -1
  64. package/dist/chunks/{share-button-B2RwMJdP.esm.js → share-button-BRjKJc5L.esm.js} +2 -2
  65. package/dist/chunks/{share-button-DOejRGE7.esm.js.map → share-button-BRjKJc5L.esm.js.map} +1 -1
  66. package/dist/chunks/{share-button-CnN0Q1m3.esm.js → share-button-DPNNnXeM.esm.js} +2 -2
  67. package/dist/chunks/{share-button-CnN0Q1m3.esm.js.map → share-button-DPNNnXeM.esm.js.map} +1 -1
  68. package/dist/chunks/{share-button-DOejRGE7.esm.js → share-button-DmjRJmXh.esm.js} +2 -2
  69. package/dist/chunks/{share-button-B2RwMJdP.esm.js.map → share-button-DmjRJmXh.esm.js.map} +1 -1
  70. package/dist/chunks/{share-button-Gz4GlT28.esm.js → share-button-M8cMa6ol.esm.js} +2 -2
  71. package/dist/chunks/{share-button-Gz4GlT28.esm.js.map → share-button-M8cMa6ol.esm.js.map} +1 -1
  72. package/dist/chunks/{update-cart-BJPNyfQK.esm.js → update-cart-CJywJNax.esm.js} +2 -2
  73. package/dist/chunks/{update-cart-BJPNyfQK.esm.js.map → update-cart-CJywJNax.esm.js.map} +1 -1
  74. package/dist/chunks/{update-cart-_BGjED9E.esm.js → update-cart-gwNcGXkd.esm.js} +2 -2
  75. package/dist/chunks/{update-cart-_BGjED9E.esm.js.map → update-cart-gwNcGXkd.esm.js.map} +1 -1
  76. package/dist/chunks/vendor-KKSARHWL.esm.js.map +1 -1
  77. package/dist/components/beam-partner-logos.esm.js.map +1 -1
  78. package/dist/components/beam-partner-logos.js.map +1 -1
  79. package/dist/components/community-impact.esm.js +1 -1
  80. package/dist/components/community-impact.esm.js.map +1 -1
  81. package/dist/components/community-impact.js +1 -1
  82. package/dist/components/community-impact.js.map +1 -1
  83. package/dist/components/cumulative-impact.esm.js +1 -1
  84. package/dist/components/cumulative-impact.esm.js.map +1 -1
  85. package/dist/components/cumulative-impact.js +1 -1
  86. package/dist/components/cumulative-impact.js.map +1 -1
  87. package/dist/components/impact-overview.esm.js +1 -1
  88. package/dist/components/impact-overview.esm.js.map +1 -1
  89. package/dist/components/impact-overview.js +1 -1
  90. package/dist/components/impact-overview.js.map +1 -1
  91. package/dist/components/index.d.ts +1 -1
  92. package/dist/components/index.esm.js +1 -1
  93. package/dist/components/index.js +1 -1
  94. package/dist/components/post-purchase.d.ts +2 -1
  95. package/dist/components/post-purchase.esm.js +3 -3
  96. package/dist/components/post-purchase.esm.js.map +1 -1
  97. package/dist/components/post-purchase.js +3 -3
  98. package/dist/components/post-purchase.js.map +1 -1
  99. package/dist/components/product-details-page.d.ts +2 -2
  100. package/dist/components/product-details-page.esm.js +7 -7
  101. package/dist/components/product-details-page.esm.js.map +1 -1
  102. package/dist/components/product-details-page.js +7 -7
  103. package/dist/components/product-details-page.js.map +1 -1
  104. package/dist/components/redeem-transaction.d.ts +1 -1
  105. package/dist/components/redeem-transaction.esm.js +1 -1
  106. package/dist/components/redeem-transaction.js +1 -1
  107. package/dist/components/select-nonprofit.d.ts +1 -1
  108. package/dist/components/select-nonprofit.esm.js +1 -1
  109. package/dist/components/select-nonprofit.esm.js.map +1 -1
  110. package/dist/components/select-nonprofit.js +1 -1
  111. package/dist/components/select-nonprofit.js.map +1 -1
  112. package/dist/components/select-subscription-nonprofit.d.ts +1 -1
  113. package/dist/components/select-subscription-nonprofit.esm.js +1 -1
  114. package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
  115. package/dist/components/select-subscription-nonprofit.js +1 -1
  116. package/dist/components/select-subscription-nonprofit.js.map +1 -1
  117. package/dist/components/shopify.d.ts +4 -4
  118. package/dist/components/shopify.esm.js +1 -1
  119. package/dist/components/shopify.js +1 -1
  120. package/dist/components/social-share.esm.js +1 -1
  121. package/dist/components/social-share.esm.js.map +1 -1
  122. package/dist/components/social-share.js +1 -1
  123. package/dist/components/social-share.js.map +1 -1
  124. package/dist/components/subscription-impact.d.ts +1 -1
  125. package/dist/components/subscription-impact.esm.js +1 -1
  126. package/dist/components/subscription-impact.esm.js.map +1 -1
  127. package/dist/components/subscription-impact.js +1 -1
  128. package/dist/components/subscription-impact.js.map +1 -1
  129. package/dist/components/subscription-management.d.ts +2 -2
  130. package/dist/components/subscription-management.esm.js +1 -1
  131. package/dist/components/subscription-management.esm.js.map +1 -1
  132. package/dist/components/subscription-management.js +1 -1
  133. package/dist/components/subscription-management.js.map +1 -1
  134. package/dist/index.d.ts +9 -9
  135. package/dist/index.esm.js +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/integrations/beam.esm.js +1 -1
  138. package/dist/integrations/beam.esm.js.map +1 -1
  139. package/dist/integrations/beam.js +1 -1
  140. package/dist/integrations/beam.js.map +1 -1
  141. package/dist/integrations/cart.esm.js +1 -1
  142. package/dist/integrations/cart.js +1 -1
  143. package/dist/integrations/index.d.ts +6 -6
  144. package/dist/integrations/index.esm.js +1 -1
  145. package/dist/integrations/index.js +1 -1
  146. package/dist/integrations/logs.esm.js +1 -1
  147. package/dist/integrations/logs.js +1 -1
  148. package/dist/integrations/promoManager.esm.js.map +1 -1
  149. package/dist/integrations/promoManager.js.map +1 -1
  150. package/dist/integrations/shopify.d.ts +2 -2
  151. package/dist/integrations/shopify.esm.js +1 -1
  152. package/dist/integrations/shopify.js +1 -1
  153. package/dist/integrations/statsig.esm.js +1 -1
  154. package/dist/integrations/statsig.esm.js.map +1 -1
  155. package/dist/integrations/statsig.js +1 -1
  156. package/dist/integrations/statsig.js.map +1 -1
  157. package/dist/integrations/utils.d.ts +2 -2
  158. package/dist/react/beam-partner-logos.esm.js.map +1 -1
  159. package/dist/react/beam-partner-logos.js.map +1 -1
  160. package/dist/react/community-impact.esm.js +1 -1
  161. package/dist/react/community-impact.js +1 -1
  162. package/dist/react/cumulative-impact.esm.js +1 -1
  163. package/dist/react/cumulative-impact.js +1 -1
  164. package/dist/react/impact-overview.esm.js +1 -1
  165. package/dist/react/impact-overview.js +1 -1
  166. package/dist/react/index.d.ts +14 -14
  167. package/dist/react/index.esm.js +1 -1
  168. package/dist/react/index.js +1 -1
  169. package/dist/react/post-purchase.esm.js +1 -1
  170. package/dist/react/post-purchase.js +1 -1
  171. package/dist/react/product-details-page.d.ts +1 -1
  172. package/dist/react/product-details-page.esm.js +1 -1
  173. package/dist/react/product-details-page.js +1 -1
  174. package/dist/react/redeem-transaction.d.ts +2 -2
  175. package/dist/react/redeem-transaction.esm.js +1 -1
  176. package/dist/react/redeem-transaction.esm.js.map +1 -1
  177. package/dist/react/redeem-transaction.js +1 -1
  178. package/dist/react/redeem-transaction.js.map +1 -1
  179. package/dist/react/select-nonprofit.d.ts +2 -2
  180. package/dist/react/select-nonprofit.esm.js +1 -1
  181. package/dist/react/select-nonprofit.esm.js.map +1 -1
  182. package/dist/react/select-nonprofit.js +1 -1
  183. package/dist/react/select-nonprofit.js.map +1 -1
  184. package/dist/react/select-subscription-nonprofit.d.ts +2 -2
  185. package/dist/react/select-subscription-nonprofit.esm.js +1 -1
  186. package/dist/react/select-subscription-nonprofit.esm.js.map +1 -1
  187. package/dist/react/select-subscription-nonprofit.js +1 -1
  188. package/dist/react/select-subscription-nonprofit.js.map +1 -1
  189. package/dist/react/social-share.esm.js +1 -1
  190. package/dist/react/social-share.js +1 -1
  191. package/dist/react/subscription-impact.esm.js +1 -1
  192. package/dist/react/subscription-impact.js +1 -1
  193. package/dist/react/subscription-management.d.ts +1 -1
  194. package/dist/react/subscription-management.esm.js +1 -1
  195. package/dist/react/subscription-management.js +1 -1
  196. package/dist/utils/cookies.esm.js.map +1 -1
  197. package/dist/utils/cookies.js.map +1 -1
  198. package/dist/utils/events.d.ts +2 -2
  199. package/dist/utils/index.d.ts +2 -2
  200. package/dist/utils/makeApiKeyHeader.esm.js.map +1 -1
  201. package/dist/utils/makeApiKeyHeader.js.map +1 -1
  202. package/dist/utils/memoize-last.esm.js.map +1 -1
  203. package/dist/utils/memoize-last.js.map +1 -1
  204. package/dist/utils/network-listeners.esm.js.map +1 -1
  205. package/dist/utils/network-listeners.js.map +1 -1
  206. package/dist/utils/promoManager.d.ts +1 -1
  207. package/dist/utils/promoManager.esm.js.map +1 -1
  208. package/dist/utils/promoManager.js.map +1 -1
  209. package/dist/utils/wait-for-element.esm.js.map +1 -1
  210. package/dist/utils/wait-for-element.js.map +1 -1
  211. package/package.json +2 -2
  212. package/dist/chunks/index-8_I5ySms.esm.js +0 -2
  213. package/dist/chunks/index-8_I5ySms.esm.js.map +0 -1
  214. package/dist/chunks/index-CNk8n3rH.esm.js +0 -2
  215. package/dist/chunks/index-CNk8n3rH.esm.js.map +0 -1
  216. package/dist/chunks/index-CQNxdYCM.esm.js.map +0 -1
  217. package/dist/chunks/index-Cc56yRag.esm.js.map +0 -1
  218. package/dist/chunks/index-Cvwx-mJw.esm.js.map +0 -1
  219. package/dist/chunks/index-D4P62wPH.esm.js.map +0 -1
  220. package/dist/chunks/index-D9fJ0fnB.esm.js +0 -2
  221. package/dist/chunks/index-D9fJ0fnB.esm.js.map +0 -1
  222. package/dist/chunks/index-DuOCy5gV.esm.js +0 -2
  223. package/dist/chunks/index-DuOCy5gV.esm.js.map +0 -1
@@ -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":["../../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 +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,CAAsB,EAAA,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,WAAW,EAC7BF,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,aACT,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":["../../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 +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,CAAsB,EAAA,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,WAAW,EAC7BF,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,aACT,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":["../../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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@beamimpact/web-sdk",
3
3
  "private": false,
4
- "version": "1.55.6",
4
+ "version": "1.55.8",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
@@ -90,7 +90,7 @@
90
90
  "npm-run-all": "4.1.5",
91
91
  "prettier": "2.8.4",
92
92
  "react": "18.2.0",
93
- "rollup": "4.41.1",
93
+ "rollup": "4.59.0",
94
94
  "rollup-plugin-copy": "3.5.0",
95
95
  "rollup-plugin-dts": "6.1.0",
96
96
  "rollup-plugin-esbuild": "6.1.0",
@@ -1,2 +0,0 @@
1
- import{O as e}from"./update-cart-_BGjED9E.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
- //# sourceMappingURL=index-8_I5ySms.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-8_I5ySms.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{i}from"./index-CGKJagBi.esm.js";import{i as o}from"./index-D4P62wPH.esm.js";import{i as r}from"./index-IKiJwo5v.esm.js";import{i as e}from"./index-8_I5ySms.esm.js";import{i as m}from"./index-R8pxCm8G.esm.js";var s=Object.freeze({__proto__:null,Cart:e,Logs:m,Session:r,Shopify:o,Utils:i});export{s as i};
2
- //# sourceMappingURL=index-CNk8n3rH.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CNk8n3rH.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-CQNxdYCM.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Cc56yRag.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Cvwx-mJw.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-D4P62wPH.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{i}from"./index-DBb5HSkR.esm.js";import{i as o}from"./index-Cc56yRag.esm.js";import{i as r}from"./index-BNjsFEGn.esm.js";import{i as e}from"./index-DuOCy5gV.esm.js";import{i as m}from"./index-Dcs5wzZR.esm.js";var s=Object.freeze({__proto__:null,Cart:e,Logs:m,Session:r,Shopify:o,Utils:i});export{s as i};
2
- //# sourceMappingURL=index-D9fJ0fnB.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-D9fJ0fnB.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{O as e}from"./update-cart-BJPNyfQK.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
- //# sourceMappingURL=index-DuOCy5gV.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DuOCy5gV.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}