@heybox/hb-sdk 0.5.2 → 0.5.4

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/README.md CHANGED
@@ -57,7 +57,7 @@ SDK 需要在黑盒小程序 iframe 容器内运行。父容器会为页面注
57
57
  npm run dev
58
58
  ```
59
59
 
60
- 调试页会通过 iframe 加载本地页面并补齐小程序 bridge 环境;如果需要真实黑盒小程序容器加载同一页面,可以点击调试页里的「在 Mac 版 APP 中启动」按钮,或在「Mobile App」区域选择局域网网卡后用手机小黑盒 APP 扫码。Codex、VSCode 等内嵌浏览器可能无法唤起系统 APP;遇到这种情况时,请在系统浏览器中打开同一个调试页后重试。
60
+ 调试页会通过 iframe 加载本地页面并补齐小程序 bridge 环境;如果需要真实黑盒小程序容器加载同一页面,可以点击调试页里的「在 Mac 版 APP 中启动」按钮,或在「Mobile App」区域选择局域网网卡后用手机小黑盒 APP 扫码。真实容器加载开发 `mini_url` 前会提示“即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。”,用户确认后才继续加载。Codex、VSCode 等内嵌浏览器可能无法唤起系统 APP;遇到这种情况时,请在系统浏览器中打开同一个调试页后重试。
61
61
 
62
62
  在未使用脚手架的 Vite 项目中,可以把命令加到 `package.json`:
63
63
 
@@ -196,11 +196,18 @@ await navigation.openAppPage({
196
196
  target: 'user_detail',
197
197
  userId: '239040',
198
198
  });
199
+
200
+ await navigation.openAppPage({
201
+ target: 'post_detail',
202
+ linkId: 57670836,
203
+ rootCommentId: 123,
204
+ commentId: 456,
205
+ });
199
206
  ```
200
207
 
201
208
  `navigation.close()` 请求宿主关闭当前小程序容器,`navigation.reload()` 请求宿主重载当前小程序页面/容器。调用后 JS 上下文可能被宿主销毁,不保证后续代码继续执行;这两个能力不接受 `reason`、`force`、`confirm` 或 `fallbackUrl` 等扩展参数。
202
209
 
203
- `navigation.openAppPage()` 请求宿主打开受 SDK 白名单约束的黑盒 App 页面。当前支持 `target: 'game_detail'`,必填 `appId` 与 `gameType`;`gameType` 支持 `pc`、`console`、`mobile`,可选 `page: 'game' | 'wiki'`、`hSrc`、`skuId`。也支持 `target: 'user_detail'`,必填 `userId`。
210
+ `navigation.openAppPage()` 请求宿主打开受 SDK 白名单约束的黑盒 App 页面。当前支持 `target: 'game_detail'`,必填 `appId` 与 `gameType`;`gameType` 支持 `pc`、`console`、`mobile`,可选 `page: 'game' | 'wiki'`、`hSrc`、`skuId`。也支持 `target: 'user_detail'`,必填 `userId`;支持 `target: 'post_detail'`,必填 `linkId`,可选 `rootCommentId` 与 `commentId` 定位评论。
204
211
 
205
212
  ### 窗口信息
206
213
 
