@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
@@ -1,31 +1,115 @@
1
1
  import type { MiniProgramRequester } from '../../core/client';
2
2
  export { STORAGE_GET_STORAGE_METHOD, STORAGE_SET_STORAGE_METHOD } from '../../protocol/capabilities';
3
- /** `storage.getStorage` 入参。 */
3
+ /**
4
+ * `storage.getStorage` 入参。
5
+ *
6
+ * @remarks
7
+ * Runtime 只读取 `key`,不会把额外字段用于选择其他小程序或 Storage 区域。
8
+ */
4
9
  export interface GetStoragePayload {
5
- /** storage key。 */
10
+ /**
11
+ * Storage key。
12
+ *
13
+ * @remarks
14
+ * 必须是非空字符串,默认仅支持 1 至 128 位 ASCII 字母、数字、下划线和连字符,
15
+ * 即匹配 `/^[A-Za-z0-9_-]+$/`;Host 可以配置不同的长度上限。空串、空白、路径
16
+ * 分隔符、点号、中文或超过上限的 key 会以 `INVALID_PARAMS` 拒绝,且不会读取 Host Storage。
17
+ */
6
18
  key: string;
7
19
  }
8
20
  /**
9
21
  * `storage.getStorage` 返回值。
10
22
  *
11
- * @typeParam T - 反序列化后的业务数据类型。
23
+ * @typeParam T - 调用方声明的业务数据类型;只影响 TypeScript,不会触发运行时校验或转换。
24
+ *
25
+ * @remarks
26
+ * 数据由 Host 原始字符串解码得出。业务若依赖精确结构,应在使用前自行校验 `data`,
27
+ * 不要把泛型参数当作数据迁移或 schema 校验。
12
28
  */
13
29
  export interface GetStorageResult<T = unknown> {
14
- /** key 对应的数据;不存在时为 undefined。 */
30
+ /**
31
+ * key 对应的数据。合法 JSON 会按 `JSON.parse` 语义还原,因此对象、数组、字符串、
32
+ * 数字、布尔值和 `null` 均原样返回;key 不存在或旧 Host 保存了空字符串时为
33
+ * `undefined`。升级前遗留的非 JSON 原始值不会导致解析错误,而是以原字符串返回。
34
+ */
15
35
  data: T | undefined;
16
36
  }
17
- /** `storage.setStorage` 入参。 */
37
+ /**
38
+ * `storage.setStorage` 入参。
39
+ *
40
+ * @remarks
41
+ * Runtime 只消费 `key` 与 `data`。调用方不能通过额外字段选择其他小程序、账号、版本或
42
+ * Storage 区域;实际作用域由 Host 提供的 canonical 小程序身份决定。
43
+ */
18
44
  export interface SetStoragePayload {
19
- /** storage key。 */
45
+ /**
46
+ * Storage key。
47
+ *
48
+ * @remarks
49
+ * 必须是非空字符串,默认仅支持 1 至 128 位 ASCII 字母、数字、下划线和连字符,
50
+ * 即匹配 `/^[A-Za-z0-9_-]+$/`;Host 可以配置不同的长度上限。空串、空白、路径
51
+ * 分隔符、点号、中文或超过上限的 key 会以 `INVALID_PARAMS` 拒绝,且不会覆盖已有值。
52
+ */
20
53
  key: string;
21
- /** 需要写入的数据。 */
54
+ /**
55
+ * 要写入的结构化数据;必须先能通过 iframe structured clone,再能被 `JSON.stringify` 序列化。
56
+ *
57
+ * @remarks
58
+ * Runtime 对跨 bridge 后的值执行 `JSON.stringify`。对象属性中的 `undefined` 会被省略,
59
+ * 数组中的 `undefined` 会变成 `null`;顶层 `undefined` 会以 `INVALID_PARAMS` 拒绝。
60
+ * `NaN` 与正负 `Infinity` 会序列化为 `null`。`BigInt` 和循环引用会使序列化失败,并以
61
+ * `INVALID_PARAMS` 拒绝。
62
+ *
63
+ * 不要依赖自定义 `toJSON`:函数不能通过 structured clone,自定义原型也不会作为公开
64
+ * bridge 合同保留。`Date` 是例外,其内建 `toJSON` 会把值序列化为 ISO 时间字符串。
65
+ * 函数、Symbol 或其他不可 structured-clone 的成员可能在请求到达 Host 前触发
66
+ * `DataCloneError`。
67
+ *
68
+ * Host 若配置写入配额,会在完整 JSON 字符串生成后按 UTF-8 字节数校验;引号、转义、
69
+ * 属性名和 JSON 结构字符均计入配额,中文等字符可能占多个字节。超限时返回
70
+ * `STORAGE_QUOTA_EXCEEDED`,且不会调用 Host Storage。
71
+ */
22
72
  data: unknown;
23
73
  }
