@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.
Files changed (62) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/README.md +40 -4
  3. package/README.zh-CN.md +4 -2
  4. package/dist/{ai-usage-Btwg1nD7.d.ts → ai-usage-C-OZBxgW.d.ts} +1 -1
  5. package/dist/{api-5gAz4-Sb.d.ts → api-Bf_aRlXs.d.ts} +82 -0
  6. package/dist/chunk-33FQUT3Z.js +179 -0
  7. package/dist/chunk-4B5G3ZVV.js +4 -0
  8. package/dist/chunk-4C5XH3T3.js +1 -0
  9. package/dist/chunk-7DUOIHRD.js +6 -0
  10. package/dist/chunk-7RDYCTR4.js +1 -0
  11. package/dist/chunk-CDG7GM4C.js +1 -0
  12. package/dist/chunk-GDFBOM3V.js +1 -0
  13. package/dist/chunk-JGFAFQKK.js +1 -0
  14. package/dist/chunk-OZZMZH7X.js +1 -0
  15. package/dist/chunk-PYIHBK7E.js +1 -0
  16. package/dist/chunk-QHJAF5T2.js +1 -0
  17. package/dist/chunk-VSJOHWDL.js +17 -0
  18. package/dist/chunk-VSMITXQD.js +1 -0
  19. package/dist/chunk-ZYQPKGJM.js +1 -0
  20. package/dist/{configuration-sync-CywDxRkX.d.ts → configuration-sync-D2n_gGj6.d.ts} +1 -0
  21. package/dist/content-YQ7IJ47M.js +1 -0
  22. package/dist/{funnel-local-client-B4Z3dvNf.d.ts → funnel-local-client-DJq2K7an.d.ts} +8869 -93
  23. package/dist/{funnel-node-evaluation-P5B4fPfJ.d.ts → funnel-node-evaluation-CJSkUkbv.d.ts} +36 -0
  24. package/dist/{funnel-resource-client-BhbXsB2q.d.ts → funnel-process-client-C_UhTH8g.d.ts} +5132 -41
  25. package/dist/funnel-runtime-host-K2SXD2R2.js +1 -0
  26. package/dist/index.d.ts +106 -77
  27. package/dist/index.js +1 -1
  28. package/dist/native-shell.js +1 -1
  29. package/dist/openrouter.d.ts +2 -2
  30. package/dist/openrouter.js +1 -1
  31. package/dist/page.d.ts +1 -1
  32. package/dist/page.js +1 -1
  33. package/dist/paywall-PJEMTVSZ.js +1 -0
  34. package/dist/popup.js +1 -1
  35. package/dist/react-native.d.ts +109 -106
  36. package/dist/react-native.js +1 -1
  37. package/dist/screen-renderer-NHJ6OQTF.js +1 -0
  38. package/dist/server.d.ts +10677 -25
  39. package/dist/server.js +1 -1
  40. package/dist/{visual-dom-OIXANRP3.js → visual-dom-7IF7ITAK.js} +1 -1
  41. package/dist/visual.js +1 -1
  42. package/package.json +10 -9
  43. package/dist/chunk-22Z7JR4B.js +0 -1
  44. package/dist/chunk-3OFRQUUI.js +0 -1
  45. package/dist/chunk-5JJZSH23.js +0 -179
  46. package/dist/chunk-6LILLFH3.js +0 -1
  47. package/dist/chunk-7DXL3LHT.js +0 -1
  48. package/dist/chunk-ACF2FBUB.js +0 -1
  49. package/dist/chunk-G56XGVMS.js +0 -1
  50. package/dist/chunk-I4BZSRT4.js +0 -1
  51. package/dist/chunk-IAOOTBJV.js +0 -6
  52. package/dist/chunk-O52OWKP7.js +0 -4
  53. package/dist/chunk-SBPTOOYB.js +0 -1
  54. package/dist/chunk-SV6W2E2A.js +0 -1
  55. package/dist/chunk-XSVQHPQT.js +0 -17
  56. package/dist/chunk-Y3AGPHWF.js +0 -1
  57. package/dist/chunk-ZKSKBL4N.js +0 -1
  58. package/dist/content-F7IVCK3I.js +0 -1
  59. package/dist/funnel-runtime-host-W25OXLGE.js +0 -1
  60. package/dist/paywall-XGDRMPLP.js +0 -1
  61. package/dist/screen-renderer-NLB3FAQJ.js +0 -1
  62. /package/dist/{chunk-AK3IJ6FZ.js → chunk-OJM6ORHE.js} +0 -0
