@heybox/hb-sdk 0.9.0-alpha.9 → 0.9.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +15 -3
  3. package/dist/cli-chunks/{build-CSdIuQth.cjs → build-DqZ4DwUv.cjs} +5 -5
  4. package/dist/cli-chunks/{context-aw5O_ItL.cjs → context-D_VhP5QF.cjs} +4 -2
  5. package/dist/cli-chunks/{create-B-uOJ6jo.cjs → create-xNSgjouq.cjs} +1 -1
  6. package/dist/cli-chunks/{dev-CdQFaqsM.cjs → dev-IsUsrbjC.cjs} +11 -11
  7. package/dist/cli-chunks/{doctor-D7wAhL_F.cjs → doctor-BD-IXRyP.cjs} +1 -1
  8. package/dist/cli-chunks/{index-CrAaRBIJ.cjs → index-CUebAm7J.cjs} +24 -15
  9. package/dist/cli-chunks/{index-D-4qn-PG.cjs → index-HUjK7vn8.cjs} +2 -2
  10. package/dist/cli-chunks/{index.esm-CYmCravp.cjs → index.esm-Bj9uKrhv.cjs} +9 -9
  11. package/dist/cli-chunks/{login-D80S50rt.cjs → login-D8GoAMYG.cjs} +2 -2
  12. package/dist/cli-chunks/{project-vite-CreFoZsj.cjs → project-vite-CzIodp6y.cjs} +1 -1
  13. package/dist/cli-chunks/{remote-CgYQrPWf.cjs → remote-nQq3nAUy.cjs} +54 -7
  14. package/dist/cli-chunks/{runtime-gate-CYkuG3Yw.cjs → runtime-gate-uTsNPu3U.cjs} +1 -1
  15. package/dist/cli-chunks/{runtime-permission-env-0o7PQmxU.cjs → runtime-permission-env-B_poIoGP.cjs} +7 -5
  16. package/dist/cli-chunks/{session-eQw7J8qc.cjs → session-DDNple9k.cjs} +6 -1
  17. package/dist/cli-chunks/{skill-j4vNU7Hh.cjs → skill-DZK8UAXb.cjs} +2 -2
  18. package/dist/cli-chunks/{version-CeVbqw15.cjs → version-CNYpJdS7.cjs} +1 -1
  19. package/dist/cli.cjs +1 -1
  20. package/dist/devtools/browser-dev-host/assets/{browser-dev-host-CzV0H7nG.js → browser-dev-host-YJT0-SwX.js} +20 -20
  21. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-dmf1ja_e.js → desktop-app-launch-GMEmtpsR.js} +2 -2
  22. package/dist/devtools/browser-dev-host/assets/index-DRM3hPNc.css +1 -0
  23. package/dist/devtools/browser-dev-host/assets/{index-DZQpNbIp.js → index-IDyoULwK.js} +4 -4
  24. package/dist/devtools/browser-dev-host/index.html +3 -3
  25. package/dist/index.cjs.js +9 -2
  26. package/dist/index.esm.js +9 -2
  27. package/dist/miniapp-publish.cjs.js +6 -0
  28. package/dist/miniapp-publish.esm.js +5 -1
  29. package/dist/vite.cjs.js +2 -7
  30. package/dist/vite.esm.js +2 -7
  31. package/package.json +6 -6
  32. package/skill/skill.json +4 -4
  33. package/types/miniapp-manifest/permissions.d.ts +1 -2
  34. package/types/miniapp-publish/index.d.ts +4 -0
  35. package/types/modules/files/types.d.ts +19 -4
  36. package/types/modules/navigation/index.d.ts +8 -0
  37. package/types/vite/index.d.ts +1 -1
  38. package/dist/devtools/browser-dev-host/assets/index-B5aFVoao.css +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,57 @@
2
2
 
3
3
  本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。
4
4
 
