@tinkerlandai/longplay-sdk 0.10.7 → 0.10.11
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 +25 -1
- package/README.md +40 -4
- package/README.zh-CN.md +4 -2
- package/dist/{ai-usage-Btwg1nD7.d.ts → ai-usage-C-OZBxgW.d.ts} +1 -1
- package/dist/{api-5gAz4-Sb.d.ts → api-Bf_aRlXs.d.ts} +82 -0
- package/dist/chunk-33FQUT3Z.js +179 -0
- package/dist/chunk-4B5G3ZVV.js +4 -0
- package/dist/chunk-4C5XH3T3.js +1 -0
- package/dist/chunk-7DUOIHRD.js +6 -0
- package/dist/chunk-7RDYCTR4.js +1 -0
- package/dist/chunk-CDG7GM4C.js +1 -0
- package/dist/chunk-GDFBOM3V.js +1 -0
- package/dist/chunk-JGFAFQKK.js +1 -0
- package/dist/chunk-OZZMZH7X.js +1 -0
- package/dist/chunk-PYIHBK7E.js +1 -0
- package/dist/chunk-QHJAF5T2.js +1 -0
- package/dist/chunk-VSJOHWDL.js +17 -0
- package/dist/chunk-VSMITXQD.js +1 -0
- package/dist/chunk-ZYQPKGJM.js +1 -0
- package/dist/{configuration-sync-CywDxRkX.d.ts → configuration-sync-D2n_gGj6.d.ts} +1 -0
- package/dist/content-YQ7IJ47M.js +1 -0
- package/dist/{funnel-local-client-B4Z3dvNf.d.ts → funnel-local-client-DJq2K7an.d.ts} +8869 -93
- package/dist/{funnel-node-evaluation-P5B4fPfJ.d.ts → funnel-node-evaluation-CJSkUkbv.d.ts} +36 -0
- package/dist/{funnel-resource-client-BhbXsB2q.d.ts → funnel-process-client-C_UhTH8g.d.ts} +5132 -41
- package/dist/funnel-runtime-host-K2SXD2R2.js +1 -0
- package/dist/index.d.ts +106 -77
- package/dist/index.js +1 -1
- package/dist/native-shell.js +1 -1
- package/dist/openrouter.d.ts +2 -2
- package/dist/openrouter.js +1 -1
- package/dist/page.d.ts +1 -1
- package/dist/page.js +1 -1
- package/dist/paywall-PJEMTVSZ.js +1 -0
- package/dist/popup.js +1 -1
- package/dist/react-native.d.ts +109 -106
- package/dist/react-native.js +1 -1
- package/dist/screen-renderer-NHJ6OQTF.js +1 -0
- package/dist/server.d.ts +10677 -25
- package/dist/server.js +1 -1
- package/dist/{visual-dom-OIXANRP3.js → visual-dom-7IF7ITAK.js} +1 -1
- package/dist/visual.js +1 -1
- package/package.json +10 -9
- package/dist/chunk-22Z7JR4B.js +0 -1
- package/dist/chunk-3OFRQUUI.js +0 -1
- package/dist/chunk-5JJZSH23.js +0 -179
- package/dist/chunk-6LILLFH3.js +0 -1
- package/dist/chunk-7DXL3LHT.js +0 -1
- package/dist/chunk-ACF2FBUB.js +0 -1
- package/dist/chunk-G56XGVMS.js +0 -1
- package/dist/chunk-I4BZSRT4.js +0 -1
- package/dist/chunk-IAOOTBJV.js +0 -6
- package/dist/chunk-O52OWKP7.js +0 -4
- package/dist/chunk-SBPTOOYB.js +0 -1
- package/dist/chunk-SV6W2E2A.js +0 -1
- package/dist/chunk-XSVQHPQT.js +0 -17
- package/dist/chunk-Y3AGPHWF.js +0 -1
- package/dist/chunk-ZKSKBL4N.js +0 -1
- package/dist/content-F7IVCK3I.js +0 -1
- package/dist/funnel-runtime-host-W25OXLGE.js +0 -1
- package/dist/paywall-XGDRMPLP.js +0 -1
- package/dist/screen-renderer-NLB3FAQJ.js +0 -1
- /package/dist/{chunk-AK3IJ6FZ.js → chunk-OJM6ORHE.js} +0 -0
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 un,b as Ie}from"./chunk-7RDYCTR4.js";import"./chunk-MOWYD2TV.js";import{a as nn,c as sn,d as cn}from"./chunk-GDFBOM3V.js";import{a as an}from"./chunk-PYIHBK7E.js";import{b as en,g as tn,l as be,m as rn,n as on,p as dn}from"./chunk-JGFAFQKK.js";import"./chunk-VSMITXQD.js";import{b as $e}from"./chunk-CDG7GM4C.js";import{a as B}from"./chunk-OZZMZH7X.js";import{a as he,c as ae}from"./chunk-J6KIN4RH.js";import"./chunk-SLUA7ABW.js";import{c as pe,d as ye}from"./chunk-QHJAF5T2.js";import{a as Z}from"./chunk-DSPLGTQI.js";import"./chunk-4C5XH3T3.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-7DUOIHRD.js";import"./chunk-VSJOHWDL.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 ln(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 a=await p.read();if(T.throwIfAborted(),a.done)break;if(E+=a.value.byteLength,E>262144)throw new f("MERCHANT_BRIDGE_INVALID_RESPONSE");b+=r.decode(a.value,{stream:!0})}return b+=r.decode(),JSON.parse(b)}catch(a){throw T.throwIfAborted(),a instanceof f?a:new f("MERCHANT_BRIDGE_INVALID_RESPONSE")}finally{T.removeEventListener("abort",D),await p.cancel().catch(()=>{}),p.releaseLock()}}function fn(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,a=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 i=crypto.randomUUID();g.set("X-Request-Id",i),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:i,command:H.command,scope:D,data:U??(h===void 0?{}:{operationId:h})})}),M=await ln(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!==i||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!==i||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(a!==null&&a!==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 a=c.nativeUserId,r=c.presentation,c},async createSession(l){let c=await q("session",ke,void 0,l);if(a!==null&&a!==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,a=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,a=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 a=D()?.getItem(r);if(!a)return[];if(a.length>1048576)throw Error("Entry recovery is too large");return ze.parse(JSON.parse(a)).entries}function b(r,a){let y=D();if(!y)return;if(!a.length)return y.removeItem(r);let m=JSON.stringify(ze.parse({schemaVersion:1,entries:a}));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 a="indiana.funnel.entries.v1."+JSON.stringify(r);return{key:a,entries:E(a)}}catch{p();return}},retain(r,a){if(r)try{let y=Je.parse(a);b(r,[...E(r).filter(m=>m.command.funnelId!==y.command.funnelId),y])}catch{p()}},forget(r,a){if(r)try{b(r,E(r).filter(y=>y.command.requestId!==a))}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 mn(n){let T=pe(n.baseUrl),p=n.scope,D=$e(n),E=n.fetch??globalThis.fetch.bind(globalThis),b,r=!1,a=!1,y=0,m=0,q="",A=0,z=0,l=0,c,h=!1,F,U=!0,H,R,u,g,i,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=i;i=void 0,e?.host.destroy(),e?.slot.remove(),e?.client.reset(),K()}let t=()=>M!==void 0||i!==void 0&&!i.background;function w(e,o){if(i?.client!==e)return;re(i.recovery,o);let d=ve(o);i.slot.hidden=d,d!==i.background&&(i.background=d,d?s("run_background",i.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=()=>{i&&N(i,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 ae(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 ae(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,ie=!1;if(i&&!i.background){await _(P),s("in_progress",e.command.entryId),S(e);return}i&&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),i?.client===P&&(i=void 0,P.reset(),K(),k&&k.status!=="completed"&&s("run_ended",e.command.entryId)),Z(n.host?.onDismiss,k)},onComplete(k){ie=!0,J(e),i?.client===P&&Y(),Z(n.host?.onComplete,k)},onError(k){Z(n.host?.onError,k),i?.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||ie){Me.destroy(),ee.remove(),ne(e)||await _(P),S(e);return}let le=ve(P.view??V);ee.hidden=le,i={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 ae(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===i?.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||!a||document.visibilityState==="hidden")return;Re();let e=i!==void 0&&!i.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 ie=await E(`${T}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}`,{credentials:"omit",cache:"no-store",redirect:"error",signal:o.signal});if(!ie.ok)throw new B("SERVICE_UNAVAILABLE","Funnel entries unavailable",ie.status);return fe.parse(await ie.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(){a||r||(a=!0,q=location.origin+location.pathname,R=ye(Ze),u=n.session.subscribeIdentity(()=>{A++,U=!0,M=void 0,$.clear(),L=-1,j.clear(),i&&N(i,i.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 pn(n){let T=pe(n.baseUrl),p=n.fetch??globalThis.fetch.bind(globalThis),D,E=0,b=0,r=!1,a=!1,y=0,m=0,q=-1,A=!1,z="",l,c,h,F,U,H=new Set,R,u,g,i=(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&&ae(t.target.render,document,location.pathname,()=>{})}catch{return i("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,i("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(),i("suppressed",t.entry.id),j()):i("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||i("configuration_unavailable")}r||(l=setTimeout(()=>{Y()},15e3))}return{async start(){a||r||(a=!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 qn(...n){return(await import("./paywall-PJEMTVSZ.js")).showPaywall(...n)}async function Un(...n){return(await import("./funnel-runtime-host-K2SXD2R2.js")).showFunnelRun(...n)}async function Vn(...n){return(await import("./content-YQ7IJ47M.js")).mountContent(...n)}async function jn(...n){return(await import("./content-YQ7IJ47M.js")).prepareContent(...n)}export{B as LongplayError,f as MerchantBridgeError,tn as createBrowserFunnelCommandStorage,on as createConfigurationSync,en as createFeatureClient,sn as createFunnelClient,un as createFunnelPageExperiments,cn as createFunnelProcess,be as createFunnelRunController,mn as createIamFunnelEntries,pn as createIamFunnelProcessEntries,dn as createLocalFunnelClient,nn as createLongplay,fn as createMerchantBridge,rn as createPaywallSession,an as evaluateFunnelNode,Ye as formatCouponDiscount,We as formatCouponMoney,Qe as formatCouponTerms,Vn as mountContent,jn as prepareContent,Un as showFunnelRun,qn as showPaywall};
|