@@ -0,0 +1,17 @@
1
+ import{z as Vr}from"zod";var zr=["USD","EUR","CNY","GBP","JPY","CAD","AUD","NZD","CHF","HKD","SGD","KRW","INR","BRL","MXN","TWD","THB","IDR","MYR","PHP","VND","ZAR","AED","SAR","SEK","NOK","DKK","PLN","CZK","HUF","ILS","TRY","RON"],j=Vr.enum(zr);function Ur(e){let t=j.parse(e.toUpperCase());return["JPY","KRW","VND"].includes(t)?0:2}function Pe(e,t,r="en",n={}){let i=j.parse(t.toUpperCase());return new Intl.NumberFormat(r,{style:"currency",currency:i,...n}).format(e/10**Ur(i))}import{z as l}from"zod";function $e(e){let t=2166136261,r=e.length;for(let n=0;n<r;n++)t^=e.charCodeAt(n),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return t>>>0}function pe(e,t,r){return r===2?$e($e(e+t)+"")%1e4/1e4:null}function gt(e){return e<=0?[]:new Array(e).fill(1/e)}function de(e,t){return e>=t[0]&&e<t[1]}function Fe(e,t){for(let[r,n]of t.entries())if(de(e,n))return r;return-1}function Be(e,t,r){t=t===void 0?1:t,t<0?t=0:t>1&&(t=1);let n=gt(e);r=r||n,r.length!==e&&(r=n);let i=r.reduce((c,u)=>u+c,0);(i<.99||i>1.01)&&(r=n);let a=0,o=t;return r.map(c=>{let u=a;return a+=c,[u,u+o*c]})}function Ve(e,t,r){if(!t)return null;let n=t.split("?")[1];if(!n)return null;let a=n.replace(/#.*/,"").split("&").map(o=>o.split("=",2)).filter(([o])=>o===e).map(([,o])=>o===void 0?NaN:parseInt(o))[0];return a!==void 0&&a>=0&&a<r?a:null}function ze(e){try{return e()}catch{return!1}}function ne(e){return typeof e=="string"?e:JSON.stringify(e)}function D(e){typeof e=="number"&&(e=e+""),(!e||typeof e!="string")&&(e="0");let t=e.replace(/(^v|\+.*$)/g,"").split(/[-.]/);return t.length===3&&t.push("~"),t.map(r=>r.match(/^[0-9]+$/)?r.padStart(5," "):r).join("-")}function ht(e){try{let t=e.replace(/([^\\])\//g,"$1\\/");return new RegExp(t)}catch{return}}function Ue(e,t){if(!t.length)return!1;let r=!1,n=!1;for(let i of t){let a=Hr(e,i.type,i.pattern);if(i.include===!1){if(a)return!1}else r=!0,a&&(n=!0)}return n||!r}function Mr(e,t,r){try{let n=t.replace(/[*.+?^${}()|[\]\\]/g,"\\$&").replace(/_____/g,".*");return r&&(n="\\/?"+n.replace(/(^\/|\/$)/g,"")+"\\/?"),new RegExp("^"+n+"$","i").test(e)}catch{return!1}}function qr(e,t){try{let r=new URL(t.replace(/^([^:/?]*)\./i,"https://$1.").replace(/\*/g,"_____"),"https://_____"),n=[[e.host,r.host,!1],[e.pathname,r.pathname,!0]];return r.hash&&n.push([e.hash,r.hash,!1]),r.searchParams.forEach((i,a)=>{n.push([e.searchParams.get(a)||"",i,!1])}),!n.some(i=>!Mr(i[0],i[1],i[2]))}catch{return!1}}function Hr(e,t,r){try{let n=new URL(e,"https://_");if(t==="regex"){let i=ht(r);return i?i.test(n.href)||i.test(n.href.substring(n.origin.length)):!1}else if(t==="simple")return qr(n,r);return!1}catch{return!1}}function Me(e){for(let r of["namespace","status","url","groups"])if(Object.hasOwn(e,r))throw new TypeError(`Retired experiment field: ${r}`);let t=e;if(t.hashVersion!==void 0&&t.hashVersion!==2)throw new TypeError("Only hash version 2 is supported");if(t.filters?.some(r=>r.hashVersion!==2))throw new TypeError("Only hash version 2 is supported")}function Ae(e){for(let t of Object.values(e)){if(Array.isArray(t))throw new TypeError("Saved groups require typed list or condition entries");if(t&&Object.hasOwn(t,"useEmptyListGroup"))throw new TypeError("Retired saved group field: useEmptyListGroup")}}function bt(e){for(let t of["overrides","groups"])if(Object.hasOwn(e,t))throw new TypeError(`Retired evaluation context field: ${t}`);Ae(e.savedGroups??{})}var Gr=e=>e/2**32|0,Qr=e=>e>>>0;function yt(e,t,r,n){let i=Gr(r),a=Qr(r);e.setUint32(t,n?a:i,n),e.setUint32(t+4,n?i:a,n)}function xt(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}var qe=e=>e?`"${e}" `:"";function Kr(e,t=""){if(typeof e!="number")throw new TypeError(qe(t)+"expected number, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw new RangeError(qe(t)+"expected integer >= 0, got "+e);return e}function ke(e,t,r=""){if(xt(e)&&(t===void 0||e.length===t))return e;t!==void 0&&Kr(t,"length");let n=xt(e),i=t!==void 0?` of length ${t}`:"",a=n?`length=${e.length}`:`type=${typeof e}`,o=qe(r)+"expected Uint8Array"+i+", got "+a;throw n?new RangeError(o):new TypeError(o)}var Zr=(e,t)=>{if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError((t==="object"?"":`"${t}" `)+"expected object, got type="+typeof e)},St=(e,t)=>{Zr(e,t);let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new TypeError(`"${t}" expected plain object`);if(Object.hasOwn(e,"__proto__"))throw new TypeError(`"${t}.__proto__" is not allowed`)};function He(e,t=!0){if(e.destroyed)throw new Error("hash was destroyed");if(t&&e.finished)throw new Error("digest() was already called")}function At(e,t){ke(e,void 0,"output");let r=t.outputLen;if(!(e.length>=r))throw new RangeError('"output" expected length >= '+r)}function Ge(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Ee(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function F(e,t){return e<<32-t|e>>>t}var Wr=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Jr=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function kt(e){if(ke(e),Wr)return e.toHex();let t="";for(let r=0;r<e.length;r++)t+=Jr[e[r]];return t}function Yr(e,t,r="opts"){return St(e,"defaults"),t!==void 0&&St(t,r),Object.assign(Object.create(null),e,t)}function Et(e,t={}){if(typeof e!="function")throw new TypeError('"hashCons" expected function, got type='+typeof e);t=Yr({},t,"info");let r=(i,a)=>e(a).update(i).digest(),n=e(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.canXOF=n.canXOF,r.create=i=>e(i),Object.assign(r,t),Object.freeze(r)}var _t=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});function It(e,t,r){return e&t^~e&r}function wt(e,t,r){return e&t^e&r^t&r}var _e=class{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(t,r,n,i){this.blockLen=t,this.outputLen=r,this.padOffset=n,this.isLE=i,this.buffer=new Uint8Array(t),this.view=Ee(this.buffer)}update(t){He(this),ke(t);let{view:r,buffer:n,blockLen:i}=this,a=t.length,o=!1;for(let c=0;c<a;){let u=Math.min(i-this.pos,a-c);if(u===i){let f=Ee(t);for(;i<=a-c;c+=i)this.process(f,c);o=!0;continue}n.set(c===0&&u===a?t:t.subarray(c,c+u),this.pos),this.pos+=u,c+=u,this.pos===i&&(this.process(r,0),this.pos=0,o=!0)}return this.length+=t.length,o&&this.roundClean(),this}digestInto(t){He(this),At(t,this),this.finished=!0;let{buffer:r,view:n,blockLen:i,isLE:a}=this,{pos:o}=this;r[o++]=128,r.fill(0,o),this.padOffset>i-o&&(this.process(n,0),r.fill(0)),yt(n,i-8,this.length*8,a),this.process(n,0),this.roundClean();let c=t===r?n:Ee(t),u=this.outputLen,f=u/4,d=this.get();if(u%4||f>d.length)throw new Error("invalid outputLen");for(let m=0;m<f;m++)c.setUint32(4*m,d[m],a)}digest(){let{buffer:t,outputLen:r}=this;this.digestInto(t);let n=t.slice(0,r);return this.destroy(),n}_cloneIntoMeta(t){let{buffer:r,length:n,finished:i,destroyed:a,pos:o}=this;return t.destroyed=a,t.finished=i,t.length=n,t.pos=o,o&&t.buffer.set(r),t}clone(){return this._cloneInto()}},Rt=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var Xr=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),K=new Uint32Array(64),Qe=class extends _e{A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;constructor(t,r){super(64,t,8,!1),this.A=r[0]|0,this.B=r[1]|0,this.C=r[2]|0,this.D=r[3]|0,this.E=r[4]|0,this.F=r[5]|0,this.G=r[6]|0,this.H=r[7]|0}get(){let{A:t,B:r,C:n,D:i,E:a,F:o,G:c,H:u}=this;return[t,r,n,i,a,o,c,u]}set(t,r,n,i,a,o,c,u){this.A=t|0,this.B=r|0,this.C=n|0,this.D=i|0,this.E=a|0,this.F=o|0,this.G=c|0,this.H=u|0}_cloneInto(t){return(t||=new this.constructor).set(...this.get()),this._cloneIntoMeta(t)}process(t,r){for(let m=0;m<16;m++,r+=4)K[m]=t.getUint32(r,!1);for(let m=16;m<64;m++){let y=K[m-15],S=K[m-2],_=F(y,7)^F(y,18)^y>>>3,A=F(S,17)^F(S,19)^S>>>10;K[m]=A+K[m-7]+_+K[m-16]|0}let{A:n,B:i,C:a,D:o,E:c,F:u,G:f,H:d}=this;for(let m=0;m<64;m++){let y=F(c,6)^F(c,11)^F(c,25),S=d+y+It(c,u,f)+Xr[m]+K[m]|0,A=(F(n,2)^F(n,13)^F(n,22))+wt(n,i,a)|0;d=f,f=u,u=c,c=o+S|0,o=a,a=i,i=n,n=S+A|0}n=n+this.A|0,i=i+this.B|0,a=a+this.C|0,o=o+this.D|0,c=c+this.E|0,u=u+this.F|0,f=f+this.G|0,d=d+this.H|0,this.set(n,i,a,o,c,u,f,d)}roundClean(){Ge(K)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),Ge(this.buffer)}},Ke=class extends Qe{constructor(){super(32,Rt)}};var Nt=Et(()=>new Ke,_t(1));var Ot=new Map,Ze=32,Ct=new WeakMap,vt=new WeakMap;function en(e){return kt(Nt(new TextEncoder().encode(String(e))))}var we=e=>Array.isArray(e)?e.map(we):typeof e=="string"||typeof e=="number"?en(e):null,Ie=e=>typeof e=="string"?e.toLowerCase():e;function Pt(e){let t=Ct.get(e);return t||(t=new Set(e),Ct.set(e,t)),t}function tn(e){let t=vt.get(e);return t||(t=new Set(e.map(Ie)),vt.set(e,t)),t}function $t(e){Ae(e);for(let t of Object.values(e)){let r=t?.type==="list"||t?.type==="hashed"?t.values:null;r&&r.length>=Ze&&Pt(r)}return e}function B(e,t,r,n){r=r||{},n||Ae(r),n=n||new Set;for(let[i,a]of Object.entries(t))switch(i){case"$or":if(!Lt(e,a,r,n))return!1;break;case"$nor":if(Lt(e,a,r,n))return!1;break;case"$and":if(!sn(e,a,r,n))return!1;break;case"$not":if(B(e,a,r,n))return!1;break;case"$savedGroup":if(!rn(e,a,r,n))return!1;break;default:if(!fe(a,Ft(e,i),r,!1,n))return!1}return!0}function rn(e,t,r,n){if(!t||typeof t!="object"||Array.isArray(t))return!1;let{id:i,attributeKey:a}=t;if(typeof i!="string"||n.has(i)||a!==void 0&&typeof a!="string")return!1;let o=r[i];if(!o||Array.isArray(o)||typeof o!="object")return!1;let c=new Set(n).add(i);if(o.type==="list"||o.type==="hashed"){let u=a??o.attributeKey;if(typeof u!="string"||!Array.isArray(o.values))return!1;let f=Ft(e,u);return X(o.type==="hashed"?we(f):f,o.values)}return o.type==="condition"?!o.condition||typeof o.condition!="object"?!1:B(e,o.condition,r,c):!1}function Ft(e,t){let r=t.split("."),n=e;for(let i of r)if(n&&typeof n=="object"&&i in n)n=n[i];else return null;return n}function Tt(e,t=!1){let r=`${e}${t?"/i":""}`,n=Ot.get(r);return n||(n=new RegExp(e.replace(/([^\\])\//g,"$1\\/"),t?"i":void 0),Ot.set(r,n)),n}function fe(e,t,r,n=!1,i=new Set){if(typeof e=="string")return n?String(t).toLowerCase()===e.toLowerCase():t+""===e;if(typeof e=="number")return t*1===e;if(typeof e=="boolean")return t!==null&&!!t===e;if(e===null)return t===null;if(Array.isArray(e)||!Bt(e))return JSON.stringify(t)===JSON.stringify(e);let a=e;for(let o in a)if(!an(o,t,a[o],r,i))return!1;return!0}function Bt(e){let t=Object.keys(e);return t.length>0&&t.filter(r=>r[0]==="$").length===t.length}function nn(e){if(e===null)return"null";if(Array.isArray(e))return"array";let t=typeof e;return["string","number","boolean","object","undefined"].includes(t)?t:"unknown"}function on(e,t,r,n){if(!Array.isArray(e))return!1;let i=Bt(t)?a=>fe(t,a,r,!1,n):a=>B(a,t,r,n);for(let a=0;a<e.length;a++)if((e[a]??null)!==null&&i(e[a]))return!0;return!1}function X(e,t,r=!1){if(r){let i;if(t.length>=Ze){let a=tn(t);i=o=>{let c=Ie(o);return!(typeof c=="number"&&Number.isNaN(c))&&a.has(c)}}else i=a=>t.some(o=>Ie(a)===Ie(o));return Array.isArray(e)?e.some(a=>i(a)):i(e)}let n=t.length>=Ze?(i=>a=>i.has(a))(Pt(t)):i=>t.includes(i);return Array.isArray(e)?e.some(i=>n(i)):n(e)}function jt(e){return e===void 0?[]:e&&typeof e=="object"&&(e.type==="list"||e.type==="hashed")&&Array.isArray(e.values)?e.values:null}function Dt(e,t,r,n=!1,i=new Set){if(!Array.isArray(e))return!1;for(let a=0;a<t.length;a++){let o=!1;for(let c=0;c<e.length;c++)if(fe(t[a],e[c],r,n,i)){o=!0;break}if(!o)return!1}return!0}function an(e,t,r,n,i=new Set){let a=t,o=r;switch(e){case"$veq":return D(t)===D(r);case"$vne":return D(t)!==D(r);case"$vgt":return D(t)>D(r);case"$vgte":return D(t)>=D(r);case"$vlt":return D(t)<D(r);case"$vlte":return D(t)<=D(r);case"$eq":return t===r;case"$ne":return t!==r;case"$lt":return a<o;case"$lte":return a<=o;case"$gt":return a>o;case"$gte":return a>=o;case"$exists":return r?t!=null:t==null;case"$in":return Array.isArray(r)?X(t,r):!1;case"$ini":return Array.isArray(r)?X(t,r,!0):!1;case"$inGroup":{let c=n[r],u=jt(c);return u===null?!1:X(c?.type==="hashed"?we(t):t,u)}case"$notInGroup":{let c=n[r],u=jt(c);return u===null?!1:!X(c?.type==="hashed"?we(t):t,u)}case"$nin":return Array.isArray(r)?!X(t,r):!1;case"$nini":return Array.isArray(r)?!X(t,r,!0):!1;case"$not":return!fe(r,t,n,!1,i);case"$size":return Array.isArray(t)?fe(r,t.length,n,!1,i):!1;case"$elemMatch":return on(t,r,n,i);case"$all":return Array.isArray(r)?Dt(t,r,n,!1,i):!1;case"$alli":return Array.isArray(r)?Dt(t,r,n,!0,i):!1;case"$regex":try{return Tt(r).test(t)}catch{return!1}case"$regexi":try{return Tt(r,!0).test(t)}catch{return!1}case"$type":return nn(t)===r;default:return!1}}function Lt(e,t,r,n){if(!t.length)return!0;for(let i of t)if(B(e,i,r,n))return!0;return!1}function sn(e,t,r,n){for(let i of t)if(!B(e,i,r,n))return!1;return!0}function We(e){return bt(e),{context:e,stack:{evaluatedFeatures:new Set}}}function Je(e){return{...e.attributes,...e.attributeOverrides}}function Z(e,t,r){let n=t||"id",i="",a=Je(e);return a[n]&&(i=a[n]),!i&&r&&(a[r]&&(i=a[r]),i&&(n=r)),{hashAttribute:n,hashValue:i}}function k(e,t,r){e.context.log?.(t,r)}function Re(e,t){return t=t||0,`${e}__${t}`}function Ye(e,t){return`${e}||${t}`}function cn(e,t,r){let n=e.stickyBucketAssignmentDocs;if(!n)return{};let{hashAttribute:i,hashValue:a}=Z(e,t),o=Ye(i,ne(a)),{hashAttribute:c,hashValue:u}=Z(e,r),f=u?Ye(c,ne(u)):null,d={};return f&&n[f]&&Object.assign(d,n[f].assignments||{}),n[o]&&Object.assign(d,n[o].assignments||{}),d}function Vt({context:e,expKey:t,expBucketVersion:r,expHashAttribute:n,expFallbackAttribute:i,expMinBucketVersion:a,expMeta:o}){r=r||0,a=a||0,n=n||"id",o=o||[];let c=Re(t,r),u=cn(e,n,i);if(a>0)for(let m=0;m<a;m++){let y=Re(t,m);if(u[y]!==void 0)return{variation:-1,versionIsBlocked:!0}}let f=u[c];if(f===void 0)return{variation:-1};let d=o.findIndex(m=>m.key===f);return d<0?{variation:-1}:{variation:d}}function zt(e,t,r,n){let i=Ye(t,r),a=e.stickyBucketAssignmentDocs,o=a&&a[i]?a[i].assignments||{}:{},c={...o,...n},u=JSON.stringify(o)!==JSON.stringify(c);return{key:i,doc:{attributeName:t,attributeValue:r,assignments:c},changed:u}}function Ut(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Mt(e,t){let r=We(t),n=Gt(e,null,r);return t.onExperimentEval?.(e,n),n}function qt(e,t){return et(e,We(t))}function un(e){return e.forcedVariations||{}}function Ht(e,t,r){let{context:n}=e;if(n.trackedExperiments){let i=Zt(t,r);if(n.trackedExperiments.has(i))return;n.trackedExperiments.add(i)}Xe(()=>n.onExperimentViewed?.(t,r))}function ln(e,t,r){let{context:n}=e;if(n.trackedFeatureUsage){let i=JSON.stringify(r.value);if(n.trackedFeatureUsage[t]===i)return;n.trackedFeatureUsage[t]=i}Xe(()=>n.onFeatureUsage?.(t,r))}function Xe(e){try{let t=e();t&&typeof t.catch=="function"&&t.catch(()=>{})}catch{}}function et(e,t){let{context:r}=t;if(t.stack.evaluatedFeatures.has(e))return k(t,`evalFeature: circular dependency detected: ${t.stack.id} -> ${e}`,{from:t.stack.id,to:e}),W(t,e,null,"cyclicPrerequisite");t.stack.evaluatedFeatures.add(e),t.stack.id=e;let n=r.features?.[e];for(let a of n?.rules??[])Me(a);let i=r.forcedFeatureValues;if(i&&i.has(e))return k(t,"Global override",{id:e,value:i.get(e)}),W(t,e,i.get(e),"override");if(!n)return k(t,"Unknown feature",{id:e}),W(t,e,null,"unknownFeature");if(n.rules){let a=new Set(t.stack.evaluatedFeatures);e:for(let o of n.rules){if(o.parentConditions)for(let f of o.parentConditions){t.stack.evaluatedFeatures=new Set(a);let d=et(f.id,t);if(d.source==="cyclicPrerequisite")return W(t,e,null,"cyclicPrerequisite");let m={value:d.value};if(!B(m,f.condition||{},r.savedGroups||{})){if(f.gate)return k(t,"Feature blocked by prerequisite",{id:e,rule:o}),W(t,e,null,"prerequisite");k(t,"Skip rule because prerequisite evaluation fails",{id:e,rule:o});continue e}}if(o.filters&&Kt(o.filters,t)){k(t,"Skip rule because of filters",{id:e,rule:o});continue}if("force"in o){if(o.condition&&!Qt(o.condition,t)){k(t,"Skip rule because of condition ff",{id:e,rule:o});continue}if(!pn(t,o.seed||e,o.hashAttribute,r.saveStickyBucketAssignmentDoc&&!o.disableStickyBucketing?o.fallbackAttribute:void 0,o.range,o.coverage,o.hashVersion)){k(t,"Skip rule because user not included in rollout",{id:e,rule:o});continue}return k(t,"Force value from rule",{id:e,rule:o}),o.tracks&&o.tracks.forEach(f=>{Ht(t,f.experiment,f.result)}),W(t,e,o.force,"force",o.id)}if(!o.variations){k(t,"Skip invalid rule",{id:e,rule:o});continue}let c={variations:o.variations,key:o.key||e};"coverage"in o&&(c.coverage=o.coverage),o.weights&&(c.weights=o.weights),o.hashAttribute&&(c.hashAttribute=o.hashAttribute),o.fallbackAttribute&&(c.fallbackAttribute=o.fallbackAttribute),o.disableStickyBucketing&&(c.disableStickyBucketing=o.disableStickyBucketing),o.bucketVersion!==void 0&&(c.bucketVersion=o.bucketVersion),o.minBucketVersion!==void 0&&(c.minBucketVersion=o.minBucketVersion),o.meta&&(c.meta=o.meta),o.ranges&&(c.ranges=o.ranges),o.name&&(c.name=o.name),o.phase&&(c.phase=o.phase),o.seed&&(c.seed=o.seed),o.hashVersion&&(c.hashVersion=o.hashVersion),o.filters&&(c.filters=o.filters),o.condition&&(c.condition=o.condition);let u=Gt(c,e,t);if(r.onExperimentEval?.(c,u),u.inExperiment&&!u.passthrough)return W(t,e,u.value,"experiment",o.id,c,u)}}return k(t,"Use default value",{id:e,value:n.defaultValue}),W(t,e,n.defaultValue===void 0?null:n.defaultValue,"defaultValue")}function Gt(e,t,r){let{context:n}=r;Me(e);let i=e.key,a=e.variations.length;if(a<2)return k(r,"Invalid experiment",{id:i}),v(r,e,-1,!1,t);if(n.enabled===!1)return k(r,"Context disabled",{id:i}),v(r,e,-1,!1,t);if(e.urlPatterns&&!Ue(n.url||"",e.urlPatterns))return k(r,"Skip because of url targeting",{id:i}),v(r,e,-1,!1,t);let o=Ve(i,n.url||"",a);if(o!==null)return k(r,"Force via querystring",{id:i,variation:o}),v(r,e,o,!1,t);let u=un(n)[i];if(u!==void 0)return k(r,"Force via dev tools",{id:i,variation:u}),v(r,e,u,!1,t);if(e.active===!1)return k(r,"Skip because inactive",{id:i}),v(r,e,-1,!1,t);let{hashAttribute:f,hashValue:d}=Z(n,e.hashAttribute,n.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing?e.fallbackAttribute:void 0);if(!d)return k(r,"Skip because missing hashAttribute",{id:i}),v(r,e,-1,!1,t);let m=-1,y=!1,S=!1;if(n.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing){let{variation:T,versionIsBlocked:P}=Vt(Ut({context:n,expKey:e.key,expBucketVersion:e.bucketVersion,expHashAttribute:e.hashAttribute,expFallbackAttribute:e.fallbackAttribute,expMinBucketVersion:e.minBucketVersion,expMeta:e.meta}));y=T>=0,m=T,S=!!P}if(!y){if(e.filters&&Kt(e.filters,r))return k(r,"Skip because of filters",{id:i}),v(r,e,-1,!1,t);if(e.include&&!ze(e.include))return k(r,"Skip because of include function",{id:i}),v(r,e,-1,!1,t);if(e.condition&&!Qt(e.condition,r))return k(r,"Skip because of condition exp",{id:i}),v(r,e,-1,!1,t);if(e.parentConditions){let T=new Set(r.stack.evaluatedFeatures);for(let P of e.parentConditions){r.stack.evaluatedFeatures=new Set(T);let Y=et(P.id,r);if(Y.source==="cyclicPrerequisite")return v(r,e,-1,!1,t);let Le={value:Y.value};if(!B(Le,P.condition||{},n.savedGroups||{}))return k(r,"Skip because prerequisite evaluation fails",{id:i}),v(r,e,-1,!1,t)}}}let _=pe(e.seed||i,d,e.hashVersion??2);if(_===null)return k(r,"Skip because of invalid hash version",{id:i}),v(r,e,-1,!1,t);if(!y){let T=e.ranges||Be(a,e.coverage===void 0?1:e.coverage,e.weights);m=Fe(_,T)}if(S)return k(r,"Skip because sticky bucket version is blocked",{id:i}),v(r,e,-1,!1,t,void 0,!0);if(m<0)return k(r,"Skip because of coverage",{id:i}),v(r,e,-1,!1,t);if("force"in e)return k(r,"Force variation",{id:i,variation:e.force}),v(r,e,e.force===void 0?-1:e.force,!1,t);if(n.qaMode)return k(r,"Skip because QA mode",{id:i}),v(r,e,-1,!1,t);let A=v(r,e,m,!0,t,_,y);if(n.saveStickyBucketAssignmentDoc&&!e.disableStickyBucketing){let{changed:T,key:P,doc:Y}=zt(n,f,ne(d),{[Re(e.key,e.bucketVersion)]:A.key});if(T){n.stickyBucketAssignmentDocs=n.stickyBucketAssignmentDocs||{},n.stickyBucketAssignmentDocs[P]=Y;let Le=n.saveStickyBucketAssignmentDoc;Xe(()=>Le(Y))}}return Ht(r,e,A),k(r,"In experiment",{id:i,variation:A.variationId}),A}function W(e,t,r,n,i,a,o){let c={value:r,on:!!r,off:!r,source:n,ruleId:i||""};return a&&(c.experiment=a),o&&(c.experimentResult=o),n!=="override"&&ln(e,t,c),c}function Qt(e,t){return B(Je(t.context),e,t.context.savedGroups||{})}function Kt(e,t){return e.some(r=>{let{hashValue:n}=Z(t.context,r.attribute);if(!n)return!0;let i=pe(r.seed,n,r.hashVersion||2);return i===null?!0:!r.ranges.some(a=>de(i,a))})}function pn(e,t,r,n,i,a,o){if(!i&&a===void 0)return!0;if(!i&&a===0)return!1;let{hashValue:c}=Z(e.context,r,n);if(!c)return!1;let u=pe(t,c,o??2);return u===null?!1:i?de(u,i):a!==void 0?u<=a:!0}function v(e,t,r,n,i,a,o){let c=!0;(r<0||r>=t.variations.length)&&(r=0,c=!1);let{hashAttribute:u,hashValue:f}=Z(e.context,t.hashAttribute,e.context.saveStickyBucketAssignmentDoc&&!t.disableStickyBucketing?t.fallbackAttribute:void 0),d=t.meta?.[r]??{},m=t.variations[0];for(let[S,_]of t.variations.entries())if(S===r){m=_;break}let y={key:d.key||""+r,featureId:i,inExperiment:c,hashUsed:n,variationId:r,value:m,hashAttribute:u,hashValue:f,stickyBucketUsed:!!o};return d.name&&(y.name=d.name),a!==void 0&&(y.bucket=a),d.passthrough&&(y.passthrough=d.passthrough),y}function Zt(e,t){return t.hashAttribute+t.hashValue+e.key+t.variationId}/*!
2
+ Copyright (c) 2025 GrowthBook, Inc.
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
5
+ furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all
8
+ copies or substantial portions of the Software.
9
+
10
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
11
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
13
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
14
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
15
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
16
+ SOFTWARE.
17
+ */var J=l.json().superRefine((e,t)=>{let r=0;function n(i,a){if(++r>1e4||a>20){t.addIssue({code:"custom",message:"JSON exceeds its depth or node budget"});return}if(typeof i=="string"&&(i.includes("\0")||/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(i))&&t.addIssue({code:"custom",message:"JSON text must contain valid Unicode without NUL"}),Array.isArray(i))i.forEach(o=>n(o,a+1));else if(i&&typeof i=="object")for(let[o,c]of Object.entries(i))(o.includes("\0")||/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(o)||["__proto__","prototype","constructor"].includes(o))&&t.addIssue({code:"custom",message:"Reserved JSON property"}),n(c,a+1)}n(e,0),new TextEncoder().encode(JSON.stringify(e)).byteLength>65536&&t.addIssue({code:"custom",message:"JSON exceeds 64 KiB"})}),rt=l.record(l.string().min(1).max(128),J).superRefine((e,t)=>{(!J.safeParse(e).success||Object.keys(e).length>128||new TextEncoder().encode(JSON.stringify(e)).byteLength>65536||["__proto__","constructor","prototype"].some(r=>Object.hasOwn(e,r)))&&t.addIssue({code:"custom",message:"Attribute document exceeds its budget or uses a reserved key"})}),dn=new Set(["$in","$ini","$inGroup","$nin","$nini","$notInGroup","$gt","$gte","$lt","$lte","$regex","$regexi","$ne","$eq","$size","$elemMatch","$all","$alli","$not","$type","$exists","$vgt","$vgte","$vlt","$vlte","$vne","$veq","$and","$or","$nor","$savedGroup"]),Ne=rt.superRefine((e,t)=>{function r(n){if(Array.isArray(n))n.forEach(r);else if(n&&typeof n=="object")for(let[i,a]of Object.entries(n)){if(i==="$savedGroup"&&!l.strictObject({id:l.uuid(),attributeKey:l.string().min(1).max(128).optional()}).safeParse(a).success&&t.addIssue({code:"custom",message:"Saved groups use v2 object references"}),!i.startsWith("$")&&i.split(".").some(o=>["__proto__","prototype","constructor"].includes(o))&&t.addIssue({code:"custom",message:"Reserved attribute path"}),i.startsWith("$")&&!dn.has(i)&&t.addIssue({code:"custom",message:`Unknown GrowthBook operator: ${i}`}),["$regex","$regexi"].includes(i)&&typeof a=="string"){(/\(\?[<!=]|\\[0-9]|\\k</.test(a)||[...a.matchAll(/\{(\d+)(?:,(\d*))?\}/g)].some(o=>Number(o[1])>255||Number(o[2]||0)>255)||i==="$regexi"&&/[^\x00-\x7f]/.test(a.replace(/\\u([0-9a-f]{4})/gi,(o,c)=>String.fromCharCode(Number.parseInt(c,16)))))&&t.addIssue({code:"custom",message:"Regex is outside the shared TS/SQL subset"});try{new RegExp(a)}catch{t.addIssue({code:"custom",message:"Invalid regular expression"})}}r(a)}}typeof e.source=="string"&&["all","any","group","parameter","answer","attribute","result"].includes(e.source)&&("operator"in e||"predicates"in e||"groupId"in e)&&t.addIssue({code:"custom",message:"Obsolete condition protocol"}),r(e)}),fn=l.discriminatedUnion("type",[l.strictObject({type:l.literal("condition"),condition:Ne}),l.strictObject({type:l.literal("list"),attributeKey:l.string().min(1).max(128),values:l.array(l.union([l.string(),l.number().finite()])).max(1e5)})]).refine(e=>e.type!=="list"||new TextEncoder().encode(JSON.stringify(e.values)).byteLength<=1048576,"Saved group list exceeds 1 MiB");function mn(e){let t=new Set;function r(n){if(Array.isArray(n))n.forEach(r);else if(n&&typeof n=="object")for(let[i,a]of Object.entries(n))i==="$savedGroup"&&a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.id=="string"?t.add(a.id):["$inGroup","$notInGroup"].includes(i)&&typeof a=="string"?t.add(a):["$eq","$ne","$in","$nin","$ini","$nini"].includes(i)||r(a)}return r(e),[...t]}var gn=l.record(l.uuid(),fn).superRefine((e,t)=>{let r=new Set,n=new Set;function i(a){if(r.has(a)){t.addIssue({code:"custom",message:"Cyclic saved group dependency"});return}if(n.has(a))return;let o=e[a];if(!o){t.addIssue({code:"custom",message:"Missing saved group dependency"});return}r.add(a),o.type==="condition"&&mn(o.condition).forEach(i),r.delete(a),n.add(a)}Object.keys(e).forEach(i)}),nt=l.tuple([l.number().min(0).max(1),l.number().min(0).max(1)]).refine(([e,t])=>e<=t),Wt=l.strictObject({attribute:l.string().optional(),seed:l.string().min(1),hashVersion:l.literal(2),ranges:l.array(nt).min(1).max(100)}),hn=l.strictObject({id:l.string().min(1).max(128),condition:Ne,gate:l.boolean().optional()}),tt={id:l.string().max(128).optional(),condition:Ne.optional(),parentConditions:l.array(hn).max(50).optional(),filters:l.array(Wt).max(20).optional()},bn=l.union([l.strictObject({...tt}),l.strictObject({...tt,force:J,coverage:l.number().min(0).max(1).optional(),range:nt.optional(),seed:l.string().min(1).optional(),hashAttribute:l.string().optional(),hashVersion:l.literal(2).optional()}),l.strictObject({...tt,type:l.literal("experiment-ref"),experimentId:l.uuid(),values:l.record(l.string().min(1),J),meta:l.record(l.string().min(1),l.strictObject({passthrough:l.boolean()})).optional()})]),yn=l.strictObject({defaultValue:J,rules:l.array(bn).max(100)}),_o=l.record(l.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,127}$/),yn).superRefine((e,t)=>{Object.keys(e).length>100&&t.addIssue({code:"custom",message:"Too many Features"});let r=new Set,n=new Set;function i(a){if(r.has(a)){t.addIssue({code:"custom",message:`Cyclic Feature dependency: ${a}`});return}if(n.has(a))return;let o=e[a];if(!o){t.addIssue({code:"custom",message:`Unknown prerequisite Feature: ${a}`});return}r.add(a);for(let c of o.rules)for(let u of c.parentConditions??[])i(u.id);r.delete(a),n.add(a)}Object.keys(e).forEach(i)}),xn=l.strictObject({name:l.string().max(80),reason:l.string().max(500),dateStarted:l.iso.datetime({offset:!0}),dateEnded:l.iso.datetime({offset:!0}).nullable(),coverage:l.number().min(0).max(1),variationWeights:l.array(l.number().min(0).max(1)).min(2).max(20).refine(e=>Math.abs(e.reduce((t,r)=>t+r,0)-1)<=.01),condition:Ne,savedGroups:l.array(l.strictObject({match:l.enum(["any","all","none"]),ids:l.array(l.uuid()).min(1)})).max(50),namespace:l.strictObject({id:l.uuid(),ranges:l.array(nt).min(1)}).nullable(),seed:l.string().min(1).max(128)}),Sn=l.strictObject({key:l.string().min(1).max(128),name:l.string().min(1).max(80),hypothesis:l.string().max(2e3),status:l.enum(["draft","running","stopped"]),hashAttribute:l.string().min(1).max(128),fallbackAttribute:l.string().max(128).nullable(),hashVersion:l.literal(2),disableStickyBucketing:l.boolean(),bucketVersion:l.number().int().min(0).max(1e3),minBucketVersion:l.number().int().min(0).max(1e3),variations:l.array(l.strictObject({id:l.string().min(1),key:l.string().min(1),name:l.string().max(80),description:l.string().max(500)})).min(2).max(20),phases:l.array(xn).min(1).max(100),releasedVariationId:l.string().nullable(),excludeFromPayload:l.boolean(),statusSchedule:l.strictObject({startAt:l.iso.datetime({offset:!0}).nullable(),stopAt:l.iso.datetime({offset:!0}).nullable(),stopAfter:l.strictObject({value:l.number().int().positive().max(36500),unit:l.enum(["hours","days"])}).nullable().optional()}).nullable()}).superRefine((e,t)=>{(e.minBucketVersion>e.bucketVersion||e.statusSchedule?.stopAt&&e.statusSchedule?.stopAfter||e.phases.some((r,n)=>{if(n===0)return!1;let i=e.phases[n-1];return!i?.dateEnded||Date.parse(r.dateStarted)<Date.parse(i.dateStarted)||Date.parse(i.dateEnded)>Date.parse(r.dateStarted)})||new Set(e.variations.map(r=>r.key)).size!==e.variations.length||new Set(e.variations.map(r=>r.id)).size!==e.variations.length||e.releasedVariationId!==null&&!e.variations.some(r=>r.id===e.releasedVariationId)||e.statusSchedule?.startAt&&e.statusSchedule?.stopAt&&Date.parse(e.statusSchedule.startAt)>=Date.parse(e.statusSchedule.stopAt)||e.phases.some(r=>r.dateEnded&&Date.parse(r.dateStarted)>=Date.parse(r.dateEnded)||r.namespace?.ranges.some(([n,i],a,o)=>n>=i||o.some(([c,u],f)=>f!==a&&n<u&&c<i)))||e.phases.some(r=>r.variationWeights.length!==e.variations.length))&&t.addIssue({code:"custom",message:"Invalid experiment versions, variation keys or weights"})});var An=Sn.safeExtend({filters:l.array(Wt).optional()}),kn=l.strictObject({experiments:l.record(l.uuid(),An),savedGroups:gn}),En=l.strictObject({attributeName:l.string(),attributeValue:l.string(),assignments:l.record(l.string(),l.string())}),Io=l.strictObject({snapshot:kn,attributes:rt,results:rt,stickyBucketAssignmentDocs:l.record(l.string(),En)}),wo=l.strictObject({variantKey:l.string().nullable(),bucketVersion:l.number().int().min(0),source:l.enum(["unknownFeature","defaultValue","force","override","experiment","prerequisite","cyclicPrerequisite"]),bucket:l.number().min(0).max(1).optional(),stickyBucketUsed:l.boolean().optional(),hashUsed:l.boolean().optional()});import{z as I}from"zod";import{z as w}from"zod";var Oe=w.string().regex(/^(0|[1-9]\d{0,12})(\.\d{1,12})?$/),R=w.string().regex(/^(0|[1-9]\d{0,11})(\.\d{1,6})?$/).transform(e=>e.includes(".")?e.replace(/0+$/,"").replace(/\.$/,""):e),_n=w.string().regex(/^-?(0|[1-9]\d{0,11})(\.\d{1,6})?$/).transform(e=>{let t=e.includes(".")?e.replace(/0+$/,"").replace(/\.$/,""):e;return t==="-0"?"0":t}),it=R.refine(e=>/[1-9]/.test(e),"\u6570\u91CF\u5FC5\u987B\u5927\u4E8E 0"),Jt=w.string().min(1).max(64),ee=w.string().min(1).regex(/^[a-zA-Z0-9_-]+$/),Yt=w.string().min(1).max(64).refine(e=>!e.includes("::"),"Dimension IDs cannot contain ::"),V=w.record(Jt,w.union([w.string().max(120),w.number().finite(),w.boolean()])).refine(e=>Object.keys(e).length<=16,"\u6700\u591A 16 \u4E2A\u8BA1\u4EF7\u5C5E\u6027").transform(e=>Object.fromEntries(Object.entries(e).map(([t,r])=>[t,String(r)]))),Xt=w.record(Jt,w.union([w.string().max(120),w.number().finite(),w.boolean()]).transform(String)).refine(e=>Object.keys(e).length<=8,"\u5339\u914D\u6761\u4EF6\u6700\u591A 8 \u4E2A\u5C5E\u6027"),ie=e=>{let t=e.startsWith("-");t&&(e=e.slice(1));let[r,n=""]=e.split(".");if(r===void 0||r==="")throw new Error("Invalid decimal value");let i=BigInt(r)*BigInt("1000000")+BigInt(n.padEnd(6,"0"));return t?-i:i},er=w.array(w.object({upTo:it.nullable(),cost:R}).strict()).min(1).max(12).refine(e=>e.at(-1)?.upTo===null&&e.slice(0,-1).every((t,r)=>{let n=e[r-1]?.upTo;return t.upTo!==null&&(r===0||n!=null&&ie(t.upTo)>ie(n))}),"\u9636\u68AF\u4E0A\u9650\u5FC5\u987B\u9012\u589E\uFF0C\u6700\u540E\u4E00\u6863\u4E3A\u65E0\u9650"),In=w.object({key:Yt,match:Xt,priority:w.number().int().default(0),cost:R.optional(),tiers:er.optional()}).strict().refine(e=>e.cost!==void 0||e.tiers!==void 0,"\u7EF4\u5EA6\u9700\u8981\u6307\u5B9A\u5355\u4EF7\u6216\u9636\u68AF"),wn=w.object({key:Yt,match:Xt,factor:it.optional(),add:_n.optional()}).strict().refine(e=>e.factor!==void 0||e.add!==void 0,"A multiplier needs a factor or an add").transform(e=>({...e,factor:e.factor??"1",add:e.add??"0"})),Rn=w.object({units:it.default("1"),cost:R,tiers:er.optional(),dimensions:w.array(In).max(12).optional(),multipliers:w.array(wn).max(4).optional()}).strict().superRefine((e,t)=>{let r=e.dimensions??[],n=e.multipliers??[];(new Set(r.map(o=>o.key)).size!==r.length||new Set(n.map(o=>o.key)).size!==n.length)&&t.addIssue({code:"custom",message:"\u7EF4\u5EA6\u548C\u500D\u7387\u7684 ID \u4E0D\u80FD\u91CD\u590D"});for(let[o,c]of r.entries())for(let u of r.slice(o+1))Object.keys(c.match).length===Object.keys(u.match).length&&c.priority===u.priority&&!Object.keys(c.match).some(f=>u.match[f]!==void 0&&u.match[f]!==c.match[f])&&t.addIssue({code:"custom",message:"\u7EF4\u5EA6\u53EF\u80FD\u540C\u65F6\u5339\u914D\uFF0C\u8BF7\u8C03\u6574\u4F18\u5148\u7EA7"});let i=[e.cost,...(e.tiers??[]).map(o=>o.cost),...r.flatMap(o=>[...o.cost===void 0?[]:[o.cost],...(o.tiers??[]).map(c=>c.cost)])],a=ie(e.units);for(let o of i)for(let c=0;c<1<<n.length;c++){let u=n.filter((_,A)=>c&1<<A);if(u.some((_,A)=>u.slice(A+1).some(T=>Object.keys(_.match).some(P=>T.match[P]!==void 0&&T.match[P]!==_.match[P]))))continue;let f=ie(o),d=BigInt("1"),m=BigInt("0");for(let[_,A]of n.entries())c&1<<_&&(f*=ie(A.factor??"1"),d*=BigInt("1000000"),m+=ie(A.add??"0"));let y=(f+m*d)*BigInt("1000000"),S=d*a;(y<BigInt("0")||y%S!==BigInt("0")||y/S>BigInt("999999999999999999"))&&t.addIssue({code:"custom",message:"\u6BCF\u4E2A\u4E1A\u52A1\u5355\u4F4D\u7684\u6700\u7EC8\u5355\u4EF7\u5FC5\u987B\u975E\u8D1F\u3001\u5728\u8303\u56F4\u5185\u4E14\u80FD\u7CBE\u786E\u8868\u793A\u4E3A\u6700\u591A 6 \u4F4D\u5C0F\u6570"})}}),Oo=Rn.safeExtend({featureKey:ee});import{z as Nn}from"zod";import{z as oe}from"zod";var tr=oe.enum(["stripe","apple","google","merchant"]),To=oe.enum(["membership","credit_pack","lifetime"]),jo=oe.enum(["active","grace","suspended","inactive","revoked"]),Do=oe.strictObject({currency:oe.string().regex(/^[A-Z]{3}$/),micros:oe.string().regex(/^(0|[1-9][0-9]{0,29})$/)});var rr=Nn.object({provider:tr,currency:j}).strict();var nr=I.strictObject({internal_feature_id:I.uuid(),quantity:R.refine(e=>/[1-9]/.test(e)),properties:V,entityId:I.uuid().optional()}),qo=I.strictObject({requirement:nr,commerce:rr.optional(),paywallId:I.uuid().optional()}),On=I.enum(["not_entitled","insufficient_balance","capacity_exceeded","limit_exceeded","awaiting_topup","authorization_required","payment_blocked","cash_budget_exceeded","unavailable","authentication_required"]),Cn=I.strictObject({productId:I.string().min(1),productVersionId:I.string().min(1),name:I.string().min(1).max(120),action:I.enum(["purchase","upgrade","addon","topup"]),membershipId:I.string().min(1).nullable(),currency:j,amountMinor:I.string().regex(/^(0|[1-9]\d{0,8})$/),interval:I.enum(["free","week","month","year","one_time"]),intervalCount:I.number().int().min(1).max(156)}),ir=I.strictObject({internal_feature_id:I.string().min(1),name:I.string().min(1).max(120),kind:I.enum(["access","metered","credit"]),quantity:R,allowed:I.boolean(),reason:On.nullable(),preview:I.strictObject({scenario:I.enum(["feature_flag","usage_limit"]),candidates:I.array(Cn).max(20)}).nullable()}).superRefine((e,t)=>{(e.allowed!==(e.reason===null)||e.allowed&&e.preview!==null||new Set(e.preview?.candidates.map(r=>r.productVersionId)).size!==(e.preview?.candidates.length??0)||e.preview?.candidates.some(r=>r.action==="upgrade"!=(r.membershipId!==null)))&&t.addIssue({code:"custom",message:"Invalid access recommendation"})}),Ho=I.strictObject({paywallId:I.uuid(),requirement:nr});import{z as h}from"zod";import{z as ce}from"zod";import{z as se}from"zod";import{z as ae}from"zod";var or=ae.number().int().min(0).max(1e8),ot=ae.strictObject({kind:ae.enum(["graduated","volume"]),tiers:ae.array(ae.strictObject({upTo:ae.number().int().min(1).max(1e4).nullable(),unitAmountMinor:or,flatAmountMinor:or.optional()})).min(1).max(12)}).refine(e=>e.tiers.at(-1)?.upTo===null&&e.tiers.slice(0,-1).every((t,r)=>{let n=e.tiers[r-1]?.upTo;return t.upTo!==null&&(r===0||n!=null&&t.upTo>n)}),"Tier ceilings must increase and end unbounded").refine(e=>!e.tiers.some(t=>(t.flatAmountMinor??0)>0)||e.kind==="volume"&&e.tiers.length>1,"Tier flat fees require volume pricing with multiple tiers");function at(e,t){if(!Number.isInteger(t)||t<0||t>1e4)throw new Error("Invalid purchased pack quantity");let r=e.pricing?ot.parse(e.pricing):void 0;if(t===0)return 0;let n=0n,i=0;if(!r)n=BigInt(e.amountMinor)*BigInt(t);else for(let a of r.tiers){let o=a.upTo??1e4;if(r.kind==="volume"){if(t<=o){n=BigInt(t)*BigInt(a.unitAmountMinor)+BigInt(a.flatAmountMinor??0);break}}else t>i&&(n+=BigInt(Math.min(t,o)-i)*BigInt(a.unitAmountMinor));i=o}if(n>200000000n)throw new Error("Purchased price exceeds the payment amount limit");return Number(n)}function ar(e){return at({amountMinor:e.unitAmountMinor,...e.pricing?{pricing:e.pricing}:{}},e.quantity)}var vn=R.refine(e=>/[1-9]/.test(e)),cr=se.strictObject({units:vn,prices:se.array(se.strictObject({currency:j,amountMinor:se.number().int().min(0).max(1e8),pricing:ot.optional()})).min(1).max(20).refine(e=>new Set(e.map(t=>t.currency)).size===e.length,"Currencies must be unique").refine(e=>e.every(t=>!t.pricing||t.amountMinor===0),"Tiered prices specify their rates in tiers"),minimumQuantity:se.number().int().min(0).max(1e4),maximumQuantity:se.number().int().min(0).max(1e4)}).refine(e=>e.maximumQuantity>=e.minimumQuantity,"Purchased quantity must fit its published bounds").refine(e=>{try{for(let t of e.prices)for(let r of[e.maximumQuantity,...t.pricing?.tiers.flatMap(n=>n.upTo===null?[]:[n.upTo,n.upTo+1])??[]])r<=e.maximumQuantity&&at({amountMinor:t.amountMinor,...t.pricing===void 0?{}:{pricing:t.pricing}},r);return!0}catch{return!1}},"Every purchasable quantity must fit the payment amount limit");function sr(e){if(!/^(0|[1-9]\d{0,11})(\.\d{1,6})?$/.test(e))throw new Error("Invalid quantity");let[t,r=""]=e.split(".");if(t===void 0||t==="")throw new Error("Invalid decimal value");return BigInt(t)*1000000n+BigInt(r.padEnd(6,"0"))}function ur(e,t,r){if(!Number.isSafeInteger(r)||r<0||r>1e4)throw new Error("Invalid purchased quantity");let n=sr(e)+sr(t)*BigInt(r);if(n>999999999999999999n)throw new Error("Purchased allowance exceeds the ledger quantity limit");let i=(n%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return(n/1000000n).toString()+(i?"."+i:"")}var st=ce.strictObject({internalFeatureId:ce.uuid(),name:ce.string().min(1).max(120),includedAmount:ce.string().regex(/^(0|[1-9]\d{0,11})(\.\d{1,6})?$/),reset:ce.enum(["hour","day","week","month","year","lifetime"]),resetCount:ce.number().int().min(1).max(100),terms:cr});var Tn=["plan.name","plan.price","plan.period","plan.price_per_month","trial.headline","trial.terms","offer.headline","offer.name","offer.description","offer.eligibility","offer.validity","offer.terms","offer.discount","offer.price","offer.original_price","offer.months","offer.code","offer.ends_at","offer.expires_at","paywall.feature","paywall.message","paywall.action"],Ce=h.object({plan:h.string().min(1).max(200).optional(),coupon:h.uuid().optional(),promotionCode:h.uuid().optional(),picker:h.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/).optional()}).strict(),lr=h.object({text:h.string().optional(),label:h.string().optional(),alt:h.string().optional(),html:h.string().max(32768).optional(),price:h.object({current:h.string(),original:h.string().nullable(),period:h.string()}).optional(),code:h.string().optional(),countdownAt:h.iso.datetime().optional(),planId:h.string().min(1).max(200).optional(),planVersionId:h.string().min(1).max(200).optional(),currency:j.optional(),couponId:h.uuid().optional(),offerId:h.uuid().optional(),unavailable:h.boolean().optional(),unavailableReason:h.string().optional(),missing:h.array(h.string()).optional()}).strict(),sa=h.object({paywall:ir.optional(),nodes:h.record(h.string(),h.object({base:lr,picker:h.string().optional(),byPlan:h.record(h.string(),lr).optional()}).strict()),plans:h.record(h.string(),h.object({id:h.string().min(1).max(200),versionId:h.string().min(1).max(200),available:h.boolean(),name:h.string(),price:h.string(),period:h.string(),currency:j.optional(),amountMinor:h.number().int().nonnegative().optional(),interval:h.enum(["free","week","month","year","one_time"]).optional(),intervalCount:h.number().int().positive().optional(),prepaid:h.array(st).max(100).optional()}).strict()),pickers:h.record(h.string(),h.object({options:h.array(h.string().min(1).max(200)).max(20),selected:h.string().min(1).max(200).nullable()}).strict()),quantities:h.record(h.string(),h.strictObject({minimum:h.number().int().nonnegative(),maximum:h.number().int().nonnegative(),step:h.number().int().positive(),value:h.number().int().nonnegative(),label:h.string(),available:h.boolean()})).optional(),diagnostics:h.array(h.object({nodeId:h.string(),message:h.string()}).strict())}).strict();function pr(e){return[...e.matchAll(/\{\{\s*([^{}]+?)\s*\}\}/g)].flatMap(t=>t[1]===void 0?[]:[t[1].trim()])}function ct(e){let t=pr(e).filter(n=>!Tn.includes(n)&&!/^variables\.[A-Za-z0-9_][A-Za-z0-9_.:-]*$/.test(n)),r=e.replace(/\{\{\s*[^{}]+?\s*\}\}/g,"");return(r.includes("{{")||r.includes("}}"))&&t.push("\u65E0\u6548\u53D8\u91CF\u8BED\u6CD5"),[...new Set(t)]}function ca(e,t,r={}){let n=e?.nodes[t];if(!n)return;let i=n.picker?r[n.picker]??e?.pickers[n.picker]?.selected:void 0;return typeof i=="string"?n.byPlan?.[i]??n.base:n.base}import{z as b}from"zod";var jn=["credit_balance","credit_transactions","membership","billing","billing_controls","customer_plans","credit_packs","credit_pack_orders","offer_history"],dr=b.enum(jn),fr=b.object({source:dr,layout:b.enum(["full","compact"]),resourceKey:ee.optional(),pageSize:b.number().int().min(1).max(50),showSources:b.boolean(),allowPurchase:b.boolean(),outputs:b.object({billing_adjustment:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/).optional(),billing_authorization:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/).optional(),buy_pack:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/).optional(),billing_portal:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/).optional(),cancel_membership:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/).optional(),resume_membership:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/).optional()}).strict().optional()}).strict().superRefine((e,t)=>{(e.outputs?.billing_authorization||e.outputs?.billing_adjustment)&&e.source!=="billing_controls"&&t.addIssue({code:"custom",message:"Payment authorization routes belong to the billing controls component."}),e.resourceKey&&!["credit_balance","credit_transactions"].includes(e.source)&&t.addIssue({code:"custom",message:"\u8FD9\u4E2A\u6570\u636E\u6E90\u4E0D\u80FD\u7ED1\u5B9A\u79EF\u5206\u8D44\u6E90\u3002"}),e.showSources&&e.source!=="credit_balance"&&t.addIssue({code:"custom",message:"\u53EA\u6709\u79EF\u5206\u4F59\u989D\u53EF\u4EE5\u5C55\u5F00\u6765\u6E90\u3002"}),e.allowPurchase&&!["credit_packs","customer_plans","membership"].includes(e.source)&&t.addIssue({code:"custom",message:"\u53EA\u6709\u79EF\u5206\u5305\u3001\u5957\u9910\u4E0E\u4F1A\u5458\u7EC4\u4EF6\u53EF\u4EE5\u542F\u7528\u4EA4\u6613\u3002"})}),O=b.string().max(2e3),mr=b.object({id:b.string().max(100),label:O,detail:b.array(O).max(12),value:O.optional(),status:O.optional(),facts:b.array(b.object({label:O,value:O}).strict()).max(1e3),purchaseId:b.uuid().optional(),invoiceUrl:b.url().max(2048).refine(e=>{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password}).optional(),billingActions:b.array(b.strictObject({action:b.literal("invoice_open"),label:O})).max(1).optional(),membershipActions:b.array(b.object({value:b.string().max(100),label:O}).strict()).max(3).optional()}).strict(),Dn=b.object({key:ee,name:O,spendable:O,reserved:O,available:O,expiry:O.nullable(),sources:b.array(mr).max(50),sourceCount:b.number().int().nonnegative(),sourcePage:b.number().int().positive(),hasNextSources:b.boolean(),hasPreviousSources:b.boolean()}).strict(),Ln=b.object({source:dr,status:b.enum(["idle","loading","ready","error"]),stale:b.boolean(),preview:b.boolean(),errorCode:b.string().max(80).optional(),errorMessage:O.optional(),resources:b.array(Dn).max(500),rows:b.array(mr).max(50),hasNext:b.boolean(),hasPrevious:b.boolean(),page:b.number().int().positive(),filter:b.string().max(40),updatedAt:b.iso.datetime().optional(),buyingId:b.uuid().optional(),membershipBusy:b.boolean().optional(),billingBusy:b.boolean().optional(),membershipReview:b.object({title:O,note:O,facts:b.array(b.object({label:O,value:O}).strict()).max(100)}).strict().optional(),membershipResult:O.optional()}).strict(),da=b.object({nodes:b.record(b.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/),Ln)}).strict(),fa=b.object({nodeId:b.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/),action:b.enum(["refresh","next","previous","filter","buy_pack","billing_portal","billing_authorization","billing_adjustment","invoice_open","membership_preview","membership_confirm","membership_dismiss","sources_next","sources_previous"]),value:b.string().max(100).optional()}).strict();import{z as s}from"zod";function gr(e){return e.type==="stack"&&e.interaction?.type==="select"&&e.interaction.purpose==="product"&&!!e.interaction.pickerId}function hr(e){let t={};function r(n){if(gr(n)){let i=t[n.interaction.pickerId]??={ids:[],defaultId:null};for(let o of n.children){let c=o.type==="stack"?o.bind?.plan:void 0;c&&!i.ids.includes(c)&&i.ids.push(c)}let a=n.children[n.interaction.defaultIndex];!i.defaultId&&a?.type==="stack"&&(i.defaultId=a.bind?.plan??null)}n.type==="stack"&&n.children.forEach(r)}return e.pages.forEach(n=>r(n.root)),t}function br(e,t,r){let n={};function i(u){if(u.hidden)return;if(u.type==="plan_picker"){let m=r.pickers[u.id];n[u.id]={ids:m?.options??[],defaults:m?.selected?[m.selected]:[],remembered:[]};return}if(u.type!=="stack")return;let f=u.children.filter(m=>!m.hidden),d=u.interaction;if(gr(u)){let m=n[u.interaction.pickerId]??={ids:[],defaults:[],remembered:[]},y=r.pickers[u.interaction.pickerId]?.options??[];for(let _ of f){let A=_.type==="stack"?_.bind?.plan:void 0;A&&y.includes(A)&&!m.ids.includes(A)&&m.ids.push(A),A&&_.id===t[u.id]&&m.remembered.push(A)}let S=u.children[u.interaction.defaultIndex];S?.type==="stack"&&!S.hidden&&S.bind?.plan&&m.defaults.push(S.bind.plan)}if(d?.type==="tabs"){let m=f.find(y=>y.id===t[u.id])??u.children[d.defaultIndex];m&&i(m)}else if(d?.type==="toggle"){let m=typeof t[u.id]=="boolean"?t[u.id]:d.defaultEnabled,y=u.children[m?0:1];y&&i(y)}else f.forEach(i)}let a=typeof t.__page=="string"?t.__page:e.initialPageId??e.pages[0]?.id,o=e.pages.find(u=>u.id===a);o&&i(o.root);let c={};for(let[u,f]of Object.entries(n)){let d=t[u],m=f.remembered[0]??(f.ids.includes(r.pickers[u]?.selected??"")?r.pickers[u]?.selected:f.defaults[0]);c[u]=typeof d=="string"?f.ids.includes(d)?d:"":m&&f.ids.includes(m)?m:""}for(let u of Object.keys(hr(e)))c[u]??="";return c}import{z as Q}from"zod";var yr=Q.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/),xr=Q.strictObject({tiers:Q.array(Q.strictObject({id:yr,name:Q.string().trim().min(1).max(80)})).min(1).max(8),assignments:Q.array(Q.strictObject({productVersionId:Q.string().min(1).max(200),tierId:yr,period:Q.enum(["month","year"])})).max(20)}).superRefine((e,t)=>{let r=e.tiers.map(n=>n.id);(new Set(r).size!==r.length||new Set(e.assignments.map(n=>n.productVersionId)).size!==e.assignments.length||new Set(e.assignments.map(n=>`${n.tierId}:${n.period}`)).size!==e.assignments.length||e.assignments.some(n=>!r.includes(n.tierId)))&&t.addIssue({code:"custom",message:"Each product and tier/period cell must have one unambiguous assignment"})});function Sr(e,t){return e.assignments.length===t.length&&e.assignments.every(r=>t.includes(r.productVersionId))}function xa(e){let t=ct(e).map(r=>`\u672A\u77E5\u53D8\u91CF\uFF1A${r}`);for(let r=0;r<e.length;r++){if(e[r]!=="<"||!/[A-Za-z!/?{]/.test(e[r+1]??""))continue;let n=r;if(e.startsWith("<!--",r)){let i=e.indexOf("-->",r+4);r=i<0?e.length:i+2}else{let i="";for(r++;r<e.length;r++){let a=e[r];if(i)a===i&&(i="");else if(a==='"'||a==="'")i=a;else if(a===">")break}}/\{\{|\}\}/.test(e.slice(n,r+1))&&t.push("\u53D8\u91CF\u53EA\u80FD\u653E\u5728 HTML \u6587\u5B57\u4E2D\uFF0C\u4E0D\u80FD\u653E\u5165\u6807\u7B7E\u3001\u5C5E\u6027\u6216\u6CE8\u91CA")}return[...new Set(t)]}import{z as Pn}from"zod";var kr=/^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$/,ue=Pn.string().max(16).regex(kr,"\u8BED\u8A00\u4EE3\u7801\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u4F8B\u5982 zh-CN\u3001en").refine(e=>{try{return Intl.getCanonicalLocales(e)[0]===e}catch{return!1}},"\u6301\u4E45\u5316\u8BED\u8A00\u4EE3\u7801\u5FC5\u987B\u4F7F\u7528\u89C4\u8303\u5199\u6CD5");function ut(e){if(typeof e!="string")return null;try{let t=Intl.getCanonicalLocales(e.trim().replaceAll("_","-"))[0];if(!t)return null;let{language:r,script:n,region:i}=new Intl.Locale(t),a=[r,n,i].filter(Boolean).join("-");return kr.test(a)?a:null}catch{return null}}var $n=new Set(["TW","HK","MO"]);function Ar(e){let[t,r,n]=e.split("-");if(t!=="zh")return`${t}-${new Intl.Locale(e).maximize().script??""}`;let i=r?.length===4?r:void 0,a=r?.length===4?n:r;return i?`zh-${i}`:a&&$n.has(a)?"zh-Hant":"zh-Hans"}function Er(e,t,r){let n=t.map(i=>({code:ue.parse(i),normalized:i}));for(let i of e){let a=ut(i);if(!a)continue;let o=n.find(d=>d.normalized===a);if(o)return o.code;let c=Ar(a),u=n.filter(d=>Ar(d.normalized)===c),f=u.find(d=>!d.normalized.includes("-")||d.normalized===c)??u[0];if(f)return f.code}return r}var Fn=4,U={nodes:150,depth:8,children:50,locales:20,actions:40,pages:10,stringLength:2e3,customHtml:32768,customCss:16384,documentBytes:2e5},ge=s.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/),E=s.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/),Bn=s.enum(["none","xs","sm","md","lg","xl"]),Vn=s.enum(["none","sm","md","lg","full"]),lt=s.string().regex(/^#[0-9a-fA-F]{6}$/),wr=s.string().max(2048).refine(e=>{try{let t=new URL(e);return t.protocol==="https:"&&t.hostname.length>0}catch{return!1}},"\u53EA\u652F\u6301 https \u94FE\u63A5"),pt=s.union([wr,s.string().max(32768).regex(/^data:image\/svg\+xml;base64,[A-Za-z0-9+/]+={0,2}$/),s.string().max(131072).regex(/^data:image\/jpeg;base64,\/9j\/[A-Za-z0-9+/]+={0,2}$/),s.string().max(131072).regex(/^data:image\/png;base64,iVBORw0KGgo[A-Za-z0-9+/]+={0,2}$/)]),_r=s.object({primary:lt,background:lt,text:lt,radius:Vn,font:s.enum(["system","serif","rounded","mono"])}).strict(),he=s.union([s.enum(["primary","text","muted","background","surface"]),s.string().regex(/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/)]),x=(e,t)=>s.number().int().min(e).max(t),Ir=s.union([s.enum(["fit","fill"]),x(1,1200)]),zn=s.object({top:x(0,200),right:x(0,200),bottom:x(0,200),left:x(0,200)}).strict(),Un=s.object({top:x(-100,200),right:x(-100,200),bottom:x(-100,200),left:x(-100,200)}).strict(),Rr=s.object({x:x(0,100),y:x(0,100)}).strict(),Mn=s.discriminatedUnion("type",[s.object({type:s.literal("color"),color:he}).strict(),s.object({type:s.literal("linear"),angle:x(0,360),stops:s.array(s.object({color:he,at:x(0,100)}).strict()).min(2).max(4)}).strict(),s.object({type:s.literal("image"),src:pt,fit:s.enum(["cover","contain"]),position:Rr.optional()}).strict()]),qn=s.discriminatedUnion("type",[s.object({type:s.literal("rect"),radius:s.union([x(0,200),s.object({topLeft:x(0,200),topRight:x(0,200),bottomRight:x(0,200),bottomLeft:x(0,200)}).strict()])}).strict(),s.object({type:s.literal("pill")}).strict()]),Hn=s.object({width:x(0,12),color:he,style:s.enum(["solid","dashed"])}).strict(),Gn=s.object({x:x(-40,40),y:x(-40,40),blur:x(0,80),spread:x(-20,40),color:he}).strict(),Qn=s.object({font:s.enum(["system","serif","rounded","mono"]),size:x(8,96),weight:s.number().int().min(100).max(900).multipleOf(100),lineHeight:s.number().min(.8).max(3),letterSpacing:s.number().min(-5).max(20),color:he,align:s.enum(["start","center","end"]),italic:s.boolean(),decoration:s.enum(["none","underline","line-through"]),transform:s.enum(["none","uppercase"])}).strict().partial(),te=s.object({width:Ir,height:Ir,padding:zn,margin:Un,gap:x(0,120),grow:s.union([s.boolean(),s.number().min(0).max(12)]),background:Mn,opacity:s.number().min(0).max(1),clipContent:s.boolean(),shape:qn,border:Hn,shadow:Gn,text:Qn}).strict().partial(),L={id:ge,name:s.string().trim().min(1).max(60).optional(),hidden:s.boolean().optional(),style:te.optional(),fallback:E.optional()},Kn=s.object({...L,type:s.literal("text"),productField:s.enum(["name","price","trial","period"]).optional(),feature:s.object({id:s.uuid(),field:s.enum(["name","allowance"])}).strict().optional(),text:E,variant:s.enum(["title","heading","body","caption"])}).strict(),Zn=s.object({...L,type:s.literal("image"),src:pt,localizedSrc:s.record(ue,pt).optional(),alt:E,aspect:s.enum(["auto","1:1","4:3","16:9","3:1"]),fit:s.enum(["cover","contain"]),position:Rr.optional()}).strict(),Wn=s.object({...L,type:s.literal("button"),label:E,variant:s.enum(["primary","secondary","link"]),action:E,purpose:s.enum(["purchase","navigation","close"]).optional(),bind:Ce.optional()}).strict(),Jn=s.object({...L,type:s.literal("divider")}).strict(),Yn=s.object({...L,type:s.literal("customer_data"),title:E,data:fr}).strict(),Xn=s.object({...L,type:s.literal("spacer"),size:Bn}).strict(),ei=s.object({...L,type:s.literal("custom_html"),html:s.record(ue,s.string().max(U.customHtml)),css:s.string().max(U.customCss)}).strict(),ti=s.object({...L,type:s.literal("price"),fallback:E,parts:s.object({current:te.optional(),original:te.optional(),period:te.optional()}).strict().optional()}).strict(),ri=s.object({...L,type:s.literal("coupon_code"),label:E,fallback:E}).strict(),ni=s.object({...L,type:s.literal("countdown"),source:s.enum(["offer.ends_at","offer.expires_at","fixed"]),at:s.iso.datetime().optional(),granularity:s.enum(["day","hour","minute","second"]),expired:E,fallback:E}).strict().refine(e=>e.source!=="fixed"||!!e.at,"\u56FA\u5B9A\u5012\u8BA1\u65F6\u9700\u8981\u7ED3\u675F\u65F6\u95F4"),ii=s.object({...L,type:s.literal("plan_picker"),label:E,fallback:E,planIds:s.array(s.string().min(1).max(200)).min(1).max(20).refine(e=>new Set(e).size===e.length,"\u5957\u9910\u4E0D\u80FD\u91CD\u590D").optional(),defaultPlan:s.string().min(1).max(200).optional(),grouping:xr.safeExtend({monthLabel:E,yearLabel:E,unavailableLabel:E}).optional(),states:s.object({selected:te.optional()}).strict().optional()}).strict().superRefine((e,t)=>{e.grouping&&(!e.planIds||!Sr(e.grouping,e.planIds))&&t.addIssue({code:"custom",message:"Grouped picker assignments must match its product allowlist"})}),oi=s.object({...L,type:s.literal("quantity_picker"),bind:Ce.optional(),label:E,fallback:E,internalFeatureId:s.uuid(),minimumQuantity:x(0,1e4),maximumQuantity:x(0,1e4),defaultQuantity:x(0,1e4),step:x(1,1e4)}).strict().refine(e=>e.minimumQuantity<=e.defaultQuantity&&e.defaultQuantity<=e.maximumQuantity&&(e.defaultQuantity-e.minimumQuantity)%e.step===0,"Quantity controls require a Product binding and valid bounds"),ai=s.discriminatedUnion("type",[s.object({type:s.literal("input"),label:E,keyboard:s.enum(["text","email","tel","url"]),maxLength:x(1,500)}).strict(),s.object({type:s.literal("multiselect"),label:E,min:x(0,50),max:x(1,50)}).strict(),s.object({type:s.literal("select"),label:E,defaultIndex:x(0,49),purpose:s.enum(["option","product","tier"]).optional(),pickerId:ge.optional(),selectedStyle:te.optional()}).strict(),s.object({type:s.literal("tabs"),label:E,defaultIndex:x(0,49),purpose:s.literal("tier").optional()}).strict(),s.object({type:s.literal("toggle"),label:E,defaultEnabled:s.boolean()}).strict(),s.object({type:s.literal("carousel"),label:E}).strict()]),z={...L,type:s.literal("stack"),direction:s.enum(["vertical","horizontal","overlay"]),align:s.enum(["start","center","end","stretch"]),justify:s.enum(["start","center","end","between"]),productSlot:s.object({index:x(0,19),period:s.enum(["month","year"]).optional(),requireBinding:s.boolean().optional()}).strict().optional(),interaction:ai.optional(),states:s.object({selected:te.optional()}).strict().optional(),purpose:s.literal("benefits").optional(),purchaseAction:E.optional(),buttonVariant:s.enum(["primary","secondary","link"]).optional(),bind:Ce.optional()},Nr=s.lazy(()=>s.object({...L,type:z.type,direction:z.direction,align:z.align,justify:z.justify,children:s.array(si).max(U.children),productSlot:z.productSlot,interaction:z.interaction,states:z.states,purpose:z.purpose,purchaseAction:z.purchaseAction,buttonVariant:z.buttonVariant,bind:z.bind}).strict()),si=s.lazy(()=>s.union([Nr,Kn,Zn,Wn,Jn,Xn,ei,ti,ri,ni,ii,oi,Yn])),ci=s.union([s.string().max(500),s.number().finite(),s.boolean(),s.null()]),me={id:E,event:E,properties:s.record(E,ci).refine(e=>Object.keys(e).length<=20,"\u6700\u591A 20 \u4E2A\u53C2\u6570")},ui=s.discriminatedUnion("type",[s.object({...me,type:s.literal("navigate"),close:s.literal(!1),pageId:ge}).strict(),s.object({...me,type:s.literal("event"),close:s.boolean()}).strict(),s.object({...me,type:s.literal("close"),close:s.literal(!0)}).strict(),s.object({...me,type:s.literal("open_url"),close:s.boolean(),url:wr}).strict(),s.object({...me,type:s.literal("claim_offer"),close:s.boolean(),couponId:s.uuid()}).strict()]),li=s.object({defaultLocale:ue,locales:s.record(ue,s.record(E,s.string().max(U.stringLength)))}).strict(),pi=s.enum(["popup","paywall","onboarding","page","banner"]);var di=s.discriminatedUnion("type",[s.object({type:s.literal("modal"),size:s.enum(["sm","md","lg"])}).strict(),s.object({type:s.literal("sheet"),size:s.enum(["sm","md","lg"])}).strict(),s.object({type:s.literal("fullscreen")}).strict(),s.object({type:s.literal("inline")}).strict()]),Oa={sm:360,md:420,lg:560},fi=s.object({kind:s.literal("screen"),schemaVersion:s.literal(Fn),name:s.string().trim().min(1).max(80),surface:pi,initialPageId:ge.optional(),presentation:di,theme:_r,pages:s.array(s.object({id:ge,name:s.string().trim().min(1).max(60),root:Nr,theme:_r.optional(),editorPosition:s.object({x:s.number().finite().min(-1e5).max(1e5),y:s.number().finite().min(-1e5).max(1e5)}).strict().optional()}).strict()).min(1).max(U.pages),strings:li,actions:s.array(ui).max(U.actions)}).strict();function H(e,t){for(let r of e.pages)dt(r.root,t)}var Ca=fi.superRefine((e,t)=>{let r=U;e.surface!=="paywall"&&e.pages.length!==1&&t.addIssue({code:"custom",message:"Only a Paywall can contain multiple screens"}),e.initialPageId&&!e.pages.some(d=>d.id===e.initialPageId)&&t.addIssue({code:"custom",message:"Initial screen does not exist"});for(let d of e.actions)d.type==="navigate"&&(e.surface!=="paywall"||!e.pages.some(m=>m.id===d.pageId))&&t.addIssue({code:"custom",message:"Navigation screen does not exist"});e.pages.length>r.pages&&t.addIssue({code:"custom",message:`\u9875\u9762\u6700\u591A ${r.pages} \u4E2A`}),e.actions.length>r.actions&&t.addIssue({code:"custom",message:`\u52A8\u4F5C\u6700\u591A ${r.actions} \u4E2A`});let n=d=>t.addIssue({code:"custom",message:d}),i=Object.keys(e.strings.locales);i.includes(e.strings.defaultLocale)||n("\u9ED8\u8BA4\u8BED\u8A00\u5FC5\u987B\u5728\u8BED\u8A00\u5217\u8868\u91CC"),i.length>U.locales&&n(`\u6700\u591A ${U.locales} \u79CD\u8BED\u8A00`);let a=new Set;for(let d of e.actions)a.has(d.id)&&n(`\u52A8\u4F5C\u6807\u8BC6\u91CD\u590D\uFF1A${d.id}`),a.add(d.id);let o=new Set;for(let d of e.pages)["next","back"].includes(d.id)&&n(`\u9875\u9762 id \u4E0D\u80FD\u4F7F\u7528\u4FDD\u7559\u540D\u79F0\uFF1A${d.id}`),o.has(d.id)&&n(`\u9875\u9762 id \u91CD\u590D\uFF1A${d.id}`),o.add(d.id);let c=new Set,u=0,f=!1;H(e,(d,m)=>{if(u++,m>U.depth&&(f=!0),c.has(d.id)&&n(`\u7EC4\u4EF6 id \u91CD\u590D\uFF1A${d.id}`),c.add(d.id),d.type==="button"&&!a.has(d.action)&&n(`\u6309\u94AE ${d.id} \u5F15\u7528\u7684\u52A8\u4F5C\u4E0D\u5B58\u5728\uFF1A${d.action}`),d.type==="custom_html")for(let y of Object.keys(d.html))i.includes(y)||n(`\u81EA\u5B9A\u4E49 HTML ${d.id} \u542B\u6709\u672A\u542F\u7528\u7684\u8BED\u8A00\uFF1A${y}`);if(d.type==="image")for(let y of Object.keys(d.localizedSrc??{}))i.includes(y)||n(`\u56FE\u7247 ${d.id} \u542B\u6709\u672A\u542F\u7528\u7684\u8BED\u8A00\uFF1A${y}`)}),u>r.nodes&&n(`\u7EC4\u4EF6\u6700\u591A ${r.nodes} \u4E2A`),f&&n(`\u5C42\u7EA7\u6700\u591A ${U.depth} \u5C42`)});function dt(e,t,r=1,n=null){if(t(e,r,n)!==!1&&e.type==="stack")for(let i of e.children)dt(i,t,r+1,e)}function Or(e){let t=[],r=new Set;return H(e,n=>{let i=(a,o,c)=>{r.has(a)||(r.add(a),t.push({key:a,nodeId:n.id,nodeType:n.type,field:o,required:c}))};n.type==="stack"&&n.interaction&&i(n.interaction.label,"label",!0),n.fallback&&i(n.fallback,"text",!0),n.type==="text"&&i(n.text,"text",!0),n.type==="customer_data"&&i(n.title,"title",!0),(n.type==="plan_picker"||n.type==="quantity_picker"||n.type==="coupon_code")&&i(n.label,"label",!0),n.type==="plan_picker"&&n.grouping&&(i(n.grouping.monthLabel,"label",!0),i(n.grouping.yearLabel,"label",!0),i(n.grouping.unavailableLabel,"text",!0)),n.type==="countdown"&&i(n.expired,"text",!0),n.type==="button"&&i(n.label,"label",!0),n.type==="image"&&(i(`image:${n.id}`,"src",!1),i(n.alt,"alt",!1)),n.type==="custom_html"&&i(`html:${n.id}`,"html",!0)}),t}function mi(e,t,r){if(t.field==="html"){let n;return H(e,i=>{i.id===t.nodeId&&i.type==="custom_html"&&(n=i.html[r])}),n}if(t.field==="src"){let n=ft(e,t.nodeId);return n?.type==="image"?n.localizedSrc?.[r]??(r===e.strings.defaultLocale?n.src:void 0):void 0}return e.strings.locales[r]?.[t.key]}function gi(e){let t=Or(e).filter(n=>n.required);return Object.keys(e.strings.locales).sort((n,i)=>n===e.strings.defaultLocale?-1:i===e.strings.defaultLocale?1:0).map(n=>{let i=t.filter(a=>!mi(e,a,n)?.trim()).map(a=>a.key);return{locale:n,total:t.length,filled:t.length-i.length,missing:i,complete:i.length===0}})}function hi(e){return gi(e).filter(t=>t.complete||t.locale===e.strings.defaultLocale).map(t=>t.locale)}function va(e,t){return Er(t,hi(e),e.strings.defaultLocale)}function Ta(e,t){let r=e.strings.locales[t]??{},n=e.strings.locales[e.strings.defaultLocale]??{},i={};for(let o of Or(e)){if(o.field==="html"||o.field==="src")continue;let c=r[o.key]?.trim()?r[o.key]:n[o.key];c!==void 0&&(i[o.key]=c)}let a=o=>{if(o.type==="stack")return{...o,children:o.children.map(a)};if(o.type==="custom_html"){let c=o.html[t]?.trim()?o.html[t]:o.html[e.strings.defaultLocale];return{...o,html:c===void 0?{}:{[t]:c}}}if(o.type==="image"){let{localizedSrc:c,...u}=o;return{...u,src:c?.[t]??c?.[e.strings.defaultLocale]??o.src}}return o};return{...e,pages:e.pages.map(o=>({...o,root:a(o.root)})),strings:{defaultLocale:t,locales:{[t]:i}}}}function bi(e,t){let r=null;return dt(e,n=>{if(r)return!1;n.id===t&&(r=n)}),r}function ft(e,t){for(let r of e.pages){let n=bi(r.root,t);if(n)return n}return null}function ja(e){let t=ut(e)?.split("-")[0];return t!==void 0&&["ar","he","fa","ur"].includes(t)}function Da(e,t,r){let n={};if(!t||typeof t!="object"||Array.isArray(t))return n;let i=t;if(H(e,a=>{if(a.type==="quantity_picker"){let c=i[a.id];typeof c=="number"&&Number.isSafeInteger(c)&&c>=a.minimumQuantity&&c<=a.maximumQuantity&&(c-a.minimumQuantity)%a.step===0&&(n[a.id]=c);return}if(a.type==="plan_picker"){let c=i[a.id];typeof c=="string"&&(n[a.id]=r?.pickers[a.id]?.options.includes(c)?c:"");return}if(a.type!=="stack"||!a.interaction)return;let o=Object.hasOwn(i,a.id)?i[a.id]:void 0;["select","tabs"].includes(a.interaction.type)&&typeof o=="string"&&a.children.some(c=>c.id===o)&&(n[a.id]=o),a.interaction.type==="toggle"&&typeof o=="boolean"&&(n[a.id]=o)}),e.surface==="paywall"&&typeof i.__page=="string"&&e.pages.some(a=>a.id===i.__page)&&(n.__page=i.__page),r){let a={...n};for(let[o,c]of Object.entries(i))(typeof c=="string"||typeof c=="boolean")&&(a[o]=c);Object.assign(n,br(e,a,r))}return n}import{z as N}from"zod";import{z as p}from"zod";import{z as g}from"zod";var re=R.refine(e=>/[1-9]/.test(e),"Quantity must be positive"),be=g.string().min(1).max(120),ve=g.enum(["cap","overflow"]),$=(e,t)=>{let[r,n=""]=e.split(".");if(r===void 0||r==="")throw new Error("Invalid decimal value");return BigInt(r)*10n**BigInt(t)+BigInt(n.padEnd(t,"0"))},ye=e=>{try{return e()}catch{return!1}},Fa=g.discriminatedUnion("operation",[g.object({operation:g.literal("quote"),overageBehavior:ve.optional(),internal_feature_id:g.uuid(),entityId:g.uuid().optional(),quantity:re,properties:V}).strict(),g.object({operation:g.literal("consume"),overageBehavior:ve.optional(),occurredAt:g.iso.datetime({offset:!0}).optional(),internal_feature_id:g.uuid(),entityId:g.uuid().optional(),quantity:R,properties:V,idempotencyKey:be}).strict(),g.object({operation:g.literal("reserve"),occurredAt:g.iso.datetime({offset:!0}).optional(),internal_feature_id:g.uuid(),entityId:g.uuid().optional(),quantity:re,properties:V,idempotencyKey:be,expiresInSeconds:g.number().int().min(1).max(86400)}).strict(),g.object({operation:g.literal("confirm"),operationId:g.uuid(),quantity:re,properties:V.optional(),idempotencyKey:be}).strict(),g.object({operation:g.literal("refund"),operationId:g.uuid(),quantity:re,idempotencyKey:be}).strict(),g.object({operation:g.literal("release"),operationId:g.uuid(),idempotencyKey:be}).strict()]),yi=g.object({internal_credit_feature_id:g.uuid().nullable(),internal_metered_feature_id:g.uuid(),dimension:g.string().min(1).max(64),counterKey:g.string().min(1).max(240),cycleStart:g.iso.datetime({offset:!0}),unitCost:R,units:re,amount:Oe,tier:g.number().int().min(1).max(12).nullable()}).strict(),xe=g.string().regex(/^(0|[1-9]\d{0,17})(\.\d{1,12})?$/);function Cr(e,t){let r=e.reduce((n,i)=>n+$(i.units,12),0n)-$(t,12);return e.some(n=>n.funding==="balance")?r>=-100n&&r<=100n:r===0n}var vr=g.discriminatedUnion("funding",[g.strictObject({funding:g.literal("balance"),sourceId:g.uuid(),rolloverId:g.uuid().nullable(),units:xe.refine(e=>/[1-9]/.test(e)),amount:Oe}),g.strictObject({funding:g.literal("unbilled"),units:xe.refine(e=>/[1-9]/.test(e))}),g.object({funding:g.literal("prepaid"),sourceId:g.uuid(),units:re,amount:Oe,pricing:g.array(yi).min(1).max(12)}).strict().refine(e=>ye(()=>e.pricing.reduce((t,r)=>t+$(r.units,6),0n)===$(e.units,6)&&e.pricing.reduce((t,r)=>t+$(r.amount,12),0n)===$(e.amount,12)&&e.pricing.every(t=>$(t.unitCost,6)*$(t.units,6)===$(t.amount,12))),"Frozen pricing must conserve allocated units and amounts"),g.object({funding:g.literal("postpaid"),invoiceLineId:g.uuid().nullable(),units:re,authorizationId:g.uuid()}).strict()]),Te=g.enum(["unavailable","insufficient_balance","limit_exceeded","awaiting_topup","authorization_required","payment_blocked","cash_budget_exceeded"]),Ba=g.object({allowed:g.boolean(),internal_feature_id:g.uuid(),quantity:R,requestedQuantity:R.optional(),overageBehavior:ve.optional(),reason:Te.nullable(),allocations:g.array(vr).max(500)}).strict().refine(e=>ye(()=>e.allowed?e.reason===null&&Cr(e.allocations,e.quantity):e.reason!==null&&e.allocations.length===0),"A quote must conserve its accepted units").refine(e=>ye(()=>e.overageBehavior===void 0?e.requestedQuantity===void 0&&/[1-9]/.test(e.quantity):e.requestedQuantity!==void 0&&$(e.requestedQuantity,6)>=$(e.quantity,6)&&(e.overageBehavior==="cap"||e.requestedQuantity===e.quantity)),"Explicit overage behavior must retain the requested quantity"),Va=g.object({id:g.uuid(),internal_feature_id:g.uuid(),kind:g.enum(["consume","reserve","confirm","refund","release","expire"]),originalId:g.uuid().nullable(),quantity:R,requestedQuantity:R.optional(),overageBehavior:ve.optional(),accepted:g.boolean(),reason:g.enum([...Te.options,"expired"]).nullable(),createdAt:g.iso.datetime({offset:!0}),reservationStatus:g.enum(["pending","confirmed","released","expired"]).nullable(),expiresAt:g.iso.datetime({offset:!0}).nullable(),allocations:g.array(vr).max(500)}).strict().refine(e=>ye(()=>e.accepted?e.reason===null&&Cr(e.allocations,e.quantity):e.reason!==null&&e.allocations.length===0),"An operation must conserve its requested units").refine(e=>ye(()=>e.overageBehavior===void 0?e.requestedQuantity===void 0:e.kind==="consume"&&e.requestedQuantity!==void 0&&$(e.requestedQuantity,6)>=$(e.quantity,6)&&(e.overageBehavior==="cap"||e.requestedQuantity===e.quantity)),"Overage metadata belongs to consumption and preserves requested units").refine(e=>/[1-9]/.test(e.quantity)||e.kind==="consume","Only consumption can record a zero cost event").refine(e=>e.allocations.every(t=>t.funding!=="postpaid"||t.invoiceLineId!==null),"Accepted operations must reference persisted invoice lines").refine(e=>e.originalId!==null===["confirm","refund","release","expire"].includes(e.kind)&&e.expiresAt!==null==(e.reservationStatus!==null)&&(e.kind!=="reserve"||!e.accepted||e.reservationStatus!==null),"Operation provenance and reservation state must be explicit");import{z as M}from"zod";var xi=M.string().max(40).regex(/^(0|[1-9]\d*)(\.\d{1,12})?$/),Si=M.string().max(41).regex(/^-?(0|[1-9]\d*)(\.\d{1,12})?$/),Tr=M.strictObject({internal_feature_id:M.uuid(),entityId:M.uuid().nullable()}),qa=Tr.extend({quantity:R,expectedRevision:M.number().int().min(0).max(Number.MAX_SAFE_INTEGER),idempotencyKey:M.string().min(1).max(120),properties:V.refine(e=>Object.keys(e).length<=13&&!Object.keys(e).some(t=>t.startsWith("usage_")),"Usage accounting reserves three properties")}).strict(),jr=Tr.extend({operationId:M.uuid().nullable(),usage:R,capacity:xi.nullable(),remaining:Si.nullable(),withinLimit:M.boolean(),revision:M.number().int().min(0).max(Number.MAX_SAFE_INTEGER),updatedAt:M.iso.datetime({offset:!0}).nullable()}).strict().superRefine((e,t)=>{let r=n=>{let i=n.startsWith("-"),[a,o=""]=(i?n.slice(1):n).split(".");if(a===void 0||a==="")throw new Error("Invalid decimal value");return(i?-1n:1n)*(BigInt(a)*10n**12n+BigInt(o.padEnd(12,"0")))};(e.capacity===null!=(e.remaining===null)||(e.capacity===null?!e.withinLimit:e.remaining===null||r(e.remaining)!==r(e.capacity)-r(e.usage)||e.withinLimit!==r(e.remaining)>=0n)||e.revision===0!=(e.operationId===null)||e.operationId===null!=(e.updatedAt===null))&&t.addIssue({code:"custom",message:"Absolute usage must conserve capacity and its immutable revision"})});var G=p.string().regex(/^(0|[1-9]\d{0,17})(\.\d{1,12})?$/),q=p.iso.datetime({offset:!0}),Ai=p.enum(["access","metered","credit"]),Se={internal_feature_id:p.uuid(),key:ee,name:p.string().min(1).max(120),kind:Ai},Ja=p.object({customerId:p.uuid(),snapshotAt:q,memberships:p.array(p.object({id:p.uuid(),productId:p.string().min(1).max(255),productVersionId:p.uuid(),billingProductVersionId:p.uuid(),version:p.number().int().positive(),key:p.string().min(1).max(64),name:p.string().min(1).max(120),groupId:p.string().max(255).nullable(),membershipType:p.enum(["main","addon"]),status:p.enum(["trial","active","past_due","ended","expired","trialing","paused","pending","scheduled","unknown"]),cancelAtPeriodEnd:p.boolean(),accessEnabled:p.boolean(),renewalChange:p.object({productVersionId:p.uuid(),name:p.string().min(1).max(120),version:p.number().int().positive(),effectiveAt:q,benefitsAppliedAt:q.nullable(),timing:p.enum(["immediate","renewal"]),changeKind:p.enum(["plan","seats","quantity"]),feature:p.strictObject({internal_feature_id:p.uuid(),name:p.string().min(1).max(80),fromQuantity:p.number().int().min(0).max(1e4),toQuantity:p.number().int().min(0).max(1e4)}).optional(),seat:p.object({key:p.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/),fromQuantity:p.number().int().min(0).max(1e4),toQuantity:p.number().int().min(0).max(1e4)}).strict().nullable(),status:p.enum(["prepared","quoted","confirmed","pending","scheduled"])}).strict().refine(e=>e.changeKind==="seats"==(e.seat!==null)&&e.changeKind==="quantity"==(e.feature!==void 0),"Quantity changes require their fixed component identities and quantities").nullable(),period:p.object({phase:p.enum(["paid","trial"]),startsAt:q,endsAt:q.nullable()}).strict().nullable()}).strict()).max(100),membershipsLimited:p.boolean(),balances:p.array(p.object({...Se,usageType:p.enum(["consumable","non_consumable"]).nullable(),accessible:p.boolean(),unlimited:p.boolean(),available:G,held:G,debt:G,nextExpiresAt:q.nullable(),usage:jr.nullable()}).strict().refine(e=>e.kind==="metered"==(e.usageType!==null)&&(e.accessible||e.available==="0"&&e.held==="0")&&(e.usageType==="non_consumable"?e.usage!==null&&e.usage.internal_feature_id===e.internal_feature_id&&e.unlimited===(e.usage.capacity===null)&&e.available===(e.usage.remaining===null||e.usage.remaining.startsWith("-")?"0":e.usage.remaining)&&e.held==="0"&&e.debt==="0":e.usage===null),"Balances must expose their actual spendable or non-consumable state")).max(500),balancesLimited:p.boolean()}).strict(),Dr=p.enum(["source","usage","transaction","invoice","debt","settlement"]),je=p.object({at:q,id:p.uuid(),type:Dr}).strict(),Ya=p.object({type:Dr.nullable(),resourceKey:ee.optional(),kind:p.enum(["purchase","refund"]).optional(),topup:p.boolean().optional(),from:p.iso.date().nullable(),to:p.iso.date().nullable(),after:je.nullable(),limit:p.number().int().min(1).max(50)}).strict().refine(e=>!e.from||!e.to||e.from<=e.to,"Date range is reversed"),le={id:p.uuid(),occurredAt:q},ki=p.discriminatedUnion("type",[p.strictObject({...le,type:p.literal("invoice"),status:p.string().min(1).max(80),paid:G,refunded:G,currency:j,externalId:p.string().nullable()}),p.object({...le,...Se,type:p.literal("source"),reason:p.enum(["membership","trial","topup","manual","rollover","upgrade_carry","seat"]),quantity:G,unlimited:p.boolean(),status:p.enum(["scheduled","active","expired","revoked","unavailable"]),startsAt:q,expiresAt:q.nullable(),orderId:p.uuid().nullable(),parentSourceId:p.uuid().nullable()}).strict(),p.object({...le,type:p.literal("usage"),internal_feature_id:p.uuid(),name:p.string().min(1).max(120),kind:p.enum(["consume","set_usage","reserve","confirm","refund","release","expire"]),originalId:p.uuid().nullable(),quantity:R,accepted:p.boolean(),reason:p.enum([...Te.options,"expired"]).nullable(),properties:V,reservationStatus:p.enum(["pending","confirmed","released","expired"]).nullable(),expiresAt:q.nullable(),charges:p.array(p.discriminatedUnion("funding",[p.strictObject({funding:p.literal("balance"),sourceId:p.uuid(),rolloverId:p.uuid().nullable(),units:xe,amount:G}),p.strictObject({funding:p.literal("unbilled"),units:xe}),p.object({...Se,funding:p.literal("prepaid"),amount:G}).strict(),p.object({funding:p.literal("postpaid"),invoiceId:p.uuid(),invoiceLineId:p.uuid(),authorizationId:p.uuid(),units:R,currency:j}).strict()])).max(500)}).strict().refine(e=>(e.kind==="set_usage"||e.kind==="consume"&&e.quantity==="0"?e.accepted&&e.reason===null&&e.charges.length===0&&e.reservationStatus===null:e.accepted?e.reason===null&&e.charges.length>0:e.reason!==null&&e.charges.length===0)&&e.originalId!==null===["confirm","refund","release","expire"].includes(e.kind)&&e.expiresAt!==null==(e.reservationStatus!==null),"Usage facts must retain their original outcome and receipt"),p.object({...le,type:p.literal("transaction"),purpose:p.enum(["product","invoice"]),productVersionId:p.uuid().nullable(),productName:p.string().min(1).max(120).nullable(),productVersion:p.number().int().positive().nullable(),invoiceId:p.uuid().nullable(),orderId:p.uuid(),originalId:p.uuid().nullable(),kind:p.enum(["purchase","refund"]),amountMinor:p.number().int().nonnegative().max(2e8).nullable(),currency:j.nullable()}).strict().refine(e=>e.currency===null==(e.amountMinor===null)&&(e.purpose==="product"?e.productVersionId!==null&&e.productName!==null&&e.productVersion!==null&&e.invoiceId===null:e.productVersionId===null&&e.productName===null&&e.productVersion===null&&e.invoiceId!==null)&&e.kind==="refund"==(e.originalId!==null)&&(e.kind!=="refund"||e.amountMinor===null||e.amountMinor>0),"Payment fact provenance is incomplete"),p.object({...le,...Se,type:p.literal("debt"),sourceId:p.uuid(),transactionId:p.uuid(),amount:G}).strict(),p.object({...le,...Se,type:p.literal("settlement"),sourceId:p.uuid(),debtId:p.uuid(),kind:p.enum(["payment","usage_refund","payment_return"]),amount:G}).strict()]),Xa=p.object({customerId:p.uuid(),rows:p.array(ki).max(50),nextCursor:je.nullable()}).strict().refine(e=>new Set(e.rows.map(t=>t.type+t.id)).size===e.rows.length,"A page cannot repeat a fact").refine(e=>{let t=e.rows.at(-1);return!e.nextCursor||!!(t&&t.id===e.nextCursor.id&&t.type===e.nextCursor.type&&t.occurredAt===e.nextCursor.at)},"Cursor must name the final displayed fact");var is=N.discriminatedUnion("kind",[N.object({kind:N.literal("ledger"),cursor:je}).strict(),N.object({kind:N.literal("billing"),cursor:N.uuid()}).strict()]),Ei=N.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/),_i=N.record(N.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/),N.union([N.string().max(500),N.boolean(),N.array(N.string().max(500)).max(50)])).refine(e=>Object.keys(e).length<=40,"Too many answers"),Ii=/^(?:api_?key|authorization|password|(?:customer|run|visitor|access|purchase)_?token|client_?secret|signed_?transaction|raw_?proof)$/i;function mt(e,t=0){return t>20?!0:!!e&&typeof e=="object"&&(Array.isArray(e)?e.some(r=>mt(r,t+1)):Object.entries(e).some(([r,n])=>["__proto__","constructor","prototype"].includes(r)||Ii.test(r)||mt(n,t+1)))}var wi=/gg_(?:sk|ct|fr|fv|gc)_[A-Za-z0-9_-]{20,}/,os=N.record(Ei,J).refine(e=>Object.keys(e).length<=20,"Too many parameters").refine(e=>!mt(e)&&!wi.test(JSON.stringify(e)),"Credentials cannot be screen parameters");var Lr=N.string().regex(/^[a-zA-Z][a-zA-Z0-9_.-]{0,63}$/),Ri=N.array(N.object({variable:Lr,componentId:Lr,required:N.boolean()}).strict()).max(40).refine(e=>new Set(e.map(t=>t.variable)).size===e.length&&new Set(e.map(t=>t.componentId)).size===e.length,"Input bindings must be unique"),as=N.object({bindings:Ri,answers:_i,values:N.record(N.string(),J).optional()}).strict();function Pr(e,t,r=1){if(e==="free")return"";if(e==="one_time")return t.startsWith("zh")?" \xB7 \u4E00\u6B21\u4ED8\u6B3E":" \xB7 one-time";let n=t.split("-")[0]??"en",i={zh:["/\u6708","/\u5E74"],en:["/month","/year"],ja:["/\u6708","/\u5E74"],ko:["/\uC6D4","/\uB144"],es:["/mes","/a\xF1o"],fr:["/mois","/an"],de:["/Monat","/Jahr"],pt:["/m\xEAs","/ano"],it:["/mese","/anno"],ar:["/\u0634\u0647\u0631","/\u0633\u0646\u0629"]},a={zh:"\u5468",en:"week",ja:"\u9031",ko:"\uC8FC",es:"semana",fr:"semaine",de:"Woche",pt:"semana",it:"settimana",ar:"\u0623\u0633\u0628\u0648\u0639"},o=e==="week"?`/${a[n]??a.en}`:(i[n]??i.en)[e==="month"?0:1];return r===1?o:`/${r} ${o.slice(1)}${n==="en"?"s":""}`}function ms(e,t){let r=[],n={};H(e,i=>{if(i.hidden)return!1;if(i.type!=="quantity_picker")return;let a=i.bind?.plan?[i.bind.plan]:[];i.bind?.picker&&H(e,o=>{if(o.type==="plan_picker"&&o.id===i.bind?.picker&&a.push(...o.planIds??[]),o.type==="stack"&&o.interaction?.type==="select"&&o.interaction.pickerId===i.bind?.picker)for(let c of o.children)c.type==="stack"&&c.bind?.plan&&a.push(c.bind.plan)}),a.length||r.push(`Quantity control ${i.id} needs a Product binding`);for(let o of new Set(a)){let c=t[o]?.prepaid?.find(f=>f.internalFeatureId===i.internalFeatureId)?.terms,u=n[o]??=new Set;(!c||u.has(i.internalFeatureId)||i.minimumQuantity<c.minimumQuantity||i.maximumQuantity>c.maximumQuantity)&&r.push(`Quantity control ${i.id} must match its Product's prepaid Feature and bounds`),u.add(i.internalFeatureId)}});for(let[i,a]of Object.entries(t))for(let o of a.prepaid??[])n[i]?.has(o.internalFeatureId)||r.push(`Product ${i} needs a quantity control for ${o.internalFeatureId}`);return r}function gs(e,t,r,n){let i=n.plans[t];if(!i?.available)throw new Error("Selected Product is unavailable");let a={};if(H(e,o=>{if(o.hidden)return!1;if(o.type!=="quantity_picker"||o.hidden||(o.bind?.plan??(o.bind?.picker?r[o.bind.picker]:void 0))!==t)return;let u=i.prepaid?.find(d=>d.internalFeatureId===o.internalFeatureId)?.terms,f=r[o.id];if(!u||typeof f!="number"||!Number.isSafeInteger(f)||f<Math.max(u.minimumQuantity,o.minimumQuantity)||f>Math.min(u.maximumQuantity,o.maximumQuantity)||(f-o.minimumQuantity)%o.step!==0||a[o.internalFeatureId]!==void 0)throw new Error("Choose a valid quantity for each prepaid Feature");a[o.internalFeatureId]=f}),(i.prepaid??[]).some(o=>a[o.internalFeatureId]===void 0))throw new Error("Choose a quantity for each prepaid Feature");return a}function Ni(e,t,r){let n=e.terms.prices.find(i=>i.currency===t);if(!n||r<e.terms.minimumQuantity||r>e.terms.maximumQuantity)throw new Error("Quantity or currency is unavailable");return{amountMinor:ar({quantity:r,unitAmountMinor:n.amountMinor,...n.pricing?{pricing:n.pricing}:{}}),allowance:ur(e.includedAmount,e.terms.units,r)}}function hs(e,t,r,n){let i=!1;if(H(e,c=>{c.type==="quantity_picker"&&(i=!0)}),!i)return t;let a=structuredClone(t);a.quantities={};let o=new Map;H(e,c=>{if(c.hidden)return!1;if(c.type!=="quantity_picker")return;let u=c.bind?.plan??(c.bind?.picker?r[c.bind.picker]??a.pickers[c.bind.picker]?.selected:void 0),f=typeof u=="string"?a.plans[u]:void 0,d=f?.prepaid?.find(Y=>Y.internalFeatureId===c.internalFeatureId),m=Math.max(c.minimumQuantity,d?.terms.minimumQuantity??0),y=Math.min(c.maximumQuantity,d?.terms.maximumQuantity??0),S=r[c.id]??c.defaultQuantity,_=typeof S=="number"&&Number.isSafeInteger(S)?S:c.defaultQuantity,A=!!d&&!!f?.available&&_>=m&&_<=y&&(_-c.minimumQuantity)%c.step===0,T=a.quantities[c.id]={minimum:m,maximum:Math.max(m,y),step:c.step,value:_,label:"",available:A};if(!A||!d||!f?.currency||f.amountMinor===void 0)return;let P=Ni(d,f.currency,_);T.label=`${new Intl.NumberFormat(n).format(Number(P.allowance))} ${d.name}${["week","month","year"].includes(d.reset)?Pr(d.reset,n,d.resetCount):d.reset==="lifetime"?"":` / ${d.resetCount} ${d.reset}`}`,o.set(String(u),(o.get(String(u))??f.amountMinor)+P.amountMinor)});for(let[c,u]of o){let f=a.plans[c];if(!f?.currency)continue;let d=Pe(u,f.currency,n);f.price=d;for(let[m,y]of Object.entries(a.nodes)){let S=ft(e,m),_=A=>{if(A.price&&(A.price={...A.price,current:d,original:null}),S?.type==="text"){let T=e.strings.locales[n]?.[S.text]??e.strings.locales[e.strings.defaultLocale]?.[S.text];T?.includes("{{plan.price")&&(A.text=T.replace(/\{\{\s*plan.price\s*\}\}/g,d).replace(/\{\{\s*plan.price_per_month\s*\}\}/g,Pe(Math.round(u/((f.interval==="year"?12:1)*(f.intervalCount??1))),f.currency,n)))}};y.byPlan?.[c]&&_(y.byPlan[c]),(y.base.planVersionId===c||S&&"bind"in S&&S.bind?.plan===c)&&_(y.base)}}return a}import{z as C}from"zod";var De=C.enum(["INVALID_PROTOCOL_VERSION","UNSUPPORTED_PROTOCOL_VERSION","PROTOCOL_RETIRED","UNAUTHENTICATED","FORBIDDEN","SCOPE_MISMATCH","INVALID_REQUEST","NOT_FOUND","CONFLICT","PAYLOAD_TOO_LARGE","RATE_LIMITED","SERVICE_UNAVAILABLE","NOT_CONFIGURED","CAPABILITY_UNAVAILABLE","INTERNAL_ERROR"]),Ss=C.enum([...De.options,"INVALID_SERVER_RESPONSE","RESPONSE_TOO_LARGE","AMBIGUOUS_AUTHENTICATION","BROWSER_REQUIRED","INVALID_REDIRECT_URI","AUTHORIZATION_UNAVAILABLE","UNREGISTERED_CLIENT","MANAGEMENT_OPERATION_FAILED"]),As=C.enum([...De.options,"stale_revision"]),Oi=C.enum(["fix_request","authenticate","check_permissions","check_scope","resolve_conflict","reload_state","retry_same_request","configure_integration","check_availability","upgrade_sdk","recover_operation","contact_support"]),Ci=C.enum(["CAPABILITY_NOT_ENABLED","INTEGRATION_MISSING","PROVIDER_CREDENTIAL_REJECTED","PRICE_BINDING_REQUIRED","IDEMPOTENCY_CONFLICT","RESULT_UNKNOWN","STATE_CHANGED","IDENTITY_CONTEXT_CHANGED","CUSTOMER_BINDING_CONFLICT","RUN_CONTRACT_MISMATCH","OPERATION_IN_PROGRESS","FUNNEL_VERSION_RETIRED"]),Fr={INVALID_PROTOCOL_VERSION:{status:400,recovery:"fix_request"},UNSUPPORTED_PROTOCOL_VERSION:{status:400,recovery:"upgrade_sdk"},PROTOCOL_RETIRED:{status:410,recovery:"upgrade_sdk"},UNAUTHENTICATED:{status:401,recovery:"authenticate"},FORBIDDEN:{status:403,recovery:"check_permissions"},SCOPE_MISMATCH:{status:403,recovery:"check_scope"},INVALID_REQUEST:{status:400,recovery:"fix_request"},NOT_FOUND:{status:404,recovery:"fix_request"},CONFLICT:{status:409,recovery:"resolve_conflict"},PAYLOAD_TOO_LARGE:{status:413,recovery:"fix_request"},RATE_LIMITED:{status:429,recovery:"retry_same_request"},SERVICE_UNAVAILABLE:{status:503,recovery:"retry_same_request"},NOT_CONFIGURED:{status:501,recovery:"configure_integration"},CAPABILITY_UNAVAILABLE:{status:501,recovery:"check_availability"},INTERNAL_ERROR:{status:500,recovery:"recover_operation"}};var $r={TIMEOUT:"recover_operation",NETWORK_ERROR:"recover_operation",HTTP_ERROR:"recover_operation",INVALID_RESPONSE:"recover_operation",NOT_IDENTIFIED:"authenticate",INVALID_TOKEN:"authenticate",INVALID_URL:"fix_request",INVALID_TIMEOUT:"fix_request",SERVER_ONLY:"fix_request",PROTOCOL_MISMATCH:"upgrade_sdk",IDENTITY_CHANGED:"reload_state",INVALID_STATE:"reload_state",EVENT_QUEUE_FULL:"retry_same_request",COMMAND_PENDING:"recover_operation",DECISION_PENDING:"recover_operation",DECISION_ACCEPTANCE_UNKNOWN:"recover_operation",RUN_RECONCILIATION_REQUIRED:"recover_operation",DECISION_FAILED:"contact_support",COMMAND_STORAGE_CONFLICT:"resolve_conflict",COMMAND_STORAGE_INVALID:"fix_request",CONFIGURATION_UNAVAILABLE:"check_availability",CONFIGURATION_EXPIRED:"reload_state",CONFIGURATION_CHANGED:"reload_state",CONFIGURATION_DISPOSED:"reload_state",UNSUPPORTED_SCHEMA:"upgrade_sdk",FUNNEL_STOPPED:"check_availability",PAYWALL_UNAVAILABLE:"check_availability",EVALUATION_MODE:"reload_state",SERVER_REQUIRED:"fix_request",STICKY_SAVE_FAILED:"retry_same_request",TRANSITION_LIMIT:"resolve_conflict",PRECONDITION_FAILED:"reload_state",PRODUCT_UNAVAILABLE:"fix_request",PURCHASE_HANDLER_REQUIRED:"fix_request",EVENT_HANDLER_REQUIRED:"fix_request",CLOSED:"fix_request",BRIDGE_UNAVAILABLE:"check_availability",INVALID_CONFIGURATION:"fix_request",NATIVE_OPERATION_FAILED:"contact_support",AI_PRICE_UNAVAILABLE:"fix_request",AI_USAGE_UNAVAILABLE:"recover_operation",AI_PROVIDER_ERROR:"check_availability",AI_BALANCE_REJECTED:"resolve_conflict"};function vi(e,t){if(e==="CONFLICT"&&t===425)return{retryable:!0,recovery:"retry_same_request"};if(e==="CONFLICT"&&t===412)return{retryable:!1,recovery:"reload_state"};if(e==="INVALID_SERVER_RESPONSE")return{retryable:!1,recovery:"recover_operation"};if(e==="AMBIGUOUS_AUTHENTICATION")return{retryable:!1,recovery:"fix_request"};if(Object.hasOwn($r,e)){let n=$r[e];return{retryable:n==="retry_same_request",recovery:n}}let r=De.safeParse(e);return r.success?{retryable:e==="RATE_LIMITED"||e==="SERVICE_UNAVAILABLE",recovery:Fr[r.data].recovery}:{retryable:!1,recovery:"contact_support"}}function ks(e,t){let r=De.safeParse(e);if(r.success)return e==="CONFLICT"?[409,412,425].includes(t):e==="SERVICE_UNAVAILABLE"?[408,502,503,504].includes(t):e==="INVALID_REQUEST"?[400,405,415,422].includes(t):e==="NOT_CONFIGURED"?[501,503].includes(t):Fr[r.data].status===t;let n={INVALID_SERVER_RESPONSE:[502],RESPONSE_TOO_LARGE:[502],AMBIGUOUS_AUTHENTICATION:[400],BROWSER_REQUIRED:[403],INVALID_REDIRECT_URI:[403],AUTHORIZATION_UNAVAILABLE:[400],UNREGISTERED_CLIENT:[403],MANAGEMENT_OPERATION_FAILED:[400,422,500]};return Object.hasOwn(n,e)&&(n[e]?.includes(t)??!1)}function Ti(e,t=Date.now()){if(e===null)return;let r=e.trim();if(/^\d+$/.test(r)){let i=Number(r);return Number.isSafeInteger(i)?i:void 0}if(!/^[A-Za-z]{3}, \d{2} [A-Za-z]{3} \d{4} \d{2}:\d{2}:\d{2} GMT$/.test(r))return;let n=Date.parse(r);return Number.isFinite(n)?Math.max(0,Math.ceil((n-t)/1e3)):void 0}var Br=C.object({retryable:C.boolean(),recovery:Oi,reason:Ci.optional(),retryAfterSeconds:C.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional()}),ji=C.object({requestId:C.uuid().optional(),error:C.object({code:C.string().regex(/^[A-Z][A-Z0-9_]{0,95}$/),message:C.string(),...Br.partial().shape})}),Es=C.object({error:ji.shape.error.extend({requestId:C.uuid().optional()})}),_s=C.object({error:C.string(),code:C.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,95}$/),requestId:C.uuid(),...Br.shape});function Is(e,t,r={}){let n=vi(e,t),i=r.reason==="RESULT_UNKNOWN"?"recover_operation":r.recovery??n.recovery,a=n.retryable&&r.retryable!==!1&&i!=="recover_operation",o=a?Ti(r.retryAfter??null):void 0;return{...n,retryable:a,recovery:i,...o===void 0?{}:{retryAfterSeconds:o},...r.reason?{reason:r.reason}:{}}}export{De as a,Oi as b,Ci as c,ks as d,ji as e,Is as f,j as g,Ur as h,Pe as i,Oe as j,R as k,_n as l,V as m,ot as n,ar as o,cr as p,ur as q,ne as r,Ue as s,kt as t,Nt as u,$t as v,B as w,Mt as x,qt as y,Zt as z,J as A,rt as B,Ne as C,mn as D,En as E,ue as F,ut as G,Fa as H,yi as I,xe as J,Ba as K,Va as L,Tr as M,qa as N,jr as O,G as P,Ja as Q,Ya as R,Xa as S,st as T,To as U,rr as V,nr as W,qo as X,Cn as Y,ir as Z,lr as _,sa as $,pr as aa,ca as ba,hr as ca,xr as da,Sr as ea,da as fa,fa as ga,xa as ha,U as ia,E as ja,Oa as ka,H as la,Ca as ma,dt as na,Or as oa,gi as pa,va as qa,Ta as ra,ft as sa,ja as ta,Da as ua,is as va,_i as wa,os as xa,Ri as ya,as as za,Pr as Aa,ms as Ba,gs as Ca,hs as Da};
@@ -0,0 +1 @@
1
+ import{a as o}from"./chunk-OZZMZH7X.js";function s(r,n){let i=structuredClone(r);for(let[a,e]of Object.entries(i.plans)){let t=n.plans[a];!t||t.versionId!==e.versionId||(t.amountMinor!==void 0&&(e.amountMinor=t.amountMinor),t.interval!==void 0&&(e.interval=t.interval),t.intervalCount!==void 0&&(e.intervalCount=t.intervalCount),t.prepaid!==void 0&&(e.prepaid=structuredClone(t.prepaid)))}return i}function c(r,n){let i=a=>"document"in a?a.offering.id:a.content.offeringVersionId;return r.id===n.id&&i(r)===i(n)&&r.content?.artifact.sha256===n.content?.artifact.sha256}function l(r,n,i){if(r.operationId!==n.operationId||n.currency!==void 0&&r.currency!==n.currency)throw new o("INVALID_RESPONSE",i)}function p(r,n,i){let a=Object.fromEntries((r.lines[0]?.prepaid??[]).map(e=>[e.internal_feature_id,e.quantity]));if(n.featureQuantities&&(Object.keys(a).length!==Object.keys(n.featureQuantities).length||Object.entries(n.featureQuantities).some(([e,t])=>a[e]!==t)))throw new o("INVALID_RESPONSE","The purchase quote changed its selected quantities");if(r.lines.length!==1||r.lines[0].productVersionId!==n.productVersionId||n.currency!==void 0&&r.currency!==n.currency||n.provider!==void 0&&r.provider!==n.provider&&!(n.provider==="stripe"&&r.provider==="merchant"&&r.execution?.provider==="merchant"))throw new o("INVALID_RESPONSE",i)}function f(r,n,i=!1){return!r||r.operationId!==n?.operationId?n:r.status==="complete"&&n.status!=="complete"||r.status!=="pending"&&(n.status==="pending"||i&&n.status!=="complete")?r:n}export{s as a,c as b,l as c,p as d,f as e};
@@ -0,0 +1 @@
1
+ import{a as u}from"./chunk-OZZMZH7X.js";import{pa as E,qa as M,ra as j,sa as O,ta as T}from"./chunk-7DUOIHRD.js";import{k as w}from"./chunk-VSJOHWDL.js";import{z as t}from"zod";var _=E,V=t.string().regex(/^(0|[1-9]\d{0,5})(\.\d{1,12})?$/),C=t.strictObject(Object.fromEntries(_.map(i=>[i,t.number().int().nonnegative().max(1e9)]))),L=M,D=j,q=t.strictObject({modelId:L,source:t.enum(["models.dev","custom"]),fetchedAt:t.iso.datetime(),rates:O,contextTier:t.number().int().nonnegative(),markupPercent:D}),U=t.strictObject({pricing:q,tokens:C,quantity:w,digest:t.string().regex(/^[a-f0-9]{64}$/)}),z=i=>{let[s,o=""]=i.split(".");return BigInt(s)*10n**12n+BigInt(o.padEnd(12,"0"))};function $(i){if(typeof i!="number"||!Number.isFinite(i)||i<0)throw new u("AI_PRICE_UNAVAILABLE","A published token price is missing");let s=String(i),o=s.includes("e")?i.toFixed(12).replace(/0+$/,"").replace(/\.$/,""):s;if(Number(o)!==i||!V.safeParse(o).success)throw new u("AI_PRICE_UNAVAILABLE","Published price exceeds the supported precision");return o}var R=t.strictObject({input:t.number().nonnegative(),output:t.number().nonnegative(),cache_read:t.number().nonnegative().optional(),cache_write:t.number().nonnegative().optional(),reasoning:t.number().nonnegative().optional(),input_audio:t.number().nonnegative().optional(),output_audio:t.number().nonnegative().optional()}),F=R.extend({context_over_200k:t.unknown().optional(),tiers:t.array(R.extend({tier:t.strictObject({type:t.literal("context"),size:t.number().int().nonnegative()})})).max(20).refine(i=>new Set(i.map(s=>s.tier.size)).size===i.length).optional()});async function N(i,s,o){let d=new TextEncoder().encode(JSON.stringify({pricing:i,tokens:s,quantity:o}));return[...new Uint8Array(await crypto.subtle.digest("SHA-256",d))].map(m=>m.toString(16).padStart(2,"0")).join("")}function B(i,s){let o=0n;for(let c of _){if(!s[c])continue;let f=i.rates[c];if(f===void 0)throw new u("AI_PRICE_UNAVAILABLE",`No published price for ${c}; report exclusive token pools`);o+=z(f)*BigInt(s[c])}let[d,m="0"]=String(i.markupPercent).split("e"),r=(d.split(".")[1]?.length??0)-Number(m),e=10n**BigInt(Math.max(r,0)),n=BigInt(d.replace(".",""))*10n**BigInt(Math.max(-r,0)),g=100n*e+n,l=100n*e*1000000n,a=(o*g+l-1n)/l;return w.parse(`${a/1000000n}.${(a%1000000n).toString().padStart(6,"0")}`)}function K(i={}){if(typeof window<"u")throw new u("SERVER_ONLY","AI token pricing belongs on your backend");let s=T.parse({defaultMarkup:i.defaultMarkup??0,providerMarkups:i.providerMarkups??{},modelMarkups:i.modelMarkups??{},customModels:i.customModels??{}}),o=null,d=0;async function m(){if(!o||Date.now()>=d){d=Date.now()+15*6e4;let r=(async()=>{let e=await(i.fetch??fetch)("https://models.dev/api.json",{signal:AbortSignal.timeout(3e4)});if(!e.ok)throw new u("AI_PRICE_UNAVAILABLE","Models.dev pricing is unavailable");return{data:t.record(t.string(),t.object({models:t.record(t.string(),t.unknown())})).parse(await e.json()),fetchedAt:new Date().toISOString()}})().catch(e=>{throw o===r&&(o=null),e});o=r}return o}return{refreshPrices(){o=null,d=0},async quoteTokens(r){let e=L.parse(r.modelId),n=C.parse(r.tokens),[g,...l]=e.split("/"),a=s.customModels[e],c,f,p,y=0;if(a?.input!==void 0&&a.output!==void 0&&_.every(A=>n[A]===0||a[A]!==void 0))c={...a,input:a.input,output:a.output},f="custom",p=new Date().toISOString();else{let A=await m(),x=A.data[g]?.models[l.join("/")];if(!x)throw new u("AI_PRICE_UNAVAILABLE","Unknown model; configure a complete custom price");let{cost:I}=t.object({cost:F}).parse(x),P=n.input+n.cache_read+n.cache_write+n.input_audio;if(I.tiers===void 0&&I.context_over_200k!==void 0&&P>2e5)throw new u("AI_PRICE_UNAVAILABLE","A current context tier is required for this model");let b=I.tiers?.filter(k=>P>k.tier.size).sort((k,Q)=>Q.tier.size-k.tier.size)[0],v=b??I;b&&(y=b.tier.size),c=Object.fromEntries(_.filter(k=>v[k]!==void 0).map(k=>[k,$(v[k])])),c={...c,...a},f=a?"custom":"models.dev",p=A.fetchedAt}let h=q.parse({modelId:e,source:f,fetchedAt:p,rates:c,contextTier:y,markupPercent:s.modelMarkups[e]??s.providerMarkups[g]??s.defaultMarkup}),S=B(h,n);return U.parse({pricing:h,tokens:n,quantity:S,digest:await N(h,n,S)})},async trackTokens(r,e){let n=U.parse(e.quote);if(n.quantity!==B(n.pricing,n.tokens)||n.digest!==await N(n.pricing,n.tokens,n.quantity))throw new u("INVALID_REQUEST","AI quote changed after pricing");let g=e.properties??{},l=e.providerCostUsd===void 0?void 0:t.string().regex(/^(0|[1-9]\d{0,11})(\.\d{1,18})?$/).parse(e.providerCostUsd),a=e.generationId===void 0?void 0:t.string().min(1).max(120).parse(e.generationId),c=8+ +(l!==void 0)+ +(a!==void 0);if(Object.keys(g).some(p=>p.startsWith("ai_")))throw new u("INVALID_REQUEST","AI tracking reserves ai_ event properties");if(Object.keys(g).length>16-c)throw new u("INVALID_REQUEST","AI tracking properties exceed the available event budget");let f={operation:"consume",internal_feature_id:e.internal_feature_id,quantity:n.quantity,idempotencyKey:e.idempotencyKey,properties:{...g,...l!==void 0?{ai_provider_cost_usd:l}:{},...a!==void 0?{ai_generation_id:a}:{},ai_model:n.pricing.modelId,ai_source:n.pricing.source,ai_price_at:n.pricing.fetchedAt,ai_quote_hash:n.digest,ai_markup:String(n.pricing.markupPercent),ai_tier:String(n.pricing.contextTier),ai_tokens:_.map(p=>n.tokens[p]).join(","),ai_rates:"v1:"+_.map(p=>n.pricing.rates[p]===void 0?"-":z(n.pricing.rates[p]).toString(36)).join(",")},...e.entityId?{entityId:e.entityId}:{}};return r.mutateBalance({customerId:e.customerId,command:f})}}}async function Y(i,s,o={}){let{config:d,model_markups:m}=await i.readAiPricing(s);return K({defaultMarkup:d.default_markup??0,providerMarkups:Object.fromEntries(Object.entries(d.provider_markups??{}).map(([r,e])=>[r,e.markup])),modelMarkups:Object.fromEntries(Object.entries(m??{}).filter(([,r])=>r.markup!==void 0).map(([r,e])=>[r,e.markup])),customModels:Object.fromEntries(Object.entries(m??{}).filter(([,r])=>r.input_cost!==void 0||r.output_cost!==void 0).map(([r,e])=>[r,{...e.input_cost!==void 0?{input:String(e.input_cost)}:{},...e.output_cost!==void 0?{output:String(e.output_cost)}:{}}])),...o})}export{q as a,U as b,K as c,Y as d};
@@ -911,6 +911,7 @@ declare function createConfigurationSync(options: ConfigurationSyncOptions): {
911
911
  runTimeoutSeconds: number;
912
912
  maxTransitions: number;
913
913
  };
914
+ executionContract?: "funnel-run/1" | "funnel-process/1" | undefined;
914
915
  };
