@tinkerlandai/longplay-sdk 0.10.17 → 0.10.18
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/CHANGELOG.md +4 -0
- package/dist/chunk-4ZUMMPHV.js +1 -0
- package/dist/{chunk-3DGJ2X3U.js → chunk-6HWNW6FJ.js} +1 -1
- package/dist/{chunk-T5YZS64H.js → chunk-E4LUW6KP.js} +1 -1
- package/dist/{chunk-7LIABANC.js → chunk-JVQVQHV2.js} +1 -1
- package/dist/{chunk-DM2WGIRX.js → chunk-KYXX676W.js} +1 -1
- package/dist/{chunk-FVX3AVDI.js → chunk-LHBBSD77.js} +1 -1
- package/dist/chunk-N4HZ55YU.js +1 -0
- package/dist/{chunk-MILFPPP4.js → chunk-OMHZBCS3.js} +1 -1
- package/dist/{chunk-F2CMJYA5.js → chunk-P6HCD5OQ.js} +1 -1
- package/dist/{chunk-OUBGSIYR.js → chunk-VVW2J2GL.js} +1 -1
- package/dist/{content-PWGLNXLT.js → content-DLYNJIEB.js} +1 -1
- package/dist/funnel-runtime-host-FVOUCR35.js +1 -0
- package/dist/index.js +1 -1
- package/dist/native-shell.js +1 -1
- package/dist/openrouter.js +1 -1
- package/dist/page.js +1 -1
- package/dist/{paywall-HFX3OZFM.js → paywall-6Q3VLXXL.js} +1 -1
- package/dist/react-native.js +1 -1
- package/dist/server.js +1 -1
- package/dist/visual.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-C4EMRGWJ.js +0 -1
- package/dist/chunk-FBLAWSUN.js +0 -1
- package/dist/funnel-runtime-host-DJ7UXHAW.js +0 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as fn,b as Ie}from"./chunk-OUBGSIYR.js";import"./chunk-T5COWMDA.js";import{a as nn,c as dn,d as un}from"./chunk-DM2WGIRX.js";import{a as cn}from"./chunk-C4EMRGWJ.js";import{b as en,g as tn,l as be,m as an,n as sn,p as ln}from"./chunk-FBLAWSUN.js";import"./chunk-LC2VUKYM.js";import{b as rn,c as on}from"./chunk-EEZLS2YP.js";import{b as $e}from"./chunk-T5YZS64H.js";import{a as B}from"./chunk-26HU2HXU.js";import{a as he,c as ie}from"./chunk-J6KIN4RH.js";import"./chunk-SLUA7ABW.js";import{c as pe,d as ye}from"./chunk-3DGJ2X3U.js";import{a as Z}from"./chunk-DSPLGTQI.js";import"./chunk-FVX3AVDI.js";import{Aa as Ge,B as Ee,Ba as fe,C as qe,Ca as me,D as Ue,Da as Ke,K as We,L as Ye,M as Qe,da as Ve,m as Ne,p as we,q as Pe,r as Te,s as Oe,t as De,u as Fe,v as xe,w as ke,x as Be,xa as je,y as He,z as Le}from"./chunk-7LIABANC.js";import"./chunk-PFHS7HK3.js";import{z as ge}from"zod";var f=class extends Error{constructor(p,D=0,E=!1,b="fix_request"){super(p);this.code=p;this.status=D;this.retryable=E;this.recovery=b;this.name="MerchantBridgeError"}code;status;retryable;recovery};async function mn(n,T){if(!n.headers.get("content-type")?.split(";",1)[0].trim().match(/^application\/(?:json|[a-z0-9.+-]+\+json)$/i))throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");let p=n.body?.getReader();if(!p)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");let D=()=>{p.cancel().catch(()=>{})};T.addEventListener("abort",D,{once:!0});let E=0,b="",r=new TextDecoder("utf-8",{fatal:!0});try{for(T.throwIfAborted();;){let i=await p.read();if(T.throwIfAborted(),i.done)break;if(E+=i.value.byteLength,E>262144)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");b+=r.decode(i.value,{stream:!0})}return b+=r.decode(),JSON.parse(b)}catch(i){throw T.throwIfAborted(),i instanceof f?i:new f("MERCHANT_BRIDGE_INVALID_RESPONSE")}finally{T.removeEventListener("abort",D),await p.cancel().catch(()=>{}),p.releaseLock()}}function pn(n){let T=De.parse(n.origin),p=Fe.parse(n.manifest),D={projectId:n.scope.projectId,environmentId:n.scope.environmentId,environment:n.scope.environment};for(let l of["projectId","environmentId","environment"])if(p[l]!==n.scope[l])throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");let E=n.customerId===void 0?null:ge.uuid().parse(n.customerId),b=0,r=null,i=null,y=new AbortController,m=n.fetch??globalThis.fetch;async function q(l,c,h,F,U){if(!p.capabilities.includes(l))throw new f("MERCHANT_BRIDGE_CAPABILITY_UNSUPPORTED",501);let H=Oe[l];if(["merchant_catalog_reader","merchant_refund_authority","indiana_server_key"].includes(H.authority))throw new f("MERCHANT_BRIDGE_FORBIDDEN",403);let R=b,u=AbortSignal.any([y.signal,AbortSignal.timeout(Math.min(3e4,Math.max(1e3,n.timeoutMs??1e4))),...n.signal?[n.signal]:[],...F?[F]:[]]);u.throwIfAborted();let g=new Headers(await n.headers?.());if(u.throwIfAborted(),R!==b)throw new DOMException("Merchant identity changed","AbortError");if(/\bgg_(?:sk|ct|rt)_/.test(g.get("authorization")??"")||g.has("X-Indiana-Bridge-Signature")||g.has("X-Indiana-Bridge-Key-Id"))throw new f("MERCHANT_BRIDGE_FORBIDDEN",403);g.set(Te,String(we)),g.set("Accept","application/json");let a=crypto.randomUUID();g.set("X-Request-Id",a),g.set("Content-Type","application/json");let L=await m(T+Pe,{method:"POST",credentials:"include",redirect:"error",cache:"no-store",headers:g,signal:u,body:JSON.stringify({bridgeVersion:we,requestId:a,command:H.command,scope:D,data:U??(h===void 0?{}:{operationId:h})})}),M=await mn(L,u);if(u.throwIfAborted(),R!==b)throw new DOMException("Merchant identity changed","AbortError");if(!L.ok){let s=Ue.safeParse(M);throw!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!==a||s.data.command!==H.command?new f("MERCHANT_BRIDGE_INVALID_RESPONSE",L.status):new f(s.data.error.code,L.status,s.data.error.retryable,s.data.error.recovery)}let S=xe(ge.unknown()).safeParse(M);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!==a||S.data.command!==H.command)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE",L.status);let $=c.safeParse(S.data.data);if(!$.success)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE",L.status);return $.data}function A(){if(!E)throw new f("MERCHANT_BRIDGE_UNAUTHENTICATED",401);return E}async function z(l,c,h,F){let U=A(),H=Le.parse({operationId:h,customerId:U}),R=await q(l,c,H.operationId,F,H);if(R.customerId!==U||R.operationId!==H.operationId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return R}return{async readPresentation(l){let c=await q("presentation",Be,void 0,l);if(i!==null&&i!==c.nativeUserId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(c.presentation&&E!==null&&c.presentation.customerId!==E)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return i=c.nativeUserId,r=c.presentation,c},async createSession(l){let c=await q("session",ke,void 0,l);if(i!==null&&i!==c.nativeUserId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(E!==null&&E!==c.session.customerId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(r&&r.customerId!==c.session.customerId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return E=c.session.customerId,i=c.nativeUserId,c.session},async reportPresentation(l,c){let h=A(),F=He.parse(l);if(!r||r.customerId!==h||r.decisionId!==F.decisionId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return q("presentation_events",ge.strictObject({queued:ge.literal(!0)}),void 0,c,F)},async readCustomerCommerce(l){let c=A(),h=await q("customer_commerce",qe,void 0,l);if(h.customerId!==c)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return h},async executePurchase(l,c){let h=await z("purchases",Ee,l,c);if(h.type!=="purchase")throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");return h},readOperation:(l,c)=>z("operation_status",Ne,l,c),async executeSubscriptionChange(l,c){let h=await z("subscription_changes",Ee,l,c);if(h.type!=="subscription_change")throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");return h},reset(){b++,y.abort(),y=new AbortController,E=null,r=null,i=null}}}import{z as se}from"zod";var Je=se.strictObject({command:me,target:Ge,runId:se.uuid().optional(),expiresAt:se.iso.datetime({offset:!0}).optional()}).refine(n=>n.command.release===n.target.release),ze=se.strictObject({schemaVersion:se.literal(1),entries:se.array(Je).max(4e3)});function Xe(n){let T=!1,p=()=>{T||n.unavailable(),T=!0};function D(){return n.storage===!1?void 0:n.storage??globalThis.sessionStorage}function E(r){let i=D()?.getItem(r);if(!i)return[];if(i.length>1048576)throw Error("Entry recovery is too large");return ze.parse(JSON.parse(i)).entries}function b(r,i){let y=D();if(!y)return;if(!i.length)return y.removeItem(r);let m=JSON.stringify(ze.parse({schemaVersion:1,entries:i}));if(m.length>1048576)throw Error("Entry recovery is too large");y.setItem(r,m)}return{load(){try{let r=n.binding();if(!r||n.storage===!1)return;let i="indiana.funnel.entries.v1."+JSON.stringify(r);return{key:i,entries:E(i)}}catch{p();return}},retain(r,i){if(r)try{let y=Je.parse(i);b(r,[...E(r).filter(m=>m.command.funnelId!==y.command.funnelId),y])}catch{p()}},forget(r,i){if(r)try{b(r,E(r).filter(y=>y.command.requestId!==i))}catch{p()}}}}var ve=n=>["running","waiting"].includes(n.status)&&!n.pendingRequest&&(n.stopped||!n.screen&&!n.paywall&&n.instruction?.type==="wait"&&n.instruction.kind!=="operation");function yn(n){let T=pe(n.baseUrl),p=n.scope,D=$e(n),E=n.fetch??globalThis.fetch.bind(globalThis),b,r=!1,i=!1,y=0,m=0,q="",A=0,z=0,l=0,c,h=!1,F,U=!0,H,R,u,g,a,L=-1,M,S=e=>{M===e&&(M=void 0,K())},$=new Set,s=(e,o)=>Z(n.onStatus,e,o),j=new Set,W=Xe({storage:n.recoveryStorage,binding:()=>{let e=n.session.snapshot()?.customerId;return e?[T,p.projectId,p.environment,n.environmentId,n.appManifestRelease,e]:void 0},unavailable:()=>s("recovery_unavailable")}),J=e=>W.forget(e.storageKey,e.command.requestId);function re(e,o){o&&(e.runId=o.id,e.expiresAt=o.runExpiresAt),W.retain(e.storageKey,{command:e.command,target:e.target,...e.runId&&{runId:e.runId},...e.expiresAt&&{expiresAt:e.expiresAt}})}function Y(){let e=a;a=void 0,e?.host.destroy(),e?.slot.remove(),e?.client.reset(),K()}let t=()=>M!==void 0||a!==void 0&&!a.background;function w(e,o){if(a?.client!==e)return;re(a.recovery,o);let d=ve(o);a.slot.hidden=d,d!==a.background&&(a.background=d,d?s("run_background",a.entryId):L=m,K())}function N(e,o,d){let v=e.client.view;if(!o||e.background||!v?.screen||v.paywall||v.pendingRequest||v.stopped||v.status!=="waiting")return;let _=Ve.parse({operation:"close",requestId:crypto.randomUUID(),nodeId:v.nodeId,visit:v.visit,revision:v.revision,customerToken:o});D.requestWithCredential("funnels",_,e.runToken,{keepalive:d}).then(()=>J(e.recovery)).catch(()=>{})}let x=()=>{a&&N(a,n.session.peek(),!0)},G=()=>Date.now()<z&&performance.now()<l;function oe(e){if(e.target.release!==n.appManifestRelease||!G())return!1;try{return ie(e.target.render,document,location.pathname,()=>{})}catch{return s("incompatible",e.id),!1}}function ne(e){if(r||e.epoch!==A||e.visit!==m||document.visibilityState==="hidden")return!1;try{return ie(e.target.render,document,location.pathname,()=>{})}catch{return!1}}async function ce(e){if(t()){s("in_progress",e.id);return}if(!n.session.peek()){s("identity_required",e.id);return}let o=W.load(),d=o?.entries.find(_=>_.command.funnelId===e.funnelId&&(!_.expiresAt||Date.parse(_.expiresAt)>Date.now()));if(d){if(!X(d)){s("recovery_pending",e.id);return}let _={...d,storageKey:o.key,epoch:A,visit:m};j.add(_.command.requestId),M=_,await Q(_);return}let v={command:me.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:A,visit:m,target:e.target,storageKey:o?.key};j.add(v.command.requestId),M=v,await Q(v)}async function Q(e){if(e.dispatching)return;e.dispatching=!0;let o,d=!1,v=!1;async function _(C){if(e.epoch!==A)return;let O=C.view;if(!(e.storageKey&&O&&(ve(O)||O.paywall||O.pendingRequest))&&O&&["running","waiting"].includes(O.status))try{await C.submit({operation:"close",requestId:crypto.randomUUID(),nodeId:O.nodeId,visit:O.visit,revision:O.revision}),J(e)}catch(I){if(!(I instanceof B&&I.code==="FORBIDDEN"))throw I}}try{re(e),s("starting",e.command.entryId);let C=await D.request("funnels",e.command),O=Ke.safeParse(C);if(O.success){if(O.data.scope.projectId!==p.projectId||O.data.scope.environment!==p.environment)throw new B("SCOPE_MISMATCH","Entry scope changed");e.epoch===A&&s(O.data.reason,e.command.entryId),J(e),S(e);return}let I=je.parse(C);if(!I.runToken||I.scope.projectId!==p.projectId||I.scope.environment!==p.environment||I.run.source.type!=="funnel"||I.run.source.id!==e.command.funnelId||I.run.source.versionId!==e.command.versionId||e.runId!==void 0&&I.run.id!==e.runId)throw new B("INVALID_RESPONSE","Invalid entry Run");if(e.epoch!==A){S(e),s("identity_changed",e.command.entryId);return}re(e,I.run);let P=be({...n,runToken:I.runToken,funnelId:e.command.funnelId});o=P,v=!0,await P.get(),v=!1;let V=P.view;if(!V||V.id!==I.run.id||V.source.type!=="funnel"||V.source.id!==e.command.funnelId||V.source.versionId!==e.command.versionId)throw new B("INVALID_RESPONSE","Entry Run version changed");if(!["running","waiting"].includes(V.status)){J(e),S(e),s("run_ended",e.command.entryId);return}if(!ne(e)){await _(P),s("left_screen",e.command.entryId),S(e);return}let ue=!1,ae=!1;if(a&&!a.background){await _(P),s("in_progress",e.command.entryId),S(e);return}a&&Y();let ee=document.createElement("div");ee.hidden=ve(V),n.container.append(ee);let Me=await Ie(ee,{...n.host,client:P,appManifestRelease:n.appManifestRelease,onState(k){w(P,k),Z(n.host?.onState,k)},onDismiss(k){ue=!0,ee.remove(),k&&!["running","waiting"].includes(k.status)&&J(e),a?.client===P&&(a=void 0,P.reset(),K(),k&&k.status!=="completed"&&s("run_ended",e.command.entryId)),Z(n.host?.onDismiss,k)},onComplete(k){ae=!0,J(e),a?.client===P&&Y(),Z(n.host?.onComplete,k)},onError(k){Z(n.host?.onError,k),a?.client===P&&k instanceof B&&k.code==="FORBIDDEN"&&(J(e),Y(),s("run_ended",e.command.entryId))}}).catch(k=>{throw ee.remove(),k});if(!ne(e)||ue||ae){Me.destroy(),ee.remove(),ne(e)||await _(P),S(e);return}let le=ve(P.view??V);ee.hidden=le,a={host:Me,client:P,slot:ee,entryId:e.command.entryId,background:le,runToken:I.runToken,owner:n.session.peek(),recovery:e},le||(L=e.visit),d=!0,S(e),s("started",e.command.entryId),le&&s("run_background",e.command.entryId)}catch(C){C instanceof B&&(!o||v&&C.code==="FORBIDDEN")&&C.status!==void 0&&C.status>=400&&C.status<500&&!C.retryable&&(J(e),S(e)),e.epoch===A&&!r&&(s("start_failed",e.command.entryId),Z(n.host?.onError,C))}finally{d||o?.reset(),e.dispatching=!1}}function X(e){if(e.command.release!==n.appManifestRelease||e.target.release!==n.appManifestRelease)return!1;try{return ie(e.target.render,document,location.pathname,()=>{})}catch{return!1}}function de(){if(t())return!1;let e=W.load();for(let o of e?.entries??[]){if(o.expiresAt&&Date.parse(o.expiresAt)<=Date.now()){W.forget(e.key,o.command.requestId);continue}if(o.command.requestId===a?.recovery.command.requestId||j.has(o.command.requestId)||!X(o))continue;j.add(o.command.requestId);let d={...o,storageKey:e.key,epoch:A,visit:m};return M=d,Q(d),!0}return!1}function te(){if(h=!1,r||!i||document.visibilityState==="hidden")return;Re();let e=a!==void 0&&!a.background;if(e&&(L=m),!de()){if(!G()){U=!0;return}U=!1;for(let o of b?.entries??[]){let d=`${o.funnelId}:${o.id}`;if(!(o.event!=="screen_enter"||$.has(d)||!oe(o))){if(!n.session.peek()){s("identity_required",o.id);continue}if(L===m){$.add(d),e&&s("in_progress",o.id);continue}if(M){s("in_progress",o.id);return}$.add(d),ce(o);break}}}}let K=()=>{!h&&!r&&(h=!0,queueMicrotask(te))};function Re(){let e=location.origin+location.pathname;return e===q?!1:(q=e,m++,U=!0,$.clear(),j.clear(),!0)}function Ze(){Re()&&K()}function Se(e){if(!e.isTrusted||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||document.visibilityState==="hidden")return;let o=e.target;if(!(o instanceof Element)||o.closest("[data-indiana-funnel]"))return;let d=o.closest("button,a,input");if(!(!d||d.matches(":disabled,[aria-disabled='true']")||d.closest("[hidden],[inert],[aria-hidden='true']")))for(let v of b?.entries??[]){let _=v.target.button;if(!(v.event!=="button_click"||!_||!oe(v))){try{let C=he(document);if(!d.matches(_.selector)||C(_.selector,d)!==1)continue}catch{s("incompatible",v.id);continue}ce(v);break}}}async function _e(){if(r)return;if(F)return F;let e=++y,o=new AbortController;H=o;let d,v=new Promise((O,I)=>{d=()=>I(new B("TIMEOUT","Funnel entry configuration read cancelled or timed out")),o.signal.addEventListener("abort",d,{once:!0})}),_=setTimeout(()=>o.abort(),n.timeoutMs??5e3),C=(async()=>{let O=async()=>{let ae=await E(`${T}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:o.signal});if(!ae.ok)throw new B("SERVICE_UNAVAILABLE","Funnel entries unavailable",ae.status);return fe.parse(await ae.json())},I=await Promise.race([O(),v]),P=Date.parse(I.validatedAt),V=Date.parse(I.validUntil);if(I.scope.projectId!==p.projectId||I.scope.environment!==p.environment||I.scope.environmentId!==n.environmentId||I.release!==n.appManifestRelease||V<=Date.now()||P>Date.now()+5e3||V-P>6e4||V<=P)throw new B("INVALID_RESPONSE","Entry configuration scope or deadline changed");if(r||e!==y)return;let ue=b===void 0;b=I,z=V,l=performance.now()+Math.min(V-Date.now(),6e4),(ue||U)&&K()})();F=C;try{await C}finally{clearTimeout(_),o.signal.removeEventListener("abort",d),F===C&&(F=void 0)}}async function Ce(){try{await _e()}catch{r||s("configuration_unavailable")}r||(c=setTimeout(()=>{Ce()},15e3))}let Ae=()=>K();return{async start(){i||r||(i=!0,q=location.origin+location.pathname,R=ye(Ze),u=n.session.subscribeIdentity(()=>{A++,U=!0,M=void 0,$.clear(),L=-1,j.clear(),a&&N(a,a.owner,!1),Y(),K()}),g=new MutationObserver(K),g.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",Se,!0),document.addEventListener("visibilitychange",Ae),addEventListener("pagehide",x),await Ce())},refresh:_e,async retry(){M&&!r&&M.epoch===A&&await Q(M)},destroy(){r=!0,y++,clearTimeout(c),H?.abort(),g?.disconnect(),R?.(),u?.(),document.removeEventListener("click",Se,!0),document.removeEventListener("visibilitychange",Ae),removeEventListener("pagehide",x),x(),Y(),b=void 0}}}function hn(n){let T=pe(n.baseUrl),p=n.fetch??globalThis.fetch.bind(globalThis),D,E=0,b=0,r=!1,i=!1,y=0,m=0,q=-1,A=!1,z="",l,c,h,F,U,H=new Set,R,u,g,a=(t,w)=>Z(n.onStatus,t,w),L=()=>Date.now()<E&&performance.now()<b;function M(t){try{return L()&&t.target.release===n.appManifestRelease&&ie(t.target.render,document,location.pathname,()=>{})}catch{return a("incompatible",t.id),!1}}function S(){let t=g;g=void 0,t?.host.destroy(),t?.slot.remove()}async function $(t){if(t.dispatching)return;t.dispatching=!0;let w=y;try{let N=await t.process.open({operation:"entry_start",funnelId:t.entry.funnelId,versionId:t.entry.versionId,entryId:t.entry.id,release:n.appManifestRelease,locale:n.locale??"en"});if(r||w!==y||u!==t)return;let x=document.createElement("div");n.container.append(x),q=m;let G=await Ie(x,{...n.host,client:N.controller,appManifestRelease:n.appManifestRelease,onDismiss(oe){g?.process===t.process&&(g=void 0,x.remove()),Z(n.host?.onDismiss,oe)}});if(r||w!==y||u!==t){G.destroy(),x.remove();return}g={entry:t.entry,process:t.process,host:G,slot:x},u=void 0,a("run_presented",t.entry.id)}catch(N){if(r||w!==y||u!==t)return;N instanceof B&&"result"in N?(u=void 0,t.process.destroy(),a("suppressed",t.entry.id),j()):a("entry_unavailable",t.entry.id)}finally{t.dispatching=!1}}function s(t){if(r||u||g||R||q===m||!M(t))return;let w=`${m}:${t.id}`;if(H.has(w))return;H.add(w);let N={entry:t,process:n.createProcess(t),visit:m};u=N,$(N)}function j(){A||r||(A=!0,queueMicrotask(()=>{if(A=!1,!(r||document.visibilityState==="hidden"||!L()||u||g||R||q===m)){for(let t of D?.entries??[])if(t.event==="screen_enter"&&M(t)){s(t);break}}}))}function W(t){if(!t.isTrusted||t.defaultPrevented||!(t.target instanceof Element)||u||g||R||q===m)return;let w=he(document,()=>{});for(let N of D?.entries??[]){let x=N.target.button;if(N.event!=="button_click"||!x||!M(N))continue;let G=t.target.closest(x.selector);if(!(!G||G.tagName.toLowerCase()!==x.tag||w(x.selector)!==1||G.matches(":disabled")||G.closest('[inert],[hidden],[aria-hidden="true"]'))){s(N);break}}}let J=()=>{let t=location.origin+location.pathname;t!==z&&(z=t,m++,H.clear(),j())};async function re(){if(r)return;if(h)return h;let t=y,w=new AbortController;c=w;let N,x=new Promise((ce,Q)=>{N=Q}),G=()=>N(new B("TIMEOUT","Funnel entry read cancelled"));w.signal.addEventListener("abort",G,{once:!0});let oe=setTimeout(()=>w.abort(),n.timeoutMs??5e3),ne=(async()=>{let ce=encodeURIComponent(JSON.stringify(["funnel-process/1"])),Q=async()=>{let K=await p(`${T}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}&executionContracts=${ce}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:w.signal});if(!K.ok)throw new B("SERVICE_UNAVAILABLE","Funnel entries unavailable",K.status);return fe.parse(await K.json())},X=await Promise.race([Q(),x]),de=Date.parse(X.validatedAt),te=Date.parse(X.validUntil);if(X.scope.projectId!==n.scope.projectId||X.scope.environment!==n.scope.environment||X.scope.environmentId!==n.environmentId||X.release!==n.appManifestRelease||te<=Date.now()||de>Date.now()+5e3||te<=de||te-de>6e4)throw new B("INVALID_RESPONSE","Entry scope or deadline changed");r||t!==y||(D=X,E=te,b=performance.now()+Math.min(te-Date.now(),6e4),j())})();h=ne;try{await ne}finally{clearTimeout(oe),w.signal.removeEventListener("abort",G),h===ne&&(h=void 0)}}async function Y(){try{await re()}catch{r||a("configuration_unavailable")}r||(l=setTimeout(()=>{Y()},15e3))}return{async start(){i||r||(i=!0,z=location.origin+location.pathname,F=ye(J),U=new MutationObserver(j),U.observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["hidden","inert","aria-hidden","data-indiana-id","id","style","data-testid","data-test","data-qa"]}),document.addEventListener("click",W,!0),document.addEventListener("visibilitychange",j),await Y())},refresh:re,async retry(){u&&!r&&await $(u)},async syncIdentity(){let t=g??u??R;if(t)try{let w=await t.process.syncIdentity();return R===t&&(u={entry:t.entry,process:t.process,visit:m},R=void 0,await $(u)),w}catch(w){throw t.process.view||(R={entry:t.entry,process:t.process,visit:m},u=void 0,S()),w}},async detach(){y++,c?.abort();let t=g??u??R;t&&(R={entry:t.entry,process:t.process,visit:m}),u=void 0,S(),t&&await t.process.detach()},destroy(){r=!0,y++,clearTimeout(l),c?.abort(),U?.disconnect(),F?.(),document.removeEventListener("click",W,!0),document.removeEventListener("visibilitychange",j);let t=g??u??R;u=void 0,R=void 0,S(),t?.process.destroy(),D=void 0}}}async function Vn(...n){return(await import("./paywall-HFX3OZFM.js")).showPaywall(...n)}async function jn(...n){return(await import("./funnel-runtime-host-DJ7UXHAW.js")).showFunnelRun(...n)}async function Gn(...n){return(await import("./content-PWGLNXLT.js")).mountContent(...n)}async function Kn(...n){return(await import("./content-PWGLNXLT.js")).prepareContent(...n)}export{B as LongplayError,f as MerchantBridgeError,tn as createBrowserFunnelCommandStorage,sn as createConfigurationSync,en as createFeatureClient,dn as createFunnelClient,fn as createFunnelPageExperiments,un as createFunnelProcess,be as createFunnelRunController,yn as createIamFunnelEntries,hn as createIamFunnelProcessEntries,ln as createLocalFunnelClient,nn as createLongplay,pn as createMerchantBridge,an as createPaywallSession,cn as evaluateFunnelNode,Ye as formatCouponDiscount,We as formatCouponMoney,Qe as formatCouponTerms,rn as getPaywallRecovery,Gn as mountContent,Kn as prepareContent,on as preparePaywallFallback,jn as showFunnelRun,Vn as showPaywall};
|
|
1
|
+
import{a as fn,b as Ie}from"./chunk-VVW2J2GL.js";import"./chunk-T5COWMDA.js";import{a as nn,c as dn,d as un}from"./chunk-KYXX676W.js";import{a as cn}from"./chunk-4ZUMMPHV.js";import{b as en,g as tn,l as be,m as an,n as sn,p as ln}from"./chunk-N4HZ55YU.js";import"./chunk-LC2VUKYM.js";import{b as rn,c as on}from"./chunk-EEZLS2YP.js";import{b as $e}from"./chunk-E4LUW6KP.js";import{a as B}from"./chunk-26HU2HXU.js";import{a as he,c as ie}from"./chunk-J6KIN4RH.js";import"./chunk-SLUA7ABW.js";import{c as pe,d as ye}from"./chunk-6HWNW6FJ.js";import{a as Z}from"./chunk-DSPLGTQI.js";import"./chunk-LHBBSD77.js";import{Aa as Ge,B as Ee,Ba as fe,C as qe,Ca as me,D as Ue,Da as Ke,K as We,L as Ye,M as Qe,da as Ve,m as Ne,p as we,q as Pe,r as Te,s as Oe,t as De,u as Fe,v as xe,w as ke,x as Be,xa as je,y as He,z as Le}from"./chunk-JVQVQHV2.js";import"./chunk-PFHS7HK3.js";import{z as ge}from"zod";var f=class extends Error{constructor(p,D=0,E=!1,b="fix_request"){super(p);this.code=p;this.status=D;this.retryable=E;this.recovery=b;this.name="MerchantBridgeError"}code;status;retryable;recovery};async function mn(n,T){if(!n.headers.get("content-type")?.split(";",1)[0].trim().match(/^application\/(?:json|[a-z0-9.+-]+\+json)$/i))throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");let p=n.body?.getReader();if(!p)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");let D=()=>{p.cancel().catch(()=>{})};T.addEventListener("abort",D,{once:!0});let E=0,b="",r=new TextDecoder("utf-8",{fatal:!0});try{for(T.throwIfAborted();;){let i=await p.read();if(T.throwIfAborted(),i.done)break;if(E+=i.value.byteLength,E>262144)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");b+=r.decode(i.value,{stream:!0})}return b+=r.decode(),JSON.parse(b)}catch(i){throw T.throwIfAborted(),i instanceof f?i:new f("MERCHANT_BRIDGE_INVALID_RESPONSE")}finally{T.removeEventListener("abort",D),await p.cancel().catch(()=>{}),p.releaseLock()}}function pn(n){let T=De.parse(n.origin),p=Fe.parse(n.manifest),D={projectId:n.scope.projectId,environmentId:n.scope.environmentId,environment:n.scope.environment};for(let l of["projectId","environmentId","environment"])if(p[l]!==n.scope[l])throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");let E=n.customerId===void 0?null:ge.uuid().parse(n.customerId),b=0,r=null,i=null,y=new AbortController,m=n.fetch??globalThis.fetch;async function q(l,c,h,F,U){if(!p.capabilities.includes(l))throw new f("MERCHANT_BRIDGE_CAPABILITY_UNSUPPORTED",501);let H=Oe[l];if(["merchant_catalog_reader","merchant_refund_authority","indiana_server_key"].includes(H.authority))throw new f("MERCHANT_BRIDGE_FORBIDDEN",403);let R=b,u=AbortSignal.any([y.signal,AbortSignal.timeout(Math.min(3e4,Math.max(1e3,n.timeoutMs??1e4))),...n.signal?[n.signal]:[],...F?[F]:[]]);u.throwIfAborted();let g=new Headers(await n.headers?.());if(u.throwIfAborted(),R!==b)throw new DOMException("Merchant identity changed","AbortError");if(/\bgg_(?:sk|ct|rt)_/.test(g.get("authorization")??"")||g.has("X-Indiana-Bridge-Signature")||g.has("X-Indiana-Bridge-Key-Id"))throw new f("MERCHANT_BRIDGE_FORBIDDEN",403);g.set(Te,String(we)),g.set("Accept","application/json");let a=crypto.randomUUID();g.set("X-Request-Id",a),g.set("Content-Type","application/json");let L=await m(T+Pe,{method:"POST",credentials:"include",redirect:"error",cache:"no-store",headers:g,signal:u,body:JSON.stringify({bridgeVersion:we,requestId:a,command:H.command,scope:D,data:U??(h===void 0?{}:{operationId:h})})}),M=await mn(L,u);if(u.throwIfAborted(),R!==b)throw new DOMException("Merchant identity changed","AbortError");if(!L.ok){let s=Ue.safeParse(M);throw!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!==a||s.data.command!==H.command?new f("MERCHANT_BRIDGE_INVALID_RESPONSE",L.status):new f(s.data.error.code,L.status,s.data.error.retryable,s.data.error.recovery)}let S=xe(ge.unknown()).safeParse(M);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!==a||S.data.command!==H.command)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE",L.status);let $=c.safeParse(S.data.data);if(!$.success)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE",L.status);return $.data}function A(){if(!E)throw new f("MERCHANT_BRIDGE_UNAUTHENTICATED",401);return E}async function z(l,c,h,F){let U=A(),H=Le.parse({operationId:h,customerId:U}),R=await q(l,c,H.operationId,F,H);if(R.customerId!==U||R.operationId!==H.operationId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return R}return{async readPresentation(l){let c=await q("presentation",Be,void 0,l);if(i!==null&&i!==c.nativeUserId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(c.presentation&&E!==null&&c.presentation.customerId!==E)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return i=c.nativeUserId,r=c.presentation,c},async createSession(l){let c=await q("session",ke,void 0,l);if(i!==null&&i!==c.nativeUserId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(E!==null&&E!==c.session.customerId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");if(r&&r.customerId!==c.session.customerId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return E=c.session.customerId,i=c.nativeUserId,c.session},async reportPresentation(l,c){let h=A(),F=He.parse(l);if(!r||r.customerId!==h||r.decisionId!==F.decisionId)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return q("presentation_events",ge.strictObject({queued:ge.literal(!0)}),void 0,c,F)},async readCustomerCommerce(l){let c=A(),h=await q("customer_commerce",qe,void 0,l);if(h.customerId!==c)throw new f("MERCHANT_BRIDGE_SCOPE_MISMATCH");return h},async executePurchase(l,c){let h=await z("purchases",Ee,l,c);if(h.type!=="purchase")throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");return h},readOperation:(l,c)=>z("operation_status",Ne,l,c),async executeSubscriptionChange(l,c){let h=await z("subscription_changes",Ee,l,c);if(h.type!=="subscription_change")throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");return h},reset(){b++,y.abort(),y=new AbortController,E=null,r=null,i=null}}}import{z as se}from"zod";var Je=se.strictObject({command:me,target:Ge,runId:se.uuid().optional(),expiresAt:se.iso.datetime({offset:!0}).optional()}).refine(n=>n.command.release===n.target.release),ze=se.strictObject({schemaVersion:se.literal(1),entries:se.array(Je).max(4e3)});function Xe(n){let T=!1,p=()=>{T||n.unavailable(),T=!0};function D(){return n.storage===!1?void 0:n.storage??globalThis.sessionStorage}function E(r){let i=D()?.getItem(r);if(!i)return[];if(i.length>1048576)throw Error("Entry recovery is too large");return ze.parse(JSON.parse(i)).entries}function b(r,i){let y=D();if(!y)return;if(!i.length)return y.removeItem(r);let m=JSON.stringify(ze.parse({schemaVersion:1,entries:i}));if(m.length>1048576)throw Error("Entry recovery is too large");y.setItem(r,m)}return{load(){try{let r=n.binding();if(!r||n.storage===!1)return;let i="indiana.funnel.entries.v1."+JSON.stringify(r);return{key:i,entries:E(i)}}catch{p();return}},retain(r,i){if(r)try{let y=Je.parse(i);b(r,[...E(r).filter(m=>m.command.funnelId!==y.command.funnelId),y])}catch{p()}},forget(r,i){if(r)try{b(r,E(r).filter(y=>y.command.requestId!==i))}catch{p()}}}}var ve=n=>["running","waiting"].includes(n.status)&&!n.pendingRequest&&(n.stopped||!n.screen&&!n.paywall&&n.instruction?.type==="wait"&&n.instruction.kind!=="operation");function yn(n){let T=pe(n.baseUrl),p=n.scope,D=$e(n),E=n.fetch??globalThis.fetch.bind(globalThis),b,r=!1,i=!1,y=0,m=0,q="",A=0,z=0,l=0,c,h=!1,F,U=!0,H,R,u,g,a,L=-1,M,S=e=>{M===e&&(M=void 0,K())},$=new Set,s=(e,o)=>Z(n.onStatus,e,o),j=new Set,W=Xe({storage:n.recoveryStorage,binding:()=>{let e=n.session.snapshot()?.customerId;return e?[T,p.projectId,p.environment,n.environmentId,n.appManifestRelease,e]:void 0},unavailable:()=>s("recovery_unavailable")}),J=e=>W.forget(e.storageKey,e.command.requestId);function re(e,o){o&&(e.runId=o.id,e.expiresAt=o.runExpiresAt),W.retain(e.storageKey,{command:e.command,target:e.target,...e.runId&&{runId:e.runId},...e.expiresAt&&{expiresAt:e.expiresAt}})}function Y(){let e=a;a=void 0,e?.host.destroy(),e?.slot.remove(),e?.client.reset(),K()}let t=()=>M!==void 0||a!==void 0&&!a.background;function w(e,o){if(a?.client!==e)return;re(a.recovery,o);let d=ve(o);a.slot.hidden=d,d!==a.background&&(a.background=d,d?s("run_background",a.entryId):L=m,K())}function N(e,o,d){let v=e.client.view;if(!o||e.background||!v?.screen||v.paywall||v.pendingRequest||v.stopped||v.status!=="waiting")return;let _=Ve.parse({operation:"close",requestId:crypto.randomUUID(),nodeId:v.nodeId,visit:v.visit,revision:v.revision,customerToken:o});D.requestWithCredential("funnels",_,e.runToken,{keepalive:d}).then(()=>J(e.recovery)).catch(()=>{})}let x=()=>{a&&N(a,n.session.peek(),!0)},G=()=>Date.now()<z&&performance.now()<l;function oe(e){if(e.target.release!==n.appManifestRelease||!G())return!1;try{return ie(e.target.render,document,location.pathname,()=>{})}catch{return s("incompatible",e.id),!1}}function ne(e){if(r||e.epoch!==A||e.visit!==m||document.visibilityState==="hidden")return!1;try{return ie(e.target.render,document,location.pathname,()=>{})}catch{return!1}}async function ce(e){if(t()){s("in_progress",e.id);return}if(!n.session.peek()){s("identity_required",e.id);return}let o=W.load(),d=o?.entries.find(_=>_.command.funnelId===e.funnelId&&(!_.expiresAt||Date.parse(_.expiresAt)>Date.now()));if(d){if(!X(d)){s("recovery_pending",e.id);return}let _={...d,storageKey:o.key,epoch:A,visit:m};j.add(_.command.requestId),M=_,await Q(_);return}let v={command:me.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:A,visit:m,target:e.target,storageKey:o?.key};j.add(v.command.requestId),M=v,await Q(v)}async function Q(e){if(e.dispatching)return;e.dispatching=!0;let o,d=!1,v=!1;async function _(C){if(e.epoch!==A)return;let O=C.view;if(!(e.storageKey&&O&&(ve(O)||O.paywall||O.pendingRequest))&&O&&["running","waiting"].includes(O.status))try{await C.submit({operation:"close",requestId:crypto.randomUUID(),nodeId:O.nodeId,visit:O.visit,revision:O.revision}),J(e)}catch(I){if(!(I instanceof B&&I.code==="FORBIDDEN"))throw I}}try{re(e),s("starting",e.command.entryId);let C=await D.request("funnels",e.command),O=Ke.safeParse(C);if(O.success){if(O.data.scope.projectId!==p.projectId||O.data.scope.environment!==p.environment)throw new B("SCOPE_MISMATCH","Entry scope changed");e.epoch===A&&s(O.data.reason,e.command.entryId),J(e),S(e);return}let I=je.parse(C);if(!I.runToken||I.scope.projectId!==p.projectId||I.scope.environment!==p.environment||I.run.source.type!=="funnel"||I.run.source.id!==e.command.funnelId||I.run.source.versionId!==e.command.versionId||e.runId!==void 0&&I.run.id!==e.runId)throw new B("INVALID_RESPONSE","Invalid entry Run");if(e.epoch!==A){S(e),s("identity_changed",e.command.entryId);return}re(e,I.run);let P=be({...n,runToken:I.runToken,funnelId:e.command.funnelId});o=P,v=!0,await P.get(),v=!1;let V=P.view;if(!V||V.id!==I.run.id||V.source.type!=="funnel"||V.source.id!==e.command.funnelId||V.source.versionId!==e.command.versionId)throw new B("INVALID_RESPONSE","Entry Run version changed");if(!["running","waiting"].includes(V.status)){J(e),S(e),s("run_ended",e.command.entryId);return}if(!ne(e)){await _(P),s("left_screen",e.command.entryId),S(e);return}let ue=!1,ae=!1;if(a&&!a.background){await _(P),s("in_progress",e.command.entryId),S(e);return}a&&Y();let ee=document.createElement("div");ee.hidden=ve(V),n.container.append(ee);let Me=await Ie(ee,{...n.host,client:P,appManifestRelease:n.appManifestRelease,onState(k){w(P,k),Z(n.host?.onState,k)},onDismiss(k){ue=!0,ee.remove(),k&&!["running","waiting"].includes(k.status)&&J(e),a?.client===P&&(a=void 0,P.reset(),K(),k&&k.status!=="completed"&&s("run_ended",e.command.entryId)),Z(n.host?.onDismiss,k)},onComplete(k){ae=!0,J(e),a?.client===P&&Y(),Z(n.host?.onComplete,k)},onError(k){Z(n.host?.onError,k),a?.client===P&&k instanceof B&&k.code==="FORBIDDEN"&&(J(e),Y(),s("run_ended",e.command.entryId))}}).catch(k=>{throw ee.remove(),k});if(!ne(e)||ue||ae){Me.destroy(),ee.remove(),ne(e)||await _(P),S(e);return}let le=ve(P.view??V);ee.hidden=le,a={host:Me,client:P,slot:ee,entryId:e.command.entryId,background:le,runToken:I.runToken,owner:n.session.peek(),recovery:e},le||(L=e.visit),d=!0,S(e),s("started",e.command.entryId),le&&s("run_background",e.command.entryId)}catch(C){C instanceof B&&(!o||v&&C.code==="FORBIDDEN")&&C.status!==void 0&&C.status>=400&&C.status<500&&!C.retryable&&(J(e),S(e)),e.epoch===A&&!r&&(s("start_failed",e.command.entryId),Z(n.host?.onError,C))}finally{d||o?.reset(),e.dispatching=!1}}function X(e){if(e.command.release!==n.appManifestRelease||e.target.release!==n.appManifestRelease)return!1;try{return ie(e.target.render,document,location.pathname,()=>{})}catch{return!1}}function de(){if(t())return!1;let e=W.load();for(let o of e?.entries??[]){if(o.expiresAt&&Date.parse(o.expiresAt)<=Date.now()){W.forget(e.key,o.command.requestId);continue}if(o.command.requestId===a?.recovery.command.requestId||j.has(o.command.requestId)||!X(o))continue;j.add(o.command.requestId);let d={...o,storageKey:e.key,epoch:A,visit:m};return M=d,Q(d),!0}return!1}function te(){if(h=!1,r||!i||document.visibilityState==="hidden")return;Re();let e=a!==void 0&&!a.background;if(e&&(L=m),!de()){if(!G()){U=!0;return}U=!1;for(let o of b?.entries??[]){let d=`${o.funnelId}:${o.id}`;if(!(o.event!=="screen_enter"||$.has(d)||!oe(o))){if(!n.session.peek()){s("identity_required",o.id);continue}if(L===m){$.add(d),e&&s("in_progress",o.id);continue}if(M){s("in_progress",o.id);return}$.add(d),ce(o);break}}}}let K=()=>{!h&&!r&&(h=!0,queueMicrotask(te))};function Re(){let e=location.origin+location.pathname;return e===q?!1:(q=e,m++,U=!0,$.clear(),j.clear(),!0)}function Ze(){Re()&&K()}function Se(e){if(!e.isTrusted||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||document.visibilityState==="hidden")return;let o=e.target;if(!(o instanceof Element)||o.closest("[data-indiana-funnel]"))return;let d=o.closest("button,a,input");if(!(!d||d.matches(":disabled,[aria-disabled='true']")||d.closest("[hidden],[inert],[aria-hidden='true']")))for(let v of b?.entries??[]){let _=v.target.button;if(!(v.event!=="button_click"||!_||!oe(v))){try{let C=he(document);if(!d.matches(_.selector)||C(_.selector,d)!==1)continue}catch{s("incompatible",v.id);continue}ce(v);break}}}async function _e(){if(r)return;if(F)return F;let e=++y,o=new AbortController;H=o;let d,v=new Promise((O,I)=>{d=()=>I(new B("TIMEOUT","Funnel entry configuration read cancelled or timed out")),o.signal.addEventListener("abort",d,{once:!0})}),_=setTimeout(()=>o.abort(),n.timeoutMs??5e3),C=(async()=>{let O=async()=>{let ae=await E(`${T}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:o.signal});if(!ae.ok)throw new B("SERVICE_UNAVAILABLE","Funnel entries unavailable",ae.status);return fe.parse(await ae.json())},I=await Promise.race([O(),v]),P=Date.parse(I.validatedAt),V=Date.parse(I.validUntil);if(I.scope.projectId!==p.projectId||I.scope.environment!==p.environment||I.scope.environmentId!==n.environmentId||I.release!==n.appManifestRelease||V<=Date.now()||P>Date.now()+5e3||V-P>6e4||V<=P)throw new B("INVALID_RESPONSE","Entry configuration scope or deadline changed");if(r||e!==y)return;let ue=b===void 0;b=I,z=V,l=performance.now()+Math.min(V-Date.now(),6e4),(ue||U)&&K()})();F=C;try{await C}finally{clearTimeout(_),o.signal.removeEventListener("abort",d),F===C&&(F=void 0)}}async function Ce(){try{await _e()}catch{r||s("configuration_unavailable")}r||(c=setTimeout(()=>{Ce()},15e3))}let Ae=()=>K();return{async start(){i||r||(i=!0,q=location.origin+location.pathname,R=ye(Ze),u=n.session.subscribeIdentity(()=>{A++,U=!0,M=void 0,$.clear(),L=-1,j.clear(),a&&N(a,a.owner,!1),Y(),K()}),g=new MutationObserver(K),g.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",Se,!0),document.addEventListener("visibilitychange",Ae),addEventListener("pagehide",x),await Ce())},refresh:_e,async retry(){M&&!r&&M.epoch===A&&await Q(M)},destroy(){r=!0,y++,clearTimeout(c),H?.abort(),g?.disconnect(),R?.(),u?.(),document.removeEventListener("click",Se,!0),document.removeEventListener("visibilitychange",Ae),removeEventListener("pagehide",x),x(),Y(),b=void 0}}}function hn(n){let T=pe(n.baseUrl),p=n.fetch??globalThis.fetch.bind(globalThis),D,E=0,b=0,r=!1,i=!1,y=0,m=0,q=-1,A=!1,z="",l,c,h,F,U,H=new Set,R,u,g,a=(t,w)=>Z(n.onStatus,t,w),L=()=>Date.now()<E&&performance.now()<b;function M(t){try{return L()&&t.target.release===n.appManifestRelease&&ie(t.target.render,document,location.pathname,()=>{})}catch{return a("incompatible",t.id),!1}}function S(){let t=g;g=void 0,t?.host.destroy(),t?.slot.remove()}async function $(t){if(t.dispatching)return;t.dispatching=!0;let w=y;try{let N=await t.process.open({operation:"entry_start",funnelId:t.entry.funnelId,versionId:t.entry.versionId,entryId:t.entry.id,release:n.appManifestRelease,locale:n.locale??"en"});if(r||w!==y||u!==t)return;let x=document.createElement("div");n.container.append(x),q=m;let G=await Ie(x,{...n.host,client:N.controller,appManifestRelease:n.appManifestRelease,onDismiss(oe){g?.process===t.process&&(g=void 0,x.remove()),Z(n.host?.onDismiss,oe)}});if(r||w!==y||u!==t){G.destroy(),x.remove();return}g={entry:t.entry,process:t.process,host:G,slot:x},u=void 0,a("run_presented",t.entry.id)}catch(N){if(r||w!==y||u!==t)return;N instanceof B&&"result"in N?(u=void 0,t.process.destroy(),a("suppressed",t.entry.id),j()):a("entry_unavailable",t.entry.id)}finally{t.dispatching=!1}}function s(t){if(r||u||g||R||q===m||!M(t))return;let w=`${m}:${t.id}`;if(H.has(w))return;H.add(w);let N={entry:t,process:n.createProcess(t),visit:m};u=N,$(N)}function j(){A||r||(A=!0,queueMicrotask(()=>{if(A=!1,!(r||document.visibilityState==="hidden"||!L()||u||g||R||q===m)){for(let t of D?.entries??[])if(t.event==="screen_enter"&&M(t)){s(t);break}}}))}function W(t){if(!t.isTrusted||t.defaultPrevented||!(t.target instanceof Element)||u||g||R||q===m)return;let w=he(document,()=>{});for(let N of D?.entries??[]){let x=N.target.button;if(N.event!=="button_click"||!x||!M(N))continue;let G=t.target.closest(x.selector);if(!(!G||G.tagName.toLowerCase()!==x.tag||w(x.selector)!==1||G.matches(":disabled")||G.closest('[inert],[hidden],[aria-hidden="true"]'))){s(N);break}}}let J=()=>{let t=location.origin+location.pathname;t!==z&&(z=t,m++,H.clear(),j())};async function re(){if(r)return;if(h)return h;let t=y,w=new AbortController;c=w;let N,x=new Promise((ce,Q)=>{N=Q}),G=()=>N(new B("TIMEOUT","Funnel entry read cancelled"));w.signal.addEventListener("abort",G,{once:!0});let oe=setTimeout(()=>w.abort(),n.timeoutMs??5e3),ne=(async()=>{let ce=encodeURIComponent(JSON.stringify(["funnel-process/1"])),Q=async()=>{let K=await p(`${T}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}&executionContracts=${ce}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:w.signal});if(!K.ok)throw new B("SERVICE_UNAVAILABLE","Funnel entries unavailable",K.status);return fe.parse(await K.json())},X=await Promise.race([Q(),x]),de=Date.parse(X.validatedAt),te=Date.parse(X.validUntil);if(X.scope.projectId!==n.scope.projectId||X.scope.environment!==n.scope.environment||X.scope.environmentId!==n.environmentId||X.release!==n.appManifestRelease||te<=Date.now()||de>Date.now()+5e3||te<=de||te-de>6e4)throw new B("INVALID_RESPONSE","Entry scope or deadline changed");r||t!==y||(D=X,E=te,b=performance.now()+Math.min(te-Date.now(),6e4),j())})();h=ne;try{await ne}finally{clearTimeout(oe),w.signal.removeEventListener("abort",G),h===ne&&(h=void 0)}}async function Y(){try{await re()}catch{r||a("configuration_unavailable")}r||(l=setTimeout(()=>{Y()},15e3))}return{async start(){i||r||(i=!0,z=location.origin+location.pathname,F=ye(J),U=new MutationObserver(j),U.observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["hidden","inert","aria-hidden","data-indiana-id","id","style","data-testid","data-test","data-qa"]}),document.addEventListener("click",W,!0),document.addEventListener("visibilitychange",j),await Y())},refresh:re,async retry(){u&&!r&&await $(u)},async syncIdentity(){let t=g??u??R;if(t)try{let w=await t.process.syncIdentity();return R===t&&(u={entry:t.entry,process:t.process,visit:m},R=void 0,await $(u)),w}catch(w){throw t.process.view||(R={entry:t.entry,process:t.process,visit:m},u=void 0,S()),w}},async detach(){y++,c?.abort();let t=g??u??R;t&&(R={entry:t.entry,process:t.process,visit:m}),u=void 0,S(),t&&await t.process.detach()},destroy(){r=!0,y++,clearTimeout(l),c?.abort(),U?.disconnect(),F?.(),document.removeEventListener("click",W,!0),document.removeEventListener("visibilitychange",j);let t=g??u??R;u=void 0,R=void 0,S(),t?.process.destroy(),D=void 0}}}async function Vn(...n){return(await import("./paywall-6Q3VLXXL.js")).showPaywall(...n)}async function jn(...n){return(await import("./funnel-runtime-host-FVOUCR35.js")).showFunnelRun(...n)}async function Gn(...n){return(await import("./content-DLYNJIEB.js")).mountContent(...n)}async function Kn(...n){return(await import("./content-DLYNJIEB.js")).prepareContent(...n)}export{B as LongplayError,f as MerchantBridgeError,tn as createBrowserFunnelCommandStorage,sn as createConfigurationSync,en as createFeatureClient,dn as createFunnelClient,fn as createFunnelPageExperiments,un as createFunnelProcess,be as createFunnelRunController,yn as createIamFunnelEntries,hn as createIamFunnelProcessEntries,ln as createLocalFunnelClient,nn as createLongplay,pn as createMerchantBridge,an as createPaywallSession,cn as evaluateFunnelNode,Ye as formatCouponDiscount,We as formatCouponMoney,Qe as formatCouponTerms,rn as getPaywallRecovery,Gn as mountContent,Kn as prepareContent,on as preparePaywallFallback,jn as showFunnelRun,Vn as showPaywall};
|