@heybox/hb-sdk 0.9.0-alpha.9 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README.md +8 -0
- package/dist/cli-chunks/{build-CSdIuQth.cjs → build-D01zUnqJ.cjs} +5 -5
- package/dist/cli-chunks/{context-aw5O_ItL.cjs → context-BBfpZWvS.cjs} +2 -2
- package/dist/cli-chunks/{create-B-uOJ6jo.cjs → create-0MZlL6Vb.cjs} +1 -1
- package/dist/cli-chunks/{dev-CdQFaqsM.cjs → dev-DRDvIKah.cjs} +9 -11
- package/dist/cli-chunks/{doctor-D7wAhL_F.cjs → doctor-B6yYLEjK.cjs} +1 -1
- package/dist/cli-chunks/{index-D-4qn-PG.cjs → index-BcrpdqEl.cjs} +2 -2
- package/dist/cli-chunks/{index-CrAaRBIJ.cjs → index-BdI9e2M_.cjs} +15 -15
- package/dist/cli-chunks/{index.esm-CYmCravp.cjs → index.esm-_JWYoJDg.cjs} +7 -7
- package/dist/cli-chunks/{login-D80S50rt.cjs → login-QgLsbmLe.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-CreFoZsj.cjs → project-vite-DiGyY9kQ.cjs} +1 -1
- package/dist/cli-chunks/{remote-CgYQrPWf.cjs → remote-xLIgPix6.cjs} +7 -7
- package/dist/cli-chunks/{runtime-gate-CYkuG3Yw.cjs → runtime-gate-AtTBauWV.cjs} +1 -1
- package/dist/cli-chunks/{runtime-permission-env-0o7PQmxU.cjs → runtime-permission-env-QrndVK72.cjs} +1 -5
- package/dist/cli-chunks/{session-eQw7J8qc.cjs → session-BilIrecv.cjs} +1 -1
- package/dist/cli-chunks/{skill-j4vNU7Hh.cjs → skill-D1Fm2RTs.cjs} +2 -2
- package/dist/cli-chunks/{version-CeVbqw15.cjs → version-D8jlMg_C.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/{browser-dev-host-CzV0H7nG.js → browser-dev-host-R5zFBCNc.js} +20 -20
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-dmf1ja_e.js → desktop-app-launch-DvlJu02d.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-DZQpNbIp.js → index-CuKd_Bfx.js} +3 -3
- package/dist/devtools/browser-dev-host/index.html +2 -2
- package/dist/index.cjs.js +9 -2
- package/dist/index.esm.js +9 -2
- package/dist/vite.cjs.js +2 -7
- package/dist/vite.esm.js +2 -7
- package/package.json +5 -5
- package/skill/skill.json +4 -4
- package/types/miniapp-manifest/permissions.d.ts +1 -2
- package/types/modules/files/types.d.ts +19 -4
- package/types/modules/navigation/index.d.ts +8 -0
- package/types/vite/index.d.ts +1 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import{H as Mo,aA as Ld,a$ as Md,M as kd,aK as Ud,aL as xd,am as cr,b9 as W,ad as Hd,an as xa,at as Fd,b3 as Bd,ap as Vd,d as qd,aH as Ha,ab as zd,aw as Fa,r as Gd,aC as Ba,o as jd,aG as $d,a8 as Wd,b1 as Kd,b0 as Yd,c as Qd}from"./desktop-app-launch-dmf1ja_e.js";const Vr="auth.login",qr="user.getInfo",zr="user.revokeAuthorization",Gr="user.getSteamGameList",jr="share.copyLink",$r="share.showShareMenu",Wr="share.screenshot",ot="viewport.setDisplay",Kr="viewport.getWindowInfo",Yr="viewport.setNavigationBarStyle",Kt="storage.getStorage",Yt="storage.setStorage",Qr="network.request",Jr="network.download",Xr="files.pickFiles",Zr="files.pickDirectory",en="files.saveFile",Qt="file.create",Jt="file.remove",tn="file.exists",Xt="file.readText",rn="file.writeText",Zt="file.readBytes",nn="file.writeBytes",er="file.stat",on="directory.create",tr="directory.remove",sn="directory.exists",an="directory.list",cn="ui.showToast",dn="ui.showLoading",un="ui.hideLoading",ln="device.vibrate",fn="device.setClipboard",hn="navigation.close",mn="navigation.reload",pn="navigation.openAppPage",Me="cloud.leaderboard.submit",be="cloud.leaderboard.getList",ze="cloud.leaderboard.getCurrentUserEntry",st="cloud.leaderboard.deleteCurrentUserEntry",De="cloud.leaderboard.getInfo",_n="companion.getInfo",Sn="companion.getPreparationStatus",vn="companion.prepare",Rn="companion.cancelPreparation",On="companion.getActiveSession",Dn="companion.launch",Nn="companion.session.write",Pn="companion.session.closeStdin",Tn="companion.session.terminate",Cn="companion.session.ackOutput",Ln="companion.openAttachment",Mn="companion.showNotification",Ge=[{method:Vr,module:"auth",capability:Vr,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:qr,module:"user",capability:qr,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:zr,module:"user",capability:zr,requirement:{kind:"none"},risk:"high"},{method:Gr,module:"user",capability:Gr,requirement:{kind:"all",permissions:["steamLibrary"]},risk:"high"},{method:jr,module:"share",capability:jr,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:$r,module:"share",capability:$r,requirement:{kind:"all",permissions:["share"]},risk:"low"},{method:Wr,module:"share",capability:Wr,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:Kr,module:"viewport",capability:Kr,requirement:{kind:"none"},risk:"low"},{method:Yr,module:"viewport",capability:Yr,requirement:{kind:"none"},risk:"low"},{method:ot,module:"viewport",capability:ot,requirement:{kind:"none"},risk:"low"},{method:Kt,module:"storage",capability:Kt,requirement:{kind:"all",permissions:["storage"]},risk:"low"},{method:Yt,module:"storage",capability:Yt,requirement:{kind:"all",permissions:["storage"]},risk:"medium"},{method:Qr,module:"network",capability:Qr,requirement:{kind:"all",permissions:["network"]},risk:"high"},{method:Jr,module:"network",capability:Jr,requirement:{kind:"all",permissions:["network","filesystem"]},risk:"high"},{method:Xr,module:"files",capability:Xr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Zr,module:"files",capability:Zr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:en,module:"files",capability:en,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Qt,module:"file",capability:Qt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Jt,module:"file",capability:Jt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:tn,module:"file",capability:tn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Xt,module:"file",capability:Xt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:rn,module:"file",capability:rn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Zt,module:"file",capability:Zt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:nn,module:"file",capability:nn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:er,module:"file",capability:er,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:on,module:"directory",capability:on,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:tr,module:"directory",capability:tr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:sn,module:"directory",capability:sn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:an,module:"directory",capability:an,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:cn,module:"ui",capability:cn,requirement:{kind:"none"},risk:"low"},{method:dn,module:"ui",capability:dn,requirement:{kind:"none"},risk:"low"},{method:un,module:"ui",capability:un,requirement:{kind:"none"},risk:"low"},{method:ln,module:"device",capability:ln,requirement:{kind:"none"},risk:"low"},{method:fn,module:"device",capability:fn,requirement:{kind:"all",permissions:["clipboard"]},risk:"medium"},{method:hn,module:"navigation",capability:hn,requirement:{kind:"none"},risk:"medium"},{method:mn,module:"navigation",capability:mn,requirement:{kind:"none"},risk:"medium"},{method:pn,module:"navigation",capability:pn,requirement:{kind:"none"},risk:"medium"},{method:Me,module:"cloud",capability:Me,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:be,module:"cloud",capability:be,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},{method:ze,module:"cloud",capability:ze,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:st,module:"cloud",capability:st,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:De,module:"cloud",capability:De,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},...[_n,Sn,vn,Rn,On,Dn,Nn,Pn,Tn,Cn,Ln,Mn].map(e=>({method:e,module:"companion",capability:e,requirement:{kind:"all",permissions:["companion"]},risk:"high"}))],Je="heybox:miniprogram",Va=2,Jd="hb_mini_bridge_nonce",qa="sdk.handshake",pr="runtime.location.probe",Xd="sdk.location.report",Zd="sdk.csp.violation",za="operation.progress",eu="companion.session.output",tu="companion.session.exit",ru="companion.session.ownershipLost";function nu(e){return!Qe(e)||e.namespace!==Je||e.version!==1&&e.version!==2||!ae(e.nonce)?!1:e.type==="handshake"?ae(e.id)&&e.method===qa&&e.error===void 0&&au(e.payload):e.type==="request"?ae(e.id)&&ae(e.method)&&e.error===void 0:e.type==="response"?ae(e.id)&&(e.method===void 0||ae(e.method))&&(e.error===void 0||cu(e.error)):e.type==="event"?!ae(e.method)||e.error!==void 0?!1:e.method===za?e.version===2&&ae(e.id)&&su(e.payload):e.id===void 0||ae(e.id):e.type==="cancel"?e.version===2&&ae(e.id)&&e.method===void 0&&e.payload===void 0&&e.error===void 0:!1}function so(e){return typeof e!="string"||!e||e.startsWith("/")||e.endsWith("/")||/[\\\u0000-\u001f\u007f]/.test(e)?!1:e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function Ga(e){return Qe(e)?e.kind==="sandbox"?ke(e,["kind"]):e.kind==="directory"&&ae(e.handleId)&&ke(e,["kind","handleId"]):!1}function ao(e){return!Qe(e)||e.kind!=="file"?!1:ae(e.handleId)?ke(e,["kind","handleId"]):Ga(e.root)&&so(e.relativePath)&&ke(e,["kind","root","relativePath"])}function ja(e){return!Qe(e)||e.kind!=="directory"?!1:ae(e.handleId)?ke(e,["kind","handleId"]):Ga(e.root)&&(e.relativePath==="."||so(e.relativePath))&&ke(e,["kind","root","relativePath"])}function $a(e){return e instanceof Uint8Array&&e.buffer instanceof ArrayBuffer}function iu(e){return!Qe(e)||!bt(e.loaded)||typeof e.lengthComputable!="boolean"||!ke(e,["loaded","total","lengthComputable"])?!1:e.lengthComputable?bt(e.total)&&e.loaded<=e.total:e.total===void 0}function ou(e){return Qe(e)?e.phase==="downloading"?bt(e.loaded)&&(e.total===void 0||bt(e.total)&&e.loaded<=e.total)&&ke(e,["phase","loaded","total"]):e.phase!=="verifying"&&e.phase!=="extracting"?!1:bt(e.processed)&&bt(e.total)&&e.processed<=e.total&&ke(e,["phase","processed","total"]):!1}function su(e){return iu(e)||ou(e)}function au(e){return Qe(e)&&ae(e.href)&&typeof e.userAgent=="string"&&ae(e.sdkVersion)}function cu(e){return Qe(e)&&ae(e.code)&&typeof e.message=="string"}function bt(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function ae(e){return typeof e=="string"&&e.length>0}function ke(e,t){const r=new Set(t);return Object.keys(e).every(n=>r.has(n))}function Qe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const rr=["userInfo","steamLibrary","share","storage","filesystem","clipboard","leaderboard","network","companion"];new Set(rr);const du=new Set(rr);function uu(e){return du.has(e)}function Ue(e){if(!gr(e)||e.schema_version!==1||!Array.isArray(e.entries))return{valid:!1,permissions:{}};if(e.revision!==void 0&&(typeof e.revision!="number"||!Number.isInteger(e.revision)||e.revision<0))return{valid:!1,permissions:{}};const t=new Set,r={};for(const n of e.entries){if(!gr(n)||typeof n.key!="string"||!n.key.trim())return{valid:!1,permissions:{}};const i=n.key.trim(),o=i==="network.request"?"network":i;if(t.has(o)||n.status!=="enabled"&&n.status!=="disabled")return{valid:!1,permissions:{}};if(t.add(o),!!uu(o)){if(o==="network"){const s=n.config;if(!gr(s)||typeof s.useOfficialDomain!="boolean")return{valid:!1,permissions:{}};r[o]={key:o,status:n.status,config:{useOfficialDomain:s.useOfficialDomain}};continue}if(n.config!==null&&n.config!==void 0&&(!gr(n.config)||Object.keys(n.config).length>0))return{valid:!1,permissions:{}};r[o]={key:o,status:n.status,config:{}}}}return{valid:!0,permissions:r}}function gr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Nr=["network","companion"];function Wa(e){if(!yr(e,["schema_version","revision","entries"])||e.schema_version!==1||typeof e.revision!="number"||!Number.isSafeInteger(e.revision)||e.revision<0||!Array.isArray(e.entries)||e.entries.length>Nr.length)return{valid:!1};const t=[],r=new Set;for(const n of e.entries){if(!yr(n,["key","status","config"])||n.status!=="enabled")return{valid:!1};if(typeof n.key!="string"||r.has(n.key))return{valid:!1};if(r.add(n.key),n.key==="network"){if(!yr(n.config,["useOfficialDomain"])||n.config.useOfficialDomain!==!1)return{valid:!1};t.push({key:"network",status:"enabled",config:{useOfficialDomain:!1}})}else if(n.key==="companion"){if(!yr(n.config,[]))return{valid:!1};t.push({key:"companion",status:"enabled",config:{}})}else return{valid:!1}}return t.sort((n,i)=>Nr.indexOf(n.key)-Nr.indexOf(i.key)),{valid:!0,grant:{schema_version:1,revision:e.revision,entries:t}}}function lu(e){if(!Number.isSafeInteger(e.revision)||e.revision<0)throw new Error("本地调试权限 revision 必须是非负安全整数");const t=Ue(e.runtimePermissions),r=new Set(e.eligiblePermissionKeys??["network"]),n=[];for(const i of Nr)!r.has(i)||e.declaredPermissions[i]?.enabled!==!0||t.valid&&t.permissions[i]?.status==="enabled"||n.push(i==="network"?{key:i,status:"enabled",config:{useOfficialDomain:!1}}:{key:i,status:"enabled",config:{}});return{schema_version:1,revision:e.revision,entries:n}}function co(e){const t=Ue(e.runtimePermissions),r=Wa(e.localDevGrant),n=t.valid?t.permissions:{};for(const s of rr)e.declaredPermissions[s]?.enabled!==!0?delete n[s]:s==="network"&&n.network&&(n.network.config.useOfficialDomain=n.network.status==="enabled"&&n.network.config.useOfficialDomain===!0&&e.declaredPermissions.network?.useOfficialDomain===!0);const i=[];if(r.valid)for(const s of r.grant.entries)e.declaredPermissions[s.key]?.enabled!==!0||n[s.key]?.status==="enabled"||(n[s.key]=s,i.push(s.key));const o=Ka(e.runtimePermissions)&&typeof e.runtimePermissions.revision=="number"&&Number.isSafeInteger(e.runtimePermissions.revision)&&e.runtimePermissions.revision>=0?e.runtimePermissions.revision:void 0;return{runtimePermissions:{schema_version:1,...o===void 0?{}:{revision:o},entries:rr.flatMap(s=>n[s]?[n[s]]:[])},temporaryPermissionKeys:i,grantValid:r.valid}}function Ka(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function yr(e,t){return Ka(e)&&Object.keys(e).length===t.length&&t.every(r=>Object.prototype.hasOwnProperty.call(e,r))}const _t=["identity","profile","steam_account"],fu=/^[a-z][a-z0-9-]{0,31}$/,Ya=["COMPANION_UNSUPPORTED","COMPANION_PREVIEW_UNSUPPORTED","COMPANION_NOT_DECLARED","COMPANION_TARGET_UNSUPPORTED","COMPANION_NOT_PREPARED","COMPANION_PREPARATION_CANCELLED","COMPANION_DOWNLOAD_FAILED","COMPANION_DESCRIPTOR_UNAVAILABLE","COMPANION_ARCHIVE_INVALID","COMPANION_INTEGRITY_FAILED","COMPANION_ENTRYPOINT_INVALID","COMPANION_USER_CANCELLED","COMPANION_ELEVATION_DENIED","COMPANION_OS_BLOCKED","COMPANION_LAUNCH_FAILED","COMPANION_SESSION_VERSION_MISMATCH","COMPANION_SESSION_OWNERSHIP_LOST","COMPANION_SESSION_EXITED","COMPANION_PIPE_CLOSED","COMPANION_OUTPUT_LIMIT","COMPANION_PROCESS_CRASHED","COMPANION_ATTACHMENT_NOT_FOUND","COMPANION_NOTIFICATION_UNAVAILABLE","COMPANION_TERMINATE_FAILED"];Ge.map(e=>e.method);function K(e,t,r){return{code:e,message:t,data:r}}function uo(e){return hu(e)?{code:e.code,message:e.message,data:e.data}:e instanceof Error?K("RUNTIME_ERROR",e.message):K("UNKNOWN_ERROR","小程序运行时异常",e)}function hu(e){return!!e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"}function mu(){try{return{activeElement:globalThis.document?.activeElement??null,userActivation:globalThis.navigator?.userActivation}}catch{return{activeElement:null}}}const pu=1e3;function gu(e,t=mu()){if(t.userActivation)return t.userActivation.isActive===!0;const r=t.lastUserInteractionAt,n=t.now??Date.now();return t.activeElement===e&&r!==void 0&&n>=r&&n-r<=pu}const yu="runtime.gate.probe",Qa=new Set(Ge.map(e=>e.method));class Eu{iframe;nonce;onReady;onHandshake;onDuplicateHandshake;onInternalEvent;onResponsePosted;handleMessage;handleUserInteraction;dispatcher;environmentInfo;started=!1;destroyed=!1;handshaken=!1;bridgeVersion=Va;targetOrigin;lastUserInteractionAt;operations=new Map;constructor(t){this.iframe=t.iframe,this.nonce=t.nonce,this.onReady=t.onReady,this.onHandshake=t.onHandshake,this.onDuplicateHandshake=t.onDuplicateHandshake,this.onInternalEvent=t.onInternalEvent,this.onResponsePosted=t.onResponsePosted,this.handleMessage=this.onMessage.bind(this),this.handleUserInteraction=this.onUserInteraction.bind(this),this.dispatcher=t.dispatcher,this.environmentInfo=t.environmentInfo,this.targetOrigin=t.targetOrigin||"*"}get protocolVersion(){return this.handshaken?this.bridgeVersion:void 0}start(){if(!(this.started||this.destroyed)){this.started=!0,window.addEventListener("message",this.handleMessage);for(const t of["pointerdown","touchend","mousedown","keydown"])window.addEventListener(t,this.handleUserInteraction,!0)}}setTargetOrigin(t){this.targetOrigin=t||"*"}destroy(){if(this.destroyed)return;const t=this.started;this.destroyed=!0,this.started=!1,this.handshaken=!1;try{t&&this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:"unload",payload:{timestamp:Date.now()}})}catch{}finally{window.removeEventListener("message",this.handleMessage);for(const r of["pointerdown","touchend","mousedown","keydown"])window.removeEventListener(r,this.handleUserInteraction,!0);this.lastUserInteractionAt=void 0;for(const r of this.operations.values())r.abort("bridge destroyed");this.operations.clear()}}postEvent(t,r){this.destroyed||this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:t,payload:r})}postInternalRequest(t,r,n){this.destroyed||this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"request",id:r,method:t,payload:n})}postProgress(t,r){this.bridgeVersion===2&&this.postMessage({namespace:Je,version:2,nonce:this.nonce,type:"event",id:t,method:za,payload:r})}onMessage(t){if(!this.started||!this.isTrustedMiniProgramMessage(t))return;const r=t.data;if(r.type==="handshake"){this.handleHandshake(r,t.origin);return}if(r.type==="request"){let n=!1;try{n=gu(this.iframe,{activeElement:document.activeElement,userActivation:navigator.userActivation,lastUserInteractionAt:this.lastUserInteractionAt,now:Date.now()})}catch{n=!1}this.handleRequest(r,n);return}if(r.type==="cancel"&&this.handshaken&&r.id){this.operations.get(r.id)?.abort();return}r.type==="event"&&this.handshaken&&this.onInternalEvent?.(r)}onUserInteraction(t){const r=typeof t.composedPath=="function"?t.composedPath():[];(t.target===this.iframe||r.includes(this.iframe))&&(this.lastUserInteractionAt=Date.now())}isTrustedMiniProgramMessage(t){return t.source===this.iframe.contentWindow&&nu(t.data)&&(!this.handshaken||t.data.version===this.bridgeVersion)&&((this.handshaken?this.bridgeVersion:t.data.version)===1||this.targetOrigin==="*"||t.origin===this.targetOrigin)&&t.data.nonce===this.nonce}handleHandshake(t,r){const n=t.payload,i=t.version,o=!this.handshaken;if(o){if(this.onHandshake?.(n)===!1)return;this.bridgeVersion=i,i===1&&this.targetOrigin!=="*"&&r&&r!=="null"&&(this.targetOrigin=r),this.handshaken=!0,this.postEvent("launch",{timestamp:Date.now(),url:this.iframe.src})}this.environmentInfo&&t.id&&this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"response",id:t.id,method:qa,payload:{environment:this.environmentInfo}}),this.postEvent("ready",{timestamp:Date.now()}),o?this.onReady?.(n):this.onDuplicateHandshake?.()}async handleRequest(t,r){if(!t.id||!t.method)return;if(!this.handshaken&&t.method===yu){this.postResponse(t,{ready:!0});return}if(!this.handshaken){this.postResponse(t,void 0,K("BRIDGE_NOT_READY","小程序 SDK 尚未完成握手"));return}if(!Qa.has(t.method)){this.postResponse(t,void 0,K("METHOD_NOT_FOUND",`未开放小程序能力: ${t.method}`));return}if(this.operations.has(t.id)){this.postResponse(t,void 0,K("INVALID_PARAMS","bridge request id 重复"));return}const n=new AbortController;this.operations.set(t.id,n);try{const i=await this.dispatcher.dispatch(t.method,t.payload,{postEvent:this.postEvent.bind(this),postProgress:o=>{this.operations.get(t.id)===n&&this.postProgress(t.id,o)},signal:n.signal,trustedUserGesture:r});if(i.status==="dropped"||!this.started||this.operations.get(t.id)!==n)return;this.postResponse(t,i.value)}catch(i){if(!this.started||this.operations.get(t.id)!==n)return;const o=uo(i);this.postResponse(t,void 0,o),this.postEvent("error",o)}finally{this.operations.get(t.id)===n&&(this.operations.delete(t.id),n.signal.aborted||n.abort("operation terminal"))}}postResponse(t,r,n){if(!(!this.postMessage({namespace:Je,version:t.version,nonce:this.nonce,type:"response",id:t.id,method:t.method,payload:r,error:n})||!wu(t.method)))try{this.onResponsePosted?.({method:t.method,outcome:n?"error":"success",...n?{errorCode:n.code}:{}})}catch{}}postMessage(t){const r=this.iframe.contentWindow;return r?(r.postMessage(t,this.targetOrigin),!0):!1}}function wu(e){return typeof e=="string"&&Qa.has(e)}const Ja="METHOD_FORBIDDEN";function Te(e){const t=new Error(`小程序能力已禁用: ${e}`);return t.name="MethodForbiddenError",t.code=Ja,t}class oe extends Error{code="HOST_REQUEST_UNSUPPORTED";constructor(t="当前 Host 不支持该请求形状",r){super(t),this.name="HostRequestUnsupportedError",r&&"cause"in r&&Object.defineProperty(this,"cause",{configurable:!0,enumerable:!1,value:r.cause}),Object.setPrototypeOf(this,new.target.prototype)}}const ko={[Vr]:["account.getCurrentUserId","account.ensureAuthenticated","account.onChange","network.request"],[qr]:["account.getCurrentUserId","account.onChange","network.request"],[zr]:["account.getCurrentUserId","account.onChange","network.request"],[Gr]:["account.getCurrentUserId","account.onChange","network.request"],[jr]:["presentation.setClipboard"],[$r]:["presentation.showShareMenu"],[Wr]:["presentation.getViewportMetrics","presentation.captureAndShare"],[ot]:["presentation.applyOrientation"],[Kr]:["presentation.getViewportMetrics","presentation.getNavigationBarHeight"],[Yr]:["presentation.setNavigationBarStyle"],[Kt]:["storage.getRaw"],[Yt]:["storage.setRaw"],[Qr]:["network.request"],[Jr]:["network.stream","files.transfer","files.access"],[Xr]:["files.external"],[Zr]:["files.external"],[en]:["files.save"],[Qt]:["files.access"],[Jt]:["files.removeFile"],[tn]:["files.access"],[Xt]:["files.access"],[rn]:["files.access"],[Zt]:["files.access"],[nn]:["files.access"],[er]:["files.access"],[on]:["files.access"],[tr]:["files.removeDirectory"],[sn]:["files.access"],[an]:["files.access"],[cn]:["presentation.showToast"],[dn]:["presentation.showLoading"],[un]:["presentation.hideLoading"],[ln]:["presentation.vibrate"],[fn]:["presentation.setClipboard"],[hn]:["presentation.close"],[mn]:["presentation.reload"],[pn]:["presentation.openAppPage"],[Me]:["account.getCurrentUserId","account.onChange","network.request"],[be]:["account.onChange","network.request"],[ze]:["account.getCurrentUserId","account.onChange","network.request"],[st]:["account.getCurrentUserId","account.onChange","network.request"],[De]:["account.onChange","network.request"],[_n]:["companion.getInfo"],[Sn]:["companion.getPreparationStatus"],[vn]:["companion.getInfo","companion.getPreparationStatus","companion.prepare"],[Rn]:["companion.cancelPreparation"],[On]:["companion.getActiveSession"],[Dn]:["companion.getInfo","companion.launch"],[Nn]:["companion.session.write"],[Pn]:["companion.session.closeStdin"],[Tn]:["companion.session.terminate"],[Cn]:["companion.session.ackOutput"],[Ln]:["companion.openAttachment"],[Mn]:["companion.showNotification"]};function bu(e,t){if(t[e]!==!0)throw Te(e)}const Au=32*1024*1024,Iu=/^application\/(?:[a-z0-9!#$&^_.+-]+\+)?json(?:\s*;|$)/i;function _u(e){if(e.mode==="request-only")return{network:{request:(n,i)=>e.request(n,i)}};if(e.mode==="override-request")return{network:{request:(n,i)=>e.request(n,i)},...e.stream===void 0?{}:{stream:e.stream}};const{consume:t,stream:r}=e;return{stream:r,network:{async request(n,i){const o=await r.open(n,i);let s;try{const a=await t(o.body,{maxBytes:Au},i);return Su(o,a)}catch(a){throw s=a,a}finally{try{await r.release(o.body)}catch(a){if(s===void 0)throw a}}}}}}function Su(e,t){const r=Object.fromEntries(Object.entries(e.headers).map(([n,i])=>[n,i.join(", ")]));return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:r,data:vu(t,Ou(e,"content-type"))}}function vu(e,t){Ru(t);let r;try{r=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch(n){throw new oe("Host network response 不是合法 UTF-8 文本",{cause:n})}if(r.charCodeAt(0)===65279&&(r=r.slice(1)),!t||!Iu.test(t)||r==="")return r;try{return JSON.parse(r)}catch{return r}}function Ru(e){if(!e)return;const t=/(?:^|;)\s*charset\s*=\s*["']?([^;"'\s]+)/i.exec(e)?.[1];if(t&&!/^utf-?8$/i.test(t))throw new oe(`Host network response 不支持 charset=${t}`)}function Ou(e,t){return Object.entries(e.headers).find(([r])=>r.toLowerCase()===t)?.[1]?.[0]}function k(e){return typeof e=="function"}function Uo(e){return(...t)=>{throw Te(e)}}function ne(e){return async(...t)=>{throw Te(e)}}const Du=(e,t)=>{},Nu=()=>()=>{};function Pu(e){const t={request:k(e.network?.request)?e.network.request.bind(e.network):ne("network.request")},r={getCurrentUserId:k(e.account?.getCurrentUserId)?e.account.getCurrentUserId.bind(e.account):ne("account.getCurrentUserId"),ensureAuthenticated:k(e.account?.ensureAuthenticated)?e.account.ensureAuthenticated.bind(e.account):ne("account.ensureAuthenticated"),onChange:k(e.account?.onChange)?e.account.onChange.bind(e.account):Nu},n={getRaw:k(e.storage?.getRaw)?e.storage.getRaw.bind(e.storage):ne("storage.getRaw"),setRaw:k(e.storage?.setRaw)?e.storage.setRaw.bind(e.storage):ne("storage.setRaw")},i={...k(e.presentation?.applyOrientation)?{applyOrientation:e.presentation.applyOrientation.bind(e.presentation)}:{},...k(e.presentation?.onViewportChange)?{onViewportChange:e.presentation.onViewportChange.bind(e.presentation)}:{},close:k(e.presentation?.close)?e.presentation.close.bind(e.presentation):ne("presentation.close"),reload:k(e.presentation?.reload)?e.presentation.reload.bind(e.presentation):ne("presentation.reload"),openAppPage:k(e.presentation?.openAppPage)?e.presentation.openAppPage.bind(e.presentation):ne("presentation.openAppPage"),openWindow:k(e.presentation?.openWindow)?e.presentation.openWindow.bind(e.presentation):ne("presentation.openWindow"),getViewportMetrics:k(e.presentation?.getViewportMetrics)?e.presentation.getViewportMetrics.bind(e.presentation):Uo("presentation.getViewportMetrics"),getNavigationBarHeight:k(e.presentation?.getNavigationBarHeight)?e.presentation.getNavigationBarHeight.bind(e.presentation):Uo("presentation.getNavigationBarHeight"),setNavigationBarStyle:k(e.presentation?.setNavigationBarStyle)?e.presentation.setNavigationBarStyle.bind(e.presentation):ne("presentation.setNavigationBarStyle"),showShareMenu:k(e.presentation?.showShareMenu)?e.presentation.showShareMenu.bind(e.presentation):ne("presentation.showShareMenu"),setScreenshotChromeHidden:k(e.presentation?.setScreenshotChromeHidden)?e.presentation.setScreenshotChromeHidden.bind(e.presentation):Du,captureAndShare:k(e.presentation?.captureAndShare)?e.presentation.captureAndShare.bind(e.presentation):ne("presentation.captureAndShare"),showToast:k(e.presentation?.showToast)?e.presentation.showToast.bind(e.presentation):ne("presentation.showToast"),showLoading:k(e.presentation?.showLoading)?e.presentation.showLoading.bind(e.presentation):ne("presentation.showLoading"),hideLoading:k(e.presentation?.hideLoading)?e.presentation.hideLoading.bind(e.presentation):ne("presentation.hideLoading"),vibrate:k(e.presentation?.vibrate)?e.presentation.vibrate.bind(e.presentation):ne("presentation.vibrate"),setClipboard:k(e.presentation?.setClipboard)?e.presentation.setClipboard.bind(e.presentation):ne("presentation.setClipboard")},o=k(e.storageDiagnostics?.listRaw)?{listRaw:e.storageDiagnostics.listRaw.bind(e.storageDiagnostics)}:void 0,s=Object.fromEntries(["getInfo","getPreparationStatus","prepare","cancelPreparation","getActiveSession","launch","write","closeStdin","terminate","ackOutput","openAttachment","showNotification"].map(a=>[a,k(e.companion?.[a])?e.companion[a].bind(e.companion):ne(`companion.${a}`)]));return k(e.companion?.onSessionEvent)&&(s.onSessionEvent=e.companion.onSessionEvent.bind(e.companion)),{network:t,account:r,storage:n,presentation:i,companion:s,...e.files===void 0?{}:{files:e.files},...e.picker===void 0?{}:{picker:e.picker},...e.transfer===void 0?{}:{transfer:e.transfer},...o?{storageDiagnostics:o}:{}}}function Tu(e){const t=Cu(e.files?.sandbox),r=k(e.picker?.pickFiles)&&k(e.picker?.pickDirectory),n=k(e.picker?.saveFile),i=t||r||n||k(e.companion?.openAttachment),o=t?e.files?.sandbox.file(".hb-remove-capability"):void 0;return{"account.getCurrentUserId":k(e.account?.getCurrentUserId),"account.ensureAuthenticated":k(e.account?.ensureAuthenticated),"account.onChange":k(e.account?.onChange),"network.request":k(e.network?.request),"network.stream":k(e.transfer?.network.open)&&k(e.transfer?.network.release),"files.sandbox":t,"files.external":r,"files.save":n,"files.access":i,"files.removeFile":k(o?.remove),"files.removeDirectory":k(e.files?.sandbox.remove),"files.transfer":k(e.transfer?.files.writeResource),"storage.getRaw":k(e.storage?.getRaw),"storage.setRaw":k(e.storage?.setRaw),"presentation.close":k(e.presentation?.close),"presentation.reload":k(e.presentation?.reload),"presentation.openAppPage":k(e.presentation?.openAppPage),"presentation.applyOrientation":k(e.presentation?.applyOrientation),"presentation.openWindow":k(e.presentation?.openWindow),"presentation.getViewportMetrics":k(e.presentation?.getViewportMetrics),"presentation.getNavigationBarHeight":k(e.presentation?.getNavigationBarHeight),"presentation.setNavigationBarStyle":k(e.presentation?.setNavigationBarStyle),"presentation.showShareMenu":k(e.presentation?.showShareMenu),"presentation.setScreenshotChromeHidden":!0,"presentation.captureAndShare":k(e.presentation?.captureAndShare),"presentation.showToast":k(e.presentation?.showToast),"presentation.showLoading":k(e.presentation?.showLoading),"presentation.hideLoading":k(e.presentation?.hideLoading),"presentation.vibrate":k(e.presentation?.vibrate),"presentation.setClipboard":k(e.presentation?.setClipboard),"companion.getInfo":k(e.companion?.getInfo),"companion.getPreparationStatus":k(e.companion?.getPreparationStatus),"companion.prepare":k(e.companion?.prepare),"companion.cancelPreparation":k(e.companion?.cancelPreparation),"companion.getActiveSession":k(e.companion?.getActiveSession),"companion.launch":k(e.companion?.launch),"companion.session.write":k(e.companion?.write),"companion.session.closeStdin":k(e.companion?.closeStdin),"companion.session.terminate":k(e.companion?.terminate),"companion.session.ackOutput":k(e.companion?.ackOutput),"companion.openAttachment":k(e.companion?.openAttachment),"companion.showNotification":k(e.companion?.showNotification)}}function Cu(e){if(!e||typeof e!="object")return!1;const t=e;return t.kind==="directory"&&(t.mode==="read"||t.mode==="readwrite")&&k(t.file)&&k(t.directory)&&k(t.create)&&k(t.stat)&&k(t.list)}function xo(e,t){return t?.[e]!==!1}function Lu(e){return e==="network.download"||e.startsWith("files.")||e.startsWith("file.")||e.startsWith("directory.")||e.startsWith("companion.")}function Xa(e,t={}){const r={};for(const n of Object.keys(ko)){const o=ko[n].every(a=>e[a]),s=!Lu(n)||!!t.miniProgramDetail?.miniProgramId.trim();r[n]=xo(n,t.callerCapabilities)&&xo(n,t.hostCapabilities)&&o&&s}return r}function Za(e={},t={}){const r=Tu(e),n=Xa(r,t);return{ports:Pu(e),primitiveAvailability:r,availablePrimitives:r,effectiveCapabilities:n}}function lo(e,t){if(!t||t===e.signal)return e;const r=typeof AbortSignal.any=="function"?AbortSignal.any([e.signal,t]):Mu(e.signal,t);return{...e,signal:r}}function Mu(e,t){const r=new AbortController,n=()=>{e.removeEventListener("abort",o),t.removeEventListener("abort",s)},i=a=>{r.signal.aborted||(n(),r.abort(a.reason))},o=()=>i(e),s=()=>i(t);return e.aborted?i(e):t.aborted?i(t):(e.addEventListener("abort",o,{once:!0}),t.addEventListener("abort",s,{once:!0})),r.signal}function ku(e){if(!e||typeof e!="object"||e.lifecycle!=="cleanup")return!1;const t=e.signal;return!!t&&typeof t=="object"&&typeof t.aborted=="boolean"&&typeof t.addEventListener=="function"&&typeof t.removeEventListener=="function"}const Uu=4,xu=["xiaoheihe.cn","max-c.com","debugmode.cn","maxjia.com"],Hu=new Set(["connection","content-length","host","keep-alive","proxy-connection","te","trailer","transfer-encoding","upgrade"]),Fu=["/user_miniprogram/runtime/auth","/user_miniprogram/openapi/v1"],Bu=["/account/restore_login","/account/check_login","/account/login","/account/get_login_code","/account/login_code","/account/get_qrcode_url","/account/qr_state","/account/google_2fa_verify","/account/open/login","/account/captcha","/account/get_verify_code","/account/send_verify_code","/account/verify_code"];function Vu(e,t){const r=Gu(e);return r===null||Ho(r,Fu)?!0:t&&Ho(r,Bu)}function qu(e){const t=e.hostname.toLowerCase().replace(/\.$/,"");return xu.some(r=>t===r||t.endsWith(`.${r}`))}function zu(e){const t=e.trim().toLowerCase();return Hu.has(t)||/^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(t)}function Gu(e){let t=e;for(let r=0;r<Uu;r+=1){let n;try{n=decodeURIComponent(t)}catch{return null}if(n===t)return Fo(t);t=n}try{if(decodeURIComponent(t)!==t)return null}catch{return null}return Fo(t)}function Ho(e,t){return t.some(r=>e===r||e.startsWith(`${r}/`))}function Fo(e){const t=[];for(const r of e.replace(/\\/g,"/").split("/"))!r||r==="."||(r===".."?t.pop():t.push(r));return`/${t.join("/")}`}function ut(){const e=new Error("Runtime cache read cancelled");return e.name="AbortError",e}function Bo(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function ec(e={}){const t=e.now??Date.now,r=new WeakMap,n=new Map,i=new Set,o=new Map,s=new Set,a=new Set;let c=!1;function u(b,v){try{e.onEvent&&Promise.resolve(e.onEvent({namespace:b,type:v})).catch(()=>{})}catch{}}function g(b){const v=r.get(b);if(!v)throw new Error("Unknown runtime cache scope");return v}function m(b,v){return b.flatMap((A,P)=>{const _=JSON.stringify(b.slice(0,P+1));return[JSON.stringify([_]),JSON.stringify([_,v])]})}function l(b,v){return JSON.stringify(m(b,v).map(A=>n.get(A)??0))}async function p(b,v){const A=g(b),P=JSON.stringify([JSON.stringify(A),...v?[v]:[]]),_=(n.get(P)??0)+1;n.set(P,_),i.add(P);for(const L of a)L(A,v);if(!e.store){i.delete(P),u(v??"*","invalidation");return}try{await e.store.invalidate(A,v)}catch(L){throw u(v??"*","storage_error"),L}n.get(P)===_&&i.delete(P),u(v??"*","invalidation")}function O(b){if(c)throw new Error("Runtime cache manager disposed");const v=o.get(b.namespace);if(v){if(v.sourceCodec!==b.codec||v.definition.codec.version!==b.codec.version||JSON.stringify(v.definition.policy)!==JSON.stringify(b.policy))throw new Error("Conflicting runtime cache namespace");return v.cache}if(!b.namespace||!b.codec.version)throw new Error("Invalid runtime cache definition");const A=Object.freeze({...b.policy}),P=Object.freeze({version:b.codec.version,encode:b.codec.encode.bind(b.codec),decode:b.codec.decode.bind(b.codec),validate:b.codec.validate.bind(b.codec),clone:b.codec.clone.bind(b.codec)}),_=b.namespace;for(const D of[A.ttlMs,A.memoryMaxEntries,A.diskMaxEntries,A.diskMaxBytes,A.maxEntryBytes])if(!Number.isFinite(D)||D<0)throw new Error("Invalid runtime cache policy");const L=new Map,F=new Map,N=new Map;let I=!1;function d(D,M,R){if(c||I||D.aborted||l(M,_)!==R)throw ut()}function h(D){return A.ttlMs>0&&A.persistence==="memory-and-disk"&&!!e.store&&!m(D,_).some(M=>i.has(M))}function f(D,M,R){const U=t();return D.envelopeVersion===1&&JSON.stringify(D.address)===JSON.stringify(M)&&Bo(D.revisions,R)&&D.payload.byteLength<=A.maxEntryBytes&&Number.isFinite(D.cachedAt)&&Number.isFinite(D.expiresAt)&&D.cachedAt<=U&&D.cachedAt>=0&&D.expiresAt>D.cachedAt&&Math.min(D.expiresAt,D.cachedAt+A.ttlMs)>U}function y(D,M,R,U,x){if(!(A.ttlMs<=0||A.memoryMaxEntries<1)){for(const[H,q]of L)Math.min(q.entry.expiresAt,q.entry.cachedAt+A.ttlMs)<=t()&&L.delete(H);for(L.delete(D);L.size>=Math.floor(A.memoryMaxEntries);){const H=L.keys().next();if(H.done)break;L.delete(H.value)}L.set(D,{entry:M,value:R,epoch:U,persistent:x})}}async function w(D,M,R,U){const x={namespace:_,codecVersion:P.version,scopeIds:M,key:D.key},H=JSON.stringify(x);let q=[],z=h(M);if(z)try{q=await e.store.readRevisions(M,_)}catch{z=!1,u(_,"storage_error")}d(U.signal,M,R);async function G(){if(!z)return!0;try{return Bo(q,await e.store.readRevisions(M,_))}catch{return z=!1,u(_,"storage_error"),!1}}const ee=L.get(H);if(A.ttlMs>0&&ee&&ee.epoch===R&&f(ee.entry,x,q)&&ee.persistent===z&&await G())return d(U.signal,M,R),u(_,"memory_hit"),ee.value;if(L.delete(H),z){let j,fe;try{j=await e.store.read(x,A.maxEntryBytes),j&&f(j,x,q)?fe=P.decode(j.payload):j=void 0}catch{j=void 0,u(_,"storage_error")}if(d(U.signal,M,R),j&&await G())return d(U.signal,M,R),y(H,j,fe,R,!0),u(_,"disk_hit"),fe}u(_,"miss");const Z=P.validate(await D.load(U.signal));d(U.signal,M,R);const J=P.clone(Z);if(!await G()&&z)throw ut();if(d(U.signal,M,R),A.ttlMs>0){const j=t();let fe;try{fe=P.encode(J)}catch{return J}const Co={envelopeVersion:1,address:x,revisions:z?q:[],cachedAt:j,expiresAt:j+A.ttlMs,payload:fe};if(z&&fe.byteLength<=A.maxEntryBytes){let $n=!0,Lo=!1;try{$n=await e.store.publish(Co,A),Lo=$n}catch{u(_,"storage_error")}if(d(U.signal,M,R),!$n)throw ut();Lo&&u(_,"published")}d(U.signal,M,R),y(H,Co,J,R,z)}return J}async function S(D){if(c||I||D.signal?.aborted)return Promise.reject(ut());const M=g(D.scope),R=l(M,_);let U;if(h(M)){const z=new AbortController;N.set(z,M);const G=()=>z.abort();D.signal?.addEventListener("abort",G,{once:!0});let ee=()=>{};try{U=await Promise.race([e.store.readRevisions(M,_),new Promise((Z,J)=>{const j=()=>J(ut());z.signal.addEventListener("abort",j,{once:!0}),ee=()=>z.signal.removeEventListener("abort",j)})])}catch{z.signal.aborted||u(_,"storage_error")}finally{ee(),N.delete(z),D.signal?.removeEventListener("abort",G)}}d(D.signal??new AbortController().signal,M,R);const x=JSON.stringify([M,D.key,R,U]);let H=F.get(x);if(H?.controller.signal.aborted&&(H=void 0),!H){const z=new AbortController;H={ids:M,controller:z,waiters:0,promise:Promise.resolve(void 0)};const G=H;G.promise=w(D,M,R,z).finally(()=>{F.get(x)===G&&F.delete(x)}),F.set(x,G)}const q=H;return q.waiters+=1,new Promise((z,G)=>{let ee=!1;function Z(j){ee||(ee=!0,D.signal?.removeEventListener("abort",J),q.controller.signal.removeEventListener("abort",J),q.waiters-=1,q.waiters===0&&q.controller.abort(),j())}function J(){Z(()=>G(ut()))}D.signal?.addEventListener("abort",J,{once:!0}),q.controller.signal.addEventListener("abort",J,{once:!0}),q.promise.then(j=>Z(()=>{try{d(D.signal??new AbortController().signal,M,R),z(P.clone(j))}catch(fe){G(fe)}}),j=>Z(()=>G(j)))})}function T(D,M){if(M&&M!==_)return;const R=U=>D.every((x,H)=>U[H]===x);for(const[U,x]of L)R(x.entry.address.scopeIds)&&L.delete(U);for(const[U,x]of F)R(x.ids)&&(x.controller.abort(),F.delete(U));for(const[U,x]of N)R(x)&&U.abort()}function V(){if(!I){I=!0,L.clear();for(const D of N.keys())D.abort();N.clear();for(const D of F.values())D.controller.abort();F.clear(),s.delete(V),a.delete(T),o.get(_)?.cache===C&&o.delete(_)}}const C={read:S,invalidateScope:D=>p(D,_),dispose:V};return s.add(V),a.add(T),o.set(_,{definition:{namespace:_,codec:P,policy:A},sourceCodec:b.codec,cache:C}),C}return{createScope(b,v){if(c||!b)throw new Error("Invalid runtime cache scope");const A=Object.freeze({});return r.set(A,[...v?g(v):[],b]),A},register:O,invalidateScope:b=>p(b),dispose(){if(!c){c=!0;for(const b of[...s])b();o.clear(),n.clear(),i.clear()}}}}function ju(e){const t=new TextEncoder,r=new TextDecoder("utf-8",{fatal:!0});return{version:e.version,validate:e.validate,encode:n=>t.encode(JSON.stringify(n)),decode:n=>e.validate(JSON.parse(r.decode(n))),clone:n=>e.validate(JSON.parse(JSON.stringify(n)))}}const $u=".hb-runtime-cache-v1",Wn=64*1024,lt=1e3,Wu=2048,Pt=32*1024*1024,Ku=1024,Pr=new TextEncoder,Vo=new TextDecoder("utf-8",{fatal:!0});function Tt(){return Object.assign(new Error("缓存文件操作已取消"),{name:"AbortError"})}async function Er(e){const t=await globalThis.crypto.subtle.digest("SHA-256",Pr.encode(JSON.stringify(e)));return Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("")}function _e(e,t){return JSON.stringify(e)===JSON.stringify(t)}function qo(){return Array.from(globalThis.crypto.getRandomValues(new Uint8Array(16)),e=>e.toString(16).padStart(2,"0")).join("")}function Yu(e){return!!e&&typeof e=="object"&&["METHOD_FORBIDDEN","NOT_SUPPORTED","UNSUPPORTED_OPERATION","ENOSYS","ENOTSUP","EOPNOTSUPP"].includes(String(e.code))}function zo(e,t){if(t.some(r=>typeof e[r]!="function"))throw Object.assign(new Error("Host 文件原语不完整,关闭磁盘缓存"),{code:"METHOD_FORBIDDEN"})}function Qu(e,t){const r=e.sandbox.directory($u),n=r.directory("revisions"),i=r.directory("entries");for(const d of[r,n,i,i.directory("capability-check")])zo(d,["directory","file","create","stat","list","remove"]),zo(d.file("capability-check"),["create","stat","read","write","remove"]);let o=Promise.resolve(),s=!1;function a(d){if(Yu(d))throw s=!0,d}function c(){if(t.signal.aborted)throw Tt();if(s)throw Object.assign(new Error("Host 不支持完整文件能力,磁盘缓存已关闭"),{code:"METHOD_FORBIDDEN"})}function u(d,h=t.signal){const f=o.then(()=>{if(h.aborted)throw Tt();return c(),d()},()=>{if(h.aborted)throw Tt();return c(),d()}).catch(S=>{throw a(S),S});if(o=f.catch(()=>{}),h.aborted)return Promise.reject(Tt());let y=()=>{};const w=new Promise((S,T)=>{const V=()=>T(Tt());h.addEventListener("abort",V,{once:!0}),y=()=>h.removeEventListener("abort",V)});return Promise.race([f,w]).finally(y)}async function g(){c(),await n.create({recursive:!0,exclusive:!1},t),await i.create({recursive:!0,exclusive:!1},t),c()}async function m(d,h){const f=n.file(`${await Er([d,h??null])}.revision`);await p(f);let y=!1;try{await f.create({recursive:!1,exclusive:!0},t),y=!0}catch(T){a(T),c()}if(y){const T=qo();return await f.write(Pr.encode(T),t),c(),T}const w=await f.stat(t);if(w.size<1||w.size>128)throw new Error("缓存 revision 文件损坏");const S=Vo.decode(await f.read(t));if(!/^(?:[0-9a-f]{32}|[0-9a-f-]{36})$/.test(S))throw new Error("缓存 revision 文件损坏");return c(),S}async function l(d){const h=await d.list({limit:lt},t);if(h.length>=lt)throw new Error("缓存目录超过治理上限");return h}async function p(d){try{await d.stat(t);return}catch(f){if(!wr(f))throw f}if((await l(n)).length>=lt-1)throw new Error("缓存 metadata 超过治理上限")}async function O(d,h){await g();const f=[];for(let y=0;y<d.length;y+=1){const w=d.slice(0,y+1);f.push(await m(w),await m(w,h))}return f}async function b(d){return r.directory(`entries/${await Er([d.namespace,d.codecVersion,d.scopeIds])}`)}async function v(d){return(await b(d)).file(`${await Er(d.key)}.cache`)}async function A(d,h){const f=await d.stat(t);if(f.size<5||f.size>h+Wn+4)throw new Error("缓存条目超过大小限制");const y=await d.read(t);if(c(),y.length!==f.size)throw new Error("缓存条目读取不完整");const w=new DataView(y.buffer,y.byteOffset,y.byteLength).getUint32(0);if(w<1||w>Wn||w+4>y.length)throw new Error("缓存信封损坏");const S=JSON.parse(Vo.decode(y.subarray(4,w+4))),T=y.slice(w+4);if(S.envelopeVersion!==1||!S.address||!Array.isArray(S.address.scopeIds)||!S.address.scopeIds.every(V=>typeof V=="string")||typeof S.address.namespace!="string"||typeof S.address.codecVersion!="string"||typeof S.address.key!="string"||!Array.isArray(S.revisions)||S.revisions.length!==S.address.scopeIds.length*2||!S.revisions.every(V=>typeof V=="string"&&V.length>0)||!Number.isSafeInteger(S.cachedAt)||!Number.isSafeInteger(S.expiresAt)||S.cachedAt<0||S.expiresAt<=S.cachedAt||S.payloadBytes!==T.length||T.length>h)throw new Error("缓存信封损坏");return{envelopeVersion:1,address:S.address,revisions:S.revisions,cachedAt:S.cachedAt,expiresAt:S.expiresAt,payload:T}}async function P(d){if(!d.remove)throw new Error("Host 不支持缓存文件删除");await d.remove(t)}async function _(d){try{if((await d.file.stat(t)).size!==d.size)return!1;const h=await A(d.file,Pt);return!_e(h.address,d.entry.address)||!_e(h.revisions,d.entry.revisions)||h.cachedAt!==d.entry.cachedAt||h.expiresAt!==d.entry.expiresAt||!_e(await L(h.payload),await L(d.entry.payload))?!1:(await P(d.file),!0)}catch(h){if(wr(h))return!0;throw h}}async function L(d){const h=await globalThis.crypto.subtle.digest("SHA-256",d);return Array.from(new Uint8Array(h),f=>f.toString(16).padStart(2,"0")).join("")}async function F(){const d=await l(n);let h=0;for(const S of d)if(S.kind==="file"&&(h+=(await S.stat(t)).size,h>Pt))throw new Error("缓存扫描超过字节上限");const f=[];let y=0,w=h;for(const S of await l(i)){if(S.kind!=="directory")throw new Error("缓存目录结构损坏");for(const T of await l(S)){if(T.kind!=="file"||++y>Wu)throw new Error("缓存文件超过治理上限");const V=(await T.stat(t)).size;if(w+=V,w>Pt)throw new Error("缓存扫描超过字节上限");try{const C=await A(T,Pt);f.push({file:T,entry:C,size:(await T.stat(t)).size,bucketName:S.name})}catch(C){a(C),c(),wr(C)||await P(T)}}}return{entries:f,metadataBytes:h}}async function N(){for(const d of await l(i))if(d.kind==="directory"&&d.remove&&(await l(d)).length===0)try{await d.remove({recursive:!1},t)}catch(h){a(h),c()}}function I(d){const{payload:h,...f}=d,y=Pr.encode(JSON.stringify({...f,payloadBytes:h.length}));if(y.length>Wn)throw new Error("缓存信封过大");const w=new Uint8Array(4+y.length+h.length);return new DataView(w.buffer).setUint32(0,y.length),w.set(y,4),w.set(h,y.length+4),w}return{readRevisions:(d,h)=>u(()=>O(d,h)),read:(d,h)=>u(async()=>{c();const f=await v(d);let y;try{y=await A(f,h)}catch(w){if(c(),wr(w))return;throw w}if(!(!_e(y.address,d)||y.expiresAt<=Date.now())&&_e(y.revisions,await O(d.scopeIds,d.namespace)))return y}),publish:(d,h)=>u(async()=>{c();const{address:f}=d;if(!_e(d.revisions,await O(f.scopeIds,f.namespace)))return!1;const y=I(d);if(d.payload.length>h.maxEntryBytes||y.length>h.diskMaxBytes||h.diskMaxEntries<1)throw new Error("缓存条目超出容量预算");await g();const w=await b(f),S=await v(f),T=await F(),V=[],C=new Map;for(const R of T.entries){if(R.bucketName===w.name&&R.file.name===S.name)continue;const U=JSON.stringify([R.entry.address.scopeIds,R.entry.address.namespace]);let x=C.get(U);if(x||(x=await O(R.entry.address.scopeIds,R.entry.address.namespace),C.set(U,x)),R.entry.expiresAt<=Date.now()||!_e(R.entry.revisions,x)){if(!await _(R))throw new Error("缓存治理期间条目已变化")}else V.push(R)}V.sort((R,U)=>R.entry.cachedAt-U.entry.cachedAt);function D(){const R=V.filter(U=>U.bucketName===w.name);return V.length+1>Ku||y.length+T.metadataBytes+V.reduce((U,x)=>U+x.size,0)>Pt||R.length+1>Math.min(h.diskMaxEntries,lt-1)||y.length+R.reduce((U,x)=>U+x.size,0)>h.diskMaxBytes}for(;D();){const R=V.filter(H=>H.bucketName===w.name),x=R.length+1>Math.min(h.diskMaxEntries,lt-1)||y.length+R.reduce((H,q)=>H+q.size,0)>h.diskMaxBytes?R[0]:V[0];if(!x||!await _(x))throw new Error("缓存容量不足或条目已变化");V.splice(V.indexOf(x),1)}await N();const M=await l(i);if(!M.some(R=>R.name===w.name)&&M.length>=lt-1)throw new Error("缓存目录超过治理上限");if(await w.create({recursive:!0,exclusive:!1},t),!_e(d.revisions,await O(f.scopeIds,f.namespace)))return!1;try{await S.create({recursive:!1,exclusive:!0},t)}catch(R){a(R),await S.stat(t)}return await S.write(y,t),c(),_e(d.revisions,await O(f.scopeIds,f.namespace))}),invalidate:(d,h)=>u(async()=>{await g();const f=n.file(`${await Er([d,h??null])}.revision`);await p(f);try{await f.create({recursive:!1,exclusive:!0},t)}catch(y){a(y),await f.stat(t)}await f.write(Pr.encode(qo()),t),c();try{const{entries:y}=await F();for(const w of y){if(h!==void 0&&w.entry.address.namespace!==h||!d.every((T,V)=>w.entry.address.scopeIds[V]===T))continue;const S=await O(w.entry.address.scopeIds,w.entry.address.namespace);_e(w.entry.revisions,S)||await _(w)}await N()}catch(y){a(y),c()}})}}function wr(e){return!!e&&typeof e=="object"&&["FILE_NOT_FOUND","ENOENT","NOT_FOUND"].includes(String(e.code))}const Ju="RATE_LIMITED_BY_RUNTIME",Xu="RATE_LIMITED",tc=20,rc=40,nc=150,ic=20,oc=1e4,sc=45e3,ac=1,Zu=300*1e3,el=64;function ft(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function tl(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):t}function rl(e={}){const t=e.now??Date.now,r=tl(e.coalesceWindowMs,nc),n=e.budget===!1?void 0:{ratePerSecond:Math.max(.001,ft(e.budget?.ratePerSecond,tc)),burst:Math.max(1,Math.floor(ft(e.budget?.burst,rc)))},i=e.loopDetection===!1?void 0:{maxCalls:Math.max(1,Math.floor(ft(e.loopDetection?.maxCalls,ic))),windowMs:Math.max(1,Math.floor(ft(e.loopDetection?.windowMs,oc)))},o=e.circuitBreaker===!1?void 0:{failureThreshold:Math.max(1,Math.floor(ft(e.circuitBreaker?.failureThreshold,ac))),openMs:Math.max(1,Math.floor(ft(e.circuitBreaker?.openMs,sc)))},s=new Map,a=new Map,c=new Set,u=new Map,g=n?{tokens:n.burst,updatedAt:t()}:{tokens:0,updatedAt:0},m={coalesced:0,budgetRejected:0,loopRejected:0,circuitOpened:0,circuitRejected:0};let l=!1;function p(I){try{e.onReport?.(I)}catch{}}function O(I,d){if(!i)return{exceeded:!1,count:0};const h=a.get(I)??[],f=d-i.windowMs;let y=0;for(;y<h.length&&h[y]<=f;)y+=1;y>0&&h.splice(0,y);const w=h.length>=i.maxCalls;return w||(h.push(d),h.length>i.maxCalls+1&&h.splice(0,h.length-(i.maxCalls+1))),a.set(I,h),{exceeded:w,count:h.length}}function b(I){if(!n)return!0;const d=Math.max(0,I-g.updatedAt)/1e3;return g.tokens=Math.min(n.burst,g.tokens+d*n.ratePerSecond),g.updatedAt=I,g.tokens<1?!1:(g.tokens-=1,!0)}function v(I){if(!n)return 0;const d=Math.max(0,I-g.updatedAt)/1e3,h=Math.min(n.burst,g.tokens+d*n.ratePerSecond);return Math.max(0,Math.ceil((1-h)/n.ratePerSecond*1e3))}function A(I,d,h,f,y){if(!o)return;const w=u.get(d),S=(w?.open?0:w?.failures??0)+1;if(S<o.failureThreshold){u.set(d,{open:!1,openedAt:0,openMs:0,failures:S});return}const T=Math.min(Math.max(o.openMs,f),Zu);u.set(d,{open:!0,openedAt:y,openMs:T,failures:S}),m.circuitOpened+=1,p({type:"circuit_opened",capability:I,endpointId:d,status:h,openMs:T,timestamp:y})}function P(I){const d=u.get(I);d&&!d.open&&u.delete(I)}function _(I){for(const[d,h]of s)!h.pending&&h.expiresAt<=I&&s.delete(d);for(;s.size>=el;){const d=[...s].find(([,h])=>!h.pending);if(!d)break;s.delete(d[0])}}function L(I,d){if(I===void 0)return;const h=s.get(I);h?.promise===d&&(h.pending=!1)}function F(I,d){if(I===void 0)return;s.get(I)?.promise===d&&s.delete(I)}async function N(I){if(l)return I.load();const d=t();if(o){const w=u.get(I.endpointId);if(w?.open){const S=w.openedAt+w.openMs-d;if(S>0)throw m.circuitRejected+=1,p({type:"circuit_rejected",capability:I.capability,endpointId:I.endpointId,retryAfterMs:S,timestamp:d}),ol("上游已被网关限流,Runtime 熔断中,请稍后重试",{origin:"circuit",reason:"circuit_open",endpointId:I.endpointId,retryAfterMs:S});u.delete(I.endpointId)}}const h=O(I.endpointId,d);h.exceeded&&i?c.has(I.endpointId)||(c.add(I.endpointId),p({type:"loop_detected",capability:I.capability,endpointId:I.endpointId,count:h.count,windowMs:i.windowMs,timestamp:d})):c.delete(I.endpointId);const f=r>0?I.coalesceKey:void 0;if(f!==void 0){const w=s.get(f);if(w&&(w.pending||w.expiresAt>d))return m.coalesced+=1,p({type:"coalesced",capability:I.capability,endpointId:I.endpointId,timestamp:d}),w.promise;w&&s.delete(f)}if(h.exceeded&&i)throw m.loopRejected+=1,Go("检测到同一 endpoint 的高频循环调用,本次请求已在 Runtime 本地拒绝",{origin:"loop",reason:"loop",capability:I.capability,endpointId:I.endpointId,count:h.count,windowMs:i.windowMs});if(!b(d)){m.budgetRejected+=1;const w=v(d);throw p({type:"budget_exhausted",capability:I.capability,endpointId:I.endpointId,retryAfterMs:w,timestamp:d}),Go("请求过于频繁,已触发 Runtime 本地配额限制",{origin:"budget",reason:"budget",capability:I.capability,endpointId:I.endpointId,retryAfterMs:w})}f!==void 0&&_(d);const y=I.load().then(w=>(L(f,y),P(I.endpointId),w),w=>{F(f,y);const S=nl(w);throw S!==void 0&&A(I.capability,I.endpointId,S,il(w),d),w});return f!==void 0&&s.set(f,{promise:y,expiresAt:d+r,pending:!0}),y}return{execute:N,invalidateCoalescing(){s.clear()},snapshot(){return{...m,openCircuits:[...u.entries()].filter(([,I])=>I.open).map(([I])=>I)}},dispose(){l||(l=!0,s.clear(),a.clear(),c.clear(),u.clear())}}}function nl(e){if(typeof e!="object"||e===null)return;const t=e.status;if(!(typeof t!="number"||!Number.isInteger(t)))return t===403||t===429?t:void 0}function il(e){if(typeof e!="object"||e===null)return 0;const t=e.retryAfterMs;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}function Go(e,t){return{code:Ju,message:e,data:t}}function ol(e,t){return{code:Xu,message:e,data:t}}const cc=3e4,dc=6e4,Mi=1440*60*1e3;function sl(e){const t=e!==!1&&(e?.enabled??!0),r=e===!1?void 0:e;return{enabled:t,debugReport:t&&r?.debugReport===!0,identityTtlMs:t?Math.max(0,Math.floor(r?.identityTtlMs??cc)):0,profileTtlMs:t?Math.max(0,Math.floor(r?.profileTtlMs??dc)):0,steamGameListTtlMs:t?al(r?.steamGameListTtlMs):0,gateOptions:{budget:r?.budget??{ratePerSecond:tc,burst:rc},coalesceWindowMs:r?.coalesceWindowMs??nc,loopDetection:r?.loopDetection??{maxCalls:ic,windowMs:oc},circuitBreaker:r?.circuitBreaker??{failureThreshold:ac,openMs:sc}}}}function al(e){return e===void 0||!Number.isFinite(e)?Mi:Math.max(0,Math.floor(e))}function E(e,t,r){return r===void 0?{code:e,message:t}:{code:e,message:t,data:r}}function B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function cl(e){return typeof e=="object"&&e!==null}function ge(e,t){const r=e.data;if(!cl(r)||typeof r.status!="string")throw new Error(t);return r}const uc={auth:"optional",channel:"api",id:"heybox.account.user_base_info.envelope.get",method:"GET",path:"/account/get_user_base_info"},dl={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.public.detail.get",method:"GET",path:"/user_miniprogram/public/detail",query(e){return{mini_program_id:e.mini_program_id,...e.miniprogram_version?{miniprogram_version:e.miniprogram_version}:{},...e.preview_token?{preview_token:e.preview_token}:{},...e.local_dev_launch_token?{local_dev_launch_token:e.local_dev_launch_token}:{},...e.entry?{entry:e.entry}:{},...e.h_src_parent?{h_src_parent:e.h_src_parent}:{},...e.extra!==void 0?{extra:e.extra}:{}}},parse(e,t){return ge(e,"工坊小程序详情加载失败")}};function dr(e){const t=e.runtimeAuthContextToken?.trim();return{mini_program_id:e.miniProgramId,...t?{runtime_auth_context_token:t}:{}}}function ul(e){return{challenge:e.challenge,expiresIn:e.expires_in,requestedScopes:e.requested_scopes||[],displayedScopes:e.displayed_scopes||[],consentUiVersion:e.consent_ui_version}}function ll(e){const t=ge(e,"小程序登录授权接口响应异常"),r=t.result,n={};if(r.login_code&&typeof r.login_code=="object"){const i=r.login_code;n.loginCode={code:i.code,expiresIn:i.expires_in,scopes:i.scopes||[]}}return r.consent_challenge&&typeof r.consent_challenge=="object"&&(n.consentChallenge=ul(r.consent_challenge)),{...t,result:n}}const fl={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.authorization.cancel.post",method:"POST",path:"/user_miniprogram/runtime/auth/authorization/cancel",body:e=>({...dr(e.runtimeContext),challenge:e.challenge}),parse:e=>ge(e,"小程序授权取消接口响应异常")},hl={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.authorization.revoke.post",method:"POST",path:"/user_miniprogram/runtime/auth/authorization/revoke",body:e=>dr(e.runtimeContext),parse:e=>ge(e,"小程序授权撤销接口响应异常")},ml={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.local_identity.post",method:"POST",path:"/user_miniprogram/runtime/local_identity",body:e=>dr(e.runtimeContext),parse(e){const t=ge(e,"小程序隔离身份接口响应异常"),r=typeof t.result.steam_id=="string"&&t.result.steam_id.trim()?t.result.steam_id.trim():void 0;return{...t,result:{appUserId:t.result.app_user_id,...r?{steamId:r}:{}}}}},pl={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.login.begin.post",method:"POST",path:"/user_miniprogram/runtime/auth/login/begin",body:e=>({...dr(e.runtimeContext),...e.scopes?.length?{scopes:e.scopes.join(",")}:{}}),parse:e=>ll(e)},gl={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.login.confirm.post",method:"POST",path:"/user_miniprogram/runtime/auth/login/confirm",body:e=>({...dr(e.runtimeContext),challenge:e.challenge,...e.selectedScopes.length?{selected_scopes:e.selectedScopes.join(",")}:{}}),parse(e){const t=ge(e,"小程序登录确认接口响应异常");return{...t,result:{code:t.result.code,expiresIn:t.result.expires_in,scopes:t.result.scopes}}}},yl=64;function lc(e){const t=e.ttlMs,r=Math.max(1,Math.floor(e.maxEntries??yl)),n=e.now??Date.now,i=new Map,o=new Map;let s=0,a=!1;function c(m){for(const[l,p]of i)p.expiresAt<=m&&i.delete(l)}function u(m,l,p){if(a||t<=0||p!==s)return;const O=n();for(c(O),i.delete(m);i.size>=r;){const b=i.keys().next();if(b.done)break;i.delete(b.value)}i.set(m,{expiresAt:O+t,value:l})}function g(m,l){if(a)return l();if(t>0){const v=i.get(m);if(v&&v.expiresAt>n())return Promise.resolve(v.value);v&&i.delete(m)}const p=o.get(m);if(p)return p;const O=s,b=l().then(v=>(u(m,v,O),v)).finally(()=>{o.get(m)===b&&o.delete(m)});return o.set(m,b),b}return{read:g,invalidate(){s+=1,i.clear(),o.clear()},dispose(){a||(a=!0,s+=1,i.clear(),o.clear())},get size(){return i.size}}}function El(e){const t=Ue(e);return t.valid&&t.permissions.network?.status==="enabled"}function fc(e,t){return t?e?"server":"local":"legacy"}function wl(e,t){return fc(El(e),t)}function jo(e,t){if(e==="server")throw E("SERVER_API_REQUIRED",`${t} 在联网模式下必须通过开发者服务端 OpenAPI 获取`)}function bl(e,t){if(e==="local")throw E("SERVER_API_REQUIRED",`${t} 需要 effective network 启用后才能使用`)}const Al=["baseURL","errorMode","jsonParseMode","observability","queryEncoding","responseType","security"],Il=new Set(["auth","body","bodyEncoding","channel","failurePresentation","headers","id","method","parse","path","query","timeout"]),_l=/authorization|cookie|pkey|password|secret|token/i,hc=/authorization|cookie|pkey|token|password|secret/i;function Se(e,t){return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Sl(e){for(const t of Object.keys(e))if(!Il.has(t))throw new oe(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);for(const t of Al)if(Object.prototype.hasOwnProperty.call(e,t)&&Se(e,t)!==void 0)throw new oe(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);if(Se(e,"bodyEncoding")!==void 0&&Se(e,"bodyEncoding")!=="json"&&Se(e,"bodyEncoding")!=="form")throw new oe("endpoint bodyEncoding 不受 HostNetworkPort 支持");if(Se(e,"failurePresentation")!==void 0&&Se(e,"failurePresentation")!=="none")throw new oe("endpoint failurePresentation 必须为 none");if(Se(e,"auth")!==void 0&&Se(e,"auth")!=="none"&&Se(e,"auth")!=="optional"&&Se(e,"auth")!=="required")throw new oe("endpoint auth 必须为 none、optional 或 required")}function Vt(e){if(Array.isArray(e))return e.map(Vt);if(!e||typeof e!="object")return e;const t=e,r={};for(const[n,i]of Object.entries(t))_l.test(n)||(r[n]=Vt(i));return r}function $o(e){if(!e)return;const t={};for(const[r,n]of Object.entries(e))hc.test(r)||(t[r]=n);return t}function vl(e){if(!e)return;const t=Object.keys(e).find(r=>hc.test(r));if(t)throw new oe(`endpoint 禁止声明 credential-bearing header: ${t}`)}class St extends Error{code="INTERNAL_ENDPOINT_HTTP_STATUS";endpointId;status;retryAfterMs;constructor(t){super(`内部 endpoint 请求失败: HTTP ${t.status}`),this.name="InternalEndpointHttpStatusError",this.endpointId=t.endpointId,this.status=t.status,t.retryAfterMs!==void 0&&(this.retryAfterMs=t.retryAfterMs),Object.setPrototypeOf(this,new.target.prototype)}}const Wo=1440*60*1e3,Rl=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\b/i;function Ol(e,t=Date.now){if(!e)return;const r=Object.entries(e).find(([s])=>s.trim().toLowerCase()==="retry-after")?.[1];if(typeof r!="string"||!r.trim())return;const n=r.trim();if(/^\d+$/.test(n)){const s=Number(n)*1e3;return s>0?Math.min(s,Wo):void 0}if(!Rl.test(n))return;const i=Date.parse(n);if(!Number.isFinite(i))return;const o=i-t();return o>0?Math.min(o,Wo):void 0}function Dl(e,t,r,n){if(e.method!=="GET")return;let i;try{i=JSON.stringify([t??null,r??null])??"undefined"}catch{return}return`${e.id}\0${n}\0${i}`}function mc(e,t){Object.defineProperty(e,"cause",{configurable:!1,enumerable:!1,value:t,writable:!1})}class vt extends Error{code="INTERNAL_ENDPOINT_REQUEST_FAILED";endpointId;constructor(t){super(`内部 endpoint 请求执行失败: ${t.endpointId}`),this.name="InternalEndpointRequestError",this.endpointId=t.endpointId,mc(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}class ur extends Error{code="INTERNAL_ENDPOINT_PARSE_FAILED";endpointId;constructor(t){super(`内部 endpoint 响应解析失败: ${t.endpointId}`),this.name="InternalEndpointParseError",this.endpointId=t.endpointId,mc(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}function Nl(e,t,r,n,i,o,s,a){return{config:{auth:e.auth,body:Vt(i),bodyEncoding:e.bodyEncoding,channel:e.channel,credentials:s.credentials,headers:$o(o),method:e.method,metadata:{endpointId:e.id},query:Vt(n),timeout:e.timeout,url:r},data:Vt(a.data),headers:$o(a.headers)||{},status:a.status,statusText:a.statusText}}async function kn(e,t,r,n){if(!n||!n.signal)throw new TypeError("requestEndpoint requires an AbortSignal");if(n.credentials!=="heybox-session"&&n.credentials!=="omit")throw new TypeError("requestEndpoint requires explicit credentials");if(Sl(t),typeof t.id!="string"||!t.id)throw new oe("endpoint id 必须为非空字符串");if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(t.method))throw new oe("endpoint method 不受 HostNetworkPort 支持");const i=typeof t.path=="function"?await t.path(r):t.path;if(typeof i!="string"||!i)throw new oe("endpoint path 必须为非空字符串");const o=t.query?await t.query(r):void 0,s=t.body?await t.body(r):void 0,a=t.headers?await t.headers(r):void 0;vl(a);const c=async()=>{let m;try{m=await e.request({source:"runtime-private",redirectPolicy:"error",target:{kind:"heybox-api",endpointId:t.id,...t.channel?{channel:t.channel}:{},path:i},method:t.method,...o===void 0?{}:{params:o},...s===void 0?{}:{data:s},...a===void 0?{}:{headers:a},credentials:n.credentials,...t.bodyEncoding===void 0?{}:{bodyEncoding:t.bodyEncoding},...t.timeout===void 0?{}:{timeout:t.timeout}},{signal:n.signal,...n.miniProgramDetail===void 0?{}:{miniProgramDetail:n.miniProgramDetail}})}catch(p){throw p instanceof oe?p:new vt({endpointId:t.id,cause:p})}if(m.status<200||m.status>=300)throw new St({endpointId:t.id,status:m.status,retryAfterMs:Ol(m.headers)});const l=Nl(t,r,i,o,s,a,n,m);if(t.parse)try{return await t.parse(l,r)}catch(p){throw new ur({endpointId:t.id,cause:p})}return l.data},u=n.gate;if(!u)return c();const g=Dl(t,o,s,n.credentials);return u.gate.execute({capability:u.capability,endpointId:t.id,...g===void 0?{}:{coalesceKey:g},load:c})}const Pl=new Set(_t),fo="steam_account",pc=new Set(_t.filter(e=>e!==fo)),Tl=1e3;function Cl(e){const t=new Set,r=lc({ttlMs:Math.max(0,Math.floor(e.identityTtlMs??cc))}),n=new Set;let i=0,o=!1,s=Promise.resolve(),a;const c=e.steamAccount===!0,u=e.userDataMode??fc(e.networkEnabled===!0,c),g=e.requestPolicyEnabled!==!1,m=e.requestGate?{capability:"auth",gate:e.requestGate}:void 0;async function l(){if(!c)return{};if(!e.authorizationContext)throw E("METHOD_FORBIDDEN","新能力版本缺少 Runtime auth context Port");let C;try{C=await e.authorizationContext.get(e.operationContext)}catch{throw E("REQUEST_FAILED","读取 Runtime auth context 失败")}if(C.steamAccount!==c||C.userDataMode!==u)throw E("AUTHORIZATION_CONTEXT_CHANGED","Runtime auth context 已变化,请重新打开小程序");const D=C.token.trim();if(!D)throw E("REQUEST_FAILED","Runtime auth context 为空");return{runtimeAuthContextToken:D}}const p=e.account.onChange(C=>{O(),b("heybox_app_login_change",{isHeyboxAppLoggedIn:!!C})});function O(){i+=1,a?.abort(),r.invalidate(),e.requestGate?.invalidateCoalescing(),n.clear()}function b(C,D){C==="user_info_authorization_change"&&Fl(D)&&r.invalidate();for(const M of t)try{M(C,D)}catch{}}function v(){const C=e.identity.get()?.miniProgramId?.trim();if(!C)throw E("INVALID_STATE","当前能力缺少 canonical 小程序身份");return C}function A(){if(o||e.operationContext.signal.aborted)throw E("RUNTIME_DESTROYED","小程序 Runtime 已终止")}async function P(){A();let C;try{C=await e.account.getCurrentUserId(e.operationContext)}catch(D){throw Jo(D,e.operationContext.signal,"读取小黑盒账号失败")}return typeof C=="string"&&C.trim()?C.trim():void 0}async function _(C,D){const M=await P();if(i!==D||M!==C)throw E("AUTHORIZATION_CONTEXT_CHANGED","授权期间账号上下文已变化,请重新操作")}async function L(C){A();try{await e.account.ensureAuthenticated({trustedUserGesture:C,reason:"runtime_auth",signal:e.operationContext.signal})}catch(M){throw Jo(M,e.operationContext.signal,"小黑盒登录失败")}const D=await P();if(!D)throw E("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");return D}async function F(C,D,M=e.operationContext.signal){try{if(M.aborted)throw ki();return await Hl(kn(e.network,C,D,{...e.operationContext,credentials:"heybox-session",signal:M,...m?{gate:m}:{}}),M)}catch(R){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):R instanceof oe?E("REQUEST_UNSUPPORTED",R.message):R instanceof ur?E("INVALID_RESPONSE","授权接口响应不合法"):R instanceof vt?E("REQUEST_FAILED","授权请求失败"):R instanceof St?g&&(R.status===403||R.status===429)?E("RATE_LIMITED","授权请求已被网关限流,请稍后重试",{status:R.status,...R.retryAfterMs===void 0?{}:{retryAfterMs:R.retryAfterMs}}):E("REQUEST_FAILED",R.message):gc(R)?R:E("REQUEST_FAILED","授权请求失败")}}async function N(C,D){await F(fl,{runtimeContext:{miniProgramId:C,...await l()},challenge:D}).catch(()=>{})}function I(C){const D=async()=>{const R=Yo(e.operationContext.signal);a=R;try{return await C(R.signal)}finally{a===R&&(a=void 0),R.abort()}},M=s.then(D,D);return s=M.then(()=>{},()=>{}),M}async function d(C,D,M,R,U){if(!M)throw await N(C,D.challenge),E("USER_GESTURE_REQUIRED","展示授权确认需要用户手势");if(!e.authPresentation)throw await N(C,D.challenge),E("AUTHORIZATION_PRESENTATION_UNAVAILABLE","授权确认界面不可用");return I(async x=>{await _(R,U);const H=await h(C,D.displayedScopes,x);await _(R,U);let q;try{q=await e.authPresentation.confirmAuthorization({miniProgramId:C,scopes:D.displayedScopes,...H,signal:x})}catch(G){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):(await _(R,U),await N(C,D.challenge),Ll("REQUEST_FAILED","授权确认界面执行失败",G))}if(await _(R,U),q.status!=="granted")throw await N(C,D.challenge),E("AUTHORIZATION_CANCELLED","用户取消授权");const z=Ul(q.grantedScopes,D.displayedScopes,c);if(!z.includes("identity"))throw await N(C,D.challenge),E("AUTHORIZATION_CANCELLED","用户拒绝授权");return z})}async function h(C,D,M){const R=Yo(M),U=setTimeout(()=>R.abort(),Tl);try{const x=xl(e.miniProgramPresentation),[H,q]=await Promise.all([x?Promise.resolve(x):f(C,R.signal),D.includes("profile")?y(R.signal):Promise.resolve(void 0)]);return{...H?{miniProgram:H}:{},...q?{userProfile:q}:{}}}finally{clearTimeout(U),R.abort()}}async function f(C,D){try{const M=e.identity.get()?.version?.trim(),R=await F(dl,{mini_program_id:C,...M?{miniprogram_version:M}:{}},D),U=ht(R,"小程序公开资料"),x=At(U.name),H=At(U.icon_url);return x||H?{...x?{name:x}:{},...H?{avatarUrl:H}:{}}:void 0}catch{return}}async function y(C){try{const D=await F(uc,void 0,C),M=ht(D,"账号基础信息"),R=At(M.display_username),U=At(M.display_avatar);return R||U?{...R?{nickname:R}:{},...U?{avatar:U}:{}}:void 0}catch{return}}async function w(C,D){if(bl(u,"auth.login"),!c&&C.includes(fo))throw E("INVALID_PARAMS","auth.login 参数不合法");const M=v(),R=await L(D),U=i,x=await F(pl,{runtimeContext:{miniProgramId:M,...await l()},scopes:C});await _(R,U);const H=ht(x,"小程序登录"),q=Qo(H,"loginCode"),z=Qo(H,"consentChallenge");if(q===z)throw E("INVALID_RESPONSE","小程序登录 begin 必须返回 exact oneof");let G;if(q)G=Ko(H.loginCode,c);else{const ee=Ml(H.consentChallenge,c),Z=await d(M,ee,D,R,U);await _(R,U);const J=await F(gl,{runtimeContext:{miniProgramId:M,...await l()},challenge:ee.challenge,selectedScopes:Z});if(await _(R,U),G=Ko(ht(J,"小程序登录确认"),c),G.scopes.some(j=>!Z.includes(j)))throw E("INVALID_RESPONSE","小程序登录确认返回了未选择的 scope")}n.clear();for(const ee of G.scopes)n.add(ee);return r.invalidate(),b("heybox_app_login_change",{isHeyboxAppLoggedIn:!0}),b("user_info_authorization_change",Kn(n,c)),G}async function S(C,D){const M=i,R=await F(ml,{runtimeContext:{miniProgramId:D,...await l()}});await _(C,M);const U=kl(ht(R,"用户本地身份"),c);for(const x of c?_t:pc)n.add(x);return b("user_info_authorization_change",Kn(n,c)),U}function T(C){A();const D=v(),M=`${C}\0${D}\0${i}\0${c}`;return r.read(M,()=>S(C,D))}async function V(C){if(!C)throw E("USER_GESTURE_REQUIRED","撤销授权需要用户手势");const D=v(),M=i,R=await P();if(!R)throw E("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");const U=await F(hl,{runtimeContext:{miniProgramId:D,...await l()}});await _(R,M),ht(U,"用户授权撤销"),O(),b("user_info_authorization_change",{identity:"denied",profile:"denied",...c?{steam_account:"denied"}:{}})}return{login:w,getOrCreateLocalIdentity:T,invalidateLocalIdentity(){r.invalidate()},getAuthorization:()=>Kn(n,c),revoke:V,onEvent(C){return t.add(C),()=>t.delete(C)},dispose(){o||(o=!0,O(),r.dispose(),p(),t.clear())}}}function Ll(e,t,r){const n=E(e,t);return Object.defineProperty(n,"cause",{configurable:!0,enumerable:!1,value:r}),n}function ht(e,t){if(!B(e))throw E("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw E(n,r)}if(!B(e.result))throw E("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Ko(e,t){if(!B(e))throw E("INVALID_RESPONSE","login code 必须是对象");const r=gn(e.scopes,"login code scopes",t);if(typeof e.code!="string"||!e.code.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!r.includes("identity"))throw E("INVALID_RESPONSE","login code 响应不合法");return{code:e.code,expiresIn:Number(e.expiresIn),scopes:r}}function Ml(e,t){if(!B(e))throw E("INVALID_RESPONSE","授权 challenge 必须是对象");const r=gn(e.requestedScopes,"challenge requestedScopes",t),n=gn(e.displayedScopes,"challenge displayedScopes",t);if(typeof e.challenge!="string"||!e.challenge.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!Number.isInteger(e.consentUiVersion)||Number(e.consentUiVersion)<0||!r.length||!r.includes("identity")||!n.length||!n.includes("identity")||r.some(i=>!n.includes(i)))throw E("INVALID_RESPONSE","授权 challenge 响应不合法");return{challenge:e.challenge.trim(),requestedScopes:r,displayedScopes:n}}function kl(e,t){if(!B(e)||typeof e.appUserId!="string"||!e.appUserId.trim())throw E("INVALID_RESPONSE","本地身份 appUserId 必须是非空字符串");const r=e.appUserId.trim();if(!t)return{appUserId:r};if(e.steamId!==void 0&&typeof e.steamId!="string")throw E("INVALID_RESPONSE","本地身份 steamId 必须是字符串");const n=typeof e.steamId=="string"&&e.steamId.trim()?e.steamId.trim():void 0;return n?{appUserId:r,steamId:n}:{appUserId:r}}function Ul(e,t,r){const n=gn(e,"授权选择 scopes",r);if(n.some(i=>!t.includes(i)))throw E("INVALID_RESPONSE","授权选择包含未展示的 scope");return n}function At(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function xl(e){const t=At(e?.name),r=At(e?.avatarUrl);return t||r?{...t?{name:t}:{},...r?{avatarUrl:r}:{}}:void 0}function Yo(e){const t=new AbortController;return e.aborted?t.abort(e.reason):e.addEventListener("abort",()=>t.abort(e.reason),{once:!0,signal:t.signal}),t}function Hl(e,t){return t.aborted?Promise.reject(ki()):new Promise((r,n)=>{let i=!1;const o=a=>{i||(i=!0,t.removeEventListener("abort",s),a())},s=()=>o(()=>n(ki()));t.addEventListener("abort",s,{once:!0}),e.then(a=>o(()=>r(a)),a=>o(()=>n(a)))})}function ki(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function gn(e,t,r){const n=r?Pl:pc;if(!Array.isArray(e)||e.some(i=>typeof i!="string"||!n.has(i))||new Set(e).size!==e.length)throw E("INVALID_RESPONSE",`${t} 不合法`);return[...e]}function Kn(e,t){const r=t?_t:_t.filter(n=>n!==fo);return Object.fromEntries(r.map(n=>[n,e.has(n)?"granted":"not_requested"]))}function Qo(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Fl(e){return B(e)?Object.values(e).some(t=>t==="denied"):!1}function gc(e){return B(e)&&typeof e.code=="string"&&typeof e.message=="string"}function Jo(e,t,r){return t.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):gc(e)?e:E("REQUEST_FAILED",r)}const Bl=new Set(_t);function Vl(e){return{[Vr]:async(t,r)=>e.authorization.login(ql(t),r.trustedUserGesture)}}function ql(e){if(e===void 0)return["identity"];if(!B(e)||Object.keys(e).some(t=>t!=="scopes"))throw Xo();if(e.scopes===void 0)return["identity"];if(!Array.isArray(e.scopes)||e.scopes.some(t=>typeof t!="string"||!Bl.has(t))||new Set(e.scopes).size!==e.scopes.length)throw Xo();return[...e.scopes]}function Xo(){return E("INVALID_PARAMS","auth.login 参数不合法")}const zl={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.current.delete.post",method:"POST",path:"/user_miniprogram/cloud/leaderboard/current/delete",body(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{}}},parse(e,t){return ge(e,"排行榜记录删除接口响应异常")}},Gl={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.current.get",method:"GET",path:"/user_miniprogram/cloud/leaderboard/current",query(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{}}},parse(e,t){return ge(e,"当前排行榜记录接口响应异常")}},jl={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.info.get",method:"GET",path:"/user_miniprogram/cloud/leaderboard/info",query(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{}}},parse(e,t){return ge(e,"排行榜信息接口响应异常")}},$l={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.list.get",method:"GET",path:"/user_miniprogram/cloud/leaderboard/list",query(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{},limit:e.limit,...e.cursor?{cursor:e.cursor}:{}}},parse(e,t){return ge(e,"排行榜列表接口响应异常")}},Wl={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.submit.post",method:"POST",path:"/user_miniprogram/cloud/leaderboard/submit",body(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{},score:e.score,...e.extra===void 0?{}:{extra:JSON.stringify(e.extra)}}},parse(e,t){return ge(e,"排行榜提交接口响应异常")}};function Tr(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function Zo(e){return e instanceof oe?{code:"REQUEST_UNSUPPORTED",message:e.message}:e}function re(e){if(e.aborted)throw Tr()}function X(e,t,r={}){if(t.aborted&&!r.invokeWhenAborted)return Promise.reject(Tr());let n;try{n=e()}catch(i){return Promise.reject(Zo(i))}return t.aborted?(Promise.resolve(n).catch(()=>{}),Promise.reject(Tr())):new Promise((i,o)=>{let s=!1;const a=u=>{s||(s=!0,t.removeEventListener("abort",c),u())},c=()=>a(()=>o(Tr()));t.addEventListener("abort",c,{once:!0}),Promise.resolve(n).then(u=>a(()=>i(u)),u=>a(()=>o(Zo(u))))})}const Kl="default",Yl=/^[A-Za-z0-9_-]{1,64}$/,Ql=300*1e3,Jl=250,Xl=3,Zl={1:"Canceled",2:"Unknown",3:"InvalidArgument",4:"DeadlineExceeded",5:"NotFound",6:"AlreadyExists",7:"PermissionDenied",8:"ResourceExhausted",9:"FailedPrecondition",10:"Aborted",11:"OutOfRange",12:"Unimplemented",13:"Internal",14:"Unavailable",15:"DataLoss",16:"Unauthenticated"};class ef{constructor(t){this.options=t,this.requestGateContext=t.requestGate?{capability:"cloud",gate:t.requestGate}:void 0,this.unsubscribeAccountChange=rf(t.account,()=>this.invalidateForAccountChange()),t.operationContext.signal.aborted?this.dispose():t.operationContext.signal.addEventListener("abort",this.handleTerminalAbort,{once:!0})}accountGeneration=0;buckets=new Map;inflight=new Map;unsubscribeAccountChange;requestGateContext;disposed=!1;handleTerminalAbort=()=>this.dispose();async submit(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId();await this.requireCurrentUser(r);const i=await this.request(Wl,{miniProgramId:n,...t});this.assertAccountGeneration(r);const o=Ct(i,Me);return this.invalidateMutableReads(this.createBucketKey(n,t.key)),Yn(o,Me)}getList(t){this.assertUsable();const r=this.readMiniProgramId(),n=this.createBucketKey(r,t.key),i=Lt("list",t.limit,t.cursor??null);return this.read(n,"list",i,async()=>{const o=await this.request($l,{miniProgramId:r,...t}),s=Ct(o,be);if(!Ne(s)||!Array.isArray(s.entries)||typeof s.has_more!="boolean")throw te(`${be} 返回值不合法`);if(s.cursor!==void 0&&s.cursor!==null&&typeof s.cursor!="string")throw te(`${be} 返回的 cursor 必须是字符串`);return{entries:s.entries.map(a=>Yn(a,be)),...typeof s.cursor=="string"&&s.cursor?{cursor:s.cursor}:{},hasMore:s.has_more}})}async getCurrentUserEntry(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId(),i=await this.requireCurrentUser(r),o=this.createBucketKey(n,t.key),s=Lt("current",i);return this.read(o,"current",s,async()=>{const a=await this.request(Gl,{miniProgramId:n,...t}),c=Ct(a,ze);if(!Ne(c))throw te(`${ze} 返回值必须是对象`);return c.entry===void 0||c.entry===null?void 0:Yn(c.entry,ze)})}async deleteCurrentUserEntry(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId();await this.requireCurrentUser(r);const i=await this.request(zl,{miniProgramId:n,...t});this.assertAccountGeneration(r);const o=Ct(i,st);if(this.invalidateMutableReads(this.createBucketKey(n,t.key)),!Ne(o)||typeof o.deleted!="boolean")throw te(`${st} 返回的 deleted 必须是布尔值`);return{deleted:o.deleted}}getInfo(t){this.assertUsable();const r=this.readMiniProgramId(),n=this.createBucketKey(r,t.key);return this.read(n,"info",Lt("info"),async()=>{const i=await this.request(jl,{miniProgramId:r,...t}),o=Ct(i,De);if(!Ne(o)||typeof o.key!="string"||!Yl.test(o.key))throw te(`${De} 返回的 key 不合法`);if(t.key!==void 0&&o.key!==t.key)throw te(`${De} 返回的 key 与请求不一致`);if(o.order!=="asc"&&o.order!=="desc")throw te(`${De} 返回的 order 必须是 asc 或 desc`);if(typeof o.rank_limit!="number"||!Number.isInteger(o.rank_limit)||o.rank_limit<0)throw te(`${De} 返回的 rankLimit 必须是非负整数`);return{key:o.key,order:o.order,rankLimit:o.rank_limit}})}read(t,r,n,i){this.assertUsable();const o=this.getOrCreateBucket(t),s=o?.caches[r],a=s?.get(n);if(a&&a.expiresAt>Date.now())return Promise.resolve(a.value);s?.delete(n);const c=Lt(t,n),u=this.inflight.get(c);if(u)return u.promise;const g=this.accountGeneration,m=o?.generation,l=i().then(p=>(this.assertAccountGeneration(g),o&&s&&o.generation===m&&(r==="list"?s.size>=Jl&&s.delete(s.keys().next().value):s.clear(),s.set(n,{expiresAt:Date.now()+Ql,value:p})),p)).finally(()=>{this.inflight.get(c)?.promise===l&&this.inflight.delete(c),o&&this.removeEmptyBucket(t,o)});return this.inflight.set(c,{bucketKey:t,promise:l}),l}getOrCreateBucket(t){const r=this.buckets.get(t);if(r)return r;if(this.pruneExpiredBuckets(),this.buckets.size>=Xl)return;const n={generation:0,caches:{list:new Map,current:new Map,info:new Map}};return this.buckets.set(t,n),n}invalidateMutableReads(t){this.invalidateInflight(t);const r=this.buckets.get(t);r&&(r.generation+=1,r.caches.list.clear(),r.caches.current.clear())}invalidateForAccountChange(){this.accountGeneration+=1,this.buckets.clear(),this.inflight.clear()}invalidateInflight(t){for(const[r,n]of this.inflight)n.bucketKey===t&&this.inflight.delete(r)}pruneExpiredBuckets(){const t=Date.now();for(const[r,n]of this.buckets)ts(n,t),this.isBucketEmpty(r,n)&&this.buckets.delete(r)}removeEmptyBucket(t,r){ts(r,Date.now()),this.buckets.get(t)===r&&this.isBucketEmpty(t,r)&&this.buckets.delete(t)}isBucketEmpty(t,r){return![...this.inflight.values()].some(n=>n.bucketKey===t)&&Object.values(r.caches).every(n=>n.size===0)}async requireCurrentUser(t){this.assertUsable();let r;try{r=await X(()=>this.options.account.getCurrentUserId(this.options.operationContext),this.options.operationContext.signal)}catch(n){throw ns(n)?n:rs()}if(this.assertAccountGeneration(t),typeof r!="string"||!r.trim())throw Ee("UNAUTHORIZED","当前用户未登录");return r.trim()}readMiniProgramId(){const t=this.options.identity.get()?.miniProgramId.trim();if(!t)throw Ee("INVALID_STATE","canonical mini-program identity 尚未绑定");return t}createBucketKey(t,r){return Lt(t,r??Kl)}assertAccountGeneration(t){if(this.assertUsable(),t!==this.accountGeneration)throw Ee("UNAUTHORIZED","登录状态已变化,请重试")}async request(t,r){this.assertUsable();const n={request:async(i,o)=>(this.assertUsable(),this.options.network.request(i,o))};try{return await X(()=>kn(n,t,r,{...this.options.operationContext,credentials:"heybox-session",...this.requestGateContext?{gate:this.requestGateContext}:{}}),this.options.operationContext.signal)}catch(i){if(ns(i)||Ht(i,"REQUEST_UNSUPPORTED")||Ht(i,"RATE_LIMITED")||Ht(i,"RATE_LIMITED_BY_RUNTIME"))throw i;if(i instanceof oe)throw Ee("REQUEST_UNSUPPORTED","当前 Host 不支持该排行榜请求");if(i instanceof vt&&Ht(i.cause,"INVALID_STATE"))throw i.cause;if(i instanceof St){if(this.options.requestPolicyEnabled!==!1&&(i.status===403||i.status===429))throw Ee("RATE_LIMITED","排行榜请求已被网关限流,请稍后重试",{status:i.status,...i.retryAfterMs===void 0?{}:{retryAfterMs:i.retryAfterMs}});if(i.status===401||i.status===403)throw Ee("UNAUTHORIZED","当前用户未登录")}throw i instanceof vt||i instanceof St?rs():i instanceof ur?te(i.cause instanceof Error?i.cause.message:"排行榜响应不合法"):te(i instanceof Error?i.message:"排行榜响应不合法")}}dispose(){this.disposed||(this.disposed=!0,this.accountGeneration+=1,this.options.operationContext.signal.removeEventListener("abort",this.handleTerminalAbort),this.unsubscribeAccountChange(),this.buckets.clear(),this.inflight.clear())}assertUsable(){if(re(this.options.operationContext.signal),this.disposed)throw Ee("INVALID_STATE","Cloud capability 已释放")}}function tf(e){return new ef(e)}function rf(e,t){try{return e.onChange(t)}catch(r){if(Ht(r,Ja))return()=>{};throw r}}function Ct(e,t){if(!Ne(e)||typeof e.status!="string")throw te(`${t} 响应必须是标准信封`);if(e.status!=="ok")throw nf(e);if(!Object.prototype.hasOwnProperty.call(e,"result")||e.result===void 0||e.result===null)throw te(`${t} 响应缺少 result`);return e.result}function Yn(e,t){if(!Ne(e))throw te(`${t} 返回的 entry 必须是对象`);if(typeof e.ranked!="boolean")throw te(`${t} 返回的 ranked 必须是布尔值`);if(typeof e.rank!="number"||!Number.isInteger(e.rank)||(e.ranked?e.rank<=0:e.rank!==0))throw te(`${t} 返回的 rank/ranked 不合法`);if(typeof e.app_user_id!="string"||!e.app_user_id.trim())throw te(`${t} 返回的 appUserId 必须是非空字符串`);if(typeof e.score!="number"||!Number.isFinite(e.score))throw te(`${t} 返回的 score 必须是有限数字`);if(!Ne(e.extra))throw te(`${t} 返回的 extra 必须是对象`);if(typeof e.created_at!="number"||!Number.isFinite(e.created_at)||typeof e.updated_at!="number"||!Number.isFinite(e.updated_at))throw te(`${t} 返回的时间字段必须是有限数字`);return{appUserId:e.app_user_id,createdAt:e.created_at,extra:e.extra,rank:e.rank,ranked:e.ranked,score:e.score,updatedAt:e.updated_at}}function nf(e){if(e.status==="login"||e.status==="relogin")throw Ee("UNAUTHORIZED",xt(e.msg)||"当前用户未登录");const t=es(e.result)??es(e),r=xt(t?.user_message)||xt(e.msg)||xt(t?.developer_message)||"排行榜请求失败";throw t?Ee(of(t),r,{status:e.status,sbe:t}):Ee("HEYBOX_API_ERROR",r,{status:e.status})}function es(e){return Ne(e)&&Ne(e.sbe)?e.sbe:void 0}function of(e){const t=xt(e.developer_message);if(t&&/^[A-Z][A-Z0-9_]+$/.test(t))return t;const r=e.code;if(typeof r=="number"&&Number.isInteger(r))return Zl[r]||t||"HEYBOX_API_ERROR";if(typeof r=="string"){const n=/^([A-Za-z][A-Za-z0-9_]*)(?:\(\d+\))?$/.exec(r.trim());if(n?.[1])return n[1]}return t||"HEYBOX_API_ERROR"}function ts(e,t){for(const r of Object.values(e.caches))for(const[n,i]of r)i.expiresAt<=t&&r.delete(n)}function Lt(...e){return JSON.stringify(e)}function Ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function xt(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Ht(e,t){return Ne(e)&&e.code===t}function Ee(e,t,r){return r===void 0?{code:e,message:t}:{code:e,message:t,data:r}}function te(e){return Ee("INVALID_RESPONSE",e)}function rs(){return Ee("REQUEST_FAILED","排行榜请求失败")}function ns(e){return e instanceof Error&&e.name==="AbortError"}const sf=/^[A-Za-z0-9_-]{1,64}$/,is=20,af=100,os=2048;function cf(e){const t=tf(e);return{handlers:{[Me]:async n=>t.submit(df(n)),[be]:async n=>t.getList(uf(n)),[ze]:async n=>t.getCurrentUserEntry(Qn(n,ze)),[st]:async n=>t.deleteCurrentUserEntry(Qn(n,st)),[De]:async n=>t.getInfo(Qn(n,De))},dispose:()=>t.dispose()}}function df(e){const t=ho(e,Me,!1);if(mo(t,["key","score","extra"],Me),typeof t.score!="number"||!Number.isFinite(t.score)||Math.abs(t.score)>Number.MAX_SAFE_INTEGER)throw Pe("INVALID_PARAMS","cloud.leaderboard.submit score 必须是有限安全数字");return{...po(t.key,Me),score:t.score,...t.extra===void 0?{}:{extra:lf(t.extra)}}}function uf(e){if(e===void 0)return{limit:is};const t=ho(e,be,!0);mo(t,["key","limit","cursor"],be);const r=t.limit===void 0?is:t.limit;if(typeof r!="number"||!Number.isInteger(r)||r<=0||r>af)throw Pe("INVALID_PARAMS","cloud.leaderboard.getList limit 必须是 1-100 的整数");if(t.cursor!==void 0&&typeof t.cursor!="string")throw Pe("INVALID_PARAMS","cloud.leaderboard.getList cursor 必须是字符串");return{...po(t.key,be),limit:r,...t.cursor===void 0?{}:{cursor:t.cursor}}}function Qn(e,t){if(e===void 0)return{};const r=ho(e,t,!0);return mo(r,["key"],t),po(r.key,t)}function ho(e,t,r){if(e===void 0&&r)return{};if(!yc(e))throw Pe("INVALID_PARAMS",`${t} 参数必须是对象`);return e}function mo(e,t,r){const n=Object.keys(e).find(i=>!t.includes(i));if(n)throw Pe("INVALID_PARAMS",`${r} 不支持参数 ${n}`)}function po(e,t){if(e===void 0)return{};if(typeof e!="string"||!sf.test(e))throw Pe("INVALID_PARAMS",`${t} key 仅支持 1-64 位字母、数字、下划线和连字符`);return{key:e}}function lf(e){if(!yc(e))throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须是对象");let t;try{t=JSON.stringify(e)}catch{throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化")}if(typeof t!="string")throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化");if(new TextEncoder().encode(t).length>os)throw Pe("INVALID_PARAMS",`cloud.leaderboard.submit extra 不能超过 ${os} 字节`);return e}function yc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,t){return{code:e,message:t}}const ff=new Set(["stdio","attachments","notifications"]),Ec=new Set(["windows-x64","macos-arm64"]),hf=new Set(["unsigned","valid","invalid","unknown"]),mf=/^[a-f0-9]{64}$/,pf=new Set(["exited","terminated","crashed","host-shutdown","permission-revoked","output-limit"]),gf=new Set(Ya),yf=new Set([...Ya,"PERMISSION_DENIED","USER_GESTURE_REQUIRED"]),wc=Object.freeze({COMPANION_UNSUPPORTED:"当前 Host 不支持 Companion",COMPANION_PREVIEW_UNSUPPORTED:"当前 Host 不支持预览 Companion",COMPANION_NOT_DECLARED:"当前版本未声明该 Companion",COMPANION_TARGET_UNSUPPORTED:"当前平台不支持该 Companion target",COMPANION_NOT_PREPARED:"Companion 尚未准备完成",COMPANION_PREPARATION_CANCELLED:"Companion 准备已取消",COMPANION_DOWNLOAD_FAILED:"Companion 下载失败",COMPANION_DESCRIPTOR_UNAVAILABLE:"Companion 授权或描述符暂不可用",COMPANION_ARCHIVE_INVALID:"Companion 归档不合法",COMPANION_INTEGRITY_FAILED:"Companion 完整性校验失败",COMPANION_ENTRYPOINT_INVALID:"Companion 入口不合法",COMPANION_USER_CANCELLED:"用户取消了 Companion 操作",COMPANION_ELEVATION_DENIED:"用户未授予 Companion 管理员权限",COMPANION_OS_BLOCKED:"操作系统安全策略阻止了 Companion",COMPANION_LAUNCH_FAILED:"Companion 启动失败",COMPANION_SESSION_VERSION_MISMATCH:"Companion Session 版本不匹配",COMPANION_SESSION_OWNERSHIP_LOST:"Companion Session 控制权已转移",COMPANION_SESSION_EXITED:"Companion Session 已退出",COMPANION_PIPE_CLOSED:"Companion 通信管道已关闭",COMPANION_OUTPUT_LIMIT:"Companion 输出超过限制",COMPANION_PROCESS_CRASHED:"Companion 进程异常退出",COMPANION_ATTACHMENT_NOT_FOUND:"Companion Attachment 不存在",COMPANION_NOTIFICATION_UNAVAILABLE:"Companion 通知不可用",COMPANION_TERMINATE_FAILED:"Companion 终止失败",PERMISSION_DENIED:"桌面辅助应用权限未启用或已撤销",USER_GESTURE_REQUIRED:"当前操作需要新的可信用户手势"});function Ef(e){const t=async(n,i,o,s)=>{const a=wf(n);try{Oe(i.signal);const c=await o(a,{...e.operationContext,signal:i.signal});return Oe(i.signal),c}catch(c){throw xi(c,s)}},r=async(n,i,o)=>{if(!o.trustedUserGesture)throw E("USER_GESTURE_REQUIRED","当前操作需要新的可信用户手势");if(!e.companionPresentation)throw E("COMPANION_UNSUPPORTED","Host 未提供 Companion 可信授权界面");const s={...e.operationContext,signal:o.signal},a=await e.companion.getInfo(i,s).then(u=>bf(u,i)).catch(u=>{throw xi(u)});Oe(o.signal);const c=await e.companionPresentation.confirmCompanionOperation({action:n,companion:a,miniProgram:e.miniProgramPresentation,signal:o.signal});if(Oe(o.signal),c.status!=="granted")throw E("COMPANION_USER_CANCELLED","用户取消了 Companion 操作")};return{[_n]:(n,i)=>t(n,i,async(o,s)=>Ui(await e.companion.getInfo(o,s),o)),[Sn]:(n,i)=>t(n,i,async(o,s)=>ss(await e.companion.getPreparationStatus(o,s))),[vn]:(n,i)=>t(n,i,async(o,s)=>{const a=ss(await e.companion.getPreparationStatus(o,s));return Oe(i.signal),a.state!=="ready"&&a.state!=="preparing"&&await r("prepare",o,i),Oe(i.signal),Ui(await e.companion.prepare(o,{...s,onProgress:c=>i.postProgress(Ac(c))}),o)},"COMPANION_PREPARATION_CANCELLED"),[Rn]:(n,i)=>t(n,i,(o,s)=>e.companion.cancelPreparation(o,s)),[On]:(n,i)=>t(n,i,async(o,s)=>as(await e.companion.getActiveSession(o,s),o)),[Dn]:(n,i)=>t(n,i,async(o,s)=>{const a=as(await e.companion.getActiveSession(o,s),o);return Oe(i.signal),a||(await r("launch",o,i),Oe(i.signal),Ic(await e.companion.launch(o,s),o))}),[Nn]:(n,i)=>mt(n,i,e,"write"),[Pn]:(n,i)=>mt(n,i,e,"closeStdin"),[Tn]:(n,i)=>mt(n,i,e,"terminate"),[Cn]:(n,i)=>mt(n,i,e,"ackOutput"),[Ln]:async(n,i)=>{const o=await mt(n,i,e,"openAttachment");return e.fileRegistry.registerFile(o,"companion-attachment","read")},[Mn]:(n,i)=>mt(n,i,e,"showNotification")}}function wf(e){if(!B(e)||typeof e.alias!="string"||!fu.test(e.alias))throw E("INVALID_PARAMS","Companion alias 不合法");return e.alias}function Oe(e){if(e.aborted)throw Object.assign(new Error("Companion 操作已取消"),{name:"AbortError"})}async function mt(e,t,r,n){if(!B(e)||typeof e.sessionId!="string"||!e.sessionId||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0)throw E("INVALID_PARAMS","Companion Session controller 不合法");try{Oe(t.signal);const i=await r.companion[n](Af(e,n),{...r.operationContext,signal:t.signal});return Oe(t.signal),i}catch(i){throw xi(i)}}function Ae(){throw E("COMPANION_HOST_FAILED","Companion Host 返回了无效数据")}function bc(e){return!Array.isArray(e)||e.some(t=>!ff.has(t))?Ae():Object.freeze([...new Set(e)])}function Ui(e,t){return!B(e)||typeof e.alias!="string"||typeof e.displayName!="string"||t!==void 0&&e.alias!==t||!Ec.has(String(e.target))||!Number.isSafeInteger(e.archiveBytes)||Number(e.archiveBytes)<0||!hf.has(String(e.signatureStatus))||e.source!==void 0&&e.source!=="local-dev"&&e.source!=="preview"&&e.source!=="released"?Ae():Object.freeze({alias:e.alias,displayName:e.displayName,target:e.target,capabilities:bc(e.capabilities),archiveBytes:e.archiveBytes,signatureStatus:e.signatureStatus,...e.source===void 0?{}:{source:e.source}})}function bf(e,t){const r=Ui(e,t);return!B(e)||e.sha256===void 0?r:typeof e.sha256!="string"||!mf.test(e.sha256)?Ae():Object.freeze({...r,sha256:e.sha256})}function Ac(e){return B(e)?e.phase==="downloading"&&Number.isSafeInteger(e.loaded)&&Number(e.loaded)>=0&&(e.total===void 0||Number.isSafeInteger(e.total)&&Number(e.total)>=Number(e.loaded))?Object.freeze({phase:"downloading",loaded:e.loaded,...e.total===void 0?{}:{total:e.total}}):(e.phase==="verifying"||e.phase==="extracting")&&Number.isSafeInteger(e.processed)&&Number.isSafeInteger(e.total)&&Number(e.processed)>=0&&Number(e.total)>=Number(e.processed)?Object.freeze({phase:e.phase,processed:e.processed,total:e.total}):Ae():Ae()}function ss(e){return B(e)?e.state==="not-prepared"?Object.freeze({state:"not-prepared"}):e.state==="preparing"?Object.freeze({state:"preparing",progress:Ac(e.progress)}):e.state==="ready"&&Number.isSafeInteger(e.preparedAt)&&Number(e.preparedAt)>=0?Object.freeze({state:"ready",preparedAt:e.preparedAt}):e.state==="failed"&&B(e.error)&&typeof e.error.code=="string"&&gf.has(e.error.code)&&typeof e.error.message=="string"&&typeof e.error.retryable=="boolean"?Object.freeze({state:"failed",error:Object.freeze({code:e.error.code,message:wc[e.error.code]??"Companion 操作失败",retryable:e.error.retryable})}):Ae():Ae()}function Ic(e,t){return!B(e)||typeof e.id!="string"||!e.id||typeof e.alias!="string"||t!==void 0&&e.alias!==t||!Ec.has(String(e.target))||e.state!=="running"||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0?Ae():Object.freeze({id:e.id,alias:e.alias,target:e.target,capabilities:bc(e.capabilities),state:"running",controllerGeneration:e.controllerGeneration})}function as(e,t){return e===void 0?void 0:Ic(e,t)}function Af(e,t){const r=e,n={sessionId:r.sessionId,controllerGeneration:r.controllerGeneration};if(t==="write"){if(!$a(r.data))throw E("INVALID_PARAMS","Companion write data 不合法");return{...n,data:new Uint8Array(r.data)}}if(t==="ackOutput"){if(r.stream!=="stdout"&&r.stream!=="stderr"||!Number.isSafeInteger(r.sequence)||Number(r.sequence)<0)throw E("INVALID_PARAMS","Companion output ack 不合法");return{...n,stream:r.stream,sequence:r.sequence}}if(t==="openAttachment"){if(typeof r.id!="string"||!r.id)throw E("INVALID_PARAMS","Companion Attachment ID 不合法");return{...n,id:r.id}}if(t==="showNotification"){if(!["completed","failed","stopped","attention"].includes(String(r.category)))throw E("INVALID_PARAMS","Companion notification category 不合法");return{...n,category:r.category}}return n}function If(e){return!B(e)||!pf.has(String(e.reason))?Ae():e.reason==="exited"?Number.isSafeInteger(e.exitCode)?Object.freeze({reason:"exited",exitCode:e.exitCode}):Ae():e.exitCode!==void 0&&!Number.isSafeInteger(e.exitCode)?Ae():Object.freeze({reason:e.reason,...e.exitCode===void 0?{}:{exitCode:e.exitCode}})}function _f(e){if(!B(e)||!B(e.payload)||typeof e.payload.sessionId!="string"||!e.payload.sessionId)return;const t=e.payload,r=t.sessionId;if(e.type==="companion.session.output")return!Number.isSafeInteger(t.controllerGeneration)||Number(t.controllerGeneration)<0||t.stream!=="stdout"&&t.stream!=="stderr"||!Number.isSafeInteger(t.sequence)||Number(t.sequence)<0||!$a(t.data)?void 0:{type:e.type,payload:{sessionId:r,controllerGeneration:t.controllerGeneration,stream:t.stream,sequence:t.sequence,data:new Uint8Array(t.data)}};if(e.type==="companion.session.exit")try{return{type:e.type,payload:{sessionId:r,exit:If(t.exit)}}}catch{return}if(e.type==="companion.session.ownershipLost"&&Number.isSafeInteger(t.controllerGeneration)&&Number(t.controllerGeneration)>=0)return{type:e.type,payload:{sessionId:r,controllerGeneration:t.controllerGeneration}}}function xi(e,t){return B(e)&&typeof e.code=="string"&&yf.has(e.code)?E(e.code,wc[e.code]??"Companion 操作失败",e.code==="COMPANION_DESCRIPTOR_UNAVAILABLE"?{retryable:!0}:typeof e.retryable=="boolean"?{retryable:e.retryable}:void 0):t&&B(e)&&e.name==="AbortError"?E(t,"Companion 准备已取消"):E("COMPANION_HOST_FAILED","Companion Host 操作失败")}const cs=5e3,ds=1e4;function nt(e){throw{code:"INVALID_PARAMS",message:e}}function _c(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Sc(e,t,r){const n=Object.keys(e).filter(i=>!t.includes(i));n.length&&nt(`${r} 不支持字段: ${n.join(", ")}`)}function Sf(e){if(e===void 0)return{intensity:"light",delay:0};if(!_c(e))return nt("device.vibrate 参数必须是对象");Sc(e,["intensity","delay"],"device.vibrate");const t=e.intensity??"light";if(t!=="light"&&t!=="medium"&&t!=="heavy")return nt("device.vibrate intensity 必须是 light、medium 或 heavy");const r=t,n=e.delay??0;return typeof n!="number"||!Number.isInteger(n)||n<0||n>cs?nt(`device.vibrate delay 必须是 0-${cs} 的整数毫秒`):{intensity:r,delay:n}}function vf(e){return _c(e)?(Sc(e,["text"],"device.setClipboard"),typeof e.text!="string"||!e.text.trim()?nt("device.setClipboard text 必须是非空字符串"):e.text.length>ds?nt(`device.setClipboard text 不能超过 ${ds} 字符`):{text:e.text}):nt("device.setClipboard 参数必须是对象")}function Rf(e){return{[ln]:async t=>{re(e.operationContext.signal),await X(()=>e.presentation.vibrate(Sf(t),e.operationContext),e.operationContext.signal)},[fn]:async t=>{re(e.operationContext.signal),await X(()=>e.presentation.setClipboard(vf(t),e.operationContext),e.operationContext.signal)}}}const Of=new Set(["METHOD_FORBIDDEN","FILE_PICKER_CANCELLED","FILE_ACCESS_REVOKED","FILE_ACCESS_DENIED","FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_ALREADY_EXISTS","DIRECTORY_ALREADY_EXISTS","FILE_TYPE_MISMATCH","FILE_TOO_LARGE","FILE_QUOTA_EXCEEDED","FILE_ENCODING_INVALID","DIRECTORY_LIST_LIMIT_EXCEEDED","DIRECTORY_NOT_EMPTY","FILE_IO_FAILED"]),Df={METHOD_FORBIDDEN:"当前 Host 未开放该文件能力",FILE_PICKER_CANCELLED:"已取消文件选择",FILE_ACCESS_REVOKED:"文件授权已失效",FILE_ACCESS_DENIED:"当前文件授权不允许此操作",FILE_NOT_FOUND:"文件不存在",DIRECTORY_NOT_FOUND:"目录不存在",FILE_ALREADY_EXISTS:"文件已存在",DIRECTORY_ALREADY_EXISTS:"目录已存在",FILE_TYPE_MISMATCH:"文件类型不匹配",FILE_TOO_LARGE:"文件超过大小限制",FILE_QUOTA_EXCEEDED:"文件配额已用尽",FILE_ENCODING_INVALID:"文件编码不合法",DIRECTORY_LIST_LIMIT_EXCEEDED:"目录项数量超过限制",DIRECTORY_NOT_EMPTY:"目录不为空",FILE_IO_FAILED:"文件操作失败"};function go(e){const t=vc(e),r=t&&Of.has(t)?E(t,Df[t]??"文件操作失败"):E("FILE_IO_FAILED","文件操作失败");return Object.defineProperty(r,"cause",{value:e,enumerable:!1}),r}function Le(e){try{return e()}catch(t){throw go(t)}}function vc(e){try{if(!B(e))return;const t=Object.getOwnPropertyDescriptor(e,"code");return t&&"value"in t&&typeof t.value=="string"?t.value:void 0}catch{return}}function Rc(e,t,r={}){const n=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=n==="readwrite",o=r.allowRemove!==!1&&typeof e.remove=="function";return Object.freeze({kind:"file",name:e.name,mode:n,create:i?(s,a)=>e.create(s,a):Hi,remove:o?s=>e.remove(s):Dc,read:s=>e.read(s),write:i?(s,a)=>e.write(s,a):Hi,stat:s=>e.stat(s)})}function Oc(e,t,r={}){const n=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=n==="readwrite",o=r.allowRemove!==!1,s=o&&typeof e.remove=="function";return Object.freeze({kind:"directory",name:e.name,mode:n,file:a=>Rc(e.file(a),n,{allowRemove:o}),directory:a=>Oc(e.directory(a),n,{allowRemove:o}),create:i?(a,c)=>e.create(a,c):Hi,remove:s?(a,c)=>e.remove(a,c):Dc,stat:a=>e.stat(a),list:(a,c)=>e.list(a,c)})}function Hi(){return Promise.reject(E("FILE_ACCESS_DENIED","当前文件授权只允许读取"))}function Dc(){return Promise.reject(E("FILE_ACCESS_DENIED","外部文件授权不允许删除"))}const us=1024;class Nf{constructor(t,r){this.files=t,this.miniProgramDetail=r}handles=new Map;disposed=!1;dispose(){this.disposed||(this.disposed=!0,this.handles.clear())}registerFile(t,r="external",n){this.assertCanonicalDetail();const i=this.prepareFile(t,r,n),[o]=this.registerMany([i]);return br(i.handle,{kind:"file",handleId:o})}registerFiles(t,r="external",n,i){this.assertCanonicalDetail();const o=Le(()=>{if(!Array.isArray(t))throw E("FILE_IO_FAILED","Host 返回了无效文件选择结果");const a=t.length;if(i!==void 0&&a>i)throw E("FILE_IO_FAILED","Host 返回了过多文件选择结果");if(this.handles.size+a>us)throw E("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const c=[];for(let u=0;u<a;u+=1){if(!Object.prototype.hasOwnProperty.call(t,u))throw E("FILE_IO_FAILED","Host 返回了稀疏文件选择结果");c.push(this.prepareFile(t[u],r,n))}return c}),s=this.registerMany(o);return o.map((a,c)=>br(a.handle,{kind:"file",handleId:s[c]}))}registerDirectory(t,r="external",n){this.assertCanonicalDetail();const i=this.prepareDirectory(t,r,n),[o]=this.registerMany([i]);return fs(i.handle,{kind:"directory",handleId:o})}resolveFile(t){return this.resolveFileEntry(t).handle}resolveDirectory(t){return this.resolveDirectoryEntry(t).handle}isCompanionAttachmentRef(t){return!ao(t)||!("handleId"in t)?!1:this.handles.get(t.handleId)?.origin==="companion-attachment"}resolveFileEntry(t){this.assertCanonicalDetail();const r=Tf(t);if("handleId"in r){const s=this.readDirect(r.handleId,"file");return{ref:r,...s}}const n=this.resolveRoot(r.root),i=nr(r.relativePath),o=this.prepareFile(Le(()=>n.hostHandle.file(i)),n.origin,n.handle.mode);return{ref:r,...o}}resolveDirectoryEntry(t){this.assertCanonicalDetail();const r=Cf(t);if("handleId"in r){const s=this.readDirect(r.handleId,"directory");return{ref:r,...s}}const n=this.resolveRoot(r.root),i=r.relativePath==="."?".":nr(r.relativePath),o=this.prepareDirectory(i==="."?n.hostHandle:Le(()=>n.hostHandle.directory(i)),n.origin,n.handle.mode,!0);return{ref:r,...o}}describeFile(t,r){return ms(t),br(t,r)}describeListedEntries(t,r,n){return this.assertCanonicalDetail(),Le(()=>{if(!Array.isArray(r))throw E("FILE_IO_FAILED","Host 返回了无效目录列表");const i=r.length;if(i>n)throw E("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项数量超过限制");const o=[];for(let s=0;s<i;s+=1){if(!Object.prototype.hasOwnProperty.call(r,s))throw E("FILE_IO_FAILED","Host 返回了稀疏目录列表");o.push(this.describeListedEntry(t,r[s]))}return this.assertCanonicalDetail(),o})}describeListedEntry(t,r){return Le(()=>{if(B(r)&&r.kind==="file"){const n=this.prepareFile(r,t.origin,t.handle.mode);return br(n.handle,ls(t.ref,n.handle.name))}if(B(r)&&r.kind==="directory"){const n=this.prepareDirectory(r,t.origin,t.handle.mode);return fs(n.handle,Pf(t.ref,n.handle.name))}throw E("FILE_IO_FAILED","Host 返回了无效目录项")})}deriveFile(t,r){this.assertCanonicalDetail();const n=lr(r),i=this.prepareFile(Le(()=>t.hostHandle.file(n)),t.origin,t.handle.mode);return{ref:ls(t.ref,n),...i}}assertSandboxOrigin(t){if(t.origin!=="sandbox")throw E("FILE_ACCESS_DENIED","外部文件授权不允许删除")}prepareFile(t,r,n){return Le(()=>{ms(t);const i=n??t.mode;return hs(t.mode,i),{handle:Rc(t,i,{allowRemove:r==="sandbox"}),hostHandle:t,origin:r}})}prepareDirectory(t,r,n,i=!1){return Le(()=>{kf(t,i);const o=n??t.mode;return hs(t.mode,o),{handle:Oc(t,o,{allowRemove:r==="sandbox"}),hostHandle:t,origin:r}})}registerMany(t){if(this.assertCanonicalDetail(),this.handles.size+t.length>us)throw E("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const r=new Set,n=t.map(()=>{for(let i=0;i<8;i+=1){const o=Lf();if(!this.handles.has(o)&&!r.has(o))return r.add(o),o}throw E("FILE_IO_FAILED","无法创建文件授权句柄")});return t.forEach((i,o)=>this.handles.set(n[o],i)),n}readDirect(t,r){if(!Mf(t))throw E("FILE_ACCESS_REVOKED","文件授权句柄无效");const n=this.handles.get(t);if(!n)throw E("FILE_ACCESS_REVOKED","文件授权已失效");if(n.handle.kind!==r||n.hostHandle.kind!==r)throw E("FILE_TYPE_MISMATCH","文件句柄类型不匹配");return n}resolveRoot(t){if(this.assertCanonicalDetail(),t.kind==="sandbox"){if(!this.files)throw Te("files.sandbox");return this.prepareDirectory(Le(()=>this.files.sandbox),"sandbox",void 0,!0)}return this.readDirect(t.handleId,"directory")}assertCanonicalDetail(){if(this.disposed)throw E("FILE_ACCESS_REVOKED","文件授权已失效");if(!this.miniProgramDetail?.miniProgramId.trim())throw Te("files")}}function nr(e){if(!so(e))throw E("INVALID_PARAMS","relativePath 不是规范逻辑路径");return e}function lr(e,t="文件名"){const r=nr(e);if(r.includes("/"))throw E("INVALID_PARAMS",`${t} 只能是 basename`);return r}function ls(e,t){return"handleId"in e?{kind:"file",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"file",root:e.root,relativePath:nr(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Pf(e,t){return"handleId"in e?{kind:"directory",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"directory",root:e.root,relativePath:nr(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function br(e,t){return{kind:"file",name:e.name,mode:e.mode,ref:t}}function fs(e,t){return{kind:"directory",name:e.name,mode:e.mode,ref:t}}function hs(e,t){if(t==="readwrite"&&e!=="readwrite")throw E("FILE_ACCESS_DENIED","Host 未授予请求的文件写权限")}function Tf(e){return ao(e)||Nc(),e}function Cf(e){return ja(e)||Nc(),e}function Nc(){throw E("INVALID_PARAMS","文件引用不合法")}function Lf(){const e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw E("FILE_IO_FAILED","当前环境缺少安全随机数能力");const t=e.getRandomValues(new Uint8Array(16));return Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}function Mf(e){return/^[0-9a-f]{32}$/.test(e)}function ms(e){if(!B(e)||e.kind!=="file"||typeof e.name!="string"||e.mode!=="read"&&e.mode!=="readwrite"||typeof e.create!="function"||typeof e.read!="function"||typeof e.write!="function"||typeof e.stat!="function")throw E("FILE_IO_FAILED","Host 返回了无效 File handle");lr(e.name,"Host File name")}function kf(e,t=!1){if(!B(e)||e.kind!=="directory"||typeof e.name!="string"||e.mode!=="read"&&e.mode!=="readwrite"||typeof e.file!="function"||typeof e.directory!="function"||typeof e.create!="function"||typeof e.stat!="function"||typeof e.list!="function")throw E("FILE_IO_FAILED","Host 返回了无效 Directory handle");if(!t&&e.name.length===0)throw E("FILE_IO_FAILED","Host Directory name 不能为空");e.name&&lr(e.name,"Host Directory name")}const ps=1e3,Uf=new Set(["FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_TYPE_MISMATCH"]);function xf(e){const t=r=>lo(e.operationContext,r.signal);return{files:{[Xr]:async(r,n)=>{Jn(n);const i=Xn(e.picker),o=Hf(r),s=await he(()=>i.pickFiles(o,t(n)));return e.registry.registerFiles(s,"external",o.mode,o.multiple?void 0:1)},[Zr]:async(r,n)=>{Jn(n);const i=Xn(e.picker),o=Ff(r),s=await he(()=>i.pickDirectory(o,t(n)));return e.registry.registerDirectory(s,"external",o.mode)},[en]:async(r,n)=>{Jn(n);const i=Xn(e.picker),o=Bf(r).suggestedName,s=t(n);if(!i.saveFile)throw Te("files.saveFile");const a=await he(()=>i.saveFile({suggestedName:o},s));return e.registry.registerFile(a,"external","readwrite")}},file:{[Qt]:async(r,n)=>{const i=ye(r,["recursive","exclusive"]),o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.create(gs(i),t(n)))},[Jt]:async(r,n)=>{const i=ye(r),o=e.registry.resolveFileEntry(i.target);if(e.registry.assertSandboxOrigin(o),pt(o.handle.mode),!o.handle.remove)throw Te(Jt);await he(()=>o.handle.remove(t(n)))},[tn]:async(r,n)=>{const i=ye(r);return ys(async()=>{const o=await e.registry.resolveFile(i.target).stat(t(n));if(!B(o)||o.kind!=="file")throw ws()})},[Xt]:async(r,n)=>{const i=ye(r),o=Es(await he(()=>e.registry.resolveFile(i.target).read(t(n))));try{const s=new TextDecoder("utf-8",{fatal:!0}).decode(o);return s.charCodeAt(0)===65279?s.slice(1):s}catch{throw E("FILE_ENCODING_INVALID","文件不是合法 UTF-8 文本")}},[rn]:async(r,n)=>{const i=ye(r,["content"]);typeof i.content!="string"&&we("content 必须是字符串");const o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.write(new TextEncoder().encode(i.content),t(n)))},[Zt]:async(r,n)=>{const i=ye(r),o=await he(()=>e.registry.resolveFile(i.target).read(t(n)));return Es(o)},[nn]:async(r,n)=>{const i=ye(r,["content"]),o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.write(qf(i.content),t(n)))},[er]:async(r,n)=>{const i=ye(r),o=await he(()=>e.registry.resolveFile(i.target).stat(t(n)));return zf(o)}},directory:{[on]:async(r,n)=>{const i=ye(r,["recursive","exclusive"]),o=e.registry.resolveDirectory(i.target);pt(o.mode),await he(()=>o.create(gs(i),t(n)))},[tr]:async(r,n)=>{const i=ye(r,["recursive"]);if(B(i.target)&&i.target.relativePath===".")throw E("FILE_ACCESS_DENIED","不能删除根目录");const o=e.registry.resolveDirectoryEntry(i.target);if(e.registry.assertSandboxOrigin(o),pt(o.handle.mode),!o.handle.remove)throw Te(tr);await he(()=>o.handle.remove({recursive:i.recursive===void 0?!1:yn(i.recursive,"recursive")},t(n)))},[sn]:async(r,n)=>{const i=ye(r);return ys(async()=>{const o=await e.registry.resolveDirectory(i.target).stat(t(n));if(!B(o)||o.kind!=="directory")throw ws()})},[an]:async(r,n)=>{const i=ye(r,["limit"]),o=Vf(i.limit),s=e.registry.resolveDirectoryEntry(i.target),a=await he(()=>s.handle.list({limit:o},t(n)));return e.registry.describeListedEntries(s,a,o)}}}}function Hf(e){if(e===void 0)return{mode:"read",multiple:!1};B(e)||we("pickFiles 参数必须是对象"),Un(e,["mode","accept","multiple"]);const t=Pc(e.mode,"read"),r=e.multiple===void 0?!1:yn(e.multiple,"multiple");let n;return e.accept!==void 0&&((!Array.isArray(e.accept)||e.accept.some(i=>typeof i!="string"||!/^\.[a-z0-9][a-z0-9._-]*$/i.test(i)))&&we("accept 必须是规范扩展名数组"),n=[...new Set(e.accept)]),{mode:t,multiple:r,...n===void 0?{}:{accept:n}}}function Ff(e){return e===void 0?{mode:"read"}:(B(e)||we("pickDirectory 参数必须是对象"),Un(e,["mode"]),{mode:Pc(e.mode,"read")})}function Bf(e){return B(e)||we("saveFile 参数必须是对象"),Un(e,["suggestedName"]),{suggestedName:lr(e.suggestedName,"suggestedName")}}function ye(e,t=[]){return(!B(e)||!Object.prototype.hasOwnProperty.call(e,"target"))&&we("文件操作参数必须包含 target"),Un(e,["target",...t]),e}function gs(e){return{recursive:e.recursive===void 0?!1:yn(e.recursive,"recursive"),exclusive:e.exclusive===void 0?!1:yn(e.exclusive,"exclusive")}}function Pc(e,t){return e===void 0?t:(e!=="read"&&e!=="readwrite"&&we("mode 必须是 read 或 readwrite"),e)}function yn(e,t){return typeof e!="boolean"&&we(`${t} 必须是布尔值`),e}function Vf(e){if(e===void 0)return ps;if((!Number.isSafeInteger(e)||e<=0)&&we("limit 必须是正整数"),e>ps)throw E("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项限制超过 Host 上限");return e}function Un(e,t){const r=Object.keys(e).filter(n=>!t.includes(n));r.length&&we(`不支持字段: ${r.join(", ")}`)}function pt(e){if(e!=="readwrite")throw E("FILE_ACCESS_DENIED","当前文件授权只允许读取")}function Jn(e){if(!e.trustedUserGesture)throw E("USER_GESTURE_REQUIRED","当前操作需要可信用户手势")}function Xn(e){if(!e)throw Te("files.external");return e}async function ys(e){try{return await e(),!0}catch(t){if(Uf.has(vc(t)??""))return!1;throw go(t)}}async function he(e){try{return await e()}catch(t){throw go(t)}}function qf(e){return e instanceof Uint8Array||we("content 必须是 Uint8Array"),typeof SharedArrayBuffer<"u"&&e.buffer instanceof SharedArrayBuffer&&we("不支持 SharedArrayBuffer-backed Uint8Array"),new Uint8Array(e)}function Es(e){if(!(e instanceof Uint8Array))throw E("FILE_IO_FAILED","Host 返回了无效字节数据");return new Uint8Array(e)}function ws(){return E("FILE_TYPE_MISMATCH","文件句柄类型不匹配")}function zf(e){if(!B(e)||e.kind!=="file"||!Gf(e.size))throw E("FILE_IO_FAILED","Host 返回了无效 FileStat");for(const t of["modifiedAt","createdAt"])if(e[t]!==void 0&&!jf(e[t]))throw E("FILE_IO_FAILED",`Host 返回了无效 ${t}`);return{kind:"file",size:e.size,...e.modifiedAt===void 0?{}:{modifiedAt:e.modifiedAt},...e.createdAt===void 0?{}:{createdAt:e.createdAt}}}function Gf(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function jf(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function we(e){throw E("INVALID_PARAMS",e)}const Ar=4294967296;function $f(e){const t=new Wf;return t.write(e),t.finish()}class Wf{bytes=new Uint8Array(128);view=new DataView(this.bytes.buffer);offset=0;write(t){if(t===null)this.writeUint8(192);else if(typeof t=="boolean")this.writeUint8(t?195:194);else if(typeof t=="number")this.writeNumber(t);else if(typeof t=="string")this.writeString(t);else if(Array.isArray(t))this.writeArray(t);else if(typeof t=="object")this.writeMap(t);else throw new Error("unsupported share extra value")}finish(){return this.bytes.slice(0,this.offset)}writeNumber(t){if(!Number.isSafeInteger(t)){this.writeUint8(203),this.writeFloat64(t);return}if(t>=0){t<128?this.writeUint8(t):t<256?(this.writeUint8(204),this.writeUint8(t)):t<65536?(this.writeUint8(205),this.writeUint16(t)):t<Ar?(this.writeUint8(206),this.writeUint32(t)):(this.writeUint8(207),this.writeUint64(t));return}t>=-32?this.writeUint8(224|t+32):t>=-128?(this.writeUint8(208),this.writeInt8(t)):t>=-32768?(this.writeUint8(209),this.writeInt16(t)):t>=-2147483648?(this.writeUint8(210),this.writeInt32(t)):(this.writeUint8(211),this.writeInt64(t))}writeString(t){const r=Kf(t),n=r.byteLength;if(n<32)this.writeUint8(160+n);else if(n<256)this.writeUint8(217),this.writeUint8(n);else if(n<65536)this.writeUint8(218),this.writeUint16(n);else if(n<Ar)this.writeUint8(219),this.writeUint32(n);else throw new Error("share extra string is too long");this.writeBytes(r)}writeArray(t){const r=t.length;r<16?this.writeUint8(144+r):r<65536?(this.writeUint8(220),this.writeUint16(r)):(this.writeUint8(221),this.writeUint32(r));for(const n of t)this.write(n)}writeMap(t){const r=Object.keys(t),n=r.length;n<16?this.writeUint8(128+n):n<65536?(this.writeUint8(222),this.writeUint16(n)):(this.writeUint8(223),this.writeUint32(n));for(const i of r)this.writeString(i),this.write(t[i])}ensureCapacity(t){const r=this.offset+t;if(r<=this.bytes.byteLength)return;const n=new Uint8Array(Math.max(r,this.bytes.byteLength*2));n.set(this.bytes),this.bytes=n,this.view=new DataView(n.buffer)}writeBytes(t){this.ensureCapacity(t.byteLength),this.bytes.set(t,this.offset),this.offset+=t.byteLength}writeUint8(t){this.ensureCapacity(1),this.view.setUint8(this.offset,t),this.offset+=1}writeInt8(t){this.ensureCapacity(1),this.view.setInt8(this.offset,t),this.offset+=1}writeUint16(t){this.ensureCapacity(2),this.view.setUint16(this.offset,t),this.offset+=2}writeInt16(t){this.ensureCapacity(2),this.view.setInt16(this.offset,t),this.offset+=2}writeUint32(t){this.ensureCapacity(4),this.view.setUint32(this.offset,t),this.offset+=4}writeInt32(t){this.ensureCapacity(4),this.view.setInt32(this.offset,t),this.offset+=4}writeFloat64(t){this.ensureCapacity(8),this.view.setFloat64(this.offset,t),this.offset+=8}writeUint64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,t/Ar),this.view.setUint32(this.offset+4,t),this.offset+=8}writeInt64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,Math.floor(t/Ar)),this.view.setUint32(this.offset+4,t),this.offset+=8}}function Kf(e){const t=new Uint8Array(Yf(e));let r=0,n=0;for(;r<e.length;){let i=e.charCodeAt(r++);if(i>=55296&&i<=56319&&r<e.length){const o=e.charCodeAt(r);o>=56320&&o<=57343&&(r+=1,i=((i&1023)<<10)+(o&1023)+65536)}i<128?t[n++]=i:i<2048?(t[n++]=i>>6&31|192,t[n++]=i&63|128):i<65536?(t[n++]=i>>12&15|224,t[n++]=i>>6&63|128,t[n++]=i&63|128):(t[n++]=i>>18&7|240,t[n++]=i>>12&63|128,t[n++]=i>>6&63|128,t[n++]=i&63|128)}return t}function Yf(e){let t=0,r=0;for(;r<e.length;){let n=e.charCodeAt(r++);if(n<128)t+=1;else if(n<2048)t+=2;else{if(n>=55296&&n<=56319&&r<e.length){const i=e.charCodeAt(r);i>=56320&&i<=57343&&(r+=1,n=((n&1023)<<10)+(i&1023)+65536)}t+=n<65536?3:4}}return t}function Tc(e){Fi(e);const t=$f(e);if(t.byteLength>128)throw new Error("launch extra is too large");return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Fi(e,t=0,r=new WeakSet){if(t>8)throw new Error("extra nesting depth exceeded");if(e===null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){if(Number.isFinite(e))return;throw new Error("extra number must be finite")}if(typeof e!="object")throw new Error("extra value must be JSON-compatible");if(r.has(e))throw new Error("extra value must not contain cycles");if(r.add(e),Array.isArray(e)){if(e.length>64)throw new Error("extra array is too large");for(const o of e)Fi(o,t+1,r);r.delete(e);return}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new Error("extra object must be a plain object");const i=Object.entries(e);if(i.length>64)throw new Error("extra object has too many fields");for(const[o,s]of i){if(o==="__proto__")throw new Error("extra object key is not supported");Fi(s,t+1,r)}r.delete(e)}const Qf=["pc","console","mobile"],Jf=["game","wiki"];function En(e){throw{code:"INVALID_PARAMS",message:e}}function Xf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(e,t){return typeof e!="string"||!e.trim()?En(t):e.trim()}function bs(e,t,r){return typeof e!="string"||!t.includes(e)?En(r):e}function Zf(e){const t={target:"game_detail",appId:je(e.appId,"navigation.openAppPage appId 必须是非空字符串"),gameType:bs(e.gameType,Qf,"navigation.openAppPage gameType 必须是 pc、console 或 mobile")};return e.page!==void 0&&(t.page=bs(e.page,Jf,"navigation.openAppPage page 必须是 game 或 wiki")),e.hSrc!==void 0&&(t.hSrc=je(e.hSrc,"navigation.openAppPage hSrc 必须是非空字符串")),e.skuId!==void 0&&(t.skuId=je(e.skuId,"navigation.openAppPage skuId 必须是非空字符串")),t}function eh(e){return{target:"user_detail",userId:je(e.userId,"navigation.openAppPage userId 必须是非空字符串")}}function th(e){const t={target:"post_detail",linkId:je(e.linkId,"navigation.openAppPage linkId 必须是非空字符串")};return e.rootCommentId!==void 0&&(t.rootCommentId=je(e.rootCommentId,"navigation.openAppPage rootCommentId 必须是非空字符串")),e.commentId!==void 0&&(t.commentId=je(e.commentId,"navigation.openAppPage commentId 必须是非空字符串")),t}function rh(e){const t={target:"mini_program",miniProgramId:je(e.miniProgramId,"navigation.openAppPage miniProgramId 必须是非空字符串")};return e.extra!==void 0&&(t.extra=e.extra),t}function nh(e){return Xf(e)?e.target==="game_detail"?Zf(e):e.target==="user_detail"?eh(e):e.target==="post_detail"?th(e):e.target==="mini_program"?rh(e):En("navigation.openAppPage target 不支持"):En("navigation.openAppPage options 必须是对象")}function ih(e){return{protocolType:"openRouterPath",path:"/game/detail",params:{app_id:e.appId,game_type:e.gameType,...e.page===void 0?{}:{page:e.page},...e.hSrc===void 0?{}:{h_src:e.hSrc},...e.skuId===void 0?{}:{sku_id:e.skuId}}}}function oh(e){return{protocolType:"openRouterPath",path:"/user_home",params:{userid:e.userId}}}function sh(e){return{protocolType:"openRouterPath",path:"/bbs/link",params:{link_id:e.linkId,...e.rootCommentId===void 0?{}:{root_comment_id:e.rootCommentId},...e.commentId===void 0?{}:{comment_id:e.commentId}}}}function ah(e){const t=e;return t.target==="game_detail"?ih(t):t.target==="user_detail"?oh(t):sh(t)}function Cc(e){throw{code:"INVALID_PARAMS",message:e}}function As(e,t){e!==void 0&&(typeof e!="object"||e===null||Array.isArray(e)||Object.keys(e).length)&&Cc(`${t} 不支持参数`)}function ch(e){return{[hn]:async t=>{re(e.operationContext.signal),As(t,"navigation.close"),await X(()=>e.presentation.close(e.operationContext),e.operationContext.signal)},[mn]:async t=>{re(e.operationContext.signal),As(t,"navigation.reload"),await X(()=>e.presentation.reload(e.operationContext),e.operationContext.signal)},[pn]:async t=>{re(e.operationContext.signal);const r=nh(t);if(r.target==="mini_program"){let n;if(r.extra!==void 0)try{n=Tc(r.extra)}catch{Cc("navigation.openAppPage extra 必须是符合限制的 JSON-compatible 数据")}await X(()=>e.presentation.openWindow({miniProgramId:r.miniProgramId,...n===void 0?{}:{extra:n}},e.operationContext),e.operationContext.signal);return}await X(()=>e.presentation.openAppPage(ah(r),e.operationContext),e.operationContext.signal)}}}const dh=new Set(["content-length","content-encoding","transfer-encoding","content-disposition","content-range","content-type"]),uh=new Set(["content-length","content-encoding","content-disposition","content-range","content-type"]),lh=new Set(["range","if-range","a-im"]),fh=new Set(["METHOD_FORBIDDEN","DOWNLOAD_HTTP_STATUS","DOWNLOAD_NETWORK_FAILED","DOWNLOAD_TIMEOUT","DOWNLOAD_CANCELLED","FILE_ACCESS_REVOKED","FILE_ACCESS_DENIED","FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_ALREADY_EXISTS","DIRECTORY_ALREADY_EXISTS","FILE_TYPE_MISMATCH","FILE_TOO_LARGE","FILE_QUOTA_EXCEEDED","FILE_IO_FAILED"]),hh=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i,Ir={initial:0,target:1,open:2,validate:3,transfer:4,committed:5,completed:6};class mh{constructor(t){this.signal=t}phase="initial";transition(t){if(Ir[t]<=Ir[this.phase])throw E("FILE_IO_FAILED","下载状态转换不合法");this.phase=t}throwIfCancelled(){if(Ir[this.phase]<Ir.committed&&this.signal.aborted)throw kc()}normalizeHostError(t,r){return this.throwIfCancelled(),yo(t,r,this.signal)}}async function ph(e,t,r){const n=r.transfer,i=r.fileRegistry;if(!n||!i)throw Te("network.download");const o=lo(r.operationContext,t.signal),s=new mh(o.signal);s.transition("target"),s.throwIfCancelled();let a;try{a=await wh(e,i,o)}catch(g){throw s.normalizeHostError(g,"file")}s.throwIfCancelled();let c;s.transition("open");try{c=await n.network.open(e.request,o)}catch(g){throw s.normalizeHostError(g,"network")}let u=!1;try{s.throwIfCancelled(),s.transition("validate");const g=Ah(c);Ih(c,g);const m=_h(c.status,g);if(e.maxBytes!==void 0&&m.expectedBytes!==void 0&&m.expectedBytes>e.maxBytes)throw E("FILE_TOO_LARGE","下载响应超过 maxBytes");s.throwIfCancelled();const l=bh(e,a,g,i);let p=0;const O=yh(m.expectedBytes,e.maxBytes);ei(t,Zn(0,m));const b={...o,onProgress(P){!Number.isSafeInteger(P)||P<p||O!==void 0&&P>O||(p=P,ei(t,Zn(p,m)))}};s.transition("transfer"),u=!0;let v;try{v=await n.files.writeResource(l.hostHandle,c.body,{mode:l.mode,...e.maxBytes===void 0?{}:{maxBytes:e.maxBytes},...m.expectedBytes===void 0?{}:{expectedBytes:m.expectedBytes}},b)}catch(P){throw s.normalizeHostError(P,"transfer")}s.transition("committed"),p=gh(v,m,p,e.maxBytes),ei(t,Zn(p,m));const A=i.describeFile(l.handle,l.ref);return s.transition("completed"),A}finally{u||Eh(n.network,c.body)}}function gh(e,t,r,n){if(t.expectedBytes!==void 0)return t.expectedBytes;const i=n===void 0?r:Math.min(r,n);try{const o=e?.committedBytes;if(typeof o=="number"&&Number.isSafeInteger(o)&&o>=i&&(n===void 0||o<=n))return o}catch{}return i}function yh(e,t){return e===void 0?t:t===void 0?e:Math.min(e,t)}function Eh(e,t){try{Promise.resolve(e.release(t)).catch(()=>{})}catch{}}async function wh(e,t,r){if(e.targetKind==="file"){const i=t.resolveFileEntry(e.to);return Bi(i.handle.mode),await Ph(i.handle,r),{kind:"file",...i}}const n=t.resolveDirectoryEntry(e.to);return Bi(n.handle.mode),await Th(n.handle,r),{kind:"directory",...n}}function bh(e,t,r,n){if(t.kind==="file")return{ref:t.ref,handle:t.handle,hostHandle:t.hostHandle,mode:"replace-existing"};const i=vh(e,r),o=n.deriveFile(t,i);return Bi(o.handle.mode),{...o,mode:e.overwrite===!0?"upsert":"create-exclusive"}}function Ah(e){if(!e||typeof e!="object"||!Number.isInteger(e.status)||e.status<100||e.status>599||e.statusText!==void 0&&typeof e.statusText!="string"||!e.body||typeof e.body!="object")throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream response");if(!B(e.headers))throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream headers");const t={};for(const[r,n]of Object.entries(e.headers)){if(r!==r.toLowerCase()||!dh.has(r)||!Array.isArray(n)||n.length===0)throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了不安全 stream header");if(n.some(i=>typeof i!="string"||/[\r\n]/.test(i)))throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream header value");t[r]=[...n]}return t}function Ih(e,t){if(e.status<200||e.status>=300||e.status===206||e.status===226)throw E("DOWNLOAD_HTTP_STATUS",`下载请求失败: HTTP ${e.status}`,{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:Nh(t,uh)});if((t["content-range"]?.length??0)>0)throw E("DOWNLOAD_NETWORK_FAILED","下载响应包含 Content-Range")}function _h(e,t){const r=t["content-length"]??[],n=t["transfer-encoding"]??[];if(r.length>0&&n.length>0)throw E("DOWNLOAD_NETWORK_FAILED","下载响应同时包含 Transfer-Encoding 与 Content-Length");if((e===204||e===205)&&r.some(u=>u!=="0"))throw E("DOWNLOAD_NETWORK_FAILED","无内容响应声明了非零 Content-Length");if((e===204||e===205)&&n.length>0)throw E("DOWNLOAD_NETWORK_FAILED","无内容响应不允许 Transfer-Encoding");const i=r.length===1&&/^(?:0|[1-9]\d*)$/.test(r[0])?Number(r[0]):void 0,o=i!==void 0&&Number.isSafeInteger(i)?i:void 0,s=Sh(t["content-encoding"]),a=e===204||e===205?0:n.length===0&&s?o:void 0,c=a!==void 0;return{...a===void 0?{}:{expectedBytes:a},...c?{total:a}:{},lengthComputable:c}}function Sh(e){return!e||e.length===0?!0:e.length===1&&e[0].trim().toLowerCase()==="identity"}function Zn(e,t){return{loaded:e,...t.total===void 0?{}:{total:t.total},lengthComputable:t.lengthComputable}}function ei(e,t){try{e.postProgress(t)}catch{}}function vh(e,t){const r=t["content-disposition"]??[];for(const i of r){const o=Rh(i);if(o&&Cr(o))return o}for(const i of r){const o=Oh(i);if(o&&Cr(o))return o}if(e.suggestedName!==void 0)return Lc(e.suggestedName);const n=Dh(e.url);return n&&Cr(n)?n:"download.bin"}function Rh(e){const t=/(?:^|;)\s*filename\*\s*=\s*([^;]+)/i.exec(e);if(!t)return;const r=t[1].trim().replace(/^"|"$/g,""),n=/^utf-8'[^']*'(.*)$/i.exec(r);if(n)try{return decodeURIComponent(n[1])}catch{return}}function Oh(e){const t=/(?:^|;)\s*filename\s*=\s*"((?:\\.|[^"\\])*)"/i.exec(e)?.[1];return t!==void 0?t.replace(/\\(["\\])/g,"$1"):/(?:^|;)\s*filename\s*=\s*([^;]+)/i.exec(e)?.[1]?.trim()}function Dh(e){const t=e.pathname.split("/").pop();if(t)try{return decodeURIComponent(t)}catch{return}}function Lc(e){try{lr(e,"suggestedName")}catch{throw E("INVALID_PARAMS","suggestedName 不是安全 basename")}if(!Cr(e))throw E("INVALID_PARAMS","suggestedName 不是安全 basename");return e}function Cr(e){return!(!e||e==="."||e===".."||Array.from(e).length>255||/[\\/<>:"|?*\u0000-\u001f\u007f]/.test(e)||/[. ]$/.test(e)||hh.test(e))}function Nh(e,t){return Object.fromEntries(Object.entries(e).filter(([r])=>t.has(r)).map(([r,n])=>[r,n.join(", ")]))}async function Ph(e,t){try{const r=await e.stat(t);if(!r||r.kind!=="file")throw Mc()}catch(r){throw yo(r,"file",t.signal)}}async function Th(e,t){try{const r=await e.stat(t);if(!r||r.kind!=="directory")throw Mc()}catch(r){throw yo(r,"file",t.signal)}}function Bi(e){if(e!=="readwrite")throw E("FILE_ACCESS_DENIED","下载目标只允许读取")}const Ch={METHOD_FORBIDDEN:"当前 Host 未开放下载能力",DOWNLOAD_HTTP_STATUS:"下载请求返回了失败状态",DOWNLOAD_NETWORK_FAILED:"下载网络请求失败",DOWNLOAD_TIMEOUT:"下载网络请求超时",DOWNLOAD_CANCELLED:"下载已取消",FILE_ACCESS_REVOKED:"下载目标授权已失效",FILE_ACCESS_DENIED:"下载目标不允许写入",FILE_NOT_FOUND:"下载目标文件不存在",DIRECTORY_NOT_FOUND:"下载目标目录不存在",FILE_ALREADY_EXISTS:"下载目标文件已存在",DIRECTORY_ALREADY_EXISTS:"下载目标目录已存在",FILE_TYPE_MISMATCH:"下载目标类型不匹配",FILE_TOO_LARGE:"下载响应超过大小限制",FILE_QUOTA_EXCEEDED:"下载目标配额已用尽",FILE_IO_FAILED:"下载文件写入失败"};function yo(e,t,r){if(r.aborted)return kc();const n=Lh(e);if(n&&fh.has(n)){const o=E(n,Ch[n]??"下载失败");return Object.defineProperty(o,"cause",{value:e,enumerable:!1}),o}if(e instanceof Error&&e.name==="AbortError")return t==="network"||t==="transfer"?E("DOWNLOAD_TIMEOUT","下载网络请求超时"):E("FILE_IO_FAILED","下载文件写入失败");const i=t==="network"?E("DOWNLOAD_NETWORK_FAILED","下载网络请求失败"):E("FILE_IO_FAILED","下载文件写入失败");return Object.defineProperty(i,"cause",{value:e,enumerable:!1}),i}function Lh(e){return B(e)&&typeof e.code=="string"?e.code:void 0}function Mc(){return E("FILE_TYPE_MISMATCH","下载目标类型不匹配")}function kc(){return E("DOWNLOAD_CANCELLED","下载已取消")}function Mh(e){if(!e)return;const t=Object.keys(e).find(r=>lh.has(r.trim().toLowerCase()));if(t)throw E("INVALID_PARAMS",`network.download 不允许设置请求头: ${t}`)}const Eo="withCredentials",kh=new Set(["url","method","params","data","headers","timeout",Eo]),Uh=new Set(["url","to","params","headers","timeout","suggestedName","overwrite","maxBytes",Eo]),xh=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),Is=3e4,_s=2*1024*1024,Hh=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,Fh=/[\u0000-\u0008\u000A-\u001F\u007F]/,Bh=/^(?:authorization|authentication-info|proxy-authentication-info|cookie|set-cookie|set-cookie2|pkey|x-pkey|x-access-token|x-auth-token)$/i,Vh="network.request 不支持 multipart/form-data,请使用专用上传能力";function qh(e){const t=zh(e.runtimePermissions),r=rm(e.allowedHttpOrigins);return{[Jr]:async(n,i)=>{const o=jh(n,{permission:t,allowedHttpOrigins:r});return ph(o,i,{transfer:e.transfer,fileRegistry:e.fileRegistry,operationContext:e.operationContext})},[Qr]:async(n,i)=>{const o=lo(e.operationContext,i?.signal);re(o.signal);const s=Gh(n,{permission:t,allowedHttpOrigins:r});let a;try{a=await X(()=>e.network.request(s,o),o.signal)}catch(c){throw om(c)?c:sm(c,"REQUEST_UNSUPPORTED")?$("REQUEST_UNSUPPORTED","当前 Host 不支持该网络请求"):$("REQUEST_FAILED","网络请求失败")}return im(a)}}}function zh(e){const t=Ue(e),r=t.permissions.network;return{enabled:t.valid&&r?.status==="enabled",useOfficialDomain:t.valid&&r?.status==="enabled"&&r.config.useOfficialDomain===!0}}function Gh(e,t){const r=xn(e,"network.request 参数必须是对象"),n=Object.keys(r).filter(c=>!kh.has(c));if(n.length>0)throw $("INVALID_PARAMS",`network.request 不支持字段: ${n.join(", ")}`);xc(r,"network.request");const i=Uc(r,t,"network.request"),o=Wh(r.method),s=r.data;s!==void 0&&Qh(s),Xh(i.headers,s);const a=Zh(i.headers,s,i.official);return{source:"public-sdk",target:{kind:"absolute-url",url:i.url.href},redirectPolicy:"error",route:i.official?"official":"external",...o===void 0?{}:{method:o},...i.params===void 0?{}:{params:i.params},...s===void 0?{}:{data:s},...i.headers===void 0?{}:{headers:i.headers},...a===void 0?{}:{bodyEncoding:a},...i.timeout===void 0?{}:{timeout:i.timeout}}}function jh(e,t){const r=xn(e,"network.download 参数必须是对象"),n=Object.keys(r).filter(c=>!Uh.has(c));if(n.length>0)throw $("INVALID_PARAMS",`network.download 不支持字段: ${n.join(", ")}`);xc(r,"network.download");const i=Uc(r,t,"network.download");if(i.timeout!==void 0&&i.timeout<=0)throw $("INVALID_PARAMS","network.download timeout 必须是有限正数");Mh(i.headers);const o=ao(r.to),s=ja(r.to);if(!o&&!s)throw $("INVALID_PARAMS","network.download to 必须是有效 File/Directory ref");if(o&&(r.suggestedName!==void 0||r.overwrite!==void 0))throw $("INVALID_PARAMS","File 下载目标不接受 suggestedName/overwrite");let a;if(r.suggestedName!==void 0){if(typeof r.suggestedName!="string")throw $("INVALID_PARAMS","suggestedName 必须是字符串");a=Lc(r.suggestedName)}if(r.overwrite!==void 0&&typeof r.overwrite!="boolean")throw $("INVALID_PARAMS","overwrite 必须是布尔值");if(r.maxBytes!==void 0&&(!Number.isSafeInteger(r.maxBytes)||r.maxBytes<=0))throw $("INVALID_PARAMS","maxBytes 必须是正的 safe integer");return{request:{source:"public-sdk",target:{kind:"absolute-url",url:i.url.href},redirectPolicy:"error",route:"download",method:"GET",...i.params===void 0?{}:{params:i.params},...i.headers===void 0?{}:{headers:i.headers},...i.timeout===void 0?{}:{timeout:i.timeout}},url:i.url,to:r.to,targetKind:o?"file":"directory",...a===void 0?{}:{suggestedName:a},...r.overwrite===void 0?{}:{overwrite:r.overwrite},...r.maxBytes===void 0?{}:{maxBytes:r.maxBytes}}}function Uc(e,t,r){const n=$h(e.url,t.allowedHttpOrigins,r),i=qu(n);if(i&&!t.permission.useOfficialDomain)throw $("PERMISSION_DENIED","当前小程序暂不支持访问官方域名");if(Vu(n.pathname,i))throw $("PERMISSION_DENIED",`${r} 不允许访问 Runtime 或账号敏感接口`);return{url:n,official:i,params:e.params===void 0?void 0:{...xn(e.params,`${r} params 必须是对象`)},headers:e.headers===void 0?void 0:Kh(e.headers,r),timeout:Yh(e.timeout,r)}}function $h(e,t,r="network.request"){if(typeof e!="string"||!e.trim())throw $("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`);let n;try{n=new URL(e)}catch{throw $("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw $("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`);if(n.username||n.password)throw $("INVALID_PARAMS",`${r} url 不允许包含用户信息`);if(n.protocol==="http:"&&!t.has(n.origin))throw $("PERMISSION_DENIED",`${r} 生产环境只允许 HTTPS`);return n}function Wh(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw $("INVALID_PARAMS","network.request method 必须是字符串");const t=e.trim().toUpperCase();if(!xh.has(t))throw $("INVALID_PARAMS","network.request method 不合法");return t}function Kh(e,t="network.request"){const r=xn(e,`${t} headers 必须是 Record<string, string>`),n={};for(const[i,o]of Object.entries(r)){const s=i.trim();if(!s||s!==i||!Hh.test(s)||typeof o!="string"||Fh.test(o))throw $("INVALID_PARAMS",`${t} headers 必须是 Record<string, string>`);if(zu(s))throw $("INVALID_PARAMS",`${t} 不允许设置敏感请求头: ${i}`);n[s]=o}return n}function xc(e,t){const r=e[Eo];if(r!==void 0&&typeof r!="boolean")throw $("INVALID_PARAMS",`${t} 旧版凭据字段必须是布尔值`)}function Yh(e,t="network.request"){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw $("INVALID_PARAMS",`${t} timeout 必须是非负数字`);if(t==="network.request"&&e>Is)throw $("INVALID_PARAMS",`${t} timeout 不能超过 ${Is}ms`);return e}}function Qh(e){if(typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData)throw $("INVALID_PARAMS","network.request data 不支持 File、Blob 或 FormData,请使用专用上传能力");if(Jh(e)>_s)throw $("INVALID_PARAMS",`network.request data 不能超过 ${_s} 字节`)}function Jh(e){if(typeof e=="string")return ti(e);if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(typeof URLSearchParams<"u"&&e instanceof URLSearchParams)return ti(e.toString());try{const t=JSON.stringify(e);return t?ti(t):0}catch{throw $("INVALID_PARAMS","network.request data 必须可序列化")}}function Xh(e,t){const r=Hc(e),n=typeof t=="string"&&t.trimStart().startsWith("--")&&/content-disposition\s*:\s*form-data/i.test(t);if(r?.includes("multipart/form-data")||n)throw $("INVALID_PARAMS",Vh)}function Zh(e,t,r){if(t===void 0)return;const n=Hc(e);return n?.includes("application/x-www-form-urlencoded")?"form":n?.includes("application/json")?"json":typeof URLSearchParams<"u"&&t instanceof URLSearchParams||r&&(Array.isArray(t)||tm(t))?"form":em(t)?"json":void 0}function Hc(e){return e?Object.entries(e).find(([r])=>r.trim().toLowerCase()==="content-type")?.[1].toLowerCase():void 0}function em(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="object"&&!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer)}function tm(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function rm(e){const t=new Set;for(const r of e??[])try{const n=new URL(r);n.protocol==="http:"&&!n.username&&!n.password&&n.pathname==="/"&&!n.search&&!n.hash&&nm(n.hostname)&&t.add(n.origin)}catch{}return t}function nm(e){const t=e.toLowerCase();if(t==="[::1]")return!0;const r=t.split(".").map(Number);return r.length!==4||r.some((n,i)=>!/^\d+$/.test(t.split(".")[i])||n<0||n>255)?!1:r[0]===127||r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}function im(e){return Object.keys(e.headers).some(Ss)?{...e,headers:Object.fromEntries(Object.entries(e.headers).filter(([t])=>!Ss(t)))}:e}function Ss(e){const t=e.trim().toLowerCase();return Bh.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function om(e){return e instanceof Error&&e.name==="AbortError"}function sm(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function xn(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw $("INVALID_PARAMS",t);return e}function ti(e){return new TextEncoder().encode(e).length}function $(e,t){return{code:e,message:t}}function am(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function cm(e){if(typeof e=="number")return Number.isSafeInteger(e)&&e>0?String(e):void 0;if(typeof e=="string")return e.trim()||void 0}function dm(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topicIds 必须是数组"],values:[]};const t=[],r=new Set,n=[];for(const i of e){const o=cm(i);o?r.has(o)||(r.add(o),n.push(o)):t.push("post.topicIds 每项必须是正整数或非空字符串")}return{invalidMessages:t,values:n}}function um(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topics 必须是数组"],values:[]};const t=[],r=new Set,n=[];for(const i of e){const o=typeof i=="string"?i.trim():"";!o||o.startsWith("#")||o.endsWith("#")?t.push("post.topics 每项必须是不含首尾 # 的非空字符串"):r.has(o)||(r.add(o),n.push(o))}return{invalidMessages:t,values:n}}function Fc(e,t){if(e==null)return{};if(!am(e))return{invalidMessage:`${t.method} post 必须是对象或 null`};const r=dm(e.topicIds),n=um(e.topics),i=[...r.invalidMessages,...n.invalidMessages];let o=r.values;t.maxTopicIds!==void 0&&o.length>t.maxTopicIds&&(i.push(`${t.method} post.topicIds 最多允许 ${t.maxTopicIds} 项`),o=o.slice(0,t.maxTopicIds));const s=o.length||n.values.length?{...o.length?{topicIds:o}:{},...n.values.length?{topics:n.values}:{}}:void 0;return s||i.push(`${t.method} post 至少需要一个有效的 topicIds 或 topics`),{invalidMessage:i[0],post:s}}function lm(e){try{return new URL(e).protocol==="heybox-mini-dev:"}catch{return!1}}async function fm(e){try{if(lm(e.getCurrentHref()))return!0}catch{}try{return!!await e.isDevRuntime()}catch{return!1}}function ce(e){throw{code:"INVALID_PARAMS",message:e}}function fr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vi(e,t){return typeof e!="string"||!e.trim()?ce(t):e}function hm(e,t){const r=Vi(e,t);try{const n=new URL(r);return n.protocol!=="http:"&&n.protocol!=="https:"?ce(t):r}catch{return ce(t)}}function mm(e){return e==="wechatSession"||e==="wechatTimeline"||e==="qqFriend"||e==="qzone"||e==="weibo"}function Bc(e,t,r){const n=e.identity.get(),i=n?.miniProgramId.trim();if(!i)return ce(`${t} 缺少有效的小程序分享地址`);try{const o=new URL(e.environment.getCurrentHref()),s=new URL("/tools/common_share",o);s.searchParams.set("user_miniprogram_id",i);const a=n?.version?.trim();a&&s.searchParams.set("miniprogram_version",a);const c=o.searchParams.get("h_src");return c?.trim()&&s.searchParams.set("h_src",c),r!==void 0&&s.searchParams.set("extra",r),s.href}catch{return ce(`${t} 缺少有效的小程序分享地址`)}}function pm(e,t){if(!fr(e))return ce("share.showShareMenu 参数必须是对象");if(Object.prototype.hasOwnProperty.call(e,"url"))return ce("share.showShareMenu 不支持自定义 url");const r=e.channel;if(r!==void 0&&!mm(r))return ce("share.showShareMenu channel 不合法");const n=Vc(e.extra,"share.showShareMenu");return{title:Vi(e.title,"share.showShareMenu title 必须是非空字符串"),description:Vi(e.desc,"share.showShareMenu desc 必须是非空字符串"),url:Bc(t,"share.showShareMenu",n),...e.imageUrl===void 0?{}:{imageUrl:hm(e.imageUrl,"share.showShareMenu imageUrl 必须是 HTTP(S) URL")},...r===void 0?{}:{channel:r}}}function Vc(e,t){if(e!==void 0)try{return Tc(e)}catch{return ce(`${t} extra 必须是符合限制的 JSON-compatible 数据`)}}async function qc(e,t){return e.invalidMessage&&await X(()=>fm(t.environment),t.operationContext.signal)?ce(e.invalidMessage):e.post}function vs(e,t){const r=Number(e);return Number.isFinite(r)&&r>0?r:t}function gm(e){const t=e.getViewportMetrics();return{left:0,top:0,width:vs(t.windowWidth,0),height:vs(t.windowHeight,0)}}function qi(e,t){const r=Number(e);return!Number.isFinite(r)||r<0?ce(t):r}function Rs(e,t){const r=Number(e);return!Number.isFinite(r)||r<=0?ce(t):r}function ym(e){return fr(e)?{left:qi(e.left,"share.screenshot rect.left 必须是非负数字"),top:qi(e.top,"share.screenshot rect.top 必须是非负数字"),width:Rs(e.width,"share.screenshot rect.width 必须是正数"),height:Rs(e.height,"share.screenshot rect.height 必须是正数")}:ce("share.screenshot rect 必须是对象")}function Em(e,t){if(e!=null&&!fr(e))return ce("share.screenshot 参数必须是对象");const r=e??{};return r.saveToAlbum!==void 0&&typeof r.saveToAlbum!="boolean"?ce("share.screenshot saveToAlbum 必须是布尔值"):{rect:r.rect===void 0?gm(t):ym(r.rect),...r.delay===void 0?{}:{delay:qi(r.delay,"share.screenshot delay 必须是非负数字")},...r.saveToAlbum===void 0?{}:{saveToAlbum:r.saveToAlbum}}}async function wm(e,t){re(t.operationContext.signal);const r=pm(e,t);let n=Fc(e.post,{maxTopicIds:1,method:"share.showShareMenu"});r.channel&&n.post&&(n={invalidMessage:n.invalidMessage||"share.showShareMenu channel 与 post 不能同时使用"});const i=await qc(n,t);return X(()=>t.presentation.showShareMenu({...r,post:i},t.operationContext),t.operationContext.signal)}async function bm(e,t){if(re(t.operationContext.signal),e!==void 0&&!fr(e))return ce("share.copyLink 参数必须是对象");const r=Vc(e?.extra,"share.copyLink"),n=Bc(t,"share.copyLink",r);return await X(()=>t.presentation.setClipboard({text:n},t.operationContext),t.operationContext.signal),n}async function Am(e,t){re(t.operationContext.signal);const r=Em(e,t.presentation),n=Fc(fr(e)?e.post:void 0,{method:"share.screenshot"}),i=await qc(n,t),o=t.identity.get()?.miniProgramId.trim()||void 0,s=Im();let a=!1,c;try{a=!0,await X(()=>t.presentation.setScreenshotChromeHidden(!0,t.operationContext),t.operationContext.signal),c={status:"fulfilled",value:await X(()=>t.presentation.captureAndShare({...r,post:i,...o?{sourceMiniProgramId:o}:{}},t.operationContext),t.operationContext.signal)}}catch(g){c={status:"rejected",error:g}}const u=a?await _m(t.presentation,s,t.operationContext.signal):void 0;if(c.status==="rejected")throw c.error;if(u)throw u;return c.value}function Im(){return{lifecycle:"cleanup",signal:new AbortController().signal}}async function _m(e,t,r){let n;try{n=Promise.resolve(e.setScreenshotChromeHidden(!1,t))}catch{return}try{await X(()=>n,r,{invokeWhenAborted:!0})}catch(i){if(r.aborted)return i}}function Sm(e){return{[jr]:(t,r)=>bm(t,e),[$r]:(t,r)=>wm(t,e),[Wr]:(t,r)=>Am(t,e)}}const vm=128,Rm=/^[A-Za-z0-9_-]+$/;function Om(e){const t=Dm(e),r={[Kt]:async n=>{re(e.operationContext.signal);const i=Os(n,Kt,e.storageLimits?.maxKeyLength),o=await X(()=>e.storage.getRaw(ri(t(),i),e.operationContext),e.operationContext.signal);return{data:Ds(o)}},[Yt]:async n=>{re(e.operationContext.signal);const i=zc(n,"storage.setStorage 参数必须是对象"),o=Os(i,Yt,e.storageLimits?.maxKeyLength),s=Nm(i.data,e.storageLimits?.maxValueBytes);await X(()=>e.storage.setRaw(ri(t(),o),s,e.operationContext),e.operationContext.signal)}};return e.storageDiagnostics?{handlers:r,diagnostics:{getSnapshot:async()=>{re(e.operationContext.signal);let n;try{n=t()}catch{throw $e("STORAGE_DIAGNOSTICS_NOT_READY","Storage diagnostics 只能在 canonical identity 绑定后使用")}const i=ri(n,"");return(await X(()=>e.storageDiagnostics.listRaw(e.operationContext),e.operationContext.signal)).filter(s=>s.key.startsWith(i)).map(s=>{const a=s.value;return{area:s.area,key:s.key.slice(i.length),value:Ds(a),serializedValue:a,bytes:Gc(a)}}).sort((s,a)=>s.key.localeCompare(a.key))}}}:{handlers:r}}function Dm(e){let t=!1,r;return()=>{if(!t){const n=e.identity.get()?.miniProgramId.trim();if(n)r=`id_${Ns(n)}`;else{const i=e.anonymousStorageScope?.trim();i&&(r=`anon_${Ns(i)}`)}t=r!==void 0}if(!r)throw $e("INVALID_STATE","storage scope 只能在 canonical identity 绑定后使用");return r}}function ri(e,t){return`hb_miniprogram_${e}_${t}`}function Os(e,t,r=vm){const i=zc(e,`${t} 参数必须是对象`).key;if(typeof i!="string")throw $e("INVALID_PARAMS",`${t} key 必须是字符串`);if(!i||i.length>r||!Rm.test(i))throw $e("INVALID_PARAMS",`storage key 仅支持 1-${r} 位字母、数字、下划线和连字符`);return i}function Nm(e,t){let r;try{r=JSON.stringify(e)}catch{throw $e("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化")}if(typeof r!="string")throw $e("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化");if(t!==void 0&&Gc(r)>t)throw $e("STORAGE_QUOTA_EXCEEDED",`storage.setStorage data 超出 ${t} 字节限制`);return r}function Ds(e){if(!(e===void 0||e===""))try{return JSON.parse(e)}catch{return e}}function zc(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw $e("INVALID_PARAMS",t);return e}function Ns(e){return/^[A-Za-z0-9_-]{1,64}$/.test(e)?e:Pm(e)}function Pm(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function Gc(e){return new TextEncoder().encode(e).length}function $e(e,t){return{code:e,message:t}}const Ps=120;function Ve(e){throw{code:"INVALID_PARAMS",message:e}}function wo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function jc(e,t,r){const n=Object.keys(e).filter(i=>!t.includes(i));n.length&&Ve(`${r} 不支持字段: ${n.join(", ")}`)}function Tm(e){if(!wo(e))return Ve("ui.showToast 参数必须是对象");if(jc(e,["message","status"],"ui.showToast"),typeof e.message!="string"||!e.message.trim())return Ve("ui.showToast message 必须是非空字符串");const t=e.message.trim();if(t.length>Ps)return Ve(`ui.showToast message 不能超过 ${Ps} 字符`);const r=e.status;if(r!==void 0&&r!=="success"&&r!=="error")return Ve("ui.showToast status 必须是 success 或 error");const n=r;return{message:t,...n===void 0?{}:{status:n}}}function Cm(e){return e===void 0?{dismissible:!1}:wo(e)?(jc(e,["dismissible"],"ui.showLoading"),e.dismissible!==void 0&&typeof e.dismissible!="boolean"?Ve("ui.showLoading dismissible 必须是布尔值"):{dismissible:e.dismissible??!1}):Ve("ui.showLoading 参数必须是对象")}function Lm(e){e!==void 0&&(!wo(e)||Object.keys(e).length)&&Ve("ui.hideLoading 不支持参数")}function Mm(e){return{[cn]:async t=>{re(e.operationContext.signal),await X(()=>e.presentation.showToast(Tm(t),e.operationContext),e.operationContext.signal)},[dn]:async t=>{re(e.operationContext.signal),await X(()=>e.presentation.showLoading(Cm(t),e.operationContext),e.operationContext.signal)},[un]:async t=>{re(e.operationContext.signal),Lm(t),await X(()=>e.presentation.hideLoading(e.operationContext),e.operationContext.signal)}}}const km={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.account.home_v2.get",method:"GET",path:"/account/home_v2/",parse(e){return ge(e,"当前用户首页资料接口响应异常")}},Um=3e4;function xm(e,t,r={}){const n=r.ttlMs??Um,i=r.requestPolicyEnabled!==!1,o=r.requestGate?{capability:"user",gate:r.requestGate}:void 0;let s=0,a,c;async function u(){let m;try{m=await kn(e,km,void 0,{...t,credentials:"heybox-session",...o?{gate:o}:{}})}catch(l){throw t.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):l instanceof oe?E("REQUEST_UNSUPPORTED",l.message):l instanceof ur?E("INVALID_RESPONSE","user home_v2 响应不合法"):l instanceof vt?E("REQUEST_FAILED","user home_v2 请求失败"):l instanceof St?i&&(l.status===403||l.status===429)?E("RATE_LIMITED","user home_v2 请求已被网关限流,请稍后重试",{status:l.status,...l.retryAfterMs===void 0?{}:{retryAfterMs:l.retryAfterMs}}):E("REQUEST_FAILED",l.message):Fm(l)?l:E("REQUEST_FAILED","user home_v2 请求失败")}return Hm(m,"user home_v2")}function g(m){const l=Date.now();if(a?.userId===m&&a.expiresAt>l)return Promise.resolve(a.value);if(c?.userId===m&&c.generation===s)return c.promise;const p=s,O=u().then(b=>(s===p&&(a={userId:m,value:b,expiresAt:Date.now()+n}),b)).finally(()=>{c?.promise===O&&(c=void 0)});return c={userId:m,generation:p,promise:O},O}return{get:g,clear(){s+=1,a=void 0,c=void 0}}}function Hm(e,t){if(!B(e))throw E("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw E(n,r)}if(!B(e.result))throw E("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Fm(e){return B(e)&&typeof e.code=="string"&&typeof e.message=="string"}const Bm={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.game.steam.get_game_list.get",method:"GET",path:"/game/steam/get_game_list",query(e){return{userid:e.userId,...e.steamId?{steam_id:e.steamId}:{},limit:e.limit,offset:e.offset,sort:e.sort,need_hidden:e.includeHidden,...e.personalInformationOpen===void 0?{}:{personal_infomation_open:e.personalInformationOpen},...e.q?{q:e.q}:{}}},parse(e,t){return ge(e,"Steam 游戏库接口响应异常")}};function Vm(e,t=Mi){const r=ju({version:"1",validate:zm}),n={ttlMs:Number.isFinite(t)?Math.max(0,Math.floor(t)):Mi,memoryMaxEntries:64,diskMaxEntries:256,diskMaxBytes:10*1024*1024,maxEntryBytes:512*1024};return{persistent:e.register({namespace:"user.steam-game-list",codec:r,policy:{...n,persistence:"memory-and-disk"}}),unresolved:e.register({namespace:"user.steam-game-list.unresolved",codec:r,policy:{...n,persistence:"memory"}})}}function Ts(e,t){if(e.steamId)return e.steamId;for(const r of["steamid","steam_id","steamId"]){const n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}function qm(e){const{query:t}=e;return JSON.stringify([e.miniProgramId,e.userId,e.effectiveSteamId??null,e.personalInformationOpen??null,t.limit,t.offset,t.sort,t.q??"",t.includeHidden])}function zm(e){if(!B(e)||!Array.isArray(e.gameList)||typeof e.hasMore!="boolean"||!Number.isInteger(e.nextOffset)||Number(e.nextOffset)<0||(ni(e,"total"),e.isMe!==void 0&&typeof e.isMe!="boolean"))throw Xe();for(const t of e.gameList){if(!B(t)||!zi(t.appid)||!zi(t.steamAppid)||typeof t.name!="string"||!t.name.trim())throw Xe();for(const r of["image","icon"])Cs(t,r);for(const r of["playtimeForever","playtime2Weeks"])ni(t,r);if(t.tags!==void 0&&(!Array.isArray(t.tags)||t.tags.some(r=>typeof r!="string"||!r.trim())))throw Xe();if(t.price!==void 0){if(!B(t.price))throw Xe();for(const r of["current","initial","deadlineDate"])Cs(t.price,r);for(const r of["discount","lowestPrice","deadlineTimestamp"])ni(t.price,r)}}return e}function zi(e){return typeof e=="number"&&Number.isFinite(e)}function ni(e,t){if(e[t]!==void 0&&!zi(e[t]))throw Xe()}function Cs(e,t){if(e[t]!==void 0&&typeof e[t]!="string")throw Xe()}function Xe(){return E("INVALID_RESPONSE","Steam 游戏库缓存数据不合法")}const $c=20,Gm=100,jm=128,Wc=0,Kc="weeks",$m=100,Wm=new Set(["weeks","all","achieved"]);function Km(){return{nickname:"",avatar:""}}function Ym(e){const t=xm(e.network,e.operationContext,{requestGate:e.requestGate,requestPolicyEnabled:e.requestPolicyEnabled}),r=e.requestPolicyEnabled!==!1,n=e.cacheManager??ec(),i=Vm(n,r?e.steamGameListTtlMs:0);let o;const s=new Map;let a=Promise.resolve();function c(d,h){const f=JSON.stringify([d,h]);return(!o||o.key!==f)&&(o={key:f,scope:n.createScope(h,n.createScope(d))}),o.scope}function u(){const d=o;o=void 0,d&&n.invalidateScope(d.scope).catch(()=>{}),s.clear()}const g=lc({ttlMs:Math.max(0,Math.floor(e.profileTtlMs??dc))}),m=e.requestGate?{capability:"user",gate:e.requestGate}:void 0;let l=0,p=!1;const O=e.account.onChange(()=>{l+=1,t.clear(),g.invalidate(),u()}),b=e.authorization.onEvent((d,h)=>{d==="user_info_authorization_change"&&Object.values(h).some(f=>f==="denied")&&(l+=1,t.clear(),g.invalidate(),u(),a=a.then(async()=>{if(p)return;const f=await e.account.getCurrentUserId(e.operationContext);typeof f=="string"&&f.trim()&&await n.invalidateScope(c(A(),f.trim()))}).catch(()=>{}))});function v(){if(p||e.operationContext.signal.aborted)throw E("RUNTIME_DESTROYED","小程序 Runtime 已终止")}function A(){const d=e.identity.get()?.miniProgramId?.trim();if(!d)throw E("INVALID_STATE","用户能力缺少 canonical 小程序身份");return d}async function P(){v(),await a,v();let d;try{d=await e.account.getCurrentUserId(e.operationContext)}catch(h){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):Ms(h)?h:E("REQUEST_FAILED","读取小黑盒账号失败")}return typeof d=="string"&&d.trim()?d.trim():void 0}async function _(d,h){const f=await P();if(l!==h||f!==d)throw E("AUTHORIZATION_CONTEXT_CHANGED","用户请求期间账号上下文已变化,请重新操作")}async function L(d,h,f=e.operationContext.signal){try{return await kn(e.network,d,h,{...e.operationContext,signal:f,credentials:"heybox-session",...m?{gate:m}:{}})}catch(y){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):y instanceof oe?E("REQUEST_UNSUPPORTED",y.message):y instanceof ur?E("INVALID_RESPONSE","用户接口响应不合法"):y instanceof vt?E("REQUEST_FAILED","用户请求失败"):y instanceof St?r&&(y.status===403||y.status===429)?E("RATE_LIMITED","用户请求已被网关限流,请稍后重试",{status:y.status,...y.retryAfterMs===void 0?{}:{retryAfterMs:y.retryAfterMs}}):E("REQUEST_FAILED",y.message):Ms(y)?y:E("REQUEST_FAILED","用户请求失败")}}async function F(){A();const d=l,h=await P();if(!h)return{isHeyboxAppLoggedIn:!1,authorization:null,userInfo:null};const[f,y]=await Promise.all([e.authorization.getOrCreateLocalIdentity(h),N(h).catch(()=>Km())]);return await _(h,d),{isHeyboxAppLoggedIn:!0,authorization:e.authorization.getAuthorization(),userInfo:{app_user_id:f.appUserId,profile:y,...f.steamId?{steam_id:f.steamId}:{}}}}function N(d){return g.read(d,()=>L(uc,void 0).then(h=>{const f=Ls(h,"账号基础信息");if(f.display_username!==void 0&&typeof f.display_username!="string")throw E("INVALID_RESPONSE","账号基础信息 nickname 不合法");if(f.display_avatar!==void 0&&typeof f.display_avatar!="string")throw E("INVALID_RESPONSE","账号基础信息 avatar 不合法");return{nickname:f.display_username??"",avatar:f.display_avatar??""}}))}async function I(d){const h=Qm(d),f=A(),y=l,w=await P();if(!w)return u(),{isLogin:!1,isBound:!1,data:null};const S=await t.get(w);await _(w,y);const T=bo(S.steam_id_info);if(Object.keys(T).length===0)return await n.invalidateScope(c(f,w)).catch(()=>{}),await _(w,y),s.delete(JSON.stringify([f,w])),{isLogin:!0,isBound:!1,data:null};const V=JSON.stringify([f,w]),C=c(f,w),D=Ts({...h,steamId:void 0},T),M=Yc(T.personal_infomation_open??T.personal_information_open),R=JSON.stringify([D??null,M??null]),U=s.get(V);U&&U.identity!==R&&(await n.invalidateScope(C).catch(()=>{}),await _(w,y));const x={identity:R,scope:n.createScope(R,C)};s.set(V,x);const H=Ts(h,T),q=H?i.persistent:i.unresolved,z=n.createScope(H??"unresolved",x.scope),G=async()=>{if(await _(w,y),A()!==f||s.get(V)?.identity!==R)throw E("AUTHORIZATION_CONTEXT_CHANGED","Steam 游戏库请求期间绑定上下文已变化")},ee=await q.read({scope:z,key:qm({miniProgramId:f,userId:w,effectiveSteamId:H,personalInformationOpen:M,query:h}),signal:e.operationContext.signal,load:async Z=>{const J=await L(Bm,{userId:w,...h,personalInformationOpen:M},Z);return await G(),tp(Ls(J,"Steam 游戏库"),h)}}).catch(async Z=>{throw await G(),Z});return await G(),{isLogin:!0,isBound:!0,data:ee}}return{getInfo:F,getSteamGameList:I,async invalidateSteamGameListCache(){const d=A(),h=l,f=await P();if(!f)return;const y=c(d,f);await Promise.all([i.persistent.invalidateScope(y),i.unresolved.invalidateScope(y)]),t.clear(),s.delete(JSON.stringify([d,f])),await _(f,h)},dispose(){p||(p=!0,l+=1,O(),b(),t.clear(),g.dispose(),i.persistent.dispose(),i.unresolved.dispose(),e.cacheManager||n.dispose())}}}function Qm(e){if(e==null)return{limit:$c,offset:Wc,sort:Kc,includeHidden:!1};if(!B(e))throw qe("user.getSteamGameList 参数必须是对象");const t=Object.keys(e).find(n=>!["steamId","limit","offset","sort","q","includeHidden"].includes(n));if(t)throw qe(`user.getSteamGameList 不支持字段: ${t}`);const r={limit:Jm(e.limit),offset:Xm(e.offset),sort:Zm(e.sort),includeHidden:ep(e.includeHidden)};if(e.steamId!==void 0){if(typeof e.steamId!="string"||!e.steamId.trim()||e.steamId.trim().length>jm)throw qe("user.getSteamGameList steamId 必须是非空字符串");r.steamId=e.steamId.trim()}if(e.q!==void 0){if(typeof e.q!="string")throw qe("user.getSteamGameList q 必须是字符串");const n=e.q.trim();n&&(r.q=n.slice(0,$m))}return r}function Jm(e){if(e===void 0)return $c;if(!Number.isInteger(e)||Number(e)<1)throw qe("user.getSteamGameList limit 必须是正整数");return Math.min(Number(e),Gm)}function Xm(e){if(e===void 0)return Wc;if(!Number.isInteger(e)||Number(e)<0)throw qe("user.getSteamGameList offset 必须是非负整数");return Number(e)}function Zm(e){if(e===void 0)return Kc;if(typeof e!="string"||!Wm.has(e))throw qe("user.getSteamGameList sort 不支持");return e}function ep(e){if(e===void 0)return!1;if(typeof e!="boolean")throw qe("user.getSteamGameList includeHidden 必须是 boolean");return e}function tp(e,t){if(!Array.isArray(e.game_list))throw E("INVALID_RESPONSE","Steam 游戏库 game_list 必须是数组");const r=e.game_list.map(rp).filter(a=>a!==void 0),n=wn(e.total),i=t.offset+r.length,o={gameList:r,hasMore:r.length>=t.limit,nextOffset:i};n!==void 0&&(o.total=n,o.hasMore=i<n);const s=Yc(e.is_me);return s!==void 0&&(o.isMe=s),o}function rp(e){const t=bo(e),r=wn(t.appid),n=wn(t.steam_appid)??r,i=Ao(t.name);if(r===void 0||n===void 0||!i)return;const o={appid:r,steamAppid:n,name:i};qt(o,"image",t.image),qt(o,"icon",t.appicon??t.icon),zt(o,"playtimeForever",t.playtime_forever),zt(o,"playtime2Weeks",t.playtime_2weeks);const s=ip(t.external_tags??t.tags);s.length&&(o.tags=s);const a=np(t.price);return a&&(o.price=a),o}function np(e){const t=bo(e),r={};return qt(r,"current",t.current),qt(r,"initial",t.initial),zt(r,"discount",t.discount),zt(r,"lowestPrice",t.lowest_price),qt(r,"deadlineDate",t.deadline_date),zt(r,"deadlineTimestamp",t.deadline_timestamp),Object.keys(r).length?r:void 0}function Ls(e,t){if(!B(e))throw E("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw E(n,r)}if(!B(e.result))throw E("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function bo(e){return B(e)?e:{}}function Ao(e){return typeof e=="string"?e.trim():typeof e=="number"||typeof e=="boolean"?String(e):""}function ip(e){return Array.isArray(e)?e.map(Ao).filter(Boolean):[]}function wn(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()&&Number.isFinite(Number(e)))return Number(e)}function Yc(e){if(e===!0||e===1||e==="1")return!0;if(e===!1||e===0||e==="0")return!1}function qt(e,t,r){const n=Ao(r);n&&Object.assign(e,{[t]:n})}function zt(e,t,r){const n=wn(r);n!==void 0&&Object.assign(e,{[t]:n})}function qe(e){return E("INVALID_PARAMS",e)}function Ms(e){return B(e)&&typeof e.code=="string"&&typeof e.message=="string"}function op(e){const t=e.userDataMode??wl(e.runtimePermissions,e.steamAccount===!0);return{[qr]:async r=>(ks(r,"user.getInfo"),jo(t,"user.getInfo"),e.user.getInfo()),[zr]:async(r,n)=>{ks(r,"user.revokeAuthorization"),await e.authorization.revoke(n.trustedUserGesture)},[Gr]:async r=>(jo(t,"user.getSteamGameList"),e.user.getSteamGameList(r))}}function ks(e,t){if(e!==void 0)throw E("INVALID_PARAMS",`${t} 不接收入参`)}const sp="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJJY29uIj4KPHBhdGggaWQ9IlVuaW9uIiBkPSJNNS4wMzMzOCAxLjI5Mjg5QzUuNDIzOSAwLjkwMjM2OSA2LjA1NzI0IDAuOTAyMzY5IDYuNDQ3NzYgMS4yOTI4OUM2LjgzODI3IDEuNjgzNDIgNi44MzgyOCAyLjMxNjc2IDYuNDQ3NzYgMi43MDcyN0w1LjIzODQ2IDMuOTE2NThIMTEuNjY2N0MxNS40NDA1IDMuOTE2NzEgMTguNTAwMSA2Ljk3NjIgMTguNTAwMSAxMC43NTAxQzE4LjUgMTQuNTIzOCAxNS40NDA0IDE3LjU4MzQgMTEuNjY2NyAxNy41ODM1SDMuMzMzMzVDMi43ODExMiAxNy41ODM1IDIuMzMzMjcgMTcuMTM1NiAyLjMzMzE5IDE2LjU4MzRDMi4zMzMxOSAxNi4wMzExIDIuNzgxMDcgMTUuNTgzMiAzLjMzMzM1IDE1LjU4MzJIMTEuNjY2N0MxNC4zMzU5IDE1LjU4MzEgMTYuNDk5NyAxMy40MTkzIDE2LjQ5OTggMTAuNzUwMUMxNi40OTk4IDguMDgwNzYgMTQuMzM1OSA1LjkxNzAzIDExLjY2NjcgNS45MTY5SDQuNTkwNjdMNi40NDc3NiA3Ljc3NDhDNi44MzgyMSA4LjE2NTMzIDYuODM4MjYgOC43OTg2OCA2LjQ0Nzc2IDkuMTg5MThDNi4wNTcyNCA5LjU3OTQ1IDUuNDIzODMgOS41Nzk1NiA1LjAzMzM4IDkuMTg5MThMMS43OTI4MyA1Ljk0NzgyQzEuNDAyMzEgNS41NTczIDEuNDAyMzEgNC45MjM5NiAxLjc5MjgzIDQuNTMzNDRMNS4wMzMzOCAxLjI5Mjg5WiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8L3N2Zz4K",ap="data-hb-sdk-fullscreen-exit",cp=3e3,dp=2e3,Us="var(--white-70a,rgba(255,255,255,.7))",xs="0 0 var(--space-8,8px) var(--white-20a,rgba(255,255,255,.2))";function up(e){if(typeof document>"u"||!document.body)return;const t=document.createElement("button");t.type="button",t.setAttribute(ap,""),t.setAttribute("aria-label","退出全屏"),t.setAttribute("aria-expanded","true");const r=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;t.style.cssText=["position:fixed","right:0","top:50%","z-index:2147483647","box-sizing:border-box","width:48px","height:44px","padding:5px 0",`border:1px solid ${Us}`,`box-shadow:${xs}`,"border-radius:var(--radius-m-token,5px)","display:flex","flex-direction:column","align-items:center","justify-content:center","gap:3px","background:var(--general-color-text-2,#64696e)","color:var(--white-100a,#fff)",'font:400 var(--font-size-9,9px)/var(--line-height-12,12px) "PingFang SC",sans-serif',"cursor:pointer","touch-action:manipulation","opacity:1","transform:translateY(-50%)",r?"transition:none":"transition:width var(--token-transition-arrow,220ms cubic-bezier(.2,.8,.2,1))"].join(";");const n=document.createElement("img");n.src=sp,n.alt="",n.draggable=!1,n.style.cssText="display:block;width:16px;height:16px;flex-shrink:0;";const i=document.createElement("span");i.textContent="退出全屏",i.style.cssText="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;",t.append(n,i);let o=!0,s=!1,a=!1,c,u;function g(){return window.innerWidth>window.innerHeight?"var(--space-12,12px)":"var(--space-8,8px)"}function m(){o||(t.style.width=g())}function l(){u?.cancel(),u=void 0}function p(v=dp){clearTimeout(c),c=setTimeout(()=>{l(),o=!1,t.style.width=g(),t.style.opacity="0.5",t.style.borderColor="var(--white-40a,rgba(255,255,255,.4))",t.style.boxShadow="none",n.style.visibility="hidden",i.style.display="none",t.setAttribute("aria-label","展开退出全屏按钮"),t.setAttribute("aria-expanded","false")},v)}function O(){l(),o=!0,t.style.width="48px",t.style.opacity="1",t.style.borderColor=Us,t.style.boxShadow=xs,n.style.visibility="",i.style.display="",t.setAttribute("aria-label","退出全屏"),t.setAttribute("aria-expanded","true"),p()}async function b(){if(!(s||a)){if(!o){O();return}a=!0,clearTimeout(c),l();try{await e()}catch{}finally{a=!1,s||O()}}}return t.addEventListener("click",b),window.addEventListener("resize",m),document.body.append(t),!r&&t.animate&&(u=t.animate([{transform:"translate(48px,-50%)",opacity:0,offset:0},{transform:"translate(0,-50%)",opacity:1,offset:.2},{transform:"translate(-6px,-50%)",offset:.4},{transform:"translate(0,-50%)",offset:.55},{transform:"translate(-6px,-50%)",offset:.75},{transform:"translate(0,-50%)",offset:1}],{duration:900,easing:"ease-in-out"})),p(cp),{dispose(){s=!0,clearTimeout(c),l(),t.removeEventListener("click",b),window.removeEventListener("resize",m),t.remove()}}}const Qc=1e4;function lp(e){const t=new AbortController;let r;const n=()=>{r??={code:"REQUEST_CANCELLED",message:"方向设置已取消"},t.abort()};e.addEventListener("abort",n,{once:!0}),e.aborted&&n();const i=setTimeout(()=>{r??={code:"ORIENTATION_TIMEOUT",message:"方向切换超时"},t.abort()},Qc);return{signal:t.signal,async run(o){try{return await X(o,t.signal)}catch(s){throw r??s}},dispose(){clearTimeout(i),e.removeEventListener("abort",n)}}}function Jc(e){if(typeof e!="object"||e===null||Array.isArray(e))throw{code:"INVALID_PARAMS",message:"viewport.setDisplay 参数必须是对象"};const{orientation:t,fullscreen:r}=e;if(t!==void 0&&t!=="portrait"&&t!=="landscape")throw{code:"INVALID_PARAMS",message:"viewport.setDisplay orientation 必须是 portrait 或 landscape"};if(r!==void 0&&typeof r!="boolean")throw{code:"INVALID_PARAMS",message:"viewport.setDisplay fullscreen 必须是布尔值"};if(t===void 0&&r===void 0)throw{code:"INVALID_PARAMS",message:"viewport.setDisplay 至少设置 orientation 或 fullscreen"};return{orientation:t,fullscreen:r}}function ii(e,t){return e.mode===t.mode&&e.hideCapsule===t.hideCapsule}function _r(){return{code:"REQUEST_CANCELLED",message:"方向设置已取消"}}function fp(e){let t,r,n={mode:"portrait",hideCapsule:!1},i={mode:"portrait",hideCapsule:!1},o;function s(){o?.dispose(),o=void 0}function a(l){if(!l.hideCapsule){s();return}o??=up(()=>m.apply({orientation:"portrait",fullscreen:!1},void 0,"user"))}e.operationContext.signal.addEventListener("abort",s,{once:!0});function c(l,p){if(t===l){if(t=void 0,clearTimeout(l.timer),e.operationContext.signal.removeEventListener("abort",u),"error"in p)l.controller.abort();else if(r={options:l.options,result:p.result},n=l.options,a(l.options),e.onApplied?.(l.options),p.result.supported&&!ii(i,l.options)){i={...l.options};try{e.onDisplayChange?.({orientation:i.mode,fullscreen:i.hideCapsule,source:l.source})}catch{}}for(const O of l.subscribers)O.dispose(),"error"in p?O.reject(p.error):O.resolve(p.result);l.subscribers.clear()}}function u(){t&&c(t,{error:_r()})}function g(l,p){return new Promise((O,b)=>{const v=()=>{l.subscribers.delete(A),A.dispose(),b(_r()),l.subscribers.size===0&&c(l,{error:_r()})},A={resolve:O,reject:b,dispose:()=>p?.removeEventListener("abort",v)};l.subscribers.add(A),p?.addEventListener("abort",v,{once:!0}),p?.aborted&&v()})}const m={async apply(l,p,O="api"){if(re(e.operationContext.signal),p?.aborted)throw _r();const b=Jc(l),v=t?.options??n,A={mode:b.orientation??v.mode,hideCapsule:b.fullscreen??v.hideCapsule};A.mode==="landscape"&&(A.hideCapsule=!0);const P=e.presentation.applyOrientation;if(!P)throw{code:"METHOD_FORBIDDEN",message:"当前宿主暂不支持方向控制"};if(t&&ii(t.options,A))return g(t,p);if(t&&c(t,{error:{code:"ORIENTATION_SUPERSEDED",message:"方向设置已被后续设置替换"}}),r&&ii(r.options,A))return r.result;r=void 0;const _={options:A,source:O,controller:new AbortController,subscribers:new Set};t=_;const L=g(_,p);return e.operationContext.signal.addEventListener("abort",u,{once:!0}),p||(_.timer=setTimeout(()=>{c(_,{error:{code:"ORIENTATION_TIMEOUT",message:"方向切换超时"}})},Qc)),X(()=>P.call(e.presentation,A,{...e.operationContext,signal:_.controller.signal}),_.controller.signal).then(F=>c(_,{result:F??{supported:!0}}),F=>c(_,{error:F})),L},dispose(){e.operationContext.signal.removeEventListener("abort",s),s()}};return m}function Hs(e){throw{code:"INVALID_PARAMS",message:e}}function Mt(e,t){const r=Number(e);return Number.isFinite(r)&&r>0?r:t}function Xc(e,t){const r=Number(e);return Number.isFinite(r)&&r>=0?r:t}function Sr(e,t,r){return Math.min(Xc(e,t),r)}async function hp(e){try{return Xc(await e.getNavigationBarHeight(),0)}catch{return 0}}function mp(e,t,r,n){const i=Sr(e.safeArea?.left,0,t),o=Math.max(i,Sr(e.safeArea?.right,t,t)),s=Sr(e.safeArea?.top,n,r),a=Math.max(s,Sr(e.safeArea?.bottom,r,r));return{left:i,right:o,top:s,bottom:a,width:o-i,height:a-s}}async function Fs(e){const t=e.getViewportMetrics(),r=Mt(t.windowWidth,0),n=Mt(t.windowHeight,0),i=await hp(e);return{pixelRatio:Mt(t.pixelRatio,1),screenWidth:Mt(t.screenWidth,r),screenHeight:Mt(t.screenHeight,n),windowWidth:r,windowHeight:n,statusBarHeight:i,safeArea:mp(t,r,n,i),screenTop:i}}function pp(e){const t=new AbortController,r={...e,operationContext:{...e.operationContext,signal:t.signal}};let n=!1,i=0,o,s;const a=()=>{if(n||r.operationContext.signal.aborted||!r.onViewportChange)return;const m=++i;Fs(r.presentation).then(l=>{if(n||r.operationContext.signal.aborted||m!==i)return;const p=JSON.stringify(l);p!==o&&(o=p,r.onViewportChange?.(l))}).catch(()=>{})},c=fp({...r,onApplied:a}),u=()=>{n||(n=!0,e.operationContext.signal.removeEventListener("abort",u),t.abort(),c.dispose(),s?.())};return e.operationContext.signal.aborted?u():(s=r.presentation.onViewportChange?.(a),e.operationContext.signal.addEventListener("abort",u,{once:!0})),{handlers:{[ot]:async(m,l)=>c.apply(m,l?.signal),[Kr]:async()=>(re(r.operationContext.signal),Fs(r.presentation)),[Yr]:async m=>{if(re(r.operationContext.signal),typeof m!="object"||m===null||Array.isArray(m))return Hs("viewport.setNavigationBarStyle 参数必须是对象");const l=m.foregroundStyle;if(l!=="light"&&l!=="dark")return Hs("viewport.setNavigationBarStyle foregroundStyle 必须是 light 或 dark");await X(()=>r.presentation.setNavigationBarStyle(l,e.operationContext),r.operationContext.signal)}},applyOrientation:(m,l)=>c.apply({orientation:m.mode,fullscreen:m.hideCapsule},l),notifyChange:()=>{o=void 0,a()},dispose:u}}const gp=new Map(Ge.map(e=>[e.method,e]));function vr(e,t,r){return{code:e,message:t,...r===void 0?{}:{data:r}}}function yp(e){const t=Ue(e);return r=>{if(r.requirement.kind==="none")return{allowed:!0};for(const n of r.requirement.permissions){const i=t.valid?t.permissions[n]:void 0;if(!i)return{allowed:!1,code:"PERMISSION_NOT_DECLARED",message:`小程序未声明权限: ${n}`,data:{permission:n,method:r.method}};if(i.status!=="enabled")return{allowed:!1,code:"PERMISSION_DENIED",message:`小程序权限未启用: ${n}`,data:{permission:n,method:r.method}}}return{allowed:!0}}}function Ep(e,t,r,n){let i;try{i=Promise.resolve(e(t,r))}catch(o){return n.aborted?Promise.resolve({status:"dropped"}):Promise.reject(o)}return n.aborted?(i.catch(()=>{}),Promise.resolve({status:"dropped"})):new Promise((o,s)=>{let a=!1;const c=g=>{a||(a=!0,n.removeEventListener("abort",u),g())},u=()=>c(()=>o({status:"dropped"}));n.addEventListener("abort",u,{once:!0}),i.then(g=>c(()=>o({status:"handled",value:g})),g=>c(()=>s(g)))})}function wp(e){const t=yp(e.runtimePermissions),r=Ue(e.runtimePermissions);let n=0,i=0,o=0;return{async dispatch(s,a,c){const u=e.now??bp,g=e.onTrace?u():0,m=e.onTrace?`cap_${++n}`:"",l=s===ot?++i:void 0;let p;try{if(e.terminalSignal.aborted)throw vr("RUNTIME_DESTROYED","小程序 Runtime 已终止");bu(s,e.effectiveCapabilities);const O=gp.get(s);if(!O)throw new Error(`Capability method ${s} 缺少 protocol metadata`);const b=t(O),v=!b.allowed&&r.valid&&r.permissions.companion?.status==="enabled"&&e.allowsCompanionAttachmentAccess?.(s,a)===!0;if(!b.allowed&&!v)throw vr(b.code,b.message,b.data);const A=e.handlers[s];if(!A)throw new Error(`Capability method ${s} 缺少 handler`);l!==void 0&&(p=lp(c.signal));const P=p?{...c,signal:p.signal}:c,_=async()=>{for(const F of e.policies??[]){const N=await F.evaluate({method:s,payload:a,capability:O});if(e.terminalSignal.aborted||p?.signal.aborted)throw qs();if(!N.allowed)throw vr(N.code,N.message,N.data)}if(e.terminalSignal.aborted||p?.signal.aborted)throw qs();if(l!==void 0){if(Jc(a),l<o)throw vr("ORIENTATION_SUPERSEDED","方向设置已被后续设置替换");o=l}return A(a,P)},L=await Ep(()=>p?p.run(_):_(),void 0,c,e.terminalSignal);return Bs(e.onTrace,Vs(m,s,a,g,L),u),L}catch(O){throw Bs(e.onTrace,Vs(m,s,a,g,{status:"error",error:O}),u),O}finally{p?.dispose()}}}}function bp(){return typeof performance>"u"?Date.now():performance.now()}function Bs(e,t,r){if(!e)return;const n=r();try{e({...t,timestamp:n,durationMs:Math.max(0,Number.isFinite(n-t.startedAt)?n-t.startedAt:0)})}catch{}}function Vs(e,t,r,n,i){const o=i.status==="handled"?"success":i.status;return{callId:e,method:t,startedAt:n,outcome:o,...i.status==="error"?{errorCode:Ap(i.error)}:{},...Ip(t,r,i)}}function Ap(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:void 0}function Ip(e,t,r){if(e!=="network.request"||typeof t!="object"||t===null||!("url"in t)||typeof t.url!="string")return{};try{const n=new URL(t.url);if(n.protocol!=="http:"&&n.protocol!=="https:"||n.username||n.password)return{};const o=("method"in t&&typeof t.method=="string"?t.method:"GET").trim().toUpperCase();if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(o))return{};const s=r.status==="handled"&&Zc(r.value)&&typeof r.value.status=="number"?r.value.status:void 0;return{network:{method:o,origin:n.origin,pathname:n.pathname,...s===void 0?{}:{responseStatus:s}}}}catch{return{}}}function Zc(e){return typeof e=="object"&&e!==null}function qs(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function _p(e){const t={signal:e.terminalSignal,...e.miniProgramDetail===void 0?{}:{miniProgramDetail:e.miniProgramDetail}},r=sl(e.requestPolicy);let n;if(e.files)try{n=Qu(e.files,t)}catch{}const i=ec({store:n}),o=e.onRequestPolicyReport??(r.debugReport?Sp:void 0),s=r.enabled?rl({...r.gateOptions,...o?{onReport:o}:{}}):void 0,a=new Nf(e.files,e.miniProgramDetail),c=xf({registry:a,picker:e.picker,operationContext:t}),u=Cl({account:e.account,network:e.network,identity:e.identity,operationContext:t,authPresentation:e.authPresentation,miniProgramPresentation:e.miniProgramPresentation,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode,authorizationContext:e.authorizationContext,identityTtlMs:r.identityTtlMs,requestGate:s,requestPolicyEnabled:r.enabled});let g,m,l,p=()=>{},O=()=>{};try{g=pp({operationContext:t,presentation:e.hostPresentation,onDisplayChange:N=>e.eventSink.postEvent("display_change",N),onViewportChange:N=>e.eventSink.postEvent("viewport_change",N)}),m=Ym({account:e.account,network:e.network,identity:e.identity,operationContext:t,authorization:u,profileTtlMs:r.profileTtlMs,steamGameListTtlMs:r.steamGameListTtlMs,cacheManager:i,requestGate:s,requestPolicyEnabled:r.enabled}),p=u.onEvent((N,I)=>e.eventSink.postEvent(N,I)),O=e.hostCompanion?.onSessionEvent?.(N=>{const I=_f(N);!e.terminalSignal.aborted&&I&&e.eventSink.postEvent(I.type,I.payload)})??(()=>{}),l=cf({account:e.account,identity:e.identity,network:e.network,operationContext:t,requestGate:s,requestPolicyEnabled:r.enabled});const b=Om({storage:e.storage,storageDiagnostics:e.storageDiagnostics,identity:e.identity,operationContext:t,anonymousStorageScope:e.anonymousStorageScope,storageLimits:e.storageLimits}),v=[{name:"auth",handlers:Vl({authorization:u})},{name:"user",handlers:op({user:m,authorization:u,runtimePermissions:e.runtimePermissions,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode})},{name:"share",handlers:Sm({environment:e.environment,identity:e.identity,operationContext:t,presentation:e.hostPresentation})},{name:"viewport",handlers:g.handlers},{name:"storage",handlers:b.handlers},{name:"network",handlers:qh({network:e.network,transfer:e.transfer,fileRegistry:a,operationContext:t,runtimePermissions:e.runtimePermissions,allowedHttpOrigins:e.allowedHttpOrigins})},{name:"files",handlers:c.files},{name:"file",handlers:c.file},{name:"directory",handlers:c.directory},{name:"ui",handlers:Mm({operationContext:t,presentation:e.hostPresentation})},{name:"device",handlers:Rf({operationContext:t,presentation:e.hostPresentation})},{name:"navigation",handlers:ch({operationContext:t,presentation:e.hostPresentation})},{name:"cloud",handlers:l.handlers},{name:"companion",handlers:Ef({companion:e.hostCompanion,companionPresentation:e.companionPresentation,miniProgramPresentation:e.miniProgramPresentation,operationContext:t,fileRegistry:a})}],A=vp(v);let P=!1;const _=()=>{P||(P=!0,e.terminalSignal.removeEventListener("abort",_),g?.dispose(),l?.dispose(),p(),O(),m?.dispose(),i.dispose(),u.dispose(),s?.dispose(),a.dispose())};e.terminalSignal.aborted?_():e.terminalSignal.addEventListener("abort",_,{once:!0});const L=new Set(["file.readText","file.readBytes","file.stat"]);return{modules:v,handlers:A,allowsCompanionAttachmentAccess:(N,I)=>L.has(N)&&Zc(I)&&a.isCompanionAttachmentRef(I.target),applyOrientation:g.applyOrientation,notifyViewportChange:g.notifyChange,...b.diagnostics?{storageDiagnostics:b.diagnostics}:{},dispose:_}}catch(b){throw g?.dispose(),l?.dispose(),p(),O(),m?.dispose(),i.dispose(),u.dispose(),s?.dispose(),a.dispose(),b}}function Sp(e){try{console.warn("[hb-sdk-runtime] request-policy",e)}catch{}}function vp(e){const t=new Map(Ge.map(i=>[i.method,i.module])),r=new Map;for(const i of e)for(const[o,s]of Object.entries(i.handlers)){const a=o,c=t.get(a);if(!c)throw new Error(`Capability Module ${i.name} 注册了未知 method: ${a}`);if(c!==i.name)throw new Error(`Capability method ${a} 应由 ${c} 拥有,不能注册到 ${i.name}`);if(r.has(a))throw new Error(`Capability method ${a} 存在重复 owner`);if(typeof s!="function")throw new Error(`Capability method ${a} 缺少 handler`);r.set(a,s)}const n=Ge.map(i=>i.method).filter(i=>!r.has(i));if(n.length>0)throw new Error(`Capability registry 缺少 method: ${n.join(", ")}`);if(r.size!==Ge.length)throw new Error(`Capability registry method 数量不合法: ${r.size}`);return Object.freeze(Object.fromEntries(r))}const Rp="heybox-mini-dev:";function zs(e){try{return Op(new URL(e))}catch{return!1}}function Op(e){return e.protocol===Rp}function Dp(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"||Np(e)}function Np(e){const t=e.split(".");if(t.length!==4)return!1;const r=t.map(n=>/^\d+$/.test(n)?Number(n):Number.NaN);return r.some(n=>!Number.isInteger(n)||n<0||n>255)?!1:r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}const Pp=new Set(["android","ios","ohos","windows","macos","linux","unknown"]);function Tp(e,t){const r=[],n=Cp(e.environmentInfo,r),i=Lr(n?.appVersion,"host.appVersion",r),o=Mp(n?.operatingSystem,r);return{info:Object.freeze({runtime:Object.freeze({mode:Lp(e.sdkVersionPolicy?.releaseChannel,r)}),host:Object.freeze({appVersion:i}),miniProgram:Object.freeze({id:Lr(t.miniProgramId),version:Lr(t.miniProgramVersion)}),operatingSystem:Object.freeze(o)}),invalidFields:Object.freeze(r)}}function Cp(e,t){if(e!=null){if(ed(e))return e;t.push("environmentInfo")}}function Lp(e,t){return e==="public"?"production":e==="preview"||e==="development"?e:(e!=null&&t.push("runtime.mode"),"unknown")}function Mp(e,t){if(e==null)return{name:"unknown",version:null};if(!ed(e))return t.push("operatingSystem"),{name:"unknown",version:null};const r=Pp.has(e.name)?e.name:"unknown";return r==="unknown"&&e.name!==void 0&&e.name!==null&&e.name!=="unknown"&&t.push("operatingSystem.name"),{name:r,version:Lr(e.version,"operatingSystem.version",t)}}function Lr(e,t,r){return e==null?null:typeof e=="string"&&e.trim()?e.trim():(t&&r&&r.push(t),null)}function ed(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const kp=1,td="allow-scripts allow-same-origin",Up="",xp="no-referrer";function Hp(e=td){return!e.split(/\s+/).includes("allow-same-origin")}function Gs(){return window.crypto?.randomUUID?window.crypto.randomUUID():`${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}const Fp=new Set(["javascript:","data:","blob:","file:"]),js="xiaoheihe.cn";function Bp(e,t=window.location.href,r={}){const n=e.trim();if(!n)throw new Error("缺少 mini_url 参数");let i;try{i=new URL(n)}catch{throw new Error("小程序链接必须是绝对 URL")}if(Fp.has(i.protocol)||!["http:","https:"].includes(i.protocol))throw new Error("不支持的小程序链接协议");if(!jp(i,t,r))throw new Error("小程序链接必须属于 https://*.xiaoheihe.cn 或本地调试地址");return i.toString()}function Vp(e,t){const r=new URL(e);return r.searchParams.set(Jd,t),r.toString()}function qp(e,t,r){try{const n=new URL(e),i=new URL(t);if(n.origin!==i.origin)return!1;const o=zp(r)??Gp(n.pathname);return i.pathname.startsWith(o)}catch{return!1}}function zp(e){if(!e)return;const t=new URL(e,"https://mini-program.invalid").pathname;return t.endsWith("/")?t:`${t}/`}function Gp(e){const t=/^(\/u\/[^/]+\/[^/]+\/)/.exec(e)?.[1];if(t)return t;const r=e.lastIndexOf("/");return r>=0?e.slice(0,r+1):"/"}function $s(e){const t=new URL(e);return Io(t)?"loopback":_o(t)?"lan":"production"}function jp(e,t,r){return $p(e)||Io(e)||_o(e)&&Kp(t,r)}function $p(e){return e.protocol==="https:"&&Jp(e.hostname)}function Io(e){return e.protocol==="http:"&&Wp(e.hostname)}function Wp(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"}function _o(e){return e.protocol==="http:"&&Yp(e.hostname)}function Kp(e,t){if(t.allowPrivateNetwork)return!0;try{const r=new URL(e);return Io(r)||_o(r)}catch{return!1}}function Yp(e){const t=Qp(e);return t?t[0]===10||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168:!1}function Qp(e){const t=e.split(".");if(t.length!==4)return;const r=t.map(n=>{if(!/^\d+$/.test(n))return;const i=Number(n);return Number.isInteger(i)&&i>=0&&i<=255?i:void 0});return r.every(n=>n!==void 0)?r:void 0}function Jp(e){return e===js||e.endsWith(`.${js}`)}const Xp=new Set(["base-uri","child-src","connect-src","default-src","font-src","form-action","frame-src","img-src","manifest-src","media-src","object-src","prefetch-src","script-src","script-src-attr","script-src-elem","style-src","style-src-attr","style-src-elem","worker-src"]),Zp=new Set(["url","inline","eval","unknown"]),eg=/^\/(?:\:segment(?:\/\:segment)*)?$/,tg=/^[a-f0-9]{64}$/,rg=255,ng=160,ig=256;function og(e,t){const r=e;if(!r||typeof r.sdkVersion!="string"||r.sdkVersion!==t||typeof r.effectiveDirective!="string"||!Xp.has(r.effectiveDirective)||typeof r.violatedDirective!="string"||r.violatedDirective.length>ig||r.violatedDirective.split(/\s/,1)[0]!==r.effectiveDirective||!["enforce","report"].includes(r.disposition??"")||typeof r.blockedResourceType!="string"||!Zp.has(r.blockedResourceType)||typeof r.timestamp!="number"||!Number.isFinite(r.timestamp)||r.timestamp<0)return;const n=sg(r.blockedOrigin);if(r.blockedOrigin!==void 0&&!n)return;const i=r.redactedPathname;if(i!==void 0&&(typeof i!="string"||i.length>ng||!eg.test(i)))return;const o=r.sanitizedPathnameHash;if(!(o!==void 0&&(typeof o!="string"||!tg.test(o)||i===void 0)))return{effectiveDirective:r.effectiveDirective,violatedDirective:r.effectiveDirective,blockedResourceType:r.blockedResourceType,origin:n,sanitizedPathname:i,sanitizedPathnameHash:o,sdkVersion:r.sdkVersion,timestamp:r.timestamp}}function sg(e){if(e!==void 0&&!(typeof e!="string"||e.length>rg))try{const t=new URL(e);return["http:","https:"].includes(t.protocol)&&t.origin===e?t.origin:void 0}catch{return}}const ag=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function cg(e){if(!e?.minimumSdkVersion)throw K("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不可用");const t=et(e.minimumSdkVersion),r=e.sdkVersion?et(e.sdkVersion):void 0;if(!t)throw K("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不合法");if(e.sdkVersion&&!r)throw K("SDK_VERSION_INVALID","小程序 SDK 版本不合法");const n=et("0.6.0");if(!r){if(Mr(t,n)<0)return{heartbeatEnabled:!1,sdkVersion:void 0};throw K("SDK_VERSION_INVALID","小程序 SDK 版本缺失")}if((e.releaseChannel??"public")==="public"&&r.prerelease.length>0)throw K("SDK_VERSION_INVALID","正式小程序不能使用预发布 SDK");if(Mr(r,t)<0)throw K("SDK_VERSION_TOO_LOW","小程序 SDK 版本低于平台最低要求");return{heartbeatEnabled:Mr(r,et("0.6.0-0"))>=0,sdkVersion:e.sdkVersion}}function dg(e,t){if(typeof t!="string"||!et(t))throw K("SDK_VERSION_INVALID","SDK handshake 版本不合法");if(t!==e)throw K("SDK_VERSION_MISMATCH","SDK handshake 版本与 Version record 不一致")}function ug(e,t){const r=et(e),n=et(t);if(!(!r||!n))return Mr(r,n)}function et(e){const t=ag.exec(e);if(t)return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]?.split(".").map(r=>/^\d+$/.test(r)?Number(r):r)??[]}}function Mr(e,t){for(const n of["major","minor","patch"])if(e[n]!==t[n])return e[n]<t[n]?-1:1;if(e.prerelease.length===0||t.prerelease.length===0)return e.prerelease.length===t.prerelease.length?0:e.prerelease.length===0?1:-1;const r=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<r;n+=1){const i=e.prerelease[n],o=t.prerelease[n];if(i===void 0||o===void 0)return i===o?0:i===void 0?-1:1;if(i!==o)return typeof i=="number"&&typeof o=="string"?-1:typeof i=="string"&&typeof o=="number"?1:i<o?-1:1}return 0}const Hn=["android","ios","ohos","windows","macos","linux"],lg="0.9.0",fg=Object.freeze(["android","ios","ohos","windows","macos"]),rd="该小程序暂不支持当前平台",hg="PLATFORM_UNSUPPORTED";function mg(e){return typeof e=="string"&&Hn.includes(e)}function pg(e){if(typeof e!="string")return;const t=e.trim().toLowerCase().replace(/[\s_-]/g,"");if(t==="android")return"android";if(t==="ios")return"ios";if(t==="ohos"||t==="harmony"||t==="harmonyos")return"ohos";if(t==="windows"||t==="win32"||t==="win64")return"windows";if(t==="mac"||t==="macos"||t==="darwin")return"macos";if(t==="linux")return"linux"}function gg(e){const t=e.manifest;if(!Ag(t))return{status:"invalid",reason:"manifest_not_object"};if(!Object.prototype.hasOwnProperty.call(t,"platforms")){const n=Ks(e.sdkVersion)??Ks(t.sdkVersion);return wg(n)?{status:"invalid",reason:"platforms_missing_after_hard_cutover"}:Eg()}const r=nd(t.platforms);return"reason"in r?{status:"invalid",reason:r.reason}:{status:"resolved",declaredPlatforms:r.platforms,effectivePlatforms:r.platforms,platformsDeclared:!0,policy:"explicit"}}function yg(e){const t=pg(e.operatingSystemName);if(!t)return Et("host_operating_system_unknown");const r=e.platformAccess;if(!r)return Et("platform_access_missing",{platform:t});if(r.source==="compatibility-window")return{status:"allowed",platform:t,effectivePlatforms:Hn,platformsDeclared:!1,policy:"legacy_mobile_default",compatibility:r.reason};if(r.source==="manifest"){const s=gg({manifest:r.manifest,...r.sdkVersion===void 0?{}:{sdkVersion:r.sdkVersion}});return s.status==="invalid"?Et("platform_declaration_invalid",{invalidReason:s.reason,platform:t}):Ws(t,s)}if(r.effectivePlatforms===void 0)return Et("platform_declaration_invalid",{invalidReason:"effective_platforms_missing",platform:t});const n=nd(r.effectivePlatforms);if("reason"in n)return Et("platform_declaration_invalid",{invalidReason:n.reason,platform:t});const i=typeof r.platformsDeclared=="boolean"?r.platformsDeclared:!0,o=bg(r.platformPolicy)?r.platformPolicy:i?"explicit":"legacy_mobile_default";return Ws(t,{declaredPlatforms:i?n.platforms:[],effectivePlatforms:n.platforms,platformsDeclared:i,policy:o})}function Ws(e,t){return t.effectivePlatforms.includes(e)?{status:"allowed",platform:e,effectivePlatforms:t.effectivePlatforms,platformsDeclared:t.platformsDeclared,policy:t.policy}:Et("platform_not_supported",{effectivePlatforms:t.effectivePlatforms,platform:e})}function Et(e,t={}){return{status:"denied",reason:e,message:rd,...t}}function Eg(){return{status:"resolved",declaredPlatforms:[],effectivePlatforms:fg,platformsDeclared:!1,policy:"legacy_mobile_default"}}function nd(e){if(!Array.isArray(e))return{reason:"platforms_not_array"};if(e.length===0)return{reason:"platforms_empty"};const t=new Set;for(const r of e){if(!mg(r))return{reason:"platform_unknown_value"};if(t.has(r))return{reason:"platform_duplicate_value"};t.add(r)}return{platforms:Object.freeze(Hn.filter(r=>t.has(r)))}}function wg(e){if(typeof e!="string"||!e.trim())return!1;const t=ug(e.trim(),lg);return t!==void 0&&t>=0}function Ks(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function bg(e){return e==="explicit"||e==="legacy_mobile_default"}function Ag(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Ig=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function _g(e,t,r){const n=Date.now();try{const i=new URL(t);return{type:"security_violation",errorCode:e,timestamp:n,sdkVersion:r,origin:i.origin,sanitizedPathname:Sg(i.pathname),sanitizedPathnameHash:vg(i.pathname)}}catch{return{type:"security_violation",errorCode:e,timestamp:n,sdkVersion:r}}}function Sg(e){return(e==="/"?e:e.replace(/\/+$/,"")).split("/").map(r=>r?":segment":"").join("/")}function vg(e){const t=new TextEncoder().encode(e),r=Math.ceil((t.length+9)/64)*64,n=new Uint8Array(r);n.set(t),n[t.length]=128,new DataView(n.buffer).setUint32(r-4,t.length*8,!1);const i=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),o=new Uint32Array(64),s=new DataView(n.buffer);for(let a=0;a<r;a+=64){for(let v=0;v<16;v+=1)o[v]=s.getUint32(a+v*4,!1);for(let v=16;v<64;v+=1){const A=o[v-15],P=o[v-2],_=ve(A,7)^ve(A,18)^A>>>3,L=ve(P,17)^ve(P,19)^P>>>10;o[v]=o[v-16]+_+o[v-7]+L>>>0}let[c,u,g,m,l,p,O,b]=i;for(let v=0;v<64;v+=1){const A=b+(ve(l,6)^ve(l,11)^ve(l,25))+(l&p^~l&O)+Ig[v]+o[v]>>>0,P=(ve(c,2)^ve(c,13)^ve(c,22))+(c&u^c&g^u&g);b=O,O=p,p=l,l=m+A>>>0,m=g,g=u,u=c,c=A+P>>>0}[c,u,g,m,l,p,O,b].forEach((v,A)=>{i[A]=i[A]+v>>>0})}return Array.from(i,a=>a.toString(16).padStart(8,"0")).join("")}function ve(e,t){return e>>>t|e<<32-t}const Rg=1e4,oi=2e3,Og=2,Dg="open-with-native-credential-policy",id="安全提示",od="即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。";class Ng{nonce=Gs();runtimeId=Gs();terminalController=new AbortController;options;handshakeTimeout;ports;primitiveAvailability;effectiveCapabilities;identity;identityRef;iframe;iframeErrorListener;iframeLoadListener;bridgeServer=null;miniProgramSrc="";launchUrl="";startPromise=null;readyContext=null;resolveReady;rejectReady;terminalError;status="idle";stateValue="idle";handshakeTimeoutTimer;lifecycleDisposer;capabilityGraph;iframeTornDown=!1;runtimeResourcesDisposed=!1;sdkVersionDecision;platformGateDecision;compatibilityWithoutSdk=!1;heartbeatTimer;pendingProbeId;consecutiveHeartbeatMisses=0;probeSequence=0;hostVisible=!0;awaitingControlledDocumentLoad=!1;unexpectedDocumentLoadTimer;documentRevalidationPending=!1;documentRevalidationTimer;documentRevalidationGeneration=0;preparedHistoryTraversalGeneration;iframeVisibilityBeforeRevalidation;iframeHiddenForRevalidation=!1;devRuntimePromise;runtimePermissions=void 0;runtimeFeatures;miniProgramPresentation;miniProgramDetail;locationBasePath;anonymousStorageScope;allowedHttpOrigins;environmentInfo;constructor(t){this.options=t,this.iframe=t.iframe;const r=Za(t.ports,{callerCapabilities:t.capabilities,hostCapabilities:t.hostCapabilities});this.ports=r.ports,this.primitiveAvailability=r.primitiveAvailability,this.effectiveCapabilities=r.effectiveCapabilities,this.identity={},this.identityRef={get:()=>{const n=this.identity.miniProgramId?.trim();if(n)return{miniProgramId:n,...this.identity.miniProgramVersion?{version:this.identity.miniProgramVersion}:{}}}},this.handshakeTimeout=t.handshakeTimeout??Rg,this.iframeErrorListener=n=>{this.onIframeError(n)},this.iframeLoadListener=()=>{if(this.awaitingControlledDocumentLoad){if(this.awaitingControlledDocumentLoad=!1,this.stateValue==="ready"&&this.bridgeServer?.protocolVersion===2&&this.sdkVersionDecision?.heartbeatEnabled){this.beginDocumentRevalidation();return}this.compatibilityWithoutSdk&&!this.readyContext&&this.completeCompatibilityLaunch();return}this.stateValue==="ready"&&(this.bridgeServer?.protocolVersion===2&&this.sdkVersionDecision?.heartbeatEnabled?this.beginDocumentRevalidation():this.scheduleUnexpectedDocumentLoadFailure())},this.iframe.addEventListener("error",this.iframeErrorListener),this.iframe.addEventListener("load",this.iframeLoadListener)}get state(){return this.stateValue}getMiniProgramDetail(){return this.miniProgramDetail}get diagnostics(){const t=this.capabilityGraph?.storageDiagnostics;return t?{storage:t}:{}}start(){return this.stateValue==="destroyed"?Promise.reject(this.terminalError??K("RUNTIME_DESTROYED","小程序运行时已销毁")):this.stateValue==="failed"?Promise.reject(this.terminalError??K("STARTUP_ERROR","小程序运行时启动失败")):this.readyContext?Promise.resolve(this.readyContext):this.startPromise?this.startPromise:(Hg(),this.startPromise=this.createReadyPromise(),this.setState("starting"),this.setStatus("starting"),this.launch().catch(t=>{this.failRuntime(t)}),this.startPromise)}destroy(){if(this.stateValue==="destroyed")return;const t=K("RUNTIME_DESTROYED","小程序运行时已销毁");this.terminalError=t,this.terminalController.abort(t),this.disposeRuntimeResources(),this.setStatus("destroyed"),this.setState("destroyed"),this.teardownIframe(),this.rejectReady?.(t)}show(){const t=this.hostVisible;this.hostVisible=!0,this.emitLifecycleEvent("show"),this.capabilityGraph?.notifyViewportChange(),!t&&this.stateValue==="ready"&&this.sdkVersionDecision?.heartbeatEnabled&&(this.documentRevalidationPending?(this.armDocumentRevalidationTimer(this.documentRevalidationGeneration),this.resendDocumentRevalidationProbe()):this.sendLocationProbe())}hide(){this.hostVisible=!1,this.clearHeartbeat(),this.clearDocumentRevalidationTimer(),this.emitLifecycleEvent("hide")}prepareForHistoryTraversal(){if(this.stateValue!=="ready"||this.bridgeServer?.protocolVersion!==2||!this.sdkVersionDecision?.heartbeatEnabled)return()=>{};const t=this.beginDocumentRevalidation({deferProbe:!0});return this.preparedHistoryTraversalGeneration=t,()=>{this.preparedHistoryTraversalGeneration===t&&this.cancelPreparedHistoryTraversal()}}createReadyPromise(){return new Promise((t,r)=>{this.resolveReady=t,this.rejectReady=r})}async launch(){const t=await this.resolveRuntimeLaunchConfiguration();if(this.isInactive())return;this.runtimePermissions=t.runtimePermissions,this.runtimeFeatures=t.runtimeFeatures,this.miniProgramPresentation=t.miniProgramPresentation,this.locationBasePath=t.locationBasePath,this.anonymousStorageScope=t.anonymousStorageScope??this.options.anonymousStorageScope,this.allowedHttpOrigins=t.allowedHttpOrigins??this.options.allowedHttpOrigins,this.bindCanonicalIdentity(t.canonicalIdentity),this.sdkVersionDecision=cg(t.sdkVersionPolicy);const r=Tp(t,this.identity);if(this.environmentInfo=r.info,r.invalidFields.length>0&&this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"environment_invalid",message:`环境字段已降级:${r.invalidFields.join(", ")}`}),this.platformGateDecision=yg({operatingSystemName:t.environmentInfo?.operatingSystem?.name,...t.platformAccess===void 0?{}:{platformAccess:t.platformAccess}}),this.platformGateDecision.status==="denied")throw Vg(this.platformGateDecision);if(this.miniProgramDetail=qg(t),this.effectiveCapabilities=Xa(this.primitiveAvailability,{callerCapabilities:this.options.capabilities,hostCapabilities:this.options.hostCapabilities,miniProgramDetail:this.miniProgramDetail}),console.info("[hb-sdk-runtime] host capability",Object.freeze({filesAccessPrimitive:this.primitiveAvailability["files.access"],callerFileCreate:this.options.capabilities?.["file.create"]??"default",hostFileCreate:this.options.hostCapabilities?.["file.create"]??"default",canonicalMiniProgramDetail:!!this.miniProgramDetail?.miniProgramId.trim(),effectiveFileCreate:this.effectiveCapabilities["file.create"]===!0})),this.compatibilityWithoutSdk=!!(t.sdkVersionPolicy&&t.sdkVersionPolicy.releaseChannel!==void 0&&!this.sdkVersionDecision.sdkVersion&&!this.sdkVersionDecision.heartbeatEnabled),Lg(this.options.onLaunchConfigurationResolved,t,this.sdkVersionDecision),this.isInactive())return;this.applyIframeDefaults(),this.startBridgeServer(),this.installSubscriptions();const n=await this.normalizeLaunchUrl(t.launchUrl);if(this.isInactive())return;const i=await this.confirmDevMiniProgramLaunch(n);if(!this.isInactive()){if(!i){await this.closeAfterDevLaunchCancellation();return}if(this.bridgeServer?.setTargetOrigin(kg(n)),this.launchUrl=n,this.miniProgramSrc=Vp(n,this.nonce),this.traceSecurityPolicy(n),this.setStatus("src_resolved"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"src_resolved"}),this.primitiveAvailability["presentation.applyOrientation"]){try{await this.capabilityGraph?.applyOrientation({mode:"portrait",hideCapsule:!1})}catch(o){if(this.isInactive())return;const s=uo(o);this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"error",method:ot,errorCode:s.code,message:`默认展示设置失败,沿用宿主当前布局:${s.message}`})}if(this.isInactive())return}this.awaitingControlledDocumentLoad=!0,this.iframe.src=this.miniProgramSrc,xe(this.options.onLaunch,this.createLaunchContext()),this.armHandshakeTimeout()}}startBridgeServer(){const t={postEvent:(n,i)=>{this.stateValue==="ready"&&(n!=="viewport_change"||this.effectiveCapabilities["viewport.getWindowInfo"])&&(n!=="display_change"||this.effectiveCapabilities[ot])&&this.bridgeServer?.postEvent(n,i)}};this.capabilityGraph=_p({account:this.ports.account,network:this.ports.network,files:this.ports.files,picker:this.ports.picker,transfer:this.ports.transfer,storage:this.ports.storage,storageDiagnostics:this.ports.storageDiagnostics,hostPresentation:this.ports.presentation,hostCompanion:this.ports.companion,environment:this.options.environment,identity:this.identityRef,runtimePermissions:this.runtimePermissions,runtimeFeatures:this.runtimeFeatures,authorizationContext:this.options.authorizationContext,terminalSignal:this.terminalController.signal,eventSink:t,authPresentation:this.options.authPresentation,companionPresentation:this.options.companionPresentation,miniProgramPresentation:this.miniProgramPresentation,miniProgramDetail:this.miniProgramDetail,anonymousStorageScope:this.anonymousStorageScope,storageLimits:this.options.storageLimits,allowedHttpOrigins:this.allowedHttpOrigins,requestPolicy:this.options.requestPolicy,...this.options.onRequestPolicyReport?{onRequestPolicyReport:this.options.onRequestPolicyReport}:{}});const r=wp({handlers:this.capabilityGraph.handlers,effectiveCapabilities:this.effectiveCapabilities,runtimePermissions:this.runtimePermissions,terminalSignal:this.terminalController.signal,allowsCompanionAttachmentAccess:this.capabilityGraph.allowsCompanionAttachmentAccess,policies:this.options.policies,...this.options.onCapabilityTrace?{onTrace:({callId:n,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,errorCode:u,network:g})=>{const m={type:"capability",runtimeId:this.runtimeId,callId:n,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,...u?{errorCode:u}:{},...this.identity,...g?{network:g}:{}};xe(this.options.onCapabilityTrace,m)}}:{}});this.bridgeServer=new Eu({iframe:this.iframe,nonce:this.nonce,dispatcher:r,environmentInfo:this.environmentInfo,onHandshake:n=>this.handleBridgeHandshake(n),onReady:()=>{this.handleBridgeReady()},onDuplicateHandshake:()=>{this.handleDuplicateBridgeHandshake()},onInternalEvent:n=>{this.handleInternalBridgeEvent(n)},onResponsePosted:({method:n,outcome:i,errorCode:o})=>{this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"bridge_response",method:n,outcome:i,...o?{errorCode:o}:{}})}}),this.bridgeServer.start(),this.setStatus("bridge_started"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"bridge_started"})}onIframeError(t=new Error("小程序 iframe 加载失败")){if(this.isInactive())return;const r=t instanceof Error?t.message:"小程序 iframe 加载失败";this.failRuntime(K("IFRAME_LOAD_ERROR",r,t))}emitLifecycleEvent(t){if(this.stateValue!=="ready"){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"lifecycle_ignored",event:t,reason:this.isInactive()?"inactive":"not_ready"});return}this.bridgeServer?.postEvent(t,{timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"lifecycle",method:t})}async resolveRuntimeLaunchConfiguration(){try{return await this.options.resolveLaunchConfiguration()}catch(t){throw Cg(t)?t:sd(K("STARTUP_ERROR",t instanceof Error?t.message:"获取小程序启动配置失败"),t)}}bindCanonicalIdentity(t){const r=t?.miniProgramId?.trim();r&&(this.identity.miniProgramId=r);const n=t?.miniProgramVersion?.trim();n&&(this.identity.miniProgramVersion=n)}async normalizeLaunchUrl(t){try{const r=this.options.environment.getCurrentHref();return Bp(t,r,{allowPrivateNetwork:zs(r)||Ys(r)||await this.isDevRuntime()})}catch(r){throw K("INVALID_LAUNCH_URL",r instanceof Error?r.message:"小程序链接不合法",r)}}async confirmDevMiniProgramLaunch(t){return await this.shouldConfirmDevMiniProgramLaunch(t)?this.isInactive()?!1:!!await(this.options.confirmDevMiniProgramLaunch??xg)({message:od,title:id,url:t}):!0}async shouldConfirmDevMiniProgramLaunch(t){if($s(t)==="production")return!1;const r=this.options.environment.getCurrentHref();return!zs(r)&&!Ys(r)}async closeAfterDevLaunchCancellation(){const t=K("LAUNCH_CANCELLED","小程序启动已取消");this.terminalError=t,this.destroyBridgeServer();const r=new AbortController;let n;try{n=Promise.resolve(this.ports.presentation.close({signal:r.signal}))}catch{Qs(),n=Promise.resolve()}this.terminalController.abort(t),this.disposeRuntimeResources(),this.setStatus("destroyed"),this.setState("destroyed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"launch_cancelled"}),this.rejectReady?.(t),await n.catch(()=>Qs())}async isDevRuntime(){return this.devRuntimePromise??=Promise.resolve().then(()=>this.options.environment.isDevRuntime()).then(Boolean).catch(()=>!1),this.devRuntimePromise}applyIframeDefaults(){this.iframe.setAttribute("allow",Up),this.iframe.setAttribute("referrerpolicy",xp),this.iframe.setAttribute("sandbox",td)}removeIframeListeners(){this.iframe.removeEventListener("error",this.iframeErrorListener),this.iframe.removeEventListener("load",this.iframeLoadListener)}installSubscriptions(){if(this.options.lifecycle&&!this.lifecycleDisposer){const t=this.options.lifecycle.subscribe({show:this.show.bind(this),hide:this.hide.bind(this)});this.lifecycleDisposer=typeof t=="function"?t:null}}clearLifecycleDisposer(){const t=[this.lifecycleDisposer];this.lifecycleDisposer=null;for(const r of t)try{r?.()}catch{}}handleBridgeReady(){if(this.isInactive())return;if(this.readyContext){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"duplicate_handshake"});return}this.clearHandshakeTimeout(),this.setStatus("bridge_ready");const t=this.createReadyContext();this.readyContext=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"bridge",method:"ready"}),this.setState("ready"),this.sdkVersionDecision?.heartbeatEnabled&&this.hostVisible&&this.sendLocationProbe(),this.resolveReady?.(t),this.capabilityGraph?.notifyViewportChange(),xe(this.options.onReady,t)}completeCompatibilityLaunch(){if(this.stateValue!=="starting"||this.isInactive()||this.readyContext)return;this.clearHandshakeTimeout(),this.setStatus("bridge_ready");const t=this.createReadyContext();this.readyContext=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"status",status:"bridge_ready"}),this.setState("ready"),this.resolveReady?.(t),this.capabilityGraph?.notifyViewportChange(),xe(this.options.onReady,t)}handleBridgeHandshake(t){const r=this.sdkVersionDecision?.sdkVersion;if(r)try{dg(r,t?.sdkVersion)}catch(n){return this.failRuntime(n),!1}return!0}armHandshakeTimeout(){this.clearHandshakeTimeout(),!(this.handshakeTimeout<=0)&&(this.handshakeTimeoutTimer=setTimeout(()=>{this.stateValue==="ready"||this.isInactive()||(this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"handshake_timeout"}),this.failRuntime(K("SDK_HANDSHAKE_TIMEOUT","小程序 SDK 握手超时")))},this.handshakeTimeout))}clearHandshakeTimeout(){this.handshakeTimeoutTimer&&(clearTimeout(this.handshakeTimeoutTimer),this.handshakeTimeoutTimer=void 0)}sendLocationProbe(){if(this.isInactive()||!this.hostVisible||!this.sdkVersionDecision?.heartbeatEnabled||this.documentRevalidationPending)return;if(this.pendingProbeId&&(this.consecutiveHeartbeatMisses+=1,this.consecutiveHeartbeatMisses>=Og)){this.failRuntime(K("HEARTBEAT_TIMEOUT","小程序 SDK 心跳超时"));return}const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.bridgeServer?.postInternalRequest(pr,t,{probeId:t,timestamp:Date.now()}),this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},oi),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:pr})}clearHeartbeat(){this.heartbeatTimer&&(clearTimeout(this.heartbeatTimer),this.heartbeatTimer=void 0),this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0}beginDocumentRevalidation(t={}){this.clearUnexpectedDocumentLoadFailure(),this.clearHeartbeat(),this.clearDocumentRevalidationTimer(),this.preparedHistoryTraversalGeneration=void 0,this.documentRevalidationPending=!0;const r=++this.documentRevalidationGeneration;return this.iframeHiddenForRevalidation||(this.iframeVisibilityBeforeRevalidation=this.iframe.style.visibility,this.iframe.style.visibility="hidden",this.iframeHiddenForRevalidation=!0),this.armDocumentRevalidationTimer(r),t.deferProbe||this.sendDocumentRevalidationProbe(),r}sendDocumentRevalidationProbe(){if(this.isInactive()||!this.hostVisible||!this.documentRevalidationPending||!this.sdkVersionDecision?.heartbeatEnabled)return;const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.postLocationProbe(t)}resendDocumentRevalidationProbe(){if(!(this.isInactive()||!this.hostVisible||!this.documentRevalidationPending||!this.sdkVersionDecision?.heartbeatEnabled)){if(!this.pendingProbeId){this.sendDocumentRevalidationProbe();return}this.postLocationProbe(this.pendingProbeId)}}postLocationProbe(t){this.bridgeServer?.postInternalRequest(pr,t,{probeId:t,timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:pr})}armDocumentRevalidationTimer(t){this.hostVisible&&(this.documentRevalidationTimer=setTimeout(()=>{this.documentRevalidationTimer=void 0,!(this.isInactive()||!this.documentRevalidationPending||t!==this.documentRevalidationGeneration)&&(this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime(K("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 文档再验证超时")))},oi))}clearDocumentRevalidationTimer(){this.documentRevalidationTimer&&(clearTimeout(this.documentRevalidationTimer),this.documentRevalidationTimer=void 0)}completeDocumentRevalidation(){this.clearDocumentRevalidationTimer(),this.documentRevalidationPending=!1,this.preparedHistoryTraversalGeneration=void 0,this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.iframeHiddenForRevalidation&&this.iframe.style.visibility==="hidden"&&(this.iframe.style.visibility=this.iframeVisibilityBeforeRevalidation??""),this.iframeVisibilityBeforeRevalidation=void 0,this.iframeHiddenForRevalidation=!1,this.hostVisible&&this.sdkVersionDecision?.heartbeatEnabled&&(this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},oi))}clearDocumentRevalidation(){this.clearDocumentRevalidationTimer(),this.documentRevalidationPending=!1,this.preparedHistoryTraversalGeneration=void 0,this.iframeVisibilityBeforeRevalidation=void 0,this.iframeHiddenForRevalidation=!1}cancelPreparedHistoryTraversal(){this.clearDocumentRevalidationTimer(),this.documentRevalidationPending=!1,this.preparedHistoryTraversalGeneration=void 0,this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.iframeHiddenForRevalidation&&this.iframe.style.visibility==="hidden"&&(this.iframe.style.visibility=this.iframeVisibilityBeforeRevalidation??""),this.iframeVisibilityBeforeRevalidation=void 0,this.iframeHiddenForRevalidation=!1,this.hostVisible&&this.sdkVersionDecision?.heartbeatEnabled&&this.sendLocationProbe()}handleDuplicateBridgeHandshake(){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"duplicate_handshake"}),this.documentRevalidationPending&&this.resendDocumentRevalidationProbe()}handleInternalBridgeEvent(t){if(t.method===Zd){this.handleCspViolation(t.payload);return}if(t.method!==Xd)return;const r=this.sdkVersionDecision?.sdkVersion;if(!r)return;const n=t.payload;if(!n||n.sdkVersion!==r){this.failRuntime(K("SDK_VERSION_MISMATCH","URL report 的 SDK 版本不一致"));return}if(!(n.probeId!==void 0&&n.probeId!==this.pendingProbeId)){if(typeof n.href!="string"||!qp(this.launchUrl,n.href,this.locationBasePath)){typeof n.href=="string"&&this.emitUrlSecurityViolation("URL_OUT_OF_SCOPE",n.href),this.failRuntime(K("URL_OUT_OF_SCOPE","小程序页面地址超出允许范围"));return}n.probeId!==void 0?(this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.documentRevalidationPending&&this.completeDocumentRevalidation()):this.documentRevalidationPending&&!this.pendingProbeId&&(this.preparedHistoryTraversalGeneration=void 0,this.sendDocumentRevalidationProbe())}}handleCspViolation(t){const r=og(t,this.sdkVersionDecision?.sdkVersion);r&&this.emitSecurityViolation({type:"security_violation",errorCode:"CSP_VIOLATION",timestamp:r.timestamp,sdkVersion:r.sdkVersion,origin:r.origin,sanitizedPathname:r.sanitizedPathname,sanitizedPathnameHash:r.sanitizedPathnameHash,effectiveDirective:r.effectiveDirective,violatedDirective:r.violatedDirective,blockedResourceType:r.blockedResourceType})}emitSecurityViolation(t){xe(this.options.onSecurityViolation,t),this.trace({runtimeId:this.nonce,...t})}emitUrlSecurityViolation(t,r){const n=_g(t,r,this.sdkVersionDecision?.sdkVersion);this.emitSecurityViolation(n)}scheduleUnexpectedDocumentLoadFailure(){this.clearUnexpectedDocumentLoadFailure(),this.unexpectedDocumentLoadTimer=setTimeout(()=>{this.unexpectedDocumentLoadTimer=void 0,this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime(K("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 发生未授权文档加载"))},50)}clearUnexpectedDocumentLoadFailure(){this.unexpectedDocumentLoadTimer&&(clearTimeout(this.unexpectedDocumentLoadTimer),this.unexpectedDocumentLoadTimer=void 0)}traceSecurityPolicy(t){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"security",sandboxPolicyVersion:kp,launchUrlType:$s(t),networkPolicy:Dg})}failRuntime(t){const r=Pg(t);return this.isInactive()||(this.terminalError=r,this.terminalController.abort(r),this.postBridgeError(r),this.disposeRuntimeResources(),this.setStatus("failed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"error",errorCode:r.code,message:r.message}),this.setState("failed"),this.teardownIframe(r),xe(this.options.onError,Tg(r)),this.rejectReady?.(r)),r}postBridgeError(t){try{this.bridgeServer?.postEvent("error",{code:t.code,message:t.message,...t.data!==void 0?{data:t.data}:{}})}catch{}return t}destroyBridgeServer(){const t=this.bridgeServer;this.bridgeServer=null;try{t?.destroy()}catch{}}disposeRuntimeResources(){if(!this.runtimeResourcesDisposed){this.runtimeResourcesDisposed=!0,this.clearHandshakeTimeout(),this.clearHeartbeat(),this.clearUnexpectedDocumentLoadFailure(),this.clearDocumentRevalidation(),this.destroyBridgeServer(),this.capabilityGraph?.dispose(),this.capabilityGraph=void 0,this.clearLifecycleDisposer(),this.removeIframeListeners();try{this.options.dispose?.()}catch{}}}teardownIframe(t){if(!this.iframeTornDown){this.iframeTornDown=!0;try{this.options.teardownIframe?this.options.teardownIframe(this.iframe,t):this.iframe.remove()}catch{}}}setStatus(t){this.status!==t&&(this.status=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"status",status:t}))}setState(t){this.stateValue!==t&&(this.stateValue=t,xe(this.options.onStateChange,t))}isInactive(){return this.stateValue==="failed"||this.stateValue==="destroyed"}trace(t){xe(this.options.onTrace,{...t,runtimeId:this.runtimeId,...this.identity})}createLaunchContext(){return{launchUrl:this.launchUrl,src:this.miniProgramSrc,sdkVersion:this.sdkVersionDecision?.sdkVersion,heartbeatEnabled:!!this.sdkVersionDecision?.heartbeatEnabled,...this.identity}}createReadyContext(){return this.readyContext??this.createLaunchContext()}}function Pg(e){const t=uo(e);return bn(e)&&"cause"in e&&sd(t,e.cause),t}function sd(e,t){return Object.defineProperty(e,"cause",{configurable:!0,enumerable:!1,value:t}),e}function Tg(e){return{code:e.code,message:e.message,...e.data!==void 0?{data:e.data}:{}}}function Cg(e){return bn(e)&&typeof e.code=="string"&&typeof e.message=="string"}function bn(e){return!!e&&typeof e=="object"}function xe(e,t){try{e?.(t)}catch{}}function Lg(e,t,r){try{e?.(t,r)}catch{}}function Ys(e){try{const t=new URL(e);return t.protocol==="http:"&&Dp(t.hostname)}catch{return!1}}function Mg(e){try{return new URL(e).origin}catch{return}}function kg(e){return Hp()?"*":Mg(e)}function Ug(e){return`${id}
|
|
1
|
+
import{H as Mo,aA as Md,a$ as kd,M as Ud,aK as xd,aL as Hd,am as cr,b9 as W,ad as Fd,an as xa,at as Bd,b3 as Vd,ap as qd,d as zd,aH as Ha,ab as Gd,aw as Fa,r as jd,aC as Ba,o as $d,aG as Wd,a8 as Kd,b1 as Yd,b0 as Qd,c as Jd}from"./desktop-app-launch-DvlJu02d.js";const Vr="auth.login",qr="user.getInfo",zr="user.revokeAuthorization",Gr="user.getSteamGameList",jr="share.copyLink",$r="share.showShareMenu",Wr="share.screenshot",ot="viewport.setDisplay",Kr="viewport.getWindowInfo",Yr="viewport.setNavigationBarStyle",Kt="storage.getStorage",Yt="storage.setStorage",Qr="network.request",Jr="network.download",Xr="files.pickFiles",Zr="files.pickDirectory",en="files.saveFile",Qt="file.create",Jt="file.remove",tn="file.exists",Xt="file.readText",rn="file.writeText",Zt="file.readBytes",nn="file.writeBytes",er="file.stat",on="directory.create",tr="directory.remove",sn="directory.exists",an="directory.list",cn="ui.showToast",dn="ui.showLoading",ln="ui.hideLoading",un="device.vibrate",fn="device.setClipboard",hn="navigation.close",mn="navigation.reload",pn="navigation.openAppPage",Me="cloud.leaderboard.submit",be="cloud.leaderboard.getList",ze="cloud.leaderboard.getCurrentUserEntry",st="cloud.leaderboard.deleteCurrentUserEntry",De="cloud.leaderboard.getInfo",_n="companion.getInfo",Sn="companion.getPreparationStatus",vn="companion.prepare",Rn="companion.cancelPreparation",On="companion.getActiveSession",Dn="companion.launch",Nn="companion.session.write",Pn="companion.session.closeStdin",Tn="companion.session.terminate",Cn="companion.session.ackOutput",Ln="companion.openAttachment",Mn="companion.showNotification",Ge=[{method:Vr,module:"auth",capability:Vr,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:qr,module:"user",capability:qr,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:zr,module:"user",capability:zr,requirement:{kind:"none"},risk:"high"},{method:Gr,module:"user",capability:Gr,requirement:{kind:"all",permissions:["steamLibrary"]},risk:"high"},{method:jr,module:"share",capability:jr,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:$r,module:"share",capability:$r,requirement:{kind:"all",permissions:["share"]},risk:"low"},{method:Wr,module:"share",capability:Wr,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:Kr,module:"viewport",capability:Kr,requirement:{kind:"none"},risk:"low"},{method:Yr,module:"viewport",capability:Yr,requirement:{kind:"none"},risk:"low"},{method:ot,module:"viewport",capability:ot,requirement:{kind:"none"},risk:"low"},{method:Kt,module:"storage",capability:Kt,requirement:{kind:"all",permissions:["storage"]},risk:"low"},{method:Yt,module:"storage",capability:Yt,requirement:{kind:"all",permissions:["storage"]},risk:"medium"},{method:Qr,module:"network",capability:Qr,requirement:{kind:"all",permissions:["network"]},risk:"high"},{method:Jr,module:"network",capability:Jr,requirement:{kind:"all",permissions:["network","filesystem"]},risk:"high"},{method:Xr,module:"files",capability:Xr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Zr,module:"files",capability:Zr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:en,module:"files",capability:en,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Qt,module:"file",capability:Qt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Jt,module:"file",capability:Jt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:tn,module:"file",capability:tn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Xt,module:"file",capability:Xt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:rn,module:"file",capability:rn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Zt,module:"file",capability:Zt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:nn,module:"file",capability:nn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:er,module:"file",capability:er,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:on,module:"directory",capability:on,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:tr,module:"directory",capability:tr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:sn,module:"directory",capability:sn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:an,module:"directory",capability:an,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:cn,module:"ui",capability:cn,requirement:{kind:"none"},risk:"low"},{method:dn,module:"ui",capability:dn,requirement:{kind:"none"},risk:"low"},{method:ln,module:"ui",capability:ln,requirement:{kind:"none"},risk:"low"},{method:un,module:"device",capability:un,requirement:{kind:"none"},risk:"low"},{method:fn,module:"device",capability:fn,requirement:{kind:"all",permissions:["clipboard"]},risk:"medium"},{method:hn,module:"navigation",capability:hn,requirement:{kind:"none"},risk:"medium"},{method:mn,module:"navigation",capability:mn,requirement:{kind:"none"},risk:"medium"},{method:pn,module:"navigation",capability:pn,requirement:{kind:"none"},risk:"medium"},{method:Me,module:"cloud",capability:Me,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:be,module:"cloud",capability:be,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},{method:ze,module:"cloud",capability:ze,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:st,module:"cloud",capability:st,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:De,module:"cloud",capability:De,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},...[_n,Sn,vn,Rn,On,Dn,Nn,Pn,Tn,Cn,Ln,Mn].map(e=>({method:e,module:"companion",capability:e,requirement:{kind:"all",permissions:["companion"]},risk:"high"}))],Je="heybox:miniprogram",Va=2,Xd="hb_mini_bridge_nonce",qa="sdk.handshake",pr="runtime.location.probe",Zd="sdk.location.report",el="sdk.csp.violation",za="operation.progress",tl="companion.session.output",rl="companion.session.exit",nl="companion.session.ownershipLost";function il(e){return!Qe(e)||e.namespace!==Je||e.version!==1&&e.version!==2||!ae(e.nonce)?!1:e.type==="handshake"?ae(e.id)&&e.method===qa&&e.error===void 0&&cl(e.payload):e.type==="request"?ae(e.id)&&ae(e.method)&&e.error===void 0:e.type==="response"?ae(e.id)&&(e.method===void 0||ae(e.method))&&(e.error===void 0||dl(e.error)):e.type==="event"?!ae(e.method)||e.error!==void 0?!1:e.method===za?e.version===2&&ae(e.id)&&al(e.payload):e.id===void 0||ae(e.id):e.type==="cancel"?e.version===2&&ae(e.id)&&e.method===void 0&&e.payload===void 0&&e.error===void 0:!1}function ao(e){return typeof e!="string"||!e||e.startsWith("/")||e.endsWith("/")||/[\\\u0000-\u001f\u007f]/.test(e)?!1:e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function Ga(e){return Qe(e)?e.kind==="sandbox"?ke(e,["kind"]):e.kind==="directory"&&ae(e.handleId)&&ke(e,["kind","handleId"]):!1}function co(e){return!Qe(e)||e.kind!=="file"?!1:ae(e.handleId)?ke(e,["kind","handleId"]):Ga(e.root)&&ao(e.relativePath)&&ke(e,["kind","root","relativePath"])}function ja(e){return!Qe(e)||e.kind!=="directory"?!1:ae(e.handleId)?ke(e,["kind","handleId"]):Ga(e.root)&&(e.relativePath==="."||ao(e.relativePath))&&ke(e,["kind","root","relativePath"])}function $a(e){return e instanceof Uint8Array&&e.buffer instanceof ArrayBuffer}function ol(e){return!Qe(e)||!bt(e.loaded)||typeof e.lengthComputable!="boolean"||!ke(e,["loaded","total","lengthComputable"])?!1:e.lengthComputable?bt(e.total)&&e.loaded<=e.total:e.total===void 0}function sl(e){return Qe(e)?e.phase==="downloading"?bt(e.loaded)&&(e.total===void 0||bt(e.total)&&e.loaded<=e.total)&&ke(e,["phase","loaded","total"]):e.phase!=="verifying"&&e.phase!=="extracting"?!1:bt(e.processed)&&bt(e.total)&&e.processed<=e.total&&ke(e,["phase","processed","total"]):!1}function al(e){return ol(e)||sl(e)}function cl(e){return Qe(e)&&ae(e.href)&&typeof e.userAgent=="string"&&ae(e.sdkVersion)}function dl(e){return Qe(e)&&ae(e.code)&&typeof e.message=="string"}function bt(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function ae(e){return typeof e=="string"&&e.length>0}function ke(e,t){const r=new Set(t);return Object.keys(e).every(n=>r.has(n))}function Qe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const rr=["userInfo","steamLibrary","share","storage","filesystem","clipboard","leaderboard","network","companion"];new Set(rr);const ll=new Set(rr);function ul(e){return ll.has(e)}function Ue(e){if(!gr(e)||e.schema_version!==1||!Array.isArray(e.entries))return{valid:!1,permissions:{}};if(e.revision!==void 0&&(typeof e.revision!="number"||!Number.isInteger(e.revision)||e.revision<0))return{valid:!1,permissions:{}};const t=new Set,r={};for(const n of e.entries){if(!gr(n)||typeof n.key!="string"||!n.key.trim())return{valid:!1,permissions:{}};const i=n.key.trim(),o=i==="network.request"?"network":i;if(t.has(o)||n.status!=="enabled"&&n.status!=="disabled")return{valid:!1,permissions:{}};if(t.add(o),!!ul(o)){if(o==="network"){const s=n.config;if(!gr(s)||typeof s.useOfficialDomain!="boolean")return{valid:!1,permissions:{}};r[o]={key:o,status:n.status,config:{useOfficialDomain:s.useOfficialDomain}};continue}if(n.config!==null&&n.config!==void 0&&(!gr(n.config)||Object.keys(n.config).length>0))return{valid:!1,permissions:{}};r[o]={key:o,status:n.status,config:{}}}}return{valid:!0,permissions:r}}function gr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Nr=["network","companion"];function Wa(e){if(!yr(e,["schema_version","revision","entries"])||e.schema_version!==1||typeof e.revision!="number"||!Number.isSafeInteger(e.revision)||e.revision<0||!Array.isArray(e.entries)||e.entries.length>Nr.length)return{valid:!1};const t=[],r=new Set;for(const n of e.entries){if(!yr(n,["key","status","config"])||n.status!=="enabled")return{valid:!1};if(typeof n.key!="string"||r.has(n.key))return{valid:!1};if(r.add(n.key),n.key==="network"){if(!yr(n.config,["useOfficialDomain"])||n.config.useOfficialDomain!==!1)return{valid:!1};t.push({key:"network",status:"enabled",config:{useOfficialDomain:!1}})}else if(n.key==="companion"){if(!yr(n.config,[]))return{valid:!1};t.push({key:"companion",status:"enabled",config:{}})}else return{valid:!1}}return t.sort((n,i)=>Nr.indexOf(n.key)-Nr.indexOf(i.key)),{valid:!0,grant:{schema_version:1,revision:e.revision,entries:t}}}function fl(e){if(!Number.isSafeInteger(e.revision)||e.revision<0)throw new Error("本地调试权限 revision 必须是非负安全整数");const t=Ue(e.runtimePermissions),r=new Set(e.eligiblePermissionKeys??["network"]),n=[];for(const i of Nr)!r.has(i)||e.declaredPermissions[i]?.enabled!==!0||t.valid&&t.permissions[i]?.status==="enabled"||n.push(i==="network"?{key:i,status:"enabled",config:{useOfficialDomain:!1}}:{key:i,status:"enabled",config:{}});return{schema_version:1,revision:e.revision,entries:n}}function lo(e){const t=Ue(e.runtimePermissions),r=Wa(e.localDevGrant),n=t.valid?t.permissions:{};for(const s of rr)e.declaredPermissions[s]?.enabled!==!0?delete n[s]:s==="network"&&n.network&&(n.network.config.useOfficialDomain=n.network.status==="enabled"&&n.network.config.useOfficialDomain===!0&&e.declaredPermissions.network?.useOfficialDomain===!0);const i=[];if(r.valid)for(const s of r.grant.entries)e.declaredPermissions[s.key]?.enabled!==!0||n[s.key]?.status==="enabled"||(n[s.key]=s,i.push(s.key));const o=Ka(e.runtimePermissions)&&typeof e.runtimePermissions.revision=="number"&&Number.isSafeInteger(e.runtimePermissions.revision)&&e.runtimePermissions.revision>=0?e.runtimePermissions.revision:void 0;return{runtimePermissions:{schema_version:1,...o===void 0?{}:{revision:o},entries:rr.flatMap(s=>n[s]?[n[s]]:[])},temporaryPermissionKeys:i,grantValid:r.valid}}function Ka(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function yr(e,t){return Ka(e)&&Object.keys(e).length===t.length&&t.every(r=>Object.prototype.hasOwnProperty.call(e,r))}const _t=["identity","profile","steam_account"],hl=/^[a-z][a-z0-9-]{0,31}$/,Ya=["COMPANION_UNSUPPORTED","COMPANION_PREVIEW_UNSUPPORTED","COMPANION_NOT_DECLARED","COMPANION_TARGET_UNSUPPORTED","COMPANION_NOT_PREPARED","COMPANION_PREPARATION_CANCELLED","COMPANION_DOWNLOAD_FAILED","COMPANION_DESCRIPTOR_UNAVAILABLE","COMPANION_ARCHIVE_INVALID","COMPANION_INTEGRITY_FAILED","COMPANION_ENTRYPOINT_INVALID","COMPANION_USER_CANCELLED","COMPANION_ELEVATION_DENIED","COMPANION_OS_BLOCKED","COMPANION_LAUNCH_FAILED","COMPANION_SESSION_VERSION_MISMATCH","COMPANION_SESSION_OWNERSHIP_LOST","COMPANION_SESSION_EXITED","COMPANION_PIPE_CLOSED","COMPANION_OUTPUT_LIMIT","COMPANION_PROCESS_CRASHED","COMPANION_ATTACHMENT_NOT_FOUND","COMPANION_NOTIFICATION_UNAVAILABLE","COMPANION_TERMINATE_FAILED"];Ge.map(e=>e.method);function K(e,t,r){return{code:e,message:t,data:r}}function uo(e){return ml(e)?{code:e.code,message:e.message,data:e.data}:e instanceof Error?K("RUNTIME_ERROR",e.message):K("UNKNOWN_ERROR","小程序运行时异常",e)}function ml(e){return!!e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"}function pl(){try{return{activeElement:globalThis.document?.activeElement??null,userActivation:globalThis.navigator?.userActivation}}catch{return{activeElement:null}}}const gl=1e3;function yl(e,t=pl()){if(t.userActivation)return t.userActivation.isActive===!0;const r=t.lastUserInteractionAt,n=t.now??Date.now();return t.activeElement===e&&r!==void 0&&n>=r&&n-r<=gl}const El="runtime.gate.probe",Qa=new Set(Ge.map(e=>e.method));class wl{iframe;nonce;onReady;onHandshake;onDuplicateHandshake;onInternalEvent;onResponsePosted;handleMessage;handleUserInteraction;dispatcher;environmentInfo;started=!1;destroyed=!1;handshaken=!1;bridgeVersion=Va;targetOrigin;lastUserInteractionAt;operations=new Map;constructor(t){this.iframe=t.iframe,this.nonce=t.nonce,this.onReady=t.onReady,this.onHandshake=t.onHandshake,this.onDuplicateHandshake=t.onDuplicateHandshake,this.onInternalEvent=t.onInternalEvent,this.onResponsePosted=t.onResponsePosted,this.handleMessage=this.onMessage.bind(this),this.handleUserInteraction=this.onUserInteraction.bind(this),this.dispatcher=t.dispatcher,this.environmentInfo=t.environmentInfo,this.targetOrigin=t.targetOrigin||"*"}get protocolVersion(){return this.handshaken?this.bridgeVersion:void 0}start(){if(!(this.started||this.destroyed)){this.started=!0,window.addEventListener("message",this.handleMessage);for(const t of["pointerdown","touchend","mousedown","keydown"])window.addEventListener(t,this.handleUserInteraction,!0)}}setTargetOrigin(t){this.targetOrigin=t||"*"}destroy(){if(this.destroyed)return;const t=this.started;this.destroyed=!0,this.started=!1,this.handshaken=!1;try{t&&this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:"unload",payload:{timestamp:Date.now()}})}catch{}finally{window.removeEventListener("message",this.handleMessage);for(const r of["pointerdown","touchend","mousedown","keydown"])window.removeEventListener(r,this.handleUserInteraction,!0);this.lastUserInteractionAt=void 0;for(const r of this.operations.values())r.abort("bridge destroyed");this.operations.clear()}}postEvent(t,r){this.destroyed||this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:t,payload:r})}postInternalRequest(t,r,n){this.destroyed||this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"request",id:r,method:t,payload:n})}postProgress(t,r){this.bridgeVersion===2&&this.postMessage({namespace:Je,version:2,nonce:this.nonce,type:"event",id:t,method:za,payload:r})}onMessage(t){if(!this.started||!this.isTrustedMiniProgramMessage(t))return;const r=t.data;if(r.type==="handshake"){this.handleHandshake(r,t.origin);return}if(r.type==="request"){let n=!1;try{n=yl(this.iframe,{activeElement:document.activeElement,userActivation:navigator.userActivation,lastUserInteractionAt:this.lastUserInteractionAt,now:Date.now()})}catch{n=!1}this.handleRequest(r,n);return}if(r.type==="cancel"&&this.handshaken&&r.id){this.operations.get(r.id)?.abort();return}r.type==="event"&&this.handshaken&&this.onInternalEvent?.(r)}onUserInteraction(t){const r=typeof t.composedPath=="function"?t.composedPath():[];(t.target===this.iframe||r.includes(this.iframe))&&(this.lastUserInteractionAt=Date.now())}isTrustedMiniProgramMessage(t){return t.source===this.iframe.contentWindow&&il(t.data)&&(!this.handshaken||t.data.version===this.bridgeVersion)&&((this.handshaken?this.bridgeVersion:t.data.version)===1||this.targetOrigin==="*"||t.origin===this.targetOrigin)&&t.data.nonce===this.nonce}handleHandshake(t,r){const n=t.payload,i=t.version,o=!this.handshaken;if(o){if(this.onHandshake?.(n)===!1)return;this.bridgeVersion=i,i===1&&this.targetOrigin!=="*"&&r&&r!=="null"&&(this.targetOrigin=r),this.handshaken=!0,this.postEvent("launch",{timestamp:Date.now(),url:this.iframe.src})}this.environmentInfo&&t.id&&this.postMessage({namespace:Je,version:this.bridgeVersion,nonce:this.nonce,type:"response",id:t.id,method:qa,payload:{environment:this.environmentInfo}}),this.postEvent("ready",{timestamp:Date.now()}),o?this.onReady?.(n):this.onDuplicateHandshake?.()}async handleRequest(t,r){if(!t.id||!t.method)return;if(!this.handshaken&&t.method===El){this.postResponse(t,{ready:!0});return}if(!this.handshaken){this.postResponse(t,void 0,K("BRIDGE_NOT_READY","小程序 SDK 尚未完成握手"));return}if(!Qa.has(t.method)){this.postResponse(t,void 0,K("METHOD_NOT_FOUND",`未开放小程序能力: ${t.method}`));return}if(this.operations.has(t.id)){this.postResponse(t,void 0,K("INVALID_PARAMS","bridge request id 重复"));return}const n=new AbortController;this.operations.set(t.id,n);try{const i=await this.dispatcher.dispatch(t.method,t.payload,{postEvent:this.postEvent.bind(this),postProgress:o=>{this.operations.get(t.id)===n&&this.postProgress(t.id,o)},signal:n.signal,trustedUserGesture:r});if(i.status==="dropped"||!this.started||this.operations.get(t.id)!==n)return;this.postResponse(t,i.value)}catch(i){if(!this.started||this.operations.get(t.id)!==n)return;const o=uo(i);this.postResponse(t,void 0,o),this.postEvent("error",o)}finally{this.operations.get(t.id)===n&&(this.operations.delete(t.id),n.signal.aborted||n.abort("operation terminal"))}}postResponse(t,r,n){if(!(!this.postMessage({namespace:Je,version:t.version,nonce:this.nonce,type:"response",id:t.id,method:t.method,payload:r,error:n})||!bl(t.method)))try{this.onResponsePosted?.({method:t.method,outcome:n?"error":"success",...n?{errorCode:n.code}:{}})}catch{}}postMessage(t){const r=this.iframe.contentWindow;return r?(r.postMessage(t,this.targetOrigin),!0):!1}}function bl(e){return typeof e=="string"&&Qa.has(e)}const Ja="METHOD_FORBIDDEN";function Te(e){const t=new Error(`小程序能力已禁用: ${e}`);return t.name="MethodForbiddenError",t.code=Ja,t}class oe extends Error{code="HOST_REQUEST_UNSUPPORTED";constructor(t="当前 Host 不支持该请求形状",r){super(t),this.name="HostRequestUnsupportedError",r&&"cause"in r&&Object.defineProperty(this,"cause",{configurable:!0,enumerable:!1,value:r.cause}),Object.setPrototypeOf(this,new.target.prototype)}}const ko={[Vr]:["account.getCurrentUserId","account.ensureAuthenticated","account.onChange","network.request"],[qr]:["account.getCurrentUserId","account.onChange","network.request"],[zr]:["account.getCurrentUserId","account.onChange","network.request"],[Gr]:["account.getCurrentUserId","account.onChange","network.request"],[jr]:["presentation.setClipboard"],[$r]:["presentation.showShareMenu"],[Wr]:["presentation.getViewportMetrics","presentation.captureAndShare"],[ot]:["presentation.applyOrientation"],[Kr]:["presentation.getViewportMetrics","presentation.getNavigationBarHeight"],[Yr]:["presentation.setNavigationBarStyle"],[Kt]:["storage.getRaw"],[Yt]:["storage.setRaw"],[Qr]:["network.request"],[Jr]:["network.stream","files.transfer","files.access"],[Xr]:["files.external"],[Zr]:["files.external"],[en]:["files.save"],[Qt]:["files.access"],[Jt]:["files.removeFile"],[tn]:["files.access"],[Xt]:["files.access"],[rn]:["files.access"],[Zt]:["files.access"],[nn]:["files.access"],[er]:["files.access"],[on]:["files.access"],[tr]:["files.removeDirectory"],[sn]:["files.access"],[an]:["files.access"],[cn]:["presentation.showToast"],[dn]:["presentation.showLoading"],[ln]:["presentation.hideLoading"],[un]:["presentation.vibrate"],[fn]:["presentation.setClipboard"],[hn]:["presentation.close"],[mn]:["presentation.reload"],[pn]:["presentation.openAppPage"],[Me]:["account.getCurrentUserId","account.onChange","network.request"],[be]:["account.onChange","network.request"],[ze]:["account.getCurrentUserId","account.onChange","network.request"],[st]:["account.getCurrentUserId","account.onChange","network.request"],[De]:["account.onChange","network.request"],[_n]:["companion.getInfo"],[Sn]:["companion.getPreparationStatus"],[vn]:["companion.getInfo","companion.getPreparationStatus","companion.prepare"],[Rn]:["companion.cancelPreparation"],[On]:["companion.getActiveSession"],[Dn]:["companion.getInfo","companion.launch"],[Nn]:["companion.session.write"],[Pn]:["companion.session.closeStdin"],[Tn]:["companion.session.terminate"],[Cn]:["companion.session.ackOutput"],[Ln]:["companion.openAttachment"],[Mn]:["companion.showNotification"]};function Al(e,t){if(t[e]!==!0)throw Te(e)}const Il=32*1024*1024,_l=/^application\/(?:[a-z0-9!#$&^_.+-]+\+)?json(?:\s*;|$)/i;function Sl(e){if(e.mode==="request-only")return{network:{request:(n,i)=>e.request(n,i)}};if(e.mode==="override-request")return{network:{request:(n,i)=>e.request(n,i)},...e.stream===void 0?{}:{stream:e.stream}};const{consume:t,stream:r}=e;return{stream:r,network:{async request(n,i){const o=await r.open(n,i);let s;try{const a=await t(o.body,{maxBytes:Il},i);return vl(o,a)}catch(a){throw s=a,a}finally{try{await r.release(o.body)}catch(a){if(s===void 0)throw a}}}}}}function vl(e,t){const r=Object.fromEntries(Object.entries(e.headers).map(([n,i])=>[n,i.join(", ")]));return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:r,data:Rl(t,Dl(e,"content-type"))}}function Rl(e,t){Ol(t);let r;try{r=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch(n){throw new oe("Host network response 不是合法 UTF-8 文本",{cause:n})}if(r.charCodeAt(0)===65279&&(r=r.slice(1)),!t||!_l.test(t)||r==="")return r;try{return JSON.parse(r)}catch{return r}}function Ol(e){if(!e)return;const t=/(?:^|;)\s*charset\s*=\s*["']?([^;"'\s]+)/i.exec(e)?.[1];if(t&&!/^utf-?8$/i.test(t))throw new oe(`Host network response 不支持 charset=${t}`)}function Dl(e,t){return Object.entries(e.headers).find(([r])=>r.toLowerCase()===t)?.[1]?.[0]}function k(e){return typeof e=="function"}function Uo(e){return(...t)=>{throw Te(e)}}function ne(e){return async(...t)=>{throw Te(e)}}const Nl=(e,t)=>{},Pl=()=>()=>{};function Tl(e){const t={request:k(e.network?.request)?e.network.request.bind(e.network):ne("network.request")},r={getCurrentUserId:k(e.account?.getCurrentUserId)?e.account.getCurrentUserId.bind(e.account):ne("account.getCurrentUserId"),ensureAuthenticated:k(e.account?.ensureAuthenticated)?e.account.ensureAuthenticated.bind(e.account):ne("account.ensureAuthenticated"),onChange:k(e.account?.onChange)?e.account.onChange.bind(e.account):Pl},n={getRaw:k(e.storage?.getRaw)?e.storage.getRaw.bind(e.storage):ne("storage.getRaw"),setRaw:k(e.storage?.setRaw)?e.storage.setRaw.bind(e.storage):ne("storage.setRaw")},i={...k(e.presentation?.applyOrientation)?{applyOrientation:e.presentation.applyOrientation.bind(e.presentation)}:{},...k(e.presentation?.onViewportChange)?{onViewportChange:e.presentation.onViewportChange.bind(e.presentation)}:{},close:k(e.presentation?.close)?e.presentation.close.bind(e.presentation):ne("presentation.close"),reload:k(e.presentation?.reload)?e.presentation.reload.bind(e.presentation):ne("presentation.reload"),openAppPage:k(e.presentation?.openAppPage)?e.presentation.openAppPage.bind(e.presentation):ne("presentation.openAppPage"),openWindow:k(e.presentation?.openWindow)?e.presentation.openWindow.bind(e.presentation):ne("presentation.openWindow"),getViewportMetrics:k(e.presentation?.getViewportMetrics)?e.presentation.getViewportMetrics.bind(e.presentation):Uo("presentation.getViewportMetrics"),getNavigationBarHeight:k(e.presentation?.getNavigationBarHeight)?e.presentation.getNavigationBarHeight.bind(e.presentation):Uo("presentation.getNavigationBarHeight"),setNavigationBarStyle:k(e.presentation?.setNavigationBarStyle)?e.presentation.setNavigationBarStyle.bind(e.presentation):ne("presentation.setNavigationBarStyle"),showShareMenu:k(e.presentation?.showShareMenu)?e.presentation.showShareMenu.bind(e.presentation):ne("presentation.showShareMenu"),setScreenshotChromeHidden:k(e.presentation?.setScreenshotChromeHidden)?e.presentation.setScreenshotChromeHidden.bind(e.presentation):Nl,captureAndShare:k(e.presentation?.captureAndShare)?e.presentation.captureAndShare.bind(e.presentation):ne("presentation.captureAndShare"),showToast:k(e.presentation?.showToast)?e.presentation.showToast.bind(e.presentation):ne("presentation.showToast"),showLoading:k(e.presentation?.showLoading)?e.presentation.showLoading.bind(e.presentation):ne("presentation.showLoading"),hideLoading:k(e.presentation?.hideLoading)?e.presentation.hideLoading.bind(e.presentation):ne("presentation.hideLoading"),vibrate:k(e.presentation?.vibrate)?e.presentation.vibrate.bind(e.presentation):ne("presentation.vibrate"),setClipboard:k(e.presentation?.setClipboard)?e.presentation.setClipboard.bind(e.presentation):ne("presentation.setClipboard")},o=k(e.storageDiagnostics?.listRaw)?{listRaw:e.storageDiagnostics.listRaw.bind(e.storageDiagnostics)}:void 0,s=Object.fromEntries(["getInfo","getPreparationStatus","prepare","cancelPreparation","getActiveSession","launch","write","closeStdin","terminate","ackOutput","openAttachment","showNotification"].map(a=>[a,k(e.companion?.[a])?e.companion[a].bind(e.companion):ne(`companion.${a}`)]));return k(e.companion?.onSessionEvent)&&(s.onSessionEvent=e.companion.onSessionEvent.bind(e.companion)),{network:t,account:r,storage:n,presentation:i,companion:s,...e.files===void 0?{}:{files:e.files},...e.picker===void 0?{}:{picker:e.picker},...e.transfer===void 0?{}:{transfer:e.transfer},...o?{storageDiagnostics:o}:{}}}function Cl(e){const t=Ll(e.files?.sandbox),r=k(e.picker?.pickFiles)&&k(e.picker?.pickDirectory),n=k(e.picker?.saveFile),i=t||r||n||k(e.companion?.openAttachment),o=t?e.files?.sandbox.file(".hb-remove-capability"):void 0;return{"account.getCurrentUserId":k(e.account?.getCurrentUserId),"account.ensureAuthenticated":k(e.account?.ensureAuthenticated),"account.onChange":k(e.account?.onChange),"network.request":k(e.network?.request),"network.stream":k(e.transfer?.network.open)&&k(e.transfer?.network.release),"files.sandbox":t,"files.external":r,"files.save":n,"files.access":i,"files.removeFile":k(o?.remove),"files.removeDirectory":k(e.files?.sandbox.remove),"files.transfer":k(e.transfer?.files.writeResource),"storage.getRaw":k(e.storage?.getRaw),"storage.setRaw":k(e.storage?.setRaw),"presentation.close":k(e.presentation?.close),"presentation.reload":k(e.presentation?.reload),"presentation.openAppPage":k(e.presentation?.openAppPage),"presentation.applyOrientation":k(e.presentation?.applyOrientation),"presentation.openWindow":k(e.presentation?.openWindow),"presentation.getViewportMetrics":k(e.presentation?.getViewportMetrics),"presentation.getNavigationBarHeight":k(e.presentation?.getNavigationBarHeight),"presentation.setNavigationBarStyle":k(e.presentation?.setNavigationBarStyle),"presentation.showShareMenu":k(e.presentation?.showShareMenu),"presentation.setScreenshotChromeHidden":!0,"presentation.captureAndShare":k(e.presentation?.captureAndShare),"presentation.showToast":k(e.presentation?.showToast),"presentation.showLoading":k(e.presentation?.showLoading),"presentation.hideLoading":k(e.presentation?.hideLoading),"presentation.vibrate":k(e.presentation?.vibrate),"presentation.setClipboard":k(e.presentation?.setClipboard),"companion.getInfo":k(e.companion?.getInfo),"companion.getPreparationStatus":k(e.companion?.getPreparationStatus),"companion.prepare":k(e.companion?.prepare),"companion.cancelPreparation":k(e.companion?.cancelPreparation),"companion.getActiveSession":k(e.companion?.getActiveSession),"companion.launch":k(e.companion?.launch),"companion.session.write":k(e.companion?.write),"companion.session.closeStdin":k(e.companion?.closeStdin),"companion.session.terminate":k(e.companion?.terminate),"companion.session.ackOutput":k(e.companion?.ackOutput),"companion.openAttachment":k(e.companion?.openAttachment),"companion.showNotification":k(e.companion?.showNotification)}}function Ll(e){if(!e||typeof e!="object")return!1;const t=e;return t.kind==="directory"&&(t.mode==="read"||t.mode==="readwrite")&&k(t.file)&&k(t.directory)&&k(t.create)&&k(t.stat)&&k(t.list)}function xo(e,t){return t?.[e]!==!1}function Ml(e){return e==="network.download"||e.startsWith("files.")||e.startsWith("file.")||e.startsWith("directory.")||e.startsWith("companion.")}function Xa(e,t={}){const r={};for(const n of Object.keys(ko)){const o=ko[n].every(a=>e[a]),s=!Ml(n)||!!t.miniProgramDetail?.miniProgramId.trim();r[n]=xo(n,t.callerCapabilities)&&xo(n,t.hostCapabilities)&&o&&s}return r}function Za(e={},t={}){const r=Cl(e),n=Xa(r,t);return{ports:Tl(e),primitiveAvailability:r,availablePrimitives:r,effectiveCapabilities:n}}function kn(e,t){if(!t||t===e.signal)return e;const r=typeof AbortSignal.any=="function"?AbortSignal.any([e.signal,t]):kl(e.signal,t);return{...e,signal:r}}function kl(e,t){const r=new AbortController,n=()=>{e.removeEventListener("abort",o),t.removeEventListener("abort",s)},i=a=>{r.signal.aborted||(n(),r.abort(a.reason))},o=()=>i(e),s=()=>i(t);return e.aborted?i(e):t.aborted?i(t):(e.addEventListener("abort",o,{once:!0}),t.addEventListener("abort",s,{once:!0})),r.signal}function Ul(e){if(!e||typeof e!="object"||e.lifecycle!=="cleanup")return!1;const t=e.signal;return!!t&&typeof t=="object"&&typeof t.aborted=="boolean"&&typeof t.addEventListener=="function"&&typeof t.removeEventListener=="function"}const xl=4,Hl=["xiaoheihe.cn","max-c.com","debugmode.cn","maxjia.com"],Fl=new Set(["connection","content-length","host","keep-alive","proxy-connection","te","trailer","transfer-encoding","upgrade"]),Bl=["/user_miniprogram/runtime/auth","/user_miniprogram/openapi/v1"],Vl=["/account/restore_login","/account/check_login","/account/login","/account/get_login_code","/account/login_code","/account/get_qrcode_url","/account/qr_state","/account/google_2fa_verify","/account/open/login","/account/captcha","/account/get_verify_code","/account/send_verify_code","/account/verify_code"];function ql(e,t){const r=jl(e);return r===null||Ho(r,Bl)?!0:t&&Ho(r,Vl)}function zl(e){const t=e.hostname.toLowerCase().replace(/\.$/,"");return Hl.some(r=>t===r||t.endsWith(`.${r}`))}function Gl(e){const t=e.trim().toLowerCase();return Fl.has(t)||/^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(t)}function jl(e){let t=e;for(let r=0;r<xl;r+=1){let n;try{n=decodeURIComponent(t)}catch{return null}if(n===t)return Fo(t);t=n}try{if(decodeURIComponent(t)!==t)return null}catch{return null}return Fo(t)}function Ho(e,t){return t.some(r=>e===r||e.startsWith(`${r}/`))}function Fo(e){const t=[];for(const r of e.replace(/\\/g,"/").split("/"))!r||r==="."||(r===".."?t.pop():t.push(r));return`/${t.join("/")}`}function lt(){const e=new Error("Runtime cache read cancelled");return e.name="AbortError",e}function Bo(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function ec(e={}){const t=e.now??Date.now,r=new WeakMap,n=new Map,i=new Set,o=new Map,s=new Set,a=new Set;let c=!1;function l(b,v){try{e.onEvent&&Promise.resolve(e.onEvent({namespace:b,type:v})).catch(()=>{})}catch{}}function g(b){const v=r.get(b);if(!v)throw new Error("Unknown runtime cache scope");return v}function m(b,v){return b.flatMap((A,P)=>{const _=JSON.stringify(b.slice(0,P+1));return[JSON.stringify([_]),JSON.stringify([_,v])]})}function u(b,v){return JSON.stringify(m(b,v).map(A=>n.get(A)??0))}async function p(b,v){const A=g(b),P=JSON.stringify([JSON.stringify(A),...v?[v]:[]]),_=(n.get(P)??0)+1;n.set(P,_),i.add(P);for(const L of a)L(A,v);if(!e.store){i.delete(P),l(v??"*","invalidation");return}try{await e.store.invalidate(A,v)}catch(L){throw l(v??"*","storage_error"),L}n.get(P)===_&&i.delete(P),l(v??"*","invalidation")}function O(b){if(c)throw new Error("Runtime cache manager disposed");const v=o.get(b.namespace);if(v){if(v.sourceCodec!==b.codec||v.definition.codec.version!==b.codec.version||JSON.stringify(v.definition.policy)!==JSON.stringify(b.policy))throw new Error("Conflicting runtime cache namespace");return v.cache}if(!b.namespace||!b.codec.version)throw new Error("Invalid runtime cache definition");const A=Object.freeze({...b.policy}),P=Object.freeze({version:b.codec.version,encode:b.codec.encode.bind(b.codec),decode:b.codec.decode.bind(b.codec),validate:b.codec.validate.bind(b.codec),clone:b.codec.clone.bind(b.codec)}),_=b.namespace;for(const D of[A.ttlMs,A.memoryMaxEntries,A.diskMaxEntries,A.diskMaxBytes,A.maxEntryBytes])if(!Number.isFinite(D)||D<0)throw new Error("Invalid runtime cache policy");const L=new Map,F=new Map,N=new Map;let I=!1;function d(D,M,R){if(c||I||D.aborted||u(M,_)!==R)throw lt()}function h(D){return A.ttlMs>0&&A.persistence==="memory-and-disk"&&!!e.store&&!m(D,_).some(M=>i.has(M))}function f(D,M,R){const U=t();return D.envelopeVersion===1&&JSON.stringify(D.address)===JSON.stringify(M)&&Bo(D.revisions,R)&&D.payload.byteLength<=A.maxEntryBytes&&Number.isFinite(D.cachedAt)&&Number.isFinite(D.expiresAt)&&D.cachedAt<=U&&D.cachedAt>=0&&D.expiresAt>D.cachedAt&&Math.min(D.expiresAt,D.cachedAt+A.ttlMs)>U}function y(D,M,R,U,x){if(!(A.ttlMs<=0||A.memoryMaxEntries<1)){for(const[H,q]of L)Math.min(q.entry.expiresAt,q.entry.cachedAt+A.ttlMs)<=t()&&L.delete(H);for(L.delete(D);L.size>=Math.floor(A.memoryMaxEntries);){const H=L.keys().next();if(H.done)break;L.delete(H.value)}L.set(D,{entry:M,value:R,epoch:U,persistent:x})}}async function w(D,M,R,U){const x={namespace:_,codecVersion:P.version,scopeIds:M,key:D.key},H=JSON.stringify(x);let q=[],z=h(M);if(z)try{q=await e.store.readRevisions(M,_)}catch{z=!1,l(_,"storage_error")}d(U.signal,M,R);async function G(){if(!z)return!0;try{return Bo(q,await e.store.readRevisions(M,_))}catch{return z=!1,l(_,"storage_error"),!1}}const ee=L.get(H);if(A.ttlMs>0&&ee&&ee.epoch===R&&f(ee.entry,x,q)&&ee.persistent===z&&await G())return d(U.signal,M,R),l(_,"memory_hit"),ee.value;if(L.delete(H),z){let j,fe;try{j=await e.store.read(x,A.maxEntryBytes),j&&f(j,x,q)?fe=P.decode(j.payload):j=void 0}catch{j=void 0,l(_,"storage_error")}if(d(U.signal,M,R),j&&await G())return d(U.signal,M,R),y(H,j,fe,R,!0),l(_,"disk_hit"),fe}l(_,"miss");const Z=P.validate(await D.load(U.signal));d(U.signal,M,R);const J=P.clone(Z);if(!await G()&&z)throw lt();if(d(U.signal,M,R),A.ttlMs>0){const j=t();let fe;try{fe=P.encode(J)}catch{return J}const Co={envelopeVersion:1,address:x,revisions:z?q:[],cachedAt:j,expiresAt:j+A.ttlMs,payload:fe};if(z&&fe.byteLength<=A.maxEntryBytes){let Wn=!0,Lo=!1;try{Wn=await e.store.publish(Co,A),Lo=Wn}catch{l(_,"storage_error")}if(d(U.signal,M,R),!Wn)throw lt();Lo&&l(_,"published")}d(U.signal,M,R),y(H,Co,J,R,z)}return J}async function S(D){if(c||I||D.signal?.aborted)return Promise.reject(lt());const M=g(D.scope),R=u(M,_);let U;if(h(M)){const z=new AbortController;N.set(z,M);const G=()=>z.abort();D.signal?.addEventListener("abort",G,{once:!0});let ee=()=>{};try{U=await Promise.race([e.store.readRevisions(M,_),new Promise((Z,J)=>{const j=()=>J(lt());z.signal.addEventListener("abort",j,{once:!0}),ee=()=>z.signal.removeEventListener("abort",j)})])}catch{z.signal.aborted||l(_,"storage_error")}finally{ee(),N.delete(z),D.signal?.removeEventListener("abort",G)}}d(D.signal??new AbortController().signal,M,R);const x=JSON.stringify([M,D.key,R,U]);let H=F.get(x);if(H?.controller.signal.aborted&&(H=void 0),!H){const z=new AbortController;H={ids:M,controller:z,waiters:0,promise:Promise.resolve(void 0)};const G=H;G.promise=w(D,M,R,z).finally(()=>{F.get(x)===G&&F.delete(x)}),F.set(x,G)}const q=H;return q.waiters+=1,new Promise((z,G)=>{let ee=!1;function Z(j){ee||(ee=!0,D.signal?.removeEventListener("abort",J),q.controller.signal.removeEventListener("abort",J),q.waiters-=1,q.waiters===0&&q.controller.abort(),j())}function J(){Z(()=>G(lt()))}D.signal?.addEventListener("abort",J,{once:!0}),q.controller.signal.addEventListener("abort",J,{once:!0}),q.promise.then(j=>Z(()=>{try{d(D.signal??new AbortController().signal,M,R),z(P.clone(j))}catch(fe){G(fe)}}),j=>Z(()=>G(j)))})}function T(D,M){if(M&&M!==_)return;const R=U=>D.every((x,H)=>U[H]===x);for(const[U,x]of L)R(x.entry.address.scopeIds)&&L.delete(U);for(const[U,x]of F)R(x.ids)&&(x.controller.abort(),F.delete(U));for(const[U,x]of N)R(x)&&U.abort()}function V(){if(!I){I=!0,L.clear();for(const D of N.keys())D.abort();N.clear();for(const D of F.values())D.controller.abort();F.clear(),s.delete(V),a.delete(T),o.get(_)?.cache===C&&o.delete(_)}}const C={read:S,invalidateScope:D=>p(D,_),dispose:V};return s.add(V),a.add(T),o.set(_,{definition:{namespace:_,codec:P,policy:A},sourceCodec:b.codec,cache:C}),C}return{createScope(b,v){if(c||!b)throw new Error("Invalid runtime cache scope");const A=Object.freeze({});return r.set(A,[...v?g(v):[],b]),A},register:O,invalidateScope:b=>p(b),dispose(){if(!c){c=!0;for(const b of[...s])b();o.clear(),n.clear(),i.clear()}}}}function $l(e){const t=new TextEncoder,r=new TextDecoder("utf-8",{fatal:!0});return{version:e.version,validate:e.validate,encode:n=>t.encode(JSON.stringify(n)),decode:n=>e.validate(JSON.parse(r.decode(n))),clone:n=>e.validate(JSON.parse(JSON.stringify(n)))}}const Wl=".hb-runtime-cache-v1",Kn=64*1024,ut=1e3,Kl=2048,Pt=32*1024*1024,Yl=1024,Pr=new TextEncoder,Vo=new TextDecoder("utf-8",{fatal:!0});function Tt(){return Object.assign(new Error("缓存文件操作已取消"),{name:"AbortError"})}async function Er(e){const t=await globalThis.crypto.subtle.digest("SHA-256",Pr.encode(JSON.stringify(e)));return Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("")}function _e(e,t){return JSON.stringify(e)===JSON.stringify(t)}function qo(){return Array.from(globalThis.crypto.getRandomValues(new Uint8Array(16)),e=>e.toString(16).padStart(2,"0")).join("")}function Ql(e){return!!e&&typeof e=="object"&&["METHOD_FORBIDDEN","NOT_SUPPORTED","UNSUPPORTED_OPERATION","ENOSYS","ENOTSUP","EOPNOTSUPP"].includes(String(e.code))}function zo(e,t){if(t.some(r=>typeof e[r]!="function"))throw Object.assign(new Error("Host 文件原语不完整,关闭磁盘缓存"),{code:"METHOD_FORBIDDEN"})}function Jl(e,t){const r=e.sandbox.directory(Wl),n=r.directory("revisions"),i=r.directory("entries");for(const d of[r,n,i,i.directory("capability-check")])zo(d,["directory","file","create","stat","list","remove"]),zo(d.file("capability-check"),["create","stat","read","write","remove"]);let o=Promise.resolve(),s=!1;function a(d){if(Ql(d))throw s=!0,d}function c(){if(t.signal.aborted)throw Tt();if(s)throw Object.assign(new Error("Host 不支持完整文件能力,磁盘缓存已关闭"),{code:"METHOD_FORBIDDEN"})}function l(d,h=t.signal){const f=o.then(()=>{if(h.aborted)throw Tt();return c(),d()},()=>{if(h.aborted)throw Tt();return c(),d()}).catch(S=>{throw a(S),S});if(o=f.catch(()=>{}),h.aborted)return Promise.reject(Tt());let y=()=>{};const w=new Promise((S,T)=>{const V=()=>T(Tt());h.addEventListener("abort",V,{once:!0}),y=()=>h.removeEventListener("abort",V)});return Promise.race([f,w]).finally(y)}async function g(){c(),await n.create({recursive:!0,exclusive:!1},t),await i.create({recursive:!0,exclusive:!1},t),c()}async function m(d,h){const f=n.file(`${await Er([d,h??null])}.revision`);await p(f);let y=!1;try{await f.create({recursive:!1,exclusive:!0},t),y=!0}catch(T){a(T),c()}if(y){const T=qo();return await f.write(Pr.encode(T),t),c(),T}const w=await f.stat(t);if(w.size<1||w.size>128)throw new Error("缓存 revision 文件损坏");const S=Vo.decode(await f.read(t));if(!/^(?:[0-9a-f]{32}|[0-9a-f-]{36})$/.test(S))throw new Error("缓存 revision 文件损坏");return c(),S}async function u(d){const h=await d.list({limit:ut},t);if(h.length>=ut)throw new Error("缓存目录超过治理上限");return h}async function p(d){try{await d.stat(t);return}catch(f){if(!wr(f))throw f}if((await u(n)).length>=ut-1)throw new Error("缓存 metadata 超过治理上限")}async function O(d,h){await g();const f=[];for(let y=0;y<d.length;y+=1){const w=d.slice(0,y+1);f.push(await m(w),await m(w,h))}return f}async function b(d){return r.directory(`entries/${await Er([d.namespace,d.codecVersion,d.scopeIds])}`)}async function v(d){return(await b(d)).file(`${await Er(d.key)}.cache`)}async function A(d,h){const f=await d.stat(t);if(f.size<5||f.size>h+Kn+4)throw new Error("缓存条目超过大小限制");const y=await d.read(t);if(c(),y.length!==f.size)throw new Error("缓存条目读取不完整");const w=new DataView(y.buffer,y.byteOffset,y.byteLength).getUint32(0);if(w<1||w>Kn||w+4>y.length)throw new Error("缓存信封损坏");const S=JSON.parse(Vo.decode(y.subarray(4,w+4))),T=y.slice(w+4);if(S.envelopeVersion!==1||!S.address||!Array.isArray(S.address.scopeIds)||!S.address.scopeIds.every(V=>typeof V=="string")||typeof S.address.namespace!="string"||typeof S.address.codecVersion!="string"||typeof S.address.key!="string"||!Array.isArray(S.revisions)||S.revisions.length!==S.address.scopeIds.length*2||!S.revisions.every(V=>typeof V=="string"&&V.length>0)||!Number.isSafeInteger(S.cachedAt)||!Number.isSafeInteger(S.expiresAt)||S.cachedAt<0||S.expiresAt<=S.cachedAt||S.payloadBytes!==T.length||T.length>h)throw new Error("缓存信封损坏");return{envelopeVersion:1,address:S.address,revisions:S.revisions,cachedAt:S.cachedAt,expiresAt:S.expiresAt,payload:T}}async function P(d){if(!d.remove)throw new Error("Host 不支持缓存文件删除");await d.remove(t)}async function _(d){try{if((await d.file.stat(t)).size!==d.size)return!1;const h=await A(d.file,Pt);return!_e(h.address,d.entry.address)||!_e(h.revisions,d.entry.revisions)||h.cachedAt!==d.entry.cachedAt||h.expiresAt!==d.entry.expiresAt||!_e(await L(h.payload),await L(d.entry.payload))?!1:(await P(d.file),!0)}catch(h){if(wr(h))return!0;throw h}}async function L(d){const h=await globalThis.crypto.subtle.digest("SHA-256",d);return Array.from(new Uint8Array(h),f=>f.toString(16).padStart(2,"0")).join("")}async function F(){const d=await u(n);let h=0;for(const S of d)if(S.kind==="file"&&(h+=(await S.stat(t)).size,h>Pt))throw new Error("缓存扫描超过字节上限");const f=[];let y=0,w=h;for(const S of await u(i)){if(S.kind!=="directory")throw new Error("缓存目录结构损坏");for(const T of await u(S)){if(T.kind!=="file"||++y>Kl)throw new Error("缓存文件超过治理上限");const V=(await T.stat(t)).size;if(w+=V,w>Pt)throw new Error("缓存扫描超过字节上限");try{const C=await A(T,Pt);f.push({file:T,entry:C,size:(await T.stat(t)).size,bucketName:S.name})}catch(C){a(C),c(),wr(C)||await P(T)}}}return{entries:f,metadataBytes:h}}async function N(){for(const d of await u(i))if(d.kind==="directory"&&d.remove&&(await u(d)).length===0)try{await d.remove({recursive:!1},t)}catch(h){a(h),c()}}function I(d){const{payload:h,...f}=d,y=Pr.encode(JSON.stringify({...f,payloadBytes:h.length}));if(y.length>Kn)throw new Error("缓存信封过大");const w=new Uint8Array(4+y.length+h.length);return new DataView(w.buffer).setUint32(0,y.length),w.set(y,4),w.set(h,y.length+4),w}return{readRevisions:(d,h)=>l(()=>O(d,h)),read:(d,h)=>l(async()=>{c();const f=await v(d);let y;try{y=await A(f,h)}catch(w){if(c(),wr(w))return;throw w}if(!(!_e(y.address,d)||y.expiresAt<=Date.now())&&_e(y.revisions,await O(d.scopeIds,d.namespace)))return y}),publish:(d,h)=>l(async()=>{c();const{address:f}=d;if(!_e(d.revisions,await O(f.scopeIds,f.namespace)))return!1;const y=I(d);if(d.payload.length>h.maxEntryBytes||y.length>h.diskMaxBytes||h.diskMaxEntries<1)throw new Error("缓存条目超出容量预算");await g();const w=await b(f),S=await v(f),T=await F(),V=[],C=new Map;for(const R of T.entries){if(R.bucketName===w.name&&R.file.name===S.name)continue;const U=JSON.stringify([R.entry.address.scopeIds,R.entry.address.namespace]);let x=C.get(U);if(x||(x=await O(R.entry.address.scopeIds,R.entry.address.namespace),C.set(U,x)),R.entry.expiresAt<=Date.now()||!_e(R.entry.revisions,x)){if(!await _(R))throw new Error("缓存治理期间条目已变化")}else V.push(R)}V.sort((R,U)=>R.entry.cachedAt-U.entry.cachedAt);function D(){const R=V.filter(U=>U.bucketName===w.name);return V.length+1>Yl||y.length+T.metadataBytes+V.reduce((U,x)=>U+x.size,0)>Pt||R.length+1>Math.min(h.diskMaxEntries,ut-1)||y.length+R.reduce((U,x)=>U+x.size,0)>h.diskMaxBytes}for(;D();){const R=V.filter(H=>H.bucketName===w.name),x=R.length+1>Math.min(h.diskMaxEntries,ut-1)||y.length+R.reduce((H,q)=>H+q.size,0)>h.diskMaxBytes?R[0]:V[0];if(!x||!await _(x))throw new Error("缓存容量不足或条目已变化");V.splice(V.indexOf(x),1)}await N();const M=await u(i);if(!M.some(R=>R.name===w.name)&&M.length>=ut-1)throw new Error("缓存目录超过治理上限");if(await w.create({recursive:!0,exclusive:!1},t),!_e(d.revisions,await O(f.scopeIds,f.namespace)))return!1;try{await S.create({recursive:!1,exclusive:!0},t)}catch(R){a(R),await S.stat(t)}return await S.write(y,t),c(),_e(d.revisions,await O(f.scopeIds,f.namespace))}),invalidate:(d,h)=>l(async()=>{await g();const f=n.file(`${await Er([d,h??null])}.revision`);await p(f);try{await f.create({recursive:!1,exclusive:!0},t)}catch(y){a(y),await f.stat(t)}await f.write(Pr.encode(qo()),t),c();try{const{entries:y}=await F();for(const w of y){if(h!==void 0&&w.entry.address.namespace!==h||!d.every((T,V)=>w.entry.address.scopeIds[V]===T))continue;const S=await O(w.entry.address.scopeIds,w.entry.address.namespace);_e(w.entry.revisions,S)||await _(w)}await N()}catch(y){a(y),c()}})}}function wr(e){return!!e&&typeof e=="object"&&["FILE_NOT_FOUND","ENOENT","NOT_FOUND"].includes(String(e.code))}const Xl="RATE_LIMITED_BY_RUNTIME",Zl="RATE_LIMITED",tc=20,rc=40,nc=150,ic=20,oc=1e4,sc=45e3,ac=1,eu=300*1e3,tu=64;function ft(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function ru(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):t}function nu(e={}){const t=e.now??Date.now,r=ru(e.coalesceWindowMs,nc),n=e.budget===!1?void 0:{ratePerSecond:Math.max(.001,ft(e.budget?.ratePerSecond,tc)),burst:Math.max(1,Math.floor(ft(e.budget?.burst,rc)))},i=e.loopDetection===!1?void 0:{maxCalls:Math.max(1,Math.floor(ft(e.loopDetection?.maxCalls,ic))),windowMs:Math.max(1,Math.floor(ft(e.loopDetection?.windowMs,oc)))},o=e.circuitBreaker===!1?void 0:{failureThreshold:Math.max(1,Math.floor(ft(e.circuitBreaker?.failureThreshold,ac))),openMs:Math.max(1,Math.floor(ft(e.circuitBreaker?.openMs,sc)))},s=new Map,a=new Map,c=new Set,l=new Map,g=n?{tokens:n.burst,updatedAt:t()}:{tokens:0,updatedAt:0},m={coalesced:0,budgetRejected:0,loopRejected:0,circuitOpened:0,circuitRejected:0};let u=!1;function p(I){try{e.onReport?.(I)}catch{}}function O(I,d){if(!i)return{exceeded:!1,count:0};const h=a.get(I)??[],f=d-i.windowMs;let y=0;for(;y<h.length&&h[y]<=f;)y+=1;y>0&&h.splice(0,y);const w=h.length>=i.maxCalls;return w||(h.push(d),h.length>i.maxCalls+1&&h.splice(0,h.length-(i.maxCalls+1))),a.set(I,h),{exceeded:w,count:h.length}}function b(I){if(!n)return!0;const d=Math.max(0,I-g.updatedAt)/1e3;return g.tokens=Math.min(n.burst,g.tokens+d*n.ratePerSecond),g.updatedAt=I,g.tokens<1?!1:(g.tokens-=1,!0)}function v(I){if(!n)return 0;const d=Math.max(0,I-g.updatedAt)/1e3,h=Math.min(n.burst,g.tokens+d*n.ratePerSecond);return Math.max(0,Math.ceil((1-h)/n.ratePerSecond*1e3))}function A(I,d,h,f,y){if(!o)return;const w=l.get(d),S=(w?.open?0:w?.failures??0)+1;if(S<o.failureThreshold){l.set(d,{open:!1,openedAt:0,openMs:0,failures:S});return}const T=Math.min(Math.max(o.openMs,f),eu);l.set(d,{open:!0,openedAt:y,openMs:T,failures:S}),m.circuitOpened+=1,p({type:"circuit_opened",capability:I,endpointId:d,status:h,openMs:T,timestamp:y})}function P(I){const d=l.get(I);d&&!d.open&&l.delete(I)}function _(I){for(const[d,h]of s)!h.pending&&h.expiresAt<=I&&s.delete(d);for(;s.size>=tu;){const d=[...s].find(([,h])=>!h.pending);if(!d)break;s.delete(d[0])}}function L(I,d){if(I===void 0)return;const h=s.get(I);h?.promise===d&&(h.pending=!1)}function F(I,d){if(I===void 0)return;s.get(I)?.promise===d&&s.delete(I)}async function N(I){if(u)return I.load();const d=t();if(o){const w=l.get(I.endpointId);if(w?.open){const S=w.openedAt+w.openMs-d;if(S>0)throw m.circuitRejected+=1,p({type:"circuit_rejected",capability:I.capability,endpointId:I.endpointId,retryAfterMs:S,timestamp:d}),su("上游已被网关限流,Runtime 熔断中,请稍后重试",{origin:"circuit",reason:"circuit_open",endpointId:I.endpointId,retryAfterMs:S});l.delete(I.endpointId)}}const h=O(I.endpointId,d);h.exceeded&&i?c.has(I.endpointId)||(c.add(I.endpointId),p({type:"loop_detected",capability:I.capability,endpointId:I.endpointId,count:h.count,windowMs:i.windowMs,timestamp:d})):c.delete(I.endpointId);const f=r>0?I.coalesceKey:void 0;if(f!==void 0){const w=s.get(f);if(w&&(w.pending||w.expiresAt>d))return m.coalesced+=1,p({type:"coalesced",capability:I.capability,endpointId:I.endpointId,timestamp:d}),w.promise;w&&s.delete(f)}if(h.exceeded&&i)throw m.loopRejected+=1,Go("检测到同一 endpoint 的高频循环调用,本次请求已在 Runtime 本地拒绝",{origin:"loop",reason:"loop",capability:I.capability,endpointId:I.endpointId,count:h.count,windowMs:i.windowMs});if(!b(d)){m.budgetRejected+=1;const w=v(d);throw p({type:"budget_exhausted",capability:I.capability,endpointId:I.endpointId,retryAfterMs:w,timestamp:d}),Go("请求过于频繁,已触发 Runtime 本地配额限制",{origin:"budget",reason:"budget",capability:I.capability,endpointId:I.endpointId,retryAfterMs:w})}f!==void 0&&_(d);const y=I.load().then(w=>(L(f,y),P(I.endpointId),w),w=>{F(f,y);const S=iu(w);throw S!==void 0&&A(I.capability,I.endpointId,S,ou(w),d),w});return f!==void 0&&s.set(f,{promise:y,expiresAt:d+r,pending:!0}),y}return{execute:N,invalidateCoalescing(){s.clear()},snapshot(){return{...m,openCircuits:[...l.entries()].filter(([,I])=>I.open).map(([I])=>I)}},dispose(){u||(u=!0,s.clear(),a.clear(),c.clear(),l.clear())}}}function iu(e){if(typeof e!="object"||e===null)return;const t=e.status;if(!(typeof t!="number"||!Number.isInteger(t)))return t===403||t===429?t:void 0}function ou(e){if(typeof e!="object"||e===null)return 0;const t=e.retryAfterMs;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}function Go(e,t){return{code:Xl,message:e,data:t}}function su(e,t){return{code:Zl,message:e,data:t}}const cc=3e4,dc=6e4,ki=1440*60*1e3;function au(e){const t=e!==!1&&(e?.enabled??!0),r=e===!1?void 0:e;return{enabled:t,debugReport:t&&r?.debugReport===!0,identityTtlMs:t?Math.max(0,Math.floor(r?.identityTtlMs??cc)):0,profileTtlMs:t?Math.max(0,Math.floor(r?.profileTtlMs??dc)):0,steamGameListTtlMs:t?cu(r?.steamGameListTtlMs):0,gateOptions:{budget:r?.budget??{ratePerSecond:tc,burst:rc},coalesceWindowMs:r?.coalesceWindowMs??nc,loopDetection:r?.loopDetection??{maxCalls:ic,windowMs:oc},circuitBreaker:r?.circuitBreaker??{failureThreshold:ac,openMs:sc}}}}function cu(e){return e===void 0||!Number.isFinite(e)?ki:Math.max(0,Math.floor(e))}function E(e,t,r){return r===void 0?{code:e,message:t}:{code:e,message:t,data:r}}function B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function du(e){return typeof e=="object"&&e!==null}function ge(e,t){const r=e.data;if(!du(r)||typeof r.status!="string")throw new Error(t);return r}const lc={auth:"optional",channel:"api",id:"heybox.account.user_base_info.envelope.get",method:"GET",path:"/account/get_user_base_info"},lu={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.public.detail.get",method:"GET",path:"/user_miniprogram/public/detail",query(e){return{mini_program_id:e.mini_program_id,...e.miniprogram_version?{miniprogram_version:e.miniprogram_version}:{},...e.preview_token?{preview_token:e.preview_token}:{},...e.local_dev_launch_token?{local_dev_launch_token:e.local_dev_launch_token}:{},...e.entry?{entry:e.entry}:{},...e.h_src_parent?{h_src_parent:e.h_src_parent}:{},...e.extra!==void 0?{extra:e.extra}:{}}},parse(e,t){return ge(e,"工坊小程序详情加载失败")}};function dr(e){const t=e.runtimeAuthContextToken?.trim();return{mini_program_id:e.miniProgramId,...t?{runtime_auth_context_token:t}:{}}}function uu(e){return{challenge:e.challenge,expiresIn:e.expires_in,requestedScopes:e.requested_scopes||[],displayedScopes:e.displayed_scopes||[],consentUiVersion:e.consent_ui_version}}function fu(e){const t=ge(e,"小程序登录授权接口响应异常"),r=t.result,n={};if(r.login_code&&typeof r.login_code=="object"){const i=r.login_code;n.loginCode={code:i.code,expiresIn:i.expires_in,scopes:i.scopes||[]}}return r.consent_challenge&&typeof r.consent_challenge=="object"&&(n.consentChallenge=uu(r.consent_challenge)),{...t,result:n}}const hu={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.authorization.cancel.post",method:"POST",path:"/user_miniprogram/runtime/auth/authorization/cancel",body:e=>({...dr(e.runtimeContext),challenge:e.challenge}),parse:e=>ge(e,"小程序授权取消接口响应异常")},mu={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.authorization.revoke.post",method:"POST",path:"/user_miniprogram/runtime/auth/authorization/revoke",body:e=>dr(e.runtimeContext),parse:e=>ge(e,"小程序授权撤销接口响应异常")},pu={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.local_identity.post",method:"POST",path:"/user_miniprogram/runtime/local_identity",body:e=>dr(e.runtimeContext),parse(e){const t=ge(e,"小程序隔离身份接口响应异常"),r=typeof t.result.steam_id=="string"&&t.result.steam_id.trim()?t.result.steam_id.trim():void 0;return{...t,result:{appUserId:t.result.app_user_id,...r?{steamId:r}:{}}}}},gu={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.login.begin.post",method:"POST",path:"/user_miniprogram/runtime/auth/login/begin",body:e=>({...dr(e.runtimeContext),...e.scopes?.length?{scopes:e.scopes.join(",")}:{}}),parse:e=>fu(e)},yu={auth:"none",bodyEncoding:"form",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.runtime.auth.login.confirm.post",method:"POST",path:"/user_miniprogram/runtime/auth/login/confirm",body:e=>({...dr(e.runtimeContext),challenge:e.challenge,...e.selectedScopes.length?{selected_scopes:e.selectedScopes.join(",")}:{}}),parse(e){const t=ge(e,"小程序登录确认接口响应异常");return{...t,result:{code:t.result.code,expiresIn:t.result.expires_in,scopes:t.result.scopes}}}},Eu=64;function uc(e){const t=e.ttlMs,r=Math.max(1,Math.floor(e.maxEntries??Eu)),n=e.now??Date.now,i=new Map,o=new Map;let s=0,a=!1;function c(m){for(const[u,p]of i)p.expiresAt<=m&&i.delete(u)}function l(m,u,p){if(a||t<=0||p!==s)return;const O=n();for(c(O),i.delete(m);i.size>=r;){const b=i.keys().next();if(b.done)break;i.delete(b.value)}i.set(m,{expiresAt:O+t,value:u})}function g(m,u){if(a)return u();if(t>0){const v=i.get(m);if(v&&v.expiresAt>n())return Promise.resolve(v.value);v&&i.delete(m)}const p=o.get(m);if(p)return p;const O=s,b=u().then(v=>(l(m,v,O),v)).finally(()=>{o.get(m)===b&&o.delete(m)});return o.set(m,b),b}return{read:g,invalidate(){s+=1,i.clear(),o.clear()},dispose(){a||(a=!0,s+=1,i.clear(),o.clear())},get size(){return i.size}}}function wu(e){const t=Ue(e);return t.valid&&t.permissions.network?.status==="enabled"}function fc(e,t){return t?e?"server":"local":"legacy"}function bu(e,t){return fc(wu(e),t)}function jo(e,t){if(e==="server")throw E("SERVER_API_REQUIRED",`${t} 在联网模式下必须通过开发者服务端 OpenAPI 获取`)}function Au(e,t){if(e==="local")throw E("SERVER_API_REQUIRED",`${t} 需要 effective network 启用后才能使用`)}const Iu=["baseURL","errorMode","jsonParseMode","observability","queryEncoding","responseType","security"],_u=new Set(["auth","body","bodyEncoding","channel","failurePresentation","headers","id","method","parse","path","query","timeout"]),Su=/authorization|cookie|pkey|password|secret|token/i,hc=/authorization|cookie|pkey|token|password|secret/i;function Se(e,t){return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function vu(e){for(const t of Object.keys(e))if(!_u.has(t))throw new oe(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);for(const t of Iu)if(Object.prototype.hasOwnProperty.call(e,t)&&Se(e,t)!==void 0)throw new oe(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);if(Se(e,"bodyEncoding")!==void 0&&Se(e,"bodyEncoding")!=="json"&&Se(e,"bodyEncoding")!=="form")throw new oe("endpoint bodyEncoding 不受 HostNetworkPort 支持");if(Se(e,"failurePresentation")!==void 0&&Se(e,"failurePresentation")!=="none")throw new oe("endpoint failurePresentation 必须为 none");if(Se(e,"auth")!==void 0&&Se(e,"auth")!=="none"&&Se(e,"auth")!=="optional"&&Se(e,"auth")!=="required")throw new oe("endpoint auth 必须为 none、optional 或 required")}function Vt(e){if(Array.isArray(e))return e.map(Vt);if(!e||typeof e!="object")return e;const t=e,r={};for(const[n,i]of Object.entries(t))Su.test(n)||(r[n]=Vt(i));return r}function $o(e){if(!e)return;const t={};for(const[r,n]of Object.entries(e))hc.test(r)||(t[r]=n);return t}function Ru(e){if(!e)return;const t=Object.keys(e).find(r=>hc.test(r));if(t)throw new oe(`endpoint 禁止声明 credential-bearing header: ${t}`)}class St extends Error{code="INTERNAL_ENDPOINT_HTTP_STATUS";endpointId;status;retryAfterMs;constructor(t){super(`内部 endpoint 请求失败: HTTP ${t.status}`),this.name="InternalEndpointHttpStatusError",this.endpointId=t.endpointId,this.status=t.status,t.retryAfterMs!==void 0&&(this.retryAfterMs=t.retryAfterMs),Object.setPrototypeOf(this,new.target.prototype)}}const Wo=1440*60*1e3,Ou=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\b/i;function Du(e,t=Date.now){if(!e)return;const r=Object.entries(e).find(([s])=>s.trim().toLowerCase()==="retry-after")?.[1];if(typeof r!="string"||!r.trim())return;const n=r.trim();if(/^\d+$/.test(n)){const s=Number(n)*1e3;return s>0?Math.min(s,Wo):void 0}if(!Ou.test(n))return;const i=Date.parse(n);if(!Number.isFinite(i))return;const o=i-t();return o>0?Math.min(o,Wo):void 0}function Nu(e,t,r,n){if(e.method!=="GET")return;let i;try{i=JSON.stringify([t??null,r??null])??"undefined"}catch{return}return`${e.id}\0${n}\0${i}`}function mc(e,t){Object.defineProperty(e,"cause",{configurable:!1,enumerable:!1,value:t,writable:!1})}class vt extends Error{code="INTERNAL_ENDPOINT_REQUEST_FAILED";endpointId;constructor(t){super(`内部 endpoint 请求执行失败: ${t.endpointId}`),this.name="InternalEndpointRequestError",this.endpointId=t.endpointId,mc(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}class lr extends Error{code="INTERNAL_ENDPOINT_PARSE_FAILED";endpointId;constructor(t){super(`内部 endpoint 响应解析失败: ${t.endpointId}`),this.name="InternalEndpointParseError",this.endpointId=t.endpointId,mc(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}function Pu(e,t,r,n,i,o,s,a){return{config:{auth:e.auth,body:Vt(i),bodyEncoding:e.bodyEncoding,channel:e.channel,credentials:s.credentials,headers:$o(o),method:e.method,metadata:{endpointId:e.id},query:Vt(n),timeout:e.timeout,url:r},data:Vt(a.data),headers:$o(a.headers)||{},status:a.status,statusText:a.statusText}}async function Un(e,t,r,n){if(!n||!n.signal)throw new TypeError("requestEndpoint requires an AbortSignal");if(n.credentials!=="heybox-session"&&n.credentials!=="omit")throw new TypeError("requestEndpoint requires explicit credentials");if(vu(t),typeof t.id!="string"||!t.id)throw new oe("endpoint id 必须为非空字符串");if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(t.method))throw new oe("endpoint method 不受 HostNetworkPort 支持");const i=typeof t.path=="function"?await t.path(r):t.path;if(typeof i!="string"||!i)throw new oe("endpoint path 必须为非空字符串");const o=t.query?await t.query(r):void 0,s=t.body?await t.body(r):void 0,a=t.headers?await t.headers(r):void 0;Ru(a);const c=async()=>{let m;try{m=await e.request({source:"runtime-private",redirectPolicy:"error",target:{kind:"heybox-api",endpointId:t.id,...t.channel?{channel:t.channel}:{},path:i},method:t.method,...o===void 0?{}:{params:o},...s===void 0?{}:{data:s},...a===void 0?{}:{headers:a},credentials:n.credentials,...t.bodyEncoding===void 0?{}:{bodyEncoding:t.bodyEncoding},...t.timeout===void 0?{}:{timeout:t.timeout}},{signal:n.signal,...n.miniProgramDetail===void 0?{}:{miniProgramDetail:n.miniProgramDetail}})}catch(p){throw p instanceof oe?p:new vt({endpointId:t.id,cause:p})}if(m.status<200||m.status>=300)throw new St({endpointId:t.id,status:m.status,retryAfterMs:Du(m.headers)});const u=Pu(t,r,i,o,s,a,n,m);if(t.parse)try{return await t.parse(u,r)}catch(p){throw new lr({endpointId:t.id,cause:p})}return u.data},l=n.gate;if(!l)return c();const g=Nu(t,o,s,n.credentials);return l.gate.execute({capability:l.capability,endpointId:t.id,...g===void 0?{}:{coalesceKey:g},load:c})}const Tu=new Set(_t),fo="steam_account",pc=new Set(_t.filter(e=>e!==fo)),Cu=1e3;function Lu(e){const t=new Set,r=uc({ttlMs:Math.max(0,Math.floor(e.identityTtlMs??cc))}),n=new Set;let i=0,o=!1,s=Promise.resolve(),a;const c=e.steamAccount===!0,l=e.userDataMode??fc(e.networkEnabled===!0,c),g=e.requestPolicyEnabled!==!1,m=e.requestGate?{capability:"auth",gate:e.requestGate}:void 0;async function u(){if(!c)return{};if(!e.authorizationContext)throw E("METHOD_FORBIDDEN","新能力版本缺少 Runtime auth context Port");let C;try{C=await e.authorizationContext.get(e.operationContext)}catch{throw E("REQUEST_FAILED","读取 Runtime auth context 失败")}if(C.steamAccount!==c||C.userDataMode!==l)throw E("AUTHORIZATION_CONTEXT_CHANGED","Runtime auth context 已变化,请重新打开小程序");const D=C.token.trim();if(!D)throw E("REQUEST_FAILED","Runtime auth context 为空");return{runtimeAuthContextToken:D}}const p=e.account.onChange(C=>{O(),b("heybox_app_login_change",{isHeyboxAppLoggedIn:!!C})});function O(){i+=1,a?.abort(),r.invalidate(),e.requestGate?.invalidateCoalescing(),n.clear()}function b(C,D){C==="user_info_authorization_change"&&Bu(D)&&r.invalidate();for(const M of t)try{M(C,D)}catch{}}function v(){const C=e.identity.get()?.miniProgramId?.trim();if(!C)throw E("INVALID_STATE","当前能力缺少 canonical 小程序身份");return C}function A(){if(o||e.operationContext.signal.aborted)throw E("RUNTIME_DESTROYED","小程序 Runtime 已终止")}async function P(){A();let C;try{C=await e.account.getCurrentUserId(e.operationContext)}catch(D){throw Jo(D,e.operationContext.signal,"读取小黑盒账号失败")}return typeof C=="string"&&C.trim()?C.trim():void 0}async function _(C,D){const M=await P();if(i!==D||M!==C)throw E("AUTHORIZATION_CONTEXT_CHANGED","授权期间账号上下文已变化,请重新操作")}async function L(C){A();try{await e.account.ensureAuthenticated({trustedUserGesture:C,reason:"runtime_auth",signal:e.operationContext.signal})}catch(M){throw Jo(M,e.operationContext.signal,"小黑盒登录失败")}const D=await P();if(!D)throw E("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");return D}async function F(C,D,M=e.operationContext.signal){try{if(M.aborted)throw Ui();return await Fu(Un(e.network,C,D,{...e.operationContext,credentials:"heybox-session",signal:M,...m?{gate:m}:{}}),M)}catch(R){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):R instanceof oe?E("REQUEST_UNSUPPORTED",R.message):R instanceof lr?E("INVALID_RESPONSE","授权接口响应不合法"):R instanceof vt?E("REQUEST_FAILED","授权请求失败"):R instanceof St?g&&(R.status===403||R.status===429)?E("RATE_LIMITED","授权请求已被网关限流,请稍后重试",{status:R.status,...R.retryAfterMs===void 0?{}:{retryAfterMs:R.retryAfterMs}}):E("REQUEST_FAILED",R.message):gc(R)?R:E("REQUEST_FAILED","授权请求失败")}}async function N(C,D){await F(hu,{runtimeContext:{miniProgramId:C,...await u()},challenge:D}).catch(()=>{})}function I(C){const D=async()=>{const R=Yo(e.operationContext.signal);a=R;try{return await C(R.signal)}finally{a===R&&(a=void 0),R.abort()}},M=s.then(D,D);return s=M.then(()=>{},()=>{}),M}async function d(C,D,M,R,U){if(!M)throw await N(C,D.challenge),E("USER_GESTURE_REQUIRED","展示授权确认需要用户手势");if(!e.authPresentation)throw await N(C,D.challenge),E("AUTHORIZATION_PRESENTATION_UNAVAILABLE","授权确认界面不可用");return I(async x=>{await _(R,U);const H=await h(C,D.displayedScopes,x);await _(R,U);let q;try{q=await e.authPresentation.confirmAuthorization({miniProgramId:C,scopes:D.displayedScopes,...H,signal:x})}catch(G){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):(await _(R,U),await N(C,D.challenge),Mu("REQUEST_FAILED","授权确认界面执行失败",G))}if(await _(R,U),q.status!=="granted")throw await N(C,D.challenge),E("AUTHORIZATION_CANCELLED","用户取消授权");const z=xu(q.grantedScopes,D.displayedScopes,c);if(!z.includes("identity"))throw await N(C,D.challenge),E("AUTHORIZATION_CANCELLED","用户拒绝授权");return z})}async function h(C,D,M){const R=Yo(M),U=setTimeout(()=>R.abort(),Cu);try{const x=Hu(e.miniProgramPresentation),[H,q]=await Promise.all([x?Promise.resolve(x):f(C,R.signal),D.includes("profile")?y(R.signal):Promise.resolve(void 0)]);return{...H?{miniProgram:H}:{},...q?{userProfile:q}:{}}}finally{clearTimeout(U),R.abort()}}async function f(C,D){try{const M=e.identity.get()?.version?.trim(),R=await F(lu,{mini_program_id:C,...M?{miniprogram_version:M}:{}},D),U=ht(R,"小程序公开资料"),x=At(U.name),H=At(U.icon_url);return x||H?{...x?{name:x}:{},...H?{avatarUrl:H}:{}}:void 0}catch{return}}async function y(C){try{const D=await F(lc,void 0,C),M=ht(D,"账号基础信息"),R=At(M.display_username),U=At(M.display_avatar);return R||U?{...R?{nickname:R}:{},...U?{avatar:U}:{}}:void 0}catch{return}}async function w(C,D){if(Au(l,"auth.login"),!c&&C.includes(fo))throw E("INVALID_PARAMS","auth.login 参数不合法");const M=v(),R=await L(D),U=i,x=await F(gu,{runtimeContext:{miniProgramId:M,...await u()},scopes:C});await _(R,U);const H=ht(x,"小程序登录"),q=Qo(H,"loginCode"),z=Qo(H,"consentChallenge");if(q===z)throw E("INVALID_RESPONSE","小程序登录 begin 必须返回 exact oneof");let G;if(q)G=Ko(H.loginCode,c);else{const ee=ku(H.consentChallenge,c),Z=await d(M,ee,D,R,U);await _(R,U);const J=await F(yu,{runtimeContext:{miniProgramId:M,...await u()},challenge:ee.challenge,selectedScopes:Z});if(await _(R,U),G=Ko(ht(J,"小程序登录确认"),c),G.scopes.some(j=>!Z.includes(j)))throw E("INVALID_RESPONSE","小程序登录确认返回了未选择的 scope")}n.clear();for(const ee of G.scopes)n.add(ee);return r.invalidate(),b("heybox_app_login_change",{isHeyboxAppLoggedIn:!0}),b("user_info_authorization_change",Yn(n,c)),G}async function S(C,D){const M=i,R=await F(pu,{runtimeContext:{miniProgramId:D,...await u()}});await _(C,M);const U=Uu(ht(R,"用户本地身份"),c);for(const x of c?_t:pc)n.add(x);return b("user_info_authorization_change",Yn(n,c)),U}function T(C){A();const D=v(),M=`${C}\0${D}\0${i}\0${c}`;return r.read(M,()=>S(C,D))}async function V(C){if(!C)throw E("USER_GESTURE_REQUIRED","撤销授权需要用户手势");const D=v(),M=i,R=await P();if(!R)throw E("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");const U=await F(mu,{runtimeContext:{miniProgramId:D,...await u()}});await _(R,M),ht(U,"用户授权撤销"),O(),b("user_info_authorization_change",{identity:"denied",profile:"denied",...c?{steam_account:"denied"}:{}})}return{login:w,getOrCreateLocalIdentity:T,invalidateLocalIdentity(){r.invalidate()},getAuthorization:()=>Yn(n,c),revoke:V,onEvent(C){return t.add(C),()=>t.delete(C)},dispose(){o||(o=!0,O(),r.dispose(),p(),t.clear())}}}function Mu(e,t,r){const n=E(e,t);return Object.defineProperty(n,"cause",{configurable:!0,enumerable:!1,value:r}),n}function ht(e,t){if(!B(e))throw E("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw E(n,r)}if(!B(e.result))throw E("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Ko(e,t){if(!B(e))throw E("INVALID_RESPONSE","login code 必须是对象");const r=gn(e.scopes,"login code scopes",t);if(typeof e.code!="string"||!e.code.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!r.includes("identity"))throw E("INVALID_RESPONSE","login code 响应不合法");return{code:e.code,expiresIn:Number(e.expiresIn),scopes:r}}function ku(e,t){if(!B(e))throw E("INVALID_RESPONSE","授权 challenge 必须是对象");const r=gn(e.requestedScopes,"challenge requestedScopes",t),n=gn(e.displayedScopes,"challenge displayedScopes",t);if(typeof e.challenge!="string"||!e.challenge.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!Number.isInteger(e.consentUiVersion)||Number(e.consentUiVersion)<0||!r.length||!r.includes("identity")||!n.length||!n.includes("identity")||r.some(i=>!n.includes(i)))throw E("INVALID_RESPONSE","授权 challenge 响应不合法");return{challenge:e.challenge.trim(),requestedScopes:r,displayedScopes:n}}function Uu(e,t){if(!B(e)||typeof e.appUserId!="string"||!e.appUserId.trim())throw E("INVALID_RESPONSE","本地身份 appUserId 必须是非空字符串");const r=e.appUserId.trim();if(!t)return{appUserId:r};if(e.steamId!==void 0&&typeof e.steamId!="string")throw E("INVALID_RESPONSE","本地身份 steamId 必须是字符串");const n=typeof e.steamId=="string"&&e.steamId.trim()?e.steamId.trim():void 0;return n?{appUserId:r,steamId:n}:{appUserId:r}}function xu(e,t,r){const n=gn(e,"授权选择 scopes",r);if(n.some(i=>!t.includes(i)))throw E("INVALID_RESPONSE","授权选择包含未展示的 scope");return n}function At(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Hu(e){const t=At(e?.name),r=At(e?.avatarUrl);return t||r?{...t?{name:t}:{},...r?{avatarUrl:r}:{}}:void 0}function Yo(e){const t=new AbortController;return e.aborted?t.abort(e.reason):e.addEventListener("abort",()=>t.abort(e.reason),{once:!0,signal:t.signal}),t}function Fu(e,t){return t.aborted?Promise.reject(Ui()):new Promise((r,n)=>{let i=!1;const o=a=>{i||(i=!0,t.removeEventListener("abort",s),a())},s=()=>o(()=>n(Ui()));t.addEventListener("abort",s,{once:!0}),e.then(a=>o(()=>r(a)),a=>o(()=>n(a)))})}function Ui(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function gn(e,t,r){const n=r?Tu:pc;if(!Array.isArray(e)||e.some(i=>typeof i!="string"||!n.has(i))||new Set(e).size!==e.length)throw E("INVALID_RESPONSE",`${t} 不合法`);return[...e]}function Yn(e,t){const r=t?_t:_t.filter(n=>n!==fo);return Object.fromEntries(r.map(n=>[n,e.has(n)?"granted":"not_requested"]))}function Qo(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Bu(e){return B(e)?Object.values(e).some(t=>t==="denied"):!1}function gc(e){return B(e)&&typeof e.code=="string"&&typeof e.message=="string"}function Jo(e,t,r){return t.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):gc(e)?e:E("REQUEST_FAILED",r)}const Vu=new Set(_t);function qu(e){return{[Vr]:async(t,r)=>e.authorization.login(zu(t),r.trustedUserGesture)}}function zu(e){if(e===void 0)return["identity"];if(!B(e)||Object.keys(e).some(t=>t!=="scopes"))throw Xo();if(e.scopes===void 0)return["identity"];if(!Array.isArray(e.scopes)||e.scopes.some(t=>typeof t!="string"||!Vu.has(t))||new Set(e.scopes).size!==e.scopes.length)throw Xo();return[...e.scopes]}function Xo(){return E("INVALID_PARAMS","auth.login 参数不合法")}const Gu={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.current.delete.post",method:"POST",path:"/user_miniprogram/cloud/leaderboard/current/delete",body(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{}}},parse(e,t){return ge(e,"排行榜记录删除接口响应异常")}},ju={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.current.get",method:"GET",path:"/user_miniprogram/cloud/leaderboard/current",query(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{}}},parse(e,t){return ge(e,"当前排行榜记录接口响应异常")}},$u={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.info.get",method:"GET",path:"/user_miniprogram/cloud/leaderboard/info",query(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{}}},parse(e,t){return ge(e,"排行榜信息接口响应异常")}},Wu={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.list.get",method:"GET",path:"/user_miniprogram/cloud/leaderboard/list",query(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{},limit:e.limit,...e.cursor?{cursor:e.cursor}:{}}},parse(e,t){return ge(e,"排行榜列表接口响应异常")}},Ku={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.user_miniprogram.cloud.leaderboard.submit.post",method:"POST",path:"/user_miniprogram/cloud/leaderboard/submit",body(e){return{mini_program_id:e.miniProgramId,...e.key?{key:e.key}:{},score:e.score,...e.extra===void 0?{}:{extra:JSON.stringify(e.extra)}}},parse(e,t){return ge(e,"排行榜提交接口响应异常")}};function Tr(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function Zo(e){return e instanceof oe?{code:"REQUEST_UNSUPPORTED",message:e.message}:e}function te(e){if(e.aborted)throw Tr()}function X(e,t,r={}){if(t.aborted&&!r.invokeWhenAborted)return Promise.reject(Tr());let n;try{n=e()}catch(i){return Promise.reject(Zo(i))}return t.aborted?(Promise.resolve(n).catch(()=>{}),Promise.reject(Tr())):new Promise((i,o)=>{let s=!1;const a=l=>{s||(s=!0,t.removeEventListener("abort",c),l())},c=()=>a(()=>o(Tr()));t.addEventListener("abort",c,{once:!0}),Promise.resolve(n).then(l=>a(()=>i(l)),l=>a(()=>o(Zo(l))))})}const Yu="default",Qu=/^[A-Za-z0-9_-]{1,64}$/,Ju=300*1e3,Xu=250,Zu=3,ef={1:"Canceled",2:"Unknown",3:"InvalidArgument",4:"DeadlineExceeded",5:"NotFound",6:"AlreadyExists",7:"PermissionDenied",8:"ResourceExhausted",9:"FailedPrecondition",10:"Aborted",11:"OutOfRange",12:"Unimplemented",13:"Internal",14:"Unavailable",15:"DataLoss",16:"Unauthenticated"};class tf{constructor(t){this.options=t,this.requestGateContext=t.requestGate?{capability:"cloud",gate:t.requestGate}:void 0,this.unsubscribeAccountChange=nf(t.account,()=>this.invalidateForAccountChange()),t.operationContext.signal.aborted?this.dispose():t.operationContext.signal.addEventListener("abort",this.handleTerminalAbort,{once:!0})}accountGeneration=0;buckets=new Map;inflight=new Map;unsubscribeAccountChange;requestGateContext;disposed=!1;handleTerminalAbort=()=>this.dispose();async submit(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId();await this.requireCurrentUser(r);const i=await this.request(Ku,{miniProgramId:n,...t});this.assertAccountGeneration(r);const o=Ct(i,Me);return this.invalidateMutableReads(this.createBucketKey(n,t.key)),Qn(o,Me)}getList(t){this.assertUsable();const r=this.readMiniProgramId(),n=this.createBucketKey(r,t.key),i=Lt("list",t.limit,t.cursor??null);return this.read(n,"list",i,async()=>{const o=await this.request(Wu,{miniProgramId:r,...t}),s=Ct(o,be);if(!Ne(s)||!Array.isArray(s.entries)||typeof s.has_more!="boolean")throw re(`${be} 返回值不合法`);if(s.cursor!==void 0&&s.cursor!==null&&typeof s.cursor!="string")throw re(`${be} 返回的 cursor 必须是字符串`);return{entries:s.entries.map(a=>Qn(a,be)),...typeof s.cursor=="string"&&s.cursor?{cursor:s.cursor}:{},hasMore:s.has_more}})}async getCurrentUserEntry(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId(),i=await this.requireCurrentUser(r),o=this.createBucketKey(n,t.key),s=Lt("current",i);return this.read(o,"current",s,async()=>{const a=await this.request(ju,{miniProgramId:n,...t}),c=Ct(a,ze);if(!Ne(c))throw re(`${ze} 返回值必须是对象`);return c.entry===void 0||c.entry===null?void 0:Qn(c.entry,ze)})}async deleteCurrentUserEntry(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId();await this.requireCurrentUser(r);const i=await this.request(Gu,{miniProgramId:n,...t});this.assertAccountGeneration(r);const o=Ct(i,st);if(this.invalidateMutableReads(this.createBucketKey(n,t.key)),!Ne(o)||typeof o.deleted!="boolean")throw re(`${st} 返回的 deleted 必须是布尔值`);return{deleted:o.deleted}}getInfo(t){this.assertUsable();const r=this.readMiniProgramId(),n=this.createBucketKey(r,t.key);return this.read(n,"info",Lt("info"),async()=>{const i=await this.request($u,{miniProgramId:r,...t}),o=Ct(i,De);if(!Ne(o)||typeof o.key!="string"||!Qu.test(o.key))throw re(`${De} 返回的 key 不合法`);if(t.key!==void 0&&o.key!==t.key)throw re(`${De} 返回的 key 与请求不一致`);if(o.order!=="asc"&&o.order!=="desc")throw re(`${De} 返回的 order 必须是 asc 或 desc`);if(typeof o.rank_limit!="number"||!Number.isInteger(o.rank_limit)||o.rank_limit<0)throw re(`${De} 返回的 rankLimit 必须是非负整数`);return{key:o.key,order:o.order,rankLimit:o.rank_limit}})}read(t,r,n,i){this.assertUsable();const o=this.getOrCreateBucket(t),s=o?.caches[r],a=s?.get(n);if(a&&a.expiresAt>Date.now())return Promise.resolve(a.value);s?.delete(n);const c=Lt(t,n),l=this.inflight.get(c);if(l)return l.promise;const g=this.accountGeneration,m=o?.generation,u=i().then(p=>(this.assertAccountGeneration(g),o&&s&&o.generation===m&&(r==="list"?s.size>=Xu&&s.delete(s.keys().next().value):s.clear(),s.set(n,{expiresAt:Date.now()+Ju,value:p})),p)).finally(()=>{this.inflight.get(c)?.promise===u&&this.inflight.delete(c),o&&this.removeEmptyBucket(t,o)});return this.inflight.set(c,{bucketKey:t,promise:u}),u}getOrCreateBucket(t){const r=this.buckets.get(t);if(r)return r;if(this.pruneExpiredBuckets(),this.buckets.size>=Zu)return;const n={generation:0,caches:{list:new Map,current:new Map,info:new Map}};return this.buckets.set(t,n),n}invalidateMutableReads(t){this.invalidateInflight(t);const r=this.buckets.get(t);r&&(r.generation+=1,r.caches.list.clear(),r.caches.current.clear())}invalidateForAccountChange(){this.accountGeneration+=1,this.buckets.clear(),this.inflight.clear()}invalidateInflight(t){for(const[r,n]of this.inflight)n.bucketKey===t&&this.inflight.delete(r)}pruneExpiredBuckets(){const t=Date.now();for(const[r,n]of this.buckets)ts(n,t),this.isBucketEmpty(r,n)&&this.buckets.delete(r)}removeEmptyBucket(t,r){ts(r,Date.now()),this.buckets.get(t)===r&&this.isBucketEmpty(t,r)&&this.buckets.delete(t)}isBucketEmpty(t,r){return![...this.inflight.values()].some(n=>n.bucketKey===t)&&Object.values(r.caches).every(n=>n.size===0)}async requireCurrentUser(t){this.assertUsable();let r;try{r=await X(()=>this.options.account.getCurrentUserId(this.options.operationContext),this.options.operationContext.signal)}catch(n){throw ns(n)?n:rs()}if(this.assertAccountGeneration(t),typeof r!="string"||!r.trim())throw Ee("UNAUTHORIZED","当前用户未登录");return r.trim()}readMiniProgramId(){const t=this.options.identity.get()?.miniProgramId.trim();if(!t)throw Ee("INVALID_STATE","canonical mini-program identity 尚未绑定");return t}createBucketKey(t,r){return Lt(t,r??Yu)}assertAccountGeneration(t){if(this.assertUsable(),t!==this.accountGeneration)throw Ee("UNAUTHORIZED","登录状态已变化,请重试")}async request(t,r){this.assertUsable();const n={request:async(i,o)=>(this.assertUsable(),this.options.network.request(i,o))};try{return await X(()=>Un(n,t,r,{...this.options.operationContext,credentials:"heybox-session",...this.requestGateContext?{gate:this.requestGateContext}:{}}),this.options.operationContext.signal)}catch(i){if(ns(i)||Ht(i,"REQUEST_UNSUPPORTED")||Ht(i,"RATE_LIMITED")||Ht(i,"RATE_LIMITED_BY_RUNTIME"))throw i;if(i instanceof oe)throw Ee("REQUEST_UNSUPPORTED","当前 Host 不支持该排行榜请求");if(i instanceof vt&&Ht(i.cause,"INVALID_STATE"))throw i.cause;if(i instanceof St){if(this.options.requestPolicyEnabled!==!1&&(i.status===403||i.status===429))throw Ee("RATE_LIMITED","排行榜请求已被网关限流,请稍后重试",{status:i.status,...i.retryAfterMs===void 0?{}:{retryAfterMs:i.retryAfterMs}});if(i.status===401||i.status===403)throw Ee("UNAUTHORIZED","当前用户未登录")}throw i instanceof vt||i instanceof St?rs():i instanceof lr?re(i.cause instanceof Error?i.cause.message:"排行榜响应不合法"):re(i instanceof Error?i.message:"排行榜响应不合法")}}dispose(){this.disposed||(this.disposed=!0,this.accountGeneration+=1,this.options.operationContext.signal.removeEventListener("abort",this.handleTerminalAbort),this.unsubscribeAccountChange(),this.buckets.clear(),this.inflight.clear())}assertUsable(){if(te(this.options.operationContext.signal),this.disposed)throw Ee("INVALID_STATE","Cloud capability 已释放")}}function rf(e){return new tf(e)}function nf(e,t){try{return e.onChange(t)}catch(r){if(Ht(r,Ja))return()=>{};throw r}}function Ct(e,t){if(!Ne(e)||typeof e.status!="string")throw re(`${t} 响应必须是标准信封`);if(e.status!=="ok")throw of(e);if(!Object.prototype.hasOwnProperty.call(e,"result")||e.result===void 0||e.result===null)throw re(`${t} 响应缺少 result`);return e.result}function Qn(e,t){if(!Ne(e))throw re(`${t} 返回的 entry 必须是对象`);if(typeof e.ranked!="boolean")throw re(`${t} 返回的 ranked 必须是布尔值`);if(typeof e.rank!="number"||!Number.isInteger(e.rank)||(e.ranked?e.rank<=0:e.rank!==0))throw re(`${t} 返回的 rank/ranked 不合法`);if(typeof e.app_user_id!="string"||!e.app_user_id.trim())throw re(`${t} 返回的 appUserId 必须是非空字符串`);if(typeof e.score!="number"||!Number.isFinite(e.score))throw re(`${t} 返回的 score 必须是有限数字`);if(!Ne(e.extra))throw re(`${t} 返回的 extra 必须是对象`);if(typeof e.created_at!="number"||!Number.isFinite(e.created_at)||typeof e.updated_at!="number"||!Number.isFinite(e.updated_at))throw re(`${t} 返回的时间字段必须是有限数字`);return{appUserId:e.app_user_id,createdAt:e.created_at,extra:e.extra,rank:e.rank,ranked:e.ranked,score:e.score,updatedAt:e.updated_at}}function of(e){if(e.status==="login"||e.status==="relogin")throw Ee("UNAUTHORIZED",xt(e.msg)||"当前用户未登录");const t=es(e.result)??es(e),r=xt(t?.user_message)||xt(e.msg)||xt(t?.developer_message)||"排行榜请求失败";throw t?Ee(sf(t),r,{status:e.status,sbe:t}):Ee("HEYBOX_API_ERROR",r,{status:e.status})}function es(e){return Ne(e)&&Ne(e.sbe)?e.sbe:void 0}function sf(e){const t=xt(e.developer_message);if(t&&/^[A-Z][A-Z0-9_]+$/.test(t))return t;const r=e.code;if(typeof r=="number"&&Number.isInteger(r))return ef[r]||t||"HEYBOX_API_ERROR";if(typeof r=="string"){const n=/^([A-Za-z][A-Za-z0-9_]*)(?:\(\d+\))?$/.exec(r.trim());if(n?.[1])return n[1]}return t||"HEYBOX_API_ERROR"}function ts(e,t){for(const r of Object.values(e.caches))for(const[n,i]of r)i.expiresAt<=t&&r.delete(n)}function Lt(...e){return JSON.stringify(e)}function Ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function xt(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Ht(e,t){return Ne(e)&&e.code===t}function Ee(e,t,r){return r===void 0?{code:e,message:t}:{code:e,message:t,data:r}}function re(e){return Ee("INVALID_RESPONSE",e)}function rs(){return Ee("REQUEST_FAILED","排行榜请求失败")}function ns(e){return e instanceof Error&&e.name==="AbortError"}const af=/^[A-Za-z0-9_-]{1,64}$/,is=20,cf=100,os=2048;function df(e){const t=rf(e);return{handlers:{[Me]:async n=>t.submit(lf(n)),[be]:async n=>t.getList(uf(n)),[ze]:async n=>t.getCurrentUserEntry(Jn(n,ze)),[st]:async n=>t.deleteCurrentUserEntry(Jn(n,st)),[De]:async n=>t.getInfo(Jn(n,De))},dispose:()=>t.dispose()}}function lf(e){const t=ho(e,Me,!1);if(mo(t,["key","score","extra"],Me),typeof t.score!="number"||!Number.isFinite(t.score)||Math.abs(t.score)>Number.MAX_SAFE_INTEGER)throw Pe("INVALID_PARAMS","cloud.leaderboard.submit score 必须是有限安全数字");return{...po(t.key,Me),score:t.score,...t.extra===void 0?{}:{extra:ff(t.extra)}}}function uf(e){if(e===void 0)return{limit:is};const t=ho(e,be,!0);mo(t,["key","limit","cursor"],be);const r=t.limit===void 0?is:t.limit;if(typeof r!="number"||!Number.isInteger(r)||r<=0||r>cf)throw Pe("INVALID_PARAMS","cloud.leaderboard.getList limit 必须是 1-100 的整数");if(t.cursor!==void 0&&typeof t.cursor!="string")throw Pe("INVALID_PARAMS","cloud.leaderboard.getList cursor 必须是字符串");return{...po(t.key,be),limit:r,...t.cursor===void 0?{}:{cursor:t.cursor}}}function Jn(e,t){if(e===void 0)return{};const r=ho(e,t,!0);return mo(r,["key"],t),po(r.key,t)}function ho(e,t,r){if(e===void 0&&r)return{};if(!yc(e))throw Pe("INVALID_PARAMS",`${t} 参数必须是对象`);return e}function mo(e,t,r){const n=Object.keys(e).find(i=>!t.includes(i));if(n)throw Pe("INVALID_PARAMS",`${r} 不支持参数 ${n}`)}function po(e,t){if(e===void 0)return{};if(typeof e!="string"||!af.test(e))throw Pe("INVALID_PARAMS",`${t} key 仅支持 1-64 位字母、数字、下划线和连字符`);return{key:e}}function ff(e){if(!yc(e))throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须是对象");let t;try{t=JSON.stringify(e)}catch{throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化")}if(typeof t!="string")throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化");if(new TextEncoder().encode(t).length>os)throw Pe("INVALID_PARAMS",`cloud.leaderboard.submit extra 不能超过 ${os} 字节`);return e}function yc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,t){return{code:e,message:t}}const hf=new Set(["stdio","attachments","notifications"]),Ec=new Set(["windows-x64","macos-arm64"]),mf=new Set(["unsigned","valid","invalid","unknown"]),pf=/^[a-f0-9]{64}$/,gf=new Set(["exited","terminated","crashed","host-shutdown","permission-revoked","output-limit"]),yf=new Set(Ya),Ef=new Set([...Ya,"PERMISSION_DENIED","USER_GESTURE_REQUIRED"]),wc=Object.freeze({COMPANION_UNSUPPORTED:"当前 Host 不支持 Companion",COMPANION_PREVIEW_UNSUPPORTED:"当前 Host 不支持预览 Companion",COMPANION_NOT_DECLARED:"当前版本未声明该 Companion",COMPANION_TARGET_UNSUPPORTED:"当前平台不支持该 Companion target",COMPANION_NOT_PREPARED:"Companion 尚未准备完成",COMPANION_PREPARATION_CANCELLED:"Companion 准备已取消",COMPANION_DOWNLOAD_FAILED:"Companion 下载失败",COMPANION_DESCRIPTOR_UNAVAILABLE:"Companion 授权或描述符暂不可用",COMPANION_ARCHIVE_INVALID:"Companion 归档不合法",COMPANION_INTEGRITY_FAILED:"Companion 完整性校验失败",COMPANION_ENTRYPOINT_INVALID:"Companion 入口不合法",COMPANION_USER_CANCELLED:"用户取消了 Companion 操作",COMPANION_ELEVATION_DENIED:"用户未授予 Companion 管理员权限",COMPANION_OS_BLOCKED:"操作系统安全策略阻止了 Companion",COMPANION_LAUNCH_FAILED:"Companion 启动失败",COMPANION_SESSION_VERSION_MISMATCH:"Companion Session 版本不匹配",COMPANION_SESSION_OWNERSHIP_LOST:"Companion Session 控制权已转移",COMPANION_SESSION_EXITED:"Companion Session 已退出",COMPANION_PIPE_CLOSED:"Companion 通信管道已关闭",COMPANION_OUTPUT_LIMIT:"Companion 输出超过限制",COMPANION_PROCESS_CRASHED:"Companion 进程异常退出",COMPANION_ATTACHMENT_NOT_FOUND:"Companion Attachment 不存在",COMPANION_NOTIFICATION_UNAVAILABLE:"Companion 通知不可用",COMPANION_TERMINATE_FAILED:"Companion 终止失败",PERMISSION_DENIED:"桌面辅助应用权限未启用或已撤销",USER_GESTURE_REQUIRED:"当前操作需要新的可信用户手势"});function wf(e){const t=async(n,i,o,s)=>{const a=bf(n);try{Oe(i.signal);const c=await o(a,{...e.operationContext,signal:i.signal});return Oe(i.signal),c}catch(c){throw Hi(c,s)}},r=async(n,i,o)=>{if(!o.trustedUserGesture)throw E("USER_GESTURE_REQUIRED","当前操作需要新的可信用户手势");if(!e.companionPresentation)throw E("COMPANION_UNSUPPORTED","Host 未提供 Companion 可信授权界面");const s={...e.operationContext,signal:o.signal},a=await e.companion.getInfo(i,s).then(l=>Af(l,i)).catch(l=>{throw Hi(l)});Oe(o.signal);const c=await e.companionPresentation.confirmCompanionOperation({action:n,companion:a,miniProgram:e.miniProgramPresentation,signal:o.signal});if(Oe(o.signal),c.status!=="granted")throw E("COMPANION_USER_CANCELLED","用户取消了 Companion 操作")};return{[_n]:(n,i)=>t(n,i,async(o,s)=>xi(await e.companion.getInfo(o,s),o)),[Sn]:(n,i)=>t(n,i,async(o,s)=>ss(await e.companion.getPreparationStatus(o,s))),[vn]:(n,i)=>t(n,i,async(o,s)=>{const a=ss(await e.companion.getPreparationStatus(o,s));return Oe(i.signal),a.state!=="ready"&&a.state!=="preparing"&&await r("prepare",o,i),Oe(i.signal),xi(await e.companion.prepare(o,{...s,onProgress:c=>i.postProgress(Ac(c))}),o)},"COMPANION_PREPARATION_CANCELLED"),[Rn]:(n,i)=>t(n,i,(o,s)=>e.companion.cancelPreparation(o,s)),[On]:(n,i)=>t(n,i,async(o,s)=>as(await e.companion.getActiveSession(o,s),o)),[Dn]:(n,i)=>t(n,i,async(o,s)=>{const a=as(await e.companion.getActiveSession(o,s),o);return Oe(i.signal),a||(await r("launch",o,i),Oe(i.signal),Ic(await e.companion.launch(o,s),o))}),[Nn]:(n,i)=>mt(n,i,e,"write"),[Pn]:(n,i)=>mt(n,i,e,"closeStdin"),[Tn]:(n,i)=>mt(n,i,e,"terminate"),[Cn]:(n,i)=>mt(n,i,e,"ackOutput"),[Ln]:async(n,i)=>{const o=await mt(n,i,e,"openAttachment");return e.fileRegistry.registerFile(o,"companion-attachment","read")},[Mn]:(n,i)=>mt(n,i,e,"showNotification")}}function bf(e){if(!B(e)||typeof e.alias!="string"||!hl.test(e.alias))throw E("INVALID_PARAMS","Companion alias 不合法");return e.alias}function Oe(e){if(e.aborted)throw Object.assign(new Error("Companion 操作已取消"),{name:"AbortError"})}async function mt(e,t,r,n){if(!B(e)||typeof e.sessionId!="string"||!e.sessionId||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0)throw E("INVALID_PARAMS","Companion Session controller 不合法");try{Oe(t.signal);const i=await r.companion[n](If(e,n),{...r.operationContext,signal:t.signal});return Oe(t.signal),i}catch(i){throw Hi(i)}}function Ae(){throw E("COMPANION_HOST_FAILED","Companion Host 返回了无效数据")}function bc(e){return!Array.isArray(e)||e.some(t=>!hf.has(t))?Ae():Object.freeze([...new Set(e)])}function xi(e,t){return!B(e)||typeof e.alias!="string"||typeof e.displayName!="string"||t!==void 0&&e.alias!==t||!Ec.has(String(e.target))||!Number.isSafeInteger(e.archiveBytes)||Number(e.archiveBytes)<0||!mf.has(String(e.signatureStatus))||e.source!==void 0&&e.source!=="local-dev"&&e.source!=="preview"&&e.source!=="released"?Ae():Object.freeze({alias:e.alias,displayName:e.displayName,target:e.target,capabilities:bc(e.capabilities),archiveBytes:e.archiveBytes,signatureStatus:e.signatureStatus,...e.source===void 0?{}:{source:e.source}})}function Af(e,t){const r=xi(e,t);return!B(e)||e.sha256===void 0?r:typeof e.sha256!="string"||!pf.test(e.sha256)?Ae():Object.freeze({...r,sha256:e.sha256})}function Ac(e){return B(e)?e.phase==="downloading"&&Number.isSafeInteger(e.loaded)&&Number(e.loaded)>=0&&(e.total===void 0||Number.isSafeInteger(e.total)&&Number(e.total)>=Number(e.loaded))?Object.freeze({phase:"downloading",loaded:e.loaded,...e.total===void 0?{}:{total:e.total}}):(e.phase==="verifying"||e.phase==="extracting")&&Number.isSafeInteger(e.processed)&&Number.isSafeInteger(e.total)&&Number(e.processed)>=0&&Number(e.total)>=Number(e.processed)?Object.freeze({phase:e.phase,processed:e.processed,total:e.total}):Ae():Ae()}function ss(e){return B(e)?e.state==="not-prepared"?Object.freeze({state:"not-prepared"}):e.state==="preparing"?Object.freeze({state:"preparing",progress:Ac(e.progress)}):e.state==="ready"&&Number.isSafeInteger(e.preparedAt)&&Number(e.preparedAt)>=0?Object.freeze({state:"ready",preparedAt:e.preparedAt}):e.state==="failed"&&B(e.error)&&typeof e.error.code=="string"&&yf.has(e.error.code)&&typeof e.error.message=="string"&&typeof e.error.retryable=="boolean"?Object.freeze({state:"failed",error:Object.freeze({code:e.error.code,message:wc[e.error.code]??"Companion 操作失败",retryable:e.error.retryable})}):Ae():Ae()}function Ic(e,t){return!B(e)||typeof e.id!="string"||!e.id||typeof e.alias!="string"||t!==void 0&&e.alias!==t||!Ec.has(String(e.target))||e.state!=="running"||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0?Ae():Object.freeze({id:e.id,alias:e.alias,target:e.target,capabilities:bc(e.capabilities),state:"running",controllerGeneration:e.controllerGeneration})}function as(e,t){return e===void 0?void 0:Ic(e,t)}function If(e,t){const r=e,n={sessionId:r.sessionId,controllerGeneration:r.controllerGeneration};if(t==="write"){if(!$a(r.data))throw E("INVALID_PARAMS","Companion write data 不合法");return{...n,data:new Uint8Array(r.data)}}if(t==="ackOutput"){if(r.stream!=="stdout"&&r.stream!=="stderr"||!Number.isSafeInteger(r.sequence)||Number(r.sequence)<0)throw E("INVALID_PARAMS","Companion output ack 不合法");return{...n,stream:r.stream,sequence:r.sequence}}if(t==="openAttachment"){if(typeof r.id!="string"||!r.id)throw E("INVALID_PARAMS","Companion Attachment ID 不合法");return{...n,id:r.id}}if(t==="showNotification"){if(!["completed","failed","stopped","attention"].includes(String(r.category)))throw E("INVALID_PARAMS","Companion notification category 不合法");return{...n,category:r.category}}return n}function _f(e){return!B(e)||!gf.has(String(e.reason))?Ae():e.reason==="exited"?Number.isSafeInteger(e.exitCode)?Object.freeze({reason:"exited",exitCode:e.exitCode}):Ae():e.exitCode!==void 0&&!Number.isSafeInteger(e.exitCode)?Ae():Object.freeze({reason:e.reason,...e.exitCode===void 0?{}:{exitCode:e.exitCode}})}function Sf(e){if(!B(e)||!B(e.payload)||typeof e.payload.sessionId!="string"||!e.payload.sessionId)return;const t=e.payload,r=t.sessionId;if(e.type==="companion.session.output")return!Number.isSafeInteger(t.controllerGeneration)||Number(t.controllerGeneration)<0||t.stream!=="stdout"&&t.stream!=="stderr"||!Number.isSafeInteger(t.sequence)||Number(t.sequence)<0||!$a(t.data)?void 0:{type:e.type,payload:{sessionId:r,controllerGeneration:t.controllerGeneration,stream:t.stream,sequence:t.sequence,data:new Uint8Array(t.data)}};if(e.type==="companion.session.exit")try{return{type:e.type,payload:{sessionId:r,exit:_f(t.exit)}}}catch{return}if(e.type==="companion.session.ownershipLost"&&Number.isSafeInteger(t.controllerGeneration)&&Number(t.controllerGeneration)>=0)return{type:e.type,payload:{sessionId:r,controllerGeneration:t.controllerGeneration}}}function Hi(e,t){return B(e)&&typeof e.code=="string"&&Ef.has(e.code)?E(e.code,wc[e.code]??"Companion 操作失败",e.code==="COMPANION_DESCRIPTOR_UNAVAILABLE"?{retryable:!0}:typeof e.retryable=="boolean"?{retryable:e.retryable}:void 0):t&&B(e)&&e.name==="AbortError"?E(t,"Companion 准备已取消"):E("COMPANION_HOST_FAILED","Companion Host 操作失败")}const cs=5e3,ds=1e4;function nt(e){throw{code:"INVALID_PARAMS",message:e}}function _c(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Sc(e,t,r){const n=Object.keys(e).filter(i=>!t.includes(i));n.length&&nt(`${r} 不支持字段: ${n.join(", ")}`)}function vf(e){if(e===void 0)return{intensity:"light",delay:0};if(!_c(e))return nt("device.vibrate 参数必须是对象");Sc(e,["intensity","delay"],"device.vibrate");const t=e.intensity??"light";if(t!=="light"&&t!=="medium"&&t!=="heavy")return nt("device.vibrate intensity 必须是 light、medium 或 heavy");const r=t,n=e.delay??0;return typeof n!="number"||!Number.isInteger(n)||n<0||n>cs?nt(`device.vibrate delay 必须是 0-${cs} 的整数毫秒`):{intensity:r,delay:n}}function Rf(e){return _c(e)?(Sc(e,["text"],"device.setClipboard"),typeof e.text!="string"||!e.text.trim()?nt("device.setClipboard text 必须是非空字符串"):e.text.length>ds?nt(`device.setClipboard text 不能超过 ${ds} 字符`):{text:e.text}):nt("device.setClipboard 参数必须是对象")}function Of(e){return{[un]:async t=>{te(e.operationContext.signal),await X(()=>e.presentation.vibrate(vf(t),e.operationContext),e.operationContext.signal)},[fn]:async t=>{te(e.operationContext.signal),await X(()=>e.presentation.setClipboard(Rf(t),e.operationContext),e.operationContext.signal)}}}const Df=new Set(["METHOD_FORBIDDEN","FILE_PICKER_CANCELLED","FILE_ACCESS_REVOKED","FILE_ACCESS_DENIED","FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_ALREADY_EXISTS","DIRECTORY_ALREADY_EXISTS","FILE_TYPE_MISMATCH","FILE_TOO_LARGE","FILE_QUOTA_EXCEEDED","FILE_ENCODING_INVALID","DIRECTORY_LIST_LIMIT_EXCEEDED","DIRECTORY_NOT_EMPTY","FILE_IO_FAILED"]),Nf={METHOD_FORBIDDEN:"当前 Host 未开放该文件能力",FILE_PICKER_CANCELLED:"已取消文件选择",FILE_ACCESS_REVOKED:"文件授权已失效",FILE_ACCESS_DENIED:"当前文件授权不允许此操作",FILE_NOT_FOUND:"文件不存在",DIRECTORY_NOT_FOUND:"目录不存在",FILE_ALREADY_EXISTS:"文件已存在",DIRECTORY_ALREADY_EXISTS:"目录已存在",FILE_TYPE_MISMATCH:"文件类型不匹配",FILE_TOO_LARGE:"文件超过大小限制",FILE_QUOTA_EXCEEDED:"文件配额已用尽",FILE_ENCODING_INVALID:"文件编码不合法",DIRECTORY_LIST_LIMIT_EXCEEDED:"目录项数量超过限制",DIRECTORY_NOT_EMPTY:"目录不为空",FILE_IO_FAILED:"文件操作失败"};function go(e){const t=vc(e),r=t&&Df.has(t)?E(t,Nf[t]??"文件操作失败"):E("FILE_IO_FAILED","文件操作失败");return Object.defineProperty(r,"cause",{value:e,enumerable:!1}),r}function Le(e){try{return e()}catch(t){throw go(t)}}function vc(e){try{if(!B(e))return;const t=Object.getOwnPropertyDescriptor(e,"code");return t&&"value"in t&&typeof t.value=="string"?t.value:void 0}catch{return}}function Rc(e,t,r={}){const n=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=n==="readwrite",o=r.allowRemove!==!1&&typeof e.remove=="function";return Object.freeze({kind:"file",name:e.name,mode:n,create:i?(s,a)=>e.create(s,a):Fi,remove:o?s=>e.remove(s):Dc,read:s=>e.read(s),write:i?(s,a)=>e.write(s,a):Fi,stat:s=>e.stat(s)})}function Oc(e,t,r={}){const n=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=n==="readwrite",o=r.allowRemove!==!1,s=o&&typeof e.remove=="function";return Object.freeze({kind:"directory",name:e.name,mode:n,file:a=>Rc(e.file(a),n,{allowRemove:o}),directory:a=>Oc(e.directory(a),n,{allowRemove:o}),create:i?(a,c)=>e.create(a,c):Fi,remove:s?(a,c)=>e.remove(a,c):Dc,stat:a=>e.stat(a),list:(a,c)=>e.list(a,c)})}function Fi(){return Promise.reject(E("FILE_ACCESS_DENIED","当前文件授权只允许读取"))}function Dc(){return Promise.reject(E("FILE_ACCESS_DENIED","外部文件授权不允许删除"))}const ls=1024;class Pf{constructor(t,r){this.files=t,this.miniProgramDetail=r}handles=new Map;disposed=!1;dispose(){this.disposed||(this.disposed=!0,this.handles.clear())}registerFile(t,r="external",n){this.assertCanonicalDetail();const i=this.prepareFile(t,r,n),[o]=this.registerMany([i]);return br(i.handle,{kind:"file",handleId:o})}registerFiles(t,r="external",n,i){this.assertCanonicalDetail();const o=Le(()=>{if(!Array.isArray(t))throw E("FILE_IO_FAILED","Host 返回了无效文件选择结果");const a=t.length;if(i!==void 0&&a>i)throw E("FILE_IO_FAILED","Host 返回了过多文件选择结果");if(this.handles.size+a>ls)throw E("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const c=[];for(let l=0;l<a;l+=1){if(!Object.prototype.hasOwnProperty.call(t,l))throw E("FILE_IO_FAILED","Host 返回了稀疏文件选择结果");c.push(this.prepareFile(t[l],r,n))}return c}),s=this.registerMany(o);return o.map((a,c)=>br(a.handle,{kind:"file",handleId:s[c]}))}registerDirectory(t,r="external",n){this.assertCanonicalDetail();const i=this.prepareDirectory(t,r,n),[o]=this.registerMany([i]);return fs(i.handle,{kind:"directory",handleId:o})}resolveFile(t){return this.resolveFileEntry(t).handle}resolveDirectory(t){return this.resolveDirectoryEntry(t).handle}isCompanionAttachmentRef(t){return!co(t)||!("handleId"in t)?!1:this.handles.get(t.handleId)?.origin==="companion-attachment"}resolveFileEntry(t){this.assertCanonicalDetail();const r=Cf(t);if("handleId"in r){const s=this.readDirect(r.handleId,"file");return{ref:r,...s}}const n=this.resolveRoot(r.root),i=nr(r.relativePath),o=this.prepareFile(Le(()=>n.hostHandle.file(i)),n.origin,n.handle.mode);return{ref:r,...o}}resolveDirectoryEntry(t){this.assertCanonicalDetail();const r=Lf(t);if("handleId"in r){const s=this.readDirect(r.handleId,"directory");return{ref:r,...s}}const n=this.resolveRoot(r.root),i=r.relativePath==="."?".":nr(r.relativePath),o=this.prepareDirectory(i==="."?n.hostHandle:Le(()=>n.hostHandle.directory(i)),n.origin,n.handle.mode,!0);return{ref:r,...o}}describeFile(t,r){return ms(t),br(t,r)}describeListedEntries(t,r,n){return this.assertCanonicalDetail(),Le(()=>{if(!Array.isArray(r))throw E("FILE_IO_FAILED","Host 返回了无效目录列表");const i=r.length;if(i>n)throw E("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项数量超过限制");const o=[];for(let s=0;s<i;s+=1){if(!Object.prototype.hasOwnProperty.call(r,s))throw E("FILE_IO_FAILED","Host 返回了稀疏目录列表");o.push(this.describeListedEntry(t,r[s]))}return this.assertCanonicalDetail(),o})}describeListedEntry(t,r){return Le(()=>{if(B(r)&&r.kind==="file"){const n=this.prepareFile(r,t.origin,t.handle.mode);return br(n.handle,us(t.ref,n.handle.name))}if(B(r)&&r.kind==="directory"){const n=this.prepareDirectory(r,t.origin,t.handle.mode);return fs(n.handle,Tf(t.ref,n.handle.name))}throw E("FILE_IO_FAILED","Host 返回了无效目录项")})}deriveFile(t,r){this.assertCanonicalDetail();const n=ur(r),i=this.prepareFile(Le(()=>t.hostHandle.file(n)),t.origin,t.handle.mode);return{ref:us(t.ref,n),...i}}assertSandboxOrigin(t){if(t.origin!=="sandbox")throw E("FILE_ACCESS_DENIED","外部文件授权不允许删除")}prepareFile(t,r,n){return Le(()=>{ms(t);const i=n??t.mode;return hs(t.mode,i),{handle:Rc(t,i,{allowRemove:r==="sandbox"}),hostHandle:t,origin:r}})}prepareDirectory(t,r,n,i=!1){return Le(()=>{Uf(t,i);const o=n??t.mode;return hs(t.mode,o),{handle:Oc(t,o,{allowRemove:r==="sandbox"}),hostHandle:t,origin:r}})}registerMany(t){if(this.assertCanonicalDetail(),this.handles.size+t.length>ls)throw E("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const r=new Set,n=t.map(()=>{for(let i=0;i<8;i+=1){const o=Mf();if(!this.handles.has(o)&&!r.has(o))return r.add(o),o}throw E("FILE_IO_FAILED","无法创建文件授权句柄")});return t.forEach((i,o)=>this.handles.set(n[o],i)),n}readDirect(t,r){if(!kf(t))throw E("FILE_ACCESS_REVOKED","文件授权句柄无效");const n=this.handles.get(t);if(!n)throw E("FILE_ACCESS_REVOKED","文件授权已失效");if(n.handle.kind!==r||n.hostHandle.kind!==r)throw E("FILE_TYPE_MISMATCH","文件句柄类型不匹配");return n}resolveRoot(t){if(this.assertCanonicalDetail(),t.kind==="sandbox"){if(!this.files)throw Te("files.sandbox");return this.prepareDirectory(Le(()=>this.files.sandbox),"sandbox",void 0,!0)}return this.readDirect(t.handleId,"directory")}assertCanonicalDetail(){if(this.disposed)throw E("FILE_ACCESS_REVOKED","文件授权已失效");if(!this.miniProgramDetail?.miniProgramId.trim())throw Te("files")}}function nr(e){if(!ao(e))throw E("INVALID_PARAMS","relativePath 不是规范逻辑路径");return e}function ur(e,t="文件名"){const r=nr(e);if(r.includes("/"))throw E("INVALID_PARAMS",`${t} 只能是 basename`);return r}function us(e,t){return"handleId"in e?{kind:"file",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"file",root:e.root,relativePath:nr(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Tf(e,t){return"handleId"in e?{kind:"directory",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"directory",root:e.root,relativePath:nr(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function br(e,t){return{kind:"file",name:e.name,mode:e.mode,ref:t}}function fs(e,t){return{kind:"directory",name:e.name,mode:e.mode,ref:t}}function hs(e,t){if(t==="readwrite"&&e!=="readwrite")throw E("FILE_ACCESS_DENIED","Host 未授予请求的文件写权限")}function Cf(e){return co(e)||Nc(),e}function Lf(e){return ja(e)||Nc(),e}function Nc(){throw E("INVALID_PARAMS","文件引用不合法")}function Mf(){const e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw E("FILE_IO_FAILED","当前环境缺少安全随机数能力");const t=e.getRandomValues(new Uint8Array(16));return Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}function kf(e){return/^[0-9a-f]{32}$/.test(e)}function ms(e){if(!B(e)||e.kind!=="file"||typeof e.name!="string"||e.mode!=="read"&&e.mode!=="readwrite"||typeof e.create!="function"||typeof e.read!="function"||typeof e.write!="function"||typeof e.stat!="function")throw E("FILE_IO_FAILED","Host 返回了无效 File handle");ur(e.name,"Host File name")}function Uf(e,t=!1){if(!B(e)||e.kind!=="directory"||typeof e.name!="string"||e.mode!=="read"&&e.mode!=="readwrite"||typeof e.file!="function"||typeof e.directory!="function"||typeof e.create!="function"||typeof e.stat!="function"||typeof e.list!="function")throw E("FILE_IO_FAILED","Host 返回了无效 Directory handle");if(!t&&e.name.length===0)throw E("FILE_IO_FAILED","Host Directory name 不能为空");e.name&&ur(e.name,"Host Directory name")}const ps=1e3,xf=new Set(["FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_TYPE_MISMATCH"]);function Hf(e){const t=r=>kn(e.operationContext,r.signal);return{files:{[Xr]:async(r,n)=>{Xn(n);const i=Zn(e.picker),o=Ff(r),s=await he(()=>i.pickFiles(o,t(n)));return e.registry.registerFiles(s,"external",o.mode,o.multiple?void 0:1)},[Zr]:async(r,n)=>{Xn(n);const i=Zn(e.picker),o=Bf(r),s=await he(()=>i.pickDirectory(o,t(n)));return e.registry.registerDirectory(s,"external",o.mode)},[en]:async(r,n)=>{Xn(n);const i=Zn(e.picker),o=Vf(r).suggestedName,s=t(n);if(!i.saveFile)throw Te("files.saveFile");const a=await he(()=>i.saveFile({suggestedName:o},s));return e.registry.registerFile(a,"external","readwrite")}},file:{[Qt]:async(r,n)=>{const i=ye(r,["recursive","exclusive"]),o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.create(gs(i),t(n)))},[Jt]:async(r,n)=>{const i=ye(r),o=e.registry.resolveFileEntry(i.target);if(e.registry.assertSandboxOrigin(o),pt(o.handle.mode),!o.handle.remove)throw Te(Jt);await he(()=>o.handle.remove(t(n)))},[tn]:async(r,n)=>{const i=ye(r);return ys(async()=>{const o=await e.registry.resolveFile(i.target).stat(t(n));if(!B(o)||o.kind!=="file")throw ws()})},[Xt]:async(r,n)=>{const i=ye(r),o=Es(await he(()=>e.registry.resolveFile(i.target).read(t(n))));try{const s=new TextDecoder("utf-8",{fatal:!0}).decode(o);return s.charCodeAt(0)===65279?s.slice(1):s}catch{throw E("FILE_ENCODING_INVALID","文件不是合法 UTF-8 文本")}},[rn]:async(r,n)=>{const i=ye(r,["content"]);typeof i.content!="string"&&we("content 必须是字符串");const o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.write(new TextEncoder().encode(i.content),t(n)))},[Zt]:async(r,n)=>{const i=ye(r),o=await he(()=>e.registry.resolveFile(i.target).read(t(n)));return Es(o)},[nn]:async(r,n)=>{const i=ye(r,["content"]),o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.write(zf(i.content),t(n)))},[er]:async(r,n)=>{const i=ye(r),o=await he(()=>e.registry.resolveFile(i.target).stat(t(n)));return Gf(o)}},directory:{[on]:async(r,n)=>{const i=ye(r,["recursive","exclusive"]),o=e.registry.resolveDirectory(i.target);pt(o.mode),await he(()=>o.create(gs(i),t(n)))},[tr]:async(r,n)=>{const i=ye(r,["recursive"]);if(B(i.target)&&i.target.relativePath===".")throw E("FILE_ACCESS_DENIED","不能删除根目录");const o=e.registry.resolveDirectoryEntry(i.target);if(e.registry.assertSandboxOrigin(o),pt(o.handle.mode),!o.handle.remove)throw Te(tr);await he(()=>o.handle.remove({recursive:i.recursive===void 0?!1:yn(i.recursive,"recursive")},t(n)))},[sn]:async(r,n)=>{const i=ye(r);return ys(async()=>{const o=await e.registry.resolveDirectory(i.target).stat(t(n));if(!B(o)||o.kind!=="directory")throw ws()})},[an]:async(r,n)=>{const i=ye(r,["limit"]),o=qf(i.limit),s=e.registry.resolveDirectoryEntry(i.target),a=await he(()=>s.handle.list({limit:o},t(n)));return e.registry.describeListedEntries(s,a,o)}}}}function Ff(e){if(e===void 0)return{mode:"read",multiple:!1};B(e)||we("pickFiles 参数必须是对象"),xn(e,["mode","accept","multiple"]);const t=Pc(e.mode,"read"),r=e.multiple===void 0?!1:yn(e.multiple,"multiple");let n;return e.accept!==void 0&&((!Array.isArray(e.accept)||e.accept.some(i=>typeof i!="string"||!/^\.[a-z0-9][a-z0-9._-]*$/i.test(i)))&&we("accept 必须是规范扩展名数组"),n=[...new Set(e.accept)]),{mode:t,multiple:r,...n===void 0?{}:{accept:n}}}function Bf(e){return e===void 0?{mode:"read"}:(B(e)||we("pickDirectory 参数必须是对象"),xn(e,["mode"]),{mode:Pc(e.mode,"read")})}function Vf(e){return B(e)||we("saveFile 参数必须是对象"),xn(e,["suggestedName"]),{suggestedName:ur(e.suggestedName,"suggestedName")}}function ye(e,t=[]){return(!B(e)||!Object.prototype.hasOwnProperty.call(e,"target"))&&we("文件操作参数必须包含 target"),xn(e,["target",...t]),e}function gs(e){return{recursive:e.recursive===void 0?!1:yn(e.recursive,"recursive"),exclusive:e.exclusive===void 0?!1:yn(e.exclusive,"exclusive")}}function Pc(e,t){return e===void 0?t:(e!=="read"&&e!=="readwrite"&&we("mode 必须是 read 或 readwrite"),e)}function yn(e,t){return typeof e!="boolean"&&we(`${t} 必须是布尔值`),e}function qf(e){if(e===void 0)return ps;if((!Number.isSafeInteger(e)||e<=0)&&we("limit 必须是正整数"),e>ps)throw E("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项限制超过 Host 上限");return e}function xn(e,t){const r=Object.keys(e).filter(n=>!t.includes(n));r.length&&we(`不支持字段: ${r.join(", ")}`)}function pt(e){if(e!=="readwrite")throw E("FILE_ACCESS_DENIED","当前文件授权只允许读取")}function Xn(e){if(!e.trustedUserGesture)throw E("USER_GESTURE_REQUIRED","当前操作需要可信用户手势")}function Zn(e){if(!e)throw Te("files.external");return e}async function ys(e){try{return await e(),!0}catch(t){if(xf.has(vc(t)??""))return!1;throw go(t)}}async function he(e){try{return await e()}catch(t){throw go(t)}}function zf(e){return e instanceof Uint8Array||we("content 必须是 Uint8Array"),typeof SharedArrayBuffer<"u"&&e.buffer instanceof SharedArrayBuffer&&we("不支持 SharedArrayBuffer-backed Uint8Array"),new Uint8Array(e)}function Es(e){if(!(e instanceof Uint8Array))throw E("FILE_IO_FAILED","Host 返回了无效字节数据");return new Uint8Array(e)}function ws(){return E("FILE_TYPE_MISMATCH","文件句柄类型不匹配")}function Gf(e){if(!B(e)||e.kind!=="file"||!jf(e.size))throw E("FILE_IO_FAILED","Host 返回了无效 FileStat");for(const t of["modifiedAt","createdAt"])if(e[t]!==void 0&&!$f(e[t]))throw E("FILE_IO_FAILED",`Host 返回了无效 ${t}`);return{kind:"file",size:e.size,...e.modifiedAt===void 0?{}:{modifiedAt:e.modifiedAt},...e.createdAt===void 0?{}:{createdAt:e.createdAt}}}function jf(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function $f(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function we(e){throw E("INVALID_PARAMS",e)}const Ar=4294967296;function Wf(e){const t=new Kf;return t.write(e),t.finish()}class Kf{bytes=new Uint8Array(128);view=new DataView(this.bytes.buffer);offset=0;write(t){if(t===null)this.writeUint8(192);else if(typeof t=="boolean")this.writeUint8(t?195:194);else if(typeof t=="number")this.writeNumber(t);else if(typeof t=="string")this.writeString(t);else if(Array.isArray(t))this.writeArray(t);else if(typeof t=="object")this.writeMap(t);else throw new Error("unsupported share extra value")}finish(){return this.bytes.slice(0,this.offset)}writeNumber(t){if(!Number.isSafeInteger(t)){this.writeUint8(203),this.writeFloat64(t);return}if(t>=0){t<128?this.writeUint8(t):t<256?(this.writeUint8(204),this.writeUint8(t)):t<65536?(this.writeUint8(205),this.writeUint16(t)):t<Ar?(this.writeUint8(206),this.writeUint32(t)):(this.writeUint8(207),this.writeUint64(t));return}t>=-32?this.writeUint8(224|t+32):t>=-128?(this.writeUint8(208),this.writeInt8(t)):t>=-32768?(this.writeUint8(209),this.writeInt16(t)):t>=-2147483648?(this.writeUint8(210),this.writeInt32(t)):(this.writeUint8(211),this.writeInt64(t))}writeString(t){const r=Yf(t),n=r.byteLength;if(n<32)this.writeUint8(160+n);else if(n<256)this.writeUint8(217),this.writeUint8(n);else if(n<65536)this.writeUint8(218),this.writeUint16(n);else if(n<Ar)this.writeUint8(219),this.writeUint32(n);else throw new Error("share extra string is too long");this.writeBytes(r)}writeArray(t){const r=t.length;r<16?this.writeUint8(144+r):r<65536?(this.writeUint8(220),this.writeUint16(r)):(this.writeUint8(221),this.writeUint32(r));for(const n of t)this.write(n)}writeMap(t){const r=Object.keys(t),n=r.length;n<16?this.writeUint8(128+n):n<65536?(this.writeUint8(222),this.writeUint16(n)):(this.writeUint8(223),this.writeUint32(n));for(const i of r)this.writeString(i),this.write(t[i])}ensureCapacity(t){const r=this.offset+t;if(r<=this.bytes.byteLength)return;const n=new Uint8Array(Math.max(r,this.bytes.byteLength*2));n.set(this.bytes),this.bytes=n,this.view=new DataView(n.buffer)}writeBytes(t){this.ensureCapacity(t.byteLength),this.bytes.set(t,this.offset),this.offset+=t.byteLength}writeUint8(t){this.ensureCapacity(1),this.view.setUint8(this.offset,t),this.offset+=1}writeInt8(t){this.ensureCapacity(1),this.view.setInt8(this.offset,t),this.offset+=1}writeUint16(t){this.ensureCapacity(2),this.view.setUint16(this.offset,t),this.offset+=2}writeInt16(t){this.ensureCapacity(2),this.view.setInt16(this.offset,t),this.offset+=2}writeUint32(t){this.ensureCapacity(4),this.view.setUint32(this.offset,t),this.offset+=4}writeInt32(t){this.ensureCapacity(4),this.view.setInt32(this.offset,t),this.offset+=4}writeFloat64(t){this.ensureCapacity(8),this.view.setFloat64(this.offset,t),this.offset+=8}writeUint64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,t/Ar),this.view.setUint32(this.offset+4,t),this.offset+=8}writeInt64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,Math.floor(t/Ar)),this.view.setUint32(this.offset+4,t),this.offset+=8}}function Yf(e){const t=new Uint8Array(Qf(e));let r=0,n=0;for(;r<e.length;){let i=e.charCodeAt(r++);if(i>=55296&&i<=56319&&r<e.length){const o=e.charCodeAt(r);o>=56320&&o<=57343&&(r+=1,i=((i&1023)<<10)+(o&1023)+65536)}i<128?t[n++]=i:i<2048?(t[n++]=i>>6&31|192,t[n++]=i&63|128):i<65536?(t[n++]=i>>12&15|224,t[n++]=i>>6&63|128,t[n++]=i&63|128):(t[n++]=i>>18&7|240,t[n++]=i>>12&63|128,t[n++]=i>>6&63|128,t[n++]=i&63|128)}return t}function Qf(e){let t=0,r=0;for(;r<e.length;){let n=e.charCodeAt(r++);if(n<128)t+=1;else if(n<2048)t+=2;else{if(n>=55296&&n<=56319&&r<e.length){const i=e.charCodeAt(r);i>=56320&&i<=57343&&(r+=1,n=((n&1023)<<10)+(i&1023)+65536)}t+=n<65536?3:4}}return t}function Tc(e){Bi(e);const t=Wf(e);if(t.byteLength>128)throw new Error("launch extra is too large");return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Bi(e,t=0,r=new WeakSet){if(t>8)throw new Error("extra nesting depth exceeded");if(e===null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){if(Number.isFinite(e))return;throw new Error("extra number must be finite")}if(typeof e!="object")throw new Error("extra value must be JSON-compatible");if(r.has(e))throw new Error("extra value must not contain cycles");if(r.add(e),Array.isArray(e)){if(e.length>64)throw new Error("extra array is too large");for(const o of e)Bi(o,t+1,r);r.delete(e);return}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new Error("extra object must be a plain object");const i=Object.entries(e);if(i.length>64)throw new Error("extra object has too many fields");for(const[o,s]of i){if(o==="__proto__")throw new Error("extra object key is not supported");Bi(s,t+1,r)}r.delete(e)}const Jf=["pc","console","mobile"],Xf=["game","wiki"];function En(e){throw{code:"INVALID_PARAMS",message:e}}function Zf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function je(e,t){return typeof e!="string"||!e.trim()?En(t):e.trim()}function bs(e,t,r){return typeof e!="string"||!t.includes(e)?En(r):e}function eh(e){const t={target:"game_detail",appId:je(e.appId,"navigation.openAppPage appId 必须是非空字符串"),gameType:bs(e.gameType,Jf,"navigation.openAppPage gameType 必须是 pc、console 或 mobile")};return e.page!==void 0&&(t.page=bs(e.page,Xf,"navigation.openAppPage page 必须是 game 或 wiki")),e.hSrc!==void 0&&(t.hSrc=je(e.hSrc,"navigation.openAppPage hSrc 必须是非空字符串")),e.skuId!==void 0&&(t.skuId=je(e.skuId,"navigation.openAppPage skuId 必须是非空字符串")),t}function th(e){return{target:"user_detail",userId:je(e.userId,"navigation.openAppPage userId 必须是非空字符串")}}function rh(e){const t={target:"post_detail",linkId:je(e.linkId,"navigation.openAppPage linkId 必须是非空字符串")};return e.rootCommentId!==void 0&&(t.rootCommentId=je(e.rootCommentId,"navigation.openAppPage rootCommentId 必须是非空字符串")),e.commentId!==void 0&&(t.commentId=je(e.commentId,"navigation.openAppPage commentId 必须是非空字符串")),t}function nh(e){const t={target:"mini_program",miniProgramId:je(e.miniProgramId,"navigation.openAppPage miniProgramId 必须是非空字符串")};return e.extra!==void 0&&(t.extra=e.extra),t}function ih(e){return Zf(e)?e.target==="game_detail"?eh(e):e.target==="user_detail"?th(e):e.target==="post_detail"?rh(e):e.target==="mini_program"?nh(e):En("navigation.openAppPage target 不支持"):En("navigation.openAppPage options 必须是对象")}function oh(e){return{protocolType:"openRouterPath",path:"/game/detail",params:{app_id:e.appId,game_type:e.gameType,...e.page===void 0?{}:{page:e.page},...e.hSrc===void 0?{}:{h_src:e.hSrc},...e.skuId===void 0?{}:{sku_id:e.skuId}}}}function sh(e){return{protocolType:"openRouterPath",path:"/user_home",params:{userid:e.userId}}}function ah(e){return{protocolType:"openRouterPath",path:"/bbs/link",params:{link_id:e.linkId,...e.rootCommentId===void 0?{}:{root_comment_id:e.rootCommentId},...e.commentId===void 0?{}:{comment_id:e.commentId}}}}function ch(e){const t=e;return t.target==="game_detail"?oh(t):t.target==="user_detail"?sh(t):ah(t)}const dh="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJJY29uIj4KPHBhdGggaWQ9IlVuaW9uIiBkPSJNNS4wMzMzOCAxLjI5Mjg5QzUuNDIzOSAwLjkwMjM2OSA2LjA1NzI0IDAuOTAyMzY5IDYuNDQ3NzYgMS4yOTI4OUM2LjgzODI3IDEuNjgzNDIgNi44MzgyOCAyLjMxNjc2IDYuNDQ3NzYgMi43MDcyN0w1LjIzODQ2IDMuOTE2NThIMTEuNjY2N0MxNS40NDA1IDMuOTE2NzEgMTguNTAwMSA2Ljk3NjIgMTguNTAwMSAxMC43NTAxQzE4LjUgMTQuNTIzOCAxNS40NDA0IDE3LjU4MzQgMTEuNjY2NyAxNy41ODM1SDMuMzMzMzVDMi43ODExMiAxNy41ODM1IDIuMzMzMjcgMTcuMTM1NiAyLjMzMzE5IDE2LjU4MzRDMi4zMzMxOSAxNi4wMzExIDIuNzgxMDcgMTUuNTgzMiAzLjMzMzM1IDE1LjU4MzJIMTEuNjY2N0MxNC4zMzU5IDE1LjU4MzEgMTYuNDk5NyAxMy40MTkzIDE2LjQ5OTggMTAuNzUwMUMxNi40OTk4IDguMDgwNzYgMTQuMzM1OSA1LjkxNzAzIDExLjY2NjcgNS45MTY5SDQuNTkwNjdMNi40NDc3NiA3Ljc3NDhDNi44MzgyMSA4LjE2NTMzIDYuODM4MjYgOC43OTg2OCA2LjQ0Nzc2IDkuMTg5MThDNi4wNTcyNCA5LjU3OTQ1IDUuNDIzODMgOS41Nzk1NiA1LjAzMzM4IDkuMTg5MThMMS43OTI4MyA1Ljk0NzgyQzEuNDAyMzEgNS41NTczIDEuNDAyMzEgNC45MjM5NiAxLjc5MjgzIDQuNTMzNDRMNS4wMzMzOCAxLjI5Mjg5WiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8L3N2Zz4K",lh="data-hb-sdk-fullscreen-exit",uh=3e3,fh=2e3,As="var(--white-70a,rgba(255,255,255,.7))",Is="0 0 var(--space-8,8px) var(--white-20a,rgba(255,255,255,.2))";function hh(e){if(typeof document>"u"||!document.body)return;const t=document.createElement("button");t.type="button",t.setAttribute(lh,""),t.setAttribute("aria-label","退出全屏"),t.setAttribute("aria-expanded","true");const r=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;t.style.cssText=["position:fixed","right:0","top:50%","z-index:2147483647","box-sizing:border-box","width:48px","height:44px","padding:5px 0",`border:1px solid ${As}`,`box-shadow:${Is}`,"border-radius:var(--radius-m-token,5px)","display:flex","flex-direction:column","align-items:center","justify-content:center","gap:3px","background:var(--general-color-text-2,#64696e)","color:var(--white-100a,#fff)",'font:400 var(--font-size-9,9px)/var(--line-height-12,12px) "PingFang SC",sans-serif',"cursor:pointer","touch-action:manipulation","opacity:1","transform:translateY(-50%)",r?"transition:none":"transition:width var(--token-transition-arrow,220ms cubic-bezier(.2,.8,.2,1))"].join(";");const n=document.createElement("img");n.src=dh,n.alt="",n.draggable=!1,n.style.cssText="display:block;width:16px;height:16px;flex-shrink:0;";const i=document.createElement("span");i.textContent="退出全屏",i.style.cssText="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;",t.append(n,i);let o=!0,s=!1,a=!1,c,l;function g(){return window.innerWidth>window.innerHeight?"var(--space-12,12px)":"var(--space-8,8px)"}function m(){o||(t.style.width=g())}function u(){l?.cancel(),l=void 0}function p(v=fh){clearTimeout(c),c=setTimeout(()=>{u(),o=!1,t.style.width=g(),t.style.opacity="0.5",t.style.borderColor="var(--white-40a,rgba(255,255,255,.4))",t.style.boxShadow="none",n.style.visibility="hidden",i.style.display="none",t.setAttribute("aria-label","展开退出全屏按钮"),t.setAttribute("aria-expanded","false")},v)}function O(){u(),o=!0,t.style.width="48px",t.style.opacity="1",t.style.borderColor=As,t.style.boxShadow=Is,n.style.visibility="",i.style.display="",t.setAttribute("aria-label","退出全屏"),t.setAttribute("aria-expanded","true"),p()}async function b(){if(!(s||a)){if(!o){O();return}a=!0,clearTimeout(c),u();try{await e()}catch{}finally{a=!1,s||O()}}}return t.addEventListener("click",b),window.addEventListener("resize",m),document.body.append(t),!r&&t.animate&&(l=t.animate([{transform:"translate(48px,-50%)",opacity:0,offset:0},{transform:"translate(0,-50%)",opacity:1,offset:.2},{transform:"translate(-6px,-50%)",offset:.4},{transform:"translate(0,-50%)",offset:.55},{transform:"translate(-6px,-50%)",offset:.75},{transform:"translate(0,-50%)",offset:1}],{duration:900,easing:"ease-in-out"})),p(uh),{dispose(){s=!0,clearTimeout(c),u(),t.removeEventListener("click",b),window.removeEventListener("resize",m),t.remove()}}}const Cc=1e4;function Lc(e){const t=new AbortController;let r;const n=()=>{r??={code:"REQUEST_CANCELLED",message:"方向设置已取消"},t.abort()};e.addEventListener("abort",n,{once:!0}),e.aborted&&n();const i=setTimeout(()=>{r??={code:"ORIENTATION_TIMEOUT",message:"方向切换超时"},t.abort()},Cc);return{signal:t.signal,async run(o){try{return await X(o,t.signal)}catch(s){throw r??s}},dispose(){clearTimeout(i),e.removeEventListener("abort",n)}}}function Mc(e){if(typeof e!="object"||e===null||Array.isArray(e))throw{code:"INVALID_PARAMS",message:"viewport.setDisplay 参数必须是对象"};const{orientation:t,fullscreen:r}=e;if(t!==void 0&&t!=="portrait"&&t!=="landscape")throw{code:"INVALID_PARAMS",message:"viewport.setDisplay orientation 必须是 portrait 或 landscape"};if(r!==void 0&&typeof r!="boolean")throw{code:"INVALID_PARAMS",message:"viewport.setDisplay fullscreen 必须是布尔值"};if(t===void 0&&r===void 0)throw{code:"INVALID_PARAMS",message:"viewport.setDisplay 至少设置 orientation 或 fullscreen"};return{orientation:t,fullscreen:r}}function ei(e,t){return e.mode===t.mode&&e.hideCapsule===t.hideCapsule}function Ir(){return{code:"REQUEST_CANCELLED",message:"方向设置已取消"}}function mh(e){let t,r,n={mode:"portrait",hideCapsule:!1},i={mode:"portrait",hideCapsule:!1},o;function s(){o?.dispose(),o=void 0}function a(u){if(!u.hideCapsule){s();return}o??=hh(()=>m.apply({orientation:"portrait",fullscreen:!1},void 0,"user"))}e.operationContext.signal.addEventListener("abort",s,{once:!0});function c(u,p){if(t===u){if(t=void 0,clearTimeout(u.timer),e.operationContext.signal.removeEventListener("abort",l),"error"in p)u.controller.abort();else if(r={options:u.options,result:p.result},n=u.options,a(u.options),e.onApplied?.(u.options),p.result.supported&&!ei(i,u.options)){i={...u.options};try{e.onDisplayChange?.({orientation:i.mode,fullscreen:i.hideCapsule,source:u.source})}catch{}}for(const O of u.subscribers)O.dispose(),"error"in p?O.reject(p.error):O.resolve(p.result);u.subscribers.clear()}}function l(){t&&c(t,{error:Ir()})}function g(u,p){return new Promise((O,b)=>{const v=()=>{u.subscribers.delete(A),A.dispose(),b(Ir()),u.subscribers.size===0&&c(u,{error:Ir()})},A={resolve:O,reject:b,dispose:()=>p?.removeEventListener("abort",v)};u.subscribers.add(A),p?.addEventListener("abort",v,{once:!0}),p?.aborted&&v()})}const m={async apply(u,p,O="api"){if(te(e.operationContext.signal),p?.aborted)throw Ir();const b=Mc(u),v=t?.options??n,A={mode:b.orientation??v.mode,hideCapsule:b.fullscreen??v.hideCapsule};A.mode==="landscape"&&(A.hideCapsule=!0);const P=e.presentation.applyOrientation;if(!P)throw{code:"METHOD_FORBIDDEN",message:"当前宿主暂不支持方向控制"};if(t&&ei(t.options,A))return g(t,p);if(t&&c(t,{error:{code:"ORIENTATION_SUPERSEDED",message:"方向设置已被后续设置替换"}}),r&&ei(r.options,A))return r.result;r=void 0;const _={options:A,source:O,controller:new AbortController,subscribers:new Set};t=_;const L=g(_,p);return e.operationContext.signal.addEventListener("abort",l,{once:!0}),p||(_.timer=setTimeout(()=>{c(_,{error:{code:"ORIENTATION_TIMEOUT",message:"方向切换超时"}})},Cc)),X(()=>P.call(e.presentation,A,{...e.operationContext,signal:_.controller.signal}),_.controller.signal).then(F=>c(_,{result:F??{supported:!0}}),F=>c(_,{error:F})),L},dispose(){e.operationContext.signal.removeEventListener("abort",s),s()}};return m}function kc(e){throw{code:"INVALID_PARAMS",message:e}}function _s(e,t){e!==void 0&&(typeof e!="object"||e===null||Array.isArray(e)||Object.keys(e).length)&&kc(`${t} 不支持参数`)}function ph(e){return{[hn]:async t=>{te(e.operationContext.signal),_s(t,"navigation.close"),await X(()=>e.presentation.close(e.operationContext),e.operationContext.signal)},[mn]:async t=>{te(e.operationContext.signal),_s(t,"navigation.reload"),await X(()=>e.presentation.reload(e.operationContext),e.operationContext.signal)},[pn]:async(t,r)=>{const n=kn(e.operationContext,r?.signal);te(n.signal);const i=ih(t);if(i.target==="mini_program"){let o;if(i.extra!==void 0)try{o=Tc(i.extra)}catch{kc("navigation.openAppPage extra 必须是符合限制的 JSON-compatible 数据")}const s=e.resetDisplay;if(s){const a=Lc(n.signal);try{await a.run(()=>s(a.signal))}finally{a.dispose()}}te(n.signal),await X(()=>e.presentation.openWindow({miniProgramId:i.miniProgramId,...o===void 0?{}:{extra:o}},n),n.signal);return}await X(()=>e.presentation.openAppPage(ch(i),n),n.signal)}}}const gh=new Set(["content-length","content-encoding","transfer-encoding","content-disposition","content-range","content-type"]),yh=new Set(["content-length","content-encoding","content-disposition","content-range","content-type"]),Eh=new Set(["range","if-range","a-im"]),wh=new Set(["METHOD_FORBIDDEN","DOWNLOAD_HTTP_STATUS","DOWNLOAD_NETWORK_FAILED","DOWNLOAD_TIMEOUT","DOWNLOAD_CANCELLED","FILE_ACCESS_REVOKED","FILE_ACCESS_DENIED","FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_ALREADY_EXISTS","DIRECTORY_ALREADY_EXISTS","FILE_TYPE_MISMATCH","FILE_TOO_LARGE","FILE_QUOTA_EXCEEDED","FILE_IO_FAILED"]),bh=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i,_r={initial:0,target:1,open:2,validate:3,transfer:4,committed:5,completed:6};class Ah{constructor(t){this.signal=t}phase="initial";transition(t){if(_r[t]<=_r[this.phase])throw E("FILE_IO_FAILED","下载状态转换不合法");this.phase=t}throwIfCancelled(){if(_r[this.phase]<_r.committed&&this.signal.aborted)throw Hc()}normalizeHostError(t,r){return this.throwIfCancelled(),yo(t,r,this.signal)}}async function Ih(e,t,r){const n=r.transfer,i=r.fileRegistry;if(!n||!i)throw Te("network.download");const o=kn(r.operationContext,t.signal),s=new Ah(o.signal);s.transition("target"),s.throwIfCancelled();let a;try{a=await Rh(e,i,o)}catch(g){throw s.normalizeHostError(g,"file")}s.throwIfCancelled();let c;s.transition("open");try{c=await n.network.open(e.request,o)}catch(g){throw s.normalizeHostError(g,"network")}let l=!1;try{s.throwIfCancelled(),s.transition("validate");const g=Dh(c);Nh(c,g);const m=Ph(c.status,g);if(e.maxBytes!==void 0&&m.expectedBytes!==void 0&&m.expectedBytes>e.maxBytes)throw E("FILE_TOO_LARGE","下载响应超过 maxBytes");s.throwIfCancelled();const u=Oh(e,a,g,i);let p=0;const O=Sh(m.expectedBytes,e.maxBytes);ri(t,ti(0,m));const b={...o,onProgress(P){!Number.isSafeInteger(P)||P<p||O!==void 0&&P>O||(p=P,ri(t,ti(p,m)))}};s.transition("transfer"),l=!0;let v;try{v=await n.files.writeResource(u.hostHandle,c.body,{mode:u.mode,...e.maxBytes===void 0?{}:{maxBytes:e.maxBytes},...m.expectedBytes===void 0?{}:{expectedBytes:m.expectedBytes}},b)}catch(P){throw s.normalizeHostError(P,"transfer")}s.transition("committed"),p=_h(v,m,p,e.maxBytes),ri(t,ti(p,m));const A=i.describeFile(u.handle,u.ref);return s.transition("completed"),A}finally{l||vh(n.network,c.body)}}function _h(e,t,r,n){if(t.expectedBytes!==void 0)return t.expectedBytes;const i=n===void 0?r:Math.min(r,n);try{const o=e?.committedBytes;if(typeof o=="number"&&Number.isSafeInteger(o)&&o>=i&&(n===void 0||o<=n))return o}catch{}return i}function Sh(e,t){return e===void 0?t:t===void 0?e:Math.min(e,t)}function vh(e,t){try{Promise.resolve(e.release(t)).catch(()=>{})}catch{}}async function Rh(e,t,r){if(e.targetKind==="file"){const i=t.resolveFileEntry(e.to);return Vi(i.handle.mode),await xh(i.handle,r),{kind:"file",...i}}const n=t.resolveDirectoryEntry(e.to);return Vi(n.handle.mode),await Hh(n.handle,r),{kind:"directory",...n}}function Oh(e,t,r,n){if(t.kind==="file")return{ref:t.ref,handle:t.handle,hostHandle:t.hostHandle,mode:"replace-existing"};const i=Ch(e,r),o=n.deriveFile(t,i);return Vi(o.handle.mode),{...o,mode:e.overwrite===!0?"upsert":"create-exclusive"}}function Dh(e){if(!e||typeof e!="object"||!Number.isInteger(e.status)||e.status<100||e.status>599||e.statusText!==void 0&&typeof e.statusText!="string"||!e.body||typeof e.body!="object")throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream response");if(!B(e.headers))throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream headers");const t={};for(const[r,n]of Object.entries(e.headers)){if(r!==r.toLowerCase()||!gh.has(r)||!Array.isArray(n)||n.length===0)throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了不安全 stream header");if(n.some(i=>typeof i!="string"||/[\r\n]/.test(i)))throw E("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream header value");t[r]=[...n]}return t}function Nh(e,t){if(e.status<200||e.status>=300||e.status===206||e.status===226)throw E("DOWNLOAD_HTTP_STATUS",`下载请求失败: HTTP ${e.status}`,{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:Uh(t,yh)});if((t["content-range"]?.length??0)>0)throw E("DOWNLOAD_NETWORK_FAILED","下载响应包含 Content-Range")}function Ph(e,t){const r=t["content-length"]??[],n=t["transfer-encoding"]??[];if(r.length>0&&n.length>0)throw E("DOWNLOAD_NETWORK_FAILED","下载响应同时包含 Transfer-Encoding 与 Content-Length");if((e===204||e===205)&&r.some(l=>l!=="0"))throw E("DOWNLOAD_NETWORK_FAILED","无内容响应声明了非零 Content-Length");if((e===204||e===205)&&n.length>0)throw E("DOWNLOAD_NETWORK_FAILED","无内容响应不允许 Transfer-Encoding");const i=r.length===1&&/^(?:0|[1-9]\d*)$/.test(r[0])?Number(r[0]):void 0,o=i!==void 0&&Number.isSafeInteger(i)?i:void 0,s=Th(t["content-encoding"]),a=e===204||e===205?0:n.length===0&&s?o:void 0,c=a!==void 0;return{...a===void 0?{}:{expectedBytes:a},...c?{total:a}:{},lengthComputable:c}}function Th(e){return!e||e.length===0?!0:e.length===1&&e[0].trim().toLowerCase()==="identity"}function ti(e,t){return{loaded:e,...t.total===void 0?{}:{total:t.total},lengthComputable:t.lengthComputable}}function ri(e,t){try{e.postProgress(t)}catch{}}function Ch(e,t){const r=t["content-disposition"]??[];for(const i of r){const o=Lh(i);if(o&&Cr(o))return o}for(const i of r){const o=Mh(i);if(o&&Cr(o))return o}if(e.suggestedName!==void 0)return Uc(e.suggestedName);const n=kh(e.url);return n&&Cr(n)?n:"download.bin"}function Lh(e){const t=/(?:^|;)\s*filename\*\s*=\s*([^;]+)/i.exec(e);if(!t)return;const r=t[1].trim().replace(/^"|"$/g,""),n=/^utf-8'[^']*'(.*)$/i.exec(r);if(n)try{return decodeURIComponent(n[1])}catch{return}}function Mh(e){const t=/(?:^|;)\s*filename\s*=\s*"((?:\\.|[^"\\])*)"/i.exec(e)?.[1];return t!==void 0?t.replace(/\\(["\\])/g,"$1"):/(?:^|;)\s*filename\s*=\s*([^;]+)/i.exec(e)?.[1]?.trim()}function kh(e){const t=e.pathname.split("/").pop();if(t)try{return decodeURIComponent(t)}catch{return}}function Uc(e){try{ur(e,"suggestedName")}catch{throw E("INVALID_PARAMS","suggestedName 不是安全 basename")}if(!Cr(e))throw E("INVALID_PARAMS","suggestedName 不是安全 basename");return e}function Cr(e){return!(!e||e==="."||e===".."||Array.from(e).length>255||/[\\/<>:"|?*\u0000-\u001f\u007f]/.test(e)||/[. ]$/.test(e)||bh.test(e))}function Uh(e,t){return Object.fromEntries(Object.entries(e).filter(([r])=>t.has(r)).map(([r,n])=>[r,n.join(", ")]))}async function xh(e,t){try{const r=await e.stat(t);if(!r||r.kind!=="file")throw xc()}catch(r){throw yo(r,"file",t.signal)}}async function Hh(e,t){try{const r=await e.stat(t);if(!r||r.kind!=="directory")throw xc()}catch(r){throw yo(r,"file",t.signal)}}function Vi(e){if(e!=="readwrite")throw E("FILE_ACCESS_DENIED","下载目标只允许读取")}const Fh={METHOD_FORBIDDEN:"当前 Host 未开放下载能力",DOWNLOAD_HTTP_STATUS:"下载请求返回了失败状态",DOWNLOAD_NETWORK_FAILED:"下载网络请求失败",DOWNLOAD_TIMEOUT:"下载网络请求超时",DOWNLOAD_CANCELLED:"下载已取消",FILE_ACCESS_REVOKED:"下载目标授权已失效",FILE_ACCESS_DENIED:"下载目标不允许写入",FILE_NOT_FOUND:"下载目标文件不存在",DIRECTORY_NOT_FOUND:"下载目标目录不存在",FILE_ALREADY_EXISTS:"下载目标文件已存在",DIRECTORY_ALREADY_EXISTS:"下载目标目录已存在",FILE_TYPE_MISMATCH:"下载目标类型不匹配",FILE_TOO_LARGE:"下载响应超过大小限制",FILE_QUOTA_EXCEEDED:"下载目标配额已用尽",FILE_IO_FAILED:"下载文件写入失败"};function yo(e,t,r){if(r.aborted)return Hc();const n=Bh(e);if(n&&wh.has(n)){const o=E(n,Fh[n]??"下载失败");return Object.defineProperty(o,"cause",{value:e,enumerable:!1}),o}if(e instanceof Error&&e.name==="AbortError")return t==="network"||t==="transfer"?E("DOWNLOAD_TIMEOUT","下载网络请求超时"):E("FILE_IO_FAILED","下载文件写入失败");const i=t==="network"?E("DOWNLOAD_NETWORK_FAILED","下载网络请求失败"):E("FILE_IO_FAILED","下载文件写入失败");return Object.defineProperty(i,"cause",{value:e,enumerable:!1}),i}function Bh(e){return B(e)&&typeof e.code=="string"?e.code:void 0}function xc(){return E("FILE_TYPE_MISMATCH","下载目标类型不匹配")}function Hc(){return E("DOWNLOAD_CANCELLED","下载已取消")}function Vh(e){if(!e)return;const t=Object.keys(e).find(r=>Eh.has(r.trim().toLowerCase()));if(t)throw E("INVALID_PARAMS",`network.download 不允许设置请求头: ${t}`)}const Eo="withCredentials",qh=new Set(["url","method","params","data","headers","timeout",Eo]),zh=new Set(["url","to","params","headers","timeout","suggestedName","overwrite","maxBytes",Eo]),Gh=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),Ss=3e4,vs=2*1024*1024,jh=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,$h=/[\u0000-\u0008\u000A-\u001F\u007F]/,Wh=/^(?:authorization|authentication-info|proxy-authentication-info|cookie|set-cookie|set-cookie2|pkey|x-pkey|x-access-token|x-auth-token)$/i,Kh="network.request 不支持 multipart/form-data,请使用专用上传能力";function Yh(e){const t=Qh(e.runtimePermissions),r=dm(e.allowedHttpOrigins);return{[Jr]:async(n,i)=>{const o=Xh(n,{permission:t,allowedHttpOrigins:r});return Ih(o,i,{transfer:e.transfer,fileRegistry:e.fileRegistry,operationContext:e.operationContext})},[Qr]:async(n,i)=>{const o=kn(e.operationContext,i?.signal);te(o.signal);const s=Jh(n,{permission:t,allowedHttpOrigins:r});let a;try{a=await X(()=>e.network.request(s,o),o.signal)}catch(c){throw fm(c)?c:hm(c,"REQUEST_UNSUPPORTED")?$("REQUEST_UNSUPPORTED","当前 Host 不支持该网络请求"):$("REQUEST_FAILED","网络请求失败")}return um(a)}}}function Qh(e){const t=Ue(e),r=t.permissions.network;return{enabled:t.valid&&r?.status==="enabled",useOfficialDomain:t.valid&&r?.status==="enabled"&&r.config.useOfficialDomain===!0}}function Jh(e,t){const r=Hn(e,"network.request 参数必须是对象"),n=Object.keys(r).filter(c=>!qh.has(c));if(n.length>0)throw $("INVALID_PARAMS",`network.request 不支持字段: ${n.join(", ")}`);Bc(r,"network.request");const i=Fc(r,t,"network.request"),o=em(r.method),s=r.data;s!==void 0&&nm(s),om(i.headers,s);const a=sm(i.headers,s,i.official);return{source:"public-sdk",target:{kind:"absolute-url",url:i.url.href},redirectPolicy:"error",route:i.official?"official":"external",...o===void 0?{}:{method:o},...i.params===void 0?{}:{params:i.params},...s===void 0?{}:{data:s},...i.headers===void 0?{}:{headers:i.headers},...a===void 0?{}:{bodyEncoding:a},...i.timeout===void 0?{}:{timeout:i.timeout}}}function Xh(e,t){const r=Hn(e,"network.download 参数必须是对象"),n=Object.keys(r).filter(c=>!zh.has(c));if(n.length>0)throw $("INVALID_PARAMS",`network.download 不支持字段: ${n.join(", ")}`);Bc(r,"network.download");const i=Fc(r,t,"network.download");if(i.timeout!==void 0&&i.timeout<=0)throw $("INVALID_PARAMS","network.download timeout 必须是有限正数");Vh(i.headers);const o=co(r.to),s=ja(r.to);if(!o&&!s)throw $("INVALID_PARAMS","network.download to 必须是有效 File/Directory ref");if(o&&(r.suggestedName!==void 0||r.overwrite!==void 0))throw $("INVALID_PARAMS","File 下载目标不接受 suggestedName/overwrite");let a;if(r.suggestedName!==void 0){if(typeof r.suggestedName!="string")throw $("INVALID_PARAMS","suggestedName 必须是字符串");a=Uc(r.suggestedName)}if(r.overwrite!==void 0&&typeof r.overwrite!="boolean")throw $("INVALID_PARAMS","overwrite 必须是布尔值");if(r.maxBytes!==void 0&&(!Number.isSafeInteger(r.maxBytes)||r.maxBytes<=0))throw $("INVALID_PARAMS","maxBytes 必须是正的 safe integer");return{request:{source:"public-sdk",target:{kind:"absolute-url",url:i.url.href},redirectPolicy:"error",route:"download",method:"GET",...i.params===void 0?{}:{params:i.params},...i.headers===void 0?{}:{headers:i.headers},...i.timeout===void 0?{}:{timeout:i.timeout}},url:i.url,to:r.to,targetKind:o?"file":"directory",...a===void 0?{}:{suggestedName:a},...r.overwrite===void 0?{}:{overwrite:r.overwrite},...r.maxBytes===void 0?{}:{maxBytes:r.maxBytes}}}function Fc(e,t,r){const n=Zh(e.url,t.allowedHttpOrigins,r),i=zl(n);if(i&&!t.permission.useOfficialDomain)throw $("PERMISSION_DENIED","当前小程序暂不支持访问官方域名");if(ql(n.pathname,i))throw $("PERMISSION_DENIED",`${r} 不允许访问 Runtime 或账号敏感接口`);return{url:n,official:i,params:e.params===void 0?void 0:{...Hn(e.params,`${r} params 必须是对象`)},headers:e.headers===void 0?void 0:tm(e.headers,r),timeout:rm(e.timeout,r)}}function Zh(e,t,r="network.request"){if(typeof e!="string"||!e.trim())throw $("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`);let n;try{n=new URL(e)}catch{throw $("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw $("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`);if(n.username||n.password)throw $("INVALID_PARAMS",`${r} url 不允许包含用户信息`);if(n.protocol==="http:"&&!t.has(n.origin))throw $("PERMISSION_DENIED",`${r} 生产环境只允许 HTTPS`);return n}function em(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw $("INVALID_PARAMS","network.request method 必须是字符串");const t=e.trim().toUpperCase();if(!Gh.has(t))throw $("INVALID_PARAMS","network.request method 不合法");return t}function tm(e,t="network.request"){const r=Hn(e,`${t} headers 必须是 Record<string, string>`),n={};for(const[i,o]of Object.entries(r)){const s=i.trim();if(!s||s!==i||!jh.test(s)||typeof o!="string"||$h.test(o))throw $("INVALID_PARAMS",`${t} headers 必须是 Record<string, string>`);if(Gl(s))throw $("INVALID_PARAMS",`${t} 不允许设置敏感请求头: ${i}`);n[s]=o}return n}function Bc(e,t){const r=e[Eo];if(r!==void 0&&typeof r!="boolean")throw $("INVALID_PARAMS",`${t} 旧版凭据字段必须是布尔值`)}function rm(e,t="network.request"){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw $("INVALID_PARAMS",`${t} timeout 必须是非负数字`);if(t==="network.request"&&e>Ss)throw $("INVALID_PARAMS",`${t} timeout 不能超过 ${Ss}ms`);return e}}function nm(e){if(typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData)throw $("INVALID_PARAMS","network.request data 不支持 File、Blob 或 FormData,请使用专用上传能力");if(im(e)>vs)throw $("INVALID_PARAMS",`network.request data 不能超过 ${vs} 字节`)}function im(e){if(typeof e=="string")return ni(e);if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(typeof URLSearchParams<"u"&&e instanceof URLSearchParams)return ni(e.toString());try{const t=JSON.stringify(e);return t?ni(t):0}catch{throw $("INVALID_PARAMS","network.request data 必须可序列化")}}function om(e,t){const r=Vc(e),n=typeof t=="string"&&t.trimStart().startsWith("--")&&/content-disposition\s*:\s*form-data/i.test(t);if(r?.includes("multipart/form-data")||n)throw $("INVALID_PARAMS",Kh)}function sm(e,t,r){if(t===void 0)return;const n=Vc(e);return n?.includes("application/x-www-form-urlencoded")?"form":n?.includes("application/json")?"json":typeof URLSearchParams<"u"&&t instanceof URLSearchParams||r&&(Array.isArray(t)||cm(t))?"form":am(t)?"json":void 0}function Vc(e){return e?Object.entries(e).find(([r])=>r.trim().toLowerCase()==="content-type")?.[1].toLowerCase():void 0}function am(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="object"&&!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer)}function cm(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function dm(e){const t=new Set;for(const r of e??[])try{const n=new URL(r);n.protocol==="http:"&&!n.username&&!n.password&&n.pathname==="/"&&!n.search&&!n.hash&&lm(n.hostname)&&t.add(n.origin)}catch{}return t}function lm(e){const t=e.toLowerCase();if(t==="[::1]")return!0;const r=t.split(".").map(Number);return r.length!==4||r.some((n,i)=>!/^\d+$/.test(t.split(".")[i])||n<0||n>255)?!1:r[0]===127||r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}function um(e){return Object.keys(e.headers).some(Rs)?{...e,headers:Object.fromEntries(Object.entries(e.headers).filter(([t])=>!Rs(t)))}:e}function Rs(e){const t=e.trim().toLowerCase();return Wh.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function fm(e){return e instanceof Error&&e.name==="AbortError"}function hm(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function Hn(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw $("INVALID_PARAMS",t);return e}function ni(e){return new TextEncoder().encode(e).length}function $(e,t){return{code:e,message:t}}function mm(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function pm(e){if(typeof e=="number")return Number.isSafeInteger(e)&&e>0?String(e):void 0;if(typeof e=="string")return e.trim()||void 0}function gm(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topicIds 必须是数组"],values:[]};const t=[],r=new Set,n=[];for(const i of e){const o=pm(i);o?r.has(o)||(r.add(o),n.push(o)):t.push("post.topicIds 每项必须是正整数或非空字符串")}return{invalidMessages:t,values:n}}function ym(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topics 必须是数组"],values:[]};const t=[],r=new Set,n=[];for(const i of e){const o=typeof i=="string"?i.trim():"";!o||o.startsWith("#")||o.endsWith("#")?t.push("post.topics 每项必须是不含首尾 # 的非空字符串"):r.has(o)||(r.add(o),n.push(o))}return{invalidMessages:t,values:n}}function qc(e,t){if(e==null)return{};if(!mm(e))return{invalidMessage:`${t.method} post 必须是对象或 null`};const r=gm(e.topicIds),n=ym(e.topics),i=[...r.invalidMessages,...n.invalidMessages];let o=r.values;t.maxTopicIds!==void 0&&o.length>t.maxTopicIds&&(i.push(`${t.method} post.topicIds 最多允许 ${t.maxTopicIds} 项`),o=o.slice(0,t.maxTopicIds));const s=o.length||n.values.length?{...o.length?{topicIds:o}:{},...n.values.length?{topics:n.values}:{}}:void 0;return s||i.push(`${t.method} post 至少需要一个有效的 topicIds 或 topics`),{invalidMessage:i[0],post:s}}function Em(e){try{return new URL(e).protocol==="heybox-mini-dev:"}catch{return!1}}async function wm(e){try{if(Em(e.getCurrentHref()))return!0}catch{}try{return!!await e.isDevRuntime()}catch{return!1}}function ce(e){throw{code:"INVALID_PARAMS",message:e}}function fr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function qi(e,t){return typeof e!="string"||!e.trim()?ce(t):e}function bm(e,t){const r=qi(e,t);try{const n=new URL(r);return n.protocol!=="http:"&&n.protocol!=="https:"?ce(t):r}catch{return ce(t)}}function Am(e){return e==="wechatSession"||e==="wechatTimeline"||e==="qqFriend"||e==="qzone"||e==="weibo"}function zc(e,t,r){const n=e.identity.get(),i=n?.miniProgramId.trim();if(!i)return ce(`${t} 缺少有效的小程序分享地址`);try{const o=new URL(e.environment.getCurrentHref()),s=new URL("/tools/common_share",o);s.searchParams.set("user_miniprogram_id",i);const a=n?.version?.trim();a&&s.searchParams.set("miniprogram_version",a);const c=o.searchParams.get("h_src");return c?.trim()&&s.searchParams.set("h_src",c),r!==void 0&&s.searchParams.set("extra",r),s.href}catch{return ce(`${t} 缺少有效的小程序分享地址`)}}function Im(e,t){if(!fr(e))return ce("share.showShareMenu 参数必须是对象");if(Object.prototype.hasOwnProperty.call(e,"url"))return ce("share.showShareMenu 不支持自定义 url");const r=e.channel;if(r!==void 0&&!Am(r))return ce("share.showShareMenu channel 不合法");const n=Gc(e.extra,"share.showShareMenu");return{title:qi(e.title,"share.showShareMenu title 必须是非空字符串"),description:qi(e.desc,"share.showShareMenu desc 必须是非空字符串"),url:zc(t,"share.showShareMenu",n),...e.imageUrl===void 0?{}:{imageUrl:bm(e.imageUrl,"share.showShareMenu imageUrl 必须是 HTTP(S) URL")},...r===void 0?{}:{channel:r}}}function Gc(e,t){if(e!==void 0)try{return Tc(e)}catch{return ce(`${t} extra 必须是符合限制的 JSON-compatible 数据`)}}async function jc(e,t){return e.invalidMessage&&await X(()=>wm(t.environment),t.operationContext.signal)?ce(e.invalidMessage):e.post}function Os(e,t){const r=Number(e);return Number.isFinite(r)&&r>0?r:t}function _m(e){const t=e.getViewportMetrics();return{left:0,top:0,width:Os(t.windowWidth,0),height:Os(t.windowHeight,0)}}function zi(e,t){const r=Number(e);return!Number.isFinite(r)||r<0?ce(t):r}function Ds(e,t){const r=Number(e);return!Number.isFinite(r)||r<=0?ce(t):r}function Sm(e){return fr(e)?{left:zi(e.left,"share.screenshot rect.left 必须是非负数字"),top:zi(e.top,"share.screenshot rect.top 必须是非负数字"),width:Ds(e.width,"share.screenshot rect.width 必须是正数"),height:Ds(e.height,"share.screenshot rect.height 必须是正数")}:ce("share.screenshot rect 必须是对象")}function vm(e,t){if(e!=null&&!fr(e))return ce("share.screenshot 参数必须是对象");const r=e??{};return r.saveToAlbum!==void 0&&typeof r.saveToAlbum!="boolean"?ce("share.screenshot saveToAlbum 必须是布尔值"):{rect:r.rect===void 0?_m(t):Sm(r.rect),...r.delay===void 0?{}:{delay:zi(r.delay,"share.screenshot delay 必须是非负数字")},...r.saveToAlbum===void 0?{}:{saveToAlbum:r.saveToAlbum}}}async function Rm(e,t){te(t.operationContext.signal);const r=Im(e,t);let n=qc(e.post,{maxTopicIds:1,method:"share.showShareMenu"});r.channel&&n.post&&(n={invalidMessage:n.invalidMessage||"share.showShareMenu channel 与 post 不能同时使用"});const i=await jc(n,t);return X(()=>t.presentation.showShareMenu({...r,post:i},t.operationContext),t.operationContext.signal)}async function Om(e,t){if(te(t.operationContext.signal),e!==void 0&&!fr(e))return ce("share.copyLink 参数必须是对象");const r=Gc(e?.extra,"share.copyLink"),n=zc(t,"share.copyLink",r);return await X(()=>t.presentation.setClipboard({text:n},t.operationContext),t.operationContext.signal),n}async function Dm(e,t){te(t.operationContext.signal);const r=vm(e,t.presentation),n=qc(fr(e)?e.post:void 0,{method:"share.screenshot"}),i=await jc(n,t),o=t.identity.get()?.miniProgramId.trim()||void 0,s=Nm();let a=!1,c;try{a=!0,await X(()=>t.presentation.setScreenshotChromeHidden(!0,t.operationContext),t.operationContext.signal),c={status:"fulfilled",value:await X(()=>t.presentation.captureAndShare({...r,post:i,...o?{sourceMiniProgramId:o}:{}},t.operationContext),t.operationContext.signal)}}catch(g){c={status:"rejected",error:g}}const l=a?await Pm(t.presentation,s,t.operationContext.signal):void 0;if(c.status==="rejected")throw c.error;if(l)throw l;return c.value}function Nm(){return{lifecycle:"cleanup",signal:new AbortController().signal}}async function Pm(e,t,r){let n;try{n=Promise.resolve(e.setScreenshotChromeHidden(!1,t))}catch{return}try{await X(()=>n,r,{invokeWhenAborted:!0})}catch(i){if(r.aborted)return i}}function Tm(e){return{[jr]:(t,r)=>Om(t,e),[$r]:(t,r)=>Rm(t,e),[Wr]:(t,r)=>Dm(t,e)}}const Cm=128,Lm=/^[A-Za-z0-9_-]+$/;function Mm(e){const t=km(e),r={[Kt]:async n=>{te(e.operationContext.signal);const i=Ns(n,Kt,e.storageLimits?.maxKeyLength),o=await X(()=>e.storage.getRaw(ii(t(),i),e.operationContext),e.operationContext.signal);return{data:Ps(o)}},[Yt]:async n=>{te(e.operationContext.signal);const i=$c(n,"storage.setStorage 参数必须是对象"),o=Ns(i,Yt,e.storageLimits?.maxKeyLength),s=Um(i.data,e.storageLimits?.maxValueBytes);await X(()=>e.storage.setRaw(ii(t(),o),s,e.operationContext),e.operationContext.signal)}};return e.storageDiagnostics?{handlers:r,diagnostics:{getSnapshot:async()=>{te(e.operationContext.signal);let n;try{n=t()}catch{throw $e("STORAGE_DIAGNOSTICS_NOT_READY","Storage diagnostics 只能在 canonical identity 绑定后使用")}const i=ii(n,"");return(await X(()=>e.storageDiagnostics.listRaw(e.operationContext),e.operationContext.signal)).filter(s=>s.key.startsWith(i)).map(s=>{const a=s.value;return{area:s.area,key:s.key.slice(i.length),value:Ps(a),serializedValue:a,bytes:Wc(a)}}).sort((s,a)=>s.key.localeCompare(a.key))}}}:{handlers:r}}function km(e){let t=!1,r;return()=>{if(!t){const n=e.identity.get()?.miniProgramId.trim();if(n)r=`id_${Ts(n)}`;else{const i=e.anonymousStorageScope?.trim();i&&(r=`anon_${Ts(i)}`)}t=r!==void 0}if(!r)throw $e("INVALID_STATE","storage scope 只能在 canonical identity 绑定后使用");return r}}function ii(e,t){return`hb_miniprogram_${e}_${t}`}function Ns(e,t,r=Cm){const i=$c(e,`${t} 参数必须是对象`).key;if(typeof i!="string")throw $e("INVALID_PARAMS",`${t} key 必须是字符串`);if(!i||i.length>r||!Lm.test(i))throw $e("INVALID_PARAMS",`storage key 仅支持 1-${r} 位字母、数字、下划线和连字符`);return i}function Um(e,t){let r;try{r=JSON.stringify(e)}catch{throw $e("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化")}if(typeof r!="string")throw $e("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化");if(t!==void 0&&Wc(r)>t)throw $e("STORAGE_QUOTA_EXCEEDED",`storage.setStorage data 超出 ${t} 字节限制`);return r}function Ps(e){if(!(e===void 0||e===""))try{return JSON.parse(e)}catch{return e}}function $c(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw $e("INVALID_PARAMS",t);return e}function Ts(e){return/^[A-Za-z0-9_-]{1,64}$/.test(e)?e:xm(e)}function xm(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function Wc(e){return new TextEncoder().encode(e).length}function $e(e,t){return{code:e,message:t}}const Cs=120;function Ve(e){throw{code:"INVALID_PARAMS",message:e}}function wo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Kc(e,t,r){const n=Object.keys(e).filter(i=>!t.includes(i));n.length&&Ve(`${r} 不支持字段: ${n.join(", ")}`)}function Hm(e){if(!wo(e))return Ve("ui.showToast 参数必须是对象");if(Kc(e,["message","status"],"ui.showToast"),typeof e.message!="string"||!e.message.trim())return Ve("ui.showToast message 必须是非空字符串");const t=e.message.trim();if(t.length>Cs)return Ve(`ui.showToast message 不能超过 ${Cs} 字符`);const r=e.status;if(r!==void 0&&r!=="success"&&r!=="error")return Ve("ui.showToast status 必须是 success 或 error");const n=r;return{message:t,...n===void 0?{}:{status:n}}}function Fm(e){return e===void 0?{dismissible:!1}:wo(e)?(Kc(e,["dismissible"],"ui.showLoading"),e.dismissible!==void 0&&typeof e.dismissible!="boolean"?Ve("ui.showLoading dismissible 必须是布尔值"):{dismissible:e.dismissible??!1}):Ve("ui.showLoading 参数必须是对象")}function Bm(e){e!==void 0&&(!wo(e)||Object.keys(e).length)&&Ve("ui.hideLoading 不支持参数")}function Vm(e){return{[cn]:async t=>{te(e.operationContext.signal),await X(()=>e.presentation.showToast(Hm(t),e.operationContext),e.operationContext.signal)},[dn]:async t=>{te(e.operationContext.signal),await X(()=>e.presentation.showLoading(Fm(t),e.operationContext),e.operationContext.signal)},[ln]:async t=>{te(e.operationContext.signal),Bm(t),await X(()=>e.presentation.hideLoading(e.operationContext),e.operationContext.signal)}}}const qm={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.account.home_v2.get",method:"GET",path:"/account/home_v2/",parse(e){return ge(e,"当前用户首页资料接口响应异常")}},zm=3e4;function Gm(e,t,r={}){const n=r.ttlMs??zm,i=r.requestPolicyEnabled!==!1,o=r.requestGate?{capability:"user",gate:r.requestGate}:void 0;let s=0,a,c;async function l(){let m;try{m=await Un(e,qm,void 0,{...t,credentials:"heybox-session",...o?{gate:o}:{}})}catch(u){throw t.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):u instanceof oe?E("REQUEST_UNSUPPORTED",u.message):u instanceof lr?E("INVALID_RESPONSE","user home_v2 响应不合法"):u instanceof vt?E("REQUEST_FAILED","user home_v2 请求失败"):u instanceof St?i&&(u.status===403||u.status===429)?E("RATE_LIMITED","user home_v2 请求已被网关限流,请稍后重试",{status:u.status,...u.retryAfterMs===void 0?{}:{retryAfterMs:u.retryAfterMs}}):E("REQUEST_FAILED",u.message):$m(u)?u:E("REQUEST_FAILED","user home_v2 请求失败")}return jm(m,"user home_v2")}function g(m){const u=Date.now();if(a?.userId===m&&a.expiresAt>u)return Promise.resolve(a.value);if(c?.userId===m&&c.generation===s)return c.promise;const p=s,O=l().then(b=>(s===p&&(a={userId:m,value:b,expiresAt:Date.now()+n}),b)).finally(()=>{c?.promise===O&&(c=void 0)});return c={userId:m,generation:p,promise:O},O}return{get:g,clear(){s+=1,a=void 0,c=void 0}}}function jm(e,t){if(!B(e))throw E("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw E(n,r)}if(!B(e.result))throw E("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function $m(e){return B(e)&&typeof e.code=="string"&&typeof e.message=="string"}const Wm={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.game.steam.get_game_list.get",method:"GET",path:"/game/steam/get_game_list",query(e){return{userid:e.userId,...e.steamId?{steam_id:e.steamId}:{},limit:e.limit,offset:e.offset,sort:e.sort,need_hidden:e.includeHidden,...e.personalInformationOpen===void 0?{}:{personal_infomation_open:e.personalInformationOpen},...e.q?{q:e.q}:{}}},parse(e,t){return ge(e,"Steam 游戏库接口响应异常")}};function Km(e,t=ki){const r=$l({version:"1",validate:Qm}),n={ttlMs:Number.isFinite(t)?Math.max(0,Math.floor(t)):ki,memoryMaxEntries:64,diskMaxEntries:256,diskMaxBytes:10*1024*1024,maxEntryBytes:512*1024};return{persistent:e.register({namespace:"user.steam-game-list",codec:r,policy:{...n,persistence:"memory-and-disk"}}),unresolved:e.register({namespace:"user.steam-game-list.unresolved",codec:r,policy:{...n,persistence:"memory"}})}}function Ls(e,t){if(e.steamId)return e.steamId;for(const r of["steamid","steam_id","steamId"]){const n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}function Ym(e){const{query:t}=e;return JSON.stringify([e.miniProgramId,e.userId,e.effectiveSteamId??null,e.personalInformationOpen??null,t.limit,t.offset,t.sort,t.q??"",t.includeHidden])}function Qm(e){if(!B(e)||!Array.isArray(e.gameList)||typeof e.hasMore!="boolean"||!Number.isInteger(e.nextOffset)||Number(e.nextOffset)<0||(oi(e,"total"),e.isMe!==void 0&&typeof e.isMe!="boolean"))throw Xe();for(const t of e.gameList){if(!B(t)||!Gi(t.appid)||!Gi(t.steamAppid)||typeof t.name!="string"||!t.name.trim())throw Xe();for(const r of["image","icon"])Ms(t,r);for(const r of["playtimeForever","playtime2Weeks"])oi(t,r);if(t.tags!==void 0&&(!Array.isArray(t.tags)||t.tags.some(r=>typeof r!="string"||!r.trim())))throw Xe();if(t.price!==void 0){if(!B(t.price))throw Xe();for(const r of["current","initial","deadlineDate"])Ms(t.price,r);for(const r of["discount","lowestPrice","deadlineTimestamp"])oi(t.price,r)}}return e}function Gi(e){return typeof e=="number"&&Number.isFinite(e)}function oi(e,t){if(e[t]!==void 0&&!Gi(e[t]))throw Xe()}function Ms(e,t){if(e[t]!==void 0&&typeof e[t]!="string")throw Xe()}function Xe(){return E("INVALID_RESPONSE","Steam 游戏库缓存数据不合法")}const Yc=20,Jm=100,Xm=128,Qc=0,Jc="weeks",Zm=100,ep=new Set(["weeks","all","achieved"]);function tp(){return{nickname:"",avatar:""}}function rp(e){const t=Gm(e.network,e.operationContext,{requestGate:e.requestGate,requestPolicyEnabled:e.requestPolicyEnabled}),r=e.requestPolicyEnabled!==!1,n=e.cacheManager??ec(),i=Km(n,r?e.steamGameListTtlMs:0);let o;const s=new Map;let a=Promise.resolve();function c(d,h){const f=JSON.stringify([d,h]);return(!o||o.key!==f)&&(o={key:f,scope:n.createScope(h,n.createScope(d))}),o.scope}function l(){const d=o;o=void 0,d&&n.invalidateScope(d.scope).catch(()=>{}),s.clear()}const g=uc({ttlMs:Math.max(0,Math.floor(e.profileTtlMs??dc))}),m=e.requestGate?{capability:"user",gate:e.requestGate}:void 0;let u=0,p=!1;const O=e.account.onChange(()=>{u+=1,t.clear(),g.invalidate(),l()}),b=e.authorization.onEvent((d,h)=>{d==="user_info_authorization_change"&&Object.values(h).some(f=>f==="denied")&&(u+=1,t.clear(),g.invalidate(),l(),a=a.then(async()=>{if(p)return;const f=await e.account.getCurrentUserId(e.operationContext);typeof f=="string"&&f.trim()&&await n.invalidateScope(c(A(),f.trim()))}).catch(()=>{}))});function v(){if(p||e.operationContext.signal.aborted)throw E("RUNTIME_DESTROYED","小程序 Runtime 已终止")}function A(){const d=e.identity.get()?.miniProgramId?.trim();if(!d)throw E("INVALID_STATE","用户能力缺少 canonical 小程序身份");return d}async function P(){v(),await a,v();let d;try{d=await e.account.getCurrentUserId(e.operationContext)}catch(h){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):Us(h)?h:E("REQUEST_FAILED","读取小黑盒账号失败")}return typeof d=="string"&&d.trim()?d.trim():void 0}async function _(d,h){const f=await P();if(u!==h||f!==d)throw E("AUTHORIZATION_CONTEXT_CHANGED","用户请求期间账号上下文已变化,请重新操作")}async function L(d,h,f=e.operationContext.signal){try{return await Un(e.network,d,h,{...e.operationContext,signal:f,credentials:"heybox-session",...m?{gate:m}:{}})}catch(y){throw e.operationContext.signal.aborted?E("RUNTIME_DESTROYED","小程序 Runtime 已终止"):y instanceof oe?E("REQUEST_UNSUPPORTED",y.message):y instanceof lr?E("INVALID_RESPONSE","用户接口响应不合法"):y instanceof vt?E("REQUEST_FAILED","用户请求失败"):y instanceof St?r&&(y.status===403||y.status===429)?E("RATE_LIMITED","用户请求已被网关限流,请稍后重试",{status:y.status,...y.retryAfterMs===void 0?{}:{retryAfterMs:y.retryAfterMs}}):E("REQUEST_FAILED",y.message):Us(y)?y:E("REQUEST_FAILED","用户请求失败")}}async function F(){A();const d=u,h=await P();if(!h)return{isHeyboxAppLoggedIn:!1,authorization:null,userInfo:null};const[f,y]=await Promise.all([e.authorization.getOrCreateLocalIdentity(h),N(h).catch(()=>tp())]);return await _(h,d),{isHeyboxAppLoggedIn:!0,authorization:e.authorization.getAuthorization(),userInfo:{app_user_id:f.appUserId,profile:y,...f.steamId?{steam_id:f.steamId}:{}}}}function N(d){return g.read(d,()=>L(lc,void 0).then(h=>{const f=ks(h,"账号基础信息");if(f.display_username!==void 0&&typeof f.display_username!="string")throw E("INVALID_RESPONSE","账号基础信息 nickname 不合法");if(f.display_avatar!==void 0&&typeof f.display_avatar!="string")throw E("INVALID_RESPONSE","账号基础信息 avatar 不合法");return{nickname:f.display_username??"",avatar:f.display_avatar??""}}))}async function I(d){const h=np(d),f=A(),y=u,w=await P();if(!w)return l(),{isLogin:!1,isBound:!1,data:null};const S=await t.get(w);await _(w,y);const T=bo(S.steam_id_info);if(Object.keys(T).length===0)return await n.invalidateScope(c(f,w)).catch(()=>{}),await _(w,y),s.delete(JSON.stringify([f,w])),{isLogin:!0,isBound:!1,data:null};const V=JSON.stringify([f,w]),C=c(f,w),D=Ls({...h,steamId:void 0},T),M=Xc(T.personal_infomation_open??T.personal_information_open),R=JSON.stringify([D??null,M??null]),U=s.get(V);U&&U.identity!==R&&(await n.invalidateScope(C).catch(()=>{}),await _(w,y));const x={identity:R,scope:n.createScope(R,C)};s.set(V,x);const H=Ls(h,T),q=H?i.persistent:i.unresolved,z=n.createScope(H??"unresolved",x.scope),G=async()=>{if(await _(w,y),A()!==f||s.get(V)?.identity!==R)throw E("AUTHORIZATION_CONTEXT_CHANGED","Steam 游戏库请求期间绑定上下文已变化")},ee=await q.read({scope:z,key:Ym({miniProgramId:f,userId:w,effectiveSteamId:H,personalInformationOpen:M,query:h}),signal:e.operationContext.signal,load:async Z=>{const J=await L(Wm,{userId:w,...h,personalInformationOpen:M},Z);return await G(),cp(ks(J,"Steam 游戏库"),h)}}).catch(async Z=>{throw await G(),Z});return await G(),{isLogin:!0,isBound:!0,data:ee}}return{getInfo:F,getSteamGameList:I,async invalidateSteamGameListCache(){const d=A(),h=u,f=await P();if(!f)return;const y=c(d,f);await Promise.all([i.persistent.invalidateScope(y),i.unresolved.invalidateScope(y)]),t.clear(),s.delete(JSON.stringify([d,f])),await _(f,h)},dispose(){p||(p=!0,u+=1,O(),b(),t.clear(),g.dispose(),i.persistent.dispose(),i.unresolved.dispose(),e.cacheManager||n.dispose())}}}function np(e){if(e==null)return{limit:Yc,offset:Qc,sort:Jc,includeHidden:!1};if(!B(e))throw qe("user.getSteamGameList 参数必须是对象");const t=Object.keys(e).find(n=>!["steamId","limit","offset","sort","q","includeHidden"].includes(n));if(t)throw qe(`user.getSteamGameList 不支持字段: ${t}`);const r={limit:ip(e.limit),offset:op(e.offset),sort:sp(e.sort),includeHidden:ap(e.includeHidden)};if(e.steamId!==void 0){if(typeof e.steamId!="string"||!e.steamId.trim()||e.steamId.trim().length>Xm)throw qe("user.getSteamGameList steamId 必须是非空字符串");r.steamId=e.steamId.trim()}if(e.q!==void 0){if(typeof e.q!="string")throw qe("user.getSteamGameList q 必须是字符串");const n=e.q.trim();n&&(r.q=n.slice(0,Zm))}return r}function ip(e){if(e===void 0)return Yc;if(!Number.isInteger(e)||Number(e)<1)throw qe("user.getSteamGameList limit 必须是正整数");return Math.min(Number(e),Jm)}function op(e){if(e===void 0)return Qc;if(!Number.isInteger(e)||Number(e)<0)throw qe("user.getSteamGameList offset 必须是非负整数");return Number(e)}function sp(e){if(e===void 0)return Jc;if(typeof e!="string"||!ep.has(e))throw qe("user.getSteamGameList sort 不支持");return e}function ap(e){if(e===void 0)return!1;if(typeof e!="boolean")throw qe("user.getSteamGameList includeHidden 必须是 boolean");return e}function cp(e,t){if(!Array.isArray(e.game_list))throw E("INVALID_RESPONSE","Steam 游戏库 game_list 必须是数组");const r=e.game_list.map(dp).filter(a=>a!==void 0),n=wn(e.total),i=t.offset+r.length,o={gameList:r,hasMore:r.length>=t.limit,nextOffset:i};n!==void 0&&(o.total=n,o.hasMore=i<n);const s=Xc(e.is_me);return s!==void 0&&(o.isMe=s),o}function dp(e){const t=bo(e),r=wn(t.appid),n=wn(t.steam_appid)??r,i=Ao(t.name);if(r===void 0||n===void 0||!i)return;const o={appid:r,steamAppid:n,name:i};qt(o,"image",t.image),qt(o,"icon",t.appicon??t.icon),zt(o,"playtimeForever",t.playtime_forever),zt(o,"playtime2Weeks",t.playtime_2weeks);const s=up(t.external_tags??t.tags);s.length&&(o.tags=s);const a=lp(t.price);return a&&(o.price=a),o}function lp(e){const t=bo(e),r={};return qt(r,"current",t.current),qt(r,"initial",t.initial),zt(r,"discount",t.discount),zt(r,"lowestPrice",t.lowest_price),qt(r,"deadlineDate",t.deadline_date),zt(r,"deadlineTimestamp",t.deadline_timestamp),Object.keys(r).length?r:void 0}function ks(e,t){if(!B(e))throw E("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw E(n,r)}if(!B(e.result))throw E("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function bo(e){return B(e)?e:{}}function Ao(e){return typeof e=="string"?e.trim():typeof e=="number"||typeof e=="boolean"?String(e):""}function up(e){return Array.isArray(e)?e.map(Ao).filter(Boolean):[]}function wn(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()&&Number.isFinite(Number(e)))return Number(e)}function Xc(e){if(e===!0||e===1||e==="1")return!0;if(e===!1||e===0||e==="0")return!1}function qt(e,t,r){const n=Ao(r);n&&Object.assign(e,{[t]:n})}function zt(e,t,r){const n=wn(r);n!==void 0&&Object.assign(e,{[t]:n})}function qe(e){return E("INVALID_PARAMS",e)}function Us(e){return B(e)&&typeof e.code=="string"&&typeof e.message=="string"}function fp(e){const t=e.userDataMode??bu(e.runtimePermissions,e.steamAccount===!0);return{[qr]:async r=>(xs(r,"user.getInfo"),jo(t,"user.getInfo"),e.user.getInfo()),[zr]:async(r,n)=>{xs(r,"user.revokeAuthorization"),await e.authorization.revoke(n.trustedUserGesture)},[Gr]:async r=>(jo(t,"user.getSteamGameList"),e.user.getSteamGameList(r))}}function xs(e,t){if(e!==void 0)throw E("INVALID_PARAMS",`${t} 不接收入参`)}function Hs(e){throw{code:"INVALID_PARAMS",message:e}}function Mt(e,t){const r=Number(e);return Number.isFinite(r)&&r>0?r:t}function Zc(e,t){const r=Number(e);return Number.isFinite(r)&&r>=0?r:t}function Sr(e,t,r){return Math.min(Zc(e,t),r)}async function hp(e){try{return Zc(await e.getNavigationBarHeight(),0)}catch{return 0}}function mp(e,t,r,n){const i=Sr(e.safeArea?.left,0,t),o=Math.max(i,Sr(e.safeArea?.right,t,t)),s=Sr(e.safeArea?.top,n,r),a=Math.max(s,Sr(e.safeArea?.bottom,r,r));return{left:i,right:o,top:s,bottom:a,width:o-i,height:a-s}}async function Fs(e){const t=e.getViewportMetrics(),r=Mt(t.windowWidth,0),n=Mt(t.windowHeight,0),i=await hp(e);return{pixelRatio:Mt(t.pixelRatio,1),screenWidth:Mt(t.screenWidth,r),screenHeight:Mt(t.screenHeight,n),windowWidth:r,windowHeight:n,statusBarHeight:i,safeArea:mp(t,r,n,i),screenTop:i}}function pp(e){const t=new AbortController,r={...e,operationContext:{...e.operationContext,signal:t.signal}};let n=!1,i=0,o,s;const a=()=>{if(n||r.operationContext.signal.aborted||!r.onViewportChange)return;const m=++i;Fs(r.presentation).then(u=>{if(n||r.operationContext.signal.aborted||m!==i)return;const p=JSON.stringify(u);p!==o&&(o=p,r.onViewportChange?.(u))}).catch(()=>{})},c=mh({...r,onApplied:a}),l=()=>{n||(n=!0,e.operationContext.signal.removeEventListener("abort",l),t.abort(),c.dispose(),s?.())};return e.operationContext.signal.aborted?l():(s=r.presentation.onViewportChange?.(a),e.operationContext.signal.addEventListener("abort",l,{once:!0})),{handlers:{[ot]:async(m,u)=>c.apply(m,u?.signal),[Kr]:async()=>(te(r.operationContext.signal),Fs(r.presentation)),[Yr]:async m=>{if(te(r.operationContext.signal),typeof m!="object"||m===null||Array.isArray(m))return Hs("viewport.setNavigationBarStyle 参数必须是对象");const u=m.foregroundStyle;if(u!=="light"&&u!=="dark")return Hs("viewport.setNavigationBarStyle foregroundStyle 必须是 light 或 dark");await X(()=>r.presentation.setNavigationBarStyle(u,e.operationContext),r.operationContext.signal)}},applyOrientation:(m,u)=>c.apply({orientation:m.mode,fullscreen:m.hideCapsule},u),notifyChange:()=>{o=void 0,a()},dispose:l}}const gp=new Map(Ge.map(e=>[e.method,e]));function vr(e,t,r){return{code:e,message:t,...r===void 0?{}:{data:r}}}function yp(e){const t=Ue(e);return r=>{if(r.requirement.kind==="none")return{allowed:!0};for(const n of r.requirement.permissions){const i=t.valid?t.permissions[n]:void 0;if(!i)return{allowed:!1,code:"PERMISSION_NOT_DECLARED",message:`小程序未声明权限: ${n}`,data:{permission:n,method:r.method}};if(i.status!=="enabled")return{allowed:!1,code:"PERMISSION_DENIED",message:`小程序权限未启用: ${n}`,data:{permission:n,method:r.method}}}return{allowed:!0}}}function Ep(e,t,r,n){let i;try{i=Promise.resolve(e(t,r))}catch(o){return n.aborted?Promise.resolve({status:"dropped"}):Promise.reject(o)}return n.aborted?(i.catch(()=>{}),Promise.resolve({status:"dropped"})):new Promise((o,s)=>{let a=!1;const c=g=>{a||(a=!0,n.removeEventListener("abort",l),g())},l=()=>c(()=>o({status:"dropped"}));n.addEventListener("abort",l,{once:!0}),i.then(g=>c(()=>o({status:"handled",value:g})),g=>c(()=>s(g)))})}function wp(e){const t=yp(e.runtimePermissions),r=Ue(e.runtimePermissions);let n=0,i=0,o=0;return{async dispatch(s,a,c){const l=e.now??bp,g=e.onTrace?l():0,m=e.onTrace?`cap_${++n}`:"",u=s===ot?++i:void 0;let p;try{if(e.terminalSignal.aborted)throw vr("RUNTIME_DESTROYED","小程序 Runtime 已终止");Al(s,e.effectiveCapabilities);const O=gp.get(s);if(!O)throw new Error(`Capability method ${s} 缺少 protocol metadata`);const b=t(O),v=!b.allowed&&r.valid&&r.permissions.companion?.status==="enabled"&&e.allowsCompanionAttachmentAccess?.(s,a)===!0;if(!b.allowed&&!v)throw vr(b.code,b.message,b.data);const A=e.handlers[s];if(!A)throw new Error(`Capability method ${s} 缺少 handler`);u!==void 0&&(p=Lc(c.signal));const P=p?{...c,signal:p.signal}:c,_=async()=>{for(const F of e.policies??[]){const N=await F.evaluate({method:s,payload:a,capability:O});if(e.terminalSignal.aborted||p?.signal.aborted)throw qs();if(!N.allowed)throw vr(N.code,N.message,N.data)}if(e.terminalSignal.aborted||p?.signal.aborted)throw qs();if(u!==void 0){if(Mc(a),u<o)throw vr("ORIENTATION_SUPERSEDED","方向设置已被后续设置替换");o=u}return A(a,P)},L=await Ep(()=>p?p.run(_):_(),void 0,c,e.terminalSignal);return Bs(e.onTrace,Vs(m,s,a,g,L),l),L}catch(O){throw Bs(e.onTrace,Vs(m,s,a,g,{status:"error",error:O}),l),O}finally{p?.dispose()}}}}function bp(){return typeof performance>"u"?Date.now():performance.now()}function Bs(e,t,r){if(!e)return;const n=r();try{e({...t,timestamp:n,durationMs:Math.max(0,Number.isFinite(n-t.startedAt)?n-t.startedAt:0)})}catch{}}function Vs(e,t,r,n,i){const o=i.status==="handled"?"success":i.status;return{callId:e,method:t,startedAt:n,outcome:o,...i.status==="error"?{errorCode:Ap(i.error)}:{},...Ip(t,r,i)}}function Ap(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:void 0}function Ip(e,t,r){if(e!=="network.request"||typeof t!="object"||t===null||!("url"in t)||typeof t.url!="string")return{};try{const n=new URL(t.url);if(n.protocol!=="http:"&&n.protocol!=="https:"||n.username||n.password)return{};const o=("method"in t&&typeof t.method=="string"?t.method:"GET").trim().toUpperCase();if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(o))return{};const s=r.status==="handled"&&ed(r.value)&&typeof r.value.status=="number"?r.value.status:void 0;return{network:{method:o,origin:n.origin,pathname:n.pathname,...s===void 0?{}:{responseStatus:s}}}}catch{return{}}}function ed(e){return typeof e=="object"&&e!==null}function qs(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function _p(e){const t={signal:e.terminalSignal,...e.miniProgramDetail===void 0?{}:{miniProgramDetail:e.miniProgramDetail}},r=au(e.requestPolicy);let n;if(e.files)try{n=Jl(e.files,t)}catch{}const i=ec({store:n}),o=e.onRequestPolicyReport??(r.debugReport?Sp:void 0),s=r.enabled?nu({...r.gateOptions,...o?{onReport:o}:{}}):void 0,a=new Pf(e.files,e.miniProgramDetail),c=Hf({registry:a,picker:e.picker,operationContext:t}),l=Lu({account:e.account,network:e.network,identity:e.identity,operationContext:t,authPresentation:e.authPresentation,miniProgramPresentation:e.miniProgramPresentation,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode,authorizationContext:e.authorizationContext,identityTtlMs:r.identityTtlMs,requestGate:s,requestPolicyEnabled:r.enabled});let g,m,u,p=()=>{},O=()=>{};try{g=pp({operationContext:t,presentation:e.hostPresentation,onDisplayChange:N=>e.eventSink.postEvent("display_change",N),onViewportChange:N=>e.eventSink.postEvent("viewport_change",N)}),m=rp({account:e.account,network:e.network,identity:e.identity,operationContext:t,authorization:l,profileTtlMs:r.profileTtlMs,steamGameListTtlMs:r.steamGameListTtlMs,cacheManager:i,requestGate:s,requestPolicyEnabled:r.enabled}),p=l.onEvent((N,I)=>e.eventSink.postEvent(N,I)),O=e.hostCompanion?.onSessionEvent?.(N=>{const I=Sf(N);!e.terminalSignal.aborted&&I&&e.eventSink.postEvent(I.type,I.payload)})??(()=>{}),u=df({account:e.account,identity:e.identity,network:e.network,operationContext:t,requestGate:s,requestPolicyEnabled:r.enabled});const b=Mm({storage:e.storage,storageDiagnostics:e.storageDiagnostics,identity:e.identity,operationContext:t,anonymousStorageScope:e.anonymousStorageScope,storageLimits:e.storageLimits}),v=[{name:"auth",handlers:qu({authorization:l})},{name:"user",handlers:fp({user:m,authorization:l,runtimePermissions:e.runtimePermissions,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode})},{name:"share",handlers:Tm({environment:e.environment,identity:e.identity,operationContext:t,presentation:e.hostPresentation})},{name:"viewport",handlers:g.handlers},{name:"storage",handlers:b.handlers},{name:"network",handlers:Yh({network:e.network,transfer:e.transfer,fileRegistry:a,operationContext:t,runtimePermissions:e.runtimePermissions,allowedHttpOrigins:e.allowedHttpOrigins})},{name:"files",handlers:c.files},{name:"file",handlers:c.file},{name:"directory",handlers:c.directory},{name:"ui",handlers:Vm({operationContext:t,presentation:e.hostPresentation})},{name:"device",handlers:Of({operationContext:t,presentation:e.hostPresentation})},{name:"navigation",handlers:ph({operationContext:t,presentation:e.hostPresentation,...e.hostPresentation.applyOrientation?{resetDisplay:N=>g.applyOrientation({mode:"portrait",hideCapsule:!1},N)}:{}})},{name:"cloud",handlers:u.handlers},{name:"companion",handlers:wf({companion:e.hostCompanion,companionPresentation:e.companionPresentation,miniProgramPresentation:e.miniProgramPresentation,operationContext:t,fileRegistry:a})}],A=vp(v);let P=!1;const _=()=>{P||(P=!0,e.terminalSignal.removeEventListener("abort",_),g?.dispose(),u?.dispose(),p(),O(),m?.dispose(),i.dispose(),l.dispose(),s?.dispose(),a.dispose())};e.terminalSignal.aborted?_():e.terminalSignal.addEventListener("abort",_,{once:!0});const L=new Set(["file.readText","file.readBytes","file.stat"]);return{modules:v,handlers:A,allowsCompanionAttachmentAccess:(N,I)=>L.has(N)&&ed(I)&&a.isCompanionAttachmentRef(I.target),applyOrientation:g.applyOrientation,notifyViewportChange:g.notifyChange,...b.diagnostics?{storageDiagnostics:b.diagnostics}:{},dispose:_}}catch(b){throw g?.dispose(),u?.dispose(),p(),O(),m?.dispose(),i.dispose(),l.dispose(),s?.dispose(),a.dispose(),b}}function Sp(e){try{console.warn("[hb-sdk-runtime] request-policy",e)}catch{}}function vp(e){const t=new Map(Ge.map(i=>[i.method,i.module])),r=new Map;for(const i of e)for(const[o,s]of Object.entries(i.handlers)){const a=o,c=t.get(a);if(!c)throw new Error(`Capability Module ${i.name} 注册了未知 method: ${a}`);if(c!==i.name)throw new Error(`Capability method ${a} 应由 ${c} 拥有,不能注册到 ${i.name}`);if(r.has(a))throw new Error(`Capability method ${a} 存在重复 owner`);if(typeof s!="function")throw new Error(`Capability method ${a} 缺少 handler`);r.set(a,s)}const n=Ge.map(i=>i.method).filter(i=>!r.has(i));if(n.length>0)throw new Error(`Capability registry 缺少 method: ${n.join(", ")}`);if(r.size!==Ge.length)throw new Error(`Capability registry method 数量不合法: ${r.size}`);return Object.freeze(Object.fromEntries(r))}const Rp="heybox-mini-dev:";function zs(e){try{return Op(new URL(e))}catch{return!1}}function Op(e){return e.protocol===Rp}function Dp(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"||Np(e)}function Np(e){const t=e.split(".");if(t.length!==4)return!1;const r=t.map(n=>/^\d+$/.test(n)?Number(n):Number.NaN);return r.some(n=>!Number.isInteger(n)||n<0||n>255)?!1:r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}const Pp=new Set(["android","ios","ohos","windows","macos","linux","unknown"]);function Tp(e,t){const r=[],n=Cp(e.environmentInfo,r),i=Lr(n?.appVersion,"host.appVersion",r),o=Mp(n?.operatingSystem,r);return{info:Object.freeze({runtime:Object.freeze({mode:Lp(e.sdkVersionPolicy?.releaseChannel,r)}),host:Object.freeze({appVersion:i}),miniProgram:Object.freeze({id:Lr(t.miniProgramId),version:Lr(t.miniProgramVersion)}),operatingSystem:Object.freeze(o)}),invalidFields:Object.freeze(r)}}function Cp(e,t){if(e!=null){if(td(e))return e;t.push("environmentInfo")}}function Lp(e,t){return e==="public"?"production":e==="preview"||e==="development"?e:(e!=null&&t.push("runtime.mode"),"unknown")}function Mp(e,t){if(e==null)return{name:"unknown",version:null};if(!td(e))return t.push("operatingSystem"),{name:"unknown",version:null};const r=Pp.has(e.name)?e.name:"unknown";return r==="unknown"&&e.name!==void 0&&e.name!==null&&e.name!=="unknown"&&t.push("operatingSystem.name"),{name:r,version:Lr(e.version,"operatingSystem.version",t)}}function Lr(e,t,r){return e==null?null:typeof e=="string"&&e.trim()?e.trim():(t&&r&&r.push(t),null)}function td(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const kp=1,rd="allow-scripts allow-same-origin",Up="",xp="no-referrer";function Hp(e=rd){return!e.split(/\s+/).includes("allow-same-origin")}function Gs(){return window.crypto?.randomUUID?window.crypto.randomUUID():`${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}const Fp=new Set(["javascript:","data:","blob:","file:"]),js="xiaoheihe.cn";function Bp(e,t=window.location.href,r={}){const n=e.trim();if(!n)throw new Error("缺少 mini_url 参数");let i;try{i=new URL(n)}catch{throw new Error("小程序链接必须是绝对 URL")}if(Fp.has(i.protocol)||!["http:","https:"].includes(i.protocol))throw new Error("不支持的小程序链接协议");if(!jp(i,t,r))throw new Error("小程序链接必须属于 https://*.xiaoheihe.cn 或本地调试地址");return i.toString()}function Vp(e,t){const r=new URL(e);return r.searchParams.set(Xd,t),r.toString()}function qp(e,t,r){try{const n=new URL(e),i=new URL(t);if(n.origin!==i.origin)return!1;const o=zp(r)??Gp(n.pathname);return i.pathname.startsWith(o)}catch{return!1}}function zp(e){if(!e)return;const t=new URL(e,"https://mini-program.invalid").pathname;return t.endsWith("/")?t:`${t}/`}function Gp(e){const t=/^(\/u\/[^/]+\/[^/]+\/)/.exec(e)?.[1];if(t)return t;const r=e.lastIndexOf("/");return r>=0?e.slice(0,r+1):"/"}function $s(e){const t=new URL(e);return Io(t)?"loopback":_o(t)?"lan":"production"}function jp(e,t,r){return $p(e)||Io(e)||_o(e)&&Kp(t,r)}function $p(e){return e.protocol==="https:"&&Jp(e.hostname)}function Io(e){return e.protocol==="http:"&&Wp(e.hostname)}function Wp(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"}function _o(e){return e.protocol==="http:"&&Yp(e.hostname)}function Kp(e,t){if(t.allowPrivateNetwork)return!0;try{const r=new URL(e);return Io(r)||_o(r)}catch{return!1}}function Yp(e){const t=Qp(e);return t?t[0]===10||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168:!1}function Qp(e){const t=e.split(".");if(t.length!==4)return;const r=t.map(n=>{if(!/^\d+$/.test(n))return;const i=Number(n);return Number.isInteger(i)&&i>=0&&i<=255?i:void 0});return r.every(n=>n!==void 0)?r:void 0}function Jp(e){return e===js||e.endsWith(`.${js}`)}const Xp=new Set(["base-uri","child-src","connect-src","default-src","font-src","form-action","frame-src","img-src","manifest-src","media-src","object-src","prefetch-src","script-src","script-src-attr","script-src-elem","style-src","style-src-attr","style-src-elem","worker-src"]),Zp=new Set(["url","inline","eval","unknown"]),eg=/^\/(?:\:segment(?:\/\:segment)*)?$/,tg=/^[a-f0-9]{64}$/,rg=255,ng=160,ig=256;function og(e,t){const r=e;if(!r||typeof r.sdkVersion!="string"||r.sdkVersion!==t||typeof r.effectiveDirective!="string"||!Xp.has(r.effectiveDirective)||typeof r.violatedDirective!="string"||r.violatedDirective.length>ig||r.violatedDirective.split(/\s/,1)[0]!==r.effectiveDirective||!["enforce","report"].includes(r.disposition??"")||typeof r.blockedResourceType!="string"||!Zp.has(r.blockedResourceType)||typeof r.timestamp!="number"||!Number.isFinite(r.timestamp)||r.timestamp<0)return;const n=sg(r.blockedOrigin);if(r.blockedOrigin!==void 0&&!n)return;const i=r.redactedPathname;if(i!==void 0&&(typeof i!="string"||i.length>ng||!eg.test(i)))return;const o=r.sanitizedPathnameHash;if(!(o!==void 0&&(typeof o!="string"||!tg.test(o)||i===void 0)))return{effectiveDirective:r.effectiveDirective,violatedDirective:r.effectiveDirective,blockedResourceType:r.blockedResourceType,origin:n,sanitizedPathname:i,sanitizedPathnameHash:o,sdkVersion:r.sdkVersion,timestamp:r.timestamp}}function sg(e){if(e!==void 0&&!(typeof e!="string"||e.length>rg))try{const t=new URL(e);return["http:","https:"].includes(t.protocol)&&t.origin===e?t.origin:void 0}catch{return}}const ag=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function cg(e){if(!e?.minimumSdkVersion)throw K("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不可用");const t=et(e.minimumSdkVersion),r=e.sdkVersion?et(e.sdkVersion):void 0;if(!t)throw K("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不合法");if(e.sdkVersion&&!r)throw K("SDK_VERSION_INVALID","小程序 SDK 版本不合法");const n=et("0.6.0");if(!r){if(Mr(t,n)<0)return{heartbeatEnabled:!1,sdkVersion:void 0};throw K("SDK_VERSION_INVALID","小程序 SDK 版本缺失")}if((e.releaseChannel??"public")==="public"&&r.prerelease.length>0)throw K("SDK_VERSION_INVALID","正式小程序不能使用预发布 SDK");if(Mr(r,t)<0)throw K("SDK_VERSION_TOO_LOW","小程序 SDK 版本低于平台最低要求");return{heartbeatEnabled:Mr(r,et("0.6.0-0"))>=0,sdkVersion:e.sdkVersion}}function dg(e,t){if(typeof t!="string"||!et(t))throw K("SDK_VERSION_INVALID","SDK handshake 版本不合法");if(t!==e)throw K("SDK_VERSION_MISMATCH","SDK handshake 版本与 Version record 不一致")}function lg(e,t){const r=et(e),n=et(t);if(!(!r||!n))return Mr(r,n)}function et(e){const t=ag.exec(e);if(t)return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]?.split(".").map(r=>/^\d+$/.test(r)?Number(r):r)??[]}}function Mr(e,t){for(const n of["major","minor","patch"])if(e[n]!==t[n])return e[n]<t[n]?-1:1;if(e.prerelease.length===0||t.prerelease.length===0)return e.prerelease.length===t.prerelease.length?0:e.prerelease.length===0?1:-1;const r=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<r;n+=1){const i=e.prerelease[n],o=t.prerelease[n];if(i===void 0||o===void 0)return i===o?0:i===void 0?-1:1;if(i!==o)return typeof i=="number"&&typeof o=="string"?-1:typeof i=="string"&&typeof o=="number"?1:i<o?-1:1}return 0}const Fn=["android","ios","ohos","windows","macos","linux"],ug="0.9.0",fg=Object.freeze(["android","ios","ohos","windows","macos"]),nd="该小程序暂不支持当前平台",hg="PLATFORM_UNSUPPORTED";function mg(e){return typeof e=="string"&&Fn.includes(e)}function pg(e){if(typeof e!="string")return;const t=e.trim().toLowerCase().replace(/[\s_-]/g,"");if(t==="android")return"android";if(t==="ios")return"ios";if(t==="ohos"||t==="harmony"||t==="harmonyos")return"ohos";if(t==="windows"||t==="win32"||t==="win64")return"windows";if(t==="mac"||t==="macos"||t==="darwin")return"macos";if(t==="linux")return"linux"}function gg(e){const t=e.manifest;if(!Ag(t))return{status:"invalid",reason:"manifest_not_object"};if(!Object.prototype.hasOwnProperty.call(t,"platforms")){const n=Ks(e.sdkVersion)??Ks(t.sdkVersion);return wg(n)?{status:"invalid",reason:"platforms_missing_after_hard_cutover"}:Eg()}const r=id(t.platforms);return"reason"in r?{status:"invalid",reason:r.reason}:{status:"resolved",declaredPlatforms:r.platforms,effectivePlatforms:r.platforms,platformsDeclared:!0,policy:"explicit"}}function yg(e){const t=pg(e.operatingSystemName);if(!t)return Et("host_operating_system_unknown");const r=e.platformAccess;if(!r)return Et("platform_access_missing",{platform:t});if(r.source==="compatibility-window")return{status:"allowed",platform:t,effectivePlatforms:Fn,platformsDeclared:!1,policy:"legacy_mobile_default",compatibility:r.reason};if(r.source==="manifest"){const s=gg({manifest:r.manifest,...r.sdkVersion===void 0?{}:{sdkVersion:r.sdkVersion}});return s.status==="invalid"?Et("platform_declaration_invalid",{invalidReason:s.reason,platform:t}):Ws(t,s)}if(r.effectivePlatforms===void 0)return Et("platform_declaration_invalid",{invalidReason:"effective_platforms_missing",platform:t});const n=id(r.effectivePlatforms);if("reason"in n)return Et("platform_declaration_invalid",{invalidReason:n.reason,platform:t});const i=typeof r.platformsDeclared=="boolean"?r.platformsDeclared:!0,o=bg(r.platformPolicy)?r.platformPolicy:i?"explicit":"legacy_mobile_default";return Ws(t,{declaredPlatforms:i?n.platforms:[],effectivePlatforms:n.platforms,platformsDeclared:i,policy:o})}function Ws(e,t){return t.effectivePlatforms.includes(e)?{status:"allowed",platform:e,effectivePlatforms:t.effectivePlatforms,platformsDeclared:t.platformsDeclared,policy:t.policy}:Et("platform_not_supported",{effectivePlatforms:t.effectivePlatforms,platform:e})}function Et(e,t={}){return{status:"denied",reason:e,message:nd,...t}}function Eg(){return{status:"resolved",declaredPlatforms:[],effectivePlatforms:fg,platformsDeclared:!1,policy:"legacy_mobile_default"}}function id(e){if(!Array.isArray(e))return{reason:"platforms_not_array"};if(e.length===0)return{reason:"platforms_empty"};const t=new Set;for(const r of e){if(!mg(r))return{reason:"platform_unknown_value"};if(t.has(r))return{reason:"platform_duplicate_value"};t.add(r)}return{platforms:Object.freeze(Fn.filter(r=>t.has(r)))}}function wg(e){if(typeof e!="string"||!e.trim())return!1;const t=lg(e.trim(),ug);return t!==void 0&&t>=0}function Ks(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function bg(e){return e==="explicit"||e==="legacy_mobile_default"}function Ag(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Ig=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function _g(e,t,r){const n=Date.now();try{const i=new URL(t);return{type:"security_violation",errorCode:e,timestamp:n,sdkVersion:r,origin:i.origin,sanitizedPathname:Sg(i.pathname),sanitizedPathnameHash:vg(i.pathname)}}catch{return{type:"security_violation",errorCode:e,timestamp:n,sdkVersion:r}}}function Sg(e){return(e==="/"?e:e.replace(/\/+$/,"")).split("/").map(r=>r?":segment":"").join("/")}function vg(e){const t=new TextEncoder().encode(e),r=Math.ceil((t.length+9)/64)*64,n=new Uint8Array(r);n.set(t),n[t.length]=128,new DataView(n.buffer).setUint32(r-4,t.length*8,!1);const i=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),o=new Uint32Array(64),s=new DataView(n.buffer);for(let a=0;a<r;a+=64){for(let v=0;v<16;v+=1)o[v]=s.getUint32(a+v*4,!1);for(let v=16;v<64;v+=1){const A=o[v-15],P=o[v-2],_=ve(A,7)^ve(A,18)^A>>>3,L=ve(P,17)^ve(P,19)^P>>>10;o[v]=o[v-16]+_+o[v-7]+L>>>0}let[c,l,g,m,u,p,O,b]=i;for(let v=0;v<64;v+=1){const A=b+(ve(u,6)^ve(u,11)^ve(u,25))+(u&p^~u&O)+Ig[v]+o[v]>>>0,P=(ve(c,2)^ve(c,13)^ve(c,22))+(c&l^c&g^l&g);b=O,O=p,p=u,u=m+A>>>0,m=g,g=l,l=c,c=A+P>>>0}[c,l,g,m,u,p,O,b].forEach((v,A)=>{i[A]=i[A]+v>>>0})}return Array.from(i,a=>a.toString(16).padStart(8,"0")).join("")}function ve(e,t){return e>>>t|e<<32-t}const Rg=1e4,si=2e3,Og=2,Dg="open-with-native-credential-policy",od="安全提示",sd="即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。";class Ng{nonce=Gs();runtimeId=Gs();terminalController=new AbortController;options;handshakeTimeout;ports;primitiveAvailability;effectiveCapabilities;identity;identityRef;iframe;iframeErrorListener;iframeLoadListener;bridgeServer=null;miniProgramSrc="";launchUrl="";startPromise=null;readyContext=null;resolveReady;rejectReady;terminalError;status="idle";stateValue="idle";handshakeTimeoutTimer;lifecycleDisposer;capabilityGraph;iframeTornDown=!1;runtimeResourcesDisposed=!1;sdkVersionDecision;platformGateDecision;compatibilityWithoutSdk=!1;heartbeatTimer;pendingProbeId;consecutiveHeartbeatMisses=0;probeSequence=0;hostVisible=!0;awaitingControlledDocumentLoad=!1;unexpectedDocumentLoadTimer;documentRevalidationPending=!1;documentRevalidationTimer;documentRevalidationGeneration=0;preparedHistoryTraversalGeneration;iframeVisibilityBeforeRevalidation;iframeHiddenForRevalidation=!1;devRuntimePromise;runtimePermissions=void 0;runtimeFeatures;miniProgramPresentation;miniProgramDetail;locationBasePath;anonymousStorageScope;allowedHttpOrigins;environmentInfo;constructor(t){this.options=t,this.iframe=t.iframe;const r=Za(t.ports,{callerCapabilities:t.capabilities,hostCapabilities:t.hostCapabilities});this.ports=r.ports,this.primitiveAvailability=r.primitiveAvailability,this.effectiveCapabilities=r.effectiveCapabilities,this.identity={},this.identityRef={get:()=>{const n=this.identity.miniProgramId?.trim();if(n)return{miniProgramId:n,...this.identity.miniProgramVersion?{version:this.identity.miniProgramVersion}:{}}}},this.handshakeTimeout=t.handshakeTimeout??Rg,this.iframeErrorListener=n=>{this.onIframeError(n)},this.iframeLoadListener=()=>{if(this.awaitingControlledDocumentLoad){if(this.awaitingControlledDocumentLoad=!1,this.stateValue==="ready"&&this.bridgeServer?.protocolVersion===2&&this.sdkVersionDecision?.heartbeatEnabled){this.beginDocumentRevalidation();return}this.compatibilityWithoutSdk&&!this.readyContext&&this.completeCompatibilityLaunch();return}this.stateValue==="ready"&&(this.bridgeServer?.protocolVersion===2&&this.sdkVersionDecision?.heartbeatEnabled?this.beginDocumentRevalidation():this.scheduleUnexpectedDocumentLoadFailure())},this.iframe.addEventListener("error",this.iframeErrorListener),this.iframe.addEventListener("load",this.iframeLoadListener)}get state(){return this.stateValue}getMiniProgramDetail(){return this.miniProgramDetail}get diagnostics(){const t=this.capabilityGraph?.storageDiagnostics;return t?{storage:t}:{}}start(){return this.stateValue==="destroyed"?Promise.reject(this.terminalError??K("RUNTIME_DESTROYED","小程序运行时已销毁")):this.stateValue==="failed"?Promise.reject(this.terminalError??K("STARTUP_ERROR","小程序运行时启动失败")):this.readyContext?Promise.resolve(this.readyContext):this.startPromise?this.startPromise:(Hg(),this.startPromise=this.createReadyPromise(),this.setState("starting"),this.setStatus("starting"),this.launch().catch(t=>{this.failRuntime(t)}),this.startPromise)}destroy(){if(this.stateValue==="destroyed")return;const t=K("RUNTIME_DESTROYED","小程序运行时已销毁");this.terminalError=t,this.terminalController.abort(t),this.disposeRuntimeResources(),this.setStatus("destroyed"),this.setState("destroyed"),this.teardownIframe(),this.rejectReady?.(t)}show(){const t=this.hostVisible;this.hostVisible=!0,this.emitLifecycleEvent("show"),this.capabilityGraph?.notifyViewportChange(),!t&&this.stateValue==="ready"&&this.sdkVersionDecision?.heartbeatEnabled&&(this.documentRevalidationPending?(this.armDocumentRevalidationTimer(this.documentRevalidationGeneration),this.resendDocumentRevalidationProbe()):this.sendLocationProbe())}hide(){this.hostVisible=!1,this.clearHeartbeat(),this.clearDocumentRevalidationTimer(),this.emitLifecycleEvent("hide")}prepareForHistoryTraversal(){if(this.stateValue!=="ready"||this.bridgeServer?.protocolVersion!==2||!this.sdkVersionDecision?.heartbeatEnabled)return()=>{};const t=this.beginDocumentRevalidation({deferProbe:!0});return this.preparedHistoryTraversalGeneration=t,()=>{this.preparedHistoryTraversalGeneration===t&&this.cancelPreparedHistoryTraversal()}}createReadyPromise(){return new Promise((t,r)=>{this.resolveReady=t,this.rejectReady=r})}async launch(){const t=await this.resolveRuntimeLaunchConfiguration();if(this.isInactive())return;this.runtimePermissions=t.runtimePermissions,this.runtimeFeatures=t.runtimeFeatures,this.miniProgramPresentation=t.miniProgramPresentation,this.locationBasePath=t.locationBasePath,this.anonymousStorageScope=t.anonymousStorageScope??this.options.anonymousStorageScope,this.allowedHttpOrigins=t.allowedHttpOrigins??this.options.allowedHttpOrigins,this.bindCanonicalIdentity(t.canonicalIdentity),this.sdkVersionDecision=cg(t.sdkVersionPolicy);const r=Tp(t,this.identity);if(this.environmentInfo=r.info,r.invalidFields.length>0&&this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"environment_invalid",message:`环境字段已降级:${r.invalidFields.join(", ")}`}),this.platformGateDecision=yg({operatingSystemName:t.environmentInfo?.operatingSystem?.name,...t.platformAccess===void 0?{}:{platformAccess:t.platformAccess}}),this.platformGateDecision.status==="denied")throw Vg(this.platformGateDecision);if(this.miniProgramDetail=qg(t),this.effectiveCapabilities=Xa(this.primitiveAvailability,{callerCapabilities:this.options.capabilities,hostCapabilities:this.options.hostCapabilities,miniProgramDetail:this.miniProgramDetail}),console.info("[hb-sdk-runtime] host capability",Object.freeze({filesAccessPrimitive:this.primitiveAvailability["files.access"],callerFileCreate:this.options.capabilities?.["file.create"]??"default",hostFileCreate:this.options.hostCapabilities?.["file.create"]??"default",canonicalMiniProgramDetail:!!this.miniProgramDetail?.miniProgramId.trim(),effectiveFileCreate:this.effectiveCapabilities["file.create"]===!0})),this.compatibilityWithoutSdk=!!(t.sdkVersionPolicy&&t.sdkVersionPolicy.releaseChannel!==void 0&&!this.sdkVersionDecision.sdkVersion&&!this.sdkVersionDecision.heartbeatEnabled),Lg(this.options.onLaunchConfigurationResolved,t,this.sdkVersionDecision),this.isInactive())return;this.applyIframeDefaults(),this.startBridgeServer(),this.installSubscriptions();const n=await this.normalizeLaunchUrl(t.launchUrl);if(this.isInactive())return;const i=await this.confirmDevMiniProgramLaunch(n);if(!this.isInactive()){if(!i){await this.closeAfterDevLaunchCancellation();return}if(this.bridgeServer?.setTargetOrigin(kg(n)),this.launchUrl=n,this.miniProgramSrc=Vp(n,this.nonce),this.traceSecurityPolicy(n),this.setStatus("src_resolved"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"src_resolved"}),this.primitiveAvailability["presentation.applyOrientation"]){try{await this.capabilityGraph?.applyOrientation({mode:"portrait",hideCapsule:!1})}catch(o){if(this.isInactive())return;const s=uo(o);this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"error",method:ot,errorCode:s.code,message:`默认展示设置失败,沿用宿主当前布局:${s.message}`})}if(this.isInactive())return}this.awaitingControlledDocumentLoad=!0,this.iframe.src=this.miniProgramSrc,xe(this.options.onLaunch,this.createLaunchContext()),this.armHandshakeTimeout()}}startBridgeServer(){const t={postEvent:(n,i)=>{this.stateValue==="ready"&&(n!=="viewport_change"||this.effectiveCapabilities["viewport.getWindowInfo"])&&(n!=="display_change"||this.effectiveCapabilities[ot])&&this.bridgeServer?.postEvent(n,i)}};this.capabilityGraph=_p({account:this.ports.account,network:this.ports.network,files:this.ports.files,picker:this.ports.picker,transfer:this.ports.transfer,storage:this.ports.storage,storageDiagnostics:this.ports.storageDiagnostics,hostPresentation:this.ports.presentation,hostCompanion:this.ports.companion,environment:this.options.environment,identity:this.identityRef,runtimePermissions:this.runtimePermissions,runtimeFeatures:this.runtimeFeatures,authorizationContext:this.options.authorizationContext,terminalSignal:this.terminalController.signal,eventSink:t,authPresentation:this.options.authPresentation,companionPresentation:this.options.companionPresentation,miniProgramPresentation:this.miniProgramPresentation,miniProgramDetail:this.miniProgramDetail,anonymousStorageScope:this.anonymousStorageScope,storageLimits:this.options.storageLimits,allowedHttpOrigins:this.allowedHttpOrigins,requestPolicy:this.options.requestPolicy,...this.options.onRequestPolicyReport?{onRequestPolicyReport:this.options.onRequestPolicyReport}:{}});const r=wp({handlers:this.capabilityGraph.handlers,effectiveCapabilities:this.effectiveCapabilities,runtimePermissions:this.runtimePermissions,terminalSignal:this.terminalController.signal,allowsCompanionAttachmentAccess:this.capabilityGraph.allowsCompanionAttachmentAccess,policies:this.options.policies,...this.options.onCapabilityTrace?{onTrace:({callId:n,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,errorCode:l,network:g})=>{const m={type:"capability",runtimeId:this.runtimeId,callId:n,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,...l?{errorCode:l}:{},...this.identity,...g?{network:g}:{}};xe(this.options.onCapabilityTrace,m)}}:{}});this.bridgeServer=new wl({iframe:this.iframe,nonce:this.nonce,dispatcher:r,environmentInfo:this.environmentInfo,onHandshake:n=>this.handleBridgeHandshake(n),onReady:()=>{this.handleBridgeReady()},onDuplicateHandshake:()=>{this.handleDuplicateBridgeHandshake()},onInternalEvent:n=>{this.handleInternalBridgeEvent(n)},onResponsePosted:({method:n,outcome:i,errorCode:o})=>{this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"bridge_response",method:n,outcome:i,...o?{errorCode:o}:{}})}}),this.bridgeServer.start(),this.setStatus("bridge_started"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"bridge_started"})}onIframeError(t=new Error("小程序 iframe 加载失败")){if(this.isInactive())return;const r=t instanceof Error?t.message:"小程序 iframe 加载失败";this.failRuntime(K("IFRAME_LOAD_ERROR",r,t))}emitLifecycleEvent(t){if(this.stateValue!=="ready"){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"lifecycle_ignored",event:t,reason:this.isInactive()?"inactive":"not_ready"});return}this.bridgeServer?.postEvent(t,{timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"lifecycle",method:t})}async resolveRuntimeLaunchConfiguration(){try{return await this.options.resolveLaunchConfiguration()}catch(t){throw Cg(t)?t:ad(K("STARTUP_ERROR",t instanceof Error?t.message:"获取小程序启动配置失败"),t)}}bindCanonicalIdentity(t){const r=t?.miniProgramId?.trim();r&&(this.identity.miniProgramId=r);const n=t?.miniProgramVersion?.trim();n&&(this.identity.miniProgramVersion=n)}async normalizeLaunchUrl(t){try{const r=this.options.environment.getCurrentHref();return Bp(t,r,{allowPrivateNetwork:zs(r)||Ys(r)||await this.isDevRuntime()})}catch(r){throw K("INVALID_LAUNCH_URL",r instanceof Error?r.message:"小程序链接不合法",r)}}async confirmDevMiniProgramLaunch(t){return await this.shouldConfirmDevMiniProgramLaunch(t)?this.isInactive()?!1:!!await(this.options.confirmDevMiniProgramLaunch??xg)({message:sd,title:od,url:t}):!0}async shouldConfirmDevMiniProgramLaunch(t){if($s(t)==="production")return!1;const r=this.options.environment.getCurrentHref();return!zs(r)&&!Ys(r)}async closeAfterDevLaunchCancellation(){const t=K("LAUNCH_CANCELLED","小程序启动已取消");this.terminalError=t,this.destroyBridgeServer();const r=new AbortController;let n;try{n=Promise.resolve(this.ports.presentation.close({signal:r.signal}))}catch{Qs(),n=Promise.resolve()}this.terminalController.abort(t),this.disposeRuntimeResources(),this.setStatus("destroyed"),this.setState("destroyed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"launch_cancelled"}),this.rejectReady?.(t),await n.catch(()=>Qs())}async isDevRuntime(){return this.devRuntimePromise??=Promise.resolve().then(()=>this.options.environment.isDevRuntime()).then(Boolean).catch(()=>!1),this.devRuntimePromise}applyIframeDefaults(){this.iframe.setAttribute("allow",Up),this.iframe.setAttribute("referrerpolicy",xp),this.iframe.setAttribute("sandbox",rd)}removeIframeListeners(){this.iframe.removeEventListener("error",this.iframeErrorListener),this.iframe.removeEventListener("load",this.iframeLoadListener)}installSubscriptions(){if(this.options.lifecycle&&!this.lifecycleDisposer){const t=this.options.lifecycle.subscribe({show:this.show.bind(this),hide:this.hide.bind(this)});this.lifecycleDisposer=typeof t=="function"?t:null}}clearLifecycleDisposer(){const t=[this.lifecycleDisposer];this.lifecycleDisposer=null;for(const r of t)try{r?.()}catch{}}handleBridgeReady(){if(this.isInactive())return;if(this.readyContext){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"duplicate_handshake"});return}this.clearHandshakeTimeout(),this.setStatus("bridge_ready");const t=this.createReadyContext();this.readyContext=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"bridge",method:"ready"}),this.setState("ready"),this.sdkVersionDecision?.heartbeatEnabled&&this.hostVisible&&this.sendLocationProbe(),this.resolveReady?.(t),this.capabilityGraph?.notifyViewportChange(),xe(this.options.onReady,t)}completeCompatibilityLaunch(){if(this.stateValue!=="starting"||this.isInactive()||this.readyContext)return;this.clearHandshakeTimeout(),this.setStatus("bridge_ready");const t=this.createReadyContext();this.readyContext=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"status",status:"bridge_ready"}),this.setState("ready"),this.resolveReady?.(t),this.capabilityGraph?.notifyViewportChange(),xe(this.options.onReady,t)}handleBridgeHandshake(t){const r=this.sdkVersionDecision?.sdkVersion;if(r)try{dg(r,t?.sdkVersion)}catch(n){return this.failRuntime(n),!1}return!0}armHandshakeTimeout(){this.clearHandshakeTimeout(),!(this.handshakeTimeout<=0)&&(this.handshakeTimeoutTimer=setTimeout(()=>{this.stateValue==="ready"||this.isInactive()||(this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"handshake_timeout"}),this.failRuntime(K("SDK_HANDSHAKE_TIMEOUT","小程序 SDK 握手超时")))},this.handshakeTimeout))}clearHandshakeTimeout(){this.handshakeTimeoutTimer&&(clearTimeout(this.handshakeTimeoutTimer),this.handshakeTimeoutTimer=void 0)}sendLocationProbe(){if(this.isInactive()||!this.hostVisible||!this.sdkVersionDecision?.heartbeatEnabled||this.documentRevalidationPending)return;if(this.pendingProbeId&&(this.consecutiveHeartbeatMisses+=1,this.consecutiveHeartbeatMisses>=Og)){this.failRuntime(K("HEARTBEAT_TIMEOUT","小程序 SDK 心跳超时"));return}const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.bridgeServer?.postInternalRequest(pr,t,{probeId:t,timestamp:Date.now()}),this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},si),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:pr})}clearHeartbeat(){this.heartbeatTimer&&(clearTimeout(this.heartbeatTimer),this.heartbeatTimer=void 0),this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0}beginDocumentRevalidation(t={}){this.clearUnexpectedDocumentLoadFailure(),this.clearHeartbeat(),this.clearDocumentRevalidationTimer(),this.preparedHistoryTraversalGeneration=void 0,this.documentRevalidationPending=!0;const r=++this.documentRevalidationGeneration;return this.iframeHiddenForRevalidation||(this.iframeVisibilityBeforeRevalidation=this.iframe.style.visibility,this.iframe.style.visibility="hidden",this.iframeHiddenForRevalidation=!0),this.armDocumentRevalidationTimer(r),t.deferProbe||this.sendDocumentRevalidationProbe(),r}sendDocumentRevalidationProbe(){if(this.isInactive()||!this.hostVisible||!this.documentRevalidationPending||!this.sdkVersionDecision?.heartbeatEnabled)return;const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.postLocationProbe(t)}resendDocumentRevalidationProbe(){if(!(this.isInactive()||!this.hostVisible||!this.documentRevalidationPending||!this.sdkVersionDecision?.heartbeatEnabled)){if(!this.pendingProbeId){this.sendDocumentRevalidationProbe();return}this.postLocationProbe(this.pendingProbeId)}}postLocationProbe(t){this.bridgeServer?.postInternalRequest(pr,t,{probeId:t,timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:pr})}armDocumentRevalidationTimer(t){this.hostVisible&&(this.documentRevalidationTimer=setTimeout(()=>{this.documentRevalidationTimer=void 0,!(this.isInactive()||!this.documentRevalidationPending||t!==this.documentRevalidationGeneration)&&(this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime(K("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 文档再验证超时")))},si))}clearDocumentRevalidationTimer(){this.documentRevalidationTimer&&(clearTimeout(this.documentRevalidationTimer),this.documentRevalidationTimer=void 0)}completeDocumentRevalidation(){this.clearDocumentRevalidationTimer(),this.documentRevalidationPending=!1,this.preparedHistoryTraversalGeneration=void 0,this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.iframeHiddenForRevalidation&&this.iframe.style.visibility==="hidden"&&(this.iframe.style.visibility=this.iframeVisibilityBeforeRevalidation??""),this.iframeVisibilityBeforeRevalidation=void 0,this.iframeHiddenForRevalidation=!1,this.hostVisible&&this.sdkVersionDecision?.heartbeatEnabled&&(this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},si))}clearDocumentRevalidation(){this.clearDocumentRevalidationTimer(),this.documentRevalidationPending=!1,this.preparedHistoryTraversalGeneration=void 0,this.iframeVisibilityBeforeRevalidation=void 0,this.iframeHiddenForRevalidation=!1}cancelPreparedHistoryTraversal(){this.clearDocumentRevalidationTimer(),this.documentRevalidationPending=!1,this.preparedHistoryTraversalGeneration=void 0,this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.iframeHiddenForRevalidation&&this.iframe.style.visibility==="hidden"&&(this.iframe.style.visibility=this.iframeVisibilityBeforeRevalidation??""),this.iframeVisibilityBeforeRevalidation=void 0,this.iframeHiddenForRevalidation=!1,this.hostVisible&&this.sdkVersionDecision?.heartbeatEnabled&&this.sendLocationProbe()}handleDuplicateBridgeHandshake(){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"duplicate_handshake"}),this.documentRevalidationPending&&this.resendDocumentRevalidationProbe()}handleInternalBridgeEvent(t){if(t.method===el){this.handleCspViolation(t.payload);return}if(t.method!==Zd)return;const r=this.sdkVersionDecision?.sdkVersion;if(!r)return;const n=t.payload;if(!n||n.sdkVersion!==r){this.failRuntime(K("SDK_VERSION_MISMATCH","URL report 的 SDK 版本不一致"));return}if(!(n.probeId!==void 0&&n.probeId!==this.pendingProbeId)){if(typeof n.href!="string"||!qp(this.launchUrl,n.href,this.locationBasePath)){typeof n.href=="string"&&this.emitUrlSecurityViolation("URL_OUT_OF_SCOPE",n.href),this.failRuntime(K("URL_OUT_OF_SCOPE","小程序页面地址超出允许范围"));return}n.probeId!==void 0?(this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.documentRevalidationPending&&this.completeDocumentRevalidation()):this.documentRevalidationPending&&!this.pendingProbeId&&(this.preparedHistoryTraversalGeneration=void 0,this.sendDocumentRevalidationProbe())}}handleCspViolation(t){const r=og(t,this.sdkVersionDecision?.sdkVersion);r&&this.emitSecurityViolation({type:"security_violation",errorCode:"CSP_VIOLATION",timestamp:r.timestamp,sdkVersion:r.sdkVersion,origin:r.origin,sanitizedPathname:r.sanitizedPathname,sanitizedPathnameHash:r.sanitizedPathnameHash,effectiveDirective:r.effectiveDirective,violatedDirective:r.violatedDirective,blockedResourceType:r.blockedResourceType})}emitSecurityViolation(t){xe(this.options.onSecurityViolation,t),this.trace({runtimeId:this.nonce,...t})}emitUrlSecurityViolation(t,r){const n=_g(t,r,this.sdkVersionDecision?.sdkVersion);this.emitSecurityViolation(n)}scheduleUnexpectedDocumentLoadFailure(){this.clearUnexpectedDocumentLoadFailure(),this.unexpectedDocumentLoadTimer=setTimeout(()=>{this.unexpectedDocumentLoadTimer=void 0,this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime(K("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 发生未授权文档加载"))},50)}clearUnexpectedDocumentLoadFailure(){this.unexpectedDocumentLoadTimer&&(clearTimeout(this.unexpectedDocumentLoadTimer),this.unexpectedDocumentLoadTimer=void 0)}traceSecurityPolicy(t){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"security",sandboxPolicyVersion:kp,launchUrlType:$s(t),networkPolicy:Dg})}failRuntime(t){const r=Pg(t);return this.isInactive()||(this.terminalError=r,this.terminalController.abort(r),this.postBridgeError(r),this.disposeRuntimeResources(),this.setStatus("failed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"error",errorCode:r.code,message:r.message}),this.setState("failed"),this.teardownIframe(r),xe(this.options.onError,Tg(r)),this.rejectReady?.(r)),r}postBridgeError(t){try{this.bridgeServer?.postEvent("error",{code:t.code,message:t.message,...t.data!==void 0?{data:t.data}:{}})}catch{}return t}destroyBridgeServer(){const t=this.bridgeServer;this.bridgeServer=null;try{t?.destroy()}catch{}}disposeRuntimeResources(){if(!this.runtimeResourcesDisposed){this.runtimeResourcesDisposed=!0,this.clearHandshakeTimeout(),this.clearHeartbeat(),this.clearUnexpectedDocumentLoadFailure(),this.clearDocumentRevalidation(),this.destroyBridgeServer(),this.capabilityGraph?.dispose(),this.capabilityGraph=void 0,this.clearLifecycleDisposer(),this.removeIframeListeners();try{this.options.dispose?.()}catch{}}}teardownIframe(t){if(!this.iframeTornDown){this.iframeTornDown=!0;try{this.options.teardownIframe?this.options.teardownIframe(this.iframe,t):this.iframe.remove()}catch{}}}setStatus(t){this.status!==t&&(this.status=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"status",status:t}))}setState(t){this.stateValue!==t&&(this.stateValue=t,xe(this.options.onStateChange,t))}isInactive(){return this.stateValue==="failed"||this.stateValue==="destroyed"}trace(t){xe(this.options.onTrace,{...t,runtimeId:this.runtimeId,...this.identity})}createLaunchContext(){return{launchUrl:this.launchUrl,src:this.miniProgramSrc,sdkVersion:this.sdkVersionDecision?.sdkVersion,heartbeatEnabled:!!this.sdkVersionDecision?.heartbeatEnabled,...this.identity}}createReadyContext(){return this.readyContext??this.createLaunchContext()}}function Pg(e){const t=uo(e);return bn(e)&&"cause"in e&&ad(t,e.cause),t}function ad(e,t){return Object.defineProperty(e,"cause",{configurable:!0,enumerable:!1,value:t}),e}function Tg(e){return{code:e.code,message:e.message,...e.data!==void 0?{data:e.data}:{}}}function Cg(e){return bn(e)&&typeof e.code=="string"&&typeof e.message=="string"}function bn(e){return!!e&&typeof e=="object"}function xe(e,t){try{e?.(t)}catch{}}function Lg(e,t,r){try{e?.(t,r)}catch{}}function Ys(e){try{const t=new URL(e);return t.protocol==="http:"&&Dp(t.hostname)}catch{return!1}}function Mg(e){try{return new URL(e).origin}catch{return}}function kg(e){return Hp()?"*":Mg(e)}function Ug(e){return`${od}
|
|
2
2
|
|
|
3
|
-
${
|
|
3
|
+
${sd}
|
|
4
4
|
|
|
5
|
-
URL: ${e}`}function xg(e){return typeof window>"u"||typeof window.confirm!="function"?!1:window.confirm(Ug(e.url))}function Qs(){typeof window<"u"&&typeof window.close=="function"&&window.close()}function Hg(){const e=typeof navigator>"u"?void 0:navigator,t=typeof screen>"u"?void 0:screen,r=typeof window>"u"?void 0:window,n=Object.freeze({protocolVersion:Va,knownMethodCount:Ge.length,supportsFileCreate:Ge.some(i=>i.method===Qt),system:Fg(e?.userAgent,e?.platform),userAgent:e?.userAgent??"",platform:e?.platform??"",language:e?.language??"",hardwareConcurrency:gt(e?.hardwareConcurrency),maxTouchPoints:gt(e?.maxTouchPoints),screen:{width:gt(t?.width),height:gt(t?.height)},viewport:{width:gt(r?.innerWidth),height:gt(r?.innerHeight),devicePixelRatio:Bg(r?.devicePixelRatio)}});console.info("[hb-sdk-runtime] environment",n)}function Fg(e="",t=""){const r=`${t} ${e}`.toLowerCase();return/iphone|ipad|ipod/.test(r)?"ios":r.includes("android")?"android":/win32|win64|windows/.test(r)?"windows":/darwin|macintosh|macintel|mac os/.test(r)?"macos":/linux|x11/.test(r)?"linux":"unknown"}function gt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):0}function Bg(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:1}function Vg(e){return K(hg,rd,{reason:e.reason,...e.platform===void 0?{}:{platform:e.platform},...e.invalidReason===void 0?{}:{invalidReason:e.invalidReason},...e.effectivePlatforms===void 0?{}:{effectivePlatforms:e.effectivePlatforms}})}function qg(e){const t=e.canonicalIdentity?.miniProgramId?.trim();if(!t)return;const r=e.canonicalIdentity?.miniProgramVersion?.trim(),n=e.miniProgramPresentation?.name?.trim(),i=e.miniProgramPresentation?.avatarUrl?.trim(),o=e.miniProgramPresentation?.author?.trim();return Object.freeze({miniProgramId:t,...r?{version:r}:{},...n?{name:n}:{},...i?{iconUrl:i}:{},...o?{author:o}:{},...e.sdkVersionPolicy.releaseChannel===void 0?{}:{releaseChannel:e.sdkVersionPolicy.releaseChannel}})}function zg(e){if(!bn(e?.ports)||Array.isArray(e.ports))throw new TypeError("createMiniProgramRuntime 必须显式提供 ports");if(!bn(e.environment)||typeof e.environment.getCurrentHref!="function"||typeof e.environment.isDevRuntime!="function")throw new TypeError("createMiniProgramRuntime 必须显式提供 environment");if(typeof e.resolveLaunchConfiguration!="function")throw new TypeError("createMiniProgramRuntime 必须显式提供 resolveLaunchConfiguration");return new Ng(e)}const Gg=/^(?:authentication-info|authorization|cookie|cookie2|proxy-authenticate|proxy-authentication-info|proxy-authorization|set-cookie|set-cookie2|www-authenticate|pkey|x-pkey|x-access-token|x-auth-token)$/i,jg=new Set(["origin","referer","user-agent"]);function $g(e,t){return _u({mode:"request-only",request:(r,n={signal:t.signal})=>t.run(n.signal,async i=>{const o={...n,signal:i},s=Wg(r),a=await e.authenticatedRequest(s,o);return Qg(a)})}).network}function Wg(e){const t=Kg(e.headers);return{...e,target:{...e.target},...e.params===void 0?{}:{params:{...e.params}},...t===void 0?{headers:void 0}:{headers:t}}}function Kg(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([t])=>!Yg(t)))}function Yg(e){const t=e.trim().toLowerCase();return jg.has(t)}function Qg(e){return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},data:e.data,headers:Jg(e.headers)??{}}}function Jg(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([t])=>!Xg(t)))}function Xg(e){const t=e.trim().toLowerCase();return Gg.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function Zg(e,t,r){const n=iy(e.presentation,t);return{account:ry(e,t,r),network:$g(e,t),...e.storage===void 0?{}:{storage:ny(e,t)},...e.storage===void 0?{}:ey(e,t),...n===void 0?{}:{presentation:n}}}function ey(e,t){const r=e.storage;return typeof r.storage.key!="function"||typeof r.storage.length!="number"?{}:{storageDiagnostics:{listRaw:n=>t.run(n.signal,()=>{const i=[];for(let o=0;o<r.storage.length;o+=1){const s=r.storage.key(o);if(s===null)continue;const a=r.storage.getItem(s);a!==null&&i.push({area:r.area,key:s,value:a})}return i})}}}function ty(e,t){return{getCurrentHref:()=>(t.assertActive(),e.environment.getCurrentHref()),isDevRuntime:()=>t.run(void 0,()=>e.environment.isDevRuntime()),...e.environment.setDocumentTitle===void 0?{}:{setDocumentTitle:r=>{t.assertActive(),e.environment.setDocumentTitle?.(r)}}}}function ry(e,t,r){return{getCurrentUserId:n=>t.run(n.signal,i=>e.account.getCurrentUserId({signal:i})),ensureAuthenticated:n=>t.run(n.signal,i=>e.account.ensureAuthenticated({trustedUserGesture:n.trustedUserGesture,reason:n.reason,signal:i})),onChange:n=>{t.assertActive();const i=e.account.onChange(o=>{t.signal.aborted||n(o)});return r(i)}}}function ny(e,t){const r=e.storage.storage;return{getRaw:(n,i)=>t.run(i.signal,()=>{const o=r.getItem(n);return o===null?void 0:o}),setRaw:(n,i,o)=>t.run(o.signal,()=>{r.setItem(n,i)})}}function iy(e,t){if(!e)return;const r={};return e.close&&(r.close=n=>t.run(n.signal,i=>e.close({signal:i}))),e.reload&&(r.reload=n=>t.run(n.signal,i=>e.reload({signal:i}))),e.openAppPage&&(r.openAppPage=(n,i)=>t.run(i.signal,o=>e.openAppPage(n,{signal:o}))),e.openWindow&&(r.openWindow=(n,i)=>t.run(i.signal,o=>e.openWindow(n,{signal:o}))),e.applyOrientation&&(r.applyOrientation=(n,i)=>t.run(i.signal,o=>e.applyOrientation(n,{...i,signal:o}))),e.onViewportChange&&(r.onViewportChange=n=>{t.assertActive();const i=e.onViewportChange(()=>{t.signal.aborted||n()});let o=!1;const s=()=>{o||(o=!0,t.signal.removeEventListener("abort",s),i())};return t.signal.addEventListener("abort",s,{once:!0}),s}),e.getViewportMetrics&&(r.getViewportMetrics=()=>(t.assertActive(),e.getViewportMetrics())),e.getNavigationBarHeight&&(r.getNavigationBarHeight=()=>(t.assertActive(),e.getNavigationBarHeight())),e.setNavigationBarStyle&&(r.setNavigationBarStyle=(n,i)=>t.run(i.signal,o=>e.setNavigationBarStyle(n,{signal:o}))),e.showShareMenu&&(r.showShareMenu=(n,i)=>t.run(i.signal,o=>e.showShareMenu(n,{signal:o}))),e.setScreenshotChromeHidden&&(r.setScreenshotChromeHidden=(n,i)=>ku(i)?e.setScreenshotChromeHidden(n,i):t.run(i.signal,o=>e.setScreenshotChromeHidden(n,{signal:o}))),e.captureAndShare&&(r.captureAndShare=(n,i)=>t.run(i.signal,o=>e.captureAndShare(n,{signal:o}))),e.showToast&&(r.showToast=(n,i)=>t.run(i.signal,o=>e.showToast(n,{signal:o}))),e.showLoading&&(r.showLoading=(n,i)=>t.run(i.signal,o=>e.showLoading(n,{signal:o}))),e.hideLoading&&(r.hideLoading=n=>t.run(n.signal,i=>e.hideLoading({signal:i}))),e.vibrate&&(r.vibrate=(n,i)=>t.run(i.signal,o=>e.vibrate(n,{signal:o}))),e.setClipboard&&(r.setClipboard=(n,i)=>t.run(i.signal,o=>e.setClipboard(n,{signal:o}))),Object.keys(r).length===0?void 0:r}function oy(){const e=new AbortController;return{signal:e.signal,abort:t=>{e.signal.aborted||e.abort(t)},assertActive:t=>{const r=[e.signal,t].find(n=>n?.aborted);if(r)throw Rr(r.reason)},run:async(t,r)=>{const n=t===e.signal||t===void 0?[e.signal]:[e.signal,t],i=n.find(g=>g.aborted);if(i)throw Rr(i.reason);const o=new AbortController;let s;const a=new Promise((g,m)=>{s=m}),c=n.map(g=>{const m=()=>{o.signal.aborted||o.abort(g.reason),s(Rr(g.reason))};return g.addEventListener("abort",m,{once:!0}),{listener:m,source:g}});let u;try{u=Promise.resolve(r(o.signal))}catch(g){u=Promise.reject(g)}try{const g=await Promise.race([u,a]),m=n.find(l=>l.aborted);if(m)throw Rr(m.reason);return g}finally{for(const{listener:g,source:m}of c)m.removeEventListener("abort",g)}}}}function Rr(e){return new DOMException("Web Host operation aborted","AbortError")}async function sy(e){const t=oy(),r=new Set;let n=!1;const i=m=>{if(n||t.signal.aborted)return si(m),()=>{};let l=!0;const p=()=>{l&&(l=!1,r.delete(p),si(m))};return r.add(p),p},o=()=>s(e.signal.reason),s=m=>{if(!n){n=!0,e.signal.removeEventListener("abort",o),t.abort(m);for(const l of[...r])l();e.onDispose&&si(e.onDispose)}};e.signal.addEventListener("abort",o,{once:!0}),e.signal.aborted&&s(e.signal.reason);const a=Zg(e,t,i),c=Za(a,{hostCapabilities:e.hostCapabilities}),u=ty(e,t);let g;return{platform:"web",ports:a,environment:u,resolveLaunch:()=>(g??=t.run(void 0,async m=>e.resolveLaunch(m)),g),...e.authPresentation===void 0?{}:{authPresentation:ay(e.authPresentation,t)},hostCapabilities:c.effectiveCapabilities,dispose:s}}function si(e){try{e()}catch{}}function ay(e,t){return{confirmAuthorization:r=>t.run(r.signal,n=>e.confirmAuthorization({...r,signal:n}))}}var yt={},ai,Js;function cy(){return Js||(Js=1,ai=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),ai}var ci={},He={},Xs;function at(){if(Xs)return He;Xs=1;let e;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return He.getSymbolSize=function(n){if(!n)throw new Error('"version" cannot be null or undefined');if(n<1||n>40)throw new Error('"version" should be in range from 1 to 40');return n*4+17},He.getSymbolTotalCodewords=function(n){return t[n]},He.getBCHDigit=function(r){let n=0;for(;r!==0;)n++,r>>>=1;return n},He.setToSJISFunction=function(n){if(typeof n!="function")throw new Error('"toSJISFunc" is not a valid function.');e=n},He.isKanjiModeEnabled=function(){return typeof e<"u"},He.toSJIS=function(n){return e(n)},He}var di={},Zs;function So(){return Zs||(Zs=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+r)}}e.isValid=function(n){return n&&typeof n.bit<"u"&&n.bit>=0&&n.bit<4},e.from=function(n,i){if(e.isValid(n))return n;try{return t(n)}catch{return i}}})(di)),di}var ui,ea;function dy(){if(ea)return ui;ea=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(t){const r=Math.floor(t/8);return(this.buffer[r]>>>7-t%8&1)===1},put:function(t,r){for(let n=0;n<r;n++)this.putBit((t>>>r-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const r=Math.floor(this.length/8);this.buffer.length<=r&&this.buffer.push(0),t&&(this.buffer[r]|=128>>>this.length%8),this.length++}},ui=e,ui}var li,ta;function uy(){if(ta)return li;ta=1;function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return e.prototype.set=function(t,r,n,i){const o=t*this.size+r;this.data[o]=n,i&&(this.reservedBit[o]=!0)},e.prototype.get=function(t,r){return this.data[t*this.size+r]},e.prototype.xor=function(t,r,n){this.data[t*this.size+r]^=n},e.prototype.isReserved=function(t,r){return this.reservedBit[t*this.size+r]},li=e,li}var fi={},ra;function ly(){return ra||(ra=1,(function(e){const t=at().getSymbolSize;e.getRowColCoords=function(n){if(n===1)return[];const i=Math.floor(n/7)+2,o=t(n),s=o===145?26:Math.ceil((o-13)/(2*i-2))*2,a=[o-7];for(let c=1;c<i-1;c++)a[c]=a[c-1]-s;return a.push(6),a.reverse()},e.getPositions=function(n){const i=[],o=e.getRowColCoords(n),s=o.length;for(let a=0;a<s;a++)for(let c=0;c<s;c++)a===0&&c===0||a===0&&c===s-1||a===s-1&&c===0||i.push([o[a],o[c]]);return i}})(fi)),fi}var hi={},na;function fy(){if(na)return hi;na=1;const e=at().getSymbolSize,t=7;return hi.getPositions=function(n){const i=e(n);return[[0,0],[i-t,0],[0,i-t]]},hi}var mi={},ia;function hy(){return ia||(ia=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(i){return i!=null&&i!==""&&!isNaN(i)&&i>=0&&i<=7},e.from=function(i){return e.isValid(i)?parseInt(i,10):void 0},e.getPenaltyN1=function(i){const o=i.size;let s=0,a=0,c=0,u=null,g=null;for(let m=0;m<o;m++){a=c=0,u=g=null;for(let l=0;l<o;l++){let p=i.get(m,l);p===u?a++:(a>=5&&(s+=t.N1+(a-5)),u=p,a=1),p=i.get(l,m),p===g?c++:(c>=5&&(s+=t.N1+(c-5)),g=p,c=1)}a>=5&&(s+=t.N1+(a-5)),c>=5&&(s+=t.N1+(c-5))}return s},e.getPenaltyN2=function(i){const o=i.size;let s=0;for(let a=0;a<o-1;a++)for(let c=0;c<o-1;c++){const u=i.get(a,c)+i.get(a,c+1)+i.get(a+1,c)+i.get(a+1,c+1);(u===4||u===0)&&s++}return s*t.N2},e.getPenaltyN3=function(i){const o=i.size;let s=0,a=0,c=0;for(let u=0;u<o;u++){a=c=0;for(let g=0;g<o;g++)a=a<<1&2047|i.get(u,g),g>=10&&(a===1488||a===93)&&s++,c=c<<1&2047|i.get(g,u),g>=10&&(c===1488||c===93)&&s++}return s*t.N3},e.getPenaltyN4=function(i){let o=0;const s=i.data.length;for(let c=0;c<s;c++)o+=i.data[c];return Math.abs(Math.ceil(o*100/s/5)-10)*t.N4};function r(n,i,o){switch(n){case e.Patterns.PATTERN000:return(i+o)%2===0;case e.Patterns.PATTERN001:return i%2===0;case e.Patterns.PATTERN010:return o%3===0;case e.Patterns.PATTERN011:return(i+o)%3===0;case e.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(o/3))%2===0;case e.Patterns.PATTERN101:return i*o%2+i*o%3===0;case e.Patterns.PATTERN110:return(i*o%2+i*o%3)%2===0;case e.Patterns.PATTERN111:return(i*o%3+(i+o)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}e.applyMask=function(i,o){const s=o.size;for(let a=0;a<s;a++)for(let c=0;c<s;c++)o.isReserved(c,a)||o.xor(c,a,r(i,c,a))},e.getBestMask=function(i,o){const s=Object.keys(e.Patterns).length;let a=0,c=1/0;for(let u=0;u<s;u++){o(u),e.applyMask(u,i);const g=e.getPenaltyN1(i)+e.getPenaltyN2(i)+e.getPenaltyN3(i)+e.getPenaltyN4(i);e.applyMask(u,i),g<c&&(c=g,a=u)}return a}})(mi)),mi}var Or={},oa;function ad(){if(oa)return Or;oa=1;const e=So(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Or.getBlocksCount=function(i,o){switch(o){case e.L:return t[(i-1)*4+0];case e.M:return t[(i-1)*4+1];case e.Q:return t[(i-1)*4+2];case e.H:return t[(i-1)*4+3];default:return}},Or.getTotalCodewordsCount=function(i,o){switch(o){case e.L:return r[(i-1)*4+0];case e.M:return r[(i-1)*4+1];case e.Q:return r[(i-1)*4+2];case e.H:return r[(i-1)*4+3];default:return}},Or}var pi={},kt={},sa;function my(){if(sa)return kt;sa=1;const e=new Uint8Array(512),t=new Uint8Array(256);return(function(){let n=1;for(let i=0;i<255;i++)e[i]=n,t[n]=i,n<<=1,n&256&&(n^=285);for(let i=255;i<512;i++)e[i]=e[i-255]})(),kt.log=function(n){if(n<1)throw new Error("log("+n+")");return t[n]},kt.exp=function(n){return e[n]},kt.mul=function(n,i){return n===0||i===0?0:e[t[n]+t[i]]},kt}var aa;function py(){return aa||(aa=1,(function(e){const t=my();e.mul=function(n,i){const o=new Uint8Array(n.length+i.length-1);for(let s=0;s<n.length;s++)for(let a=0;a<i.length;a++)o[s+a]^=t.mul(n[s],i[a]);return o},e.mod=function(n,i){let o=new Uint8Array(n);for(;o.length-i.length>=0;){const s=o[0];for(let c=0;c<i.length;c++)o[c]^=t.mul(i[c],s);let a=0;for(;a<o.length&&o[a]===0;)a++;o=o.slice(a)}return o},e.generateECPolynomial=function(n){let i=new Uint8Array([1]);for(let o=0;o<n;o++)i=e.mul(i,new Uint8Array([1,t.exp(o)]));return i}})(pi)),pi}var gi,ca;function gy(){if(ca)return gi;ca=1;const e=py();function t(r){this.genPoly=void 0,this.degree=r,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(n){this.degree=n,this.genPoly=e.generateECPolynomial(this.degree)},t.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(n.length+this.degree);i.set(n);const o=e.mod(i,this.genPoly),s=this.degree-o.length;if(s>0){const a=new Uint8Array(this.degree);return a.set(o,s),a}return o},gi=t,gi}var yi={},Ei={},wi={},da;function cd(){return da||(da=1,wi.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),wi}var Re={},ua;function dd(){if(ua)return Re;ua=1;const e="[0-9]+",t="[A-Z $%*+\\-./:]+";let r="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";r=r.replace(/u/g,"\\u");const n="(?:(?![A-Z0-9 $%*+\\-./:]|"+r+`)(?:.|[\r
|
|
6
|
-
]))+`;Re.KANJI=new RegExp(r,"g"),Re.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Re.BYTE=new RegExp(n,"g"),Re.NUMERIC=new RegExp(e,"g"),Re.ALPHANUMERIC=new RegExp(t,"g");const i=new RegExp("^"+r+"$"),o=new RegExp("^"+e+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Re.testKanji=function(c){return i.test(c)},Re.testNumeric=function(c){return o.test(c)},Re.testAlphanumeric=function(c){return s.test(c)},Re}var
|
|
7
|
-
Make sure your charset is UTF-8`);o=(o>>>8&255)*192+(o&255),n.put(o,13)}},
|
|
8
|
-
Suggested mode is: `+t.toString(L));switch(_===t.KANJI&&!a.isKanjiModeEnabled()&&(_=t.BYTE),_){case t.NUMERIC:return new r(A);case t.ALPHANUMERIC:return new n(A);case t.KANJI:return new o(A);case t.BYTE:return new i(A)}}e.fromArray=function(P){return P.reduce(function(_,L){return typeof L=="string"?_.push(v(L,null)):L.data&&_.push(v(L.data,L.mode)),_},[])},e.fromString=function(P,_){const L=m(P,a.isKanjiModeEnabled()),F=O(L),N=b(F,_),I=c.find_path(N.map,"start","end"),d=[];for(let h=1;h<I.length-1;h++)d.push(N.table[I[h]].node);return e.fromArray(p(d))},e.rawSplit=function(P){return e.fromArray(m(P,a.isKanjiModeEnabled()))}})(
|
|
5
|
+
URL: ${e}`}function xg(e){return typeof window>"u"||typeof window.confirm!="function"?!1:window.confirm(Ug(e.url))}function Qs(){typeof window<"u"&&typeof window.close=="function"&&window.close()}function Hg(){const e=typeof navigator>"u"?void 0:navigator,t=typeof screen>"u"?void 0:screen,r=typeof window>"u"?void 0:window,n=Object.freeze({protocolVersion:Va,knownMethodCount:Ge.length,supportsFileCreate:Ge.some(i=>i.method===Qt),system:Fg(e?.userAgent,e?.platform),userAgent:e?.userAgent??"",platform:e?.platform??"",language:e?.language??"",hardwareConcurrency:gt(e?.hardwareConcurrency),maxTouchPoints:gt(e?.maxTouchPoints),screen:{width:gt(t?.width),height:gt(t?.height)},viewport:{width:gt(r?.innerWidth),height:gt(r?.innerHeight),devicePixelRatio:Bg(r?.devicePixelRatio)}});console.info("[hb-sdk-runtime] environment",n)}function Fg(e="",t=""){const r=`${t} ${e}`.toLowerCase();return/iphone|ipad|ipod/.test(r)?"ios":r.includes("android")?"android":/win32|win64|windows/.test(r)?"windows":/darwin|macintosh|macintel|mac os/.test(r)?"macos":/linux|x11/.test(r)?"linux":"unknown"}function gt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):0}function Bg(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:1}function Vg(e){return K(hg,nd,{reason:e.reason,...e.platform===void 0?{}:{platform:e.platform},...e.invalidReason===void 0?{}:{invalidReason:e.invalidReason},...e.effectivePlatforms===void 0?{}:{effectivePlatforms:e.effectivePlatforms}})}function qg(e){const t=e.canonicalIdentity?.miniProgramId?.trim();if(!t)return;const r=e.canonicalIdentity?.miniProgramVersion?.trim(),n=e.miniProgramPresentation?.name?.trim(),i=e.miniProgramPresentation?.avatarUrl?.trim(),o=e.miniProgramPresentation?.author?.trim();return Object.freeze({miniProgramId:t,...r?{version:r}:{},...n?{name:n}:{},...i?{iconUrl:i}:{},...o?{author:o}:{},...e.sdkVersionPolicy.releaseChannel===void 0?{}:{releaseChannel:e.sdkVersionPolicy.releaseChannel}})}function zg(e){if(!bn(e?.ports)||Array.isArray(e.ports))throw new TypeError("createMiniProgramRuntime 必须显式提供 ports");if(!bn(e.environment)||typeof e.environment.getCurrentHref!="function"||typeof e.environment.isDevRuntime!="function")throw new TypeError("createMiniProgramRuntime 必须显式提供 environment");if(typeof e.resolveLaunchConfiguration!="function")throw new TypeError("createMiniProgramRuntime 必须显式提供 resolveLaunchConfiguration");return new Ng(e)}const Gg=/^(?:authentication-info|authorization|cookie|cookie2|proxy-authenticate|proxy-authentication-info|proxy-authorization|set-cookie|set-cookie2|www-authenticate|pkey|x-pkey|x-access-token|x-auth-token)$/i,jg=new Set(["origin","referer","user-agent"]);function $g(e,t){return Sl({mode:"request-only",request:(r,n={signal:t.signal})=>t.run(n.signal,async i=>{const o={...n,signal:i},s=Wg(r),a=await e.authenticatedRequest(s,o);return Qg(a)})}).network}function Wg(e){const t=Kg(e.headers);return{...e,target:{...e.target},...e.params===void 0?{}:{params:{...e.params}},...t===void 0?{headers:void 0}:{headers:t}}}function Kg(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([t])=>!Yg(t)))}function Yg(e){const t=e.trim().toLowerCase();return jg.has(t)}function Qg(e){return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},data:e.data,headers:Jg(e.headers)??{}}}function Jg(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([t])=>!Xg(t)))}function Xg(e){const t=e.trim().toLowerCase();return Gg.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function Zg(e,t,r){const n=iy(e.presentation,t);return{account:ry(e,t,r),network:$g(e,t),...e.storage===void 0?{}:{storage:ny(e,t)},...e.storage===void 0?{}:ey(e,t),...n===void 0?{}:{presentation:n}}}function ey(e,t){const r=e.storage;return typeof r.storage.key!="function"||typeof r.storage.length!="number"?{}:{storageDiagnostics:{listRaw:n=>t.run(n.signal,()=>{const i=[];for(let o=0;o<r.storage.length;o+=1){const s=r.storage.key(o);if(s===null)continue;const a=r.storage.getItem(s);a!==null&&i.push({area:r.area,key:s,value:a})}return i})}}}function ty(e,t){return{getCurrentHref:()=>(t.assertActive(),e.environment.getCurrentHref()),isDevRuntime:()=>t.run(void 0,()=>e.environment.isDevRuntime()),...e.environment.setDocumentTitle===void 0?{}:{setDocumentTitle:r=>{t.assertActive(),e.environment.setDocumentTitle?.(r)}}}}function ry(e,t,r){return{getCurrentUserId:n=>t.run(n.signal,i=>e.account.getCurrentUserId({signal:i})),ensureAuthenticated:n=>t.run(n.signal,i=>e.account.ensureAuthenticated({trustedUserGesture:n.trustedUserGesture,reason:n.reason,signal:i})),onChange:n=>{t.assertActive();const i=e.account.onChange(o=>{t.signal.aborted||n(o)});return r(i)}}}function ny(e,t){const r=e.storage.storage;return{getRaw:(n,i)=>t.run(i.signal,()=>{const o=r.getItem(n);return o===null?void 0:o}),setRaw:(n,i,o)=>t.run(o.signal,()=>{r.setItem(n,i)})}}function iy(e,t){if(!e)return;const r={};return e.close&&(r.close=n=>t.run(n.signal,i=>e.close({signal:i}))),e.reload&&(r.reload=n=>t.run(n.signal,i=>e.reload({signal:i}))),e.openAppPage&&(r.openAppPage=(n,i)=>t.run(i.signal,o=>e.openAppPage(n,{signal:o}))),e.openWindow&&(r.openWindow=(n,i)=>t.run(i.signal,o=>e.openWindow(n,{signal:o}))),e.applyOrientation&&(r.applyOrientation=(n,i)=>t.run(i.signal,o=>e.applyOrientation(n,{...i,signal:o}))),e.onViewportChange&&(r.onViewportChange=n=>{t.assertActive();const i=e.onViewportChange(()=>{t.signal.aborted||n()});let o=!1;const s=()=>{o||(o=!0,t.signal.removeEventListener("abort",s),i())};return t.signal.addEventListener("abort",s,{once:!0}),s}),e.getViewportMetrics&&(r.getViewportMetrics=()=>(t.assertActive(),e.getViewportMetrics())),e.getNavigationBarHeight&&(r.getNavigationBarHeight=()=>(t.assertActive(),e.getNavigationBarHeight())),e.setNavigationBarStyle&&(r.setNavigationBarStyle=(n,i)=>t.run(i.signal,o=>e.setNavigationBarStyle(n,{signal:o}))),e.showShareMenu&&(r.showShareMenu=(n,i)=>t.run(i.signal,o=>e.showShareMenu(n,{signal:o}))),e.setScreenshotChromeHidden&&(r.setScreenshotChromeHidden=(n,i)=>Ul(i)?e.setScreenshotChromeHidden(n,i):t.run(i.signal,o=>e.setScreenshotChromeHidden(n,{signal:o}))),e.captureAndShare&&(r.captureAndShare=(n,i)=>t.run(i.signal,o=>e.captureAndShare(n,{signal:o}))),e.showToast&&(r.showToast=(n,i)=>t.run(i.signal,o=>e.showToast(n,{signal:o}))),e.showLoading&&(r.showLoading=(n,i)=>t.run(i.signal,o=>e.showLoading(n,{signal:o}))),e.hideLoading&&(r.hideLoading=n=>t.run(n.signal,i=>e.hideLoading({signal:i}))),e.vibrate&&(r.vibrate=(n,i)=>t.run(i.signal,o=>e.vibrate(n,{signal:o}))),e.setClipboard&&(r.setClipboard=(n,i)=>t.run(i.signal,o=>e.setClipboard(n,{signal:o}))),Object.keys(r).length===0?void 0:r}function oy(){const e=new AbortController;return{signal:e.signal,abort:t=>{e.signal.aborted||e.abort(t)},assertActive:t=>{const r=[e.signal,t].find(n=>n?.aborted);if(r)throw Rr(r.reason)},run:async(t,r)=>{const n=t===e.signal||t===void 0?[e.signal]:[e.signal,t],i=n.find(g=>g.aborted);if(i)throw Rr(i.reason);const o=new AbortController;let s;const a=new Promise((g,m)=>{s=m}),c=n.map(g=>{const m=()=>{o.signal.aborted||o.abort(g.reason),s(Rr(g.reason))};return g.addEventListener("abort",m,{once:!0}),{listener:m,source:g}});let l;try{l=Promise.resolve(r(o.signal))}catch(g){l=Promise.reject(g)}try{const g=await Promise.race([l,a]),m=n.find(u=>u.aborted);if(m)throw Rr(m.reason);return g}finally{for(const{listener:g,source:m}of c)m.removeEventListener("abort",g)}}}}function Rr(e){return new DOMException("Web Host operation aborted","AbortError")}async function sy(e){const t=oy(),r=new Set;let n=!1;const i=m=>{if(n||t.signal.aborted)return ai(m),()=>{};let u=!0;const p=()=>{u&&(u=!1,r.delete(p),ai(m))};return r.add(p),p},o=()=>s(e.signal.reason),s=m=>{if(!n){n=!0,e.signal.removeEventListener("abort",o),t.abort(m);for(const u of[...r])u();e.onDispose&&ai(e.onDispose)}};e.signal.addEventListener("abort",o,{once:!0}),e.signal.aborted&&s(e.signal.reason);const a=Zg(e,t,i),c=Za(a,{hostCapabilities:e.hostCapabilities}),l=ty(e,t);let g;return{platform:"web",ports:a,environment:l,resolveLaunch:()=>(g??=t.run(void 0,async m=>e.resolveLaunch(m)),g),...e.authPresentation===void 0?{}:{authPresentation:ay(e.authPresentation,t)},hostCapabilities:c.effectiveCapabilities,dispose:s}}function ai(e){try{e()}catch{}}function ay(e,t){return{confirmAuthorization:r=>t.run(r.signal,n=>e.confirmAuthorization({...r,signal:n}))}}var yt={},ci,Js;function cy(){return Js||(Js=1,ci=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),ci}var di={},He={},Xs;function at(){if(Xs)return He;Xs=1;let e;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return He.getSymbolSize=function(n){if(!n)throw new Error('"version" cannot be null or undefined');if(n<1||n>40)throw new Error('"version" should be in range from 1 to 40');return n*4+17},He.getSymbolTotalCodewords=function(n){return t[n]},He.getBCHDigit=function(r){let n=0;for(;r!==0;)n++,r>>>=1;return n},He.setToSJISFunction=function(n){if(typeof n!="function")throw new Error('"toSJISFunc" is not a valid function.');e=n},He.isKanjiModeEnabled=function(){return typeof e<"u"},He.toSJIS=function(n){return e(n)},He}var li={},Zs;function So(){return Zs||(Zs=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+r)}}e.isValid=function(n){return n&&typeof n.bit<"u"&&n.bit>=0&&n.bit<4},e.from=function(n,i){if(e.isValid(n))return n;try{return t(n)}catch{return i}}})(li)),li}var ui,ea;function dy(){if(ea)return ui;ea=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(t){const r=Math.floor(t/8);return(this.buffer[r]>>>7-t%8&1)===1},put:function(t,r){for(let n=0;n<r;n++)this.putBit((t>>>r-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const r=Math.floor(this.length/8);this.buffer.length<=r&&this.buffer.push(0),t&&(this.buffer[r]|=128>>>this.length%8),this.length++}},ui=e,ui}var fi,ta;function ly(){if(ta)return fi;ta=1;function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return e.prototype.set=function(t,r,n,i){const o=t*this.size+r;this.data[o]=n,i&&(this.reservedBit[o]=!0)},e.prototype.get=function(t,r){return this.data[t*this.size+r]},e.prototype.xor=function(t,r,n){this.data[t*this.size+r]^=n},e.prototype.isReserved=function(t,r){return this.reservedBit[t*this.size+r]},fi=e,fi}var hi={},ra;function uy(){return ra||(ra=1,(function(e){const t=at().getSymbolSize;e.getRowColCoords=function(n){if(n===1)return[];const i=Math.floor(n/7)+2,o=t(n),s=o===145?26:Math.ceil((o-13)/(2*i-2))*2,a=[o-7];for(let c=1;c<i-1;c++)a[c]=a[c-1]-s;return a.push(6),a.reverse()},e.getPositions=function(n){const i=[],o=e.getRowColCoords(n),s=o.length;for(let a=0;a<s;a++)for(let c=0;c<s;c++)a===0&&c===0||a===0&&c===s-1||a===s-1&&c===0||i.push([o[a],o[c]]);return i}})(hi)),hi}var mi={},na;function fy(){if(na)return mi;na=1;const e=at().getSymbolSize,t=7;return mi.getPositions=function(n){const i=e(n);return[[0,0],[i-t,0],[0,i-t]]},mi}var pi={},ia;function hy(){return ia||(ia=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(i){return i!=null&&i!==""&&!isNaN(i)&&i>=0&&i<=7},e.from=function(i){return e.isValid(i)?parseInt(i,10):void 0},e.getPenaltyN1=function(i){const o=i.size;let s=0,a=0,c=0,l=null,g=null;for(let m=0;m<o;m++){a=c=0,l=g=null;for(let u=0;u<o;u++){let p=i.get(m,u);p===l?a++:(a>=5&&(s+=t.N1+(a-5)),l=p,a=1),p=i.get(u,m),p===g?c++:(c>=5&&(s+=t.N1+(c-5)),g=p,c=1)}a>=5&&(s+=t.N1+(a-5)),c>=5&&(s+=t.N1+(c-5))}return s},e.getPenaltyN2=function(i){const o=i.size;let s=0;for(let a=0;a<o-1;a++)for(let c=0;c<o-1;c++){const l=i.get(a,c)+i.get(a,c+1)+i.get(a+1,c)+i.get(a+1,c+1);(l===4||l===0)&&s++}return s*t.N2},e.getPenaltyN3=function(i){const o=i.size;let s=0,a=0,c=0;for(let l=0;l<o;l++){a=c=0;for(let g=0;g<o;g++)a=a<<1&2047|i.get(l,g),g>=10&&(a===1488||a===93)&&s++,c=c<<1&2047|i.get(g,l),g>=10&&(c===1488||c===93)&&s++}return s*t.N3},e.getPenaltyN4=function(i){let o=0;const s=i.data.length;for(let c=0;c<s;c++)o+=i.data[c];return Math.abs(Math.ceil(o*100/s/5)-10)*t.N4};function r(n,i,o){switch(n){case e.Patterns.PATTERN000:return(i+o)%2===0;case e.Patterns.PATTERN001:return i%2===0;case e.Patterns.PATTERN010:return o%3===0;case e.Patterns.PATTERN011:return(i+o)%3===0;case e.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(o/3))%2===0;case e.Patterns.PATTERN101:return i*o%2+i*o%3===0;case e.Patterns.PATTERN110:return(i*o%2+i*o%3)%2===0;case e.Patterns.PATTERN111:return(i*o%3+(i+o)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}e.applyMask=function(i,o){const s=o.size;for(let a=0;a<s;a++)for(let c=0;c<s;c++)o.isReserved(c,a)||o.xor(c,a,r(i,c,a))},e.getBestMask=function(i,o){const s=Object.keys(e.Patterns).length;let a=0,c=1/0;for(let l=0;l<s;l++){o(l),e.applyMask(l,i);const g=e.getPenaltyN1(i)+e.getPenaltyN2(i)+e.getPenaltyN3(i)+e.getPenaltyN4(i);e.applyMask(l,i),g<c&&(c=g,a=l)}return a}})(pi)),pi}var Or={},oa;function cd(){if(oa)return Or;oa=1;const e=So(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Or.getBlocksCount=function(i,o){switch(o){case e.L:return t[(i-1)*4+0];case e.M:return t[(i-1)*4+1];case e.Q:return t[(i-1)*4+2];case e.H:return t[(i-1)*4+3];default:return}},Or.getTotalCodewordsCount=function(i,o){switch(o){case e.L:return r[(i-1)*4+0];case e.M:return r[(i-1)*4+1];case e.Q:return r[(i-1)*4+2];case e.H:return r[(i-1)*4+3];default:return}},Or}var gi={},kt={},sa;function my(){if(sa)return kt;sa=1;const e=new Uint8Array(512),t=new Uint8Array(256);return(function(){let n=1;for(let i=0;i<255;i++)e[i]=n,t[n]=i,n<<=1,n&256&&(n^=285);for(let i=255;i<512;i++)e[i]=e[i-255]})(),kt.log=function(n){if(n<1)throw new Error("log("+n+")");return t[n]},kt.exp=function(n){return e[n]},kt.mul=function(n,i){return n===0||i===0?0:e[t[n]+t[i]]},kt}var aa;function py(){return aa||(aa=1,(function(e){const t=my();e.mul=function(n,i){const o=new Uint8Array(n.length+i.length-1);for(let s=0;s<n.length;s++)for(let a=0;a<i.length;a++)o[s+a]^=t.mul(n[s],i[a]);return o},e.mod=function(n,i){let o=new Uint8Array(n);for(;o.length-i.length>=0;){const s=o[0];for(let c=0;c<i.length;c++)o[c]^=t.mul(i[c],s);let a=0;for(;a<o.length&&o[a]===0;)a++;o=o.slice(a)}return o},e.generateECPolynomial=function(n){let i=new Uint8Array([1]);for(let o=0;o<n;o++)i=e.mul(i,new Uint8Array([1,t.exp(o)]));return i}})(gi)),gi}var yi,ca;function gy(){if(ca)return yi;ca=1;const e=py();function t(r){this.genPoly=void 0,this.degree=r,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(n){this.degree=n,this.genPoly=e.generateECPolynomial(this.degree)},t.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(n.length+this.degree);i.set(n);const o=e.mod(i,this.genPoly),s=this.degree-o.length;if(s>0){const a=new Uint8Array(this.degree);return a.set(o,s),a}return o},yi=t,yi}var Ei={},wi={},bi={},da;function dd(){return da||(da=1,bi.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),bi}var Re={},la;function ld(){if(la)return Re;la=1;const e="[0-9]+",t="[A-Z $%*+\\-./:]+";let r="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";r=r.replace(/u/g,"\\u");const n="(?:(?![A-Z0-9 $%*+\\-./:]|"+r+`)(?:.|[\r
|
|
6
|
+
]))+`;Re.KANJI=new RegExp(r,"g"),Re.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Re.BYTE=new RegExp(n,"g"),Re.NUMERIC=new RegExp(e,"g"),Re.ALPHANUMERIC=new RegExp(t,"g");const i=new RegExp("^"+r+"$"),o=new RegExp("^"+e+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Re.testKanji=function(c){return i.test(c)},Re.testNumeric=function(c){return o.test(c)},Re.testAlphanumeric=function(c){return s.test(c)},Re}var ua;function ct(){return ua||(ua=1,(function(e){const t=dd(),r=ld();e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(o,s){if(!o.ccBits)throw new Error("Invalid mode: "+o);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?o.ccBits[0]:s<27?o.ccBits[1]:o.ccBits[2]},e.getBestModeForData=function(o){return r.testNumeric(o)?e.NUMERIC:r.testAlphanumeric(o)?e.ALPHANUMERIC:r.testKanji(o)?e.KANJI:e.BYTE},e.toString=function(o){if(o&&o.id)return o.id;throw new Error("Invalid mode")},e.isValid=function(o){return o&&o.bit&&o.ccBits};function n(i){if(typeof i!="string")throw new Error("Param is not a string");switch(i.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+i)}}e.from=function(o,s){if(e.isValid(o))return o;try{return n(o)}catch{return s}}})(wi)),wi}var fa;function yy(){return fa||(fa=1,(function(e){const t=at(),r=cd(),n=So(),i=ct(),o=dd(),s=7973,a=t.getBCHDigit(s);function c(u,p,O){for(let b=1;b<=40;b++)if(p<=e.getCapacity(b,O,u))return b}function l(u,p){return i.getCharCountIndicator(u,p)+4}function g(u,p){let O=0;return u.forEach(function(b){const v=l(b.mode,p);O+=v+b.getBitsLength()}),O}function m(u,p){for(let O=1;O<=40;O++)if(g(u,O)<=e.getCapacity(O,p,i.MIXED))return O}e.from=function(p,O){return o.isValid(p)?parseInt(p,10):O},e.getCapacity=function(p,O,b){if(!o.isValid(p))throw new Error("Invalid QR Code version");typeof b>"u"&&(b=i.BYTE);const v=t.getSymbolTotalCodewords(p),A=r.getTotalCodewordsCount(p,O),P=(v-A)*8;if(b===i.MIXED)return P;const _=P-l(b,p);switch(b){case i.NUMERIC:return Math.floor(_/10*3);case i.ALPHANUMERIC:return Math.floor(_/11*2);case i.KANJI:return Math.floor(_/13);case i.BYTE:default:return Math.floor(_/8)}},e.getBestVersionForData=function(p,O){let b;const v=n.from(O,n.M);if(Array.isArray(p)){if(p.length>1)return m(p,v);if(p.length===0)return 1;b=p[0]}else b=p;return c(b.mode,b.getLength(),v)},e.getEncodedBits=function(p){if(!o.isValid(p)||p<7)throw new Error("Invalid QR Code version");let O=p<<12;for(;t.getBCHDigit(O)-a>=0;)O^=s<<t.getBCHDigit(O)-a;return p<<12|O}})(Ei)),Ei}var Ai={},ha;function Ey(){if(ha)return Ai;ha=1;const e=at(),t=1335,r=21522,n=e.getBCHDigit(t);return Ai.getEncodedBits=function(o,s){const a=o.bit<<3|s;let c=a<<10;for(;e.getBCHDigit(c)-n>=0;)c^=t<<e.getBCHDigit(c)-n;return(a<<10|c)^r},Ai}var Ii={},_i,ma;function wy(){if(ma)return _i;ma=1;const e=ct();function t(r){this.mode=e.NUMERIC,this.data=r.toString()}return t.getBitsLength=function(n){return 10*Math.floor(n/3)+(n%3?n%3*3+1:0)},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(n){let i,o,s;for(i=0;i+3<=this.data.length;i+=3)o=this.data.substr(i,3),s=parseInt(o,10),n.put(s,10);const a=this.data.length-i;a>0&&(o=this.data.substr(i),s=parseInt(o,10),n.put(s,a*3+1))},_i=t,_i}var Si,pa;function by(){if(pa)return Si;pa=1;const e=ct(),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function r(n){this.mode=e.ALPHANUMERIC,this.data=n}return r.getBitsLength=function(i){return 11*Math.floor(i/2)+6*(i%2)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(i){let o;for(o=0;o+2<=this.data.length;o+=2){let s=t.indexOf(this.data[o])*45;s+=t.indexOf(this.data[o+1]),i.put(s,11)}this.data.length%2&&i.put(t.indexOf(this.data[o]),6)},Si=r,Si}var vi,ga;function Ay(){if(ga)return vi;ga=1;const e=ct();function t(r){this.mode=e.BYTE,typeof r=="string"?this.data=new TextEncoder().encode(r):this.data=new Uint8Array(r)}return t.getBitsLength=function(n){return n*8},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(r){for(let n=0,i=this.data.length;n<i;n++)r.put(this.data[n],8)},vi=t,vi}var Ri,ya;function Iy(){if(ya)return Ri;ya=1;const e=ct(),t=at();function r(n){this.mode=e.KANJI,this.data=n}return r.getBitsLength=function(i){return i*13},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(n){let i;for(i=0;i<this.data.length;i++){let o=t.toSJIS(this.data[i]);if(o>=33088&&o<=40956)o-=33088;else if(o>=57408&&o<=60351)o-=49472;else throw new Error("Invalid SJIS character: "+this.data[i]+`
|
|
7
|
+
Make sure your charset is UTF-8`);o=(o>>>8&255)*192+(o&255),n.put(o,13)}},Ri=r,Ri}var Oi={exports:{}},Ea;function _y(){return Ea||(Ea=1,(function(e){var t={single_source_shortest_paths:function(r,n,i){var o={},s={};s[n]=0;var a=t.PriorityQueue.make();a.push(n,0);for(var c,l,g,m,u,p,O,b,v;!a.empty();){c=a.pop(),l=c.value,m=c.cost,u=r[l]||{};for(g in u)u.hasOwnProperty(g)&&(p=u[g],O=m+p,b=s[g],v=typeof s[g]>"u",(v||b>O)&&(s[g]=O,a.push(g,O),o[g]=l))}if(typeof i<"u"&&typeof s[i]>"u"){var A=["Could not find a path from ",n," to ",i,"."].join("");throw new Error(A)}return o},extract_shortest_path_from_predecessor_list:function(r,n){for(var i=[],o=n;o;)i.push(o),r[o],o=r[o];return i.reverse(),i},find_path:function(r,n,i){var o=t.single_source_shortest_paths(r,n,i);return t.extract_shortest_path_from_predecessor_list(o,i)},PriorityQueue:{make:function(r){var n=t.PriorityQueue,i={},o;r=r||{};for(o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);return i.queue=[],i.sorter=r.sorter||n.default_sorter,i},default_sorter:function(r,n){return r.cost-n.cost},push:function(r,n){var i={value:r,cost:n};this.queue.push(i),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(Oi)),Oi.exports}var wa;function Sy(){return wa||(wa=1,(function(e){const t=ct(),r=wy(),n=by(),i=Ay(),o=Iy(),s=ld(),a=at(),c=_y();function l(A){return unescape(encodeURIComponent(A)).length}function g(A,P,_){const L=[];let F;for(;(F=A.exec(_))!==null;)L.push({data:F[0],index:F.index,mode:P,length:F[0].length});return L}function m(A){const P=g(s.NUMERIC,t.NUMERIC,A),_=g(s.ALPHANUMERIC,t.ALPHANUMERIC,A);let L,F;return a.isKanjiModeEnabled()?(L=g(s.BYTE,t.BYTE,A),F=g(s.KANJI,t.KANJI,A)):(L=g(s.BYTE_KANJI,t.BYTE,A),F=[]),P.concat(_,L,F).sort(function(I,d){return I.index-d.index}).map(function(I){return{data:I.data,mode:I.mode,length:I.length}})}function u(A,P){switch(P){case t.NUMERIC:return r.getBitsLength(A);case t.ALPHANUMERIC:return n.getBitsLength(A);case t.KANJI:return o.getBitsLength(A);case t.BYTE:return i.getBitsLength(A)}}function p(A){return A.reduce(function(P,_){const L=P.length-1>=0?P[P.length-1]:null;return L&&L.mode===_.mode?(P[P.length-1].data+=_.data,P):(P.push(_),P)},[])}function O(A){const P=[];for(let _=0;_<A.length;_++){const L=A[_];switch(L.mode){case t.NUMERIC:P.push([L,{data:L.data,mode:t.ALPHANUMERIC,length:L.length},{data:L.data,mode:t.BYTE,length:L.length}]);break;case t.ALPHANUMERIC:P.push([L,{data:L.data,mode:t.BYTE,length:L.length}]);break;case t.KANJI:P.push([L,{data:L.data,mode:t.BYTE,length:l(L.data)}]);break;case t.BYTE:P.push([{data:L.data,mode:t.BYTE,length:l(L.data)}])}}return P}function b(A,P){const _={},L={start:{}};let F=["start"];for(let N=0;N<A.length;N++){const I=A[N],d=[];for(let h=0;h<I.length;h++){const f=I[h],y=""+N+h;d.push(y),_[y]={node:f,lastCount:0},L[y]={};for(let w=0;w<F.length;w++){const S=F[w];_[S]&&_[S].node.mode===f.mode?(L[S][y]=u(_[S].lastCount+f.length,f.mode)-u(_[S].lastCount,f.mode),_[S].lastCount+=f.length):(_[S]&&(_[S].lastCount=f.length),L[S][y]=u(f.length,f.mode)+4+t.getCharCountIndicator(f.mode,P))}}F=d}for(let N=0;N<F.length;N++)L[F[N]].end=0;return{map:L,table:_}}function v(A,P){let _;const L=t.getBestModeForData(A);if(_=t.from(P,L),_!==t.BYTE&&_.bit<L.bit)throw new Error('"'+A+'" cannot be encoded with mode '+t.toString(_)+`.
|
|
8
|
+
Suggested mode is: `+t.toString(L));switch(_===t.KANJI&&!a.isKanjiModeEnabled()&&(_=t.BYTE),_){case t.NUMERIC:return new r(A);case t.ALPHANUMERIC:return new n(A);case t.KANJI:return new o(A);case t.BYTE:return new i(A)}}e.fromArray=function(P){return P.reduce(function(_,L){return typeof L=="string"?_.push(v(L,null)):L.data&&_.push(v(L.data,L.mode)),_},[])},e.fromString=function(P,_){const L=m(P,a.isKanjiModeEnabled()),F=O(L),N=b(F,_),I=c.find_path(N.map,"start","end"),d=[];for(let h=1;h<I.length-1;h++)d.push(N.table[I[h]].node);return e.fromArray(p(d))},e.rawSplit=function(P){return e.fromArray(m(P,a.isKanjiModeEnabled()))}})(Ii)),Ii}var ba;function vy(){if(ba)return di;ba=1;const e=at(),t=So(),r=dy(),n=ly(),i=uy(),o=fy(),s=hy(),a=cd(),c=gy(),l=yy(),g=Ey(),m=ct(),u=Sy();function p(N,I){const d=N.size,h=o.getPositions(I);for(let f=0;f<h.length;f++){const y=h[f][0],w=h[f][1];for(let S=-1;S<=7;S++)if(!(y+S<=-1||d<=y+S))for(let T=-1;T<=7;T++)w+T<=-1||d<=w+T||(S>=0&&S<=6&&(T===0||T===6)||T>=0&&T<=6&&(S===0||S===6)||S>=2&&S<=4&&T>=2&&T<=4?N.set(y+S,w+T,!0,!0):N.set(y+S,w+T,!1,!0))}}function O(N){const I=N.size;for(let d=8;d<I-8;d++){const h=d%2===0;N.set(d,6,h,!0),N.set(6,d,h,!0)}}function b(N,I){const d=i.getPositions(I);for(let h=0;h<d.length;h++){const f=d[h][0],y=d[h][1];for(let w=-2;w<=2;w++)for(let S=-2;S<=2;S++)w===-2||w===2||S===-2||S===2||w===0&&S===0?N.set(f+w,y+S,!0,!0):N.set(f+w,y+S,!1,!0)}}function v(N,I){const d=N.size,h=l.getEncodedBits(I);let f,y,w;for(let S=0;S<18;S++)f=Math.floor(S/3),y=S%3+d-8-3,w=(h>>S&1)===1,N.set(f,y,w,!0),N.set(y,f,w,!0)}function A(N,I,d){const h=N.size,f=g.getEncodedBits(I,d);let y,w;for(y=0;y<15;y++)w=(f>>y&1)===1,y<6?N.set(y,8,w,!0):y<8?N.set(y+1,8,w,!0):N.set(h-15+y,8,w,!0),y<8?N.set(8,h-y-1,w,!0):y<9?N.set(8,15-y-1+1,w,!0):N.set(8,15-y-1,w,!0);N.set(h-8,8,1,!0)}function P(N,I){const d=N.size;let h=-1,f=d-1,y=7,w=0;for(let S=d-1;S>0;S-=2)for(S===6&&S--;;){for(let T=0;T<2;T++)if(!N.isReserved(f,S-T)){let V=!1;w<I.length&&(V=(I[w]>>>y&1)===1),N.set(f,S-T,V),y--,y===-1&&(w++,y=7)}if(f+=h,f<0||d<=f){f-=h,h=-h;break}}}function _(N,I,d){const h=new r;d.forEach(function(T){h.put(T.mode.bit,4),h.put(T.getLength(),m.getCharCountIndicator(T.mode,N)),T.write(h)});const f=e.getSymbolTotalCodewords(N),y=a.getTotalCodewordsCount(N,I),w=(f-y)*8;for(h.getLengthInBits()+4<=w&&h.put(0,4);h.getLengthInBits()%8!==0;)h.putBit(0);const S=(w-h.getLengthInBits())/8;for(let T=0;T<S;T++)h.put(T%2?17:236,8);return L(h,N,I)}function L(N,I,d){const h=e.getSymbolTotalCodewords(I),f=a.getTotalCodewordsCount(I,d),y=h-f,w=a.getBlocksCount(I,d),S=h%w,T=w-S,V=Math.floor(h/w),C=Math.floor(y/w),D=C+1,M=V-C,R=new c(M);let U=0;const x=new Array(w),H=new Array(w);let q=0;const z=new Uint8Array(N.buffer);for(let j=0;j<w;j++){const fe=j<T?C:D;x[j]=z.slice(U,U+fe),H[j]=R.encode(x[j]),U+=fe,q=Math.max(q,fe)}const G=new Uint8Array(h);let ee=0,Z,J;for(Z=0;Z<q;Z++)for(J=0;J<w;J++)Z<x[J].length&&(G[ee++]=x[J][Z]);for(Z=0;Z<M;Z++)for(J=0;J<w;J++)G[ee++]=H[J][Z];return G}function F(N,I,d,h){let f;if(Array.isArray(N))f=u.fromArray(N);else if(typeof N=="string"){let V=I;if(!V){const C=u.rawSplit(N);V=l.getBestVersionForData(C,d)}f=u.fromString(N,V||40)}else throw new Error("Invalid data");const y=l.getBestVersionForData(f,d);if(!y)throw new Error("The amount of data is too big to be stored in a QR Code");if(!I)I=y;else if(I<y)throw new Error(`
|
|
9
9
|
The chosen QR Code version cannot contain this amount of data.
|
|
10
10
|
Minimum version required to store current data is: `+y+`.
|
|
11
|
-
`);const w=_(I,d,f),S=e.getSymbolSize(I),T=new n(S);return p(T,I),O(T),b(T,I),A(T,d,0),I>=7&&v(T,I),P(T,w),isNaN(h)&&(h=s.getBestMask(T,A.bind(null,T,d))),s.applyMask(h,T),A(T,d,h),{modules:T,version:I,errorCorrectionLevel:d,maskPattern:h,segments:f}}return
|
|
12
|
-
`;return typeof a=="function"&&a(null,v),v},
|
|
11
|
+
`);const w=_(I,d,f),S=e.getSymbolSize(I),T=new n(S);return p(T,I),O(T),b(T,I),A(T,d,0),I>=7&&v(T,I),P(T,w),isNaN(h)&&(h=s.getBestMask(T,A.bind(null,T,d))),s.applyMask(h,T),A(T,d,h),{modules:T,version:I,errorCorrectionLevel:d,maskPattern:h,segments:f}}return di.create=function(I,d){if(typeof I>"u"||I==="")throw new Error("No input text");let h=t.M,f,y;return typeof d<"u"&&(h=t.from(d.errorCorrectionLevel,t.M),f=l.from(d.version),y=s.from(d.maskPattern),d.toSJISFunc&&e.setToSJISFunction(d.toSJISFunc)),F(I,f,h,y)},di}var Di={},Ni={},Aa;function ud(){return Aa||(Aa=1,(function(e){function t(r){if(typeof r=="number"&&(r=r.toString()),typeof r!="string")throw new Error("Color should be defined as hex string");let n=r.slice().replace("#","").split("");if(n.length<3||n.length===5||n.length>8)throw new Error("Invalid hex color: "+r);(n.length===3||n.length===4)&&(n=Array.prototype.concat.apply([],n.map(function(o){return[o,o]}))),n.length===6&&n.push("F","F");const i=parseInt(n.join(""),16);return{r:i>>24&255,g:i>>16&255,b:i>>8&255,a:i&255,hex:"#"+n.slice(0,6).join("")}}e.getOptions=function(n){n||(n={}),n.color||(n.color={});const i=typeof n.margin>"u"||n.margin===null||n.margin<0?4:n.margin,o=n.width&&n.width>=21?n.width:void 0,s=n.scale||4;return{width:o,scale:o?4:s,margin:i,color:{dark:t(n.color.dark||"#000000ff"),light:t(n.color.light||"#ffffffff")},type:n.type,rendererOpts:n.rendererOpts||{}}},e.getScale=function(n,i){return i.width&&i.width>=n+i.margin*2?i.width/(n+i.margin*2):i.scale},e.getImageWidth=function(n,i){const o=e.getScale(n,i);return Math.floor((n+i.margin*2)*o)},e.qrToImageData=function(n,i,o){const s=i.modules.size,a=i.modules.data,c=e.getScale(s,o),l=Math.floor((s+o.margin*2)*c),g=o.margin*c,m=[o.color.light,o.color.dark];for(let u=0;u<l;u++)for(let p=0;p<l;p++){let O=(u*l+p)*4,b=o.color.light;if(u>=g&&p>=g&&u<l-g&&p<l-g){const v=Math.floor((u-g)/c),A=Math.floor((p-g)/c);b=m[a[v*s+A]?1:0]}n[O++]=b.r,n[O++]=b.g,n[O++]=b.b,n[O]=b.a}}})(Ni)),Ni}var Ia;function Ry(){return Ia||(Ia=1,(function(e){const t=ud();function r(i,o,s){i.clearRect(0,0,o.width,o.height),o.style||(o.style={}),o.height=s,o.width=s,o.style.height=s+"px",o.style.width=s+"px"}function n(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(o,s,a){let c=a,l=s;typeof c>"u"&&(!s||!s.getContext)&&(c=s,s=void 0),s||(l=n()),c=t.getOptions(c);const g=t.getImageWidth(o.modules.size,c),m=l.getContext("2d"),u=m.createImageData(g,g);return t.qrToImageData(u.data,o,c),r(m,l,g),m.putImageData(u,0,0),l},e.renderToDataURL=function(o,s,a){let c=a;typeof c>"u"&&(!s||!s.getContext)&&(c=s,s=void 0),c||(c={});const l=e.render(o,s,c),g=c.type||"image/png",m=c.rendererOpts||{};return l.toDataURL(g,m.quality)}})(Di)),Di}var Pi={},_a;function Oy(){if(_a)return Pi;_a=1;const e=ud();function t(i,o){const s=i.a/255,a=o+'="'+i.hex+'"';return s<1?a+" "+o+'-opacity="'+s.toFixed(2).slice(1)+'"':a}function r(i,o,s){let a=i+o;return typeof s<"u"&&(a+=" "+s),a}function n(i,o,s){let a="",c=0,l=!1,g=0;for(let m=0;m<i.length;m++){const u=Math.floor(m%o),p=Math.floor(m/o);!u&&!l&&(l=!0),i[m]?(g++,m>0&&u>0&&i[m-1]||(a+=l?r("M",u+s,.5+p+s):r("m",c,0),c=0,l=!1),u+1<o&&i[m+1]||(a+=r("h",g),g=0)):c++}return a}return Pi.render=function(o,s,a){const c=e.getOptions(s),l=o.modules.size,g=o.modules.data,m=l+c.margin*2,u=c.color.light.a?"<path "+t(c.color.light,"fill")+' d="M0 0h'+m+"v"+m+'H0z"/>':"",p="<path "+t(c.color.dark,"stroke")+' d="'+n(g,l,c.margin)+'"/>',O='viewBox="0 0 '+m+" "+m+'"',v='<svg xmlns="http://www.w3.org/2000/svg" '+(c.width?'width="'+c.width+'" height="'+c.width+'" ':"")+O+' shape-rendering="crispEdges">'+u+p+`</svg>
|
|
12
|
+
`;return typeof a=="function"&&a(null,v),v},Pi}var Sa;function Dy(){if(Sa)return yt;Sa=1;const e=cy(),t=vy(),r=Ry(),n=Oy();function i(o,s,a,c,l){const g=[].slice.call(arguments,1),m=g.length,u=typeof g[m-1]=="function";if(!u&&!e())throw new Error("Callback required as last argument");if(u){if(m<2)throw new Error("Too few arguments provided");m===2?(l=a,a=s,s=c=void 0):m===3&&(s.getContext&&typeof l>"u"?(l=c,c=void 0):(l=c,c=a,a=s,s=void 0))}else{if(m<1)throw new Error("Too few arguments provided");return m===1?(a=s,s=c=void 0):m===2&&!s.getContext&&(c=a,a=s,s=void 0),new Promise(function(p,O){try{const b=t.create(a,c);p(o(b,s,c))}catch(b){O(b)}})}try{const p=t.create(a,c);l(null,o(p,s,c))}catch(p){l(p)}}return yt.create=t.create,yt.toCanvas=i.bind(null,r.render),yt.toDataURL=i.bind(null,r.renderToDataURL),yt.toString=i.bind(null,function(o,s,a){return n.render(o,a)}),yt}var Ny=Dy();const Py="/__hb_sdk__/dev-context";function An(e,t=Date.now()){if(e.localDevGrant===void 0)return e;const r=Wa(e.localDevGrant);return!r.valid||!e.devSessionId?.trim()||!Number.isSafeInteger(e.contextRevision)||e.contextRevision!==r.grant.revision||!e.expiresAt||!Number.isFinite(e.expiresAt)||e.source!=="remote"&&e.expiresAt<=t?{...e,localDevGrant:void 0,warning:"本地临时授权无效或已过期,已降权"}:{...e,...e.expiresAt<=t?{source:"anonymous",localDevLaunchToken:void 0,expiresAt:t+3e4}:{},localDevGrant:fl({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,revision:r.grant.revision,eligiblePermissionKeys:e.platforms?.some(n=>["windows","macos","linux"].includes(n))?["network","companion"]:["network"]})}}function Ty(e){if(!ji(e)||!va(e,["networkRequest"]))return;const t=e.networkRequest;if(!(!ji(t)||!va(t,["status","useOfficialDomain"]))&&!(t.status!=="enabled"&&t.status!=="disabled")&&typeof t.useOfficialDomain=="boolean")return{networkRequest:{status:t.status,useOfficialDomain:t.useOfficialDomain}}}const Cy={networkRequest:{status:"disabled",useOfficialDomain:!1}};function Bn(e){const t=Ue(e.localDevGrant?lo({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant}).runtimePermissions:e.runtimePermissions),r=t.permissions.network;return t.valid&&r?{networkRequest:{status:r.status,useOfficialDomain:r.config.useOfficialDomain===!0}}:ky()}function Ly(e,t,r){return r?.localDevGrant?lo({declaredPermissions:r.declaredPermissions??{},runtimePermissions:e,localDevGrant:r.localDevGrant}).runtimePermissions:fd(e,t,t.networkRequest.useOfficialDomain)}function My(e){if(e.source!=="remote")return{schema_version:1,entries:[]};const t=Bn({...e,localDevGrant:void 0});return fd(e.runtimePermissions,t,!1)}function ky(){return{networkRequest:{...Cy.networkRequest}}}function fd(e,t,r){const n=Ue(e);if(!n.valid)return{schema_version:1,entries:[]};const i=[];for(const s of rr){const a=n.permissions[s];a&&i.push(s==="network"?{key:s,status:t.networkRequest.status,config:{useOfficialDomain:r}}:{key:s,status:a.status,config:{}})}const o=ji(e)&&typeof e.revision=="number"&&Number.isInteger(e.revision)&&e.revision>=0?e.revision:void 0;return{schema_version:1,...o===void 0?{}:{revision:o},entries:i}}function ji(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function va(e,t){return Object.keys(e).length===t.length&&t.every(n=>Object.hasOwn(e,n))}function Uy(e){let t,r=!1,n=!1,i;return{invalidate(a){return n?Promise.resolve({ok:!1}):e.shouldSkip?.(a,{draining:i!==void 0})?i??Promise.resolve({ok:!0}):(r=!0,i??=o().finally(()=>{i=void 0}),i)},dispose(){n||(n=!0,r=!1,t?.abort(),t=void 0)}};async function o(){let a={ok:!0};for(;r&&!n;){r=!1;const c=new AbortController;t=c;let l;try{l=await e.fetch(c.signal)}catch(m){a={ok:!1},!n&&!c.signal.aborted&&s(m);continue}finally{t===c&&(t=void 0)}if(n)return{ok:!1};let g;try{g=e.apply(l)}catch(m){a={ok:!1},n||s(m);continue}if(n)return{ok:!1};if(a={ok:!0},!!e.hasChanged(g))try{await e.onChanged(g)}catch(m){a={ok:!1},n||s(m)}}return n?{ok:!1}:a}function s(a){try{e.onError(a)}catch{}}}function xy(e){return Uy({apply:e.applyStatus,fetch:e.fetchStatus,hasChanged:t=>t.changed,onChanged:t=>e.reconcile(t.status),onError:e.onError,shouldSkip:t=>t!==void 0&&t<=e.getCanonicalRevision()})}function Hy(e){const t=e.minDelayMs??1e3,r=e.maxDelayMs??15e3;let n=t,i=!1,o;return{schedule:s,reset(){n=t,a()},dispose(){i||(i=!0,a())}};function s(){i||e.isDisposed()||(a(),o=e.timers.setTimeout(async()=>{o=void 0;let c;try{c=await e.invalidate()}catch{c={ok:!1}}if(!(i||e.isDisposed())){if(c.ok){n=t,e.connectEvents();return}n=Math.min(n*2,r),s()}},n))}function a(){o!==void 0&&e.timers.clearTimeout(o),o=void 0}}const Fy={identity:"小程序身份",profile:"昵称和头像",steam_account:"Steam 账号"};function By(e){return new Promise((t,r)=>{if(e.signal.aborted){r(e.signal.reason);return}const n=document.createElement("div");n.className="hb-sdk-auth-dialog",n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=`
|
|
13
13
|
<div class="hb-sdk-auth-dialog__panel">
|
|
14
14
|
<h2>授权请求</h2>
|
|
15
|
-
<p class="hb-sdk-auth-dialog__app">${
|
|
16
|
-
<ul class="hb-sdk-auth-dialog__scopes">${e.scopes.map(a=>`<li>${
|
|
17
|
-
${e.userProfile?.nickname?`<p class="hb-sdk-auth-dialog__profile">当前账号:${
|
|
15
|
+
<p class="hb-sdk-auth-dialog__app">${Ti(e.miniProgram?.name||"当前小程序")} 申请访问:</p>
|
|
16
|
+
<ul class="hb-sdk-auth-dialog__scopes">${e.scopes.map(a=>`<li>${Ti(Fy[a]||a)}</li>`).join("")}</ul>
|
|
17
|
+
${e.userProfile?.nickname?`<p class="hb-sdk-auth-dialog__profile">当前账号:${Ti(e.userProfile.nickname)}</p>`:""}
|
|
18
18
|
<div class="hb-sdk-auth-dialog__actions">
|
|
19
19
|
<button type="button" data-action="deny">拒绝</button>
|
|
20
20
|
<button type="button" class="primary" data-action="allow">允许</button>
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
|
-
`;const i=a=>{s(),t(a)},o=()=>{s(),r(e.signal.reason)},s=()=>{e.signal.removeEventListener("abort",o),n.remove()};n.querySelector('[data-action="allow"]')?.addEventListener("click",()=>{i({status:"granted",grantedScopes:[...e.scopes]})}),n.querySelector('[data-action="deny"]')?.addEventListener("click",()=>{i({status:"cancelled"})}),e.signal.addEventListener("abort",o,{once:!0}),(document.querySelector("#host-overlay-layer")??document.body).appendChild(n)})}function
|
|
23
|
+
`;const i=a=>{s(),t(a)},o=()=>{s(),r(e.signal.reason)},s=()=>{e.signal.removeEventListener("abort",o),n.remove()};n.querySelector('[data-action="allow"]')?.addEventListener("click",()=>{i({status:"granted",grantedScopes:[...e.scopes]})}),n.querySelector('[data-action="deny"]')?.addEventListener("click",()=>{i({status:"cancelled"})}),e.signal.addEventListener("abort",o,{once:!0}),(document.querySelector("#host-overlay-layer")??document.body).appendChild(n)})}function Ti(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Vy(e){return{launchUrl:e.launchUrl,sdkVersionPolicy:{minimumSdkVersion:"0.5.0",sdkVersion:Mo,releaseChannel:"development"},runtimePermissions:e.runtimePermissions,platformAccess:{source:"manifest",manifest:{platforms:Fn},sdkVersion:Mo},environmentInfo:{appVersion:null,operatingSystem:{name:e.operatingSystem??"unknown",version:null}},...e.miniProgramId?{canonicalIdentity:{miniProgramId:e.miniProgramId}}:{}}}const Ra="hb-sdk-action-dialog-style";function Vn(e){return new Promise((t,r)=>{if(e.signal?.aborted){r(e.signal.reason);return}$y();const n=document.createElement("div");n.className="hb-sdk-action-dialog",n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=`
|
|
24
24
|
<div class="hb-sdk-action-dialog__panel">
|
|
25
25
|
<h2>${Oa(e.title)}</h2>
|
|
26
26
|
<pre class="hb-sdk-action-dialog__detail">${Oa(e.detail)}</pre>
|
|
@@ -28,10 +28,10 @@ Minimum version required to store current data is: `+y+`.
|
|
|
28
28
|
<button type="button" class="primary" data-action="confirm">确定</button>
|
|
29
29
|
</div>
|
|
30
30
|
</div>
|
|
31
|
-
`;const i=()=>{s(),t()},o=()=>{s(),r(e.signal?.reason)},s=()=>{e.signal?.removeEventListener("abort",o),n.remove()};n.querySelector('[data-action="confirm"]')?.addEventListener("click",i),e.signal?.addEventListener("abort",o,{once:!0}),(document.querySelector("#host-overlay-layer")??document.body).appendChild(n)})}async function qy(e,t){await
|
|
32
|
-
`),signal:t.signal})}async function zy(e,t){await
|
|
33
|
-
`),signal:t.signal})}async function Gy(e,t){await
|
|
34
|
-
`),signal:t.signal})}async function jy(e,t){await
|
|
31
|
+
`;const i=()=>{s(),t()},o=()=>{s(),r(e.signal?.reason)},s=()=>{e.signal?.removeEventListener("abort",o),n.remove()};n.querySelector('[data-action="confirm"]')?.addEventListener("click",i),e.signal?.addEventListener("abort",o,{once:!0}),(document.querySelector("#host-overlay-layer")??document.body).appendChild(n)})}async function qy(e,t){await Vn({title:"打开页面",detail:["protocolType: "+e.protocolType,"path: "+e.path,"params: "+Rt(e.params)].join(`
|
|
32
|
+
`),signal:t.signal})}async function zy(e,t){await Vn({title:"打开小程序",detail:["miniProgramId: "+e.miniProgramId,"extra: "+Rt(e.extra)].join(`
|
|
33
|
+
`),signal:t.signal})}async function Gy(e,t){await Vn({title:"分享",detail:["title: "+e.title,"description: "+e.description,"url: "+e.url,"channel: "+Rt(e.channel),"post: "+Rt(e.post)].join(`
|
|
34
|
+
`),signal:t.signal})}async function jy(e,t){await Vn({title:"截图分享",detail:["rect: "+Rt(e.rect),"post: "+Rt(e.post)].join(`
|
|
35
35
|
`),signal:t.signal})}function Rt(e){return JSON.stringify(e,null,2)}function Oa(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function $y(){if(document.getElementById(Ra))return;const e=document.createElement("style");e.id=Ra,e.textContent=`
|
|
36
36
|
.hb-sdk-action-dialog {
|
|
37
37
|
position: absolute;
|
|
@@ -89,14 +89,14 @@ Minimum version required to store current data is: `+y+`.
|
|
|
89
89
|
color: #fff;
|
|
90
90
|
background: #2563eb;
|
|
91
91
|
}
|
|
92
|
-
`,document.head.appendChild(e)}const Wy=44;function Ky(e){const t=()=>e.isCapsuleHidden?.()?0:Wy;return{...e.applyDisplay?{applyOrientation:async(r,n)=>(await e.applyDisplay(r,n.signal),{supported:!0})}:{},...e.onViewportChange?{onViewportChange:e.onViewportChange}:{},close:async()=>{await e.close()},reload:async()=>{await e.reload()},getViewportMetrics:()=>{const r=e.getDeviceMetrics?.();return r?{windowWidth:r.screenWidth,windowHeight:r.screenHeight,screenWidth:r.screenWidth,screenHeight:r.screenHeight,pixelRatio:r.pixelRatio,safeArea:{top:r.safeAreaInsets.top+t(),right:r.screenWidth-r.safeAreaInsets.right,bottom:r.screenHeight-r.safeAreaInsets.bottom,left:r.safeAreaInsets.left}}:{windowWidth:window.innerWidth,windowHeight:window.innerHeight,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}},getNavigationBarHeight:()=>{const r=e.getDeviceMetrics?.().statusBarHeight;return r===void 0?0:r+t()},setNavigationBarStyle:r=>{document.documentElement.dataset.navigationBarStyle=r,e.onNavigationBarStyleChange?.(r)},setClipboard:async({text:r})=>{await navigator.clipboard.writeText(r)},showToast:async({message:r,status:n})=>{e.pushLog("host.message",{message:r,status:n}),await
|
|
92
|
+
`,document.head.appendChild(e)}const Wy=44;function Ky(e){const t=()=>e.isCapsuleHidden?.()?0:Wy;return{...e.applyDisplay?{applyOrientation:async(r,n)=>(await e.applyDisplay(r,n.signal),{supported:!0})}:{},...e.onViewportChange?{onViewportChange:e.onViewportChange}:{},close:async()=>{await e.close()},reload:async()=>{await e.reload()},getViewportMetrics:()=>{const r=e.getDeviceMetrics?.();return r?{windowWidth:r.screenWidth,windowHeight:r.screenHeight,screenWidth:r.screenWidth,screenHeight:r.screenHeight,pixelRatio:r.pixelRatio,safeArea:{top:r.safeAreaInsets.top+t(),right:r.screenWidth-r.safeAreaInsets.right,bottom:r.screenHeight-r.safeAreaInsets.bottom,left:r.safeAreaInsets.left}}:{windowWidth:window.innerWidth,windowHeight:window.innerHeight,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}},getNavigationBarHeight:()=>{const r=e.getDeviceMetrics?.().statusBarHeight;return r===void 0?0:r+t()},setNavigationBarStyle:r=>{document.documentElement.dataset.navigationBarStyle=r,e.onNavigationBarStyleChange?.(r)},setClipboard:async({text:r})=>{await navigator.clipboard.writeText(r)},showToast:async({message:r,status:n})=>{e.pushLog("host.message",{message:r,status:n}),await Hd({message:r,status:n})},showLoading:xd,hideLoading:Ud,vibrate:kd,openAppPage:qy,openWindow:zy,showShareMenu:Gy,captureAndShare:jy,setScreenshotChromeHidden:Md}}const Da=["launch-only","stdio","full","prepare-fail","prepare-cancel","launch-cancel","os-blocked","normal-exit","crash","output-limit"],Dr=[{phase:"downloading",loaded:4,total:12},{phase:"verifying",processed:8,total:12},{phase:"extracting",processed:12,total:12}],Na={"launch-only":[],stdio:["stdio"],full:["stdio","attachments","notifications"],"prepare-fail":[],"prepare-cancel":[],"launch-cancel":[],"os-blocked":[],"normal-exit":["stdio"],crash:["stdio"],"output-limit":["stdio"]};class Yy{port;presentation;now;schedule;clearSchedule;onDiagnostic;preparations=new Map;sessions=new Map;eventSink;sessionEventListeners=new Set;nextSessionId=0;constructor(t={}){this.now=t.now??Date.now,this.schedule=t.schedule??((r,n)=>setTimeout(r,n)),this.clearSchedule=t.clearSchedule??(r=>clearTimeout(r)),this.onDiagnostic=t.onDiagnostic??(()=>{}),this.port={getInfo:async r=>this.getInfo(r),getPreparationStatus:async r=>this.getPreparationStatus(r),prepare:(r,n)=>this.prepare(r,n),cancelPreparation:async r=>this.cancelPreparation(r),getActiveSession:async r=>this.getActiveSession(r),launch:async r=>this.launch(r),write:async r=>this.write(r),closeStdin:async r=>this.closeStdin(r),terminate:async r=>this.terminate(r),ackOutput:async r=>this.ackOutput(r),openAttachment:async r=>this.openAttachment(r),showNotification:async r=>this.showNotification(r),onSessionEvent:r=>(this.sessionEventListeners.add(r),()=>this.sessionEventListeners.delete(r))},this.presentation={confirmCompanionOperation:async({action:r,companion:n})=>{const i=n.alias===`${r}-cancel`;return this.diagnostic(`authorization.${i?"cancelled":"granted"}`,n.alias,{action:r}),i?{status:"cancelled"}:{status:"granted"}}}}bindEventSink(t){this.eventSink=t,this.diagnostic(t?"runtime.connected":"runtime.disconnected")}reset(t){const r=t?[t]:[...Da];for(const n of r){const i=this.preparations.get(n);for(const o of i?.operation?.timers??[])this.clearSchedule(o);i?.operation?.reject(se("COMPANION_PREPARATION_CANCELLED","固定 Fake 已重置")),this.preparations.delete(n),this.sessions.delete(n)}this.diagnostic("reset",t)}getInfo(t){const r=this.readAlias(t);return{alias:r,displayName:`Browser Fake: ${r}`,target:r==="os-blocked"?"macos-arm64":"windows-x64",capabilities:Na[r],archiveBytes:12,signatureStatus:"unsigned"}}getPreparationStatus(t){const r=this.readAlias(t);return this.preparations.get(r)?.status??{state:"not-prepared"}}prepare(t,r){const n=this.readAlias(t),i=this.preparations.get(n);if(i?.status.state==="ready")return Promise.resolve(this.getInfo(n));if(i?.operation)return i.operation.listeners.add(r.onProgress),this.diagnostic("prepare.joined",n),r.onProgress(i.status.state==="preparing"?i.status.progress:Dr[0]),i.operation.promise;let o,s;const a=new Promise((l,g)=>{o=l,s=g}),c={cancelled:!1,listeners:new Set([r.onProgress]),promise:a,reject:s,resolve:o,timers:new Set};{const l={status:{state:"preparing",progress:Dr[0]},operation:c};this.preparations.set(n,l),this.diagnostic("prepare.started",n),Dr.forEach((g,m)=>{const u=this.schedule(()=>{if(c.timers.delete(u),!c.cancelled){l.status={state:"preparing",progress:g};try{c.listeners.forEach(p=>p(g))}catch(p){c.cancelled=!0;for(const O of c.timers)this.clearSchedule(O);l.operation=void 0,l.status={state:"failed",error:{code:"COMPANION_PREPARATION_CANCELLED",message:"Fake progress sink failed",retryable:!0}},this.diagnostic("prepare.progress-handler-failed",n,{message:p instanceof Error?p.message:String(p)}),c.reject(p);return}if(this.diagnostic("prepare.progress",n,{phase:g.phase}),m===Dr.length-1){if(l.operation=void 0,n==="prepare-fail"){l.status={state:"failed",error:{code:"COMPANION_INTEGRITY_FAILED",message:"固定 Fake 完整性校验失败",retryable:!0}},c.reject(se("COMPANION_INTEGRITY_FAILED","固定 Fake 完整性校验失败")),this.diagnostic("prepare.failed",n,{code:"COMPANION_INTEGRITY_FAILED"});return}l.status={state:"ready",preparedAt:this.now()},c.resolve(this.getInfo(n)),this.diagnostic("prepare.ready",n)}}},m+1);c.timers.add(u)})}return a}cancelPreparation(t){const r=this.readAlias(t),n=this.preparations.get(r);if(n?.operation){n.operation.cancelled=!0;for(const i of n.operation.timers)this.clearSchedule(i);n.operation.reject(se("COMPANION_PREPARATION_CANCELLED","准备已取消")),n.operation=void 0,n.status={state:"not-prepared"},this.diagnostic("prepare.cancelled",r)}}getActiveSession(t){const r=this.readAlias(t),n=this.sessions.get(r);if(!n||n.exited)return;const i=n.snapshot.controllerGeneration;return n.snapshot={...n.snapshot,controllerGeneration:i+1},this.emit(nl,{sessionId:n.snapshot.id,controllerGeneration:i}),n.waitingOutput&&(n.queuedOutput.unshift(n.waitingOutput),n.waitingOutput=void 0,this.flushOutput(n)),this.diagnostic("session.controller-transferred",r,{controllerGeneration:n.snapshot.controllerGeneration}),{...n.snapshot,capabilities:[...n.snapshot.capabilities]}}launch(t){const r=this.readAlias(t);if(this.getPreparationStatus(r).state!=="ready")throw se("COMPANION_NOT_PREPARED","固定 Fake 尚未准备完成");if(r==="os-blocked")throw se("COMPANION_OS_BLOCKED","操作系统安全策略已阻止启动");const n=this.sessions.get(r);if(n&&!n.exited)throw se("COMPANION_LAUNCH_FAILED","固定 Fake Session 已在运行");const i={id:`browser-fake-${++this.nextSessionId}`,alias:r,target:this.getInfo(r).target,capabilities:Na[r],state:"running",controllerGeneration:1},o={snapshot:i,stdinClosed:!1,exited:!1,queuedOutput:[]};return this.sessions.set(r,o),this.diagnostic("session.launched",r,{capabilities:[...i.capabilities],sessionId:i.id}),i.capabilities.includes("stdio")&&this.schedule(()=>{this.queueOutput(o,"stdout",1,`fake:ready
|
|
93
93
|
`),this.queueOutput(o,"stderr",1,`fake:diagnostic
|
|
94
94
|
`)},20),r==="normal-exit"&&this.schedule(()=>this.requestExit(o,{reason:"exited",exitCode:0}),40),r==="crash"&&this.schedule(()=>this.requestExit(o,{reason:"crashed",exitCode:1}),40),r==="output-limit"&&this.schedule(()=>this.requestExit(o,{reason:"output-limit"}),40),{...i,capabilities:[...i.capabilities]}}write(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("stdio"))throw se("COMPANION_PIPE_CLOSED","stdio 未启用");if(r.stdinClosed)throw se("COMPANION_PIPE_CLOSED","stdin 已关闭");const n=Math.max(1,...r.queuedOutput.map(i=>i.sequence),r.waitingOutput?.sequence??0)+1;this.queueOutput(r,"stdout",n,new Uint8Array(t.data)),this.diagnostic("stdio.write",r.snapshot.alias,{bytes:t.data.byteLength})}closeStdin(t){const r=this.readController(t);r.stdinClosed=!0,this.diagnostic("stdio.closed",r.snapshot.alias)}terminate(t){const r=this.readController(t);this.exit(r,{reason:"terminated"})}ackOutput(t){const r=this.readController(t),n=r.waitingOutput;!n||n.stream!==t.stream||n.sequence!==t.sequence||(r.waitingOutput=void 0,this.diagnostic("stdio.ack",r.snapshot.alias,{sequence:t.sequence,stream:t.stream}),this.flushOutput(r))}openAttachment(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("attachments"))throw se("COMPANION_ATTACHMENT_NOT_FOUND","attachments 未启用");if(t.id!=="report")throw se("COMPANION_ATTACHMENT_NOT_FOUND","固定 Fake Attachment 不存在");this.diagnostic("attachment.opened",r.snapshot.alias,{id:t.id});const n=new TextEncoder().encode(`Browser Fake Companion report
|
|
95
|
-
`);return{kind:"file",name:"browser-fake-report.txt",mode:"read",create:async()=>{throw se("FILE_ACCESS_DENIED","Attachment 只读")},read:async()=>new Uint8Array(n),write:async()=>{throw se("FILE_ACCESS_DENIED","Attachment 只读")},stat:async()=>({kind:"file",size:n.byteLength})}}showNotification(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("notifications"))throw se("COMPANION_NOTIFICATION_UNAVAILABLE","notifications 未启用");this.diagnostic("notification.shown",r.snapshot.alias,{category:t.category})}queueOutput(t,r,n,i){t.queuedOutput.push({stream:r,sequence:n,data:typeof i=="string"?new TextEncoder().encode(i):i}),this.flushOutput(t)}flushOutput(t){if(t.exited||t.waitingOutput||!this.eventSink&&this.sessionEventListeners.size===0)return;const r=t.queuedOutput.shift();if(!r){t.pendingExit&&this.exit(t,t.pendingExit);return}t.waitingOutput=r,this.emit(eu,{sessionId:t.snapshot.id,controllerGeneration:t.snapshot.controllerGeneration,...r}),this.diagnostic("stdio.chunk",t.snapshot.alias,{bytes:r.data.byteLength,sequence:r.sequence,stream:r.stream})}requestExit(t,r){t.pendingExit=r,!t.waitingOutput&&t.queuedOutput.length===0&&this.exit(t,r)}exit(t,r){t.exited||(t.exited=!0,t.pendingExit=void 0,t.waitingOutput=void 0,t.queuedOutput.length=0,this.emit(tu,{sessionId:t.snapshot.id,exit:r}),this.diagnostic("session.exit",t.snapshot.alias,{...r}))}readController(t){const r=[...this.sessions.values()].find(n=>n.snapshot.id===t.sessionId);if(!r||r.exited)throw se("COMPANION_SESSION_EXITED","固定 Fake Session 不存在");if(r.snapshot.controllerGeneration!==t.controllerGeneration)throw se("COMPANION_SESSION_OWNERSHIP_LOST","固定 Fake Session 控制权已转移");return r}readAlias(t){if(!Da.includes(t))throw se("COMPANION_NOT_DECLARED","未知固定 Companion Fake 场景");return t}emit(t,r){this.eventSink?.(t,r),this.sessionEventListeners.forEach(n=>n({type:t,payload:r}))}diagnostic(t,r,n){this.onDiagnostic({action:t,...r?{alias:r}:{},...n?{detail:n}:{}})}}const Qy=Object.freeze({[_n]:!0,[Sn]:!0,[vn]:!0,[Rn]:!0,[On]:!0,[Dn]:!0,[Nn]:!0,[Pn]:!0,[Tn]:!0,[Cn]:!0,[Ln]:!0,[Mn]:!0,[Zt]:!0,[Xt]:!0,[er]:!0});function Jy(e){return new Yy(e)}function se(e,t){return Object.assign(new Error(t),{code:e})}const Xy=/^[A-Za-z0-9_-]{22}$/,Zy="https://api.xiaoheihe.cn/open_inapp/";function eE(e){const t=typeof e.port=="number"?e.port:Number(e.port);if(!Number.isInteger(t)||t<=0||t>65535)throw new TypeError("Mobile launch redirect port is invalid");if(!Xy.test(e.token))throw new TypeError("Mobile launch redirect token is invalid");const r=new URL(`http://${e.host}:${t}/l/${e.token}`);if(r.protocol!=="http:"||r.hostname!==e.host||r.port!==String(t)||r.username||r.password||r.search||r.hash)throw new TypeError("Mobile launch redirect host is invalid");return r.href}function tE(e){const t=new URL(e);if(t.protocol!=="http:"||t.username||t.password)throw new TypeError("Mobile launch redirect URL must be an HTTP URL without credentials");const r=`heybox://${encodeURIComponent(JSON.stringify({protocol_type:"openWindow",full_screen:!0,navigation_bar:{title:""},webview:{url:t.href,pull:!1,refresh:!1}}))}`;return`${Zy}#${r}`}function rE(e){const t=Ue(e.runtimePermissions),r=co({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant}),n=[];for(const[i,o]of[["network","Network"],["companion","Companion"]]){if(!e.declaredPermissions?.[i]?.enabled)continue;const s=t.valid&&t.permissions[i]?.status==="enabled",a=r.temporaryPermissionKeys.includes(i);n.push({key:i,label:o,state:s?"approved":a?"temporary":"unavailable",...!s&&!a?{reason:"没有有效的本地临时授权,线上未批准"}:{}})}if(e.declaredPermissions?.network?.useOfficialDomain){const i=t.valid&&t.permissions.network?.status==="enabled"&&t.permissions.network.config.useOfficialDomain===!0;n.push({key:"network.useOfficialDomain",label:"官方域名",state:i?"approved":"unavailable",...i?{}:{reason:"不支持本地临时授权,获得线上批准后才能使用"}})}return n}function tt(e){return JSON.stringify({source:e.source,miniProgramId:e.miniProgramId,devSessionId:e.devSessionId,contextRevision:e.contextRevision,declaredPermissions:e.declaredPermissions,runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant,companionManifestSha256:e.companionManifestSha256})}const nE="__hb_sdk_mini_dev__",iE="hb-sdk:mini-dev-console",oE="__hb_sdk_mini_dev_console_installed__",Pa=oE;function sE(e,t=console){cE(t,e,t)}const aE=["log","debug","info","warn","error"];function cE(e,t,r){if(!r||r[Pa]===!0)return!1;let n=!1;for(const i of aE){const o=e[i];if(typeof o!="function")continue;const s=function(...a){try{t(i,a)}catch{}return o.apply(this,a)};try{e[i]=s,n=!0}catch{return n}}return n&&(r[Pa]=!0),n}const ji=1,Ta=64*1024,dE=64,uE=/^[A-Za-z0-9_-]{22}$/;class me extends TypeError{code;constructor(t,r){super(r),this.name="BrowserDevHostChannelError",this.code=t}}function lE(e,t=!1){const r=hE(e,t);switch($i(r,"Server message"),mE(r),r.type){case"grant":return Gt(r,["version","type","connectionEpoch","nextClientSequence","nextServerSequence","snapshot"],"grant"),jt(r.connectionEpoch,"connectionEpoch"),rt(r.nextClientSequence,"nextClientSequence"),rt(r.nextServerSequence,"nextServerSequence"),Ca(r.snapshot),r;case"event":return Gt(r,["version","type","connectionEpoch","sequence","event","snapshot"],"event"),jt(r.connectionEpoch,"connectionEpoch"),rt(r.sequence,"sequence"),r.event!=="account.changed"&&r.event!=="status.changed"&&Ye("event must be account.changed or status.changed"),Ca(r.snapshot),r;case"heartbeat":return Gt(r,["version","type","connectionEpoch","sequence"],"heartbeat"),jt(r.connectionEpoch,"connectionEpoch"),rt(r.sequence,"sequence"),r;default:return Ye("Unknown server message type")}}function fE(e){const t=e.connectionEpoch;jt(t,"connectionEpoch"),rt(e.nextSequence,"nextSequence");let r=e.nextSequence;return{get nextSequence(){return r},accept(n){if(jt(n.connectionEpoch,"connectionEpoch"),rt(n.sequence,"sequence"),n.connectionEpoch!==t)throw new me("INVALID_SEQUENCE","Connection epoch does not match");if(r===void 0)throw new me("INVALID_SEQUENCE","Sequence is exhausted");if(n.sequence!==r)throw new me("INVALID_SEQUENCE",`Expected sequence ${r}`);r=r===Number.MAX_SAFE_INTEGER?void 0:r+1}}}function hE(e,t){if(t)throw new me("BINARY_FRAME","Binary frames are not supported");if(typeof e!="string")throw new me("TEXT_FRAME_REQUIRED","Channel frame must be text");if(e.length>Ta)throw new me("TEXT_FRAME_TOO_LARGE","Channel text frame exceeds 64 KiB");if(new TextEncoder().encode(e).byteLength>Ta)throw new me("TEXT_FRAME_TOO_LARGE","Channel text frame exceeds 64 KiB");try{return pE(e),JSON.parse(e)}catch(r){throw r instanceof me?r:new me("INVALID_JSON","Channel frame must contain strict JSON")}}function Ca(e){$i(e,"snapshot"),Gt(e,["account","permissions"],"snapshot"),$i(e.account,"snapshot.account"),Gt(e.account,["revision"],"snapshot.account"),rt(e.account.revision,"snapshot.account.revision"),Ty(e.permissions)||Ye("snapshot.permissions is invalid")}function mE(e){e.version!==ji&&Ye("version must be 1")}function $i(e,t){(typeof e!="object"||e===null||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)&&Ye(`${t} must be a plain JSON object`)}function Gt(e,t,r,n=[]){const i=Object.keys(e);(t.some(o=>!Object.hasOwn(e,o))||i.some(o=>!t.includes(o)&&!n.includes(o)))&&Ye(`${r} fields are invalid`)}function rt(e,t){(typeof e!="number"||!Number.isSafeInteger(e)||e<0)&&Ye(`${t} must be a non-negative safe integer`)}function jt(e,t){(typeof e!="string"||!uE.test(e))&&Ye(`${t} must be a 22-character base64url value`)}function Ye(e){throw new me("INVALID_MESSAGE",e)}function pE(e){new gE(e).scan()}class gE{constructor(t){this.source=t}position=0;scan(){if(this.skipWhitespace(),this.scanValue(),this.skipWhitespace(),this.position!==this.source.length)throw new SyntaxError("Unexpected trailing JSON data")}scanValue(t=0){const r=this.source[this.position];if(r==="{"||r==="["){if(t>=dE)throw new me("INVALID_JSON","Channel JSON exceeds maximum nesting depth");return r==="{"?this.scanObject(t):this.scanArray(t)}if(r==='"'){this.scanString();return}this.scanPrimitive()}scanObject(t){this.position+=1,this.skipWhitespace();const r=new Set;if(!this.consume("}"))for(;;){if(this.source[this.position]!=='"')throw new SyntaxError("JSON object key must be a string");const n=this.scanString(),i=JSON.parse(n);if(typeof i!="string")throw new SyntaxError("JSON object key must be a string");if(r.has(i))throw new me("INVALID_JSON","Channel JSON contains a duplicate key");if(r.add(i),this.skipWhitespace(),!this.consume(":"))throw new SyntaxError("Missing JSON object colon");if(this.skipWhitespace(),this.scanValue(t+1),this.skipWhitespace(),this.consume("}"))return;if(!this.consume(","))throw new SyntaxError("Missing JSON object comma");this.skipWhitespace()}}scanArray(t){if(this.position+=1,this.skipWhitespace(),!this.consume("]"))for(;;){if(this.scanValue(t+1),this.skipWhitespace(),this.consume("]"))return;if(!this.consume(","))throw new SyntaxError("Missing JSON array comma");this.skipWhitespace()}}scanString(){const t=this.position;for(this.position+=1;this.position<this.source.length;){const r=this.source[this.position];if(r==='"')return this.position+=1,this.source.slice(t,this.position);r==="\\"?this.position+=2:this.position+=1}throw new SyntaxError("Unterminated JSON string")}scanPrimitive(){const t=this.position;for(;this.position<this.source.length&&!/[\s,\]}]/.test(this.source[this.position]??"");)this.position+=1;if(t===this.position)throw new SyntaxError("Missing JSON value")}skipWhitespace(){for(;/[\t\n\r ]/.test(this.source[this.position]??"");)this.position+=1}consume(t){return this.source[this.position]!==t?!1:(this.position+=1,!0)}}const La=[1e3,2e3,4e3,8e3,15e3];function yE(e){const t=new Set,r=e.webSocketFactory??(f=>new WebSocket(f)),n=e.randomValues??(f=>crypto.getRandomValues(f)),i=e.timers??{clearTimeout:f=>window.clearTimeout(f),setTimeout:(f,y)=>window.setTimeout(f,y)},o=e.onlineTarget??(typeof window>"u"?void 0:window),s=e.visibilityTarget??(typeof document>"u"?void 0:document),a=e.isOnline??(()=>typeof navigator>"u"||navigator.onLine!==!1);let c,u,g,m=!1,l=0,p,O=!1,b=!1;const v=new Set,A=(f,y)=>{if(!(!e.onDiagnostic||v.has(f))){v.add(f);try{e.onDiagnostic({phase:f,...y?{code:y}:{}})}catch{}}},P=(f,y,w=!1)=>{if(g&&f.account.revision<g.account.revision)return;const S=g&&JSON.stringify(f)===JSON.stringify(g);if(g=f,!(S&&!w))for(const T of t)T(f,y)},_=()=>{if(m||p!==void 0||c)return;const f=La[Math.min(l,La.length-1)];l+=1,p=i.setTimeout(()=>{p=void 0,h()},f)},L=()=>{m||!O||c||(p!==void 0&&(i.clearTimeout(p),p=void 0),h())},F=()=>{a()&&L()},N=()=>{s&&!s.hidden&&L()},I=()=>{b||(b=!0,o?.addEventListener("online",F),s?.addEventListener("visibilitychange",N))},d=()=>{b&&(b=!1,o?.removeEventListener("online",F),s?.removeEventListener("visibilitychange",N))},h=()=>{if(m||c)return;O=!0,I(),p!==void 0&&(i.clearTimeout(p),p=void 0);let f,y;try{f=r(e.url)}catch{A("constructor","WEBSOCKET_CONSTRUCTION_FAILED"),_();return}try{y=wE(n)}catch{A("entropy","NONCE_GENERATION_FAILED");try{f?.close(1011,"channel initialization failed")}catch{}_();return}c=f;let w,S,T;const V=()=>{f.removeEventListener("open",D),f.removeEventListener("message",M),f.removeEventListener("close",R),f.removeEventListener("error",U),u===V&&(u=void 0)},C=()=>{if(c===f){c=void 0,V();try{f.close(1008,"invalid channel state")}catch{}_()}},D=()=>{if(!(m||c!==f))try{f.send(JSON.stringify({version:ji,type:"hello",csrfToken:e.csrfToken,clientNonce:y}))}catch{A("send","HELLO_SEND_FAILED"),C()}},M=x=>{if(m||c!==f)return;if(typeof x.data!="string"){A("parse","TEXT_FRAME_REQUIRED"),C();return}let H;try{H=lE(x.data)}catch(q){A("parse",q instanceof me?q.code:"INVALID_MESSAGE"),C();return}if(H.type==="grant"){if(T){A("sequence","DUPLICATE_GRANT"),C();return}w=H.connectionEpoch,S=H.nextClientSequence,T=fE({connectionEpoch:w,nextSequence:H.nextServerSequence}),l=0,v.clear(),P(H.snapshot,{type:"grant"});return}if(!T||!w||S===void 0){A("sequence","MESSAGE_BEFORE_GRANT"),C();return}try{T.accept(H)}catch{A("sequence","INVALID_SEQUENCE"),C();return}if(H.type==="heartbeat"){try{f.send(JSON.stringify({version:ji,type:"heartbeat.ack",connectionEpoch:w,sequence:S}))}catch{A("send","HEARTBEAT_ACK_SEND_FAILED"),C()}S=S===Number.MAX_SAFE_INTEGER?void 0:S+1;return}P(H.snapshot,{type:"event",event:H.event},!0)},R=()=>{c===f&&(A("close","SOCKET_CLOSED"),c=void 0,V(),_())},U=()=>{A("open","SOCKET_ERROR"),C()};f.addEventListener("open",D),f.addEventListener("message",M),f.addEventListener("close",R),f.addEventListener("error",U),u=V};return{connect:h,subscribeUpdates(f){return t.add(f),()=>t.delete(f)},dispose(){if(m)return;m=!0,O=!1,d(),p!==void 0&&i.clearTimeout(p),p=void 0;const f=c;c=void 0,u?.(),f?.close(1e3,"client disposed"),t.clear()}}}function EE(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";let r="";for(let n=0;n<e.length;n+=3){const i=e[n]??0,o=e[n+1],s=e[n+2];r+=t[i>>2],r+=t[(i&3)<<4|(o??0)>>4],o!==void 0&&(r+=t[(o&15)<<2|(s??0)>>6]),s!==void 0&&(r+=t[s&63])}return r}function wE(e){const t=e(new Uint8Array(16));if(!(t instanceof Uint8Array)||t.byteLength!==16)throw new TypeError("Channel nonce source must fill 16 bytes");const r=EE(t);if(!/^[A-Za-z0-9_-]{22}$/.test(r))throw new TypeError("Channel nonce source returned invalid bytes");return r}try{sE((e,t)=>{cr(`console.${e}`,{source:"host",message:t.map(r=>yd(r)).join(" ")},Date.now(),e==="log"||e==="debug"?"log":e)})}catch{}const bE="/__hb_sdk_bootstrap__",AE="/__hb_sdk__/mobile-launch-redirect",IE="/__hb_sdk__/network",_E="/session/status",SE="/session/request",vE="/session/events",RE=320,OE=1e3,DE=1e3,NE=15e3,Ma="dark",fd=new URL(location.href).searchParams,hd=fd.get("mini_url"),dt=fd.get("ui_preview")==="1",Y={device:Ut("#device"),get mobileLanSelect(){return Ut("#mobile-lan-select")},get mobileQrImage(){return Ut("#mobile-qr-image")},get mobileQrStatus(){return Ut("#mobile-qr-status")},storageSnapshot:Ut("#storage-snapshot")};if(!hd&&!dt)throw Y.device.innerHTML='<div class="error">Missing mini_url query.</div>',new Error("Missing mini_url query.");const md=hd??"about:blank",de=await Oo();W.devReadiness=de.devReadiness;W.miniProgramSupportsDesktop=de.miniProgramSupportsDesktop;let Fe=de.lanAddresses,kr=de.defaultLanAddressId,wt=de.mobileLaunchRedirect,vo=de.nativeAppLaunchUnavailableReason,Wi=de.miniProgramManifestAccessToken,Ur=de,Ro=zn(de),ue=de.devContext,pe=An(ue);No();let Ot=Fn(pe),Q=!1,Vn=0;const qn=new AbortController;let Ce=0,It,ir,xr=0,We,Ki,Yi,Be=0,Ke=!1,Hr,Qi,Ti=!1;const $t=jd({apply:$d,waitForLayout:async e=>{await Wd(),await Kd(e),await Yd(e)}});let Ji,Xi,ka=Date.now(),Ft=!1,Ua=Promise.resolve(),Wt=-1,or=!1,it,Zi,eo,Fr,Ze;const In=new Set,to=Jy({onDiagnostic:({action:e,alias:t,detail:r})=>Ie(`companion.fake.${e}`,{...t?{alias:t}:{},...r})}),Dt=xy({applyStatus:e=>Id(e,!0),fetchStatus:e=>Ad(Nd(qn.signal,e)),getCanonicalRevision:()=>Wt,onError:ew,reconcile:()=>FE(Vn)}),ro=Hy({connectEvents:_d,invalidate:()=>Dt.invalidate(),isDisposed:()=>Q,maxDelayMs:NE,minDelayMs:DE,timers:{clearTimeout:e=>window.clearTimeout(e),setTimeout:(e,t)=>window.setTimeout(()=>{e()},t)}});let Ci=0,Bt="",Li=!1,no;await io(!1);Rd();Dd(Od(de));dt&&LE();Gn();dt||await gd();await hr("initial");dt||(_d(),xE());PE();zE();function pd(){!dt&&!Q&&(no=window.setTimeout(()=>{gd().finally(pd)},1e3))}pd();async function gd(){if(!(Li||Q)){Li=!0;try{const e=await fetch(`/__hb_sdk__/device-logs?after=${Ci}&limit=500`,{signal:AbortSignal.any([qn.signal,AbortSignal.timeout(5e3)])});if(!e.ok)return;const t=await e.json();if(Q)return;if(Bt&&t.epoch!==Bt){Ci=0,Bt=t.epoch;return}Bt=t.epoch,W.logDevices=t.devices,t.gap&&cr("console.warn",{message:"部分设备日志已超出服务器缓冲,存在日志缺口"});for(const r of t.items){const n=Hd(r.method||`console.${r.level}`,{...r,source:"app"},r.timestamp,r.level==="debug"?"log":r.level);n.source=r.source,n.summary=r.message,n.detail=r,n.deviceSessionId=r.deviceSessionId,n.deviceName=t.devices.find(i=>i.id===r.deviceSessionId)?.name,n.dedupeKey=void 0,xa(n)}Ci=t.nextCursor}catch{}finally{Li=!1}}}function PE(){window.addEventListener("beforeunload",tw),window.addEventListener("hb-sdk:restart-runtime",wd),window.addEventListener("hb-sdk:refresh-storage",Gn),window.addEventListener("hb-sdk:qr-open-change",Ed),window.addEventListener("message",TE),Ji=Fd(()=>document.querySelector("#host-fullscreen-exit-mount")),Xi=Bd(()=>W.devicePresetId,()=>$t.notifyViewportChange(),{flush:"post"})}function TE(e){const t=e.data;if(e.source===null||!le(t)||t.type!==iE||!le(t.detail))return;const r=t.detail;r.level!=="log"&&r.level!=="debug"&&r.level!=="info"&&r.level!=="warn"&&r.level!=="error"||!Array.isArray(r.args)||typeof r.timestamp!="number"||!Number.isFinite(r.timestamp)||cr(`console.${r.level}`,{source:"app",message:r.args.map(n=>yd(n)).join(" ")},r.timestamp,r.level==="log"||r.level==="debug"?"log":r.level)}function yd(e){if(typeof e=="string")return e;if(e instanceof Error)return(typeof e.stack=="string"?e.stack.split(`
|
|
95
|
+
`);return{kind:"file",name:"browser-fake-report.txt",mode:"read",create:async()=>{throw se("FILE_ACCESS_DENIED","Attachment 只读")},read:async()=>new Uint8Array(n),write:async()=>{throw se("FILE_ACCESS_DENIED","Attachment 只读")},stat:async()=>({kind:"file",size:n.byteLength})}}showNotification(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("notifications"))throw se("COMPANION_NOTIFICATION_UNAVAILABLE","notifications 未启用");this.diagnostic("notification.shown",r.snapshot.alias,{category:t.category})}queueOutput(t,r,n,i){t.queuedOutput.push({stream:r,sequence:n,data:typeof i=="string"?new TextEncoder().encode(i):i}),this.flushOutput(t)}flushOutput(t){if(t.exited||t.waitingOutput||!this.eventSink&&this.sessionEventListeners.size===0)return;const r=t.queuedOutput.shift();if(!r){t.pendingExit&&this.exit(t,t.pendingExit);return}t.waitingOutput=r,this.emit(tl,{sessionId:t.snapshot.id,controllerGeneration:t.snapshot.controllerGeneration,...r}),this.diagnostic("stdio.chunk",t.snapshot.alias,{bytes:r.data.byteLength,sequence:r.sequence,stream:r.stream})}requestExit(t,r){t.pendingExit=r,!t.waitingOutput&&t.queuedOutput.length===0&&this.exit(t,r)}exit(t,r){t.exited||(t.exited=!0,t.pendingExit=void 0,t.waitingOutput=void 0,t.queuedOutput.length=0,this.emit(rl,{sessionId:t.snapshot.id,exit:r}),this.diagnostic("session.exit",t.snapshot.alias,{...r}))}readController(t){const r=[...this.sessions.values()].find(n=>n.snapshot.id===t.sessionId);if(!r||r.exited)throw se("COMPANION_SESSION_EXITED","固定 Fake Session 不存在");if(r.snapshot.controllerGeneration!==t.controllerGeneration)throw se("COMPANION_SESSION_OWNERSHIP_LOST","固定 Fake Session 控制权已转移");return r}readAlias(t){if(!Da.includes(t))throw se("COMPANION_NOT_DECLARED","未知固定 Companion Fake 场景");return t}emit(t,r){this.eventSink?.(t,r),this.sessionEventListeners.forEach(n=>n({type:t,payload:r}))}diagnostic(t,r,n){this.onDiagnostic({action:t,...r?{alias:r}:{},...n?{detail:n}:{}})}}const Qy=Object.freeze({[_n]:!0,[Sn]:!0,[vn]:!0,[Rn]:!0,[On]:!0,[Dn]:!0,[Nn]:!0,[Pn]:!0,[Tn]:!0,[Cn]:!0,[Ln]:!0,[Mn]:!0,[Zt]:!0,[Xt]:!0,[er]:!0});function Jy(e){return new Yy(e)}function se(e,t){return Object.assign(new Error(t),{code:e})}const Xy=/^[A-Za-z0-9_-]{22}$/,Zy="https://api.xiaoheihe.cn/open_inapp/";function eE(e){const t=typeof e.port=="number"?e.port:Number(e.port);if(!Number.isInteger(t)||t<=0||t>65535)throw new TypeError("Mobile launch redirect port is invalid");if(!Xy.test(e.token))throw new TypeError("Mobile launch redirect token is invalid");const r=new URL(`http://${e.host}:${t}/l/${e.token}`);if(r.protocol!=="http:"||r.hostname!==e.host||r.port!==String(t)||r.username||r.password||r.search||r.hash)throw new TypeError("Mobile launch redirect host is invalid");return r.href}function tE(e){const t=new URL(e);if(t.protocol!=="http:"||t.username||t.password)throw new TypeError("Mobile launch redirect URL must be an HTTP URL without credentials");const r=`heybox://${encodeURIComponent(JSON.stringify({protocol_type:"openWindow",full_screen:!0,navigation_bar:{title:""},webview:{url:t.href,pull:!1,refresh:!1}}))}`;return`${Zy}#${r}`}function rE(e){const t=Ue(e.runtimePermissions),r=lo({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant}),n=[];for(const[i,o]of[["network","Network"],["companion","Companion"]]){if(!e.declaredPermissions?.[i]?.enabled)continue;const s=t.valid&&t.permissions[i]?.status==="enabled",a=r.temporaryPermissionKeys.includes(i);n.push({key:i,label:o,state:s?"approved":a?"temporary":"unavailable",...!s&&!a?{reason:"没有有效的本地临时授权,线上未批准"}:{}})}if(e.declaredPermissions?.network?.useOfficialDomain){const i=t.valid&&t.permissions.network?.status==="enabled"&&t.permissions.network.config.useOfficialDomain===!0;n.push({key:"network.useOfficialDomain",label:"官方域名",state:i?"approved":"unavailable",...i?{}:{reason:"不支持本地临时授权,获得线上批准后才能使用"}})}return n}function tt(e){return JSON.stringify({source:e.source,miniProgramId:e.miniProgramId,devSessionId:e.devSessionId,contextRevision:e.contextRevision,declaredPermissions:e.declaredPermissions,runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant,companionManifestSha256:e.companionManifestSha256})}const nE="__hb_sdk_mini_dev__",iE="hb-sdk:mini-dev-console",oE="__hb_sdk_mini_dev_console_installed__",Pa=oE;function sE(e,t=console){cE(t,e,t)}const aE=["log","debug","info","warn","error"];function cE(e,t,r){if(!r||r[Pa]===!0)return!1;let n=!1;for(const i of aE){const o=e[i];if(typeof o!="function")continue;const s=function(...a){try{t(i,a)}catch{}return o.apply(this,a)};try{e[i]=s,n=!0}catch{return n}}return n&&(r[Pa]=!0),n}const $i=1,Ta=64*1024,dE=64,lE=/^[A-Za-z0-9_-]{22}$/;class me extends TypeError{code;constructor(t,r){super(r),this.name="BrowserDevHostChannelError",this.code=t}}function uE(e,t=!1){const r=hE(e,t);switch(Wi(r,"Server message"),mE(r),r.type){case"grant":return Gt(r,["version","type","connectionEpoch","nextClientSequence","nextServerSequence","snapshot"],"grant"),jt(r.connectionEpoch,"connectionEpoch"),rt(r.nextClientSequence,"nextClientSequence"),rt(r.nextServerSequence,"nextServerSequence"),Ca(r.snapshot),r;case"event":return Gt(r,["version","type","connectionEpoch","sequence","event","snapshot"],"event"),jt(r.connectionEpoch,"connectionEpoch"),rt(r.sequence,"sequence"),r.event!=="account.changed"&&r.event!=="status.changed"&&Ye("event must be account.changed or status.changed"),Ca(r.snapshot),r;case"heartbeat":return Gt(r,["version","type","connectionEpoch","sequence"],"heartbeat"),jt(r.connectionEpoch,"connectionEpoch"),rt(r.sequence,"sequence"),r;default:return Ye("Unknown server message type")}}function fE(e){const t=e.connectionEpoch;jt(t,"connectionEpoch"),rt(e.nextSequence,"nextSequence");let r=e.nextSequence;return{get nextSequence(){return r},accept(n){if(jt(n.connectionEpoch,"connectionEpoch"),rt(n.sequence,"sequence"),n.connectionEpoch!==t)throw new me("INVALID_SEQUENCE","Connection epoch does not match");if(r===void 0)throw new me("INVALID_SEQUENCE","Sequence is exhausted");if(n.sequence!==r)throw new me("INVALID_SEQUENCE",`Expected sequence ${r}`);r=r===Number.MAX_SAFE_INTEGER?void 0:r+1}}}function hE(e,t){if(t)throw new me("BINARY_FRAME","Binary frames are not supported");if(typeof e!="string")throw new me("TEXT_FRAME_REQUIRED","Channel frame must be text");if(e.length>Ta)throw new me("TEXT_FRAME_TOO_LARGE","Channel text frame exceeds 64 KiB");if(new TextEncoder().encode(e).byteLength>Ta)throw new me("TEXT_FRAME_TOO_LARGE","Channel text frame exceeds 64 KiB");try{return pE(e),JSON.parse(e)}catch(r){throw r instanceof me?r:new me("INVALID_JSON","Channel frame must contain strict JSON")}}function Ca(e){Wi(e,"snapshot"),Gt(e,["account","permissions"],"snapshot"),Wi(e.account,"snapshot.account"),Gt(e.account,["revision"],"snapshot.account"),rt(e.account.revision,"snapshot.account.revision"),Ty(e.permissions)||Ye("snapshot.permissions is invalid")}function mE(e){e.version!==$i&&Ye("version must be 1")}function Wi(e,t){(typeof e!="object"||e===null||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)&&Ye(`${t} must be a plain JSON object`)}function Gt(e,t,r,n=[]){const i=Object.keys(e);(t.some(o=>!Object.hasOwn(e,o))||i.some(o=>!t.includes(o)&&!n.includes(o)))&&Ye(`${r} fields are invalid`)}function rt(e,t){(typeof e!="number"||!Number.isSafeInteger(e)||e<0)&&Ye(`${t} must be a non-negative safe integer`)}function jt(e,t){(typeof e!="string"||!lE.test(e))&&Ye(`${t} must be a 22-character base64url value`)}function Ye(e){throw new me("INVALID_MESSAGE",e)}function pE(e){new gE(e).scan()}class gE{constructor(t){this.source=t}position=0;scan(){if(this.skipWhitespace(),this.scanValue(),this.skipWhitespace(),this.position!==this.source.length)throw new SyntaxError("Unexpected trailing JSON data")}scanValue(t=0){const r=this.source[this.position];if(r==="{"||r==="["){if(t>=dE)throw new me("INVALID_JSON","Channel JSON exceeds maximum nesting depth");return r==="{"?this.scanObject(t):this.scanArray(t)}if(r==='"'){this.scanString();return}this.scanPrimitive()}scanObject(t){this.position+=1,this.skipWhitespace();const r=new Set;if(!this.consume("}"))for(;;){if(this.source[this.position]!=='"')throw new SyntaxError("JSON object key must be a string");const n=this.scanString(),i=JSON.parse(n);if(typeof i!="string")throw new SyntaxError("JSON object key must be a string");if(r.has(i))throw new me("INVALID_JSON","Channel JSON contains a duplicate key");if(r.add(i),this.skipWhitespace(),!this.consume(":"))throw new SyntaxError("Missing JSON object colon");if(this.skipWhitespace(),this.scanValue(t+1),this.skipWhitespace(),this.consume("}"))return;if(!this.consume(","))throw new SyntaxError("Missing JSON object comma");this.skipWhitespace()}}scanArray(t){if(this.position+=1,this.skipWhitespace(),!this.consume("]"))for(;;){if(this.scanValue(t+1),this.skipWhitespace(),this.consume("]"))return;if(!this.consume(","))throw new SyntaxError("Missing JSON array comma");this.skipWhitespace()}}scanString(){const t=this.position;for(this.position+=1;this.position<this.source.length;){const r=this.source[this.position];if(r==='"')return this.position+=1,this.source.slice(t,this.position);r==="\\"?this.position+=2:this.position+=1}throw new SyntaxError("Unterminated JSON string")}scanPrimitive(){const t=this.position;for(;this.position<this.source.length&&!/[\s,\]}]/.test(this.source[this.position]??"");)this.position+=1;if(t===this.position)throw new SyntaxError("Missing JSON value")}skipWhitespace(){for(;/[\t\n\r ]/.test(this.source[this.position]??"");)this.position+=1}consume(t){return this.source[this.position]!==t?!1:(this.position+=1,!0)}}const La=[1e3,2e3,4e3,8e3,15e3];function yE(e){const t=new Set,r=e.webSocketFactory??(f=>new WebSocket(f)),n=e.randomValues??(f=>crypto.getRandomValues(f)),i=e.timers??{clearTimeout:f=>window.clearTimeout(f),setTimeout:(f,y)=>window.setTimeout(f,y)},o=e.onlineTarget??(typeof window>"u"?void 0:window),s=e.visibilityTarget??(typeof document>"u"?void 0:document),a=e.isOnline??(()=>typeof navigator>"u"||navigator.onLine!==!1);let c,l,g,m=!1,u=0,p,O=!1,b=!1;const v=new Set,A=(f,y)=>{if(!(!e.onDiagnostic||v.has(f))){v.add(f);try{e.onDiagnostic({phase:f,...y?{code:y}:{}})}catch{}}},P=(f,y,w=!1)=>{if(g&&f.account.revision<g.account.revision)return;const S=g&&JSON.stringify(f)===JSON.stringify(g);if(g=f,!(S&&!w))for(const T of t)T(f,y)},_=()=>{if(m||p!==void 0||c)return;const f=La[Math.min(u,La.length-1)];u+=1,p=i.setTimeout(()=>{p=void 0,h()},f)},L=()=>{m||!O||c||(p!==void 0&&(i.clearTimeout(p),p=void 0),h())},F=()=>{a()&&L()},N=()=>{s&&!s.hidden&&L()},I=()=>{b||(b=!0,o?.addEventListener("online",F),s?.addEventListener("visibilitychange",N))},d=()=>{b&&(b=!1,o?.removeEventListener("online",F),s?.removeEventListener("visibilitychange",N))},h=()=>{if(m||c)return;O=!0,I(),p!==void 0&&(i.clearTimeout(p),p=void 0);let f,y;try{f=r(e.url)}catch{A("constructor","WEBSOCKET_CONSTRUCTION_FAILED"),_();return}try{y=wE(n)}catch{A("entropy","NONCE_GENERATION_FAILED");try{f?.close(1011,"channel initialization failed")}catch{}_();return}c=f;let w,S,T;const V=()=>{f.removeEventListener("open",D),f.removeEventListener("message",M),f.removeEventListener("close",R),f.removeEventListener("error",U),l===V&&(l=void 0)},C=()=>{if(c===f){c=void 0,V();try{f.close(1008,"invalid channel state")}catch{}_()}},D=()=>{if(!(m||c!==f))try{f.send(JSON.stringify({version:$i,type:"hello",csrfToken:e.csrfToken,clientNonce:y}))}catch{A("send","HELLO_SEND_FAILED"),C()}},M=x=>{if(m||c!==f)return;if(typeof x.data!="string"){A("parse","TEXT_FRAME_REQUIRED"),C();return}let H;try{H=uE(x.data)}catch(q){A("parse",q instanceof me?q.code:"INVALID_MESSAGE"),C();return}if(H.type==="grant"){if(T){A("sequence","DUPLICATE_GRANT"),C();return}w=H.connectionEpoch,S=H.nextClientSequence,T=fE({connectionEpoch:w,nextSequence:H.nextServerSequence}),u=0,v.clear(),P(H.snapshot,{type:"grant"});return}if(!T||!w||S===void 0){A("sequence","MESSAGE_BEFORE_GRANT"),C();return}try{T.accept(H)}catch{A("sequence","INVALID_SEQUENCE"),C();return}if(H.type==="heartbeat"){try{f.send(JSON.stringify({version:$i,type:"heartbeat.ack",connectionEpoch:w,sequence:S}))}catch{A("send","HEARTBEAT_ACK_SEND_FAILED"),C()}S=S===Number.MAX_SAFE_INTEGER?void 0:S+1;return}P(H.snapshot,{type:"event",event:H.event},!0)},R=()=>{c===f&&(A("close","SOCKET_CLOSED"),c=void 0,V(),_())},U=()=>{A("open","SOCKET_ERROR"),C()};f.addEventListener("open",D),f.addEventListener("message",M),f.addEventListener("close",R),f.addEventListener("error",U),l=V};return{connect:h,subscribeUpdates(f){return t.add(f),()=>t.delete(f)},dispose(){if(m)return;m=!0,O=!1,d(),p!==void 0&&i.clearTimeout(p),p=void 0;const f=c;c=void 0,l?.(),f?.close(1e3,"client disposed"),t.clear()}}}function EE(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";let r="";for(let n=0;n<e.length;n+=3){const i=e[n]??0,o=e[n+1],s=e[n+2];r+=t[i>>2],r+=t[(i&3)<<4|(o??0)>>4],o!==void 0&&(r+=t[(o&15)<<2|(s??0)>>6]),s!==void 0&&(r+=t[s&63])}return r}function wE(e){const t=e(new Uint8Array(16));if(!(t instanceof Uint8Array)||t.byteLength!==16)throw new TypeError("Channel nonce source must fill 16 bytes");const r=EE(t);if(!/^[A-Za-z0-9_-]{22}$/.test(r))throw new TypeError("Channel nonce source returned invalid bytes");return r}try{sE((e,t)=>{cr(`console.${e}`,{source:"host",message:t.map(r=>Ed(r)).join(" ")},Date.now(),e==="log"||e==="debug"?"log":e)})}catch{}const bE="/__hb_sdk_bootstrap__",AE="/__hb_sdk__/mobile-launch-redirect",IE="/__hb_sdk__/network",_E="/session/status",SE="/session/request",vE="/session/events",RE=320,OE=1e3,DE=1e3,NE=15e3,Ma="dark",hd=new URL(location.href).searchParams,md=hd.get("mini_url"),dt=hd.get("ui_preview")==="1",Y={device:Ut("#device"),get mobileLanSelect(){return Ut("#mobile-lan-select")},get mobileQrImage(){return Ut("#mobile-qr-image")},get mobileQrStatus(){return Ut("#mobile-qr-status")},storageSnapshot:Ut("#storage-snapshot")};if(!md&&!dt)throw Y.device.innerHTML='<div class="error">Missing mini_url query.</div>',new Error("Missing mini_url query.");const pd=md??"about:blank",de=await Oo();W.devReadiness=de.devReadiness;W.miniProgramSupportsDesktop=de.miniProgramSupportsDesktop;let Fe=de.lanAddresses,kr=de.defaultLanAddressId,wt=de.mobileLaunchRedirect,vo=de.nativeAppLaunchUnavailableReason,Ki=de.miniProgramManifestAccessToken,Ur=de,Ro=Gn(de),le=de.devContext,pe=An(le);No();let Ot=Bn(pe),Q=!1,qn=0;const zn=new AbortController;let Ce=0,It,ir,xr=0,We,Yi,Qi,Be=0,Ke=!1,Hr,Ji,Ci=!1;const $t=$d({apply:Wd,waitForLayout:async e=>{await Kd(),await Yd(e),await Qd(e)}});let Xi,Zi,ka=Date.now(),Ft=!1,Ua=Promise.resolve(),Wt=-1,or=!1,it,eo,to,Fr,Ze;const In=new Set,ro=Jy({onDiagnostic:({action:e,alias:t,detail:r})=>Ie(`companion.fake.${e}`,{...t?{alias:t}:{},...r})}),Dt=xy({applyStatus:e=>_d(e,!0),fetchStatus:e=>Id(Pd(zn.signal,e)),getCanonicalRevision:()=>Wt,onError:ew,reconcile:()=>FE(qn)}),no=Hy({connectEvents:Sd,invalidate:()=>Dt.invalidate(),isDisposed:()=>Q,maxDelayMs:NE,minDelayMs:DE,timers:{clearTimeout:e=>window.clearTimeout(e),setTimeout:(e,t)=>window.setTimeout(()=>{e()},t)}});let Li=0,Bt="",Mi=!1,io;await oo(!1);Od();Nd(Dd(de));dt&&LE();jn();dt||await yd();await hr("initial");dt||(Sd(),xE());PE();zE();function gd(){!dt&&!Q&&(io=window.setTimeout(()=>{yd().finally(gd)},1e3))}gd();async function yd(){if(!(Mi||Q)){Mi=!0;try{const e=await fetch(`/__hb_sdk__/device-logs?after=${Li}&limit=500`,{signal:AbortSignal.any([zn.signal,AbortSignal.timeout(5e3)])});if(!e.ok)return;const t=await e.json();if(Q)return;if(Bt&&t.epoch!==Bt){Li=0,Bt=t.epoch;return}Bt=t.epoch,W.logDevices=t.devices,t.gap&&cr("console.warn",{message:"部分设备日志已超出服务器缓冲,存在日志缺口"});for(const r of t.items){const n=Fd(r.method||`console.${r.level}`,{...r,source:"app"},r.timestamp,r.level==="debug"?"log":r.level);n.source=r.source,n.summary=r.message,n.detail=r,n.deviceSessionId=r.deviceSessionId,n.deviceName=t.devices.find(i=>i.id===r.deviceSessionId)?.name,n.dedupeKey=void 0,xa(n)}Li=t.nextCursor}catch{}finally{Mi=!1}}}function PE(){window.addEventListener("beforeunload",tw),window.addEventListener("hb-sdk:restart-runtime",bd),window.addEventListener("hb-sdk:refresh-storage",jn),window.addEventListener("hb-sdk:qr-open-change",wd),window.addEventListener("message",TE),Xi=Bd(()=>document.querySelector("#host-fullscreen-exit-mount")),Zi=Vd(()=>W.devicePresetId,()=>$t.notifyViewportChange(),{flush:"post"})}function TE(e){const t=e.data;if(e.source===null||!ue(t)||t.type!==iE||!ue(t.detail))return;const r=t.detail;r.level!=="log"&&r.level!=="debug"&&r.level!=="info"&&r.level!=="warn"&&r.level!=="error"||!Array.isArray(r.args)||typeof r.timestamp!="number"||!Number.isFinite(r.timestamp)||cr(`console.${r.level}`,{source:"app",message:r.args.map(n=>Ed(n)).join(" ")},r.timestamp,r.level==="log"||r.level==="debug"?"log":r.level)}function Ed(e){if(typeof e=="string")return e;if(e instanceof Error)return(typeof e.stack=="string"?e.stack.split(`
|
|
96
96
|
`).slice(0,4).join(`
|
|
97
|
-
`):"")||`${e.name}: ${e.message}`;if(typeof e=="object"&&e!==null)try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}return String(e)}function
|
|
97
|
+
`):"")||`${e.name}: ${e.message}`;if(typeof e=="object"&&e!==null)try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}return String(e)}function wd(e){const t=e.detail?.open===!0;t!==Ke&&(Ke=t,Be+=1,$n(),t&&(Y.mobileLanSelect.addEventListener("change",CE),vd(),mr()))}function CE(){Ke&&mr()}function bd(){sr("manual restart")}function sr(e){Q||It!==void 0||(Ie("runtime.restart",{boundary:Ce+1}),It=window.setTimeout(()=>{It=void 0,Q||hr(e)},0))}async function hr(e){if(Ft)return;const t=++Ce;if(ir=void 0,ar(e),Ad(),W.runtimeStatus="loading",Ld(Ot),Y.device.replaceChildren(),dt){Y.device.innerHTML=`
|
|
98
98
|
<div class="browser-mock-preview">
|
|
99
99
|
<span class="browser-mock-preview__icon">UI</span>
|
|
100
100
|
<strong>Browser Mock</strong>
|
|
101
101
|
<small>mp_preview</small>
|
|
102
|
-
</div>`,W.runtimeStatus="idle";return}const r=document.createElement("iframe");r.dataset.testid="device-iframe",r.title="小程序预览",r.allow="clipboard-read; clipboard-write",r.name=nE,Y.device.appendChild(r);const n=new AbortController;Ki=n;let i=!1;try{const o=await sy(ME(n.signal,t));if(Q||t!==Ce){o.dispose();return}Yi=o.dispose,o.ports.companion=to.port;const s=zg({iframe:r,ports:o.ports,environment:o.environment,hostCapabilities:{...o.hostCapabilities,...Qy},authPresentation:o.authPresentation,companionPresentation:to.presentation,resolveLaunchConfiguration:async()=>(await o.resolveLaunch()).configuration,dispose:o.dispose,onReady:()=>{W.runtimeStatus="ready",Ie("runtime.ready",{generation:t})},onTrace:a=>kE(t,a),onError:()=>{i=!0,W.runtimeStatus="error"},onCapabilityTrace:a=>{Bt||Ie(a.method,a),a.method==="storage.setStorage"&&a.outcome==="success"&&Gn()}});We=s,await s.start()}catch(o){if(Q||t!==Ce||n.signal.aborted)return;W.runtimeStatus="error",i||Ie("runtime.start.failed",Vd(o))}}function LE(){Ie("runtime.ready",{generation:1}),cr("console.info",{source:"app",message:"页面初始化完成"},Date.now(),"info"),Ie("user.getInfo",{durationMs:34,outcome:"success"}),Ie("network.request",{durationMs:86,network:{method:"GET",origin:"https://api.example.com",pathname:"/demo",responseStatus:200},outcome:"success"})}function ME(e,t){const r=pe,n=Ly(r.runtimePermissions,Ot,r);return{signal:e,account:{async getCurrentUserId(){return(await io(!1,e)).user_id},async ensureAuthenticated({signal:i}){await io(!1,i)},onChange(i){return In.add(i),()=>In.delete(i)}},authenticatedRequest:UE,storage:{area:"local",storage:localStorage},presentation:Ky({close:async()=>{Fa(),We?.destroy(),$t.reset(),bd(),W.runtimeStatus="closed"},reload:()=>{!Q&&t===Ce&&(ir=t)},onNavigationBarStyleChange:Ha,pushLog:Ie,getDeviceMetrics:()=>Qd.value,applyDisplay:(i,o)=>$t.applyDisplay(i,o),isCapsuleHidden:()=>W.display.capsuleHidden,onViewportChange:i=>$t.onViewportChange(i)}),environment:{getCurrentHref:()=>location.href,isDevRuntime:()=>!0,setDocumentTitle:i=>{document.title=i}},resolveLaunch:async()=>({configuration:Vy({launchUrl:md,runtimePermissions:n,...r.miniProgramId?{miniProgramId:r.miniProgramId}:{},operatingSystem:qd.value.platform}),hostHints:{launchKind:r.source==="remote"?"dev-session":"anonymous-local-dev"}}),authPresentation:{confirmAuthorization:i=>By(i)}}}function bd(){document.documentElement.dataset.navigationBarStyle=Ma,Ha(Ma)}function kE(e,t){const r=zd(t,e);r&&xa(r),!(t.type!=="bridge_response"||t.method!=="navigation.reload"||t.outcome!=="success"||ir!==e||e!==Ce)&&(ir=void 0,sr("navigation.reload"))}async function UE(e,t){if(e.redirectPolicy!=="error")throw new Error("Browser Dev Host network 只允许 no-follow redirect policy");const n=e.target.kind==="absolute-url"&&e.source==="public-sdk"&&e.target.kind==="absolute-url"?{url:e.target.url,method:e.method,params:e.params,data:e.data,bodyEncoding:e.bodyEncoding,headers:e.headers,timeout:e.timeout}:void 0;if(!n&&e.source!=="runtime-private")throw new Error("Browser Dev Host 的公开请求只支持 absolute URL");const i=await Do(n?IE:SE,{method:"POST",body:JSON.stringify(n??{target:e.target,method:e.method,params:e.params,data:e.data,headers:e.headers,credentials:e.source==="runtime-private"?e.credentials:void 0,bodyEncoding:e.bodyEncoding,timeout:e.timeout}),signal:t.signal});!n&&i.status===401&&Dt.invalidate();const o=await i.json();if(!i.ok)throw o;return o}async function io(e,t){const r=Vn,n=await Ad(Nd(qn.signal,t));return Pd(r)?Id(n,e).status:oo()}async function Ad(e){return await(await fetch(_E,{cache:"no-store",credentials:"same-origin",redirect:"error",signal:e})).json()}function Id(e,t){if(!Number.isSafeInteger(e.revision)||e.revision<Wt)return{changed:!1,status:oo()};const r=e.authenticated?e.user_id:void 0,n=e.authenticated?ie(e.nickname):void 0,i=e.authenticated?ie(e.avatar):void 0,o=e.revision!==Wt||e.authenticated!==or||r!==it||n!==Zi||i!==eo;return Wt=e.revision,or=e.authenticated,it=r,Zi=n,eo=i,Rd(),t&&o&&In.forEach(s=>s(it)),{changed:o,status:oo()}}function oo(){return{authenticated:or,revision:Wt,...or&&it?{user_id:it}:{}}}function xE(){if(!(!de.csrfToken||Q))try{const e=new URL("/__hb_sdk__/channel",location.href);e.protocol=e.protocol==="https:"?"wss:":"ws:",Ze=yE({csrfToken:de.csrfToken,onDiagnostic:t=>Ie("channel.diagnostic",t),url:e.toString()}),Ze.subscribeUpdates((t,r)=>HE(t,r)),Ze.connect()}catch{Ze?.dispose(),Ze=void 0}}function HE(e,t){Dt.invalidate(e.account.revision),iw(Ot,e.permissions)?t.type==="event"&&t.event==="status.changed"&&hr("status changed"):(Ot=Cd(e.permissions),BE())}function _d(){if(Fr?.close(),Fr=void 0,!it||Q)return;const e=new EventSource(vE);Fr=e,e.addEventListener("account-invalidated",()=>{Dt.invalidate()}),e.addEventListener("account-revision",()=>{Dt.invalidate()}),e.onopen=()=>{ro.reset()},e.onerror=()=>{e.close(),ro.schedule()}}async function FE(e){Pd(e)&&await hr("account revision changed")}function ar(e){xr+=1,Fa(),We&&to.reset(),We?.destroy(),We=void 0,Ki?.abort(new DOMException(e,"AbortError")),Ki=void 0,Yi?.(),Yi=void 0,$t.reset()}async function BE(){Q||(await hr("permission changed"),!Q&&await mr())}async function Oo(){const e=await fetch(bE,{cache:"no-store",credentials:"same-origin",redirect:"error",signal:AbortSignal.timeout(5e3)});if(!e.ok)throw new Error("Browser Dev Host bootstrap request failed");const t=await e.json();if(!le(t))throw new Error("Browser Dev Host bootstrap is invalid");const r=Td(t.mobileLaunchRedirect);if(Object.hasOwn(t,"mobileLaunchRedirect")&&t.mobileLaunchRedirect!==void 0&&!r)throw new Nt;return{devReadiness:VE(t.devReadiness),csrfToken:typeof t.csrfToken=="string"?t.csrfToken:void 0,defaultLanAddressId:typeof t.defaultLanAddressId=="string"?t.defaultLanAddressId:void 0,devContext:qE(t.devContext,t.runtimePermissions),lanAddresses:Array.isArray(t.lanAddresses)?t.lanAddresses.filter(nw):[],loginAvailable:t.loginAvailable===!0,miniProgram:XE(t.miniProgram),miniProgramSupportsDesktop:t.miniProgramSupportsDesktop===!0,mobileLaunchRedirect:r,nativeAppLaunchUnavailableReason:typeof t.nativeAppLaunchUnavailableReason=="string"?t.nativeAppLaunchUnavailableReason:void 0,miniProgramManifestAccessToken:typeof t.miniProgramManifestAccessToken=="string"?t.miniProgramManifestAccessToken:void 0}}function VE(e){if(!le(e))return;const t=s=>{if(!(!le(s)||!["ready","pending","blocked","not-configured"].includes(String(s.state))))return{state:s.state,...typeof s.reason=="string"?{reason:s.reason.slice(0,240)}:{}}},r=t(e.browser),n=t(e.mobile),i=t(e.companion);if(!r||!n||!i||!le(e.companion))return;const o=e.companion;return{browser:r,mobile:n,companion:{...i,...typeof o.digest=="string"&&/^[a-f0-9]{64}$/.test(o.digest)?{digest:o.digest}:{},artifacts:Array.isArray(o.artifacts)?o.artifacts.filter(s=>le(s)&&typeof s.alias=="string"&&/^[a-z][a-z0-9-]{0,31}$/.test(s.alias)&&["windows-x64","macos-arm64"].includes(String(s.target))).map(({alias:s,target:a})=>({alias:s,target:a})):[]}}}function qE(e,t){return le(e)&&(e.source==="remote"||e.source==="anonymous")?{source:e.source,miniProgramId:typeof e.miniProgramId=="string"?e.miniProgramId:void 0,localDevLaunchToken:typeof e.localDevLaunchToken=="string"?e.localDevLaunchToken:void 0,runtimePermissions:e.runtimePermissions,warning:typeof e.warning=="string"?e.warning:void 0,declaredPermissions:le(e.declaredPermissions)?e.declaredPermissions:void 0,platforms:Array.isArray(e.platforms)?e.platforms.filter(r=>["android","ios","ohos","windows","macos","linux"].includes(String(r))):void 0,localDevGrant:e.localDevGrant,contextRevision:typeof e.contextRevision=="number"?e.contextRevision:void 0,devSessionId:typeof e.devSessionId=="string"?e.devSessionId:void 0,expiresAt:typeof e.expiresAt=="number"?e.expiresAt:void 0,companionManifestSha256:typeof e.companionManifestSha256=="string"?e.companionManifestSha256:void 0}:{source:"anonymous",runtimePermissions:t}}async function Do(e,t){const r=new Headers(t.headers);return r.set("content-type","application/json"),de.csrfToken&&r.set("x-hb-sdk-csrf",de.csrfToken),fetch(e,{...t,headers:r,cache:"no-store",credentials:"same-origin",redirect:"error"})}function zE(){Po(),dt||(Qi=window.setInterval(()=>{JE()},OE))}function Sd(e=Y.mobileLanSelect.options.length>0?Y.mobileLanSelect.value:void 0){Y.mobileLanSelect.replaceChildren();for(const t of Fe){const r=document.createElement("option");r.value=t.id,r.textContent=`${t.name} · ${t.address}`,Y.mobileLanSelect.appendChild(r)}e&&Fe.some(({id:t})=>t===e)?Y.mobileLanSelect.value=e:kr&&Fe.some(({id:t})=>t===kr)?Y.mobileLanSelect.value=kr:Fe[0]&&(Y.mobileLanSelect.value=Fe[0].id),Y.mobileLanSelect.disabled=Fe.length===0}async function mr(){if(Q)return;const e=++Be;if(jn(),ue.source!=="remote"||!ue.localDevLaunchToken||ue.expiresAt!==void 0&&ue.expiresAt<=Date.now()){Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent=vo||"需要有效的本地调试启动票";return}const t=rw();if(!t?.mobileAppQrPayload){Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent="未发现可用的局域网地址";return}Y.mobileQrStatus.textContent="正在生成二维码...";try{const r=await KE(t);if(e!==Be||Q)return;const n=await GE(r.address,r.expiresAt);if(e!==Be||Q)return;const i=await Ny.toDataURL(n.payload,{width:RE,margin:1});if(e!==Be||Q)return;Y.mobileQrImage.src=i,Y.mobileQrStatus.textContent=`${r.address.name} · ${r.address.address}`,QE(n.expiresAt,e)}catch(r){if(e!==Be||Q)return;if(r instanceof Nt){Br();return}Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent=To(r)}}async function GE(e,t){const r=e.mobileAppQrPayload;if(!r)throw new Error("Mobile 启动配置不可用");const n=await jE(e,r);if(!n)return{expiresAt:t,payload:r};try{return{expiresAt:Math.min(t,n.expiresAt),payload:tE(eE({host:e.address,port:location.port,token:n.token}))}}catch{throw new Nt}}async function jE(e,t){if(wt?.addressId===e.id)return wt;if(!wt)return;const r=await Do(AE,{method:"POST",body:JSON.stringify({address_id:e.id,payload:t,previous_token:wt.token})});if(!r.ok)throw new Nt;const n=await r.json(),i=le(n)?Td({addressId:n.address_id,expiresAt:n.expires_at,token:n.token}):void 0;if(!i||i.addressId!==e.id)throw new Nt;return wt=i,Ur={...Ur,mobileLaunchRedirect:i},Ro=zn(Ur),i}async function $E(e){const t=await Oo(),r=WE(t,e),n=r?.mobileAppQrPayload;if(!r||!n)throw new Error("Mobile 启动配置不可用");return vd(t),{...r,mobileAppQrPayload:n}}function WE(e,t){return e.lanAddresses.find(({id:r})=>r===t)??e.lanAddresses.find(({id:r})=>r===e.defaultLanAddressId)??e.lanAddresses[0]}function vd(e){const t=tt(pe);W.devReadiness=e.devReadiness,W.miniProgramSupportsDesktop=e.miniProgramSupportsDesktop,Ur=e,Ro=zn(e),ue=e.devContext,pe=An(ue),Ot=Fn(pe),No(),Fe=e.lanAddresses,kr=e.defaultLanAddressId,wt=e.mobileLaunchRedirect,vo=e.nativeAppLaunchUnavailableReason,Wi=e.miniProgramManifestAccessToken,Dd(Od(e)),Ke&&Sd(),Po(),t!==tt(pe)&&(Ce+=1,ar("local permission context changed"),sr("local permission context changed"))}function No(){W.localPermissions=rE(pe),W.devContextWarning=pe.source==="anonymous"?"未连接线上上下文":pe.warning?"本地上下文受限,请检查 CLI 状态":""}function Po(){let e;try{e=Gd(md)}catch{}const t=ue.miniProgramId?.trim().toLowerCase();let r=vo?.trim()??"";!r&&(ue.source!=="remote"||!t)&&(r="请先绑定可管理的小程序"),!r&&!ue.localDevLaunchToken?.trim()&&(r="正在等待有效的本地调试启动票"),!r&&ue.expiresAt!==void 0&&ue.expiresAt<=Date.now()&&(r="本地调试启动票已过期"),!r&&!e&&(r="未发现可用的本机调试地址"),Ba({...e?{address:e}:{},...t?{miniProgramId:t}:{},...Wi?{miniProgramManifestToken:Wi}:{},ready:r==="",...r?{unavailableReason:r}:{}})}class Nt extends Error{}async function KE(e){const t=Ua.then(()=>YE(e));return Ua=t.then(()=>{},()=>{}),t}async function YE(e){const t=new URL(e.appUrl),r=new URL(Py,location.origin),n=await Do(r.pathname,{method:"POST",body:JSON.stringify({mini_url_origin:t.origin,runtime_permissions:My(ue)})}),i=await n.json();if(!n.ok||!le(i)||typeof i.token!="string"||typeof i.expires_at!="number")throw new Error("创建 Mobile Dev Session 失败");return{address:await $E(e.id),expiresAt:i.expires_at}}function QE(e,t){Hr=window.setTimeout(()=>{!Q&&Ke&&t===Be&&mr()},Math.max(1e3,e-Date.now()-3e4))}async function JE(){if(!(Ti||Q)){Ti=!0;try{const e=await Oo();ka=Date.now();const t=Ft;Ft=!1;const r=zn(e);if(!t&&r===Ro&&tt(An(e.devContext))===tt(pe))return;vd(e),t&&sr("CLI dev session reconnected"),Ke&&mr()}catch(e){e instanceof Nt&&Br();const t=An(ue);tt(t)!==tt(pe)&&(pe=t,Ot=Fn(pe),No(),Ce+=1,ar("local permission context expired"),sr("local permission context expired"),Po(),Ke&&Br()),Date.now()-ka>=3e4&&!Ft&&(Ft=!0,Ce+=1,ar("CLI dev session disconnected"),Y.device.replaceChildren(),W.runtimeStatus="closed",W.localPermissions=[],W.devContextWarning="调试会话已断开",Ba({ready:!1,unavailableReason:"调试会话已断开"}),W.devReadiness={browser:{state:"blocked",reason:"调试会话已断开,等待 CLI 恢复"},mobile:{state:"blocked",reason:"调试会话已断开"},companion:{state:"blocked",reason:"调试会话已断开"}},Ke&&Br())}finally{Ti=!1}}}function Br(){Be+=1,jn(),Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent="Mobile 短链接配置无效"}function zn(e){return JSON.stringify({devReadiness:e.devReadiness,defaultLanAddressId:e.defaultLanAddressId,lanAddresses:e.lanAddresses,mobileLaunchRedirect:e.mobileLaunchRedirect?{addressId:e.mobileLaunchRedirect.addressId,expiresAt:e.mobileLaunchRedirect.expiresAt,token:e.mobileLaunchRedirect.token}:void 0,devContext:{permissionContext:tt(e.devContext),expiresAt:e.devContext.expiresAt,localDevLaunchToken:e.devContext.localDevLaunchToken,miniProgramId:e.devContext.miniProgramId,source:e.devContext.source},nativeAppLaunchUnavailableReason:e.nativeAppLaunchUnavailableReason,miniProgramManifestAccessToken:e.miniProgramManifestAccessToken,miniProgramSupportsDesktop:e.miniProgramSupportsDesktop})}function Rd(){if(!or){W.account={authenticated:!1,avatar:"",nickname:"未登录"};return}W.account={authenticated:!0,avatar:eo??"",nickname:Zi||it||"已登录"}}function Od(e){if(e.miniProgram?.miniProgramId)return e.miniProgram;const t=e.devContext.miniProgramId?.trim();return t?{miniProgramId:t}:e.miniProgram??null}function Dd(e){if(!!!e?.miniProgramId||!e){W.miniProgram={bound:!1,iconUrl:"",name:"未绑定小程序",detail:"本地调试"};return}W.miniProgram={bound:!0,iconUrl:e.iconUrl??"",name:e.name||e.miniProgramId,detail:[e.miniProgramId,e.version].filter(Boolean).join(" · ")}}function XE(e){if(e===null)return null;if(!le(e))return;const t=ie(e.miniProgramId)??ie(e.mini_program_id);if(t)return{miniProgramId:t,...ie(e.name)?{name:ie(e.name)}:{},...ie(e.iconUrl)??ie(e.icon_url)?{iconUrl:ie(e.iconUrl)??ie(e.icon_url)}:{},...ie(e.status)?{status:ie(e.status)}:{},...ie(e.version)?{version:ie(e.version)}:{},...ie(e.developerName)??ie(e.developer_name)?{developerName:ie(e.developerName)??ie(e.developer_name)}:{}}}function ie(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function Gn(){const e=++xr,t=We,r=t?.diagnostics.storage;if(!r){W.storage=[],W.storageError=t?"当前 Host 不支持 Storage 诊断":"";return}try{const n=await r.getSnapshot();if(Q||e!==xr||t!==We)return;W.storage=n.map(i=>({area:i.area,key:i.key,serializedValue:i.serializedValue,bytes:i.bytes})),W.storageError=""}catch(n){if(Q||e!==xr||t!==We)return;W.storage=[],W.storageError=To(n)}}function ZE(e,t){Ie("host.message",{message:e,status:t})}function ew(e){Q||ZE(To(e),"error")}function Ie(e,t){cr(e,t)}function tw(){no!==void 0&&window.clearTimeout(no),!Q&&(Q=!0,window.removeEventListener("hb-sdk:restart-runtime",wd),window.removeEventListener("hb-sdk:refresh-storage",Gn),window.removeEventListener("hb-sdk:qr-open-change",Ed),Vn+=1,qn.abort(new DOMException("Browser Dev Host disposed","AbortError")),Dt.dispose(),Ce+=1,ar("Browser Dev Host disposed"),Fr?.close(),Ze?.dispose(),Ze=void 0,ro.dispose(),ir=void 0,It!==void 0&&window.clearTimeout(It),It=void 0,jn(),Qi!==void 0&&window.clearInterval(Qi),In.clear(),Ji?.(),Ji=void 0,Xi?.(),Xi=void 0)}function jn(){Hr!==void 0&&window.clearTimeout(Hr),Hr=void 0}function Nd(e,t){return t?AbortSignal.any([e,t]):e}function Pd(e){return!Q&&e===Vn}function rw(){return Fe.find(({id:e})=>e===Y.mobileLanSelect.value)}function nw(e){return le(e)&&typeof e.address=="string"&&typeof e.appUrl=="string"&&typeof e.id=="string"&&typeof e.name=="string"&&(e.mobileAppQrPayload===void 0||typeof e.mobileAppQrPayload=="string")}function Td(e){if(!(!le(e)||typeof e.addressId!="string"||!e.addressId||typeof e.expiresAt!="number"||!Number.isFinite(e.expiresAt)||typeof e.token!="string"||!/^[A-Za-z0-9_-]{22}$/.test(e.token)))return{addressId:e.addressId,expiresAt:e.expiresAt,token:e.token}}function Cd(e){return{networkRequest:{...e.networkRequest}}}function iw(e,t){return e.networkRequest.status===t.networkRequest.status&&e.networkRequest.useOfficialDomain===t.networkRequest.useOfficialDomain}function To(e){return e instanceof Error&&e.message?e.message:"操作失败"}function le(e){return Object.prototype.toString.call(e)==="[object Object]"}function Ut(e){const t=document.querySelector(e);if(!t)throw new Error(`Missing Browser Dev Host element: ${e}`);return t}
|
|
102
|
+
</div>`,W.runtimeStatus="idle";return}const r=document.createElement("iframe");r.dataset.testid="device-iframe",r.title="小程序预览",r.allow="clipboard-read; clipboard-write",r.name=nE,Y.device.appendChild(r);const n=new AbortController;Yi=n;let i=!1;try{const o=await sy(ME(n.signal,t));if(Q||t!==Ce){o.dispose();return}Qi=o.dispose,o.ports.companion=ro.port;const s=zg({iframe:r,ports:o.ports,environment:o.environment,hostCapabilities:{...o.hostCapabilities,...Qy},authPresentation:o.authPresentation,companionPresentation:ro.presentation,resolveLaunchConfiguration:async()=>(await o.resolveLaunch()).configuration,dispose:o.dispose,onReady:()=>{W.runtimeStatus="ready",Ie("runtime.ready",{generation:t})},onTrace:a=>kE(t,a),onError:()=>{i=!0,W.runtimeStatus="error"},onCapabilityTrace:a=>{Bt||Ie(a.method,a),a.method==="storage.setStorage"&&a.outcome==="success"&&jn()}});We=s,await s.start()}catch(o){if(Q||t!==Ce||n.signal.aborted)return;W.runtimeStatus="error",i||Ie("runtime.start.failed",qd(o))}}function LE(){Ie("runtime.ready",{generation:1}),cr("console.info",{source:"app",message:"页面初始化完成"},Date.now(),"info"),Ie("user.getInfo",{durationMs:34,outcome:"success"}),Ie("network.request",{durationMs:86,network:{method:"GET",origin:"https://api.example.com",pathname:"/demo",responseStatus:200},outcome:"success"})}function ME(e,t){const r=pe,n=Ly(r.runtimePermissions,Ot,r);return{signal:e,account:{async getCurrentUserId(){return(await oo(!1,e)).user_id},async ensureAuthenticated({signal:i}){await oo(!1,i)},onChange(i){return In.add(i),()=>In.delete(i)}},authenticatedRequest:UE,storage:{area:"local",storage:localStorage},presentation:Ky({close:async()=>{Fa(),We?.destroy(),$t.reset(),Ad(),W.runtimeStatus="closed"},reload:()=>{!Q&&t===Ce&&(ir=t)},onNavigationBarStyleChange:Ha,pushLog:Ie,getDeviceMetrics:()=>Jd.value,applyDisplay:(i,o)=>$t.applyDisplay(i,o),isCapsuleHidden:()=>W.display.capsuleHidden,onViewportChange:i=>$t.onViewportChange(i)}),environment:{getCurrentHref:()=>location.href,isDevRuntime:()=>!0,setDocumentTitle:i=>{document.title=i}},resolveLaunch:async()=>({configuration:Vy({launchUrl:pd,runtimePermissions:n,...r.miniProgramId?{miniProgramId:r.miniProgramId}:{},operatingSystem:zd.value.platform}),hostHints:{launchKind:r.source==="remote"?"dev-session":"anonymous-local-dev"}}),authPresentation:{confirmAuthorization:i=>By(i)}}}function Ad(){document.documentElement.dataset.navigationBarStyle=Ma,Ha(Ma)}function kE(e,t){const r=Gd(t,e);r&&xa(r),!(t.type!=="bridge_response"||t.method!=="navigation.reload"||t.outcome!=="success"||ir!==e||e!==Ce)&&(ir=void 0,sr("navigation.reload"))}async function UE(e,t){if(e.redirectPolicy!=="error")throw new Error("Browser Dev Host network 只允许 no-follow redirect policy");const n=e.target.kind==="absolute-url"&&e.source==="public-sdk"&&e.target.kind==="absolute-url"?{url:e.target.url,method:e.method,params:e.params,data:e.data,bodyEncoding:e.bodyEncoding,headers:e.headers,timeout:e.timeout}:void 0;if(!n&&e.source!=="runtime-private")throw new Error("Browser Dev Host 的公开请求只支持 absolute URL");const i=await Do(n?IE:SE,{method:"POST",body:JSON.stringify(n??{target:e.target,method:e.method,params:e.params,data:e.data,headers:e.headers,credentials:e.source==="runtime-private"?e.credentials:void 0,bodyEncoding:e.bodyEncoding,timeout:e.timeout}),signal:t.signal});!n&&i.status===401&&Dt.invalidate();const o=await i.json();if(!i.ok)throw o;return o}async function oo(e,t){const r=qn,n=await Id(Pd(zn.signal,t));return Td(r)?_d(n,e).status:so()}async function Id(e){return await(await fetch(_E,{cache:"no-store",credentials:"same-origin",redirect:"error",signal:e})).json()}function _d(e,t){if(!Number.isSafeInteger(e.revision)||e.revision<Wt)return{changed:!1,status:so()};const r=e.authenticated?e.user_id:void 0,n=e.authenticated?ie(e.nickname):void 0,i=e.authenticated?ie(e.avatar):void 0,o=e.revision!==Wt||e.authenticated!==or||r!==it||n!==eo||i!==to;return Wt=e.revision,or=e.authenticated,it=r,eo=n,to=i,Od(),t&&o&&In.forEach(s=>s(it)),{changed:o,status:so()}}function so(){return{authenticated:or,revision:Wt,...or&&it?{user_id:it}:{}}}function xE(){if(!(!de.csrfToken||Q))try{const e=new URL("/__hb_sdk__/channel",location.href);e.protocol=e.protocol==="https:"?"wss:":"ws:",Ze=yE({csrfToken:de.csrfToken,onDiagnostic:t=>Ie("channel.diagnostic",t),url:e.toString()}),Ze.subscribeUpdates((t,r)=>HE(t,r)),Ze.connect()}catch{Ze?.dispose(),Ze=void 0}}function HE(e,t){Dt.invalidate(e.account.revision),iw(Ot,e.permissions)?t.type==="event"&&t.event==="status.changed"&&hr("status changed"):(Ot=Ld(e.permissions),BE())}function Sd(){if(Fr?.close(),Fr=void 0,!it||Q)return;const e=new EventSource(vE);Fr=e,e.addEventListener("account-invalidated",()=>{Dt.invalidate()}),e.addEventListener("account-revision",()=>{Dt.invalidate()}),e.onopen=()=>{no.reset()},e.onerror=()=>{e.close(),no.schedule()}}async function FE(e){Td(e)&&await hr("account revision changed")}function ar(e){xr+=1,Fa(),We&&ro.reset(),We?.destroy(),We=void 0,Yi?.abort(new DOMException(e,"AbortError")),Yi=void 0,Qi?.(),Qi=void 0,$t.reset()}async function BE(){Q||(await hr("permission changed"),!Q&&await mr())}async function Oo(){const e=await fetch(bE,{cache:"no-store",credentials:"same-origin",redirect:"error",signal:AbortSignal.timeout(5e3)});if(!e.ok)throw new Error("Browser Dev Host bootstrap request failed");const t=await e.json();if(!ue(t))throw new Error("Browser Dev Host bootstrap is invalid");const r=Cd(t.mobileLaunchRedirect);if(Object.hasOwn(t,"mobileLaunchRedirect")&&t.mobileLaunchRedirect!==void 0&&!r)throw new Nt;return{devReadiness:VE(t.devReadiness),csrfToken:typeof t.csrfToken=="string"?t.csrfToken:void 0,defaultLanAddressId:typeof t.defaultLanAddressId=="string"?t.defaultLanAddressId:void 0,devContext:qE(t.devContext,t.runtimePermissions),lanAddresses:Array.isArray(t.lanAddresses)?t.lanAddresses.filter(nw):[],loginAvailable:t.loginAvailable===!0,miniProgram:XE(t.miniProgram),miniProgramSupportsDesktop:t.miniProgramSupportsDesktop===!0,mobileLaunchRedirect:r,nativeAppLaunchUnavailableReason:typeof t.nativeAppLaunchUnavailableReason=="string"?t.nativeAppLaunchUnavailableReason:void 0,miniProgramManifestAccessToken:typeof t.miniProgramManifestAccessToken=="string"?t.miniProgramManifestAccessToken:void 0}}function VE(e){if(!ue(e))return;const t=s=>{if(!(!ue(s)||!["ready","pending","blocked","not-configured"].includes(String(s.state))))return{state:s.state,...typeof s.reason=="string"?{reason:s.reason.slice(0,240)}:{}}},r=t(e.browser),n=t(e.mobile),i=t(e.companion);if(!r||!n||!i||!ue(e.companion))return;const o=e.companion;return{browser:r,mobile:n,companion:{...i,...typeof o.digest=="string"&&/^[a-f0-9]{64}$/.test(o.digest)?{digest:o.digest}:{},artifacts:Array.isArray(o.artifacts)?o.artifacts.filter(s=>ue(s)&&typeof s.alias=="string"&&/^[a-z][a-z0-9-]{0,31}$/.test(s.alias)&&["windows-x64","macos-arm64"].includes(String(s.target))).map(({alias:s,target:a})=>({alias:s,target:a})):[]}}}function qE(e,t){return ue(e)&&(e.source==="remote"||e.source==="anonymous")?{source:e.source,miniProgramId:typeof e.miniProgramId=="string"?e.miniProgramId:void 0,localDevLaunchToken:typeof e.localDevLaunchToken=="string"?e.localDevLaunchToken:void 0,runtimePermissions:e.runtimePermissions,warning:typeof e.warning=="string"?e.warning:void 0,declaredPermissions:ue(e.declaredPermissions)?e.declaredPermissions:void 0,platforms:Array.isArray(e.platforms)?e.platforms.filter(r=>["android","ios","ohos","windows","macos","linux"].includes(String(r))):void 0,localDevGrant:e.localDevGrant,contextRevision:typeof e.contextRevision=="number"?e.contextRevision:void 0,devSessionId:typeof e.devSessionId=="string"?e.devSessionId:void 0,expiresAt:typeof e.expiresAt=="number"?e.expiresAt:void 0,companionManifestSha256:typeof e.companionManifestSha256=="string"?e.companionManifestSha256:void 0}:{source:"anonymous",runtimePermissions:t}}async function Do(e,t){const r=new Headers(t.headers);return r.set("content-type","application/json"),de.csrfToken&&r.set("x-hb-sdk-csrf",de.csrfToken),fetch(e,{...t,headers:r,cache:"no-store",credentials:"same-origin",redirect:"error"})}function zE(){Po(),dt||(Ji=window.setInterval(()=>{JE()},OE))}function vd(e=Y.mobileLanSelect.options.length>0?Y.mobileLanSelect.value:void 0){Y.mobileLanSelect.replaceChildren();for(const t of Fe){const r=document.createElement("option");r.value=t.id,r.textContent=`${t.name} · ${t.address}`,Y.mobileLanSelect.appendChild(r)}e&&Fe.some(({id:t})=>t===e)?Y.mobileLanSelect.value=e:kr&&Fe.some(({id:t})=>t===kr)?Y.mobileLanSelect.value=kr:Fe[0]&&(Y.mobileLanSelect.value=Fe[0].id),Y.mobileLanSelect.disabled=Fe.length===0}async function mr(){if(Q)return;const e=++Be;if($n(),le.source!=="remote"||!le.localDevLaunchToken||le.expiresAt!==void 0&&le.expiresAt<=Date.now()){Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent=vo||"需要有效的本地调试启动票";return}const t=rw();if(!t?.mobileAppQrPayload){Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent="未发现可用的局域网地址";return}Y.mobileQrStatus.textContent="正在生成二维码...";try{const r=await KE(t);if(e!==Be||Q)return;const n=await GE(r.address,r.expiresAt);if(e!==Be||Q)return;const i=await Ny.toDataURL(n.payload,{width:RE,margin:1});if(e!==Be||Q)return;Y.mobileQrImage.src=i,Y.mobileQrStatus.textContent=`${r.address.name} · ${r.address.address}`,QE(n.expiresAt,e)}catch(r){if(e!==Be||Q)return;if(r instanceof Nt){Br();return}Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent=To(r)}}async function GE(e,t){const r=e.mobileAppQrPayload;if(!r)throw new Error("Mobile 启动配置不可用");const n=await jE(e,r);if(!n)return{expiresAt:t,payload:r};try{return{expiresAt:Math.min(t,n.expiresAt),payload:tE(eE({host:e.address,port:location.port,token:n.token}))}}catch{throw new Nt}}async function jE(e,t){if(wt?.addressId===e.id)return wt;if(!wt)return;const r=await Do(AE,{method:"POST",body:JSON.stringify({address_id:e.id,payload:t,previous_token:wt.token})});if(!r.ok)throw new Nt;const n=await r.json(),i=ue(n)?Cd({addressId:n.address_id,expiresAt:n.expires_at,token:n.token}):void 0;if(!i||i.addressId!==e.id)throw new Nt;return wt=i,Ur={...Ur,mobileLaunchRedirect:i},Ro=Gn(Ur),i}async function $E(e){const t=await Oo(),r=WE(t,e),n=r?.mobileAppQrPayload;if(!r||!n)throw new Error("Mobile 启动配置不可用");return Rd(t),{...r,mobileAppQrPayload:n}}function WE(e,t){return e.lanAddresses.find(({id:r})=>r===t)??e.lanAddresses.find(({id:r})=>r===e.defaultLanAddressId)??e.lanAddresses[0]}function Rd(e){const t=tt(pe);W.devReadiness=e.devReadiness,W.miniProgramSupportsDesktop=e.miniProgramSupportsDesktop,Ur=e,Ro=Gn(e),le=e.devContext,pe=An(le),Ot=Bn(pe),No(),Fe=e.lanAddresses,kr=e.defaultLanAddressId,wt=e.mobileLaunchRedirect,vo=e.nativeAppLaunchUnavailableReason,Ki=e.miniProgramManifestAccessToken,Nd(Dd(e)),Ke&&vd(),Po(),t!==tt(pe)&&(Ce+=1,ar("local permission context changed"),sr("local permission context changed"))}function No(){W.localPermissions=rE(pe),W.devContextWarning=pe.source==="anonymous"?"未连接线上上下文":pe.warning?"本地上下文受限,请检查 CLI 状态":""}function Po(){let e;try{e=jd(pd)}catch{}const t=le.miniProgramId?.trim().toLowerCase();let r=vo?.trim()??"";!r&&(le.source!=="remote"||!t)&&(r="请先绑定可管理的小程序"),!r&&!le.localDevLaunchToken?.trim()&&(r="正在等待有效的本地调试启动票"),!r&&le.expiresAt!==void 0&&le.expiresAt<=Date.now()&&(r="本地调试启动票已过期"),!r&&!e&&(r="未发现可用的本机调试地址"),Ba({...e?{address:e}:{},...t?{miniProgramId:t}:{},...Ki?{miniProgramManifestToken:Ki}:{},ready:r==="",...r?{unavailableReason:r}:{}})}class Nt extends Error{}async function KE(e){const t=Ua.then(()=>YE(e));return Ua=t.then(()=>{},()=>{}),t}async function YE(e){const t=new URL(e.appUrl),r=new URL(Py,location.origin),n=await Do(r.pathname,{method:"POST",body:JSON.stringify({mini_url_origin:t.origin,runtime_permissions:My(le)})}),i=await n.json();if(!n.ok||!ue(i)||typeof i.token!="string"||typeof i.expires_at!="number")throw new Error("创建 Mobile Dev Session 失败");return{address:await $E(e.id),expiresAt:i.expires_at}}function QE(e,t){Hr=window.setTimeout(()=>{!Q&&Ke&&t===Be&&mr()},Math.max(1e3,e-Date.now()-3e4))}async function JE(){if(!(Ci||Q)){Ci=!0;try{const e=await Oo();ka=Date.now();const t=Ft;Ft=!1;const r=Gn(e);if(!t&&r===Ro&&tt(An(e.devContext))===tt(pe))return;Rd(e),t&&sr("CLI dev session reconnected"),Ke&&mr()}catch(e){e instanceof Nt&&Br();const t=An(le);tt(t)!==tt(pe)&&(pe=t,Ot=Bn(pe),No(),Ce+=1,ar("local permission context expired"),sr("local permission context expired"),Po(),Ke&&Br()),Date.now()-ka>=3e4&&!Ft&&(Ft=!0,Ce+=1,ar("CLI dev session disconnected"),Y.device.replaceChildren(),W.runtimeStatus="closed",W.localPermissions=[],W.devContextWarning="调试会话已断开",Ba({ready:!1,unavailableReason:"调试会话已断开"}),W.devReadiness={browser:{state:"blocked",reason:"调试会话已断开,等待 CLI 恢复"},mobile:{state:"blocked",reason:"调试会话已断开"},companion:{state:"blocked",reason:"调试会话已断开"}},Ke&&Br())}finally{Ci=!1}}}function Br(){Be+=1,$n(),Y.mobileQrImage.removeAttribute("src"),Y.mobileQrStatus.textContent="Mobile 短链接配置无效"}function Gn(e){return JSON.stringify({devReadiness:e.devReadiness,defaultLanAddressId:e.defaultLanAddressId,lanAddresses:e.lanAddresses,mobileLaunchRedirect:e.mobileLaunchRedirect?{addressId:e.mobileLaunchRedirect.addressId,expiresAt:e.mobileLaunchRedirect.expiresAt,token:e.mobileLaunchRedirect.token}:void 0,devContext:{permissionContext:tt(e.devContext),expiresAt:e.devContext.expiresAt,localDevLaunchToken:e.devContext.localDevLaunchToken,miniProgramId:e.devContext.miniProgramId,source:e.devContext.source},nativeAppLaunchUnavailableReason:e.nativeAppLaunchUnavailableReason,miniProgramManifestAccessToken:e.miniProgramManifestAccessToken,miniProgramSupportsDesktop:e.miniProgramSupportsDesktop})}function Od(){if(!or){W.account={authenticated:!1,avatar:"",nickname:"未登录"};return}W.account={authenticated:!0,avatar:to??"",nickname:eo||it||"已登录"}}function Dd(e){if(e.miniProgram?.miniProgramId)return e.miniProgram;const t=e.devContext.miniProgramId?.trim();return t?{miniProgramId:t}:e.miniProgram??null}function Nd(e){if(!!!e?.miniProgramId||!e){W.miniProgram={bound:!1,iconUrl:"",name:"未绑定小程序",detail:"本地调试"};return}W.miniProgram={bound:!0,iconUrl:e.iconUrl??"",name:e.name||e.miniProgramId,detail:[e.miniProgramId,e.version].filter(Boolean).join(" · ")}}function XE(e){if(e===null)return null;if(!ue(e))return;const t=ie(e.miniProgramId)??ie(e.mini_program_id);if(t)return{miniProgramId:t,...ie(e.name)?{name:ie(e.name)}:{},...ie(e.iconUrl)??ie(e.icon_url)?{iconUrl:ie(e.iconUrl)??ie(e.icon_url)}:{},...ie(e.status)?{status:ie(e.status)}:{},...ie(e.version)?{version:ie(e.version)}:{},...ie(e.developerName)??ie(e.developer_name)?{developerName:ie(e.developerName)??ie(e.developer_name)}:{}}}function ie(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function jn(){const e=++xr,t=We,r=t?.diagnostics.storage;if(!r){W.storage=[],W.storageError=t?"当前 Host 不支持 Storage 诊断":"";return}try{const n=await r.getSnapshot();if(Q||e!==xr||t!==We)return;W.storage=n.map(i=>({area:i.area,key:i.key,serializedValue:i.serializedValue,bytes:i.bytes})),W.storageError=""}catch(n){if(Q||e!==xr||t!==We)return;W.storage=[],W.storageError=To(n)}}function ZE(e,t){Ie("host.message",{message:e,status:t})}function ew(e){Q||ZE(To(e),"error")}function Ie(e,t){cr(e,t)}function tw(){io!==void 0&&window.clearTimeout(io),!Q&&(Q=!0,window.removeEventListener("hb-sdk:restart-runtime",bd),window.removeEventListener("hb-sdk:refresh-storage",jn),window.removeEventListener("hb-sdk:qr-open-change",wd),qn+=1,zn.abort(new DOMException("Browser Dev Host disposed","AbortError")),Dt.dispose(),Ce+=1,ar("Browser Dev Host disposed"),Fr?.close(),Ze?.dispose(),Ze=void 0,no.dispose(),ir=void 0,It!==void 0&&window.clearTimeout(It),It=void 0,$n(),Ji!==void 0&&window.clearInterval(Ji),In.clear(),Xi?.(),Xi=void 0,Zi?.(),Zi=void 0)}function $n(){Hr!==void 0&&window.clearTimeout(Hr),Hr=void 0}function Pd(e,t){return t?AbortSignal.any([e,t]):e}function Td(e){return!Q&&e===qn}function rw(){return Fe.find(({id:e})=>e===Y.mobileLanSelect.value)}function nw(e){return ue(e)&&typeof e.address=="string"&&typeof e.appUrl=="string"&&typeof e.id=="string"&&typeof e.name=="string"&&(e.mobileAppQrPayload===void 0||typeof e.mobileAppQrPayload=="string")}function Cd(e){if(!(!ue(e)||typeof e.addressId!="string"||!e.addressId||typeof e.expiresAt!="number"||!Number.isFinite(e.expiresAt)||typeof e.token!="string"||!/^[A-Za-z0-9_-]{22}$/.test(e.token)))return{addressId:e.addressId,expiresAt:e.expiresAt,token:e.token}}function Ld(e){return{networkRequest:{...e.networkRequest}}}function iw(e,t){return e.networkRequest.status===t.networkRequest.status&&e.networkRequest.useOfficialDomain===t.networkRequest.useOfficialDomain}function To(e){return e instanceof Error&&e.message?e.message:"操作失败"}function ue(e){return Object.prototype.toString.call(e)==="[object Object]"}function Ut(e){const t=document.querySelector(e);if(!t)throw new Error(`Missing Browser Dev Host element: ${e}`);return t}
|