915
916
  growth: {
916
917
  evaluatedAt: string;
@@ -0,0 +1 @@
1
+ import{f as F,j as Q}from"./chunk-33FQUT3Z.js";import{b as B}from"./chunk-SSLZKIIU.js";import{a as z,b as _}from"./chunk-MOWYD2TV.js";import"./chunk-CDG7GM4C.js";import{a as d}from"./chunk-OZZMZH7X.js";import{a as v}from"./chunk-DSPLGTQI.js";import{Q as M}from"./chunk-7DUOIHRD.js";import{A as V,ka as P,qa as U,xa as N,ya as q}from"./chunk-VSJOHWDL.js";import{z as p}from"zod";var x=new WeakMap;function W(r){let t={string:p.string(),number:p.number().finite(),boolean:p.boolean(),strings:p.array(p.string()),json:V}[r.type];return r.nullable?t.nullable():t}async function ie(r,t){return $(r,t,!1)}async function se(r,t){return $(r,t,!0)}async function $(r,t,w){t.signal?.throwIfAborted();let L=M.parse(t.content),o=L.document;if(x.has(r))throw new d("CONFLICT","Content is already mounted in this container");let f=p.record(p.string(),V).parse(t.inputs??{});if(Object.keys(f).length>40)throw new d("INVALID_REQUEST","Too many content inputs");for(let[e,s]of Object.entries(f))N.parse({[e]:s});if(Object.keys(f).some(e=>!Object.hasOwn(o.contract.inputs,e)))throw new d("INVALID_REQUEST","Undeclared content input");for(let[e,s]of Object.entries(o.contract.inputs))if(Object.hasOwn(f,e))W(s).parse(f[e]);else if(s.required)throw new d("INVALID_REQUEST",`Missing content input ${e}`);for(let e of Object.keys(o.contract.outputs))if(typeof t.actions[e]!="function")throw new d("INVALID_REQUEST",`Missing host handler for ${e}`);let J=q.parse(t.bindings??[]),c=r.ownerDocument,T,k=o.kind==="popup",n=k?c.createElement("dialog"):null,i=c.createElement("div");if(i.dataset.indianaContent=o.kind,i.setAttribute("aria-label",o.name),i.style.cssText="width:100%;min-width:0",n){n.setAttribute("aria-label",o.name);let e=o.screen.presentation;n.style.cssText="box-sizing:border-box;padding:0;border:0;max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);overflow:auto",e.type==="modal"||e.type==="sheet"?(n.style.width=`${P[e.size]}px`,e.type==="sheet"&&(n.style.margin="auto auto 0")):n.style.width="100vw",n.append(i),r.append(n)}else r.append(i);let l=!1,C=!1,g=!1;w&&!n&&(i.style.width=`${r.getBoundingClientRect().width||c.defaultView?.innerWidth||800}px`);let G=w?F(n??i):()=>{},D,A,S=new Promise((e,s)=>{D=e,A=s});S.catch(()=>{});let u=null,E=structuredClone(o.screen);E.actions=E.actions.map(e=>e.type==="event"?{...e,close:!1}:e);let y;function m(){l||(l=!0,t.signal?.removeEventListener("abort",m),A(new Error("Content preparation cancelled")),y?.destroy(),n?.close(),n?.remove(),i.remove(),x.delete(r),n&&T?.())}let O=()=>{g&&(m(),v(t.onDismiss))};if(n){let e=c.createElement("button");e.type="button",e.textContent="\xD7",e.setAttribute("aria-label",t.locale?.startsWith("zh")?"\u5173\u95ED":"Close"),_(e,o.screen.theme),e.addEventListener("click",O),n.prepend(e)}n?.addEventListener("cancel",e=>{e.preventDefault(),O()});async function H(){if(l||!g||C||!u)return;let e=u;C=!0,i.setAttribute("aria-busy","true");try{await t.actions[e.actionId](structuredClone(e)),u=null}catch(s){v(t.onError,s)}finally{C=!1,l||i.removeAttribute("aria-busy")}}function R(){if(l)throw new d("CONFLICT","Content host has been destroyed");g||(T=B(c),G(),w&&!n&&(i.style.width="100%"),n&&(n.showModal(),z(n,o.screen.presentation.type)),g=!0)}try{w||R(),y=Q(i,{mode:"live",rendererUrl:t.rendererUrl,title:o.name,viewportHeight:o.kind==="page"?r.clientHeight||c.defaultView?.innerHeight||800:void 0,onRendered:a=>{a&&n?.setAttribute("aria-label",a),D()},onError:a=>{let I=new Error(a);A(I),v(t.onError,I)},onEscape:k?O:void 0,onAction:(a,I,K)=>{if(l||!g||C||u)return;let h=o.screen.actions.find(b=>b.id===a),j=o.contract.outputs[a];if(!(h?.type!=="event"||!j))try{let b=W(j).parse(Object.hasOwn(h.properties,"value")?h.properties.value:h.properties);u={requestId:crypto.randomUUID(),contentVersionId:L.id,actionId:a,event:h.event,value:b,selection:I??{},answers:K??{},requestedClose:h.close},H()}catch(b){v(t.onError,b)}}});let e={destroy:m,show:R,get pendingAction(){return u?structuredClone(u):null},retryAction:H,updateCapabilities:a=>y?.updateCapabilities(a)};x.set(r,e),t.signal?.addEventListener("abort",m,{once:!0}),t.signal?.aborted&&(m(),t.signal.throwIfAborted());let s=U(E,[t.locale,...c.defaultView?.navigator.languages??[]]);if(y.update(E,s,{capabilities:t.capabilities,serverInput:{bindings:J,answers:{},values:f}}),await Promise.race([y.ready,S]),w&&await S,l)throw new Error("Content preparation cancelled");return e}catch(e){throw m(),e}}export{ie as mountContent,se as prepareContent};