@heybox/hb-sdk 0.8.2-alpha.5 → 0.8.2-alpha.6
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 +12 -0
- package/README.md +5 -2
- package/dist/cli-chunks/{build-D2T3ky_9.cjs → build-TOcahJhW.cjs} +5 -5
- package/dist/cli-chunks/{context-DEgmdpSL.cjs → context-Bk0adtVQ.cjs} +2 -2
- package/dist/cli-chunks/{create-DKqQhrG5.cjs → create-BxIgQ4SF.cjs} +1 -1
- package/dist/cli-chunks/{dev-BEXM7cmq.cjs → dev-CyhKTGGJ.cjs} +9 -9
- package/dist/cli-chunks/{doctor-B7UixGrd.cjs → doctor-ItlNn-K2.cjs} +25 -13
- package/dist/cli-chunks/{index-BtwfuoWI.cjs → index-CP14FXez.cjs} +16 -16
- package/dist/cli-chunks/{index-C69OtRug.cjs → index-CjWRMwuI.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-C86KlVdK.cjs → index.esm-deP-KEyE.cjs} +7 -7
- package/dist/cli-chunks/{login-Bp_HMx-i.cjs → login-4B-2nqgd.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-DZxipd13.cjs → project-vite-HKW4tSBX.cjs} +1 -1
- package/dist/cli-chunks/{remote-B_sVsbQP.cjs → remote-BLdGzViG.cjs} +7 -7
- package/dist/cli-chunks/{runtime-gate-GR9jZd37.cjs → runtime-gate-B_fHNic6.cjs} +1 -1
- package/dist/cli-chunks/{runtime-permission-env-COWketgE.cjs → runtime-permission-env-CAhESVDA.cjs} +1 -1
- package/dist/cli-chunks/{session-6-AApcTZ.cjs → session-COr9TQ6O.cjs} +1 -1
- package/dist/cli-chunks/{skill-CPDLk7t7.cjs → skill-DiZSczbw.cjs} +2 -2
- package/dist/cli-chunks/{version-hHrSPRwW.cjs → version-tRrcrp9F.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/{browser-dev-host-CpwQQhA1.js → browser-dev-host-CF7IQARw.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-BdWBOIvY.js → desktop-app-launch-CQmXIMyL.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-BQSEynx6.js → index-DdKYO0um.js} +3 -3
- package/dist/devtools/browser-dev-host/index.html +2 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/templates/vanilla-vite-js/README.md.ejs +3 -0
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +7 -7
- package/skill/SKILL.md +22 -128
- package/skill/skill.json +5 -5
- package/types/skill-metadata.d.ts +2 -2
- package/skill/references/api-protocol.md +0 -317
- package/skill/references/api-root.md +0 -1244
- package/skill/references/cli.md +0 -401
- package/skill/references/examples.md +0 -204
- package/skill/references/llms-index.md +0 -24
- package/skill/references/recipes.md +0 -855
- package/skill/references/safety-boundaries.md +0 -63
- package/skill/references/smoke-evaluation.md +0 -26
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{H as ji,aw as Ac,aV as bc,K as Sc,aE as Rc,aF as Oc,ak as qt,b0 as q,ab as Pc,al as xs,an as Dc,c as zi,a9 as Nc,as as Fs,p as vc,ay as Tc}from"./desktop-app-launch-BdWBOIvY.js";const mn="auth.login",gn="user.getInfo",pn="user.revokeAuthorization",En="user.getSteamGameList",yn="share.copyLink",wn="share.showShareMenu",_n="share.screenshot",In="viewport.getWindowInfo",An="viewport.setNavigationBarStyle",vt="storage.getStorage",Tt="storage.setStorage",bn="network.request",Sn="network.download",Rn="files.pickFiles",On="files.pickDirectory",Pn="files.saveFile",Ct="file.create",Lt="file.remove",Dn="file.exists",kt="file.readText",Nn="file.writeText",Mt="file.readBytes",vn="file.writeBytes",Ut="file.stat",Tn="directory.create",Ht="directory.remove",Cn="directory.exists",Ln="directory.list",kn="ui.showToast",Mn="ui.showLoading",Un="ui.hideLoading",Hn="device.vibrate",xn="device.setClipboard",Fn="navigation.close",Bn="navigation.reload",Vn="navigation.openAppPage",Re="cloud.leaderboard.submit",fe="cloud.leaderboard.getList",Le="cloud.leaderboard.getCurrentUserEntry",We="cloud.leaderboard.deleteCurrentUserEntry",we="cloud.leaderboard.getInfo",Yn="companion.getInfo",Qn="companion.getPreparationStatus",Xn="companion.prepare",Jn="companion.cancelPreparation",Zn="companion.getActiveSession",er="companion.launch",tr="companion.session.write",nr="companion.session.closeStdin",rr="companion.session.terminate",ir="companion.session.ackOutput",or="companion.openAttachment",sr="companion.showNotification",ke=[{method:mn,module:"auth",capability:mn,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:gn,module:"user",capability:gn,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:pn,module:"user",capability:pn,requirement:{kind:"none"},risk:"high"},{method:En,module:"user",capability:En,requirement:{kind:"all",permissions:["steamLibrary"]},risk:"high"},{method:yn,module:"share",capability:yn,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:wn,module:"share",capability:wn,requirement:{kind:"all",permissions:["share"]},risk:"low"},{method:_n,module:"share",capability:_n,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:In,module:"viewport",capability:In,requirement:{kind:"none"},risk:"low"},{method:An,module:"viewport",capability:An,requirement:{kind:"none"},risk:"low"},{method:vt,module:"storage",capability:vt,requirement:{kind:"all",permissions:["storage"]},risk:"low"},{method:Tt,module:"storage",capability:Tt,requirement:{kind:"all",permissions:["storage"]},risk:"medium"},{method:bn,module:"network",capability:bn,requirement:{kind:"all",permissions:["network"]},risk:"high"},{method:Sn,module:"network",capability:Sn,requirement:{kind:"all",permissions:["network","filesystem"]},risk:"high"},{method:Rn,module:"files",capability:Rn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:On,module:"files",capability:On,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Pn,module:"files",capability:Pn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ct,module:"file",capability:Ct,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Lt,module:"file",capability:Lt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Dn,module:"file",capability:Dn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:kt,module:"file",capability:kt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Nn,module:"file",capability:Nn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Mt,module:"file",capability:Mt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:vn,module:"file",capability:vn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ut,module:"file",capability:Ut,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Tn,module:"directory",capability:Tn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ht,module:"directory",capability:Ht,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Cn,module:"directory",capability:Cn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ln,module:"directory",capability:Ln,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:kn,module:"ui",capability:kn,requirement:{kind:"none"},risk:"low"},{method:Mn,module:"ui",capability:Mn,requirement:{kind:"none"},risk:"low"},{method:Un,module:"ui",capability:Un,requirement:{kind:"none"},risk:"low"},{method:Hn,module:"device",capability:Hn,requirement:{kind:"none"},risk:"low"},{method:xn,module:"device",capability:xn,requirement:{kind:"all",permissions:["clipboard"]},risk:"medium"},{method:Fn,module:"navigation",capability:Fn,requirement:{kind:"none"},risk:"medium"},{method:Bn,module:"navigation",capability:Bn,requirement:{kind:"none"},risk:"medium"},{method:Vn,module:"navigation",capability:Vn,requirement:{kind:"none"},risk:"medium"},{method:Re,module:"cloud",capability:Re,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:fe,module:"cloud",capability:fe,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},{method:Le,module:"cloud",capability:Le,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:We,module:"cloud",capability:We,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:we,module:"cloud",capability:we,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},...[Yn,Qn,Xn,Jn,Zn,er,tr,nr,rr,ir,or,sr].map(e=>({method:e,module:"companion",capability:e,requirement:{kind:"all",permissions:["companion"]},risk:"high"}))],xe="heybox:miniprogram",Bs=2,Cc="hb_mini_bridge_nonce",Vs="sdk.handshake",Qt="runtime.location.probe",Lc="sdk.location.report",kc="sdk.csp.violation",qs="operation.progress",Mc="companion.session.output",Uc="companion.session.exit",Hc="companion.session.ownershipLost";function xc(e){return!He(e)||e.namespace!==xe||e.version!==1&&e.version!==2||!ee(e.nonce)?!1:e.type==="handshake"?ee(e.id)&&e.method===Vs&&e.error===void 0&&qc(e.payload):e.type==="request"?ee(e.id)&&ee(e.method)&&e.error===void 0:e.type==="response"?ee(e.id)&&(e.method===void 0||ee(e.method))&&(e.error===void 0||Gc(e.error)):e.type==="event"?!ee(e.method)||e.error!==void 0?!1:e.method===qs?e.version===2&&ee(e.id)&&Vc(e.payload):e.id===void 0||ee(e.id):e.type==="cancel"?e.version===2&&ee(e.id)&&e.method===void 0&&e.payload===void 0&&e.error===void 0:!1}function bi(e){return typeof e!="string"||!e||e.startsWith("/")||e.endsWith("/")||/[\\\u0000-\u001f\u007f]/.test(e)?!1:e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function Gs(e){return He(e)?e.kind==="sandbox"?Oe(e,["kind"]):e.kind==="directory"&&ee(e.handleId)&&Oe(e,["kind","handleId"]):!1}function Si(e){return!He(e)||e.kind!=="file"?!1:ee(e.handleId)?Oe(e,["kind","handleId"]):Gs(e.root)&&bi(e.relativePath)&&Oe(e,["kind","root","relativePath"])}function $s(e){return!He(e)||e.kind!=="directory"?!1:ee(e.handleId)?Oe(e,["kind","handleId"]):Gs(e.root)&&(e.relativePath==="."||bi(e.relativePath))&&Oe(e,["kind","root","relativePath"])}function js(e){return e instanceof Uint8Array&&e.buffer instanceof ArrayBuffer}function Fc(e){return!He(e)||!at(e.loaded)||typeof e.lengthComputable!="boolean"||!Oe(e,["loaded","total","lengthComputable"])?!1:e.lengthComputable?at(e.total)&&e.loaded<=e.total:e.total===void 0}function Bc(e){return He(e)?e.phase==="downloading"?at(e.loaded)&&(e.total===void 0||at(e.total)&&e.loaded<=e.total)&&Oe(e,["phase","loaded","total"]):e.phase!=="verifying"&&e.phase!=="extracting"?!1:at(e.processed)&&at(e.total)&&e.processed<=e.total&&Oe(e,["phase","processed","total"]):!1}function Vc(e){return Fc(e)||Bc(e)}function qc(e){return He(e)&&ee(e.href)&&typeof e.userAgent=="string"&&ee(e.sdkVersion)}function Gc(e){return He(e)&&ee(e.code)&&typeof e.message=="string"}function at(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function ee(e){return typeof e=="string"&&e.length>0}function Oe(e,t){const n=new Set(t);return Object.keys(e).every(r=>n.has(r))}function He(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const ut=["identity","profile","steam_account"],$c=/^[a-z][a-z0-9-]{0,31}$/,zs=["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"],Ri=["userInfo","steamLibrary","share","storage","filesystem","clipboard","leaderboard","network","companion"];new Set(Ri);const jc=new Set(Ri);function zc(e){return jc.has(e)}function pt(e){if(!Xt(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,n={};for(const r of e.entries){if(!Xt(r)||typeof r.key!="string"||!r.key.trim())return{valid:!1,permissions:{}};const i=r.key.trim(),o=i==="network.request"?"network":i;if(t.has(o)||r.status!=="enabled"&&r.status!=="disabled")return{valid:!1,permissions:{}};if(t.add(o),!!zc(o)){if(o==="network"){const s=r.config;if(!Xt(s)||typeof s.useOfficialDomain!="boolean")return{valid:!1,permissions:{}};n[o]={key:o,status:r.status,config:{useOfficialDomain:s.useOfficialDomain}};continue}if(r.config!==null&&r.config!==void 0&&(!Xt(r.config)||Object.keys(r.config).length>0))return{valid:!1,permissions:{}};n[o]={key:o,status:r.status,config:{}}}}return{valid:!0,permissions:n}}function Xt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}ke.map(e=>e.method);function x(e,t,n){return{code:e,message:t,data:n}}function Ws(e){return Wc(e)?{code:e.code,message:e.message,data:e.data}:e instanceof Error?x("RUNTIME_ERROR",e.message):x("UNKNOWN_ERROR","小程序运行时异常",e)}function Wc(e){return!!e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"}function Kc(){try{return{activeElement:globalThis.document?.activeElement??null,userActivation:globalThis.navigator?.userActivation}}catch{return{activeElement:null}}}const Yc=1e3;function Qc(e,t=Kc()){if(t.userActivation)return t.userActivation.isActive===!0;const n=t.lastUserInteractionAt,r=t.now??Date.now();return t.activeElement===e&&n!==void 0&&r>=n&&r-n<=Yc}const Xc="runtime.gate.probe",Ks=new Set(ke.map(e=>e.method));class Jc{iframe;nonce;onReady;onHandshake;onDuplicateHandshake;onInternalEvent;onResponsePosted;handleMessage;handleUserInteraction;dispatcher;environmentInfo;started=!1;destroyed=!1;handshaken=!1;bridgeVersion=Bs;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:xe,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:"unload",payload:{timestamp:Date.now()}})}catch{}finally{window.removeEventListener("message",this.handleMessage);for(const n of["pointerdown","touchend","mousedown","keydown"])window.removeEventListener(n,this.handleUserInteraction,!0);this.lastUserInteractionAt=void 0;for(const n of this.operations.values())n.abort("bridge destroyed");this.operations.clear()}}postEvent(t,n){this.destroyed||this.postMessage({namespace:xe,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:t,payload:n})}postInternalRequest(t,n,r){this.destroyed||this.postMessage({namespace:xe,version:this.bridgeVersion,nonce:this.nonce,type:"request",id:n,method:t,payload:r})}postProgress(t,n){this.bridgeVersion===2&&this.postMessage({namespace:xe,version:2,nonce:this.nonce,type:"event",id:t,method:qs,payload:n})}onMessage(t){if(!this.started||!this.isTrustedMiniProgramMessage(t))return;const n=t.data;if(n.type==="handshake"){this.handleHandshake(n,t.origin);return}if(n.type==="request"){let r=!1;try{r=Qc(this.iframe,{activeElement:document.activeElement,userActivation:navigator.userActivation,lastUserInteractionAt:this.lastUserInteractionAt,now:Date.now()})}catch{r=!1}this.handleRequest(n,r);return}if(n.type==="cancel"&&this.handshaken&&n.id){this.operations.get(n.id)?.abort();return}n.type==="event"&&this.handshaken&&this.onInternalEvent?.(n)}onUserInteraction(t){const n=typeof t.composedPath=="function"?t.composedPath():[];(t.target===this.iframe||n.includes(this.iframe))&&(this.lastUserInteractionAt=Date.now())}isTrustedMiniProgramMessage(t){return t.source===this.iframe.contentWindow&&xc(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,n){const r=t.payload,i=t.version,o=!this.handshaken;if(o){if(this.onHandshake?.(r)===!1)return;this.bridgeVersion=i,i===1&&this.targetOrigin!=="*"&&n&&n!=="null"&&(this.targetOrigin=n),this.handshaken=!0,this.postEvent("launch",{timestamp:Date.now(),url:this.iframe.src})}this.environmentInfo&&t.id&&this.postMessage({namespace:xe,version:this.bridgeVersion,nonce:this.nonce,type:"response",id:t.id,method:Vs,payload:{environment:this.environmentInfo}}),this.postEvent("ready",{timestamp:Date.now()}),o?this.onReady?.(r):this.onDuplicateHandshake?.()}async handleRequest(t,n){if(!t.id||!t.method)return;if(!this.handshaken&&t.method===Xc){this.postResponse(t,{ready:!0});return}if(!this.handshaken){this.postResponse(t,void 0,x("BRIDGE_NOT_READY","小程序 SDK 尚未完成握手"));return}if(!Ks.has(t.method)){this.postResponse(t,void 0,x("METHOD_NOT_FOUND",`未开放小程序能力: ${t.method}`));return}if(this.operations.has(t.id)){this.postResponse(t,void 0,x("INVALID_PARAMS","bridge request id 重复"));return}const r=new AbortController;this.operations.set(t.id,r);try{const i=await this.dispatcher.dispatch(t.method,t.payload,{postEvent:this.postEvent.bind(this),postProgress:o=>{this.operations.get(t.id)===r&&this.postProgress(t.id,o)},signal:r.signal,trustedUserGesture:n});if(i.status==="dropped"||!this.started||this.operations.get(t.id)!==r)return;this.postResponse(t,i.value)}catch(i){if(!this.started||this.operations.get(t.id)!==r)return;const o=Ws(i);this.postResponse(t,void 0,o),this.postEvent("error",o)}finally{this.operations.get(t.id)===r&&(this.operations.delete(t.id),r.signal.aborted||r.abort("operation terminal"))}}postResponse(t,n,r){if(!(!this.postMessage({namespace:xe,version:t.version,nonce:this.nonce,type:"response",id:t.id,method:t.method,payload:n,error:r})||!Zc(t.method)))try{this.onResponsePosted?.({method:t.method,outcome:r?"error":"success",...r?{errorCode:r.code}:{}})}catch{}}postMessage(t){const n=this.iframe.contentWindow;return n?(n.postMessage(t,this.targetOrigin),!0):!1}}function Zc(e){return typeof e=="string"&&Ks.has(e)}const Ys="METHOD_FORBIDDEN";function Ae(e){const t=new Error(`小程序能力已禁用: ${e}`);return t.name="MethodForbiddenError",t.code=Ys,t}class J extends Error{code="HOST_REQUEST_UNSUPPORTED";constructor(t="当前 Host 不支持该请求形状",n){super(t),this.name="HostRequestUnsupportedError",n&&"cause"in n&&Object.defineProperty(this,"cause",{configurable:!0,enumerable:!1,value:n.cause}),Object.setPrototypeOf(this,new.target.prototype)}}const Wi={[mn]:["account.getCurrentUserId","account.ensureAuthenticated","account.onChange","network.request"],[gn]:["account.getCurrentUserId","account.onChange","network.request"],[pn]:["account.getCurrentUserId","account.onChange","network.request"],[En]:["account.getCurrentUserId","account.onChange","network.request"],[yn]:["presentation.setClipboard"],[wn]:["presentation.showShareMenu"],[_n]:["presentation.getViewportMetrics","presentation.captureAndShare"],[In]:["presentation.getViewportMetrics","presentation.getNavigationBarHeight"],[An]:["presentation.setNavigationBarStyle"],[vt]:["storage.getRaw"],[Tt]:["storage.setRaw"],[bn]:["network.request"],[Sn]:["network.stream","files.transfer","files.access"],[Rn]:["files.external"],[On]:["files.external"],[Pn]:["files.save"],[Ct]:["files.access"],[Lt]:["files.removeFile"],[Dn]:["files.access"],[kt]:["files.access"],[Nn]:["files.access"],[Mt]:["files.access"],[vn]:["files.access"],[Ut]:["files.access"],[Tn]:["files.access"],[Ht]:["files.removeDirectory"],[Cn]:["files.access"],[Ln]:["files.access"],[kn]:["presentation.showToast"],[Mn]:["presentation.showLoading"],[Un]:["presentation.hideLoading"],[Hn]:["presentation.vibrate"],[xn]:["presentation.setClipboard"],[Fn]:["presentation.close"],[Bn]:["presentation.reload"],[Vn]:["presentation.openAppPage"],[Re]:["account.getCurrentUserId","account.onChange","network.request"],[fe]:["account.onChange","network.request"],[Le]:["account.getCurrentUserId","account.onChange","network.request"],[We]:["account.getCurrentUserId","account.onChange","network.request"],[we]:["account.onChange","network.request"],[Yn]:["companion.getInfo"],[Qn]:["companion.getPreparationStatus"],[Xn]:["companion.getInfo","companion.getPreparationStatus","companion.prepare"],[Jn]:["companion.cancelPreparation"],[Zn]:["companion.getActiveSession"],[er]:["companion.getInfo","companion.launch"],[tr]:["companion.session.write"],[nr]:["companion.session.closeStdin"],[rr]:["companion.session.terminate"],[ir]:["companion.session.ackOutput"],[or]:["companion.openAttachment"],[sr]:["companion.showNotification"]};function ed(e,t){if(t[e]!==!0)throw Ae(e)}const td=32*1024*1024,nd=/^application\/(?:[a-z0-9!#$&^_.+-]+\+)?json(?:\s*;|$)/i;function rd(e){if(e.mode==="request-only")return{network:{request:(r,i)=>e.request(r,i)}};if(e.mode==="override-request")return{network:{request:(r,i)=>e.request(r,i)},...e.stream===void 0?{}:{stream:e.stream}};const{consume:t,stream:n}=e;return{stream:n,network:{async request(r,i){const o=await n.open(r,i);let s;try{const a=await t(o.body,{maxBytes:td},i);return id(o,a)}catch(a){throw s=a,a}finally{try{await n.release(o.body)}catch(a){if(s===void 0)throw a}}}}}}function id(e,t){const n=Object.fromEntries(Object.entries(e.headers).map(([r,i])=>[r,i.join(", ")]));return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:n,data:od(t,ad(e,"content-type"))}}function od(e,t){sd(t);let n;try{n=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch(r){throw new J("Host network response 不是合法 UTF-8 文本",{cause:r})}if(n.charCodeAt(0)===65279&&(n=n.slice(1)),!t||!nd.test(t)||n==="")return n;try{return JSON.parse(n)}catch{return n}}function sd(e){if(!e)return;const t=/(?:^|;)\s*charset\s*=\s*["']?([^;"'\s]+)/i.exec(e)?.[1];if(t&&!/^utf-?8$/i.test(t))throw new J(`Host network response 不支持 charset=${t}`)}function ad(e,t){return Object.entries(e.headers).find(([n])=>n.toLowerCase()===t)?.[1]?.[0]}function _(e){return typeof e=="function"}function Ki(e){return(...t)=>{throw Ae(e)}}function X(e){return async(...t)=>{throw Ae(e)}}const cd=(e,t)=>{},dd=()=>()=>{};function ud(e){const t={request:_(e.network?.request)?e.network.request.bind(e.network):X("network.request")},n={getCurrentUserId:_(e.account?.getCurrentUserId)?e.account.getCurrentUserId.bind(e.account):X("account.getCurrentUserId"),ensureAuthenticated:_(e.account?.ensureAuthenticated)?e.account.ensureAuthenticated.bind(e.account):X("account.ensureAuthenticated"),onChange:_(e.account?.onChange)?e.account.onChange.bind(e.account):dd},r={getRaw:_(e.storage?.getRaw)?e.storage.getRaw.bind(e.storage):X("storage.getRaw"),setRaw:_(e.storage?.setRaw)?e.storage.setRaw.bind(e.storage):X("storage.setRaw")},i={close:_(e.presentation?.close)?e.presentation.close.bind(e.presentation):X("presentation.close"),reload:_(e.presentation?.reload)?e.presentation.reload.bind(e.presentation):X("presentation.reload"),openAppPage:_(e.presentation?.openAppPage)?e.presentation.openAppPage.bind(e.presentation):X("presentation.openAppPage"),getViewportMetrics:_(e.presentation?.getViewportMetrics)?e.presentation.getViewportMetrics.bind(e.presentation):Ki("presentation.getViewportMetrics"),getNavigationBarHeight:_(e.presentation?.getNavigationBarHeight)?e.presentation.getNavigationBarHeight.bind(e.presentation):Ki("presentation.getNavigationBarHeight"),setNavigationBarStyle:_(e.presentation?.setNavigationBarStyle)?e.presentation.setNavigationBarStyle.bind(e.presentation):X("presentation.setNavigationBarStyle"),showShareMenu:_(e.presentation?.showShareMenu)?e.presentation.showShareMenu.bind(e.presentation):X("presentation.showShareMenu"),setScreenshotChromeHidden:_(e.presentation?.setScreenshotChromeHidden)?e.presentation.setScreenshotChromeHidden.bind(e.presentation):cd,captureAndShare:_(e.presentation?.captureAndShare)?e.presentation.captureAndShare.bind(e.presentation):X("presentation.captureAndShare"),showToast:_(e.presentation?.showToast)?e.presentation.showToast.bind(e.presentation):X("presentation.showToast"),showLoading:_(e.presentation?.showLoading)?e.presentation.showLoading.bind(e.presentation):X("presentation.showLoading"),hideLoading:_(e.presentation?.hideLoading)?e.presentation.hideLoading.bind(e.presentation):X("presentation.hideLoading"),vibrate:_(e.presentation?.vibrate)?e.presentation.vibrate.bind(e.presentation):X("presentation.vibrate"),setClipboard:_(e.presentation?.setClipboard)?e.presentation.setClipboard.bind(e.presentation):X("presentation.setClipboard")},o=_(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,_(e.companion?.[a])?e.companion[a].bind(e.companion):X(`companion.${a}`)]));return _(e.companion?.onSessionEvent)&&(s.onSessionEvent=e.companion.onSessionEvent.bind(e.companion)),{network:t,account:n,storage:r,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 ld(e){const t=fd(e.files?.sandbox),n=_(e.picker?.pickFiles)&&_(e.picker?.pickDirectory),r=_(e.picker?.saveFile),i=t||n||r||_(e.companion?.openAttachment),o=t?e.files?.sandbox.file(".hb-remove-capability"):void 0;return{"account.getCurrentUserId":_(e.account?.getCurrentUserId),"account.ensureAuthenticated":_(e.account?.ensureAuthenticated),"account.onChange":_(e.account?.onChange),"network.request":_(e.network?.request),"network.stream":_(e.transfer?.network.open)&&_(e.transfer?.network.release),"files.sandbox":t,"files.external":n,"files.save":r,"files.access":i,"files.removeFile":_(o?.remove),"files.removeDirectory":_(e.files?.sandbox.remove),"files.transfer":_(e.transfer?.files.writeResource),"storage.getRaw":_(e.storage?.getRaw),"storage.setRaw":_(e.storage?.setRaw),"presentation.close":_(e.presentation?.close),"presentation.reload":_(e.presentation?.reload),"presentation.openAppPage":_(e.presentation?.openAppPage),"presentation.getViewportMetrics":_(e.presentation?.getViewportMetrics),"presentation.getNavigationBarHeight":_(e.presentation?.getNavigationBarHeight),"presentation.setNavigationBarStyle":_(e.presentation?.setNavigationBarStyle),"presentation.showShareMenu":_(e.presentation?.showShareMenu),"presentation.setScreenshotChromeHidden":!0,"presentation.captureAndShare":_(e.presentation?.captureAndShare),"presentation.showToast":_(e.presentation?.showToast),"presentation.showLoading":_(e.presentation?.showLoading),"presentation.hideLoading":_(e.presentation?.hideLoading),"presentation.vibrate":_(e.presentation?.vibrate),"presentation.setClipboard":_(e.presentation?.setClipboard),"companion.getInfo":_(e.companion?.getInfo),"companion.getPreparationStatus":_(e.companion?.getPreparationStatus),"companion.prepare":_(e.companion?.prepare),"companion.cancelPreparation":_(e.companion?.cancelPreparation),"companion.getActiveSession":_(e.companion?.getActiveSession),"companion.launch":_(e.companion?.launch),"companion.session.write":_(e.companion?.write),"companion.session.closeStdin":_(e.companion?.closeStdin),"companion.session.terminate":_(e.companion?.terminate),"companion.session.ackOutput":_(e.companion?.ackOutput),"companion.openAttachment":_(e.companion?.openAttachment),"companion.showNotification":_(e.companion?.showNotification)}}function fd(e){if(!e||typeof e!="object")return!1;const t=e;return t.kind==="directory"&&(t.mode==="read"||t.mode==="readwrite")&&_(t.file)&&_(t.directory)&&_(t.create)&&_(t.stat)&&_(t.list)}function Yi(e,t){return t?.[e]!==!1}function hd(e){return e==="network.download"||e.startsWith("files.")||e.startsWith("file.")||e.startsWith("directory.")||e.startsWith("companion.")}function Qs(e,t={}){const n={};for(const r of Object.keys(Wi)){const o=Wi[r].every(a=>e[a]),s=!hd(r)||!!t.miniProgramDetail?.miniProgramId.trim();n[r]=Yi(r,t.callerCapabilities)&&Yi(r,t.hostCapabilities)&&o&&s}return n}function Xs(e={},t={}){const n=ld(e),r=Qs(n,t);return{ports:ud(e),primitiveAvailability:n,availablePrimitives:n,effectiveCapabilities:r}}function Oi(e,t){if(!t||t===e.signal)return e;const n=typeof AbortSignal.any=="function"?AbortSignal.any([e.signal,t]):md(e.signal,t);return{...e,signal:n}}function md(e,t){const n=new AbortController,r=()=>{e.removeEventListener("abort",o),t.removeEventListener("abort",s)},i=a=>{n.signal.aborted||(r(),n.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})),n.signal}function gd(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 pd=4,Ed=["xiaoheihe.cn","max-c.com","debugmode.cn","maxjia.com"],yd=new Set(["connection","content-length","host","keep-alive","proxy-connection","te","trailer","transfer-encoding","upgrade"]),wd=["/user_miniprogram/runtime/auth","/user_miniprogram/openapi/v1"],_d=["/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 Id(e,t){const n=Sd(e);return n===null||Qi(n,wd)?!0:t&&Qi(n,_d)}function Ad(e){const t=e.hostname.toLowerCase().replace(/\.$/,"");return Ed.some(n=>t===n||t.endsWith(`.${n}`))}function bd(e){const t=e.trim().toLowerCase();return yd.has(t)||/^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(t)}function Sd(e){let t=e;for(let n=0;n<pd;n+=1){let r;try{r=decodeURIComponent(t)}catch{return null}if(r===t)return Xi(t);t=r}try{if(decodeURIComponent(t)!==t)return null}catch{return null}return Xi(t)}function Qi(e,t){return t.some(n=>e===n||e.startsWith(`${n}/`))}function Xi(e){const t=[];for(const n of e.replace(/\\/g,"/").split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return`/${t.join("/")}`}function l(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Rd(e){return typeof e=="object"&&e!==null}function ae(e,t){const n=e.data;if(!Rd(n)||typeof n.status!="string")throw new Error(t);return n}const Js={auth:"optional",channel:"api",id:"heybox.account.user_base_info.envelope.get",method:"GET",path:"/account/get_user_base_info"},Od={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 ae(e,"工坊小程序详情加载失败")}};function Gt(e){const t=e.runtimeAuthContextToken?.trim();return{mini_program_id:e.miniProgramId,...t?{runtime_auth_context_token:t}:{}}}function Pd(e){return{challenge:e.challenge,expiresIn:e.expires_in,requestedScopes:e.requested_scopes||[],displayedScopes:e.displayed_scopes||[],consentUiVersion:e.consent_ui_version}}function Dd(e){const t=ae(e,"小程序登录授权接口响应异常"),n=t.result,r={};if(n.login_code&&typeof n.login_code=="object"){const i=n.login_code;r.loginCode={code:i.code,expiresIn:i.expires_in,scopes:i.scopes||[]}}return n.consent_challenge&&typeof n.consent_challenge=="object"&&(r.consentChallenge=Pd(n.consent_challenge)),{...t,result:r}}const Nd={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=>({...Gt(e.runtimeContext),challenge:e.challenge}),parse:e=>ae(e,"小程序授权取消接口响应异常")},vd={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=>Gt(e.runtimeContext),parse:e=>ae(e,"小程序授权撤销接口响应异常")},Td={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=>Gt(e.runtimeContext),parse(e){const t=ae(e,"小程序隔离身份接口响应异常"),n=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,...n?{steamId:n}:{}}}}},Cd={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=>({...Gt(e.runtimeContext),...e.scopes?.length?{scopes:e.scopes.join(",")}:{}}),parse:e=>Dd(e)},Ld={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=>({...Gt(e.runtimeContext),challenge:e.challenge,...e.selectedScopes.length?{selected_scopes:e.selectedScopes.join(",")}:{}}),parse(e){const t=ae(e,"小程序登录确认接口响应异常");return{...t,result:{code:t.result.code,expiresIn:t.result.expires_in,scopes:t.result.scopes}}}};function kd(e){const t=pt(e);return t.valid&&t.permissions.network?.status==="enabled"}function Zs(e,t){return t?e?"server":"local":"legacy"}function Md(e,t){return Zs(kd(e),t)}function Ji(e,t){if(e==="server")throw l("SERVER_API_REQUIRED",`${t} 在联网模式下必须通过开发者服务端 OpenAPI 获取`)}function Ud(e,t){if(e==="local")throw l("SERVER_API_REQUIRED",`${t} 需要 effective network 启用后才能使用`)}const Hd=["baseURL","errorMode","jsonParseMode","observability","queryEncoding","responseType","security"],xd=new Set(["auth","body","bodyEncoding","channel","failurePresentation","headers","id","method","parse","path","query","timeout"]),Fd=/authorization|cookie|pkey|password|secret|token/i,ea=/authorization|cookie|pkey|token|password|secret/i;function pe(e,t){return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Bd(e){for(const t of Object.keys(e))if(!xd.has(t))throw new J(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);for(const t of Hd)if(Object.prototype.hasOwnProperty.call(e,t)&&pe(e,t)!==void 0)throw new J(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);if(pe(e,"bodyEncoding")!==void 0&&pe(e,"bodyEncoding")!=="json"&&pe(e,"bodyEncoding")!=="form")throw new J("endpoint bodyEncoding 不受 HostNetworkPort 支持");if(pe(e,"failurePresentation")!==void 0&&pe(e,"failurePresentation")!=="none")throw new J("endpoint failurePresentation 必须为 none");if(pe(e,"auth")!==void 0&&pe(e,"auth")!=="none"&&pe(e,"auth")!=="optional"&&pe(e,"auth")!=="required")throw new J("endpoint auth 必须为 none、optional 或 required")}function St(e){if(Array.isArray(e))return e.map(St);if(!e||typeof e!="object")return e;const t=e,n={};for(const[r,i]of Object.entries(t))Fd.test(r)||(n[r]=St(i));return n}function Zi(e){if(!e)return;const t={};for(const[n,r]of Object.entries(e))ea.test(n)||(t[n]=r);return t}function Vd(e){if(!e)return;const t=Object.keys(e).find(n=>ea.test(n));if(t)throw new J(`endpoint 禁止声明 credential-bearing header: ${t}`)}class lt extends Error{code="INTERNAL_ENDPOINT_HTTP_STATUS";endpointId;status;constructor(t){super(`内部 endpoint 请求失败: HTTP ${t.status}`),this.name="InternalEndpointHttpStatusError",this.endpointId=t.endpointId,this.status=t.status,Object.setPrototypeOf(this,new.target.prototype)}}function ta(e,t){Object.defineProperty(e,"cause",{configurable:!1,enumerable:!1,value:t,writable:!1})}class ft extends Error{code="INTERNAL_ENDPOINT_REQUEST_FAILED";endpointId;constructor(t){super(`内部 endpoint 请求执行失败: ${t.endpointId}`),this.name="InternalEndpointRequestError",this.endpointId=t.endpointId,ta(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}class $t extends Error{code="INTERNAL_ENDPOINT_PARSE_FAILED";endpointId;constructor(t){super(`内部 endpoint 响应解析失败: ${t.endpointId}`),this.name="InternalEndpointParseError",this.endpointId=t.endpointId,ta(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}function qd(e,t,n,r,i,o,s,a){return{config:{auth:e.auth,body:St(i),bodyEncoding:e.bodyEncoding,channel:e.channel,credentials:s.credentials,headers:Zi(o),method:e.method,metadata:{endpointId:e.id},query:St(r),timeout:e.timeout,url:n},data:St(a.data),headers:Zi(a.headers)||{},status:a.status,statusText:a.statusText}}async function ar(e,t,n,r){if(!r||!r.signal)throw new TypeError("requestEndpoint requires an AbortSignal");if(r.credentials!=="heybox-session"&&r.credentials!=="omit")throw new TypeError("requestEndpoint requires explicit credentials");if(Bd(t),typeof t.id!="string"||!t.id)throw new J("endpoint id 必须为非空字符串");if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(t.method))throw new J("endpoint method 不受 HostNetworkPort 支持");const i=typeof t.path=="function"?await t.path(n):t.path;if(typeof i!="string"||!i)throw new J("endpoint path 必须为非空字符串");const o=t.query?await t.query(n):void 0,s=t.body?await t.body(n):void 0,a=t.headers?await t.headers(n):void 0;Vd(a);let c;try{c=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:r.credentials,...t.bodyEncoding===void 0?{}:{bodyEncoding:t.bodyEncoding},...t.timeout===void 0?{}:{timeout:t.timeout}},{signal:r.signal,...r.miniProgramDetail===void 0?{}:{miniProgramDetail:r.miniProgramDetail}})}catch(d){throw d instanceof J?d:new ft({endpointId:t.id,cause:d})}if(c.status<200||c.status>=300)throw new lt({endpointId:t.id,status:c.status});const u=qd(t,n,i,o,s,a,r,c);if(t.parse)try{return await t.parse(u,n)}catch(d){throw new $t({endpointId:t.id,cause:d})}return u.data}const Gd=new Set(ut),Pi="steam_account",na=new Set(ut.filter(e=>e!==Pi)),$d=1e3;function jd(e){const t=new Set,n=new Map,r=new Set;let i=0,o=!1,s=Promise.resolve(),a;const c=e.steamAccount===!0,u=e.userDataMode??Zs(e.networkEnabled===!0,c);async function d(){if(!c)return{};if(!e.authorizationContext)throw l("METHOD_FORBIDDEN","新能力版本缺少 Runtime auth context Port");let g;try{g=await e.authorizationContext.get(e.operationContext)}catch{throw l("REQUEST_FAILED","读取 Runtime auth context 失败")}if(g.steamAccount!==c||g.userDataMode!==u)throw l("AUTHORIZATION_CONTEXT_CHANGED","Runtime auth context 已变化,请重新打开小程序");const N=g.token.trim();if(!N)throw l("REQUEST_FAILED","Runtime auth context 为空");return{runtimeAuthContextToken:N}}const h=e.account.onChange(g=>{p(),f("heybox_app_login_change",{isHeyboxAppLoggedIn:!!g})});function p(){i+=1,a?.abort(),n.clear(),r.clear()}function f(g,N){for(const L of t)try{L(g,N)}catch{}}function A(){const g=e.identity.get()?.miniProgramId?.trim();if(!g)throw l("INVALID_STATE","当前能力缺少 canonical 小程序身份");return g}function w(){if(o||e.operationContext.signal.aborted)throw l("RUNTIME_DESTROYED","小程序 Runtime 已终止")}async function y(){w();let g;try{g=await e.account.getCurrentUserId(e.operationContext)}catch(N){throw ro(N,e.operationContext.signal,"读取小黑盒账号失败")}return typeof g=="string"&&g.trim()?g.trim():void 0}async function m(g,N){const L=await y();if(i!==N||L!==g)throw l("AUTHORIZATION_CONTEXT_CHANGED","授权期间账号上下文已变化,请重新操作")}async function b(g){w();try{await e.account.ensureAuthenticated({trustedUserGesture:g,reason:"runtime_auth",signal:e.operationContext.signal})}catch(L){throw ro(L,e.operationContext.signal,"小黑盒登录失败")}const N=await y();if(!N)throw l("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");return N}async function I(g,N,L=e.operationContext.signal){try{if(L.aborted)throw ti();return await Xd(ar(e.network,g,N,{...e.operationContext,credentials:"heybox-session",signal:L}),L)}catch(k){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):k instanceof J?l("REQUEST_UNSUPPORTED",k.message):k instanceof $t?l("INVALID_RESPONSE","授权接口响应不合法"):k instanceof ft?l("REQUEST_FAILED","授权请求失败"):k instanceof lt?l("REQUEST_FAILED",k.message):ra(k)?k:l("REQUEST_FAILED","授权请求失败")}}async function D(g,N){await I(Nd,{runtimeContext:{miniProgramId:g,...await d()},challenge:N}).catch(()=>{})}function B(g){const N=async()=>{const k=to(e.operationContext.signal);a=k;try{return await g(k.signal)}finally{a===k&&(a=void 0),k.abort()}},L=s.then(N,N);return s=L.then(()=>{},()=>{}),L}async function R(g,N,L,k,U){if(!L)throw await D(g,N.challenge),l("USER_GESTURE_REQUIRED","展示授权确认需要用户手势");if(!e.authPresentation)throw await D(g,N.challenge),l("AUTHORIZATION_PRESENTATION_UNAVAILABLE","授权确认界面不可用");return B(async z=>{await m(k,U);const $=await C(g,N.displayedScopes,z);await m(k,U);let Q;try{Q=await e.authPresentation.confirmAuthorization({miniProgramId:g,scopes:N.displayedScopes,...$,signal:z})}catch(ne){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):(await m(k,U),await D(g,N.challenge),zd("REQUEST_FAILED","授权确认界面执行失败",ne))}if(await m(k,U),Q.status!=="granted")throw await D(g,N.challenge),l("AUTHORIZATION_CANCELLED","用户取消授权");const W=Yd(Q.grantedScopes,N.displayedScopes,c);if(!W.includes("identity"))throw await D(g,N.challenge),l("AUTHORIZATION_CANCELLED","用户拒绝授权");return W})}async function C(g,N,L){const k=to(L),U=setTimeout(()=>k.abort(),$d);try{const z=Qd(e.miniProgramPresentation),[$,Q]=await Promise.all([z?Promise.resolve(z):T(g,k.signal),N.includes("profile")?S(k.signal):Promise.resolve(void 0)]);return{...$?{miniProgram:$}:{},...Q?{userProfile:Q}:{}}}finally{clearTimeout(U),k.abort()}}async function T(g,N){try{const L=e.identity.get()?.version?.trim(),k=await I(Od,{mini_program_id:g,...L?{miniprogram_version:L}:{}},N),U=et(k,"小程序公开资料"),z=ct(U.name),$=ct(U.icon_url);return z||$?{...z?{name:z}:{},...$?{avatarUrl:$}:{}}:void 0}catch{return}}async function S(g){try{const N=await I(Js,void 0,g),L=et(N,"账号基础信息"),k=ct(L.display_username),U=ct(L.display_avatar);return k||U?{...k?{nickname:k}:{},...U?{avatar:U}:{}}:void 0}catch{return}}async function E(g,N){if(Ud(u,"auth.login"),!c&&g.includes(Pi))throw l("INVALID_PARAMS","auth.login 参数不合法");const L=A(),k=await b(N),U=i,z=await I(Cd,{runtimeContext:{miniProgramId:L,...await d()},scopes:g});await m(k,U);const $=et(z,"小程序登录"),Q=no($,"loginCode"),W=no($,"consentChallenge");if(Q===W)throw l("INVALID_RESPONSE","小程序登录 begin 必须返回 exact oneof");let ne;if(Q)ne=eo($.loginCode,c);else{const Xe=Wd($.consentChallenge,c),Je=await R(L,Xe,N,k,U);await m(k,U);const Yt=await I(Ld,{runtimeContext:{miniProgramId:L,...await d()},challenge:Xe.challenge,selectedScopes:Je});if(await m(k,U),ne=eo(et(Yt,"小程序登录确认"),c),ne.scopes.some(ue=>!Je.includes(ue)))throw l("INVALID_RESPONSE","小程序登录确认返回了未选择的 scope")}r.clear();for(const Xe of ne.scopes)r.add(Xe);return f("heybox_app_login_change",{isHeyboxAppLoggedIn:!0}),f("user_info_authorization_change",pr(r,c)),ne}async function O(g,N){const L=i,k=await I(Td,{runtimeContext:{miniProgramId:N,...await d()}});await m(g,L);const U=Kd(et(k,"用户本地身份"),c);for(const z of c?ut:na)r.add(z);return f("user_info_authorization_change",pr(r,c)),U}function v(g){w();const N=A(),L=`${g}\0${N}`,k=n.get(L);if(k)return k;const U=O(g,N).finally(()=>{n.get(L)===U&&n.delete(L)});return n.set(L,U),U}async function P(g){if(!g)throw l("USER_GESTURE_REQUIRED","撤销授权需要用户手势");const N=A(),L=i,k=await y();if(!k)throw l("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");const U=await I(vd,{runtimeContext:{miniProgramId:N,...await d()}});await m(k,L),et(U,"用户授权撤销"),p(),f("user_info_authorization_change",{identity:"denied",profile:"denied",...c?{steam_account:"denied"}:{}})}return{login:E,getOrCreateLocalIdentity:v,getAuthorization:()=>pr(r,c),revoke:P,onEvent(g){return t.add(g),()=>t.delete(g)},dispose(){o||(o=!0,p(),h(),t.clear())}}}function zd(e,t,n){const r=l(e,t);return Object.defineProperty(r,"cause",{configurable:!0,enumerable:!1,value:n}),r}function et(e,t){if(!M(e))throw l("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const n=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,r=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw l(r,n)}if(!M(e.result))throw l("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function eo(e,t){if(!M(e))throw l("INVALID_RESPONSE","login code 必须是对象");const n=qn(e.scopes,"login code scopes",t);if(typeof e.code!="string"||!e.code.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!n.includes("identity"))throw l("INVALID_RESPONSE","login code 响应不合法");return{code:e.code,expiresIn:Number(e.expiresIn),scopes:n}}function Wd(e,t){if(!M(e))throw l("INVALID_RESPONSE","授权 challenge 必须是对象");const n=qn(e.requestedScopes,"challenge requestedScopes",t),r=qn(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||!n.length||!n.includes("identity")||!r.length||!r.includes("identity")||n.some(i=>!r.includes(i)))throw l("INVALID_RESPONSE","授权 challenge 响应不合法");return{challenge:e.challenge.trim(),requestedScopes:n,displayedScopes:r}}function Kd(e,t){if(!M(e)||typeof e.appUserId!="string"||!e.appUserId.trim())throw l("INVALID_RESPONSE","本地身份 appUserId 必须是非空字符串");const n=e.appUserId.trim();if(!t)return{appUserId:n};if(e.steamId!==void 0&&typeof e.steamId!="string")throw l("INVALID_RESPONSE","本地身份 steamId 必须是字符串");const r=typeof e.steamId=="string"&&e.steamId.trim()?e.steamId.trim():void 0;return r?{appUserId:n,steamId:r}:{appUserId:n}}function Yd(e,t,n){const r=qn(e,"授权选择 scopes",n);if(r.some(i=>!t.includes(i)))throw l("INVALID_RESPONSE","授权选择包含未展示的 scope");return r}function ct(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Qd(e){const t=ct(e?.name),n=ct(e?.avatarUrl);return t||n?{...t?{name:t}:{},...n?{avatarUrl:n}:{}}:void 0}function to(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 Xd(e,t){return t.aborted?Promise.reject(ti()):new Promise((n,r)=>{let i=!1;const o=a=>{i||(i=!0,t.removeEventListener("abort",s),a())},s=()=>o(()=>r(ti()));t.addEventListener("abort",s,{once:!0}),e.then(a=>o(()=>n(a)),a=>o(()=>r(a)))})}function ti(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function qn(e,t,n){const r=n?Gd:na;if(!Array.isArray(e)||e.some(i=>typeof i!="string"||!r.has(i))||new Set(e).size!==e.length)throw l("INVALID_RESPONSE",`${t} 不合法`);return[...e]}function pr(e,t){const n=t?ut:ut.filter(r=>r!==Pi);return Object.fromEntries(n.map(r=>[r,e.has(r)?"granted":"not_requested"]))}function no(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function ra(e){return M(e)&&typeof e.code=="string"&&typeof e.message=="string"}function ro(e,t,n){return t.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):ra(e)?e:l("REQUEST_FAILED",n)}const Jd=new Set(ut);function Zd(e){return{[mn]:async(t,n)=>e.authorization.login(eu(t),n.trustedUserGesture)}}function eu(e){if(e===void 0)return["identity"];if(!M(e)||Object.keys(e).some(t=>t!=="scopes"))throw io();if(e.scopes===void 0)return["identity"];if(!Array.isArray(e.scopes)||e.scopes.some(t=>typeof t!="string"||!Jd.has(t))||new Set(e.scopes).size!==e.scopes.length)throw io();return[...e.scopes]}function io(){return l("INVALID_PARAMS","auth.login 参数不合法")}const tu={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 ae(e,"排行榜记录删除接口响应异常")}},nu={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 ae(e,"当前排行榜记录接口响应异常")}},ru={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 ae(e,"排行榜信息接口响应异常")}},iu={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 ae(e,"排行榜列表接口响应异常")}},ou={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 ae(e,"排行榜提交接口响应异常")}};function sn(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function oo(e){return e instanceof J?{code:"REQUEST_UNSUPPORTED",message:e.message}:e}function Y(e){if(e.aborted)throw sn()}function G(e,t,n={}){if(t.aborted&&!n.invokeWhenAborted)return Promise.reject(sn());let r;try{r=e()}catch(i){return Promise.reject(oo(i))}return t.aborted?(Promise.resolve(r).catch(()=>{}),Promise.reject(sn())):new Promise((i,o)=>{let s=!1;const a=u=>{s||(s=!0,t.removeEventListener("abort",c),u())},c=()=>a(()=>o(sn()));t.addEventListener("abort",c,{once:!0}),Promise.resolve(r).then(u=>a(()=>i(u)),u=>a(()=>o(oo(u))))})}const su="default",au=/^[A-Za-z0-9_-]{1,64}$/,cu=300*1e3,du=250,uu=3,lu={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 fu{constructor(t){this.options=t,this.unsubscribeAccountChange=mu(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;disposed=!1;handleTerminalAbort=()=>this.dispose();async submit(t){this.assertUsable();const n=this.accountGeneration,r=this.readMiniProgramId();await this.requireCurrentUser(n);const i=await this.request(ou,{miniProgramId:r,...t});this.assertAccountGeneration(n);const o=Et(i,Re);return this.invalidateMutableReads(this.createBucketKey(r,t.key)),Er(o,Re)}getList(t){this.assertUsable();const n=this.readMiniProgramId(),r=this.createBucketKey(n,t.key),i=yt("list",t.limit,t.cursor??null);return this.read(r,"list",i,async()=>{const o=await this.request(iu,{miniProgramId:n,...t}),s=Et(o,fe);if(!_e(s)||!Array.isArray(s.entries)||typeof s.has_more!="boolean")throw j(`${fe} 返回值不合法`);if(s.cursor!==void 0&&s.cursor!==null&&typeof s.cursor!="string")throw j(`${fe} 返回的 cursor 必须是字符串`);return{entries:s.entries.map(a=>Er(a,fe)),...typeof s.cursor=="string"&&s.cursor?{cursor:s.cursor}:{},hasMore:s.has_more}})}async getCurrentUserEntry(t){this.assertUsable();const n=this.accountGeneration,r=this.readMiniProgramId(),i=await this.requireCurrentUser(n),o=this.createBucketKey(r,t.key),s=yt("current",i);return this.read(o,"current",s,async()=>{const a=await this.request(nu,{miniProgramId:r,...t}),c=Et(a,Le);if(!_e(c))throw j(`${Le} 返回值必须是对象`);return c.entry===void 0||c.entry===null?void 0:Er(c.entry,Le)})}async deleteCurrentUserEntry(t){this.assertUsable();const n=this.accountGeneration,r=this.readMiniProgramId();await this.requireCurrentUser(n);const i=await this.request(tu,{miniProgramId:r,...t});this.assertAccountGeneration(n);const o=Et(i,We);if(this.invalidateMutableReads(this.createBucketKey(r,t.key)),!_e(o)||typeof o.deleted!="boolean")throw j(`${We} 返回的 deleted 必须是布尔值`);return{deleted:o.deleted}}getInfo(t){this.assertUsable();const n=this.readMiniProgramId(),r=this.createBucketKey(n,t.key);return this.read(r,"info",yt("info"),async()=>{const i=await this.request(ru,{miniProgramId:n,...t}),o=Et(i,we);if(!_e(o)||typeof o.key!="string"||!au.test(o.key))throw j(`${we} 返回的 key 不合法`);if(t.key!==void 0&&o.key!==t.key)throw j(`${we} 返回的 key 与请求不一致`);if(o.order!=="asc"&&o.order!=="desc")throw j(`${we} 返回的 order 必须是 asc 或 desc`);if(typeof o.rank_limit!="number"||!Number.isInteger(o.rank_limit)||o.rank_limit<0)throw j(`${we} 返回的 rankLimit 必须是非负整数`);return{key:o.key,order:o.order,rankLimit:o.rank_limit}})}read(t,n,r,i){this.assertUsable();const o=this.getOrCreateBucket(t),s=o?.caches[n],a=s?.get(r);if(a&&a.expiresAt>Date.now())return Promise.resolve(a.value);s?.delete(r);const c=yt(t,r),u=this.inflight.get(c);if(u)return u.promise;const d=this.accountGeneration,h=o?.generation,p=i().then(f=>(this.assertAccountGeneration(d),o&&s&&o.generation===h&&(n==="list"?s.size>=du&&s.delete(s.keys().next().value):s.clear(),s.set(r,{expiresAt:Date.now()+cu,value:f})),f)).finally(()=>{this.inflight.get(c)?.promise===p&&this.inflight.delete(c),o&&this.removeEmptyBucket(t,o)});return this.inflight.set(c,{bucketKey:t,promise:p}),p}getOrCreateBucket(t){const n=this.buckets.get(t);if(n)return n;if(this.pruneExpiredBuckets(),this.buckets.size>=uu)return;const r={generation:0,caches:{list:new Map,current:new Map,info:new Map}};return this.buckets.set(t,r),r}invalidateMutableReads(t){this.invalidateInflight(t);const n=this.buckets.get(t);n&&(n.generation+=1,n.caches.list.clear(),n.caches.current.clear())}invalidateForAccountChange(){this.accountGeneration+=1,this.buckets.clear(),this.inflight.clear()}invalidateInflight(t){for(const[n,r]of this.inflight)r.bucketKey===t&&this.inflight.delete(n)}pruneExpiredBuckets(){const t=Date.now();for(const[n,r]of this.buckets)ao(r,t),this.isBucketEmpty(n,r)&&this.buckets.delete(n)}removeEmptyBucket(t,n){ao(n,Date.now()),this.buckets.get(t)===n&&this.isBucketEmpty(t,n)&&this.buckets.delete(t)}isBucketEmpty(t,n){return![...this.inflight.values()].some(r=>r.bucketKey===t)&&Object.values(n.caches).every(r=>r.size===0)}async requireCurrentUser(t){this.assertUsable();let n;try{n=await G(()=>this.options.account.getCurrentUserId(this.options.operationContext),this.options.operationContext.signal)}catch(r){throw uo(r)?r:co()}if(this.assertAccountGeneration(t),typeof n!="string"||!n.trim())throw le("UNAUTHORIZED","当前用户未登录");return n.trim()}readMiniProgramId(){const t=this.options.identity.get()?.miniProgramId.trim();if(!t)throw le("INVALID_STATE","canonical mini-program identity 尚未绑定");return t}createBucketKey(t,n){return yt(t,n??su)}assertAccountGeneration(t){if(this.assertUsable(),t!==this.accountGeneration)throw le("UNAUTHORIZED","登录状态已变化,请重试")}async request(t,n){this.assertUsable();const r={request:async(i,o)=>(this.assertUsable(),this.options.network.request(i,o))};try{return await G(()=>ar(r,t,n,{...this.options.operationContext,credentials:"heybox-session"}),this.options.operationContext.signal)}catch(i){throw uo(i)||ni(i,"REQUEST_UNSUPPORTED")?i:i instanceof J?le("REQUEST_UNSUPPORTED","当前 Host 不支持该排行榜请求"):i instanceof ft&&ni(i.cause,"INVALID_STATE")?i.cause:i instanceof lt&&(i.status===401||i.status===403)?le("UNAUTHORIZED","当前用户未登录"):i instanceof ft||i instanceof lt?co():i instanceof $t?j(i.cause instanceof Error?i.cause.message:"排行榜响应不合法"):j(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(Y(this.options.operationContext.signal),this.disposed)throw le("INVALID_STATE","Cloud capability 已释放")}}function hu(e){return new fu(e)}function mu(e,t){try{return e.onChange(t)}catch(n){if(ni(n,Ys))return()=>{};throw n}}function Et(e,t){if(!_e(e)||typeof e.status!="string")throw j(`${t} 响应必须是标准信封`);if(e.status!=="ok")throw gu(e);if(!Object.prototype.hasOwnProperty.call(e,"result")||e.result===void 0||e.result===null)throw j(`${t} 响应缺少 result`);return e.result}function Er(e,t){if(!_e(e))throw j(`${t} 返回的 entry 必须是对象`);if(typeof e.ranked!="boolean")throw j(`${t} 返回的 ranked 必须是布尔值`);if(typeof e.rank!="number"||!Number.isInteger(e.rank)||(e.ranked?e.rank<=0:e.rank!==0))throw j(`${t} 返回的 rank/ranked 不合法`);if(typeof e.app_user_id!="string"||!e.app_user_id.trim())throw j(`${t} 返回的 appUserId 必须是非空字符串`);if(typeof e.score!="number"||!Number.isFinite(e.score))throw j(`${t} 返回的 score 必须是有限数字`);if(!_e(e.extra))throw j(`${t} 返回的 extra 必须是对象`);if(typeof e.created_at!="number"||!Number.isFinite(e.created_at)||typeof e.updated_at!="number"||!Number.isFinite(e.updated_at))throw j(`${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 gu(e){if(e.status==="login"||e.status==="relogin")throw le("UNAUTHORIZED",At(e.msg)||"当前用户未登录");const t=so(e.result)??so(e),n=At(t?.user_message)||At(e.msg)||At(t?.developer_message)||"排行榜请求失败";throw t?le(pu(t),n,{status:e.status,sbe:t}):le("HEYBOX_API_ERROR",n,{status:e.status})}function so(e){return _e(e)&&_e(e.sbe)?e.sbe:void 0}function pu(e){const t=At(e.developer_message);if(t&&/^[A-Z][A-Z0-9_]+$/.test(t))return t;const n=e.code;if(typeof n=="number"&&Number.isInteger(n))return lu[n]||t||"HEYBOX_API_ERROR";if(typeof n=="string"){const r=/^([A-Za-z][A-Za-z0-9_]*)(?:\(\d+\))?$/.exec(n.trim());if(r?.[1])return r[1]}return t||"HEYBOX_API_ERROR"}function ao(e,t){for(const n of Object.values(e.caches))for(const[r,i]of n)i.expiresAt<=t&&n.delete(r)}function yt(...e){return JSON.stringify(e)}function _e(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function At(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function ni(e,t){return _e(e)&&e.code===t}function le(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function j(e){return le("INVALID_RESPONSE",e)}function co(){return le("REQUEST_FAILED","排行榜请求失败")}function uo(e){return e instanceof Error&&e.name==="AbortError"}const Eu=/^[A-Za-z0-9_-]{1,64}$/,lo=20,yu=100,fo=2048;function wu(e){const t=hu(e);return{handlers:{[Re]:async r=>t.submit(_u(r)),[fe]:async r=>t.getList(Iu(r)),[Le]:async r=>t.getCurrentUserEntry(yr(r,Le)),[We]:async r=>t.deleteCurrentUserEntry(yr(r,We)),[we]:async r=>t.getInfo(yr(r,we))},dispose:()=>t.dispose()}}function _u(e){const t=Di(e,Re,!1);if(Ni(t,["key","score","extra"],Re),typeof t.score!="number"||!Number.isFinite(t.score)||Math.abs(t.score)>Number.MAX_SAFE_INTEGER)throw Ie("INVALID_PARAMS","cloud.leaderboard.submit score 必须是有限安全数字");return{...vi(t.key,Re),score:t.score,...t.extra===void 0?{}:{extra:Au(t.extra)}}}function Iu(e){if(e===void 0)return{limit:lo};const t=Di(e,fe,!0);Ni(t,["key","limit","cursor"],fe);const n=t.limit===void 0?lo:t.limit;if(typeof n!="number"||!Number.isInteger(n)||n<=0||n>yu)throw Ie("INVALID_PARAMS","cloud.leaderboard.getList limit 必须是 1-100 的整数");if(t.cursor!==void 0&&typeof t.cursor!="string")throw Ie("INVALID_PARAMS","cloud.leaderboard.getList cursor 必须是字符串");return{...vi(t.key,fe),limit:n,...t.cursor===void 0?{}:{cursor:t.cursor}}}function yr(e,t){if(e===void 0)return{};const n=Di(e,t,!0);return Ni(n,["key"],t),vi(n.key,t)}function Di(e,t,n){if(e===void 0&&n)return{};if(!ia(e))throw Ie("INVALID_PARAMS",`${t} 参数必须是对象`);return e}function Ni(e,t,n){const r=Object.keys(e).find(i=>!t.includes(i));if(r)throw Ie("INVALID_PARAMS",`${n} 不支持参数 ${r}`)}function vi(e,t){if(e===void 0)return{};if(typeof e!="string"||!Eu.test(e))throw Ie("INVALID_PARAMS",`${t} key 仅支持 1-64 位字母、数字、下划线和连字符`);return{key:e}}function Au(e){if(!ia(e))throw Ie("INVALID_PARAMS","cloud.leaderboard.submit extra 必须是对象");let t;try{t=JSON.stringify(e)}catch{throw Ie("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化")}if(typeof t!="string")throw Ie("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化");if(new TextEncoder().encode(t).length>fo)throw Ie("INVALID_PARAMS",`cloud.leaderboard.submit extra 不能超过 ${fo} 字节`);return e}function ia(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ie(e,t){return{code:e,message:t}}const bu=new Set(["stdio","attachments","notifications"]),oa=new Set(["windows-x64","macos-arm64"]),Su=new Set(["unsigned","valid","invalid","unknown"]),Ru=/^[a-f0-9]{64}$/,Ou=new Set(["exited","terminated","crashed","host-shutdown","permission-revoked","output-limit"]),Pu=new Set(zs),Du=new Set([...zs,"PERMISSION_DENIED","USER_GESTURE_REQUIRED"]),sa=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 Nu(e){const t=async(r,i,o,s)=>{const a=vu(r);try{return await o(a,{...e.operationContext,signal:i.signal})}catch(c){throw ii(c,s)}},n=async(r,i,o)=>{if(!o.trustedUserGesture)throw l("USER_GESTURE_REQUIRED","当前操作需要新的可信用户手势");if(!e.companionPresentation)throw l("COMPANION_UNSUPPORTED","Host 未提供 Companion 可信授权界面");const s={...e.operationContext,signal:o.signal},a=await e.companion.getInfo(i,s).then(u=>Tu(u,i)).catch(u=>{throw ii(u)});if((await e.companionPresentation.confirmCompanionOperation({action:r,companion:a,miniProgram:e.miniProgramPresentation,signal:o.signal})).status!=="granted")throw l("COMPANION_USER_CANCELLED","用户取消了 Companion 操作")};return{[Yn]:(r,i)=>t(r,i,async(o,s)=>ri(await e.companion.getInfo(o,s),o)),[Qn]:(r,i)=>t(r,i,async(o,s)=>ho(await e.companion.getPreparationStatus(o,s))),[Xn]:(r,i)=>t(r,i,async(o,s)=>{const a=ho(await e.companion.getPreparationStatus(o,s));return a.state!=="ready"&&a.state!=="preparing"&&await n("prepare",o,i),ri(await e.companion.prepare(o,{...s,onProgress:c=>i.postProgress(ca(c))}),o)},"COMPANION_PREPARATION_CANCELLED"),[Jn]:(r,i)=>t(r,i,(o,s)=>e.companion.cancelPreparation(o,s)),[Zn]:(r,i)=>t(r,i,async(o,s)=>mo(await e.companion.getActiveSession(o,s),o)),[er]:(r,i)=>t(r,i,async(o,s)=>{const a=mo(await e.companion.getActiveSession(o,s),o);return a||(await n("launch",o,i),da(await e.companion.launch(o,s),o))}),[tr]:(r,i)=>tt(r,i,e,"write"),[nr]:(r,i)=>tt(r,i,e,"closeStdin"),[rr]:(r,i)=>tt(r,i,e,"terminate"),[ir]:(r,i)=>tt(r,i,e,"ackOutput"),[or]:async(r,i)=>{const o=await tt(r,i,e,"openAttachment");return e.fileRegistry.registerFile(o,"companion-attachment","read")},[sr]:(r,i)=>tt(r,i,e,"showNotification")}}function vu(e){if(!M(e)||typeof e.alias!="string"||!$c.test(e.alias))throw l("INVALID_PARAMS","Companion alias 不合法");return e.alias}async function tt(e,t,n,r){if(!M(e)||typeof e.sessionId!="string"||!e.sessionId||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0)throw l("INVALID_PARAMS","Companion Session controller 不合法");try{return await n.companion[r](Cu(e,r),{...n.operationContext,signal:t.signal})}catch(i){throw ii(i)}}function me(){throw l("COMPANION_HOST_FAILED","Companion Host 返回了无效数据")}function aa(e){return!Array.isArray(e)||e.some(t=>!bu.has(t))?me():Object.freeze([...new Set(e)])}function ri(e,t){return!M(e)||typeof e.alias!="string"||typeof e.displayName!="string"||t!==void 0&&e.alias!==t||!oa.has(String(e.target))||!Number.isSafeInteger(e.archiveBytes)||Number(e.archiveBytes)<0||!Su.has(String(e.signatureStatus))||e.source!==void 0&&e.source!=="local-dev"&&e.source!=="preview"&&e.source!=="released"?me():Object.freeze({alias:e.alias,displayName:e.displayName,target:e.target,capabilities:aa(e.capabilities),archiveBytes:e.archiveBytes,signatureStatus:e.signatureStatus,...e.source===void 0?{}:{source:e.source}})}function Tu(e,t){const n=ri(e,t);return!M(e)||e.sha256===void 0?n:typeof e.sha256!="string"||!Ru.test(e.sha256)?me():Object.freeze({...n,sha256:e.sha256})}function ca(e){return M(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}):me():me()}function ho(e){return M(e)?e.state==="not-prepared"?Object.freeze({state:"not-prepared"}):e.state==="preparing"?Object.freeze({state:"preparing",progress:ca(e.progress)}):e.state==="ready"&&Number.isSafeInteger(e.preparedAt)&&Number(e.preparedAt)>=0?Object.freeze({state:"ready",preparedAt:e.preparedAt}):e.state==="failed"&&M(e.error)&&typeof e.error.code=="string"&&Pu.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:sa[e.error.code]??"Companion 操作失败",retryable:e.error.retryable})}):me():me()}function da(e,t){return!M(e)||typeof e.id!="string"||!e.id||typeof e.alias!="string"||t!==void 0&&e.alias!==t||!oa.has(String(e.target))||e.state!=="running"||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0?me():Object.freeze({id:e.id,alias:e.alias,target:e.target,capabilities:aa(e.capabilities),state:"running",controllerGeneration:e.controllerGeneration})}function mo(e,t){return e===void 0?void 0:da(e,t)}function Cu(e,t){const n=e,r={sessionId:n.sessionId,controllerGeneration:n.controllerGeneration};if(t==="write"){if(!js(n.data))throw l("INVALID_PARAMS","Companion write data 不合法");return{...r,data:new Uint8Array(n.data)}}if(t==="ackOutput"){if(n.stream!=="stdout"&&n.stream!=="stderr"||!Number.isSafeInteger(n.sequence)||Number(n.sequence)<0)throw l("INVALID_PARAMS","Companion output ack 不合法");return{...r,stream:n.stream,sequence:n.sequence}}if(t==="openAttachment"){if(typeof n.id!="string"||!n.id)throw l("INVALID_PARAMS","Companion Attachment ID 不合法");return{...r,id:n.id}}if(t==="showNotification"){if(!["completed","failed","stopped","attention"].includes(String(n.category)))throw l("INVALID_PARAMS","Companion notification category 不合法");return{...r,category:n.category}}return r}function Lu(e){return!M(e)||!Ou.has(String(e.reason))?me():e.reason==="exited"?Number.isSafeInteger(e.exitCode)?Object.freeze({reason:"exited",exitCode:e.exitCode}):me():e.exitCode!==void 0&&!Number.isSafeInteger(e.exitCode)?me():Object.freeze({reason:e.reason,...e.exitCode===void 0?{}:{exitCode:e.exitCode}})}function ku(e){if(!M(e)||!M(e.payload)||typeof e.payload.sessionId!="string"||!e.payload.sessionId)return;const t=e.payload,n=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||!js(t.data)?void 0:{type:e.type,payload:{sessionId:n,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:n,exit:Lu(t.exit)}}}catch{return}if(e.type==="companion.session.ownershipLost"&&Number.isSafeInteger(t.controllerGeneration)&&Number(t.controllerGeneration)>=0)return{type:e.type,payload:{sessionId:n,controllerGeneration:t.controllerGeneration}}}function ii(e,t){return M(e)&&typeof e.code=="string"&&Du.has(e.code)?l(e.code,sa[e.code]??"Companion 操作失败",e.code==="COMPANION_DESCRIPTOR_UNAVAILABLE"?{retryable:!0}:typeof e.retryable=="boolean"?{retryable:e.retryable}:void 0):t&&M(e)&&e.name==="AbortError"?l(t,"Companion 准备已取消"):l("COMPANION_HOST_FAILED","Companion Host 操作失败")}const go=5e3,po=1e4;function qe(e){throw{code:"INVALID_PARAMS",message:e}}function ua(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function la(e,t,n){const r=Object.keys(e).filter(i=>!t.includes(i));r.length&&qe(`${n} 不支持字段: ${r.join(", ")}`)}function Mu(e){if(e===void 0)return{intensity:"light",delay:0};if(!ua(e))return qe("device.vibrate 参数必须是对象");la(e,["intensity","delay"],"device.vibrate");const t=e.intensity??"light";if(t!=="light"&&t!=="medium"&&t!=="heavy")return qe("device.vibrate intensity 必须是 light、medium 或 heavy");const n=t,r=e.delay??0;return typeof r!="number"||!Number.isInteger(r)||r<0||r>go?qe(`device.vibrate delay 必须是 0-${go} 的整数毫秒`):{intensity:n,delay:r}}function Uu(e){return ua(e)?(la(e,["text"],"device.setClipboard"),typeof e.text!="string"||!e.text.trim()?qe("device.setClipboard text 必须是非空字符串"):e.text.length>po?qe(`device.setClipboard text 不能超过 ${po} 字符`):{text:e.text}):qe("device.setClipboard 参数必须是对象")}function Hu(e){return{[Hn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.vibrate(Mu(t),e.operationContext),e.operationContext.signal)},[xn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.setClipboard(Uu(t),e.operationContext),e.operationContext.signal)}}}const xu=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"]),Fu={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 Ti(e){const t=fa(e),n=t&&xu.has(t)?l(t,Fu[t]??"文件操作失败"):l("FILE_IO_FAILED","文件操作失败");return Object.defineProperty(n,"cause",{value:e,enumerable:!1}),n}function Se(e){try{return e()}catch(t){throw Ti(t)}}function fa(e){try{if(!M(e))return;const t=Object.getOwnPropertyDescriptor(e,"code");return t&&"value"in t&&typeof t.value=="string"?t.value:void 0}catch{return}}function ha(e,t,n={}){const r=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=r==="readwrite",o=n.allowRemove!==!1&&typeof e.remove=="function";return Object.freeze({kind:"file",name:e.name,mode:r,create:i?(s,a)=>e.create(s,a):oi,remove:o?s=>e.remove(s):ga,read:s=>e.read(s),write:i?(s,a)=>e.write(s,a):oi,stat:s=>e.stat(s)})}function ma(e,t,n={}){const r=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=r==="readwrite",o=n.allowRemove!==!1,s=o&&typeof e.remove=="function";return Object.freeze({kind:"directory",name:e.name,mode:r,file:a=>ha(e.file(a),r,{allowRemove:o}),directory:a=>ma(e.directory(a),r,{allowRemove:o}),create:i?(a,c)=>e.create(a,c):oi,remove:s?(a,c)=>e.remove(a,c):ga,stat:a=>e.stat(a),list:(a,c)=>e.list(a,c)})}function oi(){return Promise.reject(l("FILE_ACCESS_DENIED","当前文件授权只允许读取"))}function ga(){return Promise.reject(l("FILE_ACCESS_DENIED","外部文件授权不允许删除"))}const Eo=1024;class Bu{constructor(t,n){this.files=t,this.miniProgramDetail=n}handles=new Map;disposed=!1;dispose(){this.disposed||(this.disposed=!0,this.handles.clear())}registerFile(t,n="external",r){this.assertCanonicalDetail();const i=this.prepareFile(t,n,r),[o]=this.registerMany([i]);return Jt(i.handle,{kind:"file",handleId:o})}registerFiles(t,n="external",r,i){this.assertCanonicalDetail();const o=Se(()=>{if(!Array.isArray(t))throw l("FILE_IO_FAILED","Host 返回了无效文件选择结果");const a=t.length;if(i!==void 0&&a>i)throw l("FILE_IO_FAILED","Host 返回了过多文件选择结果");if(this.handles.size+a>Eo)throw l("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const c=[];for(let u=0;u<a;u+=1){if(!Object.prototype.hasOwnProperty.call(t,u))throw l("FILE_IO_FAILED","Host 返回了稀疏文件选择结果");c.push(this.prepareFile(t[u],n,r))}return c}),s=this.registerMany(o);return o.map((a,c)=>Jt(a.handle,{kind:"file",handleId:s[c]}))}registerDirectory(t,n="external",r){this.assertCanonicalDetail();const i=this.prepareDirectory(t,n,r),[o]=this.registerMany([i]);return wo(i.handle,{kind:"directory",handleId:o})}resolveFile(t){return this.resolveFileEntry(t).handle}resolveDirectory(t){return this.resolveDirectoryEntry(t).handle}isCompanionAttachmentRef(t){return!Si(t)||!("handleId"in t)?!1:this.handles.get(t.handleId)?.origin==="companion-attachment"}resolveFileEntry(t){this.assertCanonicalDetail();const n=qu(t);if("handleId"in n){const s=this.readDirect(n.handleId,"file");return{ref:n,...s}}const r=this.resolveRoot(n.root),i=xt(n.relativePath),o=this.prepareFile(Se(()=>r.hostHandle.file(i)),r.origin,r.handle.mode);return{ref:n,...o}}resolveDirectoryEntry(t){this.assertCanonicalDetail();const n=Gu(t);if("handleId"in n){const s=this.readDirect(n.handleId,"directory");return{ref:n,...s}}const r=this.resolveRoot(n.root),i=n.relativePath==="."?".":xt(n.relativePath),o=this.prepareDirectory(i==="."?r.hostHandle:Se(()=>r.hostHandle.directory(i)),r.origin,r.handle.mode,!0);return{ref:n,...o}}describeFile(t,n){return Io(t),Jt(t,n)}describeListedEntries(t,n,r){return this.assertCanonicalDetail(),Se(()=>{if(!Array.isArray(n))throw l("FILE_IO_FAILED","Host 返回了无效目录列表");const i=n.length;if(i>r)throw l("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项数量超过限制");const o=[];for(let s=0;s<i;s+=1){if(!Object.prototype.hasOwnProperty.call(n,s))throw l("FILE_IO_FAILED","Host 返回了稀疏目录列表");o.push(this.describeListedEntry(t,n[s]))}return this.assertCanonicalDetail(),o})}describeListedEntry(t,n){return Se(()=>{if(M(n)&&n.kind==="file"){const r=this.prepareFile(n,t.origin,t.handle.mode);return Jt(r.handle,yo(t.ref,r.handle.name))}if(M(n)&&n.kind==="directory"){const r=this.prepareDirectory(n,t.origin,t.handle.mode);return wo(r.handle,Vu(t.ref,r.handle.name))}throw l("FILE_IO_FAILED","Host 返回了无效目录项")})}deriveFile(t,n){this.assertCanonicalDetail();const r=jt(n),i=this.prepareFile(Se(()=>t.hostHandle.file(r)),t.origin,t.handle.mode);return{ref:yo(t.ref,r),...i}}assertSandboxOrigin(t){if(t.origin!=="sandbox")throw l("FILE_ACCESS_DENIED","外部文件授权不允许删除")}prepareFile(t,n,r){return Se(()=>{Io(t);const i=r??t.mode;return _o(t.mode,i),{handle:ha(t,i,{allowRemove:n==="sandbox"}),hostHandle:t,origin:n}})}prepareDirectory(t,n,r,i=!1){return Se(()=>{zu(t,i);const o=r??t.mode;return _o(t.mode,o),{handle:ma(t,o,{allowRemove:n==="sandbox"}),hostHandle:t,origin:n}})}registerMany(t){if(this.assertCanonicalDetail(),this.handles.size+t.length>Eo)throw l("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const n=new Set,r=t.map(()=>{for(let i=0;i<8;i+=1){const o=$u();if(!this.handles.has(o)&&!n.has(o))return n.add(o),o}throw l("FILE_IO_FAILED","无法创建文件授权句柄")});return t.forEach((i,o)=>this.handles.set(r[o],i)),r}readDirect(t,n){if(!ju(t))throw l("FILE_ACCESS_REVOKED","文件授权句柄无效");const r=this.handles.get(t);if(!r)throw l("FILE_ACCESS_REVOKED","文件授权已失效");if(r.handle.kind!==n||r.hostHandle.kind!==n)throw l("FILE_TYPE_MISMATCH","文件句柄类型不匹配");return r}resolveRoot(t){if(this.assertCanonicalDetail(),t.kind==="sandbox"){if(!this.files)throw Ae("files.sandbox");return this.prepareDirectory(Se(()=>this.files.sandbox),"sandbox",void 0,!0)}return this.readDirect(t.handleId,"directory")}assertCanonicalDetail(){if(this.disposed)throw l("FILE_ACCESS_REVOKED","文件授权已失效");if(!this.miniProgramDetail?.miniProgramId.trim())throw Ae("files")}}function xt(e){if(!bi(e))throw l("INVALID_PARAMS","relativePath 不是规范逻辑路径");return e}function jt(e,t="文件名"){const n=xt(e);if(n.includes("/"))throw l("INVALID_PARAMS",`${t} 只能是 basename`);return n}function yo(e,t){return"handleId"in e?{kind:"file",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"file",root:e.root,relativePath:xt(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Vu(e,t){return"handleId"in e?{kind:"directory",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"directory",root:e.root,relativePath:xt(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Jt(e,t){return{kind:"file",name:e.name,mode:e.mode,ref:t}}function wo(e,t){return{kind:"directory",name:e.name,mode:e.mode,ref:t}}function _o(e,t){if(t==="readwrite"&&e!=="readwrite")throw l("FILE_ACCESS_DENIED","Host 未授予请求的文件写权限")}function qu(e){return Si(e)||pa(),e}function Gu(e){return $s(e)||pa(),e}function pa(){throw l("INVALID_PARAMS","文件引用不合法")}function $u(){const e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw l("FILE_IO_FAILED","当前环境缺少安全随机数能力");const t=e.getRandomValues(new Uint8Array(16));return Array.from(t,n=>n.toString(16).padStart(2,"0")).join("")}function ju(e){return/^[0-9a-f]{32}$/.test(e)}function Io(e){if(!M(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 l("FILE_IO_FAILED","Host 返回了无效 File handle");jt(e.name,"Host File name")}function zu(e,t=!1){if(!M(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 l("FILE_IO_FAILED","Host 返回了无效 Directory handle");if(!t&&e.name.length===0)throw l("FILE_IO_FAILED","Host Directory name 不能为空");e.name&&jt(e.name,"Host Directory name")}const Ao=1e3,Wu=new Set(["FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_TYPE_MISMATCH"]);function Ku(e){const t=n=>Oi(e.operationContext,n.signal);return{files:{[Rn]:async(n,r)=>{wr(r);const i=_r(e.picker),o=Yu(n),s=await ie(()=>i.pickFiles(o,t(r)));return e.registry.registerFiles(s,"external",o.mode,o.multiple?void 0:1)},[On]:async(n,r)=>{wr(r);const i=_r(e.picker),o=Qu(n),s=await ie(()=>i.pickDirectory(o,t(r)));return e.registry.registerDirectory(s,"external",o.mode)},[Pn]:async(n,r)=>{wr(r);const i=_r(e.picker),o=Xu(n).suggestedName,s=t(r);if(!i.saveFile)throw Ae("files.saveFile");const a=await ie(()=>i.saveFile({suggestedName:o},s));return e.registry.registerFile(a,"external","readwrite")}},file:{[Ct]:async(n,r)=>{const i=ce(n,["recursive","exclusive"]),o=e.registry.resolveFile(i.target);nt(o.mode),await ie(()=>o.create(bo(i),t(r)))},[Lt]:async(n,r)=>{const i=ce(n),o=e.registry.resolveFileEntry(i.target);if(e.registry.assertSandboxOrigin(o),nt(o.handle.mode),!o.handle.remove)throw Ae(Lt);await ie(()=>o.handle.remove(t(r)))},[Dn]:async(n,r)=>{const i=ce(n);return So(async()=>{const o=await e.registry.resolveFile(i.target).stat(t(r));if(!M(o)||o.kind!=="file")throw Oo()})},[kt]:async(n,r)=>{const i=ce(n),o=Ro(await ie(()=>e.registry.resolveFile(i.target).read(t(r))));try{const s=new TextDecoder("utf-8",{fatal:!0}).decode(o);return s.charCodeAt(0)===65279?s.slice(1):s}catch{throw l("FILE_ENCODING_INVALID","文件不是合法 UTF-8 文本")}},[Nn]:async(n,r)=>{const i=ce(n,["content"]);typeof i.content!="string"&&de("content 必须是字符串");const o=e.registry.resolveFile(i.target);nt(o.mode),await ie(()=>o.write(new TextEncoder().encode(i.content),t(r)))},[Mt]:async(n,r)=>{const i=ce(n),o=await ie(()=>e.registry.resolveFile(i.target).read(t(r)));return Ro(o)},[vn]:async(n,r)=>{const i=ce(n,["content"]),o=e.registry.resolveFile(i.target);nt(o.mode),await ie(()=>o.write(Zu(i.content),t(r)))},[Ut]:async(n,r)=>{const i=ce(n),o=await ie(()=>e.registry.resolveFile(i.target).stat(t(r)));return el(o)}},directory:{[Tn]:async(n,r)=>{const i=ce(n,["recursive","exclusive"]),o=e.registry.resolveDirectory(i.target);nt(o.mode),await ie(()=>o.create(bo(i),t(r)))},[Ht]:async(n,r)=>{const i=ce(n,["recursive"]);if(M(i.target)&&i.target.relativePath===".")throw l("FILE_ACCESS_DENIED","不能删除根目录");const o=e.registry.resolveDirectoryEntry(i.target);if(e.registry.assertSandboxOrigin(o),nt(o.handle.mode),!o.handle.remove)throw Ae(Ht);await ie(()=>o.handle.remove({recursive:i.recursive===void 0?!1:Gn(i.recursive,"recursive")},t(r)))},[Cn]:async(n,r)=>{const i=ce(n);return So(async()=>{const o=await e.registry.resolveDirectory(i.target).stat(t(r));if(!M(o)||o.kind!=="directory")throw Oo()})},[Ln]:async(n,r)=>{const i=ce(n,["limit"]),o=Ju(i.limit),s=e.registry.resolveDirectoryEntry(i.target),a=await ie(()=>s.handle.list({limit:o},t(r)));return e.registry.describeListedEntries(s,a,o)}}}}function Yu(e){if(e===void 0)return{mode:"read",multiple:!1};M(e)||de("pickFiles 参数必须是对象"),cr(e,["mode","accept","multiple"]);const t=Ea(e.mode,"read"),n=e.multiple===void 0?!1:Gn(e.multiple,"multiple");let r;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)))&&de("accept 必须是规范扩展名数组"),r=[...new Set(e.accept)]),{mode:t,multiple:n,...r===void 0?{}:{accept:r}}}function Qu(e){return e===void 0?{mode:"read"}:(M(e)||de("pickDirectory 参数必须是对象"),cr(e,["mode"]),{mode:Ea(e.mode,"read")})}function Xu(e){return M(e)||de("saveFile 参数必须是对象"),cr(e,["suggestedName"]),{suggestedName:jt(e.suggestedName,"suggestedName")}}function ce(e,t=[]){return(!M(e)||!Object.prototype.hasOwnProperty.call(e,"target"))&&de("文件操作参数必须包含 target"),cr(e,["target",...t]),e}function bo(e){return{recursive:e.recursive===void 0?!1:Gn(e.recursive,"recursive"),exclusive:e.exclusive===void 0?!1:Gn(e.exclusive,"exclusive")}}function Ea(e,t){return e===void 0?t:(e!=="read"&&e!=="readwrite"&&de("mode 必须是 read 或 readwrite"),e)}function Gn(e,t){return typeof e!="boolean"&&de(`${t} 必须是布尔值`),e}function Ju(e){if(e===void 0)return Ao;if((!Number.isSafeInteger(e)||e<=0)&&de("limit 必须是正整数"),e>Ao)throw l("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项限制超过 Host 上限");return e}function cr(e,t){const n=Object.keys(e).filter(r=>!t.includes(r));n.length&&de(`不支持字段: ${n.join(", ")}`)}function nt(e){if(e!=="readwrite")throw l("FILE_ACCESS_DENIED","当前文件授权只允许读取")}function wr(e){if(!e.trustedUserGesture)throw l("USER_GESTURE_REQUIRED","当前操作需要可信用户手势")}function _r(e){if(!e)throw Ae("files.external");return e}async function So(e){try{return await e(),!0}catch(t){if(Wu.has(fa(t)??""))return!1;throw Ti(t)}}async function ie(e){try{return await e()}catch(t){throw Ti(t)}}function Zu(e){return e instanceof Uint8Array||de("content 必须是 Uint8Array"),typeof SharedArrayBuffer<"u"&&e.buffer instanceof SharedArrayBuffer&&de("不支持 SharedArrayBuffer-backed Uint8Array"),new Uint8Array(e)}function Ro(e){if(!(e instanceof Uint8Array))throw l("FILE_IO_FAILED","Host 返回了无效字节数据");return new Uint8Array(e)}function Oo(){return l("FILE_TYPE_MISMATCH","文件句柄类型不匹配")}function el(e){if(!M(e)||e.kind!=="file"||!tl(e.size))throw l("FILE_IO_FAILED","Host 返回了无效 FileStat");for(const t of["modifiedAt","createdAt"])if(e[t]!==void 0&&!nl(e[t]))throw l("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 tl(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function nl(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function de(e){throw l("INVALID_PARAMS",e)}const rl=["pc","console","mobile"],il=["game","wiki"];function $n(e){throw{code:"INVALID_PARAMS",message:e}}function ol(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ge(e,t){return typeof e!="string"||!e.trim()?$n(t):e.trim()}function Po(e,t,n){return typeof e!="string"||!t.includes(e)?$n(n):e}function sl(e){const t={target:"game_detail",appId:Ge(e.appId,"navigation.openAppPage appId 必须是非空字符串"),gameType:Po(e.gameType,rl,"navigation.openAppPage gameType 必须是 pc、console 或 mobile")};return e.page!==void 0&&(t.page=Po(e.page,il,"navigation.openAppPage page 必须是 game 或 wiki")),e.hSrc!==void 0&&(t.hSrc=Ge(e.hSrc,"navigation.openAppPage hSrc 必须是非空字符串")),e.skuId!==void 0&&(t.skuId=Ge(e.skuId,"navigation.openAppPage skuId 必须是非空字符串")),t}function al(e){return{target:"user_detail",userId:Ge(e.userId,"navigation.openAppPage userId 必须是非空字符串")}}function cl(e){const t={target:"post_detail",linkId:Ge(e.linkId,"navigation.openAppPage linkId 必须是非空字符串")};return e.rootCommentId!==void 0&&(t.rootCommentId=Ge(e.rootCommentId,"navigation.openAppPage rootCommentId 必须是非空字符串")),e.commentId!==void 0&&(t.commentId=Ge(e.commentId,"navigation.openAppPage commentId 必须是非空字符串")),t}function dl(e){return ol(e)?e.target==="game_detail"?sl(e):e.target==="user_detail"?al(e):e.target==="post_detail"?cl(e):$n("navigation.openAppPage target 不支持"):$n("navigation.openAppPage options 必须是对象")}function ul(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 ll(e){return{protocolType:"openRouterPath",path:"/user_home",params:{userid:e.userId}}}function fl(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 hl(e){const t=dl(e);return t.target==="game_detail"?ul(t):t.target==="user_detail"?ll(t):fl(t)}function ml(e){throw{code:"INVALID_PARAMS",message:e}}function Do(e,t){e!==void 0&&(typeof e!="object"||e===null||Array.isArray(e)||Object.keys(e).length)&&ml(`${t} 不支持参数`)}function gl(e){return{[Fn]:async t=>{Y(e.operationContext.signal),Do(t,"navigation.close"),await G(()=>e.presentation.close(e.operationContext),e.operationContext.signal)},[Bn]:async t=>{Y(e.operationContext.signal),Do(t,"navigation.reload"),await G(()=>e.presentation.reload(e.operationContext),e.operationContext.signal)},[Vn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.openAppPage(hl(t),e.operationContext),e.operationContext.signal)}}}const pl=new Set(["content-length","content-encoding","transfer-encoding","content-disposition","content-range","content-type"]),El=new Set(["content-length","content-encoding","content-disposition","content-range","content-type"]),yl=new Set(["range","if-range","a-im"]),wl=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"]),_l=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i,Zt={initial:0,target:1,open:2,validate:3,transfer:4,committed:5,completed:6};class Il{constructor(t){this.signal=t}phase="initial";transition(t){if(Zt[t]<=Zt[this.phase])throw l("FILE_IO_FAILED","下载状态转换不合法");this.phase=t}throwIfCancelled(){if(Zt[this.phase]<Zt.committed&&this.signal.aborted)throw _a()}normalizeHostError(t,n){return this.throwIfCancelled(),Ci(t,n,this.signal)}}async function Al(e,t,n){const r=n.transfer,i=n.fileRegistry;if(!r||!i)throw Ae("network.download");const o=Oi(n.operationContext,t.signal),s=new Il(o.signal);s.transition("target"),s.throwIfCancelled();let a;try{a=await Ol(e,i,o)}catch(d){throw s.normalizeHostError(d,"file")}s.throwIfCancelled();let c;s.transition("open");try{c=await r.network.open(e.request,o)}catch(d){throw s.normalizeHostError(d,"network")}let u=!1;try{s.throwIfCancelled(),s.transition("validate");const d=Dl(c);Nl(c,d);const h=vl(c.status,d);if(e.maxBytes!==void 0&&h.expectedBytes!==void 0&&h.expectedBytes>e.maxBytes)throw l("FILE_TOO_LARGE","下载响应超过 maxBytes");s.throwIfCancelled();const p=Pl(e,a,d,i);let f=0;const A=Sl(h.expectedBytes,e.maxBytes);Ar(t,Ir(0,h));const w={...o,onProgress(b){!Number.isSafeInteger(b)||b<f||A!==void 0&&b>A||(f=b,Ar(t,Ir(f,h)))}};s.transition("transfer"),u=!0;let y;try{y=await r.files.writeResource(p.hostHandle,c.body,{mode:p.mode,...e.maxBytes===void 0?{}:{maxBytes:e.maxBytes},...h.expectedBytes===void 0?{}:{expectedBytes:h.expectedBytes}},w)}catch(b){throw s.normalizeHostError(b,"transfer")}s.transition("committed"),f=bl(y,h,f,e.maxBytes),Ar(t,Ir(f,h));const m=i.describeFile(p.handle,p.ref);return s.transition("completed"),m}finally{u||Rl(r.network,c.body)}}function bl(e,t,n,r){if(t.expectedBytes!==void 0)return t.expectedBytes;const i=r===void 0?n:Math.min(n,r);try{const o=e?.committedBytes;if(typeof o=="number"&&Number.isSafeInteger(o)&&o>=i&&(r===void 0||o<=r))return o}catch{}return i}function Sl(e,t){return e===void 0?t:t===void 0?e:Math.min(e,t)}function Rl(e,t){try{Promise.resolve(e.release(t)).catch(()=>{})}catch{}}async function Ol(e,t,n){if(e.targetKind==="file"){const i=t.resolveFileEntry(e.to);return si(i.handle.mode),await Hl(i.handle,n),{kind:"file",...i}}const r=t.resolveDirectoryEntry(e.to);return si(r.handle.mode),await xl(r.handle,n),{kind:"directory",...r}}function Pl(e,t,n,r){if(t.kind==="file")return{ref:t.ref,handle:t.handle,hostHandle:t.hostHandle,mode:"replace-existing"};const i=Cl(e,n),o=r.deriveFile(t,i);return si(o.handle.mode),{...o,mode:e.overwrite===!0?"upsert":"create-exclusive"}}function Dl(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 l("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream response");if(!M(e.headers))throw l("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream headers");const t={};for(const[n,r]of Object.entries(e.headers)){if(n!==n.toLowerCase()||!pl.has(n)||!Array.isArray(r)||r.length===0)throw l("DOWNLOAD_NETWORK_FAILED","Host 返回了不安全 stream header");if(r.some(i=>typeof i!="string"||/[\r\n]/.test(i)))throw l("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream header value");t[n]=[...r]}return t}function Nl(e,t){if(e.status<200||e.status>=300||e.status===206||e.status===226)throw l("DOWNLOAD_HTTP_STATUS",`下载请求失败: HTTP ${e.status}`,{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:Ul(t,El)});if((t["content-range"]?.length??0)>0)throw l("DOWNLOAD_NETWORK_FAILED","下载响应包含 Content-Range")}function vl(e,t){const n=t["content-length"]??[],r=t["transfer-encoding"]??[];if(n.length>0&&r.length>0)throw l("DOWNLOAD_NETWORK_FAILED","下载响应同时包含 Transfer-Encoding 与 Content-Length");if((e===204||e===205)&&n.some(u=>u!=="0"))throw l("DOWNLOAD_NETWORK_FAILED","无内容响应声明了非零 Content-Length");if((e===204||e===205)&&r.length>0)throw l("DOWNLOAD_NETWORK_FAILED","无内容响应不允许 Transfer-Encoding");const i=n.length===1&&/^(?:0|[1-9]\d*)$/.test(n[0])?Number(n[0]):void 0,o=i!==void 0&&Number.isSafeInteger(i)?i:void 0,s=Tl(t["content-encoding"]),a=e===204||e===205?0:r.length===0&&s?o:void 0,c=a!==void 0;return{...a===void 0?{}:{expectedBytes:a},...c?{total:a}:{},lengthComputable:c}}function Tl(e){return!e||e.length===0?!0:e.length===1&&e[0].trim().toLowerCase()==="identity"}function Ir(e,t){return{loaded:e,...t.total===void 0?{}:{total:t.total},lengthComputable:t.lengthComputable}}function Ar(e,t){try{e.postProgress(t)}catch{}}function Cl(e,t){const n=t["content-disposition"]??[];for(const i of n){const o=Ll(i);if(o&&an(o))return o}for(const i of n){const o=kl(i);if(o&&an(o))return o}if(e.suggestedName!==void 0)return ya(e.suggestedName);const r=Ml(e.url);return r&&an(r)?r:"download.bin"}function Ll(e){const t=/(?:^|;)\s*filename\*\s*=\s*([^;]+)/i.exec(e);if(!t)return;const n=t[1].trim().replace(/^"|"$/g,""),r=/^utf-8'[^']*'(.*)$/i.exec(n);if(r)try{return decodeURIComponent(r[1])}catch{return}}function kl(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 Ml(e){const t=e.pathname.split("/").pop();if(t)try{return decodeURIComponent(t)}catch{return}}function ya(e){try{jt(e,"suggestedName")}catch{throw l("INVALID_PARAMS","suggestedName 不是安全 basename")}if(!an(e))throw l("INVALID_PARAMS","suggestedName 不是安全 basename");return e}function an(e){return!(!e||e==="."||e===".."||Array.from(e).length>255||/[\\/<>:"|?*\u0000-\u001f\u007f]/.test(e)||/[. ]$/.test(e)||_l.test(e))}function Ul(e,t){return Object.fromEntries(Object.entries(e).filter(([n])=>t.has(n)).map(([n,r])=>[n,r.join(", ")]))}async function Hl(e,t){try{const n=await e.stat(t);if(!n||n.kind!=="file")throw wa()}catch(n){throw Ci(n,"file",t.signal)}}async function xl(e,t){try{const n=await e.stat(t);if(!n||n.kind!=="directory")throw wa()}catch(n){throw Ci(n,"file",t.signal)}}function si(e){if(e!=="readwrite")throw l("FILE_ACCESS_DENIED","下载目标只允许读取")}const Fl={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 Ci(e,t,n){if(n.aborted)return _a();const r=Bl(e);if(r&&wl.has(r)){const o=l(r,Fl[r]??"下载失败");return Object.defineProperty(o,"cause",{value:e,enumerable:!1}),o}if(e instanceof Error&&e.name==="AbortError")return t==="network"||t==="transfer"?l("DOWNLOAD_TIMEOUT","下载网络请求超时"):l("FILE_IO_FAILED","下载文件写入失败");const i=t==="network"?l("DOWNLOAD_NETWORK_FAILED","下载网络请求失败"):l("FILE_IO_FAILED","下载文件写入失败");return Object.defineProperty(i,"cause",{value:e,enumerable:!1}),i}function Bl(e){return M(e)&&typeof e.code=="string"?e.code:void 0}function wa(){return l("FILE_TYPE_MISMATCH","下载目标类型不匹配")}function _a(){return l("DOWNLOAD_CANCELLED","下载已取消")}function Vl(e){if(!e)return;const t=Object.keys(e).find(n=>yl.has(n.trim().toLowerCase()));if(t)throw l("INVALID_PARAMS",`network.download 不允许设置请求头: ${t}`)}const Li="withCredentials",ql=new Set(["url","method","params","data","headers","timeout",Li]),Gl=new Set(["url","to","params","headers","timeout","suggestedName","overwrite","maxBytes",Li]),$l=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),No=3e4,vo=2*1024*1024,jl=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,zl=/[\u0000-\u0008\u000A-\u001F\u007F]/,Wl=/^(?:authorization|authentication-info|proxy-authentication-info|cookie|set-cookie|set-cookie2|pkey|x-pkey|x-access-token|x-auth-token)$/i,Kl="network.request 不支持 multipart/form-data,请使用专用上传能力";function Yl(e){const t=Ql(e.runtimePermissions),n=uf(e.allowedHttpOrigins);return{[Sn]:async(r,i)=>{const o=Jl(r,{permission:t,allowedHttpOrigins:n});return Al(o,i,{transfer:e.transfer,fileRegistry:e.fileRegistry,operationContext:e.operationContext})},[bn]:async(r,i)=>{const o=Oi(e.operationContext,i?.signal);Y(o.signal);const s=Xl(r,{permission:t,allowedHttpOrigins:n});let a;try{a=await G(()=>e.network.request(s,o),o.signal)}catch(c){throw hf(c)?c:mf(c,"REQUEST_UNSUPPORTED")?H("REQUEST_UNSUPPORTED","当前 Host 不支持该网络请求"):H("REQUEST_FAILED","网络请求失败")}return ff(a)}}}function Ql(e){const t=pt(e),n=t.permissions.network;return{enabled:t.valid&&n?.status==="enabled",useOfficialDomain:t.valid&&n?.status==="enabled"&&n.config.useOfficialDomain===!0}}function Xl(e,t){const n=dr(e,"network.request 参数必须是对象"),r=Object.keys(n).filter(c=>!ql.has(c));if(r.length>0)throw H("INVALID_PARAMS",`network.request 不支持字段: ${r.join(", ")}`);Aa(n,"network.request");const i=Ia(n,t,"network.request"),o=ef(n.method),s=n.data;s!==void 0&&rf(s),sf(i.headers,s);const a=af(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 Jl(e,t){const n=dr(e,"network.download 参数必须是对象"),r=Object.keys(n).filter(c=>!Gl.has(c));if(r.length>0)throw H("INVALID_PARAMS",`network.download 不支持字段: ${r.join(", ")}`);Aa(n,"network.download");const i=Ia(n,t,"network.download");if(i.timeout!==void 0&&i.timeout<=0)throw H("INVALID_PARAMS","network.download timeout 必须是有限正数");Vl(i.headers);const o=Si(n.to),s=$s(n.to);if(!o&&!s)throw H("INVALID_PARAMS","network.download to 必须是有效 File/Directory ref");if(o&&(n.suggestedName!==void 0||n.overwrite!==void 0))throw H("INVALID_PARAMS","File 下载目标不接受 suggestedName/overwrite");let a;if(n.suggestedName!==void 0){if(typeof n.suggestedName!="string")throw H("INVALID_PARAMS","suggestedName 必须是字符串");a=ya(n.suggestedName)}if(n.overwrite!==void 0&&typeof n.overwrite!="boolean")throw H("INVALID_PARAMS","overwrite 必须是布尔值");if(n.maxBytes!==void 0&&(!Number.isSafeInteger(n.maxBytes)||n.maxBytes<=0))throw H("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:n.to,targetKind:o?"file":"directory",...a===void 0?{}:{suggestedName:a},...n.overwrite===void 0?{}:{overwrite:n.overwrite},...n.maxBytes===void 0?{}:{maxBytes:n.maxBytes}}}function Ia(e,t,n){const r=Zl(e.url,t.allowedHttpOrigins,n),i=Ad(r);if(i&&!t.permission.useOfficialDomain)throw H("PERMISSION_DENIED","当前小程序暂不支持访问官方域名");if(Id(r.pathname,i))throw H("PERMISSION_DENIED",`${n} 不允许访问 Runtime 或账号敏感接口`);return{url:r,official:i,params:e.params===void 0?void 0:{...dr(e.params,`${n} params 必须是对象`)},headers:e.headers===void 0?void 0:tf(e.headers,n),timeout:nf(e.timeout,n)}}function Zl(e,t,n="network.request"){if(typeof e!="string"||!e.trim())throw H("INVALID_PARAMS",`${n} url 必须是 HTTP(S) URL`);let r;try{r=new URL(e)}catch{throw H("INVALID_PARAMS",`${n} url 必须是 HTTP(S) URL`)}if(r.protocol!=="http:"&&r.protocol!=="https:")throw H("INVALID_PARAMS",`${n} url 必须是 HTTP(S) URL`);if(r.username||r.password)throw H("INVALID_PARAMS",`${n} url 不允许包含用户信息`);if(r.protocol==="http:"&&!t.has(r.origin))throw H("PERMISSION_DENIED",`${n} 生产环境只允许 HTTPS`);return r}function ef(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw H("INVALID_PARAMS","network.request method 必须是字符串");const t=e.trim().toUpperCase();if(!$l.has(t))throw H("INVALID_PARAMS","network.request method 不合法");return t}function tf(e,t="network.request"){const n=dr(e,`${t} headers 必须是 Record<string, string>`),r={};for(const[i,o]of Object.entries(n)){const s=i.trim();if(!s||s!==i||!jl.test(s)||typeof o!="string"||zl.test(o))throw H("INVALID_PARAMS",`${t} headers 必须是 Record<string, string>`);if(bd(s))throw H("INVALID_PARAMS",`${t} 不允许设置敏感请求头: ${i}`);r[s]=o}return r}function Aa(e,t){const n=e[Li];if(n!==void 0&&typeof n!="boolean")throw H("INVALID_PARAMS",`${t} 旧版凭据字段必须是布尔值`)}function nf(e,t="network.request"){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw H("INVALID_PARAMS",`${t} timeout 必须是非负数字`);if(t==="network.request"&&e>No)throw H("INVALID_PARAMS",`${t} timeout 不能超过 ${No}ms`);return e}}function rf(e){if(typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData)throw H("INVALID_PARAMS","network.request data 不支持 File、Blob 或 FormData,请使用专用上传能力");if(of(e)>vo)throw H("INVALID_PARAMS",`network.request data 不能超过 ${vo} 字节`)}function of(e){if(typeof e=="string")return br(e);if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(typeof URLSearchParams<"u"&&e instanceof URLSearchParams)return br(e.toString());try{const t=JSON.stringify(e);return t?br(t):0}catch{throw H("INVALID_PARAMS","network.request data 必须可序列化")}}function sf(e,t){const n=ba(e),r=typeof t=="string"&&t.trimStart().startsWith("--")&&/content-disposition\s*:\s*form-data/i.test(t);if(n?.includes("multipart/form-data")||r)throw H("INVALID_PARAMS",Kl)}function af(e,t,n){if(t===void 0)return;const r=ba(e);return r?.includes("application/x-www-form-urlencoded")?"form":r?.includes("application/json")?"json":typeof URLSearchParams<"u"&&t instanceof URLSearchParams||n&&(Array.isArray(t)||df(t))?"form":cf(t)?"json":void 0}function ba(e){return e?Object.entries(e).find(([n])=>n.trim().toLowerCase()==="content-type")?.[1].toLowerCase():void 0}function cf(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="object"&&!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer)}function df(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function uf(e){const t=new Set;for(const n of e??[])try{const r=new URL(n);r.protocol==="http:"&&!r.username&&!r.password&&r.pathname==="/"&&!r.search&&!r.hash&&lf(r.hostname)&&t.add(r.origin)}catch{}return t}function lf(e){const t=e.toLowerCase();if(t==="[::1]")return!0;const n=t.split(".").map(Number);return n.length!==4||n.some((r,i)=>!/^\d+$/.test(t.split(".")[i])||r<0||r>255)?!1:n[0]===127||n[0]===10||n[0]===172&&n[1]>=16&&n[1]<=31||n[0]===192&&n[1]===168}function ff(e){return Object.keys(e.headers).some(To)?{...e,headers:Object.fromEntries(Object.entries(e.headers).filter(([t])=>!To(t)))}:e}function To(e){const t=e.trim().toLowerCase();return Wl.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function hf(e){return e instanceof Error&&e.name==="AbortError"}function mf(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function dr(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw H("INVALID_PARAMS",t);return e}function br(e){return new TextEncoder().encode(e).length}function H(e,t){return{code:e,message:t}}const en=4294967296;function gf(e){const t=new pf;return t.write(e),t.finish()}class pf{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<en?(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 n=Ef(t),r=n.byteLength;if(r<32)this.writeUint8(160+r);else if(r<256)this.writeUint8(217),this.writeUint8(r);else if(r<65536)this.writeUint8(218),this.writeUint16(r);else if(r<en)this.writeUint8(219),this.writeUint32(r);else throw new Error("share extra string is too long");this.writeBytes(n)}writeArray(t){const n=t.length;n<16?this.writeUint8(144+n):n<65536?(this.writeUint8(220),this.writeUint16(n)):(this.writeUint8(221),this.writeUint32(n));for(const r of t)this.write(r)}writeMap(t){const n=Object.keys(t),r=n.length;r<16?this.writeUint8(128+r):r<65536?(this.writeUint8(222),this.writeUint16(r)):(this.writeUint8(223),this.writeUint32(r));for(const i of n)this.writeString(i),this.write(t[i])}ensureCapacity(t){const n=this.offset+t;if(n<=this.bytes.byteLength)return;const r=new Uint8Array(Math.max(n,this.bytes.byteLength*2));r.set(this.bytes),this.bytes=r,this.view=new DataView(r.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/en),this.view.setUint32(this.offset+4,t),this.offset+=8}writeInt64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,Math.floor(t/en)),this.view.setUint32(this.offset+4,t),this.offset+=8}}function Ef(e){const t=new Uint8Array(yf(e));let n=0,r=0;for(;n<e.length;){let i=e.charCodeAt(n++);if(i>=55296&&i<=56319&&n<e.length){const o=e.charCodeAt(n);o>=56320&&o<=57343&&(n+=1,i=((i&1023)<<10)+(o&1023)+65536)}i<128?t[r++]=i:i<2048?(t[r++]=i>>6&31|192,t[r++]=i&63|128):i<65536?(t[r++]=i>>12&15|224,t[r++]=i>>6&63|128,t[r++]=i&63|128):(t[r++]=i>>18&7|240,t[r++]=i>>12&63|128,t[r++]=i>>6&63|128,t[r++]=i&63|128)}return t}function yf(e){let t=0,n=0;for(;n<e.length;){let r=e.charCodeAt(n++);if(r<128)t+=1;else if(r<2048)t+=2;else{if(r>=55296&&r<=56319&&n<e.length){const i=e.charCodeAt(n);i>=56320&&i<=57343&&(n+=1,r=((r&1023)<<10)+(i&1023)+65536)}t+=r<65536?3:4}}return t}function wf(e){ai(e);const t=gf(e);if(t.byteLength>128)throw new Error("share extra is too large");return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function ai(e,t=0,n=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(n.has(e))throw new Error("extra value must not contain cycles");if(n.add(e),Array.isArray(e)){if(e.length>64)throw new Error("extra array is too large");for(const o of e)ai(o,t+1,n);n.delete(e);return}const r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new Error("extra object must be a plain object");const i=Object.values(e);if(i.length>64)throw new Error("extra object has too many fields");for(const o of i)ai(o,t+1,n);n.delete(e)}function _f(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function If(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 Af(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topicIds 必须是数组"],values:[]};const t=[],n=new Set,r=[];for(const i of e){const o=If(i);o?n.has(o)||(n.add(o),r.push(o)):t.push("post.topicIds 每项必须是正整数或非空字符串")}return{invalidMessages:t,values:r}}function bf(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topics 必须是数组"],values:[]};const t=[],n=new Set,r=[];for(const i of e){const o=typeof i=="string"?i.trim():"";!o||o.startsWith("#")||o.endsWith("#")?t.push("post.topics 每项必须是不含首尾 # 的非空字符串"):n.has(o)||(n.add(o),r.push(o))}return{invalidMessages:t,values:r}}function Sa(e,t){if(e==null)return{};if(!_f(e))return{invalidMessage:`${t.method} post 必须是对象或 null`};const n=Af(e.topicIds),r=bf(e.topics),i=[...n.invalidMessages,...r.invalidMessages];let o=n.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||r.values.length?{...o.length?{topicIds:o}:{},...r.values.length?{topics:r.values}:{}}:void 0;return s||i.push(`${t.method} post 至少需要一个有效的 topicIds 或 topics`),{invalidMessage:i[0],post:s}}function Sf(e){try{return new URL(e).protocol==="heybox-mini-dev:"}catch{return!1}}async function Rf(e){try{if(Sf(e.getCurrentHref()))return!0}catch{}try{return!!await e.isDevRuntime()}catch{return!1}}function te(e){throw{code:"INVALID_PARAMS",message:e}}function zt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ci(e,t){return typeof e!="string"||!e.trim()?te(t):e}function Of(e,t){const n=ci(e,t);try{const r=new URL(n);return r.protocol!=="http:"&&r.protocol!=="https:"?te(t):n}catch{return te(t)}}function Pf(e){return e==="wechatSession"||e==="wechatTimeline"||e==="qqFriend"||e==="qzone"||e==="weibo"}function Ra(e,t,n){const r=e.identity.get(),i=r?.miniProgramId.trim();if(!i)return te(`${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=r?.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),n!==void 0&&s.searchParams.set("extra",n),s.href}catch{return te(`${t} 缺少有效的小程序分享地址`)}}function Df(e,t){if(!zt(e))return te("share.showShareMenu 参数必须是对象");if(Object.prototype.hasOwnProperty.call(e,"url"))return te("share.showShareMenu 不支持自定义 url");const n=e.channel;if(n!==void 0&&!Pf(n))return te("share.showShareMenu channel 不合法");const r=Oa(e.extra,"share.showShareMenu");return{title:ci(e.title,"share.showShareMenu title 必须是非空字符串"),description:ci(e.desc,"share.showShareMenu desc 必须是非空字符串"),url:Ra(t,"share.showShareMenu",r),...e.imageUrl===void 0?{}:{imageUrl:Of(e.imageUrl,"share.showShareMenu imageUrl 必须是 HTTP(S) URL")},...n===void 0?{}:{channel:n}}}function Oa(e,t){if(e!==void 0)try{return wf(e)}catch{return te(`${t} extra 必须是符合限制的 JSON-compatible 数据`)}}async function Pa(e,t){return e.invalidMessage&&await G(()=>Rf(t.environment),t.operationContext.signal)?te(e.invalidMessage):e.post}function Co(e,t){const n=Number(e);return Number.isFinite(n)&&n>0?n:t}function Nf(e){const t=e.getViewportMetrics();return{left:0,top:0,width:Co(t.windowWidth,0),height:Co(t.windowHeight,0)}}function di(e,t){const n=Number(e);return!Number.isFinite(n)||n<0?te(t):n}function Lo(e,t){const n=Number(e);return!Number.isFinite(n)||n<=0?te(t):n}function vf(e){return zt(e)?{left:di(e.left,"share.screenshot rect.left 必须是非负数字"),top:di(e.top,"share.screenshot rect.top 必须是非负数字"),width:Lo(e.width,"share.screenshot rect.width 必须是正数"),height:Lo(e.height,"share.screenshot rect.height 必须是正数")}:te("share.screenshot rect 必须是对象")}function Tf(e,t){if(e!=null&&!zt(e))return te("share.screenshot 参数必须是对象");const n=e??{};return n.saveToAlbum!==void 0&&typeof n.saveToAlbum!="boolean"?te("share.screenshot saveToAlbum 必须是布尔值"):{rect:n.rect===void 0?Nf(t):vf(n.rect),...n.delay===void 0?{}:{delay:di(n.delay,"share.screenshot delay 必须是非负数字")},...n.saveToAlbum===void 0?{}:{saveToAlbum:n.saveToAlbum}}}async function Cf(e,t){Y(t.operationContext.signal);const n=Df(e,t);let r=Sa(e.post,{maxTopicIds:1,method:"share.showShareMenu"});n.channel&&r.post&&(r={invalidMessage:r.invalidMessage||"share.showShareMenu channel 与 post 不能同时使用"});const i=await Pa(r,t);return G(()=>t.presentation.showShareMenu({...n,post:i},t.operationContext),t.operationContext.signal)}async function Lf(e,t){if(Y(t.operationContext.signal),e!==void 0&&!zt(e))return te("share.copyLink 参数必须是对象");const n=Oa(e?.extra,"share.copyLink"),r=Ra(t,"share.copyLink",n);return await G(()=>t.presentation.setClipboard({text:r},t.operationContext),t.operationContext.signal),r}async function kf(e,t){Y(t.operationContext.signal);const n=Tf(e,t.presentation),r=Sa(zt(e)?e.post:void 0,{method:"share.screenshot"}),i=await Pa(r,t),o=t.identity.get()?.miniProgramId.trim()||void 0,s=Mf();let a=!1,c;try{a=!0,await G(()=>t.presentation.setScreenshotChromeHidden(!0,t.operationContext),t.operationContext.signal),c={status:"fulfilled",value:await G(()=>t.presentation.captureAndShare({...n,post:i,...o?{sourceMiniProgramId:o}:{}},t.operationContext),t.operationContext.signal)}}catch(d){c={status:"rejected",error:d}}const u=a?await Uf(t.presentation,s,t.operationContext.signal):void 0;if(c.status==="rejected")throw c.error;if(u)throw u;return c.value}function Mf(){return{lifecycle:"cleanup",signal:new AbortController().signal}}async function Uf(e,t,n){let r;try{r=Promise.resolve(e.setScreenshotChromeHidden(!1,t))}catch{return}try{await G(()=>r,n,{invokeWhenAborted:!0})}catch(i){if(n.aborted)return i}}function Hf(e){return{[yn]:(t,n)=>Lf(t,e),[wn]:(t,n)=>Cf(t,e),[_n]:(t,n)=>kf(t,e)}}const xf=128,Ff=/^[A-Za-z0-9_-]+$/;function Bf(e){const t=Vf(e),n={[vt]:async r=>{Y(e.operationContext.signal);const i=ko(r,vt,e.storageLimits?.maxKeyLength),o=await G(()=>e.storage.getRaw(Sr(t(),i),e.operationContext),e.operationContext.signal);return{data:Mo(o)}},[Tt]:async r=>{Y(e.operationContext.signal);const i=Da(r,"storage.setStorage 参数必须是对象"),o=ko(i,Tt,e.storageLimits?.maxKeyLength),s=qf(i.data,e.storageLimits?.maxValueBytes);await G(()=>e.storage.setRaw(Sr(t(),o),s,e.operationContext),e.operationContext.signal)}};return e.storageDiagnostics?{handlers:n,diagnostics:{getSnapshot:async()=>{Y(e.operationContext.signal);let r;try{r=t()}catch{throw Me("STORAGE_DIAGNOSTICS_NOT_READY","Storage diagnostics 只能在 canonical identity 绑定后使用")}const i=Sr(r,"");return(await G(()=>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:Mo(a),serializedValue:a,bytes:Na(a)}}).sort((s,a)=>s.key.localeCompare(a.key))}}}:{handlers:n}}function Vf(e){let t=!1,n;return()=>{if(!t){const r=e.identity.get()?.miniProgramId.trim();if(r)n=`id_${Uo(r)}`;else{const i=e.anonymousStorageScope?.trim();i&&(n=`anon_${Uo(i)}`)}t=n!==void 0}if(!n)throw Me("INVALID_STATE","storage scope 只能在 canonical identity 绑定后使用");return n}}function Sr(e,t){return`hb_miniprogram_${e}_${t}`}function ko(e,t,n=xf){const i=Da(e,`${t} 参数必须是对象`).key;if(typeof i!="string")throw Me("INVALID_PARAMS",`${t} key 必须是字符串`);if(!i||i.length>n||!Ff.test(i))throw Me("INVALID_PARAMS",`storage key 仅支持 1-${n} 位字母、数字、下划线和连字符`);return i}function qf(e,t){let n;try{n=JSON.stringify(e)}catch{throw Me("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化")}if(typeof n!="string")throw Me("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化");if(t!==void 0&&Na(n)>t)throw Me("STORAGE_QUOTA_EXCEEDED",`storage.setStorage data 超出 ${t} 字节限制`);return n}function Mo(e){if(!(e===void 0||e===""))try{return JSON.parse(e)}catch{return e}}function Da(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw Me("INVALID_PARAMS",t);return e}function Uo(e){return/^[A-Za-z0-9_-]{1,64}$/.test(e)?e:Gf(e)}function Gf(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function Na(e){return new TextEncoder().encode(e).length}function Me(e,t){return{code:e,message:t}}const Ho=120;function Te(e){throw{code:"INVALID_PARAMS",message:e}}function ki(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function va(e,t,n){const r=Object.keys(e).filter(i=>!t.includes(i));r.length&&Te(`${n} 不支持字段: ${r.join(", ")}`)}function $f(e){if(!ki(e))return Te("ui.showToast 参数必须是对象");if(va(e,["message","status"],"ui.showToast"),typeof e.message!="string"||!e.message.trim())return Te("ui.showToast message 必须是非空字符串");const t=e.message.trim();if(t.length>Ho)return Te(`ui.showToast message 不能超过 ${Ho} 字符`);const n=e.status;if(n!==void 0&&n!=="success"&&n!=="error")return Te("ui.showToast status 必须是 success 或 error");const r=n;return{message:t,...r===void 0?{}:{status:r}}}function jf(e){return e===void 0?{dismissible:!1}:ki(e)?(va(e,["dismissible"],"ui.showLoading"),e.dismissible!==void 0&&typeof e.dismissible!="boolean"?Te("ui.showLoading dismissible 必须是布尔值"):{dismissible:e.dismissible??!1}):Te("ui.showLoading 参数必须是对象")}function zf(e){e!==void 0&&(!ki(e)||Object.keys(e).length)&&Te("ui.hideLoading 不支持参数")}function Wf(e){return{[kn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.showToast($f(t),e.operationContext),e.operationContext.signal)},[Mn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.showLoading(jf(t),e.operationContext),e.operationContext.signal)},[Un]:async t=>{Y(e.operationContext.signal),zf(t),await G(()=>e.presentation.hideLoading(e.operationContext),e.operationContext.signal)}}}const Kf={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.account.home_v2.get",method:"GET",path:"/account/home_v2/",parse(e){return ae(e,"当前用户首页资料接口响应异常")}},Yf=3e4;function Qf(e,t,n={}){const r=n.ttlMs??Yf;let i=0,o,s;async function a(){let u;try{u=await ar(e,Kf,void 0,{...t,credentials:"heybox-session"})}catch(d){throw t.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):d instanceof J?l("REQUEST_UNSUPPORTED",d.message):d instanceof $t?l("INVALID_RESPONSE","user home_v2 响应不合法"):d instanceof ft?l("REQUEST_FAILED","user home_v2 请求失败"):d instanceof lt?l("REQUEST_FAILED",d.message):Jf(d)?d:l("REQUEST_FAILED","user home_v2 请求失败")}return Xf(u,"user home_v2")}function c(u){const d=Date.now();if(o?.userId===u&&o.expiresAt>d)return Promise.resolve(o.value);if(s?.userId===u&&s.generation===i)return s.promise;const h=i,p=a().then(f=>(i===h&&(o={userId:u,value:f,expiresAt:Date.now()+r}),f)).finally(()=>{s?.promise===p&&(s=void 0)});return s={userId:u,generation:h,promise:p},p}return{get:c,clear(){i+=1,o=void 0,s=void 0}}}function Xf(e,t){if(!M(e))throw l("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const n=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,r=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw l(r,n)}if(!M(e.result))throw l("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Jf(e){return M(e)&&typeof e.code=="string"&&typeof e.message=="string"}const Zf={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 ae(e,"Steam 游戏库接口响应异常")}},Ta=20,eh=100,Ca=0,La="weeks",th=100,nh=new Set(["weeks","all","achieved"]);function rh(e){const t=Qf(e.network,e.operationContext),n=new Map;let r=0,i=!1;const o=e.account.onChange(()=>{r+=1,t.clear(),n.clear()}),s=e.authorization.onEvent((w,y)=>{w==="user_info_authorization_change"&&"identity"in y&&y.identity==="denied"&&(r+=1,t.clear(),n.clear())});function a(){if(i||e.operationContext.signal.aborted)throw l("RUNTIME_DESTROYED","小程序 Runtime 已终止")}function c(){const w=e.identity.get()?.miniProgramId?.trim();if(!w)throw l("INVALID_STATE","用户能力缺少 canonical 小程序身份");return w}async function u(){a();let w;try{w=await e.account.getCurrentUserId(e.operationContext)}catch(y){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):Fo(y)?y:l("REQUEST_FAILED","读取小黑盒账号失败")}return typeof w=="string"&&w.trim()?w.trim():void 0}async function d(w,y){const m=await u();if(r!==y||m!==w)throw l("AUTHORIZATION_CONTEXT_CHANGED","用户请求期间账号上下文已变化,请重新操作")}async function h(w,y){try{return await ar(e.network,w,y,{...e.operationContext,credentials:"heybox-session"})}catch(m){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):m instanceof J?l("REQUEST_UNSUPPORTED",m.message):m instanceof $t?l("INVALID_RESPONSE","用户接口响应不合法"):m instanceof ft?l("REQUEST_FAILED","用户请求失败"):m instanceof lt?l("REQUEST_FAILED",m.message):Fo(m)?m:l("REQUEST_FAILED","用户请求失败")}}async function p(){c();const w=r,y=await u();if(!y)return{isHeyboxAppLoggedIn:!1,authorization:null,userInfo:null};const[m,b]=await Promise.all([e.authorization.getOrCreateLocalIdentity(y),f(y)]);return await d(y,w),{isHeyboxAppLoggedIn:!0,authorization:e.authorization.getAuthorization(),userInfo:{app_user_id:m.appUserId,profile:b,...m.steamId?{steam_id:m.steamId}:{}}}}function f(w){const y=n.get(w);if(y)return y;const m=h(Js,void 0).then(b=>{const I=xo(b,"账号基础信息");if(I.display_username!==void 0&&typeof I.display_username!="string")throw l("INVALID_RESPONSE","账号基础信息 nickname 不合法");if(I.display_avatar!==void 0&&typeof I.display_avatar!="string")throw l("INVALID_RESPONSE","账号基础信息 avatar 不合法");return{nickname:I.display_username??"",avatar:I.display_avatar??""}}).catch(()=>({nickname:"",avatar:""})).finally(()=>{n.get(w)===m&&n.delete(w)});return n.set(w,m),m}async function A(w){const y=ih(w);c();const m=r,b=await u();if(!b)return{isLogin:!1,isBound:!1,data:null};const I=await t.get(b);await d(b,m);const D=Mi(I.steam_id_info);if(Object.keys(D).length===0)return{isLogin:!0,isBound:!1,data:null};const B=await h(Zf,{userId:b,...y,personalInformationOpen:ka(D.personal_infomation_open??D.personal_information_open)});await d(b,m);const R=xo(B,"Steam 游戏库");return{isLogin:!0,isBound:!0,data:dh(R,y)}}return{getInfo:p,getSteamGameList:A,dispose(){i||(i=!0,r+=1,o(),s(),t.clear(),n.clear())}}}function ih(e){if(e==null)return{limit:Ta,offset:Ca,sort:La,includeHidden:!1};if(!M(e))throw Ce("user.getSteamGameList 参数必须是对象");const t=Object.keys(e).find(r=>!["steamId","limit","offset","sort","q","includeHidden"].includes(r));if(t)throw Ce(`user.getSteamGameList 不支持字段: ${t}`);const n={limit:oh(e.limit),offset:sh(e.offset),sort:ah(e.sort),includeHidden:ch(e.includeHidden)};if(e.steamId!==void 0){if(typeof e.steamId!="string"||!e.steamId.trim())throw Ce("user.getSteamGameList steamId 必须是非空字符串");n.steamId=e.steamId.trim()}if(e.q!==void 0){if(typeof e.q!="string")throw Ce("user.getSteamGameList q 必须是字符串");const r=e.q.trim();r&&(n.q=r.slice(0,th))}return n}function oh(e){if(e===void 0)return Ta;if(!Number.isInteger(e)||Number(e)<1)throw Ce("user.getSteamGameList limit 必须是正整数");return Math.min(Number(e),eh)}function sh(e){if(e===void 0)return Ca;if(!Number.isInteger(e)||Number(e)<0)throw Ce("user.getSteamGameList offset 必须是非负整数");return Number(e)}function ah(e){if(e===void 0)return La;if(typeof e!="string"||!nh.has(e))throw Ce("user.getSteamGameList sort 不支持");return e}function ch(e){if(e===void 0)return!1;if(typeof e!="boolean")throw Ce("user.getSteamGameList includeHidden 必须是 boolean");return e}function dh(e,t){if(!Array.isArray(e.game_list))throw l("INVALID_RESPONSE","Steam 游戏库 game_list 必须是数组");const n=e.game_list.map(uh).filter(a=>a!==void 0),r=jn(e.total),i=t.offset+n.length,o={gameList:n,hasMore:n.length>=t.limit,nextOffset:i};r!==void 0&&(o.total=r,o.hasMore=i<r);const s=ka(e.is_me);return s!==void 0&&(o.isMe=s),o}function uh(e){const t=Mi(e),n=jn(t.appid),r=jn(t.steam_appid)??n,i=Ui(t.name);if(n===void 0||r===void 0||!i)return;const o={appid:n,steamAppid:r,name:i};Rt(o,"image",t.image),Rt(o,"icon",t.appicon??t.icon),Ot(o,"playtimeForever",t.playtime_forever),Ot(o,"playtime2Weeks",t.playtime_2weeks);const s=fh(t.external_tags??t.tags);s.length&&(o.tags=s);const a=lh(t.price);return a&&(o.price=a),o}function lh(e){const t=Mi(e),n={};return Rt(n,"current",t.current),Rt(n,"initial",t.initial),Ot(n,"discount",t.discount),Ot(n,"lowestPrice",t.lowest_price),Rt(n,"deadlineDate",t.deadline_date),Ot(n,"deadlineTimestamp",t.deadline_timestamp),Object.keys(n).length?n:void 0}function xo(e,t){if(!M(e))throw l("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const n=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,r=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw l(r,n)}if(!M(e.result))throw l("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Mi(e){return M(e)?e:{}}function Ui(e){return typeof e=="string"?e.trim():typeof e=="number"||typeof e=="boolean"?String(e):""}function fh(e){return Array.isArray(e)?e.map(Ui).filter(Boolean):[]}function jn(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()&&Number.isFinite(Number(e)))return Number(e)}function ka(e){if(e===!0||e===1||e==="1")return!0;if(e===!1||e===0||e==="0")return!1}function Rt(e,t,n){const r=Ui(n);r&&Object.assign(e,{[t]:r})}function Ot(e,t,n){const r=jn(n);r!==void 0&&Object.assign(e,{[t]:r})}function Ce(e){return l("INVALID_PARAMS",e)}function Fo(e){return M(e)&&typeof e.code=="string"&&typeof e.message=="string"}function hh(e){const t=e.userDataMode??Md(e.runtimePermissions,e.steamAccount===!0);return{[gn]:async n=>(Bo(n,"user.getInfo"),Ji(t,"user.getInfo"),e.user.getInfo()),[pn]:async(n,r)=>{Bo(n,"user.revokeAuthorization"),await e.authorization.revoke(r.trustedUserGesture)},[En]:async n=>(Ji(t,"user.getSteamGameList"),e.user.getSteamGameList(n))}}function Bo(e,t){if(e!==void 0)throw l("INVALID_PARAMS",`${t} 不接收入参`)}function Vo(e){throw{code:"INVALID_PARAMS",message:e}}function wt(e,t){const n=Number(e);return Number.isFinite(n)&&n>0?n:t}function Ma(e,t){const n=Number(e);return Number.isFinite(n)&&n>=0?n:t}function tn(e,t,n){return Math.min(Ma(e,t),n)}async function mh(e){try{return Ma(await e.getNavigationBarHeight(),0)}catch{return 0}}function gh(e,t,n,r){const i=tn(e.safeArea?.left,0,t),o=Math.max(i,tn(e.safeArea?.right,t,t)),s=tn(e.safeArea?.top,r,n),a=Math.max(s,tn(e.safeArea?.bottom,n,n));return{left:i,right:o,top:s,bottom:a,width:o-i,height:a-s}}async function ph(e){const t=e.getViewportMetrics(),n=wt(t.windowWidth,0),r=wt(t.windowHeight,0),i=await mh(e);return{pixelRatio:wt(t.pixelRatio,1),screenWidth:wt(t.screenWidth,n),screenHeight:wt(t.screenHeight,r),windowWidth:n,windowHeight:r,statusBarHeight:i,safeArea:gh(t,n,r,i),screenTop:i}}function Eh(e){return{[In]:async()=>(Y(e.operationContext.signal),ph(e.presentation)),[An]:async t=>{if(Y(e.operationContext.signal),typeof t!="object"||t===null||Array.isArray(t))return Vo("viewport.setNavigationBarStyle 参数必须是对象");const n=t.foregroundStyle;if(n!=="light"&&n!=="dark")return Vo("viewport.setNavigationBarStyle foregroundStyle 必须是 light 或 dark");await G(()=>e.presentation.setNavigationBarStyle(n,e.operationContext),e.operationContext.signal)}}}const yh=new Map(ke.map(e=>[e.method,e]));function Rr(e,t,n){return{code:e,message:t,...n===void 0?{}:{data:n}}}function wh(e){const t=pt(e);return n=>{if(n.requirement.kind==="none")return{allowed:!0};for(const r of n.requirement.permissions){const i=t.valid?t.permissions[r]:void 0;if(!i)return{allowed:!1,code:"PERMISSION_NOT_DECLARED",message:`小程序未声明权限: ${r}`,data:{permission:r,method:n.method}};if(i.status!=="enabled")return{allowed:!1,code:"PERMISSION_DENIED",message:`小程序权限未启用: ${r}`,data:{permission:r,method:n.method}}}return{allowed:!0}}}function _h(e,t,n,r){let i;try{i=Promise.resolve(e(t,n))}catch(o){return r.aborted?Promise.resolve({status:"dropped"}):Promise.reject(o)}return r.aborted?(i.catch(()=>{}),Promise.resolve({status:"dropped"})):new Promise((o,s)=>{let a=!1;const c=d=>{a||(a=!0,r.removeEventListener("abort",u),d())},u=()=>c(()=>o({status:"dropped"}));r.addEventListener("abort",u,{once:!0}),i.then(d=>c(()=>o({status:"handled",value:d})),d=>c(()=>s(d)))})}function Ih(e){const t=wh(e.runtimePermissions),n=pt(e.runtimePermissions);let r=0;return{async dispatch(i,o,s){const a=e.now??Ah,c=e.onTrace?a():0,u=e.onTrace?`cap_${++r}`:"";try{if(e.terminalSignal.aborted)throw Rr("RUNTIME_DESTROYED","小程序 Runtime 已终止");ed(i,e.effectiveCapabilities);const d=yh.get(i);if(!d)throw new Error(`Capability method ${i} 缺少 protocol metadata`);const h=t(d),p=!h.allowed&&n.valid&&n.permissions.companion?.status==="enabled"&&e.allowsCompanionAttachmentAccess?.(i,o)===!0;if(!h.allowed&&!p)throw Rr(h.code,h.message,h.data);const f=e.handlers[i];if(!f)throw new Error(`Capability method ${i} 缺少 handler`);const A=await _h(async()=>{for(const w of e.policies??[]){const y=await w.evaluate({method:i,payload:o,capability:d});if(e.terminalSignal.aborted)throw $o();if(!y.allowed)throw Rr(y.code,y.message,y.data)}if(e.terminalSignal.aborted)throw $o();return f(o,s)},void 0,s,e.terminalSignal);return qo(e.onTrace,Go(u,i,o,c,A),a),A}catch(d){throw qo(e.onTrace,Go(u,i,o,c,{status:"error",error:d}),a),d}}}}function Ah(){return typeof performance>"u"?Date.now():performance.now()}function qo(e,t,n){if(!e)return;const r=n();try{e({...t,timestamp:r,durationMs:Math.max(0,Number.isFinite(r-t.startedAt)?r-t.startedAt:0)})}catch{}}function Go(e,t,n,r,i){const o=i.status==="handled"?"success":i.status;return{callId:e,method:t,startedAt:r,outcome:o,...i.status==="error"?{errorCode:bh(i.error)}:{},...Sh(t,n,i)}}function bh(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:void 0}function Sh(e,t,n){if(e!=="network.request"||typeof t!="object"||t===null||!("url"in t)||typeof t.url!="string")return{};try{const r=new URL(t.url);if(r.protocol!=="http:"&&r.protocol!=="https:"||r.username||r.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=n.status==="handled"&&Ua(n.value)&&typeof n.value.status=="number"?n.value.status:void 0;return{network:{method:o,origin:r.origin,pathname:r.pathname,...s===void 0?{}:{responseStatus:s}}}}catch{return{}}}function Ua(e){return typeof e=="object"&&e!==null}function $o(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function Rh(e){const t={signal:e.terminalSignal,...e.miniProgramDetail===void 0?{}:{miniProgramDetail:e.miniProgramDetail}},n=new Bu(e.files,e.miniProgramDetail),r=Ku({registry:n,picker:e.picker,operationContext:t}),i=jd({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});let o,s,a=()=>{},c=()=>{};try{o=rh({account:e.account,network:e.network,identity:e.identity,operationContext:t,authorization:i}),a=i.onEvent((y,m)=>e.eventSink.postEvent(y,m)),c=e.hostCompanion?.onSessionEvent?.(y=>{const m=ku(y);!e.terminalSignal.aborted&&m&&e.eventSink.postEvent(m.type,m.payload)})??(()=>{}),s=wu({account:e.account,identity:e.identity,network:e.network,operationContext:t});const u=Bf({storage:e.storage,storageDiagnostics:e.storageDiagnostics,identity:e.identity,operationContext:t,anonymousStorageScope:e.anonymousStorageScope,storageLimits:e.storageLimits}),d=[{name:"auth",handlers:Zd({authorization:i})},{name:"user",handlers:hh({user:o,authorization:i,runtimePermissions:e.runtimePermissions,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode})},{name:"share",handlers:Hf({environment:e.environment,identity:e.identity,operationContext:t,presentation:e.hostPresentation})},{name:"viewport",handlers:Eh({operationContext:t,presentation:e.hostPresentation})},{name:"storage",handlers:u.handlers},{name:"network",handlers:Yl({network:e.network,transfer:e.transfer,fileRegistry:n,operationContext:t,runtimePermissions:e.runtimePermissions,allowedHttpOrigins:e.allowedHttpOrigins})},{name:"files",handlers:r.files},{name:"file",handlers:r.file},{name:"directory",handlers:r.directory},{name:"ui",handlers:Wf({operationContext:t,presentation:e.hostPresentation})},{name:"device",handlers:Hu({operationContext:t,presentation:e.hostPresentation})},{name:"navigation",handlers:gl({operationContext:t,presentation:e.hostPresentation})},{name:"cloud",handlers:s.handlers},{name:"companion",handlers:Nu({companion:e.hostCompanion,companionPresentation:e.companionPresentation,miniProgramPresentation:e.miniProgramPresentation,operationContext:t,fileRegistry:n})}],h=Oh(d);let p=!1;const f=()=>{p||(p=!0,e.terminalSignal.removeEventListener("abort",f),s?.dispose(),a(),c(),o?.dispose(),i.dispose(),n.dispose())};e.terminalSignal.aborted?f():e.terminalSignal.addEventListener("abort",f,{once:!0});const A=new Set(["file.readText","file.readBytes","file.stat"]);return{modules:d,handlers:h,allowsCompanionAttachmentAccess:(y,m)=>A.has(y)&&Ua(m)&&n.isCompanionAttachmentRef(m.target),...u.diagnostics?{storageDiagnostics:u.diagnostics}:{},dispose:f}}catch(u){throw s?.dispose(),a(),c(),o?.dispose(),i.dispose(),n.dispose(),u}}function Oh(e){const t=new Map(ke.map(i=>[i.method,i.module])),n=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(n.has(a))throw new Error(`Capability method ${a} 存在重复 owner`);if(typeof s!="function")throw new Error(`Capability method ${a} 缺少 handler`);n.set(a,s)}const r=ke.map(i=>i.method).filter(i=>!n.has(i));if(r.length>0)throw new Error(`Capability registry 缺少 method: ${r.join(", ")}`);if(n.size!==ke.length)throw new Error(`Capability registry method 数量不合法: ${n.size}`);return Object.freeze(Object.fromEntries(n))}const Ph="heybox-mini-dev:";function jo(e){try{return Dh(new URL(e))}catch{return!1}}function Dh(e){return e.protocol===Ph}function Nh(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"||vh(e)}function vh(e){const t=e.split(".");if(t.length!==4)return!1;const n=t.map(r=>/^\d+$/.test(r)?Number(r):Number.NaN);return n.some(r=>!Number.isInteger(r)||r<0||r>255)?!1:n[0]===10||n[0]===172&&n[1]>=16&&n[1]<=31||n[0]===192&&n[1]===168}const Th=new Set(["android","ios","ohos","windows","macos","linux","unknown"]);function Ch(e,t){const n=[],r=Lh(e.environmentInfo,n),i=cn(r?.appVersion,"host.appVersion",n),o=Mh(r?.operatingSystem,n);return{info:Object.freeze({runtime:Object.freeze({mode:kh(e.sdkVersionPolicy?.releaseChannel,n)}),host:Object.freeze({appVersion:i}),miniProgram:Object.freeze({id:cn(t.miniProgramId),version:cn(t.miniProgramVersion)}),operatingSystem:Object.freeze(o)}),invalidFields:Object.freeze(n)}}function Lh(e,t){if(e!=null){if(Ha(e))return e;t.push("environmentInfo")}}function kh(e,t){return e==="public"?"production":e==="preview"||e==="development"?e:(e!=null&&t.push("runtime.mode"),"unknown")}function Mh(e,t){if(e==null)return{name:"unknown",version:null};if(!Ha(e))return t.push("operatingSystem"),{name:"unknown",version:null};const n=Th.has(e.name)?e.name:"unknown";return n==="unknown"&&e.name!==void 0&&e.name!==null&&e.name!=="unknown"&&t.push("operatingSystem.name"),{name:n,version:cn(e.version,"operatingSystem.version",t)}}function cn(e,t,n){return e==null?null:typeof e=="string"&&e.trim()?e.trim():(t&&n&&n.push(t),null)}function Ha(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Uh=1,xa="allow-scripts allow-same-origin",Hh="",xh="no-referrer";function Fh(e=xa){return!e.split(/\s+/).includes("allow-same-origin")}function zo(){return window.crypto?.randomUUID?window.crypto.randomUUID():`${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}const Bh=new Set(["javascript:","data:","blob:","file:"]),Wo="xiaoheihe.cn";function Vh(e,t=window.location.href,n={}){const r=e.trim();if(!r)throw new Error("缺少 mini_url 参数");let i;try{i=new URL(r)}catch{throw new Error("小程序链接必须是绝对 URL")}if(Bh.has(i.protocol)||!["http:","https:"].includes(i.protocol))throw new Error("不支持的小程序链接协议");if(!zh(i,t,n))throw new Error("小程序链接必须属于 https://*.xiaoheihe.cn 或本地调试地址");return i.toString()}function qh(e,t){const n=new URL(e);return n.searchParams.set(Cc,t),n.toString()}function Gh(e,t,n){try{const r=new URL(e),i=new URL(t);if(r.origin!==i.origin)return!1;const o=$h(n)??jh(r.pathname);return i.pathname.startsWith(o)}catch{return!1}}function $h(e){if(!e)return;const t=new URL(e,"https://mini-program.invalid").pathname;return t.endsWith("/")?t:`${t}/`}function jh(e){const t=/^(\/u\/[^/]+\/[^/]+\/)/.exec(e)?.[1];if(t)return t;const n=e.lastIndexOf("/");return n>=0?e.slice(0,n+1):"/"}function Ko(e){const t=new URL(e);return Hi(t)?"loopback":xi(t)?"lan":"production"}function zh(e,t,n){return Wh(e)||Hi(e)||xi(e)&&Yh(t,n)}function Wh(e){return e.protocol==="https:"&&Jh(e.hostname)}function Hi(e){return e.protocol==="http:"&&Kh(e.hostname)}function Kh(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"}function xi(e){return e.protocol==="http:"&&Qh(e.hostname)}function Yh(e,t){if(t.allowPrivateNetwork)return!0;try{const n=new URL(e);return Hi(n)||xi(n)}catch{return!1}}function Qh(e){const t=Xh(e);return t?t[0]===10||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168:!1}function Xh(e){const t=e.split(".");if(t.length!==4)return;const n=t.map(r=>{if(!/^\d+$/.test(r))return;const i=Number(r);return Number.isInteger(i)&&i>=0&&i<=255?i:void 0});return n.every(r=>r!==void 0)?n:void 0}function Jh(e){return e===Wo||e.endsWith(`.${Wo}`)}const Zh=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"]),em=new Set(["url","inline","eval","unknown"]),tm=/^\/(?:\:segment(?:\/\:segment)*)?$/,nm=/^[a-f0-9]{64}$/,rm=255,im=160,om=256;function sm(e,t){const n=e;if(!n||typeof n.sdkVersion!="string"||n.sdkVersion!==t||typeof n.effectiveDirective!="string"||!Zh.has(n.effectiveDirective)||typeof n.violatedDirective!="string"||n.violatedDirective.length>om||n.violatedDirective.split(/\s/,1)[0]!==n.effectiveDirective||!["enforce","report"].includes(n.disposition??"")||typeof n.blockedResourceType!="string"||!em.has(n.blockedResourceType)||typeof n.timestamp!="number"||!Number.isFinite(n.timestamp)||n.timestamp<0)return;const r=am(n.blockedOrigin);if(n.blockedOrigin!==void 0&&!r)return;const i=n.redactedPathname;if(i!==void 0&&(typeof i!="string"||i.length>im||!tm.test(i)))return;const o=n.sanitizedPathnameHash;if(!(o!==void 0&&(typeof o!="string"||!nm.test(o)||i===void 0)))return{effectiveDirective:n.effectiveDirective,violatedDirective:n.effectiveDirective,blockedResourceType:n.blockedResourceType,origin:r,sanitizedPathname:i,sanitizedPathnameHash:o,sdkVersion:n.sdkVersion,timestamp:n.timestamp}}function am(e){if(e!==void 0&&!(typeof e!="string"||e.length>rm))try{const t=new URL(e);return["http:","https:"].includes(t.protocol)&&t.origin===e?t.origin:void 0}catch{return}}const cm=/^(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 dm(e){if(!e?.minimumSdkVersion)throw x("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不可用");const t=Be(e.minimumSdkVersion),n=e.sdkVersion?Be(e.sdkVersion):void 0;if(!t)throw x("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不合法");if(e.sdkVersion&&!n)throw x("SDK_VERSION_INVALID","小程序 SDK 版本不合法");const r=Be("0.6.0");if(!n){if(dn(t,r)<0)return{heartbeatEnabled:!1,sdkVersion:void 0};throw x("SDK_VERSION_INVALID","小程序 SDK 版本缺失")}if((e.releaseChannel??"public")==="public"&&n.prerelease.length>0)throw x("SDK_VERSION_INVALID","正式小程序不能使用预发布 SDK");if(dn(n,t)<0)throw x("SDK_VERSION_TOO_LOW","小程序 SDK 版本低于平台最低要求");return{heartbeatEnabled:dn(n,Be("0.6.0-0"))>=0,sdkVersion:e.sdkVersion}}function um(e,t){if(typeof t!="string"||!Be(t))throw x("SDK_VERSION_INVALID","SDK handshake 版本不合法");if(t!==e)throw x("SDK_VERSION_MISMATCH","SDK handshake 版本与 Version record 不一致")}function lm(e,t){const n=Be(e),r=Be(t);if(!(!n||!r))return dn(n,r)}function Be(e){const t=cm.exec(e);if(t)return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]?.split(".").map(n=>/^\d+$/.test(n)?Number(n):n)??[]}}function dn(e,t){for(const r of["major","minor","patch"])if(e[r]!==t[r])return e[r]<t[r]?-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 n=Math.max(e.prerelease.length,t.prerelease.length);for(let r=0;r<n;r+=1){const i=e.prerelease[r],o=t.prerelease[r];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 ur=["android","ios","ohos","windows","macos","linux"],fm="0.9.0",hm=Object.freeze(["android","ios","ohos"]),Fa="该小程序暂不支持当前平台",mm="PLATFORM_UNSUPPORTED";function gm(e){return typeof e=="string"&&ur.includes(e)}function pm(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 Em(e){const t=e.manifest;if(!Am(t))return{status:"invalid",reason:"manifest_not_object"};if(!Object.prototype.hasOwnProperty.call(t,"platforms")){const r=Qo(e.sdkVersion)??Qo(t.sdkVersion);return _m(r)?{status:"invalid",reason:"platforms_missing_after_hard_cutover"}:wm()}const n=Ba(t.platforms);return"reason"in n?{status:"invalid",reason:n.reason}:{status:"resolved",declaredPlatforms:n.platforms,effectivePlatforms:n.platforms,platformsDeclared:!0,policy:"explicit"}}function ym(e){const t=pm(e.operatingSystemName);if(!t)return ot("host_operating_system_unknown");const n=e.platformAccess;if(!n)return ot("platform_access_missing",{platform:t});if(n.source==="compatibility-window")return{status:"allowed",platform:t,effectivePlatforms:ur,platformsDeclared:!1,policy:"legacy_mobile_default",compatibility:n.reason};if(n.source==="manifest"){const s=Em({manifest:n.manifest,...n.sdkVersion===void 0?{}:{sdkVersion:n.sdkVersion}});return s.status==="invalid"?ot("platform_declaration_invalid",{invalidReason:s.reason,platform:t}):Yo(t,s)}if(n.effectivePlatforms===void 0)return ot("platform_declaration_invalid",{invalidReason:"effective_platforms_missing",platform:t});const r=Ba(n.effectivePlatforms);if("reason"in r)return ot("platform_declaration_invalid",{invalidReason:r.reason,platform:t});const i=typeof n.platformsDeclared=="boolean"?n.platformsDeclared:!0,o=Im(n.platformPolicy)?n.platformPolicy:i?"explicit":"legacy_mobile_default";return Yo(t,{declaredPlatforms:i?r.platforms:[],effectivePlatforms:r.platforms,platformsDeclared:i,policy:o})}function Yo(e,t){return t.effectivePlatforms.includes(e)?{status:"allowed",platform:e,effectivePlatforms:t.effectivePlatforms,platformsDeclared:t.platformsDeclared,policy:t.policy}:ot("platform_not_supported",{effectivePlatforms:t.effectivePlatforms,platform:e})}function ot(e,t={}){return{status:"denied",reason:e,message:Fa,...t}}function wm(){return{status:"resolved",declaredPlatforms:[],effectivePlatforms:hm,platformsDeclared:!1,policy:"legacy_mobile_default"}}function Ba(e){if(!Array.isArray(e))return{reason:"platforms_not_array"};if(e.length===0)return{reason:"platforms_empty"};const t=new Set;for(const n of e){if(!gm(n))return{reason:"platform_unknown_value"};if(t.has(n))return{reason:"platform_duplicate_value"};t.add(n)}return{platforms:Object.freeze(ur.filter(n=>t.has(n)))}}function _m(e){if(typeof e!="string"||!e.trim())return!1;const t=lm(e.trim(),fm);return t!==void 0&&t>=0}function Qo(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Im(e){return e==="explicit"||e==="legacy_mobile_default"}function Am(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const bm=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 Sm(e,t,n){const r=Date.now();try{const i=new URL(t);return{type:"security_violation",errorCode:e,timestamp:r,sdkVersion:n,origin:i.origin,sanitizedPathname:Rm(i.pathname),sanitizedPathnameHash:Om(i.pathname)}}catch{return{type:"security_violation",errorCode:e,timestamp:r,sdkVersion:n}}}function Rm(e){return(e==="/"?e:e.replace(/\/+$/,"")).split("/").map(n=>n?":segment":"").join("/")}function Om(e){const t=new TextEncoder().encode(e),n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128,new DataView(r.buffer).setUint32(n-4,t.length*8,!1);const i=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),o=new Uint32Array(64),s=new DataView(r.buffer);for(let a=0;a<n;a+=64){for(let y=0;y<16;y+=1)o[y]=s.getUint32(a+y*4,!1);for(let y=16;y<64;y+=1){const m=o[y-15],b=o[y-2],I=Ee(m,7)^Ee(m,18)^m>>>3,D=Ee(b,17)^Ee(b,19)^b>>>10;o[y]=o[y-16]+I+o[y-7]+D>>>0}let[c,u,d,h,p,f,A,w]=i;for(let y=0;y<64;y+=1){const m=w+(Ee(p,6)^Ee(p,11)^Ee(p,25))+(p&f^~p&A)+bm[y]+o[y]>>>0,b=(Ee(c,2)^Ee(c,13)^Ee(c,22))+(c&u^c&d^u&d);w=A,A=f,f=p,p=h+m>>>0,h=d,d=u,u=c,c=m+b>>>0}[c,u,d,h,p,f,A,w].forEach((y,m)=>{i[m]=i[m]+y>>>0})}return Array.from(i,a=>a.toString(16).padStart(8,"0")).join("")}function Ee(e,t){return e>>>t|e<<32-t}const Pm=1e4,Or=2e3,Dm=2,Nm="open-with-native-credential-policy",Va="安全提示",qa="即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。";class vm{nonce=zo();runtimeId=zo();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 n=Xs(t.ports,{callerCapabilities:t.capabilities,hostCapabilities:t.hostCapabilities});this.ports=n.ports,this.primitiveAvailability=n.primitiveAvailability,this.effectiveCapabilities=n.effectiveCapabilities,this.identity={},this.identityRef={get:()=>{const r=this.identity.miniProgramId?.trim();if(r)return{miniProgramId:r,...this.identity.miniProgramVersion?{version:this.identity.miniProgramVersion}:{}}}},this.handshakeTimeout=t.handshakeTimeout??Pm,this.iframeErrorListener=r=>{this.onIframeError(r)},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??x("RUNTIME_DESTROYED","小程序运行时已销毁")):this.stateValue==="failed"?Promise.reject(this.terminalError??x("STARTUP_ERROR","小程序运行时启动失败")):this.readyContext?Promise.resolve(this.readyContext):this.startPromise?this.startPromise:(Fm(),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=x("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"),!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,n)=>{this.resolveReady=t,this.rejectReady=n})}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=dm(t.sdkVersionPolicy);const n=Ch(t,this.identity);if(this.environmentInfo=n.info,n.invalidFields.length>0&&this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"environment_invalid",message:`环境字段已降级:${n.invalidFields.join(", ")}`}),this.platformGateDecision=ym({operatingSystemName:t.environmentInfo?.operatingSystem?.name,...t.platformAccess===void 0?{}:{platformAccess:t.platformAccess}}),this.platformGateDecision.status==="denied")throw qm(this.platformGateDecision);if(this.miniProgramDetail=Gm(t),this.effectiveCapabilities=Qs(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),km(this.options.onLaunchConfigurationResolved,t,this.sdkVersionDecision),this.isInactive())return;this.applyIframeDefaults(),this.startBridgeServer(),this.installSubscriptions();const r=await this.normalizeLaunchUrl(t.launchUrl);if(this.isInactive())return;const i=await this.confirmDevMiniProgramLaunch(r);if(!this.isInactive()){if(!i){await this.closeAfterDevLaunchCancellation();return}this.bridgeServer?.setTargetOrigin(Um(r)),this.launchUrl=r,this.miniProgramSrc=qh(r,this.nonce),this.traceSecurityPolicy(r),this.setStatus("src_resolved"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"src_resolved"}),this.awaitingControlledDocumentLoad=!0,this.iframe.src=this.miniProgramSrc,Pe(this.options.onLaunch,this.createLaunchContext()),this.armHandshakeTimeout()}}startBridgeServer(){const t={postEvent:(r,i)=>{this.stateValue==="ready"&&this.bridgeServer?.postEvent(r,i)}};this.capabilityGraph=Rh({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});const n=Ih({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:r,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,errorCode:u,network:d})=>{const h={type:"capability",runtimeId:this.runtimeId,callId:r,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,...u?{errorCode:u}:{},...this.identity,...d?{network:d}:{}};Pe(this.options.onCapabilityTrace,h)}}:{}});this.bridgeServer=new Jc({iframe:this.iframe,nonce:this.nonce,dispatcher:n,environmentInfo:this.environmentInfo,onHandshake:r=>this.handleBridgeHandshake(r),onReady:()=>{this.handleBridgeReady()},onDuplicateHandshake:()=>{this.handleDuplicateBridgeHandshake()},onInternalEvent:r=>{this.handleInternalBridgeEvent(r)},onResponsePosted:({method:r,outcome:i,errorCode:o})=>{this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"bridge_response",method:r,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 n=t instanceof Error?t.message:"小程序 iframe 加载失败";this.failRuntime(x("IFRAME_LOAD_ERROR",n,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 Lm(t)?t:Ga(x("STARTUP_ERROR",t instanceof Error?t.message:"获取小程序启动配置失败"),t)}}bindCanonicalIdentity(t){const n=t?.miniProgramId?.trim();n&&(this.identity.miniProgramId=n);const r=t?.miniProgramVersion?.trim();r&&(this.identity.miniProgramVersion=r)}async normalizeLaunchUrl(t){try{const n=this.options.environment.getCurrentHref();return Vh(t,n,{allowPrivateNetwork:jo(n)||Xo(n)||await this.isDevRuntime()})}catch(n){throw x("INVALID_LAUNCH_URL",n instanceof Error?n.message:"小程序链接不合法",n)}}async confirmDevMiniProgramLaunch(t){return await this.shouldConfirmDevMiniProgramLaunch(t)?this.isInactive()?!1:!!await(this.options.confirmDevMiniProgramLaunch??xm)({message:qa,title:Va,url:t}):!0}async shouldConfirmDevMiniProgramLaunch(t){if(Ko(t)==="production")return!1;const n=this.options.environment.getCurrentHref();return!jo(n)&&!Xo(n)}async closeAfterDevLaunchCancellation(){const t=x("LAUNCH_CANCELLED","小程序启动已取消");this.terminalError=t,this.destroyBridgeServer();const n=new AbortController;let r;try{r=Promise.resolve(this.ports.presentation.close({signal:n.signal}))}catch{Jo(),r=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 r.catch(()=>Jo())}async isDevRuntime(){return this.devRuntimePromise??=Promise.resolve().then(()=>this.options.environment.isDevRuntime()).then(Boolean).catch(()=>!1),this.devRuntimePromise}applyIframeDefaults(){this.iframe.setAttribute("allow",Hh),this.iframe.setAttribute("referrerpolicy",xh),this.iframe.setAttribute("sandbox",xa)}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 n of t)try{n?.()}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),Pe(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),Pe(this.options.onReady,t)}handleBridgeHandshake(t){const n=this.sdkVersionDecision?.sdkVersion;if(n)try{um(n,t?.sdkVersion)}catch(r){return this.failRuntime(r),!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(x("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>=Dm)){this.failRuntime(x("HEARTBEAT_TIMEOUT","小程序 SDK 心跳超时"));return}const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.bridgeServer?.postInternalRequest(Qt,t,{probeId:t,timestamp:Date.now()}),this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},Or),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:Qt})}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 n=++this.documentRevalidationGeneration;return this.iframeHiddenForRevalidation||(this.iframeVisibilityBeforeRevalidation=this.iframe.style.visibility,this.iframe.style.visibility="hidden",this.iframeHiddenForRevalidation=!0),this.armDocumentRevalidationTimer(n),t.deferProbe||this.sendDocumentRevalidationProbe(),n}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(Qt,t,{probeId:t,timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:Qt})}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(x("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 文档再验证超时")))},Or))}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()},Or))}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===kc){this.handleCspViolation(t.payload);return}if(t.method!==Lc)return;const n=this.sdkVersionDecision?.sdkVersion;if(!n)return;const r=t.payload;if(!r||r.sdkVersion!==n){this.failRuntime(x("SDK_VERSION_MISMATCH","URL report 的 SDK 版本不一致"));return}if(!(r.probeId!==void 0&&r.probeId!==this.pendingProbeId)){if(typeof r.href!="string"||!Gh(this.launchUrl,r.href,this.locationBasePath)){typeof r.href=="string"&&this.emitUrlSecurityViolation("URL_OUT_OF_SCOPE",r.href),this.failRuntime(x("URL_OUT_OF_SCOPE","小程序页面地址超出允许范围"));return}r.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 n=sm(t,this.sdkVersionDecision?.sdkVersion);n&&this.emitSecurityViolation({type:"security_violation",errorCode:"CSP_VIOLATION",timestamp:n.timestamp,sdkVersion:n.sdkVersion,origin:n.origin,sanitizedPathname:n.sanitizedPathname,sanitizedPathnameHash:n.sanitizedPathnameHash,effectiveDirective:n.effectiveDirective,violatedDirective:n.violatedDirective,blockedResourceType:n.blockedResourceType})}emitSecurityViolation(t){Pe(this.options.onSecurityViolation,t),this.trace({runtimeId:this.nonce,...t})}emitUrlSecurityViolation(t,n){const r=Sm(t,n,this.sdkVersionDecision?.sdkVersion);this.emitSecurityViolation(r)}scheduleUnexpectedDocumentLoadFailure(){this.clearUnexpectedDocumentLoadFailure(),this.unexpectedDocumentLoadTimer=setTimeout(()=>{this.unexpectedDocumentLoadTimer=void 0,this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime(x("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:Uh,launchUrlType:Ko(t),networkPolicy:Nm})}failRuntime(t){const n=Tm(t);return this.isInactive()||(this.terminalError=n,this.terminalController.abort(n),this.postBridgeError(n),this.disposeRuntimeResources(),this.setStatus("failed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"error",errorCode:n.code,message:n.message}),this.setState("failed"),this.teardownIframe(n),Pe(this.options.onError,Cm(n)),this.rejectReady?.(n)),n}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,Pe(this.options.onStateChange,t))}isInactive(){return this.stateValue==="failed"||this.stateValue==="destroyed"}trace(t){Pe(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 Tm(e){const t=Ws(e);return zn(e)&&"cause"in e&&Ga(t,e.cause),t}function Ga(e,t){return Object.defineProperty(e,"cause",{configurable:!0,enumerable:!1,value:t}),e}function Cm(e){return{code:e.code,message:e.message,...e.data!==void 0?{data:e.data}:{}}}function Lm(e){return zn(e)&&typeof e.code=="string"&&typeof e.message=="string"}function zn(e){return!!e&&typeof e=="object"}function Pe(e,t){try{e?.(t)}catch{}}function km(e,t,n){try{e?.(t,n)}catch{}}function Xo(e){try{const t=new URL(e);return t.protocol==="http:"&&Nh(t.hostname)}catch{return!1}}function Mm(e){try{return new URL(e).origin}catch{return}}function Um(e){return Fh()?"*":Mm(e)}function Hm(e){return`${Va}
|
|
1
|
+
import{H as ji,aw as Ac,aV as bc,K as Sc,aE as Rc,aF as Oc,ak as qt,b0 as q,ab as Pc,al as xs,an as Dc,c as zi,a9 as Nc,as as Fs,p as vc,ay as Tc}from"./desktop-app-launch-CQmXIMyL.js";const mn="auth.login",gn="user.getInfo",pn="user.revokeAuthorization",En="user.getSteamGameList",yn="share.copyLink",wn="share.showShareMenu",_n="share.screenshot",In="viewport.getWindowInfo",An="viewport.setNavigationBarStyle",vt="storage.getStorage",Tt="storage.setStorage",bn="network.request",Sn="network.download",Rn="files.pickFiles",On="files.pickDirectory",Pn="files.saveFile",Ct="file.create",Lt="file.remove",Dn="file.exists",kt="file.readText",Nn="file.writeText",Mt="file.readBytes",vn="file.writeBytes",Ut="file.stat",Tn="directory.create",Ht="directory.remove",Cn="directory.exists",Ln="directory.list",kn="ui.showToast",Mn="ui.showLoading",Un="ui.hideLoading",Hn="device.vibrate",xn="device.setClipboard",Fn="navigation.close",Bn="navigation.reload",Vn="navigation.openAppPage",Re="cloud.leaderboard.submit",fe="cloud.leaderboard.getList",Le="cloud.leaderboard.getCurrentUserEntry",We="cloud.leaderboard.deleteCurrentUserEntry",we="cloud.leaderboard.getInfo",Yn="companion.getInfo",Qn="companion.getPreparationStatus",Xn="companion.prepare",Jn="companion.cancelPreparation",Zn="companion.getActiveSession",er="companion.launch",tr="companion.session.write",nr="companion.session.closeStdin",rr="companion.session.terminate",ir="companion.session.ackOutput",or="companion.openAttachment",sr="companion.showNotification",ke=[{method:mn,module:"auth",capability:mn,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:gn,module:"user",capability:gn,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:pn,module:"user",capability:pn,requirement:{kind:"none"},risk:"high"},{method:En,module:"user",capability:En,requirement:{kind:"all",permissions:["steamLibrary"]},risk:"high"},{method:yn,module:"share",capability:yn,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:wn,module:"share",capability:wn,requirement:{kind:"all",permissions:["share"]},risk:"low"},{method:_n,module:"share",capability:_n,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:In,module:"viewport",capability:In,requirement:{kind:"none"},risk:"low"},{method:An,module:"viewport",capability:An,requirement:{kind:"none"},risk:"low"},{method:vt,module:"storage",capability:vt,requirement:{kind:"all",permissions:["storage"]},risk:"low"},{method:Tt,module:"storage",capability:Tt,requirement:{kind:"all",permissions:["storage"]},risk:"medium"},{method:bn,module:"network",capability:bn,requirement:{kind:"all",permissions:["network"]},risk:"high"},{method:Sn,module:"network",capability:Sn,requirement:{kind:"all",permissions:["network","filesystem"]},risk:"high"},{method:Rn,module:"files",capability:Rn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:On,module:"files",capability:On,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Pn,module:"files",capability:Pn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ct,module:"file",capability:Ct,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Lt,module:"file",capability:Lt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Dn,module:"file",capability:Dn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:kt,module:"file",capability:kt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Nn,module:"file",capability:Nn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Mt,module:"file",capability:Mt,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:vn,module:"file",capability:vn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ut,module:"file",capability:Ut,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Tn,module:"directory",capability:Tn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ht,module:"directory",capability:Ht,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Cn,module:"directory",capability:Cn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:Ln,module:"directory",capability:Ln,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:kn,module:"ui",capability:kn,requirement:{kind:"none"},risk:"low"},{method:Mn,module:"ui",capability:Mn,requirement:{kind:"none"},risk:"low"},{method:Un,module:"ui",capability:Un,requirement:{kind:"none"},risk:"low"},{method:Hn,module:"device",capability:Hn,requirement:{kind:"none"},risk:"low"},{method:xn,module:"device",capability:xn,requirement:{kind:"all",permissions:["clipboard"]},risk:"medium"},{method:Fn,module:"navigation",capability:Fn,requirement:{kind:"none"},risk:"medium"},{method:Bn,module:"navigation",capability:Bn,requirement:{kind:"none"},risk:"medium"},{method:Vn,module:"navigation",capability:Vn,requirement:{kind:"none"},risk:"medium"},{method:Re,module:"cloud",capability:Re,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:fe,module:"cloud",capability:fe,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},{method:Le,module:"cloud",capability:Le,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:We,module:"cloud",capability:We,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:we,module:"cloud",capability:we,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},...[Yn,Qn,Xn,Jn,Zn,er,tr,nr,rr,ir,or,sr].map(e=>({method:e,module:"companion",capability:e,requirement:{kind:"all",permissions:["companion"]},risk:"high"}))],xe="heybox:miniprogram",Bs=2,Cc="hb_mini_bridge_nonce",Vs="sdk.handshake",Qt="runtime.location.probe",Lc="sdk.location.report",kc="sdk.csp.violation",qs="operation.progress",Mc="companion.session.output",Uc="companion.session.exit",Hc="companion.session.ownershipLost";function xc(e){return!He(e)||e.namespace!==xe||e.version!==1&&e.version!==2||!ee(e.nonce)?!1:e.type==="handshake"?ee(e.id)&&e.method===Vs&&e.error===void 0&&qc(e.payload):e.type==="request"?ee(e.id)&&ee(e.method)&&e.error===void 0:e.type==="response"?ee(e.id)&&(e.method===void 0||ee(e.method))&&(e.error===void 0||Gc(e.error)):e.type==="event"?!ee(e.method)||e.error!==void 0?!1:e.method===qs?e.version===2&&ee(e.id)&&Vc(e.payload):e.id===void 0||ee(e.id):e.type==="cancel"?e.version===2&&ee(e.id)&&e.method===void 0&&e.payload===void 0&&e.error===void 0:!1}function bi(e){return typeof e!="string"||!e||e.startsWith("/")||e.endsWith("/")||/[\\\u0000-\u001f\u007f]/.test(e)?!1:e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function Gs(e){return He(e)?e.kind==="sandbox"?Oe(e,["kind"]):e.kind==="directory"&&ee(e.handleId)&&Oe(e,["kind","handleId"]):!1}function Si(e){return!He(e)||e.kind!=="file"?!1:ee(e.handleId)?Oe(e,["kind","handleId"]):Gs(e.root)&&bi(e.relativePath)&&Oe(e,["kind","root","relativePath"])}function $s(e){return!He(e)||e.kind!=="directory"?!1:ee(e.handleId)?Oe(e,["kind","handleId"]):Gs(e.root)&&(e.relativePath==="."||bi(e.relativePath))&&Oe(e,["kind","root","relativePath"])}function js(e){return e instanceof Uint8Array&&e.buffer instanceof ArrayBuffer}function Fc(e){return!He(e)||!at(e.loaded)||typeof e.lengthComputable!="boolean"||!Oe(e,["loaded","total","lengthComputable"])?!1:e.lengthComputable?at(e.total)&&e.loaded<=e.total:e.total===void 0}function Bc(e){return He(e)?e.phase==="downloading"?at(e.loaded)&&(e.total===void 0||at(e.total)&&e.loaded<=e.total)&&Oe(e,["phase","loaded","total"]):e.phase!=="verifying"&&e.phase!=="extracting"?!1:at(e.processed)&&at(e.total)&&e.processed<=e.total&&Oe(e,["phase","processed","total"]):!1}function Vc(e){return Fc(e)||Bc(e)}function qc(e){return He(e)&&ee(e.href)&&typeof e.userAgent=="string"&&ee(e.sdkVersion)}function Gc(e){return He(e)&&ee(e.code)&&typeof e.message=="string"}function at(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function ee(e){return typeof e=="string"&&e.length>0}function Oe(e,t){const n=new Set(t);return Object.keys(e).every(r=>n.has(r))}function He(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const ut=["identity","profile","steam_account"],$c=/^[a-z][a-z0-9-]{0,31}$/,zs=["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"],Ri=["userInfo","steamLibrary","share","storage","filesystem","clipboard","leaderboard","network","companion"];new Set(Ri);const jc=new Set(Ri);function zc(e){return jc.has(e)}function pt(e){if(!Xt(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,n={};for(const r of e.entries){if(!Xt(r)||typeof r.key!="string"||!r.key.trim())return{valid:!1,permissions:{}};const i=r.key.trim(),o=i==="network.request"?"network":i;if(t.has(o)||r.status!=="enabled"&&r.status!=="disabled")return{valid:!1,permissions:{}};if(t.add(o),!!zc(o)){if(o==="network"){const s=r.config;if(!Xt(s)||typeof s.useOfficialDomain!="boolean")return{valid:!1,permissions:{}};n[o]={key:o,status:r.status,config:{useOfficialDomain:s.useOfficialDomain}};continue}if(r.config!==null&&r.config!==void 0&&(!Xt(r.config)||Object.keys(r.config).length>0))return{valid:!1,permissions:{}};n[o]={key:o,status:r.status,config:{}}}}return{valid:!0,permissions:n}}function Xt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}ke.map(e=>e.method);function x(e,t,n){return{code:e,message:t,data:n}}function Ws(e){return Wc(e)?{code:e.code,message:e.message,data:e.data}:e instanceof Error?x("RUNTIME_ERROR",e.message):x("UNKNOWN_ERROR","小程序运行时异常",e)}function Wc(e){return!!e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"}function Kc(){try{return{activeElement:globalThis.document?.activeElement??null,userActivation:globalThis.navigator?.userActivation}}catch{return{activeElement:null}}}const Yc=1e3;function Qc(e,t=Kc()){if(t.userActivation)return t.userActivation.isActive===!0;const n=t.lastUserInteractionAt,r=t.now??Date.now();return t.activeElement===e&&n!==void 0&&r>=n&&r-n<=Yc}const Xc="runtime.gate.probe",Ks=new Set(ke.map(e=>e.method));class Jc{iframe;nonce;onReady;onHandshake;onDuplicateHandshake;onInternalEvent;onResponsePosted;handleMessage;handleUserInteraction;dispatcher;environmentInfo;started=!1;destroyed=!1;handshaken=!1;bridgeVersion=Bs;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:xe,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:"unload",payload:{timestamp:Date.now()}})}catch{}finally{window.removeEventListener("message",this.handleMessage);for(const n of["pointerdown","touchend","mousedown","keydown"])window.removeEventListener(n,this.handleUserInteraction,!0);this.lastUserInteractionAt=void 0;for(const n of this.operations.values())n.abort("bridge destroyed");this.operations.clear()}}postEvent(t,n){this.destroyed||this.postMessage({namespace:xe,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:t,payload:n})}postInternalRequest(t,n,r){this.destroyed||this.postMessage({namespace:xe,version:this.bridgeVersion,nonce:this.nonce,type:"request",id:n,method:t,payload:r})}postProgress(t,n){this.bridgeVersion===2&&this.postMessage({namespace:xe,version:2,nonce:this.nonce,type:"event",id:t,method:qs,payload:n})}onMessage(t){if(!this.started||!this.isTrustedMiniProgramMessage(t))return;const n=t.data;if(n.type==="handshake"){this.handleHandshake(n,t.origin);return}if(n.type==="request"){let r=!1;try{r=Qc(this.iframe,{activeElement:document.activeElement,userActivation:navigator.userActivation,lastUserInteractionAt:this.lastUserInteractionAt,now:Date.now()})}catch{r=!1}this.handleRequest(n,r);return}if(n.type==="cancel"&&this.handshaken&&n.id){this.operations.get(n.id)?.abort();return}n.type==="event"&&this.handshaken&&this.onInternalEvent?.(n)}onUserInteraction(t){const n=typeof t.composedPath=="function"?t.composedPath():[];(t.target===this.iframe||n.includes(this.iframe))&&(this.lastUserInteractionAt=Date.now())}isTrustedMiniProgramMessage(t){return t.source===this.iframe.contentWindow&&xc(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,n){const r=t.payload,i=t.version,o=!this.handshaken;if(o){if(this.onHandshake?.(r)===!1)return;this.bridgeVersion=i,i===1&&this.targetOrigin!=="*"&&n&&n!=="null"&&(this.targetOrigin=n),this.handshaken=!0,this.postEvent("launch",{timestamp:Date.now(),url:this.iframe.src})}this.environmentInfo&&t.id&&this.postMessage({namespace:xe,version:this.bridgeVersion,nonce:this.nonce,type:"response",id:t.id,method:Vs,payload:{environment:this.environmentInfo}}),this.postEvent("ready",{timestamp:Date.now()}),o?this.onReady?.(r):this.onDuplicateHandshake?.()}async handleRequest(t,n){if(!t.id||!t.method)return;if(!this.handshaken&&t.method===Xc){this.postResponse(t,{ready:!0});return}if(!this.handshaken){this.postResponse(t,void 0,x("BRIDGE_NOT_READY","小程序 SDK 尚未完成握手"));return}if(!Ks.has(t.method)){this.postResponse(t,void 0,x("METHOD_NOT_FOUND",`未开放小程序能力: ${t.method}`));return}if(this.operations.has(t.id)){this.postResponse(t,void 0,x("INVALID_PARAMS","bridge request id 重复"));return}const r=new AbortController;this.operations.set(t.id,r);try{const i=await this.dispatcher.dispatch(t.method,t.payload,{postEvent:this.postEvent.bind(this),postProgress:o=>{this.operations.get(t.id)===r&&this.postProgress(t.id,o)},signal:r.signal,trustedUserGesture:n});if(i.status==="dropped"||!this.started||this.operations.get(t.id)!==r)return;this.postResponse(t,i.value)}catch(i){if(!this.started||this.operations.get(t.id)!==r)return;const o=Ws(i);this.postResponse(t,void 0,o),this.postEvent("error",o)}finally{this.operations.get(t.id)===r&&(this.operations.delete(t.id),r.signal.aborted||r.abort("operation terminal"))}}postResponse(t,n,r){if(!(!this.postMessage({namespace:xe,version:t.version,nonce:this.nonce,type:"response",id:t.id,method:t.method,payload:n,error:r})||!Zc(t.method)))try{this.onResponsePosted?.({method:t.method,outcome:r?"error":"success",...r?{errorCode:r.code}:{}})}catch{}}postMessage(t){const n=this.iframe.contentWindow;return n?(n.postMessage(t,this.targetOrigin),!0):!1}}function Zc(e){return typeof e=="string"&&Ks.has(e)}const Ys="METHOD_FORBIDDEN";function Ae(e){const t=new Error(`小程序能力已禁用: ${e}`);return t.name="MethodForbiddenError",t.code=Ys,t}class J extends Error{code="HOST_REQUEST_UNSUPPORTED";constructor(t="当前 Host 不支持该请求形状",n){super(t),this.name="HostRequestUnsupportedError",n&&"cause"in n&&Object.defineProperty(this,"cause",{configurable:!0,enumerable:!1,value:n.cause}),Object.setPrototypeOf(this,new.target.prototype)}}const Wi={[mn]:["account.getCurrentUserId","account.ensureAuthenticated","account.onChange","network.request"],[gn]:["account.getCurrentUserId","account.onChange","network.request"],[pn]:["account.getCurrentUserId","account.onChange","network.request"],[En]:["account.getCurrentUserId","account.onChange","network.request"],[yn]:["presentation.setClipboard"],[wn]:["presentation.showShareMenu"],[_n]:["presentation.getViewportMetrics","presentation.captureAndShare"],[In]:["presentation.getViewportMetrics","presentation.getNavigationBarHeight"],[An]:["presentation.setNavigationBarStyle"],[vt]:["storage.getRaw"],[Tt]:["storage.setRaw"],[bn]:["network.request"],[Sn]:["network.stream","files.transfer","files.access"],[Rn]:["files.external"],[On]:["files.external"],[Pn]:["files.save"],[Ct]:["files.access"],[Lt]:["files.removeFile"],[Dn]:["files.access"],[kt]:["files.access"],[Nn]:["files.access"],[Mt]:["files.access"],[vn]:["files.access"],[Ut]:["files.access"],[Tn]:["files.access"],[Ht]:["files.removeDirectory"],[Cn]:["files.access"],[Ln]:["files.access"],[kn]:["presentation.showToast"],[Mn]:["presentation.showLoading"],[Un]:["presentation.hideLoading"],[Hn]:["presentation.vibrate"],[xn]:["presentation.setClipboard"],[Fn]:["presentation.close"],[Bn]:["presentation.reload"],[Vn]:["presentation.openAppPage"],[Re]:["account.getCurrentUserId","account.onChange","network.request"],[fe]:["account.onChange","network.request"],[Le]:["account.getCurrentUserId","account.onChange","network.request"],[We]:["account.getCurrentUserId","account.onChange","network.request"],[we]:["account.onChange","network.request"],[Yn]:["companion.getInfo"],[Qn]:["companion.getPreparationStatus"],[Xn]:["companion.getInfo","companion.getPreparationStatus","companion.prepare"],[Jn]:["companion.cancelPreparation"],[Zn]:["companion.getActiveSession"],[er]:["companion.getInfo","companion.launch"],[tr]:["companion.session.write"],[nr]:["companion.session.closeStdin"],[rr]:["companion.session.terminate"],[ir]:["companion.session.ackOutput"],[or]:["companion.openAttachment"],[sr]:["companion.showNotification"]};function ed(e,t){if(t[e]!==!0)throw Ae(e)}const td=32*1024*1024,nd=/^application\/(?:[a-z0-9!#$&^_.+-]+\+)?json(?:\s*;|$)/i;function rd(e){if(e.mode==="request-only")return{network:{request:(r,i)=>e.request(r,i)}};if(e.mode==="override-request")return{network:{request:(r,i)=>e.request(r,i)},...e.stream===void 0?{}:{stream:e.stream}};const{consume:t,stream:n}=e;return{stream:n,network:{async request(r,i){const o=await n.open(r,i);let s;try{const a=await t(o.body,{maxBytes:td},i);return id(o,a)}catch(a){throw s=a,a}finally{try{await n.release(o.body)}catch(a){if(s===void 0)throw a}}}}}}function id(e,t){const n=Object.fromEntries(Object.entries(e.headers).map(([r,i])=>[r,i.join(", ")]));return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:n,data:od(t,ad(e,"content-type"))}}function od(e,t){sd(t);let n;try{n=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch(r){throw new J("Host network response 不是合法 UTF-8 文本",{cause:r})}if(n.charCodeAt(0)===65279&&(n=n.slice(1)),!t||!nd.test(t)||n==="")return n;try{return JSON.parse(n)}catch{return n}}function sd(e){if(!e)return;const t=/(?:^|;)\s*charset\s*=\s*["']?([^;"'\s]+)/i.exec(e)?.[1];if(t&&!/^utf-?8$/i.test(t))throw new J(`Host network response 不支持 charset=${t}`)}function ad(e,t){return Object.entries(e.headers).find(([n])=>n.toLowerCase()===t)?.[1]?.[0]}function _(e){return typeof e=="function"}function Ki(e){return(...t)=>{throw Ae(e)}}function X(e){return async(...t)=>{throw Ae(e)}}const cd=(e,t)=>{},dd=()=>()=>{};function ud(e){const t={request:_(e.network?.request)?e.network.request.bind(e.network):X("network.request")},n={getCurrentUserId:_(e.account?.getCurrentUserId)?e.account.getCurrentUserId.bind(e.account):X("account.getCurrentUserId"),ensureAuthenticated:_(e.account?.ensureAuthenticated)?e.account.ensureAuthenticated.bind(e.account):X("account.ensureAuthenticated"),onChange:_(e.account?.onChange)?e.account.onChange.bind(e.account):dd},r={getRaw:_(e.storage?.getRaw)?e.storage.getRaw.bind(e.storage):X("storage.getRaw"),setRaw:_(e.storage?.setRaw)?e.storage.setRaw.bind(e.storage):X("storage.setRaw")},i={close:_(e.presentation?.close)?e.presentation.close.bind(e.presentation):X("presentation.close"),reload:_(e.presentation?.reload)?e.presentation.reload.bind(e.presentation):X("presentation.reload"),openAppPage:_(e.presentation?.openAppPage)?e.presentation.openAppPage.bind(e.presentation):X("presentation.openAppPage"),getViewportMetrics:_(e.presentation?.getViewportMetrics)?e.presentation.getViewportMetrics.bind(e.presentation):Ki("presentation.getViewportMetrics"),getNavigationBarHeight:_(e.presentation?.getNavigationBarHeight)?e.presentation.getNavigationBarHeight.bind(e.presentation):Ki("presentation.getNavigationBarHeight"),setNavigationBarStyle:_(e.presentation?.setNavigationBarStyle)?e.presentation.setNavigationBarStyle.bind(e.presentation):X("presentation.setNavigationBarStyle"),showShareMenu:_(e.presentation?.showShareMenu)?e.presentation.showShareMenu.bind(e.presentation):X("presentation.showShareMenu"),setScreenshotChromeHidden:_(e.presentation?.setScreenshotChromeHidden)?e.presentation.setScreenshotChromeHidden.bind(e.presentation):cd,captureAndShare:_(e.presentation?.captureAndShare)?e.presentation.captureAndShare.bind(e.presentation):X("presentation.captureAndShare"),showToast:_(e.presentation?.showToast)?e.presentation.showToast.bind(e.presentation):X("presentation.showToast"),showLoading:_(e.presentation?.showLoading)?e.presentation.showLoading.bind(e.presentation):X("presentation.showLoading"),hideLoading:_(e.presentation?.hideLoading)?e.presentation.hideLoading.bind(e.presentation):X("presentation.hideLoading"),vibrate:_(e.presentation?.vibrate)?e.presentation.vibrate.bind(e.presentation):X("presentation.vibrate"),setClipboard:_(e.presentation?.setClipboard)?e.presentation.setClipboard.bind(e.presentation):X("presentation.setClipboard")},o=_(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,_(e.companion?.[a])?e.companion[a].bind(e.companion):X(`companion.${a}`)]));return _(e.companion?.onSessionEvent)&&(s.onSessionEvent=e.companion.onSessionEvent.bind(e.companion)),{network:t,account:n,storage:r,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 ld(e){const t=fd(e.files?.sandbox),n=_(e.picker?.pickFiles)&&_(e.picker?.pickDirectory),r=_(e.picker?.saveFile),i=t||n||r||_(e.companion?.openAttachment),o=t?e.files?.sandbox.file(".hb-remove-capability"):void 0;return{"account.getCurrentUserId":_(e.account?.getCurrentUserId),"account.ensureAuthenticated":_(e.account?.ensureAuthenticated),"account.onChange":_(e.account?.onChange),"network.request":_(e.network?.request),"network.stream":_(e.transfer?.network.open)&&_(e.transfer?.network.release),"files.sandbox":t,"files.external":n,"files.save":r,"files.access":i,"files.removeFile":_(o?.remove),"files.removeDirectory":_(e.files?.sandbox.remove),"files.transfer":_(e.transfer?.files.writeResource),"storage.getRaw":_(e.storage?.getRaw),"storage.setRaw":_(e.storage?.setRaw),"presentation.close":_(e.presentation?.close),"presentation.reload":_(e.presentation?.reload),"presentation.openAppPage":_(e.presentation?.openAppPage),"presentation.getViewportMetrics":_(e.presentation?.getViewportMetrics),"presentation.getNavigationBarHeight":_(e.presentation?.getNavigationBarHeight),"presentation.setNavigationBarStyle":_(e.presentation?.setNavigationBarStyle),"presentation.showShareMenu":_(e.presentation?.showShareMenu),"presentation.setScreenshotChromeHidden":!0,"presentation.captureAndShare":_(e.presentation?.captureAndShare),"presentation.showToast":_(e.presentation?.showToast),"presentation.showLoading":_(e.presentation?.showLoading),"presentation.hideLoading":_(e.presentation?.hideLoading),"presentation.vibrate":_(e.presentation?.vibrate),"presentation.setClipboard":_(e.presentation?.setClipboard),"companion.getInfo":_(e.companion?.getInfo),"companion.getPreparationStatus":_(e.companion?.getPreparationStatus),"companion.prepare":_(e.companion?.prepare),"companion.cancelPreparation":_(e.companion?.cancelPreparation),"companion.getActiveSession":_(e.companion?.getActiveSession),"companion.launch":_(e.companion?.launch),"companion.session.write":_(e.companion?.write),"companion.session.closeStdin":_(e.companion?.closeStdin),"companion.session.terminate":_(e.companion?.terminate),"companion.session.ackOutput":_(e.companion?.ackOutput),"companion.openAttachment":_(e.companion?.openAttachment),"companion.showNotification":_(e.companion?.showNotification)}}function fd(e){if(!e||typeof e!="object")return!1;const t=e;return t.kind==="directory"&&(t.mode==="read"||t.mode==="readwrite")&&_(t.file)&&_(t.directory)&&_(t.create)&&_(t.stat)&&_(t.list)}function Yi(e,t){return t?.[e]!==!1}function hd(e){return e==="network.download"||e.startsWith("files.")||e.startsWith("file.")||e.startsWith("directory.")||e.startsWith("companion.")}function Qs(e,t={}){const n={};for(const r of Object.keys(Wi)){const o=Wi[r].every(a=>e[a]),s=!hd(r)||!!t.miniProgramDetail?.miniProgramId.trim();n[r]=Yi(r,t.callerCapabilities)&&Yi(r,t.hostCapabilities)&&o&&s}return n}function Xs(e={},t={}){const n=ld(e),r=Qs(n,t);return{ports:ud(e),primitiveAvailability:n,availablePrimitives:n,effectiveCapabilities:r}}function Oi(e,t){if(!t||t===e.signal)return e;const n=typeof AbortSignal.any=="function"?AbortSignal.any([e.signal,t]):md(e.signal,t);return{...e,signal:n}}function md(e,t){const n=new AbortController,r=()=>{e.removeEventListener("abort",o),t.removeEventListener("abort",s)},i=a=>{n.signal.aborted||(r(),n.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})),n.signal}function gd(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 pd=4,Ed=["xiaoheihe.cn","max-c.com","debugmode.cn","maxjia.com"],yd=new Set(["connection","content-length","host","keep-alive","proxy-connection","te","trailer","transfer-encoding","upgrade"]),wd=["/user_miniprogram/runtime/auth","/user_miniprogram/openapi/v1"],_d=["/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 Id(e,t){const n=Sd(e);return n===null||Qi(n,wd)?!0:t&&Qi(n,_d)}function Ad(e){const t=e.hostname.toLowerCase().replace(/\.$/,"");return Ed.some(n=>t===n||t.endsWith(`.${n}`))}function bd(e){const t=e.trim().toLowerCase();return yd.has(t)||/^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(t)}function Sd(e){let t=e;for(let n=0;n<pd;n+=1){let r;try{r=decodeURIComponent(t)}catch{return null}if(r===t)return Xi(t);t=r}try{if(decodeURIComponent(t)!==t)return null}catch{return null}return Xi(t)}function Qi(e,t){return t.some(n=>e===n||e.startsWith(`${n}/`))}function Xi(e){const t=[];for(const n of e.replace(/\\/g,"/").split("/"))!n||n==="."||(n===".."?t.pop():t.push(n));return`/${t.join("/")}`}function l(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Rd(e){return typeof e=="object"&&e!==null}function ae(e,t){const n=e.data;if(!Rd(n)||typeof n.status!="string")throw new Error(t);return n}const Js={auth:"optional",channel:"api",id:"heybox.account.user_base_info.envelope.get",method:"GET",path:"/account/get_user_base_info"},Od={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 ae(e,"工坊小程序详情加载失败")}};function Gt(e){const t=e.runtimeAuthContextToken?.trim();return{mini_program_id:e.miniProgramId,...t?{runtime_auth_context_token:t}:{}}}function Pd(e){return{challenge:e.challenge,expiresIn:e.expires_in,requestedScopes:e.requested_scopes||[],displayedScopes:e.displayed_scopes||[],consentUiVersion:e.consent_ui_version}}function Dd(e){const t=ae(e,"小程序登录授权接口响应异常"),n=t.result,r={};if(n.login_code&&typeof n.login_code=="object"){const i=n.login_code;r.loginCode={code:i.code,expiresIn:i.expires_in,scopes:i.scopes||[]}}return n.consent_challenge&&typeof n.consent_challenge=="object"&&(r.consentChallenge=Pd(n.consent_challenge)),{...t,result:r}}const Nd={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=>({...Gt(e.runtimeContext),challenge:e.challenge}),parse:e=>ae(e,"小程序授权取消接口响应异常")},vd={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=>Gt(e.runtimeContext),parse:e=>ae(e,"小程序授权撤销接口响应异常")},Td={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=>Gt(e.runtimeContext),parse(e){const t=ae(e,"小程序隔离身份接口响应异常"),n=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,...n?{steamId:n}:{}}}}},Cd={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=>({...Gt(e.runtimeContext),...e.scopes?.length?{scopes:e.scopes.join(",")}:{}}),parse:e=>Dd(e)},Ld={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=>({...Gt(e.runtimeContext),challenge:e.challenge,...e.selectedScopes.length?{selected_scopes:e.selectedScopes.join(",")}:{}}),parse(e){const t=ae(e,"小程序登录确认接口响应异常");return{...t,result:{code:t.result.code,expiresIn:t.result.expires_in,scopes:t.result.scopes}}}};function kd(e){const t=pt(e);return t.valid&&t.permissions.network?.status==="enabled"}function Zs(e,t){return t?e?"server":"local":"legacy"}function Md(e,t){return Zs(kd(e),t)}function Ji(e,t){if(e==="server")throw l("SERVER_API_REQUIRED",`${t} 在联网模式下必须通过开发者服务端 OpenAPI 获取`)}function Ud(e,t){if(e==="local")throw l("SERVER_API_REQUIRED",`${t} 需要 effective network 启用后才能使用`)}const Hd=["baseURL","errorMode","jsonParseMode","observability","queryEncoding","responseType","security"],xd=new Set(["auth","body","bodyEncoding","channel","failurePresentation","headers","id","method","parse","path","query","timeout"]),Fd=/authorization|cookie|pkey|password|secret|token/i,ea=/authorization|cookie|pkey|token|password|secret/i;function pe(e,t){return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Bd(e){for(const t of Object.keys(e))if(!xd.has(t))throw new J(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);for(const t of Hd)if(Object.prototype.hasOwnProperty.call(e,t)&&pe(e,t)!==void 0)throw new J(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);if(pe(e,"bodyEncoding")!==void 0&&pe(e,"bodyEncoding")!=="json"&&pe(e,"bodyEncoding")!=="form")throw new J("endpoint bodyEncoding 不受 HostNetworkPort 支持");if(pe(e,"failurePresentation")!==void 0&&pe(e,"failurePresentation")!=="none")throw new J("endpoint failurePresentation 必须为 none");if(pe(e,"auth")!==void 0&&pe(e,"auth")!=="none"&&pe(e,"auth")!=="optional"&&pe(e,"auth")!=="required")throw new J("endpoint auth 必须为 none、optional 或 required")}function St(e){if(Array.isArray(e))return e.map(St);if(!e||typeof e!="object")return e;const t=e,n={};for(const[r,i]of Object.entries(t))Fd.test(r)||(n[r]=St(i));return n}function Zi(e){if(!e)return;const t={};for(const[n,r]of Object.entries(e))ea.test(n)||(t[n]=r);return t}function Vd(e){if(!e)return;const t=Object.keys(e).find(n=>ea.test(n));if(t)throw new J(`endpoint 禁止声明 credential-bearing header: ${t}`)}class lt extends Error{code="INTERNAL_ENDPOINT_HTTP_STATUS";endpointId;status;constructor(t){super(`内部 endpoint 请求失败: HTTP ${t.status}`),this.name="InternalEndpointHttpStatusError",this.endpointId=t.endpointId,this.status=t.status,Object.setPrototypeOf(this,new.target.prototype)}}function ta(e,t){Object.defineProperty(e,"cause",{configurable:!1,enumerable:!1,value:t,writable:!1})}class ft extends Error{code="INTERNAL_ENDPOINT_REQUEST_FAILED";endpointId;constructor(t){super(`内部 endpoint 请求执行失败: ${t.endpointId}`),this.name="InternalEndpointRequestError",this.endpointId=t.endpointId,ta(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}class $t extends Error{code="INTERNAL_ENDPOINT_PARSE_FAILED";endpointId;constructor(t){super(`内部 endpoint 响应解析失败: ${t.endpointId}`),this.name="InternalEndpointParseError",this.endpointId=t.endpointId,ta(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}function qd(e,t,n,r,i,o,s,a){return{config:{auth:e.auth,body:St(i),bodyEncoding:e.bodyEncoding,channel:e.channel,credentials:s.credentials,headers:Zi(o),method:e.method,metadata:{endpointId:e.id},query:St(r),timeout:e.timeout,url:n},data:St(a.data),headers:Zi(a.headers)||{},status:a.status,statusText:a.statusText}}async function ar(e,t,n,r){if(!r||!r.signal)throw new TypeError("requestEndpoint requires an AbortSignal");if(r.credentials!=="heybox-session"&&r.credentials!=="omit")throw new TypeError("requestEndpoint requires explicit credentials");if(Bd(t),typeof t.id!="string"||!t.id)throw new J("endpoint id 必须为非空字符串");if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(t.method))throw new J("endpoint method 不受 HostNetworkPort 支持");const i=typeof t.path=="function"?await t.path(n):t.path;if(typeof i!="string"||!i)throw new J("endpoint path 必须为非空字符串");const o=t.query?await t.query(n):void 0,s=t.body?await t.body(n):void 0,a=t.headers?await t.headers(n):void 0;Vd(a);let c;try{c=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:r.credentials,...t.bodyEncoding===void 0?{}:{bodyEncoding:t.bodyEncoding},...t.timeout===void 0?{}:{timeout:t.timeout}},{signal:r.signal,...r.miniProgramDetail===void 0?{}:{miniProgramDetail:r.miniProgramDetail}})}catch(d){throw d instanceof J?d:new ft({endpointId:t.id,cause:d})}if(c.status<200||c.status>=300)throw new lt({endpointId:t.id,status:c.status});const u=qd(t,n,i,o,s,a,r,c);if(t.parse)try{return await t.parse(u,n)}catch(d){throw new $t({endpointId:t.id,cause:d})}return u.data}const Gd=new Set(ut),Pi="steam_account",na=new Set(ut.filter(e=>e!==Pi)),$d=1e3;function jd(e){const t=new Set,n=new Map,r=new Set;let i=0,o=!1,s=Promise.resolve(),a;const c=e.steamAccount===!0,u=e.userDataMode??Zs(e.networkEnabled===!0,c);async function d(){if(!c)return{};if(!e.authorizationContext)throw l("METHOD_FORBIDDEN","新能力版本缺少 Runtime auth context Port");let g;try{g=await e.authorizationContext.get(e.operationContext)}catch{throw l("REQUEST_FAILED","读取 Runtime auth context 失败")}if(g.steamAccount!==c||g.userDataMode!==u)throw l("AUTHORIZATION_CONTEXT_CHANGED","Runtime auth context 已变化,请重新打开小程序");const N=g.token.trim();if(!N)throw l("REQUEST_FAILED","Runtime auth context 为空");return{runtimeAuthContextToken:N}}const h=e.account.onChange(g=>{p(),f("heybox_app_login_change",{isHeyboxAppLoggedIn:!!g})});function p(){i+=1,a?.abort(),n.clear(),r.clear()}function f(g,N){for(const L of t)try{L(g,N)}catch{}}function A(){const g=e.identity.get()?.miniProgramId?.trim();if(!g)throw l("INVALID_STATE","当前能力缺少 canonical 小程序身份");return g}function w(){if(o||e.operationContext.signal.aborted)throw l("RUNTIME_DESTROYED","小程序 Runtime 已终止")}async function y(){w();let g;try{g=await e.account.getCurrentUserId(e.operationContext)}catch(N){throw ro(N,e.operationContext.signal,"读取小黑盒账号失败")}return typeof g=="string"&&g.trim()?g.trim():void 0}async function m(g,N){const L=await y();if(i!==N||L!==g)throw l("AUTHORIZATION_CONTEXT_CHANGED","授权期间账号上下文已变化,请重新操作")}async function b(g){w();try{await e.account.ensureAuthenticated({trustedUserGesture:g,reason:"runtime_auth",signal:e.operationContext.signal})}catch(L){throw ro(L,e.operationContext.signal,"小黑盒登录失败")}const N=await y();if(!N)throw l("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");return N}async function I(g,N,L=e.operationContext.signal){try{if(L.aborted)throw ti();return await Xd(ar(e.network,g,N,{...e.operationContext,credentials:"heybox-session",signal:L}),L)}catch(k){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):k instanceof J?l("REQUEST_UNSUPPORTED",k.message):k instanceof $t?l("INVALID_RESPONSE","授权接口响应不合法"):k instanceof ft?l("REQUEST_FAILED","授权请求失败"):k instanceof lt?l("REQUEST_FAILED",k.message):ra(k)?k:l("REQUEST_FAILED","授权请求失败")}}async function D(g,N){await I(Nd,{runtimeContext:{miniProgramId:g,...await d()},challenge:N}).catch(()=>{})}function B(g){const N=async()=>{const k=to(e.operationContext.signal);a=k;try{return await g(k.signal)}finally{a===k&&(a=void 0),k.abort()}},L=s.then(N,N);return s=L.then(()=>{},()=>{}),L}async function R(g,N,L,k,U){if(!L)throw await D(g,N.challenge),l("USER_GESTURE_REQUIRED","展示授权确认需要用户手势");if(!e.authPresentation)throw await D(g,N.challenge),l("AUTHORIZATION_PRESENTATION_UNAVAILABLE","授权确认界面不可用");return B(async z=>{await m(k,U);const $=await C(g,N.displayedScopes,z);await m(k,U);let Q;try{Q=await e.authPresentation.confirmAuthorization({miniProgramId:g,scopes:N.displayedScopes,...$,signal:z})}catch(ne){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):(await m(k,U),await D(g,N.challenge),zd("REQUEST_FAILED","授权确认界面执行失败",ne))}if(await m(k,U),Q.status!=="granted")throw await D(g,N.challenge),l("AUTHORIZATION_CANCELLED","用户取消授权");const W=Yd(Q.grantedScopes,N.displayedScopes,c);if(!W.includes("identity"))throw await D(g,N.challenge),l("AUTHORIZATION_CANCELLED","用户拒绝授权");return W})}async function C(g,N,L){const k=to(L),U=setTimeout(()=>k.abort(),$d);try{const z=Qd(e.miniProgramPresentation),[$,Q]=await Promise.all([z?Promise.resolve(z):T(g,k.signal),N.includes("profile")?S(k.signal):Promise.resolve(void 0)]);return{...$?{miniProgram:$}:{},...Q?{userProfile:Q}:{}}}finally{clearTimeout(U),k.abort()}}async function T(g,N){try{const L=e.identity.get()?.version?.trim(),k=await I(Od,{mini_program_id:g,...L?{miniprogram_version:L}:{}},N),U=et(k,"小程序公开资料"),z=ct(U.name),$=ct(U.icon_url);return z||$?{...z?{name:z}:{},...$?{avatarUrl:$}:{}}:void 0}catch{return}}async function S(g){try{const N=await I(Js,void 0,g),L=et(N,"账号基础信息"),k=ct(L.display_username),U=ct(L.display_avatar);return k||U?{...k?{nickname:k}:{},...U?{avatar:U}:{}}:void 0}catch{return}}async function E(g,N){if(Ud(u,"auth.login"),!c&&g.includes(Pi))throw l("INVALID_PARAMS","auth.login 参数不合法");const L=A(),k=await b(N),U=i,z=await I(Cd,{runtimeContext:{miniProgramId:L,...await d()},scopes:g});await m(k,U);const $=et(z,"小程序登录"),Q=no($,"loginCode"),W=no($,"consentChallenge");if(Q===W)throw l("INVALID_RESPONSE","小程序登录 begin 必须返回 exact oneof");let ne;if(Q)ne=eo($.loginCode,c);else{const Xe=Wd($.consentChallenge,c),Je=await R(L,Xe,N,k,U);await m(k,U);const Yt=await I(Ld,{runtimeContext:{miniProgramId:L,...await d()},challenge:Xe.challenge,selectedScopes:Je});if(await m(k,U),ne=eo(et(Yt,"小程序登录确认"),c),ne.scopes.some(ue=>!Je.includes(ue)))throw l("INVALID_RESPONSE","小程序登录确认返回了未选择的 scope")}r.clear();for(const Xe of ne.scopes)r.add(Xe);return f("heybox_app_login_change",{isHeyboxAppLoggedIn:!0}),f("user_info_authorization_change",pr(r,c)),ne}async function O(g,N){const L=i,k=await I(Td,{runtimeContext:{miniProgramId:N,...await d()}});await m(g,L);const U=Kd(et(k,"用户本地身份"),c);for(const z of c?ut:na)r.add(z);return f("user_info_authorization_change",pr(r,c)),U}function v(g){w();const N=A(),L=`${g}\0${N}`,k=n.get(L);if(k)return k;const U=O(g,N).finally(()=>{n.get(L)===U&&n.delete(L)});return n.set(L,U),U}async function P(g){if(!g)throw l("USER_GESTURE_REQUIRED","撤销授权需要用户手势");const N=A(),L=i,k=await y();if(!k)throw l("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");const U=await I(vd,{runtimeContext:{miniProgramId:N,...await d()}});await m(k,L),et(U,"用户授权撤销"),p(),f("user_info_authorization_change",{identity:"denied",profile:"denied",...c?{steam_account:"denied"}:{}})}return{login:E,getOrCreateLocalIdentity:v,getAuthorization:()=>pr(r,c),revoke:P,onEvent(g){return t.add(g),()=>t.delete(g)},dispose(){o||(o=!0,p(),h(),t.clear())}}}function zd(e,t,n){const r=l(e,t);return Object.defineProperty(r,"cause",{configurable:!0,enumerable:!1,value:n}),r}function et(e,t){if(!M(e))throw l("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const n=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,r=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw l(r,n)}if(!M(e.result))throw l("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function eo(e,t){if(!M(e))throw l("INVALID_RESPONSE","login code 必须是对象");const n=qn(e.scopes,"login code scopes",t);if(typeof e.code!="string"||!e.code.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!n.includes("identity"))throw l("INVALID_RESPONSE","login code 响应不合法");return{code:e.code,expiresIn:Number(e.expiresIn),scopes:n}}function Wd(e,t){if(!M(e))throw l("INVALID_RESPONSE","授权 challenge 必须是对象");const n=qn(e.requestedScopes,"challenge requestedScopes",t),r=qn(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||!n.length||!n.includes("identity")||!r.length||!r.includes("identity")||n.some(i=>!r.includes(i)))throw l("INVALID_RESPONSE","授权 challenge 响应不合法");return{challenge:e.challenge.trim(),requestedScopes:n,displayedScopes:r}}function Kd(e,t){if(!M(e)||typeof e.appUserId!="string"||!e.appUserId.trim())throw l("INVALID_RESPONSE","本地身份 appUserId 必须是非空字符串");const n=e.appUserId.trim();if(!t)return{appUserId:n};if(e.steamId!==void 0&&typeof e.steamId!="string")throw l("INVALID_RESPONSE","本地身份 steamId 必须是字符串");const r=typeof e.steamId=="string"&&e.steamId.trim()?e.steamId.trim():void 0;return r?{appUserId:n,steamId:r}:{appUserId:n}}function Yd(e,t,n){const r=qn(e,"授权选择 scopes",n);if(r.some(i=>!t.includes(i)))throw l("INVALID_RESPONSE","授权选择包含未展示的 scope");return r}function ct(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Qd(e){const t=ct(e?.name),n=ct(e?.avatarUrl);return t||n?{...t?{name:t}:{},...n?{avatarUrl:n}:{}}:void 0}function to(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 Xd(e,t){return t.aborted?Promise.reject(ti()):new Promise((n,r)=>{let i=!1;const o=a=>{i||(i=!0,t.removeEventListener("abort",s),a())},s=()=>o(()=>r(ti()));t.addEventListener("abort",s,{once:!0}),e.then(a=>o(()=>n(a)),a=>o(()=>r(a)))})}function ti(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function qn(e,t,n){const r=n?Gd:na;if(!Array.isArray(e)||e.some(i=>typeof i!="string"||!r.has(i))||new Set(e).size!==e.length)throw l("INVALID_RESPONSE",`${t} 不合法`);return[...e]}function pr(e,t){const n=t?ut:ut.filter(r=>r!==Pi);return Object.fromEntries(n.map(r=>[r,e.has(r)?"granted":"not_requested"]))}function no(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function ra(e){return M(e)&&typeof e.code=="string"&&typeof e.message=="string"}function ro(e,t,n){return t.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):ra(e)?e:l("REQUEST_FAILED",n)}const Jd=new Set(ut);function Zd(e){return{[mn]:async(t,n)=>e.authorization.login(eu(t),n.trustedUserGesture)}}function eu(e){if(e===void 0)return["identity"];if(!M(e)||Object.keys(e).some(t=>t!=="scopes"))throw io();if(e.scopes===void 0)return["identity"];if(!Array.isArray(e.scopes)||e.scopes.some(t=>typeof t!="string"||!Jd.has(t))||new Set(e.scopes).size!==e.scopes.length)throw io();return[...e.scopes]}function io(){return l("INVALID_PARAMS","auth.login 参数不合法")}const tu={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 ae(e,"排行榜记录删除接口响应异常")}},nu={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 ae(e,"当前排行榜记录接口响应异常")}},ru={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 ae(e,"排行榜信息接口响应异常")}},iu={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 ae(e,"排行榜列表接口响应异常")}},ou={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 ae(e,"排行榜提交接口响应异常")}};function sn(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function oo(e){return e instanceof J?{code:"REQUEST_UNSUPPORTED",message:e.message}:e}function Y(e){if(e.aborted)throw sn()}function G(e,t,n={}){if(t.aborted&&!n.invokeWhenAborted)return Promise.reject(sn());let r;try{r=e()}catch(i){return Promise.reject(oo(i))}return t.aborted?(Promise.resolve(r).catch(()=>{}),Promise.reject(sn())):new Promise((i,o)=>{let s=!1;const a=u=>{s||(s=!0,t.removeEventListener("abort",c),u())},c=()=>a(()=>o(sn()));t.addEventListener("abort",c,{once:!0}),Promise.resolve(r).then(u=>a(()=>i(u)),u=>a(()=>o(oo(u))))})}const su="default",au=/^[A-Za-z0-9_-]{1,64}$/,cu=300*1e3,du=250,uu=3,lu={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 fu{constructor(t){this.options=t,this.unsubscribeAccountChange=mu(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;disposed=!1;handleTerminalAbort=()=>this.dispose();async submit(t){this.assertUsable();const n=this.accountGeneration,r=this.readMiniProgramId();await this.requireCurrentUser(n);const i=await this.request(ou,{miniProgramId:r,...t});this.assertAccountGeneration(n);const o=Et(i,Re);return this.invalidateMutableReads(this.createBucketKey(r,t.key)),Er(o,Re)}getList(t){this.assertUsable();const n=this.readMiniProgramId(),r=this.createBucketKey(n,t.key),i=yt("list",t.limit,t.cursor??null);return this.read(r,"list",i,async()=>{const o=await this.request(iu,{miniProgramId:n,...t}),s=Et(o,fe);if(!_e(s)||!Array.isArray(s.entries)||typeof s.has_more!="boolean")throw j(`${fe} 返回值不合法`);if(s.cursor!==void 0&&s.cursor!==null&&typeof s.cursor!="string")throw j(`${fe} 返回的 cursor 必须是字符串`);return{entries:s.entries.map(a=>Er(a,fe)),...typeof s.cursor=="string"&&s.cursor?{cursor:s.cursor}:{},hasMore:s.has_more}})}async getCurrentUserEntry(t){this.assertUsable();const n=this.accountGeneration,r=this.readMiniProgramId(),i=await this.requireCurrentUser(n),o=this.createBucketKey(r,t.key),s=yt("current",i);return this.read(o,"current",s,async()=>{const a=await this.request(nu,{miniProgramId:r,...t}),c=Et(a,Le);if(!_e(c))throw j(`${Le} 返回值必须是对象`);return c.entry===void 0||c.entry===null?void 0:Er(c.entry,Le)})}async deleteCurrentUserEntry(t){this.assertUsable();const n=this.accountGeneration,r=this.readMiniProgramId();await this.requireCurrentUser(n);const i=await this.request(tu,{miniProgramId:r,...t});this.assertAccountGeneration(n);const o=Et(i,We);if(this.invalidateMutableReads(this.createBucketKey(r,t.key)),!_e(o)||typeof o.deleted!="boolean")throw j(`${We} 返回的 deleted 必须是布尔值`);return{deleted:o.deleted}}getInfo(t){this.assertUsable();const n=this.readMiniProgramId(),r=this.createBucketKey(n,t.key);return this.read(r,"info",yt("info"),async()=>{const i=await this.request(ru,{miniProgramId:n,...t}),o=Et(i,we);if(!_e(o)||typeof o.key!="string"||!au.test(o.key))throw j(`${we} 返回的 key 不合法`);if(t.key!==void 0&&o.key!==t.key)throw j(`${we} 返回的 key 与请求不一致`);if(o.order!=="asc"&&o.order!=="desc")throw j(`${we} 返回的 order 必须是 asc 或 desc`);if(typeof o.rank_limit!="number"||!Number.isInteger(o.rank_limit)||o.rank_limit<0)throw j(`${we} 返回的 rankLimit 必须是非负整数`);return{key:o.key,order:o.order,rankLimit:o.rank_limit}})}read(t,n,r,i){this.assertUsable();const o=this.getOrCreateBucket(t),s=o?.caches[n],a=s?.get(r);if(a&&a.expiresAt>Date.now())return Promise.resolve(a.value);s?.delete(r);const c=yt(t,r),u=this.inflight.get(c);if(u)return u.promise;const d=this.accountGeneration,h=o?.generation,p=i().then(f=>(this.assertAccountGeneration(d),o&&s&&o.generation===h&&(n==="list"?s.size>=du&&s.delete(s.keys().next().value):s.clear(),s.set(r,{expiresAt:Date.now()+cu,value:f})),f)).finally(()=>{this.inflight.get(c)?.promise===p&&this.inflight.delete(c),o&&this.removeEmptyBucket(t,o)});return this.inflight.set(c,{bucketKey:t,promise:p}),p}getOrCreateBucket(t){const n=this.buckets.get(t);if(n)return n;if(this.pruneExpiredBuckets(),this.buckets.size>=uu)return;const r={generation:0,caches:{list:new Map,current:new Map,info:new Map}};return this.buckets.set(t,r),r}invalidateMutableReads(t){this.invalidateInflight(t);const n=this.buckets.get(t);n&&(n.generation+=1,n.caches.list.clear(),n.caches.current.clear())}invalidateForAccountChange(){this.accountGeneration+=1,this.buckets.clear(),this.inflight.clear()}invalidateInflight(t){for(const[n,r]of this.inflight)r.bucketKey===t&&this.inflight.delete(n)}pruneExpiredBuckets(){const t=Date.now();for(const[n,r]of this.buckets)ao(r,t),this.isBucketEmpty(n,r)&&this.buckets.delete(n)}removeEmptyBucket(t,n){ao(n,Date.now()),this.buckets.get(t)===n&&this.isBucketEmpty(t,n)&&this.buckets.delete(t)}isBucketEmpty(t,n){return![...this.inflight.values()].some(r=>r.bucketKey===t)&&Object.values(n.caches).every(r=>r.size===0)}async requireCurrentUser(t){this.assertUsable();let n;try{n=await G(()=>this.options.account.getCurrentUserId(this.options.operationContext),this.options.operationContext.signal)}catch(r){throw uo(r)?r:co()}if(this.assertAccountGeneration(t),typeof n!="string"||!n.trim())throw le("UNAUTHORIZED","当前用户未登录");return n.trim()}readMiniProgramId(){const t=this.options.identity.get()?.miniProgramId.trim();if(!t)throw le("INVALID_STATE","canonical mini-program identity 尚未绑定");return t}createBucketKey(t,n){return yt(t,n??su)}assertAccountGeneration(t){if(this.assertUsable(),t!==this.accountGeneration)throw le("UNAUTHORIZED","登录状态已变化,请重试")}async request(t,n){this.assertUsable();const r={request:async(i,o)=>(this.assertUsable(),this.options.network.request(i,o))};try{return await G(()=>ar(r,t,n,{...this.options.operationContext,credentials:"heybox-session"}),this.options.operationContext.signal)}catch(i){throw uo(i)||ni(i,"REQUEST_UNSUPPORTED")?i:i instanceof J?le("REQUEST_UNSUPPORTED","当前 Host 不支持该排行榜请求"):i instanceof ft&&ni(i.cause,"INVALID_STATE")?i.cause:i instanceof lt&&(i.status===401||i.status===403)?le("UNAUTHORIZED","当前用户未登录"):i instanceof ft||i instanceof lt?co():i instanceof $t?j(i.cause instanceof Error?i.cause.message:"排行榜响应不合法"):j(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(Y(this.options.operationContext.signal),this.disposed)throw le("INVALID_STATE","Cloud capability 已释放")}}function hu(e){return new fu(e)}function mu(e,t){try{return e.onChange(t)}catch(n){if(ni(n,Ys))return()=>{};throw n}}function Et(e,t){if(!_e(e)||typeof e.status!="string")throw j(`${t} 响应必须是标准信封`);if(e.status!=="ok")throw gu(e);if(!Object.prototype.hasOwnProperty.call(e,"result")||e.result===void 0||e.result===null)throw j(`${t} 响应缺少 result`);return e.result}function Er(e,t){if(!_e(e))throw j(`${t} 返回的 entry 必须是对象`);if(typeof e.ranked!="boolean")throw j(`${t} 返回的 ranked 必须是布尔值`);if(typeof e.rank!="number"||!Number.isInteger(e.rank)||(e.ranked?e.rank<=0:e.rank!==0))throw j(`${t} 返回的 rank/ranked 不合法`);if(typeof e.app_user_id!="string"||!e.app_user_id.trim())throw j(`${t} 返回的 appUserId 必须是非空字符串`);if(typeof e.score!="number"||!Number.isFinite(e.score))throw j(`${t} 返回的 score 必须是有限数字`);if(!_e(e.extra))throw j(`${t} 返回的 extra 必须是对象`);if(typeof e.created_at!="number"||!Number.isFinite(e.created_at)||typeof e.updated_at!="number"||!Number.isFinite(e.updated_at))throw j(`${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 gu(e){if(e.status==="login"||e.status==="relogin")throw le("UNAUTHORIZED",At(e.msg)||"当前用户未登录");const t=so(e.result)??so(e),n=At(t?.user_message)||At(e.msg)||At(t?.developer_message)||"排行榜请求失败";throw t?le(pu(t),n,{status:e.status,sbe:t}):le("HEYBOX_API_ERROR",n,{status:e.status})}function so(e){return _e(e)&&_e(e.sbe)?e.sbe:void 0}function pu(e){const t=At(e.developer_message);if(t&&/^[A-Z][A-Z0-9_]+$/.test(t))return t;const n=e.code;if(typeof n=="number"&&Number.isInteger(n))return lu[n]||t||"HEYBOX_API_ERROR";if(typeof n=="string"){const r=/^([A-Za-z][A-Za-z0-9_]*)(?:\(\d+\))?$/.exec(n.trim());if(r?.[1])return r[1]}return t||"HEYBOX_API_ERROR"}function ao(e,t){for(const n of Object.values(e.caches))for(const[r,i]of n)i.expiresAt<=t&&n.delete(r)}function yt(...e){return JSON.stringify(e)}function _e(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function At(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function ni(e,t){return _e(e)&&e.code===t}function le(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function j(e){return le("INVALID_RESPONSE",e)}function co(){return le("REQUEST_FAILED","排行榜请求失败")}function uo(e){return e instanceof Error&&e.name==="AbortError"}const Eu=/^[A-Za-z0-9_-]{1,64}$/,lo=20,yu=100,fo=2048;function wu(e){const t=hu(e);return{handlers:{[Re]:async r=>t.submit(_u(r)),[fe]:async r=>t.getList(Iu(r)),[Le]:async r=>t.getCurrentUserEntry(yr(r,Le)),[We]:async r=>t.deleteCurrentUserEntry(yr(r,We)),[we]:async r=>t.getInfo(yr(r,we))},dispose:()=>t.dispose()}}function _u(e){const t=Di(e,Re,!1);if(Ni(t,["key","score","extra"],Re),typeof t.score!="number"||!Number.isFinite(t.score)||Math.abs(t.score)>Number.MAX_SAFE_INTEGER)throw Ie("INVALID_PARAMS","cloud.leaderboard.submit score 必须是有限安全数字");return{...vi(t.key,Re),score:t.score,...t.extra===void 0?{}:{extra:Au(t.extra)}}}function Iu(e){if(e===void 0)return{limit:lo};const t=Di(e,fe,!0);Ni(t,["key","limit","cursor"],fe);const n=t.limit===void 0?lo:t.limit;if(typeof n!="number"||!Number.isInteger(n)||n<=0||n>yu)throw Ie("INVALID_PARAMS","cloud.leaderboard.getList limit 必须是 1-100 的整数");if(t.cursor!==void 0&&typeof t.cursor!="string")throw Ie("INVALID_PARAMS","cloud.leaderboard.getList cursor 必须是字符串");return{...vi(t.key,fe),limit:n,...t.cursor===void 0?{}:{cursor:t.cursor}}}function yr(e,t){if(e===void 0)return{};const n=Di(e,t,!0);return Ni(n,["key"],t),vi(n.key,t)}function Di(e,t,n){if(e===void 0&&n)return{};if(!ia(e))throw Ie("INVALID_PARAMS",`${t} 参数必须是对象`);return e}function Ni(e,t,n){const r=Object.keys(e).find(i=>!t.includes(i));if(r)throw Ie("INVALID_PARAMS",`${n} 不支持参数 ${r}`)}function vi(e,t){if(e===void 0)return{};if(typeof e!="string"||!Eu.test(e))throw Ie("INVALID_PARAMS",`${t} key 仅支持 1-64 位字母、数字、下划线和连字符`);return{key:e}}function Au(e){if(!ia(e))throw Ie("INVALID_PARAMS","cloud.leaderboard.submit extra 必须是对象");let t;try{t=JSON.stringify(e)}catch{throw Ie("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化")}if(typeof t!="string")throw Ie("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化");if(new TextEncoder().encode(t).length>fo)throw Ie("INVALID_PARAMS",`cloud.leaderboard.submit extra 不能超过 ${fo} 字节`);return e}function ia(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ie(e,t){return{code:e,message:t}}const bu=new Set(["stdio","attachments","notifications"]),oa=new Set(["windows-x64","macos-arm64"]),Su=new Set(["unsigned","valid","invalid","unknown"]),Ru=/^[a-f0-9]{64}$/,Ou=new Set(["exited","terminated","crashed","host-shutdown","permission-revoked","output-limit"]),Pu=new Set(zs),Du=new Set([...zs,"PERMISSION_DENIED","USER_GESTURE_REQUIRED"]),sa=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 Nu(e){const t=async(r,i,o,s)=>{const a=vu(r);try{return await o(a,{...e.operationContext,signal:i.signal})}catch(c){throw ii(c,s)}},n=async(r,i,o)=>{if(!o.trustedUserGesture)throw l("USER_GESTURE_REQUIRED","当前操作需要新的可信用户手势");if(!e.companionPresentation)throw l("COMPANION_UNSUPPORTED","Host 未提供 Companion 可信授权界面");const s={...e.operationContext,signal:o.signal},a=await e.companion.getInfo(i,s).then(u=>Tu(u,i)).catch(u=>{throw ii(u)});if((await e.companionPresentation.confirmCompanionOperation({action:r,companion:a,miniProgram:e.miniProgramPresentation,signal:o.signal})).status!=="granted")throw l("COMPANION_USER_CANCELLED","用户取消了 Companion 操作")};return{[Yn]:(r,i)=>t(r,i,async(o,s)=>ri(await e.companion.getInfo(o,s),o)),[Qn]:(r,i)=>t(r,i,async(o,s)=>ho(await e.companion.getPreparationStatus(o,s))),[Xn]:(r,i)=>t(r,i,async(o,s)=>{const a=ho(await e.companion.getPreparationStatus(o,s));return a.state!=="ready"&&a.state!=="preparing"&&await n("prepare",o,i),ri(await e.companion.prepare(o,{...s,onProgress:c=>i.postProgress(ca(c))}),o)},"COMPANION_PREPARATION_CANCELLED"),[Jn]:(r,i)=>t(r,i,(o,s)=>e.companion.cancelPreparation(o,s)),[Zn]:(r,i)=>t(r,i,async(o,s)=>mo(await e.companion.getActiveSession(o,s),o)),[er]:(r,i)=>t(r,i,async(o,s)=>{const a=mo(await e.companion.getActiveSession(o,s),o);return a||(await n("launch",o,i),da(await e.companion.launch(o,s),o))}),[tr]:(r,i)=>tt(r,i,e,"write"),[nr]:(r,i)=>tt(r,i,e,"closeStdin"),[rr]:(r,i)=>tt(r,i,e,"terminate"),[ir]:(r,i)=>tt(r,i,e,"ackOutput"),[or]:async(r,i)=>{const o=await tt(r,i,e,"openAttachment");return e.fileRegistry.registerFile(o,"companion-attachment","read")},[sr]:(r,i)=>tt(r,i,e,"showNotification")}}function vu(e){if(!M(e)||typeof e.alias!="string"||!$c.test(e.alias))throw l("INVALID_PARAMS","Companion alias 不合法");return e.alias}async function tt(e,t,n,r){if(!M(e)||typeof e.sessionId!="string"||!e.sessionId||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0)throw l("INVALID_PARAMS","Companion Session controller 不合法");try{return await n.companion[r](Cu(e,r),{...n.operationContext,signal:t.signal})}catch(i){throw ii(i)}}function me(){throw l("COMPANION_HOST_FAILED","Companion Host 返回了无效数据")}function aa(e){return!Array.isArray(e)||e.some(t=>!bu.has(t))?me():Object.freeze([...new Set(e)])}function ri(e,t){return!M(e)||typeof e.alias!="string"||typeof e.displayName!="string"||t!==void 0&&e.alias!==t||!oa.has(String(e.target))||!Number.isSafeInteger(e.archiveBytes)||Number(e.archiveBytes)<0||!Su.has(String(e.signatureStatus))||e.source!==void 0&&e.source!=="local-dev"&&e.source!=="preview"&&e.source!=="released"?me():Object.freeze({alias:e.alias,displayName:e.displayName,target:e.target,capabilities:aa(e.capabilities),archiveBytes:e.archiveBytes,signatureStatus:e.signatureStatus,...e.source===void 0?{}:{source:e.source}})}function Tu(e,t){const n=ri(e,t);return!M(e)||e.sha256===void 0?n:typeof e.sha256!="string"||!Ru.test(e.sha256)?me():Object.freeze({...n,sha256:e.sha256})}function ca(e){return M(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}):me():me()}function ho(e){return M(e)?e.state==="not-prepared"?Object.freeze({state:"not-prepared"}):e.state==="preparing"?Object.freeze({state:"preparing",progress:ca(e.progress)}):e.state==="ready"&&Number.isSafeInteger(e.preparedAt)&&Number(e.preparedAt)>=0?Object.freeze({state:"ready",preparedAt:e.preparedAt}):e.state==="failed"&&M(e.error)&&typeof e.error.code=="string"&&Pu.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:sa[e.error.code]??"Companion 操作失败",retryable:e.error.retryable})}):me():me()}function da(e,t){return!M(e)||typeof e.id!="string"||!e.id||typeof e.alias!="string"||t!==void 0&&e.alias!==t||!oa.has(String(e.target))||e.state!=="running"||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0?me():Object.freeze({id:e.id,alias:e.alias,target:e.target,capabilities:aa(e.capabilities),state:"running",controllerGeneration:e.controllerGeneration})}function mo(e,t){return e===void 0?void 0:da(e,t)}function Cu(e,t){const n=e,r={sessionId:n.sessionId,controllerGeneration:n.controllerGeneration};if(t==="write"){if(!js(n.data))throw l("INVALID_PARAMS","Companion write data 不合法");return{...r,data:new Uint8Array(n.data)}}if(t==="ackOutput"){if(n.stream!=="stdout"&&n.stream!=="stderr"||!Number.isSafeInteger(n.sequence)||Number(n.sequence)<0)throw l("INVALID_PARAMS","Companion output ack 不合法");return{...r,stream:n.stream,sequence:n.sequence}}if(t==="openAttachment"){if(typeof n.id!="string"||!n.id)throw l("INVALID_PARAMS","Companion Attachment ID 不合法");return{...r,id:n.id}}if(t==="showNotification"){if(!["completed","failed","stopped","attention"].includes(String(n.category)))throw l("INVALID_PARAMS","Companion notification category 不合法");return{...r,category:n.category}}return r}function Lu(e){return!M(e)||!Ou.has(String(e.reason))?me():e.reason==="exited"?Number.isSafeInteger(e.exitCode)?Object.freeze({reason:"exited",exitCode:e.exitCode}):me():e.exitCode!==void 0&&!Number.isSafeInteger(e.exitCode)?me():Object.freeze({reason:e.reason,...e.exitCode===void 0?{}:{exitCode:e.exitCode}})}function ku(e){if(!M(e)||!M(e.payload)||typeof e.payload.sessionId!="string"||!e.payload.sessionId)return;const t=e.payload,n=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||!js(t.data)?void 0:{type:e.type,payload:{sessionId:n,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:n,exit:Lu(t.exit)}}}catch{return}if(e.type==="companion.session.ownershipLost"&&Number.isSafeInteger(t.controllerGeneration)&&Number(t.controllerGeneration)>=0)return{type:e.type,payload:{sessionId:n,controllerGeneration:t.controllerGeneration}}}function ii(e,t){return M(e)&&typeof e.code=="string"&&Du.has(e.code)?l(e.code,sa[e.code]??"Companion 操作失败",e.code==="COMPANION_DESCRIPTOR_UNAVAILABLE"?{retryable:!0}:typeof e.retryable=="boolean"?{retryable:e.retryable}:void 0):t&&M(e)&&e.name==="AbortError"?l(t,"Companion 准备已取消"):l("COMPANION_HOST_FAILED","Companion Host 操作失败")}const go=5e3,po=1e4;function qe(e){throw{code:"INVALID_PARAMS",message:e}}function ua(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function la(e,t,n){const r=Object.keys(e).filter(i=>!t.includes(i));r.length&&qe(`${n} 不支持字段: ${r.join(", ")}`)}function Mu(e){if(e===void 0)return{intensity:"light",delay:0};if(!ua(e))return qe("device.vibrate 参数必须是对象");la(e,["intensity","delay"],"device.vibrate");const t=e.intensity??"light";if(t!=="light"&&t!=="medium"&&t!=="heavy")return qe("device.vibrate intensity 必须是 light、medium 或 heavy");const n=t,r=e.delay??0;return typeof r!="number"||!Number.isInteger(r)||r<0||r>go?qe(`device.vibrate delay 必须是 0-${go} 的整数毫秒`):{intensity:n,delay:r}}function Uu(e){return ua(e)?(la(e,["text"],"device.setClipboard"),typeof e.text!="string"||!e.text.trim()?qe("device.setClipboard text 必须是非空字符串"):e.text.length>po?qe(`device.setClipboard text 不能超过 ${po} 字符`):{text:e.text}):qe("device.setClipboard 参数必须是对象")}function Hu(e){return{[Hn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.vibrate(Mu(t),e.operationContext),e.operationContext.signal)},[xn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.setClipboard(Uu(t),e.operationContext),e.operationContext.signal)}}}const xu=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"]),Fu={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 Ti(e){const t=fa(e),n=t&&xu.has(t)?l(t,Fu[t]??"文件操作失败"):l("FILE_IO_FAILED","文件操作失败");return Object.defineProperty(n,"cause",{value:e,enumerable:!1}),n}function Se(e){try{return e()}catch(t){throw Ti(t)}}function fa(e){try{if(!M(e))return;const t=Object.getOwnPropertyDescriptor(e,"code");return t&&"value"in t&&typeof t.value=="string"?t.value:void 0}catch{return}}function ha(e,t,n={}){const r=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=r==="readwrite",o=n.allowRemove!==!1&&typeof e.remove=="function";return Object.freeze({kind:"file",name:e.name,mode:r,create:i?(s,a)=>e.create(s,a):oi,remove:o?s=>e.remove(s):ga,read:s=>e.read(s),write:i?(s,a)=>e.write(s,a):oi,stat:s=>e.stat(s)})}function ma(e,t,n={}){const r=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=r==="readwrite",o=n.allowRemove!==!1,s=o&&typeof e.remove=="function";return Object.freeze({kind:"directory",name:e.name,mode:r,file:a=>ha(e.file(a),r,{allowRemove:o}),directory:a=>ma(e.directory(a),r,{allowRemove:o}),create:i?(a,c)=>e.create(a,c):oi,remove:s?(a,c)=>e.remove(a,c):ga,stat:a=>e.stat(a),list:(a,c)=>e.list(a,c)})}function oi(){return Promise.reject(l("FILE_ACCESS_DENIED","当前文件授权只允许读取"))}function ga(){return Promise.reject(l("FILE_ACCESS_DENIED","外部文件授权不允许删除"))}const Eo=1024;class Bu{constructor(t,n){this.files=t,this.miniProgramDetail=n}handles=new Map;disposed=!1;dispose(){this.disposed||(this.disposed=!0,this.handles.clear())}registerFile(t,n="external",r){this.assertCanonicalDetail();const i=this.prepareFile(t,n,r),[o]=this.registerMany([i]);return Jt(i.handle,{kind:"file",handleId:o})}registerFiles(t,n="external",r,i){this.assertCanonicalDetail();const o=Se(()=>{if(!Array.isArray(t))throw l("FILE_IO_FAILED","Host 返回了无效文件选择结果");const a=t.length;if(i!==void 0&&a>i)throw l("FILE_IO_FAILED","Host 返回了过多文件选择结果");if(this.handles.size+a>Eo)throw l("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const c=[];for(let u=0;u<a;u+=1){if(!Object.prototype.hasOwnProperty.call(t,u))throw l("FILE_IO_FAILED","Host 返回了稀疏文件选择结果");c.push(this.prepareFile(t[u],n,r))}return c}),s=this.registerMany(o);return o.map((a,c)=>Jt(a.handle,{kind:"file",handleId:s[c]}))}registerDirectory(t,n="external",r){this.assertCanonicalDetail();const i=this.prepareDirectory(t,n,r),[o]=this.registerMany([i]);return wo(i.handle,{kind:"directory",handleId:o})}resolveFile(t){return this.resolveFileEntry(t).handle}resolveDirectory(t){return this.resolveDirectoryEntry(t).handle}isCompanionAttachmentRef(t){return!Si(t)||!("handleId"in t)?!1:this.handles.get(t.handleId)?.origin==="companion-attachment"}resolveFileEntry(t){this.assertCanonicalDetail();const n=qu(t);if("handleId"in n){const s=this.readDirect(n.handleId,"file");return{ref:n,...s}}const r=this.resolveRoot(n.root),i=xt(n.relativePath),o=this.prepareFile(Se(()=>r.hostHandle.file(i)),r.origin,r.handle.mode);return{ref:n,...o}}resolveDirectoryEntry(t){this.assertCanonicalDetail();const n=Gu(t);if("handleId"in n){const s=this.readDirect(n.handleId,"directory");return{ref:n,...s}}const r=this.resolveRoot(n.root),i=n.relativePath==="."?".":xt(n.relativePath),o=this.prepareDirectory(i==="."?r.hostHandle:Se(()=>r.hostHandle.directory(i)),r.origin,r.handle.mode,!0);return{ref:n,...o}}describeFile(t,n){return Io(t),Jt(t,n)}describeListedEntries(t,n,r){return this.assertCanonicalDetail(),Se(()=>{if(!Array.isArray(n))throw l("FILE_IO_FAILED","Host 返回了无效目录列表");const i=n.length;if(i>r)throw l("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项数量超过限制");const o=[];for(let s=0;s<i;s+=1){if(!Object.prototype.hasOwnProperty.call(n,s))throw l("FILE_IO_FAILED","Host 返回了稀疏目录列表");o.push(this.describeListedEntry(t,n[s]))}return this.assertCanonicalDetail(),o})}describeListedEntry(t,n){return Se(()=>{if(M(n)&&n.kind==="file"){const r=this.prepareFile(n,t.origin,t.handle.mode);return Jt(r.handle,yo(t.ref,r.handle.name))}if(M(n)&&n.kind==="directory"){const r=this.prepareDirectory(n,t.origin,t.handle.mode);return wo(r.handle,Vu(t.ref,r.handle.name))}throw l("FILE_IO_FAILED","Host 返回了无效目录项")})}deriveFile(t,n){this.assertCanonicalDetail();const r=jt(n),i=this.prepareFile(Se(()=>t.hostHandle.file(r)),t.origin,t.handle.mode);return{ref:yo(t.ref,r),...i}}assertSandboxOrigin(t){if(t.origin!=="sandbox")throw l("FILE_ACCESS_DENIED","外部文件授权不允许删除")}prepareFile(t,n,r){return Se(()=>{Io(t);const i=r??t.mode;return _o(t.mode,i),{handle:ha(t,i,{allowRemove:n==="sandbox"}),hostHandle:t,origin:n}})}prepareDirectory(t,n,r,i=!1){return Se(()=>{zu(t,i);const o=r??t.mode;return _o(t.mode,o),{handle:ma(t,o,{allowRemove:n==="sandbox"}),hostHandle:t,origin:n}})}registerMany(t){if(this.assertCanonicalDetail(),this.handles.size+t.length>Eo)throw l("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const n=new Set,r=t.map(()=>{for(let i=0;i<8;i+=1){const o=$u();if(!this.handles.has(o)&&!n.has(o))return n.add(o),o}throw l("FILE_IO_FAILED","无法创建文件授权句柄")});return t.forEach((i,o)=>this.handles.set(r[o],i)),r}readDirect(t,n){if(!ju(t))throw l("FILE_ACCESS_REVOKED","文件授权句柄无效");const r=this.handles.get(t);if(!r)throw l("FILE_ACCESS_REVOKED","文件授权已失效");if(r.handle.kind!==n||r.hostHandle.kind!==n)throw l("FILE_TYPE_MISMATCH","文件句柄类型不匹配");return r}resolveRoot(t){if(this.assertCanonicalDetail(),t.kind==="sandbox"){if(!this.files)throw Ae("files.sandbox");return this.prepareDirectory(Se(()=>this.files.sandbox),"sandbox",void 0,!0)}return this.readDirect(t.handleId,"directory")}assertCanonicalDetail(){if(this.disposed)throw l("FILE_ACCESS_REVOKED","文件授权已失效");if(!this.miniProgramDetail?.miniProgramId.trim())throw Ae("files")}}function xt(e){if(!bi(e))throw l("INVALID_PARAMS","relativePath 不是规范逻辑路径");return e}function jt(e,t="文件名"){const n=xt(e);if(n.includes("/"))throw l("INVALID_PARAMS",`${t} 只能是 basename`);return n}function yo(e,t){return"handleId"in e?{kind:"file",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"file",root:e.root,relativePath:xt(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Vu(e,t){return"handleId"in e?{kind:"directory",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"directory",root:e.root,relativePath:xt(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Jt(e,t){return{kind:"file",name:e.name,mode:e.mode,ref:t}}function wo(e,t){return{kind:"directory",name:e.name,mode:e.mode,ref:t}}function _o(e,t){if(t==="readwrite"&&e!=="readwrite")throw l("FILE_ACCESS_DENIED","Host 未授予请求的文件写权限")}function qu(e){return Si(e)||pa(),e}function Gu(e){return $s(e)||pa(),e}function pa(){throw l("INVALID_PARAMS","文件引用不合法")}function $u(){const e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw l("FILE_IO_FAILED","当前环境缺少安全随机数能力");const t=e.getRandomValues(new Uint8Array(16));return Array.from(t,n=>n.toString(16).padStart(2,"0")).join("")}function ju(e){return/^[0-9a-f]{32}$/.test(e)}function Io(e){if(!M(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 l("FILE_IO_FAILED","Host 返回了无效 File handle");jt(e.name,"Host File name")}function zu(e,t=!1){if(!M(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 l("FILE_IO_FAILED","Host 返回了无效 Directory handle");if(!t&&e.name.length===0)throw l("FILE_IO_FAILED","Host Directory name 不能为空");e.name&&jt(e.name,"Host Directory name")}const Ao=1e3,Wu=new Set(["FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_TYPE_MISMATCH"]);function Ku(e){const t=n=>Oi(e.operationContext,n.signal);return{files:{[Rn]:async(n,r)=>{wr(r);const i=_r(e.picker),o=Yu(n),s=await ie(()=>i.pickFiles(o,t(r)));return e.registry.registerFiles(s,"external",o.mode,o.multiple?void 0:1)},[On]:async(n,r)=>{wr(r);const i=_r(e.picker),o=Qu(n),s=await ie(()=>i.pickDirectory(o,t(r)));return e.registry.registerDirectory(s,"external",o.mode)},[Pn]:async(n,r)=>{wr(r);const i=_r(e.picker),o=Xu(n).suggestedName,s=t(r);if(!i.saveFile)throw Ae("files.saveFile");const a=await ie(()=>i.saveFile({suggestedName:o},s));return e.registry.registerFile(a,"external","readwrite")}},file:{[Ct]:async(n,r)=>{const i=ce(n,["recursive","exclusive"]),o=e.registry.resolveFile(i.target);nt(o.mode),await ie(()=>o.create(bo(i),t(r)))},[Lt]:async(n,r)=>{const i=ce(n),o=e.registry.resolveFileEntry(i.target);if(e.registry.assertSandboxOrigin(o),nt(o.handle.mode),!o.handle.remove)throw Ae(Lt);await ie(()=>o.handle.remove(t(r)))},[Dn]:async(n,r)=>{const i=ce(n);return So(async()=>{const o=await e.registry.resolveFile(i.target).stat(t(r));if(!M(o)||o.kind!=="file")throw Oo()})},[kt]:async(n,r)=>{const i=ce(n),o=Ro(await ie(()=>e.registry.resolveFile(i.target).read(t(r))));try{const s=new TextDecoder("utf-8",{fatal:!0}).decode(o);return s.charCodeAt(0)===65279?s.slice(1):s}catch{throw l("FILE_ENCODING_INVALID","文件不是合法 UTF-8 文本")}},[Nn]:async(n,r)=>{const i=ce(n,["content"]);typeof i.content!="string"&&de("content 必须是字符串");const o=e.registry.resolveFile(i.target);nt(o.mode),await ie(()=>o.write(new TextEncoder().encode(i.content),t(r)))},[Mt]:async(n,r)=>{const i=ce(n),o=await ie(()=>e.registry.resolveFile(i.target).read(t(r)));return Ro(o)},[vn]:async(n,r)=>{const i=ce(n,["content"]),o=e.registry.resolveFile(i.target);nt(o.mode),await ie(()=>o.write(Zu(i.content),t(r)))},[Ut]:async(n,r)=>{const i=ce(n),o=await ie(()=>e.registry.resolveFile(i.target).stat(t(r)));return el(o)}},directory:{[Tn]:async(n,r)=>{const i=ce(n,["recursive","exclusive"]),o=e.registry.resolveDirectory(i.target);nt(o.mode),await ie(()=>o.create(bo(i),t(r)))},[Ht]:async(n,r)=>{const i=ce(n,["recursive"]);if(M(i.target)&&i.target.relativePath===".")throw l("FILE_ACCESS_DENIED","不能删除根目录");const o=e.registry.resolveDirectoryEntry(i.target);if(e.registry.assertSandboxOrigin(o),nt(o.handle.mode),!o.handle.remove)throw Ae(Ht);await ie(()=>o.handle.remove({recursive:i.recursive===void 0?!1:Gn(i.recursive,"recursive")},t(r)))},[Cn]:async(n,r)=>{const i=ce(n);return So(async()=>{const o=await e.registry.resolveDirectory(i.target).stat(t(r));if(!M(o)||o.kind!=="directory")throw Oo()})},[Ln]:async(n,r)=>{const i=ce(n,["limit"]),o=Ju(i.limit),s=e.registry.resolveDirectoryEntry(i.target),a=await ie(()=>s.handle.list({limit:o},t(r)));return e.registry.describeListedEntries(s,a,o)}}}}function Yu(e){if(e===void 0)return{mode:"read",multiple:!1};M(e)||de("pickFiles 参数必须是对象"),cr(e,["mode","accept","multiple"]);const t=Ea(e.mode,"read"),n=e.multiple===void 0?!1:Gn(e.multiple,"multiple");let r;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)))&&de("accept 必须是规范扩展名数组"),r=[...new Set(e.accept)]),{mode:t,multiple:n,...r===void 0?{}:{accept:r}}}function Qu(e){return e===void 0?{mode:"read"}:(M(e)||de("pickDirectory 参数必须是对象"),cr(e,["mode"]),{mode:Ea(e.mode,"read")})}function Xu(e){return M(e)||de("saveFile 参数必须是对象"),cr(e,["suggestedName"]),{suggestedName:jt(e.suggestedName,"suggestedName")}}function ce(e,t=[]){return(!M(e)||!Object.prototype.hasOwnProperty.call(e,"target"))&&de("文件操作参数必须包含 target"),cr(e,["target",...t]),e}function bo(e){return{recursive:e.recursive===void 0?!1:Gn(e.recursive,"recursive"),exclusive:e.exclusive===void 0?!1:Gn(e.exclusive,"exclusive")}}function Ea(e,t){return e===void 0?t:(e!=="read"&&e!=="readwrite"&&de("mode 必须是 read 或 readwrite"),e)}function Gn(e,t){return typeof e!="boolean"&&de(`${t} 必须是布尔值`),e}function Ju(e){if(e===void 0)return Ao;if((!Number.isSafeInteger(e)||e<=0)&&de("limit 必须是正整数"),e>Ao)throw l("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项限制超过 Host 上限");return e}function cr(e,t){const n=Object.keys(e).filter(r=>!t.includes(r));n.length&&de(`不支持字段: ${n.join(", ")}`)}function nt(e){if(e!=="readwrite")throw l("FILE_ACCESS_DENIED","当前文件授权只允许读取")}function wr(e){if(!e.trustedUserGesture)throw l("USER_GESTURE_REQUIRED","当前操作需要可信用户手势")}function _r(e){if(!e)throw Ae("files.external");return e}async function So(e){try{return await e(),!0}catch(t){if(Wu.has(fa(t)??""))return!1;throw Ti(t)}}async function ie(e){try{return await e()}catch(t){throw Ti(t)}}function Zu(e){return e instanceof Uint8Array||de("content 必须是 Uint8Array"),typeof SharedArrayBuffer<"u"&&e.buffer instanceof SharedArrayBuffer&&de("不支持 SharedArrayBuffer-backed Uint8Array"),new Uint8Array(e)}function Ro(e){if(!(e instanceof Uint8Array))throw l("FILE_IO_FAILED","Host 返回了无效字节数据");return new Uint8Array(e)}function Oo(){return l("FILE_TYPE_MISMATCH","文件句柄类型不匹配")}function el(e){if(!M(e)||e.kind!=="file"||!tl(e.size))throw l("FILE_IO_FAILED","Host 返回了无效 FileStat");for(const t of["modifiedAt","createdAt"])if(e[t]!==void 0&&!nl(e[t]))throw l("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 tl(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function nl(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function de(e){throw l("INVALID_PARAMS",e)}const rl=["pc","console","mobile"],il=["game","wiki"];function $n(e){throw{code:"INVALID_PARAMS",message:e}}function ol(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ge(e,t){return typeof e!="string"||!e.trim()?$n(t):e.trim()}function Po(e,t,n){return typeof e!="string"||!t.includes(e)?$n(n):e}function sl(e){const t={target:"game_detail",appId:Ge(e.appId,"navigation.openAppPage appId 必须是非空字符串"),gameType:Po(e.gameType,rl,"navigation.openAppPage gameType 必须是 pc、console 或 mobile")};return e.page!==void 0&&(t.page=Po(e.page,il,"navigation.openAppPage page 必须是 game 或 wiki")),e.hSrc!==void 0&&(t.hSrc=Ge(e.hSrc,"navigation.openAppPage hSrc 必须是非空字符串")),e.skuId!==void 0&&(t.skuId=Ge(e.skuId,"navigation.openAppPage skuId 必须是非空字符串")),t}function al(e){return{target:"user_detail",userId:Ge(e.userId,"navigation.openAppPage userId 必须是非空字符串")}}function cl(e){const t={target:"post_detail",linkId:Ge(e.linkId,"navigation.openAppPage linkId 必须是非空字符串")};return e.rootCommentId!==void 0&&(t.rootCommentId=Ge(e.rootCommentId,"navigation.openAppPage rootCommentId 必须是非空字符串")),e.commentId!==void 0&&(t.commentId=Ge(e.commentId,"navigation.openAppPage commentId 必须是非空字符串")),t}function dl(e){return ol(e)?e.target==="game_detail"?sl(e):e.target==="user_detail"?al(e):e.target==="post_detail"?cl(e):$n("navigation.openAppPage target 不支持"):$n("navigation.openAppPage options 必须是对象")}function ul(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 ll(e){return{protocolType:"openRouterPath",path:"/user_home",params:{userid:e.userId}}}function fl(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 hl(e){const t=dl(e);return t.target==="game_detail"?ul(t):t.target==="user_detail"?ll(t):fl(t)}function ml(e){throw{code:"INVALID_PARAMS",message:e}}function Do(e,t){e!==void 0&&(typeof e!="object"||e===null||Array.isArray(e)||Object.keys(e).length)&&ml(`${t} 不支持参数`)}function gl(e){return{[Fn]:async t=>{Y(e.operationContext.signal),Do(t,"navigation.close"),await G(()=>e.presentation.close(e.operationContext),e.operationContext.signal)},[Bn]:async t=>{Y(e.operationContext.signal),Do(t,"navigation.reload"),await G(()=>e.presentation.reload(e.operationContext),e.operationContext.signal)},[Vn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.openAppPage(hl(t),e.operationContext),e.operationContext.signal)}}}const pl=new Set(["content-length","content-encoding","transfer-encoding","content-disposition","content-range","content-type"]),El=new Set(["content-length","content-encoding","content-disposition","content-range","content-type"]),yl=new Set(["range","if-range","a-im"]),wl=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"]),_l=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i,Zt={initial:0,target:1,open:2,validate:3,transfer:4,committed:5,completed:6};class Il{constructor(t){this.signal=t}phase="initial";transition(t){if(Zt[t]<=Zt[this.phase])throw l("FILE_IO_FAILED","下载状态转换不合法");this.phase=t}throwIfCancelled(){if(Zt[this.phase]<Zt.committed&&this.signal.aborted)throw _a()}normalizeHostError(t,n){return this.throwIfCancelled(),Ci(t,n,this.signal)}}async function Al(e,t,n){const r=n.transfer,i=n.fileRegistry;if(!r||!i)throw Ae("network.download");const o=Oi(n.operationContext,t.signal),s=new Il(o.signal);s.transition("target"),s.throwIfCancelled();let a;try{a=await Ol(e,i,o)}catch(d){throw s.normalizeHostError(d,"file")}s.throwIfCancelled();let c;s.transition("open");try{c=await r.network.open(e.request,o)}catch(d){throw s.normalizeHostError(d,"network")}let u=!1;try{s.throwIfCancelled(),s.transition("validate");const d=Dl(c);Nl(c,d);const h=vl(c.status,d);if(e.maxBytes!==void 0&&h.expectedBytes!==void 0&&h.expectedBytes>e.maxBytes)throw l("FILE_TOO_LARGE","下载响应超过 maxBytes");s.throwIfCancelled();const p=Pl(e,a,d,i);let f=0;const A=Sl(h.expectedBytes,e.maxBytes);Ar(t,Ir(0,h));const w={...o,onProgress(b){!Number.isSafeInteger(b)||b<f||A!==void 0&&b>A||(f=b,Ar(t,Ir(f,h)))}};s.transition("transfer"),u=!0;let y;try{y=await r.files.writeResource(p.hostHandle,c.body,{mode:p.mode,...e.maxBytes===void 0?{}:{maxBytes:e.maxBytes},...h.expectedBytes===void 0?{}:{expectedBytes:h.expectedBytes}},w)}catch(b){throw s.normalizeHostError(b,"transfer")}s.transition("committed"),f=bl(y,h,f,e.maxBytes),Ar(t,Ir(f,h));const m=i.describeFile(p.handle,p.ref);return s.transition("completed"),m}finally{u||Rl(r.network,c.body)}}function bl(e,t,n,r){if(t.expectedBytes!==void 0)return t.expectedBytes;const i=r===void 0?n:Math.min(n,r);try{const o=e?.committedBytes;if(typeof o=="number"&&Number.isSafeInteger(o)&&o>=i&&(r===void 0||o<=r))return o}catch{}return i}function Sl(e,t){return e===void 0?t:t===void 0?e:Math.min(e,t)}function Rl(e,t){try{Promise.resolve(e.release(t)).catch(()=>{})}catch{}}async function Ol(e,t,n){if(e.targetKind==="file"){const i=t.resolveFileEntry(e.to);return si(i.handle.mode),await Hl(i.handle,n),{kind:"file",...i}}const r=t.resolveDirectoryEntry(e.to);return si(r.handle.mode),await xl(r.handle,n),{kind:"directory",...r}}function Pl(e,t,n,r){if(t.kind==="file")return{ref:t.ref,handle:t.handle,hostHandle:t.hostHandle,mode:"replace-existing"};const i=Cl(e,n),o=r.deriveFile(t,i);return si(o.handle.mode),{...o,mode:e.overwrite===!0?"upsert":"create-exclusive"}}function Dl(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 l("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream response");if(!M(e.headers))throw l("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream headers");const t={};for(const[n,r]of Object.entries(e.headers)){if(n!==n.toLowerCase()||!pl.has(n)||!Array.isArray(r)||r.length===0)throw l("DOWNLOAD_NETWORK_FAILED","Host 返回了不安全 stream header");if(r.some(i=>typeof i!="string"||/[\r\n]/.test(i)))throw l("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream header value");t[n]=[...r]}return t}function Nl(e,t){if(e.status<200||e.status>=300||e.status===206||e.status===226)throw l("DOWNLOAD_HTTP_STATUS",`下载请求失败: HTTP ${e.status}`,{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:Ul(t,El)});if((t["content-range"]?.length??0)>0)throw l("DOWNLOAD_NETWORK_FAILED","下载响应包含 Content-Range")}function vl(e,t){const n=t["content-length"]??[],r=t["transfer-encoding"]??[];if(n.length>0&&r.length>0)throw l("DOWNLOAD_NETWORK_FAILED","下载响应同时包含 Transfer-Encoding 与 Content-Length");if((e===204||e===205)&&n.some(u=>u!=="0"))throw l("DOWNLOAD_NETWORK_FAILED","无内容响应声明了非零 Content-Length");if((e===204||e===205)&&r.length>0)throw l("DOWNLOAD_NETWORK_FAILED","无内容响应不允许 Transfer-Encoding");const i=n.length===1&&/^(?:0|[1-9]\d*)$/.test(n[0])?Number(n[0]):void 0,o=i!==void 0&&Number.isSafeInteger(i)?i:void 0,s=Tl(t["content-encoding"]),a=e===204||e===205?0:r.length===0&&s?o:void 0,c=a!==void 0;return{...a===void 0?{}:{expectedBytes:a},...c?{total:a}:{},lengthComputable:c}}function Tl(e){return!e||e.length===0?!0:e.length===1&&e[0].trim().toLowerCase()==="identity"}function Ir(e,t){return{loaded:e,...t.total===void 0?{}:{total:t.total},lengthComputable:t.lengthComputable}}function Ar(e,t){try{e.postProgress(t)}catch{}}function Cl(e,t){const n=t["content-disposition"]??[];for(const i of n){const o=Ll(i);if(o&&an(o))return o}for(const i of n){const o=kl(i);if(o&&an(o))return o}if(e.suggestedName!==void 0)return ya(e.suggestedName);const r=Ml(e.url);return r&&an(r)?r:"download.bin"}function Ll(e){const t=/(?:^|;)\s*filename\*\s*=\s*([^;]+)/i.exec(e);if(!t)return;const n=t[1].trim().replace(/^"|"$/g,""),r=/^utf-8'[^']*'(.*)$/i.exec(n);if(r)try{return decodeURIComponent(r[1])}catch{return}}function kl(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 Ml(e){const t=e.pathname.split("/").pop();if(t)try{return decodeURIComponent(t)}catch{return}}function ya(e){try{jt(e,"suggestedName")}catch{throw l("INVALID_PARAMS","suggestedName 不是安全 basename")}if(!an(e))throw l("INVALID_PARAMS","suggestedName 不是安全 basename");return e}function an(e){return!(!e||e==="."||e===".."||Array.from(e).length>255||/[\\/<>:"|?*\u0000-\u001f\u007f]/.test(e)||/[. ]$/.test(e)||_l.test(e))}function Ul(e,t){return Object.fromEntries(Object.entries(e).filter(([n])=>t.has(n)).map(([n,r])=>[n,r.join(", ")]))}async function Hl(e,t){try{const n=await e.stat(t);if(!n||n.kind!=="file")throw wa()}catch(n){throw Ci(n,"file",t.signal)}}async function xl(e,t){try{const n=await e.stat(t);if(!n||n.kind!=="directory")throw wa()}catch(n){throw Ci(n,"file",t.signal)}}function si(e){if(e!=="readwrite")throw l("FILE_ACCESS_DENIED","下载目标只允许读取")}const Fl={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 Ci(e,t,n){if(n.aborted)return _a();const r=Bl(e);if(r&&wl.has(r)){const o=l(r,Fl[r]??"下载失败");return Object.defineProperty(o,"cause",{value:e,enumerable:!1}),o}if(e instanceof Error&&e.name==="AbortError")return t==="network"||t==="transfer"?l("DOWNLOAD_TIMEOUT","下载网络请求超时"):l("FILE_IO_FAILED","下载文件写入失败");const i=t==="network"?l("DOWNLOAD_NETWORK_FAILED","下载网络请求失败"):l("FILE_IO_FAILED","下载文件写入失败");return Object.defineProperty(i,"cause",{value:e,enumerable:!1}),i}function Bl(e){return M(e)&&typeof e.code=="string"?e.code:void 0}function wa(){return l("FILE_TYPE_MISMATCH","下载目标类型不匹配")}function _a(){return l("DOWNLOAD_CANCELLED","下载已取消")}function Vl(e){if(!e)return;const t=Object.keys(e).find(n=>yl.has(n.trim().toLowerCase()));if(t)throw l("INVALID_PARAMS",`network.download 不允许设置请求头: ${t}`)}const Li="withCredentials",ql=new Set(["url","method","params","data","headers","timeout",Li]),Gl=new Set(["url","to","params","headers","timeout","suggestedName","overwrite","maxBytes",Li]),$l=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),No=3e4,vo=2*1024*1024,jl=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,zl=/[\u0000-\u0008\u000A-\u001F\u007F]/,Wl=/^(?:authorization|authentication-info|proxy-authentication-info|cookie|set-cookie|set-cookie2|pkey|x-pkey|x-access-token|x-auth-token)$/i,Kl="network.request 不支持 multipart/form-data,请使用专用上传能力";function Yl(e){const t=Ql(e.runtimePermissions),n=uf(e.allowedHttpOrigins);return{[Sn]:async(r,i)=>{const o=Jl(r,{permission:t,allowedHttpOrigins:n});return Al(o,i,{transfer:e.transfer,fileRegistry:e.fileRegistry,operationContext:e.operationContext})},[bn]:async(r,i)=>{const o=Oi(e.operationContext,i?.signal);Y(o.signal);const s=Xl(r,{permission:t,allowedHttpOrigins:n});let a;try{a=await G(()=>e.network.request(s,o),o.signal)}catch(c){throw hf(c)?c:mf(c,"REQUEST_UNSUPPORTED")?H("REQUEST_UNSUPPORTED","当前 Host 不支持该网络请求"):H("REQUEST_FAILED","网络请求失败")}return ff(a)}}}function Ql(e){const t=pt(e),n=t.permissions.network;return{enabled:t.valid&&n?.status==="enabled",useOfficialDomain:t.valid&&n?.status==="enabled"&&n.config.useOfficialDomain===!0}}function Xl(e,t){const n=dr(e,"network.request 参数必须是对象"),r=Object.keys(n).filter(c=>!ql.has(c));if(r.length>0)throw H("INVALID_PARAMS",`network.request 不支持字段: ${r.join(", ")}`);Aa(n,"network.request");const i=Ia(n,t,"network.request"),o=ef(n.method),s=n.data;s!==void 0&&rf(s),sf(i.headers,s);const a=af(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 Jl(e,t){const n=dr(e,"network.download 参数必须是对象"),r=Object.keys(n).filter(c=>!Gl.has(c));if(r.length>0)throw H("INVALID_PARAMS",`network.download 不支持字段: ${r.join(", ")}`);Aa(n,"network.download");const i=Ia(n,t,"network.download");if(i.timeout!==void 0&&i.timeout<=0)throw H("INVALID_PARAMS","network.download timeout 必须是有限正数");Vl(i.headers);const o=Si(n.to),s=$s(n.to);if(!o&&!s)throw H("INVALID_PARAMS","network.download to 必须是有效 File/Directory ref");if(o&&(n.suggestedName!==void 0||n.overwrite!==void 0))throw H("INVALID_PARAMS","File 下载目标不接受 suggestedName/overwrite");let a;if(n.suggestedName!==void 0){if(typeof n.suggestedName!="string")throw H("INVALID_PARAMS","suggestedName 必须是字符串");a=ya(n.suggestedName)}if(n.overwrite!==void 0&&typeof n.overwrite!="boolean")throw H("INVALID_PARAMS","overwrite 必须是布尔值");if(n.maxBytes!==void 0&&(!Number.isSafeInteger(n.maxBytes)||n.maxBytes<=0))throw H("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:n.to,targetKind:o?"file":"directory",...a===void 0?{}:{suggestedName:a},...n.overwrite===void 0?{}:{overwrite:n.overwrite},...n.maxBytes===void 0?{}:{maxBytes:n.maxBytes}}}function Ia(e,t,n){const r=Zl(e.url,t.allowedHttpOrigins,n),i=Ad(r);if(i&&!t.permission.useOfficialDomain)throw H("PERMISSION_DENIED","当前小程序暂不支持访问官方域名");if(Id(r.pathname,i))throw H("PERMISSION_DENIED",`${n} 不允许访问 Runtime 或账号敏感接口`);return{url:r,official:i,params:e.params===void 0?void 0:{...dr(e.params,`${n} params 必须是对象`)},headers:e.headers===void 0?void 0:tf(e.headers,n),timeout:nf(e.timeout,n)}}function Zl(e,t,n="network.request"){if(typeof e!="string"||!e.trim())throw H("INVALID_PARAMS",`${n} url 必须是 HTTP(S) URL`);let r;try{r=new URL(e)}catch{throw H("INVALID_PARAMS",`${n} url 必须是 HTTP(S) URL`)}if(r.protocol!=="http:"&&r.protocol!=="https:")throw H("INVALID_PARAMS",`${n} url 必须是 HTTP(S) URL`);if(r.username||r.password)throw H("INVALID_PARAMS",`${n} url 不允许包含用户信息`);if(r.protocol==="http:"&&!t.has(r.origin))throw H("PERMISSION_DENIED",`${n} 生产环境只允许 HTTPS`);return r}function ef(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw H("INVALID_PARAMS","network.request method 必须是字符串");const t=e.trim().toUpperCase();if(!$l.has(t))throw H("INVALID_PARAMS","network.request method 不合法");return t}function tf(e,t="network.request"){const n=dr(e,`${t} headers 必须是 Record<string, string>`),r={};for(const[i,o]of Object.entries(n)){const s=i.trim();if(!s||s!==i||!jl.test(s)||typeof o!="string"||zl.test(o))throw H("INVALID_PARAMS",`${t} headers 必须是 Record<string, string>`);if(bd(s))throw H("INVALID_PARAMS",`${t} 不允许设置敏感请求头: ${i}`);r[s]=o}return r}function Aa(e,t){const n=e[Li];if(n!==void 0&&typeof n!="boolean")throw H("INVALID_PARAMS",`${t} 旧版凭据字段必须是布尔值`)}function nf(e,t="network.request"){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw H("INVALID_PARAMS",`${t} timeout 必须是非负数字`);if(t==="network.request"&&e>No)throw H("INVALID_PARAMS",`${t} timeout 不能超过 ${No}ms`);return e}}function rf(e){if(typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData)throw H("INVALID_PARAMS","network.request data 不支持 File、Blob 或 FormData,请使用专用上传能力");if(of(e)>vo)throw H("INVALID_PARAMS",`network.request data 不能超过 ${vo} 字节`)}function of(e){if(typeof e=="string")return br(e);if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(typeof URLSearchParams<"u"&&e instanceof URLSearchParams)return br(e.toString());try{const t=JSON.stringify(e);return t?br(t):0}catch{throw H("INVALID_PARAMS","network.request data 必须可序列化")}}function sf(e,t){const n=ba(e),r=typeof t=="string"&&t.trimStart().startsWith("--")&&/content-disposition\s*:\s*form-data/i.test(t);if(n?.includes("multipart/form-data")||r)throw H("INVALID_PARAMS",Kl)}function af(e,t,n){if(t===void 0)return;const r=ba(e);return r?.includes("application/x-www-form-urlencoded")?"form":r?.includes("application/json")?"json":typeof URLSearchParams<"u"&&t instanceof URLSearchParams||n&&(Array.isArray(t)||df(t))?"form":cf(t)?"json":void 0}function ba(e){return e?Object.entries(e).find(([n])=>n.trim().toLowerCase()==="content-type")?.[1].toLowerCase():void 0}function cf(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="object"&&!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer)}function df(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function uf(e){const t=new Set;for(const n of e??[])try{const r=new URL(n);r.protocol==="http:"&&!r.username&&!r.password&&r.pathname==="/"&&!r.search&&!r.hash&&lf(r.hostname)&&t.add(r.origin)}catch{}return t}function lf(e){const t=e.toLowerCase();if(t==="[::1]")return!0;const n=t.split(".").map(Number);return n.length!==4||n.some((r,i)=>!/^\d+$/.test(t.split(".")[i])||r<0||r>255)?!1:n[0]===127||n[0]===10||n[0]===172&&n[1]>=16&&n[1]<=31||n[0]===192&&n[1]===168}function ff(e){return Object.keys(e.headers).some(To)?{...e,headers:Object.fromEntries(Object.entries(e.headers).filter(([t])=>!To(t)))}:e}function To(e){const t=e.trim().toLowerCase();return Wl.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function hf(e){return e instanceof Error&&e.name==="AbortError"}function mf(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function dr(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw H("INVALID_PARAMS",t);return e}function br(e){return new TextEncoder().encode(e).length}function H(e,t){return{code:e,message:t}}const en=4294967296;function gf(e){const t=new pf;return t.write(e),t.finish()}class pf{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<en?(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 n=Ef(t),r=n.byteLength;if(r<32)this.writeUint8(160+r);else if(r<256)this.writeUint8(217),this.writeUint8(r);else if(r<65536)this.writeUint8(218),this.writeUint16(r);else if(r<en)this.writeUint8(219),this.writeUint32(r);else throw new Error("share extra string is too long");this.writeBytes(n)}writeArray(t){const n=t.length;n<16?this.writeUint8(144+n):n<65536?(this.writeUint8(220),this.writeUint16(n)):(this.writeUint8(221),this.writeUint32(n));for(const r of t)this.write(r)}writeMap(t){const n=Object.keys(t),r=n.length;r<16?this.writeUint8(128+r):r<65536?(this.writeUint8(222),this.writeUint16(r)):(this.writeUint8(223),this.writeUint32(r));for(const i of n)this.writeString(i),this.write(t[i])}ensureCapacity(t){const n=this.offset+t;if(n<=this.bytes.byteLength)return;const r=new Uint8Array(Math.max(n,this.bytes.byteLength*2));r.set(this.bytes),this.bytes=r,this.view=new DataView(r.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/en),this.view.setUint32(this.offset+4,t),this.offset+=8}writeInt64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,Math.floor(t/en)),this.view.setUint32(this.offset+4,t),this.offset+=8}}function Ef(e){const t=new Uint8Array(yf(e));let n=0,r=0;for(;n<e.length;){let i=e.charCodeAt(n++);if(i>=55296&&i<=56319&&n<e.length){const o=e.charCodeAt(n);o>=56320&&o<=57343&&(n+=1,i=((i&1023)<<10)+(o&1023)+65536)}i<128?t[r++]=i:i<2048?(t[r++]=i>>6&31|192,t[r++]=i&63|128):i<65536?(t[r++]=i>>12&15|224,t[r++]=i>>6&63|128,t[r++]=i&63|128):(t[r++]=i>>18&7|240,t[r++]=i>>12&63|128,t[r++]=i>>6&63|128,t[r++]=i&63|128)}return t}function yf(e){let t=0,n=0;for(;n<e.length;){let r=e.charCodeAt(n++);if(r<128)t+=1;else if(r<2048)t+=2;else{if(r>=55296&&r<=56319&&n<e.length){const i=e.charCodeAt(n);i>=56320&&i<=57343&&(n+=1,r=((r&1023)<<10)+(i&1023)+65536)}t+=r<65536?3:4}}return t}function wf(e){ai(e);const t=gf(e);if(t.byteLength>128)throw new Error("share extra is too large");return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function ai(e,t=0,n=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(n.has(e))throw new Error("extra value must not contain cycles");if(n.add(e),Array.isArray(e)){if(e.length>64)throw new Error("extra array is too large");for(const o of e)ai(o,t+1,n);n.delete(e);return}const r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new Error("extra object must be a plain object");const i=Object.values(e);if(i.length>64)throw new Error("extra object has too many fields");for(const o of i)ai(o,t+1,n);n.delete(e)}function _f(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function If(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 Af(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topicIds 必须是数组"],values:[]};const t=[],n=new Set,r=[];for(const i of e){const o=If(i);o?n.has(o)||(n.add(o),r.push(o)):t.push("post.topicIds 每项必须是正整数或非空字符串")}return{invalidMessages:t,values:r}}function bf(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topics 必须是数组"],values:[]};const t=[],n=new Set,r=[];for(const i of e){const o=typeof i=="string"?i.trim():"";!o||o.startsWith("#")||o.endsWith("#")?t.push("post.topics 每项必须是不含首尾 # 的非空字符串"):n.has(o)||(n.add(o),r.push(o))}return{invalidMessages:t,values:r}}function Sa(e,t){if(e==null)return{};if(!_f(e))return{invalidMessage:`${t.method} post 必须是对象或 null`};const n=Af(e.topicIds),r=bf(e.topics),i=[...n.invalidMessages,...r.invalidMessages];let o=n.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||r.values.length?{...o.length?{topicIds:o}:{},...r.values.length?{topics:r.values}:{}}:void 0;return s||i.push(`${t.method} post 至少需要一个有效的 topicIds 或 topics`),{invalidMessage:i[0],post:s}}function Sf(e){try{return new URL(e).protocol==="heybox-mini-dev:"}catch{return!1}}async function Rf(e){try{if(Sf(e.getCurrentHref()))return!0}catch{}try{return!!await e.isDevRuntime()}catch{return!1}}function te(e){throw{code:"INVALID_PARAMS",message:e}}function zt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ci(e,t){return typeof e!="string"||!e.trim()?te(t):e}function Of(e,t){const n=ci(e,t);try{const r=new URL(n);return r.protocol!=="http:"&&r.protocol!=="https:"?te(t):n}catch{return te(t)}}function Pf(e){return e==="wechatSession"||e==="wechatTimeline"||e==="qqFriend"||e==="qzone"||e==="weibo"}function Ra(e,t,n){const r=e.identity.get(),i=r?.miniProgramId.trim();if(!i)return te(`${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=r?.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),n!==void 0&&s.searchParams.set("extra",n),s.href}catch{return te(`${t} 缺少有效的小程序分享地址`)}}function Df(e,t){if(!zt(e))return te("share.showShareMenu 参数必须是对象");if(Object.prototype.hasOwnProperty.call(e,"url"))return te("share.showShareMenu 不支持自定义 url");const n=e.channel;if(n!==void 0&&!Pf(n))return te("share.showShareMenu channel 不合法");const r=Oa(e.extra,"share.showShareMenu");return{title:ci(e.title,"share.showShareMenu title 必须是非空字符串"),description:ci(e.desc,"share.showShareMenu desc 必须是非空字符串"),url:Ra(t,"share.showShareMenu",r),...e.imageUrl===void 0?{}:{imageUrl:Of(e.imageUrl,"share.showShareMenu imageUrl 必须是 HTTP(S) URL")},...n===void 0?{}:{channel:n}}}function Oa(e,t){if(e!==void 0)try{return wf(e)}catch{return te(`${t} extra 必须是符合限制的 JSON-compatible 数据`)}}async function Pa(e,t){return e.invalidMessage&&await G(()=>Rf(t.environment),t.operationContext.signal)?te(e.invalidMessage):e.post}function Co(e,t){const n=Number(e);return Number.isFinite(n)&&n>0?n:t}function Nf(e){const t=e.getViewportMetrics();return{left:0,top:0,width:Co(t.windowWidth,0),height:Co(t.windowHeight,0)}}function di(e,t){const n=Number(e);return!Number.isFinite(n)||n<0?te(t):n}function Lo(e,t){const n=Number(e);return!Number.isFinite(n)||n<=0?te(t):n}function vf(e){return zt(e)?{left:di(e.left,"share.screenshot rect.left 必须是非负数字"),top:di(e.top,"share.screenshot rect.top 必须是非负数字"),width:Lo(e.width,"share.screenshot rect.width 必须是正数"),height:Lo(e.height,"share.screenshot rect.height 必须是正数")}:te("share.screenshot rect 必须是对象")}function Tf(e,t){if(e!=null&&!zt(e))return te("share.screenshot 参数必须是对象");const n=e??{};return n.saveToAlbum!==void 0&&typeof n.saveToAlbum!="boolean"?te("share.screenshot saveToAlbum 必须是布尔值"):{rect:n.rect===void 0?Nf(t):vf(n.rect),...n.delay===void 0?{}:{delay:di(n.delay,"share.screenshot delay 必须是非负数字")},...n.saveToAlbum===void 0?{}:{saveToAlbum:n.saveToAlbum}}}async function Cf(e,t){Y(t.operationContext.signal);const n=Df(e,t);let r=Sa(e.post,{maxTopicIds:1,method:"share.showShareMenu"});n.channel&&r.post&&(r={invalidMessage:r.invalidMessage||"share.showShareMenu channel 与 post 不能同时使用"});const i=await Pa(r,t);return G(()=>t.presentation.showShareMenu({...n,post:i},t.operationContext),t.operationContext.signal)}async function Lf(e,t){if(Y(t.operationContext.signal),e!==void 0&&!zt(e))return te("share.copyLink 参数必须是对象");const n=Oa(e?.extra,"share.copyLink"),r=Ra(t,"share.copyLink",n);return await G(()=>t.presentation.setClipboard({text:r},t.operationContext),t.operationContext.signal),r}async function kf(e,t){Y(t.operationContext.signal);const n=Tf(e,t.presentation),r=Sa(zt(e)?e.post:void 0,{method:"share.screenshot"}),i=await Pa(r,t),o=t.identity.get()?.miniProgramId.trim()||void 0,s=Mf();let a=!1,c;try{a=!0,await G(()=>t.presentation.setScreenshotChromeHidden(!0,t.operationContext),t.operationContext.signal),c={status:"fulfilled",value:await G(()=>t.presentation.captureAndShare({...n,post:i,...o?{sourceMiniProgramId:o}:{}},t.operationContext),t.operationContext.signal)}}catch(d){c={status:"rejected",error:d}}const u=a?await Uf(t.presentation,s,t.operationContext.signal):void 0;if(c.status==="rejected")throw c.error;if(u)throw u;return c.value}function Mf(){return{lifecycle:"cleanup",signal:new AbortController().signal}}async function Uf(e,t,n){let r;try{r=Promise.resolve(e.setScreenshotChromeHidden(!1,t))}catch{return}try{await G(()=>r,n,{invokeWhenAborted:!0})}catch(i){if(n.aborted)return i}}function Hf(e){return{[yn]:(t,n)=>Lf(t,e),[wn]:(t,n)=>Cf(t,e),[_n]:(t,n)=>kf(t,e)}}const xf=128,Ff=/^[A-Za-z0-9_-]+$/;function Bf(e){const t=Vf(e),n={[vt]:async r=>{Y(e.operationContext.signal);const i=ko(r,vt,e.storageLimits?.maxKeyLength),o=await G(()=>e.storage.getRaw(Sr(t(),i),e.operationContext),e.operationContext.signal);return{data:Mo(o)}},[Tt]:async r=>{Y(e.operationContext.signal);const i=Da(r,"storage.setStorage 参数必须是对象"),o=ko(i,Tt,e.storageLimits?.maxKeyLength),s=qf(i.data,e.storageLimits?.maxValueBytes);await G(()=>e.storage.setRaw(Sr(t(),o),s,e.operationContext),e.operationContext.signal)}};return e.storageDiagnostics?{handlers:n,diagnostics:{getSnapshot:async()=>{Y(e.operationContext.signal);let r;try{r=t()}catch{throw Me("STORAGE_DIAGNOSTICS_NOT_READY","Storage diagnostics 只能在 canonical identity 绑定后使用")}const i=Sr(r,"");return(await G(()=>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:Mo(a),serializedValue:a,bytes:Na(a)}}).sort((s,a)=>s.key.localeCompare(a.key))}}}:{handlers:n}}function Vf(e){let t=!1,n;return()=>{if(!t){const r=e.identity.get()?.miniProgramId.trim();if(r)n=`id_${Uo(r)}`;else{const i=e.anonymousStorageScope?.trim();i&&(n=`anon_${Uo(i)}`)}t=n!==void 0}if(!n)throw Me("INVALID_STATE","storage scope 只能在 canonical identity 绑定后使用");return n}}function Sr(e,t){return`hb_miniprogram_${e}_${t}`}function ko(e,t,n=xf){const i=Da(e,`${t} 参数必须是对象`).key;if(typeof i!="string")throw Me("INVALID_PARAMS",`${t} key 必须是字符串`);if(!i||i.length>n||!Ff.test(i))throw Me("INVALID_PARAMS",`storage key 仅支持 1-${n} 位字母、数字、下划线和连字符`);return i}function qf(e,t){let n;try{n=JSON.stringify(e)}catch{throw Me("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化")}if(typeof n!="string")throw Me("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化");if(t!==void 0&&Na(n)>t)throw Me("STORAGE_QUOTA_EXCEEDED",`storage.setStorage data 超出 ${t} 字节限制`);return n}function Mo(e){if(!(e===void 0||e===""))try{return JSON.parse(e)}catch{return e}}function Da(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw Me("INVALID_PARAMS",t);return e}function Uo(e){return/^[A-Za-z0-9_-]{1,64}$/.test(e)?e:Gf(e)}function Gf(e){let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function Na(e){return new TextEncoder().encode(e).length}function Me(e,t){return{code:e,message:t}}const Ho=120;function Te(e){throw{code:"INVALID_PARAMS",message:e}}function ki(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function va(e,t,n){const r=Object.keys(e).filter(i=>!t.includes(i));r.length&&Te(`${n} 不支持字段: ${r.join(", ")}`)}function $f(e){if(!ki(e))return Te("ui.showToast 参数必须是对象");if(va(e,["message","status"],"ui.showToast"),typeof e.message!="string"||!e.message.trim())return Te("ui.showToast message 必须是非空字符串");const t=e.message.trim();if(t.length>Ho)return Te(`ui.showToast message 不能超过 ${Ho} 字符`);const n=e.status;if(n!==void 0&&n!=="success"&&n!=="error")return Te("ui.showToast status 必须是 success 或 error");const r=n;return{message:t,...r===void 0?{}:{status:r}}}function jf(e){return e===void 0?{dismissible:!1}:ki(e)?(va(e,["dismissible"],"ui.showLoading"),e.dismissible!==void 0&&typeof e.dismissible!="boolean"?Te("ui.showLoading dismissible 必须是布尔值"):{dismissible:e.dismissible??!1}):Te("ui.showLoading 参数必须是对象")}function zf(e){e!==void 0&&(!ki(e)||Object.keys(e).length)&&Te("ui.hideLoading 不支持参数")}function Wf(e){return{[kn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.showToast($f(t),e.operationContext),e.operationContext.signal)},[Mn]:async t=>{Y(e.operationContext.signal),await G(()=>e.presentation.showLoading(jf(t),e.operationContext),e.operationContext.signal)},[Un]:async t=>{Y(e.operationContext.signal),zf(t),await G(()=>e.presentation.hideLoading(e.operationContext),e.operationContext.signal)}}}const Kf={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.account.home_v2.get",method:"GET",path:"/account/home_v2/",parse(e){return ae(e,"当前用户首页资料接口响应异常")}},Yf=3e4;function Qf(e,t,n={}){const r=n.ttlMs??Yf;let i=0,o,s;async function a(){let u;try{u=await ar(e,Kf,void 0,{...t,credentials:"heybox-session"})}catch(d){throw t.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):d instanceof J?l("REQUEST_UNSUPPORTED",d.message):d instanceof $t?l("INVALID_RESPONSE","user home_v2 响应不合法"):d instanceof ft?l("REQUEST_FAILED","user home_v2 请求失败"):d instanceof lt?l("REQUEST_FAILED",d.message):Jf(d)?d:l("REQUEST_FAILED","user home_v2 请求失败")}return Xf(u,"user home_v2")}function c(u){const d=Date.now();if(o?.userId===u&&o.expiresAt>d)return Promise.resolve(o.value);if(s?.userId===u&&s.generation===i)return s.promise;const h=i,p=a().then(f=>(i===h&&(o={userId:u,value:f,expiresAt:Date.now()+r}),f)).finally(()=>{s?.promise===p&&(s=void 0)});return s={userId:u,generation:h,promise:p},p}return{get:c,clear(){i+=1,o=void 0,s=void 0}}}function Xf(e,t){if(!M(e))throw l("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const n=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,r=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw l(r,n)}if(!M(e.result))throw l("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Jf(e){return M(e)&&typeof e.code=="string"&&typeof e.message=="string"}const Zf={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 ae(e,"Steam 游戏库接口响应异常")}},Ta=20,eh=100,Ca=0,La="weeks",th=100,nh=new Set(["weeks","all","achieved"]);function rh(e){const t=Qf(e.network,e.operationContext),n=new Map;let r=0,i=!1;const o=e.account.onChange(()=>{r+=1,t.clear(),n.clear()}),s=e.authorization.onEvent((w,y)=>{w==="user_info_authorization_change"&&"identity"in y&&y.identity==="denied"&&(r+=1,t.clear(),n.clear())});function a(){if(i||e.operationContext.signal.aborted)throw l("RUNTIME_DESTROYED","小程序 Runtime 已终止")}function c(){const w=e.identity.get()?.miniProgramId?.trim();if(!w)throw l("INVALID_STATE","用户能力缺少 canonical 小程序身份");return w}async function u(){a();let w;try{w=await e.account.getCurrentUserId(e.operationContext)}catch(y){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):Fo(y)?y:l("REQUEST_FAILED","读取小黑盒账号失败")}return typeof w=="string"&&w.trim()?w.trim():void 0}async function d(w,y){const m=await u();if(r!==y||m!==w)throw l("AUTHORIZATION_CONTEXT_CHANGED","用户请求期间账号上下文已变化,请重新操作")}async function h(w,y){try{return await ar(e.network,w,y,{...e.operationContext,credentials:"heybox-session"})}catch(m){throw e.operationContext.signal.aborted?l("RUNTIME_DESTROYED","小程序 Runtime 已终止"):m instanceof J?l("REQUEST_UNSUPPORTED",m.message):m instanceof $t?l("INVALID_RESPONSE","用户接口响应不合法"):m instanceof ft?l("REQUEST_FAILED","用户请求失败"):m instanceof lt?l("REQUEST_FAILED",m.message):Fo(m)?m:l("REQUEST_FAILED","用户请求失败")}}async function p(){c();const w=r,y=await u();if(!y)return{isHeyboxAppLoggedIn:!1,authorization:null,userInfo:null};const[m,b]=await Promise.all([e.authorization.getOrCreateLocalIdentity(y),f(y)]);return await d(y,w),{isHeyboxAppLoggedIn:!0,authorization:e.authorization.getAuthorization(),userInfo:{app_user_id:m.appUserId,profile:b,...m.steamId?{steam_id:m.steamId}:{}}}}function f(w){const y=n.get(w);if(y)return y;const m=h(Js,void 0).then(b=>{const I=xo(b,"账号基础信息");if(I.display_username!==void 0&&typeof I.display_username!="string")throw l("INVALID_RESPONSE","账号基础信息 nickname 不合法");if(I.display_avatar!==void 0&&typeof I.display_avatar!="string")throw l("INVALID_RESPONSE","账号基础信息 avatar 不合法");return{nickname:I.display_username??"",avatar:I.display_avatar??""}}).catch(()=>({nickname:"",avatar:""})).finally(()=>{n.get(w)===m&&n.delete(w)});return n.set(w,m),m}async function A(w){const y=ih(w);c();const m=r,b=await u();if(!b)return{isLogin:!1,isBound:!1,data:null};const I=await t.get(b);await d(b,m);const D=Mi(I.steam_id_info);if(Object.keys(D).length===0)return{isLogin:!0,isBound:!1,data:null};const B=await h(Zf,{userId:b,...y,personalInformationOpen:ka(D.personal_infomation_open??D.personal_information_open)});await d(b,m);const R=xo(B,"Steam 游戏库");return{isLogin:!0,isBound:!0,data:dh(R,y)}}return{getInfo:p,getSteamGameList:A,dispose(){i||(i=!0,r+=1,o(),s(),t.clear(),n.clear())}}}function ih(e){if(e==null)return{limit:Ta,offset:Ca,sort:La,includeHidden:!1};if(!M(e))throw Ce("user.getSteamGameList 参数必须是对象");const t=Object.keys(e).find(r=>!["steamId","limit","offset","sort","q","includeHidden"].includes(r));if(t)throw Ce(`user.getSteamGameList 不支持字段: ${t}`);const n={limit:oh(e.limit),offset:sh(e.offset),sort:ah(e.sort),includeHidden:ch(e.includeHidden)};if(e.steamId!==void 0){if(typeof e.steamId!="string"||!e.steamId.trim())throw Ce("user.getSteamGameList steamId 必须是非空字符串");n.steamId=e.steamId.trim()}if(e.q!==void 0){if(typeof e.q!="string")throw Ce("user.getSteamGameList q 必须是字符串");const r=e.q.trim();r&&(n.q=r.slice(0,th))}return n}function oh(e){if(e===void 0)return Ta;if(!Number.isInteger(e)||Number(e)<1)throw Ce("user.getSteamGameList limit 必须是正整数");return Math.min(Number(e),eh)}function sh(e){if(e===void 0)return Ca;if(!Number.isInteger(e)||Number(e)<0)throw Ce("user.getSteamGameList offset 必须是非负整数");return Number(e)}function ah(e){if(e===void 0)return La;if(typeof e!="string"||!nh.has(e))throw Ce("user.getSteamGameList sort 不支持");return e}function ch(e){if(e===void 0)return!1;if(typeof e!="boolean")throw Ce("user.getSteamGameList includeHidden 必须是 boolean");return e}function dh(e,t){if(!Array.isArray(e.game_list))throw l("INVALID_RESPONSE","Steam 游戏库 game_list 必须是数组");const n=e.game_list.map(uh).filter(a=>a!==void 0),r=jn(e.total),i=t.offset+n.length,o={gameList:n,hasMore:n.length>=t.limit,nextOffset:i};r!==void 0&&(o.total=r,o.hasMore=i<r);const s=ka(e.is_me);return s!==void 0&&(o.isMe=s),o}function uh(e){const t=Mi(e),n=jn(t.appid),r=jn(t.steam_appid)??n,i=Ui(t.name);if(n===void 0||r===void 0||!i)return;const o={appid:n,steamAppid:r,name:i};Rt(o,"image",t.image),Rt(o,"icon",t.appicon??t.icon),Ot(o,"playtimeForever",t.playtime_forever),Ot(o,"playtime2Weeks",t.playtime_2weeks);const s=fh(t.external_tags??t.tags);s.length&&(o.tags=s);const a=lh(t.price);return a&&(o.price=a),o}function lh(e){const t=Mi(e),n={};return Rt(n,"current",t.current),Rt(n,"initial",t.initial),Ot(n,"discount",t.discount),Ot(n,"lowestPrice",t.lowest_price),Rt(n,"deadlineDate",t.deadline_date),Ot(n,"deadlineTimestamp",t.deadline_timestamp),Object.keys(n).length?n:void 0}function xo(e,t){if(!M(e))throw l("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const n=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,r=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw l(r,n)}if(!M(e.result))throw l("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function Mi(e){return M(e)?e:{}}function Ui(e){return typeof e=="string"?e.trim():typeof e=="number"||typeof e=="boolean"?String(e):""}function fh(e){return Array.isArray(e)?e.map(Ui).filter(Boolean):[]}function jn(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()&&Number.isFinite(Number(e)))return Number(e)}function ka(e){if(e===!0||e===1||e==="1")return!0;if(e===!1||e===0||e==="0")return!1}function Rt(e,t,n){const r=Ui(n);r&&Object.assign(e,{[t]:r})}function Ot(e,t,n){const r=jn(n);r!==void 0&&Object.assign(e,{[t]:r})}function Ce(e){return l("INVALID_PARAMS",e)}function Fo(e){return M(e)&&typeof e.code=="string"&&typeof e.message=="string"}function hh(e){const t=e.userDataMode??Md(e.runtimePermissions,e.steamAccount===!0);return{[gn]:async n=>(Bo(n,"user.getInfo"),Ji(t,"user.getInfo"),e.user.getInfo()),[pn]:async(n,r)=>{Bo(n,"user.revokeAuthorization"),await e.authorization.revoke(r.trustedUserGesture)},[En]:async n=>(Ji(t,"user.getSteamGameList"),e.user.getSteamGameList(n))}}function Bo(e,t){if(e!==void 0)throw l("INVALID_PARAMS",`${t} 不接收入参`)}function Vo(e){throw{code:"INVALID_PARAMS",message:e}}function wt(e,t){const n=Number(e);return Number.isFinite(n)&&n>0?n:t}function Ma(e,t){const n=Number(e);return Number.isFinite(n)&&n>=0?n:t}function tn(e,t,n){return Math.min(Ma(e,t),n)}async function mh(e){try{return Ma(await e.getNavigationBarHeight(),0)}catch{return 0}}function gh(e,t,n,r){const i=tn(e.safeArea?.left,0,t),o=Math.max(i,tn(e.safeArea?.right,t,t)),s=tn(e.safeArea?.top,r,n),a=Math.max(s,tn(e.safeArea?.bottom,n,n));return{left:i,right:o,top:s,bottom:a,width:o-i,height:a-s}}async function ph(e){const t=e.getViewportMetrics(),n=wt(t.windowWidth,0),r=wt(t.windowHeight,0),i=await mh(e);return{pixelRatio:wt(t.pixelRatio,1),screenWidth:wt(t.screenWidth,n),screenHeight:wt(t.screenHeight,r),windowWidth:n,windowHeight:r,statusBarHeight:i,safeArea:gh(t,n,r,i),screenTop:i}}function Eh(e){return{[In]:async()=>(Y(e.operationContext.signal),ph(e.presentation)),[An]:async t=>{if(Y(e.operationContext.signal),typeof t!="object"||t===null||Array.isArray(t))return Vo("viewport.setNavigationBarStyle 参数必须是对象");const n=t.foregroundStyle;if(n!=="light"&&n!=="dark")return Vo("viewport.setNavigationBarStyle foregroundStyle 必须是 light 或 dark");await G(()=>e.presentation.setNavigationBarStyle(n,e.operationContext),e.operationContext.signal)}}}const yh=new Map(ke.map(e=>[e.method,e]));function Rr(e,t,n){return{code:e,message:t,...n===void 0?{}:{data:n}}}function wh(e){const t=pt(e);return n=>{if(n.requirement.kind==="none")return{allowed:!0};for(const r of n.requirement.permissions){const i=t.valid?t.permissions[r]:void 0;if(!i)return{allowed:!1,code:"PERMISSION_NOT_DECLARED",message:`小程序未声明权限: ${r}`,data:{permission:r,method:n.method}};if(i.status!=="enabled")return{allowed:!1,code:"PERMISSION_DENIED",message:`小程序权限未启用: ${r}`,data:{permission:r,method:n.method}}}return{allowed:!0}}}function _h(e,t,n,r){let i;try{i=Promise.resolve(e(t,n))}catch(o){return r.aborted?Promise.resolve({status:"dropped"}):Promise.reject(o)}return r.aborted?(i.catch(()=>{}),Promise.resolve({status:"dropped"})):new Promise((o,s)=>{let a=!1;const c=d=>{a||(a=!0,r.removeEventListener("abort",u),d())},u=()=>c(()=>o({status:"dropped"}));r.addEventListener("abort",u,{once:!0}),i.then(d=>c(()=>o({status:"handled",value:d})),d=>c(()=>s(d)))})}function Ih(e){const t=wh(e.runtimePermissions),n=pt(e.runtimePermissions);let r=0;return{async dispatch(i,o,s){const a=e.now??Ah,c=e.onTrace?a():0,u=e.onTrace?`cap_${++r}`:"";try{if(e.terminalSignal.aborted)throw Rr("RUNTIME_DESTROYED","小程序 Runtime 已终止");ed(i,e.effectiveCapabilities);const d=yh.get(i);if(!d)throw new Error(`Capability method ${i} 缺少 protocol metadata`);const h=t(d),p=!h.allowed&&n.valid&&n.permissions.companion?.status==="enabled"&&e.allowsCompanionAttachmentAccess?.(i,o)===!0;if(!h.allowed&&!p)throw Rr(h.code,h.message,h.data);const f=e.handlers[i];if(!f)throw new Error(`Capability method ${i} 缺少 handler`);const A=await _h(async()=>{for(const w of e.policies??[]){const y=await w.evaluate({method:i,payload:o,capability:d});if(e.terminalSignal.aborted)throw $o();if(!y.allowed)throw Rr(y.code,y.message,y.data)}if(e.terminalSignal.aborted)throw $o();return f(o,s)},void 0,s,e.terminalSignal);return qo(e.onTrace,Go(u,i,o,c,A),a),A}catch(d){throw qo(e.onTrace,Go(u,i,o,c,{status:"error",error:d}),a),d}}}}function Ah(){return typeof performance>"u"?Date.now():performance.now()}function qo(e,t,n){if(!e)return;const r=n();try{e({...t,timestamp:r,durationMs:Math.max(0,Number.isFinite(r-t.startedAt)?r-t.startedAt:0)})}catch{}}function Go(e,t,n,r,i){const o=i.status==="handled"?"success":i.status;return{callId:e,method:t,startedAt:r,outcome:o,...i.status==="error"?{errorCode:bh(i.error)}:{},...Sh(t,n,i)}}function bh(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:void 0}function Sh(e,t,n){if(e!=="network.request"||typeof t!="object"||t===null||!("url"in t)||typeof t.url!="string")return{};try{const r=new URL(t.url);if(r.protocol!=="http:"&&r.protocol!=="https:"||r.username||r.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=n.status==="handled"&&Ua(n.value)&&typeof n.value.status=="number"?n.value.status:void 0;return{network:{method:o,origin:r.origin,pathname:r.pathname,...s===void 0?{}:{responseStatus:s}}}}catch{return{}}}function Ua(e){return typeof e=="object"&&e!==null}function $o(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function Rh(e){const t={signal:e.terminalSignal,...e.miniProgramDetail===void 0?{}:{miniProgramDetail:e.miniProgramDetail}},n=new Bu(e.files,e.miniProgramDetail),r=Ku({registry:n,picker:e.picker,operationContext:t}),i=jd({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});let o,s,a=()=>{},c=()=>{};try{o=rh({account:e.account,network:e.network,identity:e.identity,operationContext:t,authorization:i}),a=i.onEvent((y,m)=>e.eventSink.postEvent(y,m)),c=e.hostCompanion?.onSessionEvent?.(y=>{const m=ku(y);!e.terminalSignal.aborted&&m&&e.eventSink.postEvent(m.type,m.payload)})??(()=>{}),s=wu({account:e.account,identity:e.identity,network:e.network,operationContext:t});const u=Bf({storage:e.storage,storageDiagnostics:e.storageDiagnostics,identity:e.identity,operationContext:t,anonymousStorageScope:e.anonymousStorageScope,storageLimits:e.storageLimits}),d=[{name:"auth",handlers:Zd({authorization:i})},{name:"user",handlers:hh({user:o,authorization:i,runtimePermissions:e.runtimePermissions,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode})},{name:"share",handlers:Hf({environment:e.environment,identity:e.identity,operationContext:t,presentation:e.hostPresentation})},{name:"viewport",handlers:Eh({operationContext:t,presentation:e.hostPresentation})},{name:"storage",handlers:u.handlers},{name:"network",handlers:Yl({network:e.network,transfer:e.transfer,fileRegistry:n,operationContext:t,runtimePermissions:e.runtimePermissions,allowedHttpOrigins:e.allowedHttpOrigins})},{name:"files",handlers:r.files},{name:"file",handlers:r.file},{name:"directory",handlers:r.directory},{name:"ui",handlers:Wf({operationContext:t,presentation:e.hostPresentation})},{name:"device",handlers:Hu({operationContext:t,presentation:e.hostPresentation})},{name:"navigation",handlers:gl({operationContext:t,presentation:e.hostPresentation})},{name:"cloud",handlers:s.handlers},{name:"companion",handlers:Nu({companion:e.hostCompanion,companionPresentation:e.companionPresentation,miniProgramPresentation:e.miniProgramPresentation,operationContext:t,fileRegistry:n})}],h=Oh(d);let p=!1;const f=()=>{p||(p=!0,e.terminalSignal.removeEventListener("abort",f),s?.dispose(),a(),c(),o?.dispose(),i.dispose(),n.dispose())};e.terminalSignal.aborted?f():e.terminalSignal.addEventListener("abort",f,{once:!0});const A=new Set(["file.readText","file.readBytes","file.stat"]);return{modules:d,handlers:h,allowsCompanionAttachmentAccess:(y,m)=>A.has(y)&&Ua(m)&&n.isCompanionAttachmentRef(m.target),...u.diagnostics?{storageDiagnostics:u.diagnostics}:{},dispose:f}}catch(u){throw s?.dispose(),a(),c(),o?.dispose(),i.dispose(),n.dispose(),u}}function Oh(e){const t=new Map(ke.map(i=>[i.method,i.module])),n=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(n.has(a))throw new Error(`Capability method ${a} 存在重复 owner`);if(typeof s!="function")throw new Error(`Capability method ${a} 缺少 handler`);n.set(a,s)}const r=ke.map(i=>i.method).filter(i=>!n.has(i));if(r.length>0)throw new Error(`Capability registry 缺少 method: ${r.join(", ")}`);if(n.size!==ke.length)throw new Error(`Capability registry method 数量不合法: ${n.size}`);return Object.freeze(Object.fromEntries(n))}const Ph="heybox-mini-dev:";function jo(e){try{return Dh(new URL(e))}catch{return!1}}function Dh(e){return e.protocol===Ph}function Nh(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"||vh(e)}function vh(e){const t=e.split(".");if(t.length!==4)return!1;const n=t.map(r=>/^\d+$/.test(r)?Number(r):Number.NaN);return n.some(r=>!Number.isInteger(r)||r<0||r>255)?!1:n[0]===10||n[0]===172&&n[1]>=16&&n[1]<=31||n[0]===192&&n[1]===168}const Th=new Set(["android","ios","ohos","windows","macos","linux","unknown"]);function Ch(e,t){const n=[],r=Lh(e.environmentInfo,n),i=cn(r?.appVersion,"host.appVersion",n),o=Mh(r?.operatingSystem,n);return{info:Object.freeze({runtime:Object.freeze({mode:kh(e.sdkVersionPolicy?.releaseChannel,n)}),host:Object.freeze({appVersion:i}),miniProgram:Object.freeze({id:cn(t.miniProgramId),version:cn(t.miniProgramVersion)}),operatingSystem:Object.freeze(o)}),invalidFields:Object.freeze(n)}}function Lh(e,t){if(e!=null){if(Ha(e))return e;t.push("environmentInfo")}}function kh(e,t){return e==="public"?"production":e==="preview"||e==="development"?e:(e!=null&&t.push("runtime.mode"),"unknown")}function Mh(e,t){if(e==null)return{name:"unknown",version:null};if(!Ha(e))return t.push("operatingSystem"),{name:"unknown",version:null};const n=Th.has(e.name)?e.name:"unknown";return n==="unknown"&&e.name!==void 0&&e.name!==null&&e.name!=="unknown"&&t.push("operatingSystem.name"),{name:n,version:cn(e.version,"operatingSystem.version",t)}}function cn(e,t,n){return e==null?null:typeof e=="string"&&e.trim()?e.trim():(t&&n&&n.push(t),null)}function Ha(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Uh=1,xa="allow-scripts allow-same-origin",Hh="",xh="no-referrer";function Fh(e=xa){return!e.split(/\s+/).includes("allow-same-origin")}function zo(){return window.crypto?.randomUUID?window.crypto.randomUUID():`${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}const Bh=new Set(["javascript:","data:","blob:","file:"]),Wo="xiaoheihe.cn";function Vh(e,t=window.location.href,n={}){const r=e.trim();if(!r)throw new Error("缺少 mini_url 参数");let i;try{i=new URL(r)}catch{throw new Error("小程序链接必须是绝对 URL")}if(Bh.has(i.protocol)||!["http:","https:"].includes(i.protocol))throw new Error("不支持的小程序链接协议");if(!zh(i,t,n))throw new Error("小程序链接必须属于 https://*.xiaoheihe.cn 或本地调试地址");return i.toString()}function qh(e,t){const n=new URL(e);return n.searchParams.set(Cc,t),n.toString()}function Gh(e,t,n){try{const r=new URL(e),i=new URL(t);if(r.origin!==i.origin)return!1;const o=$h(n)??jh(r.pathname);return i.pathname.startsWith(o)}catch{return!1}}function $h(e){if(!e)return;const t=new URL(e,"https://mini-program.invalid").pathname;return t.endsWith("/")?t:`${t}/`}function jh(e){const t=/^(\/u\/[^/]+\/[^/]+\/)/.exec(e)?.[1];if(t)return t;const n=e.lastIndexOf("/");return n>=0?e.slice(0,n+1):"/"}function Ko(e){const t=new URL(e);return Hi(t)?"loopback":xi(t)?"lan":"production"}function zh(e,t,n){return Wh(e)||Hi(e)||xi(e)&&Yh(t,n)}function Wh(e){return e.protocol==="https:"&&Jh(e.hostname)}function Hi(e){return e.protocol==="http:"&&Kh(e.hostname)}function Kh(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"}function xi(e){return e.protocol==="http:"&&Qh(e.hostname)}function Yh(e,t){if(t.allowPrivateNetwork)return!0;try{const n=new URL(e);return Hi(n)||xi(n)}catch{return!1}}function Qh(e){const t=Xh(e);return t?t[0]===10||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168:!1}function Xh(e){const t=e.split(".");if(t.length!==4)return;const n=t.map(r=>{if(!/^\d+$/.test(r))return;const i=Number(r);return Number.isInteger(i)&&i>=0&&i<=255?i:void 0});return n.every(r=>r!==void 0)?n:void 0}function Jh(e){return e===Wo||e.endsWith(`.${Wo}`)}const Zh=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"]),em=new Set(["url","inline","eval","unknown"]),tm=/^\/(?:\:segment(?:\/\:segment)*)?$/,nm=/^[a-f0-9]{64}$/,rm=255,im=160,om=256;function sm(e,t){const n=e;if(!n||typeof n.sdkVersion!="string"||n.sdkVersion!==t||typeof n.effectiveDirective!="string"||!Zh.has(n.effectiveDirective)||typeof n.violatedDirective!="string"||n.violatedDirective.length>om||n.violatedDirective.split(/\s/,1)[0]!==n.effectiveDirective||!["enforce","report"].includes(n.disposition??"")||typeof n.blockedResourceType!="string"||!em.has(n.blockedResourceType)||typeof n.timestamp!="number"||!Number.isFinite(n.timestamp)||n.timestamp<0)return;const r=am(n.blockedOrigin);if(n.blockedOrigin!==void 0&&!r)return;const i=n.redactedPathname;if(i!==void 0&&(typeof i!="string"||i.length>im||!tm.test(i)))return;const o=n.sanitizedPathnameHash;if(!(o!==void 0&&(typeof o!="string"||!nm.test(o)||i===void 0)))return{effectiveDirective:n.effectiveDirective,violatedDirective:n.effectiveDirective,blockedResourceType:n.blockedResourceType,origin:r,sanitizedPathname:i,sanitizedPathnameHash:o,sdkVersion:n.sdkVersion,timestamp:n.timestamp}}function am(e){if(e!==void 0&&!(typeof e!="string"||e.length>rm))try{const t=new URL(e);return["http:","https:"].includes(t.protocol)&&t.origin===e?t.origin:void 0}catch{return}}const cm=/^(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 dm(e){if(!e?.minimumSdkVersion)throw x("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不可用");const t=Be(e.minimumSdkVersion),n=e.sdkVersion?Be(e.sdkVersion):void 0;if(!t)throw x("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不合法");if(e.sdkVersion&&!n)throw x("SDK_VERSION_INVALID","小程序 SDK 版本不合法");const r=Be("0.6.0");if(!n){if(dn(t,r)<0)return{heartbeatEnabled:!1,sdkVersion:void 0};throw x("SDK_VERSION_INVALID","小程序 SDK 版本缺失")}if((e.releaseChannel??"public")==="public"&&n.prerelease.length>0)throw x("SDK_VERSION_INVALID","正式小程序不能使用预发布 SDK");if(dn(n,t)<0)throw x("SDK_VERSION_TOO_LOW","小程序 SDK 版本低于平台最低要求");return{heartbeatEnabled:dn(n,Be("0.6.0-0"))>=0,sdkVersion:e.sdkVersion}}function um(e,t){if(typeof t!="string"||!Be(t))throw x("SDK_VERSION_INVALID","SDK handshake 版本不合法");if(t!==e)throw x("SDK_VERSION_MISMATCH","SDK handshake 版本与 Version record 不一致")}function lm(e,t){const n=Be(e),r=Be(t);if(!(!n||!r))return dn(n,r)}function Be(e){const t=cm.exec(e);if(t)return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]?.split(".").map(n=>/^\d+$/.test(n)?Number(n):n)??[]}}function dn(e,t){for(const r of["major","minor","patch"])if(e[r]!==t[r])return e[r]<t[r]?-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 n=Math.max(e.prerelease.length,t.prerelease.length);for(let r=0;r<n;r+=1){const i=e.prerelease[r],o=t.prerelease[r];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 ur=["android","ios","ohos","windows","macos","linux"],fm="0.9.0",hm=Object.freeze(["android","ios","ohos"]),Fa="该小程序暂不支持当前平台",mm="PLATFORM_UNSUPPORTED";function gm(e){return typeof e=="string"&&ur.includes(e)}function pm(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 Em(e){const t=e.manifest;if(!Am(t))return{status:"invalid",reason:"manifest_not_object"};if(!Object.prototype.hasOwnProperty.call(t,"platforms")){const r=Qo(e.sdkVersion)??Qo(t.sdkVersion);return _m(r)?{status:"invalid",reason:"platforms_missing_after_hard_cutover"}:wm()}const n=Ba(t.platforms);return"reason"in n?{status:"invalid",reason:n.reason}:{status:"resolved",declaredPlatforms:n.platforms,effectivePlatforms:n.platforms,platformsDeclared:!0,policy:"explicit"}}function ym(e){const t=pm(e.operatingSystemName);if(!t)return ot("host_operating_system_unknown");const n=e.platformAccess;if(!n)return ot("platform_access_missing",{platform:t});if(n.source==="compatibility-window")return{status:"allowed",platform:t,effectivePlatforms:ur,platformsDeclared:!1,policy:"legacy_mobile_default",compatibility:n.reason};if(n.source==="manifest"){const s=Em({manifest:n.manifest,...n.sdkVersion===void 0?{}:{sdkVersion:n.sdkVersion}});return s.status==="invalid"?ot("platform_declaration_invalid",{invalidReason:s.reason,platform:t}):Yo(t,s)}if(n.effectivePlatforms===void 0)return ot("platform_declaration_invalid",{invalidReason:"effective_platforms_missing",platform:t});const r=Ba(n.effectivePlatforms);if("reason"in r)return ot("platform_declaration_invalid",{invalidReason:r.reason,platform:t});const i=typeof n.platformsDeclared=="boolean"?n.platformsDeclared:!0,o=Im(n.platformPolicy)?n.platformPolicy:i?"explicit":"legacy_mobile_default";return Yo(t,{declaredPlatforms:i?r.platforms:[],effectivePlatforms:r.platforms,platformsDeclared:i,policy:o})}function Yo(e,t){return t.effectivePlatforms.includes(e)?{status:"allowed",platform:e,effectivePlatforms:t.effectivePlatforms,platformsDeclared:t.platformsDeclared,policy:t.policy}:ot("platform_not_supported",{effectivePlatforms:t.effectivePlatforms,platform:e})}function ot(e,t={}){return{status:"denied",reason:e,message:Fa,...t}}function wm(){return{status:"resolved",declaredPlatforms:[],effectivePlatforms:hm,platformsDeclared:!1,policy:"legacy_mobile_default"}}function Ba(e){if(!Array.isArray(e))return{reason:"platforms_not_array"};if(e.length===0)return{reason:"platforms_empty"};const t=new Set;for(const n of e){if(!gm(n))return{reason:"platform_unknown_value"};if(t.has(n))return{reason:"platform_duplicate_value"};t.add(n)}return{platforms:Object.freeze(ur.filter(n=>t.has(n)))}}function _m(e){if(typeof e!="string"||!e.trim())return!1;const t=lm(e.trim(),fm);return t!==void 0&&t>=0}function Qo(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Im(e){return e==="explicit"||e==="legacy_mobile_default"}function Am(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const bm=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 Sm(e,t,n){const r=Date.now();try{const i=new URL(t);return{type:"security_violation",errorCode:e,timestamp:r,sdkVersion:n,origin:i.origin,sanitizedPathname:Rm(i.pathname),sanitizedPathnameHash:Om(i.pathname)}}catch{return{type:"security_violation",errorCode:e,timestamp:r,sdkVersion:n}}}function Rm(e){return(e==="/"?e:e.replace(/\/+$/,"")).split("/").map(n=>n?":segment":"").join("/")}function Om(e){const t=new TextEncoder().encode(e),n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128,new DataView(r.buffer).setUint32(n-4,t.length*8,!1);const i=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),o=new Uint32Array(64),s=new DataView(r.buffer);for(let a=0;a<n;a+=64){for(let y=0;y<16;y+=1)o[y]=s.getUint32(a+y*4,!1);for(let y=16;y<64;y+=1){const m=o[y-15],b=o[y-2],I=Ee(m,7)^Ee(m,18)^m>>>3,D=Ee(b,17)^Ee(b,19)^b>>>10;o[y]=o[y-16]+I+o[y-7]+D>>>0}let[c,u,d,h,p,f,A,w]=i;for(let y=0;y<64;y+=1){const m=w+(Ee(p,6)^Ee(p,11)^Ee(p,25))+(p&f^~p&A)+bm[y]+o[y]>>>0,b=(Ee(c,2)^Ee(c,13)^Ee(c,22))+(c&u^c&d^u&d);w=A,A=f,f=p,p=h+m>>>0,h=d,d=u,u=c,c=m+b>>>0}[c,u,d,h,p,f,A,w].forEach((y,m)=>{i[m]=i[m]+y>>>0})}return Array.from(i,a=>a.toString(16).padStart(8,"0")).join("")}function Ee(e,t){return e>>>t|e<<32-t}const Pm=1e4,Or=2e3,Dm=2,Nm="open-with-native-credential-policy",Va="安全提示",qa="即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。";class vm{nonce=zo();runtimeId=zo();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 n=Xs(t.ports,{callerCapabilities:t.capabilities,hostCapabilities:t.hostCapabilities});this.ports=n.ports,this.primitiveAvailability=n.primitiveAvailability,this.effectiveCapabilities=n.effectiveCapabilities,this.identity={},this.identityRef={get:()=>{const r=this.identity.miniProgramId?.trim();if(r)return{miniProgramId:r,...this.identity.miniProgramVersion?{version:this.identity.miniProgramVersion}:{}}}},this.handshakeTimeout=t.handshakeTimeout??Pm,this.iframeErrorListener=r=>{this.onIframeError(r)},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??x("RUNTIME_DESTROYED","小程序运行时已销毁")):this.stateValue==="failed"?Promise.reject(this.terminalError??x("STARTUP_ERROR","小程序运行时启动失败")):this.readyContext?Promise.resolve(this.readyContext):this.startPromise?this.startPromise:(Fm(),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=x("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"),!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,n)=>{this.resolveReady=t,this.rejectReady=n})}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=dm(t.sdkVersionPolicy);const n=Ch(t,this.identity);if(this.environmentInfo=n.info,n.invalidFields.length>0&&this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"environment_invalid",message:`环境字段已降级:${n.invalidFields.join(", ")}`}),this.platformGateDecision=ym({operatingSystemName:t.environmentInfo?.operatingSystem?.name,...t.platformAccess===void 0?{}:{platformAccess:t.platformAccess}}),this.platformGateDecision.status==="denied")throw qm(this.platformGateDecision);if(this.miniProgramDetail=Gm(t),this.effectiveCapabilities=Qs(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),km(this.options.onLaunchConfigurationResolved,t,this.sdkVersionDecision),this.isInactive())return;this.applyIframeDefaults(),this.startBridgeServer(),this.installSubscriptions();const r=await this.normalizeLaunchUrl(t.launchUrl);if(this.isInactive())return;const i=await this.confirmDevMiniProgramLaunch(r);if(!this.isInactive()){if(!i){await this.closeAfterDevLaunchCancellation();return}this.bridgeServer?.setTargetOrigin(Um(r)),this.launchUrl=r,this.miniProgramSrc=qh(r,this.nonce),this.traceSecurityPolicy(r),this.setStatus("src_resolved"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"src_resolved"}),this.awaitingControlledDocumentLoad=!0,this.iframe.src=this.miniProgramSrc,Pe(this.options.onLaunch,this.createLaunchContext()),this.armHandshakeTimeout()}}startBridgeServer(){const t={postEvent:(r,i)=>{this.stateValue==="ready"&&this.bridgeServer?.postEvent(r,i)}};this.capabilityGraph=Rh({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});const n=Ih({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:r,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,errorCode:u,network:d})=>{const h={type:"capability",runtimeId:this.runtimeId,callId:r,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,...u?{errorCode:u}:{},...this.identity,...d?{network:d}:{}};Pe(this.options.onCapabilityTrace,h)}}:{}});this.bridgeServer=new Jc({iframe:this.iframe,nonce:this.nonce,dispatcher:n,environmentInfo:this.environmentInfo,onHandshake:r=>this.handleBridgeHandshake(r),onReady:()=>{this.handleBridgeReady()},onDuplicateHandshake:()=>{this.handleDuplicateBridgeHandshake()},onInternalEvent:r=>{this.handleInternalBridgeEvent(r)},onResponsePosted:({method:r,outcome:i,errorCode:o})=>{this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"bridge_response",method:r,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 n=t instanceof Error?t.message:"小程序 iframe 加载失败";this.failRuntime(x("IFRAME_LOAD_ERROR",n,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 Lm(t)?t:Ga(x("STARTUP_ERROR",t instanceof Error?t.message:"获取小程序启动配置失败"),t)}}bindCanonicalIdentity(t){const n=t?.miniProgramId?.trim();n&&(this.identity.miniProgramId=n);const r=t?.miniProgramVersion?.trim();r&&(this.identity.miniProgramVersion=r)}async normalizeLaunchUrl(t){try{const n=this.options.environment.getCurrentHref();return Vh(t,n,{allowPrivateNetwork:jo(n)||Xo(n)||await this.isDevRuntime()})}catch(n){throw x("INVALID_LAUNCH_URL",n instanceof Error?n.message:"小程序链接不合法",n)}}async confirmDevMiniProgramLaunch(t){return await this.shouldConfirmDevMiniProgramLaunch(t)?this.isInactive()?!1:!!await(this.options.confirmDevMiniProgramLaunch??xm)({message:qa,title:Va,url:t}):!0}async shouldConfirmDevMiniProgramLaunch(t){if(Ko(t)==="production")return!1;const n=this.options.environment.getCurrentHref();return!jo(n)&&!Xo(n)}async closeAfterDevLaunchCancellation(){const t=x("LAUNCH_CANCELLED","小程序启动已取消");this.terminalError=t,this.destroyBridgeServer();const n=new AbortController;let r;try{r=Promise.resolve(this.ports.presentation.close({signal:n.signal}))}catch{Jo(),r=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 r.catch(()=>Jo())}async isDevRuntime(){return this.devRuntimePromise??=Promise.resolve().then(()=>this.options.environment.isDevRuntime()).then(Boolean).catch(()=>!1),this.devRuntimePromise}applyIframeDefaults(){this.iframe.setAttribute("allow",Hh),this.iframe.setAttribute("referrerpolicy",xh),this.iframe.setAttribute("sandbox",xa)}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 n of t)try{n?.()}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),Pe(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),Pe(this.options.onReady,t)}handleBridgeHandshake(t){const n=this.sdkVersionDecision?.sdkVersion;if(n)try{um(n,t?.sdkVersion)}catch(r){return this.failRuntime(r),!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(x("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>=Dm)){this.failRuntime(x("HEARTBEAT_TIMEOUT","小程序 SDK 心跳超时"));return}const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.bridgeServer?.postInternalRequest(Qt,t,{probeId:t,timestamp:Date.now()}),this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},Or),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:Qt})}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 n=++this.documentRevalidationGeneration;return this.iframeHiddenForRevalidation||(this.iframeVisibilityBeforeRevalidation=this.iframe.style.visibility,this.iframe.style.visibility="hidden",this.iframeHiddenForRevalidation=!0),this.armDocumentRevalidationTimer(n),t.deferProbe||this.sendDocumentRevalidationProbe(),n}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(Qt,t,{probeId:t,timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:Qt})}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(x("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 文档再验证超时")))},Or))}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()},Or))}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===kc){this.handleCspViolation(t.payload);return}if(t.method!==Lc)return;const n=this.sdkVersionDecision?.sdkVersion;if(!n)return;const r=t.payload;if(!r||r.sdkVersion!==n){this.failRuntime(x("SDK_VERSION_MISMATCH","URL report 的 SDK 版本不一致"));return}if(!(r.probeId!==void 0&&r.probeId!==this.pendingProbeId)){if(typeof r.href!="string"||!Gh(this.launchUrl,r.href,this.locationBasePath)){typeof r.href=="string"&&this.emitUrlSecurityViolation("URL_OUT_OF_SCOPE",r.href),this.failRuntime(x("URL_OUT_OF_SCOPE","小程序页面地址超出允许范围"));return}r.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 n=sm(t,this.sdkVersionDecision?.sdkVersion);n&&this.emitSecurityViolation({type:"security_violation",errorCode:"CSP_VIOLATION",timestamp:n.timestamp,sdkVersion:n.sdkVersion,origin:n.origin,sanitizedPathname:n.sanitizedPathname,sanitizedPathnameHash:n.sanitizedPathnameHash,effectiveDirective:n.effectiveDirective,violatedDirective:n.violatedDirective,blockedResourceType:n.blockedResourceType})}emitSecurityViolation(t){Pe(this.options.onSecurityViolation,t),this.trace({runtimeId:this.nonce,...t})}emitUrlSecurityViolation(t,n){const r=Sm(t,n,this.sdkVersionDecision?.sdkVersion);this.emitSecurityViolation(r)}scheduleUnexpectedDocumentLoadFailure(){this.clearUnexpectedDocumentLoadFailure(),this.unexpectedDocumentLoadTimer=setTimeout(()=>{this.unexpectedDocumentLoadTimer=void 0,this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime(x("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:Uh,launchUrlType:Ko(t),networkPolicy:Nm})}failRuntime(t){const n=Tm(t);return this.isInactive()||(this.terminalError=n,this.terminalController.abort(n),this.postBridgeError(n),this.disposeRuntimeResources(),this.setStatus("failed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"error",errorCode:n.code,message:n.message}),this.setState("failed"),this.teardownIframe(n),Pe(this.options.onError,Cm(n)),this.rejectReady?.(n)),n}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,Pe(this.options.onStateChange,t))}isInactive(){return this.stateValue==="failed"||this.stateValue==="destroyed"}trace(t){Pe(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 Tm(e){const t=Ws(e);return zn(e)&&"cause"in e&&Ga(t,e.cause),t}function Ga(e,t){return Object.defineProperty(e,"cause",{configurable:!0,enumerable:!1,value:t}),e}function Cm(e){return{code:e.code,message:e.message,...e.data!==void 0?{data:e.data}:{}}}function Lm(e){return zn(e)&&typeof e.code=="string"&&typeof e.message=="string"}function zn(e){return!!e&&typeof e=="object"}function Pe(e,t){try{e?.(t)}catch{}}function km(e,t,n){try{e?.(t,n)}catch{}}function Xo(e){try{const t=new URL(e);return t.protocol==="http:"&&Nh(t.hostname)}catch{return!1}}function Mm(e){try{return new URL(e).origin}catch{return}}function Um(e){return Fh()?"*":Mm(e)}function Hm(e){return`${Va}
|
|
2
2
|
|
|
3
3
|
${qa}
|
|
4
4
|
|