5
+ ## 0.9.1-alpha.0
6
+
7
+ - No user-facing hb-sdk package changes were detected from Conventional Commits.
8
+
9
+ ## 0.9.0 - 2026-10-10
10
+
11
+ > 影响级别:Breaking
12
+ > 开发者动作:升级至 `0.9.0` 前补齐 `package.json#heybox.permissions` 与 `package.json#heybox.platforms` 并重新构建;手机真机调试重新运行 `hb-sdk dev`。
13
+ > 兼容范围:公开 SDK API 形状不变;本版本起权限与平台声明全面强制,不再保留 0.8 系列的缺失声明兼容行为,也没有回滚开关。
14
+
15
+ ### 必须操作
16
+
17
+ - 补齐 [`package.json#heybox.permissions`](https://docs.xiaoheihe.cn/hb_sdk/guide/permissions):未声明会直接拒绝构建,无权限需求也要配置 `{}`。
18
+ - 补齐 [`package.json#heybox.platforms`](https://docs.xiaoheihe.cn/hb_sdk/guide/project-configuration):产物 SDK 版本达到 `0.9.0` 后,缺少平台声明不再按移动端兜底。
19
+ - 按实际调用补齐最小声明;声明的新增、删除和配置变化会进入版本审核差异。
20
+
21
+ ### 行为调整
22
+
23
+ - 手机真机调试的 `network.request()` 由开发机转发,请求中的 `localhost` 指向开发机。
24
+ - `hb-sdk dev` 只在启动、绑定或权限声明变化时读取远端详情;手机重连复用快照,不再因票据续签反复请求。
25
+ - `user.getSteamGameList()` 复用已有结果,文件能力不可用时回退内存缓存。
26
+ - `navigation.openAppPage({ target: 'mini_program' })` 跳转前先恢复竖屏;恢复失败或跳转超时、SDK 销毁后不再打开目标。
27
+ - Companion ZIP 复用已验证内容,服务端校验通过后再提交审核,中断的部署可续接。
28
+
29
+ ### 问题修复
30
+
31
+ - 修复权限校验失败后仍能获取续签启动票,以及声明变化时旧状态覆盖最新调试状态的问题。
32
+ - 修复扫码调试启动信息缺少当前用户小程序身份,导致部分 Android 调试容器无法使用原生桥接能力的问题。
33
+
34
+ ### 文档与工具
35
+
36
+ - 浏览器调试台支持横竖屏与全屏模拟。
37
+ - 补齐网络超时与重试、Steam 授权、生命周期事件、Android 文件读写与鸿蒙目录选择等能力说明。
38
+
39
+ ## 0.9.0-alpha.11 - 2026-10-10
40
+
41
+ ### 文档与工具
42
+
43
+ - 更新 Android 外部文件读写及保存位置的支持说明,明确精确 SAF 授权的写入与原子替换限制。
44
+ - 补充鸿蒙目录选择的系统能力要求与不支持时的错误处理说明。
45
+
46
+ ## 0.9.0-alpha.10 - 2026-10-10
47
+
48
+ ### 行为调整
49
+
50
+ - 支持方向控制的宿主在 `navigation.openAppPage({ target: 'mini_program' })` 跳转前,先恢复竖屏、非全屏;恢复失败时不打开目标,并返回方向错误。返回后需要横屏的页面应在 `show` 事件中重新调用 `viewport.setDisplay()`。
51
+
52
+ ### 问题修复
53
+
54
+ - 修复跨小程序跳转超时或 SDK 销毁后仍可能打开目标的问题;恢复竖屏阶段增加截止时间,并向宿主传播取消。旧宿主没有方向能力时继续允许跳转。
55
+
5
56
  ## 0.9.0-alpha.9 - 2026-10-10
6
57
 
7
58
  ### 问题修复
@@ -263,6 +314,7 @@
263
314
 
264
315
  - 补充游戏详情页资源位申请规则、图标制作规范和申请流程说明。
265
316
 
317
+
266
318
  ## 0.8.2 - 2026-09-21
267
319
 
268
320
  > 摘要:版本名称与图片改由项目维护,新增 Steam 账号授权,并调整部署与用户数据边界。
package/README.md CHANGED
@@ -56,7 +56,7 @@ hb-sdk skill install --all-agents
56
56
 
57
57
  SDK 会在导入时启动握手,能力调用会自动等待 SDK 就绪。声明 `userInfo` 后,可通过 `user.getInfo()` 读取当前小程序内的隔离身份和已授权资料:
58
58
 
59
- 使用受保护能力前,需要在项目根 `package.json#heybox.permissions` 中显式声明。`auth.login()` 和 `user.getInfo()` 都只需要 `userInfo`,不依赖公开 `network` 权限;`network` 仅约束 `network.request()` 与 `network.download()`,线上使用仍需平台批准。所有需要平台批准的权限当前均未开放,包括 `network` 和 `companion`;开发者申请入口将在近期开放。`hb-sdk dev` 可临时补齐普通网络和 Companion 的批准缺口,但不能补齐官方域名,调试台会持续提示发布后不可用。完整配置、本地调试边界和 0.8/0.9 迁移规则见[权限声明](https://docs.xiaoheihe.cn/hb_sdk/guide/permissions)。
59
+ 使用受保护能力前,需要在项目根 `package.json#heybox.permissions` 中显式声明。`auth.login()` 和 `user.getInfo()` 都只需要 `userInfo`,不依赖公开 `network` 权限;`network` 仅约束 `network.request()` 与 `network.download()`,线上使用仍需平台批准。`network` 和 `companion` 可在开放平台“小程序管理 → 权限申请”中提交申请,开发者不能申请访问官方域名。`hb-sdk dev` 可临时补齐普通网络和 Companion 的批准缺口,但不能补齐官方域名,调试台会持续提示发布后不可用。完整配置、本地调试边界和 0.8/0.9 迁移规则见[权限声明](https://docs.xiaoheihe.cn/hb_sdk/guide/permissions)。
60
60
 
61
61
  需要可信用户手势的按钮不能在点击回调里等待握手。页面加载时先用 `getHandshakeState()` 读取当前状态,再用 `onHandshakeStateChange()` 订阅并立即接收当前状态;仅在 `status === 'ready'` 时启用按钮,并在组件或页面销毁时调用订阅返回的取消函数。`ready` 生命周期事件只是握手成功瞬间派发、不会重放的边沿通知,不能用来判断当前状态。
62
62
 
@@ -226,7 +226,7 @@ console.log(await downloaded.readText());
226
226
 
227
227
  真实 PC 的本地临时 Companion 还要求 Host 支持私有 local-dev lease;该 lease 由 Host 原子记录 prepare、Session 与进程树 provenance,并在 H5/CLI 失联后自行清理。缺少该 capability 的旧 PC Host 会安全拒绝真实临时 Companion,Browser Fake 和普通 network 调试仍可用。
228
228
 
229
- `companion` 允许获平台批准的小程序携带固定的桌面程序 ZIP,并在新 PC Host 中显式准备和启动。该权限当前尚未开放,开发者申请入口将在近期开放;入口开放并取得批准前,线上与生产环境不可用。`hb-sdk dev` 的真实 PC 联调可使用 `package.json#heybox.companions` 声明的本地产物,无需先上传或获得线上平台批准,但仍须登录、绑定、校验启动票与产物摘要,并在每次启动确认临时权限。
229
+ `companion` 允许获平台批准的小程序携带固定的桌面程序 ZIP,并在新 PC Host 中显式准备和启动。该权限需在开放平台提交申请,取得平台批准后才能在线上与生产环境使用。`hb-sdk dev` 的真实 PC 联调可使用 `package.json#heybox.companions` 声明的本地产物,无需先上传或获得线上平台批准,但仍须登录、绑定、校验启动票与产物摘要,并在每次启动确认临时权限。
230
230
  开发者只能使用 canonical Manifest 中的 alias、target、固定入口和固定参数;SDK 不提供真实下载 URL、本机路径、
231
231
  PID、动态 args、cwd、环境变量、shell 或任意命令执行。
232
232
 
@@ -393,6 +393,14 @@ const launchData = hbSDK.share.getExtra();
393
393
 
394
394
  该目标无需权限声明或可信用户手势,只接受目标 `miniProgramId` 和可选 `extra`;不能指定版本、URL、scheme 或窗口样式。生产 Host 只解析当前用户可访问的公开发布版本,预览与本地开发目标仅由 Dev Host 提供。`extra` 不会继承源小程序当前的启动数据,省略时目标读取到 `undefined`,显式传 `null` 时读取到 `null`。调用成功只表示 Host 已接受开窗请求,不等待目标加载或 SDK 握手。
395
395
 
396
+ 支持方向控制的 Host 会在打开目标前先把当前容器恢复为竖屏、非全屏,等待宿主确认后再开窗,避免当前容器仍锁定横屏时展示新容器出现方向冲突。恢复会发出 `display_change`(`source: 'api'`);恢复失败时不会打开目标,`openAppPage` 返回方向设置的错误码(如 `ORIENTATION_TIMEOUT`)。返回当前小程序后不会自动回到原方向,需要横屏的页面应在 `show` 事件中重新设置:
397
+
398
+ ```ts
399
+ hbSDK.on('show', () => {
400
+ void hbSDK.viewport.setDisplay({ orientation: 'landscape' });
401
+ });
402
+ ```
403
+
396
404
  ## 分享扩展数据
397
405
 
398
406
  `share.showShareMenu()` 的落地页固定为当前小程序的 `common_share`,不接受自定义 `url`。分享和复制链接可以携带小程序自行定义的页面状态:
@@ -469,7 +477,7 @@ CLI 会复用已验证产物、跳过该 ZIP 的网络上传;Web 文件及发
469
477
 
470
478
  右上角的桌面图标与二维码按钮使用相同样式。桌面图标只在该项目于 `package.json#heybox.platforms` 声明了桌面平台(`windows`、`macos` 或 `linux`)时展示,未声明桌面平台的项目不显示该入口。点击桌面图标后选择小黑盒正式版或 Debug 版,选择会立即请求客户端打开当前本地页面并在本地记忆,不需要二次确认。桌面端只接受无凭据的 `http://127.0.0.1:<port>`,拒绝 `localhost`、IPv6 和 LAN 地址,不提供地址选择或手工 URL;手机二维码继续独立选择局域网地址。入口在项目已绑定且本地调试启动票有效时可用,统一 URI 只携带 `mini_program_id` 和 `mini_url`,启动票继续由 detail 从同源 `launch.json` 发现并交给后端验证。浏览器无法确认客户端是否真正打开,因此调试台只记录“已请求打开”,不会自动切换正式版或 Debug 版。
471
479
 
472
- `hb-sdk dev` 在未登录、未绑定或远端不可用时仍启动 Browser Mock;真实手机/PC 入口须有有效启动票。CLI 自动从本地声明生成普通 `network` / `companion` 的临时批准缺口,不提供第二套权限开关或申请按钮。真实 Host 每次打开会话确认临时权限,拒绝后仍可按线上批准基线打开;官方域名始终只认声明与线上批准的交集。真机 Dev Session 的公开 `network.request()` 通过开发机的 HTTP 代理转发,因此 HTTPS `localhost` 指向开发机;代理不管理独立租约,不判断黑盒域名或改写应用层凭据。正式版本和 Runtime 私有请求仍走 Host 网络。CLI 连续失联约 30 秒、期限或快照变化会销毁旧 Runtime,并清理临时 Companion 进程树;恢复后重新确认。手机验收统一从右上角二维码进入并选择可达的局域网网卡。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
480
+ `hb-sdk dev` 在未登录、未绑定或远端不可用时仍启动 Browser Mock;真实手机/PC 入口须有有效启动票。CLI 自动从本地声明生成普通 `network` / `companion` 的临时批准缺口,不提供第二套权限开关。调试台顶部的“查看全部权限申请”在新标签页打开当前小程序的权限列表;尚未获批的 Network、Companion 单项提供“去申请”,直接打开对应申请表单。未获取到小程序 ID 时先选择小程序,再进入对应权限;已获批或审核中的权限不重复打开申请表单。真实 Host 每次打开会话确认临时权限,拒绝后仍可按线上批准基线打开;官方域名始终只认声明与线上批准的交集。真机 Dev Session 的公开 `network.request()` 通过开发机的 HTTP 代理转发,因此 HTTPS `localhost` 指向开发机;代理不管理独立租约,不判断黑盒域名或改写应用层凭据。正式版本和 Runtime 私有请求仍走 Host 网络。CLI 连续失联约 30 秒、期限或快照变化会销毁旧 Runtime,并清理临时 Companion 进程树;恢复后重新确认。手机验收统一从右上角二维码进入并选择可达的局域网网卡。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
473
481
 
474
482
  远端提交前需要完成 CLI 登录和小程序绑定。完整的登录、绑定、预览、版本与发布流程见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli)。
475
483
 
@@ -489,3 +497,7 @@ Host/Runtime 集成维护者请先阅读 [`@heybox/hb-sdk-runtime` README](../hb
489
497
  ## 版本名称与图片(0.8.2)
490
498
 
491
499
  在 `package.json#heybox` 配置 `name`、`icon`、`coverImages`。图片为项目内文件,icon 200×200、封面 1–5 张,单张不超过 10 MiB 和 4000 万像素。构建原样复制到版本产物,发布时才更新线上资料。全缺失配置可通过 bind/dev/deploy 从当前正式发布快照自动迁移;离线 build 不迁移。详见[版本资料与迁移指南](https://docs.xiaoheihe.cn/hb_sdk/guide/version-profile)。
500
+
501
+ ### 终端权限申请
502
+
503
+ 绑定小程序后,可用 `hb-sdk remote permission list` 查看平台状态和最近申请;使用 `hb-sdk remote permission apply network --reason "访问业务接口" --domains "api.example.com"` 或 `hb-sdk remote permission apply companion --reason "运行桌面辅助应用"` 提交申请。两种命令均支持 `--json`,无需上传版本;获批后仍需声明 Manifest 权限。
@@ -3,13 +3,13 @@
3
3
  var fs$1 = require('node:fs');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var runtimePermissionEnv = require('./runtime-permission-env-0o7PQmxU.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-B_poIoGP.cjs');
7
7
  require('node:crypto');
8
8
  require('node:zlib');
9
- var runtimeGate = require('./runtime-gate-CYkuG3Yw.cjs');
10
- var index = require('./index-CrAaRBIJ.cjs');
11
- var projectVite = require('./project-vite-CreFoZsj.cjs');
12
- require('./version-CeVbqw15.cjs');
9
+ var runtimeGate = require('./runtime-gate-uTsNPu3U.cjs');
10
+ var index = require('./index-CUebAm7J.cjs');
11
+ var projectVite = require('./project-vite-CzIodp6y.cjs');
12
+ require('./version-CNYpJdS7.cjs');
13
13
  require('node:async_hooks');
14
14
  require('node:module');
15
15
  require('path');
@@ -3,10 +3,10 @@
3
3
  var node_crypto = require('node:crypto');
4
4
  var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
- var runtimePermissionEnv = require('./runtime-permission-env-0o7PQmxU.cjs');
6
+ var runtimePermissionEnv = require('./runtime-permission-env-B_poIoGP.cjs');
7
7
  var fs$1 = require('node:fs');
8
8
  var sharp = require('sharp');
9
- var session = require('./session-eQw7J8qc.cjs');
9
+ var session = require('./session-DDNple9k.cjs');
10
10
 
11
11
  async function inspectBasicInfoImage(bytes, sourcePath, kind) {
12
12
  const inspected = await inspectDecodedBasicInfoImage(bytes, kind);
@@ -426,6 +426,8 @@ function isPlainRecord(value) {
426
426
 
427
427
  function createRemoteApiClient(options) {
428
428
  return {
429
+ listPermissionApplications: (request) => remoteGet(runtimePermissionEnv.LIST_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH, request, options),
430
+ submitPermissionApplication: (request) => remotePostForm(runtimePermissionEnv.SUBMIT_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH, request, options),
429
431
  listDeveloperEntities: () => listDeveloperEntities(options),
430
432
  switchDeveloperEntity: (requestOptions) => switchDeveloperEntity(requestOptions, options),
431
433
  getDeveloperAccessStatus: () => getDeveloperAccessStatus(options),
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
5
5
  var path = require('node:path');
6
6
  var require$$0 = require('fs');
7
7
  var require$$1 = require('path');
8
- var index = require('./index-CrAaRBIJ.cjs');
8
+ var index = require('./index-CUebAm7J.cjs');
9
9
  require('node:module');
10
10
  require('os');
11
11
  require('node:crypto');
@@ -1,9 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var context = require('./context-aw5O_ItL.cjs');
3
+ var session = require('./session-DDNple9k.cjs');
4
+ var context = require('./context-D_VhP5QF.cjs');
4
5
  var node_crypto = require('node:crypto');
5
6
  var fs = require('node:fs');
6
- var runtimePermissionEnv = require('./runtime-permission-env-0o7PQmxU.cjs');
7
+ var runtimePermissionEnv = require('./runtime-permission-env-B_poIoGP.cjs');
7
8
  var os = require('node:os');
8
9
  var path = require('node:path');
9
10
  var net = require('node:net');
@@ -12,13 +13,12 @@ var node_http = require('node:http');
12
13
  var node_module = require('node:module');
13
14
  var undici = require('undici');
14
15
  var fs$1 = require('node:fs/promises');
15
- var index = require('./index-CrAaRBIJ.cjs');
16
+ var index = require('./index-CUebAm7J.cjs');
16
17
  var require$$0$1 = require('crypto');
17
18
  var require$$0 = require('buffer');
18
- var session = require('./session-eQw7J8qc.cjs');
19
19
  var browser = require('./browser-RAy8e8cV.cjs');
20
- var projectVite = require('./project-vite-CreFoZsj.cjs');
21
- var version = require('./version-CeVbqw15.cjs');
20
+ var projectVite = require('./project-vite-CzIodp6y.cjs');
21
+ var version = require('./version-CNYpJdS7.cjs');
22
22
  require('node:zlib');
23
23
 
24
24
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
@@ -1993,8 +1993,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
1993
1993
  };
1994
1994
  const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
1995
1995
  IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
1996
- const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-CdQFaqsM.cjs', document.baseURI).href)))('ws');
1997
- const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-CdQFaqsM.cjs', document.baseURI).href)))('parse5');
1996
+ const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-IsUsrbjC.cjs', document.baseURI).href)))('ws');
1997
+ const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-IsUsrbjC.cjs', document.baseURI).href)))('parse5');
1998
1998
  const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
1999
1999
  path.resolve(__dirname, 'devtools/browser-dev-host'),
2000
2000
  path.resolve(__dirname, '../devtools/browser-dev-host'),
@@ -2019,6 +2019,7 @@ async function startBrowserDevHostServer(options) {
2019
2019
  ? mobileLaunchRedirectRegistry.register(initialMobileLaunch.payload, initialMobileLaunch.addressId)
2020
2020
  : undefined;
2021
2021
  const bootstrap = {
2022
+ openPlatformBaseUrl: options.openPlatformBaseUrl,
2022
2023
  csrfToken: sessionController.csrfToken,
2023
2024
  defaultLanAddressId: options.defaultLanAddressId,
2024
2025
  devContext: options.devContext,
@@ -11089,7 +11090,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
11089
11090
  function createNodeRealtimeDriverRegistry() {
11090
11091
  const registry = createRuntimeRealtimeDriverRegistry();
11091
11092
  registry.registerLazy('node-websocket', async () => {
11092
- const mod = await Promise.resolve().then(function () { return require('./index.esm-CYmCravp.cjs'); });
11093
+ const mod = await Promise.resolve().then(function () { return require('./index.esm-Bj9uKrhv.cjs'); });
11093
11094
  return mod.createNodeWebSocketRuntimeDriver();
11094
11095
  });
11095
11096
  return registry;
@@ -15765,6 +15766,7 @@ async function runDevCommand(options, runtime = {}) {
15765
15766
  let browserDevHost;
15766
15767
  try {
15767
15768
  browserDevHost = await runDevStartupTask(logger, '正在启动浏览器调试页服务', () => startBrowserDevHostServer({
15769
+ openPlatformBaseUrl: session.resolveHeyboxOpenPlatformBaseUrl(runtime.env),
15768
15770
  appUrl,
15769
15771
  devContext: currentDevContext,
15770
15772
  fetchImpl,
@@ -15984,8 +15986,6 @@ async function loadDevLaunchContext(options) {
15984
15986
  // 声明错误始终阻断;远端不可用只影响真实 Host。
15985
15987
  const localPermissions = runtimePermissionEnv.readMiniappPermissionsFromPackageJson(options.projectRoot, runtimePermissionEnv.resolveMiniappSdkVersion());
15986
15988
  const platforms = runtimePermissionEnv.readMiniappPlatformsFromPackageJson(options.projectRoot);
15987
- if (!localPermissions.declared)
15988
- options.logger.warn(runtimePermissionEnv.getMissingPermissionsWarning());
15989
15989
  const anonymous = (warning) => ({ context: { source: 'anonymous', warning,
15990
15990
  declaredPermissions: localPermissions.permissions ?? {}, platforms,
15991
15991
  runtimePermissions: runtimePermissionEnv.composeMiniappRuntimePermissions(localPermissions, undefined).runtimePermissions }, miniProgram: null });
@@ -3,7 +3,7 @@
3
3
  var fs = require('node:fs/promises');
4
4
  var os = require('node:os');
5
5
  var path = require('node:path');
6
- var index = require('./index-CrAaRBIJ.cjs');
6
+ var index = require('./index-CUebAm7J.cjs');
7
7
  require('node:module');
8
8
  require('node:fs');
9
9
  require('path');
@@ -235,19 +235,19 @@ function requireArgument () {
235
235
 
236
236
  var command = {};
237
237
 
238
- const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CrAaRBIJ.cjs', document.baseURI).href)));
238
+ const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CUebAm7J.cjs', document.baseURI).href)));
239
239
  function __require$4() { return require$5("node:events"); }
240
240
 
241
- const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CrAaRBIJ.cjs', document.baseURI).href)));
241
+ const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CUebAm7J.cjs', document.baseURI).href)));
242
242
  function __require$3() { return require$4("node:child_process"); }
243
243
 
244
- const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CrAaRBIJ.cjs', document.baseURI).href)));
244
+ const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CUebAm7J.cjs', document.baseURI).href)));
245
245
  function __require$2() { return require$3("node:path"); }
246
246
 
247
- const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CrAaRBIJ.cjs', document.baseURI).href)));
247
+ const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CUebAm7J.cjs', document.baseURI).href)));
248
248
  function __require$1() { return require$2("node:fs"); }
249
249
 
250
- const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CrAaRBIJ.cjs', document.baseURI).href)));
250
+ const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-CUebAm7J.cjs', document.baseURI).href)));
251
251
  function __require() { return require$1("node:process"); }
252
252
 
253
253
  var help = {};
@@ -13554,7 +13554,7 @@ function getPathname(pathWithQuery) {
13554
13554
  }
13555
13555
 
13556
13556
  const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
13557
- const BUILT_CLI_VERSION = '0.9.0-alpha.9';
13557
+ const BUILT_CLI_VERSION = '0.9.1-alpha.0';
13558
13558
  const PACKAGE_JSON_CANDIDATES = [
13559
13559
  path.resolve(__dirname, '..', '..', 'package.json'),
13560
13560
  path.resolve(__dirname, '..', 'package.json'),
@@ -13750,6 +13750,15 @@ function installRemoteCommands(program, handlers, resolveLogger) {
13750
13750
  miniProgramId: readStringArgument(miniProgramId, 'mini-program-id'),
13751
13751
  })));
13752
13752
  addRemotePublicOptions(remote.command('info').description('查看当前绑定的远程工坊小程序详情')).action(createRemoteAction(handlers, resolveLogger, 'info'));
13753
+ const permission = addRemotePublicOptions(remote.command('permission').description('申请平台权限并查看审核状态'));
13754
+ addRemotePublicOptions(permission.command('list').description('查看平台权限及最近申请状态')).action(createRemoteAction(handlers, resolveLogger, 'permission:list'));
13755
+ addRemotePublicOptions(permission.command('apply').description('提交平台权限申请')
13756
+ .argument('<key>', 'network 或 companion')
13757
+ .requiredOption('--reason <text>', '申请理由,不超过 500 字')
13758
+ .option('--domains <domains>', 'network 访问域名,多个用逗号分隔')).action(createRemoteAction(handlers, resolveLogger, 'permission:apply', (command, key) => {
13759
+ const options = readCommandOptionsWithAncestors(command);
13760
+ return { key: readStringArgument(key, 'key'), reason: readStringOption(options.reason), domains: readStringOption(options.domains) };
13761
+ }));
13753
13762
  const allowlist = addRemotePublicOptions(remote.command('allowlist').description('管理当前绑定小程序的预览白名单'));
13754
13763
  addRemotePublicOptions(allowlist.command('list').description('查看预览白名单')).action(createRemoteAction(handlers, resolveLogger, 'allowlist:list'));
13755
13764
  addRemotePublicOptions(allowlist.command('add').description('添加预览白名单 Heybox ID').argument('<heybox-id...>', 'Heybox ID')).action(createRemoteAction(handlers, resolveLogger, 'allowlist:add', (_command, heyboxIds) => ({
@@ -13913,39 +13922,39 @@ function createCommandLoggerResolver(options) {
13913
13922
  };
13914
13923
  }
13915
13924
  const defaultClearLoginStatus = async (...args) => {
13916
- const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-D80S50rt.cjs'); });
13925
+ const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-D8GoAMYG.cjs'); });
13917
13926
  return clearLoginStatus(...args);
13918
13927
  };
13919
13928
  const defaultLoginToHeybox = async (...args) => {
13920
- const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-D80S50rt.cjs'); });
13929
+ const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-D8GoAMYG.cjs'); });
13921
13930
  return loginToHeybox(...args);
13922
13931
  };
13923
13932
  const defaultPrintLoginStatus = async (...args) => {
13924
- const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-D80S50rt.cjs'); });
13933
+ const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-D8GoAMYG.cjs'); });
13925
13934
  return printLoginStatus(...args);
13926
13935
  };
13927
13936
  const defaultRunBuildCommand = async (...args) => {
13928
- const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-CSdIuQth.cjs'); });
13937
+ const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-DqZ4DwUv.cjs'); });
13929
13938
  return runBuildCommand(...args);
13930
13939
  };
13931
13940
  const defaultRunCreateCommand = async (...args) => {
13932
- const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-B-uOJ6jo.cjs'); });
13941
+ const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-xNSgjouq.cjs'); });
13933
13942
  return runCreateCommand(...args);
13934
13943
  };
13935
13944
  const defaultRunDevCommand = async (...args) => {
13936
- const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-CdQFaqsM.cjs'); }).then(function (n) { return n.dev; });
13945
+ const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-IsUsrbjC.cjs'); }).then(function (n) { return n.dev; });
13937
13946
  return runDevCommand(...args);
13938
13947
  };
13939
13948
  const defaultRunDoctorCommand = async (...args) => {
13940
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-D7wAhL_F.cjs'); });
13949
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BD-IXRyP.cjs'); });
13941
13950
  return runDoctorCommand(...args);
13942
13951
  };
13943
13952
  const defaultRunSkillInstallCommand = async (...args) => {
13944
- const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-j4vNU7Hh.cjs'); });
13953
+ const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-DZK8UAXb.cjs'); });
13945
13954
  return runSkillInstallCommand(...args);
13946
13955
  };
13947
13956
  const defaultRunRemoteCommand = async (...args) => {
13948
- const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-CgYQrPWf.cjs'); });
13957
+ const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-nQq3nAUy.cjs'); });
13949
13958
  return runRemoteCommand(...args);
13950
13959
  };
13951
13960
  function resolveStandaloneLogger(options, verbose) {
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index$2 = require('./index-CrAaRBIJ.cjs');
3
+ var index$2 = require('./index-CUebAm7J.cjs');
4
4
  var require$$0$3 = require('fs');
5
5
  var require$$0$2 = require('crypto');
6
6
  var require$$1$2 = require('path');
7
7
  var require$$0$5 = require('assert');
8
8
  var require$$0$4 = require('events');
9
9
  var require$$1$1 = require('util');
10
- var runtimePermissionEnv = require('./runtime-permission-env-0o7PQmxU.cjs');
10
+ var runtimePermissionEnv = require('./runtime-permission-env-B_poIoGP.cjs');
11
11
  var require$$0$7 = require('net');
12
12
  var require$$0$6 = require('url');
13
13
  var require$$2$1 = require('http');
@@ -11,8 +11,8 @@ var require$$0$4 = require('url');
11
11
  var require$$0 = require('zlib');
12
12
  var require$$0$1 = require('buffer');
13
13
  var require$$1 = require('util');
14
- var index = require('./index-CrAaRBIJ.cjs');
15
- var dev = require('./dev-CdQFaqsM.cjs');
14
+ var index = require('./index-CUebAm7J.cjs');
15
+ var dev = require('./dev-IsUsrbjC.cjs');
16
16
  require('node:module');
17
17
  require('node:fs');
18
18
  require('node:fs/promises');
@@ -23,14 +23,14 @@ require('node:crypto');
23
23
  require('readline');
24
24
  require('tty');
25
25
  require('assert');
26
- require('./context-aw5O_ItL.cjs');
27
- require('./runtime-permission-env-0o7PQmxU.cjs');
28
- require('./version-CeVbqw15.cjs');
29
- require('node:async_hooks');
30
- require('sharp');
31
- require('./session-eQw7J8qc.cjs');
26
+ require('./session-DDNple9k.cjs');
32
27
  require('fs');
33
28
  require('constants');
29
+ require('./context-D_VhP5QF.cjs');
30
+ require('./runtime-permission-env-B_poIoGP.cjs');
31
+ require('./version-CNYpJdS7.cjs');
32
+ require('node:async_hooks');
33
+ require('sharp');
34
34
  require('node:os');
35
35
  require('node:net');
36
36
  require('node:dns/promises');
@@ -42,7 +42,7 @@ require('node:buffer');
42
42
  require('node:url');
43
43
  require('node:util');
44
44
  require('node:child_process');
45
- require('./project-vite-CreFoZsj.cjs');
45
+ require('./project-vite-CzIodp6y.cjs');
46
46
  require('node:zlib');
47
47
 
48
48
  var bufferUtil = {exports: {}};
@@ -3,9 +3,9 @@
3
3
  var promises = require('node:readline/promises');
4
4
  var node_crypto = require('node:crypto');
5
5
  var node_http = require('node:http');
6
- var session = require('./session-eQw7J8qc.cjs');
6
+ var session = require('./session-DDNple9k.cjs');
7
7
  var browser = require('./browser-RAy8e8cV.cjs');
8
- var index = require('./index-CrAaRBIJ.cjs');
8
+ var index = require('./index-CUebAm7J.cjs');
9
9
  require('node:path');
10
10
  require('fs');
11
11
  require('constants');
@@ -5,7 +5,7 @@ var fs$1 = require('node:fs/promises');
5
5
  var node_module = require('node:module');
6
6
  var path = require('node:path');
7
7
  var node_url = require('node:url');
8
- var index = require('./index-CrAaRBIJ.cjs');
8
+ var index = require('./index-CUebAm7J.cjs');
9
9
 
10
10
  function findProjectRoot(startDir) {
11
11
  let current = path.resolve(startDir);
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
- var runtimePermissionEnv = require('./runtime-permission-env-0o7PQmxU.cjs');
4
- var context = require('./context-aw5O_ItL.cjs');
3
+ var runtimePermissionEnv = require('./runtime-permission-env-B_poIoGP.cjs');
4
+ var context = require('./context-D_VhP5QF.cjs');
5
5
  var promises = require('node:readline/promises');
6
- var index = require('./index-CrAaRBIJ.cjs');
7
- var session = require('./session-eQw7J8qc.cjs');
6
+ var index = require('./index-CUebAm7J.cjs');
7
+ var session = require('./session-DDNple9k.cjs');
8
8
  var childProcess = require('node:child_process');
9
9
  var fs = require('node:fs');
10
10
  var fs$1 = require('node:fs/promises');
11
11
  var path = require('node:path');
12
12
  var node_crypto = require('node:crypto');
13
13
  require('node:zlib');
14
- var runtimeGate = require('./runtime-gate-CYkuG3Yw.cjs');
15
- require('./version-CeVbqw15.cjs');
14
+ var runtimeGate = require('./runtime-gate-uTsNPu3U.cjs');
15
+ require('./version-CNYpJdS7.cjs');
16
16
  require('node:async_hooks');
17
17
  require('sharp');
18
18
  require('node:module');
@@ -318,7 +318,7 @@ function createDefaultCosClient(uploadToken, COS) {
318
318
  };
319
319
  }
320
320
  async function loadCosConstructor() {
321
- const cosModule = await Promise.resolve().then(function () { return require('./index-D-4qn-PG.cjs'); }).then(function (n) { return n.index; });
321
+ const cosModule = await Promise.resolve().then(function () { return require('./index-HUjK7vn8.cjs'); }).then(function (n) { return n.index; });
322
322
  return cosModule.default;
323
323
  }
324
324
  function formatSize(bytes) {
@@ -1121,6 +1121,10 @@ async function runRemoteCommand(options, runtime = {}) {
1121
1121
  }
1122
1122
  const context = await createRemoteCommandContext(options, runtime);
1123
1123
  switch (options.command) {
1124
+ case 'permission:list':
1125
+ return remotePermissionList(options, context, runtime);
1126
+ case 'permission:apply':
1127
+ return remotePermissionApply(options, context, runtime);
1124
1128
  case 'access':
1125
1129
  return remoteAccess(options, context, runtime);
1126
1130
  case 'entity:list':
@@ -1227,6 +1231,8 @@ async function createRemoteCommandContext(options, runtime) {
1227
1231
  }
1228
1232
  function adaptRemoteApiClient(api) {
1229
1233
  return {
1234
+ listPermissionApplications: (miniProgramId) => api.listPermissionApplications({ mini_program_id: miniProgramId }),
1235
+ submitPermissionApplication: ({ miniProgramId, key, reason, domains }) => api.submitPermissionApplication({ mini_program_id: miniProgramId, permission_key: key, reason, domains }),
1230
1236
  accessStatus: () => api.getDeveloperAccessStatus(),
1231
1237
  listMiniPrograms: ({ keyword, limit = 200, offset = 0, status }) => api.listUserMiniprograms({ keyword, status, offset, limit }),
1232
1238
  createMiniProgram: () => api.createUserMiniprogram(),
@@ -1446,6 +1452,47 @@ async function remoteAllowlistWrite(options, context, runtime) {
1446
1452
  }
1447
1453
  return finishRemoteCommand(options, runtime, output);
1448
1454
  }
1455
+ async function remotePermissionList(options, context, runtime) {
1456
+ const miniProgramId = requireBinding(context);
1457
+ const result = await context.api.listPermissionApplications(miniProgramId);
1458
+ if (!options.json) {
1459
+ for (const item of result.items) {
1460
+ const application = item.latest_application;
1461
+ const approval = result.runtime_permissions?.entries?.find(entry => entry.key === item.permission_key);
1462
+ context.logger.info(`${item.permission_key} (${item.permission_name}) 平台状态=${approval?.status ?? 'disabled'} 最近申请=${application?.status ?? '未申请'}`);
1463
+ if (application?.application_id)
1464
+ context.logger.info(`申请 ID:${application.application_id}`);
1465
+ if (application?.review_remark)
1466
+ context.logger.info(`审核意见:${application.review_remark}`);
1467
+ }
1468
+ }
1469
+ return finishRemoteCommand(options, runtime, { changed: false, miniProgramId, items: toCamelCaseDeep(result.items), runtimePermissions: toCamelCaseDeep(result.runtime_permissions) });
1470
+ }
1471
+ async function remotePermissionApply(options, context, runtime) {
1472
+ const miniProgramId = requireBinding(context);
1473
+ const key = requireNonEmpty(options.key, '请指定申请权限 network 或 companion');
1474
+ if (key !== 'network' && key !== 'companion')
1475
+ throw new Error('仅支持申请 network 或 companion 权限');
1476
+ const reason = requireNonEmpty(options.reason, '权限申请必须传 --reason');
1477
+ if (Array.from(reason).length > 500)
1478
+ throw new Error('申请理由不能超过 500 字');
1479
+ let domains;
1480
+ if (key === 'network') {
1481
+ const values = [...new Set(requireNonEmpty(options.domains, 'network 申请必须传 --domains,多个域名用逗号分隔').split(',').map(value => value.trim()).filter(Boolean))];
1482
+ if (!values.length || values.length > 20)
1483
+ throw new Error('请填写 1 至 20 个访问域名');
1484
+ if (values.some(value => /[\s/:?#@*\\]/.test(value)))
1485
+ throw new Error('请填写域名,不含协议、端口、路径或通配符');
1486
+ domains = values.join(',');
1487
+ }
1488
+ await assertBoundMiniProgramEntityMatchesCurrent(context, miniProgramId);
1489
+ const application = await context.api.submitPermissionApplication({ miniProgramId, key, reason, domains });
1490
+ if (!options.json) {
1491
+ context.logger.success(`权限申请已受理:${application.application_id}(${application.status})`);
1492
+ context.logger.info('使用 hb-sdk remote permission list 查看审核状态;平台批准后仍需在 Manifest 中声明权限。');
1493
+ }
1494
+ return finishRemoteCommand(options, runtime, { miniProgramId, application: toCamelCaseDeep(application) });
1495
+ }
1449
1496
  async function remoteLeaderboardCreate(options, context, runtime) {
1450
1497
  const miniProgramId = requireBinding(context);
1451
1498
  const order = requireNonEmpty(options.order, 'remote cloud leaderboard create 必须传 --order asc|desc');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var runtimePermissionEnv = require('./runtime-permission-env-0o7PQmxU.cjs');
3
+ var runtimePermissionEnv = require('./runtime-permission-env-B_poIoGP.cjs');
4
4
 
5
5
  // Shorthands
6
6
  /**
@@ -2,7 +2,7 @@
2
2
 
3
3
  var fs = require('node:fs');
4
4
  var path = require('node:path');
5
- var version = require('./version-CeVbqw15.cjs');
5
+ var version = require('./version-CNYpJdS7.cjs');
6
6
  require('node:crypto');
7
7
  var node_async_hooks = require('node:async_hooks');
8
8
 
@@ -3447,9 +3447,6 @@ function requiresExplicitPermissions(sdkVersion) {
3447
3447
  throw new Error(`sdkVersion 必须是合法 SemVer:${sdkVersion}`);
3448
3448
  return parsed.major > 0 || parsed.minor >= 9;
3449
3449
  }
3450
- function getMissingPermissionsWarning(sourceLabel = 'package.json#heybox.permissions') {
3451
- return `${sourceLabel} 尚未声明。当前按 0.8 兼容行为构建;0.9.0 起将拒绝构建,请尽快补充权限声明(无权限需求时配置 {})。`;
3452
- }
3453
3450
  function composeMiniappRuntimePermissions(local, approvals) {
3454
3451
  const parsedApprovals = parseMiniProgramRuntimePermissions(approvals);
3455
3452
  const approvalRevision = isRecord$3(approvals) && Number.isInteger(approvals.revision) ? approvals.revision : undefined;
@@ -12711,6 +12708,10 @@ function compareBytes(left, right) {
12711
12708
  }
12712
12709
  return left.length - right.length;
12713
12710
  }
12711
+ /** 查询平台权限目录和最近申请。 */
12712
+ const LIST_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH = '/mall/developer/user_miniprogram/runtime_permission/application_list';
12713
+ /** 提交不绑定版本的平台权限申请。 */
12714
+ const SUBMIT_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH = '/mall/developer/user_miniprogram/runtime_permission/application_submit';
12714
12715
 
12715
12716
  function findNearestPackageJsonPath(startDir) {
12716
12717
  let current = path.resolve(startDir);
@@ -12889,6 +12890,7 @@ exports.DEVELOPER_ENTITY_LIST_API_PATH = DEVELOPER_ENTITY_LIST_API_PATH;
12889
12890
  exports.DEVELOPER_ENTITY_SWITCH_API_PATH = DEVELOPER_ENTITY_SWITCH_API_PATH;
12890
12891
  exports.LIST_USER_MINIPROGRAM_API_PATH = LIST_USER_MINIPROGRAM_API_PATH;
12891
12892
  exports.LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH = LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH;
12893
+ exports.LIST_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH = LIST_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH;
12892
12894
  exports.LIST_USER_MINIPROGRAM_VERSION_API_PATH = LIST_USER_MINIPROGRAM_VERSION_API_PATH;
12893
12895
  exports.MINIAPP_UPLOAD_BATCH_SIZE = MINIAPP_UPLOAD_BATCH_SIZE;
12894
12896
  exports.MINIAPP_UPLOAD_SCOPE = MINIAPP_UPLOAD_SCOPE;
@@ -12898,6 +12900,7 @@ exports.Parser = Parser;
12898
12900
  exports.RELEASE_USER_MINIPROGRAM_VERSION_API_PATH = RELEASE_USER_MINIPROGRAM_VERSION_API_PATH;
12899
12901
  exports.REOPEN_USER_MINIPROGRAM_API_PATH = REOPEN_USER_MINIPROGRAM_API_PATH;
12900
12902
  exports.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH = SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH;
12903
+ exports.SUBMIT_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH = SUBMIT_USER_MINIPROGRAM_PERMISSION_APPLICATION_API_PATH;
12901
12904
  exports.TAKE_DOWN_USER_MINIPROGRAM_API_PATH = TAKE_DOWN_USER_MINIPROGRAM_API_PATH;
12902
12905
  exports.UPDATE_SQUARE_DISPLAY_API_PATH = UPDATE_SQUARE_DISPLAY_API_PATH;
12903
12906
  exports.UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH = UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH;
@@ -12913,7 +12916,6 @@ exports.createMiniProgramLocalDevGrant = createMiniProgramLocalDevGrant;
12913
12916
  exports.createMiniappArtifactFileHeader = createMiniappArtifactFileHeader;
12914
12917
  exports.createMiniappArtifactSignatureHeader = createMiniappArtifactSignatureHeader;
12915
12918
  exports.createMiniappPlatformCspEnv = createMiniappPlatformCspEnv;
12916
- exports.getMissingPermissionsWarning = getMissingPermissionsWarning;
12917
12919
  exports.hasMiniappDesktopPlatform = hasMiniappDesktopPlatform;
12918
12920
  exports.isValidMiniappManifestVersion = isValidMiniappManifestVersion;
12919
12921
  exports.normalizeBasicInfoName = normalizeBasicInfoName;