@beamimpact/web-sdk 1.36.1 → 1.36.4

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 (101) hide show
  1. package/README.md +1 -2
  2. package/dist/chunks/{_share-dialog-dependencies-Sh_9ajqn.esm.js → _share-dialog-dependencies-NHHxcIDe.esm.js} +2 -2
  3. package/dist/chunks/_share-dialog-dependencies-NHHxcIDe.esm.js.map +1 -0
  4. package/dist/chunks/{_share-dialog-dependencies-xo568n-h.esm.js → _share-dialog-dependencies-sf17NEX8.esm.js} +2 -2
  5. package/dist/chunks/_share-dialog-dependencies-sf17NEX8.esm.js.map +1 -0
  6. package/dist/chunks/index--ofShi8t.esm.js +2 -0
  7. package/dist/chunks/index--ofShi8t.esm.js.map +1 -0
  8. package/dist/chunks/index-TrsSwLUY.esm.js +2 -0
  9. package/dist/chunks/index-TrsSwLUY.esm.js.map +1 -0
  10. package/dist/chunks/index-oGO5HXSB.esm.js +2 -0
  11. package/dist/chunks/index-oGO5HXSB.esm.js.map +1 -0
  12. package/dist/chunks/index-pHbZDTW0.esm.js +2 -0
  13. package/dist/chunks/index-pHbZDTW0.esm.js.map +1 -0
  14. package/dist/chunks/index-tkKvWkzv.esm.js +2 -0
  15. package/dist/chunks/index-tkKvWkzv.esm.js.map +1 -0
  16. package/dist/chunks/index-u8nTsn3I.esm.js +2 -0
  17. package/dist/chunks/index-u8nTsn3I.esm.js.map +1 -0
  18. package/dist/chunks/{index--zKNaLmP.esm.js → index-uBc0L0Qx.esm.js} +2 -2
  19. package/dist/chunks/{index--zKNaLmP.esm.js.map → index-uBc0L0Qx.esm.js.map} +1 -1
  20. package/dist/chunks/{index-H8eCrtpq.esm.js → index-vg7ClGPn.esm.js} +2 -2
  21. package/dist/chunks/{index-H8eCrtpq.esm.js.map → index-vg7ClGPn.esm.js.map} +1 -1
  22. package/dist/chunks/{order-page-iki-LwqZ.esm.js → order-page-PSfhnuaE.esm.js} +2 -2
  23. package/dist/chunks/{order-page-iki-LwqZ.esm.js.map → order-page-PSfhnuaE.esm.js.map} +1 -1
  24. package/dist/chunks/{order-page-nw4ww0A4.esm.js → order-page-WaIEqUq2.esm.js} +2 -2
  25. package/dist/chunks/{order-page-nw4ww0A4.esm.js.map → order-page-WaIEqUq2.esm.js.map} +1 -1
  26. package/dist/chunks/{routes-tF7SMdXL.esm.js → routes-BI_HfQw6.esm.js} +2 -2
  27. package/dist/chunks/{routes-tF7SMdXL.esm.js.map → routes-BI_HfQw6.esm.js.map} +1 -1
  28. package/dist/chunks/{routes-oHbXmMIK.esm.js → routes-WbfYG9qp.esm.js} +2 -2
  29. package/dist/chunks/{routes-oHbXmMIK.esm.js.map → routes-WbfYG9qp.esm.js.map} +1 -1
  30. package/dist/chunks/update-cart-hWMIlTUD.esm.js +2 -0
  31. package/dist/chunks/update-cart-hWMIlTUD.esm.js.map +1 -0
  32. package/dist/chunks/update-cart-mTi4PVhz.esm.js +2 -0
  33. package/dist/chunks/update-cart-mTi4PVhz.esm.js.map +1 -0
  34. package/dist/components/community-impact.esm.js +1 -1
  35. package/dist/components/community-impact.js +1 -1
  36. package/dist/components/cumulative-impact.esm.js +1 -1
  37. package/dist/components/cumulative-impact.js +1 -1
  38. package/dist/components/impact-overview.esm.js +1 -1
  39. package/dist/components/impact-overview.js +1 -1
  40. package/dist/components/index.esm.js +1 -1
  41. package/dist/components/index.js +1 -1
  42. package/dist/components/post-purchase.esm.js +1 -1
  43. package/dist/components/post-purchase.js +1 -1
  44. package/dist/components/redeem-transaction.esm.js +1 -1
  45. package/dist/components/redeem-transaction.js +1 -1
  46. package/dist/components/select-nonprofit.d.ts +2 -2
  47. package/dist/components/select-nonprofit.esm.js +5 -5
  48. package/dist/components/select-nonprofit.esm.js.map +1 -1
  49. package/dist/components/select-nonprofit.js +5 -5
  50. package/dist/components/select-nonprofit.js.map +1 -1
  51. package/dist/components/shopify.esm.js +1 -1
  52. package/dist/components/shopify.js +1 -1
  53. package/dist/index.esm.js +1 -1
  54. package/dist/index.js +1 -1
  55. package/dist/integrations/beam.esm.js +1 -1
  56. package/dist/integrations/beam.js +1 -1
  57. package/dist/integrations/cart.esm.js +1 -1
  58. package/dist/integrations/cart.js +1 -1
  59. package/dist/integrations/index.esm.js +1 -1
  60. package/dist/integrations/index.js +1 -1
  61. package/dist/integrations/logs.esm.js +1 -1
  62. package/dist/integrations/logs.js +1 -1
  63. package/dist/integrations/shopify.esm.js +1 -1
  64. package/dist/integrations/shopify.js +1 -1
  65. package/dist/integrations/statsig.esm.js +9 -9
  66. package/dist/integrations/statsig.esm.js.map +1 -1
  67. package/dist/integrations/statsig.js +9 -9
  68. package/dist/integrations/statsig.js.map +1 -1
  69. package/dist/react/community-impact.esm.js +1 -1
  70. package/dist/react/community-impact.js +1 -1
  71. package/dist/react/cumulative-impact.esm.js +1 -1
  72. package/dist/react/cumulative-impact.js +1 -1
  73. package/dist/react/impact-overview.esm.js +1 -1
  74. package/dist/react/impact-overview.js +1 -1
  75. package/dist/react/index.esm.js +1 -1
  76. package/dist/react/index.js +1 -1
  77. package/dist/react/post-purchase.esm.js +1 -1
  78. package/dist/react/post-purchase.js +1 -1
  79. package/dist/react/redeem-transaction.esm.js +1 -1
  80. package/dist/react/redeem-transaction.js +1 -1
  81. package/dist/react/select-nonprofit.esm.js +1 -1
  82. package/dist/react/select-nonprofit.js +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunks/_share-dialog-dependencies-Sh_9ajqn.esm.js.map +0 -1
  85. package/dist/chunks/_share-dialog-dependencies-xo568n-h.esm.js.map +0 -1
  86. package/dist/chunks/index--hSdkzxR.esm.js +0 -2
  87. package/dist/chunks/index--hSdkzxR.esm.js.map +0 -1
  88. package/dist/chunks/index-1yIQ8_af.esm.js +0 -2
  89. package/dist/chunks/index-1yIQ8_af.esm.js.map +0 -1
  90. package/dist/chunks/index-FOIyVs4d.esm.js +0 -2
  91. package/dist/chunks/index-FOIyVs4d.esm.js.map +0 -1
  92. package/dist/chunks/index-XXbpivFV.esm.js +0 -2
  93. package/dist/chunks/index-XXbpivFV.esm.js.map +0 -1
  94. package/dist/chunks/index-aSHxjlvk.esm.js +0 -2
  95. package/dist/chunks/index-aSHxjlvk.esm.js.map +0 -1
  96. package/dist/chunks/index-x02SNG40.esm.js +0 -2
  97. package/dist/chunks/index-x02SNG40.esm.js.map +0 -1
  98. package/dist/chunks/update-cart-UgMNqKER.esm.js +0 -2
  99. package/dist/chunks/update-cart-UgMNqKER.esm.js.map +0 -1
  100. package/dist/chunks/update-cart-ylLlsQBX.esm.js +0 -2
  101. package/dist/chunks/update-cart-ylLlsQBX.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"statsig.esm.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_CART_COOKIE_NAME } from \"../../shared/cart-contents\";\nimport { BeamCartCreatedEvent, BeamNonprofitSelectEvent, BeamOrderCreatedEvent } from \"../../utils/events\";\nimport { BeamPlugin, BeamConfigOptions } from \"../beam\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { logger } from \"../../utils/logger\";\nimport { saveRemoteSession } from \"../../utils/remote-session\";\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/jsClientSDK\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n};\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\n\nconst STATSIG_VERSION = 4;\n\nconst STATSIG_SCRIPT_URL = `https://cdn.jsdelivr.net/npm/statsig-js@${STATSIG_VERSION}/build/statsig-prod-web-sdk.min.js`;\n\nconst STATSIG_STABLE_ID_COOKIE = \"beam_statsig_session_id\";\n\nconst BEAM_VISIBILITY_DATA_ATTRIBUTE = \"data-beam-visibility\";\n\n// Add class to elements that should only show when Beam shows\nconst BEAM_VISIBILITY_SYNCED_CLASS = \"beam-sync-visibility\";\n\nconst BEAM_AB_TEST_EVENTS = {\n STATSIG_INIT: \"statsig_init\",\n CART_CREATED: \"cart_created\",\n ORDER_CREATED: \"order_created\",\n BEAM_SELECTION: \"beam_selection\",\n};\n\ntype Experiments = {\n /** Whether Beam widgets should be shown to users */\n shouldShowBeam: boolean;\n /** Whether events should be logged to Statsig */\n isLoggingEnabled: boolean;\n};\n\n/**\n * Sets up Statsig for A/B testing and shows/hides Beam based on default experiment rules.\n * @example\n * import { StatsigPlugin } from '@beamimpact/web-sdk/dist/integrations/statsig'\n * import { init } from '@beamimpact/web-sdk/dist/integrations/beam'\n *\n * const beam = await init({\n * apiKey: '',\n * chainId: 1,\n * storeId: 1,\n * domain: 'my-store.com' // in case site uses subdomains for different pages\n * plugins: [\n * new StatsigPlugin({ statsigApiKey: '' })\n * ]\n * })\n *\n * // Once initialized, all Beam widgets have display: none unless user is assigned to A/B test group that shows Beam\n * // To hide additional elements, add the CSS className \"beam-sync-visibility\" to them\n * // To programmatically access the experiment state: getConfig().plugins.statsig.experiments.shouldShowBeam\n */\nexport class StatsigPlugin implements BeamPlugin {\n name = \"statsig\";\n\n statsig: any; // Statsig SDK instance\n\n statsigApiKey: string;\n\n experiments: Experiments = {\n shouldShowBeam: false,\n isLoggingEnabled: true,\n };\n\n stableId?: string;\n\n #beamConfig?: BeamConfigOptions;\n\n // Checked at initialization so that we can tell if post-purchase events came from a session with a cart or not\n #beamCartCookie?: string;\n\n constructor(options: StatsigPluginOptions) {\n this.statsigApiKey = options.statsigApiKey;\n }\n\n async init(config: BeamConfigOptions) {\n this.#beamConfig = config;\n\n // Add event listeners for cart/order lifecycle events\n // This should happen as soon as possible to avoid missing events\n this.#attachEventListeners();\n\n // Attach beam-visibility data attribute to body\n this.#setBeamVisibilityValue(\"hide\");\n\n // Create beam a/b test stylesheet\n const beamVisibilityStylesheet = document.createElement(\"style\");\n beamVisibilityStylesheet.innerHTML = `\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-select-nonprofit,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-post-purchase,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-redeem-transaction,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-impact-overview,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-community-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-cumulative-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] .${BEAM_VISIBILITY_SYNCED_CLASS} {\n display: none;\n }\n `;\n document.head.append(beamVisibilityStylesheet);\n\n // Create statsig script\n await this.#initializeStatsig();\n this.stableId = this.statsig.getStableID();\n if (!this.stableId) {\n throw new BeamError(\"Statsig failed to assign stableId\", { name: \"StatsigInitError\" });\n }\n\n // Save Statsig ID in localStorage for linking to carts later\n saveRemoteSession({ remoteSessionId: this.stableId, apiKey: config.apiKey });\n\n // Save initial value of cart cookie so that post-purchase events can be filtered by if they had a cart or not\n this.#beamCartCookie = getCookieValue(BEAM_CART_COOKIE_NAME);\n\n // Cache ID in cookie to preserve ID across subdomains\n setCookieValue({\n name: STATSIG_STABLE_ID_COOKIE,\n value: this.stableId,\n path: \"/\",\n domain: config.domain,\n });\n\n // Evaluate Statsig experiment assignments\n this.experiments = {\n // Whether Beam widgets should be shown to users\n shouldShowBeam: this.statsig\n .getLayer(\"beam_trial_layer\")\n .get(\"show_beam\", false /* default to hide */) as boolean,\n // Whether events should be logged to Statsig\n isLoggingEnabled: this.statsig.getLayer(\"beam_trial_layer\").get(\"enable_logging\", true) as boolean,\n };\n\n // In parallel:\n // A) Make test call to Statsig\n // B) Save stable ID in Beam for attribution to carts/transactions\n await Promise.all([this.#testStatsigConnection(), this.#registerExperimentWithBeam()]);\n\n // Update beam visibility data attribute, which shows Beam to users in the experiment\n this.#setBeamVisibilityValue(this.experiments.shouldShowBeam ? \"show\" : \"hide\");\n\n // Log result\n logger.debug(\"Statsig Experiment Assignments\", this.experiments);\n }\n\n #attachEventListeners() {\n // Cart Created\n window.addEventListener(BeamCartCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n const { itemCount, cartId, subtotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.CART_CREATED, true, { itemCount, cartId, subtotal, currencyCode });\n });\n\n // Order Created\n window.addEventListener(BeamOrderCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamOrderCreatedEvent;\n const { orderId, cartTotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.ORDER_CREATED, cartTotal, {\n orderId,\n cartTotal,\n currencyCode,\n hasCart: !!this.#beamCartCookie,\n });\n });\n\n // Beam Selection\n // Store previous value in case widget is recreated and emits event again:\n let lastSelectedNonprofitId: number | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, (_event: Event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n if (selectedNonprofitId !== lastSelectedNonprofitId) {\n this.logEvent(BEAM_AB_TEST_EVENTS.BEAM_SELECTION, true, {\n nonprofitId: selectedNonprofitId,\n widget: \"select-nonprofit\",\n selectionId,\n });\n lastSelectedNonprofitId = selectedNonprofitId;\n }\n });\n }\n\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n async #initializeStatsig() {\n const statsigScript = document.createElement(\"script\");\n statsigScript.src = STATSIG_SCRIPT_URL;\n statsigScript.async = false;\n const statsigReadyPromise = new Promise((res, rej) => {\n statsigScript.addEventListener(\"load\", res);\n statsigScript.addEventListener(\"error\", rej);\n });\n document.head.append(statsigScript);\n try {\n await statsigReadyPromise;\n } catch (err) {\n throw new BeamError(\"Failed to load Statsig script\", { name: \"StatsigInitError\" });\n }\n this.statsig = window.statsig;\n if (!this.statsig) {\n throw new BeamError(\"Failed to detect Statsig\", { name: \"StatsigInitError\" });\n }\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n const statsigOptions = {\n disableErrorLogging: true,\n disableAutoMetricsLogging: true,\n disableCurrentPageLogging: true,\n loggingIntervalMillis: 1000,\n loggingBufferMaxSize: 2,\n overrideStableID: getCookieValue(STATSIG_STABLE_ID_COOKIE) ?? null,\n };\n await this.statsig.initialize(this.statsigApiKey, {}, statsigOptions);\n }\n\n logEvent(name: string, value: string | number | boolean, metadata: Record<string, any> = {}) {\n const withBeam = this.experiments.shouldShowBeam;\n if (this.experiments.isLoggingEnabled) {\n this.statsig.logEvent(name, value, { ...metadata, withBeam });\n }\n logger.debug(name, value, { ...metadata, withBeam });\n }\n\n #setBeamVisibilityValue(value: \"show\" | \"hide\") {\n document.body.setAttribute(BEAM_VISIBILITY_DATA_ATTRIBUTE, value);\n }\n\n async #testStatsigConnection() {\n // Use the HTTP API so we can synchronously detect if Statsig is reachable,\n // rather than pushing an event to the SDK's retryable queue.\n // https://docs.statsig.com/http-api\n const url = \"https://events.statsigapi.net/v1/log_event\";\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"statsig-api-key\": this.statsigApiKey,\n },\n body: JSON.stringify({\n eventName: BEAM_AB_TEST_EVENTS.STATSIG_INIT,\n value: \"true\",\n time: new Date().getTime() / 1000, // unix timestamp (seconds not milliseconds)\n metadata: {\n show_beam: this.experiments.shouldShowBeam.toString(),\n page: window.location.pathname,\n },\n user: {\n userID: this.stableId,\n },\n }),\n });\n } catch (err) {\n throw new BeamError(\"Could not call Statsig API\", { name: \"StatsigInitError\", cause: err });\n // TODO: this will log failures to Beam's error tracking API in the future\n }\n }\n\n async #registerExperimentWithBeam() {\n return postExperimentSession({\n baseUrl: this.#beamConfig?.baseUrl,\n headers: {\n authorization: `Api-Key ${this.#beamConfig?.apiKey}`,\n },\n requestBody: {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n remoteSessionId: this.stableId!,\n experiments: {\n showBeam: this.experiments.shouldShowBeam,\n },\n },\n });\n }\n}\n"],"names":["y","i","t","e","h","w","s","d","_beamConfig","_beamCartCookie","_attachEventListeners","attachEventListeners_fn","_initializeStatsig","initializeStatsig_fn","_setBeamVisibilityValue","setBeamVisibilityValue_fn","_testStatsigConnection","testStatsigConnection_fn","_registerExperimentWithBeam","registerExperimentWithBeam_fn","STATSIG_VERSION","STATSIG_SCRIPT_URL","STATSIG_STABLE_ID_COOKIE","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","StatsigPlugin","options","__privateAdd","config","__privateSet","__privateMethod","beamVisibilityStylesheet","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","logger","name","value","metadata","withBeam","BeamCartCreatedEvent","_event","event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","__privateGet","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","statsigScript","statsigReadyPromise","res","rej","statsigOptions","url","err","postExperimentSession"],"mappings":"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"}