@@ -321,31 +328,31 @@ try {
321
328
 
322
329
  `@heybox/hb-sdk` 随包提供 `hb-sdk` CLI。脚手架项目已在 npm scripts 中接好常用命令;已有项目也可以自行添加 scripts。
323
330
 
324
- | 命令 | 作用 |
325
- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
326
- | `hb-sdk create <project-name>` | 创建外部小程序模板。 |
327
- | `hb-sdk dev [--runtime-url <url>]` | 启动当前项目的 Vite dev server 和浏览器 mock 宿主环境,并默认打开调试页;`--runtime-url` 会传给真实客户端 dev shell。 |
328
- | `hb-sdk login [--login-base-url <url>] [--no-select-entity]` | 登录 Heybox,并把 CLI 自己需要的登录态和登录入口环境保存在本地缓存中;默认会引导多主体用户选择服务端 current entity。 |
329
- | `hb-sdk login status` | 查看脱敏后的 CLI 登录态。 |
330
- | `hb-sdk login clear` | 清理 CLI 登录态。 |
331
- | `hb-sdk doctor` | 检查本机 `hb-sdk` Agent Skill 是否匹配当前 SDK,并输出手动安装/刷新命令。 |
332
- | `hb-sdk remote access` | 查看当前 CLI 用户是否具备开发者用户小程序创建和管理资格。 |
333
- | `hb-sdk remote entity list` | 列出当前 CLI 用户可切换的开发者主体,并标记服务端 current entity。 |
334
- | `hb-sdk remote entity current` | 查看服务端 current entity,以及该主体的用户小程序权限状态。 |
335
- | `hb-sdk remote entity switch <entity-id>` | 切换开发者平台服务端 current entity;不会修改项目绑定的小程序 ID。 |
336
- | `hb-sdk remote list [--status <status>] [--keyword <text>]` | 列出当前 CLI 用户可管理的远端用户小程序,用于发现并绑定当前项目。 |
337
- | `hb-sdk remote create --name <name> [--preview-image-url <url>] [--yes] [--force-bind]` | 在服务端 current entity 下创建远端用户小程序并写入当前项目的 `package.json.heybox.miniProgramId`。 |
338
- | `hb-sdk remote bind <mini-program-id> [--force]` | 校验当前 CLI 用户可管理目标小程序后,再把它绑定到当前项目。 |
339
- | `hb-sdk remote info` | 查看当前项目绑定的小程序详情。 |
340
- | `hb-sdk remote update [--name <name>] [--preview-image-url <url>]` | 更新绑定小程序的名称或远程预览图 URL。 |
341
- | `hb-sdk remote allowlist list/add/remove/set ...` | 管理绑定小程序的预览白名单。 |
342
- | `hb-sdk remote deploy --release-note <text> [--skip-build] [--auto-publish]` | 构建、上传并提交当前小程序版本审核;`--skip-build` 跳过 build 直接上传 `dist/`。 |
343
- | `hb-sdk remote versions` | 列出绑定小程序的远端版本。 |
344
- | `hb-sdk remote preview <version>` | 查看指定版本的远端预览入口。 |
345
- | `hb-sdk remote release <version> [--yes]` | 发布审核通过的版本;非 TTY 环境必须传 `--yes`。 |
346
- | `hb-sdk remote withdraw <version> [--yes] [--reason <text>]` | 撤回审核中或已通过但未发布的版本;非 TTY 环境必须传 `--yes`。 |
347
- | `hb-sdk remote take-down [--yes]` | 下架当前线上小程序;非 TTY 环境必须传 `--yes`。 |
348
- | `hb-sdk remote reopen [--yes]` | 重新上架已下架的小程序;非 TTY 环境必须传 `--yes`。 |
331
+ | 命令 | 作用 |
332
+ | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
333
+ | `hb-sdk create <project-name>` | 创建外部小程序模板。 |
334
+ | `hb-sdk dev [--runtime-url <url>]` | 启动当前项目的 Vite dev server 和浏览器 mock 宿主环境,并默认打开调试页;`--runtime-url` 会传给真实客户端 dev shell。 |
335
+ | `hb-sdk login [--login-base-url <url>] [--no-select-entity]` | 登录 Heybox,并把 CLI 自己需要的登录态和登录入口环境保存在本地缓存中;默认会引导多主体用户选择服务端 current entity。 |
336
+ | `hb-sdk login status` | 查看脱敏后的 CLI 登录态。 |
337
+ | `hb-sdk login clear` | 清理 CLI 登录态。 |
338
+ | `hb-sdk doctor` | 检查本机 `hb-sdk` Agent Skill 是否匹配当前 SDK,并输出手动安装/刷新命令。 |
339
+ | `hb-sdk remote access` | 查看当前 CLI 用户是否具备开发者用户小程序创建和管理资格。 |
340
+ | `hb-sdk remote entity list` | 列出当前 CLI 用户可切换的开发者主体,并标记服务端 current entity。 |
341
+ | `hb-sdk remote entity current` | 查看服务端 current entity,以及该主体的用户小程序权限状态。 |
342
+ | `hb-sdk remote entity switch <entity-id>` | 切换开发者平台服务端 current entity;不会修改项目绑定的小程序 ID。 |
343
+ | `hb-sdk remote list [--status <status>] [--keyword <text>]` | 列出当前 CLI 用户可管理的远端用户小程序,用于发现并绑定当前项目。 |
344
+ | `hb-sdk remote create --name <name> [--preview-image-url <url>] [--yes] [--force-bind]` | 在服务端 current entity 下创建远端用户小程序并写入当前项目的 `package.json.heybox.miniProgramId`。 |
345
+ | `hb-sdk remote bind <mini-program-id> [--force]` | 校验当前 CLI 用户可管理目标小程序后,再把它绑定到当前项目。 |
346
+ | `hb-sdk remote info` | 查看当前项目绑定的小程序详情。 |
347
+ | `hb-sdk remote update [--name <name>] [--preview-image-url <url>]` | 更新绑定小程序的名称或远程预览图 URL。 |
348
+ | `hb-sdk remote allowlist list/add/remove/set ...` | 管理绑定小程序的预览白名单。 |
349
+ | `hb-sdk remote deploy --release-note <text> [--skip-build] [--auto-publish]` | 构建、上传并提交当前小程序版本审核;`--skip-build` 跳过 build 直接上传 `dist/`。 |
350
+ | `hb-sdk remote versions` | 列出绑定小程序的远端版本。 |
351
+ | `hb-sdk remote preview <version>` | 查看指定版本的远端预览入口。 |
352
+ | `hb-sdk remote release <version> [--yes]` | 发布审核通过的版本;非 TTY 环境必须传 `--yes`。 |
353
+ | `hb-sdk remote withdraw <version> [--yes] [--reason <text>]` | 撤回审核中或已通过但未发布的版本;非 TTY 环境必须传 `--yes`。 |
354
+ | `hb-sdk remote take-down [--yes]` | 下架当前线上小程序;非 TTY 环境必须传 `--yes`。 |
355
+ | `hb-sdk remote reopen [--yes]` | 重新上架已下架的小程序;非 TTY 环境必须传 `--yes`。 |
349
356
 
350
357
  远端平台操作统一放在 `hb-sdk remote` 命令组下;顶层 `hb-sdk deploy` 已硬切删除,不再作为兼容别名保留。`hb-sdk login` 仍是顶层命令,因为它管理 CLI 登录态,不绑定到某个具体小程序。开发者主体的事实源是服务端 current entity;CLI 登录缓存中的 `selectedEntity` 只是上次选择时的提示快照,用于 `login status` 展示和漂移排障,不能作为权限或归属判断依据。
351
358
 
@@ -412,28 +419,28 @@ HB_SDK_ALLOW_UNSAFE_API_BASE_URL=1 hb-sdk remote deploy --api-base-url http://12
412
419
 
413
420
  `hb-sdk remote` 默认作用于当前项目绑定的小程序,即 `package.json.heybox.miniProgramId`。`remote list` 只展示服务端 current entity 下可管理的小程序,用于发现和绑定;会改变远端状态的命令仍然只操作当前绑定的小程序,不接受临时 `mini_program_id` 参数。需要查看或切换开发者主体时,使用 `hb-sdk remote entity ...`;CLI 不会根据本地绑定自动切换主体。
414
421
 
415
- | 命令 | 说明 |
416
- | ---- | ---- |
417
- | `hb-sdk remote access` | 查询当前 CLI 用户是否具备开发者用户小程序管理资格。 |
418
- | `hb-sdk remote entity list` | 列出可切换开发者主体,并标记服务端 current entity。 |
419
- | `hb-sdk remote entity current` | 查看服务端 current entity 和该主体的用户小程序权限状态。 |
420
- | `hb-sdk remote entity switch <entity-id>` | 切换服务端 current entity;只允许切到 `entity list` 返回的主体。 |
421
- | `hb-sdk remote list [--status <status>] [--keyword <text>]` | 列出 current entity 下当前 CLI 用户可管理的小程序,并标出当前绑定项。 |
422
+ | 命令 | 说明 |
423
+ | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
424
+ | `hb-sdk remote access` | 查询当前 CLI 用户是否具备开发者用户小程序管理资格。 |
425
+ | `hb-sdk remote entity list` | 列出可切换开发者主体,并标记服务端 current entity。 |
426
+ | `hb-sdk remote entity current` | 查看服务端 current entity 和该主体的用户小程序权限状态。 |
427
+ | `hb-sdk remote entity switch <entity-id>` | 切换服务端 current entity;只允许切到 `entity list` 返回的主体。 |
428
+ | `hb-sdk remote list [--status <status>] [--keyword <text>]` | 列出 current entity 下当前 CLI 用户可管理的小程序,并标出当前绑定项。 |
422
429
  | `hb-sdk remote create --name <name> [--preview-image-url <url>] [--yes] [--force-bind]` | 在 current entity 下创建远端小程序并绑定当前项目;多主体非 TTY 环境必须传 `--yes` 确认使用当前主体;已有绑定时必须显式传 `--force-bind` 才能覆盖。 |
423
- | `hb-sdk remote bind <mini-program-id> [--force]` | 先校验 current entity 可管理目标小程序,再写入当前项目绑定;`--force` 只允许覆盖本地绑定,不跳过远端校验或主体一致性校验。 |
424
- | `hb-sdk remote info` | 查看当前绑定小程序的远端详情。 |
425
- | `hb-sdk remote update [--name <name>] [--preview-image-url <url>]` | 更新名称或远程预览图 URL,至少传一个变更字段。 |
426
- | `hb-sdk remote allowlist list` | 查看预览白名单。 |
427
- | `hb-sdk remote allowlist add <heybox-id...>` | 添加十进制 Heybox ID 到预览白名单。 |
428
- | `hb-sdk remote allowlist remove <heybox-id...>` | 从预览白名单移除非 owner 条目。 |
429
- | `hb-sdk remote allowlist set <heybox-id...>` | 替换非 owner 白名单条目,并保留平台返回的 owner 语义。 |
430
- | `hb-sdk remote deploy --release-note <text> [--skip-build] [--auto-publish]` | 构建、上传并提交当前版本审核。 |
431
- | `hb-sdk remote versions` | 列出当前绑定小程序的远端版本。 |
432
- | `hb-sdk remote preview <version>` | 查看指定版本的远端预览入口。 |
433
- | `hb-sdk remote release <version> [--yes]` | 发布审核通过的版本;交互式终端会确认,非 TTY 必须传 `--yes`。 |
434
- | `hb-sdk remote withdraw <version> [--yes] [--reason <text>]` | 撤回审核中或已通过但未发布的版本;交互式终端会确认,非 TTY 必须传 `--yes`。 |
435
- | `hb-sdk remote take-down [--yes]` | 下架当前线上小程序;交互式终端会确认,非 TTY 必须传 `--yes`。 |
436
- | `hb-sdk remote reopen [--yes]` | 重新上架已下架的小程序;交互式终端会确认,非 TTY 必须传 `--yes`。 |
430
+ | `hb-sdk remote bind <mini-program-id> [--force]` | 先校验 current entity 可管理目标小程序,再写入当前项目绑定;`--force` 只允许覆盖本地绑定,不跳过远端校验或主体一致性校验。 |
431
+ | `hb-sdk remote info` | 查看当前绑定小程序的远端详情。 |
432
+ | `hb-sdk remote update [--name <name>] [--preview-image-url <url>]` | 更新名称或远程预览图 URL,至少传一个变更字段。 |
433
+ | `hb-sdk remote allowlist list` | 查看预览白名单。 |
434
+ | `hb-sdk remote allowlist add <heybox-id...>` | 添加十进制 Heybox ID 到预览白名单。 |
435
+ | `hb-sdk remote allowlist remove <heybox-id...>` | 从预览白名单移除非 owner 条目。 |
436
+ | `hb-sdk remote allowlist set <heybox-id...>` | 替换非 owner 白名单条目,并保留平台返回的 owner 语义。 |
437
+ | `hb-sdk remote deploy --release-note <text> [--skip-build] [--auto-publish]` | 构建、上传并提交当前版本审核。 |
438
+ | `hb-sdk remote versions` | 列出当前绑定小程序的远端版本。 |
439
+ | `hb-sdk remote preview <version>` | 查看指定版本的远端预览入口。 |
440
+ | `hb-sdk remote release <version> [--yes]` | 发布审核通过的版本;交互式终端会确认,非 TTY 必须传 `--yes`。 |
441
+ | `hb-sdk remote withdraw <version> [--yes] [--reason <text>]` | 撤回审核中或已通过但未发布的版本;交互式终端会确认,非 TTY 必须传 `--yes`。 |
442
+ | `hb-sdk remote take-down [--yes]` | 下架当前线上小程序;交互式终端会确认,非 TTY 必须传 `--yes`。 |
443
+ | `hb-sdk remote reopen [--yes]` | 重新上架已下架的小程序;交互式终端会确认,非 TTY 必须传 `--yes`。 |
437
444
 
438
445
  CLI 登录态只供 CLI 命令访问黑盒接口时复用,不会注入 iframe SDK,也不会改变 `auth.login()`、`user.getInfo()`、`network.request()` 或 mock 宿主中的用户状态。`hb-sdk login` 成功后会尝试读取开发者主体列表:单主体自动确认或切换为 current entity,多主体交互式环境要求选择主体,多主体非 TTY 环境只提示后续运行 `hb-sdk remote entity switch <entity-id>`;显式传 `--no-select-entity` 时只写登录态,不修改服务端 current entity。`hb-sdk login status` 默认展示脱敏状态、`heyboxId`、`loginBaseUrl`、登录时间和本地 `selectedEntity` 提示快照;`--verbose` 额外展示 cache 路径。不输出 `pkey`、cookie 或完整请求头。`selectedEntity` 不是权限事实源,每次 remote 命令仍以服务端 current entity 为准。
439
446
 
@@ -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-JgAMdKYi.cjs');
8
+ var index = require('./index-DXIW8eBN.cjs');
9
9
  require('node:module');
10
10
  require('os');
11
11
  require('readline');
@@ -9,7 +9,7 @@ var node_url = require('node:url');
9
9
  var net = require('node:net');
10
10
  var node_http = require('node:http');
11
11
  var browser = require('./browser-RAy8e8cV.cjs');
12
- var index = require('./index-JgAMdKYi.cjs');
12
+ var index = require('./index-DXIW8eBN.cjs');
13
13
  require('node:process');
14
14
  require('node:buffer');
15
15
  require('node:util');
@@ -4,7 +4,7 @@ var fs$1 = require('node:fs');
4
4
  var fs = require('node:fs/promises');
5
5
  var os = require('node:os');
6
6
  var path = require('node:path');
7
- var index = require('./index-JgAMdKYi.cjs');
7
+ var index = require('./index-DXIW8eBN.cjs');
8
8
  require('node:module');
9
9
  require('path');
10
10
  require('os');
@@ -234,19 +234,19 @@ function requireArgument () {
234
234
 
235
235
  var command = {};
236
236
 
237
- 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-JgAMdKYi.cjs', document.baseURI).href)));
237
+ 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-DXIW8eBN.cjs', document.baseURI).href)));
238
238
  function __require$4() { return require$5("node:events"); }
239
239
 
240
- 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-JgAMdKYi.cjs', document.baseURI).href)));
240
+ 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-DXIW8eBN.cjs', document.baseURI).href)));
241
241
  function __require$3() { return require$4("node:child_process"); }
242
242
 
243
- 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-JgAMdKYi.cjs', document.baseURI).href)));
243
+ 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-DXIW8eBN.cjs', document.baseURI).href)));
244
244
  function __require$2() { return require$3("node:path"); }
245
245
 
246
- 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-JgAMdKYi.cjs', document.baseURI).href)));
246
+ 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-DXIW8eBN.cjs', document.baseURI).href)));
247
247
  function __require$1() { return require$2("node:fs"); }
248
248
 
249
- 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-JgAMdKYi.cjs', document.baseURI).href)));
249
+ 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-DXIW8eBN.cjs', document.baseURI).href)));
250
250
  function __require() { return require$1("node:process"); }
251
251
 
252
252
  var help = {};
@@ -13094,7 +13094,7 @@ function readErrorMessage(error, options = {}) {
13094
13094
  }
13095
13095
 
13096
13096
  const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
13097
- const BUILT_CLI_VERSION = '0.5.2';
13097
+ const BUILT_CLI_VERSION = '0.5.4';
13098
13098
  const PACKAGE_JSON_CANDIDATES = [
13099
13099
  path.resolve(__dirname, '..', '..', 'package.json'),
13100
13100
  path.resolve(__dirname, '..', 'package.json'),
@@ -13377,31 +13377,31 @@ function createCommandLoggerResolver(options) {
13377
13377
  };
13378
13378
  }
13379
13379
  const defaultClearLoginStatus = async (...args) => {
13380
- const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-BgPUbxW7.cjs'); });
13380
+ const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-Cmgyjaq2.cjs'); });
13381
13381
  return clearLoginStatus(...args);
13382
13382
  };
13383
13383
  const defaultLoginToHeybox = async (...args) => {
13384
- const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-BgPUbxW7.cjs'); });
13384
+ const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-Cmgyjaq2.cjs'); });
13385
13385
  return loginToHeybox(...args);
13386
13386
  };
13387
13387
  const defaultPrintLoginStatus = async (...args) => {
13388
- const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-BgPUbxW7.cjs'); });
13388
+ const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-Cmgyjaq2.cjs'); });
13389
13389
  return printLoginStatus(...args);
13390
13390
  };
13391
13391
  const defaultRunCreateCommand = async (...args) => {
13392
- const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-Bh4kJDVt.cjs'); });
13392
+ const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-BE4xNVc4.cjs'); });
13393
13393
  return runCreateCommand(...args);
13394
13394
  };
13395
13395
  const defaultRunDevCommand = async (...args) => {
13396
- const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-BYgFjQRn.cjs'); });
13396
+ const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-BzH5dEtr.cjs'); });
13397
13397
  return runDevCommand(...args);
13398
13398
  };
13399
13399
  const defaultRunDoctorCommand = async (...args) => {
13400
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BqbJqCW_.cjs'); });
13400
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-CUCUIlNm.cjs'); });
13401
13401
  return runDoctorCommand(...args);
13402
13402
  };
13403
13403
  const defaultRunRemoteCommand = async (...args) => {
13404
- const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-C8Sr29mG.cjs'); }).then(function (n) { return n.remote; });
13404
+ const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-CzlmufT8.cjs'); }).then(function (n) { return n.remote; });
13405
13405
  return runRemoteCommand(...args);
13406
13406
  };
13407
13407
  function resolveStandaloneLogger(options, verbose) {
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index$2 = require('./index-JgAMdKYi.cjs');
3
+ var index$2 = require('./index-DXIW8eBN.cjs');
4
4
  var require$$0$2 = require('fs');
5
5
  var require$$2$1 = require('crypto');
6
6
  var require$$1$2 = require('path');
7
7
  var require$$0$3 = require('assert');
8
8
  var require$$4$2 = require('events');
9
9
  var require$$1$1 = require('util');
10
- var remote = require('./remote-C8Sr29mG.cjs');
10
+ var remote = require('./remote-CzlmufT8.cjs');
11
11
  var require$$0$5 = require('net');
12
12
  var require$$0$4 = require('url');
13
13
  var require$$2$2 = require('http');
@@ -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-DNEf3FBW.cjs');
6
+ var session = require('./session-ChVF_DnI.cjs');
7
7
  var browser = require('./browser-RAy8e8cV.cjs');
8
- var index = require('./index-JgAMdKYi.cjs');
8
+ var index = require('./index-DXIW8eBN.cjs');
9
9
  require('node:path');
10
10
  require('fs');
11
11
  require('constants');
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  var promises = require('node:readline/promises');
4
- var session = require('./session-DNEf3FBW.cjs');
4
+ var session = require('./session-ChVF_DnI.cjs');
5
5
  var childProcess = require('node:child_process');
6
6
  var fs = require('node:fs');
7
7
  var fs$1 = require('node:fs/promises');
8
8
  var path = require('node:path');
9
- var index = require('./index-JgAMdKYi.cjs');
9
+ var index = require('./index-DXIW8eBN.cjs');
10
10
 
11
11
  var re = {exports: {}};
12
12
 
@@ -3113,7 +3113,7 @@ async function createDefaultCosClient(uploadToken) {
3113
3113
  };
3114
3114
  }
3115
3115
  async function loadCosConstructor() {
3116
- const cosModule = await Promise.resolve().then(function () { return require('./index-DflbDKpY.cjs'); }).then(function (n) { return n.index; });
3116
+ const cosModule = await Promise.resolve().then(function () { return require('./index-iU6ySidw.cjs'); }).then(function (n) { return n.index; });
3117
3117
  return cosModule.default;
3118
3118
  }
3119
3119
  function formatSize(bytes) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-JgAMdKYi.cjs');
3
+ var index = require('./index-DXIW8eBN.cjs');
4
4
  var node_crypto = require('node:crypto');
5
5
  var path = require('node:path');
6
6
  var require$$0$2 = require('fs');
package/dist/cli.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./cli-chunks/index-JgAMdKYi.cjs');
3
+ var index = require('./cli-chunks/index-DXIW8eBN.cjs');
4
4
  require('node:module');
5
5
  require('node:fs');
6
6
  require('node:fs/promises');
@@ -3462,6 +3462,11 @@ function toOpenAppPagePlatformOptions(payload) {
3462
3462
  target: appPagePayload.target,
3463
3463
  protocol: createUserDetailOpenRouterPathProtocol(appPagePayload),
3464
3464
  };
3465
+ case 'post_detail':
3466
+ return {
3467
+ target: appPagePayload.target,
3468
+ protocol: createPostDetailOpenRouterPathProtocol(appPagePayload),
3469
+ };
3465
3470
  default:
3466
3471
  throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', 'navigation.openAppPage target 不支持');
3467
3472
  }
@@ -3475,6 +3480,8 @@ function readOpenAppPagePayload(payload) {
3475
3480
  return readOpenGameDetailAppPagePayload(payload);
3476
3481
  case 'user_detail':
3477
3482
  return readOpenUserDetailAppPagePayload(payload);
3483
+ case 'post_detail':
3484
+ return readOpenPostDetailAppPagePayload(payload);
3478
3485
  default:
3479
3486
  throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', 'navigation.openAppPage target 不支持');
3480
3487
  }
@@ -3504,6 +3511,19 @@ function readOpenUserDetailAppPagePayload(payload) {
3504
3511
  userId: readRequiredString(payload.userId, 'navigation.openAppPage userId 必须是非空字符串'),
3505
3512
  };
3506
3513
  }
