@heybox/hb-sdk 0.8.1 → 0.8.2-alpha.2

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 (64) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +2 -2
  3. package/dist/cli-chunks/{build-DPe1Ycjd.cjs → build-bVThH3Z5.cjs} +4 -4
  4. package/dist/cli-chunks/{context-BSUhAv3Z.cjs → context-DpKqGnjp.cjs} +2 -2
  5. package/dist/cli-chunks/{create-CaiKrGnb.cjs → create-BWC2343y.cjs} +1 -1
  6. package/dist/cli-chunks/{dev-BG1o8Q-0.cjs → dev-t14YpHHY.cjs} +9 -9
  7. package/dist/cli-chunks/{doctor-DutO2P5H.cjs → doctor-BWkrE0Hj.cjs} +1 -1
  8. package/dist/cli-chunks/{index-CKIyipP9.cjs → index-CDtcZVWv.cjs} +15 -15
  9. package/dist/cli-chunks/{index-Bur0U2z1.cjs → index-D3FMcOZq.cjs} +2 -2
  10. package/dist/cli-chunks/{index.esm-BPlpP-O0.cjs → index.esm-BrJBaJWS.cjs} +7 -7
  11. package/dist/cli-chunks/{login-C1JlLEza.cjs → login-DRMl7nFH.cjs} +2 -2
  12. package/dist/cli-chunks/{project-vite-Bd0WzAqQ.cjs → project-vite-CXgdzIYw.cjs} +1 -1
  13. package/dist/cli-chunks/{remote-DTFEf3Dj.cjs → remote-ibQybNiM.cjs} +6 -6
  14. package/dist/cli-chunks/{runtime-permission-env-C2S34ldj.cjs → runtime-permission-env-DiTeD75Q.cjs} +576 -20
  15. package/dist/cli-chunks/{session-zXVkHuhY.cjs → session-CIoBspg-.cjs} +1 -1
  16. package/dist/cli-chunks/{skill-CCB3DyXk.cjs → skill-5labzuWk.cjs} +2 -2
  17. package/dist/cli-chunks/{version-0qwlEyZC.cjs → version-QiVEs76a.cjs} +1 -1
  18. package/dist/cli.cjs +1 -1
  19. package/dist/devtools/browser-dev-host/assets/browser-dev-host-DxzOkljJ.js +101 -0
  20. package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-DOfl5YvO.js → desktop-app-launch-B4KsgItx.js} +1 -1
  21. package/dist/devtools/browser-dev-host/assets/{index-CFr28-0O.js → index-9Nb3XhtI.js} +3 -3
  22. package/dist/devtools/browser-dev-host/index.html +2 -2
  23. package/dist/index.cjs.js +948 -44
  24. package/dist/index.esm.js +948 -44
  25. package/dist/miniapp-publish.cjs.js +536 -30
  26. package/dist/miniapp-publish.esm.js +536 -30
  27. package/dist/protocol.cjs.js +807 -2
  28. package/dist/protocol.esm.js +807 -2
  29. package/dist/vite.cjs.js +184 -1
  30. package/dist/vite.esm.js +184 -1
  31. package/package.json +7 -7
  32. package/skill/references/api-root.md +192 -8
  33. package/skill/references/recipes.md +45 -7
  34. package/skill/skill.json +5 -5
  35. package/types/core/errors.d.ts +33 -9
  36. package/types/core/handshake-state.d.ts +32 -2
  37. package/types/core/singleton.d.ts +265 -6
  38. package/types/miniapp-manifest/bindings.d.ts +65 -0
  39. package/types/miniapp-manifest/schema.d.ts +136 -19
  40. package/types/miniapp-publish/index.d.ts +425 -29
  41. package/types/modules/auth/index.d.ts +159 -5
  42. package/types/modules/cloud/index.d.ts +514 -40
  43. package/types/modules/companion/index.d.ts +1518 -17
  44. package/types/modules/device/index.d.ts +140 -9
  45. package/types/modules/environment/index.d.ts +172 -4
  46. package/types/modules/files/types.d.ts +1396 -21
  47. package/types/modules/navigation/app-pages/types.d.ts +81 -24
  48. package/types/modules/navigation/index.d.ts +230 -7
  49. package/types/modules/network/index.d.ts +297 -26
  50. package/types/modules/share/copy-link.d.ts +35 -5
  51. package/types/modules/share/index.d.ts +210 -0
  52. package/types/modules/share/screenshot.d.ts +23 -5
  53. package/types/modules/share/show-share-menu.d.ts +18 -5
  54. package/types/modules/share/types.d.ts +148 -23
  55. package/types/modules/storage/index.d.ts +139 -9
  56. package/types/modules/ui/index.d.ts +249 -18
  57. package/types/modules/user/get-info.d.ts +29 -8
  58. package/types/modules/user/index.d.ts +157 -0
  59. package/types/modules/user/revoke-authorization.d.ts +26 -2
  60. package/types/modules/user/steam-game-list.d.ts +96 -15
  61. package/types/modules/viewport/index.d.ts +158 -22
  62. package/types/protocol/types.d.ts +19 -1
  63. package/types/vite/index.d.ts +159 -1
  64. package/dist/devtools/browser-dev-host/assets/browser-dev-host-pUcws1MK.js +0 -101
package/dist/vite.cjs.js CHANGED
@@ -11,7 +11,7 @@ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentS
11
11
  /** 构建时替换为当前发布包的实际版本。 */
12
12
  const HB_SDK_VERSION = typeof undefined === 'string'
13
13
  ? undefined
14
- : '0.8.1';
14
+ : '0.8.2-alpha.2';
15
15
 