1
+ {"version":3,"file":"statsig.esm.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_CART_COOKIE_NAME } from \"../../shared/cart-contents\";\nimport { BeamCartCreatedEvent, BeamNonprofitSelectEvent, BeamOrderCreatedEvent } from \"../../utils/events\";\nimport { BeamPlugin, BeamConfigOptions } from \"../beam\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { logger } from \"../../utils/logger\";\nimport { saveRemoteSession } from \"../../utils/remote-session\";\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/jsClientSDK\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n};\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\n\nconst STATSIG_VERSION = 4;\n\nconst STATSIG_SCRIPT_URL = `https://cdn.jsdelivr.net/npm/statsig-js@${STATSIG_VERSION}/build/statsig-prod-web-sdk.min.js`;\n\nconst STATSIG_STABLE_ID_COOKIE = \"beam_statsig_session_id\";\n\nconst BEAM_VISIBILITY_DATA_ATTRIBUTE = \"data-beam-visibility\";\n\n// Add class to elements that should only show when Beam shows\nconst BEAM_VISIBILITY_SYNCED_CLASS = \"beam-sync-visibility\";\n\nconst BEAM_AB_TEST_EVENTS = {\n STATSIG_INIT: \"statsig_init\",\n CART_CREATED: \"cart_created\",\n ORDER_CREATED: \"order_created\",\n BEAM_SELECTION: \"beam_selection\",\n};\n\ntype Experiments = {\n /** Whether Beam widgets should be shown to users */\n shouldShowBeam: boolean;\n /** Whether events should be logged to Statsig */\n isLoggingEnabled: boolean;\n};\n\n/**\n * Sets up Statsig for A/B testing and shows/hides Beam based on default experiment rules.\n * @example\n * import { StatsigPlugin } from '@beamimpact/web-sdk/dist/integrations/statsig'\n * import { init } from '@beamimpact/web-sdk/dist/integrations/beam'\n *\n * const beam = await init({\n * apiKey: '',\n * chainId: 1,\n * storeId: 1,\n * domain: 'my-store.com' // in case site uses subdomains for different pages\n * plugins: [\n * new StatsigPlugin({ statsigApiKey: '' })\n * ]\n * })\n *\n * // Once initialized, all Beam widgets have display: none unless user is assigned to A/B test group that shows Beam\n * // To hide additional elements, add the CSS className \"beam-sync-visibility\" to them\n * // To programmatically access the experiment state: getConfig().plugins.statsig.experiments.shouldShowBeam\n */\nexport class StatsigPlugin implements BeamPlugin {\n name = \"statsig\";\n\n statsig: any; // Statsig SDK instance\n\n statsigApiKey: string;\n\n experiments: Experiments = {\n shouldShowBeam: false,\n isLoggingEnabled: true,\n };\n\n stableId?: string;\n\n #beamConfig?: BeamConfigOptions;\n\n // Checked at initialization so that we can tell if post-purchase events came from a session with a cart or not\n #beamCartCookie?: string;\n\n constructor(options: StatsigPluginOptions) {\n this.statsigApiKey = options.statsigApiKey;\n }\n\n async init(config: BeamConfigOptions) {\n this.#beamConfig = config;\n\n // Add event listeners for cart/order lifecycle events\n // This should happen as soon as possible to avoid missing events\n this.#attachEventListeners();\n\n // Attach beam-visibility data attribute to body\n this.#setBeamVisibilityValue(\"hide\");\n\n // Create beam a/b test stylesheet\n const beamVisibilityStylesheet = document.createElement(\"style\");\n beamVisibilityStylesheet.innerHTML = `\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-select-nonprofit,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-post-purchase,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-redeem-transaction,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-impact-overview,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-community-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-cumulative-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] .${BEAM_VISIBILITY_SYNCED_CLASS} {\n display: none;\n }\n `;\n document.head.append(beamVisibilityStylesheet);\n\n // Create statsig script\n await this.#initializeStatsig();\n this.stableId = this.statsig.getStableID();\n if (!this.stableId) {\n throw new BeamError(\"Statsig failed to assign stableId\", { name: \"StatsigInitError\" });\n }\n\n // Send events that happened before Statsig was ready\n this.#flushEventQueue();\n\n // Save Statsig ID in localStorage for linking to carts later\n saveRemoteSession({ remoteSessionId: this.stableId, apiKey: config.apiKey });\n\n // Save initial value of cart cookie so that post-purchase events can be filtered by if they had a cart or not\n this.#beamCartCookie = getCookieValue(BEAM_CART_COOKIE_NAME);\n\n // Cache ID in cookie to preserve ID across subdomains\n setCookieValue({\n name: STATSIG_STABLE_ID_COOKIE,\n value: this.stableId,\n path: \"/\",\n domain: config.domain,\n });\n\n // Evaluate Statsig experiment assignments\n this.experiments = {\n // Whether Beam widgets should be shown to users\n shouldShowBeam: this.statsig\n .getLayer(\"beam_trial_layer\")\n .get(\"show_beam\", false /* default to hide */) as boolean,\n // Whether events should be logged to Statsig\n isLoggingEnabled: this.statsig.getLayer(\"beam_trial_layer\").get(\"enable_logging\", true) as boolean,\n };\n\n // In parallel:\n // A) Make test call to Statsig\n // B) Save stable ID in Beam for attribution to carts/transactions\n await Promise.all([this.#testStatsigConnection(), this.#registerExperimentWithBeam()]);\n\n // Update beam visibility data attribute, which shows Beam to users in the experiment\n this.#setBeamVisibilityValue(this.experiments.shouldShowBeam ? \"show\" : \"hide\");\n\n // Log result\n logger.debug(\"Statsig Experiment Assignments\", this.experiments);\n }\n\n #attachEventListeners() {\n // Cart Created\n window.addEventListener(BeamCartCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n const { itemCount, cartId, subtotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.CART_CREATED, true, { itemCount, cartId, subtotal, currencyCode });\n });\n\n // Order Created\n window.addEventListener(BeamOrderCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamOrderCreatedEvent;\n const { orderId, cartTotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.ORDER_CREATED, cartTotal, {\n orderId,\n cartTotal,\n currencyCode,\n hasCart: !!this.#beamCartCookie,\n });\n });\n\n // Beam Selection\n // Store previous value in case widget is recreated and emits event again:\n let lastSelectedNonprofitId: number | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, (_event: Event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n if (selectedNonprofitId !== lastSelectedNonprofitId) {\n this.logEvent(BEAM_AB_TEST_EVENTS.BEAM_SELECTION, true, {\n nonprofitId: selectedNonprofitId,\n widget: \"select-nonprofit\",\n selectionId,\n });\n lastSelectedNonprofitId = selectedNonprofitId;\n }\n });\n }\n\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n async #initializeStatsig() {\n const statsigScript = document.createElement(\"script\");\n statsigScript.src = STATSIG_SCRIPT_URL;\n statsigScript.async = false;\n const statsigReadyPromise = new Promise((res, rej) => {\n statsigScript.addEventListener(\"load\", res);\n statsigScript.addEventListener(\"error\", rej);\n });\n document.head.append(statsigScript);\n try {\n await statsigReadyPromise;\n } catch (err) {\n throw new BeamError(\"Failed to load Statsig script\", { name: \"StatsigInitError\" });\n }\n this.statsig = window.statsig;\n if (!this.statsig) {\n throw new BeamError(\"Failed to detect Statsig\", { name: \"StatsigInitError\" });\n }\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n const statsigOptions = {\n disableErrorLogging: true,\n disableAutoMetricsLogging: true,\n disableCurrentPageLogging: true,\n loggingIntervalMillis: 1000,\n loggingBufferMaxSize: 2,\n overrideStableID: getCookieValue(STATSIG_STABLE_ID_COOKIE) ?? null,\n };\n await this.statsig.initialize(this.statsigApiKey, {}, statsigOptions);\n }\n\n #eventQueue: Parameters<typeof StatsigPlugin.prototype.logEvent>[] = [];\n\n #flushEventQueue() {\n while (this.#eventQueue.length > 0) {\n const eventParams = this.#eventQueue.shift();\n if (eventParams) {\n this.logEvent(...eventParams);\n }\n }\n }\n\n logEvent(name: string, value: string | number | boolean, metadata: Record<string, any> = {}) {\n if (!this.statsig) {\n this.#eventQueue.push([name, value, metadata]);\n return;\n }\n const withBeam = this.experiments.shouldShowBeam;\n if (this.experiments.isLoggingEnabled) {\n this.statsig.logEvent(name, value, { ...metadata, withBeam });\n }\n logger.debug(name, value, { ...metadata, withBeam });\n }\n\n #setBeamVisibilityValue(value: \"show\" | \"hide\") {\n document.body.setAttribute(BEAM_VISIBILITY_DATA_ATTRIBUTE, value);\n }\n\n async #testStatsigConnection() {\n // Use the HTTP API so we can synchronously detect if Statsig is reachable,\n // rather than pushing an event to the SDK's retryable queue.\n // https://docs.statsig.com/http-api\n const url = \"https://events.statsigapi.net/v1/log_event\";\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"statsig-api-key\": this.statsigApiKey,\n },\n body: JSON.stringify({\n eventName: BEAM_AB_TEST_EVENTS.STATSIG_INIT,\n value: \"true\",\n time: new Date().getTime() / 1000, // unix timestamp (seconds not milliseconds)\n metadata: {\n show_beam: this.experiments.shouldShowBeam.toString(),\n page: window.location.pathname,\n },\n user: {\n userID: this.stableId,\n },\n }),\n });\n } catch (err) {\n throw new BeamError(\"Could not call Statsig API\", { name: \"StatsigInitError\", cause: err });\n // TODO: this will log failures to Beam's error tracking API in the future\n }\n }\n\n async #registerExperimentWithBeam() {\n return postExperimentSession({\n baseUrl: this.#beamConfig?.baseUrl,\n headers: {\n authorization: `Api-Key ${this.#beamConfig?.apiKey}`,\n },\n requestBody: {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n remoteSessionId: this.stableId!,\n experiments: {\n showBeam: this.experiments.shouldShowBeam,\n },\n },\n });\n }\n}\n"],"names":["i","e","g","_beamConfig","_beamCartCookie","_attachEventListeners","attachEventListeners_fn","_initializeStatsig","initializeStatsig_fn","_eventQueue","_flushEventQueue","flushEventQueue_fn","_setBeamVisibilityValue","setBeamVisibilityValue_fn","_testStatsigConnection","testStatsigConnection_fn","_registerExperimentWithBeam","registerExperimentWithBeam_fn","STATSIG_VERSION","STATSIG_SCRIPT_URL","STATSIG_STABLE_ID_COOKIE","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","StatsigPlugin","options","__privateAdd","config","__privateSet","__privateMethod","beamVisibilityStylesheet","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","logger","name","value","metadata","__privateGet","withBeam","BeamCartCreatedEvent","_event","event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","statsigScript","statsigReadyPromise","res","rej","statsigOptions","eventParams","url","err","postExperimentSession"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import{p as k}from"../chunks/routes-oHbXmMIK.esm.js";import{B as x}from"../chunks/cart-contents-h60geKWa.esm.js";import{a as N,b as R,c as $}from"../chunks/events-5IECSF-x.esm.js";import{B as h}from"../chunks/beam-errors-AMvTvR1C.esm.js";import{getCookieValue as y,setCookieValue as D}from"../utils/cookies.js";import{logger as I}from"../utils/logger.js";import{saveRemoteSession as M}from"../utils/remote-session.js";import"../utils/local-storage.js";var p=(t,e,i)=>{if(!e.has(t))throw TypeError("Cannot "+i)},u=(t,e,i)=>(p(t,e,"read from private field"),i?i.call(t):e.get(t)),o=(t,e,i)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,i)},f=(t,e,i,a)=>(p(t,e,"write to private field"),a?a.call(t,i):e.set(t,i),i),r=(t,e,i)=>(p(t,e,"access private method"),i),d,l,w,C,E,_,m,b,v,T,S,A;const O=4,K=`https://cdn.jsdelivr.net/npm/statsig-js@${O}/build/statsig-prod-web-sdk.min.js`,B="beam_statsig_session_id",n="data-beam-visibility",W="beam-sync-visibility",c={STATSIG_INIT:"statsig_init",CART_CREATED:"cart_created",ORDER_CREATED:"order_created",BEAM_SELECTION:"beam_selection"};class P{constructor(e){o(this,w),o(this,E),o(this,m),o(this,v),o(this,S),this.name="statsig",this.experiments={shouldShowBeam:!1,isLoggingEnabled:!0},o(this,d,void 0),o(this,l,void 0),this.statsigApiKey=e.statsigApiKey}async init(e){f(this,d,e),r(this,w,C).call(this),r(this,m,b).call(this,"hide");const i=document.createElement("style");if(i.innerHTML=`
2
- [${n}="hide"] beam-select-nonprofit,
3
- [${n}="hide"] beam-post-purchase,
4
- [${n}="hide"] beam-redeem-transaction,
5
- [${n}="hide"] beam-impact-overview,
6
- [${n}="hide"] beam-community-impact,
7
- [${n}="hide"] beam-cumulative-impact,
8
- [${n}="hide"] .${W} {
1
+ import{p as R}from"../chunks/routes-WbfYG9qp.esm.js";import{B as M}from"../chunks/cart-contents-h60geKWa.esm.js";import{a as D,b as O,c as W}from"../chunks/events-5IECSF-x.esm.js";import{B as m}from"../chunks/beam-errors-AMvTvR1C.esm.js";import{getCookieValue as f,setCookieValue as $}from"../utils/cookies.js";import{logger as C}from"../utils/logger.js";import{saveRemoteSession as K}from"../utils/remote-session.js";import"../utils/local-storage.js";var w=(e,t,i)=>{if(!t.has(e))throw TypeError("Cannot "+i)},d=(e,t,i)=>(w(e,t,"read from private field"),i?i.call(e):t.get(e)),n=(e,t,i)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,i)},_=(e,t,i,s)=>(w(e,t,"write to private field"),s?s.call(e,i):t.set(e,i),i),r=(e,t,i)=>(w(e,t,"access private method"),i),h,c,E,T,b,A,l,v,B,g,S,y,L,I,k;const P=4,j=`https://cdn.jsdelivr.net/npm/statsig-js@${P}/build/statsig-prod-web-sdk.min.js`,x="beam_statsig_session_id",o="data-beam-visibility",z="beam-sync-visibility",p={STATSIG_INIT:"statsig_init",CART_CREATED:"cart_created",ORDER_CREATED:"order_created",BEAM_SELECTION:"beam_selection"};class G{constructor(t){n(this,E),n(this,b),n(this,v),n(this,g),n(this,y),n(this,I),this.name="statsig",this.experiments={shouldShowBeam:!1,isLoggingEnabled:!0},n(this,h,void 0),n(this,c,void 0),n(this,l,[]),this.statsigApiKey=t.statsigApiKey}async init(t){_(this,h,t),r(this,E,T).call(this),r(this,g,S).call(this,"hide");const i=document.createElement("style");if(i.innerHTML=`
2
+ [${o}="hide"] beam-select-nonprofit,
3
+ [${o}="hide"] beam-post-purchase,
4
+ [${o}="hide"] beam-redeem-transaction,
5
+ [${o}="hide"] beam-impact-overview,
6
+ [${o}="hide"] beam-community-impact,
7
+ [${o}="hide"] beam-cumulative-impact,
8
+ [${o}="hide"] .${z} {
9
9
  display: none;
10
10
  }
11
- `,document.head.append(i),await r(this,E,_).call(this),this.stableId=this.statsig.getStableID(),!this.stableId)throw new h("Statsig failed to assign stableId",{name:"StatsigInitError"});M({remoteSessionId:this.stableId,apiKey:e.apiKey}),f(this,l,y(x)),D({name:B,value:this.stableId,path:"/",domain:e.domain}),this.experiments={shouldShowBeam:this.statsig.getLayer("beam_trial_layer").get("show_beam",!1),isLoggingEnabled:this.statsig.getLayer("beam_trial_layer").get("enable_logging",!0)},await Promise.all([r(this,v,T).call(this),r(this,S,A).call(this)]),r(this,m,b).call(this,this.experiments.shouldShowBeam?"show":"hide"),I.debug("Statsig Experiment Assignments",this.experiments)}logEvent(e,i,a={}){const s=this.experiments.shouldShowBeam;this.experiments.isLoggingEnabled&&this.statsig.logEvent(e,i,{...a,withBeam:s}),I.debug(e,i,{...a,withBeam:s})}}d=new WeakMap,l=new WeakMap,w=new WeakSet,C=function(){window.addEventListener(N.eventName,e=>{const i=e,{itemCount:a,cartId:s,subtotal:g,currencyCode:L}=i.detail;this.logEvent(c.CART_CREATED,!0,{itemCount:a,cartId:s,subtotal:g,currencyCode:L})}),window.addEventListener(R.eventName,e=>{const i=e,{orderId:a,cartTotal:s,currencyCode:g}=i.detail;this.logEvent(c.ORDER_CREATED,s,{orderId:a,cartTotal:s,currencyCode:g,hasCart:!!u(this,l)})});let t;window.addEventListener($.eventName,e=>{const i=e,{selectedNonprofitId:a,selectionId:s}=i.detail;a!==t&&(this.logEvent(c.BEAM_SELECTION,!0,{nonprofitId:a,widget:"select-nonprofit",selectionId:s}),t=a)})},E=new WeakSet,_=async function(){const t=document.createElement("script");t.src=K,t.async=!1;const e=new Promise((a,s)=>{t.addEventListener("load",a),t.addEventListener("error",s)});document.head.append(t);try{await e}catch{throw new h("Failed to load Statsig script",{name:"StatsigInitError"})}if(this.statsig=window.statsig,!this.statsig)throw new h("Failed to detect Statsig",{name:"StatsigInitError"});const i={disableErrorLogging:!0,disableAutoMetricsLogging:!0,disableCurrentPageLogging:!0,loggingIntervalMillis:1e3,loggingBufferMaxSize:2,overrideStableID:y(B)??null};await this.statsig.initialize(this.statsigApiKey,{},i)},m=new WeakSet,b=function(t){document.body.setAttribute(n,t)},v=new WeakSet,T=async function(){const t="https://events.statsigapi.net/v1/log_event";try{await fetch(t,{method:"POST",headers:{"content-type":"application/json","statsig-api-key":this.statsigApiKey},body:JSON.stringify({eventName:c.STATSIG_INIT,value:"true",time:new Date().getTime()/1e3,metadata:{show_beam:this.experiments.shouldShowBeam.toString(),page:window.location.pathname},user:{userID:this.stableId}})})}catch(e){throw new h("Could not call Statsig API",{name:"StatsigInitError",cause:e})}},S=new WeakSet,A=async function(){return k({baseUrl:u(this,d)?.baseUrl,headers:{authorization:`Api-Key ${u(this,d)?.apiKey}`},requestBody:{remoteSessionId:this.stableId,experiments:{showBeam:this.experiments.shouldShowBeam}}})};export{P as StatsigPlugin};
11
+ `,document.head.append(i),await r(this,b,A).call(this),this.stableId=this.statsig.getStableID(),!this.stableId)throw new m("Statsig failed to assign stableId",{name:"StatsigInitError"});r(this,v,B).call(this),K({remoteSessionId:this.stableId,apiKey:t.apiKey}),_(this,c,f(M)),$({name:x,value:this.stableId,path:"/",domain:t.domain}),this.experiments={shouldShowBeam:this.statsig.getLayer("beam_trial_layer").get("show_beam",!1),isLoggingEnabled:this.statsig.getLayer("beam_trial_layer").get("enable_logging",!0)},await Promise.all([r(this,y,L).call(this),r(this,I,k).call(this)]),r(this,g,S).call(this,this.experiments.shouldShowBeam?"show":"hide"),C.debug("Statsig Experiment Assignments",this.experiments)}logEvent(t,i,s={}){if(!this.statsig){d(this,l).push([t,i,s]);return}const a=this.experiments.shouldShowBeam;this.experiments.isLoggingEnabled&&this.statsig.logEvent(t,i,{...s,withBeam:a}),C.debug(t,i,{...s,withBeam:a})}}h=new WeakMap,c=new WeakMap,E=new WeakSet,T=function(){window.addEventListener(D.eventName,t=>{const i=t,{itemCount:s,cartId:a,subtotal:u,currencyCode:N}=i.detail;this.logEvent(p.CART_CREATED,!0,{itemCount:s,cartId:a,subtotal:u,currencyCode:N})}),window.addEventListener(O.eventName,t=>{const i=t,{orderId:s,cartTotal:a,currencyCode:u}=i.detail;this.logEvent(p.ORDER_CREATED,a,{orderId:s,cartTotal:a,currencyCode:u,hasCart:!!d(this,c)})});let e;window.addEventListener(W.eventName,t=>{const i=t,{selectedNonprofitId:s,selectionId:a}=i.detail;s!==e&&(this.logEvent(p.BEAM_SELECTION,!0,{nonprofitId:s,widget:"select-nonprofit",selectionId:a}),e=s)})},b=new WeakSet,A=async function(){const e=document.createElement("script");e.src=j,e.async=!1;const t=new Promise((s,a)=>{e.addEventListener("load",s),e.addEventListener("error",a)});document.head.append(e);try{await t}catch{throw new m("Failed to load Statsig script",{name:"StatsigInitError"})}if(this.statsig=window.statsig,!this.statsig)throw new m("Failed to detect Statsig",{name:"StatsigInitError"});const i={disableErrorLogging:!0,disableAutoMetricsLogging:!0,disableCurrentPageLogging:!0,loggingIntervalMillis:1e3,loggingBufferMaxSize:2,overrideStableID:f(x)??null};await this.statsig.initialize(this.statsigApiKey,{},i)},l=new WeakMap,v=new WeakSet,B=function(){for(;d(this,l).length>0;){const e=d(this,l).shift();e&&this.logEvent(...e)}},g=new WeakSet,S=function(e){document.body.setAttribute(o,e)},y=new WeakSet,L=async function(){const e="https://events.statsigapi.net/v1/log_event";try{await fetch(e,{method:"POST",headers:{"content-type":"application/json","statsig-api-key":this.statsigApiKey},body:JSON.stringify({eventName:p.STATSIG_INIT,value:"true",time:new Date().getTime()/1e3,metadata:{show_beam:this.experiments.shouldShowBeam.toString(),page:window.location.pathname},user:{userID:this.stableId}})})}catch(t){throw new m("Could not call Statsig API",{name:"StatsigInitError",cause:t})}},I=new WeakSet,k=async function(){return R({baseUrl:d(this,h)?.baseUrl,headers:{authorization:`Api-Key ${d(this,h)?.apiKey}`},requestBody:{remoteSessionId:this.stableId,experiments:{showBeam:this.experiments.shouldShowBeam}}})};export{G as StatsigPlugin};
12
12
  //# sourceMappingURL=statsig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"statsig.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_CART_COOKIE_NAME } from \"../../shared/cart-contents\";\nimport { BeamCartCreatedEvent, BeamNonprofitSelectEvent, BeamOrderCreatedEvent } from \"../../utils/events\";\nimport { BeamPlugin, BeamConfigOptions } from \"../beam\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { logger } from \"../../utils/logger\";\nimport { saveRemoteSession } from \"../../utils/remote-session\";\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/jsClientSDK\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n};\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\n\nconst STATSIG_VERSION = 4;\n\nconst STATSIG_SCRIPT_URL = `https://cdn.jsdelivr.net/npm/statsig-js@${STATSIG_VERSION}/build/statsig-prod-web-sdk.min.js`;\n\nconst STATSIG_STABLE_ID_COOKIE = \"beam_statsig_session_id\";\n\nconst BEAM_VISIBILITY_DATA_ATTRIBUTE = \"data-beam-visibility\";\n\n// Add class to elements that should only show when Beam shows\nconst BEAM_VISIBILITY_SYNCED_CLASS = \"beam-sync-visibility\";\n\nconst BEAM_AB_TEST_EVENTS = {\n STATSIG_INIT: \"statsig_init\",\n CART_CREATED: \"cart_created\",\n ORDER_CREATED: \"order_created\",\n BEAM_SELECTION: \"beam_selection\",\n};\n\ntype Experiments = {\n /** Whether Beam widgets should be shown to users */\n shouldShowBeam: boolean;\n /** Whether events should be logged to Statsig */\n isLoggingEnabled: boolean;\n};\n\n/**\n * Sets up Statsig for A/B testing and shows/hides Beam based on default experiment rules.\n * @example\n * import { StatsigPlugin } from '@beamimpact/web-sdk/dist/integrations/statsig'\n * import { init } from '@beamimpact/web-sdk/dist/integrations/beam'\n *\n * const beam = await init({\n * apiKey: '',\n * chainId: 1,\n * storeId: 1,\n * domain: 'my-store.com' // in case site uses subdomains for different pages\n * plugins: [\n * new StatsigPlugin({ statsigApiKey: '' })\n * ]\n * })\n *\n * // Once initialized, all Beam widgets have display: none unless user is assigned to A/B test group that shows Beam\n * // To hide additional elements, add the CSS className \"beam-sync-visibility\" to them\n * // To programmatically access the experiment state: getConfig().plugins.statsig.experiments.shouldShowBeam\n */\nexport class StatsigPlugin implements BeamPlugin {\n name = \"statsig\";\n\n statsig: any; // Statsig SDK instance\n\n statsigApiKey: string;\n\n experiments: Experiments = {\n shouldShowBeam: false,\n isLoggingEnabled: true,\n };\n\n stableId?: string;\n\n #beamConfig?: BeamConfigOptions;\n\n // Checked at initialization so that we can tell if post-purchase events came from a session with a cart or not\n #beamCartCookie?: string;\n\n constructor(options: StatsigPluginOptions) {\n this.statsigApiKey = options.statsigApiKey;\n }\n\n async init(config: BeamConfigOptions) {\n this.#beamConfig = config;\n\n // Add event listeners for cart/order lifecycle events\n // This should happen as soon as possible to avoid missing events\n this.#attachEventListeners();\n\n // Attach beam-visibility data attribute to body\n this.#setBeamVisibilityValue(\"hide\");\n\n // Create beam a/b test stylesheet\n const beamVisibilityStylesheet = document.createElement(\"style\");\n beamVisibilityStylesheet.innerHTML = `\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-select-nonprofit,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-post-purchase,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-redeem-transaction,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-impact-overview,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-community-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-cumulative-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] .${BEAM_VISIBILITY_SYNCED_CLASS} {\n display: none;\n }\n `;\n document.head.append(beamVisibilityStylesheet);\n\n // Create statsig script\n await this.#initializeStatsig();\n this.stableId = this.statsig.getStableID();\n if (!this.stableId) {\n throw new BeamError(\"Statsig failed to assign stableId\", { name: \"StatsigInitError\" });\n }\n\n // Save Statsig ID in localStorage for linking to carts later\n saveRemoteSession({ remoteSessionId: this.stableId, apiKey: config.apiKey });\n\n // Save initial value of cart cookie so that post-purchase events can be filtered by if they had a cart or not\n this.#beamCartCookie = getCookieValue(BEAM_CART_COOKIE_NAME);\n\n // Cache ID in cookie to preserve ID across subdomains\n setCookieValue({\n name: STATSIG_STABLE_ID_COOKIE,\n value: this.stableId,\n path: \"/\",\n domain: config.domain,\n });\n\n // Evaluate Statsig experiment assignments\n this.experiments = {\n // Whether Beam widgets should be shown to users\n shouldShowBeam: this.statsig\n .getLayer(\"beam_trial_layer\")\n .get(\"show_beam\", false /* default to hide */) as boolean,\n // Whether events should be logged to Statsig\n isLoggingEnabled: this.statsig.getLayer(\"beam_trial_layer\").get(\"enable_logging\", true) as boolean,\n };\n\n // In parallel:\n // A) Make test call to Statsig\n // B) Save stable ID in Beam for attribution to carts/transactions\n await Promise.all([this.#testStatsigConnection(), this.#registerExperimentWithBeam()]);\n\n // Update beam visibility data attribute, which shows Beam to users in the experiment\n this.#setBeamVisibilityValue(this.experiments.shouldShowBeam ? \"show\" : \"hide\");\n\n // Log result\n logger.debug(\"Statsig Experiment Assignments\", this.experiments);\n }\n\n #attachEventListeners() {\n // Cart Created\n window.addEventListener(BeamCartCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n const { itemCount, cartId, subtotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.CART_CREATED, true, { itemCount, cartId, subtotal, currencyCode });\n });\n\n // Order Created\n window.addEventListener(BeamOrderCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamOrderCreatedEvent;\n const { orderId, cartTotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.ORDER_CREATED, cartTotal, {\n orderId,\n cartTotal,\n currencyCode,\n hasCart: !!this.#beamCartCookie,\n });\n });\n\n // Beam Selection\n // Store previous value in case widget is recreated and emits event again:\n let lastSelectedNonprofitId: number | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, (_event: Event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n if (selectedNonprofitId !== lastSelectedNonprofitId) {\n this.logEvent(BEAM_AB_TEST_EVENTS.BEAM_SELECTION, true, {\n nonprofitId: selectedNonprofitId,\n widget: \"select-nonprofit\",\n selectionId,\n });\n lastSelectedNonprofitId = selectedNonprofitId;\n }\n });\n }\n\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n async #initializeStatsig() {\n const statsigScript = document.createElement(\"script\");\n statsigScript.src = STATSIG_SCRIPT_URL;\n statsigScript.async = false;\n const statsigReadyPromise = new Promise((res, rej) => {\n statsigScript.addEventListener(\"load\", res);\n statsigScript.addEventListener(\"error\", rej);\n });\n document.head.append(statsigScript);\n try {\n await statsigReadyPromise;\n } catch (err) {\n throw new BeamError(\"Failed to load Statsig script\", { name: \"StatsigInitError\" });\n }\n this.statsig = window.statsig;\n if (!this.statsig) {\n throw new BeamError(\"Failed to detect Statsig\", { name: \"StatsigInitError\" });\n }\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n const statsigOptions = {\n disableErrorLogging: true,\n disableAutoMetricsLogging: true,\n disableCurrentPageLogging: true,\n loggingIntervalMillis: 1000,\n loggingBufferMaxSize: 2,\n overrideStableID: getCookieValue(STATSIG_STABLE_ID_COOKIE) ?? null,\n };\n await this.statsig.initialize(this.statsigApiKey, {}, statsigOptions);\n }\n\n logEvent(name: string, value: string | number | boolean, metadata: Record<string, any> = {}) {\n const withBeam = this.experiments.shouldShowBeam;\n if (this.experiments.isLoggingEnabled) {\n this.statsig.logEvent(name, value, { ...metadata, withBeam });\n }\n logger.debug(name, value, { ...metadata, withBeam });\n }\n\n #setBeamVisibilityValue(value: \"show\" | \"hide\") {\n document.body.setAttribute(BEAM_VISIBILITY_DATA_ATTRIBUTE, value);\n }\n\n async #testStatsigConnection() {\n // Use the HTTP API so we can synchronously detect if Statsig is reachable,\n // rather than pushing an event to the SDK's retryable queue.\n // https://docs.statsig.com/http-api\n const url = \"https://events.statsigapi.net/v1/log_event\";\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"statsig-api-key\": this.statsigApiKey,\n },\n body: JSON.stringify({\n eventName: BEAM_AB_TEST_EVENTS.STATSIG_INIT,\n value: \"true\",\n time: new Date().getTime() / 1000, // unix timestamp (seconds not milliseconds)\n metadata: {\n show_beam: this.experiments.shouldShowBeam.toString(),\n page: window.location.pathname,\n },\n user: {\n userID: this.stableId,\n },\n }),\n });\n } catch (err) {\n throw new BeamError(\"Could not call Statsig API\", { name: \"StatsigInitError\", cause: err });\n // TODO: this will log failures to Beam's error tracking API in the future\n }\n }\n\n async #registerExperimentWithBeam() {\n return postExperimentSession({\n baseUrl: this.#beamConfig?.baseUrl,\n headers: {\n authorization: `Api-Key ${this.#beamConfig?.apiKey}`,\n },\n requestBody: {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n remoteSessionId: this.stableId!,\n experiments: {\n showBeam: this.experiments.shouldShowBeam,\n },\n },\n });\n }\n}\n"],"names":["y","i","t","e","h","w","s","d","_beamConfig","_beamCartCookie","_attachEventListeners","attachEventListeners_fn","_initializeStatsig","initializeStatsig_fn","_setBeamVisibilityValue","setBeamVisibilityValue_fn","_testStatsigConnection","testStatsigConnection_fn","_registerExperimentWithBeam","registerExperimentWithBeam_fn","STATSIG_VERSION","STATSIG_SCRIPT_URL","STATSIG_STABLE_ID_COOKIE","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","StatsigPlugin","options","__privateAdd","config","__privateSet","__privateMethod","beamVisibilityStylesheet","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","logger","name","value","metadata","withBeam","BeamCartCreatedEvent","_event","event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","__privateGet","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","statsigScript","statsigReadyPromise","res","rej","statsigOptions","url","err","postExperimentSession"],"mappings":"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"}
