@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.
- package/CHANGELOG.md +13 -0
- package/README.md +2 -2
- package/dist/cli-chunks/{build-DPe1Ycjd.cjs → build-bVThH3Z5.cjs} +4 -4
- package/dist/cli-chunks/{context-BSUhAv3Z.cjs → context-DpKqGnjp.cjs} +2 -2
- package/dist/cli-chunks/{create-CaiKrGnb.cjs → create-BWC2343y.cjs} +1 -1
- package/dist/cli-chunks/{dev-BG1o8Q-0.cjs → dev-t14YpHHY.cjs} +9 -9
- package/dist/cli-chunks/{doctor-DutO2P5H.cjs → doctor-BWkrE0Hj.cjs} +1 -1
- package/dist/cli-chunks/{index-CKIyipP9.cjs → index-CDtcZVWv.cjs} +15 -15
- package/dist/cli-chunks/{index-Bur0U2z1.cjs → index-D3FMcOZq.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-BPlpP-O0.cjs → index.esm-BrJBaJWS.cjs} +7 -7
- package/dist/cli-chunks/{login-C1JlLEza.cjs → login-DRMl7nFH.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-Bd0WzAqQ.cjs → project-vite-CXgdzIYw.cjs} +1 -1
- package/dist/cli-chunks/{remote-DTFEf3Dj.cjs → remote-ibQybNiM.cjs} +6 -6
- package/dist/cli-chunks/{runtime-permission-env-C2S34ldj.cjs → runtime-permission-env-DiTeD75Q.cjs} +576 -20
- package/dist/cli-chunks/{session-zXVkHuhY.cjs → session-CIoBspg-.cjs} +1 -1
- package/dist/cli-chunks/{skill-CCB3DyXk.cjs → skill-5labzuWk.cjs} +2 -2
- package/dist/cli-chunks/{version-0qwlEyZC.cjs → version-QiVEs76a.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-DxzOkljJ.js +101 -0
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-DOfl5YvO.js → desktop-app-launch-B4KsgItx.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-CFr28-0O.js → index-9Nb3XhtI.js} +3 -3
- package/dist/devtools/browser-dev-host/index.html +2 -2
- package/dist/index.cjs.js +948 -44
- package/dist/index.esm.js +948 -44
- package/dist/miniapp-publish.cjs.js +536 -30
- package/dist/miniapp-publish.esm.js +536 -30
- package/dist/protocol.cjs.js +807 -2
- package/dist/protocol.esm.js +807 -2
- package/dist/vite.cjs.js +184 -1
- package/dist/vite.esm.js +184 -1
- package/package.json +7 -7
- package/skill/references/api-root.md +192 -8
- package/skill/references/recipes.md +45 -7
- package/skill/skill.json +5 -5
- package/types/core/errors.d.ts +33 -9
- package/types/core/handshake-state.d.ts +32 -2
- package/types/core/singleton.d.ts +265 -6
- package/types/miniapp-manifest/bindings.d.ts +65 -0
- package/types/miniapp-manifest/schema.d.ts +136 -19
- package/types/miniapp-publish/index.d.ts +425 -29
- package/types/modules/auth/index.d.ts +159 -5
- package/types/modules/cloud/index.d.ts +514 -40
- package/types/modules/companion/index.d.ts +1518 -17
- package/types/modules/device/index.d.ts +140 -9
- package/types/modules/environment/index.d.ts +172 -4
- package/types/modules/files/types.d.ts +1396 -21
- package/types/modules/navigation/app-pages/types.d.ts +81 -24
- package/types/modules/navigation/index.d.ts +230 -7
- package/types/modules/network/index.d.ts +297 -26
- package/types/modules/share/copy-link.d.ts +35 -5
- package/types/modules/share/index.d.ts +210 -0
- package/types/modules/share/screenshot.d.ts +23 -5
- package/types/modules/share/show-share-menu.d.ts +18 -5
- package/types/modules/share/types.d.ts +148 -23
- package/types/modules/storage/index.d.ts +139 -9
- package/types/modules/ui/index.d.ts +249 -18
- package/types/modules/user/get-info.d.ts +29 -8
- package/types/modules/user/index.d.ts +157 -0
- package/types/modules/user/revoke-authorization.d.ts +26 -2
- package/types/modules/user/steam-game-list.d.ts +96 -15
- package/types/modules/viewport/index.d.ts +158 -22
- package/types/protocol/types.d.ts +19 -1
- package/types/vite/index.d.ts +159 -1
- 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
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* `storage.getStorage` 入参。
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Runtime 只读取 `key`,不会把额外字段用于选择其他小程序或 Storage 区域。
|
|
8
|
+
*/
|
|
4
9
|
export interface GetStoragePayload {
|
|
5
|
-
/**
|
|
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
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* key 对应的数据。合法 JSON 会按 `JSON.parse` 语义还原,因此对象、数组、字符串、
|
|
32
|
+
* 数字、布尔值和 `null` 均原样返回;key 不存在或旧 Host 保存了空字符串时为
|
|
33
|
+
* `undefined`。升级前遗留的非 JSON 原始值不会导致解析错误,而是以原字符串返回。
|
|
34
|
+
*/
|
|
15
35
|
data: T | undefined;
|
|
16
36
|
}
|
|
17
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* `storage.setStorage` 入参。
|
|
39
|
+
*
|
|
40
|
+
* @remarks
|
|
41
|
+
* Runtime 只消费 `key` 与 `data`。调用方不能通过额外字段选择其他小程序、账号、版本或
|
|
42
|
+
* Storage 区域;实际作用域由 Host 提供的 canonical 小程序身份决定。
|
|
43
|
+
*/
|
|
18
44
|
export interface SetStoragePayload {
|
|
19
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Toast 的语义状态。
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* `success` 与 `error` 用于请求 Host 展示对应的成功或错误反馈样式;不传状态时展示
|
|
8
|
+
* 普通文本 Toast。具体图标、颜色和停留时长由 Host 决定。
|
|
9
|
+
*/
|
|
4
10
|
export type MiniProgramToastStatus = 'success' | 'error';
|
|
5
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* `ui.showToast` 的展示配置。
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* 只支持 `message` 与可选的 `status`。Runtime 会拒绝未声明的额外字段,并在调用 Host 前
|
|
16
|
+
* 规范化文案与状态。
|
|
17
|
+
*/
|
|
6
18
|
export interface ShowToastPayload {
|
|
7
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* `ui.showToast` 的空结果。
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* `void` 只表示本次 Host show operation 已成功结束,不返回 Toast ID、可见状态、展示时长或
|
|
44
|
+
* 清理函数,也不会等待 Toast 自动消失或被下一条反馈替换。
|
|
45
|
+
*/
|
|
13
46
|
export type ShowToastResult = void;
|
|
14
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* `ui.showLoading` 的展示配置。
|
|
49
|
+
*
|
|
50
|
+
* @remarks
|
|
51
|
+
* 只支持可选的 `dismissible`;Runtime 会拒绝额外字段或非布尔值。Loading 的可见状态、
|
|
52
|
+
* 样式与交互由 Host 持有,SDK Runtime 不维护调用计数或展示栈,每次调用都会把规范化配置
|
|
53
|
+
* 转发给 Host。
|
|
54
|
+
*/
|
|
15
55
|
export interface ShowLoadingPayload {
|
|
16
|
-
/**
|
|
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
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* `ui.showLoading` 的空结果。
|
|
70
|
+
*
|
|
71
|
+
* @remarks
|
|
72
|
+
* `void` 只表示本次 Host show operation 已成功结束,不返回 Loading ID、可见状态、用户关闭状态
|
|
73
|
+
* 或清理函数,也不会等待 Loading 随后的隐藏或用户关闭。
|
|
74
|
+
*/
|
|
20
75
|
export type ShowLoadingResult = void;
|
|
21
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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
|
-
* @
|
|
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
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
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
|
-
* @
|
|
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>;
|