@tinkerlandai/longplay-sdk 0.10.7 → 0.10.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{f as F,j as Q}from"./chunk-5JJZSH23.js";import{b as B}from"./chunk-SSLZKIIU.js";import{a as z,b as _}from"./chunk-MOWYD2TV.js";import{L as U}from"./chunk-IAOOTBJV.js";import{Y as P,ca as M,ja as N,ka as q,qa as d}from"./chunk-ACF2FBUB.js";import{a as v}from"./chunk-DSPLGTQI.js";import"./chunk-G56XGVMS.js";import"./chunk-22Z7JR4B.js";import{a as V}from"./chunk-7DXL3LHT.js";import"./chunk-XSVQHPQT.js";import{z as p}from"zod";var x=new WeakMap;function W(r){let t={string:p.string(),number:p.number().finite(),boolean:p.boolean(),strings:p.array(p.string()),json:V}[r.type];return r.nullable?t.nullable():t}async function ie(r,t){return $(r,t,!1)}async function se(r,t){return $(r,t,!0)}async function $(r,t,w){t.signal?.throwIfAborted();let L=U.parse(t.content),o=L.document;if(x.has(r))throw new d("CONFLICT","Content is already mounted in this container");let f=p.record(p.string(),V).parse(t.inputs??{});if(Object.keys(f).length>40)throw new d("INVALID_REQUEST","Too many content inputs");for(let[e,s]of Object.entries(f))N.parse({[e]:s});if(Object.keys(f).some(e=>!Object.hasOwn(o.contract.inputs,e)))throw new d("INVALID_REQUEST","Undeclared content input");for(let[e,s]of Object.entries(o.contract.inputs))if(Object.hasOwn(f,e))W(s).parse(f[e]);else if(s.required)throw new d("INVALID_REQUEST",`Missing content input ${e}`);for(let e of Object.keys(o.contract.outputs))if(typeof t.actions[e]!="function")throw new d("INVALID_REQUEST",`Missing host handler for ${e}`);let J=q.parse(t.bindings??[]),c=r.ownerDocument,T,k=o.kind==="popup",n=k?c.createElement("dialog"):null,i=c.createElement("div");if(i.dataset.indianaContent=o.kind,i.setAttribute("aria-label",o.name),i.style.cssText="width:100%;min-width:0",n){n.setAttribute("aria-label",o.name);let e=o.screen.presentation;n.style.cssText="box-sizing:border-box;padding:0;border:0;max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);overflow:auto",e.type==="modal"||e.type==="sheet"?(n.style.width=`${P[e.size]}px`,e.type==="sheet"&&(n.style.margin="auto auto 0")):n.style.width="100vw",n.append(i),r.append(n)}else r.append(i);let l=!1,C=!1,y=!1;w&&!n&&(i.style.width=`${r.getBoundingClientRect().width||c.defaultView?.innerWidth||800}px`);let G=w?F(n??i):()=>{},D,A,S=new Promise((e,s)=>{D=e,A=s});S.catch(()=>{});let u=null,E=structuredClone(o.screen);E.actions=E.actions.map(e=>e.type==="event"?{...e,close:!1}:e);let b;function m(){l||(l=!0,t.signal?.removeEventListener("abort",m),A(new Error("Content preparation cancelled")),b?.destroy(),n?.close(),n?.remove(),i.remove(),x.delete(r),n&&T?.())}let O=()=>{y&&(m(),v(t.onDismiss))};if(n){let e=c.createElement("button");e.type="button",e.textContent="\xD7",e.setAttribute("aria-label",t.locale?.startsWith("zh")?"\u5173\u95ED":"Close"),_(e,o.screen.theme),e.addEventListener("click",O),n.prepend(e)}n?.addEventListener("cancel",e=>{e.preventDefault(),O()});async function H(){if(l||!y||C||!u)return;let e=u;C=!0,i.setAttribute("aria-busy","true");try{await t.actions[e.actionId](structuredClone(e)),u=null}catch(s){v(t.onError,s)}finally{C=!1,l||i.removeAttribute("aria-busy")}}function R(){if(l)throw new d("CONFLICT","Content host has been destroyed");y||(T=B(c),G(),w&&!n&&(i.style.width="100%"),n&&(n.showModal(),z(n,o.screen.presentation.type)),y=!0)}try{w||R(),b=Q(i,{mode:"live",title:o.name,viewportHeight:o.kind==="page"?r.clientHeight||c.defaultView?.innerHeight||800:void 0,onRendered:a=>{a&&n?.setAttribute("aria-label",a),D()},onError:a=>{let I=new Error(a);A(I),v(t.onError,I)},onEscape:k?O:void 0,onAction:(a,I,K)=>{if(l||!y||C||u)return;let h=o.screen.actions.find(g=>g.id===a),j=o.contract.outputs[a];if(!(h?.type!=="event"||!j))try{let g=W(j).parse(Object.hasOwn(h.properties,"value")?h.properties.value:h.properties);u={requestId:crypto.randomUUID(),contentVersionId:L.id,actionId:a,event:h.event,value:g,selection:I??{},answers:K??{},requestedClose:h.close},H()}catch(g){v(t.onError,g)}}});let e={destroy:m,show:R,get pendingAction(){return u?structuredClone(u):null},retryAction:H,updateCapabilities:a=>b?.updateCapabilities(a)};x.set(r,e),t.signal?.addEventListener("abort",m,{once:!0}),t.signal?.aborted&&(m(),t.signal.throwIfAborted());let s=M(E,[t.locale,...c.defaultView?.navigator.languages??[]]);if(b.update(E,s,{capabilities:t.capabilities,serverInput:{bindings:J,answers:{},values:f}}),await Promise.race([b.ready,S]),w&&await S,l)throw new Error("Content preparation cancelled");return e}catch(e){throw m(),e}}export{ie as mountContent,se as prepareContent};
1
+ import{f as F,j as Q}from"./chunk-5JJZSH23.js";import{b as B}from"./chunk-SSLZKIIU.js";import{a as z,b as _}from"./chunk-MOWYD2TV.js";import{L as M}from"./chunk-U4UEOR5W.js";import{Y as P,ca as U,ja as N,ka as q,qa as d}from"./chunk-ACF2FBUB.js";import{a as v}from"./chunk-DSPLGTQI.js";import"./chunk-G56XGVMS.js";import"./chunk-7XVAFQEE.js";import{a as V}from"./chunk-7DXL3LHT.js";import"./chunk-XSVQHPQT.js";import{z as p}from"zod";var x=new WeakMap;function W(r){let t={string:p.string(),number:p.number().finite(),boolean:p.boolean(),strings:p.array(p.string()),json:V}[r.type];return r.nullable?t.nullable():t}async function ie(r,t){return $(r,t,!1)}async function se(r,t){return $(r,t,!0)}async function $(r,t,w){t.signal?.throwIfAborted();let L=M.parse(t.content),o=L.document;if(x.has(r))throw new d("CONFLICT","Content is already mounted in this container");let f=p.record(p.string(),V).parse(t.inputs??{});if(Object.keys(f).length>40)throw new d("INVALID_REQUEST","Too many content inputs");for(let[e,s]of Object.entries(f))N.parse({[e]:s});if(Object.keys(f).some(e=>!Object.hasOwn(o.contract.inputs,e)))throw new d("INVALID_REQUEST","Undeclared content input");for(let[e,s]of Object.entries(o.contract.inputs))if(Object.hasOwn(f,e))W(s).parse(f[e]);else if(s.required)throw new d("INVALID_REQUEST",`Missing content input ${e}`);for(let e of Object.keys(o.contract.outputs))if(typeof t.actions[e]!="function")throw new d("INVALID_REQUEST",`Missing host handler for ${e}`);let J=q.parse(t.bindings??[]),c=r.ownerDocument,T,k=o.kind==="popup",n=k?c.createElement("dialog"):null,i=c.createElement("div");if(i.dataset.indianaContent=o.kind,i.setAttribute("aria-label",o.name),i.style.cssText="width:100%;min-width:0",n){n.setAttribute("aria-label",o.name);let e=o.screen.presentation;n.style.cssText="box-sizing:border-box;padding:0;border:0;max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);overflow:auto",e.type==="modal"||e.type==="sheet"?(n.style.width=`${P[e.size]}px`,e.type==="sheet"&&(n.style.margin="auto auto 0")):n.style.width="100vw",n.append(i),r.append(n)}else r.append(i);let l=!1,C=!1,g=!1;w&&!n&&(i.style.width=`${r.getBoundingClientRect().width||c.defaultView?.innerWidth||800}px`);let G=w?F(n??i):()=>{},D,A,S=new Promise((e,s)=>{D=e,A=s});S.catch(()=>{});let u=null,E=structuredClone(o.screen);E.actions=E.actions.map(e=>e.type==="event"?{...e,close:!1}:e);let y;function m(){l||(l=!0,t.signal?.removeEventListener("abort",m),A(new Error("Content preparation cancelled")),y?.destroy(),n?.close(),n?.remove(),i.remove(),x.delete(r),n&&T?.())}let O=()=>{g&&(m(),v(t.onDismiss))};if(n){let e=c.createElement("button");e.type="button",e.textContent="\xD7",e.setAttribute("aria-label",t.locale?.startsWith("zh")?"\u5173\u95ED":"Close"),_(e,o.screen.theme),e.addEventListener("click",O),n.prepend(e)}n?.addEventListener("cancel",e=>{e.preventDefault(),O()});async function H(){if(l||!g||C||!u)return;let e=u;C=!0,i.setAttribute("aria-busy","true");try{await t.actions[e.actionId](structuredClone(e)),u=null}catch(s){v(t.onError,s)}finally{C=!1,l||i.removeAttribute("aria-busy")}}function R(){if(l)throw new d("CONFLICT","Content host has been destroyed");g||(T=B(c),G(),w&&!n&&(i.style.width="100%"),n&&(n.showModal(),z(n,o.screen.presentation.type)),g=!0)}try{w||R(),y=Q(i,{mode:"live",rendererUrl:t.rendererUrl,title:o.name,viewportHeight:o.kind==="page"?r.clientHeight||c.defaultView?.innerHeight||800:void 0,onRendered:a=>{a&&n?.setAttribute("aria-label",a),D()},onError:a=>{let I=new Error(a);A(I),v(t.onError,I)},onEscape:k?O:void 0,onAction:(a,I,K)=>{if(l||!g||C||u)return;let h=o.screen.actions.find(b=>b.id===a),j=o.contract.outputs[a];if(!(h?.type!=="event"||!j))try{let b=W(j).parse(Object.hasOwn(h.properties,"value")?h.properties.value:h.properties);u={requestId:crypto.randomUUID(),contentVersionId:L.id,actionId:a,event:h.event,value:b,selection:I??{},answers:K??{},requestedClose:h.close},H()}catch(b){v(t.onError,b)}}});let e={destroy:m,show:R,get pendingAction(){return u?structuredClone(u):null},retryAction:H,updateCapabilities:a=>y?.updateCapabilities(a)};x.set(r,e),t.signal?.addEventListener("abort",m,{once:!0}),t.signal?.aborted&&(m(),t.signal.throwIfAborted());let s=U(E,[t.locale,...c.defaultView?.navigator.languages??[]]);if(y.update(E,s,{capabilities:t.capabilities,serverInput:{bindings:J,answers:{},values:f}}),await Promise.race([y.ready,S]),w&&await S,l)throw new Error("Content preparation cancelled");return e}catch(e){throw m(),e}}export{ie as mountContent,se as prepareContent};
@@ -0,0 +1 @@
1
+ import{b as a}from"./chunk-R26BYN3U.js";import"./chunk-MOWYD2TV.js";import"./chunk-SBPTOOYB.js";import"./chunk-U4UEOR5W.js";import"./chunk-ACF2FBUB.js";import"./chunk-SLUA7ABW.js";import"./chunk-5ZS3TNC4.js";import"./chunk-DSPLGTQI.js";import"./chunk-G56XGVMS.js";import"./chunk-7XVAFQEE.js";import"./chunk-7DXL3LHT.js";import"./chunk-XSVQHPQT.js";export{a as showFunnelRun};
package/dist/index.d.ts CHANGED
@@ -301,6 +301,8 @@ type ContentHostOptions = {
301
301
  actions: Record<string, (intent: ContentActionIntent) => unknown | Promise<unknown>>;
302
302
  onError: (error: unknown) => void;
303
303
  onDismiss?: () => void;
304
+ /** Web View renderer address; native hosts pass "bundled" because their shell CSP refuses srcdoc frames. */
305
+ rendererUrl?: string;
304
306
  };