1
+ {"version":3,"file":"statsig.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_CART_COOKIE_NAME } from \"../../shared/cart-contents\";\nimport { BeamCartCreatedEvent, BeamNonprofitSelectEvent, BeamOrderCreatedEvent } from \"../../utils/events\";\nimport { BeamPlugin, BeamConfigOptions } from \"../beam\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { logger } from \"../../utils/logger\";\nimport { saveRemoteSession } from \"../../utils/remote-session\";\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/jsClientSDK\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n};\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n statsig?: any; // attached by Statsig CDN script\n }\n}\n\nconst STATSIG_VERSION = 4;\n\nconst STATSIG_SCRIPT_URL = `https://cdn.jsdelivr.net/npm/statsig-js@${STATSIG_VERSION}/build/statsig-prod-web-sdk.min.js`;\n\nconst STATSIG_STABLE_ID_COOKIE = \"beam_statsig_session_id\";\n\nconst BEAM_VISIBILITY_DATA_ATTRIBUTE = \"data-beam-visibility\";\n\n// Add class to elements that should only show when Beam shows\nconst BEAM_VISIBILITY_SYNCED_CLASS = \"beam-sync-visibility\";\n\nconst BEAM_AB_TEST_EVENTS = {\n STATSIG_INIT: \"statsig_init\",\n CART_CREATED: \"cart_created\",\n ORDER_CREATED: \"order_created\",\n BEAM_SELECTION: \"beam_selection\",\n};\n\ntype Experiments = {\n /** Whether Beam widgets should be shown to users */\n shouldShowBeam: boolean;\n /** Whether events should be logged to Statsig */\n isLoggingEnabled: boolean;\n};\n\n/**\n * Sets up Statsig for A/B testing and shows/hides Beam based on default experiment rules.\n * @example\n * import { StatsigPlugin } from '@beamimpact/web-sdk/dist/integrations/statsig'\n * import { init } from '@beamimpact/web-sdk/dist/integrations/beam'\n *\n * const beam = await init({\n * apiKey: '',\n * chainId: 1,\n * storeId: 1,\n * domain: 'my-store.com' // in case site uses subdomains for different pages\n * plugins: [\n * new StatsigPlugin({ statsigApiKey: '' })\n * ]\n * })\n *\n * // Once initialized, all Beam widgets have display: none unless user is assigned to A/B test group that shows Beam\n * // To hide additional elements, add the CSS className \"beam-sync-visibility\" to them\n * // To programmatically access the experiment state: getConfig().plugins.statsig.experiments.shouldShowBeam\n */\nexport class StatsigPlugin implements BeamPlugin {\n name = \"statsig\";\n\n statsig: any; // Statsig SDK instance\n\n statsigApiKey: string;\n\n experiments: Experiments = {\n shouldShowBeam: false,\n isLoggingEnabled: true,\n };\n\n stableId?: string;\n\n #beamConfig?: BeamConfigOptions;\n\n // Checked at initialization so that we can tell if post-purchase events came from a session with a cart or not\n #beamCartCookie?: string;\n\n constructor(options: StatsigPluginOptions) {\n this.statsigApiKey = options.statsigApiKey;\n }\n\n async init(config: BeamConfigOptions) {\n this.#beamConfig = config;\n\n // Add event listeners for cart/order lifecycle events\n // This should happen as soon as possible to avoid missing events\n this.#attachEventListeners();\n\n // Attach beam-visibility data attribute to body\n this.#setBeamVisibilityValue(\"hide\");\n\n // Create beam a/b test stylesheet\n const beamVisibilityStylesheet = document.createElement(\"style\");\n beamVisibilityStylesheet.innerHTML = `\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-select-nonprofit,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-post-purchase,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-redeem-transaction,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-impact-overview,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-community-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-cumulative-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] .${BEAM_VISIBILITY_SYNCED_CLASS} {\n display: none;\n }\n `;\n document.head.append(beamVisibilityStylesheet);\n\n // Create statsig script\n await this.#initializeStatsig();\n this.stableId = this.statsig.getStableID();\n if (!this.stableId) {\n throw new BeamError(\"Statsig failed to assign stableId\", { name: \"StatsigInitError\" });\n }\n\n // Send events that happened before Statsig was ready\n this.#flushEventQueue();\n\n // Save Statsig ID in localStorage for linking to carts later\n saveRemoteSession({ remoteSessionId: this.stableId, apiKey: config.apiKey });\n\n // Save initial value of cart cookie so that post-purchase events can be filtered by if they had a cart or not\n this.#beamCartCookie = getCookieValue(BEAM_CART_COOKIE_NAME);\n\n // Cache ID in cookie to preserve ID across subdomains\n setCookieValue({\n name: STATSIG_STABLE_ID_COOKIE,\n value: this.stableId,\n path: \"/\",\n domain: config.domain,\n });\n\n // Evaluate Statsig experiment assignments\n this.experiments = {\n // Whether Beam widgets should be shown to users\n shouldShowBeam: this.statsig\n .getLayer(\"beam_trial_layer\")\n .get(\"show_beam\", false /* default to hide */) as boolean,\n // Whether events should be logged to Statsig\n isLoggingEnabled: this.statsig.getLayer(\"beam_trial_layer\").get(\"enable_logging\", true) as boolean,\n };\n\n // In parallel:\n // A) Make test call to Statsig\n // B) Save stable ID in Beam for attribution to carts/transactions\n await Promise.all([this.#testStatsigConnection(), this.#registerExperimentWithBeam()]);\n\n // Update beam visibility data attribute, which shows Beam to users in the experiment\n this.#setBeamVisibilityValue(this.experiments.shouldShowBeam ? \"show\" : \"hide\");\n\n // Log result\n logger.debug(\"Statsig Experiment Assignments\", this.experiments);\n }\n\n #attachEventListeners() {\n // Cart Created\n window.addEventListener(BeamCartCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n const { itemCount, cartId, subtotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.CART_CREATED, true, { itemCount, cartId, subtotal, currencyCode });\n });\n\n // Order Created\n window.addEventListener(BeamOrderCreatedEvent.eventName, (_event: Event) => {\n const event = _event as BeamOrderCreatedEvent;\n const { orderId, cartTotal, currencyCode } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.ORDER_CREATED, cartTotal, {\n orderId,\n cartTotal,\n currencyCode,\n hasCart: !!this.#beamCartCookie,\n });\n });\n\n // Beam Selection\n // Store previous value in case widget is recreated and emits event again:\n let lastSelectedNonprofitId: number | null | undefined;\n window.addEventListener(BeamNonprofitSelectEvent.eventName, (_event: Event) => {\n const event = _event as BeamNonprofitSelectEvent;\n const { selectedNonprofitId, selectionId } = event.detail;\n if (selectedNonprofitId !== lastSelectedNonprofitId) {\n this.logEvent(BEAM_AB_TEST_EVENTS.BEAM_SELECTION, true, {\n nonprofitId: selectedNonprofitId,\n widget: \"select-nonprofit\",\n selectionId,\n });\n lastSelectedNonprofitId = selectedNonprofitId;\n }\n });\n }\n\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n async #initializeStatsig() {\n const statsigScript = document.createElement(\"script\");\n statsigScript.src = STATSIG_SCRIPT_URL;\n statsigScript.async = false;\n const statsigReadyPromise = new Promise((res, rej) => {\n statsigScript.addEventListener(\"load\", res);\n statsigScript.addEventListener(\"error\", rej);\n });\n document.head.append(statsigScript);\n try {\n await statsigReadyPromise;\n } catch (err) {\n throw new BeamError(\"Failed to load Statsig script\", { name: \"StatsigInitError\" });\n }\n this.statsig = window.statsig;\n if (!this.statsig) {\n throw new BeamError(\"Failed to detect Statsig\", { name: \"StatsigInitError\" });\n }\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n const statsigOptions = {\n disableErrorLogging: true,\n disableAutoMetricsLogging: true,\n disableCurrentPageLogging: true,\n loggingIntervalMillis: 1000,\n loggingBufferMaxSize: 2,\n overrideStableID: getCookieValue(STATSIG_STABLE_ID_COOKIE) ?? null,\n };\n await this.statsig.initialize(this.statsigApiKey, {}, statsigOptions);\n }\n\n #eventQueue: Parameters<typeof StatsigPlugin.prototype.logEvent>[] = [];\n\n #flushEventQueue() {\n while (this.#eventQueue.length > 0) {\n const eventParams = this.#eventQueue.shift();\n if (eventParams) {\n this.logEvent(...eventParams);\n }\n }\n }\n\n logEvent(name: string, value: string | number | boolean, metadata: Record<string, any> = {}) {\n if (!this.statsig) {\n this.#eventQueue.push([name, value, metadata]);\n return;\n }\n const withBeam = this.experiments.shouldShowBeam;\n if (this.experiments.isLoggingEnabled) {\n this.statsig.logEvent(name, value, { ...metadata, withBeam });\n }\n logger.debug(name, value, { ...metadata, withBeam });\n }\n\n #setBeamVisibilityValue(value: \"show\" | \"hide\") {\n document.body.setAttribute(BEAM_VISIBILITY_DATA_ATTRIBUTE, value);\n }\n\n async #testStatsigConnection() {\n // Use the HTTP API so we can synchronously detect if Statsig is reachable,\n // rather than pushing an event to the SDK's retryable queue.\n // https://docs.statsig.com/http-api\n const url = \"https://events.statsigapi.net/v1/log_event\";\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"statsig-api-key\": this.statsigApiKey,\n },\n body: JSON.stringify({\n eventName: BEAM_AB_TEST_EVENTS.STATSIG_INIT,\n value: \"true\",\n time: new Date().getTime() / 1000, // unix timestamp (seconds not milliseconds)\n metadata: {\n show_beam: this.experiments.shouldShowBeam.toString(),\n page: window.location.pathname,\n },\n user: {\n userID: this.stableId,\n },\n }),\n });\n } catch (err) {\n throw new BeamError(\"Could not call Statsig API\", { name: \"StatsigInitError\", cause: err });\n // TODO: this will log failures to Beam's error tracking API in the future\n }\n }\n\n async #registerExperimentWithBeam() {\n return postExperimentSession({\n baseUrl: this.#beamConfig?.baseUrl,\n headers: {\n authorization: `Api-Key ${this.#beamConfig?.apiKey}`,\n },\n requestBody: {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n remoteSessionId: this.stableId!,\n experiments: {\n showBeam: this.experiments.shouldShowBeam,\n },\n },\n });\n }\n}\n"],"names":["i","e","g","_beamConfig","_beamCartCookie","_attachEventListeners","attachEventListeners_fn","_initializeStatsig","initializeStatsig_fn","_eventQueue","_flushEventQueue","flushEventQueue_fn","_setBeamVisibilityValue","setBeamVisibilityValue_fn","_testStatsigConnection","testStatsigConnection_fn","_registerExperimentWithBeam","registerExperimentWithBeam_fn","STATSIG_VERSION","STATSIG_SCRIPT_URL","STATSIG_STABLE_ID_COOKIE","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","StatsigPlugin","options","__privateAdd","config","__privateSet","__privateMethod","beamVisibilityStylesheet","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","logger","name","value","metadata","__privateGet","withBeam","BeamCartCreatedEvent","_event","event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","selectionId","statsigScript","statsigReadyPromise","res","rej","statsigOptions","eventParams","url","err","postExperimentSession"],"mappings":"ocAAA,IAAA,EAAA,CAAAA,EAAA,EAAAC,IAAA,CAAA,GAAA,CAAA,EAAA,IAAAD,CAAA,EAAA,MAAA,UAAA,UAAAC,CAAA,CAAA,EAAAC,EAAA,CAAAF,EAAA,EAAAC,KAAA,EAAAD,EAAA,EAAA,yBAAA,EAAAC,EAAAA,EAAA,KAAAD,CAAA,EAAA,EAAA,IAAAA,CAAA,GAAA,EAAA,CAAAA,EAAA,EAAAC,IAAA,CAAA,GAAA,EAAA,IAAAD,CAAA,EAAA,MAAA,UAAA,mDAAA,EAAA,aAAA,QAAA,EAAA,IAAAA,CAAA,EAAA,EAAA,IAAAA,EAAAC,CAAA,CAAA,EAAA,EAAA,CAAAD,EAAA,EAAAC,EAAA,KAAA,EAAAD,EAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,KAAAA,EAAAC,CAAA,EAAA,EAAA,IAAAD,EAAAC,CAAA,EAAAA,GAAA,EAAA,CAAAD,EAAA,EAAAC,KAAA,EAAAD,EAAA,EAAA,uBAAA,EAAAC,GAAAE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAuBA,MAAMC,EAAkB,EAElBC,EAAqB,2CAA2CD,CAAe,qCAE/EE,EAA2B,0BAE3BC,EAAiC,uBAGjCC,EAA+B,uBAE/BC,EAAsB,CAC1B,aAAc,eACd,aAAc,eACd,cAAe,gBACf,eAAgB,gBAClB,EA6Ba,MAAAC,CAAoC,CAmB/C,YAAYC,EAA+B,CA2E3CC,EAAA,KAAArB,GAsCAqB,EAAA,KAAMnB,CAgCNmB,EAAAA,EAAA,KAAAhB,CAqBAgB,EAAAA,EAAA,KAAAd,CAAAA,EAIAc,EAAA,KAAMZ,CAAAA,EA+BNY,EAAA,KAAMV,GA3NN,KAAO,KAAA,UAMP,KAA2B,YAAA,CACzB,eAAgB,GAChB,iBAAkB,EACpB,EAIAU,EAAA,KAAAvB,EAAA,MAGAuB,EAAAA,EAAA,KAAAtB,EAAA,MAAA,EAiJAsB,EAAA,KAAAjB,EAAqE,CAAA,CA9InE,EAAA,KAAK,cAAgBgB,EAAQ,aAC/B,CAEA,MAAM,KAAKE,EAA2B,CACpCC,EAAA,KAAKzB,EAAcwB,CAInBE,EAAAA,EAAA,KAAKxB,EAAAC,GAAL,KAGAuB,IAAAA,EAAAA,EAAA,KAAKjB,EAAAC,GAAL,KAA6B,KAAA,MAAA,EAG7B,MAAMiB,EAA2B,SAAS,cAAc,OAAO,EAiB/D,GAhBAA,EAAyB,UAAY;AAAA,SAChCT,CAA8B;AAAA,SAC9BA,CAA8B;AAAA,SAC9BA,CAA8B;AAAA,SAC9BA,CAA8B;AAAA,SAC9BA,CAA8B;AAAA,SAC9BA,CAA8B;AAAA,SAC9BA,CAA8B,aAAaC,CAA4B;AAAA;AAAA;AAAA,MAI5E,SAAS,KAAK,OAAOQ,CAAwB,EAG7C,MAAMD,EAAA,KAAKtB,EAAAC,CAAAA,EAAL,KACN,IAAA,EAAA,KAAK,SAAW,KAAK,QAAQ,YAAY,EACrC,CAAC,KAAK,SACR,MAAM,IAAIuB,EAAU,oCAAqC,CAAE,KAAM,kBAAmB,CAAC,EAIvFF,EAAA,KAAKnB,EAAAC,CAAAA,EAAL,KAGAqB,IAAAA,EAAAA,EAAkB,CAAE,gBAAiB,KAAK,SAAU,OAAQL,EAAO,MAAO,CAAC,EAG3EC,EAAA,KAAKxB,EAAkB6B,EAAeC,CAAqB,CAG3DC,EAAAA,EAAe,CACb,KAAMf,EACN,MAAO,KAAK,SACZ,KAAM,IACN,OAAQO,EAAO,MACjB,CAAC,EAGD,KAAK,YAAc,CAEjB,eAAgB,KAAK,QAClB,SAAS,kBAAkB,EAC3B,IAAI,YAAa,EAA2B,EAE/C,iBAAkB,KAAK,QAAQ,SAAS,kBAAkB,EAAE,IAAI,iBAAkB,EAAI,CACxF,EAKA,MAAM,QAAQ,IAAI,CAACE,EAAA,KAAKf,EAAAC,CAAAA,EAAL,KAA+Bc,IAAAA,EAAAA,EAAA,KAAKb,EAAAC,CAAL,EAAA,KAAA,IAAA,CAAkC,CAAC,EAGrFY,EAAA,KAAKjB,EAAAC,CAAL,EAAA,KAAA,KAA6B,KAAK,YAAY,eAAiB,OAAS,MAAA,EAGxEuB,EAAO,MAAM,iCAAkC,KAAK,WAAW,CACjE,CAiFA,SAASC,EAAcC,EAAkCC,EAAgC,CAAC,EAAG,CAC3F,GAAI,CAAC,KAAK,QAAS,CACjBC,EAAA,KAAK/B,CAAAA,EAAY,KAAK,CAAC4B,EAAMC,EAAOC,CAAQ,CAAC,EAC7C,MACF,CACA,MAAME,EAAW,KAAK,YAAY,eAC9B,KAAK,YAAY,kBACnB,KAAK,QAAQ,SAASJ,EAAMC,EAAO,CAAE,GAAGC,EAAU,SAAAE,CAAS,CAAC,EAE9DL,EAAO,MAAMC,EAAMC,EAAO,CAAE,GAAGC,EAAU,SAAAE,CAAS,CAAC,CACrD,CAoDF,CA7NEtC,EAAA,IAGAC,QAAAA,EAAA,IA6EAC,QAAAA,EAAA,YAAAC,EAAqB,UAAG,CAEtB,OAAO,iBAAiBoC,EAAqB,UAAYC,GAAkB,CACzE,MAAMC,EAAQD,EACR,CAAE,UAAAE,EAAW,OAAAC,EAAQ,SAAAC,EAAU,aAAAC,CAAa,EAAIJ,EAAM,OAC5D,KAAK,SAASrB,EAAoB,aAAc,GAAM,CAAE,UAAAsB,EAAW,OAAAC,EAAQ,SAAAC,EAAU,aAAAC,CAAa,CAAC,CACrG,CAAC,EAGD,OAAO,iBAAiBC,EAAsB,UAAYN,GAAkB,CAC1E,MAAMC,EAAQD,EACR,CAAE,QAAAO,EAAS,UAAAC,EAAW,aAAAH,CAAa,EAAIJ,EAAM,OACnD,KAAK,SAASrB,EAAoB,cAAe4B,EAAW,CAC1D,QAAAD,EACA,UAAAC,EACA,aAAAH,EACA,QAAS,CAAC,CAACR,EAAA,KAAKpC,CAClB,CAAA,CAAC,CACH,CAAC,EAID,IAAIgD,EACJ,OAAO,iBAAiBC,EAAyB,UAAYV,GAAkB,CAC7E,MAAMC,EAAQD,EACR,CAAE,oBAAAW,EAAqB,YAAAC,CAAY,EAAIX,EAAM,OAC/CU,IAAwBF,IAC1B,KAAK,SAAS7B,EAAoB,eAAgB,GAAM,CACtD,YAAa+B,EACb,OAAQ,mBACR,YAAAC,CACF,CAAC,EACDH,EAA0BE,EAE9B,CAAC,CACH,EAGM/C,EAAA,YAAAC,EAAkB,gBAAG,CACzB,MAAMgD,EAAgB,SAAS,cAAc,QAAQ,EACrDA,EAAc,IAAMrC,EACpBqC,EAAc,MAAQ,GACtB,MAAMC,EAAsB,IAAI,QAAQ,CAACC,EAAKC,IAAQ,CACpDH,EAAc,iBAAiB,OAAQE,CAAG,EAC1CF,EAAc,iBAAiB,QAASG,CAAG,CAC7C,CAAC,EACD,SAAS,KAAK,OAAOH,CAAa,EAClC,GAAI,CACF,MAAMC,CACR,MAAc,CACZ,MAAM,IAAI1B,EAAU,gCAAiC,CAAE,KAAM,kBAAmB,CAAC,CACnF,CAEA,GADA,KAAK,QAAU,OAAO,QAClB,CAAC,KAAK,QACR,MAAM,IAAIA,EAAU,2BAA4B,CAAE,KAAM,kBAAmB,CAAC,EAG9E,MAAM6B,EAAiB,CACrB,oBAAqB,GACrB,0BAA2B,GAC3B,0BAA2B,GAC3B,sBAAuB,IACvB,qBAAsB,EACtB,iBAAkB3B,EAAeb,CAAwB,GAAK,IAChE,EACA,MAAM,KAAK,QAAQ,WAAW,KAAK,cAAe,CAAA,EAAIwC,CAAc,CACtE,EAEAnD,EAAA,IAAA,QAEAC,EAAA,IAAA,QAAAC,EAAgB,UAAG,CACjB,KAAO6B,EAAA,KAAK/B,CAAAA,EAAY,OAAS,GAAG,CAClC,MAAMoD,EAAcrB,EAAA,KAAK/B,CAAY,EAAA,MACjCoD,EAAAA,GACF,KAAK,SAAS,GAAGA,CAAW,CAEhC,CACF,EAcAjD,EAAA,IAAA,QAAAC,EAAuB,SAACyB,EAAwB,CAC9C,SAAS,KAAK,aAAajB,EAAgCiB,CAAK,CAClE,EAEMxB,EAAA,IAAAC,QAAAA,EAAsB,gBAAG,CAI7B,MAAM+C,EAAM,6CACZ,GAAI,CACF,MAAM,MAAMA,EAAK,CACf,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,kBAAmB,KAAK,aAC1B,EACA,KAAM,KAAK,UAAU,CACnB,UAAWvC,EAAoB,aAC/B,MAAO,OACP,KAAM,IAAI,KAAK,EAAE,QAAQ,EAAI,IAC7B,SAAU,CACR,UAAW,KAAK,YAAY,eAAe,SAAS,EACpD,KAAM,OAAO,SAAS,QACxB,EACA,KAAM,CACJ,OAAQ,KAAK,QACf,CACF,CAAC,CACH,CAAC,CACH,OAASwC,EAAK,CACZ,MAAM,IAAIhC,EAAU,6BAA8B,CAAE,KAAM,mBAAoB,MAAOgC,CAAI,CAAC,CAE5F,CACF,EAEM/C,EAAA,IAAAC,QAAAA,EAA2B,gBAAG,CAClC,OAAO+C,EAAsB,CAC3B,QAASxB,EAAA,KAAKrC,CAAAA,GAAa,QAC3B,QAAS,CACP,cAAe,WAAWqC,EAAA,KAAKrC,CAAa,GAAA,MAAM,EACpD,EACA,YAAa,CAEX,gBAAiB,KAAK,SACtB,YAAa,CACX,SAAU,KAAK,YAAY,cAC7B,CACF,CACF,CAAC,CACH"}
@@ -1,2 +1,2 @@
1
- import o from"react";import{l as a}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=a({tagName:m.tagName,elementClass:m,react:o,events:{}});export{t as BeamCommunityImpact,t as default};
1
+ import o from"react";import{l as a}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=a({tagName:m.tagName,elementClass:m,react:o,events:{}});export{t as BeamCommunityImpact,t as default};
2
2
  //# sourceMappingURL=community-impact.esm.js.map