16
16
  /**
17
17
  * iframe 与调试台页面的开发期 console 捕获转发。
@@ -3116,7 +3116,58 @@ function requireSemver () {
3116
3116
 
3117
3117
  var semverExports = requireSemver();
3118
3118
 
3119
+ /** 单个小程序版本最多声明的关联游戏数量。 */
3119
3120
  const MINIAPP_BIND_APP_IDS_MAX_COUNT = 20;
3121
+ /**
3122
+ * 校验并规范化小程序关联的游戏 App ID。
3123
+ *
3124
+ * @param value - 不可信声明。`undefined` 和 `[]` 均返回空绑定;其他值必须是最多 20 项的
3125
+ * 字符串数组,不接受 `null`、单个字符串、number 数组或类数组对象。
3126
+ * @param options - 可选诊断来源;`sourceLabel` 默认 `package.json#heybox.bindAppIds`,并原样
3127
+ * 作为所有错误消息的前缀。
3128
+ * @returns 新建、按 appid 数值升序排列且经 `Object.freeze` 冻结的 `readonly string[]`。
3129
+ * 输入数组及其顺序不会被修改;空输入也返回新的冻结空数组。
3130
+ * @throws `Error` `${sourceLabel} 必须是字符串数组`:`value` 不是数组。
3131
+ * @throws `Error` `${sourceLabel} 最多包含 20 个游戏 appid`:输入数组超过 20 项;数量检查
3132
+ * 先于逐项格式检查。
3133
+ * @throws `Error` `${sourceLabel} 包含非法游戏 appid:<value>`:任一项不是 string,或不匹配
3134
+ * `/^[1-9]\d*$/`。因此空串、首尾空白、`0`、前导零、正负号、小数、指数和非十进制字符
3135
+ * 都不会被自动修正。
3136
+ * @throws `Error` `${sourceLabel} 包含超出正 int32 范围的游戏 appid:<value>`:十进制值
3137
+ * 大于 `2147483647` 或不能成为安全整数。
3138
+ * @throws `Error` `${sourceLabel} 包含重复游戏 appid:<value>`:规范字符串在同一数组重复。
3139
+ *
3140
+ * @remarks
3141
+ * 合法范围是闭区间 `1..2147483647`,每项在输出中仍保持十进制 string。排序按数值而不是
3142
+ * 字典序执行,所以 `['3513350', '730', '10']` 输出为 `['10', '730', '3513350']`。
3143
+ * 函数先复制后排序并冻结结果,不排序或冻结调用方传入的数组。
3144
+ *
3145
+ * 这是同步、纯离线的格式规范化函数,不访问网络,也不确认 appid 是否真实存在、可绑定或
3146
+ * 属于当前开发者。`miniappManifest()` 用它校验 `package.json#heybox.bindAppIds` 并把非空结果
3147
+ * 写入 Manifest;远端 deploy 预检和提审才校验游戏可用性。缺失和空数组在普通构建中都表示
3148
+ * 无绑定,函数本身不处理 `remote deploy --from-version` 的历史快照继承语义。
3149
+ *
3150
+ * `bindAppIds` 是版本发布元数据,不是 Runtime 权限,也不会因调用
3151
+ * [navigation.openAppPage](/reference/sdk/navigation/openAppPage) 而变化。后者的 `appId` 是一次
3152
+ * 页面导航参数,允许 string 或 number、只要求字符串化后非空,不适用本函数的数组、int32、
3153
+ * 前导零、去重、20 项或排序规则。
3154
+ *
3155
+ * @example
3156
+ * ```ts
3157
+ * import { parseMiniappBindAppIds } from '@heybox/hb-sdk/miniapp-publish'
3158
+ *
3159
+ * const declared = ['3513350', '730', '10']
3160
+ * const appIds = parseMiniappBindAppIds(declared)
3161
+ *
3162
+ * console.log(appIds) // ['10', '730', '3513350']
3163
+ * console.log(declared) // ['3513350', '730', '10'],输入顺序不变
3164
+ * console.log(Object.isFrozen(appIds)) // true
3165
+ * ```
3166
+ *
3167
+ * @see [miniappManifest](/reference/symbols/vite/functions/miniappManifest)
3168
+ * @see [navigation.openAppPage](/reference/sdk/navigation/openAppPage)
3169
+ * @see [CLI 与远端发布](/guide/cli#生产构建)
3170
+ */
3120
3171
  function parseMiniappBindAppIds(value, options = {}) {
3121
3172
  const sourceLabel = options.sourceLabel ?? 'package.json#heybox.bindAppIds';
3122
3173
  if (value === undefined)
@@ -3145,8 +3196,25 @@ function parseMiniappBindAppIds(value, options = {}) {
3145
3196
  return Object.freeze(appIds);
3146
3197
  }
3147
3198
 
3199
+ /**
3200
+ * 所有小程序 iframe bridge envelope 共用的固定 namespace。
3201
+ *
3202
+ * @remarks 该值用于排除无关 `postMessage` 数据,不负责验证消息来源;接收方仍须校验 source 和 nonce,
3203
+ * 并在 origin 可以固定且协议模式要求时校验 origin。
3204
+ */
3148
3205
  const MINI_PROGRAM_MESSAGE_NAMESPACE = 'heybox:miniprogram';
3206
+ /**
3207
+ * 新消息默认发送的当前 bridge wire 版本。
3208
+ *
3209
+ * @remarks 接收 guard 为握手协商继续接受 v1 与 v2 envelope;cancel 与 operation progress 等 v2-only 消息仍必须使用 v2。
3210
+ */
3149
3211
  const MINI_PROGRAM_MESSAGE_VERSION = 2;
3212
+ /**
3213
+ * Runtime 在 iframe URL 中传递 bridge nonce 的 query 参数名。
3214
+ *
3215
+ * @remarks nonce 用于把消息关联到当前 iframe 实例,不是独立的身份认证凭据;接收方还必须校验 source,
3216
+ * 并在 origin 可以固定且协议模式要求时校验 origin。
3217
+ */
3150
3218
  const MINI_PROGRAM_BRIDGE_NONCE_PARAM = 'hb_mini_bridge_nonce';
3151
3219
  /** Companion alias 的跨构建、Runtime 与 Host 规范。 */
3152
3220
  const COMPANION_ALIAS_PATTERN = /^[a-z][a-z0-9-]{0,31}$/;
@@ -3362,6 +3430,11 @@ function isRecord$3(value) {
3362
3430
  return typeof value === 'object' && value !== null && !Array.isArray(value);
3363
3431
  }
3364
3432
 
3433
+ /**
3434
+ * `package.json#heybox.platforms` 接受的平台值,顺序同时是 Manifest 的规范化输出顺序。
3435
+ *
3436
+ * @remarks 项目仍应只声明实际完成适配并经过验收的平台;模板默认值不是自动兼容承诺。
3437
+ */
3365
3438
  const MINIAPP_PLATFORM_VALUES = ['android', 'ios', 'ohos', 'windows', 'macos', 'linux'];
3366
3439
  /** 窗口尺寸字段的脏值兜底上限;真正的上限是宿主侧显示器 workArea。 */
3367
3440
  const MINIAPP_WINDOW_SIZE_MAX = 16_384;
@@ -13025,7 +13098,19 @@ const DEV_ERROR_MESSAGE = 'Companion 开发资源暂时不可用';
13025
13098
  /** 与 Companion manifest 一致的单响应上限,避免本地调试入口被大体积声明撑爆。 */
13026
13099
  const DEV_MINI_PROGRAM_MANIFEST_MAX_BYTES = 1024 * 1024;
13027
13100
  const DEV_COMPANION_PATH_PATTERN = /^\/__hb_sdk__\/companions\/([a-z][a-z0-9-]{0,31})\/(windows-x64|macos-arm64)\.zip$/;
13101
+ /**
13102
+ * `hb-sdk dev` 为本地 Companion 产物访问注入的进程环境变量名。
13103
+ *
13104
+ * @remarks
13105
+ * 该变量由 CLI 管理,不是项目配置项。应用代码不应读取、设置、记录或转发它的值。
13106
+ */
13028
13107
  const HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN_ENV = 'HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN';
13108
+ /**
13109
+ * `hb-sdk dev` 为本地小程序 Manifest 访问注入的进程环境变量名。
13110
+ *
13111
+ * @remarks
13112
+ * 该变量由 CLI 管理,不是项目配置项。应用代码不应读取、设置、记录或转发它的值。
13113
+ */
13029
13114
  const HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN_ENV = 'HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN';
13030
13115
  const devSnapshotStoreKey = Symbol.for('@heybox/hb-sdk/dev-companion-snapshots');
13031
13116
  const devSnapshotRegistry = globalThis;
@@ -13039,6 +13124,104 @@ if (!devSnapshotRegistry[devSnapshotStoreKey]) {
13039
13124
  });
