@jolibox/implement 1.1.4-beta.13 → 1.1.4-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rush/temp/package-deps_build.json +11 -10
- package/dist/{h5 → common}/ads/ads-action-detection.d.ts +3 -1
- package/dist/{h5 → common}/ads/anti-cheating.d.ts +2 -2
- package/dist/common/ads/channel-policy.d.ts +4 -0
- package/dist/{h5 → common}/ads/index.d.ts +11 -3
- package/dist/common/context/index.d.ts +1 -0
- package/dist/h5/api/ads.d.ts +1 -0
- package/dist/h5/api/index.d.ts +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +3 -3
- package/dist/index.native.js +3 -3
- package/implement.build.log +2 -2
- package/package.json +3 -3
- package/src/{h5 → common}/ads/ads-action-detection.ts +4 -4
- package/src/{h5 → common}/ads/anti-cheating.ts +2 -4
- package/src/common/ads/channel-policy.ts +7 -0
- package/src/{h5 → common}/ads/index.ts +37 -45
- package/src/common/context/index.ts +11 -7
- package/src/h5/api/ads.ts +24 -0
- package/src/h5/api/index.ts +1 -0
- package/src/h5/report/index.ts +1 -0
- package/src/index.ts +0 -1
- package/src/native/api/ads.ts +28 -8
- package/dist/common/report/errors/error-types.d.ts +0 -122
- package/src/common/report/errors/error-types.ts +0 -206
package/dist/index.native.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var ln=Object.create;var Lt=Object.defineProperty;var mn=Object.getOwnPropertyDescriptor;var pn=Object.getOwnPropertyNames;var dn=Object.getPrototypeOf,fn=Object.prototype.hasOwnProperty;var f=(e,t)=>()=>(e&&(t=e(e=0)),t);var gn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var hn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of pn(t))!fn.call(e,o)&&o!==r&&Lt(e,o,{get:()=>t[o],enumerable:!(n=mn(t,o))||n.enumerable});return e};var vn=(e,t,r)=>(r=e!=null?ln(dn(e)):{},hn(t||!e||!e.__esModule?Lt(r,"default",{value:e,enumerable:!0}):r,e));function yn(e){return!!e?.__nativeBuffers__}function le(e){if(typeof e=="string")try{e=JSON.parse(e)}catch{return{}}if(typeof e!="object"||e===null)return{};if(!yn(e))return e;let t=e.__nativeBuffers__;if(delete e.__nativeBuffers__,t)for(let r=0;r<t.length;r++){let n=t[r];if(n){let o;n.value?o=n.value:n.base64&&(o=bn(n.base64)),typeof o<"u"&&o instanceof ArrayBuffer&&(e[n.key]=o)}}return e}function Ft(e={},t=!1){let r=e,n=[];for(let[o,s]of Object.entries(r))if(s!==void 0&&s instanceof ArrayBuffer&&s.byteLength!==void 0){let i=t?{value:s,key:o}:{base64:kn(s),key:o};n.push(i),delete r[o]}return n.length>0&&(r.__nativeBuffers__=n),r}var bn,kn,Ze=f(()=>{"use strict";bn=e=>{let t=atob(e),r=t.length,n=new Uint8Array(r);for(let o=0;o<r;o++)n[o]=t.charCodeAt(o);return n.buffer};kn=e=>{let t="",r=new Uint8Array(e),n=r.byteLength;for(let o=0;o<n;o++)t+=String.fromCharCode(r[o]);return btoa(t)}});function _n(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}function Z(e){return typeof e=="string"}function C(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!(e instanceof RegExp)&&!(e instanceof Date)}function Vt(e){return typeof e=="object"&&Array.isArray(e)}function Sn(e){return typeof e>"u"}function Rn(e){return Sn(e)||e===null}function Kt(e){return typeof e=="function"}function Ht(e){return C(e)&&Kt(e.then)}function Bt(e){let t=e,r=null,n=function(...o){return r||(r=new t(...o)),r};return n.prototype=t.prototype,n}function qt(e,t,r){if(typeof r!="function")throw new Error("[Jolibox SDK]Customizer must be a function");function n(o,s){for(let i in s)if(Object.prototype.hasOwnProperty.call(s,i)){let a=o[i],l=s[i],u=r(a,l,i,o,s);u!==void 0?o[i]=u:jt(l)&&jt(a)?o[i]=n({...a},l):Array.isArray(l)&&Array.isArray(a)?o[i]=[...a,...l]:o[i]=l}return o}return n(e,t)}function jt(e){return e&&typeof e=="object"&&e.constructor===Object}function Gt(e,t){if(Array.isArray(e))return e.concat(t)}function de(e,t,r={}){let n=null,o,s,i,{leading:a=!1,trailing:l=!0}=r,u=()=>(i=e.apply(s,o),o=void 0,s=void 0,i),m=function(...p){o=p,s=this;let d=a&&!n;if(n&&clearTimeout(n),n=setTimeout(()=>{n=null,l&&!d&&u()},t),d)return u()};return m.cancel=()=>{n&&clearTimeout(n),n=null,o=s=void 0},m.flush=()=>{if(n)return clearTimeout(n),n=null,u()},m}function wn(e,t){return(...r)=>t(e,...r)}function Te(e){return t=>wn(t,function(r,...n){if(typeof r=="function")try{return r.apply(this,n)}catch(o){e(new st(`${o}`))}})}function me(e){return(...t)=>{(globalThis.VConsole?.[e]??globalThis.console[e])(...t)}}function Vn(e){return new Promise(t=>rr(e)(t))}function rr(e){return(t,r=null)=>{let n=!1;return e(o=>{if(!n)return n=!0,t.call(r,o)},null)}}function Kn(e,t){return(r=>{let n,o={onWillAddFirstListener(){n=r(s.fire,s)}},s=new pe(o);return s.event})((r,n=null)=>e(o=>t(o)&&r.call(n,o),null))}function Bn(e,t){let r=Math.min(e.length,t.length);for(let n=0;n<r;n++)qn(e[n],t[n])}function qn(e,t){if(Z(t)){if(typeof e!==t)throw new Error(`argument does not match constraint: typeof ${t}`)}else if(Kt(t)){try{if(e instanceof t)return}catch{}if(!Rn(e)&&e.constructor===t||t.length===1&&t.call(void 0,e)===!0)return;throw new Error("[Jolibox SDK]argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true")}}function R(){if(globalThis[tt])return globalThis[tt];let e=new be,t=new nt,r={registerCommand(n,o,s){e.registerCommand({id:n,handler:o,metadata:s})},executeCommand(n,...o){return t.executeCommand(n,...o)},excuteCommandSync(n,...o){return t.executeCommandThowErr(n,...o)}};return globalThis[tt]=r,r}var Jt,Tn,En,$t,W,xn,ot,ee,In,st,zt,Wt,Yt,Qt,Xt,fe,ke,it,S,Zt,An,at,Pn,ct,Cn,Nn,he,On,Dn,Un,er,ut,Mn,Ln,Fn,tr,k,jn,Jn,ve,pe,Y,rt,$n,et,Hn,K,be,nt,tt,v=f(()=>{"use strict";Jt=Object.defineProperty,Tn=Object.getOwnPropertyDescriptor,En=(e,t)=>{for(var r in t)Jt(e,r,{get:t[r],enumerable:!0})},$t=(e,t,r,n)=>{for(var o=n>1?void 0:n?Tn(t,r):t,s=e.length-1,i;s>=0;s--)(i=e[s])&&(o=(n?i(t,r,o):i(o))||o);return n&&o&&Jt(t,r,o),o};W=class{constructor(){this.state="pending",this.promise=new Promise((e,t)=>{this.resolve=r=>{this.state==="pending"&&(this.state="fulfilled",e(r))},this.reject=r=>{this.state==="pending"&&(this.state="rejected",t(r))}})}};xn=(e=>(e[e.DEVELOPER_FILE_NOT_FOUND=0]="DEVELOPER_FILE_NOT_FOUND",e[e.INTERNAL_IOS_CAN_NOT_FOUND_PKG=1]="INTERNAL_IOS_CAN_NOT_FOUND_PKG",e[e.USER_IOS_LOAD_TIMEOUT=2]="USER_IOS_LOAD_TIMEOUT",e[e.INTERNAL_IOS_PKG_LOAD_ERROR=3]="INTERNAL_IOS_PKG_LOAD_ERROR",e[e.INTERNAL_IOS_PKG_PARSE_FAIL=4]="INTERNAL_IOS_PKG_PARSE_FAIL",e[e.USER_IOS_GET_EMPTY_DATA=5]="USER_IOS_GET_EMPTY_DATA",e[e.USER_ANDROID_GET_PKG_FAIL=6]="USER_ANDROID_GET_PKG_FAIL",e[e.DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE=7]="DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE",e))(xn||{}),ot=class extends Error{constructor(e){if(typeof e=="string"){super(e),this.priority="P1";return}super(e.message),this.priority="P1",this.stack=e.stack,this.raw=e}},ee=class extends ot{constructor(){super(...arguments),this.kind="INTERNAL_ERROR"}},In=class extends ot{constructor(){super(...arguments),this.kind="USER_ERROR"}},st=class extends In{constructor(e,t,r){super(e),this.message=e,this.errNo=t,this.name="USER_CUSTOM_ERROR",this.errMsg=e,r&&(this.extra=Object.assign({},this.extra,r))}},zt=class extends ee{constructor(){super(...arguments),this.name="INTERNAL_SCHEMA_PARSE_ERROR",this.priority="P0"}},Wt=class extends ee{constructor(){super(...arguments),this.name="INTERNAL_INVOKE_NATIVE_ERROR"}},Yt=class extends ee{constructor(e,t,r,n){super(e),this.errNo=t,this.name="INTERNAL_APPLY_NATIVE_ERROR",this.errorType=r,this.errorCode=n}},Qt=class extends ee{constructor(){super(...arguments),this.name="INTERNAL_JSCORE_ERROR",this.priority="P0"}},Xt=class extends ee{constructor(e,t){super(e),this.message=e,this.name="INTERNAL_CONTEXT_ERROR",this.property=t}},fe=class extends ot{constructor(e,t,r,n,o){super(e),this.message=e,this.code=t,this.kind="API_ERROR",this.name="API_ERROR",r&&(this.errorType=r),n!==void 0&&(this.stack=n),o&&(this.priority=o)}toJSON(){return{message:this.message,stack:this.stack,name:this.name,code:this.code,errorType:this.errorType}}},ke=class extends ee{constructor(){super(...arguments),this.name="INTERNAL_METRIC_REPORT_ERROR"}},it=class extends ee{constructor(){super(...arguments),this.name="INTERNAL_REPORTER_ERROR"}};S={log:me("log"),warn:me("warn"),info:me("info"),error:me("error"),debug:me("debug")};Object.assign(globalThis,{logger:S});Zt=Symbol.for("Jolibox.canIUseMap"),An={};globalThis[Zt]=An;at={get config(){return globalThis[Zt]}},Pn=(e=>(e[e.System=1e3]="System",e[e.ErrorTrace=1001]="ErrorTrace",e[e.UserDefined=1002]="UserDefined",e))(Pn||{}),ct=(e=>(e.MiniGame="mini-game",e.MiniDrama="mini-drama",e.App="app",e.WebSDK="web-sdk",e.AppSDK="app-sdk",e))(ct||{}),Cn=(e=>(e[e.App=0]="App",e[e.H5=1]="H5",e[e.Weapp=2]="Weapp",e[e.Alipay=3]="Alipay",e[e.Gcash=4]="Gcash",e[e.Dana=5]="Dana",e[e.Umma=6]="Umma",e[e.WebSDK=1e3]="WebSDK",e[e.AppSDK=1001]="AppSDK",e[e.Other=9999]="Other",e))(Cn||{}),Nn=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)}),he={isiOS:navigator.userAgent.includes("iPhone")||navigator.userAgent.includes("iPod")||navigator.userAgent.includes("iPad")||navigator.userAgent.includes("iPhone OS"),iosVersion:()=>{let e=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);return[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3]||"0",10)]},isAndroid:navigator.userAgent.includes("Android"),isMac:navigator.userAgent.includes("Mac"),isFacebook:navigator.userAgent.includes("FB_IAB"),isPC:!navigator.userAgent.includes("iPhone")&&!navigator.userAgent.includes("Android")},On=()=>he.isiOS?"iOS":he.isAndroid?"Android":he.isMac?"Mac":he.isFacebook?"Facebook":"PC",Dn="device_id",Un="advertising_id",er=e=>(localStorage.getItem(e)||localStorage.setItem(e,Nn()),localStorage.getItem(e)),ut=()=>er(Dn),Mn=()=>er(Un),Ln=e=>e.charAt(0).toUpperCase()+e.slice(1),Fn=()=>{let e=new URLSearchParams(window.location.search);return Ln(e.get("utm_source")??"")||"JoliboxSDK"},tr=e=>{let t="JoliboxWebSDK",r=On(),n=navigator.language,o=ut(),s=Mn();return`${t} (${Fn()}${r}; UnknownModel; UnknownSystemVersion; ${n}) uuid/${o} adid/${s} version/${e||""}`},k=class ye{static{this.Undefined=new ye(void 0)}constructor(t){this.element=t,this.next=ye.Undefined,this.prev=ye.Undefined}},jn=class{constructor(){this._first=k.Undefined,this._last=k.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===k.Undefined}clear(){let e=this._first;for(;e!==k.Undefined;){let t=e.next;e.prev=k.Undefined,e.next=k.Undefined,e=t}this._first=k.Undefined,this._last=k.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){let r=new k(e);if(this._first===k.Undefined)this._first=r,this._last=r;else if(t){let o=this._last;this._last=r,r.prev=o,o.next=r}else{let o=this._first;this._first=r,r.next=o,o.prev=r}this._size+=1;let n=!1;return()=>{n||(n=!0,this._remove(r))}}shift(){if(this._first!==k.Undefined){let e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==k.Undefined){let e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==k.Undefined&&e.next!==k.Undefined){let t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===k.Undefined&&e.next===k.Undefined?(this._first=k.Undefined,this._last=k.Undefined):e.next===k.Undefined?(this._last=this._last.prev,this._last.next=k.Undefined):e.prev===k.Undefined&&(this._first=this._first.next,this._first.prev=k.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==k.Undefined;)yield e.element,e=e.next}},Jn=0,ve=class{constructor(e){this.value=e,this.id=Jn++}},pe=class{constructor(e){this.options=e,this._size=0}dispose(e){this._disposed||(this._disposed=!0,this._listeners&&(e?(this._listeners instanceof ve&&(this._listeners=[this._listeners]),this._listeners=this._listeners.filter(t=>t?.value===e)):(this._listeners=void 0,this._size=0)),this.options?.onDidRemoveLastListener?.())}get event(){return this._event??=(e,t)=>{if(this._disposed)return()=>{console.info("[Jolibox SDK] Emitter is _disposed")};t&&(e=e.bind(t));let r=new ve(e);this._listeners?this._listeners instanceof ve?this._listeners=[this._listeners,r]:this._listeners.push(r):(this.options?.onWillAddFirstListener?.(this),this._listeners=r,this.options?.onDidFirstListener?.(this)),this.options?.onDidAddListener?.(this),this._size++},this._event}_deliver(e,t){if(!e)return;let r=this.options?.onListenerError||Error.constructor;if(!r){e.value(t);return}try{e.value(t)}catch(n){r(n)}}fire(e){this._listeners&&(this._listeners instanceof ve?this._deliver(this._listeners,e):this._listeners.forEach(t=>this._deliver(t,e)))}hasListeners(){return this._size>0}},Y=class{constructor(){this.listeners=new Map,this.listerHandlerMap=new WeakMap,this.cachedEventQueue=new Map}on(e,t){let r=this.listeners.get(e)??new pe,n=s=>t(...s.args);this.listerHandlerMap.set(t,n),r.event(n),this.listeners.set(e,r);let o=this.cachedEventQueue.get(e);if(o)for(;o.size>0;)r.fire({event:e,...o.shift()})}off(e,t){let r=this.listeners.get(e);if(r){let n=this.listerHandlerMap.get(t);r.dispose(n)}}emit(e,...t){let r=this.listeners.get(e);if(r)r.fire({event:e,args:t});else{let n=this.cachedEventQueue.get(e);n||(n=new jn,this.cachedEventQueue.set(e,n)),n.push({args:t})}}},rt={};En(rt,{None:()=>$n,filter:()=>Kn,once:()=>rr,toPromise:()=>Vn});$n=()=>{console.log("[Jolibox SDK] None Event")};et=Symbol.for("Jolibox.hostEmitter"),Hn=()=>{let e=new Y;return globalThis[et]||(globalThis[et]={on:e.on.bind(e),off:e.off.bind(e),emit:e.emit.bind(e)}),globalThis[et]},K=Hn();be=class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new pe,this.onDidRegisterCommand=this._onDidRegisterCommand.event,console.log("[Jolibox SDK] command registry")}registerCommand(e){if(!e)throw new Error("invalid command");if(e.metadata&&Array.isArray(e.metadata.args)){let r=[];for(let o of e.metadata.args)r.push(o.constraint);let n=e.handler;e.handler=function(...o){return Bn(o,r),n(...o)}}let{id:t}=e;this._commands.get(t)&&console.info(`[Jolibox SDK] duplicated command is registered ${t}`),this._commands.set(t,e),this._onDidRegisterCommand.fire(t)}getCommand(e){return this._commands.get(e)}getCommands(){let e=new Map;for(let t of this._commands.keys()){let r=this.getCommand(t);r&&e.set(t,r)}return e}};be=$t([Bt],be);nt=class{constructor(){this._onWillExecuteCommand=new pe,this.onWillExecuteCommand=this._onWillExecuteCommand.event,this._onDidExecuteCommand=new pe,this.onDidExecuteCommand=this._onDidExecuteCommand.event,this.registry=new be,this._starActivation=null}_activateStar(){return this._starActivation||(this._starActivation=_n(3e4)),this._starActivation}async executeCommand(e,...t){return this.registry.getCommand(e)?this._tryExecuteCommand(e,t):(await Promise.all([Promise.race([this._activateStar(),rt.toPromise(rt.filter(this.registry.onDidRegisterCommand,r=>r===e))])]),this._tryExecuteCommand(e,t))}executeCommandThowErr(e,...t){if(!this.registry.getCommand(e))throw new Error(`command '${e}' not found`);let r=this.registry.getCommand(e);this._onWillExecuteCommand.fire({commandId:e,args:t});let n=this.invokeFunction(r.handler,...t);return this._onDidExecuteCommand.fire({commandId:e,args:t}),n}_tryExecuteCommand(e,t){let r=this.registry.getCommand(e);if(!r)return Promise.reject(new Error(`command '${e}' not found`));try{this._onWillExecuteCommand.fire({commandId:e,args:t});let n=this.invokeFunction(r.handler,...t);return this._onDidExecuteCommand.fire({commandId:e,args:t}),Promise.resolve(n)}catch(n){return Promise.reject(n)}}invokeFunction(e,...t){let r=!1;try{return e(...t)}finally{r=!0}}};nt=$t([Bt],nt);tt=Symbol.for("Jolibox.commands")});function I(e,t={}){lt.emit("ERROR_REPORT",{error:e,options:t})}var lt,te,U=f(()=>{"use strict";v();v();lt=new Y,te=new Y;I.debounce=de(I,50,{leading:!0})});function Ee(e,t){return`[${e}]:${t}`}var re,mt,Q=f(()=>{"use strict";U();v();U();re=(e,t)=>new fe(t?.errMsg??e.msg??"",e.code,e.type),mt=e=>new st(e)});var nr,or,sr,ir=f(()=>{"use strict";nr=[],or=[],sr=["env","createRequestTask","login"]});function cr(e,t){ar||(pt=new ne({eventName:"jolibox_invoke",tagNameOrder:["status","method","errNo","errMsg","isForeground"],metricName:"duration",reporter(o){e.invoke("track",JSON.stringify({event:"reportMetrics",data:o}),-1)}}),dt=new ne({eventName:"jolibox_invoke_js2native",tagNameOrder:["status","method","isForeground"],metricName:"duration",reporter(o){e.invoke("track",JSON.stringify({event:"reportMetrics",data:o}),-1)}}),ft=new ne({eventName:"jolibox_invoke_native2js",tagNameOrder:["status","method","isForeground"],metricName:"duration",reporter(o){e.invoke("track",JSON.stringify({event:"reportMetrics",data:o}),-1)}}),t("onJoliboxEnterBackground",()=>{pt.flush(),dt.flush(),ft.flush()}),ar=!0);function r(o){let{method:s,args:i,startTime:a,isForeground:l,errMsg:u=`${s}:fail no errMsg`,errNo:m=0,__timing:p={receiveJSInvoke:0,invokeCallback:0}}=o,{receiveJSInvoke:d,invokeCallback:g}=p,b=u.match(/\S:(\S+)\s?/)?.[1]??"fail";pt.report({status:b,method:n(s,i),errNo:`${m}`,errMsg:u,isForeground:l,duration:Date.now()-a}),a&&d&&g&&(dt.report({status:b,method:s,isForeground:l,duration:Number((d-a).toFixed(3))}),ft.report({status:b,method:s,isForeground:l,duration:Number((Date.now()-g).toFixed(3))}))}function n(o,s){return(o==="callHostMethod"||o==="callHostMethodSync")&&s?.method?`${o}-${s.method}`:o}return r}var Gn,ne,ar,pt,dt,ft,gt=f(()=>{"use strict";v();Gn=e=>e==="pv"?e:"default",ne=class{constructor(t){this.interval=30;this.lastReportTime=0;this.cache={};let{reporter:r,interval:n=30,eventName:o,tagNameOrder:s,metricName:i,type:a}=t;this.reporter=r,this.interval=n,this.eventName=o,this.tagNameOrder=s,this.metricName=i,this.type=Gn(a)}report(t){this.type==="pv"?this.addPVPoint(t):this.addPoint(t),this.tryReport(!1)}flush(){this.tryReport(!0)}tryReport(t){if(Object.keys(this.cache).length){if(t){this.reporter(this.processPoints(this.cache)),this.clearPoints();return}this.lastReportTime=this.lastReportTime||Date.now(),Date.now()-this.lastReportTime>=this.interval*1e3&&(this.reporter(this.processPoints(this.cache)),this.clearPoints(),this.lastReportTime=Date.now())}}addPoint(t){let r=(n,o,s,i)=>{let a=o.shift();if(a){let l=i[a];n[l]||(n[l]={}),r(n[l],o,s,i)}else n[s]||(n[s]=[]),n[s].push(i[s])};r(this.cache,[...this.tagNameOrder],this.metricName,t)}addPVPoint(t){let r=(o,s,i,a)=>{let l=s.shift();if(!l&&C(a))throw new ke(`report value failed to match tagNameOrder, ${JSON.stringify(n)}`);if(l){let u=[];if(C(a))u.push(...Object.keys(a));else if(Z(a)){if(s.length>0)throw new ke(`report value failed to match tagNameOrder, ${JSON.stringify(n)}`);u.push(a)}else throw new ke(`expected metric value to be a string, but got a(n) ${typeof a}, ${JSON.stringify(n)}`);u.forEach(m=>{o[m]||(o[m]={});let p=C(a)?a[m]:a;r(o[m],[...s],i,p)})}else o[i]?o[i]++:o[i]=1},n={point:t,metricName:this.metricName,tagNameOrder:this.tagNameOrder};r(this.cache,[...this.tagNameOrder],this.metricName,t)}processPoints(t){return{eventName:this.eventName,tagNameOrder:this.tagNameOrder,metricName:this.metricName,metricAggregateType:this.type==="pv"?"itoa":"arr",data:t}}clearPoints(){this.cache={}}},ar=!1});function lr(e,t){let r=0,n=!0,o=new Map,s=cr(e,t);t("onJoliboxEnterBackground",()=>{n=!1}),t("onJoliboxEnterForeground",()=>{n=!0,ht.forEach(async({method:u,args:m,resolve:p})=>{let d=await a(u,m);p(d)}),ht.length=0});let i=(u,m)=>{S.info("----resolveId",u,m);let p=o.get(Number(u));if(!p)return;let d=le(m);p(d),o.delete(Number(u))},a=(u,m)=>{let p=Date.now(),d=`${n}`;r+=1;let g=new W;if(o.set(r,g.resolve),!n&&or.includes(u))return new Promise(P=>{ht.push({method:u,args:m,resolve:P})});let A={...{method:u,startTime:p,args:m,isForeground:d},invokeType:"js-bridge"},N=!zn&&nr.includes(u),G=Ft(m,N),z=N?G:JSON.stringify(G),T;if(u.endsWith("Sync")||sr.includes(u)?T=e.call?.(u,G,r):typeof z=="string"?(console.log("-----params",u,r),T=e.invoke(u,z,r)):T=e.call?.(u,z,r),T){try{typeof T=="string"&&(T=JSON.parse(T)),T=le(T)}catch(P){S.error(P)}return o.delete(r),T.errorCode&&(T.errorCode=Ee(u,T.errorCode)),s({...A,...T}),T}return u.endsWith("Sync")&&o.delete(r),g.promise.then(P=>(P.errorCode&&(P.errorCode=Ee(u,P.errorCode)),s({...A,...P}),P))};return{invokeNative:a,applyNative:(u,m)=>{let p=a(u,m);return Ht(p)?p.then(d=>ur(u,d)):ur(u,p)},invokeHandler:i}}function ur(e,t){if(!C(t)){S.warn(`[Jolibox SDK]${e} no response value`);return}let{errMsg:r,errNo:n,errorType:o,errorCode:s,...i}=t;if(r&&r!==`${e}:ok`)throw new Yt(r,n,o,s);return i}var ht,zn,mr=f(()=>{"use strict";Ze();v();Q();ir();gt();ht=[],zn=!1});function pr(e){let t=new Y,r=new ne({eventName:"jolibox_publish",tagNameOrder:["type","event"],metricName:"duration",reporter(n){e.invoke("track",JSON.stringify({event:"reportMetrics",data:n}),-1)}});return t.on("onJoliboxEnterBackground",()=>{r.flush()}),{onNative:t.on.bind(t),offNative:t.off.bind(t),subscribeHandler(n,o,s){let i=le(o),a;if(i.__extra){a=i.params;let{type:l,startTime:u}=i.__extra;r.report({type:l,event:n,duration:Date.now()-u})}else a=i;t.emit(n,a,s)}}}var dr=f(()=>{"use strict";v();Ze();gt()});function vt(e){let{subscribeHandler:t,onNative:r,offNative:n}=pr(e),{invokeNative:o,invokeHandler:s,applyNative:i}=lr(e,r);return{invokeHandler:s,subscribeHandler:t,applyNative:i,invokeNative:o,onNative:r,offNative:n}}var fr=f(()=>{"use strict";mr();dr()});var gr=f(()=>{"use strict"});var hr=f(()=>{"use strict";fr();gr()});var X,M,vr,yr=f(()=>{"use strict";v();U();M={trigger(){},exit(){return!1},onReady(e){M.trigger=e},doExit(e){M.exit=e}},vr=()=>{let e=window.prompt("invoke",JSON.stringify({event:"envSync",paramsString:JSON.stringify({})}));if(!e)I(new Wt("native env failed"));else{let{data:t}=JSON.parse(e);return t??void 0}};if(window.webkit){let e=window.webkit.messageHandlers,t=(o="")=>{M.trigger(),e.onDocumentReady.postMessage({path:o})};X={onDocumentReady:t,doExit:o=>{let s=M.exit();e.doExit.postMessage({uuid:o,shouldInterrupt:s})},invoke(o,s,i){e.invoke.postMessage({event:o,paramsString:s,callbackId:i})},call(o,s,i){let a=window.prompt("invoke",JSON.stringify({event:o,paramsString:JSON.stringify(s),callbackId:i}));if(a)return JSON.parse(a)}};let n={onDocumentReady:t,env:vr};globalThis.joliboxJSCore={...n}}if(window.JoliAndroidSDKBridge){let e=window.JoliAndroidSDKBridge,t=(o="")=>{M.trigger(),e.onDocumentReady(JSON.stringify({path:o}))};X={onDocumentReady:t,invoke(o,s,i){e.invoke(JSON.stringify({event:o,paramsString:s,callbackId:i}))},doExit:o=>{let s=M.exit();e.doExit(JSON.stringify({uuid:o,shouldInterrupt:s}))},call(o,s,i){let a=window.prompt("invoke",JSON.stringify({event:o,paramsString:JSON.stringify(s),callbackId:i}));if(a)return JSON.parse(a)}};let n={onDocumentReady:t,env:vr};globalThis.joliboxJSCore={...n}}});function yt(e,t){return{params:e,__extra:{startTime:Date.now(),type:t}}}var bt=f(()=>{"use strict"});function kt(){globalThis.onmessage=function(e){e.data==="msg:setup"&&([ie]=e.ports,ie.onmessage=function(t){let r=JSON.parse(t.data);r[0]==="publish"?globalThis.ttJSBridge.subscribeHandler(r[1],r[2]):r[0]==="invoke"&&globalThis.ttJSBridge.invokeHandler(r[1],r[2])},ie.publish=function(t,r){let n=yt(r,"messagePort");ie.postMessage(JSON.stringify(["publish",t,JSON.stringify(n)]))},ie.postMessage("msg:setup:ok"))}}var ie,br=f(()=>{"use strict";bt()});var _e=f(()=>{"use strict";yr();br();bt()});var Tr,Wn,Er,kr,O,w,J,pi,Yn,L=f(()=>{"use strict";hr();_e();Q();v();_e();Tr=X;if(!Tr)throw new Qt("No joliboxJScore is found, native bridge not found.");kt();Wn={...Tr},Er=vt(Wn),{invokeHandler:kr}=Er,{applyNative:O,invokeNative:w,onNative:J,offNative:pi,subscribeHandler:Yn}=Er;globalThis.joliboxJSBridge={callHandler:kr,invokeHandler:kr,subscribeHandler:Yn}});var Tt,_r,Sr=f(()=>{"use strict";v();U();Tt=e=>{let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4===0?"":"=".repeat(4-t.length%4),n=atob(t+r);try{return JSON.parse(n)}catch{return{}}},_r=e=>{try{let n=new URL(e).searchParams.get("joliSource")?.split(".");if(n?.length){let[o,s,i]=n;return{headerJson:Tt(o),payloadJson:Tt(s),signature:Tt(i)}}else throw"joli_source is missing"}catch(t){return I(new zt(`${e} not a valid schema: ${t}`)),{headerJson:{},payloadJson:{},signature:{}}}}});var Qn,Se,Rr,Et=f(()=>{"use strict";v();Qn="1.1.4-beta.13",Se=()=>Qn,Rr=()=>{let e=Se();return`${tr(e)}`}});var Xn,Zn,F,eo,y,H=f(()=>{"use strict";v();Sr();Et();v();Xn={deviceInfo:{brand:"UnknownBrand",model:"UnknownModel",did:ut(),pixelRatio:window.devicePixelRatio||1,platform:"h5",system:"UnknownSystemVersion",lang:"zh"},sdkInfo:{nativeSDKVersion:"",jssdkVersion:Se()},schema:"",platform:"h5"},Zn=globalThis.joliboxJSCore?.env,F=Object.assign({},Zn?.()??Xn),eo=()=>{let{payloadJson:e,headerJson:t}=_r(F.schema),r=`${F.deviceInfo.did}-${new Date().getTime()}`,n=new URLSearchParams(F.schema.length?F.schema:window.location.search),o=n.get("mpId")??n.get("appId")??n.get("gameId")??"",s=e.sessionId??n.get("sessionId")??r,i=!!(e.testAdsMode??n.get("testAdsMode")==="true"),a=e.joliboxEnv??n.get("joliboxEnv")??"production",l=a==="staging";return{get testMode(){return l},get testAdsMode(){return i},get joliboxEnv(){return a},get mpId(){return o??e.id},get mpVersion(){return t.ver??Se()},get platform(){return F.platform},get deviceInfo(){return F.deviceInfo},get sdkInfo(){return F.sdkInfo},get hostInfo(){return F.hostInfo},get hostUserInfo(){return F.hostUserInfo},get sessionId(){return F.clientSessionId??s??r},onEnvConfigChanged:u=>{qt(F,u,Gt)}}},y=eo()});var _t,Ir,to,ro,xr,no,wr=f(()=>{"use strict";v();U();H();v();_t=!1,Ir=(e,t)=>e==null?!1:t in e,to=e=>Ir(e,"kind"),ro=e=>{let t=e.toLowerCase().split("_");return t[0]+t.slice(1).map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join("")},xr=(e,t={},r)=>{let n=e.priority??"P1",s={...{user_id:y.hostUserInfo?.uid??"",device_id:y.deviceInfo.did??"",timestamp:Date.now(),tag:ro(e.name)},env:t.environment,isFromUser:r};r?te.emit("GLOBAL_USER_ERROR",e,s):te.emit("GLOBAL_ERROR",e,s)},no=e=>Ir(e,"kind")&&e.kind==="USER_ERROR";lt.on("ERROR_REPORT",({error:e,options:t})=>{if(_t)return;_t=!0;let r=to(e)&&e.raw?e.raw:e;try{let n=no(e);xr(e,t,n)}catch(n){let o=n instanceof Error?n.message:String(n),s=new it(`${o}, origin error: ${r.message}`);S.error(s),xr(new it(s.message),{environment:t.environment},!1)}finally{_t=!1}})});var Ar=f(()=>{"use strict";wr();Q();v();L();te.on("GLOBAL_ERROR",(e,t)=>{let r={message:e.message,stack:e.stack??"",errorType:e.name,source:0};w("trackAsync",{event:"reportJsError",data:r})});te.on("GLOBAL_USER_ERROR",(e,t)=>{S.log("UserError",e,t)})});var St=f(()=>{"use strict"});function Pr(e,t){let r=(n,o,s)=>{let i={tag:n,...t,extra:{...o}};n=="globalJsError"?I(new Xt(JSON.stringify(i),"P0")):e("systemLog",i,s)};return r.debounce=de(r,500,{leading:!0}),r}function Cr(e){let t=(r,n,o)=>{let s=(o&&JSON.stringify(o))??0,i={speed_value_type:r,total_duration:n};s&&Object.assign(i,{extra:s}),e("joliboxSpeedAnalysis",i)};return t.debounce=de(t,500,{leading:!0}),t}var Nr=f(()=>{"use strict";v();v();U()});function Or(e,t){let r=Pr(e,t),n=Cr(r);return{track:r,trackPerformance:n}}var Dr=f(()=>{"use strict";Nr()});var Ur=f(()=>{"use strict";H();v();v()});var Mr=f(()=>{"use strict";Dr();St();Ur()});var Re,Lr=f(()=>{"use strict";Re=class{constructor(t,r){this.eventEmitter=t;this.lastReportTime=0;this.visible=!0;this.timer=this.createRAFTimer(t=>{this.reporter({event:"PLAY_GAME",params:{duration:t}}),this.tracker("PlayGame",{duration:t})});this.interval=r??5*1e3,t.on("visible",n=>{this.visible=n})}start(t){this.reporter({event:"OPEN_GAME",params:{timestamp:Date.now(),duration:t??0}}),this.tracker("OpenGame",{duration:t??0}),this.timer.start()}close(t){this.reporter({event:"CLOSE_GAME",params:{timestamp:Date.now(),duration:t}}),this.tracker("CloseGame",{duration:t}),this.timer.stop()}createRAFTimer(t){let r=Date.now(),n,o,s=!1,i=0,a=()=>{if(!s)return;let g=Date.now(),b=g-r;b>=this.interval&&(this.visible&&(i+=b,t(i)),r=g),n=requestAnimationFrame(a)},l=()=>{m(),r=Date.now(),o=window.setInterval(()=>{if(!s)return;let g=Date.now();g-r>=this.interval&&(r=g)},this.interval)},u=()=>{p(),r=Date.now(),n=requestAnimationFrame(a)},m=()=>{n&&(cancelAnimationFrame(n),n=0)},p=()=>{o&&(clearInterval(o),o=0)};this.eventEmitter.on("visible",g=>{s&&(console.log("visible",g),g?u():l())});let d=this.visible;return{start(){s||(s=!0,d?u():l())},stop(){s=!1,m(),p()}}}}});var Rt=f(()=>{"use strict"});function jr(e,t,r){let{response:n,startTime:o,endTime:s,requestFrom:i}=r,{errMsg:a="",profile:l={}}=n,m={duration:s-o,request_type:e,url:t.split("?")[0],result:r.state,error_msg:r.state==="fail"?a:"",socket_reused:l.socketReused?1:0,request_from:i};(i==="public"&&Fr<so||i==="inner")&&(m.joli_request_number=Fr++,setTimeout(()=>{$("joliboxNetRequestResult",m)},500))}var Fr,so,Jr=f(()=>{"use strict";Rt();oe();Fr=0,so=10});function xe(e,t,r){let n=new Map,o=r?.baseUrl??"https://api.jolibox.com",s=r?.type??"public",i=r?.defaultHeaders??{};return J("onRequestTaskStateChange",l=>{if(typeof l.requestTaskId!="string")return;let u=n.get(l.requestTaskId);if(u)if(l.state==="success"){let{requestTaskId:m,state:p,...d}=l;u.resolve(d),n.delete(m)}else if(l.state==="fail"){let{requestTaskId:m,state:p,...d}=l;u.reject(d),n.delete(m)}else S.warn("onRequestTaskStateChange unknown event",l)}),K.on("onLoginComplete",({isLogin:l,token:u})=>{l&&u&&(i["X-JOLI-TOKEN"]=u)}),async(l,u={})=>{let m=Date.now(),p=io(l,{...u,baseUrl:o}),{method:d="GET",responseType:g="text",dataType:b="json",timeout:A,enableCache:N=!1,appendHostCookie:G=!0}=u,z=Object.assign({"content-type":"application/json"},i,u.header),T={url:p,method:d,header:z,enableCache:N,responseType:g,appendHostCookie:G};if(d=="POST"||d=="PUT"){let j=co(u.data,z["content-type"]);T.data=j}A&&Object.assign(T,{timeout:A});let{data:{requestTaskId:P}}=w(e,T);if(typeof P!="string")throw re({code:-1,msg:"requestTaskId is not a string"});let ue=(j,V)=>{jr("request",p,{state:j,startTime:m,endTime:Date.now(),params:T,response:V,requestId:P,requestFrom:s=="public"?"public":"inner"})},{resolve:Xe,reject:on,promise:sn}=new W;n.set(P,{resolve:Xe,reject:on});try{let j=await sn;ue("success",j);let{data:V}=j;return b==="json"&&typeof V=="string"&&(V=ao(V)),{url:p,timeout:A,method:d,response:{...j,data:V}}}catch(j){let V=j;if(C(V)){let{errMsg:ge,prefetchDetail:an,isPrefetch:cn,errNo:un}=V;Z(ge)&&(ue("fail",{errMsg:ge,isPrefetch:cn,prefetchDetail:an}),I(re({code:-1,msg:ge},{errNo:un,errMsg:ge})))}throw j}}}function ao(e){try{return JSON.parse(e.trim())}catch{return e}}function co(e,t="application/json"){let r=t.toLowerCase();return e===void 0?"":typeof e=="string"||e instanceof ArrayBuffer?e:r.includes("application/x-www-form-urlencoded")||r.includes("application/json")||typeof e=="object"?JSON.stringify(e):String(e)}var io,xt=f(()=>{"use strict";v();Jr();Rt();L();U();Q();io=(e,t)=>{if(/^https?:\/\//.test(e))return e;let r=t?.query,o=new URLSearchParams(r).toString();return t?.baseUrl?`${t.baseUrl}${e}${o?`?${o}`:""}`:`${e}${o?`?${o}`:""}`}});var se,It=f(()=>{"use strict";Et();xt();H();se=xe("createRequestTaskSync","operateRequestTaskSync",{type:"inner",baseUrl:y.testMode?"https://stg-api.jolibox.com":"https://api.jolibox.com",defaultHeaders:{"x-user-agent":Rr(),"X-JOLI-TOKEN":y.hostUserInfo?.token??""}})});var Ie,$r=f(()=>{"use strict";H();Lr();It();L();Ie=class extends Re{constructor(t,r,n){super(r,n),this.gameId=y.mpId,this.sessionId=y.sessionId,this.track=t}async reporter(t){let{event:r,params:n}=t,o=[];o.push(se("/api/base/app-event",{method:"POST",data:{eventType:r,gameInfo:{gameId:this.gameId,sessionId:this.sessionId,...n}}})),await Promise.all(o)}async reportToNative(t){let{event:r,params:n}=t;await O("userTrackAsync",{event:r,params:{...n},gameId:this.gameId})}tracker(t,r=null){this.track(t,r)}}});var uo,$,lo,Vr,we,D,oe=f(()=>{"use strict";Ar();v();St();Mr();H();$r();L();uo=(e,t,r)=>{let n=t,s={...C(n.extra)?n.extra:Z(n.extra)?JSON.parse(n.extra):{},mp_id:n.mp_id??"",mp_version:n.mp_version??""};w("trackAsync",{event:e,data:s,webviewId:r})},{track:$,trackPerformance:lo}=Or(uo,{type:ct.AppSDK,platform:"native",jssdk_version:y.sdkInfo?.jssdkVersion??"1.0.0",mp_id:y.mpId,mp_version:y.mpVersion}),Vr=R();Vr.registerCommand("ReportSDK.traceSystemTimeline",({event:e,duration:t})=>{lo(e,t)});Vr.registerCommand("ReportSDK.traceSystem",({event:e,info:t})=>{$(e,t)});we=new Y,D=new Ie($,we)});function Hr(e){let t=at.config[e];return t||(t={},at.config[e]=t),(r,n)=>{if(t[r]){S.warn(`[can i use] ${r} already registered`);return}t[r]={...n}}}var Br=f(()=>{"use strict";v()});function wt(e){qr=e}function Pe(e){return e===null||typeof e!="object"?e:Array.isArray(e)?e.map(t=>Pe(t)):Object.keys(e).reduce((t,r)=>(t[r]=Pe(e[r]),t),{})}function B(e){return typeof e=="number"}function At(e){let t=Pt(e);switch(t){case"string":return`"${e}"`;case"number":case"boolean":case"null":case"undefined":return String(e);default:return`a(n) ${t}`}}function Pt(e){return typeof e=="function"?"function":Object.prototype.toString.call(e).slice(8).slice(0,-1).toLowerCase()}var qr,E,Ce,Ne,Oe,De,ae,Ue,Me,Le,Fe,je,Je,$e,Ve,Ke,He,Be,qe,Ct=f(()=>{"use strict";qr=!1;E=class{constructor(){this.errors=[];this.hasFallback=!1;this.hasDefault=!1;this._optional=!1}fail(t){if(qr)if(typeof t=="string")this.errors.push(t);else{let r=`${this.path} should be ${t.expect}`;this._optional&&t.expect!=="undefined"?r+=" or undefined, ":r+=", ",r+=`but got ${At(t.actual)}`,this.errors.push(r)}return!1}fallback(t){return this.hasFallback=!0,this._fallback=t,this}get fallbackValue(){return Pe(this._fallback)}default(t){return this.hasDefault=!0,this._default=t,this}get defaultValue(){return typeof this._default=="function"?this._default:Pe(this._default)}optional(){return this._optional=!0,this}};Ce=class extends E{validate(t){return this._optional&&t===void 0?!0:B(t)?B(this._min)&&t<this._min?this.fail(`the value of ${this.path} should be greater than or equal to ${this._min}`):B(this._max)&&t>this._max?this.fail(`the value of ${this.path} should be less than or equal to ${this._max}`):B(this._greater)&&t<=this._greater?this.fail(`the value of ${this.path} should be greater than ${this._greater}`):this._isInt&&t!==Math.floor(t)?this.fail(`the value of ${this.path} should be integer but got ${t}`):!0:this.fail({expect:"number",actual:t})}min(t){return this._min=t,this}max(t){return this._max=t,this}isInt(t){return this._isInt=t,this}greater(t){return this._greater=t,this}},Ne=class extends E{validate(t){return this._optional&&t===void 0?!0:typeof t!="boolean"?this.fail({expect:"boolean",actual:t}):!0}},Oe=class extends E{validate(t){if(this._optional&&t===void 0)return!0;if(typeof t!="string")return this.fail({expect:"string",actual:t});if(B(this._maxLength)&&t.length>this._maxLength)return this.fail(`the length of ${this.path} should be less than or equal to ${this._maxLength}`);if(B(this._minLength)&&t.length<this._minLength)return this.fail(`the length of ${this.path} should be greater than or equal to ${this._minLength}`);if(typeof this._pattern=="string"){if(!new RegExp(this._pattern).test(t))return this.fail(`${this.path} should match pattern "${this._pattern}"`)}else if(this._pattern&&!this._pattern.test(t))return this.fail(`${this.path} should match pattern "${this._pattern.toString()}"`);return!0}minLength(t){return this._minLength=t,this}maxLength(t){return this._maxLength=t,this}pattern(t){return this._pattern=t,this}},De=class extends E{validate(t){return this._optional&&t===void 0?!0:typeof t!="symbol"?this.fail({expect:"symbol",actual:t}):!0}},ae=class extends E{validate(t){return!0}},Ue=class extends E{validate(t){return t!==void 0?this.fail({expect:"undefined",actual:t}):!0}},Me=class extends E{validate(t){return this._optional&&t===void 0?!0:t!==null?this.fail({expect:"null",actual:t}):!0}},Le=class extends E{validate(t){return this._optional&&t===void 0?!0:typeof t!="function"?this.fail({expect:"function",actual:t}):!0}},Fe=class extends E{constructor(...t){super(),this._items=t}validate(t){if(this._optional&&t===void 0)return!0;if(!this._items.includes(t)){let r=this._items.map(n=>JSON.stringify(n)).join(", ");return this.fail(`expect ${this.path} to be one of ${r}, but got ${At(t)}`)}return!0}},je=class extends E{constructor(r){super();this._item=r}validate(r){if(this._optional&&r===void 0)return!0;if(!Array.isArray(r))return this.fail({expect:"array",actual:r});if(B(this._minItems)&&r.length<this._minItems)return this.fail(`the length of ${this.path} should be greater than or equal to ${this._minItems}`);if(B(this._maxItems)&&r.length>this._maxItems)return this.fail(`the length of ${this.path} should be less than or equal to ${this._maxItems}`);if(B(this._length)&&r.length!==this._length)return this.fail(`the length of ${this.path} should be equal to ${this._length}`);let n=this._item;if(!n)return!0;let o=!0;if(r.forEach((s,i)=>{if(n.path=`${this.path}[${i}]`,n.errors=this.errors,s===void 0&&n.hasDefault){r[i]=n.defaultValue;return}n.validate(s)||(n.hasFallback?r[i]=n.fallbackValue:o=!1)}),this._uniqueItems){let s=new Map;for(let i in r)s.has(r[i])?o=this.fail(`${this.path} should NOT have duplicate items (${this.path}[${s.get(r[i])}] and ${this.path}[${i}] are identical)`):s.set(r[i],i)}return o}minItems(r){return this._minItems=r,this}maxItems(r){return this._maxItems=r,this}uniqueItems(){return this._uniqueItems=!0,this}length(r){return this._length=r,this}},Je=class extends E{constructor(r){super();this._value=r}validate(r){if(this._optional&&r===void 0)return!0;if(Pt(r)!=="object")return this.fail({expect:"object",actual:r});let o=r,s=this._value;s.errors=this.errors;let i=!0;for(let a in o){let l=o[a];if(/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/.test(a)?s.path=`${this.path}.${a}`:s.path=`${this.path}["${a}"]`,!(l===void 0&&s._optional)){if(l===void 0&&s.hasDefault){o[a]=s.defaultValue;continue}s.validate(l)||(s.hasFallback?o[a]=s.fallbackValue:i=!1)}}return i}},$e=class extends E{constructor(r={}){super();this._object=r}validate(r){if(this._optional&&r===void 0)return!0;if(Pt(r)!=="object")return this.fail({expect:"object",actual:r});let n=r,o=!0;for(let s in this._object){let i=n[s],a=this._object[s];if(a.errors=this.errors,/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/.test(s)?a.path=`${this.path}.${s}`:a.path=`${this.path}["${s}"]`,!(a._optional&&i===void 0)){if(i===void 0&&a.hasDefault){n[s]=a.defaultValue;continue}a.validate(i)||(a.hasFallback?n[s]=a.fallbackValue:o=!1)}}return o}},Ve=class extends E{constructor(r){super();this.value=r}validate(r){return r===void 0&&this._optional?!0:r!==this.value?this.fail({expect:At(this.value),actual:r}):!0}},Ke=class extends E{constructor(...t){super(),this._items=t}validate(t){if(t===void 0&&this._optional)return!0;let r=[],n=!1,o=this._items.length;for(let s=0;s<o;s++){let i=this._items[s];if(i.errors=[],i.path=this.path,!i.validate(t))r.push(i.errors.join("; "));else if(!n){n=!0;break}}if(!n){let s=r.join(`
|
|
2
|
-
or `);this.errors.push(
|
|
3
|
-
`);throw e.errors.length=0,wt(!1),new TypeError(n)}}var c,Ot=f(()=>{"use strict";Ct();Ct();c={object(e){return new $e(e)},array(e){return new je(e)},tuple(...e){return new He(...e)},literal(e){return new Ve(e)},or(...e){return new Ke(...e)},symbol(){return new De},record(e){return new Je(e)},function(){return new Le},boolean(){return new Ne},string(){return new Oe},number(){return new Ce},undefined(){return new Ue},null(){return new Me},unknown(){return new ae},any(){return new ae},as(){return new ae},arraybuffer(){return new Be},enum(...e){return new Fe(...e)},typedarray(e){return new qe(e)}}});var Ge,Gr,zr=f(()=>{"use strict";v();U();Ot();Q();Ge=1,Gr=e=>{function t(n,o){return(...s)=>{let i=Date.now(),a={method:n,trace_id:Ge};Ge+=1;let l="SUCCESS",u=`${n}:ok`,m=0;try{if(o.paramsSchema)try{Nt(o.paramsSchema,s,"params")}catch(b){throw mt(`${n}:fail ${b.message}`)}let p=o.implement(...s),d=p,g=`${n}:ok`;if(p&&"code"in p){let{code:b,data:A,message:N}=p;l=b,d=A,g=N}return{code:l,message:g,data:d}}catch(p){let d=p;m=d.code??d.errNo??2e3,l="FAILURE";let g=d.message??d.errMsg??`${p}`;return u=`${n}:${l} ${g.replace(/^\S+:(fail|cancel)\s?/,"")}`,I(new fe(u,m)),{code:l,message:u}}finally{let p=Date.now()-i;e("apiInvoked",{...a,duration:p,status:l})}}}function r(n,o){return async(...s)=>{let i=Vt(s)?s:[s],a=Date.now(),l={method:n,trace_id:Ge};Ge+=1;let u=`${n}:ok`,m="SUCCESS",p={code:m,message:u};try{if(o.paramsSchema)try{Nt(o.paramsSchema,i,"params")}catch(b){throw mt(b.message)}let g=await o.implement(...i);if(g&&"code"in g){let{code:b,data:A,message:N}=g;m=b,u=N,g=A}return Object.assign(p,{code:m,message:u,data:g}),p}catch(d){let g=d,b=g.code??g.errNo??2e3;m="FAILURE";let A=g.message??g.errMsg??`${d}`,N=`${n}:${m} ${A.replace(/^\S+:(fail|cancel)\s?/,"")}`;return Object.assign(p,{code:m,message:N}),I(new fe(N,b)),p}finally{let d=Date.now()-a;e("apiInvoked",{...l,duration:d,status:m})}}}return{createAPI:r,createSyncAPI:t}}});var _,x,h,q=f(()=>{"use strict";Br();oe();zr();Ot();({createAPI:_,createSyncAPI:x}=Gr($)),h=Hr("native")});var Qr=gn(Yr=>{"use strict";v();q();U();L();oe();var bo="exitGame",ko="onReady",To="onJoliboxShow",Eo="onJoliboxHide",ze=R(),We=Te(I),_o=_(bo,{paramsSchema:c.tuple(c.function()),implement:async e=>{We(e).call(Yr),await O("exitAppAsync")}}),So=x(To,{paramsSchema:c.tuple(c.function()),implement(e){let t=We(e);J("onJoliboxEnterForeground",()=>{t.call(this),we.emit("visible",!0)})}}),Ro=x(Eo,{paramsSchema:c.tuple(c.function()),implement(e){let t=We(e);J("onJoliboxEnterBackground",()=>{t.call(this),we.emit("visible",!1)})}}),xo=x(ko,{paramsSchema:c.tuple(c.function()),implement(e){let t=We(e);K.on("LifecycleEvent.onReady",r=>{t(r)})}});ze.registerCommand("LifecycleSDK.exit",_o);ze.registerCommand("LifecycleSDK.onReady",xo);ze.registerCommand("LifecycleSDK.onJoliboxShow",So);ze.registerCommand("LifecycleSDK.onJoliboxHide",Ro);h("lifeCycle.exit",{version:"1.0.0"});h("lifeCycle.onReady",{version:"1.0.0"});h("lifeCycle.onJoliboxShow",{version:"1.0.0"});h("lifeCycle.onJoliboxHide",{version:"1.0.0"})});L();_e();H();v();oe();M.onReady(()=>{});M.doExit(()=>($("onBeforeExit",{timestamp:Date.now()}),D.close(Date.now()-Ae),!1));function mo(){K.on("onDocumentReady",()=>{X?.onDocumentReady(window.location.href),$("onDocumentReady",{start_timestamp:Ae,timestamp:Date.now()})})}function po(){J("onJoliboxServiceReady",({runtimeInfo:e,loadDuration:t})=>{e&&y.onEnvConfigChanged({hostUserInfo:e}),K.emit("LifecycleEvent.onReady",{...y.hostUserInfo?y.hostUserInfo:{isLogin:!1}}),$("joliboxServiceReady",{start_timestamp:Ae,timestamp:Date.now()}),D.start(t)}),J("onBeforeExit",({uuid:e})=>{X?.doExit(e)})}var Ae;function Kr(){Ae=Date.now(),po(),mo()}v();q();L();var Wr=R(),go="env",ho="getSystemInfoSync",vo=x(ho,{implement:()=>{let e=w("envSync"),{data:t}=e;return{system:t.deviceInfo.system,platform:t.deviceInfo.platform,version:t.sdkInfo.jssdkVersion,pixelRatio:t.deviceInfo.pixelRatio,language:t.deviceInfo.lang,brand:t.deviceInfo.brand,appName:t.hostInfo?.appName,SDKVersion:t.sdkInfo.jssdkVersion}}}),yo=x(go,{implement:()=>w("envSync")?.data??void 0});Wr.registerCommand("API.getSystemInfoSync",vo);Wr.registerCommand("API.env",yo);h("env",{version:"1.0.0"});h("getSystemInfoSync",{version:"1.0.0"});var Qc=vn(Qr());Q();xt();q();v();function Xr(e){let t={};if(!C(e))return t;for(let[r,n]of Object.entries(e)){let o=r.toLocaleLowerCase();n?typeof n=="object"?t[o]=Object.prototype.toString.call(n):t[o]=String(n):t[o]=""}return t}function Zr(e="GET"){if(e==="")return"POST";let t=e.toUpperCase();return["GET","OPTIONS","HEAD","POST","PUT","DELETE","TRACE","CONNECT","PATCH"].includes(t)?t:"GET"}function en(e,t=!1){if(e)return t||e>0&&e<=6e4?Math.ceil(e):6e4}function tn(e,t,r){if(["POST","PUT","PATCH"].includes(t)||!C(r))return e;let[n,o=""]=e.split("?"),s=JSON.stringify({...JSON.parse(o),...r});return`${n}?${s}`}v();U();var Io=15,wo=xe("createRequestTaskSync","operateRequestTaskSync",{type:"public"}),Dt=0,Ut=[],rn=Te(I),Ao=(e,t)=>{let r=e.filter(t),n=e.filter(o=>!t(o));return e.length=0,e.push(...n),r},Po=e=>{let t=new W,r=()=>{};return _("request",{paramsSchema:c.tuple(c.object({url:c.string(),method:c.string(),header:c.object(),data:c.object().optional(),query:c.object().optional(),dataType:c.string().default("json"),responseType:c.string().default("text"),enableCache:c.boolean().default(!1),appendHostCookie:c.boolean().default(!0),timeout:c.number().default(3e4),success:c.function(),fail:c.function()})),implement(o){let s=async()=>{let i=rn(o.fail);try{if(Dt+=1,t.state!=="pending")return;let{data:a,dataType:l,responseType:u,enableCache:m,appendHostCookie:p}=o,d=Xr(o.header),g=Zr(o.method),b=en(o.timeout),A=tn(o.url,g,a),N=rn(o.success),G=Object.assign({},o,{method:g,header:d,data:g==="GET"||g==="HEAD"?void 0:a,enableCache:m,query:o.query??{},dataType:l,responseType:u,appendHostCookie:p});b&&(G.timeout=b);let z=wo(A,G);{let{response:T}=await z,{code:P,data:ue,message:Xe}=T;t.resolve({code:P??"SUCCESS",data:ue,message:Xe??"request:ok"}),N({code:"SUCCESS",message:"request:ok",data:ue})}}catch(a){t.reject(a),i({code:"FAILURE",message:"httpRequst: failed"})}finally{Dt-=1,Ut.shift()?.()}};return Dt>=Io?(r=()=>{Ao(Ut,i=>i===s)},Ut.push(s)):s(),t.promise}})(e),{abort(){t.reject(re({code:-1,msg:"request:fail abort"})),r()}}},Co=R();Co.registerCommand("HttpSDK.request",Po);h("request",{version:"1.0.0"});q();L();v();It();H();var Ye=R(),No=_("getLocalStorage",{paramsSchema:c.tuple(c.string()),async implement(e){let{response:t}=await se(`/api/games/user-storage/${y.mpId}`,{method:"GET",responseType:"json",appendHostCookie:!0,query:{key:e}}),{data:{code:r,message:n,data:o}}=await t;if(r==="SUCCESS")return{code:r,message:n,data:o?.value};try{let{data:{data:s,dataType:i}}=await O("getLocalStorageAsync",{key:e}),a=Fo(s,i);return{code:r,message:`${n}. fallback to native`,data:a}}catch{return{code:"INTERNAL_ERROR",message:"[Jolibox SDK] get local storage failed",data:null}}}});Ye.registerCommand("StorageSDK.getItem",No);h("storage.getItem",{version:"1.0.0",properties:{key:"1.0.0",value:"1.0.0"}});var Oo=_("setStorage",{paramsSchema:c.tuple(c.string(),c.or(c.string(),c.boolean(),c.number())),async implement(e,t){let r=y.mpId,n=typeof t=="string"?t:String(t),{response:o}=await se(`/api/games/user-storage/${r}`,{method:"POST",responseType:"json",appendHostCookie:!0,data:{key:e,value:n}}),{data:{code:s,message:i}}=o,a=Lo(t),l=jo(t,a);return await O("setLocalStorageAsync",{key:e,data:l,dataType:a}),s=="SUCCESS"?{code:s,message:i}:{code:s,message:`${i}. fallback to native`}}});Ye.registerCommand("StorageSDK.setItem",Oo);h("storage.setItem",{version:"1.0.0",properties:{key:"1.0.0",value:"1.0.0"}});var Do=_("removeStorage",{paramsSchema:c.tuple(c.string()),async implement(e){let t=y.mpId,{response:r}=await se(`/api/games/user-storage/${t}/remove`,{method:"POST",responseType:"json",appendHostCookie:!0,data:{key:e}}),{data:{code:n,message:o}}=r;return await O("removeLocalStorageAsync",{key:e}),n==="SUCCESS"?{code:n,message:o}:{code:n,message:"[Jolibox SDK] remove item succ"}}});Ye.registerCommand("StorageSDK.removeItem",Do);h("storage.removeItem",{version:"1.0.0",properties:{key:"1.0.0"}});var Uo=_("clearStorage",{async implement(){let e=y.mpId,{response:t}=await se(`/api/games/user-storage/${e}/clear`,{method:"POST",appendHostCookie:!0});O("clearLocalStorageAsync");let{data:{code:r,message:n}}=t;return r==="SUCCESS"?{code:r,message:n}:{code:r,message:`${n}.fallback to native`}}});Ye.registerCommand("StorageSDK.clear",Uo);h("storage.clear",{version:"1.0.0"});var Cc=_("getStorageInfo",{async implement(){let{data:e}=await O("getStorageInfoAsync");return e}});h("getStorageInfo",{version:"1.0.0",success:{keys:"1.0.0",currentSize:"1.0.0",limitSize:"1.0.0"}});var Nc=x("getStorageInfoSync",{implement(){return w("getStorageInfoSync")}}),Mo=["string","number","boolean","object",""];function Lo(e){let t=Object.prototype.toString.call(e).split(" ")[1].split("]")[0].toLocaleLowerCase();return Mo.includes(t)?t:""}function Fo(e,t){try{switch(t){case"string":return e;case"object":return JSON.parse(e);case"number":return parseFloat(e);case"boolean":return e==="true";default:return""}}catch{return""}}function jo(e,t){try{switch(t){case"string":case"number":case"boolean":return`${e}`;case"object":return JSON.stringify(e);default:return""}}catch{return""}}v();L();q();var Jo=x("showKeyboard",{paramsSchema:c.tuple(c.object({defaultValue:c.string().optional().default(""),multiple:c.boolean().optional().default(!1),maxLength:c.unknown().optional().default(1e5)})),implement(e){let t=Math.floor(Number(e.maxLength)??1e5),{defaultValue:r}=e;r&&t&&(r=r.slice(0,t)),w("showKeyboardSync",{...e,defaultValue:r,maxLength:t})}});h("keyboard.showKeyboard",{version:"1.0.0",properties:{params:{defaultValue:"1.0.0",multiple:"1.0.0",confirmHold:"1.0.0",confirmType:"1.0.0",maxLength:"1.0.0"}},success:{errMsg:"1.0.0"}});var $o=x("updateKeyboard",{paramsSchema:c.tuple(c.object({value:c.string()})),implement(e){w("updateKeyboardSync",e)}});h("keyboard.updateKeyboard",{version:"1.0.0",properties:{params:{value:"1.0.0"}}});var Vo=x("hideKeyboard",{implement(){w("hideKeyboardSync")}});h("keyboard.hideKeyboard",{version:"1.0.0"});var Mt=R();Mt.registerCommand("KeyboardSDK.showKeyboard",Jo);Mt.registerCommand("KeyboardSDK.updateKeyboard",$o);Mt.registerCommand("KeyboardSDK.hideKeyboard",Vo);v();q();oe();var ce=R(),Ko=_("levelFinished",{paramsSchema:c.tuple(c.string(),c.object({result:c.boolean(),duration:c.number()})),implement:async(e,t)=>{let{result:r,duration:n}=t,o=[];o.push(D.tracker("LevelFinished",{levelId:e,result:r,duration:n})),o.push(D.reporter({event:"COMPLETE_GAME_LEVEL"})),await Promise.all(o)}}),Ho=_("taskFinished",{paramsSchema:c.tuple(c.string(),c.object({duration:c.number()})),implement:async(e,t)=>{let{duration:r}=t;return await D.reportToNative({event:"TaskFinished",params:{duration:r,taskId:e}})}}),Bo=_("levelUpgrade",{paramsSchema:c.tuple(c.string(),c.string()),implement:async(e,t)=>{let r=[];r.push(D.reportToNative({event:"LevelUpgrade",params:{name:t,levelId:e}})),await Promise.all(r)}}),qo=_("onHistoryUserLevel",{paramsSchema:c.tuple(c.number()),implement:async e=>await D.reportToNative({event:"HistoryUserLevel",params:{level:e}})}),Go=_("onHistoryUserScore",{paramsSchema:c.tuple(c.number()),implement:async e=>await D.reportToNative({event:"HistoryUserScore",params:{score:e}})}),zo=_("taskEvent",{paramsSchema:c.tuple(c.string(),c.object({tools:c.array(c.object({id:c.string(),name:c.string(),count:c.number(),description:c.string().optional(),price:c.object({amount:c.number(),unit:c.string()}).optional()})).optional(),awards:c.array(c.object({id:c.string(),name:c.string()})).optional()})),implement:async(e,t)=>{let r=[];r.push(D.reportToNative({event:"TaskEvent",params:{taskId:e,...t}})),(t.tools?.length??!1)&&(r.push(D.reporter({event:"USE_GAME_ITEM"})),r.push(D.reportToNative({event:"UseGameItem",params:{taskId:e,...t}}))),await Promise.all(r)}});ce.registerCommand("TaskTrackerSDK.levelFinished",Ko);ce.registerCommand("TaskTrackerSDK.taskFinished",Ho);ce.registerCommand("TaskTrackerSDK.levelUpgrade",Bo);ce.registerCommand("TaskTrackerSDK.historyUserLevel",qo);ce.registerCommand("TaskTrackerSDK.historyUserScore",Go);ce.registerCommand("TaskTrackerSDK.taskEvent",zo);h("TaskTrackerSDK.onLevelFinished",{version:"1.0.0",properties:{levelId:"1.0.0",params:{result:"1.0.0",duration:"1.0.0"}}});h("TaskTrackerSDK.onTaskFinished",{version:"1.0.0",properties:{taskId:"1.0.0",duration:"1.0.0"}});h("TaskTrackerSDK.onLevelUpgrade",{version:"1.0.0",properties:{levelId:"1.0.0",name:"1.0.0"}});h("TaskTrackerSDK.onHistoryUserLevel",{version:"1.0.0",properties:{level:"1.0.0"}});h("TaskTrackerSDK.onHistoryUserScore",{version:"1.0.0",properties:{score:"1.0.0"}});h("TaskTrackerSDK.onTaskEvent",{version:"1.0.0",properties:{taskId:"1.0.0",params:{tools:{id:"1.0.0",name:"1.0.0",count:"1.0.0",description:"1.0.0",price:{amount:"1.0.0",unit:"1.0.0"}},awards:{id:"1.0.0",name:"1.0.0"}}}});H();L();q();v();Q();h("login",{version:"1.0.0",properties:{force:"1.0.0"},success:{errMsg:"1.0.0",code:"1.0.0",token:"1.0.0",isLogin:"1.0.0"}});h("checkSession",{version:"1.0.0",success:{errMsg:"1.0.0"}});var Wo=_("login",{async implement(){let{data:{isLogin:e}}=await O("checkLoginAsync");if(e)return{isLogin:!0,token:y.hostUserInfo?.token};J("onLoginStateChange",({isLogin:i,token:a,uuid:l})=>{l==r&&o({isLogin:i,token:a})});let t=w("loginSync"),{data:{uuid:r}}=t;if(!r)throw re({code:-1,msg:"login failed"});let{promise:n,resolve:o}=new W,s=await n;return y.onEnvConfigChanged({hostUserInfo:s}),K.emit("onLoginComplete",s),s}}),Yo=_("checkSession",{async implement(){let{data:{isLogin:e}}=await O("checkLoginAsync");return{isLogin:e}}}),nn=R();nn.registerCommand("API.login",Wo);nn.registerCommand("API.checkSession",Yo);v();q();var Qe=R(),Qo=x("adInit",{implement:e=>{S.log("[JoliboxAdsSDK] adInit",e)}}),Xo=x("adConfig",{implement:e=>{S.log("[JoliboxAdsSDK] adConfig",e)}}),Zo=x("adBreak",{implement:e=>{S.log("[JoliboxAdsSDK] adBreak",e)}}),es=x("adUnit",{implement:e=>{S.log("[JoliboxAdsSDK] adUnit",e)}});Qe.registerCommand("AdsSDK.init",Qo);Qe.registerCommand("AdsSDK.adConfig",Xo);Qe.registerCommand("AdsSDK.adBreak",Zo);Qe.registerCommand("AdsSDK.adUnit",es);h("AdsSDK.init",{version:"1.0.0"});h("AdsSDK.adConfig",{version:"1.0.0"});h("AdsSDK.adBreak",{version:"1.0.0"});h("AdsSDK.adUnit",{version:"1.0.0"});oe();Kr();
|
|
1
|
+
var gn=Object.create;var Jt=Object.defineProperty;var vn=Object.getOwnPropertyDescriptor;var yn=Object.getOwnPropertyNames;var bn=Object.getPrototypeOf,Tn=Object.prototype.hasOwnProperty;var h=(e,t)=>()=>(e&&(t=e(e=0)),t);var kn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var En=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of yn(t))!Tn.call(e,s)&&s!==r&&Jt(e,s,{get:()=>t[s],enumerable:!(n=vn(t,s))||n.enumerable});return e};var Sn=(e,t,r)=>(r=e!=null?gn(bn(e)):{},En(t||!e||!e.__esModule?Jt(r,"default",{value:e,enumerable:!0}):r,e));function In(e){return!!e?.__nativeBuffers__}function de(e){if(typeof e=="string")try{e=JSON.parse(e)}catch{return{}}if(typeof e!="object"||e===null)return{};if(!In(e))return e;let t=e.__nativeBuffers__;if(delete e.__nativeBuffers__,t)for(let r=0;r<t.length;r++){let n=t[r];if(n){let s;n.value?s=n.value:n.base64&&(s=wn(n.base64)),typeof s<"u"&&s instanceof ArrayBuffer&&(e[n.key]=s)}}return e}function $t(e={},t=!1){let r=e,n=[];for(let[s,o]of Object.entries(r))if(o!==void 0&&o instanceof ArrayBuffer&&o.byteLength!==void 0){let i=t?{value:o,key:s}:{base64:_n(o),key:s};n.push(i),delete r[s]}return n.length>0&&(r.__nativeBuffers__=n),r}var wn,_n,st=h(()=>{"use strict";wn=e=>{let t=atob(e),r=t.length,n=new Uint8Array(r);for(let s=0;s<r;s++)n[s]=t.charCodeAt(s);return n.buffer};_n=e=>{let t="",r=new Uint8Array(e),n=r.byteLength;for(let s=0;s<n;s++)t+=String.fromCharCode(r[s]);return btoa(t)}});function xn(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}function te(e){return typeof e=="string"}function P(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!(e instanceof RegExp)&&!(e instanceof Date)}function qt(e){return typeof e=="object"&&Array.isArray(e)}function Pn(e){return typeof e>"u"}function Cn(e){return Pn(e)||e===null}function Gt(e){return typeof e=="function"}function zt(e){return P(e)&&Gt(e.then)}function Wt(e){let t=e,r=null,n=function(...s){return r||(r=new t(...s)),r};return n.prototype=t.prototype,n}function Yt(e,t,r){if(typeof r!="function")throw new Error("[Jolibox SDK]Customizer must be a function");function n(s,o){for(let i in o)if(Object.prototype.hasOwnProperty.call(o,i)){let a=s[i],d=o[i],l=r(a,d,i,s,o);l!==void 0?s[i]=l:Ht(d)&&Ht(a)?s[i]=n({...a},d):Array.isArray(d)&&Array.isArray(a)?s[i]=[...a,...d]:s[i]=d}return s}return n(e,t)}function Ht(e){return e&&typeof e=="object"&&e.constructor===Object}function Qt(e,t){if(Array.isArray(e))return e.concat(t)}function pe(e,t,r={}){let n=null,s,o,i,{leading:a=!1,trailing:d=!0}=r,l=()=>(i=e.apply(o,s),s=void 0,o=void 0,i),u=function(...p){s=p,o=this;let m=a&&!n;if(n&&clearTimeout(n),n=setTimeout(()=>{n=null,d&&!m&&l()},t),m)return l()};return u.cancel=()=>{n&&clearTimeout(n),n=null,s=o=void 0},u.flush=()=>{if(n)return clearTimeout(n),n=null,l()},u}function Fn(e,t){return(...r)=>t(e,...r)}function ke(e){return t=>Fn(t,function(r,...n){if(typeof r=="function")try{return r.apply(this,n)}catch(s){e(new dt(`${s}`))}})}function ue(e){return(...t)=>{(globalThis.VConsole?.[e]??globalThis.console[e])(...t)}}function zn(e){return new Promise(t=>ir(e)(t))}function ir(e){return(t,r=null)=>{let n=!1;return e(s=>{if(!n)return n=!0,t.call(r,s)},null)}}function Wn(e,t){return(r=>{let n,s={onWillAddFirstListener(){n=r(o.fire,o)}},o=new me(s);return o.event})((r,n=null)=>e(s=>t(s)&&r.call(n,s),null))}function Qn(e,t){let r=Math.min(e.length,t.length);for(let n=0;n<r;n++)Xn(e[n],t[n])}function Xn(e,t){if(te(t)){if(typeof e!==t)throw new Error(`argument does not match constraint: typeof ${t}`)}else if(Gt(t)){try{if(e instanceof t)return}catch{}if(!Cn(e)&&e.constructor===t||t.length===1&&t.call(void 0,e)===!0)return;throw new Error("[Jolibox SDK]argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true")}}function I(){if(globalThis[it])return globalThis[it];let e=new be,t=new ct,r={registerCommand(n,s,o){e.registerCommand({id:n,handler:s,metadata:o})},executeCommand(n,...s){return t.executeCommand(n,...s)},excuteCommandSync(n,...s){return t.executeCommandThowErr(n,...s)}};return globalThis[it]=r,r}var Vt,Rn,An,Kt,Y,Nn,lt,re,On,dt,Xt,Zt,er,tr,rr,fe,Te,ut,C,nr,Dn,mt,Un,pt,Mn,Ln,ge,Bn,jn,Jn,sr,ft,$n,Hn,Vn,or,T,Kn,qn,ve,me,Q,at,Gn,ot,Yn,V,be,ct,it,v=h(()=>{"use strict";Vt=Object.defineProperty,Rn=Object.getOwnPropertyDescriptor,An=(e,t)=>{for(var r in t)Vt(e,r,{get:t[r],enumerable:!0})},Kt=(e,t,r,n)=>{for(var s=n>1?void 0:n?Rn(t,r):t,o=e.length-1,i;o>=0;o--)(i=e[o])&&(s=(n?i(t,r,s):i(s))||s);return n&&s&&Vt(t,r,s),s};Y=class{constructor(){this.state="pending",this.promise=new Promise((e,t)=>{this.resolve=r=>{this.state==="pending"&&(this.state="fulfilled",e(r))},this.reject=r=>{this.state==="pending"&&(this.state="rejected",t(r))}})}};Nn=(e=>(e[e.DEVELOPER_FILE_NOT_FOUND=0]="DEVELOPER_FILE_NOT_FOUND",e[e.INTERNAL_IOS_CAN_NOT_FOUND_PKG=1]="INTERNAL_IOS_CAN_NOT_FOUND_PKG",e[e.USER_IOS_LOAD_TIMEOUT=2]="USER_IOS_LOAD_TIMEOUT",e[e.INTERNAL_IOS_PKG_LOAD_ERROR=3]="INTERNAL_IOS_PKG_LOAD_ERROR",e[e.INTERNAL_IOS_PKG_PARSE_FAIL=4]="INTERNAL_IOS_PKG_PARSE_FAIL",e[e.USER_IOS_GET_EMPTY_DATA=5]="USER_IOS_GET_EMPTY_DATA",e[e.USER_ANDROID_GET_PKG_FAIL=6]="USER_ANDROID_GET_PKG_FAIL",e[e.DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE=7]="DEVELOPER_ANDROID_PACKAGE_FILE_UNEXPECTED_REQUIRE",e))(Nn||{}),lt=class extends Error{constructor(e){if(typeof e=="string"){super(e),this.priority="P1";return}super(e.message),this.priority="P1",this.stack=e.stack,this.raw=e}},re=class extends lt{constructor(){super(...arguments),this.kind="INTERNAL_ERROR"}},On=class extends lt{constructor(){super(...arguments),this.kind="USER_ERROR"}},dt=class extends On{constructor(e,t,r){super(e),this.message=e,this.errNo=t,this.name="USER_CUSTOM_ERROR",this.errMsg=e,r&&(this.extra=Object.assign({},this.extra,r))}},Xt=class extends re{constructor(){super(...arguments),this.name="INTERNAL_SCHEMA_PARSE_ERROR",this.priority="P0"}},Zt=class extends re{constructor(){super(...arguments),this.name="INTERNAL_INVOKE_NATIVE_ERROR"}},er=class extends re{constructor(e,t,r,n){super(e),this.errNo=t,this.name="INTERNAL_APPLY_NATIVE_ERROR",this.errorType=r,this.errorCode=n}},tr=class extends re{constructor(){super(...arguments),this.name="INTERNAL_JSCORE_ERROR",this.priority="P0"}},rr=class extends re{constructor(e,t){super(e),this.message=e,this.name="INTERNAL_CONTEXT_ERROR",this.property=t}},fe=class extends lt{constructor(e,t,r,n,s){super(e),this.message=e,this.code=t,this.kind="API_ERROR",this.name="API_ERROR",r&&(this.errorType=r),n!==void 0&&(this.stack=n),s&&(this.priority=s)}toJSON(){return{message:this.message,stack:this.stack,name:this.name,code:this.code,errorType:this.errorType}}},Te=class extends re{constructor(){super(...arguments),this.name="INTERNAL_METRIC_REPORT_ERROR"}},ut=class extends re{constructor(){super(...arguments),this.name="INTERNAL_REPORTER_ERROR"}};C={log:ue("log"),warn:ue("warn"),info:ue("info"),error:ue("error"),debug:ue("debug")};Object.assign(globalThis,{logger:C});nr=Symbol.for("Jolibox.canIUseMap"),Dn={};globalThis[nr]=Dn;mt={get config(){return globalThis[nr]}},Un=(e=>(e[e.System=1e3]="System",e[e.ErrorTrace=1001]="ErrorTrace",e[e.UserDefined=1002]="UserDefined",e))(Un||{}),pt=(e=>(e.MiniGame="mini-game",e.MiniDrama="mini-drama",e.App="app",e.WebSDK="web-sdk",e.AppSDK="app-sdk",e))(pt||{}),Mn=(e=>(e[e.App=0]="App",e[e.H5=1]="H5",e[e.Weapp=2]="Weapp",e[e.Alipay=3]="Alipay",e[e.Gcash=4]="Gcash",e[e.Dana=5]="Dana",e[e.Umma=6]="Umma",e[e.WebSDK=1e3]="WebSDK",e[e.AppSDK=1001]="AppSDK",e[e.Other=9999]="Other",e))(Mn||{}),Ln=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)}),ge={isiOS:navigator.userAgent.includes("iPhone")||navigator.userAgent.includes("iPod")||navigator.userAgent.includes("iPad")||navigator.userAgent.includes("iPhone OS"),iosVersion:()=>{let e=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);return[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3]||"0",10)]},isAndroid:navigator.userAgent.includes("Android"),isMac:navigator.userAgent.includes("Mac"),isFacebook:navigator.userAgent.includes("FB_IAB"),isPC:!navigator.userAgent.includes("iPhone")&&!navigator.userAgent.includes("Android")},Bn=()=>ge.isiOS?"iOS":ge.isAndroid?"Android":ge.isMac?"Mac":ge.isFacebook?"Facebook":"PC",jn="device_id",Jn="advertising_id",sr=e=>(localStorage.getItem(e)||localStorage.setItem(e,Ln()),localStorage.getItem(e)),ft=()=>sr(jn),$n=()=>sr(Jn),Hn=e=>e.charAt(0).toUpperCase()+e.slice(1),Vn=()=>{let e=new URLSearchParams(window.location.search);return Hn(e.get("utm_source")??"")||"JoliboxSDK"},or=e=>{let t="JoliboxWebSDK",r=Bn(),n=navigator.language,s=ft(),o=$n();return`${t} (${Vn()}${r}; UnknownModel; UnknownSystemVersion; ${n}) uuid/${s} adid/${o} version/${e||""}`},T=class ye{static{this.Undefined=new ye(void 0)}constructor(t){this.element=t,this.next=ye.Undefined,this.prev=ye.Undefined}},Kn=class{constructor(){this._first=T.Undefined,this._last=T.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===T.Undefined}clear(){let e=this._first;for(;e!==T.Undefined;){let t=e.next;e.prev=T.Undefined,e.next=T.Undefined,e=t}this._first=T.Undefined,this._last=T.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){let r=new T(e);if(this._first===T.Undefined)this._first=r,this._last=r;else if(t){let s=this._last;this._last=r,r.prev=s,s.next=r}else{let s=this._first;this._first=r,r.next=s,s.prev=r}this._size+=1;let n=!1;return()=>{n||(n=!0,this._remove(r))}}shift(){if(this._first!==T.Undefined){let e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==T.Undefined){let e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==T.Undefined&&e.next!==T.Undefined){let t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===T.Undefined&&e.next===T.Undefined?(this._first=T.Undefined,this._last=T.Undefined):e.next===T.Undefined?(this._last=this._last.prev,this._last.next=T.Undefined):e.prev===T.Undefined&&(this._first=this._first.next,this._first.prev=T.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==T.Undefined;)yield e.element,e=e.next}},qn=0,ve=class{constructor(e){this.value=e,this.id=qn++}},me=class{constructor(e){this.options=e,this._size=0}dispose(e){this._disposed||(this._disposed=!0,this._listeners&&(e?(this._listeners instanceof ve&&(this._listeners=[this._listeners]),this._listeners=this._listeners.filter(t=>t?.value===e)):(this._listeners=void 0,this._size=0)),this.options?.onDidRemoveLastListener?.())}get event(){return this._event??=(e,t)=>{if(this._disposed)return()=>{console.info("[Jolibox SDK] Emitter is _disposed")};t&&(e=e.bind(t));let r=new ve(e);this._listeners?this._listeners instanceof ve?this._listeners=[this._listeners,r]:this._listeners.push(r):(this.options?.onWillAddFirstListener?.(this),this._listeners=r,this.options?.onDidFirstListener?.(this)),this.options?.onDidAddListener?.(this),this._size++},this._event}_deliver(e,t){if(!e)return;let r=this.options?.onListenerError||Error.constructor;if(!r){e.value(t);return}try{e.value(t)}catch(n){r(n)}}fire(e){this._listeners&&(this._listeners instanceof ve?this._deliver(this._listeners,e):this._listeners.forEach(t=>this._deliver(t,e)))}hasListeners(){return this._size>0}},Q=class{constructor(){this.listeners=new Map,this.listerHandlerMap=new WeakMap,this.cachedEventQueue=new Map}on(e,t){let r=this.listeners.get(e)??new me,n=o=>t(...o.args);this.listerHandlerMap.set(t,n),r.event(n),this.listeners.set(e,r);let s=this.cachedEventQueue.get(e);if(s)for(;s.size>0;)r.fire({event:e,...s.shift()})}off(e,t){let r=this.listeners.get(e);if(r){let n=this.listerHandlerMap.get(t);r.dispose(n)}}emit(e,...t){let r=this.listeners.get(e);if(r)r.fire({event:e,args:t});else{let n=this.cachedEventQueue.get(e);n||(n=new Kn,this.cachedEventQueue.set(e,n)),n.push({args:t})}}},at={};An(at,{None:()=>Gn,filter:()=>Wn,once:()=>ir,toPromise:()=>zn});Gn=()=>{console.log("[Jolibox SDK] None Event")};ot=Symbol.for("Jolibox.hostEmitter"),Yn=()=>{let e=new Q;return globalThis[ot]||(globalThis[ot]={on:e.on.bind(e),off:e.off.bind(e),emit:e.emit.bind(e)}),globalThis[ot]},V=Yn();be=class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new me,this.onDidRegisterCommand=this._onDidRegisterCommand.event,console.log("[Jolibox SDK] command registry")}registerCommand(e){if(!e)throw new Error("invalid command");if(e.metadata&&Array.isArray(e.metadata.args)){let r=[];for(let s of e.metadata.args)r.push(s.constraint);let n=e.handler;e.handler=function(...s){return Qn(s,r),n(...s)}}let{id:t}=e;this._commands.get(t)&&console.info(`[Jolibox SDK] duplicated command is registered ${t}`),this._commands.set(t,e),this._onDidRegisterCommand.fire(t)}getCommand(e){return this._commands.get(e)}getCommands(){let e=new Map;for(let t of this._commands.keys()){let r=this.getCommand(t);r&&e.set(t,r)}return e}};be=Kt([Wt],be);ct=class{constructor(){this._onWillExecuteCommand=new me,this.onWillExecuteCommand=this._onWillExecuteCommand.event,this._onDidExecuteCommand=new me,this.onDidExecuteCommand=this._onDidExecuteCommand.event,this.registry=new be,this._starActivation=null}_activateStar(){return this._starActivation||(this._starActivation=xn(3e4)),this._starActivation}async executeCommand(e,...t){return this.registry.getCommand(e)?this._tryExecuteCommand(e,t):(await Promise.all([Promise.race([this._activateStar(),at.toPromise(at.filter(this.registry.onDidRegisterCommand,r=>r===e))])]),this._tryExecuteCommand(e,t))}executeCommandThowErr(e,...t){if(!this.registry.getCommand(e))throw new Error(`command '${e}' not found`);let r=this.registry.getCommand(e);this._onWillExecuteCommand.fire({commandId:e,args:t});let n=this.invokeFunction(r.handler,...t);return this._onDidExecuteCommand.fire({commandId:e,args:t}),n}_tryExecuteCommand(e,t){let r=this.registry.getCommand(e);if(!r)return Promise.reject(new Error(`command '${e}' not found`));try{this._onWillExecuteCommand.fire({commandId:e,args:t});let n=this.invokeFunction(r.handler,...t);return this._onDidExecuteCommand.fire({commandId:e,args:t}),Promise.resolve(n)}catch(n){return Promise.reject(n)}}invokeFunction(e,...t){let r=!1;try{return e(...t)}finally{r=!0}}};ct=Kt([Wt],ct);it=Symbol.for("Jolibox.commands")});function R(e,t={}){ht.emit("ERROR_REPORT",{error:e,options:t})}var ht,ne,M=h(()=>{"use strict";v();v();ht=new Q,ne=new Q;R.debounce=pe(R,50,{leading:!0})});function Ee(e,t){return`[${e}]:${t}`}var se,gt,X=h(()=>{"use strict";M();v();M();se=(e,t)=>new fe(t?.errMsg??e.msg??"",e.code,e.type),gt=e=>new dt(e)});var ar,cr,lr,dr=h(()=>{"use strict";ar=[],cr=[],lr=["env","createRequestTask","login"]});function mr(e,t){ur||(vt=new oe({eventName:"jolibox_invoke",tagNameOrder:["status","method","errNo","errMsg","isForeground"],metricName:"duration",reporter(s){e.invoke("track",JSON.stringify({event:"reportMetrics",data:s}),-1)}}),yt=new oe({eventName:"jolibox_invoke_js2native",tagNameOrder:["status","method","isForeground"],metricName:"duration",reporter(s){e.invoke("track",JSON.stringify({event:"reportMetrics",data:s}),-1)}}),bt=new oe({eventName:"jolibox_invoke_native2js",tagNameOrder:["status","method","isForeground"],metricName:"duration",reporter(s){e.invoke("track",JSON.stringify({event:"reportMetrics",data:s}),-1)}}),t("onJoliboxEnterBackground",()=>{vt.flush(),yt.flush(),bt.flush()}),ur=!0);function r(s){let{method:o,args:i,startTime:a,isForeground:d,errMsg:l=`${o}:fail no errMsg`,errNo:u=0,__timing:p={receiveJSInvoke:0,invokeCallback:0}}=s,{receiveJSInvoke:m,invokeCallback:f}=p,b=l.match(/\S:(\S+)\s?/)?.[1]??"fail";vt.report({status:b,method:n(o,i),errNo:`${u}`,errMsg:l,isForeground:d,duration:Date.now()-a}),a&&m&&f&&(yt.report({status:b,method:o,isForeground:d,duration:Number((m-a).toFixed(3))}),bt.report({status:b,method:o,isForeground:d,duration:Number((Date.now()-f).toFixed(3))}))}function n(s,o){return(s==="callHostMethod"||s==="callHostMethodSync")&&o?.method?`${s}-${o.method}`:s}return r}var Zn,oe,ur,vt,yt,bt,Tt=h(()=>{"use strict";v();Zn=e=>e==="pv"?e:"default",oe=class{constructor(t){this.interval=30;this.lastReportTime=0;this.cache={};let{reporter:r,interval:n=30,eventName:s,tagNameOrder:o,metricName:i,type:a}=t;this.reporter=r,this.interval=n,this.eventName=s,this.tagNameOrder=o,this.metricName=i,this.type=Zn(a)}report(t){this.type==="pv"?this.addPVPoint(t):this.addPoint(t),this.tryReport(!1)}flush(){this.tryReport(!0)}tryReport(t){if(Object.keys(this.cache).length){if(t){this.reporter(this.processPoints(this.cache)),this.clearPoints();return}this.lastReportTime=this.lastReportTime||Date.now(),Date.now()-this.lastReportTime>=this.interval*1e3&&(this.reporter(this.processPoints(this.cache)),this.clearPoints(),this.lastReportTime=Date.now())}}addPoint(t){let r=(n,s,o,i)=>{let a=s.shift();if(a){let d=i[a];n[d]||(n[d]={}),r(n[d],s,o,i)}else n[o]||(n[o]=[]),n[o].push(i[o])};r(this.cache,[...this.tagNameOrder],this.metricName,t)}addPVPoint(t){let r=(s,o,i,a)=>{let d=o.shift();if(!d&&P(a))throw new Te(`report value failed to match tagNameOrder, ${JSON.stringify(n)}`);if(d){let l=[];if(P(a))l.push(...Object.keys(a));else if(te(a)){if(o.length>0)throw new Te(`report value failed to match tagNameOrder, ${JSON.stringify(n)}`);l.push(a)}else throw new Te(`expected metric value to be a string, but got a(n) ${typeof a}, ${JSON.stringify(n)}`);l.forEach(u=>{s[u]||(s[u]={});let p=P(a)?a[u]:a;r(s[u],[...o],i,p)})}else s[i]?s[i]++:s[i]=1},n={point:t,metricName:this.metricName,tagNameOrder:this.tagNameOrder};r(this.cache,[...this.tagNameOrder],this.metricName,t)}processPoints(t){return{eventName:this.eventName,tagNameOrder:this.tagNameOrder,metricName:this.metricName,metricAggregateType:this.type==="pv"?"itoa":"arr",data:t}}clearPoints(){this.cache={}}},ur=!1});function fr(e,t){let r=0,n=!0,s=new Map,o=mr(e,t);t("onJoliboxEnterBackground",()=>{n=!1}),t("onJoliboxEnterForeground",()=>{n=!0,kt.forEach(async({method:l,args:u,resolve:p})=>{let m=await a(l,u);p(m)}),kt.length=0});let i=(l,u)=>{C.info("----resolveId",l,u);let p=s.get(Number(l));if(!p)return;let m=de(u);p(m),s.delete(Number(l))},a=(l,u)=>{let p=Date.now(),m=`${n}`;r+=1;let f=new Y;if(s.set(r,f.resolve),!n&&cr.includes(l))return new Promise(x=>{kt.push({method:l,args:u,resolve:x})});let _={...{method:l,startTime:p,args:u,isForeground:m},invokeType:"js-bridge"},N=!es&&ar.includes(l),z=$t(u,N),W=N?z:JSON.stringify(z),k;if(l.endsWith("Sync")||lr.includes(l)?k=e.call?.(l,z,r):typeof W=="string"?(console.log("-----params",l,r),k=e.invoke(l,W,r)):k=e.call?.(l,W,r),k){try{typeof k=="string"&&(k=JSON.parse(k)),k=de(k)}catch(x){C.error(x)}return s.delete(r),k.errorCode&&(k.errorCode=Ee(l,k.errorCode)),o({..._,...k}),k}return l.endsWith("Sync")&&s.delete(r),f.promise.then(x=>(x.errorCode&&(x.errorCode=Ee(l,x.errorCode)),o({..._,...x}),x))};return{invokeNative:a,applyNative:(l,u)=>{let p=a(l,u);return zt(p)?p.then(m=>pr(l,m)):pr(l,p)},invokeHandler:i}}function pr(e,t){if(!P(t)){C.warn(`[Jolibox SDK]${e} no response value`);return}let{errMsg:r,errNo:n,errorType:s,errorCode:o,...i}=t;if(r&&r!==`${e}:ok`)throw new er(r,n,s,o);return i}var kt,es,hr=h(()=>{"use strict";st();v();X();dr();Tt();kt=[],es=!1});function gr(e){let t=new Q,r=new oe({eventName:"jolibox_publish",tagNameOrder:["type","event"],metricName:"duration",reporter(n){e.invoke("track",JSON.stringify({event:"reportMetrics",data:n}),-1)}});return t.on("onJoliboxEnterBackground",()=>{r.flush()}),{onNative:t.on.bind(t),offNative:t.off.bind(t),subscribeHandler(n,s,o){let i=de(s),a;if(i.__extra){a=i.params;let{type:d,startTime:l}=i.__extra;r.report({type:d,event:n,duration:Date.now()-l})}else a=i;t.emit(n,a,o)}}}var vr=h(()=>{"use strict";v();st();Tt()});function Et(e){let{subscribeHandler:t,onNative:r,offNative:n}=gr(e),{invokeNative:s,invokeHandler:o,applyNative:i}=fr(e,r);return{invokeHandler:o,subscribeHandler:t,applyNative:i,invokeNative:s,onNative:r,offNative:n}}var yr=h(()=>{"use strict";hr();vr()});var br=h(()=>{"use strict"});var Tr=h(()=>{"use strict";yr();br()});var Z,L,kr,Er=h(()=>{"use strict";v();M();L={trigger(){},exit(){return!1},onReady(e){L.trigger=e},doExit(e){L.exit=e}},kr=()=>{let e=window.prompt("invoke",JSON.stringify({event:"envSync",paramsString:JSON.stringify({})}));if(!e)R(new Zt("native env failed"));else{let{data:t}=JSON.parse(e);return t??void 0}};if(window.webkit){let e=window.webkit.messageHandlers,t=(s="")=>{L.trigger(),e.onDocumentReady.postMessage({path:s})};Z={onDocumentReady:t,doExit:s=>{let o=L.exit();e.doExit.postMessage({uuid:s,shouldInterrupt:o})},invoke(s,o,i){e.invoke.postMessage({event:s,paramsString:o,callbackId:i})},call(s,o,i){let a=window.prompt("invoke",JSON.stringify({event:s,paramsString:JSON.stringify(o),callbackId:i}));if(a)return JSON.parse(a)}};let n={onDocumentReady:t,env:kr};globalThis.joliboxJSCore={...n}}if(window.JoliAndroidSDKBridge){let e=window.JoliAndroidSDKBridge,t=(s="")=>{L.trigger(),e.onDocumentReady(JSON.stringify({path:s}))};Z={onDocumentReady:t,invoke(s,o,i){e.invoke(JSON.stringify({event:s,paramsString:o,callbackId:i}))},doExit:s=>{let o=L.exit();e.doExit(JSON.stringify({uuid:s,shouldInterrupt:o}))},call(s,o,i){let a=window.prompt("invoke",JSON.stringify({event:s,paramsString:JSON.stringify(o),callbackId:i}));if(a)return JSON.parse(a)}};let n={onDocumentReady:t,env:kr};globalThis.joliboxJSCore={...n}}});function St(e,t){return{params:e,__extra:{startTime:Date.now(),type:t}}}var It=h(()=>{"use strict"});function wt(){globalThis.onmessage=function(e){e.data==="msg:setup"&&([ie]=e.ports,ie.onmessage=function(t){let r=JSON.parse(t.data);r[0]==="publish"?globalThis.ttJSBridge.subscribeHandler(r[1],r[2]):r[0]==="invoke"&&globalThis.ttJSBridge.invokeHandler(r[1],r[2])},ie.publish=function(t,r){let n=St(r,"messagePort");ie.postMessage(JSON.stringify(["publish",t,JSON.stringify(n)]))},ie.postMessage("msg:setup:ok"))}}var ie,Sr=h(()=>{"use strict";It()});var Se=h(()=>{"use strict";Er();Sr();It()});var wr,ts,_r,Ir,O,A,J,yi,rs,B=h(()=>{"use strict";Tr();Se();X();v();Se();wr=Z;if(!wr)throw new tr("No joliboxJScore is found, native bridge not found.");wt();ts={...wr},_r=Et(ts),{invokeHandler:Ir}=_r,{applyNative:O,invokeNative:A,onNative:J,offNative:yi,subscribeHandler:rs}=_r;globalThis.joliboxJSBridge={callHandler:Ir,invokeHandler:Ir,subscribeHandler:rs}});var _t,Rr,Ar=h(()=>{"use strict";v();M();_t=e=>{let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4===0?"":"=".repeat(4-t.length%4),n=atob(t+r);try{return JSON.parse(n)}catch{return{}}},Rr=e=>{try{let n=new URL(e).searchParams.get("joliSource")?.split(".");if(n?.length){let[s,o,i]=n;return{headerJson:_t(s),payloadJson:_t(o),signature:_t(i)}}else throw"joli_source is missing"}catch(t){return R(new Xt(`${e} not a valid schema: ${t}`)),{headerJson:{},payloadJson:{},signature:{}}}}});var ns,Ie,xr,Rt=h(()=>{"use strict";v();ns="1.1.4-beta.15",Ie=()=>ns,xr=()=>{let e=Ie();return`${or(e)}`}});var ss,os,D,is,y,$=h(()=>{"use strict";v();Ar();Rt();v();ss={deviceInfo:{brand:"UnknownBrand",model:"UnknownModel",did:ft(),pixelRatio:window.devicePixelRatio||1,platform:"h5",system:"UnknownSystemVersion",lang:"zh"},sdkInfo:{nativeSDKVersion:"",jssdkVersion:Ie()},schema:window.location.href,platform:"h5"},os=globalThis.joliboxJSCore?.env,D=Object.assign({},os?.()??ss),is=()=>{let{payloadJson:e,headerJson:t}=D.schema.length?Rr(D.schema):{},r=`${D.deviceInfo.did}-${new Date().getTime()}`,n=new URLSearchParams(D.schema.length?D.schema:window.location.search),s=n.get("mpId")??n.get("appId")??n.get("gameId")??"",o=e?.sessionId??n.get("sessionId")??r,i=!!(e?.testAdsMode??n.get("testAdsMode")==="true"),a=e?.joliboxEnv??n.get("joliboxEnv")??"production",d=a==="staging",l=t?.channel;return{get testMode(){return d},get testAdsMode(){return i},get joliboxEnv(){return a},get mpId(){return s??e?.id??""},get mpVersion(){return t?.ver??Ie()},get platform(){return D.platform},get deviceInfo(){return D.deviceInfo},get sdkInfo(){return D.sdkInfo},get hostInfo(){return D.hostInfo},get hostUserInfo(){return D.hostUserInfo},get sessionId(){return D.clientSessionId??o??r},get channel(){return l},onEnvConfigChanged:u=>{Yt(D,u,Qt)}}},y=is()});var At,Cr,as,cs,Pr,ls,Nr=h(()=>{"use strict";v();M();$();v();At=!1,Cr=(e,t)=>e==null?!1:t in e,as=e=>Cr(e,"kind"),cs=e=>{let t=e.toLowerCase().split("_");return t[0]+t.slice(1).map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join("")},Pr=(e,t={},r)=>{let n=e.priority??"P1",o={...{user_id:y.hostUserInfo?.uid??"",device_id:y.deviceInfo.did??"",timestamp:Date.now(),tag:cs(e.name)},env:t.environment,isFromUser:r};r?ne.emit("GLOBAL_USER_ERROR",e,o):ne.emit("GLOBAL_ERROR",e,o)},ls=e=>Cr(e,"kind")&&e.kind==="USER_ERROR";ht.on("ERROR_REPORT",({error:e,options:t})=>{if(At)return;At=!0;let r=as(e)&&e.raw?e.raw:e;try{let n=ls(e);Pr(e,t,n)}catch(n){let s=n instanceof Error?n.message:String(n),o=new ut(`${s}, origin error: ${r.message}`);C.error(o),Pr(new ut(o.message),{environment:t.environment},!1)}finally{At=!1}})});var Or=h(()=>{"use strict";Nr();X();v();B();ne.on("GLOBAL_ERROR",(e,t)=>{let r={message:e.message,stack:e.stack??"",errorType:e.name,source:0};A("trackAsync",{event:"reportJsError",data:r})});ne.on("GLOBAL_USER_ERROR",(e,t)=>{C.log("UserError",e,t)})});var xt=h(()=>{"use strict"});function Fr(e,t){let r=(n,s,o)=>{let i={tag:n,...t,extra:{...s}};n=="globalJsError"?R(new rr(JSON.stringify(i),"P0")):e("systemLog",i,o)};return r.debounce=pe(r,500,{leading:!0}),r}function Dr(e){let t=(r,n,s)=>{let o=(s&&JSON.stringify(s))??0,i={speed_value_type:r,total_duration:n};o&&Object.assign(i,{extra:o}),e("joliboxSpeedAnalysis",i)};return t.debounce=pe(t,500,{leading:!0}),t}var Ur=h(()=>{"use strict";v();v();M()});function Mr(e,t){let r=Fr(e,t),n=Dr(r);return{track:r,trackPerformance:n}}var Lr=h(()=>{"use strict";Ur()});var Br=h(()=>{"use strict";$();v();v()});var jr=h(()=>{"use strict";Lr();xt();Br()});var we,Jr=h(()=>{"use strict";we=class{constructor(t,r){this.eventEmitter=t;this.lastReportTime=0;this.visible=!0;this.timer=this.createRAFTimer(t=>{this.reporter({event:"PLAY_GAME",params:{duration:t}}),this.tracker("PlayGame",{duration:t})});this.interval=r??5*1e3,t.on("visible",n=>{this.visible=n})}start(t){this.reporter({event:"OPEN_GAME",params:{timestamp:Date.now(),duration:t??0}}),this.tracker("OpenGame",{duration:t??0}),this.timer.start()}close(t){this.reporter({event:"CLOSE_GAME",params:{timestamp:Date.now(),duration:t}}),this.tracker("CloseGame",{duration:t}),this.timer.stop()}createRAFTimer(t){let r=Date.now(),n,s,o=!1,i=0,a=()=>{if(!o)return;let f=Date.now(),b=f-r;b>=this.interval&&(this.visible&&(i+=b,t(i)),r=f),n=requestAnimationFrame(a)},d=()=>{u(),r=Date.now(),s=window.setInterval(()=>{if(!o)return;let f=Date.now();f-r>=this.interval&&(r=f)},this.interval)},l=()=>{p(),r=Date.now(),n=requestAnimationFrame(a)},u=()=>{n&&(cancelAnimationFrame(n),n=0)},p=()=>{s&&(clearInterval(s),s=0)};this.eventEmitter.on("visible",f=>{o&&(console.log("visible",f),f?l():d())});let m=this.visible;return{start(){o||(o=!0,m?l():d())},stop(){o=!1,u(),p()}}}}});var Pt=h(()=>{"use strict"});function Hr(e,t,r){let{response:n,startTime:s,endTime:o,requestFrom:i}=r,{errMsg:a="",profile:d={}}=n,u={duration:o-s,request_type:e,url:t.split("?")[0],result:r.state,error_msg:r.state==="fail"?a:"",socket_reused:d.socketReused?1:0,request_from:i};(i==="public"&&$r<us||i==="inner")&&(u.joli_request_number=$r++,setTimeout(()=>{U("joliboxNetRequestResult",u)},500))}var $r,us,Vr=h(()=>{"use strict";Pt();ee();$r=0,us=10});function _e(e,t,r){let n=new Map,s=r?.baseUrl??"https://api.jolibox.com",o=r?.type??"public",i=r?.defaultHeaders??{};return J("onRequestTaskStateChange",d=>{if(typeof d.requestTaskId!="string")return;let l=n.get(d.requestTaskId);if(l)if(d.state==="success"){let{requestTaskId:u,state:p,...m}=d;l.resolve(m),n.delete(u)}else if(d.state==="fail"){let{requestTaskId:u,state:p,...m}=d;l.reject(m),n.delete(u)}else C.warn("onRequestTaskStateChange unknown event",d)}),V.on("onLoginComplete",({isLogin:d,token:l})=>{d&&l&&(i["X-JOLI-TOKEN"]=l)}),async(d,l={})=>{let u=Date.now(),p=ms(d,{...l,baseUrl:s}),{method:m="GET",responseType:f="text",dataType:b="json",timeout:_,enableCache:N=!1,appendHostCookie:z=!0}=l,W=Object.assign({"content-type":"application/json"},i,l.header),k={url:p,method:m,header:W,enableCache:N,responseType:f,appendHostCookie:z};if(m=="POST"||m=="PUT"){let j=fs(l.data,W["content-type"]);k.data=j}_&&Object.assign(k,{timeout:_});let{data:{requestTaskId:x}}=A(e,k);if(typeof x!="string")throw se({code:-1,msg:"requestTaskId is not a string"});let le=(j,H)=>{Hr("request",p,{state:j,startTime:u,endTime:Date.now(),params:k,response:H,requestId:x,requestFrom:o=="public"?"public":"inner"})},{resolve:nt,reject:un,promise:mn}=new Y;n.set(x,{resolve:nt,reject:un});try{let j=await mn;le("success",j);let{data:H}=j;return b==="json"&&typeof H=="string"&&(H=ps(H)),{url:p,timeout:_,method:m,response:{...j,data:H}}}catch(j){let H=j;if(P(H)){let{errMsg:he,prefetchDetail:pn,isPrefetch:fn,errNo:hn}=H;te(he)&&(le("fail",{errMsg:he,isPrefetch:fn,prefetchDetail:pn}),R(se({code:-1,msg:he},{errNo:hn,errMsg:he})))}throw j}}}function ps(e){try{return JSON.parse(e.trim())}catch{return e}}function fs(e,t="application/json"){let r=t.toLowerCase();return e===void 0?"":typeof e=="string"||e instanceof ArrayBuffer?e:r.includes("application/x-www-form-urlencoded")||r.includes("application/json")||typeof e=="object"?JSON.stringify(e):String(e)}var ms,Ct=h(()=>{"use strict";v();Vr();Pt();B();M();X();ms=(e,t)=>{if(/^https?:\/\//.test(e))return e;let r=t?.query,s=new URLSearchParams(r).toString();return t?.baseUrl?`${t.baseUrl}${e}${s?`?${s}`:""}`:`${e}${s?`?${s}`:""}`}});var K,Re=h(()=>{"use strict";Rt();Ct();$();K=_e("createRequestTaskSync","operateRequestTaskSync",{type:"inner",baseUrl:y.testMode?"https://stg-api.jolibox.com":"https://api.jolibox.com",defaultHeaders:{"x-user-agent":xr(),"X-JOLI-TOKEN":y.hostUserInfo?.token??""}})});var Ae,Kr=h(()=>{"use strict";$();Jr();Re();B();Ae=class extends we{constructor(t,r,n){super(r,n),this.gameId=y.mpId,this.sessionId=y.sessionId,this.track=t}async reporter(t){let{event:r,params:n}=t,s=[];s.push(K("/api/base/app-event",{method:"POST",data:{eventType:r,gameInfo:{gameId:this.gameId,sessionId:this.sessionId,...n}}})),await Promise.all(s)}async reportToNative(t){let{event:r,params:n}=t;await O("userTrackAsync",{event:r,params:{...n},gameId:this.gameId})}tracker(t,r=null){this.track(t,r)}}});var hs,U,gs,qr,xe,F,ee=h(()=>{"use strict";Or();v();xt();jr();$();Kr();B();hs=(e,t,r)=>{let n=t,o={...P(n.extra)?n.extra:te(n.extra)?JSON.parse(n.extra):{},mp_id:n.mp_id??"",mp_version:n.mp_version??""};A("trackAsync",{event:e,data:o,webviewId:r})},{track:U,trackPerformance:gs}=Mr(hs,{type:pt.AppSDK,platform:"native",jssdk_version:y.sdkInfo?.jssdkVersion??"1.0.0",mp_id:y.mpId,mp_version:y.mpVersion}),qr=I();qr.registerCommand("ReportSDK.traceSystemTimeline",({event:e,duration:t})=>{gs(e,t)});qr.registerCommand("ReportSDK.traceSystem",({event:e,info:t})=>{U(e,t)});xe=new Q,F=new Ae(U,xe)});function zr(e){let t=mt.config[e];return t||(t={},mt.config[e]=t),(r,n)=>{if(t[r]){C.warn(`[can i use] ${r} already registered`);return}t[r]={...n}}}var Wr=h(()=>{"use strict";v()});function Nt(e){Yr=e}function Ce(e){return e===null||typeof e!="object"?e:Array.isArray(e)?e.map(t=>Ce(t)):Object.keys(e).reduce((t,r)=>(t[r]=Ce(e[r]),t),{})}function q(e){return typeof e=="number"}function Ot(e){let t=Ft(e);switch(t){case"string":return`"${e}"`;case"number":case"boolean":case"null":case"undefined":return String(e);default:return`a(n) ${t}`}}function Ft(e){return typeof e=="function"?"function":Object.prototype.toString.call(e).slice(8).slice(0,-1).toLowerCase()}var Yr,E,Ne,Oe,Fe,De,ae,Ue,Me,Le,Be,je,Je,$e,He,Ve,Ke,qe,Ge,Dt=h(()=>{"use strict";Yr=!1;E=class{constructor(){this.errors=[];this.hasFallback=!1;this.hasDefault=!1;this._optional=!1}fail(t){if(Yr)if(typeof t=="string")this.errors.push(t);else{let r=`${this.path} should be ${t.expect}`;this._optional&&t.expect!=="undefined"?r+=" or undefined, ":r+=", ",r+=`but got ${Ot(t.actual)}`,this.errors.push(r)}return!1}fallback(t){return this.hasFallback=!0,this._fallback=t,this}get fallbackValue(){return Ce(this._fallback)}default(t){return this.hasDefault=!0,this._default=t,this}get defaultValue(){return typeof this._default=="function"?this._default:Ce(this._default)}optional(){return this._optional=!0,this}};Ne=class extends E{validate(t){return this._optional&&t===void 0?!0:q(t)?q(this._min)&&t<this._min?this.fail(`the value of ${this.path} should be greater than or equal to ${this._min}`):q(this._max)&&t>this._max?this.fail(`the value of ${this.path} should be less than or equal to ${this._max}`):q(this._greater)&&t<=this._greater?this.fail(`the value of ${this.path} should be greater than ${this._greater}`):this._isInt&&t!==Math.floor(t)?this.fail(`the value of ${this.path} should be integer but got ${t}`):!0:this.fail({expect:"number",actual:t})}min(t){return this._min=t,this}max(t){return this._max=t,this}isInt(t){return this._isInt=t,this}greater(t){return this._greater=t,this}},Oe=class extends E{validate(t){return this._optional&&t===void 0?!0:typeof t!="boolean"?this.fail({expect:"boolean",actual:t}):!0}},Fe=class extends E{validate(t){if(this._optional&&t===void 0)return!0;if(typeof t!="string")return this.fail({expect:"string",actual:t});if(q(this._maxLength)&&t.length>this._maxLength)return this.fail(`the length of ${this.path} should be less than or equal to ${this._maxLength}`);if(q(this._minLength)&&t.length<this._minLength)return this.fail(`the length of ${this.path} should be greater than or equal to ${this._minLength}`);if(typeof this._pattern=="string"){if(!new RegExp(this._pattern).test(t))return this.fail(`${this.path} should match pattern "${this._pattern}"`)}else if(this._pattern&&!this._pattern.test(t))return this.fail(`${this.path} should match pattern "${this._pattern.toString()}"`);return!0}minLength(t){return this._minLength=t,this}maxLength(t){return this._maxLength=t,this}pattern(t){return this._pattern=t,this}},De=class extends E{validate(t){return this._optional&&t===void 0?!0:typeof t!="symbol"?this.fail({expect:"symbol",actual:t}):!0}},ae=class extends E{validate(t){return!0}},Ue=class extends E{validate(t){return t!==void 0?this.fail({expect:"undefined",actual:t}):!0}},Me=class extends E{validate(t){return this._optional&&t===void 0?!0:t!==null?this.fail({expect:"null",actual:t}):!0}},Le=class extends E{validate(t){return this._optional&&t===void 0?!0:typeof t!="function"?this.fail({expect:"function",actual:t}):!0}},Be=class extends E{constructor(...t){super(),this._items=t}validate(t){if(this._optional&&t===void 0)return!0;if(!this._items.includes(t)){let r=this._items.map(n=>JSON.stringify(n)).join(", ");return this.fail(`expect ${this.path} to be one of ${r}, but got ${Ot(t)}`)}return!0}},je=class extends E{constructor(r){super();this._item=r}validate(r){if(this._optional&&r===void 0)return!0;if(!Array.isArray(r))return this.fail({expect:"array",actual:r});if(q(this._minItems)&&r.length<this._minItems)return this.fail(`the length of ${this.path} should be greater than or equal to ${this._minItems}`);if(q(this._maxItems)&&r.length>this._maxItems)return this.fail(`the length of ${this.path} should be less than or equal to ${this._maxItems}`);if(q(this._length)&&r.length!==this._length)return this.fail(`the length of ${this.path} should be equal to ${this._length}`);let n=this._item;if(!n)return!0;let s=!0;if(r.forEach((o,i)=>{if(n.path=`${this.path}[${i}]`,n.errors=this.errors,o===void 0&&n.hasDefault){r[i]=n.defaultValue;return}n.validate(o)||(n.hasFallback?r[i]=n.fallbackValue:s=!1)}),this._uniqueItems){let o=new Map;for(let i in r)o.has(r[i])?s=this.fail(`${this.path} should NOT have duplicate items (${this.path}[${o.get(r[i])}] and ${this.path}[${i}] are identical)`):o.set(r[i],i)}return s}minItems(r){return this._minItems=r,this}maxItems(r){return this._maxItems=r,this}uniqueItems(){return this._uniqueItems=!0,this}length(r){return this._length=r,this}},Je=class extends E{constructor(r){super();this._value=r}validate(r){if(this._optional&&r===void 0)return!0;if(Ft(r)!=="object")return this.fail({expect:"object",actual:r});let s=r,o=this._value;o.errors=this.errors;let i=!0;for(let a in s){let d=s[a];if(/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/.test(a)?o.path=`${this.path}.${a}`:o.path=`${this.path}["${a}"]`,!(d===void 0&&o._optional)){if(d===void 0&&o.hasDefault){s[a]=o.defaultValue;continue}o.validate(d)||(o.hasFallback?s[a]=o.fallbackValue:i=!1)}}return i}},$e=class extends E{constructor(r={}){super();this._object=r}validate(r){if(this._optional&&r===void 0)return!0;if(Ft(r)!=="object")return this.fail({expect:"object",actual:r});let n=r,s=!0;for(let o in this._object){let i=n[o],a=this._object[o];if(a.errors=this.errors,/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/.test(o)?a.path=`${this.path}.${o}`:a.path=`${this.path}["${o}"]`,!(a._optional&&i===void 0)){if(i===void 0&&a.hasDefault){n[o]=a.defaultValue;continue}a.validate(i)||(a.hasFallback?n[o]=a.fallbackValue:s=!1)}}return s}},He=class extends E{constructor(r){super();this.value=r}validate(r){return r===void 0&&this._optional?!0:r!==this.value?this.fail({expect:Ot(this.value),actual:r}):!0}},Ve=class extends E{constructor(...t){super(),this._items=t}validate(t){if(t===void 0&&this._optional)return!0;let r=[],n=!1,s=this._items.length;for(let o=0;o<s;o++){let i=this._items[o];if(i.errors=[],i.path=this.path,!i.validate(t))r.push(i.errors.join("; "));else if(!n){n=!0;break}}if(!n){let o=r.join(`
|
|
2
|
+
or `);this.errors.push(o)}return n}},Ke=class extends E{constructor(...t){super(),this._items=t;let r=0,n=t.length-1;for(;n>=0;n--){let s=t[n];if(s._optional||s.hasDefault)r+=1;else break}this._minItems=t.length-r}validate(t){if(t===void 0&&this._optional)return!0;if(!Array.isArray(t))return this.fail({expect:"array",actual:t});if(t.length<this._minItems)return this.fail(`the length of ${this.path} should be greater than or equal to ${this._minItems}`);let r=!0;return this._items.forEach((n,s)=>{if(n.path=`${this.path}[${s}]`,n.errors=this.errors,t[s]===void 0&&n.hasDefault){t[s]=n.defaultValue;return}n.validate(t[s])||(n.hasFallback?t[s]=n._fallback:r=!1)}),r}},qe=class extends E{validate(t){return t===void 0&&this._optional||t instanceof ArrayBuffer?!0:this.fail({expect:"arraybuffer",actual:t})}},Ge=class extends E{constructor(t){super(),this._ctor=t}validate(t){return t===void 0&&this._optional||t instanceof this._ctor?!0:this.fail({expect:`typedarray of ${this._ctor.name}`,actual:t})}}});function Ut(e,t,r="param"){if(e.errors=[],e.path=r,Nt(!0),!e.validate(t)){let n=e.errors.join(`
|
|
3
|
+
`);throw e.errors.length=0,Nt(!1),new TypeError(n)}}var c,Mt=h(()=>{"use strict";Dt();Dt();c={object(e){return new $e(e)},array(e){return new je(e)},tuple(...e){return new Ke(...e)},literal(e){return new He(e)},or(...e){return new Ve(...e)},symbol(){return new De},record(e){return new Je(e)},function(){return new Le},boolean(){return new Oe},string(){return new Fe},number(){return new Ne},undefined(){return new Ue},null(){return new Me},unknown(){return new ae},any(){return new ae},as(){return new ae},arraybuffer(){return new qe},enum(...e){return new Be(...e)},typedarray(e){return new Ge(e)}}});var ze,Qr,Xr=h(()=>{"use strict";v();M();Mt();X();ze=1,Qr=e=>{function t(n,s){return(...o)=>{let i=Date.now(),a={method:n,trace_id:ze};ze+=1;let d="SUCCESS",l=`${n}:ok`,u=0;try{if(s.paramsSchema)try{Ut(s.paramsSchema,o,"params")}catch(b){throw gt(`${n}:fail ${b.message}`)}let p=s.implement(...o),m=p,f=`${n}:ok`;if(p&&"code"in p){let{code:b,data:_,message:N}=p;d=b,m=_,f=N}return{code:d,message:f,data:m}}catch(p){let m=p;u=m.code??m.errNo??2e3,d="FAILURE";let f=m.message??m.errMsg??`${p}`;return l=`${n}:${d} ${f.replace(/^\S+:(fail|cancel)\s?/,"")}`,R(new fe(l,u)),{code:d,message:l}}finally{let p=Date.now()-i;e("apiInvoked",{...a,duration:p,status:d})}}}function r(n,s){return async(...o)=>{let i=qt(o)?o:[o],a=Date.now(),d={method:n,trace_id:ze};ze+=1;let l=`${n}:ok`,u="SUCCESS",p={code:u,message:l};try{if(s.paramsSchema)try{Ut(s.paramsSchema,i,"params")}catch(b){throw gt(b.message)}let f=await s.implement(...i);if(f&&"code"in f){let{code:b,data:_,message:N}=f;u=b,l=N,f=_}return Object.assign(p,{code:u,message:l,data:f}),p}catch(m){let f=m,b=f.code??f.errNo??2e3;u="FAILURE";let _=f.message??f.errMsg??`${m}`,N=`${n}:${u} ${_.replace(/^\S+:(fail|cancel)\s?/,"")}`;return Object.assign(p,{code:u,message:N}),R(new fe(N,b)),p}finally{let m=Date.now()-a;e("apiInvoked",{...d,duration:m,status:u})}}}return{createAPI:r,createSyncAPI:t}}});var S,w,g,G=h(()=>{"use strict";Wr();ee();Xr();Mt();({createAPI:S,createSyncAPI:w}=Qr(U)),g=zr("native")});var tn=kn(en=>{"use strict";v();G();M();B();ee();var Is="exitGame",ws="onReady",_s="onJoliboxShow",Rs="onJoliboxHide",We=I(),Ye=ke(R),As=S(Is,{paramsSchema:c.tuple(c.function()),implement:async e=>{Ye(e).call(en),await O("exitAppAsync")}}),xs=w(_s,{paramsSchema:c.tuple(c.function()),implement(e){let t=Ye(e);J("onJoliboxEnterForeground",()=>{t.call(this),xe.emit("visible",!0)})}}),Ps=w(Rs,{paramsSchema:c.tuple(c.function()),implement(e){let t=Ye(e);J("onJoliboxEnterBackground",()=>{t.call(this),xe.emit("visible",!1)})}}),Cs=w(ws,{paramsSchema:c.tuple(c.function()),implement(e){let t=Ye(e);V.on("LifecycleEvent.onReady",r=>{t(r)})}});We.registerCommand("LifecycleSDK.exit",As);We.registerCommand("LifecycleSDK.onReady",Cs);We.registerCommand("LifecycleSDK.onJoliboxShow",xs);We.registerCommand("LifecycleSDK.onJoliboxHide",Ps);g("lifeCycle.exit",{version:"1.0.0"});g("lifeCycle.onReady",{version:"1.0.0"});g("lifeCycle.onJoliboxShow",{version:"1.0.0"});g("lifeCycle.onJoliboxHide",{version:"1.0.0"})});B();Se();$();v();ee();L.onReady(()=>{});L.doExit(()=>(U("onBeforeExit",{timestamp:Date.now()}),F.close(Date.now()-Pe),!1));function vs(){V.on("onDocumentReady",()=>{Z?.onDocumentReady(window.location.href),U("onDocumentReady",{start_timestamp:Pe,timestamp:Date.now()})})}function ys(){J("onJoliboxServiceReady",({runtimeInfo:e,loadDuration:t})=>{e&&y.onEnvConfigChanged({hostUserInfo:e}),V.emit("LifecycleEvent.onReady",{...y.hostUserInfo?y.hostUserInfo:{isLogin:!1}}),U("joliboxServiceReady",{start_timestamp:Pe,timestamp:Date.now()}),F.start(t)}),J("onBeforeExit",({uuid:e})=>{Z?.doExit(e)})}var Pe;function Gr(){Pe=Date.now(),ys(),vs()}v();G();B();var Zr=I(),Ts="env",ks="getSystemInfoSync",Es=w(ks,{implement:()=>{let e=A("envSync"),{data:t}=e;return{system:t.deviceInfo.system,platform:t.deviceInfo.platform,version:t.sdkInfo.jssdkVersion,pixelRatio:t.deviceInfo.pixelRatio,language:t.deviceInfo.lang,brand:t.deviceInfo.brand,appName:t.hostInfo?.appName,SDKVersion:t.sdkInfo.jssdkVersion}}}),Ss=w(Ts,{implement:()=>A("envSync")?.data??void 0});Zr.registerCommand("API.getSystemInfoSync",Es);Zr.registerCommand("API.env",Ss);g("env",{version:"1.0.0"});g("getSystemInfoSync",{version:"1.0.0"});var bl=Sn(tn());X();Ct();G();v();function rn(e){let t={};if(!P(e))return t;for(let[r,n]of Object.entries(e)){let s=r.toLocaleLowerCase();n?typeof n=="object"?t[s]=Object.prototype.toString.call(n):t[s]=String(n):t[s]=""}return t}function nn(e="GET"){if(e==="")return"POST";let t=e.toUpperCase();return["GET","OPTIONS","HEAD","POST","PUT","DELETE","TRACE","CONNECT","PATCH"].includes(t)?t:"GET"}function sn(e,t=!1){if(e)return t||e>0&&e<=6e4?Math.ceil(e):6e4}function on(e,t,r){if(["POST","PUT","PATCH"].includes(t)||!P(r))return e;let[n,s=""]=e.split("?"),o=JSON.stringify({...JSON.parse(s),...r});return`${n}?${o}`}v();M();var Ns=15,Os=_e("createRequestTaskSync","operateRequestTaskSync",{type:"public"}),Lt=0,Bt=[],an=ke(R),Fs=(e,t)=>{let r=e.filter(t),n=e.filter(s=>!t(s));return e.length=0,e.push(...n),r},Ds=e=>{let t=new Y,r=()=>{};return S("request",{paramsSchema:c.tuple(c.object({url:c.string(),method:c.string(),header:c.object(),data:c.object().optional(),query:c.object().optional(),dataType:c.string().default("json"),responseType:c.string().default("text"),enableCache:c.boolean().default(!1),appendHostCookie:c.boolean().default(!0),timeout:c.number().default(3e4),success:c.function(),fail:c.function()})),implement(s){let o=async()=>{let i=an(s.fail);try{if(Lt+=1,t.state!=="pending")return;let{data:a,dataType:d,responseType:l,enableCache:u,appendHostCookie:p}=s,m=rn(s.header),f=nn(s.method),b=sn(s.timeout),_=on(s.url,f,a),N=an(s.success),z=Object.assign({},s,{method:f,header:m,data:f==="GET"||f==="HEAD"?void 0:a,enableCache:u,query:s.query??{},dataType:d,responseType:l,appendHostCookie:p});b&&(z.timeout=b);let W=Os(_,z);{let{response:k}=await W,{code:x,data:le,message:nt}=k;t.resolve({code:x??"SUCCESS",data:le,message:nt??"request:ok"}),N({code:"SUCCESS",message:"request:ok",data:le})}}catch(a){t.reject(a),i({code:"FAILURE",message:"httpRequst: failed"})}finally{Lt-=1,Bt.shift()?.()}};return Lt>=Ns?(r=()=>{Fs(Bt,i=>i===o)},Bt.push(o)):o(),t.promise}})(e),{abort(){t.reject(se({code:-1,msg:"request:fail abort"})),r()}}},Us=I();Us.registerCommand("HttpSDK.request",Ds);g("request",{version:"1.0.0"});G();B();v();Re();$();var Qe=I(),Ms=S("getLocalStorage",{paramsSchema:c.tuple(c.string()),async implement(e){let{response:t}=await K(`/api/games/user-storage/${y.mpId}`,{method:"GET",responseType:"json",appendHostCookie:!0,query:{key:e}}),{data:{code:r,message:n,data:s}}=await t;if(r==="SUCCESS")return{code:r,message:n,data:s?.value};try{let{data:{data:o,dataType:i}}=await O("getLocalStorageAsync",{key:e}),a=Hs(o,i);return{code:r,message:`${n}. fallback to native`,data:a}}catch{return{code:"INTERNAL_ERROR",message:"[Jolibox SDK] get local storage failed",data:null}}}});Qe.registerCommand("StorageSDK.getItem",Ms);g("storage.getItem",{version:"1.0.0",properties:{key:"1.0.0",value:"1.0.0"}});var Ls=S("setStorage",{paramsSchema:c.tuple(c.string(),c.or(c.string(),c.boolean(),c.number())),async implement(e,t){let r=y.mpId,n=typeof t=="string"?t:String(t),{response:s}=await K(`/api/games/user-storage/${r}`,{method:"POST",responseType:"json",appendHostCookie:!0,data:{key:e,value:n}}),{data:{code:o,message:i}}=s,a=$s(t),d=Vs(t,a);return await O("setLocalStorageAsync",{key:e,data:d,dataType:a}),o=="SUCCESS"?{code:o,message:i}:{code:o,message:`${i}. fallback to native`}}});Qe.registerCommand("StorageSDK.setItem",Ls);g("storage.setItem",{version:"1.0.0",properties:{key:"1.0.0",value:"1.0.0"}});var Bs=S("removeStorage",{paramsSchema:c.tuple(c.string()),async implement(e){let t=y.mpId,{response:r}=await K(`/api/games/user-storage/${t}/remove`,{method:"POST",responseType:"json",appendHostCookie:!0,data:{key:e}}),{data:{code:n,message:s}}=r;return await O("removeLocalStorageAsync",{key:e}),n==="SUCCESS"?{code:n,message:s}:{code:n,message:"[Jolibox SDK] remove item succ"}}});Qe.registerCommand("StorageSDK.removeItem",Bs);g("storage.removeItem",{version:"1.0.0",properties:{key:"1.0.0"}});var js=S("clearStorage",{async implement(){let e=y.mpId,{response:t}=await K(`/api/games/user-storage/${e}/clear`,{method:"POST",appendHostCookie:!0});O("clearLocalStorageAsync");let{data:{code:r,message:n}}=t;return r==="SUCCESS"?{code:r,message:n}:{code:r,message:`${n}.fallback to native`}}});Qe.registerCommand("StorageSDK.clear",js);g("storage.clear",{version:"1.0.0"});var Mc=S("getStorageInfo",{async implement(){let{data:e}=await O("getStorageInfoAsync");return e}});g("getStorageInfo",{version:"1.0.0",success:{keys:"1.0.0",currentSize:"1.0.0",limitSize:"1.0.0"}});var Lc=w("getStorageInfoSync",{implement(){return A("getStorageInfoSync")}}),Js=["string","number","boolean","object",""];function $s(e){let t=Object.prototype.toString.call(e).split(" ")[1].split("]")[0].toLocaleLowerCase();return Js.includes(t)?t:""}function Hs(e,t){try{switch(t){case"string":return e;case"object":return JSON.parse(e);case"number":return parseFloat(e);case"boolean":return e==="true";default:return""}}catch{return""}}function Vs(e,t){try{switch(t){case"string":case"number":case"boolean":return`${e}`;case"object":return JSON.stringify(e);default:return""}}catch{return""}}v();B();G();var Ks=w("showKeyboard",{paramsSchema:c.tuple(c.object({defaultValue:c.string().optional().default(""),multiple:c.boolean().optional().default(!1),maxLength:c.unknown().optional().default(1e5)})),implement(e){let t=Math.floor(Number(e.maxLength)??1e5),{defaultValue:r}=e;r&&t&&(r=r.slice(0,t)),A("showKeyboardSync",{...e,defaultValue:r,maxLength:t})}});g("keyboard.showKeyboard",{version:"1.0.0",properties:{params:{defaultValue:"1.0.0",multiple:"1.0.0",confirmHold:"1.0.0",confirmType:"1.0.0",maxLength:"1.0.0"}},success:{errMsg:"1.0.0"}});var qs=w("updateKeyboard",{paramsSchema:c.tuple(c.object({value:c.string()})),implement(e){A("updateKeyboardSync",e)}});g("keyboard.updateKeyboard",{version:"1.0.0",properties:{params:{value:"1.0.0"}}});var Gs=w("hideKeyboard",{implement(){A("hideKeyboardSync")}});g("keyboard.hideKeyboard",{version:"1.0.0"});var jt=I();jt.registerCommand("KeyboardSDK.showKeyboard",Ks);jt.registerCommand("KeyboardSDK.updateKeyboard",qs);jt.registerCommand("KeyboardSDK.hideKeyboard",Gs);v();G();ee();var ce=I(),zs=S("levelFinished",{paramsSchema:c.tuple(c.string(),c.object({result:c.boolean(),duration:c.number()})),implement:async(e,t)=>{let{result:r,duration:n}=t,s=[];s.push(F.tracker("LevelFinished",{levelId:e,result:r,duration:n})),s.push(F.reporter({event:"COMPLETE_GAME_LEVEL"})),await Promise.all(s)}}),Ws=S("taskFinished",{paramsSchema:c.tuple(c.string(),c.object({duration:c.number()})),implement:async(e,t)=>{let{duration:r}=t;return await F.reportToNative({event:"TaskFinished",params:{duration:r,taskId:e}})}}),Ys=S("levelUpgrade",{paramsSchema:c.tuple(c.string(),c.string()),implement:async(e,t)=>{let r=[];r.push(F.reportToNative({event:"LevelUpgrade",params:{name:t,levelId:e}})),await Promise.all(r)}}),Qs=S("onHistoryUserLevel",{paramsSchema:c.tuple(c.number()),implement:async e=>await F.reportToNative({event:"HistoryUserLevel",params:{level:e}})}),Xs=S("onHistoryUserScore",{paramsSchema:c.tuple(c.number()),implement:async e=>await F.reportToNative({event:"HistoryUserScore",params:{score:e}})}),Zs=S("taskEvent",{paramsSchema:c.tuple(c.string(),c.object({tools:c.array(c.object({id:c.string(),name:c.string(),count:c.number(),description:c.string().optional(),price:c.object({amount:c.number(),unit:c.string()}).optional()})).optional(),awards:c.array(c.object({id:c.string(),name:c.string()})).optional()})),implement:async(e,t)=>{let r=[];r.push(F.reportToNative({event:"TaskEvent",params:{taskId:e,...t}})),(t.tools?.length??!1)&&(r.push(F.reporter({event:"USE_GAME_ITEM"})),r.push(F.reportToNative({event:"UseGameItem",params:{taskId:e,...t}}))),await Promise.all(r)}});ce.registerCommand("TaskTrackerSDK.levelFinished",zs);ce.registerCommand("TaskTrackerSDK.taskFinished",Ws);ce.registerCommand("TaskTrackerSDK.levelUpgrade",Ys);ce.registerCommand("TaskTrackerSDK.historyUserLevel",Qs);ce.registerCommand("TaskTrackerSDK.historyUserScore",Xs);ce.registerCommand("TaskTrackerSDK.taskEvent",Zs);g("TaskTrackerSDK.onLevelFinished",{version:"1.0.0",properties:{levelId:"1.0.0",params:{result:"1.0.0",duration:"1.0.0"}}});g("TaskTrackerSDK.onTaskFinished",{version:"1.0.0",properties:{taskId:"1.0.0",duration:"1.0.0"}});g("TaskTrackerSDK.onLevelUpgrade",{version:"1.0.0",properties:{levelId:"1.0.0",name:"1.0.0"}});g("TaskTrackerSDK.onHistoryUserLevel",{version:"1.0.0",properties:{level:"1.0.0"}});g("TaskTrackerSDK.onHistoryUserScore",{version:"1.0.0",properties:{score:"1.0.0"}});g("TaskTrackerSDK.onTaskEvent",{version:"1.0.0",properties:{taskId:"1.0.0",params:{tools:{id:"1.0.0",name:"1.0.0",count:"1.0.0",description:"1.0.0",price:{amount:"1.0.0",unit:"1.0.0"}},awards:{id:"1.0.0",name:"1.0.0"}}}});$();B();G();v();X();g("login",{version:"1.0.0",properties:{force:"1.0.0"},success:{errMsg:"1.0.0",code:"1.0.0",token:"1.0.0",isLogin:"1.0.0"}});g("checkSession",{version:"1.0.0",success:{errMsg:"1.0.0"}});var eo=S("login",{async implement(){let{data:{isLogin:e}}=await O("checkLoginAsync");if(e)return{isLogin:!0,token:y.hostUserInfo?.token};J("onLoginStateChange",({isLogin:i,token:a,uuid:d})=>{d==r&&s({isLogin:i,token:a})});let t=A("loginSync"),{data:{uuid:r}}=t;if(!r)throw se({code:-1,msg:"login failed"});let{promise:n,resolve:s}=new Y,o=await n;return y.onEnvConfigChanged({hostUserInfo:o}),V.emit("onLoginComplete",o),o}}),to=S("checkSession",{async implement(){let{data:{isLogin:e}}=await O("checkLoginAsync");return{isLogin:e}}}),cn=I();cn.registerCommand("API.login",eo);cn.registerCommand("API.checkSession",to);v();G();var Xe=class{constructor(t){this.track=t;this.adBreakIsShowing=!1;this.reportPageJumpOut=()=>{this.track("AdBreakJumpOut",{context:"AdsActionDetection"})};this.reportPageHide=()=>{this.track("AdBreakHide",{context:"AdsActionDetection"})};window.addEventListener("visibilitychange",()=>{document.hidden&&this.adBreakIsShowing&&this.reportPageHide()}),window.addEventListener("beforeunload",r=>{this.adBreakIsShowing&&this.reportPageJumpOut()})}};var ln="jolibox-sdk-ads-callbreak-timestamps",Ze=class{constructor(t,r){this.checkNetwork=t;this.maxAllowedAdsForTime=8;this.bannedForTimeThreshold=6e4;this.bannedReleaseTime=6e4;this.isBanningForTime=!1;this.releaseBannedForTimeTimeout=null;this.maxAllowedAdsForSession=200;this.bannedForSessionThreshold=6e5;this.isBanningForSession=!1;this.initialThreshold=2e3;this._callAdsTimestampsForTime=[];this.callAdsTimestampsForSession=[];this.initTimestamp=0;this.initCallAdsTimestampsForTime=()=>{try{let t=JSON.parse(window.localStorage.getItem(ln)??"[]");Array.isArray(t)?this._callAdsTimestampsForTime=t:this._callAdsTimestampsForTime=[]}catch{this._callAdsTimestampsForTime=[]}};this.setReleaseBannedForTime=()=>{this.releaseBannedForTimeTimeout&&(window.clearTimeout(this.releaseBannedForTimeTimeout),this.releaseBannedForTimeTimeout=null),this.releaseBannedForTimeTimeout=window.setTimeout(()=>{this.isBanningForTime=!1,this.releaseBannedForTimeTimeout=null},this.bannedReleaseTime)};this.checkShouldBannedInitial=()=>{if(Date.now()-this.initTimestamp<=this.initialThreshold)return"BLOCK_INITIAL"};this.checkShouldBannedForSession=t=>{if(this.isBanningForSession)return"BANNED_FOR_SESSION";let r=Date.now();if(this.callAdsTimestampsForSession=this.callAdsTimestampsForSession.concat({timestamp:r,type:t}),this.callAdsTimestampsForSession.length!==1&&(this.callAdsTimestampsForSession.length>this.maxAllowedAdsForSession&&(this.callAdsTimestampsForSession=this.callAdsTimestampsForSession.slice(-this.maxAllowedAdsForSession)),this.callAdsTimestampsForSession.length===this.maxAllowedAdsForSession&&r-this.callAdsTimestampsForSession[0].timestamp<=this.bannedForSessionThreshold))return this.isBanningForSession=!0,"BANNED_FOR_SESSION"};this.checkShouldBannedForTime=t=>{if(this.isBanningForTime)return"WAITING_BANNED_RELEASE";let r=Date.now();if(this.callAdsTimestampsForTime=this.callAdsTimestampsForTime.concat({timestamp:r,type:t}),this.callAdsTimestampsForTime.length!==1&&(this.callAdsTimestampsForTime.length>this.maxAllowedAdsForTime&&(this.callAdsTimestampsForTime=this.callAdsTimestampsForTime.slice(-this.maxAllowedAdsForTime)),this.callAdsTimestampsForTime.length===this.maxAllowedAdsForTime&&r-this.callAdsTimestampsForTime[0].timestamp<=this.bannedForTimeThreshold))return this.isBanningForTime=!0,this.setReleaseBannedForTime(),"BANNED_FOR_TIME"};this.checkAdsDisplayPermission=t=>{if(!this.checkNetwork())return"NETWORK_NOT_OK";let r=this.checkShouldBannedInitial();if(r)return r;let n=this.checkShouldBannedForSession(t);if(n)return n;let s=this.checkShouldBannedForTime(t);return s||"ALLOWED"};if(this.maxAllowedAdsForTime=r?.maxAllowedAdsForTime??8,this.bannedForTimeThreshold=r?.bannedForTimeThreshold??6e4,this.bannedReleaseTime=r?.bannedReleaseTime??6e4,this.maxAllowedAdsForSession=r?.maxAllowedAdsForSession??200,this.bannedForSessionThreshold=r?.bannedForSessionThreshold??6e5,this.initialThreshold=r?.initialThreshold??2e3,this.maxAllowedAdsForTime<=1)throw new Error("maxAllowedAdsForTime must be greater than 1");if(this.bannedForTimeThreshold<0)throw new Error("bannedForTimeThreshold must be greater than or equal to 0");if(this.bannedReleaseTime<this.bannedForTimeThreshold)throw new Error("bannedReleaseTime must be greater than or equal to bannedForTimeThreshold");if(this.initialThreshold<0)throw new Error("initialThreshold must be greater than or equal to 0");this.initCallAdsTimestampsForTime(),this.initTimestamp=Date.now()}get callAdsTimestampsForTime(){return this._callAdsTimestampsForTime}set callAdsTimestampsForTime(t){try{window.localStorage.setItem(ln,JSON.stringify(t))}catch{console.error("Failed to save timestamps")}this._callAdsTimestampsForTime=t}};$();var dn={ISXT6:{skipInterstitials:!0}};var et=class{constructor(t,r,n){this.track=t;this.httpClient=r;this.checkNetwork=n;this.configured=!1;this.config={};this.getGameId=()=>y.mpId;this.getTestAdsMode=()=>y.testAdsMode;this.asyncLoad=async()=>{let t="ca-pub-7171363994453626",r,n,s=window.encodeURIComponent(window.btoa(this.getGameId()??"")),o=this.getTestAdsMode()??!1;try{let i=await this.httpClient.get("/public/ads",{query:{objectId:s,testAdsMode:`${o}`}});t=i.data?.clientId,r=i.data?.channelId,n=i.data?.unitId}catch(i){console.error("Failed to fetch client info",i)}this.clientId=t,this.channelId=r,this.unitId=n};this.asyncInit=async t=>{if(typeof window>"u")return;await this.asyncLoad();let r="google-adsense",n=this.getTestAdsMode()??!1;if(!document.getElementById(r)&&this.clientId){let s=document.createElement("script");s.id=r,s.async=!0,s.crossOrigin="anonymous",s.src=`https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=${this.clientId}`,n&&s.setAttribute("data-adbreak-test","on"),this.channelId&&s.setAttribute("data-ad-channel",this.channelId),document.head.appendChild(s),this.track("LoadAdsenseCompleted",null)}};this.push=(t={})=>{window.adsbygoogle.push(t)};this.adConfig=t=>{let{onReady:r,...n}=t;this.track("CallAdConfig",n),this.configured?console.warn("Ad config already set, skipping"):(this.configured=!0,this.push(t))};this.adBreak=t=>{if(!this.getGameId()){console.warn("Game ID is not set, skip calling adBreak");return}if(t.type!=="reward"&&(dn[y.channel??""]?.skipInterstitials??!1)){t.adBreakDone?.({breakType:t.type,breakName:"skipInterstitials",breakFormat:"interstitial",breakStatus:"viewed"});return}let r=this.antiCheating.checkAdsDisplayPermission(t.type==="reward"?"reward":"interstitial");switch(r){case"NETWORK_NOT_OK":case"BANNED_FOR_SESSION":console.warn("Ads not allowed",r),t.adBreakDone?.({breakType:t.type,breakName:r,breakFormat:t.type==="reward"?"reward":"interstitial",breakStatus:"noAdPreloaded"}),this.track("PreventAdsCheating",{reason:r});return;case"BLOCK_INITIAL":case"BANNED_FOR_TIME":case"WAITING_BANNED_RELEASE":console.warn("Ads not allowed",r),t.adBreakDone?.({breakType:t.type,breakFormat:t.type==="reward"?"reward":"interstitial",breakStatus:"viewed"}),this.track("PreventAdsCheating",{reason:r});return;default:break}let n=t.type,s=t.adBreakDone,o=a=>{this.adsActionDetection.adBreakIsShowing=!1,this.track("CallAdBreakDone",{breakType:a.breakType,breakName:a.breakName??"",breakFormat:a.breakFormat,breakStatus:a.breakStatus}),s&&s(a)};if(t.adBreakDone=o,t.type==="reward"){let a=t.beforeReward,d=u=>()=>{this.track("CallShowAdFn",null),u()},l=u=>{a&&a(d(u))};t.beforeReward=l}let i;switch(n){case"preroll":i={type:n};break;case"start":case"pause":case"next":case"browse":case"reward":i={type:n,name:t.name??""};break}this.adsActionDetection.adBreakIsShowing=!0,this.track("CallAdBreak",i),this.push(t),window.JoliTesterBridge&&console.log("joli-fullscreen-ad-show")};this.adUnit=async t=>{if(this.track("CallAdUnit",{adFormat:t.adFormat?.toString()??null,fullWidthResponsive:t.fullWidthResponsive??null}),this.clientId||await this.asyncLoad(),document.querySelector("#jolibox-ads")){console.warn("Ad unit already set, skipping");return}let{el:r,slot:n,adFormat:s,fullWidthResponsive:o,style:i}=t,a;if(!r)throw new Error("targeting element is required");if(typeof r=="string"?a=document.querySelector(r):a=r,!a)throw new Error("targeting element not found");let d=n;if(d||(d=this.unitId),!d)throw new Error("slot is required");let l=typeof s=="object"&&Array.isArray(s)?s.join(", "):s,u=document.createElement("ins");if(u.className="adsbygoogle",u.id="jolibox-ads",u.style.display="block",u.setAttribute("data-ad-client",this.clientId),u.setAttribute("data-ad-slot",d),l&&u.setAttribute("data-ad-format",l),o&&u.setAttribute("data-full-width-responsive",o),i&&u.setAttribute("style",i),this.getTestAdsMode()??!1){let m=document.createElement("div");m.style.position="absolute",m.style.top="0",m.style.left="0",m.style.width="100%",m.style.height="100%",m.style.display="flex",m.style.justifyContent="center",m.style.alignItems="center",m.style.backgroundColor="rgba(0, 0, 0, 0.5)",m.style.color="white",m.innerHTML="Test Ad",u.style.position="relative",a.appendChild(u),u.appendChild(m)}else a.appendChild(u),new MutationObserver(f=>{f.forEach(b=>{if(b.type==="attributes"&&b.attributeName==="data-ad-status"){let _=u.getAttribute("data-ad-status");this.track("AdSenseUnitStatusChanged",{status:_??"null"})}})}).observe(u,{attributes:!0,attributeFilter:["data-ad-status"]}),this.push({})};this.antiCheating=new Ze(n),this.adsActionDetection=new Xe(this.track)}init(t){this.track("CallAdsInit",null),!(typeof window>"u")&&(this.config=t??{},window.adsbygoogle=window.adsbygoogle||[],this.asyncInit(t))}};ee();Re();var tt=I(),rt=new et(U,{get:(e,t)=>K(e,{method:"GET",responseType:"json",appendHostCookie:!0,...t}).then(r=>r.response.data)},()=>!0),ro=w("adInit",{implement:e=>{rt.init(e)}}),no=w("adConfig",{implement:e=>{rt.adConfig(e)}}),so=w("adBreak",{implement:e=>{rt.adBreak(e)}}),oo=w("adUnit",{implement:e=>{rt.adUnit(e)}});tt.registerCommand("AdsSDK.init",ro);tt.registerCommand("AdsSDK.adConfig",no);tt.registerCommand("AdsSDK.adBreak",so);tt.registerCommand("AdsSDK.adUnit",oo);g("AdsSDK.init",{version:"1.0.0"});g("AdsSDK.adConfig",{version:"1.0.0"});g("AdsSDK.adBreak",{version:"1.0.0"});g("AdsSDK.adUnit",{version:"1.0.0"});ee();Gr();
|
package/implement.build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Invoking: npm run clean && npm run build:esm && tsc
|
|
2
2
|
|
|
3
|
-
> @jolibox/implement@1.1.4-beta.
|
|
3
|
+
> @jolibox/implement@1.1.4-beta.15 clean
|
|
4
4
|
> rimraf ./dist
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
> @jolibox/implement@1.1.4-beta.
|
|
7
|
+
> @jolibox/implement@1.1.4-beta.15 build:esm
|
|
8
8
|
> BUILD_VERSION=$(node -p "require('./package.json').version") node esbuild.config.js --format=esm
|
|
9
9
|
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jolibox/implement",
|
|
3
3
|
"description": "This project is Jolibox JS-SDk implement for Native && H5",
|
|
4
|
-
"version": "1.1.4-beta.
|
|
4
|
+
"version": "1.1.4-beta.15",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@jolibox/common": "1.1.4-beta.
|
|
10
|
-
"@jolibox/types": "1.1.4-beta.
|
|
9
|
+
"@jolibox/common": "1.1.4-beta.15",
|
|
10
|
+
"@jolibox/types": "1.1.4-beta.15",
|
|
11
11
|
"localforage": "1.10.0"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Track } from '../report';
|
|
2
2
|
|
|
3
3
|
export class AdsActionDetection {
|
|
4
4
|
adBreakIsShowing = false;
|
|
5
5
|
|
|
6
6
|
private reportPageJumpOut = () => {
|
|
7
|
-
track('AdBreakJumpOut', {
|
|
7
|
+
this.track('AdBreakJumpOut', {
|
|
8
8
|
context: 'AdsActionDetection'
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
private reportPageHide = () => {
|
|
13
|
-
track('AdBreakHide', {
|
|
13
|
+
this.track('AdBreakHide', {
|
|
14
14
|
context: 'AdsActionDetection'
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
constructor() {
|
|
18
|
+
constructor(readonly track: Track) {
|
|
19
19
|
window.addEventListener('visibilitychange', () => {
|
|
20
20
|
if (document.hidden && this.adBreakIsShowing) {
|
|
21
21
|
this.reportPageHide();
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { tracker } from '../report/event-tracker';
|
|
2
|
-
|
|
3
1
|
export type AdsDisplayPermission =
|
|
4
2
|
| 'BLOCK_INITIAL'
|
|
5
3
|
| 'BANNED_FOR_SESSION'
|
|
@@ -41,10 +39,10 @@ export class AdsAntiCheating {
|
|
|
41
39
|
|
|
42
40
|
private initTimestamp = 0;
|
|
43
41
|
// private context: JoliboxSDKPipeExecutor;
|
|
44
|
-
private report = tracker;
|
|
45
42
|
|
|
46
43
|
constructor(
|
|
47
44
|
// context: JoliboxSDKPipeExecutor,
|
|
45
|
+
readonly checkNetwork: () => boolean,
|
|
48
46
|
config?: IAdsAntiCheatingConfig
|
|
49
47
|
) {
|
|
50
48
|
this.maxAllowedAdsForTime = config?.maxAllowedAdsForTime ?? 8;
|
|
@@ -220,7 +218,7 @@ export class AdsAntiCheating {
|
|
|
220
218
|
};
|
|
221
219
|
|
|
222
220
|
public checkAdsDisplayPermission: (type: 'reward' | 'interstitial') => AdsDisplayPermission = (type) => {
|
|
223
|
-
if (!this.
|
|
221
|
+
if (!this.checkNetwork()) {
|
|
224
222
|
return 'NETWORK_NOT_OK';
|
|
225
223
|
}
|
|
226
224
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { createCommands } from '@jolibox/common';
|
|
2
1
|
import { AdsActionDetection } from './ads-action-detection';
|
|
3
2
|
import { AdsAntiCheating } from './anti-cheating';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
const commands = createCommands();
|
|
3
|
+
import { Track, EventTracker } from '../report';
|
|
4
|
+
import { context } from '../context';
|
|
5
|
+
import { channelPolicy } from './channel-policy';
|
|
8
6
|
|
|
9
7
|
declare global {
|
|
10
8
|
interface Window {
|
|
@@ -255,6 +253,10 @@ interface IJoliboxAdsResponse {
|
|
|
255
253
|
};
|
|
256
254
|
}
|
|
257
255
|
|
|
256
|
+
interface HttpClient {
|
|
257
|
+
get<T>(url: string, options?: { query?: Record<string, string> }): Promise<T>;
|
|
258
|
+
}
|
|
259
|
+
|
|
258
260
|
/**
|
|
259
261
|
* Jolibox Ads SDK
|
|
260
262
|
*/
|
|
@@ -264,18 +266,16 @@ export class JoliboxAdsImpl {
|
|
|
264
266
|
public clientId?: string;
|
|
265
267
|
public channelId?: string;
|
|
266
268
|
public unitId?: string;
|
|
267
|
-
|
|
268
|
-
// private context: JoliboxSDKPipeExecutor;
|
|
269
|
+
|
|
269
270
|
private antiCheating: AdsAntiCheating;
|
|
270
271
|
private adsActionDetection: AdsActionDetection;
|
|
271
272
|
|
|
272
273
|
/**
|
|
273
274
|
* Internal constructor, should not be called directly
|
|
274
275
|
*/
|
|
275
|
-
constructor(
|
|
276
|
-
|
|
277
|
-
this.
|
|
278
|
-
this.adsActionDetection = new AdsActionDetection(/*context*/);
|
|
276
|
+
constructor(readonly track: Track, readonly httpClient: HttpClient, readonly checkNetwork: () => boolean) {
|
|
277
|
+
this.antiCheating = new AdsAntiCheating(checkNetwork);
|
|
278
|
+
this.adsActionDetection = new AdsActionDetection(this.track);
|
|
279
279
|
}
|
|
280
280
|
|
|
281
281
|
/**
|
|
@@ -284,7 +284,7 @@ export class JoliboxAdsImpl {
|
|
|
284
284
|
* @returns
|
|
285
285
|
*/
|
|
286
286
|
public init(config?: IAdsInitParams) {
|
|
287
|
-
track('CallAdsInit', null);
|
|
287
|
+
this.track('CallAdsInit', null);
|
|
288
288
|
if (typeof window === 'undefined') {
|
|
289
289
|
// skip if not in browser
|
|
290
290
|
return;
|
|
@@ -296,13 +296,11 @@ export class JoliboxAdsImpl {
|
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
private getGameId = () => {
|
|
299
|
-
|
|
300
|
-
return urlParams.get('gameId') ?? this.config.gameId;
|
|
299
|
+
return context.mpId;
|
|
301
300
|
};
|
|
302
301
|
|
|
303
302
|
private getTestAdsMode = () => {
|
|
304
|
-
|
|
305
|
-
return urlParams.get('testAdsMode') === 'true';
|
|
303
|
+
return context.testAdsMode;
|
|
306
304
|
};
|
|
307
305
|
|
|
308
306
|
private asyncLoad = async () => {
|
|
@@ -358,7 +356,7 @@ export class JoliboxAdsImpl {
|
|
|
358
356
|
script.setAttribute('data-ad-channel', this.channelId);
|
|
359
357
|
}
|
|
360
358
|
document.head.appendChild(script);
|
|
361
|
-
track('LoadAdsenseCompleted', null);
|
|
359
|
+
this.track('LoadAdsenseCompleted', null);
|
|
362
360
|
}
|
|
363
361
|
};
|
|
364
362
|
|
|
@@ -376,7 +374,7 @@ export class JoliboxAdsImpl {
|
|
|
376
374
|
*/
|
|
377
375
|
public adConfig = (params: IAdConfigParams) => {
|
|
378
376
|
const { onReady, ...paramsToTrack } = params;
|
|
379
|
-
track('CallAdConfig', paramsToTrack);
|
|
377
|
+
this.track('CallAdConfig', paramsToTrack);
|
|
380
378
|
if (!this.configured) {
|
|
381
379
|
this.configured = true;
|
|
382
380
|
this.push(params);
|
|
@@ -417,6 +415,20 @@ export class JoliboxAdsImpl {
|
|
|
417
415
|
console.warn('Game ID is not set, skip calling adBreak');
|
|
418
416
|
return;
|
|
419
417
|
}
|
|
418
|
+
|
|
419
|
+
if (params.type !== 'reward') {
|
|
420
|
+
const skipInterstitials = channelPolicy[context.channel ?? '']?.skipInterstitials ?? false;
|
|
421
|
+
if (skipInterstitials) {
|
|
422
|
+
params.adBreakDone?.({
|
|
423
|
+
breakType: params.type,
|
|
424
|
+
breakName: 'skipInterstitials',
|
|
425
|
+
breakFormat: 'interstitial',
|
|
426
|
+
breakStatus: 'viewed'
|
|
427
|
+
});
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
420
432
|
const adsDisplayPermission = this.antiCheating.checkAdsDisplayPermission(
|
|
421
433
|
params.type === 'reward' ? 'reward' : 'interstitial'
|
|
422
434
|
);
|
|
@@ -431,7 +443,7 @@ export class JoliboxAdsImpl {
|
|
|
431
443
|
breakFormat: params.type === 'reward' ? 'reward' : 'interstitial',
|
|
432
444
|
breakStatus: 'noAdPreloaded'
|
|
433
445
|
});
|
|
434
|
-
track('PreventAdsCheating', {
|
|
446
|
+
this.track('PreventAdsCheating', {
|
|
435
447
|
reason: adsDisplayPermission
|
|
436
448
|
});
|
|
437
449
|
return;
|
|
@@ -444,7 +456,7 @@ export class JoliboxAdsImpl {
|
|
|
444
456
|
breakFormat: params.type === 'reward' ? 'reward' : 'interstitial',
|
|
445
457
|
breakStatus: 'viewed' // TODO: need to confirm
|
|
446
458
|
});
|
|
447
|
-
track('PreventAdsCheating', {
|
|
459
|
+
this.track('PreventAdsCheating', {
|
|
448
460
|
reason: adsDisplayPermission
|
|
449
461
|
});
|
|
450
462
|
return;
|
|
@@ -459,7 +471,7 @@ export class JoliboxAdsImpl {
|
|
|
459
471
|
const originAdBreakDone = params.adBreakDone;
|
|
460
472
|
const adBreakDone = (placementInfo: IPlacementInfo) => {
|
|
461
473
|
this.adsActionDetection.adBreakIsShowing = false;
|
|
462
|
-
track('CallAdBreakDone', {
|
|
474
|
+
this.track('CallAdBreakDone', {
|
|
463
475
|
breakType: placementInfo.breakType,
|
|
464
476
|
breakName: placementInfo.breakName ?? '',
|
|
465
477
|
breakFormat: placementInfo.breakFormat,
|
|
@@ -476,7 +488,7 @@ export class JoliboxAdsImpl {
|
|
|
476
488
|
if (params.type === 'reward') {
|
|
477
489
|
const originBeforeReward = params.beforeReward;
|
|
478
490
|
const wrapShowAdFn = (originShowAdFn: () => void) => () => {
|
|
479
|
-
track('CallShowAdFn', null);
|
|
491
|
+
this.track('CallShowAdFn', null);
|
|
480
492
|
originShowAdFn();
|
|
481
493
|
};
|
|
482
494
|
const beforeReward = (originShowAdFn: () => void) => {
|
|
@@ -502,7 +514,7 @@ export class JoliboxAdsImpl {
|
|
|
502
514
|
break;
|
|
503
515
|
}
|
|
504
516
|
this.adsActionDetection.adBreakIsShowing = true;
|
|
505
|
-
track('CallAdBreak', paramsToTrack);
|
|
517
|
+
this.track('CallAdBreak', paramsToTrack);
|
|
506
518
|
this.push(params);
|
|
507
519
|
|
|
508
520
|
// https://rsgce94md216.sg.larksuite.com/wiki/JGrAwRk7BiRJyekzJmKlbOawg7e?from=from_copylink
|
|
@@ -524,7 +536,7 @@ export class JoliboxAdsImpl {
|
|
|
524
536
|
* @returns
|
|
525
537
|
*/
|
|
526
538
|
public adUnit = async (params: IAdUnitParams) => {
|
|
527
|
-
track('CallAdUnit', {
|
|
539
|
+
this.track('CallAdUnit', {
|
|
528
540
|
adFormat: params.adFormat?.toString() ?? null,
|
|
529
541
|
fullWidthResponsive: params.fullWidthResponsive ?? null
|
|
530
542
|
});
|
|
@@ -621,7 +633,7 @@ export class JoliboxAdsImpl {
|
|
|
621
633
|
mutations.forEach((mutation) => {
|
|
622
634
|
if (mutation.type === 'attributes' && mutation.attributeName === 'data-ad-status') {
|
|
623
635
|
const status = ins.getAttribute('data-ad-status');
|
|
624
|
-
track('AdSenseUnitStatusChanged', {
|
|
636
|
+
this.track('AdSenseUnitStatusChanged', {
|
|
625
637
|
status: status ?? 'null'
|
|
626
638
|
});
|
|
627
639
|
}
|
|
@@ -636,23 +648,3 @@ export class JoliboxAdsImpl {
|
|
|
636
648
|
}
|
|
637
649
|
};
|
|
638
650
|
}
|
|
639
|
-
|
|
640
|
-
export default JoliboxAdsImpl;
|
|
641
|
-
|
|
642
|
-
const ads = new JoliboxAdsImpl();
|
|
643
|
-
|
|
644
|
-
commands.registerCommand('AdsSDK.init', (config) => {
|
|
645
|
-
ads.init(config);
|
|
646
|
-
});
|
|
647
|
-
|
|
648
|
-
commands.registerCommand('AdsSDK.adConfig', (params) => {
|
|
649
|
-
ads.adConfig(params);
|
|
650
|
-
});
|
|
651
|
-
|
|
652
|
-
commands.registerCommand('AdsSDK.adBreak', (params) => {
|
|
653
|
-
ads.adBreak(params);
|
|
654
|
-
});
|
|
655
|
-
|
|
656
|
-
commands.registerCommand('AdsSDK.adUnit', (params) => {
|
|
657
|
-
ads.adUnit(params);
|
|
658
|
-
});
|