@@ -1,2 +1,2 @@
1
- import o from"react";import{l as a}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=a({tagName:m.tagName,elementClass:m,react:o,events:{}});export{t as BeamCommunityImpact,t as default};
1
+ import o from"react";import{l as a}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=a({tagName:m.tagName,elementClass:m,react:o,events:{}});export{t as BeamCommunityImpact,t as default};
2
2
  //# sourceMappingURL=community-impact.js.map
@@ -1,2 +1,2 @@
1
- import a from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:a,events:{}});export{t as BeamCumulativeImpact,t as default};
1
+ import a from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:a,events:{}});export{t as BeamCumulativeImpact,t as default};
2
2
  //# sourceMappingURL=cumulative-impact.esm.js.map
@@ -1,2 +1,2 @@
1
- import a from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:a,events:{}});export{t as BeamCumulativeImpact,t as default};
1
+ import a from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:a,events:{}});export{t as BeamCumulativeImpact,t as default};
2
2
  //# sourceMappingURL=cumulative-impact.js.map
@@ -1,2 +1,2 @@
1
- import r from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:r,events:{}});export{t as BeamImpactOverview,t as default};
1
+ import r from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:r,events:{}});export{t as BeamImpactOverview,t as default};
2
2
  //# sourceMappingURL=impact-overview.esm.js.map
