@heybox/hb-sdk 0.9.1-alpha.13 → 0.9.1-alpha.14
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 +7 -0
- package/dist/cli-chunks/{build-BbHZwXU-.cjs → build-BB555z8a.cjs} +5 -5
- package/dist/cli-chunks/{context-DO5i8KuO.cjs → context-D9wc3FYP.cjs} +2 -2
- package/dist/cli-chunks/{create--IVuD5k_.cjs → create-M6YyI9rc.cjs} +1 -1
- package/dist/cli-chunks/{dev-BhEiM7pc.cjs → dev-CPCt-bb5.cjs} +8 -8
- package/dist/cli-chunks/{doctor-d1QBw6xr.cjs → doctor-DeYOdj8G.cjs} +1 -1
- package/dist/cli-chunks/{index-Bg8efmgB.cjs → index-BDxvZ_vI.cjs} +1 -1
- package/dist/cli-chunks/{index-D9EWV1_s.cjs → index-InQQWQJY.cjs} +16 -16
- package/dist/cli-chunks/{index.esm-D4RF7uzO.cjs → index.esm-BMw5fq-T.cjs} +6 -6
- package/dist/cli-chunks/{login-CQ30ru_V.cjs → login-Bg9GUZrW.cjs} +1 -1
- package/dist/cli-chunks/{project-vite-ESL8lQxi.cjs → project-vite-DwNMXhew.cjs} +1 -1
- package/dist/cli-chunks/{remote-DanoP7Dn.cjs → remote-CYceFNiX.cjs} +6 -6
- package/dist/cli-chunks/{runtime-gate-DZsAmCYW.cjs → runtime-gate-ZEmqJ92E.cjs} +2 -2
- package/dist/cli-chunks/{runtime-permission-env-CmEUEBaN.cjs → runtime-permission-env-MkB8-Kyr.cjs} +2 -2
- package/dist/cli-chunks/{skill-D8nZ85m0.cjs → skill-DtAPNnqR.cjs} +2 -2
- package/dist/cli-chunks/{version-BQjpkyst.cjs → version-Dh7utayJ.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-DmxOoNLa.js +102 -0
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-DHAqShPh.js → desktop-app-launch-DXIeyBSr.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-V5tDukHZ.js → index-DP6S5Mrw.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/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +3 -3
- package/skill/skill.json +4 -4
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-Dve2R-Eg.js +0 -102
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import{H as Wo,ax as Wd,aY as $d,M as Kd,aH as Jd,aI as Zd,aj as yr,b6 as Y,aa as Xd,ak as ec,aq as eu,b0 as tu,am as ru,d as nu,aE as tc,a8 as iu,at as rc,r as ou,az as nc,o as su,aD as au,a5 as cu,a_ as du,aZ as uu,c as lu}from"./desktop-app-launch-DXIeyBSr.js";const $r="workspaceCards.requestRefresh",Kr="auth.login",Jr="user.getInfo",Zr="user.revokeAuthorization",Xr="user.getSteamGameList",en="share.copyLink",tn="share.showShareMenu",rn="share.screenshot",ot="viewport.setDisplay",nn="viewport.getWindowInfo",on="viewport.setNavigationBarStyle",tr="storage.getStorage",rr="storage.setStorage",sn="network.request",an="network.download",cn="network.upload",dn="files.pickFiles",un="files.pickDirectory",ln="files.saveFile",nr="file.create",ir="file.remove",fn="file.exists",or="file.readText",hn="file.writeText",sr="file.readBytes",mn="file.writeBytes",ar="file.stat",gn="directory.create",cr="directory.remove",pn="directory.exists",yn="directory.list",En="ui.showToast",wn="ui.showLoading",In="ui.hideLoading",Mn="device.vibrate",Nn="device.setClipboard",An="device.executeProtocol",Dn="navigation.close",Tn="navigation.reload",Sn="navigation.openAppPage",xe="cloud.leaderboard.submit",Ne="cloud.leaderboard.getList",Ye="cloud.leaderboard.getCurrentUserEntry",st="cloud.leaderboard.deleteCurrentUserEntry",ve="cloud.leaderboard.getInfo",Rn="companion.getInfo",kn="companion.getPreparationStatus",xn="companion.prepare",jn="companion.cancelPreparation",zn="companion.getActiveSession",Un="companion.launch",Hn="companion.session.write",Fn="companion.session.closeStdin",Vn="companion.session.terminate",Bn="companion.session.ackOutput",Qn="companion.openAttachment",Yn="companion.showNotification",Ge=[{method:$r,module:"workspaceCards",capability:$r,requirement:{kind:"all",permissions:["workspaceCards"]},risk:"high"},{method:Kr,module:"auth",capability:Kr,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:Jr,module:"user",capability:Jr,requirement:{kind:"all",permissions:["userInfo"]},risk:"medium"},{method:Zr,module:"user",capability:Zr,requirement:{kind:"none"},risk:"high"},{method:Xr,module:"user",capability:Xr,requirement:{kind:"all",permissions:["steamLibrary"]},risk:"high"},{method:en,module:"share",capability:en,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:tn,module:"share",capability:tn,requirement:{kind:"all",permissions:["share"]},risk:"low"},{method:rn,module:"share",capability:rn,requirement:{kind:"all",permissions:["share"]},risk:"medium"},{method:nn,module:"viewport",capability:nn,requirement:{kind:"none"},risk:"low"},{method:on,module:"viewport",capability:on,requirement:{kind:"none"},risk:"low"},{method:ot,module:"viewport",capability:ot,requirement:{kind:"none"},risk:"low"},{method:tr,module:"storage",capability:tr,requirement:{kind:"all",permissions:["storage"]},risk:"low"},{method:rr,module:"storage",capability:rr,requirement:{kind:"all",permissions:["storage"]},risk:"medium"},{method:sn,module:"network",capability:sn,requirement:{kind:"all",permissions:["network"]},risk:"high"},{method:an,module:"network",capability:an,requirement:{kind:"all",permissions:["network","filesystem"]},risk:"high"},{method:cn,module:"network",capability:cn,requirement:{kind:"all",permissions:["network","filesystem"]},risk:"high"},{method:dn,module:"files",capability:dn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:un,module:"files",capability:un,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:ln,module:"files",capability:ln,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:nr,module:"file",capability:nr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:ir,module:"file",capability:ir,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:fn,module:"file",capability:fn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:or,module:"file",capability:or,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:hn,module:"file",capability:hn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:sr,module:"file",capability:sr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:mn,module:"file",capability:mn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:ar,module:"file",capability:ar,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:gn,module:"directory",capability:gn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:cr,module:"directory",capability:cr,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:pn,module:"directory",capability:pn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:yn,module:"directory",capability:yn,requirement:{kind:"all",permissions:["filesystem"]},risk:"high"},{method:En,module:"ui",capability:En,requirement:{kind:"none"},risk:"low"},{method:wn,module:"ui",capability:wn,requirement:{kind:"none"},risk:"low"},{method:In,module:"ui",capability:In,requirement:{kind:"none"},risk:"low"},{method:Mn,module:"device",capability:Mn,requirement:{kind:"none"},risk:"low"},{method:Nn,module:"device",capability:Nn,requirement:{kind:"all",permissions:["clipboard"]},risk:"medium"},{method:An,module:"device",capability:An,requirement:{kind:"all",permissions:["appProtocol"]},risk:"high"},{method:Dn,module:"navigation",capability:Dn,requirement:{kind:"none"},risk:"medium"},{method:Tn,module:"navigation",capability:Tn,requirement:{kind:"none"},risk:"medium"},{method:Sn,module:"navigation",capability:Sn,requirement:{kind:"none"},risk:"medium"},{method:xe,module:"cloud",capability:xe,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:Ne,module:"cloud",capability:Ne,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},{method:Ye,module:"cloud",capability:Ye,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:st,module:"cloud",capability:st,requirement:{kind:"all",permissions:["leaderboard"]},risk:"medium"},{method:ve,module:"cloud",capability:ve,requirement:{kind:"all",permissions:["leaderboard"]},risk:"low"},...[Rn,kn,xn,jn,zn,Un,Hn,Fn,Vn,Bn,Qn,Yn].map(e=>({method:e,module:"companion",capability:e,requirement:{kind:"all",permissions:["companion"]},risk:"high"}))],Ze="heybox:miniprogram",ic=2,fu="hb_mini_bridge_nonce",oc="sdk.handshake",Dr="runtime.location.probe",hu="sdk.location.report",mu="sdk.csp.violation",sc="operation.progress",gu="companion.session.output",pu="companion.session.exit",yu="companion.session.ownershipLost";function Eu(e){return!Je(e)||e.namespace!==Ze||e.version!==1&&e.version!==2||!de(e.nonce)?!1:e.type==="handshake"?de(e.id)&&e.method===oc&&e.error===void 0&&Nu(e.payload):e.type==="request"?de(e.id)&&de(e.method)&&e.error===void 0:e.type==="response"?de(e.id)&&(e.method===void 0||de(e.method))&&(e.error===void 0||Au(e.error)):e.type==="event"?!de(e.method)||e.error!==void 0?!1:e.method===sc?e.version===2&&de(e.id)&&Mu(e.payload):e.id===void 0||de(e.id):e.type==="cancel"?e.version===2&&de(e.id)&&e.method===void 0&&e.payload===void 0&&e.error===void 0:!1}function Mo(e){return typeof e!="string"||!e||e.startsWith("/")||e.endsWith("/")||/[\\\u0000-\u001f\u007f]/.test(e)?!1:e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function ac(e){return Je(e)?e.kind==="sandbox"?ze(e,["kind"]):e.kind==="directory"&&de(e.handleId)&&ze(e,["kind","handleId"]):!1}function Gn(e){return!Je(e)||e.kind!=="file"?!1:de(e.handleId)?ze(e,["kind","handleId"]):ac(e.root)&&Mo(e.relativePath)&&ze(e,["kind","root","relativePath"])}function cc(e){return!Je(e)||e.kind!=="directory"?!1:de(e.handleId)?ze(e,["kind","handleId"]):ac(e.root)&&(e.relativePath==="."||Mo(e.relativePath))&&ze(e,["kind","root","relativePath"])}function dc(e){return e instanceof Uint8Array&&e.buffer instanceof ArrayBuffer}function wu(e){return!Je(e)||!Mt(e.loaded)||typeof e.lengthComputable!="boolean"||!ze(e,["loaded","total","lengthComputable"])?!1:e.lengthComputable?Mt(e.total)&&e.loaded<=e.total:e.total===void 0}function Iu(e){return Je(e)?e.phase==="downloading"?Mt(e.loaded)&&(e.total===void 0||Mt(e.total)&&e.loaded<=e.total)&&ze(e,["phase","loaded","total"]):e.phase!=="verifying"&&e.phase!=="extracting"?!1:Mt(e.processed)&&Mt(e.total)&&e.processed<=e.total&&ze(e,["phase","processed","total"]):!1}function Mu(e){return wu(e)||Iu(e)}function Nu(e){return Je(e)&&de(e.href)&&typeof e.userAgent=="string"&&de(e.sdkVersion)}function Au(e){return Je(e)&&de(e.code)&&typeof e.message=="string"}function Mt(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function de(e){return typeof e=="string"&&e.length>0}function ze(e,t){const r=new Set(t);return Object.keys(e).every(n=>r.has(n))}function Je(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const dr=["userInfo","steamLibrary","share","storage","cloud_storage","filesystem","clipboard","leaderboard","network","companion","appProtocol","workspaceCards"],uc=[{key:"userInfo",name:"用户信息",description:"登录小程序并读取当前用户的授权信息。",access:"declaration",risk:"medium",config:{},methods:["auth.login","user.getInfo"],conditions:["继续执行黑盒登录、用户授权和可信手势规则。"]},{key:"steamLibrary",name:"Steam 游戏库",description:"读取当前用户授权的 Steam 游戏库。",access:"declaration",risk:"high",config:{},methods:["user.getSteamGameList"],conditions:["继续执行账号绑定和数据可用性规则。"]},{key:"share",name:"分享",description:"使用小程序分享、分享菜单和截图能力。",access:"declaration",risk:"medium",config:{},methods:["share.copyLink","share.showShareMenu","share.screenshot"],conditions:["继续执行分享参数校验和 Host 支持检查。"]},{key:"storage",name:"键值存储",description:"读写按小程序隔离的简单键值数据。",access:"declaration",risk:"medium",config:{},methods:["storage.getStorage","storage.setStorage"],conditions:["仅用于简单键值存储,不包含文件系统。"]},{key:"filesystem",name:"文件系统",description:"访问小程序沙盒文件和用户选择的外部文件。",access:"declaration",risk:"high",config:{},methods:["network.download","network.upload","files.pickFiles","files.pickDirectory","files.saveFile","file.create","file.remove","file.exists","file.readText","file.writeText","file.readBytes","file.writeBytes","file.stat","directory.create","directory.remove","directory.exists","directory.list"],conditions:["外部文件继续要求有效的用户选择、会话句柄和匹配的读写模式。"]},{key:"clipboard",name:"剪贴板",description:"向系统剪贴板写入文本。",access:"declaration",risk:"medium",config:{},methods:["device.setClipboard"],conditions:["继续执行文本长度和 Host 支持限制。"]},{key:"leaderboard",name:"排行榜",description:"读写小程序云排行榜。",access:"declaration",risk:"medium",config:{},methods:["cloud.leaderboard.submit","cloud.leaderboard.getList","cloud.leaderboard.getCurrentUserEntry","cloud.leaderboard.deleteCurrentUserEntry","cloud.leaderboard.getInfo"],conditions:["排行榜必须已创建,用户和资源规则保持不变。"]},{key:"network",name:"网络",description:"通过 network 模块请求或下载外部资源。",access:"platform-approval",risk:"high",config:{useOfficialDomain:{type:"boolean",required:!1,default:!1,description:"是否申请访问小黑盒官方域名。"}},methods:["network.request","network.download","network.upload"],conditions:["声明后仍需平台批准,并继续执行网络安全策略。"]},{key:"companion",name:"桌面辅助应用",description:"下载、准备并运行随当前小程序版本发布的受管桌面程序。",access:"platform-approval",risk:"high",config:{},methods:["companion.getInfo","companion.getPreparationStatus","companion.prepare","companion.cancelPreparation","companion.getActiveSession","companion.launch","companion.session.write","companion.session.closeStdin","companion.session.terminate","companion.session.ackOutput","companion.openAttachment","companion.showNotification"],conditions:["声明后仍需平台批准,并继续执行可信用户手势、Host 能力和当前版本 Manifest 校验。"]},{key:"cloud_storage",name:"云端存储",description:"读写按小程序和当前登录用户隔离的云端键值数据。",access:"declaration",risk:"medium",config:{},methods:["cloud.storage.getItem","cloud.storage.setItem","cloud.storage.removeItem","cloud.storage.getKeys"],conditions:["云端存储按登录用户隔离并受容量配额限制。"]},{key:"appProtocol",name:"应用协议执行",description:"执行任意小黑盒客户端协议。",access:"platform-approval",risk:"high",config:{},methods:["device.executeProtocol"],conditions:["最高危险权限:批准后该入口可执行任意协议,并绕过其他 SDK 能力权限及专用授权流程。"]},{key:"workspaceCards",name:"工作区卡片",description:"在已绑定游戏的桌面工作区展示受审核卡片。",access:"platform-approval",risk:"high",config:{},methods:["workspaceCards.requestRefresh"],conditions:["需平台批准、Host 支持与有效执行租约;不隐式授予网络或存储权限。"]}];new Set(dr);const Du=new Set(dr);function Tu(e){return Du.has(e)}function Ae(e){if(!Tr(e)||e.schema_version!==1||!Array.isArray(e.entries))return{valid:!1,permissions:{}};if(e.revision!==void 0&&(typeof e.revision!="number"||!Number.isInteger(e.revision)||e.revision<0))return{valid:!1,permissions:{}};const t=new Set,r={};for(const n of e.entries){if(!Tr(n)||typeof n.key!="string"||!n.key.trim())return{valid:!1,permissions:{}};const i=n.key.trim(),o=i==="network.request"?"network":i;if(t.has(o)||n.status!=="enabled"&&n.status!=="disabled")return{valid:!1,permissions:{}};if(t.add(o),!!Tu(o)){if(o==="network"){const s=n.config;if(!Tr(s)||typeof s.useOfficialDomain!="boolean")return{valid:!1,permissions:{}};r[o]={key:o,status:n.status,config:{useOfficialDomain:s.useOfficialDomain}};continue}if(n.config!==null&&n.config!==void 0&&(!Tr(n.config)||Object.keys(n.config).length>0))return{valid:!1,permissions:{}};r[o]={key:o,status:n.status,config:{}}}}return{valid:!0,permissions:r}}function Tr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const xr=["network","companion","appProtocol"];function lc(e){if(!Pt(e,["schema_version","revision","entries"])||e.schema_version!==1||typeof e.revision!="number"||!Number.isSafeInteger(e.revision)||e.revision<0||!Array.isArray(e.entries)||e.entries.length>xr.length)return{valid:!1};const t=[],r=new Set;for(const n of e.entries){if(!Pt(n,["key","status","config"])||n.status!=="enabled")return{valid:!1};if(typeof n.key!="string"||r.has(n.key))return{valid:!1};if(r.add(n.key),n.key==="network"){if(!Pt(n.config,["useOfficialDomain"])||n.config.useOfficialDomain!==!1)return{valid:!1};t.push({key:"network",status:"enabled",config:{useOfficialDomain:!1}})}else if(n.key==="companion"){if(!Pt(n.config,[]))return{valid:!1};t.push({key:"companion",status:"enabled",config:{}})}else if(n.key==="appProtocol"){if(!Pt(n.config,[]))return{valid:!1};t.push({key:"appProtocol",status:"enabled",config:{}})}else return{valid:!1}}return t.sort((n,i)=>xr.indexOf(n.key)-xr.indexOf(i.key)),{valid:!0,grant:{schema_version:1,revision:e.revision,entries:t}}}function Su(e){if(!Number.isSafeInteger(e.revision)||e.revision<0)throw new Error("本地调试权限 revision 必须是非负安全整数");const t=Ae(e.runtimePermissions),r=new Set(e.eligiblePermissionKeys??["network","appProtocol"]),n=[];for(const i of xr)!r.has(i)||e.declaredPermissions[i]?.enabled!==!0||t.valid&&t.permissions[i]?.status==="enabled"||n.push(i==="network"?{key:i,status:"enabled",config:{useOfficialDomain:!1}}:{key:i,status:"enabled",config:{}});return{schema_version:1,revision:e.revision,entries:n}}function No(e){const t=Ae(e.runtimePermissions),r=lc(e.localDevGrant),n=t.valid?t.permissions:{};for(const s of dr)e.declaredPermissions[s]?.enabled!==!0?delete n[s]:uc.some(a=>a.key===s&&a.access==="declaration")?n[s]={key:s,status:"enabled",config:{}}:s==="network"&&n.network&&(n.network.config.useOfficialDomain=n.network.status==="enabled"&&n.network.config.useOfficialDomain===!0&&e.declaredPermissions.network?.useOfficialDomain===!0);const i=[];if(r.valid)for(const s of r.grant.entries)e.declaredPermissions[s.key]?.enabled!==!0||n[s.key]?.status==="enabled"||(n[s.key]=s,i.push(s.key));const o=fc(e.runtimePermissions)&&typeof e.runtimePermissions.revision=="number"&&Number.isSafeInteger(e.runtimePermissions.revision)&&e.runtimePermissions.revision>=0?e.runtimePermissions.revision:void 0;return{runtimePermissions:{schema_version:1,...o===void 0?{}:{revision:o},entries:dr.flatMap(s=>n[s]?[n[s]]:[])},temporaryPermissionKeys:i,grantValid:r.valid}}function fc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pt(e,t){return fc(e)&&Object.keys(e).length===t.length&&t.every(r=>Object.prototype.hasOwnProperty.call(e,r))}const Tt=["identity","profile","steam_account"],bu=/^[a-z][a-z0-9-]{0,31}$/,hc=["COMPANION_UNSUPPORTED","COMPANION_PREVIEW_UNSUPPORTED","COMPANION_NOT_DECLARED","COMPANION_TARGET_UNSUPPORTED","COMPANION_NOT_PREPARED","COMPANION_PREPARATION_CANCELLED","COMPANION_DOWNLOAD_FAILED","COMPANION_DESCRIPTOR_UNAVAILABLE","COMPANION_ARCHIVE_INVALID","COMPANION_INTEGRITY_FAILED","COMPANION_ENTRYPOINT_INVALID","COMPANION_USER_CANCELLED","COMPANION_ELEVATION_DENIED","COMPANION_OS_BLOCKED","COMPANION_LAUNCH_FAILED","COMPANION_SESSION_VERSION_MISMATCH","COMPANION_SESSION_OWNERSHIP_LOST","COMPANION_SESSION_EXITED","COMPANION_PIPE_CLOSED","COMPANION_OUTPUT_LIMIT","COMPANION_PROCESS_CRASHED","COMPANION_ATTACHMENT_NOT_FOUND","COMPANION_NOTIFICATION_UNAVAILABLE","COMPANION_TERMINATE_FAILED"];Ge.map(e=>e.method);function Ou(e){const t=Ae(e);return(r,n)=>{if(r.kind==="none")return{allowed:!0};for(const i of r.permissions){const o=t.valid?t.permissions[i]:void 0;if(!o)return{allowed:!1,code:"PERMISSION_NOT_IN_SNAPSHOT",message:`当前运行快照不包含权限: ${i};正式入口需发布包含该声明的新版本,开发入口请重新打开调试`,data:{permission:i,method:n}};if(o.status!=="enabled")return{allowed:!1,code:"PERMISSION_DENIED",message:`小程序权限未启用: ${i}`,data:{permission:i,method:n}}}return{allowed:!0}}}function _u(e){const t=Ae(e),r=Object.values(t.permissions).map(i=>Object.freeze({...i,config:Object.freeze({...i.config})})),n=e&&typeof e=="object"&&"revision"in e?e.revision:void 0;return Object.freeze({schema_version:1,...typeof n=="number"?{revision:n}:{},entries:Object.freeze(r)})}function $(e,t,r){return{code:e,message:t,data:r}}function Ao(e){return Lu(e)?{code:e.code,message:e.message,data:e.data}:e instanceof Error?$("RUNTIME_ERROR",e.message):$("UNKNOWN_ERROR","小程序运行时异常",e)}function Lu(e){return!!e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"}function vu(){try{return{activeElement:globalThis.document?.activeElement??null,userActivation:globalThis.navigator?.userActivation}}catch{return{activeElement:null}}}const Cu=1e3;function Pu(e,t=vu()){if(t.userActivation)return t.userActivation.isActive===!0;const r=t.lastUserInteractionAt,n=t.now??Date.now();return t.activeElement===e&&r!==void 0&&n>=r&&n-r<=Cu}const Ru="runtime.gate.probe",mc=new Set(Ge.map(e=>e.method));class ku{iframe;nonce;onReady;onHandshake;onDuplicateHandshake;onInternalEvent;onResponsePosted;handleMessage;handleUserInteraction;dispatcher;environmentInfo;started=!1;destroyed=!1;handshaken=!1;bridgeVersion=ic;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:Ze,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:"unload",payload:{timestamp:Date.now()}})}catch{}finally{window.removeEventListener("message",this.handleMessage);for(const r of["pointerdown","touchend","mousedown","keydown"])window.removeEventListener(r,this.handleUserInteraction,!0);this.lastUserInteractionAt=void 0;for(const r of this.operations.values())r.abort("bridge destroyed");this.operations.clear()}}postEvent(t,r){this.destroyed||this.postMessage({namespace:Ze,version:this.bridgeVersion,nonce:this.nonce,type:"event",method:t,payload:r})}postInternalRequest(t,r,n){this.destroyed||this.postMessage({namespace:Ze,version:this.bridgeVersion,nonce:this.nonce,type:"request",id:r,method:t,payload:n})}postProgress(t,r){this.bridgeVersion===2&&this.postMessage({namespace:Ze,version:2,nonce:this.nonce,type:"event",id:t,method:sc,payload:r})}onMessage(t){if(!this.started||!this.isTrustedMiniProgramMessage(t))return;const r=t.data;if(r.type==="handshake"){this.handleHandshake(r,t.origin);return}if(r.type==="request"){let n=!1;try{n=Pu(this.iframe,{activeElement:document.activeElement,userActivation:navigator.userActivation,lastUserInteractionAt:this.lastUserInteractionAt,now:Date.now()})}catch{n=!1}this.handleRequest(r,n);return}if(r.type==="cancel"&&this.handshaken&&r.id){this.operations.get(r.id)?.abort();return}r.type==="event"&&this.handshaken&&this.onInternalEvent?.(r)}onUserInteraction(t){const r=typeof t.composedPath=="function"?t.composedPath():[];(t.target===this.iframe||r.includes(this.iframe))&&(this.lastUserInteractionAt=Date.now())}isTrustedMiniProgramMessage(t){return t.source===this.iframe.contentWindow&&Eu(t.data)&&(!this.handshaken||t.data.version===this.bridgeVersion)&&((this.handshaken?this.bridgeVersion:t.data.version)===1||this.targetOrigin==="*"||t.origin===this.targetOrigin)&&t.data.nonce===this.nonce}handleHandshake(t,r){const n=t.payload,i=t.version,o=!this.handshaken;if(o){if(this.onHandshake?.(n)===!1)return;this.bridgeVersion=i,i===1&&this.targetOrigin!=="*"&&r&&r!=="null"&&(this.targetOrigin=r),this.handshaken=!0,this.postEvent("launch",{timestamp:Date.now(),url:this.iframe.src})}this.environmentInfo&&t.id&&this.postMessage({namespace:Ze,version:this.bridgeVersion,nonce:this.nonce,type:"response",id:t.id,method:oc,payload:{environment:this.environmentInfo}}),this.postEvent("ready",{timestamp:Date.now()}),o?this.onReady?.(n):this.onDuplicateHandshake?.()}async handleRequest(t,r){if(!t.id||!t.method)return;if(!this.handshaken&&t.method===Ru){this.postResponse(t,{ready:!0});return}if(!this.handshaken){this.postResponse(t,void 0,$("BRIDGE_NOT_READY","小程序 SDK 尚未完成握手"));return}if(!mc.has(t.method)){this.postResponse(t,void 0,$("METHOD_NOT_FOUND",`未开放小程序能力: ${t.method}`));return}if(this.operations.has(t.id)){this.postResponse(t,void 0,$("INVALID_PARAMS","bridge request id 重复"));return}const n=new AbortController;this.operations.set(t.id,n);try{const i=await this.dispatcher.dispatch(t.method,t.payload,{postEvent:this.postEvent.bind(this),postProgress:o=>{this.operations.get(t.id)===n&&this.postProgress(t.id,o)},signal:n.signal,trustedUserGesture:r});if(i.status==="dropped"||!this.started||this.operations.get(t.id)!==n)return;this.postResponse(t,i.value)}catch(i){if(!this.started||this.operations.get(t.id)!==n)return;const o=Ao(i);this.postResponse(t,void 0,o),this.postEvent("error",o)}finally{this.operations.get(t.id)===n&&(this.operations.delete(t.id),n.signal.aborted||n.abort("operation terminal"))}}postResponse(t,r,n){if(!(!this.postMessage({namespace:Ze,version:t.version,nonce:this.nonce,type:"response",id:t.id,method:t.method,payload:r,error:n})||!xu(t.method)))try{this.onResponsePosted?.({method:t.method,outcome:n?"error":"success",...n?{errorCode:n.code}:{}})}catch{}}postMessage(t){const r=this.iframe.contentWindow;return r?(r.postMessage(t,this.targetOrigin),!0):!1}}function xu(e){return typeof e=="string"&&mc.has(e)}const gc="METHOD_FORBIDDEN";function De(e){const t=new Error(`小程序能力已禁用: ${e}`);return t.name="MethodForbiddenError",t.code=gc,t}class se extends Error{code="HOST_REQUEST_UNSUPPORTED";constructor(t="当前 Host 不支持该请求形状",r){super(t),this.name="HostRequestUnsupportedError",r&&"cause"in r&&Object.defineProperty(this,"cause",{configurable:!0,enumerable:!1,value:r.cause}),Object.setPrototypeOf(this,new.target.prototype)}}const ju=/^[A-Za-z0-9_-]{1,64}$/,$o=1e3;function zu(e){return ju.test(e)?e:Vu(e)}function Uu(e,t){return`hb_miniprogram_${e}_${t}`}function Hu(e){return`hb_miniprogram_keys_${e}`}function Fu(e){if(!e)return[];try{const t=JSON.parse(e);return Array.isArray(t)?t.filter(r=>typeof r=="string"):[]}catch{return[]}}function Vu(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(36)}const Ko={[$r]:["workspaceCards.requestRefresh"],[Kr]:["account.getCurrentUserId","account.ensureAuthenticated","account.onChange","network.request"],[Jr]:["account.getCurrentUserId","account.onChange","network.request"],[Zr]:["account.getCurrentUserId","account.onChange","network.request"],[Xr]:["account.getCurrentUserId","account.onChange","network.request"],[en]:["presentation.setClipboard"],[tn]:["presentation.showShareMenu"],[rn]:["presentation.getViewportMetrics","presentation.captureAndShare"],[ot]:["presentation.applyOrientation"],[nn]:["presentation.getViewportMetrics","presentation.getNavigationBarHeight"],[on]:["presentation.setNavigationBarStyle"],[tr]:["storage.getRaw"],[rr]:["storage.setRaw"],[sn]:["network.request"],[an]:["network.stream","files.transfer","files.access"],[cn]:["network.upload","files.access"],[dn]:["files.external"],[un]:["files.external"],[ln]:["files.save"],[nr]:["files.access"],[ir]:["files.removeFile"],[fn]:["files.access"],[or]:["files.access"],[hn]:["files.access"],[sr]:["files.access"],[mn]:["files.access"],[ar]:["files.access"],[gn]:["files.access"],[cr]:["files.removeDirectory"],[pn]:["files.access"],[yn]:["files.access"],[En]:["presentation.showToast"],[wn]:["presentation.showLoading"],[In]:["presentation.hideLoading"],[Mn]:["presentation.vibrate"],[Nn]:["presentation.setClipboard"],[An]:["protocol.invoke"],[Dn]:["presentation.close"],[Tn]:["presentation.reload"],[Sn]:["presentation.openAppPage"],[xe]:["account.getCurrentUserId","account.onChange","network.request"],[Ne]:["account.onChange","network.request"],[Ye]:["account.getCurrentUserId","account.onChange","network.request"],[st]:["account.getCurrentUserId","account.onChange","network.request"],[ve]:["account.onChange","network.request"],[Rn]:["companion.getInfo"],[kn]:["companion.getPreparationStatus"],[xn]:["companion.getInfo","companion.getPreparationStatus","companion.prepare"],[jn]:["companion.cancelPreparation"],[zn]:["companion.getActiveSession"],[Un]:["companion.getInfo","companion.launch"],[Hn]:["companion.session.write"],[Fn]:["companion.session.closeStdin"],[Vn]:["companion.session.terminate"],[Bn]:["companion.session.ackOutput"],[Qn]:["companion.openAttachment"],[Yn]:["companion.showNotification"]};function Bu(e,t){if(t[e]!==!0)throw De(e)}const Qu=32*1024*1024,Yu=/^application\/(?:[a-z0-9!#$&^_.+-]+\+)?json(?:\s*;|$)/i;function Gu(e){if(e.mode==="request-only")return{network:{request:(n,i)=>e.request(n,i)}};if(e.mode==="override-request")return{network:{request:(n,i)=>e.request(n,i)},...e.stream===void 0?{}:{stream:e.stream}};const{consume:t,stream:r}=e;return{stream:r,network:{async request(n,i){const o=await r.open(n,i);let s;try{const a=await t(o.body,{maxBytes:Qu},i);return qu(o,a)}catch(a){throw s=a,a}finally{try{await r.release(o.body)}catch(a){if(s===void 0)throw a}}}}}}function qu(e,t){const r=Object.fromEntries(Object.entries(e.headers).map(([n,i])=>[n,i.join(", ")]));return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:r,data:Wu(t,Ku(e,"content-type"))}}function Wu(e,t){$u(t);let r;try{r=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch(n){throw new se("Host network response 不是合法 UTF-8 文本",{cause:n})}if(r.charCodeAt(0)===65279&&(r=r.slice(1)),!t||!Yu.test(t)||r==="")return r;try{return JSON.parse(r)}catch{return r}}function $u(e){if(!e)return;const t=/(?:^|;)\s*charset\s*=\s*["']?([^;"'\s]+)/i.exec(e)?.[1];if(t&&!/^utf-?8$/i.test(t))throw new se(`Host network response 不支持 charset=${t}`)}function Ku(e,t){return Object.entries(e.headers).find(([r])=>r.toLowerCase()===t)?.[1]?.[0]}function k(e){return typeof e=="function"}function Jo(e){return(...t)=>{throw De(e)}}function ne(e){return async(...t)=>{throw De(e)}}const Ju=(e,t)=>{},Zu=()=>()=>{};function Xu(e){const t={request:k(e.network?.request)?e.network.request.bind(e.network):ne("network.request")},r={getCurrentUserId:k(e.account?.getCurrentUserId)?e.account.getCurrentUserId.bind(e.account):ne("account.getCurrentUserId"),ensureAuthenticated:k(e.account?.ensureAuthenticated)?e.account.ensureAuthenticated.bind(e.account):ne("account.ensureAuthenticated"),onChange:k(e.account?.onChange)?e.account.onChange.bind(e.account):Zu},n={getRaw:k(e.storage?.getRaw)?e.storage.getRaw.bind(e.storage):ne("storage.getRaw"),setRaw:k(e.storage?.setRaw)?e.storage.setRaw.bind(e.storage):ne("storage.setRaw")},i={...k(e.presentation?.applyOrientation)?{applyOrientation:e.presentation.applyOrientation.bind(e.presentation)}:{},...k(e.presentation?.onViewportChange)?{onViewportChange:e.presentation.onViewportChange.bind(e.presentation)}:{},close:k(e.presentation?.close)?e.presentation.close.bind(e.presentation):ne("presentation.close"),reload:k(e.presentation?.reload)?e.presentation.reload.bind(e.presentation):ne("presentation.reload"),openAppPage:k(e.presentation?.openAppPage)?e.presentation.openAppPage.bind(e.presentation):ne("presentation.openAppPage"),openWindow:k(e.presentation?.openWindow)?e.presentation.openWindow.bind(e.presentation):ne("presentation.openWindow"),getViewportMetrics:k(e.presentation?.getViewportMetrics)?e.presentation.getViewportMetrics.bind(e.presentation):Jo("presentation.getViewportMetrics"),getNavigationBarHeight:k(e.presentation?.getNavigationBarHeight)?e.presentation.getNavigationBarHeight.bind(e.presentation):Jo("presentation.getNavigationBarHeight"),setNavigationBarStyle:k(e.presentation?.setNavigationBarStyle)?e.presentation.setNavigationBarStyle.bind(e.presentation):ne("presentation.setNavigationBarStyle"),showShareMenu:k(e.presentation?.showShareMenu)?e.presentation.showShareMenu.bind(e.presentation):ne("presentation.showShareMenu"),setScreenshotChromeHidden:k(e.presentation?.setScreenshotChromeHidden)?e.presentation.setScreenshotChromeHidden.bind(e.presentation):Ju,captureAndShare:k(e.presentation?.captureAndShare)?e.presentation.captureAndShare.bind(e.presentation):ne("presentation.captureAndShare"),showToast:k(e.presentation?.showToast)?e.presentation.showToast.bind(e.presentation):ne("presentation.showToast"),showLoading:k(e.presentation?.showLoading)?e.presentation.showLoading.bind(e.presentation):ne("presentation.showLoading"),hideLoading:k(e.presentation?.hideLoading)?e.presentation.hideLoading.bind(e.presentation):ne("presentation.hideLoading"),vibrate:k(e.presentation?.vibrate)?e.presentation.vibrate.bind(e.presentation):ne("presentation.vibrate"),setClipboard:k(e.presentation?.setClipboard)?e.presentation.setClipboard.bind(e.presentation):ne("presentation.setClipboard")},o=k(e.storageDiagnostics?.listRaw)?{listRaw:e.storageDiagnostics.listRaw.bind(e.storageDiagnostics)}:void 0,s=Object.fromEntries(["getInfo","getPreparationStatus","prepare","cancelPreparation","getActiveSession","launch","write","closeStdin","terminate","ackOutput","openAttachment","showNotification"].map(c=>[c,k(e.companion?.[c])?e.companion[c].bind(e.companion):ne(`companion.${c}`)]));k(e.companion?.onSessionEvent)&&(s.onSessionEvent=e.companion.onSessionEvent.bind(e.companion));const a={invoke:k(e.protocol?.invoke)?e.protocol.invoke.bind(e.protocol):ne("protocol.invoke")};return{network:t,account:r,storage:n,presentation:i,companion:s,protocol:a,...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 el(e){const t=tl(e.files?.sandbox),r=k(e.picker?.pickFiles)&&k(e.picker?.pickDirectory),n=k(e.picker?.saveFile),i=t||r||n||k(e.companion?.openAttachment),o=t?e.files?.sandbox.file(".hb-remove-capability"):void 0;return{"account.getCurrentUserId":k(e.account?.getCurrentUserId),"account.ensureAuthenticated":k(e.account?.ensureAuthenticated),"account.onChange":k(e.account?.onChange),"network.request":k(e.network?.request),"network.stream":k(e.transfer?.network.open)&&k(e.transfer?.network.release),"network.upload":k(e.transfer?.upload?.upload),"files.sandbox":t,"files.external":r,"files.save":n,"files.access":i,"files.removeFile":k(o?.remove),"files.removeDirectory":k(e.files?.sandbox.remove),"files.transfer":k(e.transfer?.files.writeResource),"storage.getRaw":k(e.storage?.getRaw),"storage.setRaw":k(e.storage?.setRaw),"presentation.close":k(e.presentation?.close),"presentation.reload":k(e.presentation?.reload),"presentation.openAppPage":k(e.presentation?.openAppPage),"presentation.applyOrientation":k(e.presentation?.applyOrientation),"presentation.openWindow":k(e.presentation?.openWindow),"presentation.getViewportMetrics":k(e.presentation?.getViewportMetrics),"presentation.getNavigationBarHeight":k(e.presentation?.getNavigationBarHeight),"presentation.setNavigationBarStyle":k(e.presentation?.setNavigationBarStyle),"presentation.showShareMenu":k(e.presentation?.showShareMenu),"presentation.setScreenshotChromeHidden":!0,"presentation.captureAndShare":k(e.presentation?.captureAndShare),"presentation.showToast":k(e.presentation?.showToast),"presentation.showLoading":k(e.presentation?.showLoading),"presentation.hideLoading":k(e.presentation?.hideLoading),"presentation.vibrate":k(e.presentation?.vibrate),"presentation.setClipboard":k(e.presentation?.setClipboard),"workspaceCards.requestRefresh":!1,"companion.getInfo":k(e.companion?.getInfo),"companion.getPreparationStatus":k(e.companion?.getPreparationStatus),"companion.prepare":k(e.companion?.prepare),"companion.cancelPreparation":k(e.companion?.cancelPreparation),"companion.getActiveSession":k(e.companion?.getActiveSession),"companion.launch":k(e.companion?.launch),"companion.session.write":k(e.companion?.write),"companion.session.closeStdin":k(e.companion?.closeStdin),"companion.session.terminate":k(e.companion?.terminate),"companion.session.ackOutput":k(e.companion?.ackOutput),"companion.openAttachment":k(e.companion?.openAttachment),"companion.showNotification":k(e.companion?.showNotification),"protocol.invoke":k(e.protocol?.invoke)}}function tl(e){if(!e||typeof e!="object")return!1;const t=e;return t.kind==="directory"&&(t.mode==="read"||t.mode==="readwrite")&&k(t.file)&&k(t.directory)&&k(t.create)&&k(t.stat)&&k(t.list)}function Zo(e,t){return t?.[e]!==!1}function rl(e){return e==="network.download"||e.startsWith("files.")||e.startsWith("file.")||e.startsWith("directory.")||e.startsWith("companion.")}function pc(e,t={}){const r={};for(const n of Object.keys(Ko)){const o=Ko[n].every(a=>e[a]),s=!rl(n)||!!t.miniProgramDetail?.miniProgramId.trim();r[n]=Zo(n,t.callerCapabilities)&&Zo(n,t.hostCapabilities)&&o&&s}return r}function yc(e={},t={}){const r=el(e),n=pc(r,t);return{ports:Xu(e),primitiveAvailability:r,availablePrimitives:r,effectiveCapabilities:n}}function at(e,t){if(!t||t===e.signal)return e;const r=typeof AbortSignal.any=="function"?AbortSignal.any([e.signal,t]):nl(e.signal,t);return{...e,signal:r}}function nl(e,t){const r=new AbortController,n=()=>{e.removeEventListener("abort",o),t.removeEventListener("abort",s)},i=a=>{r.signal.aborted||(n(),r.abort(a.reason))},o=()=>i(e),s=()=>i(t);return e.aborted?i(e):t.aborted?i(t):(e.addEventListener("abort",o,{once:!0}),t.addEventListener("abort",s,{once:!0})),r.signal}function il(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 ol=4,sl=["xiaoheihe.cn","max-c.com","debugmode.cn","maxjia.com"],al=new Set(["connection","content-length","host","keep-alive","proxy-connection","te","trailer","transfer-encoding","upgrade"]),cl=["/user_miniprogram/runtime/auth","/user_miniprogram/openapi/v1"],dl=["/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 ul(e,t){const r=hl(e);return r===null||Xo(r,cl)?!0:t&&Xo(r,dl)}function ll(e){const t=e.hostname.toLowerCase().replace(/\.$/,"");return sl.some(r=>t===r||t.endsWith(`.${r}`))}function fl(e){const t=e.trim().toLowerCase();return al.has(t)||/^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(t)}function hl(e){let t=e;for(let r=0;r<ol;r+=1){let n;try{n=decodeURIComponent(t)}catch{return null}if(n===t)return es(t);t=n}try{if(decodeURIComponent(t)!==t)return null}catch{return null}return es(t)}function Xo(e,t){return t.some(r=>e===r||e.startsWith(`${r}/`))}function es(e){const t=[];for(const r of e.replace(/\\/g,"/").split("/"))!r||r==="."||(r===".."?t.pop():t.push(r));return`/${t.join("/")}`}function lt(){const e=new Error("Runtime cache read cancelled");return e.name="AbortError",e}function ts(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function Ec(e={}){const t=e.now??Date.now,r=new WeakMap,n=new Map,i=new Set,o=new Map,s=new Set,a=new Set;let c=!1;function d(M,S){try{e.onEvent&&Promise.resolve(e.onEvent({namespace:M,type:S})).catch(()=>{})}catch{}}function l(M){const S=r.get(M);if(!S)throw new Error("Unknown runtime cache scope");return S}function h(M,S){return M.flatMap((I,_)=>{const A=JSON.stringify(M.slice(0,_+1));return[JSON.stringify([A]),JSON.stringify([A,S])]})}function u(M,S){return JSON.stringify(h(M,S).map(I=>n.get(I)??0))}async function g(M,S){const I=l(M),_=JSON.stringify([JSON.stringify(I),...S?[S]:[]]),A=(n.get(_)??0)+1;n.set(_,A),i.add(_);for(const v of a)v(I,S);if(!e.store){i.delete(_),d(S??"*","invalidation");return}try{await e.store.invalidate(I,S)}catch(v){throw d(S??"*","storage_error"),v}n.get(_)===A&&i.delete(_),d(S??"*","invalidation")}function T(M){if(c)throw new Error("Runtime cache manager disposed");const S=o.get(M.namespace);if(S){if(S.sourceCodec!==M.codec||S.definition.codec.version!==M.codec.version||JSON.stringify(S.definition.policy)!==JSON.stringify(M.policy))throw new Error("Conflicting runtime cache namespace");return S.cache}if(!M.namespace||!M.codec.version)throw new Error("Invalid runtime cache definition");const I=Object.freeze({...M.policy}),_=Object.freeze({version:M.codec.version,encode:M.codec.encode.bind(M.codec),decode:M.codec.decode.bind(M.codec),validate:M.codec.validate.bind(M.codec),clone:M.codec.clone.bind(M.codec)}),A=M.namespace;for(const O of[I.ttlMs,I.memoryMaxEntries,I.diskMaxEntries,I.diskMaxBytes,I.maxEntryBytes])if(!Number.isFinite(O)||O<0)throw new Error("Invalid runtime cache policy");const v=new Map,U=new Map,L=new Map;let N=!1;function f(O,C,b){if(c||N||O.aborted||u(C,A)!==b)throw lt()}function p(O){return I.ttlMs>0&&I.persistence==="memory-and-disk"&&!!e.store&&!h(O,A).some(C=>i.has(C))}function m(O,C,b){const x=t();return O.envelopeVersion===1&&JSON.stringify(O.address)===JSON.stringify(C)&&ts(O.revisions,b)&&O.payload.byteLength<=I.maxEntryBytes&&Number.isFinite(O.cachedAt)&&Number.isFinite(O.expiresAt)&&O.cachedAt<=x&&O.cachedAt>=0&&O.expiresAt>O.cachedAt&&Math.min(O.expiresAt,O.cachedAt+I.ttlMs)>x}function E(O,C,b,x,j){if(!(I.ttlMs<=0||I.memoryMaxEntries<1)){for(const[z,B]of v)Math.min(B.entry.expiresAt,B.entry.cachedAt+I.ttlMs)<=t()&&v.delete(z);for(v.delete(O);v.size>=Math.floor(I.memoryMaxEntries);){const z=v.keys().next();if(z.done)break;v.delete(z.value)}v.set(O,{entry:C,value:b,epoch:x,persistent:j})}}async function w(O,C,b,x){const j={namespace:A,codecVersion:_.version,scopeIds:C,key:O.key},z=JSON.stringify(j);let B=[],Q=p(C);if(Q)try{B=await e.store.readRevisions(C,A)}catch{Q=!1,d(A,"storage_error")}f(x.signal,C,b);async function G(){if(!Q)return!0;try{return ts(B,await e.store.readRevisions(C,A))}catch{return Q=!1,d(A,"storage_error"),!1}}const te=v.get(z);if(I.ttlMs>0&&te&&te.epoch===b&&m(te.entry,j,B)&&te.persistent===Q&&await G())return f(x.signal,C,b),d(A,"memory_hit"),te.value;if(v.delete(z),Q){let q,fe;try{q=await e.store.read(j,I.maxEntryBytes),q&&m(q,j,B)?fe=_.decode(q.payload):q=void 0}catch{q=void 0,d(A,"storage_error")}if(f(x.signal,C,b),q&&await G())return f(x.signal,C,b),E(z,q,fe,b,!0),d(A,"disk_hit"),fe}d(A,"miss");const X=_.validate(await O.load(x.signal));f(x.signal,C,b);const Z=_.clone(X);if(!await G()&&Q)throw lt();if(f(x.signal,C,b),I.ttlMs>0){const q=t();let fe;try{fe=_.encode(Z)}catch{return Z}const Go={envelopeVersion:1,address:j,revisions:Q?B:[],cachedAt:q,expiresAt:q+I.ttlMs,payload:fe};if(Q&&fe.byteLength<=I.maxEntryBytes){let ni=!0,qo=!1;try{ni=await e.store.publish(Go,I),qo=ni}catch{d(A,"storage_error")}if(f(x.signal,C,b),!ni)throw lt();qo&&d(A,"published")}f(x.signal,C,b),E(z,Go,Z,b,Q)}return Z}async function D(O){if(c||N||O.signal?.aborted)return Promise.reject(lt());const C=l(O.scope),b=u(C,A);let x;if(p(C)){const Q=new AbortController;L.set(Q,C);const G=()=>Q.abort();O.signal?.addEventListener("abort",G,{once:!0});let te=()=>{};try{x=await Promise.race([e.store.readRevisions(C,A),new Promise((X,Z)=>{const q=()=>Z(lt());Q.signal.addEventListener("abort",q,{once:!0}),te=()=>Q.signal.removeEventListener("abort",q)})])}catch{Q.signal.aborted||d(A,"storage_error")}finally{te(),L.delete(Q),O.signal?.removeEventListener("abort",G)}}f(O.signal??new AbortController().signal,C,b);const j=JSON.stringify([C,O.key,b,x]);let z=U.get(j);if(z?.controller.signal.aborted&&(z=void 0),!z){const Q=new AbortController;z={ids:C,controller:Q,waiters:0,promise:Promise.resolve(void 0)};const G=z;G.promise=w(O,C,b,Q).finally(()=>{U.get(j)===G&&U.delete(j)}),U.set(j,G)}const B=z;return B.waiters+=1,new Promise((Q,G)=>{let te=!1;function X(q){te||(te=!0,O.signal?.removeEventListener("abort",Z),B.controller.signal.removeEventListener("abort",Z),B.waiters-=1,B.waiters===0&&B.controller.abort(),q())}function Z(){X(()=>G(lt()))}O.signal?.addEventListener("abort",Z,{once:!0}),B.controller.signal.addEventListener("abort",Z,{once:!0}),B.promise.then(q=>X(()=>{try{f(O.signal??new AbortController().signal,C,b),Q(_.clone(q))}catch(fe){G(fe)}}),q=>X(()=>G(q)))})}function P(O,C){if(C&&C!==A)return;const b=x=>O.every((j,z)=>x[z]===j);for(const[x,j]of v)b(j.entry.address.scopeIds)&&v.delete(x);for(const[x,j]of U)b(j.ids)&&(j.controller.abort(),U.delete(x));for(const[x,j]of L)b(j)&&x.abort()}function F(){if(!N){N=!0,v.clear();for(const O of L.keys())O.abort();L.clear();for(const O of U.values())O.controller.abort();U.clear(),s.delete(F),a.delete(P),o.get(A)?.cache===R&&o.delete(A)}}const R={read:D,invalidateScope:O=>g(O,A),dispose:F};return s.add(F),a.add(P),o.set(A,{definition:{namespace:A,codec:_,policy:I},sourceCodec:M.codec,cache:R}),R}return{createScope(M,S){if(c||!M)throw new Error("Invalid runtime cache scope");const I=Object.freeze({});return r.set(I,[...S?l(S):[],M]),I},register:T,invalidateScope:M=>g(M),dispose(){if(!c){c=!0;for(const M of[...s])M();o.clear(),n.clear(),i.clear()}}}}function ml(e){const t=new TextEncoder,r=new TextDecoder("utf-8",{fatal:!0});return{version:e.version,validate:e.validate,encode:n=>t.encode(JSON.stringify(n)),decode:n=>e.validate(JSON.parse(r.decode(n))),clone:n=>e.validate(JSON.parse(JSON.stringify(n)))}}const gl=".hb-runtime-cache-v1",ii=64*1024,ft=1e3,pl=2048,Rt=32*1024*1024,yl=1024,jr=new TextEncoder,rs=new TextDecoder("utf-8",{fatal:!0});function kt(){return Object.assign(new Error("缓存文件操作已取消"),{name:"AbortError"})}async function Sr(e){const t=await globalThis.crypto.subtle.digest("SHA-256",jr.encode(JSON.stringify(e)));return Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("")}function Se(e,t){return JSON.stringify(e)===JSON.stringify(t)}function ns(){return Array.from(globalThis.crypto.getRandomValues(new Uint8Array(16)),e=>e.toString(16).padStart(2,"0")).join("")}function El(e){return!!e&&typeof e=="object"&&["METHOD_FORBIDDEN","NOT_SUPPORTED","UNSUPPORTED_OPERATION","ENOSYS","ENOTSUP","EOPNOTSUPP"].includes(String(e.code))}function is(e,t){if(t.some(r=>typeof e[r]!="function"))throw Object.assign(new Error("Host 文件原语不完整,关闭磁盘缓存"),{code:"METHOD_FORBIDDEN"})}function wl(e,t){const r=e.sandbox.directory(gl),n=r.directory("revisions"),i=r.directory("entries");for(const f of[r,n,i,i.directory("capability-check")])is(f,["directory","file","create","stat","list","remove"]),is(f.file("capability-check"),["create","stat","read","write","remove"]);let o=Promise.resolve(),s=!1;function a(f){if(El(f))throw s=!0,f}function c(){if(t.signal.aborted)throw kt();if(s)throw Object.assign(new Error("Host 不支持完整文件能力,磁盘缓存已关闭"),{code:"METHOD_FORBIDDEN"})}function d(f,p=t.signal){const m=o.then(()=>{if(p.aborted)throw kt();return c(),f()},()=>{if(p.aborted)throw kt();return c(),f()}).catch(D=>{throw a(D),D});if(o=m.catch(()=>{}),p.aborted)return Promise.reject(kt());let E=()=>{};const w=new Promise((D,P)=>{const F=()=>P(kt());p.addEventListener("abort",F,{once:!0}),E=()=>p.removeEventListener("abort",F)});return Promise.race([m,w]).finally(E)}async function l(){c(),await n.create({recursive:!0,exclusive:!1},t),await i.create({recursive:!0,exclusive:!1},t),c()}async function h(f,p){const m=n.file(`${await Sr([f,p??null])}.revision`);await g(m);let E=!1;try{await m.create({recursive:!1,exclusive:!0},t),E=!0}catch(P){a(P),c()}if(E){const P=ns();return await m.write(jr.encode(P),t),c(),P}const w=await m.stat(t);if(w.size<1||w.size>128)throw new Error("缓存 revision 文件损坏");const D=rs.decode(await m.read(t));if(!/^(?:[0-9a-f]{32}|[0-9a-f-]{36})$/.test(D))throw new Error("缓存 revision 文件损坏");return c(),D}async function u(f){const p=await f.list({limit:ft},t);if(p.length>=ft)throw new Error("缓存目录超过治理上限");return p}async function g(f){try{await f.stat(t);return}catch(m){if(!br(m))throw m}if((await u(n)).length>=ft-1)throw new Error("缓存 metadata 超过治理上限")}async function T(f,p){await l();const m=[];for(let E=0;E<f.length;E+=1){const w=f.slice(0,E+1);m.push(await h(w),await h(w,p))}return m}async function M(f){return r.directory(`entries/${await Sr([f.namespace,f.codecVersion,f.scopeIds])}`)}async function S(f){return(await M(f)).file(`${await Sr(f.key)}.cache`)}async function I(f,p){const m=await f.stat(t);if(m.size<5||m.size>p+ii+4)throw new Error("缓存条目超过大小限制");const E=await f.read(t);if(c(),E.length!==m.size)throw new Error("缓存条目读取不完整");const w=new DataView(E.buffer,E.byteOffset,E.byteLength).getUint32(0);if(w<1||w>ii||w+4>E.length)throw new Error("缓存信封损坏");const D=JSON.parse(rs.decode(E.subarray(4,w+4))),P=E.slice(w+4);if(D.envelopeVersion!==1||!D.address||!Array.isArray(D.address.scopeIds)||!D.address.scopeIds.every(F=>typeof F=="string")||typeof D.address.namespace!="string"||typeof D.address.codecVersion!="string"||typeof D.address.key!="string"||!Array.isArray(D.revisions)||D.revisions.length!==D.address.scopeIds.length*2||!D.revisions.every(F=>typeof F=="string"&&F.length>0)||!Number.isSafeInteger(D.cachedAt)||!Number.isSafeInteger(D.expiresAt)||D.cachedAt<0||D.expiresAt<=D.cachedAt||D.payloadBytes!==P.length||P.length>p)throw new Error("缓存信封损坏");return{envelopeVersion:1,address:D.address,revisions:D.revisions,cachedAt:D.cachedAt,expiresAt:D.expiresAt,payload:P}}async function _(f){if(!f.remove)throw new Error("Host 不支持缓存文件删除");await f.remove(t)}async function A(f){try{if((await f.file.stat(t)).size!==f.size)return!1;const p=await I(f.file,Rt);return!Se(p.address,f.entry.address)||!Se(p.revisions,f.entry.revisions)||p.cachedAt!==f.entry.cachedAt||p.expiresAt!==f.entry.expiresAt||!Se(await v(p.payload),await v(f.entry.payload))?!1:(await _(f.file),!0)}catch(p){if(br(p))return!0;throw p}}async function v(f){const p=await globalThis.crypto.subtle.digest("SHA-256",f);return Array.from(new Uint8Array(p),m=>m.toString(16).padStart(2,"0")).join("")}async function U(){const f=await u(n);let p=0;for(const D of f)if(D.kind==="file"&&(p+=(await D.stat(t)).size,p>Rt))throw new Error("缓存扫描超过字节上限");const m=[];let E=0,w=p;for(const D of await u(i)){if(D.kind!=="directory")throw new Error("缓存目录结构损坏");for(const P of await u(D)){if(P.kind!=="file"||++E>pl)throw new Error("缓存文件超过治理上限");const F=(await P.stat(t)).size;if(w+=F,w>Rt)throw new Error("缓存扫描超过字节上限");try{const R=await I(P,Rt);m.push({file:P,entry:R,size:(await P.stat(t)).size,bucketName:D.name})}catch(R){a(R),c(),br(R)||await _(P)}}}return{entries:m,metadataBytes:p}}async function L(){for(const f of await u(i))if(f.kind==="directory"&&f.remove&&(await u(f)).length===0)try{await f.remove({recursive:!1},t)}catch(p){a(p),c()}}function N(f){const{payload:p,...m}=f,E=jr.encode(JSON.stringify({...m,payloadBytes:p.length}));if(E.length>ii)throw new Error("缓存信封过大");const w=new Uint8Array(4+E.length+p.length);return new DataView(w.buffer).setUint32(0,E.length),w.set(E,4),w.set(p,E.length+4),w}return{readRevisions:(f,p)=>d(()=>T(f,p)),read:(f,p)=>d(async()=>{c();const m=await S(f);let E;try{E=await I(m,p)}catch(w){if(c(),br(w))return;throw w}if(!(!Se(E.address,f)||E.expiresAt<=Date.now())&&Se(E.revisions,await T(f.scopeIds,f.namespace)))return E}),publish:(f,p)=>d(async()=>{c();const{address:m}=f;if(!Se(f.revisions,await T(m.scopeIds,m.namespace)))return!1;const E=N(f);if(f.payload.length>p.maxEntryBytes||E.length>p.diskMaxBytes||p.diskMaxEntries<1)throw new Error("缓存条目超出容量预算");await l();const w=await M(m),D=await S(m),P=await U(),F=[],R=new Map;for(const b of P.entries){if(b.bucketName===w.name&&b.file.name===D.name)continue;const x=JSON.stringify([b.entry.address.scopeIds,b.entry.address.namespace]);let j=R.get(x);if(j||(j=await T(b.entry.address.scopeIds,b.entry.address.namespace),R.set(x,j)),b.entry.expiresAt<=Date.now()||!Se(b.entry.revisions,j)){if(!await A(b))throw new Error("缓存治理期间条目已变化")}else F.push(b)}F.sort((b,x)=>b.entry.cachedAt-x.entry.cachedAt);function O(){const b=F.filter(x=>x.bucketName===w.name);return F.length+1>yl||E.length+P.metadataBytes+F.reduce((x,j)=>x+j.size,0)>Rt||b.length+1>Math.min(p.diskMaxEntries,ft-1)||E.length+b.reduce((x,j)=>x+j.size,0)>p.diskMaxBytes}for(;O();){const b=F.filter(z=>z.bucketName===w.name),j=b.length+1>Math.min(p.diskMaxEntries,ft-1)||E.length+b.reduce((z,B)=>z+B.size,0)>p.diskMaxBytes?b[0]:F[0];if(!j||!await A(j))throw new Error("缓存容量不足或条目已变化");F.splice(F.indexOf(j),1)}await L();const C=await u(i);if(!C.some(b=>b.name===w.name)&&C.length>=ft-1)throw new Error("缓存目录超过治理上限");if(await w.create({recursive:!0,exclusive:!1},t),!Se(f.revisions,await T(m.scopeIds,m.namespace)))return!1;try{await D.create({recursive:!1,exclusive:!0},t)}catch(b){a(b),await D.stat(t)}return await D.write(E,t),c(),Se(f.revisions,await T(m.scopeIds,m.namespace))}),invalidate:(f,p)=>d(async()=>{await l();const m=n.file(`${await Sr([f,p??null])}.revision`);await g(m);try{await m.create({recursive:!1,exclusive:!0},t)}catch(E){a(E),await m.stat(t)}await m.write(jr.encode(ns()),t),c();try{const{entries:E}=await U();for(const w of E){if(p!==void 0&&w.entry.address.namespace!==p||!f.every((P,F)=>w.entry.address.scopeIds[F]===P))continue;const D=await T(w.entry.address.scopeIds,w.entry.address.namespace);Se(w.entry.revisions,D)||await A(w)}await L()}catch(E){a(E),c()}})}}function br(e){return!!e&&typeof e=="object"&&["FILE_NOT_FOUND","ENOENT","NOT_FOUND"].includes(String(e.code))}const Il="RATE_LIMITED_BY_RUNTIME",Ml="RATE_LIMITED",wc=20,Ic=40,Mc=150,Nc=20,Ac=1e4,Dc=45e3,Tc=1,Nl=300*1e3,Al=64;function ht(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function Dl(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):t}function Tl(e={}){const t=e.now??Date.now,r=Dl(e.coalesceWindowMs,Mc),n=e.budget===!1?void 0:{ratePerSecond:Math.max(.001,ht(e.budget?.ratePerSecond,wc)),burst:Math.max(1,Math.floor(ht(e.budget?.burst,Ic)))},i=e.loopDetection===!1?void 0:{maxCalls:Math.max(1,Math.floor(ht(e.loopDetection?.maxCalls,Nc))),windowMs:Math.max(1,Math.floor(ht(e.loopDetection?.windowMs,Ac)))},o=e.circuitBreaker===!1?void 0:{failureThreshold:Math.max(1,Math.floor(ht(e.circuitBreaker?.failureThreshold,Tc))),openMs:Math.max(1,Math.floor(ht(e.circuitBreaker?.openMs,Dc)))},s=new Map,a=new Map,c=new Set,d=new Map,l=n?{tokens:n.burst,updatedAt:t()}:{tokens:0,updatedAt:0},h={coalesced:0,budgetRejected:0,loopRejected:0,circuitOpened:0,circuitRejected:0};let u=!1;function g(N){try{e.onReport?.(N)}catch{}}function T(N,f){if(!i)return{exceeded:!1,count:0};const p=a.get(N)??[],m=f-i.windowMs;let E=0;for(;E<p.length&&p[E]<=m;)E+=1;E>0&&p.splice(0,E);const w=p.length>=i.maxCalls;return w||(p.push(f),p.length>i.maxCalls+1&&p.splice(0,p.length-(i.maxCalls+1))),a.set(N,p),{exceeded:w,count:p.length}}function M(N){if(!n)return!0;const f=Math.max(0,N-l.updatedAt)/1e3;return l.tokens=Math.min(n.burst,l.tokens+f*n.ratePerSecond),l.updatedAt=N,l.tokens<1?!1:(l.tokens-=1,!0)}function S(N){if(!n)return 0;const f=Math.max(0,N-l.updatedAt)/1e3,p=Math.min(n.burst,l.tokens+f*n.ratePerSecond);return Math.max(0,Math.ceil((1-p)/n.ratePerSecond*1e3))}function I(N,f,p,m,E){if(!o)return;const w=d.get(f),D=(w?.open?0:w?.failures??0)+1;if(D<o.failureThreshold){d.set(f,{open:!1,openedAt:0,openMs:0,failures:D});return}const P=Math.min(Math.max(o.openMs,m),Nl);d.set(f,{open:!0,openedAt:E,openMs:P,failures:D}),h.circuitOpened+=1,g({type:"circuit_opened",capability:N,endpointId:f,status:p,openMs:P,timestamp:E})}function _(N){const f=d.get(N);f&&!f.open&&d.delete(N)}function A(N){for(const[f,p]of s)!p.pending&&p.expiresAt<=N&&s.delete(f);for(;s.size>=Al;){const f=[...s].find(([,p])=>!p.pending);if(!f)break;s.delete(f[0])}}function v(N,f){if(N===void 0)return;const p=s.get(N);p?.promise===f&&(p.pending=!1)}function U(N,f){if(N===void 0)return;s.get(N)?.promise===f&&s.delete(N)}async function L(N){if(u)return N.load();const f=t();if(o){const w=d.get(N.endpointId);if(w?.open){const D=w.openedAt+w.openMs-f;if(D>0)throw h.circuitRejected+=1,g({type:"circuit_rejected",capability:N.capability,endpointId:N.endpointId,retryAfterMs:D,timestamp:f}),Ol("上游已被网关限流,Runtime 熔断中,请稍后重试",{origin:"circuit",reason:"circuit_open",endpointId:N.endpointId,retryAfterMs:D});d.delete(N.endpointId)}}const p=T(N.endpointId,f);p.exceeded&&i?c.has(N.endpointId)||(c.add(N.endpointId),g({type:"loop_detected",capability:N.capability,endpointId:N.endpointId,count:p.count,windowMs:i.windowMs,timestamp:f})):c.delete(N.endpointId);const m=r>0?N.coalesceKey:void 0;if(m!==void 0){const w=s.get(m);if(w&&(w.pending||w.expiresAt>f))return h.coalesced+=1,g({type:"coalesced",capability:N.capability,endpointId:N.endpointId,timestamp:f}),w.promise;w&&s.delete(m)}if(p.exceeded&&i)throw h.loopRejected+=1,os("检测到同一 endpoint 的高频循环调用,本次请求已在 Runtime 本地拒绝",{origin:"loop",reason:"loop",capability:N.capability,endpointId:N.endpointId,count:p.count,windowMs:i.windowMs});if(!M(f)){h.budgetRejected+=1;const w=S(f);throw g({type:"budget_exhausted",capability:N.capability,endpointId:N.endpointId,retryAfterMs:w,timestamp:f}),os("请求过于频繁,已触发 Runtime 本地配额限制",{origin:"budget",reason:"budget",capability:N.capability,endpointId:N.endpointId,retryAfterMs:w})}m!==void 0&&A(f);const E=N.load().then(w=>(v(m,E),_(N.endpointId),w),w=>{U(m,E);const D=Sl(w);throw D!==void 0&&I(N.capability,N.endpointId,D,bl(w),f),w});return m!==void 0&&s.set(m,{promise:E,expiresAt:f+r,pending:!0}),E}return{execute:L,invalidateCoalescing(){s.clear()},snapshot(){return{...h,openCircuits:[...d.entries()].filter(([,N])=>N.open).map(([N])=>N)}},dispose(){u||(u=!0,s.clear(),a.clear(),c.clear(),d.clear())}}}function Sl(e){if(typeof e!="object"||e===null)return;const t=e.status;if(!(typeof t!="number"||!Number.isInteger(t)))return t===403||t===429?t:void 0}function bl(e){if(typeof e!="object"||e===null)return 0;const t=e.retryAfterMs;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}function os(e,t){return{code:Il,message:e,data:t}}function Ol(e,t){return{code:Ml,message:e,data:t}}const Sc=3e4,bc=6e4,Gi=1440*60*1e3;function _l(e){const t=e!==!1&&(e?.enabled??!0),r=e===!1?void 0:e;return{enabled:t,debugReport:t&&r?.debugReport===!0,identityTtlMs:t?Math.max(0,Math.floor(r?.identityTtlMs??Sc)):0,profileTtlMs:t?Math.max(0,Math.floor(r?.profileTtlMs??bc)):0,steamGameListTtlMs:t?Ll(r?.steamGameListTtlMs):0,gateOptions:{budget:r?.budget??{ratePerSecond:wc,burst:Ic},coalesceWindowMs:r?.coalesceWindowMs??Mc,loopDetection:r?.loopDetection??{maxCalls:Nc,windowMs:Ac},circuitBreaker:r?.circuitBreaker??{failureThreshold:Tc,openMs:Dc}}}}function Ll(e){return e===void 0||!Number.isFinite(e)?Gi:Math.max(0,Math.floor(e))}function y(e,t,r){return r===void 0?{code:e,message:t}:{code:e,message:t,data:r}}function H(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function vl(e){return typeof e=="object"&&e!==null}function pe(e,t){const r=e.data;if(!vl(r)||typeof r.status!="string")throw new Error(t);return r}const Oc={auth:"optional",channel:"api",id:"heybox.account.user_base_info.envelope.get",method:"GET",path:"/account/get_user_base_info"},Cl={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 pe(e,"工坊小程序详情加载失败")}};function Er(e){const t=e.runtimeAuthContextToken?.trim();return{mini_program_id:e.miniProgramId,...t?{runtime_auth_context_token:t}:{}}}function Pl(e){return{challenge:e.challenge,expiresIn:e.expires_in,requestedScopes:e.requested_scopes||[],displayedScopes:e.displayed_scopes||[],consentUiVersion:e.consent_ui_version}}function Rl(e){const t=pe(e,"小程序登录授权接口响应异常"),r=t.result,n={};if(r.login_code&&typeof r.login_code=="object"){const i=r.login_code;n.loginCode={code:i.code,expiresIn:i.expires_in,scopes:i.scopes||[]}}return r.consent_challenge&&typeof r.consent_challenge=="object"&&(n.consentChallenge=Pl(r.consent_challenge)),{...t,result:n}}const kl={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=>({...Er(e.runtimeContext),challenge:e.challenge}),parse:e=>pe(e,"小程序授权取消接口响应异常")},xl={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=>Er(e.runtimeContext),parse:e=>pe(e,"小程序授权撤销接口响应异常")},jl={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=>Er(e.runtimeContext),parse(e){const t=pe(e,"小程序隔离身份接口响应异常"),r=typeof t.result.steam_id=="string"&&t.result.steam_id.trim()?t.result.steam_id.trim():void 0;return{...t,result:{appUserId:t.result.app_user_id,...r?{steamId:r}:{}}}}},zl={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=>({...Er(e.runtimeContext),...e.scopes?.length?{scopes:e.scopes.join(",")}:{}}),parse:e=>Rl(e)},Ul={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=>({...Er(e.runtimeContext),challenge:e.challenge,...e.selectedScopes.length?{selected_scopes:e.selectedScopes.join(",")}:{}}),parse(e){const t=pe(e,"小程序登录确认接口响应异常");return{...t,result:{code:t.result.code,expiresIn:t.result.expires_in,scopes:t.result.scopes}}}},Hl=64;function _c(e){const t=e.ttlMs,r=Math.max(1,Math.floor(e.maxEntries??Hl)),n=e.now??Date.now,i=new Map,o=new Map;let s=0,a=!1;function c(h){for(const[u,g]of i)g.expiresAt<=h&&i.delete(u)}function d(h,u,g){if(a||t<=0||g!==s)return;const T=n();for(c(T),i.delete(h);i.size>=r;){const M=i.keys().next();if(M.done)break;i.delete(M.value)}i.set(h,{expiresAt:T+t,value:u})}function l(h,u){if(a)return u();if(t>0){const S=i.get(h);if(S&&S.expiresAt>n())return Promise.resolve(S.value);S&&i.delete(h)}const g=o.get(h);if(g)return g;const T=s,M=u().then(S=>(d(h,S,T),S)).finally(()=>{o.get(h)===M&&o.delete(h)});return o.set(h,M),M}return{read:l,invalidate(){s+=1,i.clear(),o.clear()},dispose(){a||(a=!0,s+=1,i.clear(),o.clear())},get size(){return i.size}}}function Fl(e,t){return t?e?"server":"local":"legacy"}function Vl(e,t){if(e==="local")throw y("SERVER_API_REQUIRED",`${t} 需要 effective network 启用后才能使用`)}const Bl=["baseURL","errorMode","jsonParseMode","observability","queryEncoding","responseType","security"],Ql=new Set(["auth","body","bodyEncoding","channel","failurePresentation","headers","id","method","parse","path","query","timeout"]),Yl=/authorization|cookie|pkey|password|secret|token/i,Lc=/authorization|cookie|pkey|token|password|secret/i;function be(e,t){return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Gl(e){for(const t of Object.keys(e))if(!Ql.has(t))throw new se(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);for(const t of Bl)if(Object.prototype.hasOwnProperty.call(e,t)&&be(e,t)!==void 0)throw new se(`endpoint 字段不受 hb-sdk-runtime private mapper 支持: ${t}`);if(be(e,"bodyEncoding")!==void 0&&be(e,"bodyEncoding")!=="json"&&be(e,"bodyEncoding")!=="form")throw new se("endpoint bodyEncoding 不受 HostNetworkPort 支持");if(be(e,"failurePresentation")!==void 0&&be(e,"failurePresentation")!=="none")throw new se("endpoint failurePresentation 必须为 none");if(be(e,"auth")!==void 0&&be(e,"auth")!=="none"&&be(e,"auth")!=="optional"&&be(e,"auth")!=="required")throw new se("endpoint auth 必须为 none、optional 或 required")}function qt(e){if(Array.isArray(e))return e.map(qt);if(!e||typeof e!="object")return e;const t=e,r={};for(const[n,i]of Object.entries(t))Yl.test(n)||(r[n]=qt(i));return r}function ss(e){if(!e)return;const t={};for(const[r,n]of Object.entries(e))Lc.test(r)||(t[r]=n);return t}function ql(e){if(!e)return;const t=Object.keys(e).find(r=>Lc.test(r));if(t)throw new se(`endpoint 禁止声明 credential-bearing header: ${t}`)}class St extends Error{code="INTERNAL_ENDPOINT_HTTP_STATUS";endpointId;status;retryAfterMs;constructor(t){super(`内部 endpoint 请求失败: HTTP ${t.status}`),this.name="InternalEndpointHttpStatusError",this.endpointId=t.endpointId,this.status=t.status,t.retryAfterMs!==void 0&&(this.retryAfterMs=t.retryAfterMs),Object.setPrototypeOf(this,new.target.prototype)}}const as=1440*60*1e3,Wl=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\b/i;function $l(e,t=Date.now){if(!e)return;const r=Object.entries(e).find(([s])=>s.trim().toLowerCase()==="retry-after")?.[1];if(typeof r!="string"||!r.trim())return;const n=r.trim();if(/^\d+$/.test(n)){const s=Number(n)*1e3;return s>0?Math.min(s,as):void 0}if(!Wl.test(n))return;const i=Date.parse(n);if(!Number.isFinite(i))return;const o=i-t();return o>0?Math.min(o,as):void 0}function Kl(e,t,r,n){if(e.method!=="GET")return;let i;try{i=JSON.stringify([t??null,r??null])??"undefined"}catch{return}return`${e.id}\0${n}\0${i}`}function vc(e,t){Object.defineProperty(e,"cause",{configurable:!1,enumerable:!1,value:t,writable:!1})}class bt extends Error{code="INTERNAL_ENDPOINT_REQUEST_FAILED";endpointId;constructor(t){super(`内部 endpoint 请求执行失败: ${t.endpointId}`),this.name="InternalEndpointRequestError",this.endpointId=t.endpointId,vc(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}class wr extends Error{code="INTERNAL_ENDPOINT_PARSE_FAILED";endpointId;constructor(t){super(`内部 endpoint 响应解析失败: ${t.endpointId}`),this.name="InternalEndpointParseError",this.endpointId=t.endpointId,vc(this,t.cause),Object.setPrototypeOf(this,new.target.prototype)}}function Jl(e,t,r,n,i,o,s,a){return{config:{auth:e.auth,body:qt(i),bodyEncoding:e.bodyEncoding,channel:e.channel,credentials:s.credentials,headers:ss(o),method:e.method,metadata:{endpointId:e.id},query:qt(n),timeout:e.timeout,url:r},data:qt(a.data),headers:ss(a.headers)||{},status:a.status,statusText:a.statusText}}async function qn(e,t,r,n){if(!n||!n.signal)throw new TypeError("requestEndpoint requires an AbortSignal");if(n.credentials!=="heybox-session"&&n.credentials!=="omit")throw new TypeError("requestEndpoint requires explicit credentials");if(Gl(t),typeof t.id!="string"||!t.id)throw new se("endpoint id 必须为非空字符串");if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(t.method))throw new se("endpoint method 不受 HostNetworkPort 支持");const i=typeof t.path=="function"?await t.path(r):t.path;if(typeof i!="string"||!i)throw new se("endpoint path 必须为非空字符串");const o=t.query?await t.query(r):void 0,s=t.body?await t.body(r):void 0,a=t.headers?await t.headers(r):void 0;ql(a);const c=async()=>{let h;try{h=await e.request({source:"runtime-private",redirectPolicy:"error",target:{kind:"heybox-api",endpointId:t.id,...t.channel?{channel:t.channel}:{},path:i},method:t.method,...o===void 0?{}:{params:o},...s===void 0?{}:{data:s},...a===void 0?{}:{headers:a},credentials:n.credentials,...t.bodyEncoding===void 0?{}:{bodyEncoding:t.bodyEncoding},...t.timeout===void 0?{}:{timeout:t.timeout}},{signal:n.signal,...n.miniProgramDetail===void 0?{}:{miniProgramDetail:n.miniProgramDetail}})}catch(g){throw g instanceof se?g:new bt({endpointId:t.id,cause:g})}if(h.status<200||h.status>=300)throw new St({endpointId:t.id,status:h.status,retryAfterMs:$l(h.headers)});const u=Jl(t,r,i,o,s,a,n,h);if(t.parse)try{return await t.parse(u,r)}catch(g){throw new wr({endpointId:t.id,cause:g})}return u.data},d=n.gate;if(!d)return c();const l=Kl(t,o,s,n.credentials);return d.gate.execute({capability:d.capability,endpointId:t.id,...l===void 0?{}:{coalesceKey:l},load:c})}const Zl=new Set(Tt),Do="steam_account",Cc=new Set(Tt.filter(e=>e!==Do)),Xl=1e3;function ef(e){const t=new Set,r=_c({ttlMs:Math.max(0,Math.floor(e.identityTtlMs??Sc))}),n=new Set;let i=0,o=!1,s=Promise.resolve(),a;const c=e.steamAccount===!0,d=e.userDataMode??Fl(e.networkEnabled===!0,c),l=e.requestPolicyEnabled!==!1,h=e.requestGate?{capability:"auth",gate:e.requestGate}:void 0;async function u(){if(!c)return{};if(!e.authorizationContext)throw y("METHOD_FORBIDDEN","新能力版本缺少 Runtime auth context Port");let R;try{R=await e.authorizationContext.get(e.operationContext)}catch(C){throw Wi(C)?oi(C.code,C.message,C):oi("REQUEST_FAILED","读取 Runtime auth context 失败",C)}if(R.steamAccount!==c||R.userDataMode!==d)throw y("AUTHORIZATION_CONTEXT_CHANGED","Runtime auth context 已变化,请重新打开小程序");const O=R.token.trim();if(!O)throw y("REQUEST_FAILED","Runtime auth context 为空");return{runtimeAuthContextToken:O}}const g=e.account.onChange(R=>{T(),M("heybox_app_login_change",{isHeyboxAppLoggedIn:!!R})});function T(){i+=1,a?.abort(),r.invalidate(),e.requestGate?.invalidateCoalescing(),n.clear()}function M(R,O){R==="user_info_authorization_change"&&af(O)&&r.invalidate();for(const C of t)try{C(R,O)}catch{}}function S(){const R=e.identity.get()?.miniProgramId?.trim();if(!R)throw y("INVALID_STATE","当前能力缺少 canonical 小程序身份");return R}function I(){if(o||e.operationContext.signal.aborted)throw y("RUNTIME_DESTROYED","小程序 Runtime 已终止")}async function _(){I();let R;try{R=await e.account.getCurrentUserId(e.operationContext)}catch(O){throw ls(O,e.operationContext.signal,"读取小黑盒账号失败")}return typeof R=="string"&&R.trim()?R.trim():void 0}async function A(R,O){const C=await _();if(i!==O||C!==R)throw y("AUTHORIZATION_CONTEXT_CHANGED","授权期间账号上下文已变化,请重新操作")}async function v(R){I();try{await e.account.ensureAuthenticated({trustedUserGesture:R,reason:"runtime_auth",signal:e.operationContext.signal})}catch(C){throw ls(C,e.operationContext.signal,"小黑盒登录失败")}const O=await _();if(!O)throw y("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");return O}async function U(R,O,C=e.operationContext.signal){try{if(C.aborted)throw qi();return await sf(qn(e.network,R,O,{...e.operationContext,credentials:"heybox-session",signal:C,...h?{gate:h}:{}}),C)}catch(b){throw e.operationContext.signal.aborted?y("RUNTIME_DESTROYED","小程序 Runtime 已终止"):b instanceof se?y("REQUEST_UNSUPPORTED",b.message):b instanceof wr?y("INVALID_RESPONSE","授权接口响应不合法"):b instanceof bt?y("REQUEST_FAILED","授权请求失败"):b instanceof St?l&&(b.status===403||b.status===429)?y("RATE_LIMITED","授权请求已被网关限流,请稍后重试",{status:b.status,...b.retryAfterMs===void 0?{}:{retryAfterMs:b.retryAfterMs}}):y("REQUEST_FAILED",b.message):Wi(b)?b:y("REQUEST_FAILED","授权请求失败")}}async function L(R,O){await U(kl,{runtimeContext:{miniProgramId:R,...await u()},challenge:O}).catch(()=>{})}function N(R){const O=async()=>{const b=ds(e.operationContext.signal);a=b;try{return await R(b.signal)}finally{a===b&&(a=void 0),b.abort()}},C=s.then(O,O);return s=C.then(()=>{},()=>{}),C}async function f(R,O,C,b,x){if(!C)throw await L(R,O.challenge),y("USER_GESTURE_REQUIRED","展示授权确认需要用户手势");if(!e.authPresentation)throw await L(R,O.challenge),y("AUTHORIZATION_PRESENTATION_UNAVAILABLE","授权确认界面不可用");return N(async j=>{await A(b,x);const z=await p(R,O.displayedScopes,j);await A(b,x);let B;try{B=await e.authPresentation.confirmAuthorization({miniProgramId:R,scopes:O.displayedScopes,...z,signal:j})}catch(G){throw e.operationContext.signal.aborted?y("RUNTIME_DESTROYED","小程序 Runtime 已终止"):(await A(b,x),await L(R,O.challenge),oi("REQUEST_FAILED","授权确认界面执行失败",G))}if(await A(b,x),B.status!=="granted")throw await L(R,O.challenge),y("AUTHORIZATION_CANCELLED","用户取消授权");const Q=nf(B.grantedScopes,O.displayedScopes,c);if(!Q.includes("identity"))throw await L(R,O.challenge),y("AUTHORIZATION_CANCELLED","用户拒绝授权");return Q})}async function p(R,O,C){const b=ds(C),x=setTimeout(()=>b.abort(),Xl);try{const j=of(e.miniProgramPresentation),[z,B]=await Promise.all([j?Promise.resolve(j):m(R,b.signal),O.includes("profile")?E(b.signal):Promise.resolve(void 0)]);return{...z?{miniProgram:z}:{},...B?{userProfile:B}:{}}}finally{clearTimeout(x),b.abort()}}async function m(R,O){try{const C=e.identity.get()?.version?.trim(),b=await U(Cl,{mini_program_id:R,...C?{miniprogram_version:C}:{}},O),x=mt(b,"小程序公开资料"),j=Nt(x.name),z=Nt(x.icon_url);return j||z?{...j?{name:j}:{},...z?{avatarUrl:z}:{}}:void 0}catch{return}}async function E(R){try{const O=await U(Oc,void 0,R),C=mt(O,"账号基础信息"),b=Nt(C.display_username),x=Nt(C.display_avatar);return b||x?{...b?{nickname:b}:{},...x?{avatar:x}:{}}:void 0}catch{return}}async function w(R,O){if(Vl(d,"auth.login"),!c&&R.includes(Do))throw y("INVALID_PARAMS","auth.login 参数不合法");const C=S(),b=await v(O),x=i,j=await U(zl,{runtimeContext:{miniProgramId:C,...await u()},scopes:R});await A(b,x);const z=mt(j,"小程序登录"),B=us(z,"loginCode"),Q=us(z,"consentChallenge");if(B===Q)throw y("INVALID_RESPONSE","小程序登录 begin 必须返回 exact oneof");let G;if(B)G=cs(z.loginCode,c);else{const te=tf(z.consentChallenge,c),X=await f(C,te,O,b,x);await A(b,x);const Z=await U(Ul,{runtimeContext:{miniProgramId:C,...await u()},challenge:te.challenge,selectedScopes:X});if(await A(b,x),G=cs(mt(Z,"小程序登录确认"),c),G.scopes.some(q=>!X.includes(q)))throw y("INVALID_RESPONSE","小程序登录确认返回了未选择的 scope")}n.clear();for(const te of G.scopes)n.add(te);return r.invalidate(),M("heybox_app_login_change",{isHeyboxAppLoggedIn:!0}),M("user_info_authorization_change",si(n,c)),G}async function D(R,O){const C=i,b=await U(jl,{runtimeContext:{miniProgramId:O,...await u()}});await A(R,C);const x=rf(mt(b,"用户本地身份"),c);for(const j of c?Tt:Cc)n.add(j);return M("user_info_authorization_change",si(n,c)),x}function P(R){I();const O=S(),C=`${R}\0${O}\0${i}\0${c}`;return r.read(C,()=>D(R,O))}async function F(R){if(!R)throw y("USER_GESTURE_REQUIRED","撤销授权需要用户手势");const O=S(),C=i,b=await _();if(!b)throw y("HEYBOX_APP_LOGIN_REQUIRED","请先登录小黑盒");const x=await U(xl,{runtimeContext:{miniProgramId:O,...await u()}});await A(b,C),mt(x,"用户授权撤销"),T(),M("user_info_authorization_change",{identity:"denied",profile:"denied",...c?{steam_account:"denied"}:{}})}return{login:w,getOrCreateLocalIdentity:P,invalidateLocalIdentity(){r.invalidate()},getAuthorization:()=>si(n,c),revoke:F,onEvent(R){return t.add(R),()=>t.delete(R)},dispose(){o||(o=!0,T(),r.dispose(),g(),t.clear())}}}function oi(e,t,r){const n=y(e,t);return Object.defineProperty(n,"cause",{configurable:!0,enumerable:!1,value:r}),n}function mt(e,t){if(!H(e))throw y("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw y(n,r)}if(!H(e.result))throw y("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function cs(e,t){if(!H(e))throw y("INVALID_RESPONSE","login code 必须是对象");const r=bn(e.scopes,"login code scopes",t);if(typeof e.code!="string"||!e.code.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!r.includes("identity"))throw y("INVALID_RESPONSE","login code 响应不合法");return{code:e.code,expiresIn:Number(e.expiresIn),scopes:r}}function tf(e,t){if(!H(e))throw y("INVALID_RESPONSE","授权 challenge 必须是对象");const r=bn(e.requestedScopes,"challenge requestedScopes",t),n=bn(e.displayedScopes,"challenge displayedScopes",t);if(typeof e.challenge!="string"||!e.challenge.trim()||!Number.isInteger(e.expiresIn)||Number(e.expiresIn)<=0||!Number.isInteger(e.consentUiVersion)||Number(e.consentUiVersion)<0||!r.length||!r.includes("identity")||!n.length||!n.includes("identity")||r.some(i=>!n.includes(i)))throw y("INVALID_RESPONSE","授权 challenge 响应不合法");return{challenge:e.challenge.trim(),requestedScopes:r,displayedScopes:n}}function rf(e,t){if(!H(e)||typeof e.appUserId!="string"||!e.appUserId.trim())throw y("INVALID_RESPONSE","本地身份 appUserId 必须是非空字符串");const r=e.appUserId.trim();if(!t)return{appUserId:r};if(e.steamId!==void 0&&typeof e.steamId!="string")throw y("INVALID_RESPONSE","本地身份 steamId 必须是字符串");const n=typeof e.steamId=="string"&&e.steamId.trim()?e.steamId.trim():void 0;return n?{appUserId:r,steamId:n}:{appUserId:r}}function nf(e,t,r){const n=bn(e,"授权选择 scopes",r);if(n.some(i=>!t.includes(i)))throw y("INVALID_RESPONSE","授权选择包含未展示的 scope");return n}function Nt(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function of(e){const t=Nt(e?.name),r=Nt(e?.avatarUrl);return t||r?{...t?{name:t}:{},...r?{avatarUrl:r}:{}}:void 0}function ds(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 sf(e,t){return t.aborted?Promise.reject(qi()):new Promise((r,n)=>{let i=!1;const o=a=>{i||(i=!0,t.removeEventListener("abort",s),a())},s=()=>o(()=>n(qi()));t.addEventListener("abort",s,{once:!0}),e.then(a=>o(()=>r(a)),a=>o(()=>n(a)))})}function qi(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function bn(e,t,r){const n=r?Zl:Cc;if(!Array.isArray(e)||e.some(i=>typeof i!="string"||!n.has(i))||new Set(e).size!==e.length)throw y("INVALID_RESPONSE",`${t} 不合法`);return[...e]}function si(e,t){const r=t?Tt:Tt.filter(n=>n!==Do);return Object.fromEntries(r.map(n=>[n,e.has(n)?"granted":"not_requested"]))}function us(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function af(e){return H(e)?Object.values(e).some(t=>t==="denied"):!1}function Wi(e){return H(e)&&typeof e.code=="string"&&typeof e.message=="string"}function ls(e,t,r){return t.aborted?y("RUNTIME_DESTROYED","小程序 Runtime 已终止"):Wi(e)?e:y("REQUEST_FAILED",r)}const cf=new Set(Tt);function df(e){return{[Kr]:async(t,r)=>e.authorization.login(uf(t),r.trustedUserGesture)}}function uf(e){if(e===void 0)return["identity"];if(!H(e)||Object.keys(e).some(t=>t!=="scopes"))throw fs();if(e.scopes===void 0)return["identity"];if(!Array.isArray(e.scopes)||e.scopes.some(t=>typeof t!="string"||!cf.has(t))||new Set(e.scopes).size!==e.scopes.length)throw fs();return[...e.scopes]}function fs(){return y("INVALID_PARAMS","auth.login 参数不合法")}const lf={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 pe(e,"排行榜记录删除接口响应异常")}},ff={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 pe(e,"当前排行榜记录接口响应异常")}},hf={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 pe(e,"排行榜信息接口响应异常")}},mf={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 pe(e,"排行榜列表接口响应异常")}},gf={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 pe(e,"排行榜提交接口响应异常")}};function zr(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function hs(e){return e instanceof se?{code:"REQUEST_UNSUPPORTED",message:e.message}:e}function ee(e){if(e.aborted)throw zr()}function W(e,t,r={}){if(t.aborted&&!r.invokeWhenAborted)return Promise.reject(zr());let n;try{n=e()}catch(i){return Promise.reject(hs(i))}return t.aborted?(Promise.resolve(n).catch(()=>{}),Promise.reject(zr())):new Promise((i,o)=>{let s=!1;const a=d=>{s||(s=!0,t.removeEventListener("abort",c),d())},c=()=>a(()=>o(zr()));t.addEventListener("abort",c,{once:!0}),Promise.resolve(n).then(d=>a(()=>i(d)),d=>a(()=>o(hs(d))))})}const pf="default",yf=/^[A-Za-z0-9_-]{1,64}$/,Ef=300*1e3,wf=250,If=3,Mf={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 Nf{constructor(t){this.options=t,this.requestGateContext=t.requestGate?{capability:"cloud",gate:t.requestGate}:void 0,this.unsubscribeAccountChange=Df(t.account,()=>this.invalidateForAccountChange()),t.operationContext.signal.aborted?this.dispose():t.operationContext.signal.addEventListener("abort",this.handleTerminalAbort,{once:!0})}accountGeneration=0;buckets=new Map;inflight=new Map;unsubscribeAccountChange;requestGateContext;disposed=!1;handleTerminalAbort=()=>this.dispose();async submit(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId();await this.requireCurrentUser(r);const i=await this.request(gf,{miniProgramId:n,...t});this.assertAccountGeneration(r);const o=xt(i,xe);return this.invalidateMutableReads(this.createBucketKey(n,t.key)),ai(o,xe)}getList(t){this.assertUsable();const r=this.readMiniProgramId(),n=this.createBucketKey(r,t.key),i=jt("list",t.limit,t.cursor??null);return this.read(n,"list",i,async()=>{const o=await this.request(mf,{miniProgramId:r,...t}),s=xt(o,Ne);if(!Ce(s)||!Array.isArray(s.entries)||typeof s.has_more!="boolean")throw ie(`${Ne} 返回值不合法`);if(s.cursor!==void 0&&s.cursor!==null&&typeof s.cursor!="string")throw ie(`${Ne} 返回的 cursor 必须是字符串`);return{entries:s.entries.map(a=>ai(a,Ne)),...typeof s.cursor=="string"&&s.cursor?{cursor:s.cursor}:{},hasMore:s.has_more}})}async getCurrentUserEntry(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId(),i=await this.requireCurrentUser(r),o=this.createBucketKey(n,t.key),s=jt("current",i);return this.read(o,"current",s,async()=>{const a=await this.request(ff,{miniProgramId:n,...t}),c=xt(a,Ye);if(!Ce(c))throw ie(`${Ye} 返回值必须是对象`);return c.entry===void 0||c.entry===null?void 0:ai(c.entry,Ye)})}async deleteCurrentUserEntry(t){this.assertUsable();const r=this.accountGeneration,n=this.readMiniProgramId();await this.requireCurrentUser(r);const i=await this.request(lf,{miniProgramId:n,...t});this.assertAccountGeneration(r);const o=xt(i,st);if(this.invalidateMutableReads(this.createBucketKey(n,t.key)),!Ce(o)||typeof o.deleted!="boolean")throw ie(`${st} 返回的 deleted 必须是布尔值`);return{deleted:o.deleted}}getInfo(t){this.assertUsable();const r=this.readMiniProgramId(),n=this.createBucketKey(r,t.key);return this.read(n,"info",jt("info"),async()=>{const i=await this.request(hf,{miniProgramId:r,...t}),o=xt(i,ve);if(!Ce(o)||typeof o.key!="string"||!yf.test(o.key))throw ie(`${ve} 返回的 key 不合法`);if(t.key!==void 0&&o.key!==t.key)throw ie(`${ve} 返回的 key 与请求不一致`);if(o.order!=="asc"&&o.order!=="desc")throw ie(`${ve} 返回的 order 必须是 asc 或 desc`);if(typeof o.rank_limit!="number"||!Number.isInteger(o.rank_limit)||o.rank_limit<0)throw ie(`${ve} 返回的 rankLimit 必须是非负整数`);return{key:o.key,order:o.order,rankLimit:o.rank_limit}})}read(t,r,n,i){this.assertUsable();const o=this.getOrCreateBucket(t),s=o?.caches[r],a=s?.get(n);if(a&&a.expiresAt>Date.now())return Promise.resolve(a.value);s?.delete(n);const c=jt(t,n),d=this.inflight.get(c);if(d)return d.promise;const l=this.accountGeneration,h=o?.generation,u=i().then(g=>(this.assertAccountGeneration(l),o&&s&&o.generation===h&&(r==="list"?s.size>=wf&&s.delete(s.keys().next().value):s.clear(),s.set(n,{expiresAt:Date.now()+Ef,value:g})),g)).finally(()=>{this.inflight.get(c)?.promise===u&&this.inflight.delete(c),o&&this.removeEmptyBucket(t,o)});return this.inflight.set(c,{bucketKey:t,promise:u}),u}getOrCreateBucket(t){const r=this.buckets.get(t);if(r)return r;if(this.pruneExpiredBuckets(),this.buckets.size>=If)return;const n={generation:0,caches:{list:new Map,current:new Map,info:new Map}};return this.buckets.set(t,n),n}invalidateMutableReads(t){this.invalidateInflight(t);const r=this.buckets.get(t);r&&(r.generation+=1,r.caches.list.clear(),r.caches.current.clear())}invalidateForAccountChange(){this.accountGeneration+=1,this.buckets.clear(),this.inflight.clear()}invalidateInflight(t){for(const[r,n]of this.inflight)n.bucketKey===t&&this.inflight.delete(r)}pruneExpiredBuckets(){const t=Date.now();for(const[r,n]of this.buckets)gs(n,t),this.isBucketEmpty(r,n)&&this.buckets.delete(r)}removeEmptyBucket(t,r){gs(r,Date.now()),this.buckets.get(t)===r&&this.isBucketEmpty(t,r)&&this.buckets.delete(t)}isBucketEmpty(t,r){return![...this.inflight.values()].some(n=>n.bucketKey===t)&&Object.values(r.caches).every(n=>n.size===0)}async requireCurrentUser(t){this.assertUsable();let r;try{r=await W(()=>this.options.account.getCurrentUserId(this.options.operationContext),this.options.operationContext.signal)}catch(n){throw ys(n)?n:ps()}if(this.assertAccountGeneration(t),typeof r!="string"||!r.trim())throw Ee("UNAUTHORIZED","当前用户未登录");return r.trim()}readMiniProgramId(){const t=this.options.identity.get()?.miniProgramId.trim();if(!t)throw Ee("INVALID_STATE","canonical mini-program identity 尚未绑定");return t}createBucketKey(t,r){return jt(t,r??pf)}assertAccountGeneration(t){if(this.assertUsable(),t!==this.accountGeneration)throw Ee("UNAUTHORIZED","登录状态已变化,请重试")}async request(t,r){this.assertUsable();const n={request:async(i,o)=>(this.assertUsable(),this.options.network.request(i,o))};try{return await W(()=>qn(n,t,r,{...this.options.operationContext,credentials:"heybox-session",...this.requestGateContext?{gate:this.requestGateContext}:{}}),this.options.operationContext.signal)}catch(i){if(ys(i)||Vt(i,"REQUEST_UNSUPPORTED")||Vt(i,"RATE_LIMITED")||Vt(i,"RATE_LIMITED_BY_RUNTIME"))throw i;if(i instanceof se)throw Ee("REQUEST_UNSUPPORTED","当前 Host 不支持该排行榜请求");if(i instanceof bt&&Vt(i.cause,"INVALID_STATE"))throw i.cause;if(i instanceof St){if(this.options.requestPolicyEnabled!==!1&&(i.status===403||i.status===429))throw Ee("RATE_LIMITED","排行榜请求已被网关限流,请稍后重试",{status:i.status,...i.retryAfterMs===void 0?{}:{retryAfterMs:i.retryAfterMs}});if(i.status===401||i.status===403)throw Ee("UNAUTHORIZED","当前用户未登录")}throw i instanceof bt||i instanceof St?ps():i instanceof wr?ie(i.cause instanceof Error?i.cause.message:"排行榜响应不合法"):ie(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(ee(this.options.operationContext.signal),this.disposed)throw Ee("INVALID_STATE","Cloud capability 已释放")}}function Af(e){return new Nf(e)}function Df(e,t){try{return e.onChange(t)}catch(r){if(Vt(r,gc))return()=>{};throw r}}function xt(e,t){if(!Ce(e)||typeof e.status!="string")throw ie(`${t} 响应必须是标准信封`);if(e.status!=="ok")throw Tf(e);if(!Object.prototype.hasOwnProperty.call(e,"result")||e.result===void 0||e.result===null)throw ie(`${t} 响应缺少 result`);return e.result}function ai(e,t){if(!Ce(e))throw ie(`${t} 返回的 entry 必须是对象`);if(typeof e.ranked!="boolean")throw ie(`${t} 返回的 ranked 必须是布尔值`);if(typeof e.rank!="number"||!Number.isInteger(e.rank)||(e.ranked?e.rank<=0:e.rank!==0))throw ie(`${t} 返回的 rank/ranked 不合法`);if(typeof e.app_user_id!="string"||!e.app_user_id.trim())throw ie(`${t} 返回的 appUserId 必须是非空字符串`);if(typeof e.score!="number"||!Number.isFinite(e.score))throw ie(`${t} 返回的 score 必须是有限数字`);if(!Ce(e.extra))throw ie(`${t} 返回的 extra 必须是对象`);if(typeof e.created_at!="number"||!Number.isFinite(e.created_at)||typeof e.updated_at!="number"||!Number.isFinite(e.updated_at))throw ie(`${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 Tf(e){if(e.status==="login"||e.status==="relogin")throw Ee("UNAUTHORIZED",Ft(e.msg)||"当前用户未登录");const t=ms(e.result)??ms(e),r=Ft(t?.user_message)||Ft(e.msg)||Ft(t?.developer_message)||"排行榜请求失败";throw t?Ee(Sf(t),r,{status:e.status,sbe:t}):Ee("HEYBOX_API_ERROR",r,{status:e.status})}function ms(e){return Ce(e)&&Ce(e.sbe)?e.sbe:void 0}function Sf(e){const t=Ft(e.developer_message);if(t&&/^[A-Z][A-Z0-9_]+$/.test(t))return t;const r=e.code;if(typeof r=="number"&&Number.isInteger(r))return Mf[r]||t||"HEYBOX_API_ERROR";if(typeof r=="string"){const n=/^([A-Za-z][A-Za-z0-9_]*)(?:\(\d+\))?$/.exec(r.trim());if(n?.[1])return n[1]}return t||"HEYBOX_API_ERROR"}function gs(e,t){for(const r of Object.values(e.caches))for(const[n,i]of r)i.expiresAt<=t&&r.delete(n)}function jt(...e){return JSON.stringify(e)}function Ce(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ft(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Vt(e,t){return Ce(e)&&e.code===t}function Ee(e,t,r){return r===void 0?{code:e,message:t}:{code:e,message:t,data:r}}function ie(e){return Ee("INVALID_RESPONSE",e)}function ps(){return Ee("REQUEST_FAILED","排行榜请求失败")}function ys(e){return e instanceof Error&&e.name==="AbortError"}const bf=/^[A-Za-z0-9_-]{1,64}$/,Es=20,Of=100,ws=2048;function _f(e){const t=Af(e);return{handlers:{[xe]:async n=>t.submit(Lf(n)),[Ne]:async n=>t.getList(vf(n)),[Ye]:async n=>t.getCurrentUserEntry(ci(n,Ye)),[st]:async n=>t.deleteCurrentUserEntry(ci(n,st)),[ve]:async n=>t.getInfo(ci(n,ve))},dispose:()=>t.dispose()}}function Lf(e){const t=To(e,xe,!1);if(So(t,["key","score","extra"],xe),typeof t.score!="number"||!Number.isFinite(t.score)||Math.abs(t.score)>Number.MAX_SAFE_INTEGER)throw Pe("INVALID_PARAMS","cloud.leaderboard.submit score 必须是有限安全数字");return{...bo(t.key,xe),score:t.score,...t.extra===void 0?{}:{extra:Cf(t.extra)}}}function vf(e){if(e===void 0)return{limit:Es};const t=To(e,Ne,!0);So(t,["key","limit","cursor"],Ne);const r=t.limit===void 0?Es:t.limit;if(typeof r!="number"||!Number.isInteger(r)||r<=0||r>Of)throw Pe("INVALID_PARAMS","cloud.leaderboard.getList limit 必须是 1-100 的整数");if(t.cursor!==void 0&&typeof t.cursor!="string")throw Pe("INVALID_PARAMS","cloud.leaderboard.getList cursor 必须是字符串");return{...bo(t.key,Ne),limit:r,...t.cursor===void 0?{}:{cursor:t.cursor}}}function ci(e,t){if(e===void 0)return{};const r=To(e,t,!0);return So(r,["key"],t),bo(r.key,t)}function To(e,t,r){if(e===void 0&&r)return{};if(!Pc(e))throw Pe("INVALID_PARAMS",`${t} 参数必须是对象`);return e}function So(e,t,r){const n=Object.keys(e).find(i=>!t.includes(i));if(n)throw Pe("INVALID_PARAMS",`${r} 不支持参数 ${n}`)}function bo(e,t){if(e===void 0)return{};if(typeof e!="string"||!bf.test(e))throw Pe("INVALID_PARAMS",`${t} key 仅支持 1-64 位字母、数字、下划线和连字符`);return{key:e}}function Cf(e){if(!Pc(e))throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须是对象");let t;try{t=JSON.stringify(e)}catch{throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化")}if(typeof t!="string")throw Pe("INVALID_PARAMS","cloud.leaderboard.submit extra 必须可序列化");if(new TextEncoder().encode(t).length>ws)throw Pe("INVALID_PARAMS",`cloud.leaderboard.submit extra 不能超过 ${ws} 字节`);return e}function Pc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(e,t){return{code:e,message:t}}const Pf=new Set(["stdio","attachments","notifications"]),Rc=new Set(["windows-x64","macos-arm64"]),Rf=new Set(["unsigned","valid","invalid","unknown"]),kf=/^[a-f0-9]{64}$/,xf=new Set(["exited","terminated","crashed","host-shutdown","permission-revoked","output-limit"]),jf=new Set(hc),zf=new Set([...hc,"PERMISSION_DENIED","USER_GESTURE_REQUIRED"]),kc=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 Uf(e){const t=async(n,i,o,s)=>{const a=Hf(n);try{Le(i.signal);const c=await o(a,{...e.operationContext,signal:i.signal});return Le(i.signal),c}catch(c){throw Ki(c,s)}},r=async(n,i,o)=>{if(!o.trustedUserGesture)throw y("USER_GESTURE_REQUIRED","当前操作需要新的可信用户手势");if(!e.companionPresentation)throw y("COMPANION_UNSUPPORTED","Host 未提供 Companion 可信授权界面");const s={...e.operationContext,signal:o.signal},a=await e.companion.getInfo(i,s).then(d=>Ff(d,i)).catch(d=>{throw Ki(d)});Le(o.signal);const c=await e.companionPresentation.confirmCompanionOperation({action:n,companion:a,miniProgram:e.miniProgramPresentation,signal:o.signal});if(Le(o.signal),c.status!=="granted")throw y("COMPANION_USER_CANCELLED","用户取消了 Companion 操作")};return{[Rn]:(n,i)=>t(n,i,async(o,s)=>$i(await e.companion.getInfo(o,s),o)),[kn]:(n,i)=>t(n,i,async(o,s)=>Is(await e.companion.getPreparationStatus(o,s))),[xn]:(n,i)=>t(n,i,async(o,s)=>{const a=Is(await e.companion.getPreparationStatus(o,s));return Le(i.signal),a.state!=="ready"&&a.state!=="preparing"&&await r("prepare",o,i),Le(i.signal),$i(await e.companion.prepare(o,{...s,onProgress:c=>i.postProgress(jc(c))}),o)},"COMPANION_PREPARATION_CANCELLED"),[jn]:(n,i)=>t(n,i,(o,s)=>e.companion.cancelPreparation(o,s)),[zn]:(n,i)=>t(n,i,async(o,s)=>Ms(await e.companion.getActiveSession(o,s),o)),[Un]:(n,i)=>t(n,i,async(o,s)=>{const a=Ms(await e.companion.getActiveSession(o,s),o);return Le(i.signal),a||(await r("launch",o,i),Le(i.signal),zc(await e.companion.launch(o,s),o))}),[Hn]:(n,i)=>gt(n,i,e,"write"),[Fn]:(n,i)=>gt(n,i,e,"closeStdin"),[Vn]:(n,i)=>gt(n,i,e,"terminate"),[Bn]:(n,i)=>gt(n,i,e,"ackOutput"),[Qn]:async(n,i)=>{const o=await gt(n,i,e,"openAttachment");return e.fileRegistry.registerFile(o,"companion-attachment","read")},[Yn]:(n,i)=>gt(n,i,e,"showNotification")}}function Hf(e){if(!H(e)||typeof e.alias!="string"||!bu.test(e.alias))throw y("INVALID_PARAMS","Companion alias 不合法");return e.alias}function Le(e){if(e.aborted)throw Object.assign(new Error("Companion 操作已取消"),{name:"AbortError"})}async function gt(e,t,r,n){if(!H(e)||typeof e.sessionId!="string"||!e.sessionId||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0)throw y("INVALID_PARAMS","Companion Session controller 不合法");try{Le(t.signal);const i=await r.companion[n](Vf(e,n),{...r.operationContext,signal:t.signal});return Le(t.signal),i}catch(i){throw Ki(i)}}function Te(){throw y("COMPANION_HOST_FAILED","Companion Host 返回了无效数据")}function xc(e){return!Array.isArray(e)||e.some(t=>!Pf.has(t))?Te():Object.freeze([...new Set(e)])}function $i(e,t){return!H(e)||typeof e.alias!="string"||typeof e.displayName!="string"||t!==void 0&&e.alias!==t||!Rc.has(String(e.target))||!Number.isSafeInteger(e.archiveBytes)||Number(e.archiveBytes)<0||!Rf.has(String(e.signatureStatus))||e.source!==void 0&&e.source!=="local-dev"&&e.source!=="preview"&&e.source!=="released"?Te():Object.freeze({alias:e.alias,displayName:e.displayName,target:e.target,capabilities:xc(e.capabilities),archiveBytes:e.archiveBytes,signatureStatus:e.signatureStatus,...e.source===void 0?{}:{source:e.source}})}function Ff(e,t){const r=$i(e,t);return!H(e)||e.sha256===void 0?r:typeof e.sha256!="string"||!kf.test(e.sha256)?Te():Object.freeze({...r,sha256:e.sha256})}function jc(e){return H(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}):Te():Te()}function Is(e){return H(e)?e.state==="not-prepared"?Object.freeze({state:"not-prepared"}):e.state==="preparing"?Object.freeze({state:"preparing",progress:jc(e.progress)}):e.state==="ready"&&Number.isSafeInteger(e.preparedAt)&&Number(e.preparedAt)>=0?Object.freeze({state:"ready",preparedAt:e.preparedAt}):e.state==="failed"&&H(e.error)&&typeof e.error.code=="string"&&jf.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:kc[e.error.code]??"Companion 操作失败",retryable:e.error.retryable})}):Te():Te()}function zc(e,t){return!H(e)||typeof e.id!="string"||!e.id||typeof e.alias!="string"||t!==void 0&&e.alias!==t||!Rc.has(String(e.target))||e.state!=="running"||!Number.isSafeInteger(e.controllerGeneration)||Number(e.controllerGeneration)<0?Te():Object.freeze({id:e.id,alias:e.alias,target:e.target,capabilities:xc(e.capabilities),state:"running",controllerGeneration:e.controllerGeneration})}function Ms(e,t){return e===void 0?void 0:zc(e,t)}function Vf(e,t){const r=e,n={sessionId:r.sessionId,controllerGeneration:r.controllerGeneration};if(t==="write"){if(!dc(r.data))throw y("INVALID_PARAMS","Companion write data 不合法");return{...n,data:new Uint8Array(r.data)}}if(t==="ackOutput"){if(r.stream!=="stdout"&&r.stream!=="stderr"||!Number.isSafeInteger(r.sequence)||Number(r.sequence)<0)throw y("INVALID_PARAMS","Companion output ack 不合法");return{...n,stream:r.stream,sequence:r.sequence}}if(t==="openAttachment"){if(typeof r.id!="string"||!r.id)throw y("INVALID_PARAMS","Companion Attachment ID 不合法");return{...n,id:r.id}}if(t==="showNotification"){if(!["completed","failed","stopped","attention"].includes(String(r.category)))throw y("INVALID_PARAMS","Companion notification category 不合法");return{...n,category:r.category}}return n}function Bf(e){return!H(e)||!xf.has(String(e.reason))?Te():e.reason==="exited"?Number.isSafeInteger(e.exitCode)?Object.freeze({reason:"exited",exitCode:e.exitCode}):Te():e.exitCode!==void 0&&!Number.isSafeInteger(e.exitCode)?Te():Object.freeze({reason:e.reason,...e.exitCode===void 0?{}:{exitCode:e.exitCode}})}function Qf(e){if(!H(e)||!H(e.payload)||typeof e.payload.sessionId!="string"||!e.payload.sessionId)return;const t=e.payload,r=t.sessionId;if(e.type==="companion.session.output")return!Number.isSafeInteger(t.controllerGeneration)||Number(t.controllerGeneration)<0||t.stream!=="stdout"&&t.stream!=="stderr"||!Number.isSafeInteger(t.sequence)||Number(t.sequence)<0||!dc(t.data)?void 0:{type:e.type,payload:{sessionId:r,controllerGeneration:t.controllerGeneration,stream:t.stream,sequence:t.sequence,data:new Uint8Array(t.data)}};if(e.type==="companion.session.exit")try{return{type:e.type,payload:{sessionId:r,exit:Bf(t.exit)}}}catch{return}if(e.type==="companion.session.ownershipLost"&&Number.isSafeInteger(t.controllerGeneration)&&Number(t.controllerGeneration)>=0)return{type:e.type,payload:{sessionId:r,controllerGeneration:t.controllerGeneration}}}function Ki(e,t){return H(e)&&typeof e.code=="string"&&zf.has(e.code)?y(e.code,kc[e.code]??"Companion 操作失败",e.code==="COMPANION_DESCRIPTOR_UNAVAILABLE"?{retryable:!0}:typeof e.retryable=="boolean"?{retryable:e.retryable}:void 0):t&&H(e)&&e.name==="AbortError"?y(t,"Companion 准备已取消"):y("COMPANION_HOST_FAILED","Companion Host 操作失败")}const Ns=5e3,As=1e4;function ue(e){throw{code:"INVALID_PARAMS",message:e}}function Oo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Uc(e,t,r){const n=Object.keys(e).filter(i=>!t.includes(i));n.length&&ue(`${r} 不支持字段: ${n.join(", ")}`)}function Yf(e){if(e===void 0)return{intensity:"light",delay:0};if(!Oo(e))return ue("device.vibrate 参数必须是对象");Uc(e,["intensity","delay"],"device.vibrate");const t=e.intensity??"light";if(t!=="light"&&t!=="medium"&&t!=="heavy")return ue("device.vibrate intensity 必须是 light、medium 或 heavy");const r=t,n=e.delay??0;return typeof n!="number"||!Number.isInteger(n)||n<0||n>Ns?ue(`device.vibrate delay 必须是 0-${Ns} 的整数毫秒`):{intensity:r,delay:n}}function Gf(e){return Oo(e)?(Uc(e,["text"],"device.setClipboard"),typeof e.text!="string"||!e.text.trim()?ue("device.setClipboard text 必须是非空字符串"):e.text.length>As?ue(`device.setClipboard text 不能超过 ${As} 字符`):{text:e.text}):ue("device.setClipboard 参数必须是对象")}function qf(e){return typeof e=="string"?e.trim()?e:ue("device.executeProtocol 协议字符串不能为空"):Oo(e)?typeof e.protocol_type!="string"||!e.protocol_type.trim()?ue("device.executeProtocol 协议对象必须包含非空字符串 protocol_type"):(Ji(e,new Set),e):ue("device.executeProtocol 参数必须是协议字符串或协议对象")}function Ji(e,t){if(e===null)return;switch(typeof e){case"string":case"boolean":return;case"number":Number.isFinite(e)||ue("device.executeProtocol 协议对象不能包含非有限数字");return;case"undefined":ue("device.executeProtocol 协议对象不能包含 undefined");return;case"function":case"symbol":case"bigint":ue(`device.executeProtocol 协议对象只能包含 JSON 数据,不能包含 ${typeof e}`);return}const r=e;if(t.has(r)&&ue("device.executeProtocol 协议对象不能包含循环引用"),t.add(r),Array.isArray(r)){for(const i of r)Ji(i,t);t.delete(r);return}const n=Object.getPrototypeOf(r);n!==Object.prototype&&n!==null&&ue("device.executeProtocol 协议对象只能包含普通 JSON 对象,不能包含类实例或特殊对象");for(const i of Object.values(r))Ji(i,t);t.delete(r)}function Wf(e){return{[Mn]:async t=>{ee(e.operationContext.signal),await W(()=>e.presentation.vibrate(Yf(t),e.operationContext),e.operationContext.signal)},[Nn]:async t=>{ee(e.operationContext.signal),await W(()=>e.presentation.setClipboard(Gf(t),e.operationContext),e.operationContext.signal)},[An]:async(t,r)=>{const n=at(e.operationContext,r.signal);ee(n.signal);const i=qf(t);await W(()=>e.protocol.invoke(i,n),n.signal)}}}const $f=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"]),Kf={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 ur(e){const t=_o(e),r=t&&$f.has(t)?y(t,Kf[t]??"文件操作失败"):y("FILE_IO_FAILED","文件操作失败");return Object.defineProperty(r,"cause",{value:e,enumerable:!1}),r}function ke(e){try{return e()}catch(t){throw ur(t)}}function _o(e){try{if(!H(e))return;const t=Object.getOwnPropertyDescriptor(e,"code");return t&&"value"in t&&typeof t.value=="string"?t.value:void 0}catch{return}}function Hc(e,t,r={}){const n=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=n==="readwrite",o=r.allowRemove!==!1&&typeof e.remove=="function";return Object.freeze({kind:"file",name:e.name,mode:n,create:i?(s,a)=>e.create(s,a):Zi,remove:o?s=>e.remove(s):Vc,read:s=>e.read(s),write:i?(s,a)=>e.write(s,a):Zi,stat:s=>e.stat(s)})}function Fc(e,t,r={}){const n=t==="readwrite"&&e.mode==="readwrite"?"readwrite":"read",i=n==="readwrite",o=r.allowRemove!==!1,s=o&&typeof e.remove=="function";return Object.freeze({kind:"directory",name:e.name,mode:n,file:a=>Hc(e.file(a),n,{allowRemove:o}),directory:a=>Fc(e.directory(a),n,{allowRemove:o}),create:i?(a,c)=>e.create(a,c):Zi,remove:s?(a,c)=>e.remove(a,c):Vc,stat:a=>e.stat(a),list:(a,c)=>e.list(a,c)})}function Zi(){return Promise.reject(y("FILE_ACCESS_DENIED","当前文件授权只允许读取"))}function Vc(){return Promise.reject(y("FILE_ACCESS_DENIED","外部文件授权不允许删除"))}const Ds=1024;class Jf{constructor(t,r){this.files=t,this.miniProgramDetail=r}handles=new Map;disposed=!1;dispose(){this.disposed||(this.disposed=!0,this.handles.clear())}registerFile(t,r="external",n){this.assertCanonicalDetail();const i=this.prepareFile(t,r,n),[o]=this.registerMany([i]);return Or(i.handle,{kind:"file",handleId:o})}registerFiles(t,r="external",n,i){this.assertCanonicalDetail();const o=ke(()=>{if(!Array.isArray(t))throw y("FILE_IO_FAILED","Host 返回了无效文件选择结果");const a=t.length;if(i!==void 0&&a>i)throw y("FILE_IO_FAILED","Host 返回了过多文件选择结果");if(this.handles.size+a>Ds)throw y("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const c=[];for(let d=0;d<a;d+=1){if(!Object.prototype.hasOwnProperty.call(t,d))throw y("FILE_IO_FAILED","Host 返回了稀疏文件选择结果");c.push(this.prepareFile(t[d],r,n))}return c}),s=this.registerMany(o);return o.map((a,c)=>Or(a.handle,{kind:"file",handleId:s[c]}))}registerDirectory(t,r="external",n){this.assertCanonicalDetail();const i=this.prepareDirectory(t,r,n),[o]=this.registerMany([i]);return Ss(i.handle,{kind:"directory",handleId:o})}resolveFile(t){return this.resolveFileEntry(t).handle}resolveDirectory(t){return this.resolveDirectoryEntry(t).handle}isCompanionAttachmentRef(t){return!Gn(t)||!("handleId"in t)?!1:this.handles.get(t.handleId)?.origin==="companion-attachment"}resolveFileEntry(t){this.assertCanonicalDetail();const r=Xf(t);if("handleId"in r){const s=this.readDirect(r.handleId,"file");return{ref:r,...s}}const n=this.resolveRoot(r.root),i=lr(r.relativePath),o=this.prepareFile(ke(()=>n.hostHandle.file(i)),n.origin,n.handle.mode);return{ref:r,...o}}resolveDirectoryEntry(t){this.assertCanonicalDetail();const r=eh(t);if("handleId"in r){const s=this.readDirect(r.handleId,"directory");return{ref:r,...s}}const n=this.resolveRoot(r.root),i=r.relativePath==="."?".":lr(r.relativePath),o=this.prepareDirectory(i==="."?n.hostHandle:ke(()=>n.hostHandle.directory(i)),n.origin,n.handle.mode,!0);return{ref:r,...o}}describeFile(t,r){return Os(t),Or(t,r)}describeListedEntries(t,r,n){return this.assertCanonicalDetail(),ke(()=>{if(!Array.isArray(r))throw y("FILE_IO_FAILED","Host 返回了无效目录列表");const i=r.length;if(i>n)throw y("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项数量超过限制");const o=[];for(let s=0;s<i;s+=1){if(!Object.prototype.hasOwnProperty.call(r,s))throw y("FILE_IO_FAILED","Host 返回了稀疏目录列表");o.push(this.describeListedEntry(t,r[s]))}return this.assertCanonicalDetail(),o})}describeListedEntry(t,r){return ke(()=>{if(H(r)&&r.kind==="file"){const n=this.prepareFile(r,t.origin,t.handle.mode);return Or(n.handle,Ts(t.ref,n.handle.name))}if(H(r)&&r.kind==="directory"){const n=this.prepareDirectory(r,t.origin,t.handle.mode);return Ss(n.handle,Zf(t.ref,n.handle.name))}throw y("FILE_IO_FAILED","Host 返回了无效目录项")})}deriveFile(t,r){this.assertCanonicalDetail();const n=Ir(r),i=this.prepareFile(ke(()=>t.hostHandle.file(n)),t.origin,t.handle.mode);return{ref:Ts(t.ref,n),...i}}assertSandboxOrigin(t){if(t.origin!=="sandbox")throw y("FILE_ACCESS_DENIED","外部文件授权不允许删除")}prepareFile(t,r,n){return ke(()=>{Os(t);const i=n??t.mode;return bs(t.mode,i),{handle:Hc(t,i,{allowRemove:r==="sandbox"}),hostHandle:t,origin:r}})}prepareDirectory(t,r,n,i=!1){return ke(()=>{nh(t,i);const o=n??t.mode;return bs(t.mode,o),{handle:Fc(t,o,{allowRemove:r==="sandbox"}),hostHandle:t,origin:r}})}registerMany(t){if(this.assertCanonicalDetail(),this.handles.size+t.length>Ds)throw y("FILE_QUOTA_EXCEEDED","当前会话的文件授权句柄已达上限");const r=new Set,n=t.map(()=>{for(let i=0;i<8;i+=1){const o=th();if(!this.handles.has(o)&&!r.has(o))return r.add(o),o}throw y("FILE_IO_FAILED","无法创建文件授权句柄")});return t.forEach((i,o)=>this.handles.set(n[o],i)),n}readDirect(t,r){if(!rh(t))throw y("FILE_ACCESS_REVOKED","文件授权句柄无效");const n=this.handles.get(t);if(!n)throw y("FILE_ACCESS_REVOKED","文件授权已失效");if(n.handle.kind!==r||n.hostHandle.kind!==r)throw y("FILE_TYPE_MISMATCH","文件句柄类型不匹配");return n}resolveRoot(t){if(this.assertCanonicalDetail(),t.kind==="sandbox"){if(!this.files)throw De("files.sandbox");return this.prepareDirectory(ke(()=>this.files.sandbox),"sandbox",void 0,!0)}return this.readDirect(t.handleId,"directory")}assertCanonicalDetail(){if(this.disposed)throw y("FILE_ACCESS_REVOKED","文件授权已失效");if(!this.miniProgramDetail?.miniProgramId.trim())throw De("files")}}function lr(e){if(!Mo(e))throw y("INVALID_PARAMS","relativePath 不是规范逻辑路径");return e}function Ir(e,t="文件名"){const r=lr(e);if(r.includes("/"))throw y("INVALID_PARAMS",`${t} 只能是 basename`);return r}function Ts(e,t){return"handleId"in e?{kind:"file",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"file",root:e.root,relativePath:lr(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Zf(e,t){return"handleId"in e?{kind:"directory",root:{kind:"directory",handleId:e.handleId},relativePath:t}:{kind:"directory",root:e.root,relativePath:lr(e.relativePath==="."?t:`${e.relativePath}/${t}`)}}function Or(e,t){return{kind:"file",name:e.name,mode:e.mode,ref:t}}function Ss(e,t){return{kind:"directory",name:e.name,mode:e.mode,ref:t}}function bs(e,t){if(t==="readwrite"&&e!=="readwrite")throw y("FILE_ACCESS_DENIED","Host 未授予请求的文件写权限")}function Xf(e){return Gn(e)||Bc(),e}function eh(e){return cc(e)||Bc(),e}function Bc(){throw y("INVALID_PARAMS","文件引用不合法")}function th(){const e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw y("FILE_IO_FAILED","当前环境缺少安全随机数能力");const t=e.getRandomValues(new Uint8Array(16));return Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}function rh(e){return/^[0-9a-f]{32}$/.test(e)}function Os(e){if(!H(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 y("FILE_IO_FAILED","Host 返回了无效 File handle");Ir(e.name,"Host File name")}function nh(e,t=!1){if(!H(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 y("FILE_IO_FAILED","Host 返回了无效 Directory handle");if(!t&&e.name.length===0)throw y("FILE_IO_FAILED","Host Directory name 不能为空");e.name&&Ir(e.name,"Host Directory name")}const _s=1e3,ih=new Set(["FILE_NOT_FOUND","DIRECTORY_NOT_FOUND","FILE_TYPE_MISMATCH"]);function oh(e){const t=r=>at(e.operationContext,r.signal);return{files:{[dn]:async(r,n)=>{di(n);const i=ui(e.picker),o=sh(r),s=await he(()=>i.pickFiles(o,t(n)));return e.registry.registerFiles(s,"external",o.mode,o.multiple?void 0:1)},[un]:async(r,n)=>{di(n);const i=ui(e.picker),o=ah(r),s=await he(()=>i.pickDirectory(o,t(n)));return e.registry.registerDirectory(s,"external",o.mode)},[ln]:async(r,n)=>{di(n);const i=ui(e.picker),o=ch(r).suggestedName,s=t(n);if(!i.saveFile)throw De("files.saveFile");const a=await he(()=>i.saveFile({suggestedName:o},s));return e.registry.registerFile(a,"external","readwrite")}},file:{[nr]:async(r,n)=>{const i=ye(r,["recursive","exclusive"]),o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.create(Ls(i),t(n)))},[ir]:async(r,n)=>{const i=ye(r),o=e.registry.resolveFileEntry(i.target);if(e.registry.assertSandboxOrigin(o),pt(o.handle.mode),!o.handle.remove)throw De(ir);await he(()=>o.handle.remove(t(n)))},[fn]:async(r,n)=>{const i=ye(r);return vs(async()=>{const o=await e.registry.resolveFile(i.target).stat(t(n));if(!H(o)||o.kind!=="file")throw Ps()})},[or]:async(r,n)=>{const i=ye(r),o=Cs(await he(()=>e.registry.resolveFile(i.target).read(t(n))));try{const s=new TextDecoder("utf-8",{fatal:!0}).decode(o);return s.charCodeAt(0)===65279?s.slice(1):s}catch{throw y("FILE_ENCODING_INVALID","文件不是合法 UTF-8 文本")}},[hn]:async(r,n)=>{const i=ye(r,["content"]);typeof i.content!="string"&&Ie("content 必须是字符串");const o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.write(new TextEncoder().encode(i.content),t(n)))},[sr]:async(r,n)=>{const i=ye(r),o=await he(()=>e.registry.resolveFile(i.target).read(t(n)));return Cs(o)},[mn]:async(r,n)=>{const i=ye(r,["content"]),o=e.registry.resolveFile(i.target);pt(o.mode),await he(()=>o.write(uh(i.content),t(n)))},[ar]:async(r,n)=>{const i=ye(r),o=await he(()=>e.registry.resolveFile(i.target).stat(t(n)));return lh(o)}},directory:{[gn]:async(r,n)=>{const i=ye(r,["recursive","exclusive"]),o=e.registry.resolveDirectory(i.target);pt(o.mode),await he(()=>o.create(Ls(i),t(n)))},[cr]:async(r,n)=>{const i=ye(r,["recursive"]);if(H(i.target)&&i.target.relativePath===".")throw y("FILE_ACCESS_DENIED","不能删除根目录");const o=e.registry.resolveDirectoryEntry(i.target);if(e.registry.assertSandboxOrigin(o),pt(o.handle.mode),!o.handle.remove)throw De(cr);await he(()=>o.handle.remove({recursive:i.recursive===void 0?!1:On(i.recursive,"recursive")},t(n)))},[pn]:async(r,n)=>{const i=ye(r);return vs(async()=>{const o=await e.registry.resolveDirectory(i.target).stat(t(n));if(!H(o)||o.kind!=="directory")throw Ps()})},[yn]:async(r,n)=>{const i=ye(r,["limit"]),o=dh(i.limit),s=e.registry.resolveDirectoryEntry(i.target),a=await he(()=>s.handle.list({limit:o},t(n)));return e.registry.describeListedEntries(s,a,o)}}}}function sh(e){if(e===void 0)return{mode:"read",multiple:!1};H(e)||Ie("pickFiles 参数必须是对象"),Wn(e,["mode","accept","multiple"]);const t=Qc(e.mode,"read"),r=e.multiple===void 0?!1:On(e.multiple,"multiple");let n;return e.accept!==void 0&&((!Array.isArray(e.accept)||e.accept.some(i=>typeof i!="string"||!/^\.[a-z0-9][a-z0-9._-]*$/i.test(i)))&&Ie("accept 必须是规范扩展名数组"),n=[...new Set(e.accept)]),{mode:t,multiple:r,...n===void 0?{}:{accept:n}}}function ah(e){return e===void 0?{mode:"read"}:(H(e)||Ie("pickDirectory 参数必须是对象"),Wn(e,["mode"]),{mode:Qc(e.mode,"read")})}function ch(e){return H(e)||Ie("saveFile 参数必须是对象"),Wn(e,["suggestedName"]),{suggestedName:Ir(e.suggestedName,"suggestedName")}}function ye(e,t=[]){return(!H(e)||!Object.prototype.hasOwnProperty.call(e,"target"))&&Ie("文件操作参数必须包含 target"),Wn(e,["target",...t]),e}function Ls(e){return{recursive:e.recursive===void 0?!1:On(e.recursive,"recursive"),exclusive:e.exclusive===void 0?!1:On(e.exclusive,"exclusive")}}function Qc(e,t){return e===void 0?t:(e!=="read"&&e!=="readwrite"&&Ie("mode 必须是 read 或 readwrite"),e)}function On(e,t){return typeof e!="boolean"&&Ie(`${t} 必须是布尔值`),e}function dh(e){if(e===void 0)return _s;if((!Number.isSafeInteger(e)||e<=0)&&Ie("limit 必须是正整数"),e>_s)throw y("DIRECTORY_LIST_LIMIT_EXCEEDED","目录项限制超过 Host 上限");return e}function Wn(e,t){const r=Object.keys(e).filter(n=>!t.includes(n));r.length&&Ie(`不支持字段: ${r.join(", ")}`)}function pt(e){if(e!=="readwrite")throw y("FILE_ACCESS_DENIED","当前文件授权只允许读取")}function di(e){if(!e.trustedUserGesture)throw y("USER_GESTURE_REQUIRED","当前操作需要可信用户手势")}function ui(e){if(!e)throw De("files.external");return e}async function vs(e){try{return await e(),!0}catch(t){if(ih.has(_o(t)??""))return!1;throw ur(t)}}async function he(e){try{return await e()}catch(t){throw ur(t)}}function uh(e){return e instanceof Uint8Array||Ie("content 必须是 Uint8Array"),typeof SharedArrayBuffer<"u"&&e.buffer instanceof SharedArrayBuffer&&Ie("不支持 SharedArrayBuffer-backed Uint8Array"),new Uint8Array(e)}function Cs(e){if(!(e instanceof Uint8Array))throw y("FILE_IO_FAILED","Host 返回了无效字节数据");return new Uint8Array(e)}function Ps(){return y("FILE_TYPE_MISMATCH","文件句柄类型不匹配")}function lh(e){if(!H(e)||e.kind!=="file"||!fh(e.size))throw y("FILE_IO_FAILED","Host 返回了无效 FileStat");for(const t of["modifiedAt","createdAt"])if(e[t]!==void 0&&!hh(e[t]))throw y("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 fh(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}function hh(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Ie(e){throw y("INVALID_PARAMS",e)}const _r=4294967296;function mh(e){const t=new gh;return t.write(e),t.finish()}class gh{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<_r?(this.writeUint8(206),this.writeUint32(t)):(this.writeUint8(207),this.writeUint64(t));return}t>=-32?this.writeUint8(224|t+32):t>=-128?(this.writeUint8(208),this.writeInt8(t)):t>=-32768?(this.writeUint8(209),this.writeInt16(t)):t>=-2147483648?(this.writeUint8(210),this.writeInt32(t)):(this.writeUint8(211),this.writeInt64(t))}writeString(t){const r=ph(t),n=r.byteLength;if(n<32)this.writeUint8(160+n);else if(n<256)this.writeUint8(217),this.writeUint8(n);else if(n<65536)this.writeUint8(218),this.writeUint16(n);else if(n<_r)this.writeUint8(219),this.writeUint32(n);else throw new Error("share extra string is too long");this.writeBytes(r)}writeArray(t){const r=t.length;r<16?this.writeUint8(144+r):r<65536?(this.writeUint8(220),this.writeUint16(r)):(this.writeUint8(221),this.writeUint32(r));for(const n of t)this.write(n)}writeMap(t){const r=Object.keys(t),n=r.length;n<16?this.writeUint8(128+n):n<65536?(this.writeUint8(222),this.writeUint16(n)):(this.writeUint8(223),this.writeUint32(n));for(const i of r)this.writeString(i),this.write(t[i])}ensureCapacity(t){const r=this.offset+t;if(r<=this.bytes.byteLength)return;const n=new Uint8Array(Math.max(r,this.bytes.byteLength*2));n.set(this.bytes),this.bytes=n,this.view=new DataView(n.buffer)}writeBytes(t){this.ensureCapacity(t.byteLength),this.bytes.set(t,this.offset),this.offset+=t.byteLength}writeUint8(t){this.ensureCapacity(1),this.view.setUint8(this.offset,t),this.offset+=1}writeInt8(t){this.ensureCapacity(1),this.view.setInt8(this.offset,t),this.offset+=1}writeUint16(t){this.ensureCapacity(2),this.view.setUint16(this.offset,t),this.offset+=2}writeInt16(t){this.ensureCapacity(2),this.view.setInt16(this.offset,t),this.offset+=2}writeUint32(t){this.ensureCapacity(4),this.view.setUint32(this.offset,t),this.offset+=4}writeInt32(t){this.ensureCapacity(4),this.view.setInt32(this.offset,t),this.offset+=4}writeFloat64(t){this.ensureCapacity(8),this.view.setFloat64(this.offset,t),this.offset+=8}writeUint64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,t/_r),this.view.setUint32(this.offset+4,t),this.offset+=8}writeInt64(t){this.ensureCapacity(8),this.view.setUint32(this.offset,Math.floor(t/_r)),this.view.setUint32(this.offset+4,t),this.offset+=8}}function ph(e){const t=new Uint8Array(yh(e));let r=0,n=0;for(;r<e.length;){let i=e.charCodeAt(r++);if(i>=55296&&i<=56319&&r<e.length){const o=e.charCodeAt(r);o>=56320&&o<=57343&&(r+=1,i=((i&1023)<<10)+(o&1023)+65536)}i<128?t[n++]=i:i<2048?(t[n++]=i>>6&31|192,t[n++]=i&63|128):i<65536?(t[n++]=i>>12&15|224,t[n++]=i>>6&63|128,t[n++]=i&63|128):(t[n++]=i>>18&7|240,t[n++]=i>>12&63|128,t[n++]=i>>6&63|128,t[n++]=i&63|128)}return t}function yh(e){let t=0,r=0;for(;r<e.length;){let n=e.charCodeAt(r++);if(n<128)t+=1;else if(n<2048)t+=2;else{if(n>=55296&&n<=56319&&r<e.length){const i=e.charCodeAt(r);i>=56320&&i<=57343&&(r+=1,n=((n&1023)<<10)+(i&1023)+65536)}t+=n<65536?3:4}}return t}function Yc(e){Xi(e);const t=mh(e);if(t.byteLength>128)throw new Error("launch extra is too large");return btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Xi(e,t=0,r=new WeakSet){if(t>8)throw new Error("extra nesting depth exceeded");if(e===null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){if(Number.isFinite(e))return;throw new Error("extra number must be finite")}if(typeof e!="object")throw new Error("extra value must be JSON-compatible");if(r.has(e))throw new Error("extra value must not contain cycles");if(r.add(e),Array.isArray(e)){if(e.length>64)throw new Error("extra array is too large");for(const o of e)Xi(o,t+1,r);r.delete(e);return}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new Error("extra object must be a plain object");const i=Object.entries(e);if(i.length>64)throw new Error("extra object has too many fields");for(const[o,s]of i){if(o==="__proto__")throw new Error("extra object key is not supported");Xi(s,t+1,r)}r.delete(e)}const Eh=["pc","console","mobile"],wh=["game","wiki"];function _n(e){throw{code:"INVALID_PARAMS",message:e}}function Ih(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function qe(e,t){return typeof e!="string"||!e.trim()?_n(t):e.trim()}function Rs(e,t,r){return typeof e!="string"||!t.includes(e)?_n(r):e}function Mh(e){const t={target:"game_detail",appId:qe(e.appId,"navigation.openAppPage appId 必须是非空字符串"),gameType:Rs(e.gameType,Eh,"navigation.openAppPage gameType 必须是 pc、console 或 mobile")};return e.page!==void 0&&(t.page=Rs(e.page,wh,"navigation.openAppPage page 必须是 game 或 wiki")),e.hSrc!==void 0&&(t.hSrc=qe(e.hSrc,"navigation.openAppPage hSrc 必须是非空字符串")),e.skuId!==void 0&&(t.skuId=qe(e.skuId,"navigation.openAppPage skuId 必须是非空字符串")),t}function Nh(e){return{target:"user_detail",userId:qe(e.userId,"navigation.openAppPage userId 必须是非空字符串")}}function Ah(e){const t={target:"post_detail",linkId:qe(e.linkId,"navigation.openAppPage linkId 必须是非空字符串")};return e.rootCommentId!==void 0&&(t.rootCommentId=qe(e.rootCommentId,"navigation.openAppPage rootCommentId 必须是非空字符串")),e.commentId!==void 0&&(t.commentId=qe(e.commentId,"navigation.openAppPage commentId 必须是非空字符串")),t}function Dh(e){const t={target:"mini_program",miniProgramId:qe(e.miniProgramId,"navigation.openAppPage miniProgramId 必须是非空字符串")};return e.extra!==void 0&&(t.extra=e.extra),t}function Th(e){return Ih(e)?e.target==="game_detail"?Mh(e):e.target==="user_detail"?Nh(e):e.target==="post_detail"?Ah(e):e.target==="mini_program"?Dh(e):_n("navigation.openAppPage target 不支持"):_n("navigation.openAppPage options 必须是对象")}function Sh(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 bh(e){return{protocolType:"openRouterPath",path:"/user_home",params:{userid:e.userId}}}function Oh(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 _h(e){const t=e;return t.target==="game_detail"?Sh(t):t.target==="user_detail"?bh(t):Oh(t)}const Lh="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJJY29uIj4KPHBhdGggaWQ9IlVuaW9uIiBkPSJNNS4wMzMzOCAxLjI5Mjg5QzUuNDIzOSAwLjkwMjM2OSA2LjA1NzI0IDAuOTAyMzY5IDYuNDQ3NzYgMS4yOTI4OUM2LjgzODI3IDEuNjgzNDIgNi44MzgyOCAyLjMxNjc2IDYuNDQ3NzYgMi43MDcyN0w1LjIzODQ2IDMuOTE2NThIMTEuNjY2N0MxNS40NDA1IDMuOTE2NzEgMTguNTAwMSA2Ljk3NjIgMTguNTAwMSAxMC43NTAxQzE4LjUgMTQuNTIzOCAxNS40NDA0IDE3LjU4MzQgMTEuNjY2NyAxNy41ODM1SDMuMzMzMzVDMi43ODExMiAxNy41ODM1IDIuMzMzMjcgMTcuMTM1NiAyLjMzMzE5IDE2LjU4MzRDMi4zMzMxOSAxNi4wMzExIDIuNzgxMDcgMTUuNTgzMiAzLjMzMzM1IDE1LjU4MzJIMTEuNjY2N0MxNC4zMzU5IDE1LjU4MzEgMTYuNDk5NyAxMy40MTkzIDE2LjQ5OTggMTAuNzUwMUMxNi40OTk4IDguMDgwNzYgMTQuMzM1OSA1LjkxNzAzIDExLjY2NjcgNS45MTY5SDQuNTkwNjdMNi40NDc3NiA3Ljc3NDhDNi44MzgyMSA4LjE2NTMzIDYuODM4MjYgOC43OTg2OCA2LjQ0Nzc2IDkuMTg5MThDNi4wNTcyNCA5LjU3OTQ1IDUuNDIzODMgOS41Nzk1NiA1LjAzMzM4IDkuMTg5MThMMS43OTI4MyA1Ljk0NzgyQzEuNDAyMzEgNS41NTczIDEuNDAyMzEgNC45MjM5NiAxLjc5MjgzIDQuNTMzNDRMNS4wMzMzOCAxLjI5Mjg5WiIgZmlsbD0id2hpdGUiLz4KPC9nPgo8L3N2Zz4K",vh="data-hb-sdk-fullscreen-exit",Ch=3e3,Ph=2e3,ks="var(--white-70a,rgba(255,255,255,.7))",xs="0 0 var(--space-8,8px) var(--white-20a,rgba(255,255,255,.2))";function Rh(e){if(typeof document>"u"||!document.body)return;const t=document.createElement("button");t.type="button",t.setAttribute(vh,""),t.setAttribute("aria-label","退出全屏"),t.setAttribute("aria-expanded","true");const r=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches??!1;t.style.cssText=["position:fixed","right:0","top:50%","z-index:2147483647","box-sizing:border-box","width:48px","height:44px","padding:5px 0",`border:1px solid ${ks}`,`box-shadow:${xs}`,"border-radius:var(--radius-m-token,5px)","display:flex","flex-direction:column","align-items:center","justify-content:center","gap:3px","background:var(--general-color-text-2,#64696e)","color:var(--white-100a,#fff)",'font:400 var(--font-size-9,9px)/var(--line-height-12,12px) "PingFang SC",sans-serif',"cursor:pointer","touch-action:manipulation","opacity:1","transform:translateY(-50%)",r?"transition:none":"transition:width var(--token-transition-arrow,220ms cubic-bezier(.2,.8,.2,1))"].join(";");const n=document.createElement("img");n.src=Lh,n.alt="",n.draggable=!1,n.style.cssText="display:block;width:16px;height:16px;flex-shrink:0;";const i=document.createElement("span");i.textContent="退出全屏",i.style.cssText="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;",t.append(n,i);let o=!0,s=!1,a=!1,c,d;function l(){return window.innerWidth>window.innerHeight?"var(--space-12,12px)":"var(--space-8,8px)"}function h(){o||(t.style.width=l())}function u(){d?.cancel(),d=void 0}function g(S=Ph){clearTimeout(c),c=setTimeout(()=>{u(),o=!1,t.style.width=l(),t.style.opacity="0.5",t.style.borderColor="var(--white-40a,rgba(255,255,255,.4))",t.style.boxShadow="none",n.style.visibility="hidden",i.style.display="none",t.setAttribute("aria-label","展开退出全屏按钮"),t.setAttribute("aria-expanded","false")},S)}function T(){u(),o=!0,t.style.width="48px",t.style.opacity="1",t.style.borderColor=ks,t.style.boxShadow=xs,n.style.visibility="",i.style.display="",t.setAttribute("aria-label","退出全屏"),t.setAttribute("aria-expanded","true"),g()}async function M(){if(!(s||a)){if(!o){T();return}a=!0,clearTimeout(c),u();try{await e()}catch{}finally{a=!1,s||T()}}}return t.addEventListener("click",M),window.addEventListener("resize",h),document.body.append(t),!r&&t.animate&&(d=t.animate([{transform:"translate(48px,-50%)",opacity:0,offset:0},{transform:"translate(0,-50%)",opacity:1,offset:.2},{transform:"translate(-6px,-50%)",offset:.4},{transform:"translate(0,-50%)",offset:.55},{transform:"translate(-6px,-50%)",offset:.75},{transform:"translate(0,-50%)",offset:1}],{duration:900,easing:"ease-in-out"})),g(Ch),{dispose(){s=!0,clearTimeout(c),u(),t.removeEventListener("click",M),window.removeEventListener("resize",h),t.remove()}}}const Gc=1e4;function qc(e){const t=new AbortController;let r;const n=()=>{r??={code:"REQUEST_CANCELLED",message:"方向设置已取消"},t.abort()};e.addEventListener("abort",n,{once:!0}),e.aborted&&n();const i=setTimeout(()=>{r??={code:"ORIENTATION_TIMEOUT",message:"方向切换超时"},t.abort()},Gc);return{signal:t.signal,async run(o){try{return await W(o,t.signal)}catch(s){throw r??s}},dispose(){clearTimeout(i),e.removeEventListener("abort",n)}}}function Wc(e){if(typeof e!="object"||e===null||Array.isArray(e))throw{code:"INVALID_PARAMS",message:"viewport.setDisplay 参数必须是对象"};const{orientation:t,fullscreen:r}=e;if(t!==void 0&&t!=="portrait"&&t!=="landscape")throw{code:"INVALID_PARAMS",message:"viewport.setDisplay orientation 必须是 portrait 或 landscape"};if(r!==void 0&&typeof r!="boolean")throw{code:"INVALID_PARAMS",message:"viewport.setDisplay fullscreen 必须是布尔值"};if(t===void 0&&r===void 0)throw{code:"INVALID_PARAMS",message:"viewport.setDisplay 至少设置 orientation 或 fullscreen"};return{orientation:t,fullscreen:r}}function li(e,t){return e.mode===t.mode&&e.hideCapsule===t.hideCapsule}function Lr(){return{code:"REQUEST_CANCELLED",message:"方向设置已取消"}}function kh(e){let t,r,n={mode:"portrait",hideCapsule:!1},i={mode:"portrait",hideCapsule:!1},o;function s(){o?.dispose(),o=void 0}function a(u){if(!u.hideCapsule){s();return}o??=Rh(()=>h.apply({orientation:"portrait",fullscreen:!1},void 0,"user"))}e.operationContext.signal.addEventListener("abort",s,{once:!0});function c(u,g){if(t===u){if(t=void 0,clearTimeout(u.timer),e.operationContext.signal.removeEventListener("abort",d),"error"in g)u.controller.abort();else if(r={options:u.options,result:g.result},n=u.options,a(u.options),e.onApplied?.(u.options),g.result.supported&&!li(i,u.options)){i={...u.options};try{e.onDisplayChange?.({orientation:i.mode,fullscreen:i.hideCapsule,source:u.source})}catch{}}for(const T of u.subscribers)T.dispose(),"error"in g?T.reject(g.error):T.resolve(g.result);u.subscribers.clear()}}function d(){t&&c(t,{error:Lr()})}function l(u,g){return new Promise((T,M)=>{const S=()=>{u.subscribers.delete(I),I.dispose(),M(Lr()),u.subscribers.size===0&&c(u,{error:Lr()})},I={resolve:T,reject:M,dispose:()=>g?.removeEventListener("abort",S)};u.subscribers.add(I),g?.addEventListener("abort",S,{once:!0}),g?.aborted&&S()})}const h={async apply(u,g,T="api"){if(ee(e.operationContext.signal),g?.aborted)throw Lr();const M=Wc(u),S=t?.options??n,I={mode:M.orientation??S.mode,hideCapsule:M.fullscreen??S.hideCapsule};I.mode==="landscape"&&(I.hideCapsule=!0);const _=e.presentation.applyOrientation;if(!_)throw{code:"METHOD_FORBIDDEN",message:"当前宿主暂不支持方向控制"};if(t&&li(t.options,I))return l(t,g);if(t&&c(t,{error:{code:"ORIENTATION_SUPERSEDED",message:"方向设置已被后续设置替换"}}),r&&li(r.options,I))return r.result;r=void 0;const A={options:I,source:T,controller:new AbortController,subscribers:new Set};t=A;const v=l(A,g);return e.operationContext.signal.addEventListener("abort",d,{once:!0}),g||(A.timer=setTimeout(()=>{c(A,{error:{code:"ORIENTATION_TIMEOUT",message:"方向切换超时"}})},Gc)),W(()=>_.call(e.presentation,I,{...e.operationContext,signal:A.controller.signal}),A.controller.signal).then(U=>c(A,{result:U??{supported:!0}}),U=>c(A,{error:U})),v},dispose(){e.operationContext.signal.removeEventListener("abort",s),s()}};return h}function $c(e){throw{code:"INVALID_PARAMS",message:e}}function js(e,t){e!==void 0&&(typeof e!="object"||e===null||Array.isArray(e)||Object.keys(e).length)&&$c(`${t} 不支持参数`)}function xh(e){return{[Dn]:async t=>{ee(e.operationContext.signal),js(t,"navigation.close"),await W(()=>e.presentation.close(e.operationContext),e.operationContext.signal)},[Tn]:async t=>{ee(e.operationContext.signal),js(t,"navigation.reload"),await W(()=>e.presentation.reload(e.operationContext),e.operationContext.signal)},[Sn]:async(t,r)=>{const n=at(e.operationContext,r?.signal);ee(n.signal);const i=Th(t);if(i.target==="mini_program"){let o;if(i.extra!==void 0)try{o=Yc(i.extra)}catch{$c("navigation.openAppPage extra 必须是符合限制的 JSON-compatible 数据")}const s=e.resetDisplay;if(s){const a=qc(n.signal);try{await a.run(()=>s(a.signal))}finally{a.dispose()}}ee(n.signal),await W(()=>e.presentation.openWindow({miniProgramId:i.miniProgramId,...o===void 0?{}:{extra:o}},n),n.signal);return}await W(()=>e.presentation.openAppPage(_h(i),n),n.signal)}}}const jh=new Set(["content-length","content-encoding","transfer-encoding","content-disposition","content-range","content-type"]),zh=new Set(["content-length","content-encoding","content-disposition","content-range","content-type"]),Uh=new Set(["range","if-range","a-im"]),Hh=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"]),Fh=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i,vr={initial:0,target:1,open:2,validate:3,transfer:4,committed:5,completed:6};class Vh{constructor(t){this.signal=t}phase="initial";transition(t){if(vr[t]<=vr[this.phase])throw y("FILE_IO_FAILED","下载状态转换不合法");this.phase=t}throwIfCancelled(){if(vr[this.phase]<vr.committed&&this.signal.aborted)throw Jc()}normalizeHostError(t,r){return this.throwIfCancelled(),vo(t,r,this.signal)}}async function Bh(e,t,r){const n=r.transfer,i=r.fileRegistry;if(!n||!i)throw De("network.download");const o=at(r.operationContext,t.signal),s=new Vh(o.signal);s.transition("target"),s.throwIfCancelled();let a;try{a=await qh(e,i,o)}catch(l){throw s.normalizeHostError(l,"file")}s.throwIfCancelled();let c;s.transition("open");try{c=await n.network.open(e.request,o)}catch(l){throw s.normalizeHostError(l,"network")}let d=!1;try{s.throwIfCancelled(),s.transition("validate");const l=$h(c);Kh(c,l);const h=Jh(c.status,l);if(e.maxBytes!==void 0&&h.expectedBytes!==void 0&&h.expectedBytes>e.maxBytes)throw y("FILE_TOO_LARGE","下载响应超过 maxBytes");s.throwIfCancelled();const u=Wh(e,a,l,i);let g=0;const T=Yh(h.expectedBytes,e.maxBytes);hi(t,fi(0,h));const M={...o,onProgress(_){!Number.isSafeInteger(_)||_<g||T!==void 0&&_>T||(g=_,hi(t,fi(g,h)))}};s.transition("transfer"),d=!0;let S;try{S=await n.files.writeResource(u.hostHandle,c.body,{mode:u.mode,...e.maxBytes===void 0?{}:{maxBytes:e.maxBytes},...h.expectedBytes===void 0?{}:{expectedBytes:h.expectedBytes}},M)}catch(_){throw s.normalizeHostError(_,"transfer")}s.transition("committed"),g=Qh(S,h,g,e.maxBytes),hi(t,fi(g,h));const I=i.describeFile(u.handle,u.ref);return s.transition("completed"),I}finally{d||Gh(n.network,c.body)}}function Qh(e,t,r,n){if(t.expectedBytes!==void 0)return t.expectedBytes;const i=n===void 0?r:Math.min(r,n);try{const o=e?.committedBytes;if(typeof o=="number"&&Number.isSafeInteger(o)&&o>=i&&(n===void 0||o<=n))return o}catch{}return i}function Yh(e,t){return e===void 0?t:t===void 0?e:Math.min(e,t)}function Gh(e,t){try{Promise.resolve(e.release(t)).catch(()=>{})}catch{}}async function qh(e,t,r){if(e.targetKind==="file"){const i=t.resolveFileEntry(e.to);return eo(i.handle.mode),await im(i.handle,r),{kind:"file",...i}}const n=t.resolveDirectoryEntry(e.to);return eo(n.handle.mode),await om(n.handle,r),{kind:"directory",...n}}function Wh(e,t,r,n){if(t.kind==="file")return{ref:t.ref,handle:t.handle,hostHandle:t.hostHandle,mode:"replace-existing"};const i=Xh(e,r),o=n.deriveFile(t,i);return eo(o.handle.mode),{...o,mode:e.overwrite===!0?"upsert":"create-exclusive"}}function $h(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 y("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream response");if(!H(e.headers))throw y("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream headers");const t={};for(const[r,n]of Object.entries(e.headers)){if(r!==r.toLowerCase()||!jh.has(r)||!Array.isArray(n)||n.length===0)throw y("DOWNLOAD_NETWORK_FAILED","Host 返回了不安全 stream header");if(n.some(i=>typeof i!="string"||/[\r\n]/.test(i)))throw y("DOWNLOAD_NETWORK_FAILED","Host 返回了无效 stream header value");t[r]=[...n]}return t}function Kh(e,t){if(e.status<200||e.status>=300||e.status===206||e.status===226)throw y("DOWNLOAD_HTTP_STATUS",`下载请求失败: HTTP ${e.status}`,{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},headers:nm(t,zh)});if((t["content-range"]?.length??0)>0)throw y("DOWNLOAD_NETWORK_FAILED","下载响应包含 Content-Range")}function Jh(e,t){const r=t["content-length"]??[],n=t["transfer-encoding"]??[];if(r.length>0&&n.length>0)throw y("DOWNLOAD_NETWORK_FAILED","下载响应同时包含 Transfer-Encoding 与 Content-Length");if((e===204||e===205)&&r.some(d=>d!=="0"))throw y("DOWNLOAD_NETWORK_FAILED","无内容响应声明了非零 Content-Length");if((e===204||e===205)&&n.length>0)throw y("DOWNLOAD_NETWORK_FAILED","无内容响应不允许 Transfer-Encoding");const i=r.length===1&&/^(?:0|[1-9]\d*)$/.test(r[0])?Number(r[0]):void 0,o=i!==void 0&&Number.isSafeInteger(i)?i:void 0,s=Zh(t["content-encoding"]),a=e===204||e===205?0:n.length===0&&s?o:void 0,c=a!==void 0;return{...a===void 0?{}:{expectedBytes:a},...c?{total:a}:{},lengthComputable:c}}function Zh(e){return!e||e.length===0?!0:e.length===1&&e[0].trim().toLowerCase()==="identity"}function fi(e,t){return{loaded:e,...t.total===void 0?{}:{total:t.total},lengthComputable:t.lengthComputable}}function hi(e,t){try{e.postProgress(t)}catch{}}function Xh(e,t){const r=t["content-disposition"]??[];for(const i of r){const o=em(i);if(o&&Ur(o))return o}for(const i of r){const o=tm(i);if(o&&Ur(o))return o}if(e.suggestedName!==void 0)return Lo(e.suggestedName);const n=rm(e.url);return n&&Ur(n)?n:"download.bin"}function em(e){const t=/(?:^|;)\s*filename\*\s*=\s*([^;]+)/i.exec(e);if(!t)return;const r=t[1].trim().replace(/^"|"$/g,""),n=/^utf-8'[^']*'(.*)$/i.exec(r);if(n)try{return decodeURIComponent(n[1])}catch{return}}function tm(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 rm(e){const t=e.pathname.split("/").pop();if(t)try{return decodeURIComponent(t)}catch{return}}function Lo(e){try{Ir(e,"suggestedName")}catch{throw y("INVALID_PARAMS","suggestedName 不是安全 basename")}if(!Ur(e))throw y("INVALID_PARAMS","suggestedName 不是安全 basename");return e}function Ur(e){return!(!e||e==="."||e===".."||Array.from(e).length>255||/[\\/<>:"|?*\u0000-\u001f\u007f]/.test(e)||/[. ]$/.test(e)||Fh.test(e))}function nm(e,t){return Object.fromEntries(Object.entries(e).filter(([r])=>t.has(r)).map(([r,n])=>[r,n.join(", ")]))}async function im(e,t){try{const r=await e.stat(t);if(!r||r.kind!=="file")throw Kc()}catch(r){throw vo(r,"file",t.signal)}}async function om(e,t){try{const r=await e.stat(t);if(!r||r.kind!=="directory")throw Kc()}catch(r){throw vo(r,"file",t.signal)}}function eo(e){if(e!=="readwrite")throw y("FILE_ACCESS_DENIED","下载目标只允许读取")}const sm={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 vo(e,t,r){if(r.aborted)return Jc();const n=am(e);if(n&&Hh.has(n)){const o=y(n,sm[n]??"下载失败");return Object.defineProperty(o,"cause",{value:e,enumerable:!1}),o}if(e instanceof Error&&e.name==="AbortError")return t==="network"||t==="transfer"?y("DOWNLOAD_TIMEOUT","下载网络请求超时"):y("FILE_IO_FAILED","下载文件写入失败");const i=t==="network"?y("DOWNLOAD_NETWORK_FAILED","下载网络请求失败"):y("FILE_IO_FAILED","下载文件写入失败");return Object.defineProperty(i,"cause",{value:e,enumerable:!1}),i}function am(e){return H(e)&&typeof e.code=="string"?e.code:void 0}function Kc(){return y("FILE_TYPE_MISMATCH","下载目标类型不匹配")}function Jc(){return y("DOWNLOAD_CANCELLED","下载已取消")}function cm(e){if(!e)return;const t=Object.keys(e).find(r=>Uh.has(r.trim().toLowerCase()));if(t)throw y("INVALID_PARAMS",`network.download 不允许设置请求头: ${t}`)}const zs={UPLOAD_CANCELLED:"上传已取消",UPLOAD_TIMEOUT:"上传空闲超时",UPLOAD_NETWORK_FAILED:"上传网络失败",FILE_CHANGED:"上传源文件已变化",METHOD_FORBIDDEN:"当前 Host 未开放上传能力"};async function dm(e,t,r){const n=r.transfer?.upload,i=r.fileRegistry;if(!n||!i)throw De("network.upload");const o=at(r.operationContext,t.signal),s=()=>{if(o.signal.aborted)throw y("UPLOAD_CANCELLED","上传已取消")};s();let a,c;try{a=i.resolveFileEntry(e.from).hostHandle,c=await a.stat(o)}catch(u){throw s(),ur(u)}if(s(),c.kind!=="file"||!Number.isSafeInteger(c.size)||c.size<0)throw y("FILE_IO_FAILED","上传源文件状态无效");if(e.maxBytes!==void 0&&c.size>e.maxBytes)throw y("FILE_TOO_LARGE","文件超过大小限制");let d=0,l=!1;const h=u=>{l||o.signal.aborted||!Number.isSafeInteger(u)||u<d||u>c.size||(d=u,t.postProgress({loaded:d,total:c.size,lengthComputable:!0}))};try{const{from:u,...g}=e,T=await n.upload(a,{...g,expectedBytes:c.size,...e.format==="multipart"?{fileName:e.fileName??a.name}:{}},{...o,onProgress:h});if(l=!0,!Number.isSafeInteger(T.uploadedBytes)||T.uploadedBytes<d||T.uploadedBytes>c.size)throw y("UPLOAD_NETWORK_FAILED","Host 返回的上传字节数无效");if(T.status>=200&&T.status<300&&T.uploadedBytes!==c.size)throw y("FILE_CHANGED","上传源文件已变化");return t.postProgress({loaded:T.uploadedBytes,total:c.size,lengthComputable:!0}),T}catch(u){l=!0;const g=_o(u);throw g&&zs[g]?y(g,zs[g]):o.signal.aborted?y("UPLOAD_CANCELLED","上传已取消"):g?.startsWith("FILE_")||g?.startsWith("DIRECTORY_")?ur(u):y("UPLOAD_NETWORK_FAILED","上传网络失败")}}const Co="withCredentials",um=new Set(["url","method","params","data","headers","timeout",Co]),lm=new Set(["url","to","params","headers","timeout","suggestedName","overwrite","maxBytes",Co]),fm=new Set(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]),Us=3e4,to=2*1024*1024,hm=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,Zc=/[\u0000-\u0008\u000A-\u001F\u007F]/,mm=/^(?:authorization|authentication-info|proxy-authentication-info|cookie|set-cookie|set-cookie2|pkey|x-pkey|x-access-token|x-auth-token)$/i,gm="network.request 不支持 multipart/form-data,请使用专用上传能力";function pm(e){const t=ym(e.runtimePermissions),r=vm(e.allowedHttpOrigins);return{[cn]:async(n,i)=>{const o=wm(n,{permission:t,allowedHttpOrigins:r}),s=await dm(o,i,e),{uploadedBytes:a,...c}=s;return Fs(c)},[an]:async(n,i)=>{const o=Im(n,{permission:t,allowedHttpOrigins:r});return Bh(o,i,{transfer:e.transfer,fileRegistry:e.fileRegistry,operationContext:e.operationContext})},[sn]:async(n,i)=>{const o=at(e.operationContext,i?.signal);ee(o.signal);const s=Em(n,{permission:t,allowedHttpOrigins:r});let a;try{a=await W(()=>e.network.request(s,o),o.signal)}catch(c){throw Pm(c)?c:Rm(c,"REQUEST_UNSUPPORTED")?V("REQUEST_UNSUPPORTED","当前 Host 不支持该网络请求"):V("REQUEST_FAILED","网络请求失败")}return Fs(a)}}}function ym(e){const t=Ae(e),r=t.permissions.network;return{enabled:t.valid&&r?.status==="enabled",useOfficialDomain:t.valid&&r?.status==="enabled"&&r.config.useOfficialDomain===!0}}function Em(e,t){const r=Ot(e,"network.request 参数必须是对象"),n=Object.keys(r).filter(c=>!um.has(c));if(n.length>0)throw V("INVALID_PARAMS",`network.request 不支持字段: ${n.join(", ")}`);Xc(r,"network.request");const i=Po(r,t,"network.request"),o=Nm(r.method),s=r.data;s!==void 0&&Tm(s),bm(i.headers,s);const a=Om(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 wm(e,t){const r=Ot(e,"network.upload 参数必须是对象"),n=new Set(["url","from","format","method","params","headers","timeout","maxBytes","fieldName","fields","fileName","contentType"]);if(Object.keys(r).some(l=>!n.has(l)))throw V("INVALID_PARAMS","network.upload 包含不支持的字段");const i=Po(r,t,"network.upload");if(i.official)throw V("PERMISSION_DENIED","上传暂不支持官方域名");if(i.timeout!==void 0&&i.timeout<=0)throw V("INVALID_PARAMS","上传 timeout 必须是有限正数");if(!Gn(r.from))throw V("INVALID_PARAMS","from 必须是有效 File ref");if(r.maxBytes!==void 0&&(!Number.isSafeInteger(r.maxBytes)||r.maxBytes<=0))throw V("INVALID_PARAMS","maxBytes 必须是正的 safe integer");if(r.format!=="raw"&&r.format!=="multipart")throw V("INVALID_PARAMS","format 必须是 raw 或 multipart");const o=r.method??(r.format==="raw"?"PUT":"POST");if(o!=="POST"&&(r.format!=="raw"||o!=="PUT"))throw V("INVALID_PARAMS","上传 HTTP 方法不支持");const s={from:r.from,format:r.format,request:{source:"public-sdk",target:{kind:"absolute-url",url:i.url.href},redirectPolicy:"error",route:"upload",method:o,...i.params===void 0?{}:{params:i.params},...i.headers===void 0?{}:{headers:i.headers},...i.timeout===void 0?{}:{timeout:i.timeout}},...r.maxBytes===void 0?{}:{maxBytes:r.maxBytes}};if(r.format==="raw"){if(["fieldName","fields","fileName","contentType"].some(l=>r[l]!==void 0))throw V("INVALID_PARAMS","raw 不接受 multipart 字段");return s}if(Object.keys(i.headers??{}).some(l=>l.toLowerCase()==="content-type"))throw V("INVALID_PARAMS","multipart Content-Type 由 Host 生成");const a=Hs(r.fieldName),c=r.fields===void 0?void 0:Ot(r.fields,"fields 必须是字符串字典");for(const[l,h]of Object.entries(c??{}))if(Hs(l),typeof h!="string"||l===a)throw V("INVALID_PARAMS","fields 必须是字符串且不得与文件字段重名");if(r.fileName!==void 0&&typeof r.fileName!="string")throw V("INVALID_PARAMS","fileName 必须是字符串");if(r.contentType!==void 0&&(typeof r.contentType!="string"||Zc.test(r.contentType)||!/^[^\s/;]+\/[^\s;]+(?:;[^\r\n]*)?$/.test(r.contentType)))throw V("INVALID_PARAMS","contentType 必须是有效 MIME type");const d={fieldName:a,fields:c,fileName:r.fileName,contentType:r.contentType};if(new TextEncoder().encode(JSON.stringify(d)).byteLength>to)throw V("INVALID_PARAMS","multipart 元数据超过 2 MiB");return{...s,fieldName:a,...c===void 0?{}:{fields:{...c}},...r.fileName===void 0?{}:{fileName:Lo(r.fileName)},contentType:r.contentType??"application/octet-stream"}}function Hs(e){if(typeof e!="string"||!e||/[\u0000-\u001F\u007F"\\]/.test(e))throw V("INVALID_PARAMS","multipart 字段名必须是非空且无控制字符的字符串");return e}function Im(e,t){const r=Ot(e,"network.download 参数必须是对象"),n=Object.keys(r).filter(c=>!lm.has(c));if(n.length>0)throw V("INVALID_PARAMS",`network.download 不支持字段: ${n.join(", ")}`);Xc(r,"network.download");const i=Po(r,t,"network.download");if(i.timeout!==void 0&&i.timeout<=0)throw V("INVALID_PARAMS","network.download timeout 必须是有限正数");cm(i.headers);const o=Gn(r.to),s=cc(r.to);if(!o&&!s)throw V("INVALID_PARAMS","network.download to 必须是有效 File/Directory ref");if(o&&(r.suggestedName!==void 0||r.overwrite!==void 0))throw V("INVALID_PARAMS","File 下载目标不接受 suggestedName/overwrite");let a;if(r.suggestedName!==void 0){if(typeof r.suggestedName!="string")throw V("INVALID_PARAMS","suggestedName 必须是字符串");a=Lo(r.suggestedName)}if(r.overwrite!==void 0&&typeof r.overwrite!="boolean")throw V("INVALID_PARAMS","overwrite 必须是布尔值");if(r.maxBytes!==void 0&&(!Number.isSafeInteger(r.maxBytes)||r.maxBytes<=0))throw V("INVALID_PARAMS","maxBytes 必须是正的 safe integer");return{request:{source:"public-sdk",target:{kind:"absolute-url",url:i.url.href},redirectPolicy:"error",route:"download",method:"GET",...i.params===void 0?{}:{params:i.params},...i.headers===void 0?{}:{headers:i.headers},...i.timeout===void 0?{}:{timeout:i.timeout}},url:i.url,to:r.to,targetKind:o?"file":"directory",...a===void 0?{}:{suggestedName:a},...r.overwrite===void 0?{}:{overwrite:r.overwrite},...r.maxBytes===void 0?{}:{maxBytes:r.maxBytes}}}function Po(e,t,r){const n=Mm(e.url,t.allowedHttpOrigins,r),i=ll(n);if(i&&!t.permission.useOfficialDomain)throw V("PERMISSION_DENIED","当前小程序暂不支持访问官方域名");if(ul(n.pathname,i))throw V("PERMISSION_DENIED",`${r} 不允许访问 Runtime 或账号敏感接口`);return{url:n,official:i,params:e.params===void 0?void 0:{...Ot(e.params,`${r} params 必须是对象`)},headers:e.headers===void 0?void 0:Am(e.headers,r),timeout:Dm(e.timeout,r)}}function Mm(e,t,r="network.request"){if(typeof e!="string"||!e.trim())throw V("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`);let n;try{n=new URL(e)}catch{throw V("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`)}if(n.protocol!=="http:"&&n.protocol!=="https:")throw V("INVALID_PARAMS",`${r} url 必须是 HTTP(S) URL`);if(n.username||n.password)throw V("INVALID_PARAMS",`${r} url 不允许包含用户信息`);if(n.protocol==="http:"&&!t.has(n.origin))throw V("PERMISSION_DENIED",`${r} 生产环境只允许 HTTPS`);return n}function Nm(e){if(e===void 0)return;if(typeof e!="string"||!e.trim())throw V("INVALID_PARAMS","network.request method 必须是字符串");const t=e.trim().toUpperCase();if(!fm.has(t))throw V("INVALID_PARAMS","network.request method 不合法");return t}function Am(e,t="network.request"){const r=Ot(e,`${t} headers 必须是 Record<string, string>`),n={};for(const[i,o]of Object.entries(r)){const s=i.trim();if(!s||s!==i||!hm.test(s)||typeof o!="string"||Zc.test(o))throw V("INVALID_PARAMS",`${t} headers 必须是 Record<string, string>`);if(fl(s))throw V("INVALID_PARAMS",`${t} 不允许设置敏感请求头: ${i}`);n[s]=o}return n}function Xc(e,t){const r=e[Co];if(r!==void 0&&typeof r!="boolean")throw V("INVALID_PARAMS",`${t} 旧版凭据字段必须是布尔值`)}function Dm(e,t="network.request"){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw V("INVALID_PARAMS",`${t} timeout 必须是非负数字`);if(t==="network.request"&&e>Us)throw V("INVALID_PARAMS",`${t} timeout 不能超过 ${Us}ms`);return e}}function Tm(e){if(typeof Blob<"u"&&e instanceof Blob||typeof FormData<"u"&&e instanceof FormData)throw V("INVALID_PARAMS","network.request data 不支持 File、Blob 或 FormData,请使用专用上传能力");if(Sm(e)>to)throw V("INVALID_PARAMS",`network.request data 不能超过 ${to} 字节`)}function Sm(e){if(typeof e=="string")return mi(e);if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(typeof URLSearchParams<"u"&&e instanceof URLSearchParams)return mi(e.toString());try{const t=JSON.stringify(e);return t?mi(t):0}catch{throw V("INVALID_PARAMS","network.request data 必须可序列化")}}function bm(e,t){const r=ed(e),n=typeof t=="string"&&t.trimStart().startsWith("--")&&/content-disposition\s*:\s*form-data/i.test(t);if(r?.includes("multipart/form-data")||n)throw V("INVALID_PARAMS",gm)}function Om(e,t,r){if(t===void 0)return;const n=ed(e);return n?.includes("application/x-www-form-urlencoded")?"form":n?.includes("application/json")?"json":typeof URLSearchParams<"u"&&t instanceof URLSearchParams||r&&(Array.isArray(t)||Lm(t))?"form":_m(t)?"json":void 0}function ed(e){return e?Object.entries(e).find(([r])=>r.trim().toLowerCase()==="content-type")?.[1].toLowerCase():void 0}function _m(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="object"&&!ArrayBuffer.isView(e)&&!(e instanceof ArrayBuffer)}function Lm(e){if(typeof e!="object"||e===null)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function vm(e){const t=new Set;for(const r of e??[])try{const n=new URL(r);n.protocol==="http:"&&!n.username&&!n.password&&n.pathname==="/"&&!n.search&&!n.hash&&Cm(n.hostname)&&t.add(n.origin)}catch{}return t}function Cm(e){const t=e.toLowerCase();if(t==="[::1]")return!0;const r=t.split(".").map(Number);return r.length!==4||r.some((n,i)=>!/^\d+$/.test(t.split(".")[i])||n<0||n>255)?!1:r[0]===127||r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}function Fs(e){return Object.keys(e.headers).some(Vs)?{...e,headers:Object.fromEntries(Object.entries(e.headers).filter(([t])=>!Vs(t)))}:e}function Vs(e){const t=e.trim().toLowerCase();return mm.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function Pm(e){return e instanceof Error&&e.name==="AbortError"}function Rm(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function Ot(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw V("INVALID_PARAMS",t);return e}function mi(e){return new TextEncoder().encode(e).length}function V(e,t){return{code:e,message:t}}function km(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function xm(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 jm(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topicIds 必须是数组"],values:[]};const t=[],r=new Set,n=[];for(const i of e){const o=xm(i);o?r.has(o)||(r.add(o),n.push(o)):t.push("post.topicIds 每项必须是正整数或非空字符串")}return{invalidMessages:t,values:n}}function zm(e){if(e===void 0)return{invalidMessages:[],values:[]};if(!Array.isArray(e))return{invalidMessages:["post.topics 必须是数组"],values:[]};const t=[],r=new Set,n=[];for(const i of e){const o=typeof i=="string"?i.trim():"";!o||o.startsWith("#")||o.endsWith("#")?t.push("post.topics 每项必须是不含首尾 # 的非空字符串"):r.has(o)||(r.add(o),n.push(o))}return{invalidMessages:t,values:n}}function td(e,t){if(e==null)return{};if(!km(e))return{invalidMessage:`${t.method} post 必须是对象或 null`};const r=jm(e.topicIds),n=zm(e.topics),i=[...r.invalidMessages,...n.invalidMessages];let o=r.values;t.maxTopicIds!==void 0&&o.length>t.maxTopicIds&&(i.push(`${t.method} post.topicIds 最多允许 ${t.maxTopicIds} 项`),o=o.slice(0,t.maxTopicIds));const s=o.length||n.values.length?{...o.length?{topicIds:o}:{},...n.values.length?{topics:n.values}:{}}:void 0;return s||i.push(`${t.method} post 至少需要一个有效的 topicIds 或 topics`),{invalidMessage:i[0],post:s}}function Um(e){try{return new URL(e).protocol==="heybox-mini-dev:"}catch{return!1}}async function Hm(e){try{if(Um(e.getCurrentHref()))return!0}catch{}try{return!!await e.isDevRuntime()}catch{return!1}}function ae(e){throw{code:"INVALID_PARAMS",message:e}}function Mr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ro(e,t){return typeof e!="string"||!e.trim()?ae(t):e}function Fm(e,t){const r=ro(e,t);try{const n=new URL(r);return n.protocol!=="http:"&&n.protocol!=="https:"?ae(t):r}catch{return ae(t)}}function Vm(e){return e==="wechatSession"||e==="wechatTimeline"||e==="qqFriend"||e==="qzone"||e==="weibo"}function rd(e,t,r){const n=e.identity.get(),i=n?.miniProgramId.trim();if(!i)return ae(`${t} 缺少有效的小程序分享地址`);try{const o=new URL(e.environment.getCurrentHref()),s=new URL("/tools/common_share",o);s.searchParams.set("user_miniprogram_id",i);const a=n?.version?.trim();a&&s.searchParams.set("miniprogram_version",a);const c=o.searchParams.get("h_src");return c?.trim()&&s.searchParams.set("h_src",c),r!==void 0&&s.searchParams.set("extra",r),s.href}catch{return ae(`${t} 缺少有效的小程序分享地址`)}}function Bm(e,t){if(!Mr(e))return ae("share.showShareMenu 参数必须是对象");if(Object.prototype.hasOwnProperty.call(e,"url"))return ae("share.showShareMenu 不支持自定义 url");const r=e.channel;if(r!==void 0&&!Vm(r))return ae("share.showShareMenu channel 不合法");const n=nd(e.extra,"share.showShareMenu");return{title:ro(e.title,"share.showShareMenu title 必须是非空字符串"),description:ro(e.desc,"share.showShareMenu desc 必须是非空字符串"),url:rd(t,"share.showShareMenu",n),...e.imageUrl===void 0?{}:{imageUrl:Fm(e.imageUrl,"share.showShareMenu imageUrl 必须是 HTTP(S) URL")},...r===void 0?{}:{channel:r}}}function nd(e,t){if(e!==void 0)try{return Yc(e)}catch{return ae(`${t} extra 必须是符合限制的 JSON-compatible 数据`)}}async function id(e,t){return e.invalidMessage&&await W(()=>Hm(t.environment),t.operationContext.signal)?ae(e.invalidMessage):e.post}function Bs(e,t){const r=Number(e);return Number.isFinite(r)&&r>0?r:t}function Qm(e){const t=e.getViewportMetrics();return{left:0,top:0,width:Bs(t.windowWidth,0),height:Bs(t.windowHeight,0)}}function no(e,t){const r=Number(e);return!Number.isFinite(r)||r<0?ae(t):r}function Qs(e,t){const r=Number(e);return!Number.isFinite(r)||r<=0?ae(t):r}function Ym(e){return Mr(e)?{left:no(e.left,"share.screenshot rect.left 必须是非负数字"),top:no(e.top,"share.screenshot rect.top 必须是非负数字"),width:Qs(e.width,"share.screenshot rect.width 必须是正数"),height:Qs(e.height,"share.screenshot rect.height 必须是正数")}:ae("share.screenshot rect 必须是对象")}function Gm(e,t){if(e!=null&&!Mr(e))return ae("share.screenshot 参数必须是对象");const r=e??{};return r.saveToAlbum!==void 0&&typeof r.saveToAlbum!="boolean"?ae("share.screenshot saveToAlbum 必须是布尔值"):r.watermarkTheme!==void 0&&r.watermarkTheme!=="light"&&r.watermarkTheme!=="dark"?ae("share.screenshot watermarkTheme 必须是 light 或 dark"):{watermarkTheme:r.watermarkTheme??"dark",rect:r.rect===void 0?Qm(t):Ym(r.rect),...r.delay===void 0?{}:{delay:no(r.delay,"share.screenshot delay 必须是非负数字")},...r.saveToAlbum===void 0?{}:{saveToAlbum:r.saveToAlbum}}}async function qm(e,t){ee(t.operationContext.signal);const r=Bm(e,t);let n=td(e.post,{maxTopicIds:1,method:"share.showShareMenu"});r.channel&&n.post&&(n={invalidMessage:n.invalidMessage||"share.showShareMenu channel 与 post 不能同时使用"});const i=await id(n,t);return W(()=>t.presentation.showShareMenu({...r,post:i},t.operationContext),t.operationContext.signal)}async function Wm(e,t){if(ee(t.operationContext.signal),e!==void 0&&!Mr(e))return ae("share.copyLink 参数必须是对象");const r=nd(e?.extra,"share.copyLink"),n=rd(t,"share.copyLink",r);return await W(()=>t.presentation.setClipboard({text:n},t.operationContext),t.operationContext.signal),n}async function $m(e,t,r){ee(t.operationContext.signal);const n=td(Mr(e)?e.post:void 0,{method:"share.screenshot"}),i=await id(n,t),o=t.identity.get()?.miniProgramId.trim()||void 0,s=Km(),{watermarkTheme:a,...c}=r;let d=!1,l,h;try{d=!0,await W(()=>t.presentation.setScreenshotChromeHidden(!0,t.operationContext),t.operationContext.signal),l=await t.prepareScreenshot?.(r.rect,t.operationContext.signal,a),h={status:"fulfilled",value:await W(()=>t.presentation.captureAndShare({...c,post:i,...o?{sourceMiniProgramId:o}:{}},t.operationContext),t.operationContext.signal)}}catch(g){h={status:"rejected",error:g}}finally{l?.()}const u=d?await Jm(t.presentation,s,t.operationContext.signal):void 0;if(h.status==="rejected")throw h.error;if(u)throw u;return h.value}function Km(){return{lifecycle:"cleanup",signal:new AbortController().signal}}async function Jm(e,t,r){let n;try{n=Promise.resolve(e.setScreenshotChromeHidden(!1,t))}catch{return}try{await W(()=>n,r,{invokeWhenAborted:!0})}catch(i){if(r.aborted)return i}}function Zm(e){let t=Promise.resolve();return{[en]:(r,n)=>Wm(r,e),[tn]:(r,n)=>qm(r,e),[rn]:async(r,n)=>{const i=at(e.operationContext,n.signal);ee(i.signal);const o=Gm(r,e.presentation),s=t.then(()=>$m(r,{...e,operationContext:i},o));return t=s.then(()=>{},()=>{}),W(()=>s,i.signal)}}}const Xm=128,eg=/^[A-Za-z0-9_-]+$/;function tg(e){const t=rg(e);let r=Promise.resolve();const n=new Set,i=(s,a)=>{if(n.has(a))return Promise.resolve();const c=r.then(async()=>{const d=Hu(s),l=Fu(await e.storage.getRaw(d,e.operationContext));if(l.forEach(h=>n.add(h)),!n.has(a)){if(l.length>=$o)throw je("STORAGE_QUOTA_EXCEEDED",`storage key 数量超出 ${$o} 个上限`);l.push(a),await e.storage.setRaw(d,JSON.stringify(l),e.operationContext),n.add(a)}});return r=c.catch(()=>{}),c},o={[tr]:async s=>{ee(e.operationContext.signal);const a=Ys(s,tr,e.storageLimits?.maxKeyLength),c=await W(()=>e.storage.getRaw(gi(t(),a),e.operationContext),e.operationContext.signal);return{data:Gs(c)}},[rr]:async s=>{ee(e.operationContext.signal);const a=od(s,"storage.setStorage 参数必须是对象"),c=Ys(a,rr,e.storageLimits?.maxKeyLength),d=ng(a.data,e.storageLimits?.maxValueBytes),l=t();await W(()=>i(l,c),e.operationContext.signal),await W(()=>e.storage.setRaw(gi(l,c),d,e.operationContext),e.operationContext.signal)}};return e.storageDiagnostics?{handlers:o,diagnostics:{getSnapshot:async()=>{ee(e.operationContext.signal);let s;try{s=t()}catch{throw je("STORAGE_DIAGNOSTICS_NOT_READY","Storage diagnostics 只能在 canonical identity 绑定后使用")}const a=gi(s,"");return(await W(()=>e.storageDiagnostics.listRaw(e.operationContext),e.operationContext.signal)).filter(d=>d.key.startsWith(a)).map(d=>{const l=d.value;return{area:d.area,key:d.key.slice(a.length),value:Gs(l),serializedValue:l,bytes:sd(l)}}).sort((d,l)=>d.key.localeCompare(l.key))}}}:{handlers:o}}function rg(e){let t=!1,r;return()=>{if(!t){const n=e.identity.get()?.miniProgramId.trim();if(n)r=`id_${qs(n)}`;else{const i=e.anonymousStorageScope?.trim();i&&(r=`anon_${qs(i)}`)}t=r!==void 0}if(!r)throw je("INVALID_STATE","storage scope 只能在 canonical identity 绑定后使用");return r}}function gi(e,t){return Uu(e,t)}function Ys(e,t,r=Xm){const i=od(e,`${t} 参数必须是对象`).key;if(typeof i!="string")throw je("INVALID_PARAMS",`${t} key 必须是字符串`);if(!i||i.length>r||!eg.test(i))throw je("INVALID_PARAMS",`storage key 仅支持 1-${r} 位字母、数字、下划线和连字符`);return i}function ng(e,t){let r;try{r=JSON.stringify(e)}catch{throw je("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化")}if(typeof r!="string")throw je("INVALID_PARAMS","storage.setStorage data 必须可 JSON 序列化");if(t!==void 0&&sd(r)>t)throw je("STORAGE_QUOTA_EXCEEDED",`storage.setStorage data 超出 ${t} 字节限制`);return r}function Gs(e){if(!(e===void 0||e===""))try{return JSON.parse(e)}catch{return e}}function od(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw je("INVALID_PARAMS",t);return e}function qs(e){return zu(e)}function sd(e){return new TextEncoder().encode(e).length}function je(e,t){return{code:e,message:t}}const Ws=120;function Be(e){throw{code:"INVALID_PARAMS",message:e}}function Ro(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ad(e,t,r){const n=Object.keys(e).filter(i=>!t.includes(i));n.length&&Be(`${r} 不支持字段: ${n.join(", ")}`)}function ig(e){if(!Ro(e))return Be("ui.showToast 参数必须是对象");if(ad(e,["message","status"],"ui.showToast"),typeof e.message!="string"||!e.message.trim())return Be("ui.showToast message 必须是非空字符串");const t=e.message.trim();if(t.length>Ws)return Be(`ui.showToast message 不能超过 ${Ws} 字符`);const r=e.status;if(r!==void 0&&r!=="success"&&r!=="error")return Be("ui.showToast status 必须是 success 或 error");const n=r;return{message:t,...n===void 0?{}:{status:n}}}function og(e){return e===void 0?{dismissible:!1}:Ro(e)?(ad(e,["dismissible"],"ui.showLoading"),e.dismissible!==void 0&&typeof e.dismissible!="boolean"?Be("ui.showLoading dismissible 必须是布尔值"):{dismissible:e.dismissible??!1}):Be("ui.showLoading 参数必须是对象")}function sg(e){e!==void 0&&(!Ro(e)||Object.keys(e).length)&&Be("ui.hideLoading 不支持参数")}function ag(e){return{[En]:async t=>{ee(e.operationContext.signal),await W(()=>e.presentation.showToast(ig(t),e.operationContext),e.operationContext.signal)},[wn]:async t=>{ee(e.operationContext.signal),await W(()=>e.presentation.showLoading(og(t),e.operationContext),e.operationContext.signal)},[In]:async t=>{ee(e.operationContext.signal),sg(t),await W(()=>e.presentation.hideLoading(e.operationContext),e.operationContext.signal)}}}const cg={auth:"optional",channel:"api",failurePresentation:"none",id:"heybox.account.home_v2.get",method:"GET",path:"/account/home_v2/",parse(e){return pe(e,"当前用户首页资料接口响应异常")}},dg=3e4;function ug(e,t,r={}){const n=r.ttlMs??dg,i=r.requestPolicyEnabled!==!1,o=r.requestGate?{capability:"user",gate:r.requestGate}:void 0;let s=0,a,c;async function d(){let h;try{h=await qn(e,cg,void 0,{...t,credentials:"heybox-session",...o?{gate:o}:{}})}catch(u){throw t.signal.aborted?y("RUNTIME_DESTROYED","小程序 Runtime 已终止"):u instanceof se?y("REQUEST_UNSUPPORTED",u.message):u instanceof wr?y("INVALID_RESPONSE","user home_v2 响应不合法"):u instanceof bt?y("REQUEST_FAILED","user home_v2 请求失败"):u instanceof St?i&&(u.status===403||u.status===429)?y("RATE_LIMITED","user home_v2 请求已被网关限流,请稍后重试",{status:u.status,...u.retryAfterMs===void 0?{}:{retryAfterMs:u.retryAfterMs}}):y("REQUEST_FAILED",u.message):fg(u)?u:y("REQUEST_FAILED","user home_v2 请求失败")}return lg(h,"user home_v2")}function l(h){const u=Date.now();if(a?.userId===h&&a.expiresAt>u)return Promise.resolve(a.value);if(c?.userId===h&&c.generation===s)return c.promise;const g=s,T=d().then(M=>(s===g&&(a={userId:h,value:M,expiresAt:Date.now()+n}),M)).finally(()=>{c?.promise===T&&(c=void 0)});return c={userId:h,generation:g,promise:T},T}return{get:l,clear(){s+=1,a=void 0,c=void 0}}}function lg(e,t){if(!H(e))throw y("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw y(n,r)}if(!H(e.result))throw y("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function fg(e){return H(e)&&typeof e.code=="string"&&typeof e.message=="string"}const hg={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 pe(e,"Steam 游戏库接口响应异常")}};function mg(e,t=Gi){const r=ml({version:"1",validate:pg}),n={ttlMs:Number.isFinite(t)?Math.max(0,Math.floor(t)):Gi,memoryMaxEntries:64,diskMaxEntries:256,diskMaxBytes:10*1024*1024,maxEntryBytes:512*1024};return{persistent:e.register({namespace:"user.steam-game-list",codec:r,policy:{...n,persistence:"memory-and-disk"}}),unresolved:e.register({namespace:"user.steam-game-list.unresolved",codec:r,policy:{...n,persistence:"memory"}})}}function $s(e,t){if(e.steamId)return e.steamId;for(const r of["steamid","steam_id","steamId"]){const n=t[r];if(typeof n=="string"&&n.trim())return n.trim()}}function gg(e){const{query:t}=e;return JSON.stringify([e.miniProgramId,e.userId,e.effectiveSteamId??null,e.personalInformationOpen??null,t.limit,t.offset,t.sort,t.q??"",t.includeHidden])}function pg(e){if(!H(e)||!Array.isArray(e.gameList)||typeof e.hasMore!="boolean"||!Number.isInteger(e.nextOffset)||Number(e.nextOffset)<0||(pi(e,"total"),e.isMe!==void 0&&typeof e.isMe!="boolean"))throw Xe();for(const t of e.gameList){if(!H(t)||!io(t.appid)||!io(t.steamAppid)||typeof t.name!="string"||!t.name.trim())throw Xe();for(const r of["image","icon"])Ks(t,r);for(const r of["playtimeForever","playtime2Weeks"])pi(t,r);if(t.tags!==void 0&&(!Array.isArray(t.tags)||t.tags.some(r=>typeof r!="string"||!r.trim())))throw Xe();if(t.price!==void 0){if(!H(t.price))throw Xe();for(const r of["current","initial","deadlineDate"])Ks(t.price,r);for(const r of["discount","lowestPrice","deadlineTimestamp"])pi(t.price,r)}}return e}function io(e){return typeof e=="number"&&Number.isFinite(e)}function pi(e,t){if(e[t]!==void 0&&!io(e[t]))throw Xe()}function Ks(e,t){if(e[t]!==void 0&&typeof e[t]!="string")throw Xe()}function Xe(){return y("INVALID_RESPONSE","Steam 游戏库缓存数据不合法")}const cd=20,yg=100,Eg=128,dd=0,ud="weeks",wg=100,Ig=new Set(["weeks","all","achieved"]);function Mg(){return{nickname:"",avatar:""}}function Ng(e){const t=ug(e.network,e.operationContext,{requestGate:e.requestGate,requestPolicyEnabled:e.requestPolicyEnabled}),r=e.requestPolicyEnabled!==!1,n=e.cacheManager??Ec(),i=mg(n,r?e.steamGameListTtlMs:0);let o;const s=new Map;let a=Promise.resolve();function c(f,p){const m=JSON.stringify([f,p]);return(!o||o.key!==m)&&(o={key:m,scope:n.createScope(p,n.createScope(f))}),o.scope}function d(){const f=o;o=void 0,f&&n.invalidateScope(f.scope).catch(()=>{}),s.clear()}const l=_c({ttlMs:Math.max(0,Math.floor(e.profileTtlMs??bc))}),h=e.requestGate?{capability:"user",gate:e.requestGate}:void 0;let u=0,g=!1;const T=e.account.onChange(()=>{u+=1,t.clear(),l.invalidate(),d()}),M=e.authorization.onEvent((f,p)=>{f==="user_info_authorization_change"&&Object.values(p).some(m=>m==="denied")&&(u+=1,t.clear(),l.invalidate(),d(),a=a.then(async()=>{if(g)return;const m=await e.account.getCurrentUserId(e.operationContext);typeof m=="string"&&m.trim()&&await n.invalidateScope(c(I(),m.trim()))}).catch(()=>{}))});function S(){if(g||e.operationContext.signal.aborted)throw y("RUNTIME_DESTROYED","小程序 Runtime 已终止")}function I(){const f=e.identity.get()?.miniProgramId?.trim();if(!f)throw y("INVALID_STATE","用户能力缺少 canonical 小程序身份");return f}async function _(){S(),await a,S();let f;try{f=await e.account.getCurrentUserId(e.operationContext)}catch(p){throw e.operationContext.signal.aborted?y("RUNTIME_DESTROYED","小程序 Runtime 已终止"):Zs(p)?p:y("REQUEST_FAILED","读取小黑盒账号失败")}return typeof f=="string"&&f.trim()?f.trim():void 0}async function A(f,p){const m=await _();if(u!==p||m!==f)throw y("AUTHORIZATION_CONTEXT_CHANGED","用户请求期间账号上下文已变化,请重新操作")}async function v(f,p,m=e.operationContext.signal){try{return await qn(e.network,f,p,{...e.operationContext,signal:m,credentials:"heybox-session",...h?{gate:h}:{}})}catch(E){throw e.operationContext.signal.aborted?y("RUNTIME_DESTROYED","小程序 Runtime 已终止"):E instanceof se?y("REQUEST_UNSUPPORTED",E.message):E instanceof wr?y("INVALID_RESPONSE","用户接口响应不合法"):E instanceof bt?y("REQUEST_FAILED","用户请求失败"):E instanceof St?r&&(E.status===403||E.status===429)?y("RATE_LIMITED","用户请求已被网关限流,请稍后重试",{status:E.status,...E.retryAfterMs===void 0?{}:{retryAfterMs:E.retryAfterMs}}):y("REQUEST_FAILED",E.message):Zs(E)?E:y("REQUEST_FAILED","用户请求失败")}}async function U(){I();const f=u,p=await _();if(!p)return{isHeyboxAppLoggedIn:!1,authorization:null,userInfo:null};const[m,E]=await Promise.all([e.authorization.getOrCreateLocalIdentity(p),L(p).catch(()=>Mg())]);return await A(p,f),{isHeyboxAppLoggedIn:!0,authorization:e.authorization.getAuthorization(),userInfo:{app_user_id:m.appUserId,profile:E,...m.steamId?{steam_id:m.steamId}:{}}}}function L(f){return l.read(f,()=>v(Oc,void 0).then(p=>{const m=Js(p,"账号基础信息");if(m.display_username!==void 0&&typeof m.display_username!="string")throw y("INVALID_RESPONSE","账号基础信息 nickname 不合法");if(m.display_avatar!==void 0&&typeof m.display_avatar!="string")throw y("INVALID_RESPONSE","账号基础信息 avatar 不合法");return{nickname:m.display_username??"",avatar:m.display_avatar??""}}))}async function N(f){const p=Ag(f),m=I(),E=u,w=await _();if(!w)return d(),{isLogin:!1,isBound:!1,data:null};const D=await t.get(w);await A(w,E);const P=ko(D.steam_id_info);if(Object.keys(P).length===0)return await n.invalidateScope(c(m,w)).catch(()=>{}),await A(w,E),s.delete(JSON.stringify([m,w])),{isLogin:!0,isBound:!1,data:null};const F=JSON.stringify([m,w]),R=c(m,w),O=$s({...p,steamId:void 0},P),C=ld(P.personal_infomation_open??P.personal_information_open),b=JSON.stringify([O??null,C??null]),x=s.get(F);x&&x.identity!==b&&(await n.invalidateScope(R).catch(()=>{}),await A(w,E));const j={identity:b,scope:n.createScope(b,R)};s.set(F,j);const z=$s(p,P),B=z?i.persistent:i.unresolved,Q=n.createScope(z??"unresolved",j.scope),G=async()=>{if(await A(w,E),I()!==m||s.get(F)?.identity!==b)throw y("AUTHORIZATION_CONTEXT_CHANGED","Steam 游戏库请求期间绑定上下文已变化")},te=await B.read({scope:Q,key:gg({miniProgramId:m,userId:w,effectiveSteamId:z,personalInformationOpen:C,query:p}),signal:e.operationContext.signal,load:async X=>{const Z=await v(hg,{userId:w,...p,personalInformationOpen:C},X);return await G(),Og(Js(Z,"Steam 游戏库"),p)}}).catch(async X=>{throw await G(),X});return await G(),{isLogin:!0,isBound:!0,data:te}}return{getInfo:U,getSteamGameList:N,async invalidateSteamGameListCache(){const f=I(),p=u,m=await _();if(!m)return;const E=c(f,m);await Promise.all([i.persistent.invalidateScope(E),i.unresolved.invalidateScope(E)]),t.clear(),s.delete(JSON.stringify([f,m])),await A(m,p)},dispose(){g||(g=!0,u+=1,T(),M(),t.clear(),l.dispose(),i.persistent.dispose(),i.unresolved.dispose(),e.cacheManager||n.dispose())}}}function Ag(e){if(e==null)return{limit:cd,offset:dd,sort:ud,includeHidden:!1};if(!H(e))throw Qe("user.getSteamGameList 参数必须是对象");const t=Object.keys(e).find(n=>!["steamId","limit","offset","sort","q","includeHidden"].includes(n));if(t)throw Qe(`user.getSteamGameList 不支持字段: ${t}`);const r={limit:Dg(e.limit),offset:Tg(e.offset),sort:Sg(e.sort),includeHidden:bg(e.includeHidden)};if(e.steamId!==void 0){if(typeof e.steamId!="string"||!e.steamId.trim()||e.steamId.trim().length>Eg)throw Qe("user.getSteamGameList steamId 必须是非空字符串");r.steamId=e.steamId.trim()}if(e.q!==void 0){if(typeof e.q!="string")throw Qe("user.getSteamGameList q 必须是字符串");const n=e.q.trim();n&&(r.q=n.slice(0,wg))}return r}function Dg(e){if(e===void 0)return cd;if(!Number.isInteger(e)||Number(e)<1)throw Qe("user.getSteamGameList limit 必须是正整数");return Math.min(Number(e),yg)}function Tg(e){if(e===void 0)return dd;if(!Number.isInteger(e)||Number(e)<0)throw Qe("user.getSteamGameList offset 必须是非负整数");return Number(e)}function Sg(e){if(e===void 0)return ud;if(typeof e!="string"||!Ig.has(e))throw Qe("user.getSteamGameList sort 不支持");return e}function bg(e){if(e===void 0)return!1;if(typeof e!="boolean")throw Qe("user.getSteamGameList includeHidden 必须是 boolean");return e}function Og(e,t){if(!Array.isArray(e.game_list))throw y("INVALID_RESPONSE","Steam 游戏库 game_list 必须是数组");const r=e.game_list.map(_g).filter(a=>a!==void 0),n=Ln(e.total),i=t.offset+r.length,o={gameList:r,hasMore:r.length>=t.limit,nextOffset:i};n!==void 0&&(o.total=n,o.hasMore=i<n);const s=ld(e.is_me);return s!==void 0&&(o.isMe=s),o}function _g(e){const t=ko(e),r=Ln(t.appid),n=Ln(t.steam_appid)??r,i=xo(t.name);if(r===void 0||n===void 0||!i)return;const o={appid:r,steamAppid:n,name:i};Wt(o,"image",t.image),Wt(o,"icon",t.appicon??t.icon),$t(o,"playtimeForever",t.playtime_forever),$t(o,"playtime2Weeks",t.playtime_2weeks);const s=vg(t.external_tags??t.tags);s.length&&(o.tags=s);const a=Lg(t.price);return a&&(o.price=a),o}function Lg(e){const t=ko(e),r={};return Wt(r,"current",t.current),Wt(r,"initial",t.initial),$t(r,"discount",t.discount),$t(r,"lowestPrice",t.lowest_price),Wt(r,"deadlineDate",t.deadline_date),$t(r,"deadlineTimestamp",t.deadline_timestamp),Object.keys(r).length?r:void 0}function Js(e,t){if(!H(e))throw y("INVALID_RESPONSE",`${t}响应必须是对象`);if(e.status!=="ok"){const r=typeof e.msg=="string"&&e.msg.trim()?e.msg.trim():`${t}请求失败`,n=["login","relogin","lack_token"].includes(String(e.status))?"HEYBOX_APP_LOGIN_REQUIRED":"REQUEST_FAILED";throw y(n,r)}if(!H(e.result))throw y("INVALID_RESPONSE",`${t} result 必须是对象`);return e.result}function ko(e){return H(e)?e:{}}function xo(e){return typeof e=="string"?e.trim():typeof e=="number"||typeof e=="boolean"?String(e):""}function vg(e){return Array.isArray(e)?e.map(xo).filter(Boolean):[]}function Ln(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()&&Number.isFinite(Number(e)))return Number(e)}function ld(e){if(e===!0||e===1||e==="1")return!0;if(e===!1||e===0||e==="0")return!1}function Wt(e,t,r){const n=xo(r);n&&Object.assign(e,{[t]:n})}function $t(e,t,r){const n=Ln(r);n!==void 0&&Object.assign(e,{[t]:n})}function Qe(e){return y("INVALID_PARAMS",e)}function Zs(e){return H(e)&&typeof e.code=="string"&&typeof e.message=="string"}function Cg(e){return{[Jr]:async t=>(Xs(t,"user.getInfo"),e.user.getInfo()),[Zr]:async(t,r)=>{Xs(t,"user.revokeAuthorization"),await e.authorization.revoke(r.trustedUserGesture)},[Xr]:async t=>e.user.getSteamGameList(t)}}function Xs(e,t){if(e!==void 0)throw y("INVALID_PARAMS",`${t} 不接收入参`)}function ea(e){throw{code:"INVALID_PARAMS",message:e}}function zt(e,t){const r=Number(e);return Number.isFinite(r)&&r>0?r:t}function fd(e,t){const r=Number(e);return Number.isFinite(r)&&r>=0?r:t}function Cr(e,t,r){return Math.min(fd(e,t),r)}async function Pg(e){try{return fd(await e.getNavigationBarHeight(),0)}catch{return 0}}function Rg(e,t,r,n){const i=Cr(e.safeArea?.left,0,t),o=Math.max(i,Cr(e.safeArea?.right,t,t)),s=Cr(e.safeArea?.top,n,r),a=Math.max(s,Cr(e.safeArea?.bottom,r,r));return{left:i,right:o,top:s,bottom:a,width:o-i,height:a-s}}async function ta(e){const t=e.getViewportMetrics(),r=zt(t.windowWidth,0),n=zt(t.windowHeight,0),i=await Pg(e);return{pixelRatio:zt(t.pixelRatio,1),screenWidth:zt(t.screenWidth,r),screenHeight:zt(t.screenHeight,n),windowWidth:r,windowHeight:n,statusBarHeight:i,safeArea:Rg(t,r,n,i),screenTop:i}}function kg(e){const t=new AbortController,r={...e,operationContext:{...e.operationContext,signal:t.signal}};let n=!1,i=0,o,s;const a=()=>{if(n||r.operationContext.signal.aborted||!r.onViewportChange)return;const h=++i;ta(r.presentation).then(u=>{if(n||r.operationContext.signal.aborted||h!==i)return;const g=JSON.stringify(u);g!==o&&(o=g,r.onViewportChange?.(u))}).catch(()=>{})},c=kh({...r,onApplied:a}),d=()=>{n||(n=!0,e.operationContext.signal.removeEventListener("abort",d),t.abort(),c.dispose(),s?.())};return e.operationContext.signal.aborted?d():(s=r.presentation.onViewportChange?.(a),e.operationContext.signal.addEventListener("abort",d,{once:!0})),{handlers:{[ot]:async(h,u)=>c.apply(h,u?.signal),[nn]:async()=>(ee(r.operationContext.signal),ta(r.presentation)),[on]:async h=>{if(ee(r.operationContext.signal),typeof h!="object"||h===null||Array.isArray(h))return ea("viewport.setNavigationBarStyle 参数必须是对象");const u=h.foregroundStyle;if(u!=="light"&&u!=="dark")return ea("viewport.setNavigationBarStyle foregroundStyle 必须是 light 或 dark");await W(()=>r.presentation.setNavigationBarStyle(u,e.operationContext),r.operationContext.signal)}},applyOrientation:(h,u)=>c.apply({orientation:h.mode,fullscreen:h.hideCapsule},u),notifyChange:()=>{o=void 0,a()},dispose:d}}const xg=new Map(Ge.map(e=>[e.method,e]));function Bt(e,t,r){return{code:e,message:t,...r===void 0?{}:{data:r}}}function jg(e){const t=Ou(e);return r=>t(r.requirement,r.method)}function zg(e,t,r,n){let i;try{i=Promise.resolve(e(t,r))}catch(o){return n.aborted?Promise.resolve({status:"dropped"}):Promise.reject(o)}return n.aborted?(i.catch(()=>{}),Promise.resolve({status:"dropped"})):new Promise((o,s)=>{let a=!1;const c=l=>{a||(a=!0,n.removeEventListener("abort",d),l())},d=()=>c(()=>o({status:"dropped"}));n.addEventListener("abort",d,{once:!0}),i.then(l=>c(()=>o({status:"handled",value:l})),l=>c(()=>s(l)))})}function Ug(e){const t=jg(e.runtimePermissions),r=Ae(e.runtimePermissions);let n=0,i=0,o=0;return{async dispatch(s,a,c){const d=e.now??Hg,l=e.onTrace?d():0,h=e.onTrace?`cap_${++n}`:"",u=s===ot?++i:void 0;let g;try{if(e.terminalSignal.aborted)throw Bt("RUNTIME_DESTROYED","小程序 Runtime 已终止");Bu(s,e.effectiveCapabilities);const T=xg.get(s);if(!T)throw new Error(`Capability method ${s} 缺少 protocol metadata`);const M=t(T),S=!M.allowed&&r.valid&&r.permissions.companion?.status==="enabled"&&e.allowsCompanionAttachmentAccess?.(s,a)===!0;if(!M.allowed&&!S)throw Bt(M.code,M.message,M.data);const I=e.handlers[s];if(!I)throw new Error(`Capability method ${s} 缺少 handler`);u!==void 0&&(g=qc(c.signal));const _=g?{...c,signal:g.signal}:c,A=async()=>{for(const U of e.policies??[]){const L=await U.evaluate({method:s,payload:a,capability:T});if(e.terminalSignal.aborted||g?.signal.aborted)throw ia();if(!L.allowed)throw Bt(L.code,L.message,L.data)}if(e.terminalSignal.aborted||g?.signal.aborted)throw ia();if(u!==void 0){if(Wc(a),u<o)throw Bt("ORIENTATION_SUPERSEDED","方向设置已被后续设置替换");o=u}return I(a,_)},v=await zg(()=>g?g.run(A):A(),void 0,c,e.terminalSignal);return ra(e.onTrace,na(h,s,a,l,v),d),v}catch(T){throw ra(e.onTrace,na(h,s,a,l,{status:"error",error:T}),d),T}finally{g?.dispose()}}}}function Hg(){return typeof performance>"u"?Date.now():performance.now()}function ra(e,t,r){if(!e)return;const n=r();try{e({...t,timestamp:n,durationMs:Math.max(0,Number.isFinite(n-t.startedAt)?n-t.startedAt:0)})}catch{}}function na(e,t,r,n,i){const o=i.status==="handled"?"success":i.status;return{callId:e,method:t,startedAt:n,outcome:o,...i.status==="error"?{errorCode:Fg(i.error)}:{},...Vg(t,r,i)}}function Fg(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:void 0}function Vg(e,t,r){if(e!=="network.request"||typeof t!="object"||t===null||!("url"in t)||typeof t.url!="string")return{};try{const n=new URL(t.url);if(n.protocol!=="http:"&&n.protocol!=="https:"||n.username||n.password)return{};const o=("method"in t&&typeof t.method=="string"?t.method:"GET").trim().toUpperCase();if(!["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(o))return{};const s=r.status==="handled"&&hd(r.value)&&typeof r.value.status=="number"?r.value.status:void 0;return{network:{method:o,origin:n.origin,pathname:n.pathname,...s===void 0?{}:{responseStatus:s}}}}catch{return{}}}function hd(e){return typeof e=="object"&&e!==null}function ia(){const e=new Error("The operation was aborted");return e.name="AbortError",e}function Bg(e){const t={signal:e.terminalSignal,...e.miniProgramDetail===void 0?{}:{miniProgramDetail:e.miniProgramDetail}},r=_l(e.requestPolicy);let n;if(e.files)try{n=wl(e.files,t)}catch{}const i=Ec({store:n}),o=e.onRequestPolicyReport??(r.debugReport?Qg:void 0),s=r.enabled?Tl({...r.gateOptions,...o?{onReport:o}:{}}):void 0,a=new Jf(e.files,e.miniProgramDetail),c=oh({registry:a,picker:e.picker,operationContext:t}),d=ef({account:e.account,network:e.network,identity:e.identity,operationContext:t,authPresentation:e.authPresentation,miniProgramPresentation:e.miniProgramPresentation,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode,authorizationContext:e.authorizationContext,identityTtlMs:r.identityTtlMs,requestGate:s,requestPolicyEnabled:r.enabled});let l,h,u,g=()=>{},T=()=>{};try{l=kg({operationContext:t,presentation:e.hostPresentation,onDisplayChange:L=>e.eventSink.postEvent("display_change",L),onViewportChange:L=>e.eventSink.postEvent("viewport_change",L)}),h=Ng({account:e.account,network:e.network,identity:e.identity,operationContext:t,authorization:d,profileTtlMs:r.profileTtlMs,steamGameListTtlMs:r.steamGameListTtlMs,cacheManager:i,requestGate:s,requestPolicyEnabled:r.enabled}),g=d.onEvent((L,N)=>e.eventSink.postEvent(L,N)),T=e.hostCompanion?.onSessionEvent?.(L=>{const N=Qf(L);!e.terminalSignal.aborted&&N&&e.eventSink.postEvent(N.type,N.payload)})??(()=>{}),u=_f({account:e.account,identity:e.identity,network:e.network,operationContext:t,requestGate:s,requestPolicyEnabled:r.enabled});const M=tg({storage:e.storage,storageDiagnostics:e.storageDiagnostics,identity:e.identity,operationContext:t,anonymousStorageScope:e.anonymousStorageScope,storageLimits:e.storageLimits}),S=[{name:"auth",handlers:df({authorization:d})},{name:"user",handlers:Cg({user:h,authorization:d,runtimePermissions:e.runtimePermissions,steamAccount:e.runtimeFeatures?.steamAccount===!0,userDataMode:e.runtimeFeatures?.userDataMode})},{name:"share",handlers:Zm({prepareScreenshot:e.prepareScreenshot,environment:e.environment,identity:e.identity,operationContext:t,presentation:e.hostPresentation})},{name:"viewport",handlers:l.handlers},{name:"storage",handlers:M.handlers},{name:"network",handlers:pm({network:e.network,transfer:e.transfer,fileRegistry:a,operationContext:t,runtimePermissions:e.runtimePermissions,allowedHttpOrigins:e.allowedHttpOrigins})},{name:"workspaceCards",handlers:{[$r]:async()=>{throw Bt("CAPABILITY_UNAVAILABLE","当前 Runtime 不支持工作区卡片刷新")}}},{name:"files",handlers:c.files},{name:"file",handlers:c.file},{name:"directory",handlers:c.directory},{name:"ui",handlers:ag({operationContext:t,presentation:e.hostPresentation})},{name:"device",handlers:Wf({operationContext:t,presentation:e.hostPresentation,protocol:e.hostProtocol})},{name:"navigation",handlers:xh({operationContext:t,presentation:e.hostPresentation,...e.hostPresentation.applyOrientation?{resetDisplay:L=>l.applyOrientation({mode:"portrait",hideCapsule:!1},L)}:{}})},{name:"cloud",handlers:u.handlers},{name:"companion",handlers:Uf({companion:e.hostCompanion,companionPresentation:e.companionPresentation,miniProgramPresentation:e.miniProgramPresentation,operationContext:t,fileRegistry:a})}],I=Yg(S);let _=!1;const A=()=>{_||(_=!0,e.terminalSignal.removeEventListener("abort",A),l?.dispose(),u?.dispose(),g(),T(),h?.dispose(),i.dispose(),d.dispose(),s?.dispose(),a.dispose())};e.terminalSignal.aborted?A():e.terminalSignal.addEventListener("abort",A,{once:!0});const v=new Set(["file.readText","file.readBytes","file.stat"]);return{modules:S,handlers:I,allowsCompanionAttachmentAccess:(L,N)=>v.has(L)&&hd(N)&&a.isCompanionAttachmentRef(N.target),applyOrientation:l.applyOrientation,notifyViewportChange:l.notifyChange,...M.diagnostics?{storageDiagnostics:M.diagnostics}:{},dispose:A}}catch(M){throw l?.dispose(),u?.dispose(),g(),T(),h?.dispose(),i.dispose(),d.dispose(),s?.dispose(),a.dispose(),M}}function Qg(e){try{console.warn("[hb-sdk-runtime] request-policy",e)}catch{}}function Yg(e){const t=new Map(Ge.map(i=>[i.method,i.module])),r=new Map;for(const i of e)for(const[o,s]of Object.entries(i.handlers)){const a=o,c=t.get(a);if(!c)throw new Error(`Capability Module ${i.name} 注册了未知 method: ${a}`);if(c!==i.name)throw new Error(`Capability method ${a} 应由 ${c} 拥有,不能注册到 ${i.name}`);if(r.has(a))throw new Error(`Capability method ${a} 存在重复 owner`);if(typeof s!="function")throw new Error(`Capability method ${a} 缺少 handler`);r.set(a,s)}const n=Ge.map(i=>i.method).filter(i=>!r.has(i));if(n.length>0)throw new Error(`Capability registry 缺少 method: ${n.join(", ")}`);if(r.size!==Ge.length)throw new Error(`Capability registry method 数量不合法: ${r.size}`);return Object.freeze(Object.fromEntries(r))}const Gg="heybox-mini-dev:";function oa(e){try{return qg(new URL(e))}catch{return!1}}function qg(e){return e.protocol===Gg}function Wg(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"||$g(e)}function $g(e){const t=e.split(".");if(t.length!==4)return!1;const r=t.map(n=>/^\d+$/.test(n)?Number(n):Number.NaN);return r.some(n=>!Number.isInteger(n)||n<0||n>255)?!1:r[0]===10||r[0]===172&&r[1]>=16&&r[1]<=31||r[0]===192&&r[1]===168}const Kg=new Set(["android","ios","ohos","windows","macos","linux","unknown"]);function Jg(e,t){const r=[],n=Zg(e.environmentInfo,r),i=Hr(n?.appVersion,"host.appVersion",r),o=ep(n?.operatingSystem,r);return{info:Object.freeze({runtime:Object.freeze({mode:Xg(e.sdkVersionPolicy?.releaseChannel,r)}),host:Object.freeze({appVersion:i}),miniProgram:Object.freeze({id:Hr(t.miniProgramId),version:Hr(t.miniProgramVersion)}),operatingSystem:Object.freeze(o)}),invalidFields:Object.freeze(r)}}function Zg(e,t){if(e!=null){if(md(e))return e;t.push("environmentInfo")}}function Xg(e,t){return e==="public"?"production":e==="preview"||e==="development"?e:(e!=null&&t.push("runtime.mode"),"unknown")}function ep(e,t){if(e==null)return{name:"unknown",version:null};if(!md(e))return t.push("operatingSystem"),{name:"unknown",version:null};const r=Kg.has(e.name)?e.name:"unknown";return r==="unknown"&&e.name!==void 0&&e.name!==null&&e.name!=="unknown"&&t.push("operatingSystem.name"),{name:r,version:Hr(e.version,"operatingSystem.version",t)}}function Hr(e,t,r){return e==null?null:typeof e=="string"&&e.trim()?e.trim():(t&&r&&r.push(t),null)}function md(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const tp="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjY3IiBoZWlnaHQ9IjIyIiB2aWV3Qm94PSIwIDAgNjcgMjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGlkPSJTdWJ0cmFjdCIgZD0iTTY2IDBDNjYuMzM3MiAwIDY2LjY3MDYgMC4wMTcxODM4IDY3IDAuMDQ2ODc1QzYxLjM5MzYgMC41NTIxODkgNTcgNS4yNjIwMiA1NyAxMUM1NyAxNi43MzggNjEuMzkzNiAyMS40NDY4IDY3IDIxLjk1MjFDNjYuNjcwNiAyMS45ODE4IDY2LjMzNzIgMjIgNjYgMjJIMTFDNC45MjQ4NyAyMiAwIDE3LjA3NTEgMCAxMUMwIDQuOTI0ODcgNC45MjQ4NyAyLjY1NzU2ZS0wNyAxMSAwSDY2Wk04LjI0MzE2IDYuNzM1MzVDOC4yNDMxNiA2LjU5Mzk3IDguMTQyNTggNi41MzU3NiA4LjAxOTUzIDYuNjA2NDVMNi4yMjI2NiA3LjY0MDYyQzYuMTU3ODcgNy42ODIyOCA2LjEwNDE2IDcuNzM5MTcgNi4wNjU0MyA3LjgwNTY2QzYuMDI2NzIgNy44NzIyNyA2LjAwNDEgNy45NDc1MiA2IDguMDI0NDFWMTMuOTY1OEM2LjAwMzcxIDE0LjA0MzQgNi4wMjU4NSAxNC4xMTkxIDYuMDY0NDUgMTQuMTg2NUM2LjEwMzE5IDE0LjI1NCA2LjE1NzQgMTQuMzEyIDYuMjIyNjYgMTQuMzU0NUw5Ljg3MTA5IDE2LjQ1OEM5Ljk5MzQ2IDE2LjUyNzIgMTAuMDkzNiAxNi41ODQyIDEwLjA5NDcgMTYuNTg1OUMxMC4wOTQ3IDE2LjU4NzEgMTAuMTkzNCAxNi42NDUxIDEwLjMxNjQgMTYuNzE1OEwxMi41MDEgMTcuOTY5N0MxMi42MjI4IDE4LjA0MDMgMTIuNzIzNiAxNy45ODIyIDEyLjcyMzYgMTcuODQwOFYxMi4zNjcyQzEyLjcyMyAxMi4yOTk0IDEyLjY5NTcgMTIuMjM0MyAxMi42NDc1IDEyLjE4NjVDMTIuNTk5MiAxMi4xMzg4IDEyLjUzMzggMTIuMTEyMyAxMi40NjU4IDEyLjExMjNIMTAuNzM3M0MxMC42NzAyIDEyLjExMzIgMTAuNjA1OSAxMi4xMzk5IDEwLjU1ODYgMTIuMTg3NUMxMC41MTEzIDEyLjIzNTIgMTAuNDg0NyAxMi4zMDAxIDEwLjQ4NDQgMTIuMzY3MlYxMy44Mzc5QzEwLjQ4NDIgMTMuOTc4OSAxMC4zODQ2IDE0LjAzNjQgMTAuMjYxNyAxMy45NjU4TDguNDY0ODQgMTIuOTM1NUM4LjQwMDI2IDEyLjg5MzUgOC4zNDYxNCAxMi44MzcyIDguMzA3NjIgMTIuNzcwNUM4LjI2OTE5IDEyLjcwNCA4LjI0NzM1IDEyLjYyOTQgOC4yNDMxNiAxMi41NTI3VjYuNzM1MzVaTTI0LjMzNCAxNC4zOTI2QzI0LjMzMzkgMTQuOTk4NSAyNC4yMDU1IDE1LjE4NDYgMjMuNTk4NiAxNS4xOTYzTDIyLjMwMTggMTUuMjU0OUwyMi42NjUgMTYuMjU0OUgyNS4wODY5QzI1LjY3MDUgMTYuMDg0IDI1Ljg3MjEgMTUuNzE5NCAyNS44NzIxIDE0LjgyMzJWNS43ODIyM0wyNC4zMzQgNS43MjM2M1YxNC4zOTI2Wk0zMi4yODIyIDE0LjQ3NTZDMzEuOTQ2IDE1LjA0OTIgMzEuNDY1OSAxNS43NTcxIDMxLjA5OTYgMTYuMjU0OUgzMi42MTkxQzMzLjA2NzMgMTUuNTIxMiAzMy4zNzUxIDE0LjkyOCAzMy41NDg4IDE0LjQ3NTZIMzIuMjgyMlpNMzQuODEwNSAxNS4zOTc1QzM0Ljg3OTEgMTUuNzEwMSAzNC45MzExIDE1Ljk5ODIgMzQuOTczNiAxNi4yNTQ5SDM2LjE4NjVMMzYuMTgxNiAxNi4yMzU0QzM2LjA2NjIgMTUuNzM4OCAzNS44OTg5IDE1LjAxOCAzNS43NDEyIDE0LjQ3NTZIMzQuNTI5M0wzNC44MTA1IDE1LjM5NzVaTTM2Ljk4MTQgMTQuNjUzM0MzNy4wOTg0IDE0Ljg3NyAzNy4yNDExIDE1LjE1MDEgMzcuMzMzIDE1LjQwMjNMMzcuNjM1NyAxNi4yNTQ5SDM5LjA4MDFDMzkuMDMzNiAxNS44MzI1IDM4LjU5NCAxNS4wNTUzIDM4LjIzODMgMTQuNDc1NkgzNi44ODg3QzM2LjkxNjEgMTQuNTI5OCAzNi45NDggMTQuNTg5NCAzNi45ODE0IDE0LjY1MzNaTTM5LjI3MDUgMTQuNDc1NkMzOS44MzAxIDE1LjE4MjEgNDAuMTg2MyAxNS44MDA0IDQwLjQxMzEgMTYuMjU0OUg0MS44MzVDNDEuNzM2NyAxNS42NjU2IDQxLjIyOTIgMTQuOTkzNiA0MC43NzY0IDE0LjQ3NTZIMzkuMjcwNVpNNDMuOTIyOSAxNS4wMDQ5SDQyLjc2NjZWMTUuOTk2MUg1My4xMjVWMTUuMDA0OUg1MS45Njg4VjEyLjQ3NTZINDMuOTIyOVYxNS4wMDQ5Wk0xMC43MDQxIDQuMDMwMjdDMTAuNTgxMSAzLjk1OTU4IDEwLjQ4MDUgNC4wMTc4IDEwLjQ4MDUgNC4xNTkxOFY5LjYyMzA1QzEwLjQ4MDYgOS42OTA3NCAxMC41MDc4IDkuNzU1NzggMTAuNTU1NyA5LjgwMzcxQzEwLjYwMzcgOS44NTE3MSAxMC42NjkzIDkuODc4ODcgMTAuNzM3MyA5Ljg3ODkxSDEyLjQ2NDhDMTIuNDk4NiA5Ljg3OTA1IDEyLjUzMjIgOS44NzIxNyAxMi41NjM1IDkuODU5MzhDMTIuNTk0NCA5Ljg0NjY2IDEyLjYyMjcgOS44MjgyMSAxMi42NDY1IDkuODA0NjlDMTIuNjcwNCA5Ljc4MDg5IDEyLjY5MDIgOS43NTE4NSAxMi43MDMxIDkuNzIwN0MxMi43MTYgOS42ODk3NSAxMi43MjI2IDkuNjU2NTQgMTIuNzIyNyA5LjYyMzA1VjguMTUyMzRDMTIuNzIyNyA4LjAxMSAxMi44MjIzIDcuOTUyODIgMTIuOTQ1MyA4LjAyMzQ0TDE0Ljc0MTIgOS4wNjE1MkMxNC44MDYgOS4xMDM2MiAxNC44NTk3IDkuMTYwNzcgMTQuODk4NCA5LjIyNzU0QzE0LjkzNzEgOS4yOTQzIDE0Ljk1OTYgOS4zNjkyOSAxNC45NjM5IDkuNDQ2MjlWMTUuMjU5OEMxNC45NjQxIDE1LjQwMDcgMTUuMDYzNyAxNS40NTcgMTUuMTg2NSAxNS4zODc3TDE2Ljk4NDQgMTQuMzUwNkMxNy4wNDkgMTQuMzA4NyAxNy4xMDMgMTQuMjUyMSAxNy4xNDE2IDE0LjE4NTVDMTcuMTgwMyAxNC4xMTg3IDE3LjIwMyAxNC4wNDMgMTcuMjA3IDEzLjk2NThWOC4wMjQ0MUMxNy4yMDI5IDcuOTQ3MzYgMTcuMTgwMyA3Ljg3MjQ2IDE3LjE0MTYgNy44MDU2NkMxNy4xMDI5IDcuNzM4ODQgMTcuMDQ5MyA3LjY4MTY0IDE2Ljk4NDQgNy42Mzk2NUwxMS44MjMyIDQuNjY3OTdDMTEuNzAwMiA0LjU5NzI4IDExLjU5NzcgNC41NDEwMiAxMS41OTc3IDQuNTQxMDJDMTEuNTg0NiA0LjUzMDQ3IDExLjQ4NzkgNC40ODIxMyAxMS4zNzIxIDQuNDE1MDRMMTAuNzA0MSA0LjAzMDI3Wk00Ni4yNDcxIDE1LjAwNDlINDUuMDkwOFYxMy4zMzY5SDQ2LjI0NzFWMTUuMDA0OVpNNDguNTI0NCAxNS4wMDQ5SDQ3LjM3OTlWMTMuMzM2OUg0OC41MjQ0VjE1LjAwNDlaTTUwLjgzNTkgMTUuMDA0OUg0OS42NTcyVjEzLjMzNjlINTAuODM1OVYxNS4wMDQ5Wk0zMi4wNjE1IDEwLjM2NTJIMzUuODAwOFYxMC45ODI0SDMxLjk4NjNWMTIuMDkwOEgzNS44MDA4VjEyLjc1NDlIMzEuMjUxVjEzLjgyNzFINDEuNzY1NlYxMi43NTQ5SDM3LjI2MjdWMTIuMDkwOEg0MS4wMjkzVjEwLjk4MjRIMzcuMjYyN1YxMC4zNjUySDM5Ljg1ODRDNDAuNDYzNCAxMC4zNjUyIDQwLjk1NCA5Ljg3NTQzIDQwLjk1NDEgOS4yNzE0OFY2LjAxNjZIMzIuMDYxNVYxMC4zNjUyWk0yMS4yNDQxIDguMzAzNzFDMjAuOTY4NiA5LjU3MTM4IDIwLjcxMzcgMTAuNTAxIDIwLjQ4MDUgMTEuMDkzOEMyMC4yNDcyIDExLjY4NjMgMTkuODEyNiAxMi41MDg2IDE5LjE3NDggMTMuNTYyNUwxOS4xMTUyIDEzLjY2MTFIMjAuNTc5MUwyMC41OTg2IDEzLjYzMzhDMjEuMzE2NiAxMi42MTg4IDIxLjgwNzUgMTEuNzYwNCAyMi4wNjc0IDExLjA1OTZDMjIuMzI1NyAxMC4zNjI4IDIyLjU4MzUgOS40NTMxMSAyMi44NDA4IDguMzMyMDNMMjIuODU4NCA4LjI1MjkzSDIxLjI1NDlMMjEuMjQ0MSA4LjMwMzcxWk0yNy4xOTA0IDguNjk4MjRDMjcuNDE5MiA5LjY1Mjc1IDI3LjY0ODMgMTAuNDQwMiAyNy44Nzc5IDExLjA1OTZDMjguMTM3OCAxMS43NjAzIDI4LjYyNzggMTIuNjE4OSAyOS4zNDU3IDEzLjYzMzhMMjkuMzY1MiAxMy42NjExSDMwLjgyOTFMMzAuNjE0MyAxMy4zMDQ3QzMwLjA2MDQgMTIuMzczNiAyOS42Nzc2IDExLjYzNjggMjkuNDYzOSAxMS4wOTM4QzI5LjIzMDYgMTAuNTAxIDI4Ljk3NTggOS41NzEzOCAyOC43MDAyIDguMzAzNzFMMjguNjg5NSA4LjI1MjkzSDI3LjA4NTlMMjcuMTkwNCA4LjY5ODI0Wk00NC4zNTQ1IDExLjg5MjZINTAuNDc2NkM1MS4wODE1IDExLjg5MjUgNTEuNTcyMSAxMS40MDI3IDUxLjU3MjMgMTAuNzk4OFY5LjM1MDU5SDQ0LjM1NDVWMTEuODkyNlpNNTAuNDI3NyAxMC40MDE0QzUwLjQyNzUgMTAuNzAzMiA1MC4xODIzIDEwLjk0ODIgNDkuODc5OSAxMC45NDgySDQ1LjQ5OVYxMC4yODMySDUwLjQyNzdWMTAuNDAxNFpNMzUuODAwOCA5LjI1NzgxSDMzLjI1MjlWNi45NDgyNEgzNS44MDA4VjkuMjU3ODFaTTM5Ljc2MzcgOC43MTA5NEMzOS43NjM1IDkuMDEyNjYgMzkuNTE4MSA5LjI1NzYgMzkuMjE1OCA5LjI1NzgxSDM3LjI2MjdWNi45NDgyNEgzOS43NjM3VjguNzEwOTRaTTQ3LjQ1NDEgNS41ODU5NEM0Ni4yMTQ0IDYuOTI4NCA0NC41Mzc1IDcuODYyNTcgNDIuNjQ5NCA4LjE2NDA2VjkuMDczMjRDNDMuNDc4NiA4Ljk1Mjc3IDQ0LjY1ODcgOC43NTU5OCA0NS4zNzExIDguNDA2MjVWOC43NDMxNkg1MC41NDM5VjguNDE3OTdDNTEuMTk3OCA4Ljc0NDM0IDUyLjQxMjIgOC45NDExMSA1My4yNzY0IDkuMDczMjRMNTMuMjc3MyA4LjE5NjI5QzUzLjI0OCA4LjE4Njc5IDUzLjIxODYgOC4xNzc1MiA1My4xODk1IDguMTY3OTdDNTEuMzA2IDcuODcyNjcgNDkuNjMxNiA2Ljk0OCA0OC4zODk2IDUuNjE2MjFMNDcuNDU0MSA1LjU4NTk0Wk0zMy42OTkyIDcuMTY3OTdDMzMuODU5OCA4LjIyNTk3IDM0LjQ2NTQgOS4wMjk4NiAzNC40Nzc1IDkuMDQ1OUgzNS40NTEyQzM1LjQ0NDIgOS4wMzEwOCAzNC45MzE2IDcuOTM5OTcgMzQuOTMxNiA3LjE2Nzk3SDMzLjY5OTJaTTM4LjExMTMgNy4xNjc5N0MzOC4xMTEzIDcuOTM3OCAzNy42MDE2IDkuMDI1MTEgMzcuNTkxOCA5LjA0NTlIMzguNTY1NEMzOC41ODE1IDkuMDI0NjUgMzkuMTgzNyA4LjIyMjQ0IDM5LjM0MzggNy4xNjc5N0gzOC4xMTEzWk00Ny45NjM5IDYuNjExMzNDNDguMzI1OSA3LjA0MjU0IDQ4Ljg3NDggNy40NzQwNiA0OS42MTA0IDcuOTA1MjdINDYuMjkzQzQ3LjA1MjEgNy40NjIyNSA0Ny42MDE4IDcuMDMxMDMgNDcuOTYzOSA2LjYxMTMzWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",rp="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMTIgMTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSIxLWNvbW1vbl9zZWFyY2hfbGluZV8yNHgyNCI+CjxnIGlkPSJ1bmlvbiI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNS44NjAxMyAxLjkyNTAxQzMuNzI4NzkgMS45MjUwMSAyLjAwMDAyIDMuNjU0NiAyLjAwMDAyIDUuNzg5MzdDMi4wMDAwMiA3LjkyNDEzIDMuNzI4NzkgOS42NTM3MiA1Ljg2MDEzIDkuNjUzNzJDNy45OTE0NyA5LjY1MzcyIDkuNzIwMjQgNy45MjQxMyA5LjcyMDI0IDUuNzg5MzdDOS43MjAyNCAzLjY1NDYgNy45OTE0NyAxLjkyNTAxIDUuODYwMTMgMS45MjUwMVpNMC44MDAwMjQgNS43ODkzN0MwLjgwMDAyNCAyLjk5Mjk0IDMuMDY0OTcgMC43MjUwMTIgNS44NjAxMyAwLjcyNTAxMkM4LjY1NTI5IDAuNzI1MDEyIDEwLjkyMDIgMi45OTI5NCAxMC45MjAyIDUuNzg5MzdDMTAuOTIwMiA4LjU4NTggOC42NTUyOSAxMC44NTM3IDUuODYwMTMgMTAuODUzN0MzLjA2NDk3IDEwLjg1MzcgMC44MDAwMjQgOC41ODU4IDAuODAwMDI0IDUuNzg5MzdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTkuMDEzMTkgOC45MzQ5N0M5LjI0NzQgOC43MDA1NCA5LjYyNzExIDguNzAwNTQgOS44NjEzMiA4LjkzNDk3TDExLjA1MDggMTAuMTI1NkMxMS4yODUgMTAuMzYgMTEuMjg1IDEwLjc0MDEgMTEuMDUwOCAxMC45NzQ1QzEwLjgxNjYgMTEuMjA4OSAxMC40MzY5IDExLjIwODkgMTAuMjAyNyAxMC45NzQ1TDkuMDEzMTkgOS43ODM5QzguNzc4OTkgOS41NDk0OCA4Ljc3ODk5IDkuMTY5NCA5LjAxMzE5IDguOTM0OTdaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjwvZz4KPC9zdmc+Cg==",np="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjY3IiBoZWlnaHQ9IjIyIiB2aWV3Qm94PSIwIDAgNjcgMjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGlkPSJTdWJ0cmFjdCIgZD0iTTY2IDBDNjYuMzM3MiAwIDY2LjY3MDYgMC4wMTcxODM4IDY3IDAuMDQ2ODc1QzYxLjM5MzYgMC41NTIxODkgNTcgNS4yNjIwMiA1NyAxMUM1NyAxNi43MzggNjEuMzkzNiAyMS40NDY4IDY3IDIxLjk1MjFDNjYuNjcwNiAyMS45ODE4IDY2LjMzNzIgMjIgNjYgMjJIMTFDNC45MjQ4NyAyMiAwIDE3LjA3NTEgMCAxMUMwIDQuOTI0ODcgNC45MjQ4NyAyLjY1NzU2ZS0wNyAxMSAwSDY2Wk04LjI0MzE2IDYuNzM1MzVDOC4yNDMxNiA2LjU5Mzk3IDguMTQyNTggNi41MzU3NiA4LjAxOTUzIDYuNjA2NDVMNi4yMjI2NiA3LjY0MDYyQzYuMTU3ODcgNy42ODIyOCA2LjEwNDE2IDcuNzM5MTcgNi4wNjU0MyA3LjgwNTY2QzYuMDI2NzIgNy44NzIyNyA2LjAwNDEgNy45NDc1MiA2IDguMDI0NDFWMTMuOTY1OEM2LjAwMzcxIDE0LjA0MzQgNi4wMjU4NSAxNC4xMTkxIDYuMDY0NDUgMTQuMTg2NUM2LjEwMzE5IDE0LjI1NCA2LjE1NzQgMTQuMzEyIDYuMjIyNjYgMTQuMzU0NUw5Ljg3MTA5IDE2LjQ1OEM5Ljk5MzQ2IDE2LjUyNzIgMTAuMDkzNiAxNi41ODQyIDEwLjA5NDcgMTYuNTg1OUMxMC4wOTQ3IDE2LjU4NzEgMTAuMTkzNCAxNi42NDUxIDEwLjMxNjQgMTYuNzE1OEwxMi41MDEgMTcuOTY5N0MxMi42MjI4IDE4LjA0MDMgMTIuNzIzNiAxNy45ODIyIDEyLjcyMzYgMTcuODQwOFYxMi4zNjcyQzEyLjcyMyAxMi4yOTk0IDEyLjY5NTcgMTIuMjM0MyAxMi42NDc1IDEyLjE4NjVDMTIuNTk5MiAxMi4xMzg4IDEyLjUzMzggMTIuMTEyMyAxMi40NjU4IDEyLjExMjNIMTAuNzM3M0MxMC42NzAyIDEyLjExMzIgMTAuNjA1OSAxMi4xMzk5IDEwLjU1ODYgMTIuMTg3NUMxMC41MTEzIDEyLjIzNTIgMTAuNDg0NyAxMi4zMDAxIDEwLjQ4NDQgMTIuMzY3MlYxMy44Mzc5QzEwLjQ4NDIgMTMuOTc4OSAxMC4zODQ2IDE0LjAzNjQgMTAuMjYxNyAxMy45NjU4TDguNDY0ODQgMTIuOTM1NUM4LjQwMDI2IDEyLjg5MzUgOC4zNDYxNCAxMi44MzcyIDguMzA3NjIgMTIuNzcwNUM4LjI2OTE5IDEyLjcwNCA4LjI0NzM1IDEyLjYyOTQgOC4yNDMxNiAxMi41NTI3VjYuNzM1MzVaTTI0LjMzNCAxNC4zOTI2QzI0LjMzMzkgMTQuOTk4NSAyNC4yMDU1IDE1LjE4NDYgMjMuNTk4NiAxNS4xOTYzTDIyLjMwMTggMTUuMjU0OUwyMi42NjUgMTYuMjU0OUgyNS4wODY5QzI1LjY3MDUgMTYuMDg0IDI1Ljg3MjEgMTUuNzE5NCAyNS44NzIxIDE0LjgyMzJWNS43ODIyM0wyNC4zMzQgNS43MjM2M1YxNC4zOTI2Wk0zMi4yODIyIDE0LjQ3NTZDMzEuOTQ2IDE1LjA0OTIgMzEuNDY1OSAxNS43NTcxIDMxLjA5OTYgMTYuMjU0OUgzMi42MTkxQzMzLjA2NzMgMTUuNTIxMiAzMy4zNzUxIDE0LjkyOCAzMy41NDg4IDE0LjQ3NTZIMzIuMjgyMlpNMzQuODEwNSAxNS4zOTc1QzM0Ljg3OTEgMTUuNzEwMSAzNC45MzExIDE1Ljk5ODIgMzQuOTczNiAxNi4yNTQ5SDM2LjE4NjVMMzYuMTgxNiAxNi4yMzU0QzM2LjA2NjIgMTUuNzM4OCAzNS44OTg5IDE1LjAxOCAzNS43NDEyIDE0LjQ3NTZIMzQuNTI5M0wzNC44MTA1IDE1LjM5NzVaTTM2Ljk4MTQgMTQuNjUzM0MzNy4wOTg0IDE0Ljg3NyAzNy4yNDExIDE1LjE1MDEgMzcuMzMzIDE1LjQwMjNMMzcuNjM1NyAxNi4yNTQ5SDM5LjA4MDFDMzkuMDMzNiAxNS44MzI1IDM4LjU5NCAxNS4wNTUzIDM4LjIzODMgMTQuNDc1NkgzNi44ODg3QzM2LjkxNjEgMTQuNTI5OCAzNi45NDggMTQuNTg5NCAzNi45ODE0IDE0LjY1MzNaTTM5LjI3MDUgMTQuNDc1NkMzOS44MzAxIDE1LjE4MjEgNDAuMTg2MyAxNS44MDA0IDQwLjQxMzEgMTYuMjU0OUg0MS44MzVDNDEuNzM2NyAxNS42NjU2IDQxLjIyOTIgMTQuOTkzNiA0MC43NzY0IDE0LjQ3NTZIMzkuMjcwNVpNNDMuOTIyOSAxNS4wMDQ5SDQyLjc2NjZWMTUuOTk2MUg1My4xMjVWMTUuMDA0OUg1MS45Njg4VjEyLjQ3NTZINDMuOTIyOVYxNS4wMDQ5Wk0xMC43MDQxIDQuMDMwMjdDMTAuNTgxMSAzLjk1OTU4IDEwLjQ4MDUgNC4wMTc4IDEwLjQ4MDUgNC4xNTkxOFY5LjYyMzA1QzEwLjQ4MDYgOS42OTA3NCAxMC41MDc4IDkuNzU1NzggMTAuNTU1NyA5LjgwMzcxQzEwLjYwMzcgOS44NTE3MSAxMC42NjkzIDkuODc4ODcgMTAuNzM3MyA5Ljg3ODkxSDEyLjQ2NDhDMTIuNDk4NiA5Ljg3OTA1IDEyLjUzMjIgOS44NzIxNyAxMi41NjM1IDkuODU5MzhDMTIuNTk0NCA5Ljg0NjY2IDEyLjYyMjcgOS44MjgyMSAxMi42NDY1IDkuODA0NjlDMTIuNjcwNCA5Ljc4MDg5IDEyLjY5MDIgOS43NTE4NSAxMi43MDMxIDkuNzIwN0MxMi43MTYgOS42ODk3NSAxMi43MjI2IDkuNjU2NTQgMTIuNzIyNyA5LjYyMzA1VjguMTUyMzRDMTIuNzIyNyA4LjAxMSAxMi44MjIzIDcuOTUyODIgMTIuOTQ1MyA4LjAyMzQ0TDE0Ljc0MTIgOS4wNjE1MkMxNC44MDYgOS4xMDM2MiAxNC44NTk3IDkuMTYwNzcgMTQuODk4NCA5LjIyNzU0QzE0LjkzNzEgOS4yOTQzIDE0Ljk1OTYgOS4zNjkyOSAxNC45NjM5IDkuNDQ2MjlWMTUuMjU5OEMxNC45NjQxIDE1LjQwMDcgMTUuMDYzNyAxNS40NTcgMTUuMTg2NSAxNS4zODc3TDE2Ljk4NDQgMTQuMzUwNkMxNy4wNDkgMTQuMzA4NyAxNy4xMDMgMTQuMjUyMSAxNy4xNDE2IDE0LjE4NTVDMTcuMTgwMyAxNC4xMTg3IDE3LjIwMyAxNC4wNDMgMTcuMjA3IDEzLjk2NThWOC4wMjQ0MUMxNy4yMDI5IDcuOTQ3MzYgMTcuMTgwMyA3Ljg3MjQ2IDE3LjE0MTYgNy44MDU2NkMxNy4xMDI5IDcuNzM4ODQgMTcuMDQ5MyA3LjY4MTY0IDE2Ljk4NDQgNy42Mzk2NUwxMS44MjMyIDQuNjY3OTdDMTEuNzAwMiA0LjU5NzI4IDExLjU5NzcgNC41NDEwMiAxMS41OTc3IDQuNTQxMDJDMTEuNTg0NiA0LjUzMDQ3IDExLjQ4NzkgNC40ODIxMyAxMS4zNzIxIDQuNDE1MDRMMTAuNzA0MSA0LjAzMDI3Wk00Ni4yNDcxIDE1LjAwNDlINDUuMDkwOFYxMy4zMzY5SDQ2LjI0NzFWMTUuMDA0OVpNNDguNTI0NCAxNS4wMDQ5SDQ3LjM3OTlWMTMuMzM2OUg0OC41MjQ0VjE1LjAwNDlaTTUwLjgzNTkgMTUuMDA0OUg0OS42NTcyVjEzLjMzNjlINTAuODM1OVYxNS4wMDQ5Wk0zMi4wNjE1IDEwLjM2NTJIMzUuODAwOFYxMC45ODI0SDMxLjk4NjNWMTIuMDkwOEgzNS44MDA4VjEyLjc1NDlIMzEuMjUxVjEzLjgyNzFINDEuNzY1NlYxMi43NTQ5SDM3LjI2MjdWMTIuMDkwOEg0MS4wMjkzVjEwLjk4MjRIMzcuMjYyN1YxMC4zNjUySDM5Ljg1ODRDNDAuNDYzNCAxMC4zNjUyIDQwLjk1NCA5Ljg3NTQzIDQwLjk1NDEgOS4yNzE0OFY2LjAxNjZIMzIuMDYxNVYxMC4zNjUyWk0yMS4yNDQxIDguMzAzNzFDMjAuOTY4NiA5LjU3MTM4IDIwLjcxMzcgMTAuNTAxIDIwLjQ4MDUgMTEuMDkzOEMyMC4yNDcyIDExLjY4NjMgMTkuODEyNiAxMi41MDg2IDE5LjE3NDggMTMuNTYyNUwxOS4xMTUyIDEzLjY2MTFIMjAuNTc5MUwyMC41OTg2IDEzLjYzMzhDMjEuMzE2NiAxMi42MTg4IDIxLjgwNzUgMTEuNzYwNCAyMi4wNjc0IDExLjA1OTZDMjIuMzI1NyAxMC4zNjI4IDIyLjU4MzUgOS40NTMxMSAyMi44NDA4IDguMzMyMDNMMjIuODU4NCA4LjI1MjkzSDIxLjI1NDlMMjEuMjQ0MSA4LjMwMzcxWk0yNy4xOTA0IDguNjk4MjRDMjcuNDE5MiA5LjY1Mjc1IDI3LjY0ODMgMTAuNDQwMiAyNy44Nzc5IDExLjA1OTZDMjguMTM3OCAxMS43NjAzIDI4LjYyNzggMTIuNjE4OSAyOS4zNDU3IDEzLjYzMzhMMjkuMzY1MiAxMy42NjExSDMwLjgyOTFMMzAuNjE0MyAxMy4zMDQ3QzMwLjA2MDQgMTIuMzczNiAyOS42Nzc2IDExLjYzNjggMjkuNDYzOSAxMS4wOTM4QzI5LjIzMDYgMTAuNTAxIDI4Ljk3NTggOS41NzEzOCAyOC43MDAyIDguMzAzNzFMMjguNjg5NSA4LjI1MjkzSDI3LjA4NTlMMjcuMTkwNCA4LjY5ODI0Wk00NC4zNTQ1IDExLjg5MjZINTAuNDc2NkM1MS4wODE1IDExLjg5MjUgNTEuNTcyMSAxMS40MDI3IDUxLjU3MjMgMTAuNzk4OFY5LjM1MDU5SDQ0LjM1NDVWMTEuODkyNlpNNTAuNDI3NyAxMC40MDE0QzUwLjQyNzUgMTAuNzAzMiA1MC4xODIzIDEwLjk0ODIgNDkuODc5OSAxMC45NDgySDQ1LjQ5OVYxMC4yODMySDUwLjQyNzdWMTAuNDAxNFpNMzUuODAwOCA5LjI1NzgxSDMzLjI1MjlWNi45NDgyNEgzNS44MDA4VjkuMjU3ODFaTTM5Ljc2MzcgOC43MTA5NEMzOS43NjM1IDkuMDEyNjYgMzkuNTE4MSA5LjI1NzYgMzkuMjE1OCA5LjI1NzgxSDM3LjI2MjdWNi45NDgyNEgzOS43NjM3VjguNzEwOTRaTTQ3LjQ1NDEgNS41ODU5NEM0Ni4yMTQ0IDYuOTI4NCA0NC41Mzc1IDcuODYyNTcgNDIuNjQ5NCA4LjE2NDA2VjkuMDczMjRDNDMuNDc4NiA4Ljk1Mjc3IDQ0LjY1ODcgOC43NTU5OCA0NS4zNzExIDguNDA2MjVWOC43NDMxNkg1MC41NDM5VjguNDE3OTdDNTEuMTk3OCA4Ljc0NDM0IDUyLjQxMjIgOC45NDExMSA1My4yNzY0IDkuMDczMjRMNTMuMjc3MyA4LjE5NjI5QzUzLjI0OCA4LjE4Njc5IDUzLjIxODYgOC4xNzc1MiA1My4xODk1IDguMTY3OTdDNTEuMzA2IDcuODcyNjcgNDkuNjMxNiA2Ljk0OCA0OC4zODk2IDUuNjE2MjFMNDcuNDU0MSA1LjU4NTk0Wk0zMy42OTkyIDcuMTY3OTdDMzMuODU5OCA4LjIyNTk3IDM0LjQ2NTQgOS4wMjk4NiAzNC40Nzc1IDkuMDQ1OUgzNS40NTEyQzM1LjQ0NDIgOS4wMzEwOCAzNC45MzE2IDcuOTM5OTcgMzQuOTMxNiA3LjE2Nzk3SDMzLjY5OTJaTTM4LjExMTMgNy4xNjc5N0MzOC4xMTEzIDcuOTM3OCAzNy42MDE2IDkuMDI1MTEgMzcuNTkxOCA5LjA0NTlIMzguNTY1NEMzOC41ODE1IDkuMDI0NjUgMzkuMTgzNyA4LjIyMjQ0IDM5LjM0MzggNy4xNjc5N0gzOC4xMTEzWk00Ny45NjM5IDYuNjExMzNDNDguMzI1OSA3LjA0MjU0IDQ4Ljg3NDggNy40NzQwNiA0OS42MTA0IDcuOTA1MjdINDYuMjkzQzQ3LjA1MjEgNy40NjIyNSA0Ny42MDE4IDcuMDMxMDMgNDcuOTYzOSA2LjYxMTMzWiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==",ip="data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMTIgMTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSIxLWNvbW1vbl9zZWFyY2hfbGluZV8yNHgyNCI+CjxnIGlkPSJ1bmlvbiI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNS44NjAxMyAxLjkyNTAxQzMuNzI4NzkgMS45MjUwMSAyLjAwMDAyIDMuNjU0NiAyLjAwMDAyIDUuNzg5MzdDMi4wMDAwMiA3LjkyNDEzIDMuNzI4NzkgOS42NTM3MiA1Ljg2MDEzIDkuNjUzNzJDNy45OTE0NyA5LjY1MzcyIDkuNzIwMjQgNy45MjQxMyA5LjcyMDI0IDUuNzg5MzdDOS43MjAyNCAzLjY1NDYgNy45OTE0NyAxLjkyNTAxIDUuODYwMTMgMS45MjUwMVpNMC44MDAwMjQgNS43ODkzN0MwLjgwMDAyNCAyLjk5Mjk0IDMuMDY0OTcgMC43MjUwMTIgNS44NjAxMyAwLjcyNTAxMkM4LjY1NTI5IDAuNzI1MDEyIDEwLjkyMDIgMi45OTI5NCAxMC45MjAyIDUuNzg5MzdDMTAuOTIwMiA4LjU4NTggOC42NTUyOSAxMC44NTM3IDUuODYwMTMgMTAuODUzN0MzLjA2NDk3IDEwLjg1MzcgMC44MDAwMjQgOC41ODU4IDAuODAwMDI0IDUuNzg5MzdaIiBmaWxsPSJibGFjayIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTkuMDEzMTkgOC45MzQ5N0M5LjI0NzQgOC43MDA1NCA5LjYyNzExIDguNzAwNTQgOS44NjEzMiA4LjkzNDk3TDExLjA1MDggMTAuMTI1NkMxMS4yODUgMTAuMzYgMTEuMjg1IDEwLjc0MDEgMTEuMDUwOCAxMC45NzQ1QzEwLjgxNjYgMTEuMjA4OSAxMC40MzY5IDExLjIwODkgMTAuMjAyNyAxMC45NzQ1TDkuMDEzMTkgOS43ODM5QzguNzc4OTkgOS41NDk0OCA4Ljc3ODk5IDkuMTY5NCA5LjAxMzE5IDguOTM0OTdaIiBmaWxsPSJibGFjayIvPgo8L2c+CjwvZz4KPC9zdmc+Cg==";async function op(e,t,r,n,i="dark"){ee(n);const o=e.defaultView;if(!o||!e.body)throw new Error("截图水印缺少可用的展示窗口");const s=e.createElement("div"),a=i==="light",c=a?"black":"white";s.dataset.miniProgramScreenshotWatermark="",s.setAttribute("aria-hidden","true");const d=Math.min(1,r.width/200,r.height/57);s.style.cssText=`position:fixed;left:${r.left}px;top:${r.top+r.height-57*d}px;width:${r.width}px;height:${57*d}px;z-index:2147483647;pointer-events:none;overflow:hidden;`;const l=e.createElement("div");l.style.cssText=`display:flex;flex-direction:column;align-items:center;width:${r.width/d}px;height:57px;transform:scale(${d});transform-origin:top left;font-family:"PingFang SC",sans-serif;`;const h=e.createElement("div");h.style.cssText="display:flex;align-items:center;max-width:calc(100% - 24px);height:22px;flex-shrink:0;";const u=e.createElement("img");u.src=a?np:tp,u.style.cssText="width:67px;height:22px;flex-shrink:0;margin-right:-11px;";const g=e.createElement("div");g.style.cssText=`display:flex;align-items:center;gap:2px;min-width:0;height:22px;box-sizing:border-box;border:1.5px solid ${c};border-radius:11px;padding:0 7px 0 6px;`;const T=e.createElement("img");T.src=a?ip:rp,T.style.cssText="width:12px;height:12px;flex-shrink:0;";const M=e.createElement("span");M.textContent=t?.trim()||"小程序工坊",M.style.cssText=`color:${c};font-size:11px;font-weight:500;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;`;const S=e.createElement("div");S.textContent="小黑盒工坊小程序",S.style.cssText=`margin-top:6px;color:${a?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.4)"};font-size:11px;font-weight:400;line-height:16px;white-space:nowrap;`,g.append(T,M),h.append(u,g),l.append(h,S),s.append(l),e.body.append(s);const I=()=>{s.remove(),n.removeEventListener("abort",I)};n.addEventListener("abort",I,{once:!0});try{return await W(()=>Promise.all([u.decode(),T.decode()]),n),await W(()=>new Promise(_=>{let A=o.requestAnimationFrame(()=>{A=o.requestAnimationFrame(()=>{n.removeEventListener("abort",v),_()})});const v=()=>o.cancelAnimationFrame(A);n.addEventListener("abort",v,{once:!0})}),n),I}catch(_){throw I(),_}}const sp=1,gd="allow-scripts allow-same-origin",ap="",cp="no-referrer";function dp(e=gd){return!e.split(/\s+/).includes("allow-same-origin")}function sa(){return window.crypto?.randomUUID?window.crypto.randomUUID():`${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}const up=new Set(["javascript:","data:","blob:","file:"]),aa="xiaoheihe.cn";function lp(e,t=window.location.href,r={}){const n=e.trim();if(!n)throw new Error("缺少 mini_url 参数");let i;try{i=new URL(n)}catch{throw new Error("小程序链接必须是绝对 URL")}if(up.has(i.protocol)||!["http:","https:"].includes(i.protocol))throw new Error("不支持的小程序链接协议");if(!pp(i,t,r))throw new Error("小程序链接必须属于 https://*.xiaoheihe.cn 或本地调试地址");return i.toString()}function fp(e,t){const r=new URL(e);return r.searchParams.set(fu,t),r.toString()}function hp(e,t,r){try{const n=new URL(e),i=new URL(t);if(n.origin!==i.origin)return!1;const o=mp(r)??gp(n.pathname);return i.pathname.startsWith(o)}catch{return!1}}function mp(e){if(!e)return;const t=new URL(e,"https://mini-program.invalid").pathname;return t.endsWith("/")?t:`${t}/`}function gp(e){const t=/^(\/u\/[^/]+\/[^/]+\/)/.exec(e)?.[1];if(t)return t;const r=e.lastIndexOf("/");return r>=0?e.slice(0,r+1):"/"}function ca(e){const t=new URL(e);return jo(t)?"loopback":zo(t)?"lan":"production"}function pp(e,t,r){return yp(e)||jo(e)||zo(e)&&wp(t,r)}function yp(e){return e.protocol==="https:"&&Np(e.hostname)}function jo(e){return e.protocol==="http:"&&Ep(e.hostname)}function Ep(e){return e==="localhost"||e==="127.0.0.1"||e==="[::1]"}function zo(e){return e.protocol==="http:"&&Ip(e.hostname)}function wp(e,t){if(t.allowPrivateNetwork)return!0;try{const r=new URL(e);return jo(r)||zo(r)}catch{return!1}}function Ip(e){const t=Mp(e);return t?t[0]===10||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168:!1}function Mp(e){const t=e.split(".");if(t.length!==4)return;const r=t.map(n=>{if(!/^\d+$/.test(n))return;const i=Number(n);return Number.isInteger(i)&&i>=0&&i<=255?i:void 0});return r.every(n=>n!==void 0)?r:void 0}function Np(e){return e===aa||e.endsWith(`.${aa}`)}const Ap=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"]),Dp=new Set(["url","inline","eval","unknown"]),Tp=/^\/(?:\:segment(?:\/\:segment)*)?$/,Sp=/^[a-f0-9]{64}$/,bp=255,Op=160,_p=256;function Lp(e,t){const r=e;if(!r||typeof r.sdkVersion!="string"||r.sdkVersion!==t||typeof r.effectiveDirective!="string"||!Ap.has(r.effectiveDirective)||typeof r.violatedDirective!="string"||r.violatedDirective.length>_p||r.violatedDirective.split(/\s/,1)[0]!==r.effectiveDirective||!["enforce","report"].includes(r.disposition??"")||typeof r.blockedResourceType!="string"||!Dp.has(r.blockedResourceType)||typeof r.timestamp!="number"||!Number.isFinite(r.timestamp)||r.timestamp<0)return;const n=vp(r.blockedOrigin);if(r.blockedOrigin!==void 0&&!n)return;const i=r.redactedPathname;if(i!==void 0&&(typeof i!="string"||i.length>Op||!Tp.test(i)))return;const o=r.sanitizedPathnameHash;if(!(o!==void 0&&(typeof o!="string"||!Sp.test(o)||i===void 0)))return{effectiveDirective:r.effectiveDirective,violatedDirective:r.effectiveDirective,blockedResourceType:r.blockedResourceType,origin:n,sanitizedPathname:i,sanitizedPathnameHash:o,sdkVersion:r.sdkVersion,timestamp:r.timestamp}}function vp(e){if(e!==void 0&&!(typeof e!="string"||e.length>bp))try{const t=new URL(e);return["http:","https:"].includes(t.protocol)&&t.origin===e?t.origin:void 0}catch{return}}const Cp=/^(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 Pp(e){if(!e?.minimumSdkVersion)throw $("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不可用");const t=tt(e.minimumSdkVersion),r=e.sdkVersion?tt(e.sdkVersion):void 0;if(!t)throw $("MINIMUM_SDK_VERSION_UNAVAILABLE","平台最低 SDK 版本配置不合法");if(e.sdkVersion&&!r)throw $("SDK_VERSION_INVALID","小程序 SDK 版本不合法");const n=tt("0.6.0");if(!r){if(Fr(t,n)<0)return{heartbeatEnabled:!1,sdkVersion:void 0};throw $("SDK_VERSION_INVALID","小程序 SDK 版本缺失")}if((e.releaseChannel??"public")==="public"&&r.prerelease.length>0)throw $("SDK_VERSION_INVALID","正式小程序不能使用预发布 SDK");if(Fr(r,t)<0)throw $("SDK_VERSION_TOO_LOW","小程序 SDK 版本低于平台最低要求");return{heartbeatEnabled:Fr(r,tt("0.6.0-0"))>=0,sdkVersion:e.sdkVersion}}function Rp(e,t){if(typeof t!="string"||!tt(t))throw $("SDK_VERSION_INVALID","SDK handshake 版本不合法");if(t!==e)throw $("SDK_VERSION_MISMATCH","SDK handshake 版本与 Version record 不一致")}function pd(e,t){const r=tt(e),n=tt(t);if(!(!r||!n))return Fr(r,n)}function tt(e){const t=Cp.exec(e);if(t)return{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3]),prerelease:t[4]?.split(".").map(r=>/^\d+$/.test(r)?Number(r):r)??[]}}function Fr(e,t){for(const n of["major","minor","patch"])if(e[n]!==t[n])return e[n]<t[n]?-1:1;if(e.prerelease.length===0||t.prerelease.length===0)return e.prerelease.length===t.prerelease.length?0:e.prerelease.length===0?1:-1;const r=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<r;n+=1){const i=e.prerelease[n],o=t.prerelease[n];if(i===void 0||o===void 0)return i===o?0:i===void 0?-1:1;if(i!==o)return typeof i=="number"&&typeof o=="string"?-1:typeof i=="string"&&typeof o=="number"?1:i<o?-1:1}return 0}const $n=["android","ios","ohos","windows","macos","linux"],kp="0.9.0",xp=Object.freeze(["android","ios","ohos","windows","macos"]),yd="该小程序暂不支持当前平台",jp="PLATFORM_UNSUPPORTED";function zp(e){return typeof e=="string"&&$n.includes(e)}function Up(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 Hp(e){const t=e.manifest;if(!Yp(t))return{status:"invalid",reason:"manifest_not_object"};if(!Object.prototype.hasOwnProperty.call(t,"platforms")){const n=ua(e.sdkVersion)??ua(t.sdkVersion);return Bp(n)?{status:"invalid",reason:"platforms_missing_after_hard_cutover"}:Vp()}const r=Ed(t.platforms);return"reason"in r?{status:"invalid",reason:r.reason}:{status:"resolved",declaredPlatforms:r.platforms,effectivePlatforms:r.platforms,platformsDeclared:!0,policy:"explicit"}}function Fp(e){const t=Up(e.operatingSystemName);if(!t)return wt("host_operating_system_unknown");const r=e.platformAccess;if(!r)return wt("platform_access_missing",{platform:t});if(r.source==="compatibility-window")return{status:"allowed",platform:t,effectivePlatforms:$n,platformsDeclared:!1,policy:"legacy_mobile_default",compatibility:r.reason};if(r.source==="manifest"){const s=Hp({manifest:r.manifest,...r.sdkVersion===void 0?{}:{sdkVersion:r.sdkVersion}});return s.status==="invalid"?wt("platform_declaration_invalid",{invalidReason:s.reason,platform:t}):da(t,s)}if(r.effectivePlatforms===void 0)return wt("platform_declaration_invalid",{invalidReason:"effective_platforms_missing",platform:t});const n=Ed(r.effectivePlatforms);if("reason"in n)return wt("platform_declaration_invalid",{invalidReason:n.reason,platform:t});const i=typeof r.platformsDeclared=="boolean"?r.platformsDeclared:!0,o=Qp(r.platformPolicy)?r.platformPolicy:i?"explicit":"legacy_mobile_default";return da(t,{declaredPlatforms:i?n.platforms:[],effectivePlatforms:n.platforms,platformsDeclared:i,policy:o})}function da(e,t){return t.effectivePlatforms.includes(e)?{status:"allowed",platform:e,effectivePlatforms:t.effectivePlatforms,platformsDeclared:t.platformsDeclared,policy:t.policy}:wt("platform_not_supported",{effectivePlatforms:t.effectivePlatforms,platform:e})}function wt(e,t={}){return{status:"denied",reason:e,message:yd,...t}}function Vp(){return{status:"resolved",declaredPlatforms:[],effectivePlatforms:xp,platformsDeclared:!1,policy:"legacy_mobile_default"}}function Ed(e){if(!Array.isArray(e))return{reason:"platforms_not_array"};if(e.length===0)return{reason:"platforms_empty"};const t=new Set;for(const r of e){if(!zp(r))return{reason:"platform_unknown_value"};if(t.has(r))return{reason:"platform_duplicate_value"};t.add(r)}return{platforms:Object.freeze($n.filter(r=>t.has(r)))}}function Bp(e){if(typeof e!="string"||!e.trim())return!1;const t=pd(e.trim(),kp);return t!==void 0&&t>=0}function ua(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Qp(e){return e==="explicit"||e==="legacy_mobile_default"}function Yp(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Gp=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 qp(e,t,r){const n=Date.now();try{const i=new URL(t);return{type:"security_violation",errorCode:e,timestamp:n,sdkVersion:r,origin:i.origin,sanitizedPathname:Wp(i.pathname),sanitizedPathnameHash:$p(i.pathname)}}catch{return{type:"security_violation",errorCode:e,timestamp:n,sdkVersion:r}}}function Wp(e){return(e==="/"?e:e.replace(/\/+$/,"")).split("/").map(r=>r?":segment":"").join("/")}function $p(e){const t=new TextEncoder().encode(e),r=Math.ceil((t.length+9)/64)*64,n=new Uint8Array(r);n.set(t),n[t.length]=128,new DataView(n.buffer).setUint32(r-4,t.length*8,!1);const i=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),o=new Uint32Array(64),s=new DataView(n.buffer);for(let a=0;a<r;a+=64){for(let S=0;S<16;S+=1)o[S]=s.getUint32(a+S*4,!1);for(let S=16;S<64;S+=1){const I=o[S-15],_=o[S-2],A=Oe(I,7)^Oe(I,18)^I>>>3,v=Oe(_,17)^Oe(_,19)^_>>>10;o[S]=o[S-16]+A+o[S-7]+v>>>0}let[c,d,l,h,u,g,T,M]=i;for(let S=0;S<64;S+=1){const I=M+(Oe(u,6)^Oe(u,11)^Oe(u,25))+(u&g^~u&T)+Gp[S]+o[S]>>>0,_=(Oe(c,2)^Oe(c,13)^Oe(c,22))+(c&d^c&l^d&l);M=T,T=g,g=u,u=h+I>>>0,h=l,l=d,d=c,c=I+_>>>0}[c,d,l,h,u,g,T,M].forEach((S,I)=>{i[I]=i[I]+S>>>0})}return Array.from(i,a=>a.toString(16).padStart(8,"0")).join("")}function Oe(e,t){return e>>>t|e<<32-t}const Kp=1e4,yi=2e3,Jp=2,Zp="open-with-native-credential-policy",wd="安全提示",Id="即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。";class Xp{nonce=sa();runtimeId=sa();terminalController=new AbortController;options;handshakeTimeout;ports;primitiveAvailability;effectiveCapabilities;identity;identityRef;iframe;iframeErrorListener;iframeLoadListener;bridgeServer=null;miniProgramSrc="";launchUrl="";startPromise=null;readyContext=null;resolveReady;rejectReady;terminalError;status="idle";stateValue="idle";handshakeTimeoutTimer;lifecycleDisposer;capabilityGraph;iframeTornDown=!1;runtimeResourcesDisposed=!1;sdkVersionDecision;platformGateDecision;compatibilityWithoutSdk=!1;heartbeatTimer;pendingProbeId;consecutiveHeartbeatMisses=0;probeSequence=0;hostVisible=!0;awaitingControlledDocumentLoad=!1;unexpectedDocumentLoadTimer;documentRevalidationPending=!1;documentRevalidationTimer;documentRevalidationGeneration=0;preparedHistoryTraversalGeneration;iframeVisibilityBeforeRevalidation;iframeHiddenForRevalidation=!1;devRuntimePromise;runtimePermissions=void 0;runtimeFeatures;miniProgramPresentation;miniProgramDetail;locationBasePath;anonymousStorageScope;allowedHttpOrigins;environmentInfo;constructor(t){this.options=t,this.iframe=t.iframe;const r=yc(t.ports,{callerCapabilities:t.capabilities,hostCapabilities:t.hostCapabilities});this.ports=r.ports,this.primitiveAvailability=r.primitiveAvailability,this.effectiveCapabilities=r.effectiveCapabilities,this.identity={},this.identityRef={get:()=>{const n=this.identity.miniProgramId?.trim();if(n)return{miniProgramId:n,...this.identity.miniProgramVersion?{version:this.identity.miniProgramVersion}:{}}}},this.handshakeTimeout=t.handshakeTimeout??Kp,this.iframeErrorListener=n=>{this.onIframeError(n)},this.iframeLoadListener=()=>{if(this.awaitingControlledDocumentLoad){if(this.awaitingControlledDocumentLoad=!1,this.stateValue==="ready"&&this.bridgeServer?.protocolVersion===2&&this.sdkVersionDecision?.heartbeatEnabled){this.beginDocumentRevalidation();return}this.compatibilityWithoutSdk&&!this.readyContext&&this.completeCompatibilityLaunch();return}this.stateValue==="ready"&&(this.bridgeServer?.protocolVersion===2&&this.sdkVersionDecision?.heartbeatEnabled?this.beginDocumentRevalidation():this.scheduleUnexpectedDocumentLoadFailure())},this.iframe.addEventListener("error",this.iframeErrorListener),this.iframe.addEventListener("load",this.iframeLoadListener)}get state(){return this.stateValue}getMiniProgramDetail(){return this.miniProgramDetail}get diagnostics(){const t=this.capabilityGraph?.storageDiagnostics;return t?{storage:t}:{}}start(){return this.stateValue==="destroyed"?Promise.reject(this.terminalError??$("RUNTIME_DESTROYED","小程序运行时已销毁")):this.stateValue==="failed"?Promise.reject(this.terminalError??$("STARTUP_ERROR","小程序运行时启动失败")):this.readyContext?Promise.resolve(this.readyContext):this.startPromise?this.startPromise:(cy(),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=$("RUNTIME_DESTROYED","小程序运行时已销毁");this.terminalError=t,this.terminalController.abort(t),this.disposeRuntimeResources(),this.setStatus("destroyed"),this.setState("destroyed"),this.teardownIframe(),this.rejectReady?.(t)}show(){const t=this.hostVisible;this.hostVisible=!0,this.emitLifecycleEvent("show"),this.capabilityGraph?.notifyViewportChange(),!t&&this.stateValue==="ready"&&this.sdkVersionDecision?.heartbeatEnabled&&(this.documentRevalidationPending?(this.armDocumentRevalidationTimer(this.documentRevalidationGeneration),this.resendDocumentRevalidationProbe()):this.sendLocationProbe())}hide(){this.hostVisible=!1,this.clearHeartbeat(),this.clearDocumentRevalidationTimer(),this.emitLifecycleEvent("hide")}prepareForHistoryTraversal(){if(this.stateValue!=="ready"||this.bridgeServer?.protocolVersion!==2||!this.sdkVersionDecision?.heartbeatEnabled)return()=>{};const t=this.beginDocumentRevalidation({deferProbe:!0});return this.preparedHistoryTraversalGeneration=t,()=>{this.preparedHistoryTraversalGeneration===t&&this.cancelPreparedHistoryTraversal()}}createReadyPromise(){return new Promise((t,r)=>{this.resolveReady=t,this.rejectReady=r})}async launch(){const t=await this.resolveRuntimeLaunchConfiguration();if(this.isInactive())return;this.runtimePermissions=_u(t.runtimePermissions),this.runtimeFeatures=t.runtimeFeatures?Object.freeze({...t.runtimeFeatures}):void 0,this.miniProgramPresentation=t.miniProgramPresentation,this.locationBasePath=t.locationBasePath,this.anonymousStorageScope=t.anonymousStorageScope??this.options.anonymousStorageScope;const r=t.allowedHttpOrigins??this.options.allowedHttpOrigins;this.allowedHttpOrigins=r?Object.freeze([...r]):void 0,this.bindCanonicalIdentity(t.canonicalIdentity),this.sdkVersionDecision=Pp(t.sdkVersionPolicy);const n=Jg(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=Fp({operatingSystemName:t.environmentInfo?.operatingSystem?.name,...t.platformAccess===void 0?{}:{platformAccess:t.platformAccess}}),this.platformGateDecision.status==="denied")throw ly(this.platformGateDecision);if(this.miniProgramDetail=fy(t),this.effectiveCapabilities=pc(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),ny(this.options.onLaunchConfigurationResolved,t,this.sdkVersionDecision),this.isInactive())return;this.applyIframeDefaults(),this.startBridgeServer(),this.installSubscriptions();const i=await this.normalizeLaunchUrl(t.launchUrl);if(this.isInactive())return;const o=await this.confirmDevMiniProgramLaunch(i);if(!this.isInactive()){if(!o){await this.closeAfterDevLaunchCancellation();return}if(this.bridgeServer?.setTargetOrigin(oy(i)),this.launchUrl=i,this.miniProgramSrc=fp(i,this.nonce),this.traceSecurityPolicy(i),this.setStatus("src_resolved"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"src_resolved"}),this.primitiveAvailability["presentation.applyOrientation"]){try{await this.capabilityGraph?.applyOrientation({mode:"portrait",hideCapsule:!1})}catch(s){if(this.isInactive())return;const a=Ao(s);this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"error",method:ot,errorCode:a.code,message:`默认展示设置失败,沿用宿主当前布局:${a.message}`})}if(this.isInactive())return}this.awaitingControlledDocumentLoad=!0,this.iframe.src=this.miniProgramSrc,Ue(this.options.onLaunch,this.createLaunchContext()),this.armHandshakeTimeout()}}startBridgeServer(){const t={postEvent:(n,i)=>{this.stateValue==="ready"&&(n!=="viewport_change"||this.effectiveCapabilities["viewport.getWindowInfo"])&&(n!=="display_change"||this.effectiveCapabilities[ot])&&this.bridgeServer?.postEvent(n,i)}};this.capabilityGraph=Bg({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,hostProtocol:this.ports.protocol,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,prepareScreenshot:(n,i,o)=>{const s=this.sdkVersionDecision?.sdkVersion;return!s||(pd(s,"0.9.1")??-1)<0?Promise.resolve(()=>{}):op(this.iframe.ownerDocument,this.miniProgramPresentation?.name,n,i,o)},miniProgramDetail:this.miniProgramDetail,anonymousStorageScope:this.anonymousStorageScope,storageLimits:this.options.storageLimits,allowedHttpOrigins:this.allowedHttpOrigins,requestPolicy:this.options.requestPolicy,...this.options.onRequestPolicyReport?{onRequestPolicyReport:this.options.onRequestPolicyReport}:{}});const r=Ug({handlers:this.capabilityGraph.handlers,effectiveCapabilities:this.effectiveCapabilities,runtimePermissions:this.runtimePermissions,terminalSignal:this.terminalController.signal,allowsCompanionAttachmentAccess:this.capabilityGraph.allowsCompanionAttachmentAccess,policies:this.options.policies,...this.options.onCapabilityTrace?{onTrace:({callId:n,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,errorCode:d,network:l})=>{const h={type:"capability",runtimeId:this.runtimeId,callId:n,method:i,startedAt:o,timestamp:s,durationMs:a,outcome:c,...d?{errorCode:d}:{},...this.identity,...l?{network:l}:{}};Ue(this.options.onCapabilityTrace,h)}}:{}});this.bridgeServer=new ku({iframe:this.iframe,nonce:this.nonce,dispatcher:r,environmentInfo:this.environmentInfo,onHandshake:n=>this.handleBridgeHandshake(n),onReady:()=>{this.handleBridgeReady()},onDuplicateHandshake:()=>{this.handleDuplicateBridgeHandshake()},onInternalEvent:n=>{this.handleInternalBridgeEvent(n)},onResponsePosted:({method:n,outcome:i,errorCode:o})=>{this.trace({runtimeId:this.runtimeId,timestamp:Date.now(),type:"bridge_response",method:n,outcome:i,...o?{errorCode:o}:{}})}}),this.bridgeServer.start(),this.setStatus("bridge_started"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"bridge_started"})}onIframeError(t=new Error("小程序 iframe 加载失败")){if(this.isInactive())return;const r=t instanceof Error?t.message:"小程序 iframe 加载失败";this.failRuntime($("IFRAME_LOAD_ERROR",r,t))}emitLifecycleEvent(t){if(this.stateValue!=="ready"){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"lifecycle_ignored",event:t,reason:this.isInactive()?"inactive":"not_ready"});return}this.bridgeServer?.postEvent(t,{timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"lifecycle",method:t})}async resolveRuntimeLaunchConfiguration(){try{return await this.options.resolveLaunchConfiguration()}catch(t){throw ry(t)?t:Md($("STARTUP_ERROR",t instanceof Error?t.message:"获取小程序启动配置失败"),t)}}bindCanonicalIdentity(t){const r=t?.miniProgramId?.trim();r&&(this.identity.miniProgramId=r);const n=t?.miniProgramVersion?.trim();n&&(this.identity.miniProgramVersion=n)}async normalizeLaunchUrl(t){try{const r=this.options.environment.getCurrentHref();return lp(t,r,{allowPrivateNetwork:oa(r)||la(r)||await this.isDevRuntime()})}catch(r){throw $("INVALID_LAUNCH_URL",r instanceof Error?r.message:"小程序链接不合法",r)}}async confirmDevMiniProgramLaunch(t){return await this.shouldConfirmDevMiniProgramLaunch(t)?this.isInactive()?!1:!!await(this.options.confirmDevMiniProgramLaunch??ay)({message:Id,title:wd,url:t}):!0}async shouldConfirmDevMiniProgramLaunch(t){if(ca(t)==="production")return!1;const r=this.options.environment.getCurrentHref();return!oa(r)&&!la(r)}async closeAfterDevLaunchCancellation(){const t=$("LAUNCH_CANCELLED","小程序启动已取消");this.terminalError=t,this.destroyBridgeServer();const r=new AbortController;let n;try{n=Promise.resolve(this.ports.presentation.close({signal:r.signal}))}catch{fa(),n=Promise.resolve()}this.terminalController.abort(t),this.disposeRuntimeResources(),this.setStatus("destroyed"),this.setState("destroyed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"launch_cancelled"}),this.rejectReady?.(t),await n.catch(()=>fa())}async isDevRuntime(){return this.devRuntimePromise??=Promise.resolve().then(()=>this.options.environment.isDevRuntime()).then(Boolean).catch(()=>!1),this.devRuntimePromise}applyIframeDefaults(){this.iframe.setAttribute("allow",ap),this.iframe.setAttribute("referrerpolicy",cp),this.iframe.setAttribute("sandbox",gd)}removeIframeListeners(){this.iframe.removeEventListener("error",this.iframeErrorListener),this.iframe.removeEventListener("load",this.iframeLoadListener)}installSubscriptions(){if(this.options.lifecycle&&!this.lifecycleDisposer){const t=this.options.lifecycle.subscribe({show:this.show.bind(this),hide:this.hide.bind(this)});this.lifecycleDisposer=typeof t=="function"?t:null}}clearLifecycleDisposer(){const t=[this.lifecycleDisposer];this.lifecycleDisposer=null;for(const r of t)try{r?.()}catch{}}handleBridgeReady(){if(this.isInactive())return;if(this.readyContext){this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"duplicate_handshake"});return}this.clearHandshakeTimeout(),this.setStatus("bridge_ready");const t=this.createReadyContext();this.readyContext=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"bridge",method:"ready"}),this.setState("ready"),this.sdkVersionDecision?.heartbeatEnabled&&this.hostVisible&&this.sendLocationProbe(),this.resolveReady?.(t),this.capabilityGraph?.notifyViewportChange(),Ue(this.options.onReady,t)}completeCompatibilityLaunch(){if(this.stateValue!=="starting"||this.isInactive()||this.readyContext)return;this.clearHandshakeTimeout(),this.setStatus("bridge_ready");const t=this.createReadyContext();this.readyContext=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"status",status:"bridge_ready"}),this.setState("ready"),this.resolveReady?.(t),this.capabilityGraph?.notifyViewportChange(),Ue(this.options.onReady,t)}handleBridgeHandshake(t){const r=this.sdkVersionDecision?.sdkVersion;if(r)try{Rp(r,t?.sdkVersion)}catch(n){return this.failRuntime(n),!1}return!0}armHandshakeTimeout(){this.clearHandshakeTimeout(),!(this.handshakeTimeout<=0)&&(this.handshakeTimeoutTimer=setTimeout(()=>{this.stateValue==="ready"||this.isInactive()||(this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"handshake_timeout"}),this.failRuntime($("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>=Jp)){this.failRuntime($("HEARTBEAT_TIMEOUT","小程序 SDK 心跳超时"));return}const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.bridgeServer?.postInternalRequest(Dr,t,{probeId:t,timestamp:Date.now()}),this.heartbeatTimer=setTimeout(()=>{this.heartbeatTimer=void 0,this.sendLocationProbe()},yi),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:Dr})}clearHeartbeat(){this.heartbeatTimer&&(clearTimeout(this.heartbeatTimer),this.heartbeatTimer=void 0),this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0}beginDocumentRevalidation(t={}){this.clearUnexpectedDocumentLoadFailure(),this.clearHeartbeat(),this.clearDocumentRevalidationTimer(),this.preparedHistoryTraversalGeneration=void 0,this.documentRevalidationPending=!0;const r=++this.documentRevalidationGeneration;return this.iframeHiddenForRevalidation||(this.iframeVisibilityBeforeRevalidation=this.iframe.style.visibility,this.iframe.style.visibility="hidden",this.iframeHiddenForRevalidation=!0),this.armDocumentRevalidationTimer(r),t.deferProbe||this.sendDocumentRevalidationProbe(),r}sendDocumentRevalidationProbe(){if(this.isInactive()||!this.hostVisible||!this.documentRevalidationPending||!this.sdkVersionDecision?.heartbeatEnabled)return;const t=`${Date.now().toString(36)}_${++this.probeSequence}`;this.pendingProbeId=t,this.postLocationProbe(t)}resendDocumentRevalidationProbe(){if(!(this.isInactive()||!this.hostVisible||!this.documentRevalidationPending||!this.sdkVersionDecision?.heartbeatEnabled)){if(!this.pendingProbeId){this.sendDocumentRevalidationProbe();return}this.postLocationProbe(this.pendingProbeId)}}postLocationProbe(t){this.bridgeServer?.postInternalRequest(Dr,t,{probeId:t,timestamp:Date.now()}),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"location_probe",method:Dr})}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($("UNEXPECTED_DOCUMENT_LOAD","小程序 iframe 文档再验证超时")))},yi))}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()},yi))}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===mu){this.handleCspViolation(t.payload);return}if(t.method!==hu)return;const r=this.sdkVersionDecision?.sdkVersion;if(!r)return;const n=t.payload;if(!n||n.sdkVersion!==r){this.failRuntime($("SDK_VERSION_MISMATCH","URL report 的 SDK 版本不一致"));return}if(!(n.probeId!==void 0&&n.probeId!==this.pendingProbeId)){if(typeof n.href!="string"||!hp(this.launchUrl,n.href,this.locationBasePath)){typeof n.href=="string"&&this.emitUrlSecurityViolation("URL_OUT_OF_SCOPE",n.href),this.failRuntime($("URL_OUT_OF_SCOPE","小程序页面地址超出允许范围"));return}n.probeId!==void 0?(this.pendingProbeId=void 0,this.consecutiveHeartbeatMisses=0,this.documentRevalidationPending&&this.completeDocumentRevalidation()):this.documentRevalidationPending&&!this.pendingProbeId&&(this.preparedHistoryTraversalGeneration=void 0,this.sendDocumentRevalidationProbe())}}handleCspViolation(t){const r=Lp(t,this.sdkVersionDecision?.sdkVersion);r&&this.emitSecurityViolation({type:"security_violation",errorCode:"CSP_VIOLATION",timestamp:r.timestamp,sdkVersion:r.sdkVersion,origin:r.origin,sanitizedPathname:r.sanitizedPathname,sanitizedPathnameHash:r.sanitizedPathnameHash,effectiveDirective:r.effectiveDirective,violatedDirective:r.violatedDirective,blockedResourceType:r.blockedResourceType})}emitSecurityViolation(t){Ue(this.options.onSecurityViolation,t),this.trace({runtimeId:this.nonce,...t})}emitUrlSecurityViolation(t,r){const n=qp(t,r,this.sdkVersionDecision?.sdkVersion);this.emitSecurityViolation(n)}scheduleUnexpectedDocumentLoadFailure(){this.clearUnexpectedDocumentLoadFailure(),this.unexpectedDocumentLoadTimer=setTimeout(()=>{this.unexpectedDocumentLoadTimer=void 0,this.emitUrlSecurityViolation("UNEXPECTED_DOCUMENT_LOAD",this.launchUrl),this.failRuntime($("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:sp,launchUrlType:ca(t),networkPolicy:Zp})}failRuntime(t){const r=ey(t);return this.isInactive()||(this.terminalError=r,this.terminalController.abort(r),this.postBridgeError(r),this.disposeRuntimeResources(),this.setStatus("failed"),this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"error",errorCode:r.code,message:r.message}),this.setState("failed"),this.teardownIframe(r),Ue(this.options.onError,ty(r)),this.rejectReady?.(r)),r}postBridgeError(t){try{this.bridgeServer?.postEvent("error",{code:t.code,message:t.message,...t.data!==void 0?{data:t.data}:{}})}catch{}return t}destroyBridgeServer(){const t=this.bridgeServer;this.bridgeServer=null;try{t?.destroy()}catch{}}disposeRuntimeResources(){if(!this.runtimeResourcesDisposed){this.runtimeResourcesDisposed=!0,this.clearHandshakeTimeout(),this.clearHeartbeat(),this.clearUnexpectedDocumentLoadFailure(),this.clearDocumentRevalidation(),this.destroyBridgeServer(),this.capabilityGraph?.dispose(),this.capabilityGraph=void 0,this.clearLifecycleDisposer(),this.removeIframeListeners();try{this.options.dispose?.()}catch{}}}teardownIframe(t){if(!this.iframeTornDown){this.iframeTornDown=!0;try{this.options.teardownIframe?this.options.teardownIframe(this.iframe,t):this.iframe.remove()}catch{}}}setStatus(t){this.status!==t&&(this.status=t,this.trace({runtimeId:this.nonce,timestamp:Date.now(),type:"status",status:t}))}setState(t){this.stateValue!==t&&(this.stateValue=t,Ue(this.options.onStateChange,t))}isInactive(){return this.stateValue==="failed"||this.stateValue==="destroyed"}trace(t){Ue(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 ey(e){const t=Ao(e);return vn(e)&&"cause"in e&&Md(t,e.cause),t}function Md(e,t){return Object.defineProperty(e,"cause",{configurable:!0,enumerable:!1,value:t}),e}function ty(e){return{code:e.code,message:e.message,...e.data!==void 0?{data:e.data}:{}}}function ry(e){return vn(e)&&typeof e.code=="string"&&typeof e.message=="string"}function vn(e){return!!e&&typeof e=="object"}function Ue(e,t){try{e?.(t)}catch{}}function ny(e,t,r){try{e?.(t,r)}catch{}}function la(e){try{const t=new URL(e);return t.protocol==="http:"&&Wg(t.hostname)}catch{return!1}}function iy(e){try{return new URL(e).origin}catch{return}}function oy(e){return dp()?"*":iy(e)}function sy(e){return`${wd}
|
|
2
|
+
|
|
3
|
+
${Id}
|
|
4
|
+
|
|
5
|
+
URL: ${e}`}function ay(e){return typeof window>"u"||typeof window.confirm!="function"?!1:window.confirm(sy(e.url))}function fa(){typeof window<"u"&&typeof window.close=="function"&&window.close()}function cy(){const e=typeof navigator>"u"?void 0:navigator,t=typeof screen>"u"?void 0:screen,r=typeof window>"u"?void 0:window,n=Object.freeze({protocolVersion:ic,knownMethodCount:Ge.length,supportsFileCreate:Ge.some(i=>i.method===nr),system:dy(e?.userAgent,e?.platform),userAgent:e?.userAgent??"",platform:e?.platform??"",language:e?.language??"",hardwareConcurrency:yt(e?.hardwareConcurrency),maxTouchPoints:yt(e?.maxTouchPoints),screen:{width:yt(t?.width),height:yt(t?.height)},viewport:{width:yt(r?.innerWidth),height:yt(r?.innerHeight),devicePixelRatio:uy(r?.devicePixelRatio)}});console.info("[hb-sdk-runtime] environment",n)}function dy(e="",t=""){const r=`${t} ${e}`.toLowerCase();return/iphone|ipad|ipod/.test(r)?"ios":r.includes("android")?"android":/win32|win64|windows/.test(r)?"windows":/darwin|macintosh|macintel|mac os/.test(r)?"macos":/linux|x11/.test(r)?"linux":"unknown"}function yt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.floor(e):0}function uy(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:1}function ly(e){return $(jp,yd,{reason:e.reason,...e.platform===void 0?{}:{platform:e.platform},...e.invalidReason===void 0?{}:{invalidReason:e.invalidReason},...e.effectivePlatforms===void 0?{}:{effectivePlatforms:e.effectivePlatforms}})}function fy(e){const t=e.canonicalIdentity?.miniProgramId?.trim();if(!t)return;const r=e.canonicalIdentity?.miniProgramVersion?.trim(),n=e.miniProgramPresentation?.name?.trim(),i=e.miniProgramPresentation?.avatarUrl?.trim(),o=e.miniProgramPresentation?.author?.trim();return Object.freeze({miniProgramId:t,...r?{version:r}:{},...n?{name:n}:{},...i?{iconUrl:i}:{},...o?{author:o}:{},...e.sdkVersionPolicy.releaseChannel===void 0?{}:{releaseChannel:e.sdkVersionPolicy.releaseChannel}})}function hy(e){if(!vn(e?.ports)||Array.isArray(e.ports))throw new TypeError("createMiniProgramRuntime 必须显式提供 ports");if(!vn(e.environment)||typeof e.environment.getCurrentHref!="function"||typeof e.environment.isDevRuntime!="function")throw new TypeError("createMiniProgramRuntime 必须显式提供 environment");if(typeof e.resolveLaunchConfiguration!="function")throw new TypeError("createMiniProgramRuntime 必须显式提供 resolveLaunchConfiguration");return new Xp(e)}const my=/^(?:authentication-info|authorization|cookie|cookie2|proxy-authenticate|proxy-authentication-info|proxy-authorization|set-cookie|set-cookie2|www-authenticate|pkey|x-pkey|x-access-token|x-auth-token)$/i,gy=new Set(["origin","referer","user-agent"]);function py(e,t){return Gu({mode:"request-only",request:(r,n={signal:t.signal})=>t.run(n.signal,async i=>{const o={...n,signal:i},s=yy(r),a=await e.authenticatedRequest(s,o);return Iy(a)})}).network}function yy(e){const t=Ey(e.headers);return{...e,target:{...e.target},...e.params===void 0?{}:{params:{...e.params}},...t===void 0?{headers:void 0}:{headers:t}}}function Ey(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([t])=>!wy(t)))}function wy(e){const t=e.trim().toLowerCase();return gy.has(t)}function Iy(e){return{status:e.status,...e.statusText===void 0?{}:{statusText:e.statusText},data:e.data,headers:My(e.headers)??{}}}function My(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([t])=>!Ny(t)))}function Ny(e){const t=e.trim().toLowerCase();return my.test(t)||t.startsWith("x-heybox-")||t.startsWith("x-xhh-")}function Ay(e,t,r){const n=Oy(e.presentation,t);return{account:Sy(e,t,r),network:py(e,t),...e.storage===void 0?{}:{storage:by(e,t)},...e.storage===void 0?{}:Dy(e,t),...n===void 0?{}:{presentation:n},...e.protocol===void 0?{}:{protocol:e.protocol}}}function Dy(e,t){const r=e.storage;return typeof r.storage.key!="function"||typeof r.storage.length!="number"?{}:{storageDiagnostics:{listRaw:n=>t.run(n.signal,()=>{const i=[];for(let o=0;o<r.storage.length;o+=1){const s=r.storage.key(o);if(s===null)continue;const a=r.storage.getItem(s);a!==null&&i.push({area:r.area,key:s,value:a})}return i})}}}function Ty(e,t){return{getCurrentHref:()=>(t.assertActive(),e.environment.getCurrentHref()),isDevRuntime:()=>t.run(void 0,()=>e.environment.isDevRuntime()),...e.environment.setDocumentTitle===void 0?{}:{setDocumentTitle:r=>{t.assertActive(),e.environment.setDocumentTitle?.(r)}}}}function Sy(e,t,r){return{getCurrentUserId:n=>t.run(n.signal,i=>e.account.getCurrentUserId({signal:i})),ensureAuthenticated:n=>t.run(n.signal,i=>e.account.ensureAuthenticated({trustedUserGesture:n.trustedUserGesture,reason:n.reason,signal:i})),onChange:n=>{t.assertActive();const i=e.account.onChange(o=>{t.signal.aborted||n(o)});return r(i)}}}function by(e,t){const r=e.storage.storage;return{getRaw:(n,i)=>t.run(i.signal,()=>{const o=r.getItem(n);return o===null?void 0:o}),setRaw:(n,i,o)=>t.run(o.signal,()=>{r.setItem(n,i)})}}function Oy(e,t){if(!e)return;const r={};return e.close&&(r.close=n=>t.run(n.signal,i=>e.close({signal:i}))),e.reload&&(r.reload=n=>t.run(n.signal,i=>e.reload({signal:i}))),e.openAppPage&&(r.openAppPage=(n,i)=>t.run(i.signal,o=>e.openAppPage(n,{signal:o}))),e.openWindow&&(r.openWindow=(n,i)=>t.run(i.signal,o=>e.openWindow(n,{signal:o}))),e.applyOrientation&&(r.applyOrientation=(n,i)=>t.run(i.signal,o=>e.applyOrientation(n,{...i,signal:o}))),e.onViewportChange&&(r.onViewportChange=n=>{t.assertActive();const i=e.onViewportChange(()=>{t.signal.aborted||n()});let o=!1;const s=()=>{o||(o=!0,t.signal.removeEventListener("abort",s),i())};return t.signal.addEventListener("abort",s,{once:!0}),s}),e.getViewportMetrics&&(r.getViewportMetrics=()=>(t.assertActive(),e.getViewportMetrics())),e.getNavigationBarHeight&&(r.getNavigationBarHeight=()=>(t.assertActive(),e.getNavigationBarHeight())),e.setNavigationBarStyle&&(r.setNavigationBarStyle=(n,i)=>t.run(i.signal,o=>e.setNavigationBarStyle(n,{signal:o}))),e.showShareMenu&&(r.showShareMenu=(n,i)=>t.run(i.signal,o=>e.showShareMenu(n,{signal:o}))),e.setScreenshotChromeHidden&&(r.setScreenshotChromeHidden=(n,i)=>il(i)?e.setScreenshotChromeHidden(n,i):t.run(i.signal,o=>e.setScreenshotChromeHidden(n,{signal:o}))),e.captureAndShare&&(r.captureAndShare=(n,i)=>t.run(i.signal,o=>e.captureAndShare(n,{signal:o}))),e.showToast&&(r.showToast=(n,i)=>t.run(i.signal,o=>e.showToast(n,{signal:o}))),e.showLoading&&(r.showLoading=(n,i)=>t.run(i.signal,o=>e.showLoading(n,{signal:o}))),e.hideLoading&&(r.hideLoading=n=>t.run(n.signal,i=>e.hideLoading({signal:i}))),e.vibrate&&(r.vibrate=(n,i)=>t.run(i.signal,o=>e.vibrate(n,{signal:o}))),e.setClipboard&&(r.setClipboard=(n,i)=>t.run(i.signal,o=>e.setClipboard(n,{signal:o}))),Object.keys(r).length===0?void 0:r}function _y(){const e=new AbortController;return{signal:e.signal,abort:t=>{e.signal.aborted||e.abort(t)},assertActive:t=>{const r=[e.signal,t].find(n=>n?.aborted);if(r)throw Pr(r.reason)},run:async(t,r)=>{const n=t===e.signal||t===void 0?[e.signal]:[e.signal,t],i=n.find(l=>l.aborted);if(i)throw Pr(i.reason);const o=new AbortController;let s;const a=new Promise((l,h)=>{s=h}),c=n.map(l=>{const h=()=>{o.signal.aborted||o.abort(l.reason),s(Pr(l.reason))};return l.addEventListener("abort",h,{once:!0}),{listener:h,source:l}});let d;try{d=Promise.resolve(r(o.signal))}catch(l){d=Promise.reject(l)}try{const l=await Promise.race([d,a]),h=n.find(u=>u.aborted);if(h)throw Pr(h.reason);return l}finally{for(const{listener:l,source:h}of c)h.removeEventListener("abort",l)}}}}function Pr(e){return new DOMException("Web Host operation aborted","AbortError")}async function Ly(e){const t=_y(),r=new Set;let n=!1;const i=h=>{if(n||t.signal.aborted)return Ei(h),()=>{};let u=!0;const g=()=>{u&&(u=!1,r.delete(g),Ei(h))};return r.add(g),g},o=()=>s(e.signal.reason),s=h=>{if(!n){n=!0,e.signal.removeEventListener("abort",o),t.abort(h);for(const u of[...r])u();e.onDispose&&Ei(e.onDispose)}};e.signal.addEventListener("abort",o,{once:!0}),e.signal.aborted&&s(e.signal.reason);const a=Ay(e,t,i),c=yc(a,{hostCapabilities:e.hostCapabilities}),d=Ty(e,t);let l;return{platform:"web",ports:a,environment:d,resolveLaunch:()=>(l??=t.run(void 0,async h=>e.resolveLaunch(h)),l),...e.authPresentation===void 0?{}:{authPresentation:vy(e.authPresentation,t)},hostCapabilities:c.effectiveCapabilities,dispose:s}}function Ei(e){try{e()}catch{}}function vy(e,t){return{confirmAuthorization:r=>t.run(r.signal,n=>e.confirmAuthorization({...r,signal:n}))}}var Et={},wi,ha;function Cy(){return ha||(ha=1,wi=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),wi}var Ii={},He={},ma;function ct(){if(ma)return He;ma=1;let e;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return He.getSymbolSize=function(n){if(!n)throw new Error('"version" cannot be null or undefined');if(n<1||n>40)throw new Error('"version" should be in range from 1 to 40');return n*4+17},He.getSymbolTotalCodewords=function(n){return t[n]},He.getBCHDigit=function(r){let n=0;for(;r!==0;)n++,r>>>=1;return n},He.setToSJISFunction=function(n){if(typeof n!="function")throw new Error('"toSJISFunc" is not a valid function.');e=n},He.isKanjiModeEnabled=function(){return typeof e<"u"},He.toSJIS=function(n){return e(n)},He}var Mi={},ga;function Uo(){return ga||(ga=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(r){if(typeof r!="string")throw new Error("Param is not a string");switch(r.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+r)}}e.isValid=function(n){return n&&typeof n.bit<"u"&&n.bit>=0&&n.bit<4},e.from=function(n,i){if(e.isValid(n))return n;try{return t(n)}catch{return i}}})(Mi)),Mi}var Ni,pa;function Py(){if(pa)return Ni;pa=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(t){const r=Math.floor(t/8);return(this.buffer[r]>>>7-t%8&1)===1},put:function(t,r){for(let n=0;n<r;n++)this.putBit((t>>>r-n-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const r=Math.floor(this.length/8);this.buffer.length<=r&&this.buffer.push(0),t&&(this.buffer[r]|=128>>>this.length%8),this.length++}},Ni=e,Ni}var Ai,ya;function Ry(){if(ya)return Ai;ya=1;function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return e.prototype.set=function(t,r,n,i){const o=t*this.size+r;this.data[o]=n,i&&(this.reservedBit[o]=!0)},e.prototype.get=function(t,r){return this.data[t*this.size+r]},e.prototype.xor=function(t,r,n){this.data[t*this.size+r]^=n},e.prototype.isReserved=function(t,r){return this.reservedBit[t*this.size+r]},Ai=e,Ai}var Di={},Ea;function ky(){return Ea||(Ea=1,(function(e){const t=ct().getSymbolSize;e.getRowColCoords=function(n){if(n===1)return[];const i=Math.floor(n/7)+2,o=t(n),s=o===145?26:Math.ceil((o-13)/(2*i-2))*2,a=[o-7];for(let c=1;c<i-1;c++)a[c]=a[c-1]-s;return a.push(6),a.reverse()},e.getPositions=function(n){const i=[],o=e.getRowColCoords(n),s=o.length;for(let a=0;a<s;a++)for(let c=0;c<s;c++)a===0&&c===0||a===0&&c===s-1||a===s-1&&c===0||i.push([o[a],o[c]]);return i}})(Di)),Di}var Ti={},wa;function xy(){if(wa)return Ti;wa=1;const e=ct().getSymbolSize,t=7;return Ti.getPositions=function(n){const i=e(n);return[[0,0],[i-t,0],[0,i-t]]},Ti}var Si={},Ia;function jy(){return Ia||(Ia=1,(function(e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};const t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(i){return i!=null&&i!==""&&!isNaN(i)&&i>=0&&i<=7},e.from=function(i){return e.isValid(i)?parseInt(i,10):void 0},e.getPenaltyN1=function(i){const o=i.size;let s=0,a=0,c=0,d=null,l=null;for(let h=0;h<o;h++){a=c=0,d=l=null;for(let u=0;u<o;u++){let g=i.get(h,u);g===d?a++:(a>=5&&(s+=t.N1+(a-5)),d=g,a=1),g=i.get(u,h),g===l?c++:(c>=5&&(s+=t.N1+(c-5)),l=g,c=1)}a>=5&&(s+=t.N1+(a-5)),c>=5&&(s+=t.N1+(c-5))}return s},e.getPenaltyN2=function(i){const o=i.size;let s=0;for(let a=0;a<o-1;a++)for(let c=0;c<o-1;c++){const d=i.get(a,c)+i.get(a,c+1)+i.get(a+1,c)+i.get(a+1,c+1);(d===4||d===0)&&s++}return s*t.N2},e.getPenaltyN3=function(i){const o=i.size;let s=0,a=0,c=0;for(let d=0;d<o;d++){a=c=0;for(let l=0;l<o;l++)a=a<<1&2047|i.get(d,l),l>=10&&(a===1488||a===93)&&s++,c=c<<1&2047|i.get(l,d),l>=10&&(c===1488||c===93)&&s++}return s*t.N3},e.getPenaltyN4=function(i){let o=0;const s=i.data.length;for(let c=0;c<s;c++)o+=i.data[c];return Math.abs(Math.ceil(o*100/s/5)-10)*t.N4};function r(n,i,o){switch(n){case e.Patterns.PATTERN000:return(i+o)%2===0;case e.Patterns.PATTERN001:return i%2===0;case e.Patterns.PATTERN010:return o%3===0;case e.Patterns.PATTERN011:return(i+o)%3===0;case e.Patterns.PATTERN100:return(Math.floor(i/2)+Math.floor(o/3))%2===0;case e.Patterns.PATTERN101:return i*o%2+i*o%3===0;case e.Patterns.PATTERN110:return(i*o%2+i*o%3)%2===0;case e.Patterns.PATTERN111:return(i*o%3+(i+o)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}e.applyMask=function(i,o){const s=o.size;for(let a=0;a<s;a++)for(let c=0;c<s;c++)o.isReserved(c,a)||o.xor(c,a,r(i,c,a))},e.getBestMask=function(i,o){const s=Object.keys(e.Patterns).length;let a=0,c=1/0;for(let d=0;d<s;d++){o(d),e.applyMask(d,i);const l=e.getPenaltyN1(i)+e.getPenaltyN2(i)+e.getPenaltyN3(i)+e.getPenaltyN4(i);e.applyMask(d,i),l<c&&(c=l,a=d)}return a}})(Si)),Si}var Rr={},Ma;function Nd(){if(Ma)return Rr;Ma=1;const e=Uo(),t=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return Rr.getBlocksCount=function(i,o){switch(o){case e.L:return t[(i-1)*4+0];case e.M:return t[(i-1)*4+1];case e.Q:return t[(i-1)*4+2];case e.H:return t[(i-1)*4+3];default:return}},Rr.getTotalCodewordsCount=function(i,o){switch(o){case e.L:return r[(i-1)*4+0];case e.M:return r[(i-1)*4+1];case e.Q:return r[(i-1)*4+2];case e.H:return r[(i-1)*4+3];default:return}},Rr}var bi={},Ut={},Na;function zy(){if(Na)return Ut;Na=1;const e=new Uint8Array(512),t=new Uint8Array(256);return(function(){let n=1;for(let i=0;i<255;i++)e[i]=n,t[n]=i,n<<=1,n&256&&(n^=285);for(let i=255;i<512;i++)e[i]=e[i-255]})(),Ut.log=function(n){if(n<1)throw new Error("log("+n+")");return t[n]},Ut.exp=function(n){return e[n]},Ut.mul=function(n,i){return n===0||i===0?0:e[t[n]+t[i]]},Ut}var Aa;function Uy(){return Aa||(Aa=1,(function(e){const t=zy();e.mul=function(n,i){const o=new Uint8Array(n.length+i.length-1);for(let s=0;s<n.length;s++)for(let a=0;a<i.length;a++)o[s+a]^=t.mul(n[s],i[a]);return o},e.mod=function(n,i){let o=new Uint8Array(n);for(;o.length-i.length>=0;){const s=o[0];for(let c=0;c<i.length;c++)o[c]^=t.mul(i[c],s);let a=0;for(;a<o.length&&o[a]===0;)a++;o=o.slice(a)}return o},e.generateECPolynomial=function(n){let i=new Uint8Array([1]);for(let o=0;o<n;o++)i=e.mul(i,new Uint8Array([1,t.exp(o)]));return i}})(bi)),bi}var Oi,Da;function Hy(){if(Da)return Oi;Da=1;const e=Uy();function t(r){this.genPoly=void 0,this.degree=r,this.degree&&this.initialize(this.degree)}return t.prototype.initialize=function(n){this.degree=n,this.genPoly=e.generateECPolynomial(this.degree)},t.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const i=new Uint8Array(n.length+this.degree);i.set(n);const o=e.mod(i,this.genPoly),s=this.degree-o.length;if(s>0){const a=new Uint8Array(this.degree);return a.set(o,s),a}return o},Oi=t,Oi}var _i={},Li={},vi={},Ta;function Ad(){return Ta||(Ta=1,vi.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),vi}var _e={},Sa;function Dd(){if(Sa)return _e;Sa=1;const e="[0-9]+",t="[A-Z $%*+\\-./:]+";let r="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";r=r.replace(/u/g,"\\u");const n="(?:(?![A-Z0-9 $%*+\\-./:]|"+r+`)(?:.|[\r
|
|
6
|
+
]))+`;_e.KANJI=new RegExp(r,"g"),_e.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),_e.BYTE=new RegExp(n,"g"),_e.NUMERIC=new RegExp(e,"g"),_e.ALPHANUMERIC=new RegExp(t,"g");const i=new RegExp("^"+r+"$"),o=new RegExp("^"+e+"$"),s=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return _e.testKanji=function(c){return i.test(c)},_e.testNumeric=function(c){return o.test(c)},_e.testAlphanumeric=function(c){return s.test(c)},_e}var ba;function dt(){return ba||(ba=1,(function(e){const t=Ad(),r=Dd();e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(o,s){if(!o.ccBits)throw new Error("Invalid mode: "+o);if(!t.isValid(s))throw new Error("Invalid version: "+s);return s>=1&&s<10?o.ccBits[0]:s<27?o.ccBits[1]:o.ccBits[2]},e.getBestModeForData=function(o){return r.testNumeric(o)?e.NUMERIC:r.testAlphanumeric(o)?e.ALPHANUMERIC:r.testKanji(o)?e.KANJI:e.BYTE},e.toString=function(o){if(o&&o.id)return o.id;throw new Error("Invalid mode")},e.isValid=function(o){return o&&o.bit&&o.ccBits};function n(i){if(typeof i!="string")throw new Error("Param is not a string");switch(i.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+i)}}e.from=function(o,s){if(e.isValid(o))return o;try{return n(o)}catch{return s}}})(Li)),Li}var Oa;function Fy(){return Oa||(Oa=1,(function(e){const t=ct(),r=Nd(),n=Uo(),i=dt(),o=Ad(),s=7973,a=t.getBCHDigit(s);function c(u,g,T){for(let M=1;M<=40;M++)if(g<=e.getCapacity(M,T,u))return M}function d(u,g){return i.getCharCountIndicator(u,g)+4}function l(u,g){let T=0;return u.forEach(function(M){const S=d(M.mode,g);T+=S+M.getBitsLength()}),T}function h(u,g){for(let T=1;T<=40;T++)if(l(u,T)<=e.getCapacity(T,g,i.MIXED))return T}e.from=function(g,T){return o.isValid(g)?parseInt(g,10):T},e.getCapacity=function(g,T,M){if(!o.isValid(g))throw new Error("Invalid QR Code version");typeof M>"u"&&(M=i.BYTE);const S=t.getSymbolTotalCodewords(g),I=r.getTotalCodewordsCount(g,T),_=(S-I)*8;if(M===i.MIXED)return _;const A=_-d(M,g);switch(M){case i.NUMERIC:return Math.floor(A/10*3);case i.ALPHANUMERIC:return Math.floor(A/11*2);case i.KANJI:return Math.floor(A/13);case i.BYTE:default:return Math.floor(A/8)}},e.getBestVersionForData=function(g,T){let M;const S=n.from(T,n.M);if(Array.isArray(g)){if(g.length>1)return h(g,S);if(g.length===0)return 1;M=g[0]}else M=g;return c(M.mode,M.getLength(),S)},e.getEncodedBits=function(g){if(!o.isValid(g)||g<7)throw new Error("Invalid QR Code version");let T=g<<12;for(;t.getBCHDigit(T)-a>=0;)T^=s<<t.getBCHDigit(T)-a;return g<<12|T}})(_i)),_i}var Ci={},_a;function Vy(){if(_a)return Ci;_a=1;const e=ct(),t=1335,r=21522,n=e.getBCHDigit(t);return Ci.getEncodedBits=function(o,s){const a=o.bit<<3|s;let c=a<<10;for(;e.getBCHDigit(c)-n>=0;)c^=t<<e.getBCHDigit(c)-n;return(a<<10|c)^r},Ci}var Pi={},Ri,La;function By(){if(La)return Ri;La=1;const e=dt();function t(r){this.mode=e.NUMERIC,this.data=r.toString()}return t.getBitsLength=function(n){return 10*Math.floor(n/3)+(n%3?n%3*3+1:0)},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(n){let i,o,s;for(i=0;i+3<=this.data.length;i+=3)o=this.data.substr(i,3),s=parseInt(o,10),n.put(s,10);const a=this.data.length-i;a>0&&(o=this.data.substr(i),s=parseInt(o,10),n.put(s,a*3+1))},Ri=t,Ri}var ki,va;function Qy(){if(va)return ki;va=1;const e=dt(),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function r(n){this.mode=e.ALPHANUMERIC,this.data=n}return r.getBitsLength=function(i){return 11*Math.floor(i/2)+6*(i%2)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(i){let o;for(o=0;o+2<=this.data.length;o+=2){let s=t.indexOf(this.data[o])*45;s+=t.indexOf(this.data[o+1]),i.put(s,11)}this.data.length%2&&i.put(t.indexOf(this.data[o]),6)},ki=r,ki}var xi,Ca;function Yy(){if(Ca)return xi;Ca=1;const e=dt();function t(r){this.mode=e.BYTE,typeof r=="string"?this.data=new TextEncoder().encode(r):this.data=new Uint8Array(r)}return t.getBitsLength=function(n){return n*8},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(r){for(let n=0,i=this.data.length;n<i;n++)r.put(this.data[n],8)},xi=t,xi}var ji,Pa;function Gy(){if(Pa)return ji;Pa=1;const e=dt(),t=ct();function r(n){this.mode=e.KANJI,this.data=n}return r.getBitsLength=function(i){return i*13},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(n){let i;for(i=0;i<this.data.length;i++){let o=t.toSJIS(this.data[i]);if(o>=33088&&o<=40956)o-=33088;else if(o>=57408&&o<=60351)o-=49472;else throw new Error("Invalid SJIS character: "+this.data[i]+`
|
|
7
|
+
Make sure your charset is UTF-8`);o=(o>>>8&255)*192+(o&255),n.put(o,13)}},ji=r,ji}var zi={exports:{}},Ra;function qy(){return Ra||(Ra=1,(function(e){var t={single_source_shortest_paths:function(r,n,i){var o={},s={};s[n]=0;var a=t.PriorityQueue.make();a.push(n,0);for(var c,d,l,h,u,g,T,M,S;!a.empty();){c=a.pop(),d=c.value,h=c.cost,u=r[d]||{};for(l in u)u.hasOwnProperty(l)&&(g=u[l],T=h+g,M=s[l],S=typeof s[l]>"u",(S||M>T)&&(s[l]=T,a.push(l,T),o[l]=d))}if(typeof i<"u"&&typeof s[i]>"u"){var I=["Could not find a path from ",n," to ",i,"."].join("");throw new Error(I)}return o},extract_shortest_path_from_predecessor_list:function(r,n){for(var i=[],o=n;o;)i.push(o),r[o],o=r[o];return i.reverse(),i},find_path:function(r,n,i){var o=t.single_source_shortest_paths(r,n,i);return t.extract_shortest_path_from_predecessor_list(o,i)},PriorityQueue:{make:function(r){var n=t.PriorityQueue,i={},o;r=r||{};for(o in n)n.hasOwnProperty(o)&&(i[o]=n[o]);return i.queue=[],i.sorter=r.sorter||n.default_sorter,i},default_sorter:function(r,n){return r.cost-n.cost},push:function(r,n){var i={value:r,cost:n};this.queue.push(i),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(zi)),zi.exports}var ka;function Wy(){return ka||(ka=1,(function(e){const t=dt(),r=By(),n=Qy(),i=Yy(),o=Gy(),s=Dd(),a=ct(),c=qy();function d(I){return unescape(encodeURIComponent(I)).length}function l(I,_,A){const v=[];let U;for(;(U=I.exec(A))!==null;)v.push({data:U[0],index:U.index,mode:_,length:U[0].length});return v}function h(I){const _=l(s.NUMERIC,t.NUMERIC,I),A=l(s.ALPHANUMERIC,t.ALPHANUMERIC,I);let v,U;return a.isKanjiModeEnabled()?(v=l(s.BYTE,t.BYTE,I),U=l(s.KANJI,t.KANJI,I)):(v=l(s.BYTE_KANJI,t.BYTE,I),U=[]),_.concat(A,v,U).sort(function(N,f){return N.index-f.index}).map(function(N){return{data:N.data,mode:N.mode,length:N.length}})}function u(I,_){switch(_){case t.NUMERIC:return r.getBitsLength(I);case t.ALPHANUMERIC:return n.getBitsLength(I);case t.KANJI:return o.getBitsLength(I);case t.BYTE:return i.getBitsLength(I)}}function g(I){return I.reduce(function(_,A){const v=_.length-1>=0?_[_.length-1]:null;return v&&v.mode===A.mode?(_[_.length-1].data+=A.data,_):(_.push(A),_)},[])}function T(I){const _=[];for(let A=0;A<I.length;A++){const v=I[A];switch(v.mode){case t.NUMERIC:_.push([v,{data:v.data,mode:t.ALPHANUMERIC,length:v.length},{data:v.data,mode:t.BYTE,length:v.length}]);break;case t.ALPHANUMERIC:_.push([v,{data:v.data,mode:t.BYTE,length:v.length}]);break;case t.KANJI:_.push([v,{data:v.data,mode:t.BYTE,length:d(v.data)}]);break;case t.BYTE:_.push([{data:v.data,mode:t.BYTE,length:d(v.data)}])}}return _}function M(I,_){const A={},v={start:{}};let U=["start"];for(let L=0;L<I.length;L++){const N=I[L],f=[];for(let p=0;p<N.length;p++){const m=N[p],E=""+L+p;f.push(E),A[E]={node:m,lastCount:0},v[E]={};for(let w=0;w<U.length;w++){const D=U[w];A[D]&&A[D].node.mode===m.mode?(v[D][E]=u(A[D].lastCount+m.length,m.mode)-u(A[D].lastCount,m.mode),A[D].lastCount+=m.length):(A[D]&&(A[D].lastCount=m.length),v[D][E]=u(m.length,m.mode)+4+t.getCharCountIndicator(m.mode,_))}}U=f}for(let L=0;L<U.length;L++)v[U[L]].end=0;return{map:v,table:A}}function S(I,_){let A;const v=t.getBestModeForData(I);if(A=t.from(_,v),A!==t.BYTE&&A.bit<v.bit)throw new Error('"'+I+'" cannot be encoded with mode '+t.toString(A)+`.
|
|
8
|
+
Suggested mode is: `+t.toString(v));switch(A===t.KANJI&&!a.isKanjiModeEnabled()&&(A=t.BYTE),A){case t.NUMERIC:return new r(I);case t.ALPHANUMERIC:return new n(I);case t.KANJI:return new o(I);case t.BYTE:return new i(I)}}e.fromArray=function(_){return _.reduce(function(A,v){return typeof v=="string"?A.push(S(v,null)):v.data&&A.push(S(v.data,v.mode)),A},[])},e.fromString=function(_,A){const v=h(_,a.isKanjiModeEnabled()),U=T(v),L=M(U,A),N=c.find_path(L.map,"start","end"),f=[];for(let p=1;p<N.length-1;p++)f.push(L.table[N[p]].node);return e.fromArray(g(f))},e.rawSplit=function(_){return e.fromArray(h(_,a.isKanjiModeEnabled()))}})(Pi)),Pi}var xa;function $y(){if(xa)return Ii;xa=1;const e=ct(),t=Uo(),r=Py(),n=Ry(),i=ky(),o=xy(),s=jy(),a=Nd(),c=Hy(),d=Fy(),l=Vy(),h=dt(),u=Wy();function g(L,N){const f=L.size,p=o.getPositions(N);for(let m=0;m<p.length;m++){const E=p[m][0],w=p[m][1];for(let D=-1;D<=7;D++)if(!(E+D<=-1||f<=E+D))for(let P=-1;P<=7;P++)w+P<=-1||f<=w+P||(D>=0&&D<=6&&(P===0||P===6)||P>=0&&P<=6&&(D===0||D===6)||D>=2&&D<=4&&P>=2&&P<=4?L.set(E+D,w+P,!0,!0):L.set(E+D,w+P,!1,!0))}}function T(L){const N=L.size;for(let f=8;f<N-8;f++){const p=f%2===0;L.set(f,6,p,!0),L.set(6,f,p,!0)}}function M(L,N){const f=i.getPositions(N);for(let p=0;p<f.length;p++){const m=f[p][0],E=f[p][1];for(let w=-2;w<=2;w++)for(let D=-2;D<=2;D++)w===-2||w===2||D===-2||D===2||w===0&&D===0?L.set(m+w,E+D,!0,!0):L.set(m+w,E+D,!1,!0)}}function S(L,N){const f=L.size,p=d.getEncodedBits(N);let m,E,w;for(let D=0;D<18;D++)m=Math.floor(D/3),E=D%3+f-8-3,w=(p>>D&1)===1,L.set(m,E,w,!0),L.set(E,m,w,!0)}function I(L,N,f){const p=L.size,m=l.getEncodedBits(N,f);let E,w;for(E=0;E<15;E++)w=(m>>E&1)===1,E<6?L.set(E,8,w,!0):E<8?L.set(E+1,8,w,!0):L.set(p-15+E,8,w,!0),E<8?L.set(8,p-E-1,w,!0):E<9?L.set(8,15-E-1+1,w,!0):L.set(8,15-E-1,w,!0);L.set(p-8,8,1,!0)}function _(L,N){const f=L.size;let p=-1,m=f-1,E=7,w=0;for(let D=f-1;D>0;D-=2)for(D===6&&D--;;){for(let P=0;P<2;P++)if(!L.isReserved(m,D-P)){let F=!1;w<N.length&&(F=(N[w]>>>E&1)===1),L.set(m,D-P,F),E--,E===-1&&(w++,E=7)}if(m+=p,m<0||f<=m){m-=p,p=-p;break}}}function A(L,N,f){const p=new r;f.forEach(function(P){p.put(P.mode.bit,4),p.put(P.getLength(),h.getCharCountIndicator(P.mode,L)),P.write(p)});const m=e.getSymbolTotalCodewords(L),E=a.getTotalCodewordsCount(L,N),w=(m-E)*8;for(p.getLengthInBits()+4<=w&&p.put(0,4);p.getLengthInBits()%8!==0;)p.putBit(0);const D=(w-p.getLengthInBits())/8;for(let P=0;P<D;P++)p.put(P%2?17:236,8);return v(p,L,N)}function v(L,N,f){const p=e.getSymbolTotalCodewords(N),m=a.getTotalCodewordsCount(N,f),E=p-m,w=a.getBlocksCount(N,f),D=p%w,P=w-D,F=Math.floor(p/w),R=Math.floor(E/w),O=R+1,C=F-R,b=new c(C);let x=0;const j=new Array(w),z=new Array(w);let B=0;const Q=new Uint8Array(L.buffer);for(let q=0;q<w;q++){const fe=q<P?R:O;j[q]=Q.slice(x,x+fe),z[q]=b.encode(j[q]),x+=fe,B=Math.max(B,fe)}const G=new Uint8Array(p);let te=0,X,Z;for(X=0;X<B;X++)for(Z=0;Z<w;Z++)X<j[Z].length&&(G[te++]=j[Z][X]);for(X=0;X<C;X++)for(Z=0;Z<w;Z++)G[te++]=z[Z][X];return G}function U(L,N,f,p){let m;if(Array.isArray(L))m=u.fromArray(L);else if(typeof L=="string"){let F=N;if(!F){const R=u.rawSplit(L);F=d.getBestVersionForData(R,f)}m=u.fromString(L,F||40)}else throw new Error("Invalid data");const E=d.getBestVersionForData(m,f);if(!E)throw new Error("The amount of data is too big to be stored in a QR Code");if(!N)N=E;else if(N<E)throw new Error(`
|
|
9
|
+
The chosen QR Code version cannot contain this amount of data.
|
|
10
|
+
Minimum version required to store current data is: `+E+`.
|
|
11
|
+
`);const w=A(N,f,m),D=e.getSymbolSize(N),P=new n(D);return g(P,N),T(P),M(P,N),I(P,f,0),N>=7&&S(P,N),_(P,w),isNaN(p)&&(p=s.getBestMask(P,I.bind(null,P,f))),s.applyMask(p,P),I(P,f,p),{modules:P,version:N,errorCorrectionLevel:f,maskPattern:p,segments:m}}return Ii.create=function(N,f){if(typeof N>"u"||N==="")throw new Error("No input text");let p=t.M,m,E;return typeof f<"u"&&(p=t.from(f.errorCorrectionLevel,t.M),m=d.from(f.version),E=s.from(f.maskPattern),f.toSJISFunc&&e.setToSJISFunction(f.toSJISFunc)),U(N,m,p,E)},Ii}var Ui={},Hi={},ja;function Td(){return ja||(ja=1,(function(e){function t(r){if(typeof r=="number"&&(r=r.toString()),typeof r!="string")throw new Error("Color should be defined as hex string");let n=r.slice().replace("#","").split("");if(n.length<3||n.length===5||n.length>8)throw new Error("Invalid hex color: "+r);(n.length===3||n.length===4)&&(n=Array.prototype.concat.apply([],n.map(function(o){return[o,o]}))),n.length===6&&n.push("F","F");const i=parseInt(n.join(""),16);return{r:i>>24&255,g:i>>16&255,b:i>>8&255,a:i&255,hex:"#"+n.slice(0,6).join("")}}e.getOptions=function(n){n||(n={}),n.color||(n.color={});const i=typeof n.margin>"u"||n.margin===null||n.margin<0?4:n.margin,o=n.width&&n.width>=21?n.width:void 0,s=n.scale||4;return{width:o,scale:o?4:s,margin:i,color:{dark:t(n.color.dark||"#000000ff"),light:t(n.color.light||"#ffffffff")},type:n.type,rendererOpts:n.rendererOpts||{}}},e.getScale=function(n,i){return i.width&&i.width>=n+i.margin*2?i.width/(n+i.margin*2):i.scale},e.getImageWidth=function(n,i){const o=e.getScale(n,i);return Math.floor((n+i.margin*2)*o)},e.qrToImageData=function(n,i,o){const s=i.modules.size,a=i.modules.data,c=e.getScale(s,o),d=Math.floor((s+o.margin*2)*c),l=o.margin*c,h=[o.color.light,o.color.dark];for(let u=0;u<d;u++)for(let g=0;g<d;g++){let T=(u*d+g)*4,M=o.color.light;if(u>=l&&g>=l&&u<d-l&&g<d-l){const S=Math.floor((u-l)/c),I=Math.floor((g-l)/c);M=h[a[S*s+I]?1:0]}n[T++]=M.r,n[T++]=M.g,n[T++]=M.b,n[T]=M.a}}})(Hi)),Hi}var za;function Ky(){return za||(za=1,(function(e){const t=Td();function r(i,o,s){i.clearRect(0,0,o.width,o.height),o.style||(o.style={}),o.height=s,o.width=s,o.style.height=s+"px",o.style.width=s+"px"}function n(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}e.render=function(o,s,a){let c=a,d=s;typeof c>"u"&&(!s||!s.getContext)&&(c=s,s=void 0),s||(d=n()),c=t.getOptions(c);const l=t.getImageWidth(o.modules.size,c),h=d.getContext("2d"),u=h.createImageData(l,l);return t.qrToImageData(u.data,o,c),r(h,d,l),h.putImageData(u,0,0),d},e.renderToDataURL=function(o,s,a){let c=a;typeof c>"u"&&(!s||!s.getContext)&&(c=s,s=void 0),c||(c={});const d=e.render(o,s,c),l=c.type||"image/png",h=c.rendererOpts||{};return d.toDataURL(l,h.quality)}})(Ui)),Ui}var Fi={},Ua;function Jy(){if(Ua)return Fi;Ua=1;const e=Td();function t(i,o){const s=i.a/255,a=o+'="'+i.hex+'"';return s<1?a+" "+o+'-opacity="'+s.toFixed(2).slice(1)+'"':a}function r(i,o,s){let a=i+o;return typeof s<"u"&&(a+=" "+s),a}function n(i,o,s){let a="",c=0,d=!1,l=0;for(let h=0;h<i.length;h++){const u=Math.floor(h%o),g=Math.floor(h/o);!u&&!d&&(d=!0),i[h]?(l++,h>0&&u>0&&i[h-1]||(a+=d?r("M",u+s,.5+g+s):r("m",c,0),c=0,d=!1),u+1<o&&i[h+1]||(a+=r("h",l),l=0)):c++}return a}return Fi.render=function(o,s,a){const c=e.getOptions(s),d=o.modules.size,l=o.modules.data,h=d+c.margin*2,u=c.color.light.a?"<path "+t(c.color.light,"fill")+' d="M0 0h'+h+"v"+h+'H0z"/>':"",g="<path "+t(c.color.dark,"stroke")+' d="'+n(l,d,c.margin)+'"/>',T='viewBox="0 0 '+h+" "+h+'"',S='<svg xmlns="http://www.w3.org/2000/svg" '+(c.width?'width="'+c.width+'" height="'+c.width+'" ':"")+T+' shape-rendering="crispEdges">'+u+g+`</svg>
|
|
12
|
+
`;return typeof a=="function"&&a(null,S),S},Fi}var Ha;function Zy(){if(Ha)return Et;Ha=1;const e=Cy(),t=$y(),r=Ky(),n=Jy();function i(o,s,a,c,d){const l=[].slice.call(arguments,1),h=l.length,u=typeof l[h-1]=="function";if(!u&&!e())throw new Error("Callback required as last argument");if(u){if(h<2)throw new Error("Too few arguments provided");h===2?(d=a,a=s,s=c=void 0):h===3&&(s.getContext&&typeof d>"u"?(d=c,c=void 0):(d=c,c=a,a=s,s=void 0))}else{if(h<1)throw new Error("Too few arguments provided");return h===1?(a=s,s=c=void 0):h===2&&!s.getContext&&(c=a,a=s,s=void 0),new Promise(function(g,T){try{const M=t.create(a,c);g(o(M,s,c))}catch(M){T(M)}})}try{const g=t.create(a,c);d(null,o(g,s,c))}catch(g){d(g)}}return Et.create=t.create,Et.toCanvas=i.bind(null,r.render),Et.toDataURL=i.bind(null,r.renderToDataURL),Et.toString=i.bind(null,function(o,s,a){return n.render(o,a)}),Et}var Xy=Zy();const eE="/__hb_sdk__/dev-context";function Fa(e,t){return fr(e)&&(e.source==="remote"||e.source==="anonymous")?{source:e.source,miniProgramId:typeof e.miniProgramId=="string"?e.miniProgramId:void 0,localDevLaunchToken:typeof e.localDevLaunchToken=="string"?e.localDevLaunchToken:void 0,runtimePermissions:e.runtimePermissions,publishedRuntimePermissions:e.publishedRuntimePermissions,warning:typeof e.warning=="string"?e.warning:void 0,declaredPermissions:fr(e.declaredPermissions)?e.declaredPermissions:void 0,platforms:Array.isArray(e.platforms)?e.platforms.filter(r=>["android","ios","ohos","windows","macos","linux"].includes(String(r))):void 0,localDevGrant:e.localDevGrant,contextRevision:typeof e.contextRevision=="number"?e.contextRevision:void 0,devSessionId:typeof e.devSessionId=="string"?e.devSessionId:void 0,expiresAt:typeof e.expiresAt=="number"?e.expiresAt:void 0,companionManifestSha256:typeof e.companionManifestSha256=="string"?e.companionManifestSha256:void 0}:{source:"anonymous",runtimePermissions:t}}function Kt(e,t=Date.now()){if(e.localDevGrant===void 0)return e;const r=lc(e.localDevGrant);return!r.valid||!e.devSessionId?.trim()||!Number.isSafeInteger(e.contextRevision)||e.contextRevision!==r.grant.revision||!e.expiresAt||!Number.isFinite(e.expiresAt)||e.source!=="remote"&&e.expiresAt<=t?{...e,localDevGrant:void 0,warning:"本地临时授权无效或已过期,已降权"}:{...e,...e.expiresAt<=t?{source:"anonymous",localDevLaunchToken:void 0,expiresAt:t+3e4}:{},localDevGrant:Su({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,revision:r.grant.revision,eligiblePermissionKeys:e.platforms?.some(n=>["windows","macos","linux"].includes(n))?["network","companion","appProtocol"]:["network","appProtocol"]})}}function tE(e){if(!fr(e)||!Va(e,["networkRequest"]))return;const t=e.networkRequest;if(!(!fr(t)||!Va(t,["status","useOfficialDomain"]))&&!(t.status!=="enabled"&&t.status!=="disabled")&&typeof t.useOfficialDomain=="boolean")return{networkRequest:{status:t.status,useOfficialDomain:t.useOfficialDomain}}}const rE={networkRequest:{status:"disabled",useOfficialDomain:!1}};function Kn(e){const t=Ae(e.localDevGrant?No({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant}).runtimePermissions:e.runtimePermissions),r=t.permissions.network;return t.valid&&r?{networkRequest:{status:r.status,useOfficialDomain:r.config.useOfficialDomain===!0}}:oE()}function nE(e,t,r){return r?.localDevGrant?No({declaredPermissions:r.declaredPermissions??{},runtimePermissions:e,localDevGrant:r.localDevGrant}).runtimePermissions:Sd(e,t,t.networkRequest.useOfficialDomain)}function iE(e){if(e.source!=="remote")return{schema_version:1,entries:[]};const t=Kn({...e,localDevGrant:void 0});return Sd(e.runtimePermissions,t,!1)}function oE(){return{networkRequest:{...rE.networkRequest}}}function Sd(e,t,r){const n=Ae(e);if(!n.valid)return{schema_version:1,entries:[]};const i=[];for(const s of dr){const a=n.permissions[s];a&&i.push(s==="network"?{key:s,status:t.networkRequest.status,config:{useOfficialDomain:r}}:{key:s,status:a.status,config:{}})}const o=fr(e)&&typeof e.revision=="number"&&Number.isInteger(e.revision)&&e.revision>=0?e.revision:void 0;return{schema_version:1,...o===void 0?{}:{revision:o},entries:i}}function fr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function Va(e,t){return Object.keys(e).length===t.length&&t.every(n=>Object.hasOwn(e,n))}function sE(e){let t,r=!1,n=!1,i;return{invalidate(a){return n?Promise.resolve({ok:!1}):e.shouldSkip?.(a,{draining:i!==void 0})?i??Promise.resolve({ok:!0}):(r=!0,i??=o().finally(()=>{i=void 0}),i)},dispose(){n||(n=!0,r=!1,t?.abort(),t=void 0)}};async function o(){let a={ok:!0};for(;r&&!n;){r=!1;const c=new AbortController;t=c;let d;try{d=await e.fetch(c.signal)}catch(h){a={ok:!1},!n&&!c.signal.aborted&&s(h);continue}finally{t===c&&(t=void 0)}if(n)return{ok:!1};let l;try{l=e.apply(d)}catch(h){a={ok:!1},n||s(h);continue}if(n)return{ok:!1};if(a={ok:!0},!!e.hasChanged(l))try{await e.onChanged(l)}catch(h){a={ok:!1},n||s(h)}}return n?{ok:!1}:a}function s(a){try{e.onError(a)}catch{}}}function aE(e){return sE({apply:e.applyStatus,fetch:e.fetchStatus,hasChanged:t=>t.changed,onChanged:t=>e.reconcile(t.status),onError:e.onError,shouldSkip:t=>t!==void 0&&t<=e.getCanonicalRevision()})}function cE(e){const t=e.minDelayMs??1e3,r=e.maxDelayMs??15e3;let n=t,i=!1,o;return{schedule:s,reset(){n=t,a()},dispose(){i||(i=!0,a())}};function s(){i||e.isDisposed()||(a(),o=e.timers.setTimeout(async()=>{o=void 0;let c;try{c=await e.invalidate()}catch{c={ok:!1}}if(!(i||e.isDisposed())){if(c.ok){n=t,e.connectEvents();return}n=Math.min(n*2,r),s()}},n))}function a(){o!==void 0&&e.timers.clearTimeout(o),o=void 0}}const dE={identity:"小程序身份",profile:"昵称和头像",steam_account:"Steam 账号"};function uE(e){return new Promise((t,r)=>{if(e.signal.aborted){r(e.signal.reason);return}const n=document.createElement("div");n.className="hb-sdk-auth-dialog",n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=`
|
|
13
|
+
<div class="hb-sdk-auth-dialog__panel">
|
|
14
|
+
<h2>授权请求</h2>
|
|
15
|
+
<p class="hb-sdk-auth-dialog__app">${Vi(e.miniProgram?.name||"当前小程序")} 申请访问:</p>
|
|
16
|
+
<ul class="hb-sdk-auth-dialog__scopes">${e.scopes.map(a=>`<li>${Vi(dE[a]||a)}</li>`).join("")}</ul>
|
|
17
|
+
${e.userProfile?.nickname?`<p class="hb-sdk-auth-dialog__profile">当前账号:${Vi(e.userProfile.nickname)}</p>`:""}
|
|
18
|
+
<div class="hb-sdk-auth-dialog__actions">
|
|
19
|
+
<button type="button" data-action="deny">拒绝</button>
|
|
20
|
+
<button type="button" class="primary" data-action="allow">允许</button>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
`;const i=a=>{s(),t(a)},o=()=>{s(),r(e.signal.reason)},s=()=>{e.signal.removeEventListener("abort",o),n.remove()};n.querySelector('[data-action="allow"]')?.addEventListener("click",()=>{i({status:"granted",grantedScopes:[...e.scopes]})}),n.querySelector('[data-action="deny"]')?.addEventListener("click",()=>{i({status:"cancelled"})}),e.signal.addEventListener("abort",o,{once:!0}),(document.querySelector("#host-overlay-layer")??document.body).appendChild(n)})}function Vi(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function lE(e){return{launchUrl:e.launchUrl,sdkVersionPolicy:{minimumSdkVersion:"0.5.0",sdkVersion:Wo,releaseChannel:"development"},runtimePermissions:e.runtimePermissions,platformAccess:{source:"manifest",manifest:{platforms:$n},sdkVersion:Wo},environmentInfo:{appVersion:null,operatingSystem:{name:e.operatingSystem??"unknown",version:null}},...e.miniProgramId?{canonicalIdentity:{miniProgramId:e.miniProgramId}}:{}}}const Ba="hb-sdk-action-dialog-style";function Jn(e){return new Promise((t,r)=>{if(e.signal?.aborted){r(e.signal.reason);return}pE();const n=document.createElement("div");n.className="hb-sdk-action-dialog",n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=`
|
|
24
|
+
<div class="hb-sdk-action-dialog__panel">
|
|
25
|
+
<h2>${Qa(e.title)}</h2>
|
|
26
|
+
<pre class="hb-sdk-action-dialog__detail">${Qa(e.detail)}</pre>
|
|
27
|
+
<div class="hb-sdk-action-dialog__actions">
|
|
28
|
+
<button type="button" class="primary" data-action="confirm">确定</button>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
`;const i=()=>{s(),t()},o=()=>{s(),r(e.signal?.reason)},s=()=>{e.signal?.removeEventListener("abort",o),n.remove()};n.querySelector('[data-action="confirm"]')?.addEventListener("click",i),e.signal?.addEventListener("abort",o,{once:!0}),(document.querySelector("#host-overlay-layer")??document.body).appendChild(n)})}async function fE(e,t){await Jn({title:"打开页面",detail:["protocolType: "+e.protocolType,"path: "+e.path,"params: "+_t(e.params)].join(`
|
|
32
|
+
`),signal:t.signal})}async function hE(e,t){await Jn({title:"打开小程序",detail:["miniProgramId: "+e.miniProgramId,"extra: "+_t(e.extra)].join(`
|
|
33
|
+
`),signal:t.signal})}async function mE(e,t){await Jn({title:"分享",detail:["title: "+e.title,"description: "+e.description,"url: "+e.url,"channel: "+_t(e.channel),"post: "+_t(e.post)].join(`
|
|
34
|
+
`),signal:t.signal})}async function gE(e,t){await Jn({title:"截图分享",detail:["rect: "+_t(e.rect),"post: "+_t(e.post)].join(`
|
|
35
|
+
`),signal:t.signal})}function _t(e){return JSON.stringify(e,null,2)}function Qa(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function pE(){if(document.getElementById(Ba))return;const e=document.createElement("style");e.id=Ba,e.textContent=`
|
|
36
|
+
.hb-sdk-action-dialog {
|
|
37
|
+
position: absolute;
|
|
38
|
+
inset: 0;
|
|
39
|
+
z-index: 40;
|
|
40
|
+
display: grid;
|
|
41
|
+
place-items: center;
|
|
42
|
+
padding: 24px;
|
|
43
|
+
background: rgba(15, 23, 42, 0.45);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.hb-sdk-action-dialog__panel {
|
|
47
|
+
width: min(420px, 100%);
|
|
48
|
+
border-radius: 12px;
|
|
49
|
+
padding: 20px;
|
|
50
|
+
background: #fff;
|
|
51
|
+
box-shadow: 0 20px 45px rgba(15, 23, 42, 0.2);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.hb-sdk-action-dialog__panel h2 {
|
|
55
|
+
margin: 0 0 8px;
|
|
56
|
+
font-size: 18px;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.hb-sdk-action-dialog__detail {
|
|
60
|
+
margin: 0 0 16px;
|
|
61
|
+
max-height: 40vh;
|
|
62
|
+
overflow: auto;
|
|
63
|
+
color: #1f2933;
|
|
64
|
+
font-family: inherit;
|
|
65
|
+
font-size: 12px;
|
|
66
|
+
line-height: 1.6;
|
|
67
|
+
white-space: pre-wrap;
|
|
68
|
+
overflow-wrap: anywhere;
|
|
69
|
+
word-break: break-word;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.hb-sdk-action-dialog__actions {
|
|
73
|
+
display: flex;
|
|
74
|
+
justify-content: flex-end;
|
|
75
|
+
gap: 8px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.hb-sdk-action-dialog__actions button {
|
|
79
|
+
min-height: 36px;
|
|
80
|
+
border: 1px solid #cad5e2;
|
|
81
|
+
border-radius: 6px;
|
|
82
|
+
padding: 0 12px;
|
|
83
|
+
background: #fff;
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.hb-sdk-action-dialog__actions .primary {
|
|
88
|
+
border-color: #2563eb;
|
|
89
|
+
color: #fff;
|
|
90
|
+
background: #2563eb;
|
|
91
|
+
}
|
|
92
|
+
`,document.head.appendChild(e)}const yE=44;function EE(e){const t=()=>e.isCapsuleHidden?.()?0:yE;return{...e.applyDisplay?{applyOrientation:async(r,n)=>(await e.applyDisplay(r,n.signal),{supported:!0})}:{},...e.onViewportChange?{onViewportChange:e.onViewportChange}:{},close:async()=>{await e.close()},reload:async()=>{await e.reload()},getViewportMetrics:()=>{const r=e.getDeviceMetrics?.();return r?{windowWidth:r.screenWidth,windowHeight:r.screenHeight,screenWidth:r.screenWidth,screenHeight:r.screenHeight,pixelRatio:r.pixelRatio,safeArea:{top:r.safeAreaInsets.top+t(),right:r.screenWidth-r.safeAreaInsets.right,bottom:r.screenHeight-r.safeAreaInsets.bottom,left:r.safeAreaInsets.left}}:{windowWidth:window.innerWidth,windowHeight:window.innerHeight,screenWidth:window.screen.width,screenHeight:window.screen.height,pixelRatio:window.devicePixelRatio}},getNavigationBarHeight:()=>{const r=e.getDeviceMetrics?.().statusBarHeight;return r===void 0?0:r+t()},setNavigationBarStyle:r=>{document.documentElement.dataset.navigationBarStyle=r,e.onNavigationBarStyleChange?.(r)},setClipboard:async({text:r})=>{await navigator.clipboard.writeText(r)},showToast:async({message:r,status:n})=>{e.pushLog("host.message",{message:r,status:n}),await Zd({message:r,status:n})},showLoading:Jd,hideLoading:Kd,vibrate:$d,openAppPage:fE,openWindow:hE,showShareMenu:mE,captureAndShare:gE,setScreenshotChromeHidden:Wd}}const Ya=["launch-only","stdio","full","prepare-fail","prepare-cancel","launch-cancel","os-blocked","normal-exit","crash","output-limit"],kr=[{phase:"downloading",loaded:4,total:12},{phase:"verifying",processed:8,total:12},{phase:"extracting",processed:12,total:12}],Ga={"launch-only":[],stdio:["stdio"],full:["stdio","attachments","notifications"],"prepare-fail":[],"prepare-cancel":[],"launch-cancel":[],"os-blocked":[],"normal-exit":["stdio"],crash:["stdio"],"output-limit":["stdio"]};class wE{port;presentation;now;schedule;clearSchedule;onDiagnostic;preparations=new Map;sessions=new Map;eventSink;sessionEventListeners=new Set;nextSessionId=0;constructor(t={}){this.now=t.now??Date.now,this.schedule=t.schedule??((r,n)=>setTimeout(r,n)),this.clearSchedule=t.clearSchedule??(r=>clearTimeout(r)),this.onDiagnostic=t.onDiagnostic??(()=>{}),this.port={getInfo:async r=>this.getInfo(r),getPreparationStatus:async r=>this.getPreparationStatus(r),prepare:(r,n)=>this.prepare(r,n),cancelPreparation:async r=>this.cancelPreparation(r),getActiveSession:async r=>this.getActiveSession(r),launch:async r=>this.launch(r),write:async r=>this.write(r),closeStdin:async r=>this.closeStdin(r),terminate:async r=>this.terminate(r),ackOutput:async r=>this.ackOutput(r),openAttachment:async r=>this.openAttachment(r),showNotification:async r=>this.showNotification(r),onSessionEvent:r=>(this.sessionEventListeners.add(r),()=>this.sessionEventListeners.delete(r))},this.presentation={confirmCompanionOperation:async({action:r,companion:n})=>{const i=n.alias===`${r}-cancel`;return this.diagnostic(`authorization.${i?"cancelled":"granted"}`,n.alias,{action:r}),i?{status:"cancelled"}:{status:"granted"}}}}bindEventSink(t){this.eventSink=t,this.diagnostic(t?"runtime.connected":"runtime.disconnected")}reset(t){const r=t?[t]:[...Ya];for(const n of r){const i=this.preparations.get(n);for(const o of i?.operation?.timers??[])this.clearSchedule(o);i?.operation?.reject(ce("COMPANION_PREPARATION_CANCELLED","固定 Fake 已重置")),this.preparations.delete(n),this.sessions.delete(n)}this.diagnostic("reset",t)}getInfo(t){const r=this.readAlias(t);return{alias:r,displayName:`Browser Fake: ${r}`,target:r==="os-blocked"?"macos-arm64":"windows-x64",capabilities:Ga[r],archiveBytes:12,signatureStatus:"unsigned"}}getPreparationStatus(t){const r=this.readAlias(t);return this.preparations.get(r)?.status??{state:"not-prepared"}}prepare(t,r){const n=this.readAlias(t),i=this.preparations.get(n);if(i?.status.state==="ready")return Promise.resolve(this.getInfo(n));if(i?.operation)return i.operation.listeners.add(r.onProgress),this.diagnostic("prepare.joined",n),r.onProgress(i.status.state==="preparing"?i.status.progress:kr[0]),i.operation.promise;let o,s;const a=new Promise((d,l)=>{o=d,s=l}),c={cancelled:!1,listeners:new Set([r.onProgress]),promise:a,reject:s,resolve:o,timers:new Set};{const d={status:{state:"preparing",progress:kr[0]},operation:c};this.preparations.set(n,d),this.diagnostic("prepare.started",n),kr.forEach((l,h)=>{const u=this.schedule(()=>{if(c.timers.delete(u),!c.cancelled){d.status={state:"preparing",progress:l};try{c.listeners.forEach(g=>g(l))}catch(g){c.cancelled=!0;for(const T of c.timers)this.clearSchedule(T);d.operation=void 0,d.status={state:"failed",error:{code:"COMPANION_PREPARATION_CANCELLED",message:"Fake progress sink failed",retryable:!0}},this.diagnostic("prepare.progress-handler-failed",n,{message:g instanceof Error?g.message:String(g)}),c.reject(g);return}if(this.diagnostic("prepare.progress",n,{phase:l.phase}),h===kr.length-1){if(d.operation=void 0,n==="prepare-fail"){d.status={state:"failed",error:{code:"COMPANION_INTEGRITY_FAILED",message:"固定 Fake 完整性校验失败",retryable:!0}},c.reject(ce("COMPANION_INTEGRITY_FAILED","固定 Fake 完整性校验失败")),this.diagnostic("prepare.failed",n,{code:"COMPANION_INTEGRITY_FAILED"});return}d.status={state:"ready",preparedAt:this.now()},c.resolve(this.getInfo(n)),this.diagnostic("prepare.ready",n)}}},h+1);c.timers.add(u)})}return a}cancelPreparation(t){const r=this.readAlias(t),n=this.preparations.get(r);if(n?.operation){n.operation.cancelled=!0;for(const i of n.operation.timers)this.clearSchedule(i);n.operation.reject(ce("COMPANION_PREPARATION_CANCELLED","准备已取消")),n.operation=void 0,n.status={state:"not-prepared"},this.diagnostic("prepare.cancelled",r)}}getActiveSession(t){const r=this.readAlias(t),n=this.sessions.get(r);if(!n||n.exited)return;const i=n.snapshot.controllerGeneration;return n.snapshot={...n.snapshot,controllerGeneration:i+1},this.emit(yu,{sessionId:n.snapshot.id,controllerGeneration:i}),n.waitingOutput&&(n.queuedOutput.unshift(n.waitingOutput),n.waitingOutput=void 0,this.flushOutput(n)),this.diagnostic("session.controller-transferred",r,{controllerGeneration:n.snapshot.controllerGeneration}),{...n.snapshot,capabilities:[...n.snapshot.capabilities]}}launch(t){const r=this.readAlias(t);if(this.getPreparationStatus(r).state!=="ready")throw ce("COMPANION_NOT_PREPARED","固定 Fake 尚未准备完成");if(r==="os-blocked")throw ce("COMPANION_OS_BLOCKED","操作系统安全策略已阻止启动");const n=this.sessions.get(r);if(n&&!n.exited)throw ce("COMPANION_LAUNCH_FAILED","固定 Fake Session 已在运行");const i={id:`browser-fake-${++this.nextSessionId}`,alias:r,target:this.getInfo(r).target,capabilities:Ga[r],state:"running",controllerGeneration:1},o={snapshot:i,stdinClosed:!1,exited:!1,queuedOutput:[]};return this.sessions.set(r,o),this.diagnostic("session.launched",r,{capabilities:[...i.capabilities],sessionId:i.id}),i.capabilities.includes("stdio")&&this.schedule(()=>{this.queueOutput(o,"stdout",1,`fake:ready
|
|
93
|
+
`),this.queueOutput(o,"stderr",1,`fake:diagnostic
|
|
94
|
+
`)},20),r==="normal-exit"&&this.schedule(()=>this.requestExit(o,{reason:"exited",exitCode:0}),40),r==="crash"&&this.schedule(()=>this.requestExit(o,{reason:"crashed",exitCode:1}),40),r==="output-limit"&&this.schedule(()=>this.requestExit(o,{reason:"output-limit"}),40),{...i,capabilities:[...i.capabilities]}}write(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("stdio"))throw ce("COMPANION_PIPE_CLOSED","stdio 未启用");if(r.stdinClosed)throw ce("COMPANION_PIPE_CLOSED","stdin 已关闭");const n=Math.max(1,...r.queuedOutput.map(i=>i.sequence),r.waitingOutput?.sequence??0)+1;this.queueOutput(r,"stdout",n,new Uint8Array(t.data)),this.diagnostic("stdio.write",r.snapshot.alias,{bytes:t.data.byteLength})}closeStdin(t){const r=this.readController(t);r.stdinClosed=!0,this.diagnostic("stdio.closed",r.snapshot.alias)}terminate(t){const r=this.readController(t);this.exit(r,{reason:"terminated"})}ackOutput(t){const r=this.readController(t),n=r.waitingOutput;!n||n.stream!==t.stream||n.sequence!==t.sequence||(r.waitingOutput=void 0,this.diagnostic("stdio.ack",r.snapshot.alias,{sequence:t.sequence,stream:t.stream}),this.flushOutput(r))}openAttachment(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("attachments"))throw ce("COMPANION_ATTACHMENT_NOT_FOUND","attachments 未启用");if(t.id!=="report")throw ce("COMPANION_ATTACHMENT_NOT_FOUND","固定 Fake Attachment 不存在");this.diagnostic("attachment.opened",r.snapshot.alias,{id:t.id});const n=new TextEncoder().encode(`Browser Fake Companion report
|
|
95
|
+
`);return{kind:"file",name:"browser-fake-report.txt",mode:"read",create:async()=>{throw ce("FILE_ACCESS_DENIED","Attachment 只读")},read:async()=>new Uint8Array(n),write:async()=>{throw ce("FILE_ACCESS_DENIED","Attachment 只读")},stat:async()=>({kind:"file",size:n.byteLength})}}showNotification(t){const r=this.readController(t);if(!r.snapshot.capabilities.includes("notifications"))throw ce("COMPANION_NOTIFICATION_UNAVAILABLE","notifications 未启用");this.diagnostic("notification.shown",r.snapshot.alias,{category:t.category})}queueOutput(t,r,n,i){t.queuedOutput.push({stream:r,sequence:n,data:typeof i=="string"?new TextEncoder().encode(i):i}),this.flushOutput(t)}flushOutput(t){if(t.exited||t.waitingOutput||!this.eventSink&&this.sessionEventListeners.size===0)return;const r=t.queuedOutput.shift();if(!r){t.pendingExit&&this.exit(t,t.pendingExit);return}t.waitingOutput=r,this.emit(gu,{sessionId:t.snapshot.id,controllerGeneration:t.snapshot.controllerGeneration,...r}),this.diagnostic("stdio.chunk",t.snapshot.alias,{bytes:r.data.byteLength,sequence:r.sequence,stream:r.stream})}requestExit(t,r){t.pendingExit=r,!t.waitingOutput&&t.queuedOutput.length===0&&this.exit(t,r)}exit(t,r){t.exited||(t.exited=!0,t.pendingExit=void 0,t.waitingOutput=void 0,t.queuedOutput.length=0,this.emit(pu,{sessionId:t.snapshot.id,exit:r}),this.diagnostic("session.exit",t.snapshot.alias,{...r}))}readController(t){const r=[...this.sessions.values()].find(n=>n.snapshot.id===t.sessionId);if(!r||r.exited)throw ce("COMPANION_SESSION_EXITED","固定 Fake Session 不存在");if(r.snapshot.controllerGeneration!==t.controllerGeneration)throw ce("COMPANION_SESSION_OWNERSHIP_LOST","固定 Fake Session 控制权已转移");return r}readAlias(t){if(!Ya.includes(t))throw ce("COMPANION_NOT_DECLARED","未知固定 Companion Fake 场景");return t}emit(t,r){this.eventSink?.(t,r),this.sessionEventListeners.forEach(n=>n({type:t,payload:r}))}diagnostic(t,r,n){this.onDiagnostic({action:t,...r?{alias:r}:{},...n?{detail:n}:{}})}}const IE=Object.freeze({[Rn]:!0,[kn]:!0,[xn]:!0,[jn]:!0,[zn]:!0,[Un]:!0,[Hn]:!0,[Fn]:!0,[Vn]:!0,[Bn]:!0,[Qn]:!0,[Yn]:!0,[sr]:!0,[or]:!0,[ar]:!0});function ME(e){return new wE(e)}function ce(e,t){return Object.assign(new Error(t),{code:e})}const NE=/^[A-Za-z0-9_-]{22}$/,AE="https://api.xiaoheihe.cn/open_inapp/";function DE(e){const t=typeof e.port=="number"?e.port:Number(e.port);if(!Number.isInteger(t)||t<=0||t>65535)throw new TypeError("Mobile launch redirect port is invalid");if(!NE.test(e.token))throw new TypeError("Mobile launch redirect token is invalid");const r=new URL(`http://${e.host}:${t}/l/${e.token}`);if(r.protocol!=="http:"||r.hostname!==e.host||r.port!==String(t)||r.username||r.password||r.search||r.hash)throw new TypeError("Mobile launch redirect host is invalid");return r.href}function TE(e){const t=new URL(e);if(t.protocol!=="http:"||t.username||t.password)throw new TypeError("Mobile launch redirect URL must be an HTTP URL without credentials");const r=`heybox://${encodeURIComponent(JSON.stringify({protocol_type:"openWindow",full_screen:!0,navigation_bar:{title:""},webview:{url:t.href,pull:!1,refresh:!1}}))}`;return`${AE}#${r}`}function SE(e){const t=Ae(e.runtimePermissions),r=No({declaredPermissions:e.declaredPermissions??{},runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant}),n=[],i=Ae(e.publishedRuntimePermissions),o=Ae(r.runtimePermissions);for(const s of uc){const a=s.key,c={network:"Network",companion:"Companion",appProtocol:"AppProtocol"}[a]??s.name;if(!e.declaredPermissions?.[a]?.enabled)continue;const d=t.valid&&t.permissions[a]?.status==="enabled",l=r.temporaryPermissionKeys.some(h=>h===a);n.push({key:a,label:c,state:s.access==="declaration"?"declared":d?"approved":l?"temporary":"unavailable",facts:{platformApproval:s.access==="declaration"?null:d,temporary:l,effective:o.permissions[a]?.status==="enabled",online:i.valid?i.permissions[a]?.status??"missing":"unknown"},...l?{releaseDifference:"本次使用临时授权,发布后仍需平台批准。"}:i.valid&&!i.permissions[a]?{releaseDifference:"线上快照尚未包含该权限,需发布包含声明的新版本。"}:{},...a==="appProtocol"?{highestRisk:!0}:{},...s.access!=="declaration"&&!d&&!l?{reason:a==="appProtocol"?"最高危险权限:可执行任意协议并绕过其他 SDK 能力权限;当前没有有效临时授权,线上未批准":"没有有效的本地临时授权,线上未批准"}:{}})}if(e.declaredPermissions?.network?.useOfficialDomain){const s=t.valid&&t.permissions.network?.status==="enabled"&&t.permissions.network.config.useOfficialDomain===!0;n.push({key:"network.useOfficialDomain",label:"官方域名",state:s?"approved":"unavailable",...s?{}:{reason:"不支持本地临时授权,获得线上批准后才能使用"}})}return n}function rt(e){return JSON.stringify({source:e.source,miniProgramId:e.miniProgramId,devSessionId:e.devSessionId,contextRevision:e.contextRevision,declaredPermissions:e.declaredPermissions,runtimePermissions:e.runtimePermissions,localDevGrant:e.localDevGrant,companionManifestSha256:e.companionManifestSha256})}const bE="__hb_sdk_mini_dev__",OE="hb-sdk:mini-dev-console",_E="__hb_sdk_mini_dev_console_installed__",qa=_E;function LE(e,t=console){CE(t,e,t)}const vE=["log","debug","info","warn","error"];function CE(e,t,r){if(!r||r[qa]===!0)return!1;let n=!1;for(const i of vE){const o=e[i];if(typeof o!="function")continue;const s=function(...a){try{t(i,a)}catch{}return o.apply(this,a)};try{e[i]=s,n=!0}catch{return n}}return n&&(r[qa]=!0),n}const oo=1,Wa=64*1024,PE=64,RE=/^[A-Za-z0-9_-]{22}$/;class me extends TypeError{code;constructor(t,r){super(r),this.name="BrowserDevHostChannelError",this.code=t}}function kE(e,t=!1){const r=jE(e,t);switch(so(r,"Server message"),zE(r),r.type){case"grant":return Jt(r,["version","type","connectionEpoch","nextClientSequence","nextServerSequence","snapshot"],"grant"),Zt(r.connectionEpoch,"connectionEpoch"),nt(r.nextClientSequence,"nextClientSequence"),nt(r.nextServerSequence,"nextServerSequence"),$a(r.snapshot),r;case"event":return Jt(r,["version","type","connectionEpoch","sequence","event","snapshot"],"event"),Zt(r.connectionEpoch,"connectionEpoch"),nt(r.sequence,"sequence"),r.event!=="account.changed"&&r.event!=="status.changed"&&Ke("event must be account.changed or status.changed"),$a(r.snapshot),r;case"heartbeat":return Jt(r,["version","type","connectionEpoch","sequence"],"heartbeat"),Zt(r.connectionEpoch,"connectionEpoch"),nt(r.sequence,"sequence"),r;default:return Ke("Unknown server message type")}}function xE(e){const t=e.connectionEpoch;Zt(t,"connectionEpoch"),nt(e.nextSequence,"nextSequence");let r=e.nextSequence;return{get nextSequence(){return r},accept(n){if(Zt(n.connectionEpoch,"connectionEpoch"),nt(n.sequence,"sequence"),n.connectionEpoch!==t)throw new me("INVALID_SEQUENCE","Connection epoch does not match");if(r===void 0)throw new me("INVALID_SEQUENCE","Sequence is exhausted");if(n.sequence!==r)throw new me("INVALID_SEQUENCE",`Expected sequence ${r}`);r=r===Number.MAX_SAFE_INTEGER?void 0:r+1}}}function jE(e,t){if(t)throw new me("BINARY_FRAME","Binary frames are not supported");if(typeof e!="string")throw new me("TEXT_FRAME_REQUIRED","Channel frame must be text");if(e.length>Wa)throw new me("TEXT_FRAME_TOO_LARGE","Channel text frame exceeds 64 KiB");if(new TextEncoder().encode(e).byteLength>Wa)throw new me("TEXT_FRAME_TOO_LARGE","Channel text frame exceeds 64 KiB");try{return UE(e),JSON.parse(e)}catch(r){throw r instanceof me?r:new me("INVALID_JSON","Channel frame must contain strict JSON")}}function $a(e){so(e,"snapshot"),Jt(e,["account","permissions"],"snapshot"),so(e.account,"snapshot.account"),Jt(e.account,["revision"],"snapshot.account"),nt(e.account.revision,"snapshot.account.revision"),tE(e.permissions)||Ke("snapshot.permissions is invalid")}function zE(e){e.version!==oo&&Ke("version must be 1")}function so(e,t){(typeof e!="object"||e===null||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)&&Ke(`${t} must be a plain JSON object`)}function Jt(e,t,r,n=[]){const i=Object.keys(e);(t.some(o=>!Object.hasOwn(e,o))||i.some(o=>!t.includes(o)&&!n.includes(o)))&&Ke(`${r} fields are invalid`)}function nt(e,t){(typeof e!="number"||!Number.isSafeInteger(e)||e<0)&&Ke(`${t} must be a non-negative safe integer`)}function Zt(e,t){(typeof e!="string"||!RE.test(e))&&Ke(`${t} must be a 22-character base64url value`)}function Ke(e){throw new me("INVALID_MESSAGE",e)}function UE(e){new HE(e).scan()}class HE{constructor(t){this.source=t}position=0;scan(){if(this.skipWhitespace(),this.scanValue(),this.skipWhitespace(),this.position!==this.source.length)throw new SyntaxError("Unexpected trailing JSON data")}scanValue(t=0){const r=this.source[this.position];if(r==="{"||r==="["){if(t>=PE)throw new me("INVALID_JSON","Channel JSON exceeds maximum nesting depth");return r==="{"?this.scanObject(t):this.scanArray(t)}if(r==='"'){this.scanString();return}this.scanPrimitive()}scanObject(t){this.position+=1,this.skipWhitespace();const r=new Set;if(!this.consume("}"))for(;;){if(this.source[this.position]!=='"')throw new SyntaxError("JSON object key must be a string");const n=this.scanString(),i=JSON.parse(n);if(typeof i!="string")throw new SyntaxError("JSON object key must be a string");if(r.has(i))throw new me("INVALID_JSON","Channel JSON contains a duplicate key");if(r.add(i),this.skipWhitespace(),!this.consume(":"))throw new SyntaxError("Missing JSON object colon");if(this.skipWhitespace(),this.scanValue(t+1),this.skipWhitespace(),this.consume("}"))return;if(!this.consume(","))throw new SyntaxError("Missing JSON object comma");this.skipWhitespace()}}scanArray(t){if(this.position+=1,this.skipWhitespace(),!this.consume("]"))for(;;){if(this.scanValue(t+1),this.skipWhitespace(),this.consume("]"))return;if(!this.consume(","))throw new SyntaxError("Missing JSON array comma");this.skipWhitespace()}}scanString(){const t=this.position;for(this.position+=1;this.position<this.source.length;){const r=this.source[this.position];if(r==='"')return this.position+=1,this.source.slice(t,this.position);r==="\\"?this.position+=2:this.position+=1}throw new SyntaxError("Unterminated JSON string")}scanPrimitive(){const t=this.position;for(;this.position<this.source.length&&!/[\s,\]}]/.test(this.source[this.position]??"");)this.position+=1;if(t===this.position)throw new SyntaxError("Missing JSON value")}skipWhitespace(){for(;/[\t\n\r ]/.test(this.source[this.position]??"");)this.position+=1}consume(t){return this.source[this.position]!==t?!1:(this.position+=1,!0)}}const Ka=[1e3,2e3,4e3,8e3,15e3];function FE(e){const t=new Set,r=e.webSocketFactory??(m=>new WebSocket(m)),n=e.randomValues??(m=>crypto.getRandomValues(m)),i=e.timers??{clearTimeout:m=>window.clearTimeout(m),setTimeout:(m,E)=>window.setTimeout(m,E)},o=e.onlineTarget??(typeof window>"u"?void 0:window),s=e.visibilityTarget??(typeof document>"u"?void 0:document),a=e.isOnline??(()=>typeof navigator>"u"||navigator.onLine!==!1);let c,d,l,h=!1,u=0,g,T=!1,M=!1;const S=new Set,I=(m,E)=>{if(!(!e.onDiagnostic||S.has(m))){S.add(m);try{e.onDiagnostic({phase:m,...E?{code:E}:{}})}catch{}}},_=(m,E,w=!1)=>{if(l&&m.account.revision<l.account.revision)return;const D=l&&JSON.stringify(m)===JSON.stringify(l);if(l=m,!(D&&!w))for(const P of t)P(m,E)},A=()=>{if(h||g!==void 0||c)return;const m=Ka[Math.min(u,Ka.length-1)];u+=1,g=i.setTimeout(()=>{g=void 0,p()},m)},v=()=>{h||!T||c||(g!==void 0&&(i.clearTimeout(g),g=void 0),p())},U=()=>{a()&&v()},L=()=>{s&&!s.hidden&&v()},N=()=>{M||(M=!0,o?.addEventListener("online",U),s?.addEventListener("visibilitychange",L))},f=()=>{M&&(M=!1,o?.removeEventListener("online",U),s?.removeEventListener("visibilitychange",L))},p=()=>{if(h||c)return;T=!0,N(),g!==void 0&&(i.clearTimeout(g),g=void 0);let m,E;try{m=r(e.url)}catch{I("constructor","WEBSOCKET_CONSTRUCTION_FAILED"),A();return}try{E=BE(n)}catch{I("entropy","NONCE_GENERATION_FAILED");try{m?.close(1011,"channel initialization failed")}catch{}A();return}c=m;let w,D,P;const F=()=>{m.removeEventListener("open",O),m.removeEventListener("message",C),m.removeEventListener("close",b),m.removeEventListener("error",x),d===F&&(d=void 0)},R=()=>{if(c===m){c=void 0,F();try{m.close(1008,"invalid channel state")}catch{}A()}},O=()=>{if(!(h||c!==m))try{m.send(JSON.stringify({version:oo,type:"hello",csrfToken:e.csrfToken,clientNonce:E}))}catch{I("send","HELLO_SEND_FAILED"),R()}},C=j=>{if(h||c!==m)return;if(typeof j.data!="string"){I("parse","TEXT_FRAME_REQUIRED"),R();return}let z;try{z=kE(j.data)}catch(B){I("parse",B instanceof me?B.code:"INVALID_MESSAGE"),R();return}if(z.type==="grant"){if(P){I("sequence","DUPLICATE_GRANT"),R();return}w=z.connectionEpoch,D=z.nextClientSequence,P=xE({connectionEpoch:w,nextSequence:z.nextServerSequence}),u=0,S.clear(),_(z.snapshot,{type:"grant"});return}if(!P||!w||D===void 0){I("sequence","MESSAGE_BEFORE_GRANT"),R();return}try{P.accept(z)}catch{I("sequence","INVALID_SEQUENCE"),R();return}if(z.type==="heartbeat"){try{m.send(JSON.stringify({version:oo,type:"heartbeat.ack",connectionEpoch:w,sequence:D}))}catch{I("send","HEARTBEAT_ACK_SEND_FAILED"),R()}D=D===Number.MAX_SAFE_INTEGER?void 0:D+1;return}_(z.snapshot,{type:"event",event:z.event},!0)},b=()=>{c===m&&(I("close","SOCKET_CLOSED"),c=void 0,F(),A())},x=()=>{I("open","SOCKET_ERROR"),R()};m.addEventListener("open",O),m.addEventListener("message",C),m.addEventListener("close",b),m.addEventListener("error",x),d=F};return{connect:p,subscribeUpdates(m){return t.add(m),()=>t.delete(m)},dispose(){if(h)return;h=!0,T=!1,f(),g!==void 0&&i.clearTimeout(g),g=void 0;const m=c;c=void 0,d?.(),m?.close(1e3,"client disposed"),t.clear()}}}function VE(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";let r="";for(let n=0;n<e.length;n+=3){const i=e[n]??0,o=e[n+1],s=e[n+2];r+=t[i>>2],r+=t[(i&3)<<4|(o??0)>>4],o!==void 0&&(r+=t[(o&15)<<2|(s??0)>>6]),s!==void 0&&(r+=t[s&63])}return r}function BE(e){const t=e(new Uint8Array(16));if(!(t instanceof Uint8Array)||t.byteLength!==16)throw new TypeError("Channel nonce source must fill 16 bytes");const r=VE(t);if(!/^[A-Za-z0-9_-]{22}$/.test(r))throw new TypeError("Channel nonce source returned invalid bytes");return r}try{LE((e,t)=>{yr(`console.${e}`,{source:"host",message:t.map(r=>Cd(r)).join(" ")},Date.now(),e==="log"||e==="debug"?"log":e)})}catch{}const QE="/__hb_sdk_bootstrap__",YE="/__hb_sdk__/mobile-launch-redirect",GE="/__hb_sdk__/network",qE="/session/status",WE="/session/request",$E="/session/events",KE=320,JE=1e3,ZE=1e3,XE=15e3,Ja="dark",bd=new URL(location.href).searchParams,Od=bd.get("mini_url"),ut=bd.get("ui_preview")==="1",K={device:Ht("#device"),get mobileLanSelect(){return Ht("#mobile-lan-select")},get mobileQrImage(){return Ht("#mobile-qr-image")},get mobileQrStatus(){return Ht("#mobile-qr-status")},storageSnapshot:Ht("#storage-snapshot")};if(!Od&&!ut)throw K.device.innerHTML='<div class="error">Missing mini_url query.</div>',new Error("Missing mini_url query.");const _d=Od??"about:blank",re=await Vo();Y.openPlatformBaseUrl=re.openPlatformBaseUrl;Y.devReadiness=re.devReadiness;Y.miniProgramSupportsDesktop=re.miniProgramSupportsDesktop;Y.desktopLaunch.workspaceCardsEnabled=re.workspaceCardsEnabled;let Fe=re.lanAddresses,Vr=re.defaultLanAddressId,It=re.mobileLaunchRedirect,Ho=re.nativeAppLaunchUnavailableReason,Br=re.devSessionId,ao=re.miniProgramManifestAccessToken,Qt=re.workspaceCardsEnabled,Qr=re,Fo=ei(re),Me=re.devContext,At=re.browserDevContext,le=Kt(At);Pn();let Lt=Kn(le),J=!1,Zn=0;const Xn=new AbortController;let Re=0,Dt,hr,Yr=0,We,co,uo,Ve=0,$e=!1,Gr,lo,Bi=!1;const Xt=su({apply:au,waitForLayout:async e=>{await cu(),await du(e),await uu(e)}});let fo,ho,Za=Date.now(),Yt=!1,Xa=Promise.resolve(),er=-1,mr=!1,it,mo,go,qr,et;const Cn=new Set,po=ME({onDiagnostic:({action:e,alias:t,detail:r})=>we(`companion.fake.${e}`,{...t?{alias:t}:{},...r})}),vt=aE({applyStatus:e=>jd(e,!0),fetchStatus:e=>xd(Qd(Xn.signal,e)),getCanonicalRevision:()=>er,onError:Tw,reconcile:()=>lw(Zn)}),yo=cE({connectEvents:zd,invalidate:()=>vt.invalidate(),isDisposed:()=>J,maxDelayMs:XE,minDelayMs:ZE,timers:{clearTimeout:e=>window.clearTimeout(e),setTimeout:(e,t)=>window.setTimeout(()=>{e()},t)}});let Qi=0,Gt="",Yi=!1,Eo;await wo(!1);Fd();Bd(Vd(re));ut&&nw();ti();ut||await vd();await Nr("initial");ut||(zd(),dw());ew();mw();function Ld(){!ut&&!J&&(Eo=window.setTimeout(()=>{vd().finally(Ld)},1e3))}Ld();async function vd(){if(!(Yi||J)){Yi=!0;try{const e=await fetch(`/__hb_sdk__/device-logs?after=${Qi}&limit=500`,{signal:AbortSignal.any([Xn.signal,AbortSignal.timeout(5e3)])});if(!e.ok)return;const t=await e.json();if(J)return;if(Gt&&t.epoch!==Gt){Qi=0,Gt=t.epoch;return}Gt=t.epoch,Y.logDevices=t.devices,t.gap&&yr("console.warn",{message:"部分设备日志已超出服务器缓冲,存在日志缺口"});for(const r of t.items){const n=Xd(r.method||`console.${r.level}`,{...r,source:"app"},r.timestamp,r.level==="debug"?"log":r.level);n.source=r.source,n.summary=r.message,n.detail=r,n.deviceSessionId=r.deviceSessionId,n.deviceName=t.devices.find(i=>i.id===r.deviceSessionId)?.name,n.dedupeKey=void 0,ec(n)}Qi=t.nextCursor}catch{}finally{Yi=!1}}}function ew(){window.addEventListener("beforeunload",Sw),window.addEventListener("hb-sdk:restart-runtime",Rd),window.addEventListener("hb-sdk:refresh-storage",ti),window.addEventListener("hb-sdk:qr-open-change",Pd),window.addEventListener("message",tw),fo=eu(()=>document.querySelector("#host-fullscreen-exit-mount")),ho=tu(()=>Y.devicePresetId,()=>Xt.notifyViewportChange(),{flush:"post"})}function tw(e){const t=e.data;if(e.source===null||!ge(t)||t.type!==OE||!ge(t.detail))return;const r=t.detail;r.level!=="log"&&r.level!=="debug"&&r.level!=="info"&&r.level!=="warn"&&r.level!=="error"||!Array.isArray(r.args)||typeof r.timestamp!="number"||!Number.isFinite(r.timestamp)||yr(`console.${r.level}`,{source:"app",message:r.args.map(n=>Cd(n)).join(" ")},r.timestamp,r.level==="log"||r.level==="debug"?"log":r.level)}function Cd(e){if(typeof e=="string")return e;if(e instanceof Error)return(typeof e.stack=="string"?e.stack.split(`
|
|
96
|
+
`).slice(0,4).join(`
|
|
97
|
+
`):"")||`${e.name}: ${e.message}`;if(typeof e=="object"&&e!==null)try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}return String(e)}function Pd(e){const t=e.detail?.open===!0;t!==$e&&($e=t,Ve+=1,ri(),t&&(K.mobileLanSelect.addEventListener("change",rw),Ud(),Ar()))}function rw(){$e&&Ar()}function Rd(){gr("manual restart")}function gr(e){J||Dt!==void 0||(we("runtime.restart",{boundary:Re+1}),Dt=window.setTimeout(()=>{Dt=void 0,J||Nr(e)},0))}async function Nr(e){if(Yt)return;const t=++Re;if(hr=void 0,pr(e),kd(),Y.runtimeStatus="loading",qd(Lt),K.device.replaceChildren(),ut){K.device.innerHTML=`
|
|
98
|
+
<div class="browser-mock-preview">
|
|
99
|
+
<span class="browser-mock-preview__icon">UI</span>
|
|
100
|
+
<strong>Browser Mock</strong>
|
|
101
|
+
<small>mp_preview</small>
|
|
102
|
+
</div>`,Y.runtimeStatus="idle";return}const r=document.createElement("iframe");r.dataset.testid="device-iframe",r.title="小程序预览",r.allow="clipboard-read; clipboard-write",r.name=bE,K.device.appendChild(r);const n=new AbortController;co=n;let i=!1;try{const o=await Ly(iw(n.signal,t));if(J||t!==Re){o.dispose();return}uo=o.dispose,o.ports.companion=po.port;const s=hy({iframe:r,ports:o.ports,environment:o.environment,hostCapabilities:{...o.hostCapabilities,...IE},authPresentation:o.authPresentation,companionPresentation:po.presentation,resolveLaunchConfiguration:async()=>(await o.resolveLaunch()).configuration,dispose:o.dispose,onReady:()=>{Y.runtimeStatus="ready",we("runtime.ready",{generation:t})},onTrace:a=>aw(t,a),onError:()=>{i=!0,Y.runtimeStatus="error"},onCapabilityTrace:a=>{Gt||we(a.method,a),a.method==="storage.setStorage"&&a.outcome==="success"&&ti()}});We=s,await s.start()}catch(o){if(J||t!==Re||n.signal.aborted)return;Y.runtimeStatus="error",i||we("runtime.start.failed",ru(o))}}function nw(){we("runtime.ready",{generation:1}),yr("console.info",{source:"app",message:"页面初始化完成"},Date.now(),"info"),we("user.getInfo",{durationMs:34,outcome:"success"}),we("network.request",{durationMs:86,network:{method:"GET",origin:"https://api.example.com",pathname:"/demo",responseStatus:200},outcome:"success"})}function iw(e,t){const r=le,n=nE(r.runtimePermissions,Lt,r);return{signal:e,account:{async getCurrentUserId(){return(await wo(!1,e)).user_id},async ensureAuthenticated({signal:i}){await wo(!1,i)},onChange(i){return Cn.add(i),()=>Cn.delete(i)}},authenticatedRequest:cw,storage:{area:"local",storage:localStorage},presentation:EE({close:async()=>{rc(),We?.destroy(),Xt.reset(),kd(),Y.runtimeStatus="closed"},reload:()=>{!J&&t===Re&&(hr=t)},onNavigationBarStyleChange:tc,pushLog:we,getDeviceMetrics:()=>lu.value,applyDisplay:(i,o)=>Xt.applyDisplay(i,o),isCapsuleHidden:()=>Y.display.capsuleHidden,onViewportChange:i=>Xt.onViewportChange(i)}),environment:{getCurrentHref:()=>location.href,isDevRuntime:()=>!0,setDocumentTitle:i=>{document.title=i}},resolveLaunch:async()=>({configuration:lE({launchUrl:_d,runtimePermissions:n,...r.miniProgramId?{miniProgramId:r.miniProgramId}:{},operatingSystem:nu.value.platform}),hostHints:{launchKind:r.source==="remote"?"dev-session":"anonymous-local-dev"}}),authPresentation:{confirmAuthorization:i=>uE(i)},protocol:ow()}}function ow(){return{async invoke(e){we("device.executeProtocol",{outcome:"success",delivery:"mock",protocolType:sw(e)})}}}function sw(e){if(typeof e!="string")return typeof e.protocol_type=="string"?e.protocol_type:void 0;const t=/^heybox:\/\/(.+)$/i.exec(e.trim());if(t)try{const r=JSON.parse(decodeURIComponent(t[1]));return ge(r)&&typeof r.protocol_type=="string"?r.protocol_type:void 0}catch{return}}function kd(){document.documentElement.dataset.navigationBarStyle=Ja,tc(Ja)}function aw(e,t){const r=iu(t,e);r&&ec(r),!(t.type!=="bridge_response"||t.method!=="navigation.reload"||t.outcome!=="success"||hr!==e||e!==Re)&&(hr=void 0,gr("navigation.reload"))}async function cw(e,t){if(e.redirectPolicy!=="error")throw new Error("Browser Dev Host network 只允许 no-follow redirect policy");const n=e.target.kind==="absolute-url"&&e.source==="public-sdk"&&e.target.kind==="absolute-url"?{url:e.target.url,method:e.method,params:e.params,data:e.data,bodyEncoding:e.bodyEncoding,headers:e.headers,timeout:e.timeout}:void 0;if(!n&&e.source!=="runtime-private")throw new Error("Browser Dev Host 的公开请求只支持 absolute URL");const i=await Bo(n?GE:WE,{method:"POST",body:JSON.stringify(n??{target:e.target,method:e.method,params:e.params,data:e.data,headers:e.headers,credentials:e.source==="runtime-private"?e.credentials:void 0,bodyEncoding:e.bodyEncoding,timeout:e.timeout}),signal:t.signal});!n&&i.status===401&&vt.invalidate();const o=await i.json();if(!i.ok)throw o;return o}async function wo(e,t){const r=Zn,n=await xd(Qd(Xn.signal,t));return Yd(r)?jd(n,e).status:Io()}async function xd(e){return await(await fetch(qE,{cache:"no-store",credentials:"same-origin",redirect:"error",signal:e})).json()}function jd(e,t){if(!Number.isSafeInteger(e.revision)||e.revision<er)return{changed:!1,status:Io()};const r=e.authenticated?e.user_id:void 0,n=e.authenticated?oe(e.nickname):void 0,i=e.authenticated?oe(e.avatar):void 0,o=e.revision!==er||e.authenticated!==mr||r!==it||n!==mo||i!==go;return er=e.revision,mr=e.authenticated,it=r,mo=n,go=i,Fd(),t&&o&&Cn.forEach(s=>s(it)),{changed:o,status:Io()}}function Io(){return{authenticated:mr,revision:er,...mr&&it?{user_id:it}:{}}}function dw(){if(!(!re.csrfToken||J))try{const e=new URL("/__hb_sdk__/channel",location.href);e.protocol=e.protocol==="https:"?"wss:":"ws:",et=FE({csrfToken:re.csrfToken,onDiagnostic:t=>we("channel.diagnostic",t),url:e.toString()}),et.subscribeUpdates((t,r)=>uw(t,r)),et.connect()}catch{et?.dispose(),et=void 0}}function uw(e,t){vt.invalidate(e.account.revision),_w(Lt,e.permissions)?t.type==="event"&&t.event==="status.changed"&&Nr("status changed"):(Lt=qd(e.permissions),fw())}function zd(){if(qr?.close(),qr=void 0,!it||J)return;const e=new EventSource($E);qr=e,e.addEventListener("account-invalidated",()=>{vt.invalidate()}),e.addEventListener("account-revision",()=>{vt.invalidate()}),e.onopen=()=>{yo.reset()},e.onerror=()=>{e.close(),yo.schedule()}}async function lw(e){Yd(e)&&await Nr("account revision changed")}function pr(e){Yr+=1,rc(),We&&po.reset(),We?.destroy(),We=void 0,co?.abort(new DOMException(e,"AbortError")),co=void 0,uo?.(),uo=void 0,Xt.reset()}async function fw(){J||(await Nr("permission changed"),!J&&await Ar())}async function Vo(){const e=await fetch(QE,{cache:"no-store",credentials:"same-origin",redirect:"error",signal:AbortSignal.timeout(5e3)});if(!e.ok)throw new Error("Browser Dev Host bootstrap request failed");const t=await e.json();if(!ge(t))throw new Error("Browser Dev Host bootstrap is invalid");const r=Gd(t.mobileLaunchRedirect);if(Object.hasOwn(t,"mobileLaunchRedirect")&&t.mobileLaunchRedirect!==void 0&&!r)throw new Ct;return{openPlatformBaseUrl:typeof t.openPlatformBaseUrl=="string"?t.openPlatformBaseUrl:void 0,devReadiness:hw(t.devReadiness),csrfToken:typeof t.csrfToken=="string"?t.csrfToken:void 0,defaultLanAddressId:typeof t.defaultLanAddressId=="string"?t.defaultLanAddressId:void 0,devSessionId:typeof t.devSessionId=="string"&&/^[a-f0-9]{32}$/.test(t.devSessionId)?t.devSessionId:void 0,devContext:Fa(t.devContext,t.runtimePermissions),browserDevContext:Fa(t.browserDevContext??t.devContext,t.runtimePermissions),lanAddresses:Array.isArray(t.lanAddresses)?t.lanAddresses.filter(Ow):[],loginAvailable:t.loginAvailable===!0,miniProgram:Aw(t.miniProgram),miniProgramSupportsDesktop:t.miniProgramSupportsDesktop===!0,workspaceCardsEnabled:t.workspaceCardsEnabled===!0,mobileLaunchRedirect:r,nativeAppLaunchUnavailableReason:typeof t.nativeAppLaunchUnavailableReason=="string"?t.nativeAppLaunchUnavailableReason:void 0,miniProgramManifestAccessToken:typeof t.miniProgramManifestAccessToken=="string"?t.miniProgramManifestAccessToken:void 0}}function hw(e){if(!ge(e))return;const t=s=>{if(!(!ge(s)||!["ready","pending","blocked","not-configured"].includes(String(s.state))))return{state:s.state,...typeof s.reason=="string"?{reason:s.reason.slice(0,240)}:{}}},r=t(e.browser),n=t(e.mobile),i=t(e.companion);if(!r||!n||!i||!ge(e.companion))return;const o=e.companion;return{browser:r,mobile:n,companion:{...i,...typeof o.digest=="string"&&/^[a-f0-9]{64}$/.test(o.digest)?{digest:o.digest}:{},artifacts:Array.isArray(o.artifacts)?o.artifacts.filter(s=>ge(s)&&typeof s.alias=="string"&&/^[a-z][a-z0-9-]{0,31}$/.test(s.alias)&&["windows-x64","macos-arm64"].includes(String(s.target))).map(({alias:s,target:a})=>({alias:s,target:a})):[]}}}async function Bo(e,t){const r=new Headers(t.headers);return r.set("content-type","application/json"),re.csrfToken&&r.set("x-hb-sdk-csrf",re.csrfToken),fetch(e,{...t,headers:r,cache:"no-store",credentials:"same-origin",redirect:"error"})}function mw(){Qo(),ut||(lo=window.setInterval(()=>{Nw()},JE))}function Ud(e=K.mobileLanSelect.options.length>0?K.mobileLanSelect.value:void 0){K.mobileLanSelect.replaceChildren();for(const t of Fe){const r=document.createElement("option");r.value=t.id,r.textContent=`${t.name} · ${t.address}`,K.mobileLanSelect.appendChild(r)}e&&Fe.some(({id:t})=>t===e)?K.mobileLanSelect.value=e:Vr&&Fe.some(({id:t})=>t===Vr)?K.mobileLanSelect.value=Vr:Fe[0]&&(K.mobileLanSelect.value=Fe[0].id),K.mobileLanSelect.disabled=Fe.length===0}async function Ar(){if(J)return;const e=++Ve;if(ri(),Me.source!=="remote"||!Me.localDevLaunchToken||Me.expiresAt!==void 0&&Me.expiresAt<=Date.now()){K.mobileQrImage.removeAttribute("src"),K.mobileQrStatus.textContent=Ho||"需要有效的本地调试启动票";return}const t=bw();if(!t?.mobileAppQrPayload){K.mobileQrImage.removeAttribute("src"),K.mobileQrStatus.textContent="未发现可用的局域网地址";return}K.mobileQrStatus.textContent="正在生成二维码...";try{const r=await ww(t);if(e!==Ve||J)return;const n=await gw(r.address,r.expiresAt);if(e!==Ve||J)return;const i=await Xy.toDataURL(n.payload,{width:KE,margin:1});if(e!==Ve||J)return;K.mobileQrImage.src=i,K.mobileQrStatus.textContent=`${r.address.name} · ${r.address.address}`,Mw(n.expiresAt,e)}catch(r){if(e!==Ve||J)return;if(r instanceof Ct){Wr();return}K.mobileQrImage.removeAttribute("src"),K.mobileQrStatus.textContent=Yo(r)}}async function gw(e,t){const r=e.mobileAppQrPayload;if(!r)throw new Error("Mobile 启动配置不可用");const n=await pw(e,r);if(!n)return{expiresAt:t,payload:r};try{return{expiresAt:Math.min(t,n.expiresAt),payload:TE(DE({host:e.address,port:location.port,token:n.token}))}}catch{throw new Ct}}async function pw(e,t){if(It?.addressId===e.id)return It;if(!It)return;const r=await Bo(YE,{method:"POST",body:JSON.stringify({address_id:e.id,payload:t,previous_token:It.token})});if(!r.ok)throw new Ct;const n=await r.json(),i=ge(n)?Gd({addressId:n.address_id,expiresAt:n.expires_at,token:n.token}):void 0;if(!i||i.addressId!==e.id)throw new Ct;return It=i,Qr={...Qr,mobileLaunchRedirect:i},Fo=ei(Qr),i}async function yw(e){const t=await Vo(),r=Ew(t,e),n=r?.mobileAppQrPayload;if(!r||!n)throw new Error("Mobile 启动配置不可用");return Hd(t),{...r,mobileAppQrPayload:n}}function Ew(e,t){return e.lanAddresses.find(({id:r})=>r===t)??e.lanAddresses.find(({id:r})=>r===e.defaultLanAddressId)??e.lanAddresses[0]}function Hd(e){const t=rt(le);Y.devReadiness=e.devReadiness,Y.miniProgramSupportsDesktop=e.miniProgramSupportsDesktop,Qt=e.workspaceCardsEnabled,Qr=e,Fo=ei(e),Me=e.devContext,At=e.browserDevContext,le=Kt(At),Lt=Kn(le),Pn(),Fe=e.lanAddresses,Vr=e.defaultLanAddressId,It=e.mobileLaunchRedirect,Ho=e.nativeAppLaunchUnavailableReason,Br=e.devSessionId,ao=e.miniProgramManifestAccessToken,Bd(Vd(e)),$e&&Ud(),Qo(),t!==rt(le)&&(Re+=1,pr("local permission context changed"),gr("local permission context changed"))}function Pn(){Y.localPermissions=SE(le),Y.devContextWarning=le.source==="anonymous"?"未连接线上上下文":le.warning?"本地上下文受限,请检查 CLI 状态":""}function Qo(){let e;try{e=ou(_d)}catch{}const t=Me.miniProgramId?.trim().toLowerCase();let r=Ho?.trim()??"";!r&&(Me.source!=="remote"||!t)&&(r="请先绑定可管理的小程序"),!r&&!Me.localDevLaunchToken?.trim()&&(r="正在等待有效的本地调试启动票"),!r&&Qt&&!Br&&(r="本地调试会话尚未就绪"),!r&&Me.expiresAt!==void 0&&Me.expiresAt<=Date.now()&&(r="本地调试启动票已过期"),!r&&!e&&(r="未发现可用的本机调试地址"),nc({...e?{address:e}:{},...t?{miniProgramId:t}:{},...Qt&&Br?{devSessionId:Br}:{},...Qt&&ao?{miniProgramManifestToken:ao}:{},workspaceCardsEnabled:Qt,ready:r==="",...r?{unavailableReason:r}:{}})}class Ct extends Error{}async function ww(e){const t=Xa.then(()=>Iw(e));return Xa=t.then(()=>{},()=>{}),t}async function Iw(e){const t=new URL(e.appUrl),r=new URL(eE,location.origin),n=await Bo(r.pathname,{method:"POST",body:JSON.stringify({mini_url_origin:t.origin,runtime_permissions:iE(Me)})}),i=await n.json();if(!n.ok||!ge(i)||typeof i.token!="string"||typeof i.expires_at!="number")throw new Error("创建 Mobile Dev Session 失败");return{address:await yw(e.id),expiresAt:i.expires_at}}function Mw(e,t){Gr=window.setTimeout(()=>{!J&&$e&&t===Ve&&Ar()},Math.max(1e3,e-Date.now()-3e4))}async function Nw(){if(!(Bi||J)){Bi=!0;try{const e=await Vo();Za=Date.now();const t=Yt;Yt=!1;const r=ei(e);if(!t&&r===Fo&&rt(Kt(e.browserDevContext))===rt(le)){At=e.browserDevContext,le=Kt(At),Pn();return}Hd(e),t&&gr("CLI dev session reconnected"),$e&&Ar()}catch(e){e instanceof Ct&&Wr();const t=Kt(At);rt(t)!==rt(le)&&(le=t,Lt=Kn(le),Pn(),Re+=1,pr("local permission context expired"),gr("local permission context expired"),Qo(),$e&&Wr()),Date.now()-Za>=3e4&&!Yt&&(Yt=!0,Re+=1,pr("CLI dev session disconnected"),K.device.replaceChildren(),Y.runtimeStatus="closed",Y.localPermissions=[],Y.devContextWarning="调试会话已断开",nc({ready:!1,unavailableReason:"调试会话已断开"}),Y.devReadiness={browser:{state:"blocked",reason:"调试会话已断开,等待 CLI 恢复"},mobile:{state:"blocked",reason:"调试会话已断开"},companion:{state:"blocked",reason:"调试会话已断开"}},$e&&Wr())}finally{Bi=!1}}}function Wr(){Ve+=1,ri(),K.mobileQrImage.removeAttribute("src"),K.mobileQrStatus.textContent="Mobile 短链接配置无效"}function ei(e){return JSON.stringify({devReadiness:e.devReadiness,devSessionId:e.devSessionId,defaultLanAddressId:e.defaultLanAddressId,lanAddresses:e.lanAddresses,mobileLaunchRedirect:e.mobileLaunchRedirect?{addressId:e.mobileLaunchRedirect.addressId,expiresAt:e.mobileLaunchRedirect.expiresAt,token:e.mobileLaunchRedirect.token}:void 0,devContext:{permissionContext:rt(e.devContext),expiresAt:e.devContext.expiresAt,localDevLaunchToken:e.devContext.localDevLaunchToken,miniProgramId:e.devContext.miniProgramId,source:e.devContext.source},nativeAppLaunchUnavailableReason:e.nativeAppLaunchUnavailableReason,miniProgramManifestAccessToken:e.miniProgramManifestAccessToken,miniProgramSupportsDesktop:e.miniProgramSupportsDesktop,workspaceCardsEnabled:e.workspaceCardsEnabled})}function Fd(){if(!mr){Y.account={authenticated:!1,avatar:"",nickname:"未登录"};return}Y.account={authenticated:!0,avatar:go??"",nickname:mo||it||"已登录"}}function Vd(e){if(e.miniProgram?.miniProgramId)return e.miniProgram;const t=e.devContext.miniProgramId?.trim();return t?{miniProgramId:t}:e.miniProgram??null}function Bd(e){if(!!!e?.miniProgramId||!e){Y.miniProgram={bound:!1,id:"",iconUrl:"",name:"未绑定小程序",detail:"本地调试"};return}Y.miniProgram={bound:!0,id:e.miniProgramId,iconUrl:e.iconUrl??"",name:e.name||e.miniProgramId,detail:[e.miniProgramId,e.version].filter(Boolean).join(" · ")}}function Aw(e){if(e===null)return null;if(!ge(e))return;const t=oe(e.miniProgramId)??oe(e.mini_program_id);if(t)return{miniProgramId:t,...oe(e.name)?{name:oe(e.name)}:{},...oe(e.iconUrl)??oe(e.icon_url)?{iconUrl:oe(e.iconUrl)??oe(e.icon_url)}:{},...oe(e.status)?{status:oe(e.status)}:{},...oe(e.version)?{version:oe(e.version)}:{},...oe(e.developerName)??oe(e.developer_name)?{developerName:oe(e.developerName)??oe(e.developer_name)}:{}}}function oe(e){return typeof e=="string"&&e.trim()?e.trim():void 0}async function ti(){const e=++Yr,t=We,r=t?.diagnostics.storage;if(!r){Y.storage=[],Y.storageError=t?"当前 Host 不支持 Storage 诊断":"";return}try{const n=await r.getSnapshot();if(J||e!==Yr||t!==We)return;Y.storage=n.map(i=>({area:i.area,key:i.key,serializedValue:i.serializedValue,bytes:i.bytes})),Y.storageError=""}catch(n){if(J||e!==Yr||t!==We)return;Y.storage=[],Y.storageError=Yo(n)}}function Dw(e,t){we("host.message",{message:e,status:t})}function Tw(e){J||Dw(Yo(e),"error")}function we(e,t){yr(e,t)}function Sw(){Eo!==void 0&&window.clearTimeout(Eo),!J&&(J=!0,window.removeEventListener("hb-sdk:restart-runtime",Rd),window.removeEventListener("hb-sdk:refresh-storage",ti),window.removeEventListener("hb-sdk:qr-open-change",Pd),Zn+=1,Xn.abort(new DOMException("Browser Dev Host disposed","AbortError")),vt.dispose(),Re+=1,pr("Browser Dev Host disposed"),qr?.close(),et?.dispose(),et=void 0,yo.dispose(),hr=void 0,Dt!==void 0&&window.clearTimeout(Dt),Dt=void 0,ri(),lo!==void 0&&window.clearInterval(lo),Cn.clear(),fo?.(),fo=void 0,ho?.(),ho=void 0)}function ri(){Gr!==void 0&&window.clearTimeout(Gr),Gr=void 0}function Qd(e,t){return t?AbortSignal.any([e,t]):e}function Yd(e){return!J&&e===Zn}function bw(){return Fe.find(({id:e})=>e===K.mobileLanSelect.value)}function Ow(e){return ge(e)&&typeof e.address=="string"&&typeof e.appUrl=="string"&&typeof e.id=="string"&&typeof e.name=="string"&&(e.mobileAppQrPayload===void 0||typeof e.mobileAppQrPayload=="string")}function Gd(e){if(!(!ge(e)||typeof e.addressId!="string"||!e.addressId||typeof e.expiresAt!="number"||!Number.isFinite(e.expiresAt)||typeof e.token!="string"||!/^[A-Za-z0-9_-]{22}$/.test(e.token)))return{addressId:e.addressId,expiresAt:e.expiresAt,token:e.token}}function qd(e){return{networkRequest:{...e.networkRequest}}}function _w(e,t){return e.networkRequest.status===t.networkRequest.status&&e.networkRequest.useOfficialDomain===t.networkRequest.useOfficialDomain}function Yo(e){return e instanceof Error&&e.message?e.message:"操作失败"}function ge(e){return Object.prototype.toString.call(e)==="[object Object]"}function Ht(e){const t=document.querySelector(e);if(!t)throw new Error(`Missing Browser Dev Host element: ${e}`);return t}
|