13040
13125
  }
13041
13126
  const devSnapshotStores = devSnapshotRegistry[devSnapshotStoreKey];
13127
+ /**
13128
+ * 创建工坊小程序使用的 Vite 插件。
13129
+ *
13130
+ * @returns 可直接加入 Vite `plugins` 数组的
13131
+ * [MiniappManifestPlugin](/reference/symbols/vite/interfaces/MiniappManifestPlugin)。插件固定名为
13132
+ * `heybox-miniapp-manifest`,并提供 `config`、`configResolved`、`configureServer`、`buildEnd`、
13133
+ * `transformIndexHtml`、`closeBundle` hooks;这些 hooks 由 Vite 调用,应用代码不应手动调用。
13134
+ * @throws `Error` `config` 阶段发现 Vite `base` 不是 `''` 或 `'./'`,或无法解析当前 SDK 版本时抛出。
13135
+ * @throws `Error` `configResolved` 阶段发现已解析插件列表中 `miniappManifest()` 数量不是一个时抛出。
13136
+ * @throws `Error` HTML 缺少 `<head>`,包含 `meta refresh`、`<base>`、禁止的 resource hint,或资源 URL
13137
+ * 不符合小程序 HTML 策略时,`transformIndexHtml` / 生产产物复检抛出。
13138
+ * @throws `Error` 生产构建无法读取或解析最近的 `package.json`,`version`、`heybox.platforms`、
13139
+ * `heybox.permissions`、`heybox.window`、`heybox.bindAppIds` 或 `heybox.companions` 声明非法时抛出。
13140
+ * @throws `Error` 生产 `build.outDir` 缺少根 `index.html`、递归发现额外 HTML,或 Companion 权限、
13141
+ * 目标平台、来源目录、归档结构、入口二进制不符合约束时抛出;更早的 Rollup/Vite 错误会原样优先重抛。
13142
+ *
13143
+ * @remarks
13144
+ * 该函数必须从 `@heybox/hb-sdk/vite` 导入,在 `vite.config.ts` 中无参调用且只注册一次;它不是
13145
+ * iframe 业务代码 API,也没有 options 对象。小程序声明统一来自从 Vite `root` 向上找到的最近一个
13146
+ * `package.json`,插件只读取和规范化,不会改写源文件:
13147
+ *
13148
+ * - `version`:发布版本;trim 后必须是完整 SemVer,可含 prerelease,不允许 build metadata 或模板值
13149
+ * `0.0.0`;
13150
+ * - `heybox.platforms`:项目实际承诺适配的非空、无重复平台 allowlist;输出按平台词表规范排序;
13151
+ * - `heybox.permissions`:严格权限对象;未知权限/字段或错误类型会失败,`enabled: false` 项不写入
13152
+ * Manifest。旧版本缺失声明时可能警告,新硬切版本会失败;
13153
+ * - `heybox.window`:可选的新 PC 开窗初值、最小尺寸和 `resizable` 声明;省略时不写该字段;
13154
+ * - `heybox.bindAppIds`:可选的最多 20 个正 int32 字符串 App ID;校验、去重并按数值排序,空数组
13155
+ * 在本地产物中等同不写;
13156
+ * - `heybox.companions`:可选的受管桌面程序声明;`source` 相对上述 `package.json` 所在目录解析,
13157
+ * 必须同时声明启用的 `companion` 权限和匹配的 Windows/macOS 目标平台。
13158
+ *
13159
+ * 产物中的 `sdkVersion` 来自当前实际安装的 `@heybox/hb-sdk`,不是项目可配置字段。Vite options、页面
13160
+ * 代码和普通环境变量不能覆盖上述 package 声明;插件也不会联网确认 App ID、平台批准或远端版本状态。
13161
+ *
13162
+ * Hook 行为如下:
13163
+ *
13164
+ * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;注入 SDK 构建版本,且仅
13165
+ * `vite serve` 注入开发日志编译常量;
13166
+ * - `configResolved`:确认插件唯一性,记录真实 `root`、`build.outDir`、`serve|build` 命令和精确 HMR
13167
+ * WebSocket 地址;直接 `vite build` 使用该实际 `outDir`,`hb-sdk build` 则由 CLI 固定为 `dist/`;
13168
+ * - `configureServer`:为 `hb-sdk dev` 注册设备日志、本地小程序 Manifest 与 Companion Manifest/ZIP
13169
+ * 中间件;敏感路由只接受数值 loopback socket/Host、`GET|HEAD` 和 CLI 注入的独立短期令牌,快照在
13170
+ * 配置重载时按 digest 保留,并在服务真正关闭时清理;
13171
+ * - `transformIndexHtml`:校验 HTML URL/标签策略,注入 Runtime Gate;默认注入平台 CSP,serve 时
13172
+ * `connect-src` 只开放解析出的 HMR WebSocket,并额外注入调试日志 bootstrap;
13173
+ * - `buildEnd`:记住更早的 Rollup/Vite 错误,避免 `closeBundle` 的二次产物错误遮盖根因;
13174
+ * - `closeBundle`:serve 时直接完成;build 时复检最终 HTML,要求整个输出树只有根 `index.html`,再于
13175
+ * `build.outDir` 写入 `manifest.json`,并把 Companion 目录打包成
13176
+ * `companions/<alias>/<target>.zip`,记录 size、SHA-256、固定入口与 args。
13177
+ *
13178
+ * HTML 策略会隔离业务 script/modulepreload,直到父 Runtime Gate 以 namespace、版本、nonce、source
13179
+ * 以及 referrer 可确定时的 origin 完成探测;失败时显示只能在小黑盒 App 内打开的安全页。策略拒绝自动跳转、`<base>`、危险
13180
+ * resource hints 和不受支持的外部 URL,并按标签只允许相对 URL、明确允许的 `data:` / `blob:` 或
13181
+ * 小黑盒官方 HTTPS 资源。开发者自行提供的 CSP 会保留;插件管理的 CSP marker 可重复转换而不会叠加。
13182
+ *
13183
+ * 平台 CSP 默认始终保留,直接 `vite build` / `hb-sdk build` 不会因项目声明
13184
+ * `heybox.permissions.network.useOfficialDomain` 而跳过。只有官方 `hb-sdk dev` 或
13185
+ * `hb-sdk remote deploy` 将当前版本的 `network` 声明与远端批准结果求交并确认最终启用后,才会
13186
+ * 建立 verified 上下文供插件读取内部
13187
+ * `HB_SDK_RUNTIME_PERMISSION_CONTEXT` + `HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN` 组合跳过平台 CSP;单独设置
13188
+ * 任一值无效。0.8 兼容期对完全缺失权限声明的项目仍按迁移规则处理;`useOfficialDomain` 不参与
13189
+ * CSP 跳过决定。Runtime Gate、HTML 校验和 Manifest 生成始终保留。
13190
+ *
13191
+ * `HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN`、`HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN`、
13192
+ * `HB_SDK_SKIP_COMPANIONS` 以及上述 CSP 上下文均是 CLI/发布链路内部开关,不是项目配置项。它们在
13193
+ * 插件创建时捕获;开发服务配置重载只会从同一服务的内存快照恢复 CLI 令牌。业务代码和 Vite 配置
13194
+ * 不应手工设置、读取、记录或转发令牌值。正式声明必须继续写在 `package.json#heybox`,内部环境变量
13195
+ * 不能替代声明校验。
13196
+ *
13197
+ * `manifest.json` 是 release pipeline 元数据,不是部署后供页面 fetch 的 CDN 资源。发布链路使用
13198
+ * [isValidVersion](/reference/symbols/miniapp-publish/functions/isValidVersion) 复核版本、
13199
+ * [resolveMiniappManifestPlatforms](/reference/symbols/miniapp-publish/functions/resolveMiniappManifestPlatforms)
13200
+ * 解析平台硬切规则、
13201
+ * [parseMiniappBindAppIds](/reference/symbols/miniapp-publish/functions/parseMiniappBindAppIds) 复核游戏绑定,
13202
+ * 并通过 [shouldUploadDistFile](/reference/symbols/miniapp-publish/functions/shouldUploadDistFile) 将根
13203
+ * `manifest.json` 排除出普通 CDN 文件。Web/Companion 上传预算由
13204
+ * [validateUploadTotalSize](/reference/symbols/miniapp-publish/functions/validateUploadTotalSize) 等发布 helper
13205
+ * 独立校验,不能用插件成功代替 deploy 预检。
13206
+ *
13207
+ * @example
13208
+ * ```ts
13209
+ * import vue from '@vitejs/plugin-vue'
13210
+ * import { miniappManifest } from '@heybox/hb-sdk/vite'
13211
+ * import { defineConfig } from 'vite'
13212
+ *
13213
+ * export default defineConfig({
13214
+ * // base 省略时 miniappManifest() 会补为 './'
13215
+ * plugins: [vue(), miniappManifest()],
13216
+ * })
13217
+ * ```
13218
+ *
13219
+ * @see [MiniappManifestPlugin](/reference/symbols/vite/interfaces/MiniappManifestPlugin) 返回插件及各 hook 类型。
13220
+ * @see [安装](/guide/installation) Vite 接入、相对资源路径和构建命令。
13221
+ * @see [权限声明](/guide/permissions) `heybox.permissions` 严格 schema 与迁移规则。
13222
+ * @see [窗口尺寸与可缩放性](/guide/window-size) `heybox.window` 字段与 Host 消费语义。
13223
+ * @see [受管桌面程序](/guide/companion) Companion 声明、归档和本地联调边界。
13224
+ */
13042
13225
  function miniappManifest() {
13043
13226
  const includeCompanions = process.env.HB_SDK_SKIP_COMPANIONS !== '1';
13044
13227
  const deviceLogs = new DeviceLogStore();
package/dist/vite.esm.js CHANGED
@@ -8,7 +8,7 @@ import { AsyncLocalStorage } from 'node:async_hooks';
8
8
  /** 构建时替换为当前发布包的实际版本。 */
9
9
  const HB_SDK_VERSION = typeof undefined === 'string'
10
10
  ? undefined
11
- : '0.8.1';
11
+ : '0.8.2-alpha.2';
12
12
 
13
13
  /**
14
14
  * iframe 与调试台页面的开发期 console 捕获转发。
@@ -3113,7 +3113,58 @@ function requireSemver () {
3113
3113
 
3114
3114
  var semverExports = requireSemver();
3115
3115
 
3116
+ /** 单个小程序版本最多声明的关联游戏数量。 */
3116
3117
  const MINIAPP_BIND_APP_IDS_MAX_COUNT = 20;
3118
+ /**
3119
+ * 校验并规范化小程序关联的游戏 App ID。
3120
+ *
3121
+ * @param value - 不可信声明。`undefined` 和 `[]` 均返回空绑定;其他值必须是最多 20 项的
3122
+ * 字符串数组,不接受 `null`、单个字符串、number 数组或类数组对象。
3123
+ * @param options - 可选诊断来源;`sourceLabel` 默认 `package.json#heybox.bindAppIds`,并原样
3124
+ * 作为所有错误消息的前缀。
3125
+ * @returns 新建、按 appid 数值升序排列且经 `Object.freeze` 冻结的 `readonly string[]`。
3126
+ * 输入数组及其顺序不会被修改;空输入也返回新的冻结空数组。
3127
+ * @throws `Error` `${sourceLabel} 必须是字符串数组`:`value` 不是数组。
3128
+ * @throws `Error` `${sourceLabel} 最多包含 20 个游戏 appid`:输入数组超过 20 项;数量检查
3129
+ * 先于逐项格式检查。
3130
+ * @throws `Error` `${sourceLabel} 包含非法游戏 appid:<value>`:任一项不是 string,或不匹配
3131
+ * `/^[1-9]\d*$/`。因此空串、首尾空白、`0`、前导零、正负号、小数、指数和非十进制字符
3132
+ * 都不会被自动修正。
3133
+ * @throws `Error` `${sourceLabel} 包含超出正 int32 范围的游戏 appid:<value>`:十进制值
3134
+ * 大于 `2147483647` 或不能成为安全整数。
3135
+ * @throws `Error` `${sourceLabel} 包含重复游戏 appid:<value>`:规范字符串在同一数组重复。
3136
+ *
3137
+ * @remarks
3138
+ * 合法范围是闭区间 `1..2147483647`,每项在输出中仍保持十进制 string。排序按数值而不是
3139
+ * 字典序执行,所以 `['3513350', '730', '10']` 输出为 `['10', '730', '3513350']`。
3140
+ * 函数先复制后排序并冻结结果,不排序或冻结调用方传入的数组。
3141
+ *
3142
+ * 这是同步、纯离线的格式规范化函数,不访问网络,也不确认 appid 是否真实存在、可绑定或
3143
+ * 属于当前开发者。`miniappManifest()` 用它校验 `package.json#heybox.bindAppIds` 并把非空结果
3144
+ * 写入 Manifest;远端 deploy 预检和提审才校验游戏可用性。缺失和空数组在普通构建中都表示
3145
+ * 无绑定,函数本身不处理 `remote deploy --from-version` 的历史快照继承语义。
3146
+ *
3147
+ * `bindAppIds` 是版本发布元数据,不是 Runtime 权限,也不会因调用
3148
+ * [navigation.openAppPage](/reference/sdk/navigation/openAppPage) 而变化。后者的 `appId` 是一次
3149
+ * 页面导航参数,允许 string 或 number、只要求字符串化后非空,不适用本函数的数组、int32、
3150
+ * 前导零、去重、20 项或排序规则。
3151
+ *
3152
+ * @example
3153
+ * ```ts
3154
+ * import { parseMiniappBindAppIds } from '@heybox/hb-sdk/miniapp-publish'
3155
+ *
3156
+ * const declared = ['3513350', '730', '10']
3157
+ * const appIds = parseMiniappBindAppIds(declared)
3158
+ *
3159
+ * console.log(appIds) // ['10', '730', '3513350']
3160
+ * console.log(declared) // ['3513350', '730', '10'],输入顺序不变
3161
+ * console.log(Object.isFrozen(appIds)) // true
3162
+ * ```
3163
+ *
3164
+ * @see [miniappManifest](/reference/symbols/vite/functions/miniappManifest)
3165
+ * @see [navigation.openAppPage](/reference/sdk/navigation/openAppPage)
3166
+ * @see [CLI 与远端发布](/guide/cli#生产构建)
3167
+ */
3117
3168
  function parseMiniappBindAppIds(value, options = {}) {
3118
3169
  const sourceLabel = options.sourceLabel ?? 'package.json#heybox.bindAppIds';
3119
3170
  if (value === undefined)
@@ -3142,8 +3193,25 @@ function parseMiniappBindAppIds(value, options = {}) {
3142
3193
  return Object.freeze(appIds);
3143
3194
  }
3144
3195
 
3196
+ /**
3197
+ * 所有小程序 iframe bridge envelope 共用的固定 namespace。
3198
+ *
3199
+ * @remarks 该值用于排除无关 `postMessage` 数据,不负责验证消息来源;接收方仍须校验 source 和 nonce,
3200
+ * 并在 origin 可以固定且协议模式要求时校验 origin。
3201
+ */
3145
3202
  const MINI_PROGRAM_MESSAGE_NAMESPACE = 'heybox:miniprogram';
3203
+ /**
3204
+ * 新消息默认发送的当前 bridge wire 版本。
3205
+ *
3206
+ * @remarks 接收 guard 为握手协商继续接受 v1 与 v2 envelope;cancel 与 operation progress 等 v2-only 消息仍必须使用 v2。
3207
+ */
3146
3208
  const MINI_PROGRAM_MESSAGE_VERSION = 2;
3209
+ /**
3210
+ * Runtime 在 iframe URL 中传递 bridge nonce 的 query 参数名。
3211
+ *
3212
+ * @remarks nonce 用于把消息关联到当前 iframe 实例,不是独立的身份认证凭据;接收方还必须校验 source,
3213
+ * 并在 origin 可以固定且协议模式要求时校验 origin。
3214
+ */
3147
3215
  const MINI_PROGRAM_BRIDGE_NONCE_PARAM = 'hb_mini_bridge_nonce';
3148
3216
  /** Companion alias 的跨构建、Runtime 与 Host 规范。 */
3149
3217
  const COMPANION_ALIAS_PATTERN = /^[a-z][a-z0-9-]{0,31}$/;
@@ -3359,6 +3427,11 @@ function isRecord$3(value) {
3359
3427
  return typeof value === 'object' && value !== null && !Array.isArray(value);
3360
3428
  }
3361
3429
 
3430
+ /**
3431
+ * `package.json#heybox.platforms` 接受的平台值,顺序同时是 Manifest 的规范化输出顺序。
3432
+ *
3433
+ * @remarks 项目仍应只声明实际完成适配并经过验收的平台;模板默认值不是自动兼容承诺。
3434
+ */
3362
3435
  const MINIAPP_PLATFORM_VALUES = ['android', 'ios', 'ohos', 'windows', 'macos', 'linux'];
3363
3436
  /** 窗口尺寸字段的脏值兜底上限;真正的上限是宿主侧显示器 workArea。 */
3364
3437
  const MINIAPP_WINDOW_SIZE_MAX = 16_384;
@@ -13022,7 +13095,19 @@ const DEV_ERROR_MESSAGE = 'Companion 开发资源暂时不可用';
13022
13095
  /** 与 Companion manifest 一致的单响应上限,避免本地调试入口被大体积声明撑爆。 */
13023
13096
  const DEV_MINI_PROGRAM_MANIFEST_MAX_BYTES = 1024 * 1024;
13024
13097
  const DEV_COMPANION_PATH_PATTERN = /^\/__hb_sdk__\/companions\/([a-z][a-z0-9-]{0,31})\/(windows-x64|macos-arm64)\.zip$/;
13098
+ /**
13099
+ * `hb-sdk dev` 为本地 Companion 产物访问注入的进程环境变量名。
13100
+ *
13101
+ * @remarks
13102
+ * 该变量由 CLI 管理,不是项目配置项。应用代码不应读取、设置、记录或转发它的值。
13103
+ */
13025
13104
  const HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN_ENV = 'HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN';
13105
+ /**
13106
+ * `hb-sdk dev` 为本地小程序 Manifest 访问注入的进程环境变量名。
13107
+ *
13108
+ * @remarks
13109
+ * 该变量由 CLI 管理,不是项目配置项。应用代码不应读取、设置、记录或转发它的值。
13110
+ */
13026
13111
  const HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN_ENV = 'HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN';
13027
13112
  const devSnapshotStoreKey = Symbol.for('@heybox/hb-sdk/dev-companion-snapshots');
13028
13113
  const devSnapshotRegistry = globalThis;
@@ -13036,6 +13121,104 @@ if (!devSnapshotRegistry[devSnapshotStoreKey]) {
13036
13121
  });
13037
13122
  }