24
74
  export type { MiniProgramStorageMethod } from '../../protocol/capabilities';
25
75
  /** 外部小程序可调用的 storage 模块。 */
26
76
  export interface MiniProgramStorageModule {
27
77
  /**
28
- * 获取小程序隔离 storage。
78
+ * 读取当前小程序隔离 Storage 中的值。
79
+ *
80
+ * @typeParam T - 调用方期望的反序列化数据类型;SDK 不会在运行时校验该类型。
81
+ * @param options - 读取参数;`options.key` 必须符合 {@link GetStoragePayload.key} 的字符和长度约束。
82
+ * @returns Host 读取完成后 resolve 的结果。合法 JSON 会被反序列化;key 不存在或历史空串返回 `{ data: undefined }`,合法 JSON `null` 返回 `{ data: null }`,历史非 JSON 原始值返回原字符串。
83
+ * @throws {@link HbMiniProgramSDKError} 参数非法时返回 `INVALID_PARAMS`;未声明或未启用
84
+ * `storage` 权限时分别返回 `PERMISSION_NOT_DECLARED` 或 `PERMISSION_DENIED`;canonical
85
+ * identity 尚未就绪时返回 `INVALID_STATE`;Host 不支持或禁用能力时可返回
86
+ * `METHOD_NOT_FOUND` 或 `METHOD_FORBIDDEN`。其他 bridge 与 Host 读取错误会保留对应错误码。
87
+ *
88
+ * @remarks
89
+ * Storage 作用域由平台确认的 canonical 小程序身份决定,并在首次使用时固定;不能通过
90
+ * `key` 读取其他小程序或调试工具的值。未绑定身份的本地调试实例只能使用 Runtime
91
+ * 显式分配的临时隔离 scope,不会根据请求中的小程序 ID 或页面 URL 推导 scope。
92
+ *
93
+ * 该 API 需要在 `package.json#heybox.permissions` 声明并启用 `storage`,不要求可信用户
94
+ * 手势。读取本身没有 `setStorage` 的 JSON 序列化与 UTF-8 写入字节配额;配额在写入时
95
+ * 校验,已有值仍按上述兼容规则读取。
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * import hbSDK from '@heybox/hb-sdk'
100
+ *
101
+ * type Settings = { theme: 'light' | 'dark' }
102
+ *
103
+ * const { data } = await hbSDK.storage.getStorage<Settings>({
104
+ * key: 'settings',
105
+ * })
106
+ *
107
+ * // 泛型不会校验持久化数据;关键数据应先做 schema/type guard 校验。
108
+ * const theme = data?.theme === 'dark' ? 'dark' : 'light'
109
+ * ```
110
+ *
111
+ * @see {@link MiniProgramStorageModule.setStorage | storage.setStorage}
112
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/permissions | 权限声明}
29
113
  *
30
114
  * @since 0.2.0-alpha.0
31
115
  * @hbPlatform android
@@ -41,7 +125,53 @@ export interface MiniProgramStorageModule {
41
125
  */
42
126
  getStorage<T = unknown>(options: GetStoragePayload): Promise<GetStorageResult<T>>;
43
127
  /**
44
- * 写入小程序隔离 storage。
128
+ * 将 JSON 数据持久化到当前小程序隔离 Storage 的一个 key。
129
+ *
130
+ * @param options - 写入参数。`options.key` 必须符合 {@link SetStoragePayload.key} 的字符和
131
+ * 长度约束;`options.data` 必须符合 {@link SetStoragePayload.data} 的 clone、JSON 与配额约束。
132
+ * @returns Host 完成该 key 的整值替换后 resolve `undefined`;该 API 没有业务返回值。
133
+ * @throws {@link HbMiniProgramSDKError} `INVALID_PARAMS`:`options`、key 或 JSON 数据非法,
134
+ * 包括顶层 `undefined`、`BigInt`、循环引用或序列化过程抛错。
135
+ * @throws {@link HbMiniProgramSDKError} `STORAGE_QUOTA_EXCEEDED`:完整 JSON 字符串的 UTF-8
136
+ * 字节数超过当前 Host 配额。
137
+ * @throws {@link HbMiniProgramSDKError} `PERMISSION_NOT_DECLARED` / `PERMISSION_DENIED`:当前
138
+ * 版本未声明或未启用 `storage`;`INVALID_STATE`:canonical 小程序身份尚未就绪。
139
+ * @throws {@link HbMiniProgramSDKError} `METHOD_NOT_FOUND` / `METHOD_FORBIDDEN`:当前 Host
140
+ * 不支持或禁用了该能力。其他握手、bridge、超时与 Host 写入失败会保留对应错误码。
141
+ * @throws `DOMException` 数据含函数、Symbol、自定义 `toJSON` 方法等不可 structured-clone
142
+ * 内容时,浏览器可能在请求发送前抛出 `DataCloneError`。
143
+ *
144
+ * @remarks
145
+ * 该 API 需要在 `package.json#heybox.permissions` 声明并启用 `storage`,不需要平台批准、
146
+ * 用户授权或可信用户手势。
147
+ *
148
+ * Storage 作用域由平台确认的 canonical 小程序 ID 决定,并在当前 Runtime 首次使用时
149
+ * 固定;版本号、当前登录账号、页面 URL 和 key 都不能改变作用域。不同小程序不能互相
150
+ * 读取数据,同一小程序的版本升级仍使用相同作用域;本地匿名调试只使用 Runtime 显式
151
+ * 分配的临时 scope。该能力是 Host 本地持久化,不是账号级或跨设备云同步。
152
+ *
153
+ * Runtime 会先完成 JSON 序列化和 UTF-8 配额校验,再向 Host 提交一个完整字符串;这些
154
+ * 前置校验失败时不会覆盖旧值。Host 以单次操作整值替换同一个 key,不暴露局部写入、
155
+ * merge、append 或多 key 事务。Promise resolve 表示 Host 已完成本次持久化;随后可用
156
+ * {@link MiniProgramStorageModule.getStorage | storage.getStorage} 读取反序列化后的值。
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * import hbSDK from '@heybox/hb-sdk'
161
+ *
162
+ * type Settings = { theme: 'light' | 'dark'; updatedAt: string }
163
+ *
164
+ * await hbSDK.storage.setStorage({
165
+ * key: 'settings',
166
+ * data: { theme: 'dark', updatedAt: new Date().toISOString() },
167
+ * })
168
+ *
169
+ * const { data } = await hbSDK.storage.getStorage<Settings>({ key: 'settings' })
170
+ * if (data) console.log(data.theme)
171
+ * ```
172
+ *
173
+ * @see {@link MiniProgramStorageModule.getStorage | storage.getStorage}
174
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/permissions | 权限声明}
45
175
  *
46
176
  * @since 0.2.0-alpha.0
47
177
  * @hbPlatform android
@@ -1,32 +1,146 @@
1
1
  import type { MiniProgramRequester } from '../../core/client';
2
2
  export { UI_HIDE_LOADING_METHOD, UI_SHOW_LOADING_METHOD, UI_SHOW_TOAST_METHOD } from '../../protocol/capabilities';
3
- /** Toast 展示状态。 */
3
+ /**
4
+ * Toast 的语义状态。
5
+ *
6
+ * @remarks
7
+ * `success` 与 `error` 用于请求 Host 展示对应的成功或错误反馈样式;不传状态时展示
8
+ * 普通文本 Toast。具体图标、颜色和停留时长由 Host 决定。
9
+ */
4
10
  export type MiniProgramToastStatus = 'success' | 'error';
5
- /** `ui.showToast` 入参。 */
11
+ /**
12
+ * `ui.showToast` 的展示配置。
13
+ *
14
+ * @remarks
15
+ * 只支持 `message` 与可选的 `status`。Runtime 会拒绝未声明的额外字段,并在调用 Host 前
16
+ * 规范化文案与状态。
17
+ */
6
18
  export interface ShowToastPayload {
7
- /** Toast 文案。 */
19
+ /**
20
+ * Toast 文案。
21
+ *
22
+ * @remarks
23
+ * Runtime 会先调用 `String#trim()` 移除首尾空白,内部空白保持不变;规范化后必须非空。
24
+ * 长度上限为 120 个 UTF-16 code unit,按 JavaScript `string.length` 计算,而不是按用户感知字符
25
+ * 或 Unicode code point 计数;例如多数 emoji 会占两个单位。
26
+ */
8
27
  message: string;
9
- /** Toast 状态;不传时展示普通文本 toast。 */
28
+ /**
29
+ * 请求 Host 使用的语义状态。
30
+ *
31
+ * @defaultValue `undefined`,即普通文本 Toast。
32
+ *
33
+ * @remarks
34
+ * 仅支持 `success` 与 `error`;省略时不向 Host 传入状态,展示普通文本 Toast。具体图标、颜色、
35
+ * 声音或其他反馈由 Host 决定,不能作为业务成功或失败的判定依据。
36
+ */
10
37
  status?: MiniProgramToastStatus;
11
38
  }
12
- /** `ui.showToast` 无稳定返回值。 */
39
+ /**
40
+ * `ui.showToast` 的空结果。
41
+ *
42
+ * @remarks
43
+ * `void` 只表示本次 Host show operation 已成功结束,不返回 Toast ID、可见状态、展示时长或
44
+ * 清理函数,也不会等待 Toast 自动消失或被下一条反馈替换。
45
+ */
13
46
  export type ShowToastResult = void;
14
- /** `ui.showLoading` 入参。 */
47
+ /**
48
+ * `ui.showLoading` 的展示配置。
49
+ *
50
+ * @remarks
51
+ * 只支持可选的 `dismissible`;Runtime 会拒绝额外字段或非布尔值。Loading 的可见状态、
52
+ * 样式与交互由 Host 持有,SDK Runtime 不维护调用计数或展示栈,每次调用都会把规范化配置
53
+ * 转发给 Host。
54
+ */
15
55
  export interface ShowLoadingPayload {
16
- /** 是否允许用户手动关闭 loading。 */
56
+ /**
57
+ * 是否允许用户通过 Host 提供的界面手动关闭 Loading。
58
+ *
59
+ * @defaultValue `false`
60
+ *
61
+ * @remarks
62
+ * 省略时 Runtime 固定向 Host 传入 `false`。设为 `true` 只允许 Host 提供关闭入口;具体关闭
63
+ * 手势和样式由 Host 决定,不表示 Host 必须展示某种按钮。手动关闭只影响 Host UI,不会取消
64
+ * 发起 Loading 的业务任务;SDK 不提供关闭事件、回调或可查询状态。
65
+ */
17
66
  dismissible?: boolean;
18
67
  }
19
- /** `ui.showLoading` 无稳定返回值。 */
68
+ /**
69
+ * `ui.showLoading` 的空结果。
70
+ *
71
+ * @remarks
72
+ * `void` 只表示本次 Host show operation 已成功结束,不返回 Loading ID、可见状态、用户关闭状态
73
+ * 或清理函数,也不会等待 Loading 随后的隐藏或用户关闭。
74
+ */
20
75
  export type ShowLoadingResult = void;
21
- /** `ui.hideLoading` 不需要入参。 */
76
+ /**
77
+ * `ui.hideLoading` 的空 payload。
78
+ *
79
+ * @remarks
80
+ * 公开方法不接收参数,也不接受 Loading ID、计数、`force` 或动画配置。SDK 发送请求时不携带
81
+ * payload;调用方不应传入 `{}` 或自行构造 bridge payload。
82
+ */
22
83
  export type HideLoadingPayload = void;
23
- /** `ui.hideLoading` 无稳定返回值。 */
84
+ /**
85
+ * `ui.hideLoading` 的空结果。
86
+ *
87
+ * @remarks
88
+ * `void` 只表示本次 Host hide operation 已成功结束,不表示此前一定存在 Loading,也不返回
89
+ * “是否实际隐藏”、剩余展示计数或动画完成状态。
90
+ */
24
91
  export type HideLoadingResult = void;
25
92
  export type { MiniProgramUiMethod } from '../../protocol/capabilities';
26
- /** 外部小程序可调用的 UI 模块。 */
93
+ /**
94
+ * 外部小程序可调用的 Host UI 反馈模块。
95
+ *
96
+ * @remarks
97
+ * 本模块无需在 `package.json#heybox.permissions` 中声明权限。展示样式、动画与持续
98
+ * 时间由 Host 决定,Mini-program 不应依赖这些视觉实现细节推进业务状态。
99
+ */
27
100
  export interface MiniProgramUiModule {
28
101
  /**
29
- * 展示 toast。
102
+ * 展示短暂的 Toast 反馈。
103
+ *
104
+ * @param options - Toast 文案与可选语义状态。必须是只包含 `message`、`status` 的对象;`status`
105
+ * 省略时请求普通文本 Toast。
106
+ * @returns Runtime 调用的 Host `presentation.showToast` operation 成功结束并返回 bridge 响应后,
107
+ * Promise 以 `void` resolve。它不会等待 Toast 自动消失或被替换,也不返回可见状态。
108
+ * @throws [HbMiniProgramSDKError](/reference/symbols/root/classes/HbMiniProgramSDKError)
109
+ * options 不是对象、含额外字段,`message` 不是字符串、trim 后为空或超过 120 个 UTF-16 code unit,
110
+ * 或 `status` 不是 `success` / `error` 时,以 `INVALID_PARAMS` 拒绝。当前 Host 未开放
111
+ * `presentation.showToast` 时以 `METHOD_FORBIDDEN` 拒绝,旧 Runtime 不认识 `ui.showToast` 时可返回
112
+ * `METHOD_NOT_FOUND`,Host 不支持当前请求形状时可返回 `REQUEST_UNSUPPORTED`。bridge、Runtime
113
+ * 卸载、请求超时或 Host operation 失败时抛出对应 SDK 错误。
114
+ *
115
+ * @remarks
116
+ * 该 API 无需在 `package.json#heybox.permissions` 中声明权限,也不要求可信用户手势。Runtime 会
117
+ * 对 `message` 执行 `trim()`,再按 JavaScript `string.length` 校验最多 120 个 UTF-16 code unit;
118
+ * 规范化后的文本才会传给 Host。省略 `status` 时为普通 Toast,`success` / `error` 只请求对应
119
+ * 语义样式,不改变 Promise 或错误处理语义。
120
+ *
121
+ * 展示时长、动画、位置、图标、颜色、同时可见数量和无障碍呈现均由 Host 决定。连续调用不会在
122
+ * Runtime 排队或合并;新 Toast 是覆盖、排队还是与旧 Toast 共存,以及它与当前
123
+ * [ui.showLoading()](/reference/sdk/ui/showLoading) 如何交互,都不是公共契约。Promise resolve 只表示
124
+ * Host operation 完成,不能据此认为用户已经看到完整时长的提示。
125
+ *
126
+ * Toast 适合无需显式清理的短暂结果反馈;长任务使用 `showLoading()` 并在 `finally` 中调用
127
+ * `hideLoading()`。`status` 不会让 SDK 自动触发触觉反馈;需要震动时应单独调用
128
+ * [device.vibrate()](/reference/sdk/device/vibrate),并独立处理平台不支持结果。
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * import hbSDK from '@heybox/hb-sdk'
133
+ *
134
+ * await hbSDK.ui.showToast({
135
+ * message: ' 保存成功 ', // Host 最终收到“保存成功”
136
+ * status: 'success',
137
+ * })
138
+ * ```
139
+ *
140
+ * @see [ui.showLoading()](/reference/sdk/ui/showLoading) 展示需要显式清理的全局 Loading。
141
+ * @see [device.vibrate()](/reference/sdk/device/vibrate) 请求独立的 Host 触觉反馈。
142
+ * @see [ShowToastPayload](/reference/symbols/root/interfaces/ShowToastPayload) 文案与状态配置类型。
143
+ * @see [ShowToastResult](/reference/symbols/root/types/ShowToastResult) 无业务数据的成功结果类型。
30
144
  *
31
145
  * @since 0.4.4
32
146
  * @hbPlatform android
@@ -42,7 +156,54 @@ export interface MiniProgramUiModule {
42
156
  */
43
157
  showToast(options: ShowToastPayload): Promise<void>;
44
158
  /**
45
- * 展示全局 loading。
159
+ * 展示或更新全局 Loading。
160
+ *
161
+ * @param options - 可选展示配置。省略、JavaScript `null` 或传入 `{}` 时,SDK 将其规范化为
162
+ * 空配置,Runtime 再将 `dismissible` 规范化为 `false`;只接受布尔值且不支持额外字段。
163
+ * @returns Runtime 调用的 Host `presentation.showLoading` operation 成功结束并返回 bridge 响应后,
164
+ * Promise 以 `void` resolve。它不会等待 Loading 被隐藏或用户手动关闭,也不返回 Loading handle。
165
+ * @throws [HbMiniProgramSDKError](/reference/symbols/root/classes/HbMiniProgramSDKError)
166
+ * `dismissible` 不是布尔值、options 含额外字段或底层 payload 不符合对象契约时以
167
+ * `INVALID_PARAMS` 拒绝;当前 Host 未开放 `presentation.showLoading` 时以 `METHOD_FORBIDDEN` 拒绝,旧 Runtime 不认识
168
+ * `ui.showLoading` 时可返回 `METHOD_NOT_FOUND`,Host 不支持当前请求形状时以
169
+ * `REQUEST_UNSUPPORTED` 拒绝。bridge、Runtime 卸载、请求超时或 Host operation 失败时抛出
170
+ * 对应 SDK 错误。
171
+ *
172
+ * @remarks
173
+ * 该 API 无需在 `package.json#heybox.permissions` 中声明权限,也不要求可信用户手势。它只控制
174
+ * Host 的全局 Loading 反馈,不会阻塞或取消调用方的业务 Promise。
175
+ *
176
+ * `dismissible: false` 请求 Host 不提供用户手动关闭入口;`true` 允许 Host 提供入口。该字段只描述
177
+ * Host UI 是否可由用户关闭,不是业务取消能力:SDK 不会收到关闭事件,也不会因此 abort 网络请求
178
+ * 或其他任务。即使允许手动关闭,业务仍应在完成时调用
179
+ * [ui.hideLoading()](/reference/sdk/ui/hideLoading) 清理。
180
+ *
181
+ * SDK 与 Runtime 都不维护 Loading 是否可见、展示次数、引用计数或调用栈。每次调用都会独立发送并
182
+ * 转发到 Host;重复调用是更新还是重建、后一次配置如何覆盖前一次、Loading 与现有
183
+ * [ui.showToast()](/reference/sdk/ui/showToast) 如何交互,都由 Host 决定。一个流程的
184
+ * `hideLoading()` 可能隐藏另一个并发流程展示的 Loading,因此多个流程共享全局 Loading 时,应在
185
+ * 应用层协调所有权或自行维护计数。
186
+ *
187
+ * 单个流程拥有 Loading 时,先等待本方法成功,再把业务任务放进 `try`,并在 `finally` 中调用
188
+ * `hideLoading()`,确保成功与失败路径都尝试清理。若清理失败不能覆盖原始业务错误,应在应用层
189
+ * 单独捕获并记录清理错误。
190
+ *
191
+ * @example
192
+ * ```ts
193
+ * import hbSDK from '@heybox/hb-sdk'
194
+ *
195
+ * await hbSDK.ui.showLoading({ dismissible: true })
196
+ * try {
197
+ * await saveChanges()
198
+ * } finally {
199
+ * await hbSDK.ui.hideLoading()
200
+ * }
201
+ * ```
202
+ *
203
+ * @see [ui.hideLoading()](/reference/sdk/ui/hideLoading) 隐藏当前 Host 全局 Loading。
204
+ * @see [ui.showToast()](/reference/sdk/ui/showToast) 展示无需显式清理的短暂反馈。
205
+ * @see [ShowLoadingPayload](/reference/symbols/root/interfaces/ShowLoadingPayload) `dismissible` 配置类型。
206
+ * @see [ShowLoadingResult](/reference/symbols/root/types/ShowLoadingResult) 无业务数据的成功结果类型。
46
207
  *
47
208
  * @since 0.4.4
48
209
  * @hbPlatform android
@@ -58,7 +219,52 @@ export interface MiniProgramUiModule {
58
219
  */
59
220
  showLoading(options?: ShowLoadingPayload): Promise<void>;
60
221
  /**
61
- * 隐藏全局 loading。
222
+ * 隐藏当前全局 Loading。
223
+ *
224
+ * @returns Runtime 调用的 Host `presentation.hideLoading` operation 成功结束并返回 bridge 响应后,
225
+ * Promise 以 `void` resolve。返回值不说明此前是否存在 Loading,也不承诺等待 Host 的退出动画完成。
226
+ * @throws [HbMiniProgramSDKError](/reference/symbols/root/classes/HbMiniProgramSDKError)
227
+ * 当前 Host 未开放 `presentation.hideLoading` 时以 `METHOD_FORBIDDEN` 拒绝;旧 Runtime 不认识
228
+ * `ui.hideLoading` 时可返回 `METHOD_NOT_FOUND`。bridge、Runtime 卸载、请求超时或 Host operation
229
+ * 失败时抛出对应 SDK 错误;Host 明确表示当前请求不受支持时可返回 `REQUEST_UNSUPPORTED`。
230
+ *
231
+ * @remarks
232
+ * 该方法不接收参数,无需在 `package.json#heybox.permissions` 中声明权限,也不要求可信用户手势。
233
+ * 它只请求隐藏 Host 当前持有的全局 Loading,不会关闭 Toast 或其他 UI 反馈。
234
+ *
235
+ * SDK 与 Runtime 都不维护 Loading 是否可见、展示次数、引用计数或调用栈。每次调用都会独立发送并
236
+ * 转发到 Host;连续调用不会在 Runtime 合并,也不需要按此前 `showLoading()` 的调用次数循环隐藏。
237
+ * 多个并发流程共用同一个全局 Loading 时,一个流程的 `hideLoading()` 可能隐藏另一个流程展示的
238
+ * Loading,调用方需要在业务层协调所有权或自行维护计数。
239
+ *
240
+ * 当前没有 Loading 时,行为由 Host 决定,公共契约不保证统一幂等:Browser Dev Host 会成功空操作,
241
+ * Mobile 与 PC Runtime 仍会把请求转发给实际 Host,由 Host 决定成功、空操作或报错。因此不要用
242
+ * `hideLoading()` 的 resolve/reject 探测 Loading 是否可见,也不要据此推进业务状态。
243
+ *
244
+ * 当当前异步流程拥有 Loading 时,应在 `finally` 中清理,使成功和失败路径都会尝试隐藏。
245
+ * [ui.showLoading()](/reference/sdk/ui/showLoading) 的 `dismissible: true` 不提供用户关闭回调;即使用户
246
+ * 可能已经手动关闭,流程结束时仍可按 Host 语义调用本方法。若清理失败不能覆盖原始业务错误,
247
+ * 应在应用层单独捕获并记录清理错误。
248
+ *
249
+ * @example
250
+ * ```ts
251
+ * import hbSDK from '@heybox/hb-sdk'
252
+ *
253
+ * let loadingShown = false
254
+ * try {
255
+ * await hbSDK.ui.showLoading({ dismissible: false })
256
+ * loadingShown = true
257
+ * await saveChanges()
258
+ * } finally {
259
+ * if (loadingShown) {
260
+ * await hbSDK.ui.hideLoading()
261
+ * }
262
+ * }
263
+ * ```
264
+ *
265
+ * @see [ui.showLoading()](/reference/sdk/ui/showLoading) 展示或更新同一个 Host 全局 Loading。
266
+ * @see [HideLoadingPayload](/reference/symbols/root/types/HideLoadingPayload) 无参数的 wire payload 类型。
267
+ * @see [HideLoadingResult](/reference/symbols/root/types/HideLoadingResult) 无业务数据的成功结果类型。
62
268
  *
63
269
  * @since 0.4.4
64
270
  * @hbPlatform android
@@ -74,11 +280,36 @@ export interface MiniProgramUiModule {
74
280
  */
75
281
  hideLoading(): Promise<void>;
76
282
  }
77
- /** 展示 toast。 */
283
+ /**
284
+ * 通过底层 bridge 展示 Toast。
285
+ *
286
+ * @param requester - 底层 bridge 请求能力。
287
+ * @param options - Toast 文案与可选语义状态。
288
+ * @returns Host 接受并应用展示请求后 resolve。
289
+ * @throws {@link HbMiniProgramSDKError} 参数、bridge、Runtime 或 Host 调用失败时抛出。
290
+ */
78
291
  export declare function showToast(requester: MiniProgramRequester, options: ShowToastPayload): Promise<void>;
79
- /** 展示全局 loading。 */
292
+ /**
293
+ * 通过底层 bridge 展示或更新全局 Loading。
294
+ *
295
+ * @param requester - 底层 bridge 请求能力。
296
+ * @param options - 可选展示配置;省略时使用不可手动关闭的 Loading。
297
+ * @returns Host 接受并应用展示请求后 resolve。
298
+ * @throws {@link HbMiniProgramSDKError} 参数、bridge、Runtime 或 Host 调用失败时抛出。
299
+ */
80
300
  export declare function showLoading(requester: MiniProgramRequester, options?: ShowLoadingPayload): Promise<void>;
81
- /** 隐藏全局 loading。 */
301
+ /**
302
+ * 通过底层 bridge 请求隐藏全局 Loading。
303
+ *
304
+ * @param requester - 底层 bridge 请求能力。
305
+ * @returns Host 接受隐藏请求后 resolve。
306
+ * @throws {@link HbMiniProgramSDKError} bridge、Runtime 或 Host 调用失败时抛出。
307
+ */
82
308
  export declare function hideLoading(requester: MiniProgramRequester): Promise<void>;
83
- /** 创建 UI 模块。 */
309
+ /**
310
+ * 创建绑定到指定 bridge requester 的 UI 模块。
311
+ *
312
+ * @param requester - 底层 bridge 请求能力。
313
+ * @returns 可供 Mini-program 调用的 UI 模块。
314
+ */
84
315
  export declare function createUiModule(requester: MiniProgramRequester): MiniProgramUiModule;
@@ -1,23 +1,44 @@
1
1
  import type { MiniProgramRequester } from '../../core/client';
2
2
  import type { MiniProgramUserInfoResult } from './types';
3
3
  export { USER_GET_INFO_METHOD } from '../../protocol/capabilities';
4
- /**
5
- * `user.getInfo` 不需要入参。
6
- */
4
+ /** `user.getInfo` 不需要入参;调用时不要传小程序 ID 或用户 ID。 */
7
5
  export type GetUserInfoPayload = void;
8
6
  /**
9
7
  * `user.getInfo` 返回当前用户登录态与公开基础资料。
8
+ *
9
+ * @remarks
10
+ * 先用 `isHeyboxAppLoggedIn` 缩窄联合类型:未登录时 `authorization` 与 `userInfo` 均为
11
+ * `null`;已登录时 `authorization` 固定包含 `identity`、`profile`,但兼容 Host 的
12
+ * `userInfo` 仍可能为 `null`。这些状态表示用户授权,不是 Manifest 权限配置。
10
13
  */
11
14
  export type GetUserInfoResult = MiniProgramUserInfoResult;
12
15
  /**
13
16
  * 获取当前访问小程序用户的公开基础资料。
14
17
  *
15
- * @returns 当前用户的登录态与公开基础资料。
18
+ * @param requester - SDK 内部的 bridge 请求器;业务代码应通过 `hbSDK.user.getInfo()` 调用。
19
+ * @returns 以 `isHeyboxAppLoggedIn` 为判别字段的登录态、用户授权状态和已获准披露资料。
20
+ *
21
+ * @throws {@link HbMiniProgramSDKError} `userInfo` 未声明或不可用、握手失败、Host 不支持该能力、
22
+ * 当前小程序身份缺失、账号/隔离身份读取失败、返回结构不合法、Runtime 终止,或请求期间
23
+ * 账号与授权上下文变化时抛出。
24
+ *
25
+ * @remarks
26
+ * 当前账号未登录属于正常返回分支,不抛错。账号已登录时,该能力不展示授权 UI,也不要求
27
+ * 可信用户手势;Runtime 会静默建立或读取当前小程序的隔离 `app_user_id`,并授予
28
+ * `identity` 与 `profile`。它只要求 Manifest 中声明 `userInfo`,不要求公开 `network`
29
+ * 权限,也不返回可供服务端换票的授权码。
16
30
  *
17
- * 未开通网络权限且当前黑盒 APP 用户已登录时,该能力会静默建立或读取按小程序隔离的
18
- * `app_user_id`,并隐式授予 `identity` 与 `profile` 后返回昵称与头像,不展示授权 UI。未登录时返回
19
- * `{ isHeyboxAppLoggedIn: false, authorization: null, userInfo: null }`。
31
+ * @example
32
+ * ```ts
33
+ * const result = await hbSDK.user.getInfo()
34
+ * if (!result.isHeyboxAppLoggedIn) {
35
+ * showLoginHint()
36
+ * } else if (result.userInfo) {
37
+ * renderUser(result.userInfo.app_user_id, result.userInfo.profile)
38
+ * }
39
+ * ```
20
40
  *
21
- * @throws {@link HbMiniProgramSDKError} 当 SDK 调用失败时抛出。
41
+ * @see [auth.login](/reference/sdk/auth/login)
42
+ * @see [user.revokeAuthorization](/reference/sdk/user/revokeAuthorization)
22
43
  */
23
44
  export declare function getInfo(requester: MiniProgramRequester): Promise<GetUserInfoResult>;