305
307
  /** Explicit host mount. Banner never creates an overlay or a blocking Funnel Run. */
306
308
  declare function mountContent$1(container: HTMLElement, options: ContentHostOptions): Promise<{
@@ -23143,6 +23145,8 @@ type IamFunnelEntriesOptions = IndianaOptions & {
23143
23145
  appManifestRelease: string;
23144
23146
  session: NonNullable<IndianaOptions["session"]>;
23145
23147
  container: HTMLElement;
23148
+ /** Credential-free original starts survive reloads in this tab. Requires a full Customer session. */
23149
+ recoveryStorage?: Storage | false;
23146
23150
  host?: Omit<FunnelHostOptions, "client">;
23147
23151
  onStatus?: (status: string, entryId?: string) => void;
23148
23152
  };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a as Ue,b as Ae}from"./chunk-SV6W2E2A.js";import"./chunk-MOWYD2TV.js";import{a as xe,c as ke}from"./chunk-3OFRQUUI.js";import{a as Le}from"./chunk-6LILLFH3.js";import{b as Pe,g as Be,l as X,m as Fe,n as He,p as Ge}from"./chunk-Y3AGPHWF.js";import"./chunk-SBPTOOYB.js";import{F as Te,G as De,H as Oe,Ka as we,La as ve,Ma as Re,Qa as Se,i as ie,k as K,l as se,m as ce,n as de,o as ue,p as le,q as me,qa as Ee,r as fe,s as pe,t as he,u as Ie,w as J,x as ye,y as ge}from"./chunk-IAOOTBJV.js";import{qa as N}from"./chunk-ACF2FBUB.js";import{a as Ce,c as Z}from"./chunk-J6KIN4RH.js";import"./chunk-SLUA7ABW.js";import{c as _e,d as be}from"./chunk-ZKSKBL4N.js";import{a as j}from"./chunk-DSPLGTQI.js";import"./chunk-G56XGVMS.js";import"./chunk-22Z7JR4B.js";import"./chunk-7DXL3LHT.js";import"./chunk-XSVQHPQT.js";import{z as $}from"zod";var r=class extends Error{constructor(m,L=0,I=!1,p="fix_request"){super(m);this.code=m;this.status=L;this.retryable=I;this.recovery=p;this.name="MerchantBridgeError"}code;status;retryable;recovery};async function je(n,b){if(!n.headers.get("content-type")?.split(";",1)[0].trim().match(/^application\/(?:json|[a-z0-9.+-]+\+json)$/i))throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");let m=n.body?.getReader();if(!m)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");let L=()=>{m.cancel().catch(()=>{})};b.addEventListener("abort",L,{once:!0});let I=0,p="",a=new TextDecoder("utf-8",{fatal:!0});try{for(b.throwIfAborted();;){let d=await m.read();if(b.throwIfAborted(),d.done)break;if(I+=d.value.byteLength,I>262144)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");p+=a.decode(d.value,{stream:!0})}return p+=a.decode(),JSON.parse(p)}catch(d){throw b.throwIfAborted(),d instanceof r?d:new r("MERCHANT_BRIDGE_INVALID_RESPONSE")}finally{b.removeEventListener("abort",L),await m.cancel().catch(()=>{}),m.releaseLock()}}function Ve(n){let b=ue.parse(n.origin),m=le.parse(n.manifest),L={projectId:n.scope.projectId,environmentId:n.scope.environmentId,environment:n.scope.environment};for(let o of["projectId","environmentId","environment"])if(m[o]!==n.scope[o])throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");let I=n.customerId===void 0?null:$.uuid().parse(n.customerId),p=0,a=null,d=null,k=new AbortController,V=n.fetch??globalThis.fetch;async function D(o,t,s,E,T){if(!m.capabilities.includes(o))throw new r("MERCHANT_BRIDGE_CAPABILITY_UNSUPPORTED",501);let C=de[o];if(["merchant_catalog_reader","merchant_refund_authority","indiana_server_key"].includes(C.authority))throw new r("MERCHANT_BRIDGE_FORBIDDEN",403);let O=p,B=AbortSignal.any([k.signal,AbortSignal.timeout(Math.min(3e4,Math.max(1e3,n.timeoutMs??1e4))),...n.signal?[n.signal]:[],...E?[E]:[]]);B.throwIfAborted();let R=new Headers(await n.headers?.());if(B.throwIfAborted(),O!==p)throw new DOMException("Merchant identity changed","AbortError");if(/\bgg_(?:sk|ct|rt)_/.test(R.get("authorization")??"")||R.has("X-Indiana-Bridge-Signature")||R.has("X-Indiana-Bridge-Key-Id"))throw new r("MERCHANT_BRIDGE_FORBIDDEN",403);R.set(ce,String(K)),R.set("Accept","application/json");let y=crypto.randomUUID();R.set("X-Request-Id",y),R.set("Content-Type","application/json");let f=await V(b+se,{method:"POST",credentials:"include",redirect:"error",cache:"no-store",headers:R,signal:B,body:JSON.stringify({bridgeVersion:K,requestId:y,command:C.command,scope:L,data:T??(s===void 0?{}:{operationId:s})})}),P=await je(f,B);if(B.throwIfAborted(),O!==p)throw new DOMException("Merchant identity changed","AbortError");if(!f.ok){let g=ge.safeParse(P);throw!g.success||g.data.scope.projectId!==n.scope.projectId||g.data.scope.environment!==n.scope.environment||g.data.scope.environmentId!==n.scope.environmentId||g.data.requestId!==y||g.data.command!==C.command?new r("MERCHANT_BRIDGE_INVALID_RESPONSE",f.status):new r(g.data.error.code,f.status,g.data.error.retryable,g.data.error.recovery)}let S=me($.unknown()).safeParse(P);if(!S.success||S.data.scope.projectId!==n.scope.projectId||S.data.scope.environment!==n.scope.environment||S.data.scope.environmentId!==n.scope.environmentId||S.data.requestId!==y||S.data.command!==C.command)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE",f.status);let u=t.safeParse(S.data.data);if(!u.success)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE",f.status);return u.data}function v(){if(!I)throw new r("MERCHANT_BRIDGE_UNAUTHENTICATED",401);return I}async function G(o,t,s,E){let T=v(),C=Ie.parse({operationId:s,customerId:T}),O=await D(o,t,C.operationId,E,C);if(O.customerId!==T||O.operationId!==C.operationId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return O}return{async readPresentation(o){let t=await D("presentation",pe,void 0,o);if(d!==null&&d!==t.nativeUserId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(t.presentation&&I!==null&&t.presentation.customerId!==I)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return d=t.nativeUserId,a=t.presentation,t},async createSession(o){let t=await D("session",fe,void 0,o);if(d!==null&&d!==t.nativeUserId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(I!==null&&I!==t.session.customerId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(a&&a.customerId!==t.session.customerId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return I=t.session.customerId,d=t.nativeUserId,t.session},async reportPresentation(o,t){let s=v(),E=he.parse(o);if(!a||a.customerId!==s||a.decisionId!==E.decisionId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return D("presentation_events",$.strictObject({queued:$.literal(!0)}),void 0,t,E)},async readCustomerCommerce(o){let t=v(),s=await D("customer_commerce",ye,void 0,o);if(s.customerId!==t)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return s},async executePurchase(o,t){let s=await G("purchases",J,o,t);if(s.type!=="purchase")throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");return s},readOperation:(o,t)=>G("operation_status",ie,o,t),async executeSubscriptionChange(o,t){let s=await G("subscription_changes",J,o,t);if(s.type!=="subscription_change")throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");return s},reset(){p++,k.abort(),k=new AbortController,I=null,a=null,d=null}}}function qe(n){let b=_e(n.baseUrl),m=n.scope,L=Se(n),I=n.fetch??globalThis.fetch.bind(globalThis),p,a=!1,d=!1,k=0,V=0,D="",v=0,G=0,o=0,t,s=!1,E,T=!0,C,O,B,R,y,f,P=e=>{f===e&&(f=void 0,F())},S=new Set,u=(e,l)=>j(n.onStatus,e,l);function g(){let e=y;y=void 0,e?.host.destroy(),e?.client.reset(),F()}let Y=()=>Date.now()<G&&performance.now()<o;function Q(e){if(e.target.release!==n.appManifestRelease||!Y())return!1;try{return Z(e.target.render,document,location.pathname,()=>{})}catch{return u("incompatible",e.id),!1}}function z(e){if(a||e.epoch!==v||e.visit!==V||document.visibilityState==="hidden")return!1;try{return Z(e.target.render,document,location.pathname,()=>{})}catch{return!1}}async function W(e){if(f||y){u("in_progress",e.id);return}if(!n.session.peek()){u("identity_required",e.id);return}let l={command:ve.parse({operation:"entry_start",entryId:e.id,funnelId:e.funnelId,versionId:e.versionId,release:n.appManifestRelease,requestId:crypto.randomUUID(),locale:document.documentElement.lang||"en"}),epoch:v,visit:V,target:e.target};f=l,await ee(l)}async function ee(e){if(e.dispatching)return;e.dispatching=!0;let l,_=!1,A=!1;async function H(c){if(e.epoch!==v)return;let w=c.view;if(w&&["running","waiting"].includes(w.status))try{await c.submit({operation:"close",requestId:crypto.randomUUID(),nodeId:w.nodeId,visit:w.visit,revision:w.revision})}catch(i){if(!(i instanceof N&&i.code==="FORBIDDEN"))throw i}}try{u("starting",e.command.entryId);let c=await L.request("funnels",e.command),w=Re.safeParse(c);if(w.success){if(w.data.scope.projectId!==m.projectId||w.data.scope.environment!==m.environment)throw new N("SCOPE_MISMATCH","Entry scope changed");e.epoch===v&&u(w.data.reason,e.command.entryId),P(e);return}let i=Ee.parse(c);if(!i.runToken||i.scope.projectId!==m.projectId||i.scope.environment!==m.environment||i.run.source.type!=="funnel"||i.run.source.id!==e.command.funnelId||i.run.source.versionId!==e.command.versionId)throw new N("INVALID_RESPONSE","Invalid entry Run");if(e.epoch!==v){P(e),u("identity_changed",e.command.entryId);return}let h=X({...n,runToken:i.runToken,funnelId:e.command.funnelId});l=h,A=!0,await h.get(),A=!1;let M=h.view;if(!M||M.id!==i.run.id||M.source.type!=="funnel"||M.source.id!==e.command.funnelId||M.source.versionId!==e.command.versionId)throw new N("INVALID_RESPONSE","Entry Run version changed");if(!z(e)){await H(h),u("left_screen",e.command.entryId),P(e);return}let q=!1,U=!1,ae=await Ae(n.container,{...n.host,client:h,appManifestRelease:n.appManifestRelease,onDismiss(x){q=!0,y?.client===h&&(y=void 0,h.reset(),F(),x&&x.status!=="completed"&&u("run_ended",e.command.entryId)),j(n.host?.onDismiss,x)},onComplete(x){U=!0,y?.client===h&&g(),j(n.host?.onComplete,x)},onError(x){j(n.host?.onError,x),y?.client===h&&x instanceof N&&x.code==="FORBIDDEN"&&(g(),u("run_ended",e.command.entryId))}});if(!z(e)||q||U){ae.destroy(),z(e)||await H(h),P(e);return}y={host:ae,client:h},_=!0,P(e),u("started",e.command.entryId)}catch(c){c instanceof N&&(!l||A&&c.code==="FORBIDDEN")&&c.status!==void 0&&c.status>=400&&c.status<500&&!c.retryable&&P(e),e.epoch===v&&!a&&(u("start_failed",e.command.entryId),j(n.host?.onError,c))}finally{_||l?.reset(),e.dispatching=!1}}function Me(){if(s=!1,!(a||!d||document.visibilityState==="hidden")){if(!Y()){T=!0;return}T=!1;for(let e of p?.entries??[])if(!(e.event!=="screen_enter"||S.has(`${e.funnelId}:${e.id}`)||!Q(e))){if(!n.session.peek()){u("identity_required",e.id);continue}if(f||y){u("in_progress",e.id);return}S.add(`${e.funnelId}:${e.id}`),W(e);break}}}let F=()=>{!s&&!a&&(s=!0,queueMicrotask(Me))};function Ne(){let e=location.origin+location.pathname;e!==D&&(D=e,V++,T=!0,S.clear(),F())}function ne(e){if(!e.isTrusted||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||document.visibilityState==="hidden")return;let l=e.target;if(!(l instanceof Element)||l.closest("[data-indiana-funnel]"))return;let _=l.closest("button,a,input");if(!(!_||_.matches(":disabled,[aria-disabled='true']")||_.closest("[hidden],[inert],[aria-hidden='true']")))for(let A of p?.entries??[]){let H=A.target.button;if(!(A.event!=="button_click"||!H||!Q(A))){try{let c=Ce(document);if(!_.matches(H.selector)||c(H.selector,_)!==1)continue}catch{u("incompatible",A.id);continue}W(A);break}}}async function te(){if(a)return;if(E)return E;let e=++k,l=new AbortController;C=l;let _,A=new Promise((w,i)=>{_=()=>i(new N("TIMEOUT","Funnel entry configuration read cancelled or timed out")),l.signal.addEventListener("abort",_,{once:!0})}),H=setTimeout(()=>l.abort(),n.timeoutMs??5e3),c=(async()=>{let w=async()=>{let U=await I(`${b}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:l.signal});if(!U.ok)throw new N("SERVICE_UNAVAILABLE","Funnel entries unavailable",U.status);return we.parse(await U.json())},i=await Promise.race([w(),A]),h=Date.parse(i.validatedAt),M=Date.parse(i.validUntil);if(i.scope.projectId!==m.projectId||i.scope.environment!==m.environment||i.scope.environmentId!==n.environmentId||i.release!==n.appManifestRelease||M<=Date.now()||h>Date.now()+5e3||M-h>6e4||M<=h)throw new N("INVALID_RESPONSE","Entry configuration scope or deadline changed");if(a||e!==k)return;let q=p===void 0;p=i,G=M,o=performance.now()+Math.min(M-Date.now(),6e4),(q||T)&&F()})();E=c;try{await c}finally{clearTimeout(H),l.signal.removeEventListener("abort",_),E===c&&(E=void 0)}}async function re(){try{await te()}catch{a||u("configuration_unavailable")}a||(t=setTimeout(()=>{re()},15e3))}let oe=()=>F();return{async start(){d||a||(d=!0,D=location.origin+location.pathname,O=be(Ne),B=n.session.subscribeIdentity(()=>{v++,T=!0,f=void 0,S.clear(),g(),F()}),R=new MutationObserver(F),R.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["hidden","inert","aria-hidden","data-indiana-id","id","style","data-testid","data-test","data-qa"]}),document.addEventListener("click",ne,!0),document.addEventListener("visibilitychange",oe),await re())},refresh:te,async retry(){f&&!a&&f.epoch===v&&await ee(f)},destroy(){a=!0,k++,clearTimeout(t),C?.abort(),R?.disconnect(),O?.(),B?.(),document.removeEventListener("click",ne,!0),document.removeEventListener("visibilitychange",oe),g(),p=void 0}}}async function on(...n){return(await import("./paywall-XGDRMPLP.js")).showPaywall(...n)}async function an(...n){return(await import("./funnel-runtime-host-W25OXLGE.js")).showFunnelRun(...n)}async function sn(...n){return(await import("./content-F7IVCK3I.js")).mountContent(...n)}async function cn(...n){return(await import("./content-F7IVCK3I.js")).prepareContent(...n)}export{N as LongplayError,r as MerchantBridgeError,Be as createBrowserFunnelCommandStorage,He as createConfigurationSync,Pe as createFeatureClient,ke as createFunnelClient,Ue as createFunnelPageExperiments,X as createFunnelRunController,qe as createIamFunnelEntries,Ge as createLocalFunnelClient,xe as createLongplay,Ve as createMerchantBridge,Fe as createPaywallSession,Le as evaluateFunnelNode,De as formatCouponDiscount,Te as formatCouponMoney,Oe as formatCouponTerms,sn as mountContent,cn as prepareContent,an as showFunnelRun,on as showPaywall};
1
+ import{a as dn,b as Ve}from"./chunk-R26BYN3U.js";import"./chunk-MOWYD2TV.js";import{a as nn,c as sn}from"./chunk-CBVZUTNH.js";import{a as an}from"./chunk-EI2VRDYJ.js";import{b as en,g as tn,l as ce,m as rn,n as on,p as cn}from"./chunk-RP2P3FU4.js";import"./chunk-SBPTOOYB.js";import{F as We,G as Ye,H as Qe,Ka as Be,La as He,Ma as Q,Na as ke,Ra as Le,Y as Pe,i as Ee,k as ie,l as be,m as Re,n as Se,o as _e,p as Ce,q as Ae,qa as Fe,r as Me,s as Ne,t as Te,u as De,w as se,x as Oe,y as xe}from"./chunk-U4UEOR5W.js";import{qa as P}from"./chunk-ACF2FBUB.js";import{a as Ue,c as ee}from"./chunk-J6KIN4RH.js";import"./chunk-SLUA7ABW.js";import{c as qe,d as Ge}from"./chunk-5ZS3TNC4.js";import{a as V}from"./chunk-DSPLGTQI.js";import"./chunk-G56XGVMS.js";import"./chunk-7XVAFQEE.js";import"./chunk-7DXL3LHT.js";import"./chunk-XSVQHPQT.js";import{z as ne}from"zod";var d=class extends Error{constructor(f,O=0,h=!1,g="fix_request"){super(f);this.code=f;this.status=O;this.retryable=h;this.recovery=g;this.name="MerchantBridgeError"}code;status;retryable;recovery};async function un(n,S){if(!n.headers.get("content-type")?.split(";",1)[0].trim().match(/^application\/(?:json|[a-z0-9.+-]+\+json)$/i))throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE");let f=n.body?.getReader();if(!f)throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE");let O=()=>{f.cancel().catch(()=>{})};S.addEventListener("abort",O,{once:!0});let h=0,g="",r=new TextDecoder("utf-8",{fatal:!0});try{for(S.throwIfAborted();;){let o=await f.read();if(S.throwIfAborted(),o.done)break;if(h+=o.value.byteLength,h>262144)throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE");g+=r.decode(o.value,{stream:!0})}return g+=r.decode(),JSON.parse(g)}catch(o){throw S.throwIfAborted(),o instanceof d?o:new d("MERCHANT_BRIDGE_INVALID_RESPONSE")}finally{S.removeEventListener("abort",O),await f.cancel().catch(()=>{}),f.releaseLock()}}function ln(n){let S=_e.parse(n.origin),f=Ce.parse(n.manifest),O={projectId:n.scope.projectId,environmentId:n.scope.environmentId,environment:n.scope.environment};for(let l of["projectId","environmentId","environment"])if(f[l]!==n.scope[l])throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");let h=n.customerId===void 0?null:ne.uuid().parse(n.customerId),g=0,r=null,o=null,E=new AbortController,_=n.fetch??globalThis.fetch;async function B(l,s,p,N,F){if(!f.capabilities.includes(l))throw new d("MERCHANT_BRIDGE_CAPABILITY_UNSUPPORTED",501);let x=Se[l];if(["merchant_catalog_reader","merchant_refund_authority","indiana_server_key"].includes(x.authority))throw new d("MERCHANT_BRIDGE_FORBIDDEN",403);let H=g,L=AbortSignal.any([E.signal,AbortSignal.timeout(Math.min(3e4,Math.max(1e3,n.timeoutMs??1e4))),...n.signal?[n.signal]:[],...N?[N]:[]]);L.throwIfAborted();let T=new Headers(await n.headers?.());if(L.throwIfAborted(),H!==g)throw new DOMException("Merchant identity changed","AbortError");if(/\bgg_(?:sk|ct|rt)_/.test(T.get("authorization")??"")||T.has("X-Indiana-Bridge-Signature")||T.has("X-Indiana-Bridge-Key-Id"))throw new d("MERCHANT_BRIDGE_FORBIDDEN",403);T.set(Re,String(ie)),T.set("Accept","application/json");let i=crypto.randomUUID();T.set("X-Request-Id",i),T.set("Content-Type","application/json");let D=await _(S+be,{method:"POST",credentials:"include",redirect:"error",cache:"no-store",headers:T,signal:L,body:JSON.stringify({bridgeVersion:ie,requestId:i,command:x.command,scope:O,data:F??(p===void 0?{}:{operationId:p})})}),A=await un(D,L);if(L.throwIfAborted(),H!==g)throw new DOMException("Merchant identity changed","AbortError");if(!D.ok){let a=xe.safeParse(A);throw!a.success||a.data.scope.projectId!==n.scope.projectId||a.data.scope.environment!==n.scope.environment||a.data.scope.environmentId!==n.scope.environmentId||a.data.requestId!==i||a.data.command!==x.command?new d("MERCHANT_BRIDGE_INVALID_RESPONSE",D.status):new d(a.data.error.code,D.status,a.data.error.retryable,a.data.error.recovery)}let b=Ae(ne.unknown()).safeParse(A);if(!b.success||b.data.scope.projectId!==n.scope.projectId||b.data.scope.environment!==n.scope.environment||b.data.scope.environmentId!==n.scope.environmentId||b.data.requestId!==i||b.data.command!==x.command)throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE",D.status);let q=s.safeParse(b.data.data);if(!q.success)throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE",D.status);return q.data}function C(){if(!h)throw new d("MERCHANT_BRIDGE_UNAUTHENTICATED",401);return h}async function j(l,s,p,N){let F=C(),x=De.parse({operationId:p,customerId:F}),H=await B(l,s,x.operationId,N,x);if(H.customerId!==F||H.operationId!==x.operationId)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");return H}return{async readPresentation(l){let s=await B("presentation",Ne,void 0,l);if(o!==null&&o!==s.nativeUserId)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(s.presentation&&h!==null&&s.presentation.customerId!==h)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");return o=s.nativeUserId,r=s.presentation,s},async createSession(l){let s=await B("session",Me,void 0,l);if(o!==null&&o!==s.nativeUserId)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(h!==null&&h!==s.session.customerId)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(r&&r.customerId!==s.session.customerId)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");return h=s.session.customerId,o=s.nativeUserId,s.session},async reportPresentation(l,s){let p=C(),N=Te.parse(l);if(!r||r.customerId!==p||r.decisionId!==N.decisionId)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");return B("presentation_events",ne.strictObject({queued:ne.literal(!0)}),void 0,s,N)},async readCustomerCommerce(l){let s=C(),p=await B("customer_commerce",Oe,void 0,l);if(p.customerId!==s)throw new d("MERCHANT_BRIDGE_SCOPE_MISMATCH");return p},async executePurchase(l,s){let p=await j("purchases",se,l,s);if(p.type!=="purchase")throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE");return p},readOperation:(l,s)=>j("operation_status",Ee,l,s),async executeSubscriptionChange(l,s){let p=await j("subscription_changes",se,l,s);if(p.type!=="subscription_change")throw new d("MERCHANT_BRIDGE_INVALID_RESPONSE");return p},reset(){g++,E.abort(),E=new AbortController,h=null,r=null,o=null}}}import{z as J}from"zod";var Ke=J.strictObject({command:Q,target:Be,runId:J.uuid().optional(),expiresAt:J.iso.datetime({offset:!0}).optional()}).refine(n=>n.command.release===n.target.release),je=J.strictObject({schemaVersion:J.literal(1),entries:J.array(Ke).max(4e3)});function ze(n){let S=!1,f=()=>{S||n.unavailable(),S=!0};function O(){return n.storage===!1?void 0:n.storage??globalThis.sessionStorage}function h(r){let o=O()?.getItem(r);if(!o)return[];if(o.length>1048576)throw Error("Entry recovery is too large");return je.parse(JSON.parse(o)).entries}function g(r,o){let E=O();if(!E)return;if(!o.length)return E.removeItem(r);let _=JSON.stringify(je.parse({schemaVersion:1,entries:o}));if(_.length>1048576)throw Error("Entry recovery is too large");E.setItem(r,_)}return{load(){try{let r=n.binding();if(!r||n.storage===!1)return;let o="indiana.funnel.entries.v1."+JSON.stringify(r);return{key:o,entries:h(o)}}catch{f();return}},retain(r,o){if(r)try{let E=Ke.parse(o);g(r,[...h(r).filter(_=>_.command.funnelId!==E.command.funnelId),E])}catch{f()}},forget(r,o){if(r)try{g(r,h(r).filter(E=>E.command.requestId!==o))}catch{f()}}}}var te=n=>["running","waiting"].includes(n.status)&&!n.pendingRequest&&(n.stopped||!n.screen&&!n.paywall&&n.instruction?.type==="wait"&&n.instruction.kind!=="operation");function mn(n){let S=qe(n.baseUrl),f=n.scope,O=Le(n),h=n.fetch??globalThis.fetch.bind(globalThis),g,r=!1,o=!1,E=0,_=0,B="",C=0,j=0,l=0,s,p=!1,N,F=!0,x,H,L,T,i,D=-1,A,b=e=>{A===e&&(A=void 0,k())},q=new Set,a=(e,t)=>V(n.onStatus,e,t),K=new Set,$=ze({storage:n.recoveryStorage,binding:()=>{let e=n.session.snapshot()?.customerId;return e?[S,f.projectId,f.environment,n.environmentId,n.appManifestRelease,e]:void 0},unavailable:()=>a("recovery_unavailable")}),G=e=>$.forget(e.storageKey,e.command.requestId);function re(e,t){t&&(e.runId=t.id,e.expiresAt=t.runExpiresAt),$.retain(e.storageKey,{command:e.command,target:e.target,...e.runId&&{runId:e.runId},...e.expiresAt&&{expiresAt:e.expiresAt}})}function X(){let e=i;i=void 0,e?.host.destroy(),e?.slot.remove(),e?.client.reset(),k()}let de=()=>A!==void 0||i!==void 0&&!i.background;function Je(e,t){if(i?.client!==e)return;re(i.recovery,t);let c=te(t);i.slot.hidden=c,c!==i.background&&(i.background=c,c?a("run_background",i.entryId):D=_,k())}function ue(e,t,c){let m=e.client.view;if(!t||e.background||!m?.screen||m.paywall||m.pendingRequest||m.stopped||m.status!=="waiting")return;let y=Pe.parse({operation:"close",requestId:crypto.randomUUID(),nodeId:m.nodeId,visit:m.visit,revision:m.revision,customerToken:t});O.requestWithCredential("funnels",y,e.runToken,{keepalive:c}).then(()=>G(e.recovery)).catch(()=>{})}let oe=()=>{i&&ue(i,n.session.peek(),!0)},le=()=>Date.now()<j&&performance.now()<l;function me(e){if(e.target.release!==n.appManifestRelease||!le())return!1;try{return ee(e.target.render,document,location.pathname,()=>{})}catch{return a("incompatible",e.id),!1}}function ae(e){if(r||e.epoch!==C||e.visit!==_||document.visibilityState==="hidden")return!1;try{return ee(e.target.render,document,location.pathname,()=>{})}catch{return!1}}async function fe(e){if(de()){a("in_progress",e.id);return}if(!n.session.peek()){a("identity_required",e.id);return}let t=$.load(),c=t?.entries.find(y=>y.command.funnelId===e.funnelId&&(!y.expiresAt||Date.parse(y.expiresAt)>Date.now()));if(c){if(!pe(c)){a("recovery_pending",e.id);return}let y={...c,storageKey:t.key,epoch:C,visit:_};K.add(y.command.requestId),A=y,await Z(y);return}let m={command:Q.parse({operation:"entry_start",entryId:e.id,funnelId:e.funnelId,versionId:e.versionId,release:n.appManifestRelease,requestId:crypto.randomUUID(),locale:document.documentElement.lang||"en"}),epoch:C,visit:_,target:e.target,storageKey:t?.key};K.add(m.command.requestId),A=m,await Z(m)}async function Z(e){if(e.dispatching)return;e.dispatching=!0;let t,c=!1,m=!1;async function y(I){if(e.epoch!==C)return;let v=I.view;if(!(e.storageKey&&v&&(te(v)||v.paywall||v.pendingRequest))&&v&&["running","waiting"].includes(v.status))try{await I.submit({operation:"close",requestId:crypto.randomUUID(),nodeId:v.nodeId,visit:v.visit,revision:v.revision}),G(e)}catch(u){if(!(u instanceof P&&u.code==="FORBIDDEN"))throw u}}try{re(e),a("starting",e.command.entryId);let I=await O.request("funnels",e.command),v=ke.safeParse(I);if(v.success){if(v.data.scope.projectId!==f.projectId||v.data.scope.environment!==f.environment)throw new P("SCOPE_MISMATCH","Entry scope changed");e.epoch===C&&a(v.data.reason,e.command.entryId),G(e),b(e);return}let u=Fe.parse(I);if(!u.runToken||u.scope.projectId!==f.projectId||u.scope.environment!==f.environment||u.run.source.type!=="funnel"||u.run.source.id!==e.command.funnelId||u.run.source.versionId!==e.command.versionId||e.runId!==void 0&&u.run.id!==e.runId)throw new P("INVALID_RESPONSE","Invalid entry Run");if(e.epoch!==C){b(e),a("identity_changed",e.command.entryId);return}re(e,u.run);let w=ce({...n,runToken:u.runToken,funnelId:e.command.funnelId});t=w,m=!0,await w.get(),m=!1;let M=w.view;if(!M||M.id!==u.run.id||M.source.type!=="funnel"||M.source.id!==e.command.funnelId||M.source.versionId!==e.command.versionId)throw new P("INVALID_RESPONSE","Entry Run version changed");if(!["running","waiting"].includes(M.status)){G(e),b(e),a("run_ended",e.command.entryId);return}if(!ae(e)){await y(w),a("left_screen",e.command.entryId),b(e);return}let W=!1,z=!1;if(i&&!i.background){await y(w),a("in_progress",e.command.entryId),b(e);return}i&&X();let U=document.createElement("div");U.hidden=te(M),n.container.append(U);let ve=await Ve(U,{...n.host,client:w,appManifestRelease:n.appManifestRelease,onState(R){Je(w,R),V(n.host?.onState,R)},onDismiss(R){W=!0,U.remove(),R&&!["running","waiting"].includes(R.status)&&G(e),i?.client===w&&(i=void 0,w.reset(),k(),R&&R.status!=="completed"&&a("run_ended",e.command.entryId)),V(n.host?.onDismiss,R)},onComplete(R){z=!0,G(e),i?.client===w&&X(),V(n.host?.onComplete,R)},onError(R){V(n.host?.onError,R),i?.client===w&&R instanceof P&&R.code==="FORBIDDEN"&&(G(e),X(),a("run_ended",e.command.entryId))}}).catch(R=>{throw U.remove(),R});if(!ae(e)||W||z){ve.destroy(),U.remove(),ae(e)||await y(w),b(e);return}let Y=te(w.view??M);U.hidden=Y,i={host:ve,client:w,slot:U,entryId:e.command.entryId,background:Y,runToken:u.runToken,owner:n.session.peek(),recovery:e},Y||(D=e.visit),c=!0,b(e),a("started",e.command.entryId),Y&&a("run_background",e.command.entryId)}catch(I){I instanceof P&&(!t||m&&I.code==="FORBIDDEN")&&I.status!==void 0&&I.status>=400&&I.status<500&&!I.retryable&&(G(e),b(e)),e.epoch===C&&!r&&(a("start_failed",e.command.entryId),V(n.host?.onError,I))}finally{c||t?.reset(),e.dispatching=!1}}function pe(e){if(e.command.release!==n.appManifestRelease||e.target.release!==n.appManifestRelease)return!1;try{return ee(e.target.render,document,location.pathname,()=>{})}catch{return!1}}function $e(){if(de())return!1;let e=$.load();for(let t of e?.entries??[]){if(t.expiresAt&&Date.parse(t.expiresAt)<=Date.now()){$.forget(e.key,t.command.requestId);continue}if(t.command.requestId===i?.recovery.command.requestId||K.has(t.command.requestId)||!pe(t))continue;K.add(t.command.requestId);let c={...t,storageKey:e.key,epoch:C,visit:_};return A=c,Z(c),!0}return!1}function Xe(){if(p=!1,r||!o||document.visibilityState==="hidden")return;ye();let e=i!==void 0&&!i.background;if(e&&(D=_),!$e()){if(!le()){F=!0;return}F=!1;for(let t of g?.entries??[]){let c=`${t.funnelId}:${t.id}`;if(!(t.event!=="screen_enter"||q.has(c)||!me(t))){if(!n.session.peek()){a("identity_required",t.id);continue}if(D===_){q.add(c),e&&a("in_progress",t.id);continue}if(A){a("in_progress",t.id);return}q.add(c),fe(t);break}}}}let k=()=>{!p&&!r&&(p=!0,queueMicrotask(Xe))};function ye(){let e=location.origin+location.pathname;return e===B?!1:(B=e,_++,F=!0,q.clear(),K.clear(),!0)}function Ze(){ye()&&k()}function Ie(e){if(!e.isTrusted||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||document.visibilityState==="hidden")return;let t=e.target;if(!(t instanceof Element)||t.closest("[data-indiana-funnel]"))return;let c=t.closest("button,a,input");if(!(!c||c.matches(":disabled,[aria-disabled='true']")||c.closest("[hidden],[inert],[aria-hidden='true']")))for(let m of g?.entries??[]){let y=m.target.button;if(!(m.event!=="button_click"||!y||!me(m))){try{let I=Ue(document);if(!c.matches(y.selector)||I(y.selector,c)!==1)continue}catch{a("incompatible",m.id);continue}fe(m);break}}}async function he(){if(r)return;if(N)return N;let e=++E,t=new AbortController;x=t;let c,m=new Promise((v,u)=>{c=()=>u(new P("TIMEOUT","Funnel entry configuration read cancelled or timed out")),t.signal.addEventListener("abort",c,{once:!0})}),y=setTimeout(()=>t.abort(),n.timeoutMs??5e3),I=(async()=>{let v=async()=>{let z=await h(`${S}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:t.signal});if(!z.ok)throw new P("SERVICE_UNAVAILABLE","Funnel entries unavailable",z.status);return He.parse(await z.json())},u=await Promise.race([v(),m]),w=Date.parse(u.validatedAt),M=Date.parse(u.validUntil);if(u.scope.projectId!==f.projectId||u.scope.environment!==f.environment||u.scope.environmentId!==n.environmentId||u.release!==n.appManifestRelease||M<=Date.now()||w>Date.now()+5e3||M-w>6e4||M<=w)throw new P("INVALID_RESPONSE","Entry configuration scope or deadline changed");if(r||e!==E)return;let W=g===void 0;g=u,j=M,l=performance.now()+Math.min(M-Date.now(),6e4),(W||F)&&k()})();N=I;try{await I}finally{clearTimeout(y),t.signal.removeEventListener("abort",c),N===I&&(N=void 0)}}async function ge(){try{await he()}catch{r||a("configuration_unavailable")}r||(s=setTimeout(()=>{ge()},15e3))}let we=()=>k();return{async start(){o||r||(o=!0,B=location.origin+location.pathname,H=Ge(Ze),L=n.session.subscribeIdentity(()=>{C++,F=!0,A=void 0,q.clear(),D=-1,K.clear(),i&&ue(i,i.owner,!1),X(),k()}),T=new MutationObserver(k),T.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["hidden","inert","aria-hidden","data-indiana-id","id","style","data-testid","data-test","data-qa"]}),document.addEventListener("click",Ie,!0),document.addEventListener("visibilitychange",we),addEventListener("pagehide",oe),await ge())},refresh:he,async retry(){A&&!r&&A.epoch===C&&await Z(A)},destroy(){r=!0,E++,clearTimeout(s),x?.abort(),T?.disconnect(),H?.(),L?.(),document.removeEventListener("click",Ie,!0),document.removeEventListener("visibilitychange",we),removeEventListener("pagehide",oe),oe(),X(),g=void 0}}}async function Tn(...n){return(await import("./paywall-CDR4GZMX.js")).showPaywall(...n)}async function Dn(...n){return(await import("./funnel-runtime-host-PBJ63LOE.js")).showFunnelRun(...n)}async function On(...n){return(await import("./content-XXVHMKKL.js")).mountContent(...n)}async function xn(...n){return(await import("./content-XXVHMKKL.js")).prepareContent(...n)}export{P as LongplayError,d as MerchantBridgeError,tn as createBrowserFunnelCommandStorage,on as createConfigurationSync,en as createFeatureClient,sn as createFunnelClient,dn as createFunnelPageExperiments,ce as createFunnelRunController,mn as createIamFunnelEntries,cn as createLocalFunnelClient,nn as createLongplay,ln as createMerchantBridge,rn as createPaywallSession,an as evaluateFunnelNode,Ye as formatCouponDiscount,We as formatCouponMoney,Qe as formatCouponTerms,On as mountContent,xn as prepareContent,Dn as showFunnelRun,Tn as showPaywall};