13038
13123
  const devSnapshotStores = devSnapshotRegistry[devSnapshotStoreKey];
13124
+ /**
13125
+ * 创建工坊小程序使用的 Vite 插件。
13126
+ *
13127
+ * @returns 可直接加入 Vite `plugins` 数组的
13128
+ * [MiniappManifestPlugin](/reference/symbols/vite/interfaces/MiniappManifestPlugin)。插件固定名为
13129
+ * `heybox-miniapp-manifest`,并提供 `config`、`configResolved`、`configureServer`、`buildEnd`、
13130
+ * `transformIndexHtml`、`closeBundle` hooks;这些 hooks 由 Vite 调用,应用代码不应手动调用。
13131
+ * @throws `Error` `config` 阶段发现 Vite `base` 不是 `''` 或 `'./'`,或无法解析当前 SDK 版本时抛出。
13132
+ * @throws `Error` `configResolved` 阶段发现已解析插件列表中 `miniappManifest()` 数量不是一个时抛出。
13133
+ * @throws `Error` HTML 缺少 `<head>`,包含 `meta refresh`、`<base>`、禁止的 resource hint,或资源 URL
13134
+ * 不符合小程序 HTML 策略时,`transformIndexHtml` / 生产产物复检抛出。
13135
+ * @throws `Error` 生产构建无法读取或解析最近的 `package.json`,`version`、`heybox.platforms`、
13136
+ * `heybox.permissions`、`heybox.window`、`heybox.bindAppIds` 或 `heybox.companions` 声明非法时抛出。
13137
+ * @throws `Error` 生产 `build.outDir` 缺少根 `index.html`、递归发现额外 HTML,或 Companion 权限、
13138
+ * 目标平台、来源目录、归档结构、入口二进制不符合约束时抛出;更早的 Rollup/Vite 错误会原样优先重抛。
13139
+ *
13140
+ * @remarks
13141
+ * 该函数必须从 `@heybox/hb-sdk/vite` 导入,在 `vite.config.ts` 中无参调用且只注册一次;它不是
13142
+ * iframe 业务代码 API,也没有 options 对象。小程序声明统一来自从 Vite `root` 向上找到的最近一个
13143
+ * `package.json`,插件只读取和规范化,不会改写源文件:
13144
+ *
13145
+ * - `version`:发布版本;trim 后必须是完整 SemVer,可含 prerelease,不允许 build metadata 或模板值
13146
+ * `0.0.0`;
13147
+ * - `heybox.platforms`:项目实际承诺适配的非空、无重复平台 allowlist;输出按平台词表规范排序;
13148
+ * - `heybox.permissions`:严格权限对象;未知权限/字段或错误类型会失败,`enabled: false` 项不写入
13149
+ * Manifest。旧版本缺失声明时可能警告,新硬切版本会失败;
13150
+ * - `heybox.window`:可选的新 PC 开窗初值、最小尺寸和 `resizable` 声明;省略时不写该字段;
13151
+ * - `heybox.bindAppIds`:可选的最多 20 个正 int32 字符串 App ID;校验、去重并按数值排序,空数组
13152
+ * 在本地产物中等同不写;
13153
+ * - `heybox.companions`:可选的受管桌面程序声明;`source` 相对上述 `package.json` 所在目录解析,
13154
+ * 必须同时声明启用的 `companion` 权限和匹配的 Windows/macOS 目标平台。
13155
+ *
13156
+ * 产物中的 `sdkVersion` 来自当前实际安装的 `@heybox/hb-sdk`,不是项目可配置字段。Vite options、页面
13157
+ * 代码和普通环境变量不能覆盖上述 package 声明;插件也不会联网确认 App ID、平台批准或远端版本状态。
13158
+ *
13159
+ * Hook 行为如下:
13160
+ *
13161
+ * - `config`:省略 `base` 时补为 `'./'`,显式值只接受 `''` / `'./'`;注入 SDK 构建版本,且仅
13162
+ * `vite serve` 注入开发日志编译常量;
13163
+ * - `configResolved`:确认插件唯一性,记录真实 `root`、`build.outDir`、`serve|build` 命令和精确 HMR
13164
+ * WebSocket 地址;直接 `vite build` 使用该实际 `outDir`,`hb-sdk build` 则由 CLI 固定为 `dist/`;
13165
+ * - `configureServer`:为 `hb-sdk dev` 注册设备日志、本地小程序 Manifest 与 Companion Manifest/ZIP
13166
+ * 中间件;敏感路由只接受数值 loopback socket/Host、`GET|HEAD` 和 CLI 注入的独立短期令牌,快照在
13167
+ * 配置重载时按 digest 保留,并在服务真正关闭时清理;
13168
+ * - `transformIndexHtml`:校验 HTML URL/标签策略,注入 Runtime Gate;默认注入平台 CSP,serve 时
13169
+ * `connect-src` 只开放解析出的 HMR WebSocket,并额外注入调试日志 bootstrap;
13170
+ * - `buildEnd`:记住更早的 Rollup/Vite 错误,避免 `closeBundle` 的二次产物错误遮盖根因;
13171
+ * - `closeBundle`:serve 时直接完成;build 时复检最终 HTML,要求整个输出树只有根 `index.html`,再于
13172
+ * `build.outDir` 写入 `manifest.json`,并把 Companion 目录打包成
13173
+ * `companions/<alias>/<target>.zip`,记录 size、SHA-256、固定入口与 args。
13174
+ *
13175
+ * HTML 策略会隔离业务 script/modulepreload,直到父 Runtime Gate 以 namespace、版本、nonce、source
13176
+ * 以及 referrer 可确定时的 origin 完成探测;失败时显示只能在小黑盒 App 内打开的安全页。策略拒绝自动跳转、`<base>`、危险
13177
+ * resource hints 和不受支持的外部 URL,并按标签只允许相对 URL、明确允许的 `data:` / `blob:` 或
13178
+ * 小黑盒官方 HTTPS 资源。开发者自行提供的 CSP 会保留;插件管理的 CSP marker 可重复转换而不会叠加。
13179
+ *
13180
+ * 平台 CSP 默认始终保留,直接 `vite build` / `hb-sdk build` 不会因项目声明
13181
+ * `heybox.permissions.network.useOfficialDomain` 而跳过。只有官方 `hb-sdk dev` 或
13182
+ * `hb-sdk remote deploy` 将当前版本的 `network` 声明与远端批准结果求交并确认最终启用后,才会
13183
+ * 建立 verified 上下文供插件读取内部
13184
+ * `HB_SDK_RUNTIME_PERMISSION_CONTEXT` + `HB_SDK_RUNTIME_USE_OFFICIAL_DOMAIN` 组合跳过平台 CSP;单独设置
13185
+ * 任一值无效。0.8 兼容期对完全缺失权限声明的项目仍按迁移规则处理;`useOfficialDomain` 不参与
13186
+ * CSP 跳过决定。Runtime Gate、HTML 校验和 Manifest 生成始终保留。
13187
+ *
13188
+ * `HB_SDK_COMPANION_ARTIFACT_ACCESS_TOKEN`、`HB_SDK_MINI_PROGRAM_MANIFEST_ACCESS_TOKEN`、
13189
+ * `HB_SDK_SKIP_COMPANIONS` 以及上述 CSP 上下文均是 CLI/发布链路内部开关,不是项目配置项。它们在
13190
+ * 插件创建时捕获;开发服务配置重载只会从同一服务的内存快照恢复 CLI 令牌。业务代码和 Vite 配置
13191
+ * 不应手工设置、读取、记录或转发令牌值。正式声明必须继续写在 `package.json#heybox`,内部环境变量
13192
+ * 不能替代声明校验。
13193
+ *
13194
+ * `manifest.json` 是 release pipeline 元数据,不是部署后供页面 fetch 的 CDN 资源。发布链路使用
13195
+ * [isValidVersion](/reference/symbols/miniapp-publish/functions/isValidVersion) 复核版本、
13196
+ * [resolveMiniappManifestPlatforms](/reference/symbols/miniapp-publish/functions/resolveMiniappManifestPlatforms)
13197
+ * 解析平台硬切规则、
13198
+ * [parseMiniappBindAppIds](/reference/symbols/miniapp-publish/functions/parseMiniappBindAppIds) 复核游戏绑定,
13199
+ * 并通过 [shouldUploadDistFile](/reference/symbols/miniapp-publish/functions/shouldUploadDistFile) 将根
13200
+ * `manifest.json` 排除出普通 CDN 文件。Web/Companion 上传预算由
13201
+ * [validateUploadTotalSize](/reference/symbols/miniapp-publish/functions/validateUploadTotalSize) 等发布 helper
13202
+ * 独立校验,不能用插件成功代替 deploy 预检。
13203
+ *
13204
+ * @example
13205
+ * ```ts
13206
+ * import vue from '@vitejs/plugin-vue'
13207
+ * import { miniappManifest } from '@heybox/hb-sdk/vite'
13208
+ * import { defineConfig } from 'vite'
13209
+ *
13210
+ * export default defineConfig({
13211
+ * // base 省略时 miniappManifest() 会补为 './'
13212
+ * plugins: [vue(), miniappManifest()],
13213
+ * })
13214
+ * ```
13215
+ *
13216
+ * @see [MiniappManifestPlugin](/reference/symbols/vite/interfaces/MiniappManifestPlugin) 返回插件及各 hook 类型。
13217
+ * @see [安装](/guide/installation) Vite 接入、相对资源路径和构建命令。
13218
+ * @see [权限声明](/guide/permissions) `heybox.permissions` 严格 schema 与迁移规则。
13219
+ * @see [窗口尺寸与可缩放性](/guide/window-size) `heybox.window` 字段与 Host 消费语义。
13220
+ * @see [受管桌面程序](/guide/companion) Companion 声明、归档和本地联调边界。
13221
+ */
13039
13222
  function miniappManifest() {
13040
13223
  const includeCompanions = process.env.HB_SDK_SKIP_COMPANIONS !== '1';
13041
13224
  const deviceLogs = new DeviceLogStore();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heybox/hb-sdk",
3
- "version": "0.8.1",
3
+ "version": "0.8.2-alpha.2",
4
4
  "sideEffects": [
5
5
  "./src/index.ts",
6
6
  "./src/core/singleton.ts",
@@ -64,7 +64,7 @@
64
64
  "skills": "1.5.23",
65
65
  "undici": "^7.28.0",
66
66
  "ws": "^8.18.0",
67
- "@heybox/hb-sdk-protocol": "0.8.1"
67
+ "@heybox/hb-sdk-protocol": "0.8.2-alpha.2"
68
68
  },
69
69
  "peerDependencies": {
70
70
  "vite": ">=5"
@@ -115,13 +115,13 @@
115
115
  "vue-tsc": "^3.3.7",
116
116
  "vite": "^8.0.12",
117
117
  "vitest": "^3.2.4",
118
- "@heybox-domain/heybox-theme": "~0.1.0",
119
- "@heybox/hb-sdk-runtime": "~0.8.1",
120
- "@heybox/runtime-policy": "~0.2.0",
118
+ "@heybox-domain/heybox-vue3-ui": "~0.1.0",
119
+ "@heybox/hb-api": "~1.28.4",
121
120
  "@heybox/runtime": "~0.2.0",
121
+ "@heybox/hb-sdk-runtime": "~0.8.2-alpha.2",
122
122
  "@heybox/runtime-transport-fetch": "~0.2.0",
123
- "@heybox/hb-api": "~1.28.4",
124
- "@heybox-domain/heybox-vue3-ui": "~0.1.0"
123
+ "@heybox-domain/heybox-theme": "~0.1.0",
124
+ "@heybox/runtime-policy": "~0.2.0"
125
125
  },
126
126
  "publishConfig": {
127
127
  "registry": "https://registry.npmjs.org/",