3514
+ function readOpenPostDetailAppPagePayload(payload) {
3515
+ const result = {
3516
+ target: 'post_detail',
3517
+ linkId: readRequiredString(payload.linkId, 'navigation.openAppPage linkId 必须是非空字符串'),
3518
+ };
3519
+ if (payload.rootCommentId !== undefined) {
3520
+ result.rootCommentId = readRequiredString(payload.rootCommentId, 'navigation.openAppPage rootCommentId 必须是非空字符串');
3521
+ }
3522
+ if (payload.commentId !== undefined) {
3523
+ result.commentId = readRequiredString(payload.commentId, 'navigation.openAppPage commentId 必须是非空字符串');
3524
+ }
3525
+ return result;
3526
+ }
3507
3527
  function createGameDetailOpenRouterPathProtocol(payload) {
3508
3528
  const params = {
3509
3529
  app_id: payload.appId,
@@ -3533,6 +3553,23 @@ function createUserDetailOpenRouterPathProtocol(payload) {
3533
3553
  },
3534
3554
  };
3535
3555
  }
3556
+ function createPostDetailOpenRouterPathProtocol(payload) {
3557
+ // 不传 link_tag/has_video,让 App 先按 link_id 获取真实帖子类型再打开详情。
3558
+ const params = {
3559
+ link_id: payload.linkId,
3560
+ };
3561
+ if (payload.rootCommentId !== undefined) {
3562
+ params.root_comment_id = payload.rootCommentId;
3563
+ }
3564
+ if (payload.commentId !== undefined) {
3565
+ params.comment_id = payload.commentId;
3566
+ }
3567
+ return {
3568
+ protocol_type: 'openRouterPath',
3569
+ path: '/bbs/link',
3570
+ params,
3571
+ };
3572
+ }
3536
3573
  function readRequiredString(value, message) {
3537
3574
  if (typeof value !== 'string' || !value.trim()) {
3538
3575
  throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', message);
@@ -5398,8 +5435,8 @@ function renderMockOpenAppPage(action) {
5398
5435
  const protocol = action.options.protocol;
5399
5436
  element.innerHTML = [
5400
5437
  '<strong>已模拟打开 App 页面</strong>',
5401
- `<span>${escapeMockHtml(protocol.path)}</span>`,
5402
- `<pre>${escapeMockHtml(JSON.stringify(protocol.params, null, 2))}</pre>`,
5438
+ `<span>${escapeMockHtml(protocol.protocol_type)}</span>`,
5439
+ `<pre>${escapeMockHtml(JSON.stringify(protocol, null, 2))}</pre>`,
5403
5440
  ].join('');
5404
5441
  element.style.cssText = [
5405
5442
  'position:fixed',
package/dist/index.cjs.js CHANGED
@@ -839,6 +839,8 @@ function normalizeOpenAppPageOptions(options) {
839
839
  return normalizeGameDetailOptions(options);
840
840
  case 'user_detail':
841
841
  return normalizeUserDetailOptions(options);
842
+ case 'post_detail':
843
+ return normalizePostDetailOptions(options);
842
844
  default:
843
845
  throw createSDKError('INVALID_PARAMS', 'navigation.openAppPage target 不支持');
844
846
  }
@@ -873,6 +875,19 @@ function normalizeUserDetailOptions(options) {
873
875
  userId: readRequiredString(options.userId, 'navigation.openAppPage userId 必须是非空字符串'),
874
876
  };
875
877
  }
878
+ function normalizePostDetailOptions(options) {
879
+ const payload = {
880
+ target: 'post_detail',
881
+ linkId: readRequiredStringLike(options.linkId, 'navigation.openAppPage linkId 必须是非空字符串或数字'),
882
+ };
883
+ if (options.rootCommentId !== undefined) {
884
+ payload.rootCommentId = readRequiredStringLike(options.rootCommentId, 'navigation.openAppPage rootCommentId 必须是非空字符串或数字');
885
+ }
886
+ if (options.commentId !== undefined) {
887
+ payload.commentId = readRequiredStringLike(options.commentId, 'navigation.openAppPage commentId 必须是非空字符串或数字');
888
+ }
889
+ return payload;
890
+ }
876
891
  function readRequiredString(value, message) {
877
892
  if (typeof value !== 'string') {
878
893
  throw createSDKError('INVALID_PARAMS', message);
package/dist/index.esm.js CHANGED
@@ -835,6 +835,8 @@ function normalizeOpenAppPageOptions(options) {
835
835
  return normalizeGameDetailOptions(options);
836
836
  case 'user_detail':
837
837
  return normalizeUserDetailOptions(options);
838
+ case 'post_detail':
839
+ return normalizePostDetailOptions(options);
838
840
  default:
839
841
  throw createSDKError('INVALID_PARAMS', 'navigation.openAppPage target 不支持');
840
842
  }
@@ -869,6 +871,19 @@ function normalizeUserDetailOptions(options) {
869
871
  userId: readRequiredString(options.userId, 'navigation.openAppPage userId 必须是非空字符串'),
870
872
  };
871
873
  }
874
+ function normalizePostDetailOptions(options) {
875
+ const payload = {
876
+ target: 'post_detail',
877
+ linkId: readRequiredStringLike(options.linkId, 'navigation.openAppPage linkId 必须是非空字符串或数字'),
878
+ };
879
+ if (options.rootCommentId !== undefined) {
880
+ payload.rootCommentId = readRequiredStringLike(options.rootCommentId, 'navigation.openAppPage rootCommentId 必须是非空字符串或数字');
881
+ }
882
+ if (options.commentId !== undefined) {
883
+ payload.commentId = readRequiredStringLike(options.commentId, 'navigation.openAppPage commentId 必须是非空字符串或数字');
884
+ }
885
+ return payload;
886
+ }
872
887
  function readRequiredString(value, message) {
873
888
  if (typeof value !== 'string') {
874
889
  throw createSDKError('INVALID_PARAMS', message);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heybox/hb-sdk",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "description": "",
5
5
  "exports": {
6
6
  ".": {
@@ -157,6 +157,7 @@ export type {
157
157
  OpenAppPagePayload,
158
158
  OpenAppPageResult,
159
159
  OpenGameDetailAppPagePayload,
160
+ OpenPostDetailAppPagePayload,
160
161
  OpenUserDetailAppPagePayload,
161
162
  ReloadPayload,
162
163
  ReloadResult,
@@ -19,7 +19,7 @@
19
19
  ## Package metadata
20
20
 
21
21
  - Package: `@heybox/hb-sdk`
22
- - Version at generation time: `0.5.2`
22
+ - Version at generation time: `0.5.4`
23
23
  - Public root export: `@heybox/hb-sdk`
24
24
  - Protocol export: `@heybox/hb-sdk/protocol`
25
25
  - Vite plugin export: `@heybox/hb-sdk/vite`
@@ -149,6 +149,8 @@ export type {
149
149
  OpenAppPageResult,
150
150
  OpenGameDetailAppPagePayload,
151
151
  OpenGameDetailAppPageOptions,
152
+ OpenPostDetailAppPagePayload,
153
+ OpenPostDetailAppPageOptions,
152
154
  OpenUserDetailAppPagePayload,
153
155
  OpenUserDetailAppPageOptions,
154
156
  ReloadPayload,
@@ -328,7 +330,7 @@ SDK 需要在黑盒小程序 iframe 容器内运行。父容器会为页面注
328
330
  npm run dev
329
331
  ```
330
332
 
331
- 调试页会通过 iframe 加载本地页面并补齐小程序 bridge 环境;如果需要真实黑盒小程序容器加载同一页面,可以点击调试页里的「在 Mac 版 APP 中启动」按钮,或在「Mobile App」区域选择局域网网卡后用手机小黑盒 APP 扫码。Codex、VSCode 等内嵌浏览器可能无法唤起系统 APP;遇到这种情况时,请在系统浏览器中打开同一个调试页后重试。
333
+ 调试页会通过 iframe 加载本地页面并补齐小程序 bridge 环境;如果需要真实黑盒小程序容器加载同一页面,可以点击调试页里的「在 Mac 版 APP 中启动」按钮,或在「Mobile App」区域选择局域网网卡后用手机小黑盒 APP 扫码。真实容器加载开发 `mini_url` 前会提示“即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。”,用户确认后才继续加载。Codex、VSCode 等内嵌浏览器可能无法唤起系统 APP;遇到这种情况时,请在系统浏览器中打开同一个调试页后重试。
332
334
 
333
335
  在未使用脚手架的 Vite 项目中,可以把命令加到 `package.json`:
334
336
 
@@ -487,11 +489,18 @@ await navigation.openAppPage({
487
489
  target: 'user_detail',
488
490
  userId: '239040',
489
491
  });
492
+
493
+ await navigation.openAppPage({
494
+ target: 'post_detail',
495
+ linkId: 57670836,
496
+ rootCommentId: 123,
497
+ commentId: 456,
498
+ });
490
499
  ```
491
500
 
492
501
  `navigation.close()` 请求宿主关闭当前小程序容器,`navigation.reload()` 请求宿主重载当前小程序页面/容器。调用后 JS 上下文可能被宿主销毁,不保证后续代码继续执行;这两个能力不接受 `reason`、`force`、`confirm` 或 `fallbackUrl` 等扩展参数。
493
502
 
494
- `navigation.openAppPage()` 请求宿主打开受 SDK 白名单约束的黑盒 App 页面。当前支持 `target: 'game_detail'`,必填 `appId` 与 `gameType`;`gameType` 支持 `pc`、`console`、`mobile`,可选 `page: 'game' | 'wiki'`、`hSrc`、`skuId`。也支持 `target: 'user_detail'`,必填 `userId`。
503
+ `navigation.openAppPage()` 请求宿主打开受 SDK 白名单约束的黑盒 App 页面。当前支持 `target: 'game_detail'`,必填 `appId` 与 `gameType`;`gameType` 支持 `pc`、`console`、`mobile`,可选 `page: 'game' | 'wiki'`、`hSrc`、`skuId`。也支持 `target: 'user_detail'`,必填 `userId`;支持 `target: 'post_detail'`,必填 `linkId`,可选 `rootCommentId` 与 `commentId` 定位评论。
495
504
 
496
505
  ### 窗口信息
497
506
 
@@ -106,16 +106,16 @@ hb-sdk dev
106
106
 
107
107
  常用参数:
108
108
 
109
- | 参数 | 说明 |
110
- | -------------------- | ----------------------------------------------------- |
111
- | `--port <port>` | 指定小程序 Vite dev server 端口,默认从 `5173` 开始。 |
112
- | `--mock-port <port>` | 指定 mock host 端口,默认从 `5174` 开始。 |
109
+ | 参数 | 说明 |
110
+ | --------------------- | ---------------------------------------------------------------------------------------------------------- |
111
+ | `--port <port>` | 指定小程序 Vite dev server 端口,默认从 `5173` 开始。 |
112
+ | `--mock-port <port>` | 指定 mock host 端口,默认从 `5174` 开始。 |
113
113
  | `--runtime-url <url>` | 真实客户端调试时传给 dev shell 的自定义 runtime 地址;手机扫码时 loopback host 会自动改写为所选局域网 IP。 |
114
- | `--no-open` | 不自动打开浏览器调试页。 |
114
+ | `--no-open` | 不自动打开浏览器调试页。 |
115
115
 
116
116
  ## Mock runtime 边界
117
117
 
118
- `hb-sdk dev` 会把实际小程序页面地址编码到 mock host 的 `mini_url` query 中,由 mock host iframe 加载页面并补齐小程序 bridge 环境。mock host 内置登录/登出、`show`、`hide`、在 Mac 版 APP 中启动、手机扫码调试等调试入口,并通过同一份 devtools-only runtime adapter 处理 SDK 能力调用。Codex、VSCode 等内嵌浏览器可能无法唤起系统 APP;遇到这种情况时,请在系统浏览器中打开同一个调试页后重试。
118
+ `hb-sdk dev` 会把实际小程序页面地址编码到 mock host 的 `mini_url` query 中,由 mock host iframe 加载页面并补齐小程序 bridge 环境。mock host 内置登录/登出、`show`、`hide`、在 Mac 版 APP 中启动、手机扫码调试等调试入口,并通过同一份 devtools-only runtime adapter 处理 SDK 能力调用。真实 Mac / Mobile App dev shell 加载开发 `mini_url` 前会提示“即将打开未经验证的开发网页。该页面可能由本机或局域网服务提供,请确认来源可信后继续。”,用户确认后才继续加载。Codex、VSCode 等内嵌浏览器可能无法唤起系统 APP;遇到这种情况时,请在系统浏览器中打开同一个调试页后重试。
119
119
 
120
120
  不要为了本地调试再创建独立 mock runtime 包。CLI、模板和 mock host 都归属 `@heybox/hb-sdk`。
121
121
 
package/skill/skill.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "hb-sdk",
3
- "skillVersion": "0.5.2+skill.6596fdf246b8",
3
+ "skillVersion": "0.5.4+skill.9edb4788ffa5",
4
4
  "sdk": {
5
5
  "package": "@heybox/hb-sdk",
6
- "version": "0.5.2",
7
- "compatibility": "0.5.2"
6
+ "version": "0.5.4",
7
+ "compatibility": "0.5.4"
8
8
  },
9
9
  "source": "https://open.xiaoheihe.cn/agent-skills/hb-sdk",
10
- "integrity": "sha256-6596fdf246b8e8d17436f5d3ada8fb82c4ddd2be935fe0c923e42b7cbc867437"
10
+ "integrity": "sha256-9edb4788ffa5d68f4ef8e0096e89a2ceff3f355c441c13f20e85b7a58f40634e"
11
11
  }
package/types/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export type { GetStoragePayload, GetStorageResult, MiniProgramStorageModule, Set
11
11
  export type { MiniProgramNetworkHeaders, MiniProgramNetworkModule, MiniProgramNetworkParams, MiniProgramNetworkRequestConfig, MiniProgramNetworkRequestMethod, MiniProgramNetworkResponse, MiniProgramNetworkValidateStatus, NetworkRequestPayload, NetworkResponsePayload, } from './modules/network';
12
12
  export type { HideLoadingPayload, HideLoadingResult, MiniProgramToastStatus, MiniProgramUiModule, ShowLoadingPayload, ShowLoadingResult, ShowToastPayload, ShowToastResult, } from './modules/ui';
13
13
  export type { MiniProgramDeviceModule, MiniProgramVibrateIntensity, SetClipboardPayload, SetClipboardResult, VibratePayload, VibrateResult, } from './modules/device';
14
- export type { ClosePayload, CloseResult, MiniProgramAppPageTarget, MiniProgramGameDetailGameType, MiniProgramGameDetailPage, MiniProgramNavigationModule, OpenAppPageOptions, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenGameDetailAppPageOptions, OpenUserDetailAppPagePayload, OpenUserDetailAppPageOptions, ReloadPayload, ReloadResult, } from './modules/navigation';
14
+ export type { ClosePayload, CloseResult, MiniProgramAppPageTarget, MiniProgramGameDetailGameType, MiniProgramGameDetailPage, MiniProgramNavigationModule, OpenAppPageOptions, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenGameDetailAppPageOptions, OpenPostDetailAppPagePayload, OpenPostDetailAppPageOptions, OpenUserDetailAppPagePayload, OpenUserDetailAppPageOptions, ReloadPayload, ReloadResult, } from './modules/navigation';
15
15
  import { off, on, ready } from './core/singleton';
16
16
  declare const hbSDK: {
17
17
  ready: typeof ready;
@@ -1,4 +1,4 @@
1
1
  import type { OpenAppPageOptions, OpenAppPagePayload } from './types';
2
- export type { MiniProgramAppPageTarget, MiniProgramGameDetailGameType, MiniProgramGameDetailPage, OpenAppPageOptions, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenGameDetailAppPageOptions, OpenUserDetailAppPagePayload, OpenUserDetailAppPageOptions, } from './types';
2
+ export type { MiniProgramAppPageTarget, MiniProgramGameDetailGameType, MiniProgramGameDetailPage, OpenAppPageOptions, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenGameDetailAppPageOptions, OpenPostDetailAppPagePayload, OpenPostDetailAppPageOptions, OpenUserDetailAppPagePayload, OpenUserDetailAppPageOptions, } from './types';
3
3
  /** 校验并规范化打开黑盒 App 页面参数。 */
4
4
  export declare function normalizeOpenAppPageOptions(options: OpenAppPageOptions): OpenAppPagePayload;
@@ -1,5 +1,5 @@
1
1
  /** 小程序可请求打开的黑盒 App 页面目标。 */
2
- export type MiniProgramAppPageTarget = 'game_detail' | 'user_detail';
2
+ export type MiniProgramAppPageTarget = 'game_detail' | 'user_detail' | 'post_detail';
3
3
  /** 游戏详情支持的平台类型,与客户端 openGameDetail / RouterPath 文档保持一致。 */
4
4
  export type MiniProgramGameDetailGameType = 'pc' | 'console' | 'mobile';
5
5
  /** 游戏详情支持的首屏页面。 */
@@ -26,8 +26,19 @@ export interface OpenUserDetailAppPageOptions {
26
26
  /** 用户 heybox_id。 */
27
27
  userId: string;
28
28
  }
29
+ /** 打开帖子详情页的公共参数。 */
30
+ export interface OpenPostDetailAppPageOptions {
31
+ /** 目标页面。 */
32
+ target: 'post_detail';
33
+ /** 帖子 ID。 */
34
+ linkId: string | number;
35
+ /** 可选,置顶评论 ID。 */
36
+ rootCommentId?: string | number;
37
+ /** 可选,评论 ID。 */
38
+ commentId?: string | number;
39
+ }
29
40
  /** 打开黑盒 App 页面公共参数。 */
30
- export type OpenAppPageOptions = OpenGameDetailAppPageOptions | OpenUserDetailAppPageOptions;
41
+ export type OpenAppPageOptions = OpenGameDetailAppPageOptions | OpenUserDetailAppPageOptions | OpenPostDetailAppPageOptions;
31
42
  /** `navigation.openAppPage` bridge payload。 */
32
43
  export type OpenGameDetailAppPagePayload = Omit<OpenGameDetailAppPageOptions, 'appId' | 'skuId'> & {
33
44
  appId: string;
@@ -37,7 +48,13 @@ export type OpenGameDetailAppPagePayload = Omit<OpenGameDetailAppPageOptions, 'a
37
48
  export type OpenUserDetailAppPagePayload = Omit<OpenUserDetailAppPageOptions, 'userId'> & {
38
49
  userId: string;
39
50
  };
51
+ /** `navigation.openAppPage` 打开帖子详情页的 bridge payload。 */
52
+ export type OpenPostDetailAppPagePayload = Omit<OpenPostDetailAppPageOptions, 'linkId' | 'rootCommentId' | 'commentId'> & {
53
+ linkId: string;
54
+ rootCommentId?: string;
55
+ commentId?: string;
56
+ };
40
57
  /** `navigation.openAppPage` bridge payload。 */
41
- export type OpenAppPagePayload = OpenGameDetailAppPagePayload | OpenUserDetailAppPagePayload;
58
+ export type OpenAppPagePayload = OpenGameDetailAppPagePayload | OpenUserDetailAppPagePayload | OpenPostDetailAppPagePayload;
42
59
  /** `navigation.openAppPage` 无稳定返回值。 */
43
60
  export type OpenAppPageResult = void;
@@ -1,7 +1,7 @@
1
1
  import type { MiniProgramRequester } from '../../core/client';
2
2
  import { type OpenAppPageOptions } from './app-pages';
3
3
  export { NAVIGATION_CLOSE_METHOD, NAVIGATION_OPEN_APP_PAGE_METHOD, NAVIGATION_RELOAD_METHOD, } from '../../protocol/capabilities';
4
- export type { MiniProgramAppPageTarget, MiniProgramGameDetailGameType, MiniProgramGameDetailPage, OpenAppPageOptions, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenGameDetailAppPageOptions, OpenUserDetailAppPagePayload, OpenUserDetailAppPageOptions, } from './app-pages';
4
+ export type { MiniProgramAppPageTarget, MiniProgramGameDetailGameType, MiniProgramGameDetailPage, OpenAppPageOptions, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenGameDetailAppPageOptions, OpenPostDetailAppPagePayload, OpenPostDetailAppPageOptions, OpenUserDetailAppPagePayload, OpenUserDetailAppPageOptions, } from './app-pages';
5
5
  /** `navigation.close` 不需要入参。 */
6
6
  export type ClosePayload = void;
7
7
  /** `navigation.close` 无稳定返回值。 */
@@ -13,4 +13,4 @@ export type { GetWindowInfoPayload, GetWindowInfoResult, MiniProgramNavigationBa
13
13
  export type { MiniProgramNetworkHeaders, MiniProgramNetworkParams, MiniProgramNetworkRequestConfig, MiniProgramNetworkRequestMethod, MiniProgramNetworkResponse, MiniProgramNetworkValidateStatus, NetworkRequestPayload, NetworkResponsePayload, } from './modules/network';
14
14
  export type { HideLoadingPayload, HideLoadingResult, MiniProgramToastStatus, ShowLoadingPayload, ShowLoadingResult, ShowToastPayload, ShowToastResult, } from './modules/ui';
15
15
  export type { MiniProgramVibrateIntensity, SetClipboardPayload, SetClipboardResult, VibratePayload, VibrateResult, } from './modules/device';
16
- export type { ClosePayload, CloseResult, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenUserDetailAppPagePayload, ReloadPayload, ReloadResult, } from './modules/navigation';
16
+ export type { ClosePayload, CloseResult, OpenAppPagePayload, OpenAppPageResult, OpenGameDetailAppPagePayload, OpenPostDetailAppPagePayload, OpenUserDetailAppPagePayload, ReloadPayload, ReloadResult, } from './modules/navigation';