@beamimpact/web-sdk 1.57.4 → 1.58.0
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-Caoc1gRc.esm.js} +2 -2
- package/dist/chunks/{_share-dialog-dependencies-BvaXft1r.esm.js.map → _share-dialog-dependencies-Caoc1gRc.esm.js.map} +1 -1
- package/dist/chunks/{cart-DCezceUX.esm.d.ts → cart-DKQHSz5X.esm.d.ts} +1 -1
- package/dist/chunks/{css-card-grid-CiqEjkwR.esm.js → css-card-grid-tjA36yWj.esm.js} +2 -2
- package/dist/chunks/{css-card-grid-CiqEjkwR.esm.js.map → css-card-grid-tjA36yWj.esm.js.map} +1 -1
- package/dist/chunks/{handlebars-B_i-to-h.esm.js → handlebars-3tRO54kz.esm.js} +7 -7
- package/dist/chunks/{handlebars-B_i-to-h.esm.js.map → handlebars-3tRO54kz.esm.js.map} +1 -1
- package/dist/chunks/index-ADw_ucEx.esm.js +2 -0
- package/dist/chunks/index-ADw_ucEx.esm.js.map +1 -0
- package/dist/chunks/index-BF0X_60j.esm.js +32 -0
- package/dist/chunks/index-BF0X_60j.esm.js.map +1 -0
- package/dist/chunks/index-BxivRkBL.esm.js +2 -0
- package/dist/chunks/{index-Bt4Ob1Fi.esm.js.map → index-BxivRkBL.esm.js.map} +1 -1
- package/dist/chunks/{index-C6gns2ul.esm.d.ts → index-DGOC8m2r.esm.d.ts} +1 -1
- package/dist/chunks/{index-BOHlIBDq.esm.js → index-DtAcPGd4.esm.js} +4 -4
- package/dist/chunks/index-DtAcPGd4.esm.js.map +1 -0
- package/dist/chunks/index-E6IoMPQu.esm.js +32 -0
- package/dist/chunks/index-E6IoMPQu.esm.js.map +1 -0
- package/dist/chunks/index-M8hQ6GXf.esm.js +31 -0
- package/dist/chunks/index-M8hQ6GXf.esm.js.map +1 -0
- package/dist/chunks/{index-Di1IwSgk.esm.js → index-Yt9xXa7z.esm.js} +4 -4
- package/dist/chunks/index-Yt9xXa7z.esm.js.map +1 -0
- package/dist/chunks/{promo-pill-label-D-VXaB27.esm.js → promo-pill-label-DCBXltdj.esm.js} +2 -2
- package/dist/chunks/{promo-pill-label-D-VXaB27.esm.js.map → promo-pill-label-DCBXltdj.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-o8IBYAxH.esm.js → share-button-C1PRjoPw.esm.js} +2 -2
- package/dist/chunks/{share-button-o8IBYAxH.esm.js.map → share-button-C1PRjoPw.esm.js.map} +1 -1
- package/dist/chunks/{share-button-DFuEWa2h.esm.js → share-button-CNq5lDre.esm.js} +2 -2
- package/dist/chunks/{share-button-DFuEWa2h.esm.js.map → share-button-CNq5lDre.esm.js.map} +1 -1
- package/dist/chunks/statsig-DlszSNOf.esm.js +2 -0
- package/dist/chunks/statsig-DlszSNOf.esm.js.map +1 -0
- package/dist/chunks/{utils-C5hmbxa4.esm.js → utils-ly9wMwUO.esm.js} +2 -2
- package/dist/chunks/{utils-C5hmbxa4.esm.js.map → utils-ly9wMwUO.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 +3 -3
- package/dist/components/product-details-page.js +3 -3
- package/dist/components/redeem-transaction.esm.js +1 -1
- package/dist/components/redeem-transaction.js +1 -1
- package/dist/components/select-nonprofit.esm.js +22 -24
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +22 -24
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.esm.js +2 -2
- package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.js +2 -2
- package/dist/components/select-subscription-nonprofit.js.map +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 +4 -4
- package/dist/components/subscriber-select-nonprofit.esm.js.map +1 -1
- package/dist/components/subscriber-select-nonprofit.js +4 -4
- package/dist/components/subscriber-select-nonprofit.js.map +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.esm.js.map +1 -1
- package/dist/components/subscription-management.js +1 -1
- package/dist/components/subscription-management.js.map +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/promoManager.esm.js +1 -1
- package/dist/integrations/promoManager.js +1 -1
- package/dist/integrations/session.esm.js +1 -1
- package/dist/integrations/session.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.d.ts +7 -4
- package/dist/integrations/statsig.esm.js +14 -14
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +14 -14
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/integrations/utils.esm.js +1 -1
- package/dist/integrations/utils.js +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/shopify.esm.js +1 -1
- package/dist/react/shopify.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/dist/utils/beam-errors.esm.js +1 -1
- package/dist/utils/beam-errors.js +1 -1
- package/dist/utils/cart.esm.js +1 -1
- package/dist/utils/cart.js +1 -1
- package/dist/utils/clear-beam-storage.esm.js +1 -1
- package/dist/utils/clear-beam-storage.js +1 -1
- package/dist/utils/cookies.esm.js +1 -1
- package/dist/utils/cookies.js +1 -1
- package/dist/utils/events.esm.js +1 -1
- package/dist/utils/events.js +1 -1
- package/dist/utils/local-storage.esm.js +1 -1
- package/dist/utils/local-storage.js +1 -1
- package/dist/utils/logger.esm.js +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/makeApiKeyHeader.esm.js +1 -1
- package/dist/utils/makeApiKeyHeader.js +1 -1
- package/dist/utils/memoize-last.esm.js +1 -1
- package/dist/utils/memoize-last.js +1 -1
- package/dist/utils/network-listeners.esm.js +1 -1
- package/dist/utils/network-listeners.js +1 -1
- package/dist/utils/promoManager.esm.js +1 -1
- package/dist/utils/promoManager.js +1 -1
- package/dist/utils/remote-session.esm.js +1 -1
- package/dist/utils/remote-session.js +1 -1
- package/dist/utils/wait-for-element.esm.js +1 -1
- package/dist/utils/wait-for-element.js +1 -1
- package/package.json +5 -4
- package/dist/chunks/index-726Vfz5u.esm.js +0 -32
- package/dist/chunks/index-726Vfz5u.esm.js.map +0 -1
- package/dist/chunks/index-B7OkmoYI.esm.js +0 -2
- package/dist/chunks/index-B7OkmoYI.esm.js.map +0 -1
- package/dist/chunks/index-BOHlIBDq.esm.js.map +0 -1
- package/dist/chunks/index-Bc_hD09J.esm.js +0 -32
- package/dist/chunks/index-Bc_hD09J.esm.js.map +0 -1
- package/dist/chunks/index-Bt4Ob1Fi.esm.js +0 -2
- package/dist/chunks/index-CVHrQ1WC.esm.js +0 -31
- package/dist/chunks/index-CVHrQ1WC.esm.js.map +0 -1
- package/dist/chunks/index-Di1IwSgk.esm.js.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import{B as
|
|
2
|
-
[${
|
|
3
|
-
[${
|
|
4
|
-
[${
|
|
5
|
-
[${
|
|
6
|
-
[${
|
|
7
|
-
[${
|
|
8
|
-
[${
|
|
9
|
-
[${
|
|
10
|
-
[${
|
|
11
|
-
[${
|
|
12
|
-
[${
|
|
13
|
-
[${
|
|
1
|
+
import{s as W}from"../chunks/statsig-DlszSNOf.esm.js";import{B as V,v as F,p as q}from"../chunks/index-M8hQ6GXf.esm.js";import{l as m,n as y,s as j,g as T,o as H,q as J,r as Q,t as X,u as Y,B as Z,v as tt}from"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/handlebars-3tRO54kz.esm.js";import"../chunks/lit-BEag9MFp.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";var C=t=>{throw TypeError(t)},S=(t,e,i)=>e.has(t)||C("Cannot "+i),d=(t,e,i)=>(S(t,e,"read from private field"),i?i.call(t):e.get(t)),u=(t,e,i)=>e.has(t)?C("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,i),I=(t,e,i,s)=>(S(t,e,"write to private field"),e.set(t,i),i),r=(t,e,i)=>(S(t,e,"access private method"),i),g,b,p,a,A,w,R,B,O,N,E,L,v,f,x,D,M;const $=J.STATSIG_STABLE_ID,et="STATSIG_LOCAL_STORAGE_STABLE_ID",it=3e3,st=F,h="data-beam-visibility",at="beam-sync-visibility",l={STATSIG_INIT:"statsig_init",CART_CREATED:"cart_created",ORDER_CREATED:"order_created",BEAM_SELECTION:"beam_selection",SESSION_RETURN:"session_return"},nt={[l.STATSIG_INIT]:1,[l.CART_CREATED]:1,[l.ORDER_CREATED]:1,[l.BEAM_SELECTION]:1,[l.SESSION_RETURN]:1},ot="beam_ssid",rt="beam_return_origin";function ht(t){return typeof t=="boolean"?String(t):t}function k(t){return Object.entries(t).reduce((e,[i,s])=>(s!=null&&(e[i]=String(s)),e),{})}class lt{constructor(e){u(this,a),this.name="statsig",this.experiments={shouldShowBeam:!1,isLoggingEnabled:!0,sessionReturnOrigin:null},u(this,g),u(this,b),u(this,p),u(this,E,[]),this.logEvent=(i,s,n={})=>{if(!this.statsig){d(this,E).push([i,s,n]);return}const o=r(this,a,v).call(this,i);if(this.experiments.isLoggingEnabled){const c=this.beforeLogEvent?this.beforeLogEvent(i,s,n):n;this.statsig.logEvent({eventName:i,value:ht(s),metadata:k({...c,...o})})}m.debug(i,s,{...n,...o})},this.statsigApiKey=e.statsigApiKey,this.beforeLogEvent=e.beforeLogEvent}async init(e){const{sessionReturnOrigin:i}=r(this,a,w).call(this);I(this,g,e),r(this,a,B).call(this),r(this,a,f).call(this,"hide"),i&&(this.sessionReturnOrigin=i);const s=document.createElement("style");s.innerHTML=`
|
|
2
|
+
[${h}="hide"] beam-select-nonprofit,
|
|
3
|
+
[${h}="hide"] beam-post-purchase,
|
|
4
|
+
[${h}="hide"] beam-redeem-transaction,
|
|
5
|
+
[${h}="hide"] beam-impact-overview,
|
|
6
|
+
[${h}="hide"] beam-community-impact,
|
|
7
|
+
[${h}="hide"] beam-cumulative-impact,
|
|
8
|
+
[${h}="hide"] beam-product-details-page,
|
|
9
|
+
[${h}="hide"] beam-subscription-management,
|
|
10
|
+
[${h}="hide"] beam-subscription-impact,
|
|
11
|
+
[${h}="hide"] beam-select-subscription-nonprofit,
|
|
12
|
+
[${h}="hide"] beam-social-share,
|
|
13
|
+
[${h}="hide"] .${at} {
|
|
14
14
|
display: none;
|
|
15
15
|
}
|
|
16
|
-
`,document.head.append(s)
|
|
16
|
+
`,document.head.append(s);const n=await r(this,a,N).call(this);if(this.stableId=n.getContext().stableID??void 0,!this.stableId)throw new y("Statsig failed to assign stableId",{name:"StatsigInitError"});j({remoteSessionId:this.stableId,apiKey:e.apiKey}),I(this,b,T(V)),H({name:$,value:this.stableId,path:"/",domain:e.domain});const o=n.getLayer("beam_trial_layer");this.experiments={shouldShowBeam:o.get("show_beam",!1),isLoggingEnabled:o.get("enable_logging",!0),...this.sessionReturnOrigin!=null&&{sessionReturnOrigin:this.sessionReturnOrigin}},r(this,a,L).call(this),await Promise.all([r(this,a,x).call(this),r(this,a,M).call(this)]),r(this,a,f).call(this,this.experiments.shouldShowBeam?"show":"hide"),r(this,a,A).call(this),r(this,a,O).call(this),m.debug("Statsig Experiment Assignments",this.experiments)}}g=new WeakMap,b=new WeakMap,p=new WeakMap,a=new WeakSet,A=function(){try{const t=new Q({showBeam:this.experiments.shouldShowBeam,stableId:this.stableId});window.dispatchEvent(t)}catch(t){m.error("[BeamStatsigInitializedEvent] Failed to dispatch event:",t)}},w=function(){const t=new URLSearchParams(window.location.search),e=t.get(ot),i=t.get(rt);return{stableId:e,sessionReturnOrigin:i==="cart_abandon"||i==="checkout_abandon"?i:null}},R=function(t){if(t)return t;const e=d(this,g)?.apiKey,i=T($)||(e?tt({apiKey:e}):void 0);if(i)return i;try{return window.localStorage.getItem(et)??void 0}catch(s){m.debug("[StatsigPlugin] Could not read legacy stable ID from local storage",s);return}},B=function(){window.addEventListener(X.eventName,e=>{const i=e,{itemCount:s,cartId:n,subtotal:o,currencyCode:c}=i.detail;this.logEvent(l.CART_CREATED,!0,{itemCount:s,cartId:n,subtotal:o,currencyCode:c})}),window.addEventListener(Y.eventName,e=>{const i=e,{orderId:s,cartTotal:n,currencyCode:o,cartId:c,selectionId:K,beamCartId:_,storeId:P,remoteSessionId:G,transactionNonprofitId:U,orderProcessedAt:z}=i.detail;this.logEvent(l.ORDER_CREATED,n,{orderId:s,cartTotal:n,currencyCode:o,hasCart:!!_||!!d(this,b),selectionId:K,storeId:P,cartId:c,beamCartId:_,remoteSessionId:G,transactionNonprofitId:U,orderProcessedAt:z})});let t;window.addEventListener(Z.eventName,e=>{const i=e,{selectedNonprofitId:s,selectionId:n,source:o}=i.detail;s!==t&&(this.logEvent(l.BEAM_SELECTION,!0,{nonprofitId:s,widget:o,selectionId:n}),t=s)})},O=function(){const t=()=>{this.statsig?.flush()};window.addEventListener("pagehide",t),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&t()})},N=async function(){const{stableId:t,sessionReturnOrigin:e}=r(this,a,w).call(this);t&&e&&this.logEvent(l.SESSION_RETURN,e,{session_return_origin:e,stable_id:t});const i=r(this,a,R).call(this,t),s=i?{customIDs:{stableID:i}}:{},n={loggingIntervalMs:1e3,loggingBufferMaxSize:2,includeCurrentPageUrlWithEvents:!1};I(this,p,Date.now());const o=new W.StatsigClient(this.statsigApiKey,s,n);this.statsig=o;try{window.localStorage.getItem("beam_debug")==="true"&&(window.beamStatsigClient=o)}catch{}try{await o.initializeAsync({timeoutMs:it})}catch(c){throw new y("Failed to initialize Statsig",{name:"StatsigInitError",cause:c})}return o},E=new WeakMap,L=function(){for(;d(this,E).length>0;){const t=d(this,E).shift();t&&this.logEvent(...t)}},v=function(t){return{integrationVersion:st,eventVersion:nt[t],withBeam:this.experiments.shouldShowBeam,domain:window.location.hostname,path:window.location.pathname,page:window.location.href}},f=function(t){document.body.setAttribute(h,t)},x=async function(){if(this.statsig){if(!r(this,a,D).call(this,this.statsig)){m.debug("[StatsigPlugin] statsig_init already sent this Statsig session, skipping");return}try{this.statsig.logEvent({eventName:l.STATSIG_INIT,value:String(this.experiments.shouldShowBeam),metadata:k({show_beam:this.experiments.shouldShowBeam,...r(this,a,v).call(this,l.STATSIG_INIT)})}),await this.statsig.flush()}catch(t){m.debug("[StatsigPlugin] Failed to log exposure to Statsig",t)}}},D=function(t){if(d(this,p)==null)return!0;try{return t.getContext().session.data.startTime>=d(this,p)}catch{return!0}},M=async function(){try{return await q({baseUrl:d(this,g)?.baseUrl,keepalive:!0,headers:{authorization:`Api-Key ${d(this,g)?.apiKey}`},requestBody:{remoteSessionId:this.stableId,storeId:d(this,g)?.storeId,experiments:{showBeam:this.experiments.shouldShowBeam,...this.sessionReturnOrigin!=null&&{events:[{eventName:"session_return",eventValue:this.sessionReturnOrigin,timestamp:new Date().toISOString()}]}}}})}catch(t){m.debug("[StatsigPlugin] Failed to register experiment session with Beam",t);return}};export{lt as StatsigPlugin};
|
|
17
17
|
//# sourceMappingURL=statsig.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statsig.esm.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_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.esm.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { StatsigClient, StatsigOptions, StatsigUser } from \"@statsig/js-client\";\nimport { 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 { getRemoteSession, saveRemoteSession } from \"../../utils/remote-session\";\nimport { version as pkgVersion } from \"../../../package.json\";\n\ntype beforeLogEventFn = (eventName: string, eventValue: any, metadata: Record<string, any>) => Record<string, any>;\n\ntype BeamEventValue = string | number | boolean;\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/javascript-sdk\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n beforeLogEvent?: beforeLogEventFn;\n};\n\ndeclare global {\n interface Window {\n /** Set only when localStorage `beam_debug` is \"true\", so QA can reach the client from the console */\n beamStatsigClient?: StatsigClient;\n }\n}\n\nconst STATSIG_STABLE_ID_COOKIE = BEAM_COOKIE_NAMES.STATSIG_STABLE_ID;\n\n// Where the deprecated statsig-js client kept the stable ID. The new client never reads it, so we do,\n// otherwise returning shoppers would get a new ID and could switch groups mid-test\nconst LEGACY_STATSIG_STABLE_ID_STORAGE_KEY = \"STATSIG_LOCAL_STORAGE_STABLE_ID\";\n\n// Past this, init falls back to cached values rather than blocking render\nconst STATSIG_INIT_TIMEOUT_MS = 3000;\n\n// Web SDK version, stamped on every event\nconst INTEGRATION_VERSION = pkgVersion;\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} as const;\n\ntype BeamAbTestEventName = (typeof BEAM_AB_TEST_EVENTS)[keyof typeof BEAM_AB_TEST_EVENTS];\n\n// Metadata schema version per event. Bump an event's version when you add a field to it\nconst BEAM_AB_TEST_EVENT_VERSIONS: Record<BeamAbTestEventName, number> = {\n [BEAM_AB_TEST_EVENTS.STATSIG_INIT]: 1,\n [BEAM_AB_TEST_EVENTS.CART_CREATED]: 1,\n [BEAM_AB_TEST_EVENTS.ORDER_CREATED]: 1,\n [BEAM_AB_TEST_EVENTS.BEAM_SELECTION]: 1,\n [BEAM_AB_TEST_EVENTS.SESSION_RETURN]: 1,\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// Statsig event values must be string | number\nfunction toStatsigEventValue(value: BeamEventValue): string | number {\n return typeof value === \"boolean\" ? String(value) : value;\n}\n\n// Statsig metadata must be string values. Nullish values are dropped so they don't arrive as \"null\"\nfunction toStatsigMetadata(metadata: Record<string, any>): Record<string, string> {\n return Object.entries(metadata).reduce<Record<string, string>>((acc, [key, value]) => {\n if (value != null) {\n acc[key] = String(value);\n }\n return acc;\n }, {});\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?: StatsigClient;\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 // When this page load created the Statsig client, see #isNewStatsigSession\n #clientCreatedAt?: number;\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 const client = await this.#initializeStatsig();\n this.stableId = client.getContext().stableID ?? undefined;\n if (!this.stableId) {\n throw new BeamError(\"Statsig failed to assign stableId\", { name: \"StatsigInitError\" });\n }\n\n // Save Statsig ID in localStorage for linking to carts later\n saveRemoteSession({ remoteSessionId: this.stableId, apiKey: config.apiKey });\n\n // Save initial value of cart cookie so that post-purchase events can be filtered by if they had a cart or not\n this.#beamCartCookie = getCookieValue(BEAM_CART_COOKIE_NAME);\n\n // Cache ID in cookie to preserve ID across subdomains\n setCookieValue({\n name: STATSIG_STABLE_ID_COOKIE,\n value: this.stableId,\n path: \"/\",\n domain: config.domain,\n });\n\n // Reading the layer logs Statsig's own exposure. `statsig_init` is a separate Beam event\n const layer = client.getLayer(\"beam_trial_layer\");\n this.experiments = {\n shouldShowBeam: layer.get(\"show_beam\", false /* default to hide */) as boolean,\n isLoggingEnabled: layer.get(\"enable_logging\", true) as boolean,\n ...(this.sessionReturnOrigin != null && { sessionReturnOrigin: this.sessionReturnOrigin }),\n };\n\n // Must run after `this.experiments` is set, or queued events get stamped with the default group\n this.#flushEventQueue();\n\n await Promise.all([this.#logExposure(), 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 // Events are buffered, so send them before the shopper leaves the page\n this.#attachFlushHandlers();\n\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 /**\n * Stable ID to reuse, in priority order:\n * 1. beam_ssid URL param (cross-domain hand-off)\n * 2. Beam stable ID cookie (survives subdomain hops)\n * 3. Beam's remote session in localStorage\n * 4. The ID the deprecated statsig-js client left behind\n * Returns undefined to let Statsig create a new one\n */\n #getExistingStableId(stableIdFromUrl: string | null): string | undefined {\n if (stableIdFromUrl) {\n return stableIdFromUrl;\n }\n\n const apiKey = this.#beamConfig?.apiKey;\n const stored = getCookieValue(STATSIG_STABLE_ID_COOKIE) || (apiKey ? getRemoteSession({ apiKey }) : undefined);\n if (stored) {\n return stored;\n }\n\n try {\n return window.localStorage.getItem(LEGACY_STATSIG_STABLE_ID_STORAGE_KEY) ?? undefined;\n } catch (err) {\n // Storage can be unavailable (private mode, blocked third-party contexts)\n logger.debug(\"[StatsigPlugin] Could not read legacy stable ID from local storage\", err);\n return undefined;\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 #attachFlushHandlers() {\n const flush = () => {\n void this.statsig?.flush();\n };\n window.addEventListener(\"pagehide\", flush);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") {\n flush();\n }\n });\n }\n\n // https://docs.statsig.com/client/javascript-sdk#statsig-options\n async #initializeStatsig(): Promise<StatsigClient> {\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 // With no customIDs, Statsig generates the stable ID itself\n const overrideStableId = this.#getExistingStableId(stableId);\n const user: StatsigUser = overrideStableId ? { customIDs: { stableID: overrideStableId } } : {};\n\n const options: StatsigOptions = {\n loggingIntervalMs: 1000,\n loggingBufferMaxSize: 2,\n includeCurrentPageUrlWithEvents: false,\n };\n\n // Must be set before the client is created, see #isNewStatsigSession\n this.#clientCreatedAt = Date.now();\n const client = new StatsigClient(this.statsigApiKey, user, options);\n this.statsig = client;\n\n try {\n if (window.localStorage.getItem(\"beam_debug\") === \"true\") {\n window.beamStatsigClient = client;\n }\n } catch {\n // Storage unavailable, the debug handle is optional\n }\n\n try {\n await client.initializeAsync({ timeoutMs: STATSIG_INIT_TIMEOUT_MS });\n } catch (err) {\n throw new BeamError(\"Failed to initialize Statsig\", { name: \"StatsigInitError\", cause: err });\n }\n\n return client;\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 // Stamped on every event. eventVersion is undefined (and dropped) for partner custom events\n #baseEventMetadata(eventName: string): Record<string, any> {\n return {\n integrationVersion: INTEGRATION_VERSION,\n eventVersion: BEAM_AB_TEST_EVENT_VERSIONS[eventName as BeamAbTestEventName],\n withBeam: this.experiments.shouldShowBeam,\n domain: window.location.hostname,\n path: window.location.pathname,\n page: window.location.href,\n };\n }\n\n // Public API: partners can log their own event names, see README.md\n logEvent = (name: string, value: BeamEventValue, metadata: Record<string, any> = {}) => {\n if (!this.statsig) {\n this.#eventQueue.push([name, value, metadata]);\n return;\n }\n const baseMetadata = this.#baseEventMetadata(name);\n if (this.experiments.isLoggingEnabled) {\n const metadataWithOverrides = this.beforeLogEvent ? this.beforeLogEvent(name, value, metadata) : metadata;\n this.statsig.logEvent({\n eventName: name,\n value: toStatsigEventValue(value),\n metadata: toStatsigMetadata({ ...metadataWithOverrides, ...baseMetadata }),\n });\n }\n logger.debug(name, value, { ...metadata, ...baseMetadata });\n };\n\n #setBeamVisibilityValue(value: \"show\" | \"hide\") {\n document.body.setAttribute(BEAM_VISIBILITY_DATA_ATTRIBUTE, value);\n }\n\n /**\n * Logs `statsig_init` once per Statsig session, so its page is the session's landing page.\n * Build metrics on it as unique users, since a returning shopper gets a new session.\n * Ignores `isLoggingEnabled` on purpose: an experiment with no exposures can't be read\n */\n async #logExposure() {\n if (!this.statsig) {\n return;\n }\n if (!this.#isNewStatsigSession(this.statsig)) {\n logger.debug(\"[StatsigPlugin] statsig_init already sent this Statsig session, skipping\");\n return;\n }\n try {\n this.statsig.logEvent({\n eventName: BEAM_AB_TEST_EVENTS.STATSIG_INIT,\n value: String(this.experiments.shouldShowBeam),\n metadata: toStatsigMetadata({\n show_beam: this.experiments.shouldShowBeam,\n ...this.#baseEventMetadata(BEAM_AB_TEST_EVENTS.STATSIG_INIT),\n }),\n });\n // Send now so a shopper who bounces is still counted\n await this.statsig.flush();\n } catch (err) {\n // TODO SDK-2390: log failures to Beam's error tracking API\n // The client retries internally, so this doesn't fail SDK setup\n logger.debug(\"[StatsigPlugin] Failed to log exposure to Statsig\", err);\n }\n }\n\n /**\n * Statsig starts a new session after 30 minutes idle or 4 hours total. A session reused from\n * storage started before this page created the client; a new one started after.\n * Returns true when unsure, since an extra event is better than a missing one.\n * Server-side dedupe replaces this in M5\n */\n #isNewStatsigSession(client: StatsigClient): boolean {\n if (this.#clientCreatedAt == null) {\n return true;\n }\n try {\n return client.getContext().session.data.startTime >= this.#clientCreatedAt;\n } catch {\n return true;\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: 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":["B","n","_","t","c","i","_beamConfig","_beamCartCookie","_clientCreatedAt","_StatsigPlugin_instances","emitBeamStatsigInitializedEvent_fn","getUrlParams_fn","getExistingStableId_fn","attachEventListeners_fn","attachFlushHandlers_fn","initializeStatsig_fn","_eventQueue","flushEventQueue_fn","baseEventMetadata_fn","setBeamVisibilityValue_fn","logExposure_fn","isNewStatsigSession_fn","registerExperimentWithBeam_fn","STATSIG_STABLE_ID_COOKIE","BEAM_COOKIE_NAMES","LEGACY_STATSIG_STABLE_ID_STORAGE_KEY","STATSIG_INIT_TIMEOUT_MS","INTEGRATION_VERSION","pkgVersion","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","BEAM_AB_TEST_EVENT_VERSIONS","BEAM_SSID_PARAM","BEAM_RETURN_ORIGIN_PARAM","toStatsigEventValue","value","toStatsigMetadata","metadata","acc","key","StatsigPlugin","options","__privateAdd","name","__privateGet","baseMetadata","__privateMethod","metadataWithOverrides","logger","config","sessionReturnOrigin","__privateSet","beamVisibilityStylesheet","client","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","layer","event","BeamStatsigInitializedEvent","error","params","stableId","originParam","stableIdFromUrl","apiKey","stored","getRemoteSession","err","BeamCartCreatedEvent","_event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","selectionId","beamCartId","storeId","remoteSessionId","transactionNonprofitId","orderProcessedAt","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","source","flush","overrideStableId","user","StatsigClient","eventParams","eventName","postExperimentSession"],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import{B as
|
|
2
|
-
[${
|
|
3
|
-
[${
|
|
4
|
-
[${
|
|
5
|
-
[${
|
|
6
|
-
[${
|
|
7
|
-
[${
|
|
8
|
-
[${
|
|
9
|
-
[${
|
|
10
|
-
[${
|
|
11
|
-
[${
|
|
12
|
-
[${
|
|
13
|
-
[${
|
|
1
|
+
import{s as W}from"../chunks/statsig-DlszSNOf.esm.js";import{B as V,v as F,p as q}from"../chunks/index-M8hQ6GXf.esm.js";import{l as m,n as y,s as j,g as T,o as H,q as J,r as Q,t as X,u as Y,B as Z,v as tt}from"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/handlebars-3tRO54kz.esm.js";import"../chunks/lit-BEag9MFp.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";var C=t=>{throw TypeError(t)},S=(t,e,i)=>e.has(t)||C("Cannot "+i),d=(t,e,i)=>(S(t,e,"read from private field"),i?i.call(t):e.get(t)),u=(t,e,i)=>e.has(t)?C("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,i),I=(t,e,i,s)=>(S(t,e,"write to private field"),e.set(t,i),i),r=(t,e,i)=>(S(t,e,"access private method"),i),g,b,p,a,A,w,R,B,O,N,E,L,v,f,x,D,M;const $=J.STATSIG_STABLE_ID,et="STATSIG_LOCAL_STORAGE_STABLE_ID",it=3e3,st=F,h="data-beam-visibility",at="beam-sync-visibility",l={STATSIG_INIT:"statsig_init",CART_CREATED:"cart_created",ORDER_CREATED:"order_created",BEAM_SELECTION:"beam_selection",SESSION_RETURN:"session_return"},nt={[l.STATSIG_INIT]:1,[l.CART_CREATED]:1,[l.ORDER_CREATED]:1,[l.BEAM_SELECTION]:1,[l.SESSION_RETURN]:1},ot="beam_ssid",rt="beam_return_origin";function ht(t){return typeof t=="boolean"?String(t):t}function k(t){return Object.entries(t).reduce((e,[i,s])=>(s!=null&&(e[i]=String(s)),e),{})}class lt{constructor(e){u(this,a),this.name="statsig",this.experiments={shouldShowBeam:!1,isLoggingEnabled:!0,sessionReturnOrigin:null},u(this,g),u(this,b),u(this,p),u(this,E,[]),this.logEvent=(i,s,n={})=>{if(!this.statsig){d(this,E).push([i,s,n]);return}const o=r(this,a,v).call(this,i);if(this.experiments.isLoggingEnabled){const c=this.beforeLogEvent?this.beforeLogEvent(i,s,n):n;this.statsig.logEvent({eventName:i,value:ht(s),metadata:k({...c,...o})})}m.debug(i,s,{...n,...o})},this.statsigApiKey=e.statsigApiKey,this.beforeLogEvent=e.beforeLogEvent}async init(e){const{sessionReturnOrigin:i}=r(this,a,w).call(this);I(this,g,e),r(this,a,B).call(this),r(this,a,f).call(this,"hide"),i&&(this.sessionReturnOrigin=i);const s=document.createElement("style");s.innerHTML=`
|
|
2
|
+
[${h}="hide"] beam-select-nonprofit,
|
|
3
|
+
[${h}="hide"] beam-post-purchase,
|
|
4
|
+
[${h}="hide"] beam-redeem-transaction,
|
|
5
|
+
[${h}="hide"] beam-impact-overview,
|
|
6
|
+
[${h}="hide"] beam-community-impact,
|
|
7
|
+
[${h}="hide"] beam-cumulative-impact,
|
|
8
|
+
[${h}="hide"] beam-product-details-page,
|
|
9
|
+
[${h}="hide"] beam-subscription-management,
|
|
10
|
+
[${h}="hide"] beam-subscription-impact,
|
|
11
|
+
[${h}="hide"] beam-select-subscription-nonprofit,
|
|
12
|
+
[${h}="hide"] beam-social-share,
|
|
13
|
+
[${h}="hide"] .${at} {
|
|
14
14
|
display: none;
|
|
15
15
|
}
|
|
16
|
-
`,document.head.append(s)
|
|
16
|
+
`,document.head.append(s);const n=await r(this,a,N).call(this);if(this.stableId=n.getContext().stableID??void 0,!this.stableId)throw new y("Statsig failed to assign stableId",{name:"StatsigInitError"});j({remoteSessionId:this.stableId,apiKey:e.apiKey}),I(this,b,T(V)),H({name:$,value:this.stableId,path:"/",domain:e.domain});const o=n.getLayer("beam_trial_layer");this.experiments={shouldShowBeam:o.get("show_beam",!1),isLoggingEnabled:o.get("enable_logging",!0),...this.sessionReturnOrigin!=null&&{sessionReturnOrigin:this.sessionReturnOrigin}},r(this,a,L).call(this),await Promise.all([r(this,a,x).call(this),r(this,a,M).call(this)]),r(this,a,f).call(this,this.experiments.shouldShowBeam?"show":"hide"),r(this,a,A).call(this),r(this,a,O).call(this),m.debug("Statsig Experiment Assignments",this.experiments)}}g=new WeakMap,b=new WeakMap,p=new WeakMap,a=new WeakSet,A=function(){try{const t=new Q({showBeam:this.experiments.shouldShowBeam,stableId:this.stableId});window.dispatchEvent(t)}catch(t){m.error("[BeamStatsigInitializedEvent] Failed to dispatch event:",t)}},w=function(){const t=new URLSearchParams(window.location.search),e=t.get(ot),i=t.get(rt);return{stableId:e,sessionReturnOrigin:i==="cart_abandon"||i==="checkout_abandon"?i:null}},R=function(t){if(t)return t;const e=d(this,g)?.apiKey,i=T($)||(e?tt({apiKey:e}):void 0);if(i)return i;try{return window.localStorage.getItem(et)??void 0}catch(s){m.debug("[StatsigPlugin] Could not read legacy stable ID from local storage",s);return}},B=function(){window.addEventListener(X.eventName,e=>{const i=e,{itemCount:s,cartId:n,subtotal:o,currencyCode:c}=i.detail;this.logEvent(l.CART_CREATED,!0,{itemCount:s,cartId:n,subtotal:o,currencyCode:c})}),window.addEventListener(Y.eventName,e=>{const i=e,{orderId:s,cartTotal:n,currencyCode:o,cartId:c,selectionId:K,beamCartId:_,storeId:P,remoteSessionId:G,transactionNonprofitId:U,orderProcessedAt:z}=i.detail;this.logEvent(l.ORDER_CREATED,n,{orderId:s,cartTotal:n,currencyCode:o,hasCart:!!_||!!d(this,b),selectionId:K,storeId:P,cartId:c,beamCartId:_,remoteSessionId:G,transactionNonprofitId:U,orderProcessedAt:z})});let t;window.addEventListener(Z.eventName,e=>{const i=e,{selectedNonprofitId:s,selectionId:n,source:o}=i.detail;s!==t&&(this.logEvent(l.BEAM_SELECTION,!0,{nonprofitId:s,widget:o,selectionId:n}),t=s)})},O=function(){const t=()=>{this.statsig?.flush()};window.addEventListener("pagehide",t),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&t()})},N=async function(){const{stableId:t,sessionReturnOrigin:e}=r(this,a,w).call(this);t&&e&&this.logEvent(l.SESSION_RETURN,e,{session_return_origin:e,stable_id:t});const i=r(this,a,R).call(this,t),s=i?{customIDs:{stableID:i}}:{},n={loggingIntervalMs:1e3,loggingBufferMaxSize:2,includeCurrentPageUrlWithEvents:!1};I(this,p,Date.now());const o=new W.StatsigClient(this.statsigApiKey,s,n);this.statsig=o;try{window.localStorage.getItem("beam_debug")==="true"&&(window.beamStatsigClient=o)}catch{}try{await o.initializeAsync({timeoutMs:it})}catch(c){throw new y("Failed to initialize Statsig",{name:"StatsigInitError",cause:c})}return o},E=new WeakMap,L=function(){for(;d(this,E).length>0;){const t=d(this,E).shift();t&&this.logEvent(...t)}},v=function(t){return{integrationVersion:st,eventVersion:nt[t],withBeam:this.experiments.shouldShowBeam,domain:window.location.hostname,path:window.location.pathname,page:window.location.href}},f=function(t){document.body.setAttribute(h,t)},x=async function(){if(this.statsig){if(!r(this,a,D).call(this,this.statsig)){m.debug("[StatsigPlugin] statsig_init already sent this Statsig session, skipping");return}try{this.statsig.logEvent({eventName:l.STATSIG_INIT,value:String(this.experiments.shouldShowBeam),metadata:k({show_beam:this.experiments.shouldShowBeam,...r(this,a,v).call(this,l.STATSIG_INIT)})}),await this.statsig.flush()}catch(t){m.debug("[StatsigPlugin] Failed to log exposure to Statsig",t)}}},D=function(t){if(d(this,p)==null)return!0;try{return t.getContext().session.data.startTime>=d(this,p)}catch{return!0}},M=async function(){try{return await q({baseUrl:d(this,g)?.baseUrl,keepalive:!0,headers:{authorization:`Api-Key ${d(this,g)?.apiKey}`},requestBody:{remoteSessionId:this.stableId,storeId:d(this,g)?.storeId,experiments:{showBeam:this.experiments.shouldShowBeam,...this.sessionReturnOrigin!=null&&{events:[{eventName:"session_return",eventValue:this.sessionReturnOrigin,timestamp:new Date().toISOString()}]}}}})}catch(t){m.debug("[StatsigPlugin] Failed to register experiment session with Beam",t);return}};export{lt as StatsigPlugin};
|
|
17
17
|
//# sourceMappingURL=statsig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statsig.js","sources":["../../src/integrations/statsig/plugin.ts"],"sourcesContent":["import { postExperimentSession } from \"../../api-sdk/v3/routes\";\nimport { BEAM_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 { StatsigClient, StatsigOptions, StatsigUser } from \"@statsig/js-client\";\nimport { 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 { getRemoteSession, saveRemoteSession } from \"../../utils/remote-session\";\nimport { version as pkgVersion } from \"../../../package.json\";\n\ntype beforeLogEventFn = (eventName: string, eventValue: any, metadata: Record<string, any>) => Record<string, any>;\n\ntype BeamEventValue = string | number | boolean;\n\n/**\n * StatSig Docs: https://docs.statsig.com/client/javascript-sdk\n */\ntype StatsigPluginOptions = {\n statsigApiKey: string;\n beforeLogEvent?: beforeLogEventFn;\n};\n\ndeclare global {\n interface Window {\n /** Set only when localStorage `beam_debug` is \"true\", so QA can reach the client from the console */\n beamStatsigClient?: StatsigClient;\n }\n}\n\nconst STATSIG_STABLE_ID_COOKIE = BEAM_COOKIE_NAMES.STATSIG_STABLE_ID;\n\n// Where the deprecated statsig-js client kept the stable ID. The new client never reads it, so we do,\n// otherwise returning shoppers would get a new ID and could switch groups mid-test\nconst LEGACY_STATSIG_STABLE_ID_STORAGE_KEY = \"STATSIG_LOCAL_STORAGE_STABLE_ID\";\n\n// Past this, init falls back to cached values rather than blocking render\nconst STATSIG_INIT_TIMEOUT_MS = 3000;\n\n// Web SDK version, stamped on every event\nconst INTEGRATION_VERSION = pkgVersion;\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} as const;\n\ntype BeamAbTestEventName = (typeof BEAM_AB_TEST_EVENTS)[keyof typeof BEAM_AB_TEST_EVENTS];\n\n// Metadata schema version per event. Bump an event's version when you add a field to it\nconst BEAM_AB_TEST_EVENT_VERSIONS: Record<BeamAbTestEventName, number> = {\n [BEAM_AB_TEST_EVENTS.STATSIG_INIT]: 1,\n [BEAM_AB_TEST_EVENTS.CART_CREATED]: 1,\n [BEAM_AB_TEST_EVENTS.ORDER_CREATED]: 1,\n [BEAM_AB_TEST_EVENTS.BEAM_SELECTION]: 1,\n [BEAM_AB_TEST_EVENTS.SESSION_RETURN]: 1,\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// Statsig event values must be string | number\nfunction toStatsigEventValue(value: BeamEventValue): string | number {\n return typeof value === \"boolean\" ? String(value) : value;\n}\n\n// Statsig metadata must be string values. Nullish values are dropped so they don't arrive as \"null\"\nfunction toStatsigMetadata(metadata: Record<string, any>): Record<string, string> {\n return Object.entries(metadata).reduce<Record<string, string>>((acc, [key, value]) => {\n if (value != null) {\n acc[key] = String(value);\n }\n return acc;\n }, {});\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?: StatsigClient;\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 // When this page load created the Statsig client, see #isNewStatsigSession\n #clientCreatedAt?: number;\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 const client = await this.#initializeStatsig();\n this.stableId = client.getContext().stableID ?? undefined;\n if (!this.stableId) {\n throw new BeamError(\"Statsig failed to assign stableId\", { name: \"StatsigInitError\" });\n }\n\n // Save Statsig ID in localStorage for linking to carts later\n saveRemoteSession({ remoteSessionId: this.stableId, apiKey: config.apiKey });\n\n // Save initial value of cart cookie so that post-purchase events can be filtered by if they had a cart or not\n this.#beamCartCookie = getCookieValue(BEAM_CART_COOKIE_NAME);\n\n // Cache ID in cookie to preserve ID across subdomains\n setCookieValue({\n name: STATSIG_STABLE_ID_COOKIE,\n value: this.stableId,\n path: \"/\",\n domain: config.domain,\n });\n\n // Reading the layer logs Statsig's own exposure. `statsig_init` is a separate Beam event\n const layer = client.getLayer(\"beam_trial_layer\");\n this.experiments = {\n shouldShowBeam: layer.get(\"show_beam\", false /* default to hide */) as boolean,\n isLoggingEnabled: layer.get(\"enable_logging\", true) as boolean,\n ...(this.sessionReturnOrigin != null && { sessionReturnOrigin: this.sessionReturnOrigin }),\n };\n\n // Must run after `this.experiments` is set, or queued events get stamped with the default group\n this.#flushEventQueue();\n\n await Promise.all([this.#logExposure(), 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 // Events are buffered, so send them before the shopper leaves the page\n this.#attachFlushHandlers();\n\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 /**\n * Stable ID to reuse, in priority order:\n * 1. beam_ssid URL param (cross-domain hand-off)\n * 2. Beam stable ID cookie (survives subdomain hops)\n * 3. Beam's remote session in localStorage\n * 4. The ID the deprecated statsig-js client left behind\n * Returns undefined to let Statsig create a new one\n */\n #getExistingStableId(stableIdFromUrl: string | null): string | undefined {\n if (stableIdFromUrl) {\n return stableIdFromUrl;\n }\n\n const apiKey = this.#beamConfig?.apiKey;\n const stored = getCookieValue(STATSIG_STABLE_ID_COOKIE) || (apiKey ? getRemoteSession({ apiKey }) : undefined);\n if (stored) {\n return stored;\n }\n\n try {\n return window.localStorage.getItem(LEGACY_STATSIG_STABLE_ID_STORAGE_KEY) ?? undefined;\n } catch (err) {\n // Storage can be unavailable (private mode, blocked third-party contexts)\n logger.debug(\"[StatsigPlugin] Could not read legacy stable ID from local storage\", err);\n return undefined;\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 #attachFlushHandlers() {\n const flush = () => {\n void this.statsig?.flush();\n };\n window.addEventListener(\"pagehide\", flush);\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") {\n flush();\n }\n });\n }\n\n // https://docs.statsig.com/client/javascript-sdk#statsig-options\n async #initializeStatsig(): Promise<StatsigClient> {\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 // With no customIDs, Statsig generates the stable ID itself\n const overrideStableId = this.#getExistingStableId(stableId);\n const user: StatsigUser = overrideStableId ? { customIDs: { stableID: overrideStableId } } : {};\n\n const options: StatsigOptions = {\n loggingIntervalMs: 1000,\n loggingBufferMaxSize: 2,\n includeCurrentPageUrlWithEvents: false,\n };\n\n // Must be set before the client is created, see #isNewStatsigSession\n this.#clientCreatedAt = Date.now();\n const client = new StatsigClient(this.statsigApiKey, user, options);\n this.statsig = client;\n\n try {\n if (window.localStorage.getItem(\"beam_debug\") === \"true\") {\n window.beamStatsigClient = client;\n }\n } catch {\n // Storage unavailable, the debug handle is optional\n }\n\n try {\n await client.initializeAsync({ timeoutMs: STATSIG_INIT_TIMEOUT_MS });\n } catch (err) {\n throw new BeamError(\"Failed to initialize Statsig\", { name: \"StatsigInitError\", cause: err });\n }\n\n return client;\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 // Stamped on every event. eventVersion is undefined (and dropped) for partner custom events\n #baseEventMetadata(eventName: string): Record<string, any> {\n return {\n integrationVersion: INTEGRATION_VERSION,\n eventVersion: BEAM_AB_TEST_EVENT_VERSIONS[eventName as BeamAbTestEventName],\n withBeam: this.experiments.shouldShowBeam,\n domain: window.location.hostname,\n path: window.location.pathname,\n page: window.location.href,\n };\n }\n\n // Public API: partners can log their own event names, see README.md\n logEvent = (name: string, value: BeamEventValue, metadata: Record<string, any> = {}) => {\n if (!this.statsig) {\n this.#eventQueue.push([name, value, metadata]);\n return;\n }\n const baseMetadata = this.#baseEventMetadata(name);\n if (this.experiments.isLoggingEnabled) {\n const metadataWithOverrides = this.beforeLogEvent ? this.beforeLogEvent(name, value, metadata) : metadata;\n this.statsig.logEvent({\n eventName: name,\n value: toStatsigEventValue(value),\n metadata: toStatsigMetadata({ ...metadataWithOverrides, ...baseMetadata }),\n });\n }\n logger.debug(name, value, { ...metadata, ...baseMetadata });\n };\n\n #setBeamVisibilityValue(value: \"show\" | \"hide\") {\n document.body.setAttribute(BEAM_VISIBILITY_DATA_ATTRIBUTE, value);\n }\n\n /**\n * Logs `statsig_init` once per Statsig session, so its page is the session's landing page.\n * Build metrics on it as unique users, since a returning shopper gets a new session.\n * Ignores `isLoggingEnabled` on purpose: an experiment with no exposures can't be read\n */\n async #logExposure() {\n if (!this.statsig) {\n return;\n }\n if (!this.#isNewStatsigSession(this.statsig)) {\n logger.debug(\"[StatsigPlugin] statsig_init already sent this Statsig session, skipping\");\n return;\n }\n try {\n this.statsig.logEvent({\n eventName: BEAM_AB_TEST_EVENTS.STATSIG_INIT,\n value: String(this.experiments.shouldShowBeam),\n metadata: toStatsigMetadata({\n show_beam: this.experiments.shouldShowBeam,\n ...this.#baseEventMetadata(BEAM_AB_TEST_EVENTS.STATSIG_INIT),\n }),\n });\n // Send now so a shopper who bounces is still counted\n await this.statsig.flush();\n } catch (err) {\n // TODO SDK-2390: log failures to Beam's error tracking API\n // The client retries internally, so this doesn't fail SDK setup\n logger.debug(\"[StatsigPlugin] Failed to log exposure to Statsig\", err);\n }\n }\n\n /**\n * Statsig starts a new session after 30 minutes idle or 4 hours total. A session reused from\n * storage started before this page created the client; a new one started after.\n * Returns true when unsure, since an extra event is better than a missing one.\n * Server-side dedupe replaces this in M5\n */\n #isNewStatsigSession(client: StatsigClient): boolean {\n if (this.#clientCreatedAt == null) {\n return true;\n }\n try {\n return client.getContext().session.data.startTime >= this.#clientCreatedAt;\n } catch {\n return true;\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: 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":["B","n","_","t","c","i","_beamConfig","_beamCartCookie","_clientCreatedAt","_StatsigPlugin_instances","emitBeamStatsigInitializedEvent_fn","getUrlParams_fn","getExistingStableId_fn","attachEventListeners_fn","attachFlushHandlers_fn","initializeStatsig_fn","_eventQueue","flushEventQueue_fn","baseEventMetadata_fn","setBeamVisibilityValue_fn","logExposure_fn","isNewStatsigSession_fn","registerExperimentWithBeam_fn","STATSIG_STABLE_ID_COOKIE","BEAM_COOKIE_NAMES","LEGACY_STATSIG_STABLE_ID_STORAGE_KEY","STATSIG_INIT_TIMEOUT_MS","INTEGRATION_VERSION","pkgVersion","BEAM_VISIBILITY_DATA_ATTRIBUTE","BEAM_VISIBILITY_SYNCED_CLASS","BEAM_AB_TEST_EVENTS","BEAM_AB_TEST_EVENT_VERSIONS","BEAM_SSID_PARAM","BEAM_RETURN_ORIGIN_PARAM","toStatsigEventValue","value","toStatsigMetadata","metadata","acc","key","StatsigPlugin","options","__privateAdd","name","__privateGet","baseMetadata","__privateMethod","metadataWithOverrides","logger","config","sessionReturnOrigin","__privateSet","beamVisibilityStylesheet","client","BeamError","saveRemoteSession","getCookieValue","BEAM_CART_COOKIE_NAME","setCookieValue","layer","event","BeamStatsigInitializedEvent","error","params","stableId","originParam","stableIdFromUrl","apiKey","stored","getRemoteSession","err","BeamCartCreatedEvent","_event","itemCount","cartId","subtotal","currencyCode","BeamOrderCreatedEvent","orderId","cartTotal","selectionId","beamCartId","storeId","remoteSessionId","transactionNonprofitId","orderProcessedAt","lastSelectedNonprofitId","BeamNonprofitSelectEvent","selectedNonprofitId","source","flush","overrideStableId","user","StatsigClient","eventParams","eventName","postExperimentSession"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{V as a,
|
|
1
|
+
import{V as a,A as s,Y as r,Z as t,e as m,h as i,_ as d,a as n,g,k as l,H as C,f as S,v as k,j as p,b as P,E as u,l as c,$ as A,R as L,a0 as f,G as w,p as E,s as F,o as R,J as v,I as V,X as y,w as I}from"../chunks/utils-ly9wMwUO.esm.js";import{d as h,i as q}from"../chunks/lodash-CrMU6wKg.esm.js";export{a as clearBeamStorage,s as createScopedLocalStorage,h as debounce,r as deleteCookieValue,t as errors,m as events,i as formatStoreAndReturnPromoCodes,d as getAllPromoCodesFromCookie,n as getCookieMap,g as getCookieValue,l as getPromoCodeFromShopifyCookie,C as getPromoCodesFromCart,S as getPromoCodesLocalStorage,k as getRemoteSession,p as getSanitizedUrlForStorage,P as initNetworkListeners,u as isEmptyPromoData,q as isEqual,c as logger,A as mapToUnvalidatedPromoCodes,L as memoizeLast,f as mergeStoreAndReturnPromos,w as parseJsonStringArray,E as promoCodesAreEqual,F as saveRemoteSession,R as setCookieValue,v as setPromoCodeInCookie,V as setPromoCodesInLocalStorage,y as teardownNetworkListeners,I as waitForElement};
|
|
2
2
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{V as a,
|
|
1
|
+
import{V as a,A as s,Y as r,Z as t,e as m,h as i,_ as d,a as n,g,k as l,H as C,f as S,v as k,j as p,b as P,E as u,l as c,$ as A,R as L,a0 as f,G as w,p as E,s as F,o as R,J as v,I as V,X as y,w as I}from"../chunks/utils-ly9wMwUO.esm.js";import{d as h,i as q}from"../chunks/lodash-CrMU6wKg.esm.js";export{a as clearBeamStorage,s as createScopedLocalStorage,h as debounce,r as deleteCookieValue,t as errors,m as events,i as formatStoreAndReturnPromoCodes,d as getAllPromoCodesFromCookie,n as getCookieMap,g as getCookieValue,l as getPromoCodeFromShopifyCookie,C as getPromoCodesFromCart,S as getPromoCodesLocalStorage,k as getRemoteSession,p as getSanitizedUrlForStorage,P as initNetworkListeners,u as isEmptyPromoData,q as isEqual,c as logger,A as mapToUnvalidatedPromoCodes,L as memoizeLast,f as mergeStoreAndReturnPromos,w as parseJsonStringArray,E as promoCodesAreEqual,F as saveRemoteSession,R as setCookieValue,v as setPromoCodeInCookie,V as setPromoCodesInLocalStorage,y as teardownNetworkListeners,I as waitForElement};
|
|
2
2
|
//# sourceMappingURL=utils.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.esm.js";import"../chunks/css-card-grid-
|
|
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-tjA36yWj.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/share-button-C1PRjoPw.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-
|
|
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-tjA36yWj.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/share-button-C1PRjoPw.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-
|
|
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-tjA36yWj.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/index-M8hQ6GXf.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-
|
|
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-tjA36yWj.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/index-M8hQ6GXf.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-
|
|
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-ly9wMwUO.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/share-button-C1PRjoPw.esm.js";import"../chunks/css-card-grid-tjA36yWj.esm.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-CNq5lDre.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-
|
|
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-ly9wMwUO.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/share-button-C1PRjoPw.esm.js";import"../chunks/css-card-grid-tjA36yWj.esm.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-CNq5lDre.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-
|
|
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-tjA36yWj.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/share-button-C1PRjoPw.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-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-CNq5lDre.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../components/select-nonprofit.esm.js";import"../chunks/promo-pill-label-DCBXltdj.esm.js";import"../chunks/index-DtAcPGd4.esm.js";import"../chunks/index-E6IoMPQu.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-3tRO54kz.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-
|
|
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-tjA36yWj.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/share-button-C1PRjoPw.esm.js";import"../components/beam-partner-logos.js";import"../components/cumulative-impact.js";import"../components/impact-overview.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/share-button-CNq5lDre.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../components/select-nonprofit.js";import"../chunks/promo-pill-label-DCBXltdj.esm.js";import"../chunks/index-Yt9xXa7z.esm.js";import"../chunks/index-BF0X_60j.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-3tRO54kz.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-E6IoMPQu.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-tjA36yWj.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/index-DtAcPGd4.esm.js";import"../chunks/share-button-C1PRjoPw.esm.js";import"../components/beam-partner-logos.esm.js";import"../chunks/promo-pill-label-DCBXltdj.esm.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../components/impact-overview.esm.js";import"../chunks/share-button-CNq5lDre.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-BF0X_60j.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-tjA36yWj.esm.js";import"../chunks/index-M8hQ6GXf.esm.js";import"../chunks/index-Yt9xXa7z.esm.js";import"../chunks/share-button-C1PRjoPw.esm.js";import"../components/beam-partner-logos.js";import"../chunks/promo-pill-label-DCBXltdj.esm.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../components/impact-overview.js";import"../chunks/share-button-CNq5lDre.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-M8hQ6GXf.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-tjA36yWj.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/promo-pill-label-DCBXltdj.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-M8hQ6GXf.esm.js";import"../chunks/utils-ly9wMwUO.esm.js";import"../chunks/lodash-CrMU6wKg.esm.js";import"../chunks/css-card-grid-tjA36yWj.esm.js";import"../chunks/responsive-aN8P5PqD.esm.js";import"../chunks/_share-dialog-dependencies-Caoc1gRc.esm.js";import"../chunks/vendor-DUOg5fL-.esm.js";import"../chunks/promo-pill-label-DCBXltdj.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
|