@@ -1,2 +1,2 @@
1
- import r from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.js";import"../chunks/responsive-LYEag6TI.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:r,events:{}});export{t as BeamImpactOverview,t as default};
1
+ import r from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/beam-partner-logos.js";import"../chunks/responsive-LYEag6TI.esm.js";const t=e({tagName:m.tagName,elementClass:m,react:r,events:{}});export{t as BeamImpactOverview,t as default};
2
2
  //# sourceMappingURL=impact-overview.js.map
@@ -1,2 +1,2 @@
1
- import{BeamCommunityImpact as R}from"./community-impact.esm.js";import{BeamCumulativeImpact as T}from"./cumulative-impact.esm.js";import{BeamImpactOverview as g}from"./impact-overview.esm.js";import{BeamSelectNonprofit as k}from"./select-nonprofit.esm.js";import{BeamRedeemTransaction as z}from"./redeem-transaction.esm.js";import{BeamPostPurchase as D}from"./post-purchase.esm.js";import"react";import"../chunks/lit-yVXn5Cbs.esm.js";import"../components/community-impact.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../components/cumulative-impact.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/impact-overview.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/select-nonprofit.esm.js";import"../utils/network-listeners.esm.js";import"../utils/local-storage.esm.js";import"../utils/cookies.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";import"../components/redeem-transaction.esm.js";import"../components/post-purchase.esm.js";export{R as BeamCommunityImpact,T as BeamCumulativeImpact,g as BeamImpactOverview,D as BeamPostPurchase,z as BeamRedeemTransaction,k as BeamSelectNonprofit};
1
+ import{BeamCommunityImpact as R}from"./community-impact.esm.js";import{BeamCumulativeImpact as T}from"./cumulative-impact.esm.js";import{BeamImpactOverview as g}from"./impact-overview.esm.js";import{BeamSelectNonprofit as k}from"./select-nonprofit.esm.js";import{BeamRedeemTransaction as z}from"./redeem-transaction.esm.js";import{BeamPostPurchase as D}from"./post-purchase.esm.js";import"react";import"../chunks/lit-yVXn5Cbs.esm.js";import"../components/community-impact.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../components/cumulative-impact.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/impact-overview.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/select-nonprofit.esm.js";import"../utils/network-listeners.esm.js";import"../utils/local-storage.esm.js";import"../utils/cookies.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";import"../components/redeem-transaction.esm.js";import"../components/post-purchase.esm.js";export{R as BeamCommunityImpact,T as BeamCumulativeImpact,g as BeamImpactOverview,D as BeamPostPurchase,z as BeamRedeemTransaction,k as BeamSelectNonprofit};
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1,2 +1,2 @@
1
- import{BeamCommunityImpact as R}from"./community-impact.js";import{BeamCumulativeImpact as T}from"./cumulative-impact.js";import{BeamImpactOverview as g}from"./impact-overview.js";import{BeamSelectNonprofit as k}from"./select-nonprofit.js";import{BeamRedeemTransaction as z}from"./redeem-transaction.js";import{BeamPostPurchase as D}from"./post-purchase.js";import"react";import"../chunks/lit-yVXn5Cbs.esm.js";import"../components/community-impact.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../components/cumulative-impact.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/impact-overview.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/select-nonprofit.js";import"../utils/network-listeners.js";import"../utils/local-storage.js";import"../utils/cookies.js";import"../chunks/cart-contents-h60geKWa.esm.js";import"../components/redeem-transaction.js";import"../components/post-purchase.js";export{R as BeamCommunityImpact,T as BeamCumulativeImpact,g as BeamImpactOverview,D as BeamPostPurchase,z as BeamRedeemTransaction,k as BeamSelectNonprofit};
1
+ import{BeamCommunityImpact as R}from"./community-impact.js";import{BeamCumulativeImpact as T}from"./cumulative-impact.js";import{BeamImpactOverview as g}from"./impact-overview.js";import{BeamSelectNonprofit as k}from"./select-nonprofit.js";import{BeamRedeemTransaction as z}from"./redeem-transaction.js";import{BeamPostPurchase as D}from"./post-purchase.js";import"react";import"../chunks/lit-yVXn5Cbs.esm.js";import"../components/community-impact.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../components/cumulative-impact.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../components/impact-overview.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/select-nonprofit.js";import"../utils/network-listeners.js";import"../utils/local-storage.js";import"../utils/cookies.js";import"../chunks/cart-contents-h60geKWa.esm.js";import"../components/redeem-transaction.js";import"../components/post-purchase.js";export{R as BeamCommunityImpact,T as BeamCumulativeImpact,g as BeamImpactOverview,D as BeamPostPurchase,z as BeamRedeemTransaction,k as BeamSelectNonprofit};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import o from"react";import{l as r}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamPostPurchase as t}from"../components/post-purchase.esm.js";import"../utils/cookies.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../utils/local-storage.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../components/redeem-transaction.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/impact-overview.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamPostPurchase,m as default};
1
+ import o from"react";import{l as r}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamPostPurchase as t}from"../components/post-purchase.esm.js";import"../utils/cookies.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../utils/local-storage.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../components/redeem-transaction.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/impact-overview.esm.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamPostPurchase,m as default};
2
2
  //# sourceMappingURL=post-purchase.esm.js.map
