@tinkerlandai/longplay-sdk 0.0.0-stage → 0.10.4

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.
Files changed (56) hide show
  1. package/CHANGELOG.md +209 -0
  2. package/README.md +485 -2
  3. package/README.zh-CN.md +375 -0
  4. package/THIRD_PARTY_NOTICES.md +101 -0
  5. package/dist/ai-usage-Btwg1nD7.d.ts +247 -0
  6. package/dist/api-5gAz4-Sb.d.ts +16897 -0
  7. package/dist/chunk-2HFA34QO.js +6 -0
  8. package/dist/chunk-7DXL3LHT.js +1 -0
  9. package/dist/chunk-ACF2FBUB.js +1 -0
  10. package/dist/chunk-CLXORAOK.js +1 -0
  11. package/dist/chunk-DSPLGTQI.js +1 -0
  12. package/dist/chunk-EARSGITJ.js +1 -0
  13. package/dist/chunk-G56XGVMS.js +1 -0
  14. package/dist/chunk-HOW7NIIR.js +1 -0
  15. package/dist/chunk-JB46ZKGZ.js +1 -0
  16. package/dist/chunk-KBM7BYQY.js +1 -0
  17. package/dist/chunk-MRN4HP4W.js +1 -0
  18. package/dist/chunk-RE6BIFLN.js +2 -0
  19. package/dist/chunk-SBPTOOYB.js +1 -0
  20. package/dist/chunk-SSLZKIIU.js +1 -0
  21. package/dist/chunk-VMM3GA3L.js +4 -0
  22. package/dist/chunk-VOEFXEPP.js +1 -0
  23. package/dist/chunk-X6BCUINI.js +173 -0
  24. package/dist/chunk-XSVQHPQT.js +17 -0
  25. package/dist/chunk-YQHPEP4X.js +1 -0
  26. package/dist/chunk-ZPZVSC4J.js +1 -0
  27. package/dist/configuration-sync-CywDxRkX.d.ts +1698 -0
  28. package/dist/content-NYMIZRNR.js +1 -0
  29. package/dist/coupon-fA1QujHt.d.ts +184 -0
  30. package/dist/customer-page-km5f1PJZ.d.ts +480 -0
  31. package/dist/funnel-local-client-CVokI0rx.d.ts +46997 -0
  32. package/dist/funnel-node-evaluation-P5B4fPfJ.d.ts +2054 -0
  33. package/dist/funnel-resource-client-Cv5OjfAn.d.ts +14525 -0
  34. package/dist/funnel-runtime-host-UL4DEJDU.js +1 -0
  35. package/dist/growth-rules-B4YYy64R.d.ts +173 -0
  36. package/dist/index.d.ts +23545 -0
  37. package/dist/index.js +1 -0
  38. package/dist/native-shell.d.ts +4 -0
  39. package/dist/native-shell.js +1 -0
  40. package/dist/openrouter.d.ts +43 -0
  41. package/dist/openrouter.js +1 -0
  42. package/dist/page.d.ts +134 -0
  43. package/dist/page.js +1 -0
  44. package/dist/paywall-EJCNWDHK.js +1 -0
  45. package/dist/popup.d.ts +191 -0
  46. package/dist/popup.js +1 -0
  47. package/dist/react-native.d.ts +36701 -0
  48. package/dist/react-native.js +1 -0
  49. package/dist/screen-D81zCpfi.d.ts +3000 -0
  50. package/dist/screen-renderer-JMHV4GPP.js +1 -0
  51. package/dist/server.d.ts +7073 -0
  52. package/dist/server.js +1 -0
  53. package/dist/visual-dom-DQLPBZ2Z.js +1 -0
  54. package/dist/visual.d.ts +87 -0
  55. package/dist/visual.js +1 -0
  56. package/package.json +90 -3
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import{a as ke,b as Ce}from"./chunk-ZPZVSC4J.js";import{a as Se,c as He}from"./chunk-KBM7BYQY.js";import{a as Fe}from"./chunk-VOEFXEPP.js";import{b as De,g as Pe,l as z,m as xe,n as Be,p as Le}from"./chunk-JB46ZKGZ.js";import"./chunk-SBPTOOYB.js";import{F as Ne,G as Oe,H as Te,Ka as ge,La as Ee,Ma as we,Qa as ve,i as oe,k as q,l as ae,m as ie,n as se,o as ce,p as de,q as ue,qa as ye,r as le,s as me,t as fe,u as pe,w as $,x as he,y as Ie}from"./chunk-2HFA34QO.js";import{qa as M}from"./chunk-ACF2FBUB.js";import{c as be}from"./chunk-CLXORAOK.js";import"./chunk-EARSGITJ.js";import{c as Re,d as _e}from"./chunk-HOW7NIIR.js";import{a as L}from"./chunk-DSPLGTQI.js";import"./chunk-G56XGVMS.js";import"./chunk-MRN4HP4W.js";import"./chunk-7DXL3LHT.js";import"./chunk-XSVQHPQT.js";import{z as j}from"zod";var r=class extends Error{constructor(u,B=0,I=!1,f="fix_request"){super(u);this.code=u;this.status=B;this.retryable=I;this.recovery=f;this.name="MerchantBridgeError"}code;status;retryable;recovery};async function Ge(n,_){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 u=n.body?.getReader();if(!u)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");let B=()=>{u.cancel().catch(()=>{})};_.addEventListener("abort",B,{once:!0});let I=0,f="",a=new TextDecoder("utf-8",{fatal:!0});try{for(_.throwIfAborted();;){let d=await u.read();if(_.throwIfAborted(),d.done)break;if(I+=d.value.byteLength,I>262144)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");f+=a.decode(d.value,{stream:!0})}return f+=a.decode(),JSON.parse(f)}catch(d){throw _.throwIfAborted(),d instanceof r?d:new r("MERCHANT_BRIDGE_INVALID_RESPONSE")}finally{_.removeEventListener("abort",B),await u.cancel().catch(()=>{}),u.releaseLock()}}function Ue(n){let _=ce.parse(n.origin),u=de.parse(n.manifest),B={projectId:n.scope.projectId,environmentId:n.scope.environmentId,environment:n.scope.environment};for(let o of["projectId","environmentId","environment"])if(u[o]!==n.scope[o])throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");let I=n.customerId===void 0?null:j.uuid().parse(n.customerId),f=0,a=null,d=null,F=new AbortController,k=n.fetch??globalThis.fetch;async function N(o,t,i,g,O){if(!u.capabilities.includes(o))throw new r("MERCHANT_BRIDGE_CAPABILITY_UNSUPPORTED",501);let v=se[o];if(["merchant_catalog_reader","merchant_refund_authority","indiana_server_key"].includes(v.authority))throw new r("MERCHANT_BRIDGE_FORBIDDEN",403);let T=f,x=AbortSignal.any([F.signal,AbortSignal.timeout(Math.min(3e4,Math.max(1e3,n.timeoutMs??1e4))),...n.signal?[n.signal]:[],...g?[g]:[]]);x.throwIfAborted();let S=new Headers(await n.headers?.());if(x.throwIfAborted(),T!==f)throw new DOMException("Merchant identity changed","AbortError");if(/\bgg_(?:sk|ct|rt)_/.test(S.get("authorization")??"")||S.has("X-Indiana-Bridge-Signature")||S.has("X-Indiana-Bridge-Key-Id"))throw new r("MERCHANT_BRIDGE_FORBIDDEN",403);S.set(ie,String(q)),S.set("Accept","application/json");let E=crypto.randomUUID();S.set("X-Request-Id",E),S.set("Content-Type","application/json");let p=await k(_+ae,{method:"POST",credentials:"include",redirect:"error",cache:"no-store",headers:S,signal:x,body:JSON.stringify({bridgeVersion:q,requestId:E,command:v.command,scope:B,data:O??(i===void 0?{}:{operationId:i})})}),D=await Ge(p,x);if(x.throwIfAborted(),T!==f)throw new DOMException("Merchant identity changed","AbortError");if(!p.ok){let y=Ie.safeParse(D);throw!y.success||y.data.scope.projectId!==n.scope.projectId||y.data.scope.environment!==n.scope.environment||y.data.scope.environmentId!==n.scope.environmentId||y.data.requestId!==E||y.data.command!==v.command?new r("MERCHANT_BRIDGE_INVALID_RESPONSE",p.status):new r(y.data.error.code,p.status,y.data.error.retryable,y.data.error.recovery)}let R=ue(j.unknown()).safeParse(D);if(!R.success||R.data.scope.projectId!==n.scope.projectId||R.data.scope.environment!==n.scope.environment||R.data.scope.environmentId!==n.scope.environmentId||R.data.requestId!==E||R.data.command!==v.command)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE",p.status);let l=t.safeParse(R.data.data);if(!l.success)throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE",p.status);return l.data}function w(){if(!I)throw new r("MERCHANT_BRIDGE_UNAUTHENTICATED",401);return I}async function H(o,t,i,g){let O=w(),v=pe.parse({operationId:i,customerId:O}),T=await N(o,t,v.operationId,g,v);if(T.customerId!==O||T.operationId!==v.operationId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return T}return{async readPresentation(o){let t=await N("presentation",me,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 N("session",le,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 i=w(),g=fe.parse(o);if(!a||a.customerId!==i||a.decisionId!==g.decisionId)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return N("presentation_events",j.strictObject({queued:j.literal(!0)}),void 0,t,g)},async readCustomerCommerce(o){let t=w(),i=await N("customer_commerce",he,void 0,o);if(i.customerId!==t)throw new r("MERCHANT_BRIDGE_SCOPE_MISMATCH");return i},async executePurchase(o,t){let i=await H("purchases",$,o,t);if(i.type!=="purchase")throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");return i},readOperation:(o,t)=>H("operation_status",oe,o,t),async executeSubscriptionChange(o,t){let i=await H("subscription_changes",$,o,t);if(i.type!=="subscription_change")throw new r("MERCHANT_BRIDGE_INVALID_RESPONSE");return i},reset(){f++,F.abort(),F=new AbortController,I=null,a=null,d=null}}}function je(n){let _=Re(n.baseUrl),u=n.scope,B=ve(n),I=n.fetch??globalThis.fetch.bind(globalThis),f,a=!1,d=!1,F=0,k=0,N="",w=0,H=0,o=0,t,i=!1,g,O=!0,v,T,x,S,E,p,D=e=>{p===e&&(p=void 0)},R=new Set,l=(e,m)=>L(n.onStatus,e,m);function y(){let e=E;E=void 0,e?.host.destroy(),e?.client.reset()}let K=()=>Date.now()<H&&performance.now()<o;function J(e){if(e.target.release!==n.appManifestRelease||!K())return!1;try{return be(e.target.render,document,location.pathname,()=>{})}catch{return l("incompatible",e.id),!1}}function V(e){return!a&&e.epoch===w&&e.visit===k&&document.visibilityState!=="hidden"}async function X(e){if(p||E){l("in_progress",e.id);return}if(!n.session.peek()){l("identity_required",e.id);return}let m={command:Ee.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:w,visit:k};p=m,await Z(m)}async function Z(e){if(e.dispatching)return;e.dispatching=!0;let m,b=!1;async function h(s){if(e.epoch!==w)return;let c=s.view;c&&["running","waiting"].includes(c.status)&&await s.submit({operation:"close",requestId:crypto.randomUUID(),nodeId:c.nodeId,visit:c.visit,revision:c.revision})}try{l("starting",e.command.entryId);let s=await B.request("funnels",e.command),c=we.safeParse(s);if(c.success){if(c.data.scope.projectId!==u.projectId||c.data.scope.environment!==u.environment)throw new M("SCOPE_MISMATCH","Entry scope changed");e.epoch===w&&l(c.data.reason,e.command.entryId),D(e);return}let A=ye.parse(s);if(!A.runToken||A.scope.projectId!==u.projectId||A.scope.environment!==u.environment||A.run.source.type!=="funnel"||A.run.source.id!==e.command.funnelId||A.run.source.versionId!==e.command.versionId)throw new M("INVALID_RESPONSE","Invalid entry Run");if(e.epoch!==w){D(e),l("identity_changed",e.command.entryId);return}let C=z({...n,runToken:A.runToken,funnelId:e.command.funnelId});m=C,await C.get();let U=C.view;if(!U||U.id!==A.run.id||U.source.type!=="funnel"||U.source.id!==e.command.funnelId||U.source.versionId!==e.command.versionId)throw new M("INVALID_RESPONSE","Entry Run version changed");if(!V(e)){await h(C),l("left_screen",e.command.entryId),D(e);return}let ne=!1,te=!1,re=await Ce(n.container,{...n.host,client:C,appManifestRelease:n.appManifestRelease,onDismiss(P){ne=!0,E?.client===C&&(E=void 0,C.reset(),P&&P.status!=="completed"&&l("run_ended",e.command.entryId)),L(n.host?.onDismiss,P)},onComplete(P){te=!0,E?.client===C&&y(),L(n.host?.onComplete,P)},onError(P){L(n.host?.onError,P),E?.client===C&&P instanceof M&&P.code==="FORBIDDEN"&&(y(),l("run_ended",e.command.entryId))}});if(!V(e)||ne||te){re.destroy(),V(e)||await h(C),D(e);return}E={host:re,client:C},b=!0,D(e),l("started",e.command.entryId)}catch(s){!m&&s instanceof M&&s.status!==void 0&&s.status>=400&&s.status<500&&!s.retryable&&D(e),e.epoch===w&&!a&&(l("start_failed",e.command.entryId),L(n.host?.onError,s))}finally{b||m?.reset(),e.dispatching=!1}}function Ae(){if(i=!1,!(a||!d||!K()||document.visibilityState==="hidden")){O=!1;for(let e of f?.entries??[])if(!(e.event!=="screen_enter"||R.has(`${e.funnelId}:${e.id}`)||!J(e))){if(!n.session.peek()){l("identity_required",e.id);continue}R.add(`${e.funnelId}:${e.id}`),X(e);break}}}let G=()=>{!i&&!a&&(i=!0,queueMicrotask(Ae))};function Me(){let e=location.origin+location.pathname;e!==N&&(N=e,k++,O=!0,R.clear(),G())}function Y(e){if(!e.isTrusted||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||document.visibilityState==="hidden")return;let m=e.target;if(!(m instanceof Element)||m.closest("[data-indiana-funnel]"))return;let b=m.closest("button,a,input");if(!(!b||b.matches(":disabled,[aria-disabled='true']")||b.closest("[hidden],[inert],[aria-hidden='true']")))for(let h of f?.entries??[]){let s=h.target.button;if(h.event!=="button_click"||!s||!J(h))continue;let c=document.querySelectorAll(s.selector);if(!(c.length!==1||c[0]!==b)){X(h);break}}}async function Q(){if(a)return;if(g)return g;let e=++F;v=new AbortController;let m=(async()=>{let b=await I(`${_}/api/v1/funnel-entries/${n.environmentId}?iam=${n.appManifestRelease}`,{credentials:"omit",cache:"no-store",signal:v.signal});if(!b.ok)throw new M("SERVICE_UNAVAILABLE","Funnel entries unavailable",b.status);let h=ge.parse(await b.json()),s=Date.parse(h.validatedAt),c=Date.parse(h.validUntil);if(h.scope.projectId!==u.projectId||h.scope.environment!==u.environment||h.scope.environmentId!==n.environmentId||h.release!==n.appManifestRelease||c<=Date.now()||s>Date.now()+5e3||c-s>6e4||c<=s)throw new M("INVALID_RESPONSE","Entry configuration scope or deadline changed");if(a||e!==F)return;let A=f===void 0;f=h,H=c,o=performance.now()+Math.min(c-Date.now(),6e4),(A||O)&&G()})();g=m;try{await m}finally{g===m&&(g=void 0)}}async function W(){try{await Q()}catch{l("configuration_unavailable")}a||(t=setTimeout(()=>{W()},15e3))}let ee=()=>G();return{async start(){d||a||(d=!0,N=location.origin+location.pathname,T=_e(Me),x=n.session.subscribeIdentity(()=>{w++,O=!0,p=void 0,R.clear(),y(),G()}),S=new MutationObserver(G),S.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["hidden","inert","aria-hidden","data-indiana-id","id"]}),document.addEventListener("click",Y,!0),document.addEventListener("visibilitychange",ee),await W())},refresh:Q,async retry(){p&&!a&&p.epoch===w&&await Z(p)},destroy(){a=!0,F++,clearTimeout(t),v?.abort(),S?.disconnect(),T?.(),x?.(),document.removeEventListener("click",Y,!0),document.removeEventListener("visibilitychange",ee),y(),f=void 0}}}async function nn(...n){return(await import("./paywall-EJCNWDHK.js")).showPaywall(...n)}async function tn(...n){return(await import("./funnel-runtime-host-UL4DEJDU.js")).showFunnelRun(...n)}async function rn(...n){return(await import("./content-NYMIZRNR.js")).mountContent(...n)}async function on(...n){return(await import("./content-NYMIZRNR.js")).prepareContent(...n)}export{M as IndianaError,M as LongplayError,r as MerchantBridgeError,Pe as createBrowserFunnelCommandStorage,Be as createConfigurationSync,De as createFeatureClient,He as createFunnelClient,ke as createFunnelPageExperiments,z as createFunnelRunController,je as createIamFunnelEntries,Se as createIndiana,Le as createLocalFunnelClient,Se as createLongplay,Ue as createMerchantBridge,xe as createPaywallSession,Fe as evaluateFunnelNode,Oe as formatCouponDiscount,Ne as formatCouponMoney,Te as formatCouponTerms,rn as mountContent,on as prepareContent,tn as showFunnelRun,nn as showPaywall};
@@ -0,0 +1,4 @@
1
+ /** Immutable, credential-free native host bootstrap. */
2
+ declare function hostedNativeFunnelScript(): string;
3
+
4
+ export { hostedNativeFunnelScript };