@beamimpact/web-sdk 1.57.4 → 1.57.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{_share-dialog-dependencies-BvaXft1r.esm.js → _share-dialog-dependencies-DsJ2sKCC.esm.js} +2 -2
- package/dist/chunks/{_share-dialog-dependencies-BvaXft1r.esm.js.map → _share-dialog-dependencies-DsJ2sKCC.esm.js.map} +1 -1
- package/dist/chunks/{cart-DCezceUX.esm.d.ts → cart-DKQHSz5X.esm.d.ts} +1 -1
- package/dist/chunks/{index-Di1IwSgk.esm.js → index-B-QZylCa.esm.js} +2 -2
- package/dist/chunks/{index-Di1IwSgk.esm.js.map → index-B-QZylCa.esm.js.map} +1 -1
- package/dist/chunks/{index-Bc_hD09J.esm.js → index-B8g4VHgI.esm.js} +2 -2
- package/dist/chunks/{index-Bc_hD09J.esm.js.map → index-B8g4VHgI.esm.js.map} +1 -1
- package/dist/chunks/{index-726Vfz5u.esm.js → index-BX0p4BVY.esm.js} +2 -2
- package/dist/chunks/{index-726Vfz5u.esm.js.map → index-BX0p4BVY.esm.js.map} +1 -1
- package/dist/chunks/{index-Bt4Ob1Fi.esm.js → index-BaAhcyM6.esm.js} +2 -2
- package/dist/chunks/{index-Bt4Ob1Fi.esm.js.map → index-BaAhcyM6.esm.js.map} +1 -1
- package/dist/chunks/{index-BOHlIBDq.esm.js → index-BebFL9KU.esm.js} +2 -2
- package/dist/chunks/{index-BOHlIBDq.esm.js.map → index-BebFL9KU.esm.js.map} +1 -1
- package/dist/chunks/index-Beh5bQDw.esm.js +31 -0
- package/dist/chunks/index-Beh5bQDw.esm.js.map +1 -0
- package/dist/chunks/{index-C6gns2ul.esm.d.ts → index-DGOC8m2r.esm.d.ts} +1 -1
- package/dist/chunks/index-Duq6tIq8.esm.js +2 -0
- package/dist/chunks/index-Duq6tIq8.esm.js.map +1 -0
- package/dist/chunks/{promo-pill-label-D-VXaB27.esm.js → promo-pill-label-BWPhroK6.esm.js} +2 -2
- package/dist/chunks/{promo-pill-label-D-VXaB27.esm.js.map → promo-pill-label-BWPhroK6.esm.js.map} +1 -1
- package/dist/chunks/{routes-D6Gtw6kZ.esm.d.ts → routes-BW8Dd3C1.esm.d.ts} +8 -4
- package/dist/chunks/{share-button-DFuEWa2h.esm.js → share-button-C-QLknal.esm.js} +2 -2
- package/dist/chunks/{share-button-DFuEWa2h.esm.js.map → share-button-C-QLknal.esm.js.map} +1 -1
- package/dist/chunks/{share-button-o8IBYAxH.esm.js → share-button-CIP03E7T.esm.js} +2 -2
- package/dist/chunks/{share-button-o8IBYAxH.esm.js.map → share-button-CIP03E7T.esm.js.map} +1 -1
- package/dist/components/community-impact.esm.js +1 -1
- package/dist/components/community-impact.js +1 -1
- package/dist/components/cumulative-impact.esm.js +1 -1
- package/dist/components/cumulative-impact.js +1 -1
- package/dist/components/impact-overview.esm.js +1 -1
- package/dist/components/impact-overview.js +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.esm.js +1 -1
- package/dist/components/post-purchase.js +1 -1
- package/dist/components/product-details-page.d.ts +1 -1
- package/dist/components/product-details-page.esm.js +1 -1
- package/dist/components/product-details-page.js +1 -1
- package/dist/components/redeem-transaction.esm.js +1 -1
- package/dist/components/redeem-transaction.js +1 -1
- package/dist/components/select-nonprofit.esm.js +1 -1
- package/dist/components/select-nonprofit.js +1 -1
- package/dist/components/select-subscription-nonprofit.esm.js +1 -1
- package/dist/components/select-subscription-nonprofit.js +1 -1
- package/dist/components/shopify.d.ts +2 -2
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/components/social-share.esm.js +1 -1
- package/dist/components/social-share.js +1 -1
- package/dist/components/subscriber-select-nonprofit.esm.js +1 -1
- package/dist/components/subscriber-select-nonprofit.js +1 -1
- package/dist/components/subscription-impact.esm.js +1 -1
- package/dist/components/subscription-impact.js +1 -1
- package/dist/components/subscription-management.d.ts +1 -1
- package/dist/components/subscription-management.esm.js +1 -1
- package/dist/components/subscription-management.js +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/beam.esm.js +1 -1
- package/dist/integrations/beam.js +1 -1
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/logs.esm.js +1 -1
- package/dist/integrations/logs.js +1 -1
- package/dist/integrations/shopify-order.d.ts +1 -1
- package/dist/integrations/shopify-order.esm.js +1 -1
- package/dist/integrations/shopify-order.js +1 -1
- package/dist/integrations/shopify.d.ts +1 -1
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.esm.js +2 -2
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +2 -2
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/react/community-impact.esm.js +1 -1
- package/dist/react/community-impact.js +1 -1
- package/dist/react/cumulative-impact.esm.js +1 -1
- package/dist/react/cumulative-impact.js +1 -1
- package/dist/react/impact-overview.esm.js +1 -1
- package/dist/react/impact-overview.js +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.esm.js +1 -1
- package/dist/react/post-purchase.js +1 -1
- package/dist/react/product-details-page.d.ts +1 -1
- package/dist/react/product-details-page.esm.js +1 -1
- package/dist/react/product-details-page.js +1 -1
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.js +1 -1
- package/dist/react/select-nonprofit.esm.js +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/dist/react/select-subscription-nonprofit.esm.js +1 -1
- package/dist/react/select-subscription-nonprofit.js +1 -1
- package/dist/react/social-share.esm.js +1 -1
- package/dist/react/social-share.js +1 -1
- package/dist/react/subscriber-select-nonprofit.esm.js +1 -1
- package/dist/react/subscriber-select-nonprofit.js +1 -1
- package/dist/react/subscription-impact.esm.js +1 -1
- package/dist/react/subscription-impact.js +1 -1
- package/dist/react/subscription-management.d.ts +1 -1
- package/dist/react/subscription-management.esm.js +1 -1
- package/dist/react/subscription-management.js +1 -1
- package/package.json +4 -4
- package/dist/chunks/index-B7OkmoYI.esm.js +0 -2
- package/dist/chunks/index-B7OkmoYI.esm.js.map +0 -1
- package/dist/chunks/index-CVHrQ1WC.esm.js +0 -31
- package/dist/chunks/index-CVHrQ1WC.esm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statsig.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_COOKIE_NAMES } from \"../../api-sdk/constants\";\nimport { BEAM_CART_COOKIE_NAME } from \"../../shared/cart-contents\";\nimport {\n BeamCartCreatedEvent,\n BeamNonprofitSelectEvent,\n BeamOrderCreatedEvent,\n BeamStatsigInitializedEvent,\n} 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\ntype beforeLogEventFn = (eventName: string, eventValue: any, metadata: Record<string, any>) => Record<string, any>;\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/jsClientSDK\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n beforeLogEvent?: beforeLogEventFn;\n};\n\ndeclare global {\n interface Window {\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_COOKIE_NAMES.STATSIG_STABLE_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 SESSION_RETURN: \"session_return\",\n};\n\nconst BEAM_SSID_PARAM = \"beam_ssid\";\n\nconst BEAM_RETURN_ORIGIN_PARAM = \"beam_return_origin\";\n\ntype SessionReturnOrigin = \"cart_abandon\" | \"checkout_abandon\";\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 /** The source through which the user returned to their session */\n sessionReturnOrigin?: SessionReturnOrigin | null;\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 sessionReturnOrigin: null,\n };\n\n stableId?: string;\n\n beforeLogEvent?: beforeLogEventFn;\n\n #beamConfig?: BeamConfigOptions;\n\n sessionReturnOrigin?: SessionReturnOrigin;\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 this.beforeLogEvent = options.beforeLogEvent;\n }\n\n async init(config: BeamConfigOptions) {\n const { sessionReturnOrigin } = this.#getUrlParams();\n\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 if (sessionReturnOrigin) {\n this.sessionReturnOrigin = sessionReturnOrigin;\n }\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-product-details-page,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-subscription-management,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-subscription-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-select-subscription-nonprofit,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-social-share,\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 ...(this.sessionReturnOrigin != null && { sessionReturnOrigin: this.sessionReturnOrigin }),\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 this.#emitBeamStatsigInitializedEvent();\n\n // Log result\n logger.debug(\"Statsig Experiment Assignments\", this.experiments);\n }\n\n #emitBeamStatsigInitializedEvent() {\n try {\n const event = new BeamStatsigInitializedEvent({\n showBeam: this.experiments.shouldShowBeam,\n stableId: this.stableId,\n });\n window.dispatchEvent(event);\n } catch (error) {\n logger.error(\"[BeamStatsigInitializedEvent] Failed to dispatch event:\", error);\n }\n }\n\n #getUrlParams() {\n const params = new URLSearchParams(window.location.search);\n\n const stableId = params.get(BEAM_SSID_PARAM);\n\n const originParam = params.get(BEAM_RETURN_ORIGIN_PARAM);\n const sessionReturnOrigin: SessionReturnOrigin | null =\n originParam === \"cart_abandon\" || originParam === \"checkout_abandon\" ? originParam : null;\n\n return {\n stableId,\n sessionReturnOrigin,\n };\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 {\n orderId,\n cartTotal,\n currencyCode,\n cartId,\n selectionId,\n beamCartId,\n storeId,\n remoteSessionId,\n transactionNonprofitId,\n orderProcessedAt,\n } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.ORDER_CREATED, cartTotal, {\n orderId,\n cartTotal,\n currencyCode,\n hasCart: !!beamCartId || !!this.#beamCartCookie,\n selectionId,\n storeId,\n cartId,\n beamCartId,\n remoteSessionId,\n transactionNonprofitId,\n orderProcessedAt,\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, source } = event.detail;\n if (selectedNonprofitId !== lastSelectedNonprofitId) {\n this.logEvent(BEAM_AB_TEST_EVENTS.BEAM_SELECTION, true, {\n nonprofitId: selectedNonprofitId,\n widget: source,\n selectionId,\n });\n lastSelectedNonprofitId = selectedNonprofitId;\n }\n });\n }\n\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n async #initializeStatsig() {\n const { stableId, sessionReturnOrigin } = this.#getUrlParams();\n if (stableId && sessionReturnOrigin) {\n this.logEvent(BEAM_AB_TEST_EVENTS.SESSION_RETURN, sessionReturnOrigin, {\n session_return_origin: sessionReturnOrigin,\n stable_id: stableId,\n });\n }\n\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\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: stableId ?? 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 const domain = window.location.hostname;\n const path = window.location.pathname;\n const page = window.location.href;\n if (this.experiments.isLoggingEnabled) {\n const metadataWithOverrides = this.beforeLogEvent ? this.beforeLogEvent(name, value, metadata) : metadata;\n this.statsig.logEvent(name, value, { ...metadataWithOverrides, withBeam, domain, path, page });\n }\n logger.debug(name, value, { ...metadata, withBeam, domain, path, page });\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 domain: window.location.hostname,\n path: window.location.pathname,\n page: window.location.href,\n },\n user: {\n userID: this.stableId,\n },\n }),\n });\n } catch (err) {\n // TODO SDK-2390: this will log failures to Beam's error tracking API in the future\n throw new BeamError(\"Could not call Statsig API\", { name: \"StatsigInitError\", cause: err });\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 remoteSessionId: this.stableId!,\n storeId: this.#beamConfig?.storeId,\n experiments: {\n showBeam: this.experiments.shouldShowBeam,\n ...(this.sessionReturnOrigin != null && {\n events: [\n {\n eventName: \"session_return\",\n eventValue: this.sessionReturnOrigin,\n timestamp: new Date().toISOString(),\n },\n ],\n }),\n },\n },\n });\n }\n}\n"],"names":["A","n","I","t","m","u","v","i","g","_beamConfig","_beamCartCookie","_StatsigPlugin_instances","emitBeamStatsigInitializedEvent_fn","getUrlParams_fn","attachEventListeners_fn","initializeStatsig_fn","_eventQueue","flushEventQueue_fn","setBeamVisibilityValue_fn","testStatsigConnection_fn","registerExperimentWithBeam_fn","STATSIG_VERSION","STATSIG_SCRIPT_URL","STATSIG_STABLE_ID_COOKIE","BEAM_COOKIE_NAMES","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","BEAM_SSID_PARAM","BEAM_RETURN_ORIGIN_PARAM","StatsigPlugin","options","__privateAdd","name","value","metadata","__privateGet","withBeam","domain","path","page","metadataWithOverrides","logger","config","sessionReturnOrigin","__privateMethod","__privateSet","beamVisibilityStylesheet","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","event","BeamStatsigInitializedEvent","error","params","stableId","originParam","BeamCartCreatedEvent","_event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","selectionId","beamCartId","storeId","remoteSessionId","transactionNonprofitId","orderProcessedAt","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","source","statsigScript","statsigReadyPromise","res","rej","statsigOptions","eventParams","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_COOKIE_NAMES } from \"../../api-sdk/constants\";\nimport { BEAM_CART_COOKIE_NAME } from \"../../shared/cart-contents\";\nimport {\n BeamCartCreatedEvent,\n BeamNonprofitSelectEvent,\n BeamOrderCreatedEvent,\n BeamStatsigInitializedEvent,\n} 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\ntype beforeLogEventFn = (eventName: string, eventValue: any, metadata: Record<string, any>) => Record<string, any>;\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/jsClientSDK\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n beforeLogEvent?: beforeLogEventFn;\n};\n\ndeclare global {\n interface Window {\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_COOKIE_NAMES.STATSIG_STABLE_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 SESSION_RETURN: \"session_return\",\n};\n\nconst BEAM_SSID_PARAM = \"beam_ssid\";\n\nconst BEAM_RETURN_ORIGIN_PARAM = \"beam_return_origin\";\n\ntype SessionReturnOrigin = \"cart_abandon\" | \"checkout_abandon\";\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 /** The source through which the user returned to their session */\n sessionReturnOrigin?: SessionReturnOrigin | null;\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 sessionReturnOrigin: null,\n };\n\n stableId?: string;\n\n beforeLogEvent?: beforeLogEventFn;\n\n #beamConfig?: BeamConfigOptions;\n\n sessionReturnOrigin?: SessionReturnOrigin;\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 this.beforeLogEvent = options.beforeLogEvent;\n }\n\n async init(config: BeamConfigOptions) {\n const { sessionReturnOrigin } = this.#getUrlParams();\n\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 if (sessionReturnOrigin) {\n this.sessionReturnOrigin = sessionReturnOrigin;\n }\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-product-details-page,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-subscription-management,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-subscription-impact,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-select-subscription-nonprofit,\n [${BEAM_VISIBILITY_DATA_ATTRIBUTE}=\"hide\"] beam-social-share,\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 ...(this.sessionReturnOrigin != null && { sessionReturnOrigin: this.sessionReturnOrigin }),\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 this.#emitBeamStatsigInitializedEvent();\n\n // Log result\n logger.debug(\"Statsig Experiment Assignments\", this.experiments);\n }\n\n #emitBeamStatsigInitializedEvent() {\n try {\n const event = new BeamStatsigInitializedEvent({\n showBeam: this.experiments.shouldShowBeam,\n stableId: this.stableId,\n });\n window.dispatchEvent(event);\n } catch (error) {\n logger.error(\"[BeamStatsigInitializedEvent] Failed to dispatch event:\", error);\n }\n }\n\n #getUrlParams() {\n const params = new URLSearchParams(window.location.search);\n\n const stableId = params.get(BEAM_SSID_PARAM);\n\n const originParam = params.get(BEAM_RETURN_ORIGIN_PARAM);\n const sessionReturnOrigin: SessionReturnOrigin | null =\n originParam === \"cart_abandon\" || originParam === \"checkout_abandon\" ? originParam : null;\n\n return {\n stableId,\n sessionReturnOrigin,\n };\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 {\n orderId,\n cartTotal,\n currencyCode,\n cartId,\n selectionId,\n beamCartId,\n storeId,\n remoteSessionId,\n transactionNonprofitId,\n orderProcessedAt,\n } = event.detail;\n this.logEvent(BEAM_AB_TEST_EVENTS.ORDER_CREATED, cartTotal, {\n orderId,\n cartTotal,\n currencyCode,\n hasCart: !!beamCartId || !!this.#beamCartCookie,\n selectionId,\n storeId,\n cartId,\n beamCartId,\n remoteSessionId,\n transactionNonprofitId,\n orderProcessedAt,\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, source } = event.detail;\n if (selectedNonprofitId !== lastSelectedNonprofitId) {\n this.logEvent(BEAM_AB_TEST_EVENTS.BEAM_SELECTION, true, {\n nonprofitId: selectedNonprofitId,\n widget: source,\n selectionId,\n });\n lastSelectedNonprofitId = selectedNonprofitId;\n }\n });\n }\n\n // https://docs.statsig.com/client/jsClientSDK#statsig-options\n async #initializeStatsig() {\n const { stableId, sessionReturnOrigin } = this.#getUrlParams();\n if (stableId && sessionReturnOrigin) {\n this.logEvent(BEAM_AB_TEST_EVENTS.SESSION_RETURN, sessionReturnOrigin, {\n session_return_origin: sessionReturnOrigin,\n stable_id: stableId,\n });\n }\n\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\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: stableId ?? 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 const domain = window.location.hostname;\n const path = window.location.pathname;\n const page = window.location.href;\n if (this.experiments.isLoggingEnabled) {\n const metadataWithOverrides = this.beforeLogEvent ? this.beforeLogEvent(name, value, metadata) : metadata;\n this.statsig.logEvent(name, value, { ...metadataWithOverrides, withBeam, domain, path, page });\n }\n logger.debug(name, value, { ...metadata, withBeam, domain, path, page });\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 domain: window.location.hostname,\n path: window.location.pathname,\n page: window.location.href,\n },\n user: {\n userID: this.stableId,\n },\n }),\n });\n } catch (err) {\n // TODO SDK-2390: this will log failures to Beam's error tracking API in the future\n throw new BeamError(\"Could not call Statsig API\", { name: \"StatsigInitError\", cause: err });\n }\n }\n\n async #registerExperimentWithBeam() {\n try {\n return await postExperimentSession({\n baseUrl: this.#beamConfig?.baseUrl,\n keepalive: true,\n headers: {\n authorization: `Api-Key ${this.#beamConfig?.apiKey}`,\n },\n requestBody: {\n remoteSessionId: this.stableId!,\n storeId: this.#beamConfig?.storeId,\n experiments: {\n showBeam: this.experiments.shouldShowBeam,\n ...(this.sessionReturnOrigin != null && {\n events: [\n {\n eventName: \"session_return\",\n eventValue: this.sessionReturnOrigin,\n timestamp: new Date().toISOString(),\n },\n ],\n }),\n },\n },\n });\n } catch (err) {\n // Best-effort attribution: this must not fail SDK setup, and fetchJson already logged the error.\n logger.debug(\"[StatsigPlugin] Failed to register experiment session with Beam\", err);\n return undefined;\n }\n }\n}\n"],"names":["A","n","v","t","m","u","w","i","g","_beamConfig","_beamCartCookie","_StatsigPlugin_instances","emitBeamStatsigInitializedEvent_fn","getUrlParams_fn","attachEventListeners_fn","initializeStatsig_fn","_eventQueue","flushEventQueue_fn","setBeamVisibilityValue_fn","testStatsigConnection_fn","registerExperimentWithBeam_fn","STATSIG_VERSION","STATSIG_SCRIPT_URL","STATSIG_STABLE_ID_COOKIE","BEAM_COOKIE_NAMES","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","BEAM_SSID_PARAM","BEAM_RETURN_ORIGIN_PARAM","StatsigPlugin","options","__privateAdd","name","value","metadata","__privateGet","withBeam","domain","path","page","metadataWithOverrides","logger","config","sessionReturnOrigin","__privateMethod","__privateSet","beamVisibilityStylesheet","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","event","BeamStatsigInitializedEvent","error","params","stableId","originParam","BeamCartCreatedEvent","_event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","selectionId","beamCartId","storeId","remoteSessionId","transactionNonprofitId","orderProcessedAt","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","source","statsigScript","statsigReadyPromise","res","rej","statsigOptions","eventParams","url","err","postExperimentSession"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.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{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCommunityImpact as m}from"../components/community-impact.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.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{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-
|
|
1
|
+
import a from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-Beh5bQDw.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{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-
|
|
1
|
+
import a from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamCumulativeImpact as m}from"../components/cumulative-impact.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-Beh5bQDw.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{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-
|
|
1
|
+
import r from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/responsive-aN8P5PqD.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{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-
|
|
1
|
+
import r from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{BeamImpactOverview as m}from"../components/impact-overview.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../components/beam-partner-logos.js";import"../chunks/responsive-aN8P5PqD.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
|
package/dist/react/index.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ import '../components/select-nonprofit.js';
|
|
|
24
24
|
import '../components/redeem-transaction.js';
|
|
25
25
|
import '../components/post-purchase.js';
|
|
26
26
|
import '../components/subscription-management.js';
|
|
27
|
-
import '../chunks/routes-
|
|
27
|
+
import '../chunks/routes-BW8Dd3C1.esm.js';
|
|
28
28
|
import '../components/select-subscription-nonprofit.js';
|
|
29
29
|
import '../components/beam-partner-logos.js';
|
|
30
30
|
import '../components/subscription-impact.js';
|
package/dist/react/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{BeamCommunityImpact as D}from"./community-impact.esm.js";import{BeamCumulativeImpact as O}from"./cumulative-impact.esm.js";import{BeamImpactOverview as T}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 E}from"./post-purchase.esm.js";import{BeamSubscriptionManagement as G}from"./subscription-management.esm.js";import{BeamSelectSubscriptionNonprofit as J}from"./select-subscription-nonprofit.esm.js";import{BeamSubscriptionImpact as L}from"./subscription-impact.esm.js";import{BeamProductDetailsPage as U}from"./product-details-page.esm.js";import{BeamSocialShare as W}from"./social-share.esm.js";import{BeamSubscriberSelectNonprofit as Y}from"./subscriber-select-nonprofit.esm.js";import"react";import"../chunks/lit-BEag9MFp.esm.js";import"../components/community-impact.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import{BeamCommunityImpact as D}from"./community-impact.esm.js";import{BeamCumulativeImpact as O}from"./cumulative-impact.esm.js";import{BeamImpactOverview as T}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 E}from"./post-purchase.esm.js";import{BeamSubscriptionManagement as G}from"./subscription-management.esm.js";import{BeamSelectSubscriptionNonprofit as J}from"./select-subscription-nonprofit.esm.js";import{BeamSubscriptionImpact as L}from"./subscription-impact.esm.js";import{BeamProductDetailsPage as U}from"./product-details-page.esm.js";import{BeamSocialShare as W}from"./social-share.esm.js";import{BeamSubscriberSelectNonprofit as Y}from"./subscriber-select-nonprofit.esm.js";import"react";import"../chunks/lit-BEag9MFp.esm.js";import"../components/community-impact.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.esm.js";import"../components/cumulative-impact.esm.js";import"../components/impact-overview.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../components/select-nonprofit.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/index-BebFL9KU.esm.js";import"../chunks/index-B8g4VHgI.esm.js";import"../components/subscription-management.esm.js";import"../components/select-subscription-nonprofit.esm.js";import"../components/subscription-impact.esm.js";import"../components/product-details-page.esm.js";import"../components/social-share.esm.js";import"../components/subscriber-select-nonprofit.esm.js";import"../chunks/handlebars-B_i-to-h.esm.js";export{D as BeamCommunityImpact,O as BeamCumulativeImpact,T as BeamImpactOverview,E as BeamPostPurchase,U as BeamProductDetailsPage,z as BeamRedeemTransaction,k as BeamSelectNonprofit,J as BeamSelectSubscriptionNonprofit,W as BeamSocialShare,Y as BeamSubscriberSelectNonprofit,L as BeamSubscriptionImpact,G as BeamSubscriptionManagement};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/react/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{BeamCommunityImpact as D}from"./community-impact.js";import{BeamCumulativeImpact as O}from"./cumulative-impact.js";import{BeamImpactOverview as T}from"./impact-overview.js";import{BeamSelectNonprofit as k}from"./select-nonprofit.js";import{BeamRedeemTransaction as z}from"./redeem-transaction.js";import{BeamPostPurchase as E}from"./post-purchase.js";import{BeamSubscriptionManagement as G}from"./subscription-management.js";import{BeamSelectSubscriptionNonprofit as J}from"./select-subscription-nonprofit.js";import{BeamSubscriptionImpact as L}from"./subscription-impact.js";import{BeamProductDetailsPage as U}from"./product-details-page.js";import{BeamSocialShare as W}from"./social-share.js";import{BeamSubscriberSelectNonprofit as Y}from"./subscriber-select-nonprofit.js";import"react";import"../chunks/lit-BEag9MFp.esm.js";import"../components/community-impact.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import{BeamCommunityImpact as D}from"./community-impact.js";import{BeamCumulativeImpact as O}from"./cumulative-impact.js";import{BeamImpactOverview as T}from"./impact-overview.js";import{BeamSelectNonprofit as k}from"./select-nonprofit.js";import{BeamRedeemTransaction as z}from"./redeem-transaction.js";import{BeamPostPurchase as E}from"./post-purchase.js";import{BeamSubscriptionManagement as G}from"./subscription-management.js";import{BeamSelectSubscriptionNonprofit as J}from"./select-subscription-nonprofit.js";import{BeamSubscriptionImpact as L}from"./subscription-impact.js";import{BeamProductDetailsPage as U}from"./product-details-page.js";import{BeamSocialShare as W}from"./social-share.js";import{BeamSubscriberSelectNonprofit as Y}from"./subscriber-select-nonprofit.js";import"react";import"../chunks/lit-BEag9MFp.esm.js";import"../components/community-impact.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.js";import"../components/cumulative-impact.js";import"../components/impact-overview.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../components/select-nonprofit.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/index-B-QZylCa.esm.js";import"../chunks/index-BX0p4BVY.esm.js";import"../components/subscription-management.js";import"../components/select-subscription-nonprofit.js";import"../components/subscription-impact.js";import"../components/product-details-page.js";import"../components/social-share.js";import"../components/subscriber-select-nonprofit.js";import"../chunks/handlebars-B_i-to-h.esm.js";export{D as BeamCommunityImpact,O as BeamCumulativeImpact,T as BeamImpactOverview,E as BeamPostPurchase,U as BeamProductDetailsPage,z as BeamRedeemTransaction,k as BeamSelectNonprofit,J as BeamSelectSubscriptionNonprofit,W as BeamSocialShare,Y as BeamSubscriberSelectNonprofit,L as BeamSubscriptionImpact,G as BeamSubscriptionManagement};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as t}from"../chunks/index-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as t}from"../chunks/index-B8g4VHgI.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/index-BebFL9KU.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../components/impact-overview.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/responsive-aN8P5PqD.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{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as t}from"../chunks/index-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as t}from"../chunks/index-BX0p4BVY.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/index-B-QZylCa.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../components/impact-overview.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/responsive-aN8P5PqD.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
|
|
@@ -2,7 +2,7 @@ import * as _lit_react from '@lit/react';
|
|
|
2
2
|
import { BeamProductDetailsPage as BeamProductDetailsPage$1 } from '../components/product-details-page.js';
|
|
3
3
|
import 'lit';
|
|
4
4
|
import 'lit-html';
|
|
5
|
-
import '../chunks/routes-
|
|
5
|
+
import '../chunks/routes-BW8Dd3C1.esm.js';
|
|
6
6
|
import '../chunks/utils-BPcZ5h8J.esm.js';
|
|
7
7
|
import 'lodash-es/debounce';
|
|
8
8
|
import 'lodash-es/isEqual';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamProductDetailsPage as t}from"../components/product-details-page.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamProductDetailsPage as t}from"../components/product-details-page.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";const m=a({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamProductDetailsPage,m as default};
|
|
2
2
|
//# sourceMappingURL=product-details-page.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamProductDetailsPage as t}from"../components/product-details-page.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as a}from"../chunks/lit-BEag9MFp.esm.js";import{BeamProductDetailsPage as t}from"../components/product-details-page.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";const m=a({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamProductDetailsPage,m as default};
|
|
2
2
|
//# sourceMappingURL=product-details-page.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as m}from"../chunks/lit-BEag9MFp.esm.js";import{B as r}from"../chunks/utils-C5hmbxa4.esm.js";import{B as t}from"../chunks/index-
|
|
1
|
+
import o from"react";import{f as m}from"../chunks/lit-BEag9MFp.esm.js";import{B as r}from"../chunks/utils-C5hmbxa4.esm.js";import{B as t}from"../chunks/index-BebFL9KU.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";const e=m({tagName:t.tagName,elementClass:t,react:o,events:{onNonprofitSelect:r.eventName}});export{e as BeamRedeemTransaction,e as default};
|
|
2
2
|
//# sourceMappingURL=redeem-transaction.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as m}from"../chunks/lit-BEag9MFp.esm.js";import{B as r}from"../chunks/utils-C5hmbxa4.esm.js";import{B as t}from"../chunks/index-
|
|
1
|
+
import o from"react";import{f as m}from"../chunks/lit-BEag9MFp.esm.js";import{B as r}from"../chunks/utils-C5hmbxa4.esm.js";import{B as t}from"../chunks/index-B-QZylCa.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";const e=m({tagName:t.tagName,elementClass:t,react:o,events:{onNonprofitSelect:r.eventName}});export{e as BeamRedeemTransaction,e as default};
|
|
2
2
|
//# sourceMappingURL=redeem-transaction.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.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{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as e}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectNonprofit as r}from"../components/select-nonprofit.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/promo-pill-label-BWPhroK6.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/vendor-DUOg5fL-.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
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectSubscriptionNonprofit as t}from"../components/select-subscription-nonprofit.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import e from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectSubscriptionNonprofit as t}from"../components/select-subscription-nonprofit.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../components/beam-partner-logos.esm.js";const o=r({tagName:t.tagName,elementClass:t,react:e,events:{onNonprofitSelect:m.eventName}});export{o as BeamSelectSubscriptionNonprofit,o as default};
|
|
2
2
|
//# sourceMappingURL=select-subscription-nonprofit.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectSubscriptionNonprofit as t}from"../components/select-subscription-nonprofit.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import e from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSelectSubscriptionNonprofit as t}from"../components/select-subscription-nonprofit.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../components/beam-partner-logos.js";const o=r({tagName:t.tagName,elementClass:t,react:e,events:{onNonprofitSelect:m.eventName}});export{o as BeamSelectSubscriptionNonprofit,o as default};
|
|
2
2
|
//# sourceMappingURL=select-subscription-nonprofit.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import a from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSocialShare as m}from"../components/social-share.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-
|
|
1
|
+
import a from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSocialShare as m}from"../components/social-share.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";const o=r({tagName:m.tagName,elementClass:m,react:a});export{o as BeamSocialShare,o as default};
|
|
2
2
|
//# sourceMappingURL=social-share.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import a from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSocialShare as m}from"../components/social-share.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-
|
|
1
|
+
import a from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSocialShare as m}from"../components/social-share.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../components/beam-partner-logos.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";const o=r({tagName:m.tagName,elementClass:m,react:a});export{o as BeamSocialShare,o as default};
|
|
2
2
|
//# sourceMappingURL=social-share.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSubscriberSelectNonprofit as e}from"../components/subscriber-select-nonprofit.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSubscriberSelectNonprofit as e}from"../components/subscriber-select-nonprofit.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/handlebars-B_i-to-h.esm.js";const t=r({tagName:e.tagName,elementClass:e,react:o,events:{onNonprofitSelect:m.eventName}});export{t as BeamSubscriberSelectNonprofit,t as default};
|
|
2
2
|
//# sourceMappingURL=subscriber-select-nonprofit.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSubscriberSelectNonprofit as e}from"../components/subscriber-select-nonprofit.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{B as m}from"../chunks/utils-C5hmbxa4.esm.js";import{BeamSubscriberSelectNonprofit as e}from"../components/subscriber-select-nonprofit.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/handlebars-B_i-to-h.esm.js";const t=r({tagName:e.tagName,elementClass:e,react:o,events:{onNonprofitSelect:m.eventName}});export{t as BeamSubscriberSelectNonprofit,t as default};
|
|
2
2
|
//# sourceMappingURL=subscriber-select-nonprofit.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionImpact as t}from"../components/subscription-impact.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionImpact as t}from"../components/subscription-impact.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamSubscriptionImpact,m as default};
|
|
2
2
|
//# sourceMappingURL=subscription-impact.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionImpact as t}from"../components/subscription-impact.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionImpact as t}from"../components/subscription-impact.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamSubscriptionImpact,m as default};
|
|
2
2
|
//# sourceMappingURL=subscription-impact.js.map
|
|
@@ -2,7 +2,7 @@ import * as _lit_react from '@lit/react';
|
|
|
2
2
|
import { BeamSubscriptionManagement as BeamSubscriptionManagement$1 } from '../components/subscription-management.js';
|
|
3
3
|
import 'lit-html';
|
|
4
4
|
import 'lit';
|
|
5
|
-
import '../chunks/routes-
|
|
5
|
+
import '../chunks/routes-BW8Dd3C1.esm.js';
|
|
6
6
|
import '../chunks/utils-BPcZ5h8J.esm.js';
|
|
7
7
|
import 'lodash-es/debounce';
|
|
8
8
|
import 'lodash-es/isEqual';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionManagement as t}from"../components/subscription-management.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionManagement as t}from"../components/subscription-management.esm.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../components/select-subscription-nonprofit.esm.js";import"../components/beam-partner-logos.esm.js";import"../components/subscription-impact.esm.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamSubscriptionManagement,m as default};
|
|
2
2
|
//# sourceMappingURL=subscription-management.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionManagement as t}from"../components/subscription-management.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-
|
|
1
|
+
import o from"react";import{f as r}from"../chunks/lit-BEag9MFp.esm.js";import{BeamSubscriptionManagement as t}from"../components/subscription-management.js";import"../chunks/utils-C5hmbxa4.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/share-button-CIP03E7T.esm.js";import"../chunks/index-Beh5bQDw.esm.js";import"../chunks/css-card-grid-CiqEjkwR.esm.js";import"../components/select-subscription-nonprofit.js";import"../components/beam-partner-logos.js";import"../components/subscription-impact.js";import"../chunks/share-button-C-QLknal.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/_share-dialog-dependencies-DsJ2sKCC.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";const m=r({tagName:t.tagName,elementClass:t,react:o,events:{}});export{m as BeamSubscriptionManagement,m as default};
|
|
2
2
|
//# sourceMappingURL=subscription-management.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.57.
|
|
4
|
+
"version": "1.57.5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -63,19 +63,19 @@
|
|
|
63
63
|
"lucide-static": "0.292.0"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@cypress/vite-dev-server": "7.3.
|
|
66
|
+
"@cypress/vite-dev-server": "7.3.4",
|
|
67
67
|
"@devcontainers/cli": "0.86.0",
|
|
68
68
|
"@eslint/eslintrc": "3.3.5",
|
|
69
69
|
"@eslint/js": "9.39.4",
|
|
70
70
|
"@fastify/compress": "8.3.1",
|
|
71
71
|
"@fastify/cors": "11.2.0",
|
|
72
|
-
"@fastify/static": "
|
|
72
|
+
"@fastify/static": "10.1.2",
|
|
73
73
|
"@rollup/plugin-commonjs": "29.0.3",
|
|
74
74
|
"@rollup/plugin-json": "6.1.0",
|
|
75
75
|
"@rollup/plugin-node-resolve": "16.0.3",
|
|
76
76
|
"@types/lodash-es": "4.17.12",
|
|
77
77
|
"@typescript-eslint/eslint-plugin": "8.59.0",
|
|
78
|
-
"@typescript-eslint/parser": "8.
|
|
78
|
+
"@typescript-eslint/parser": "8.65.0",
|
|
79
79
|
"@web-types/lit": "2.0.0-3",
|
|
80
80
|
"browserslist": "4.28.4",
|
|
81
81
|
"commitizen": "4.3.2",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{o as j,i as k,b as x}from"./lodash-CrMU6wKg.esm.js";import{Q as D,l as u,J as q,A as M,M as F,b as Q,N as V,U as X,B as H,W as Y,K as Z,t as $,O as tt,V as et,z as at,X as nt}from"./utils-C5hmbxa4.esm.js";import{B as R}from"./index-CVHrQ1WC.esm.js";import{O as B}from"./index-Bt4Ob1Fi.esm.js";const L=window.Shopify?.routes?.root||"/";let g=null,O=!0,A=!1;const it="cart";async function U(t,c=!0){if(g)return!1;const s=new AbortController;g=s;const{signal:n}=s;Q(),window.addEventListener(V.eventName,async()=>{A=!0},{signal:n}),window.addEventListener(X.eventName,async i=>{const a=i,o=/cart\/(add|change|update|clear)/,r=a.detail.type==="xhr"?a.detail.xhr.responseURL:a.detail.response.url,e=new URL(r);if(!o.test(e.pathname))return;const p=await S(t,n);n.aborted||!p.changed||B(t,p.cart)},{signal:n});let d,l;window.addEventListener(H.eventName,async i=>{const a=i;u.debug("[cart-page][BeamNonprofitSelectEvent]",a.detail);const{source:o,selectedNonprofitId:r,selectionId:e}=a.detail;if(o===Y.select_nonprofit){if(d===r&&l===e)return;const p=await _(t);await f({...p,selectedNonprofitId:r,selectionId:e}),l=e,d=r}},{signal:n}),window.addEventListener(Z.eventName,async i=>{const a=i;u.debug("[cart-page][BeamNonprofitSelectionRemovedEvent]",a.detail);const{newNonprofitId:o,selectionId:r}=a.detail;if(d===o&&l===r)return;const e=await _(t);await f({...e,selectedNonprofitId:null,selectionId:r}),l=r,d=o},{signal:n}),window.addEventListener($.eventName,async i=>{const a=i;if(u.debug("[cart-page][BeamCartCreatedEvent]",a.detail),window.statsig||c){const o=await _(t);await f(o)}},{signal:n}),window.addEventListener(tt.eventName,async i=>{const a=i;if(u.debug("[cart-page][BeamCartChangeEvent]",a.detail),window.statsig||c){const o=await _(t);await f(o)}},{signal:n});try{if(n.aborted)return!1;const i=await S(t,n);return!(n.aborted||(await B(t,i.cart,!0),n.aborted))}catch(i){throw g===s&&(s.abort(),g=null),i}}async function W(t,{clearStorage:c=!1}={}){const s=!!g;return s&&(g?.abort(),g=null,nt(),f.reset(),J.reset(),O=!0,A=!1),c&&et(t),s}async function T(t){const c=await _(t);await f(c)}async function _(t){let c,s;if(window.statsig)try{const a=window.statsig;typeof a?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(c=a.getLayer("beam_trial_layer").get("show_beam",!1),s=a.getStableID())}catch{}const n=q(it,t),d=M(R,t),{chainId:l,storeId:i}=t;return{showBeam:c??void 0,remoteSessionId:s??void 0,beamCartId:d&&d!=="null"?d:void 0,cartId:n&&n!=="null"?n:void 0,chainId:l,storeId:i}}const z=T;async function S(t,c){const{token:s,total_price:n,item_count:d,currency:l,items:i,cart_level_discount_applications:a,attributes:o}=await v();let r=!1;const e=at(t),p=e.getItemJson("cart"),I=M(R,t),C={cartId:s,beamCartId:I,subtotal:n/100,itemCount:d,currencyCode:l,schema:{source:"generic"},content:{items:i.map(({sku:m,final_line_price:b,product_id:N,line_level_discount_allocations:E})=>{const y=m||String(N),h=b/100,G=E?.map(({discount_application:K})=>({code:K?.title,applicable:!0}));return{remoteProductIdentifier:y,localAmount:h,discounts:G}}),discounts:a.map(({title:m})=>({code:m,applicable:!0}))}};let w=null;try{o?.beam&&(w=JSON.parse(o.beam))}catch(m){u.error(m)}if(w&&O&&!A&&!c?.aborted){O=!1;const{nonprofit_id:m,selection_id:b}=w,N=e.getItem("nonprofit"),E=e.getItem("transaction"),y=m!==void 0&&String(m)!==N,h=b!=null&&String(b)!==E;(y||h)&&(y&&(e.setItem("nonprofit",String(m)),e.setItem("nonprofit_selected_at",new Date().toISOString())),h&&(e.setItem("transaction",String(b)),e.setItem("nonprofit_selected_at",new Date().toISOString())),window.dispatchEvent(new F({nonprofitId:m,nonprofitIdChanged:y,selectionId:b,selectionIdChanged:h})))}return k(C,{...p,beamCartId:p?.beamCartId})||(r=!0),{changed:r,cart:C}}const P=B,v=async function(){return await window.fetch(L+"cart.js",{method:"GET",headers:{"Content-Type":"application/json"}}).then(t=>t.json())},f=D(async function({selectedNonprofitId:t,selectionId:c,beamCartId:s,cartId:n,chainId:d,storeId:l,showBeam:i,remoteSessionId:a}){const{attributes:o}=await v(),r=o?.beam;let e={};try{r&&(e=JSON.parse(r))}catch(w){u.error(w)}const p=j({nonprofit_id:t,selection_id:c,beam_cart_id:s,shopify_cart_id:n,chain_id:d,store_id:l,show_beam:i,remote_session_id:a},x),I={...e,...p};t===null&&(I.nonprofit_id=void 0);const C={beam:JSON.stringify(I)};if(!k(I,e))try{await window.fetch(L+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:C})})}catch(w){u.error(w)}}),J=D(async function({selectedNonprofitId:t,selectionId:c,beamCartId:s,cartId:n,chainId:d,storeId:l}){let i,a;if(window.statsig)try{const e=window.statsig;typeof e?.getLayer("beam_trial_layer")?.get("show_beam")=="boolean"&&(i=e.getLayer("beam_trial_layer").get("show_beam",!1),a=e.getStableID())}catch{}const o=j({nonprofit_id:t,selection_id:c,beam_cart_id:s,shopify_cart_id:n,chain_id:d,store_id:l,show_beam:i,remote_session_id:a},x);t===null&&(o.nonprofit_id=void 0);const r={beam:JSON.stringify(o)};try{await window.fetch(L+"cart/update.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({attributes:r})})}catch(e){u.error(e)}});var ot=Object.freeze({__proto__:null,addBeamAttributesToCart:J,appendBeamAttributesToCart:f,appendStatsigToShopifyCartAttributes:z,appendToShopifyCartBeamAttribute:T,getBeamAttributesForCart:_,getCurrentCart:S,getShopifyCart:v,registerCartIntegration:U,trackCart:P,unregisterCartIntegration:W});export{J,S as L,v as T,W as a,U as e,f as g,ot as i,z as n,P as r,T as x,_ as y};
|
|
2
|
-
//# sourceMappingURL=index-B7OkmoYI.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-B7OkmoYI.esm.js","sources":["../../src/integrations/shopify/cart.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport isEqual from \"lodash-es/isEqual\";\nimport isUndefined from \"lodash-es/isUndefined\";\nimport omitBy from \"lodash-es/omitBy\";\nimport { clearBeamStorage, logger, memoizeLast } from \"../../utils\";\nimport { initNetworkListeners, teardownNetworkListeners } from \"../../utils/network-listeners\";\nimport {\n BeamCartChangeEvent,\n BeamCartCreatedEvent,\n BeamNetworkCallEvent,\n BeamNonprofitSelectEvent,\n BeamNonprofitSelectionRemovedEvent,\n BeamWidgetInitialNonprofitSyncCancelEvent,\n BeamWidgetInitialNonprofitSyncEvent,\n} from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart, TCartItems } from \"../../shared/cart-contents\";\nimport { BeamCartAPIConfig, updateCart } from \"../cart\";\nimport { WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { getBeamCartId, getExternalCartId } from \"../../utils/cart\";\n\nexport type BeamShopifyCartIntegrationConfig = BeamCartAPIConfig & {\n storeId: number; // will be added to cart custom_attributes, and used in cart API call\n chainId?: number; // will be added to cart custom_attributes\n};\n\ntype ShopifyDiscountApplication = {\n title: string;\n value: string;\n};\n\ntype ShopifyLineLevelDiscountAllocations = {\n amount?: string;\n discount_application: ShopifyDiscountApplication;\n};\n\ntype ShopifyCartBeamAttribute = {\n nonprofit_id?: number | null;\n selection_id?: string;\n beam_cart_id?: string;\n shopify_cart_id?: string;\n chain_id?: number;\n store_id?: number;\n show_beam?: boolean;\n remote_session_id?: string;\n};\n\nconst SHOPIFY_BASE_URL = window.Shopify?.routes?.root || \"/\"; // see window.d.ts\n\nlet cartIntegrationAbortController: AbortController | null = null; // Set when registration starts; aborting removes its listeners\n\nlet allowEmitInitialNonprofitSync = true; // Skip updating local storage if already run initially\nlet skipEmitInitialNonprofitSync = false; // Allow other processes to skip the nonprofit sync from cart attributes\n\nconst SHOPIFY_CART_COOKIE_NAME = \"cart\";\n\n/**\n * @main registerCartIntegration - set up event listeners to integrate Beam with Shopify cart\n * @return {boolean} returns true if NEW listeners were created, false if setup was already done\n */\nasync function registerCartIntegration(\n config: BeamShopifyCartIntegrationConfig,\n autoUpdateShopifyCartAttributes = true,\n) {\n if (cartIntegrationAbortController) {\n return false; // Do nothing if already registered, or a registration attempt is already in progress\n }\n\n // All listeners below are registered with this signal so that\n // unregisterCartIntegration can remove them all with a single abort()\n const abortController = new AbortController();\n cartIntegrationAbortController = abortController;\n const { signal } = abortController;\n\n // logger.debug(\"[cart-page][registerCartIntegration] initializing network listeners\");\n // Set up event listeners for AJAX events (idempotent; re-enables dispatching if previously torn down)\n initNetworkListeners();\n\n /**\n * Allow another component to cancel the loading & setting\n * of the Shopify cart selection (like if a selection is made before we've gotten the previous values)\n */\n window.addEventListener(\n BeamWidgetInitialNonprofitSyncCancelEvent.eventName,\n async () => {\n // logger.debug(\"[cart-page][BeamWidgetInitialNonprofitSyncCancelEvent]\");\n skipEmitInitialNonprofitSync = true;\n },\n { signal },\n );\n\n // When any network call happens, check if it's for the Shopify /cart AJAX Api.\n // If so, and the cart is updated, send the cart to Beam\n window.addEventListener(\n BeamNetworkCallEvent.eventName,\n async (_event: Event) => {\n const event = _event as BeamNetworkCallEvent;\n const cartChangePaths = /cart\\/(add|change|update|clear)/;\n // note: response urls below follow redirects\n const requestUrlStr = event.detail.type === \"xhr\" ? event.detail.xhr.responseURL : event.detail.response.url;\n const url = new URL(requestUrlStr);\n if (!cartChangePaths.test(url.pathname)) {\n return;\n }\n // logger.debug(\"[cart-page][BeamNetworkCallEvent] getting current cart\");\n const currentCart = await getCurrentCart(config, signal);\n // Recheck: unregister can't cancel an invocation already in flight\n if (signal.aborted || !currentCart.changed) {\n // logger.debug(`[cart-page][BeamNetworkCallEvent] cart has not changed from URL ${requestUrlStr}`, currentCart.cart);\n return;\n }\n // Send cart to Beam to update timestamp, which is used for cart abandonment / ROI calc\n // logger.debug(`[cart-page][BeamNetworkCallEvent] cart has changed from URL ${requestUrlStr}`, currentCart.cart);\n updateCart(config, currentCart.cart);\n },\n { signal },\n );\n\n // Listen to Beam's own events to integrate Beam data into Shopify order\n let lastNonprofitId: number | null | undefined;\n let lastSelectionId: string | null | undefined;\n window.addEventListener(\n BeamNonprofitSelectEvent.eventName,\n async (_event) => {\n const event = _event as BeamNonprofitSelectEvent;\n logger.debug(\"[cart-page][BeamNonprofitSelectEvent]\", event.detail);\n const { source, selectedNonprofitId, selectionId } = event.detail;\n\n // On nonprofit selection, we always write Beam's attributes\n // to the Shopify cart attributes\n if (source === WIDGET_NAMES.select_nonprofit) {\n // Skip update if nothing changed (can happen if widget is re-initialized and\n // emits event after cache restoration, i.e., on cart re-render).\n if (lastNonprofitId === selectedNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart({\n ...beamCartData,\n selectedNonprofitId,\n selectionId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = selectedNonprofitId;\n }\n },\n { signal },\n );\n\n /**\n * Upon removal of the selected nonprofit from the widget and local storage,\n * an event is emitted and that event is then used to update the cart attributes accordingly\n * This event listener updates the cart attributes based on the emitted event\n */\n window.addEventListener(\n BeamNonprofitSelectionRemovedEvent.eventName,\n async (_event) => {\n const event = _event as BeamNonprofitSelectionRemovedEvent;\n logger.debug(\"[cart-page][BeamNonprofitSelectionRemovedEvent]\", event.detail);\n const { newNonprofitId, selectionId } = event.detail;\n\n if (lastNonprofitId === newNonprofitId && lastSelectionId === selectionId) {\n return;\n }\n\n // On nonprofit deselection, we always write Beam's attributes\n // to the Shopify cart attributes\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart({\n ...beamCartData,\n selectedNonprofitId: null,\n selectionId,\n });\n lastSelectionId = selectionId;\n lastNonprofitId = newNonprofitId;\n },\n { signal },\n );\n\n /**\n * When a BeamCart is created, write beam metadata to the Shopify cart if\n * we need to capture it for Statsig or Extensibility\n */\n window.addEventListener(\n BeamCartCreatedEvent.eventName,\n async (_event: Event) => {\n const event = _event as BeamCartCreatedEvent;\n logger.debug(\"[cart-page][BeamCartCreatedEvent]\", event.detail);\n if (window.statsig || autoUpdateShopifyCartAttributes) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n }\n },\n { signal },\n );\n\n /**\n * On any cart changes, write beam metadata to the Shopify cart if\n * we need to capture it for Statsig or Extensibility\n */\n window.addEventListener(\n BeamCartChangeEvent.eventName,\n async (_event: Event) => {\n const event = _event as BeamCartChangeEvent;\n logger.debug(\"[cart-page][BeamCartChangeEvent]\", event.detail);\n if (window.statsig || autoUpdateShopifyCartAttributes) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n }\n },\n { signal },\n );\n\n try {\n // Handle full-page load, ie, first-time page load and reloads from form submit events\n // This creates a GET to /cart.js\n if (signal.aborted) {\n return false; // unregistered before we even started\n }\n const currentCart = await getCurrentCart(config, signal);\n if (signal.aborted) {\n return false; // unregistered while the GET was in flight\n }\n // logger.debug(\"[cart-page][registerCartIntegration] initial cart fetch result\", currentCart);\n await updateCart(config, currentCart.cart, true);\n if (signal.aborted) {\n return false; // unregistered while updateCart was in flight\n }\n\n return true;\n } catch (err) {\n // Undo on failure so a later call can retry instead of being stuck\n if (cartIntegrationAbortController === abortController) {\n abortController.abort();\n cartIntegrationAbortController = null;\n }\n throw err;\n }\n}\n\n/**\n * @main unregisterCartIntegration - tear down listeners set up by registerCartIntegration.\n * Pass { clearStorage: true } to also wipe Beam's localStorage/cookies in the same call\n * (clearBeamStorage from src/utils, which is also callable on its own — for cases that want\n * storage cleared without touching listeners, or independently of this integration entirely).\n * @return {boolean} true if this page load's listeners were torn down, false if\n * registerCartIntegration never ran this session (storage still clears if requested, either way)\n */\nasync function unregisterCartIntegration(\n config: BeamShopifyCartIntegrationConfig,\n { clearStorage = false }: { clearStorage?: boolean } = {},\n) {\n // Also covers an unregister call that arrives mid-registration, before this is set true\n const wasRegisteredThisSession = Boolean(cartIntegrationAbortController);\n\n if (wasRegisteredThisSession) {\n // 1. Remove ALL event listeners registered with this controller's signal\n cartIntegrationAbortController?.abort();\n cartIntegrationAbortController = null;\n\n // 2. Stop fetch/XHR hooks from dispatching (patches stay installed, just inert)\n teardownNetworkListeners();\n\n // 3. Drop memoized state so nothing stale survives a re-register\n appendBeamAttributesToCart.reset();\n addBeamAttributesToCart.reset();\n\n // 4. Reset module flags so a future opt-in can re-register cleanly\n allowEmitInitialNonprofitSync = true;\n skipEmitInitialNonprofitSync = false;\n }\n\n // 5. Optionally clear storage too. Runs regardless of wasRegisteredThisSession — that state\n // is persisted browser-side, not tied to whether a registration happened this page load.\n if (clearStorage) {\n clearBeamStorage(config);\n }\n\n return wasRegisteredThisSession;\n}\n\n/* ***************************************** HELPER FUNCTIONS *****************************************\n These may be used individually to integrate with carts if the registerCartIntegration\n script doesn't work for some reason.\n ****************************************************************************************************/\n\nasync function appendToShopifyCartBeamAttribute(config: BeamShopifyCartIntegrationConfig) {\n const beamCartData = await getBeamAttributesForCart(config);\n await appendBeamAttributesToCart(beamCartData);\n}\n\n/**\n * Gathers the base Beam data needed for updating a Shopify cart's metadata\n */\nasync function getBeamAttributesForCart(config: BeamShopifyCartIntegrationConfig) {\n let showBeam;\n let remoteSessionId;\n\n if (window.statsig) {\n // If the site is using Statsig, but not for Beam, we need to ignore it\n try {\n const statsig = window.statsig as any;\n const statsigLayerProperty = statsig?.getLayer(\"beam_trial_layer\")?.get(\"show_beam\");\n if (typeof statsigLayerProperty === \"boolean\") {\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n } catch (err) {\n // logger.error(err)\n }\n }\n\n const cartId = getExternalCartId(SHOPIFY_CART_COOKIE_NAME, config);\n const beamCartId = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n const { chainId, storeId } = config;\n\n return {\n showBeam: showBeam ?? undefined,\n remoteSessionId: remoteSessionId ?? undefined,\n beamCartId: beamCartId && beamCartId !== \"null\" ? beamCartId : undefined,\n cartId: cartId && cartId !== \"null\" ? cartId : undefined,\n chainId,\n storeId,\n };\n}\n\n/**\n * Adds Statsig data to a Shopify cart\n */\nconst appendStatsigToShopifyCartAttributes = appendToShopifyCartBeamAttribute;\n\n/**\n * Detects change in cart since last page load,\n * by calling GET /cart.js, and returns cart values.\n * Used for:\n * - Form-based carts where the page refreshes to modify cart instead of using AJAX calls\n * - Hydrogen/GraphQL based carts (needs to be integrated manually)\n */\nasync function getCurrentCart(\n config: BeamShopifyCartIntegrationConfig,\n signal?: AbortSignal,\n): Promise<{\n changed: boolean;\n cart: {\n cartId: string;\n subtotal: number;\n itemCount: number;\n currencyCode: string;\n } & TCart;\n}> {\n const {\n token, // equal to \"cart\" cookie\n total_price, // this is the pretax value, after discounts, and multiplied by 100 (integer from decimal)\n item_count,\n currency,\n items,\n cart_level_discount_applications,\n attributes,\n } = await getShopifyCart();\n\n let changed = false;\n\n const localStorage = createScopedLocalStorage(config);\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = getBeamCartId(BEAM_CART_COOKIE_NAME, config);\n\n const cart = {\n cartId: token,\n beamCartId,\n subtotal: total_price / 100,\n itemCount: item_count,\n currencyCode: currency,\n schema: { source: \"generic\" } as const,\n content: {\n // pull out minimal fields from full line items\n items: (items as TCartItems).map(({ sku, final_line_price, product_id, line_level_discount_allocations }) => {\n const remoteProductIdentifier = sku || String(product_id);\n const localAmount = final_line_price / 100;\n const discounts = (line_level_discount_allocations as ShopifyLineLevelDiscountAllocations[])?.map(\n ({ discount_application }) => {\n return { code: discount_application?.title, applicable: true };\n },\n );\n return { remoteProductIdentifier, localAmount, discounts };\n }),\n discounts: (cart_level_discount_applications as ShopifyDiscountApplication[]).map(({ title }) => {\n return { code: title, applicable: true };\n }),\n },\n };\n\n let beamAttr: ShopifyCartBeamAttribute | null = null;\n\n try {\n if (attributes?.beam) {\n beamAttr = JSON.parse(attributes.beam);\n }\n } catch (err) {\n logger.error(err);\n }\n\n /**\n * Only attempt to emit BeamWidgetInitialNonprofitSyncEvent once\n * as soon as we see a \"beam\" attribute for the first time.\n * allowEmitInitialNonprofitSync is local to this file to keep this\n * from running more than once.\n * skipEmitInitialNonprofitSync is settable by an event listener\n * so other processes can stop this sync from happening.\n * signal is checked too, so a call from a since-torn-down registration doesn't consume\n * the one-shot flag on its behalf.\n */\n if (beamAttr && allowEmitInitialNonprofitSync && !skipEmitInitialNonprofitSync && !signal?.aborted) {\n allowEmitInitialNonprofitSync = false;\n\n const { nonprofit_id, selection_id } = beamAttr;\n\n const storedNonprofit = localStorage.getItem(\"nonprofit\");\n const storedSelection = localStorage.getItem(\"transaction\");\n\n const nonprofitChanged = nonprofit_id !== undefined && String(nonprofit_id) !== storedNonprofit;\n const selectionChanged = selection_id != null && String(selection_id) !== storedSelection;\n\n // Only dispatch if something changed, and if it's not skipped\n if (nonprofitChanged || selectionChanged) {\n if (nonprofitChanged) {\n localStorage.setItem(\"nonprofit\", String(nonprofit_id));\n localStorage.setItem(\"nonprofit_selected_at\", new Date().toISOString());\n }\n\n if (selectionChanged) {\n localStorage.setItem(\"transaction\", String(selection_id));\n localStorage.setItem(\"nonprofit_selected_at\", new Date().toISOString());\n }\n\n window.dispatchEvent(\n new BeamWidgetInitialNonprofitSyncEvent({\n nonprofitId: nonprofit_id,\n nonprofitIdChanged: nonprofitChanged,\n selectionId: selection_id,\n selectionIdChanged: selectionChanged,\n }),\n );\n }\n }\n\n if (\n !isEqual(cart, {\n ...cachedCart,\n beamCartId: cachedCart?.beamCartId,\n })\n ) {\n changed = true;\n }\n\n // logger.debug(\"[cart-page][getCurrentCart] has cart changed?\", changed, cart);\n\n return { changed, cart };\n}\n\n/**\n * trackCart - Backwards-compatible alias for updateCart\n */\nconst trackCart = updateCart;\n\n/**\n * Helper function to get the Shopify cart attributes\n */\nconst getShopifyCart = async function () {\n const cart = await window\n .fetch(SHOPIFY_BASE_URL + \"cart.js\", {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n })\n .then((res) => res.json());\n return cart;\n};\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n * This will do an append, not a full overwrite of the attributes in the beam property\n */\nconst appendBeamAttributesToCart = memoizeLast(async function appendBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n showBeam,\n remoteSessionId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n showBeam?: boolean;\n remoteSessionId?: string;\n}) {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] fetching existing cart\");\n const { attributes } = await getShopifyCart();\n\n // Get only the Beam attribute, if it exists\n const existingBeamCartAttrString = attributes?.beam;\n let existingBeamCartAttr = {};\n try {\n if (existingBeamCartAttrString) {\n existingBeamCartAttr = JSON.parse(existingBeamCartAttrString);\n }\n } catch (err) {\n logger.error(err);\n }\n\n const newBeamAttrs = omitBy(\n {\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n show_beam: showBeam,\n remote_session_id: remoteSessionId,\n },\n isUndefined,\n );\n\n const appendedBeamAttributes = {\n ...existingBeamCartAttr,\n ...newBeamAttrs,\n } as ShopifyCartBeamAttribute;\n\n // For the nonprofitId, if we specifically get a null value here,\n // we want to remove it from the cart attributes, not just write \"null\"\n if (selectedNonprofitId === null) {\n appendedBeamAttributes.nonprofit_id = undefined;\n }\n\n const beamCartAttrs = {\n beam: JSON.stringify(appendedBeamAttributes),\n };\n\n // If the attributes match, no reason to update the cart\n if (isEqual(appendedBeamAttributes, existingBeamCartAttr)) {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] cart attributes match, skipping update\");\n return;\n }\n\n try {\n // logger.debug(\"[cart-page][appendBeamAttributesToCart] updating Shopify cart\");\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\n/**\n * Sends Beam data to Shopify to integrate with order as custom attributes.\n * Memoized so that calls with the same data as the previous don't create additional API calls to Shopify.\n * This method force-updates the \"beam\" attribute with the values passed in\n */\nconst addBeamAttributesToCart = memoizeLast(async function addBeamAttributesToCart({\n selectedNonprofitId,\n selectionId,\n beamCartId,\n cartId,\n chainId,\n storeId,\n}: {\n selectedNonprofitId?: number | null;\n selectionId?: string;\n beamCartId?: string;\n cartId?: string;\n chainId?: number;\n storeId?: number;\n}) {\n let showBeam;\n let remoteSessionId;\n\n if (window.statsig) {\n // If the site is using Statsig, but not for Beam, we need to ignore it\n try {\n const statsig = window.statsig as any;\n const statsigLayerProperty = statsig?.getLayer(\"beam_trial_layer\")?.get(\"show_beam\");\n if (typeof statsigLayerProperty === \"boolean\") {\n showBeam = statsig.getLayer(\"beam_trial_layer\").get(\"show_beam\", false /* default to hide */) as boolean;\n remoteSessionId = statsig.getStableID();\n }\n } catch (err) {\n // logger.error(err)\n }\n }\n\n const allBeamAttributes = omitBy(\n {\n nonprofit_id: selectedNonprofitId,\n selection_id: selectionId,\n beam_cart_id: beamCartId,\n shopify_cart_id: cartId,\n chain_id: chainId,\n store_id: storeId,\n show_beam: showBeam,\n remote_session_id: remoteSessionId,\n },\n isUndefined,\n ) as ShopifyCartBeamAttribute;\n\n // For the nonprofitId, if we specifically get a null value here,\n // we want to remove it from the cart attributes, not just write \"null\"\n if (selectedNonprofitId === null) {\n allBeamAttributes.nonprofit_id = undefined;\n }\n\n const beamCartAttrs = {\n beam: JSON.stringify(allBeamAttributes),\n };\n\n try {\n await window.fetch(SHOPIFY_BASE_URL + \"cart/update.js\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ attributes: beamCartAttrs }),\n });\n } catch (err) {\n logger.error(err); // don't throw, allow later calls to continue\n }\n});\n\ndeclare global {\n interface Window {\n statsig?: any; // attached by Statsig CDN script\n Shopify?: any;\n }\n}\n\nexport {\n trackCart,\n getCurrentCart,\n addBeamAttributesToCart,\n unregisterCartIntegration,\n appendStatsigToShopifyCartAttributes,\n appendToShopifyCartBeamAttribute,\n registerCartIntegration,\n appendBeamAttributesToCart,\n getShopifyCart,\n getBeamAttributesForCart,\n};\n"],"names":["SHOPIFY_BASE_URL","cartIntegrationAbortController","allowEmitInitialNonprofitSync","skipEmitInitialNonprofitSync","SHOPIFY_CART_COOKIE_NAME","registerCartIntegration","config","autoUpdateShopifyCartAttributes","abortController","signal","initNetworkListeners","BeamWidgetInitialNonprofitSyncCancelEvent","BeamNetworkCallEvent","_event","event","cartChangePaths","requestUrlStr","url","currentCart","getCurrentCart","updateCart","lastNonprofitId","lastSelectionId","BeamNonprofitSelectEvent","logger","source","selectedNonprofitId","selectionId","WIDGET_NAMES","beamCartData","getBeamAttributesForCart","appendBeamAttributesToCart","BeamNonprofitSelectionRemovedEvent","newNonprofitId","BeamCartCreatedEvent","BeamCartChangeEvent","err","unregisterCartIntegration","clearStorage","wasRegisteredThisSession","teardownNetworkListeners","addBeamAttributesToCart","clearBeamStorage","appendToShopifyCartBeamAttribute","showBeam","remoteSessionId","statsig","cartId","getExternalCartId","beamCartId","getBeamCartId","BEAM_CART_COOKIE_NAME","chainId","storeId","appendStatsigToShopifyCartAttributes","token","total_price","item_count","currency","items","cart_level_discount_applications","attributes","getShopifyCart","changed","localStorage","createScopedLocalStorage","cachedCart","cart","sku","final_line_price","product_id","line_level_discount_allocations","remoteProductIdentifier","localAmount","discounts","discount_application","title","beamAttr","nonprofit_id","selection_id","storedNonprofit","storedSelection","nonprofitChanged","selectionChanged","BeamWidgetInitialNonprofitSyncEvent","isEqual","trackCart","res","memoizeLast","existingBeamCartAttrString","existingBeamCartAttr","newBeamAttrs","omitBy","isUndefined","appendedBeamAttributes","beamCartAttrs","allBeamAttributes"],"mappings":"4SA+CA,MAAMA,EAAmB,OAAO,SAAS,QAAQ,MAAQ,IAEzD,IAAIC,EAAyD,KAEzDC,EAAgC,GAChCC,EAA+B,GAEnC,MAAMC,GAA2B,OAMjC,eAAeC,EACbC,EACAC,EAAkC,GAClC,CACA,GAAIN,EACF,MAAO,GAKT,MAAMO,EAAkB,IAAI,gBAC5BP,EAAiCO,EACjC,KAAM,CAAE,OAAAC,CAAO,EAAID,EAInBE,IAMA,OAAO,iBACLC,EAA0C,UAC1C,SAAY,CAEVR,EAA+B,EACjC,EACA,CAAE,OAAAM,CAAO,CACX,EAIA,OAAO,iBACLG,EAAqB,UACrB,MAAOC,GAAkB,CACvB,MAAMC,EAAQD,EACRE,EAAkB,kCAElBC,EAAgBF,EAAM,OAAO,OAAS,MAAQA,EAAM,OAAO,IAAI,YAAcA,EAAM,OAAO,SAAS,IACnGG,EAAM,IAAI,IAAID,CAAa,EACjC,GAAI,CAACD,EAAgB,KAAKE,EAAI,QAAQ,EACpC,OAGF,MAAMC,EAAc,MAAMC,EAAeb,EAAQG,CAAM,EAEnDA,EAAO,SAAW,CAACS,EAAY,SAMnCE,EAAWd,EAAQY,EAAY,IAAI,CACrC,EACA,CAAE,OAAAT,CAAO,CACX,EAGA,IAAIY,EACAC,EACJ,OAAO,iBACLC,EAAyB,UACzB,MAAOV,GAAW,CAChB,MAAMC,EAAQD,EACdW,EAAO,MAAM,wCAAyCV,EAAM,MAAM,EAClE,KAAM,CAAE,OAAAW,EAAQ,oBAAAC,EAAqB,YAAAC,CAAY,EAAIb,EAAM,OAI3D,GAAIW,IAAWG,EAAa,iBAAkB,CAG5C,GAAIP,IAAoBK,GAAuBJ,IAAoBK,EACjE,OAGF,MAAME,EAAe,MAAMC,EAAyBxB,CAAM,EAC1D,MAAMyB,EAA2B,CAC/B,GAAGF,EACH,oBAAAH,EACA,YAAAC,CACF,CAAC,EACDL,EAAkBK,EAClBN,EAAkBK,CACpB,CACF,EACA,CAAE,OAAAjB,CAAO,CACX,EAOA,OAAO,iBACLuB,EAAmC,UACnC,MAAOnB,GAAW,CAChB,MAAMC,EAAQD,EACdW,EAAO,MAAM,kDAAmDV,EAAM,MAAM,EAC5E,KAAM,CAAE,eAAAmB,EAAgB,YAAAN,CAAY,EAAIb,EAAM,OAE9C,GAAIO,IAAoBY,GAAkBX,IAAoBK,EAC5D,OAKF,MAAME,EAAe,MAAMC,EAAyBxB,CAAM,EAC1D,MAAMyB,EAA2B,CAC/B,GAAGF,EACH,oBAAqB,KACrB,YAAAF,CACF,CAAC,EACDL,EAAkBK,EAClBN,EAAkBY,CACpB,EACA,CAAE,OAAAxB,CAAO,CACX,EAMA,OAAO,iBACLyB,EAAqB,UACrB,MAAOrB,GAAkB,CACvB,MAAMC,EAAQD,EAEd,GADAW,EAAO,MAAM,oCAAqCV,EAAM,MAAM,EAC1D,OAAO,SAAWP,EAAiC,CACrD,MAAMsB,EAAe,MAAMC,EAAyBxB,CAAM,EAC1D,MAAMyB,EAA2BF,CAAY,CAC/C,CACF,EACA,CAAE,OAAApB,CAAO,CACX,EAMA,OAAO,iBACL0B,GAAoB,UACpB,MAAOtB,GAAkB,CACvB,MAAMC,EAAQD,EAEd,GADAW,EAAO,MAAM,mCAAoCV,EAAM,MAAM,EACzD,OAAO,SAAWP,EAAiC,CACrD,MAAMsB,EAAe,MAAMC,EAAyBxB,CAAM,EAC1D,MAAMyB,EAA2BF,CAAY,CAC/C,CACF,EACA,CAAE,OAAApB,CAAO,CACX,EAEA,GAAI,CAGF,GAAIA,EAAO,QACT,MAAO,GAET,MAAMS,EAAc,MAAMC,EAAeb,EAAQG,CAAM,EAMvD,MALI,EAAAA,EAAO,UAIX,MAAMW,EAAWd,EAAQY,EAAY,KAAM,EAAI,EAC3CT,EAAO,SAKb,OAAS2B,EAAK,CAEZ,MAAInC,IAAmCO,IACrCA,EAAgB,MAAA,EAChBP,EAAiC,MAE7BmC,CACR,CACF,CAUA,eAAeC,EACb/B,EACA,CAAE,aAAAgC,EAAe,EAAM,EAAgC,CAAA,EACvD,CAEA,MAAMC,EAA2B,CAAA,CAAQtC,EAEzC,OAAIsC,IAEFtC,GAAgC,MAAA,EAChCA,EAAiC,KAGjCuC,GAAAA,EAGAT,EAA2B,MAAA,EAC3BU,EAAwB,MAAA,EAGxBvC,EAAgC,GAChCC,EAA+B,IAK7BmC,GACFI,GAAiBpC,CAAM,EAGlBiC,CACT,CAOA,eAAeI,EAAiCrC,EAA0C,CACxF,MAAMuB,EAAe,MAAMC,EAAyBxB,CAAM,EAC1D,MAAMyB,EAA2BF,CAAY,CAC/C,CAKA,eAAeC,EAAyBxB,EAA0C,CAChF,IAAIsC,EACAC,EAEJ,GAAI,OAAO,QAET,GAAI,CACF,MAAMC,EAAU,OAAO,QAEnB,OADyBA,GAAS,SAAS,kBAAkB,GAAG,IAAI,WAAW,GAC/C,YAClCF,EAAWE,EAAQ,SAAS,kBAAkB,EAAE,IAAI,YAAa,EAA2B,EAC5FD,EAAkBC,EAAQ,YAAA,EAE9B,MAAc,CAEd,CAGF,MAAMC,EAASC,EAAkB5C,GAA0BE,CAAM,EAC3D2C,EAAaC,EAAcC,EAAuB7C,CAAM,EACxD,CAAE,QAAA8C,EAAS,QAAAC,CAAQ,EAAI/C,EAE7B,MAAO,CACL,SAAUsC,GAAY,OACtB,gBAAiBC,GAAmB,OACpC,WAAYI,GAAcA,IAAe,OAASA,EAAa,OAC/D,OAAQF,GAAUA,IAAW,OAASA,EAAS,OAC/C,QAAAK,EACA,QAAAC,CACF,CACF,OAKMC,EAAuCX,EAS7C,eAAexB,EACbb,EACAG,EASC,CACD,KAAM,CACJ,MAAA8C,EACA,YAAAC,EACA,WAAAC,EACA,SAAAC,EACA,MAAAC,EACA,iCAAAC,EACA,WAAAC,CACF,EAAI,MAAMC,IAEV,IAAIC,EAAU,GAEd,MAAMC,EAAeC,GAAyB3D,CAAM,EAG9C4D,EAA2CF,EAAa,YAAY,MAAM,EAG1Ef,EAA4BC,EAAcC,EAAuB7C,CAAM,EAEvE6D,EAAO,CACX,OAAQZ,EACR,WAAAN,EACA,SAAUO,EAAc,IACxB,UAAWC,EACX,aAAcC,EACd,OAAQ,CAAE,OAAQ,SAAU,EAC5B,QAAS,CAEP,MAAQC,EAAqB,IAAI,CAAC,CAAE,IAAAS,EAAK,iBAAAC,EAAkB,WAAAC,EAAY,gCAAAC,CAAgC,IAAM,CAC3G,MAAMC,EAA0BJ,GAAO,OAAOE,CAAU,EAClDG,EAAcJ,EAAmB,IACjCK,EAAaH,GAA2E,IAC5F,CAAC,CAAE,qBAAAI,CAAqB,KACf,CAAE,KAAMA,GAAsB,MAAO,WAAY,EAAK,EAEjE,EACA,MAAO,CAAE,wBAAAH,EAAyB,YAAAC,EAAa,UAAAC,CAAU,CAC3D,CAAC,EACD,UAAYd,EAAkE,IAAI,CAAC,CAAE,MAAAgB,CAAM,KAClF,CAAE,KAAMA,EAAO,WAAY,EAAK,EACxC,CACH,CACF,EAEA,IAAIC,EAA4C,KAEhD,GAAI,CACEhB,GAAY,OACdgB,EAAW,KAAK,MAAMhB,EAAW,IAAI,EAEzC,OAASzB,EAAK,CACZZ,EAAO,MAAMY,CAAG,CAClB,CAYA,GAAIyC,GAAY3E,GAAiC,CAACC,GAAgC,CAACM,GAAQ,QAAS,CAClGP,EAAgC,GAEhC,KAAM,CAAE,aAAA4E,EAAc,aAAAC,CAAa,EAAIF,EAEjCG,EAAkBhB,EAAa,QAAQ,WAAW,EAClDiB,EAAkBjB,EAAa,QAAQ,aAAa,EAEpDkB,EAAmBJ,IAAiB,QAAa,OAAOA,CAAY,IAAME,EAC1EG,EAAmBJ,GAAgB,MAAQ,OAAOA,CAAY,IAAME,GAGtEC,GAAoBC,KAClBD,IACFlB,EAAa,QAAQ,YAAa,OAAOc,CAAY,CAAC,EACtDd,EAAa,QAAQ,wBAAyB,IAAI,KAAA,EAAO,YAAA,CAAa,GAGpEmB,IACFnB,EAAa,QAAQ,cAAe,OAAOe,CAAY,CAAC,EACxDf,EAAa,QAAQ,wBAAyB,IAAI,OAAO,aAAa,GAGxE,OAAO,cACL,IAAIoB,EAAoC,CACtC,YAAaN,EACb,mBAAoBI,EACpB,YAAaH,EACb,mBAAoBI,CACtB,CAAC,CACH,EAEJ,CAEA,OACGE,EAAQlB,EAAM,CACb,GAAGD,EACH,WAAYA,GAAY,UAC1B,CAAC,IAEDH,EAAU,IAKL,CAAE,QAAAA,EAAS,KAAAI,CAAK,CACzB,CAKA,MAAMmB,EAAYlE,EAKZ0C,EAAiB,gBAAkB,CAOvC,OANa,MAAM,OAChB,MAAM9D,EAAmB,UAAW,CACnC,OAAQ,MACR,QAAS,CAAE,eAAgB,kBAAmB,CAChD,CAAC,EACA,KAAMuF,GAAQA,EAAI,MAAM,CAE7B,EAOMxD,EAA6ByD,EAAY,eAA0C,CACvF,oBAAA9D,EACA,YAAAC,EACA,WAAAsB,EACA,OAAAF,EACA,QAAAK,EACA,QAAAC,EACA,SAAAT,EACA,gBAAAC,CACF,EASG,CAED,KAAM,CAAE,WAAAgB,CAAW,EAAI,MAAMC,EAAAA,EAGvB2B,EAA6B5B,GAAY,KAC/C,IAAI6B,EAAuB,CAAA,EAC3B,GAAI,CACED,IACFC,EAAuB,KAAK,MAAMD,CAA0B,EAEhE,OAASrD,EAAK,CACZZ,EAAO,MAAMY,CAAG,CAClB,CAEA,MAAMuD,EAAeC,EACnB,CACE,aAAclE,EACd,aAAcC,EACd,aAAcsB,EACd,gBAAiBF,EACjB,SAAUK,EACV,SAAUC,EACV,UAAWT,EACX,kBAAmBC,CACrB,EACAgD,CACF,EAEMC,EAAyB,CAC7B,GAAGJ,EACH,GAAGC,CACL,EAIIjE,IAAwB,OAC1BoE,EAAuB,aAAe,QAGxC,MAAMC,EAAgB,CACpB,KAAM,KAAK,UAAUD,CAAsB,CAC7C,EAGA,GAAI,CAAAT,EAAQS,EAAwBJ,CAAoB,EAKxD,GAAI,CAEF,MAAM,OAAO,MAAM1F,EAAmB,iBAAkB,CACtD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,WAAY+F,CAAc,CAAC,CACpD,CAAC,CACH,OAAS3D,EAAK,CACZZ,EAAO,MAAMY,CAAG,CAClB,CACF,CAAC,EAOKK,EAA0B+C,EAAY,eAAuC,CACjF,oBAAA9D,EACA,YAAAC,EACA,WAAAsB,EACA,OAAAF,EACA,QAAAK,EACA,QAAAC,CACF,EAOG,CACD,IAAIT,EACAC,EAEJ,GAAI,OAAO,QAET,GAAI,CACF,MAAMC,EAAU,OAAO,QAEnB,OADyBA,GAAS,SAAS,kBAAkB,GAAG,IAAI,WAAW,GAC/C,YAClCF,EAAWE,EAAQ,SAAS,kBAAkB,EAAE,IAAI,YAAa,EAA2B,EAC5FD,EAAkBC,EAAQ,cAE9B,MAAc,CAEd,CAGF,MAAMkD,EAAoBJ,EACxB,CACE,aAAclE,EACd,aAAcC,EACd,aAAcsB,EACd,gBAAiBF,EACjB,SAAUK,EACV,SAAUC,EACV,UAAWT,EACX,kBAAmBC,CACrB,EACAgD,CACF,EAIInE,IAAwB,OAC1BsE,EAAkB,aAAe,QAGnC,MAAMD,EAAgB,CACpB,KAAM,KAAK,UAAUC,CAAiB,CACxC,EAEA,GAAI,CACF,MAAM,OAAO,MAAMhG,EAAmB,iBAAkB,CACtD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,WAAY+F,CAAc,CAAC,CACpD,CAAC,CACH,OAAS3D,EAAK,CACZZ,EAAO,MAAMY,CAAG,CAClB,CACF,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import{b as p,m as T}from"./lit-BEag9MFp.esm.js";import{n as u,l as f,a3 as g,D as O,Q as E,P as N,q as A,d as _}from"./utils-C5hmbxa4.esm.js";const F=t=>Object.entries(t).map(([e,r])=>`${e}: ${r};`).join(`
|
|
2
|
-
`);class R{constructor(e,r){this.data=null,this.loading=!1,this.error=null,(this.host=e).addController(this),this.asyncFn=r}async exec(...e){this.lastArgs=e,this.loading=!0,this.host.requestUpdate();try{this.data=await this.asyncFn(...e),this.error=null}catch(r){r instanceof Error&&(this.error=r,this.data=null)}return this.loading=!1,this.host.requestUpdate(),this.data}async retry(){return this.exec(...this.lastArgs||[])}hostDisconnected(){}}var D="1.57.4",L={"@shoelace-style/shoelace":"2.20.1","lucide-static":"0.292.0"};async function y(t,e){const r={method:"GET",...e,headers:{"Content-Type":"application/json",Accept:"application/json","X-Beam-Client":"WebSDK","X-Beam-Client-Version":D,...e?.headers},preflightContinue:!0,mode:e?.mode||"cors",body:e?.body!=null?e.body:void 0};let a;try{a=await fetch(t,r)}catch(n){const o=new u(`Network call failed (${r?.method.toUpperCase()} ${t})`);throw o.cause=n,f.error(o,t),o}let c,l;try{l=await a.text(),l&&(c=JSON.parse(l))}catch(n){let o=n;throw n instanceof SyntaxError&&(o=new g(a,c,`Response invalid. Expected JSON. Received: "${l}"`),o.cause=n),f.error(o),o}if(!a.ok){const n=new g(a,c,"Response was not OK");throw f.error(n),n}return c}const i=(t,e,r)=>({[t]:async function({headers:a={},baseUrl:c=O,apiRoot:l="/api/v3",pathParams:n={},queryParams:o={},requestBody:h}){const d=Object.entries(n).reduce((w,[x,C])=>w.replace(`{${x}}`,C),t),m=JSON.parse(JSON.stringify(o)),s=new URLSearchParams(m).toString(),S=c+l+d+(s&&`?${s}`),v={headers:a,method:e,body:JSON.stringify(h)};return y(S,v)}})[t];i("/chain/{chainId}/nonprofits","get");const M=i("/impact","get"),U=i("/chain/{chainId}/cumulativeImpact","get"),B=i("/selectNonprofit","post");i("/transaction","post"),i("/transaction/{transactionId}","put");const k=i("/cart","post"),J=E(i("/chain/findEligibleNonprofitsForCart","post")),W=i("/logs","post"),j=i("/experimentSession","post"),q=i("/subscriptions/updateSubscriptionNonprofit","post"),z=i("/subscriptions/findOrCreateSubscription","post"),I=i("/productDetailsPage","post"),$={errorTitle:"Beam encountered an error. Please try again.",retry:"Retry"},P=({error:t,retry:e})=>{let r=p``;if(t instanceof g){const a=JSON.stringify({status:t.response.status,statusText:t.response.statusText,url:t.response.url,body:t.body},null,4);r=p`
|
|
3
|
-
<p><b>Network Response:</b></p>
|
|
4
|
-
<p>${a}</p>
|
|
5
|
-
`}return t instanceof N&&(r=p`
|
|
6
|
-
<p><b>Missing Required Config Options:</b></p>
|
|
7
|
-
<p>${t.missingConfigKeyNames.join(", ")}</p>
|
|
8
|
-
`),p`<div class="beam-error" style="text-align: left">
|
|
9
|
-
<p>${$.errorTitle} ${e?p` <button type="reset" @click="${e}">${$.retry}</button>`:""}</p>
|
|
10
|
-
<br />
|
|
11
|
-
<details>
|
|
12
|
-
<div style="white-space: pre-wrap; font-family: monospace; line-height: 1;">
|
|
13
|
-
${r}
|
|
14
|
-
<p><b>Message:</b> ${t.message||p`<i>None</i>`}</p>
|
|
15
|
-
<p><b>Stack:</b> ${t.stack}</p>
|
|
16
|
-
</div>
|
|
17
|
-
</details>
|
|
18
|
-
<br />
|
|
19
|
-
<p>Help: <a href="https://www.beamimpact.com">www.beamimpact.com</a></p>
|
|
20
|
-
</div>`},H={loading:""},K=()=>p`<p class="beam-loading">${H.loading}</p>`,G=(t="",{fontFamily:e="inherit",fontStyle:r="inherit",fontSize:a="inherit",fontWeight:c="inherit",textTransform:l="none",textDecoration:n="none",marginTop:o="0",lineHeight:h="inherit",color:d="inherit",letterSpacing:m="normal"}={})=>{const s=t.startsWith("--beam-")?t:`--beam-${t}`;return{[`${s}-fontFamily`]:e,[`${s}-fontStyle`]:r,[`${s}-fontSize`]:a,[`${s}-fontWeight`]:c,[`${s}-textTransform`]:l,[`${s}-marginTop`]:o,[`${s}-lineHeight`]:h,[`${s}-color`]:d,[`${s}-letterSpacing`]:m,[`${s}-textDecoration`]:n}},V=(t="",{fontFamily:e="inherit",fontStyle:r="inherit",fontSize:a="inherit",fontWeight:c="inherit",textTransform:l="none",textDecoration:n="none",marginTop:o="0",lineHeight:h="inherit",color:d="inherit",letterSpacing:m="normal"}={})=>{const s=t.startsWith("--beam-")?t:`--beam-${t}`;return T(` font-family: var(${s}-fontFamily, ${e});
|
|
21
|
-
font-style: var(${s}-fontStyle, ${r});
|
|
22
|
-
font-size: var(${s}-fontSize, ${a});
|
|
23
|
-
font-weight: var(${s}-fontWeight, ${c});
|
|
24
|
-
text-transform: var(${s}-textTransform, ${l});
|
|
25
|
-
margin-top: var(${s}-marginTop, ${o});
|
|
26
|
-
line-height: var(${s}-lineHeight, ${h});
|
|
27
|
-
text-decoration: var(${s}-textDecoration, ${n});
|
|
28
|
-
color: var(${s}-color, ${d});
|
|
29
|
-
letter-spacing: var(${s}-letterSpacing, ${m});
|
|
30
|
-
`)},X=(t,e)=>{if(e.startsWith("{")&&!e.startsWith("{{"))try{const r=JSON.parse(e);return r[t]??r.en??e}catch{return f.error(new u("Failed to extract JSON translation from string"),e),e}return e},Q=t=>t.every(e=>e instanceof HTMLElement),Y=A.CART;async function b(t,e){const{apiKey:r,baseUrl:a}=t;try{await W({baseUrl:a||_,headers:{authorization:`Api-Key ${r}`},requestBody:{...e}})}catch(c){f.error("Failed to send log",c)}}var Z=Object.freeze({__proto__:null,sendLog:b});export{R as A,Y as B,K as _,Q as a,U as b,P as c,X as d,G as e,F as f,M as g,J as h,Z as i,z as j,q as k,I as l,B as m,i as n,k as o,j as p,L as q,y as r,b as s,V as u};
|
|
31
|
-
//# sourceMappingURL=index-CVHrQ1WC.esm.js.map
|