@@ -1,2 +1,2 @@
1
- import o from"react";import{l as r}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamPostPurchase as t}from"../components/post-purchase.js";import"../utils/cookies.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../utils/local-storage.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../components/redeem-transaction.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/impact-overview.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamPostPurchase,m as default};
1
+ import o from"react";import{l as r}from"../chunks/lit-yVXn5Cbs.esm.js";import{BeamPostPurchase as t}from"../components/post-purchase.js";import"../utils/cookies.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../utils/local-storage.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../components/redeem-transaction.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";import"../chunks/events-5IECSF-x.esm.js";import"../components/impact-overview.js";import"../chunks/vendor-eeJfrOkP.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamPostPurchase,m as default};
2
2
  //# sourceMappingURL=post-purchase.js.map
@@ -1,2 +1,2 @@
1
- import m from"react";import{l as o}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as r}from"../chunks/events-5IECSF-x.esm.js";import{BeamRedeemTransaction as e}from"../components/redeem-transaction.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../utils/local-storage.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=o({tagName:e.tagName,elementClass:e,react:m,events:{onNonprofitSelect:r.eventName}});export{t as BeamRedeemTransaction,t as default};
1
+ import m from"react";import{l as o}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as r}from"../chunks/events-5IECSF-x.esm.js";import{BeamRedeemTransaction as e}from"../components/redeem-transaction.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.esm.js";import"../utils/local-storage.esm.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=o({tagName:e.tagName,elementClass:e,react:m,events:{onNonprofitSelect:r.eventName}});export{t as BeamRedeemTransaction,t as default};
2
2
  //# sourceMappingURL=redeem-transaction.esm.js.map
@@ -1,2 +1,2 @@
1
- import m from"react";import{l as o}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as r}from"../chunks/events-5IECSF-x.esm.js";import{BeamRedeemTransaction as e}from"../components/redeem-transaction.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../utils/local-storage.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=o({tagName:e.tagName,elementClass:e,react:m,events:{onNonprofitSelect:r.eventName}});export{t as BeamRedeemTransaction,t as default};
1
+ import m from"react";import{l as o}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as r}from"../chunks/events-5IECSF-x.esm.js";import{BeamRedeemTransaction as e}from"../components/redeem-transaction.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../components/beam-partner-logos.js";import"../utils/local-storage.js";import"../chunks/css-card-grid-3b56QBzq.esm.js";const t=o({tagName:e.tagName,elementClass:e,react:m,events:{onNonprofitSelect:r.eventName}});export{t as BeamRedeemTransaction,t as default};
2
2
  //# sourceMappingURL=redeem-transaction.js.map
@@ -1,2 +1,2 @@
1
- import o from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as m}from"../chunks/events-5IECSF-x.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-tF7SMdXL.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../utils/network-listeners.esm.js";import"../utils/local-storage.esm.js";import"../utils/cookies.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const t=e({tagName:"beam-select-nonprofit",elementClass:r,react:o,events:{onNonprofitSelect:m.eventName}});export{t as BeamSelectNonprofit,t as default};
1
+ import o from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as m}from"../chunks/events-5IECSF-x.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.esm.js";import"../chunks/localize-BGPniqcI.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";import"../chunks/routes-BI_HfQw6.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../utils/network-listeners.esm.js";import"../utils/local-storage.esm.js";import"../utils/cookies.esm.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const t=e({tagName:"beam-select-nonprofit",elementClass:r,react:o,events:{onNonprofitSelect:m.eventName}});export{t as BeamSelectNonprofit,t as default};
2
2
  //# sourceMappingURL=select-nonprofit.esm.js.map
@@ -1,2 +1,2 @@
1
- import o from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as m}from"../chunks/events-5IECSF-x.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-oHbXmMIK.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../utils/network-listeners.js";import"../utils/local-storage.js";import"../utils/cookies.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const t=e({tagName:"beam-select-nonprofit",elementClass:r,react:o,events:{onNonprofitSelect:m.eventName}});export{t as BeamSelectNonprofit,t as default};
1
+ import o from"react";import{l as e}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as m}from"../chunks/events-5IECSF-x.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.js";import"../chunks/localize-dXHrlK8g.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";import"../chunks/routes-WbfYG9qp.esm.js";import"../chunks/progress-bar-7gWYaGlq.esm.js";import"../utils/network-listeners.js";import"../utils/local-storage.js";import"../utils/cookies.js";import"../chunks/lodash-P8OIs-at.esm.js";import"../chunks/responsive-LYEag6TI.esm.js";import"../chunks/cart-contents-h60geKWa.esm.js";const t=e({tagName:"beam-select-nonprofit",elementClass:r,react:o,events:{onNonprofitSelect:m.eventName}});export{t as BeamSelectNonprofit,t as default};
2
2
  //# sourceMappingURL=select-nonprofit.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@beamimpact/web-sdk",
3
3
  "private": false,
4
- "version": "1.36.1",
4
+ "version": "1.36.4",
5
5
  "main": "dist/index.esm.js",
6
6
  "module": "dist/index.esm.js",
7
7
  "engines": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"_share-dialog-dependencies-Sh_9ajqn.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"_share-dialog-dependencies-xo568n-h.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{i}from"./index-w9_XpjIg.esm.js";import{i as o}from"./index-x02SNG40.esm.js";import{i as r}from"./index-Z1UUeVXR.esm.js";import{i as e}from"./index-aSHxjlvk.esm.js";import{i as m}from"./index-H8eCrtpq.esm.js";var s=Object.freeze({__proto__:null,Cart:e,Logs:m,Session:r,Shopify:o,Utils:i});export{s as i};
2
- //# sourceMappingURL=index--hSdkzxR.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index--hSdkzxR.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{h as e,C as r,A as t,s as a,N as o}from"./order-page-nw4ww0A4.esm.js";var s=Object.freeze({__proto__:null,addBeamAttributesToCart:e,getCurrentCart:r,registerCartIntegration:t,showBeamOrderPageWidgets:a,trackCart:o});export{s as i};
2
- //# sourceMappingURL=index-1yIQ8_af.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-1yIQ8_af.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{i}from"./index-FAF7tYU6.esm.js";import{i as o}from"./index-1yIQ8_af.esm.js";import{i as r}from"./index-9YcaEQju.esm.js";import{i as e}from"./index-XXbpivFV.esm.js";import{i as m}from"./index--zKNaLmP.esm.js";var s=Object.freeze({__proto__:null,Cart:e,Logs:m,Session:r,Shopify:o,Utils:i});export{s as i};
2
- //# sourceMappingURL=index-FOIyVs4d.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-FOIyVs4d.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{x as e}from"./update-cart-ylLlsQBX.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
- //# sourceMappingURL=index-XXbpivFV.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-XXbpivFV.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{x as e}from"./update-cart-UgMNqKER.esm.js";var r=Object.freeze({__proto__:null,updateCart:e});export{r as i};
2
- //# sourceMappingURL=index-aSHxjlvk.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-aSHxjlvk.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{h as e,C as r,A as t,s as a,N as o}from"./order-page-iki-LwqZ.esm.js";var s=Object.freeze({__proto__:null,addBeamAttributesToCart:e,getCurrentCart:r,registerCartIntegration:t,showBeamOrderPageWidgets:a,trackCart:o});export{s as i};
2
- //# sourceMappingURL=index-x02SNG40.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-x02SNG40.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import{d as y,i as E}from"./lodash-P8OIs-at.esm.js";import{D as g,d as B}from"./routes-oHbXmMIK.esm.js";import{B as A}from"./beam-errors-AMvTvR1C.esm.js";import{f as v,a as K}from"./events-5IECSF-x.esm.js";import"../utils/network-listeners.js";import{createScopedLocalStorage as S}from"../utils/local-storage.js";import{getCookieValue as U,setCookieValue as _}from"../utils/cookies.js";import{getRemoteSession as x}from"../utils/remote-session.js";import{memoizeLast as L}from"../utils/memoize-last.js";import{B as I}from"./cart-contents-h60geKWa.esm.js";const D=50,R=y(L(async function(e,a){console.log(e,a);try{const t=S({apiKey:e.apiKey}),f=e.baseUrl??g,o=t.getItemJson("cart"),r=await U(I)??null,b=x(e)??void 0,{cartId:i,subtotal:m,itemCount:n,currencyCode:s,content:{items:d=[]}={},schema:u={source:"generic"}}=a,C={cartId:i,subtotal:m,itemCount:n,currencyCode:s,content:{items:d},schema:u,beamCartId:r};if(E(C,{...o,cartId:o?.cartId})||a.itemCount===0&&(!r||o?.itemCount===0))return;const w=await B({baseUrl:f,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:r,storeId:e.storeId,remoteSessionId:b,cartId:i,subtotal:m,itemCount:n,currencyCode:s}}),{beamCartId:c,expiresAt:p,beamCartCreated:h}=w;c&&p&&await _({name:I,domain:e.domain,value:c,path:"/",expires:new Date(p).getTime()}),t.setItemJson("cart",{...C,beamCartId:c});const l={schema:u,content:{items:d},subtotal:m,itemCount:n,currencyCode:s,cartId:i};window.dispatchEvent(new v(l)),h&&window.dispatchEvent(new K(l))}catch(t){throw new A("Could not update cart in Beam",{cause:t})}}),D,{leading:!0});export{R as x};
2
- //# sourceMappingURL=update-cart-UgMNqKER.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-cart-UgMNqKER.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n console.log(config, cartValues);\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = (await getCookieValue(BEAM_CART_COOKIE_NAME)) ?? null;\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items },\n schema,\n beamCartId,\n };\n\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getCookieValue","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"2iBA4BA,MAAMA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,QAAQ,IAAID,EAAQC,CAAU,EAC9B,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA6B,MAAMC,EAAeC,CAAqB,GAAM,KAE7EC,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,CAAA,CAAG,EAAI,CAAA,EAC1B,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIhB,EAEEiB,EAAmB,CACvB,OAAAN,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,CAAM,EACjB,OAAAC,EACA,WAAAV,CACF,EAKA,GACEY,EAAQD,EAAkB,CACxB,GAAGZ,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMc,EAAW,MAAMC,EAAS,CAC9B,QAAAjB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYO,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMhB,EACN,OAAQT,EAAO,OACf,MAAOsB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAAQ,CACvC,CAAC,EAGHrB,EAAa,YAAY,OAAQ,CAC/B,GAAGgB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOD,CACT,EACA,SAAAH,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,CACF,EAGA,OAAO,cAAc,IAAIe,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDjC,EACA,CAAE,QAAS,EAAK,CAClB"}
@@ -1,2 +0,0 @@
1
- import{d as y,i as E}from"./lodash-P8OIs-at.esm.js";import{D as g,d as B}from"./routes-tF7SMdXL.esm.js";import{B as A}from"./beam-errors-AMvTvR1C.esm.js";import{f as v,a as K}from"./events-5IECSF-x.esm.js";import"../utils/network-listeners.esm.js";import{createScopedLocalStorage as S}from"../utils/local-storage.esm.js";import{getCookieValue as U,setCookieValue as _}from"../utils/cookies.esm.js";import{getRemoteSession as x}from"../utils/remote-session.esm.js";import{memoizeLast as L}from"../utils/memoize-last.esm.js";import{B as I}from"./cart-contents-h60geKWa.esm.js";const D=50,R=y(L(async function(e,a){console.log(e,a);try{const t=S({apiKey:e.apiKey}),f=e.baseUrl??g,o=t.getItemJson("cart"),r=await U(I)??null,b=x(e)??void 0,{cartId:i,subtotal:m,itemCount:n,currencyCode:s,content:{items:d=[]}={},schema:u={source:"generic"}}=a,C={cartId:i,subtotal:m,itemCount:n,currencyCode:s,content:{items:d},schema:u,beamCartId:r};if(E(C,{...o,cartId:o?.cartId})||a.itemCount===0&&(!r||o?.itemCount===0))return;const w=await B({baseUrl:f,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:r,storeId:e.storeId,remoteSessionId:b,cartId:i,subtotal:m,itemCount:n,currencyCode:s}}),{beamCartId:c,expiresAt:p,beamCartCreated:h}=w;c&&p&&await _({name:I,domain:e.domain,value:c,path:"/",expires:new Date(p).getTime()}),t.setItemJson("cart",{...C,beamCartId:c});const l={schema:u,content:{items:d},subtotal:m,itemCount:n,currencyCode:s,cartId:i};window.dispatchEvent(new v(l)),h&&window.dispatchEvent(new K(l))}catch(t){throw new A("Could not update cart in Beam",{cause:t})}}),D,{leading:!0});export{R as x};
2
- //# sourceMappingURL=update-cart-ylLlsQBX.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-cart-ylLlsQBX.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n console.log(config, cartValues);\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = (await getCookieValue(BEAM_CART_COOKIE_NAME)) ?? null;\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items },\n schema,\n beamCartId,\n };\n\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getCookieValue","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"+jBA4BA,MAAMA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,QAAQ,IAAID,EAAQC,CAAU,EAC9B,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA6B,MAAMC,EAAeC,CAAqB,GAAM,KAE7EC,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,CAAA,CAAG,EAAI,CAAA,EAC1B,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIhB,EAEEiB,EAAmB,CACvB,OAAAN,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,CAAM,EACjB,OAAAC,EACA,WAAAV,CACF,EAKA,GACEY,EAAQD,EAAkB,CACxB,GAAGZ,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMc,EAAW,MAAMC,EAAS,CAC9B,QAAAjB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYO,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMhB,EACN,OAAQT,EAAO,OACf,MAAOsB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAAQ,CACvC,CAAC,EAGHrB,EAAa,YAAY,OAAQ,CAC/B,GAAGgB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOD,CACT,EACA,SAAAH,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,CACF,EAGA,OAAO,cAAc,IAAIe,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDjC,EACA,CAAE,QAAS,EAAK,CAClB"}