@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
@@ -3,11 +3,24 @@ import type { DirectoryHandle, FileHandle } from '../files';
3
3
  export { NETWORK_DOWNLOAD_METHOD, NETWORK_REQUEST_METHOD } from '../../protocol/capabilities';
4
4
  export { createNetworkRequestFailureLog, formatNetworkRequestFailureMessage, logNetworkRequestFailure, previewNetworkData, sanitizeNetworkHeaders, sanitizeNetworkRequestUrl, } from './observability';
5
5
  export { describeHostNetworkFailure, isMultipartContentType, isUnsupportedMultipartNetworkRequest, looksLikeMultipartBody, NETWORK_REQUEST_MULTIPART_UNSUPPORTED_MESSAGE, readNetworkContentType, } from './request-shape';
6
- /** `network.request` 请求头。 */
6
+ /**
7
+ * `network.request` 请求头。
8
+ *
9
+ * @remarks
10
+ * 键必须是无首尾空白的合法 HTTP header name,值必须是无换行/控制字符的字符串。
11
+ * `Host`、`Content-Length`、hop-by-hop/framing Header 以及平台保留的认证 Header 会以
12
+ * `INVALID_PARAMS` 拒绝。响应侧不会向小程序暴露 `Set-Cookie`、认证凭据或平台保留 Header。
13
+ */
7
14
  export type MiniProgramNetworkHeaders = Record<string, string>;
8
- /** `network.request` 查询参数。 */
15
+ /**
16
+ * `network.request` 查询参数,由 Host 编码到请求 URL。
17
+ *
18
+ * @remarks
19
+ * 必须是普通对象。为获得跨 Host 一致的查询字符串,优先使用 string/number/boolean 等标量值;
20
+ * `null`、`undefined`、数组和嵌套对象的具体 URL 编码不属于公共稳定契约。
21
+ */
9
22
  export type MiniProgramNetworkParams = Record<string, unknown>;
10
- /** `network.request` 支持的 HTTP 方法。 */
23
+ /** `network.request` 支持的 HTTP 方法;省略时使用 `GET`。 */
11
24
  export type MiniProgramNetworkRequestMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
12
25
  /**
13
26
  * SDK 侧可配置的状态校验函数。
@@ -16,54 +29,149 @@ export type MiniProgramNetworkRequestMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' |
16
29
  * @returns 返回 `true` 时表示本次响应应视为成功。
17
30
  *
18
31
  * @remarks
19
- * 该函数只在 SDK 侧执行,不会跨 bridge 传输到父容器 runtime。
32
+ * 该函数只在 SDK 收到并标准化响应后执行,不会跨 bridge 传输到 Host。默认仅接受 `200`
33
+ * 至 `299`;可返回 `true` 接受 3xx/4xx 等完成态响应。函数自身抛出的异常会原样向调用方传播,
34
+ * 不会包装成 SDK 或 Network 错误。
20
35
  */
21
36
  export type MiniProgramNetworkValidateStatus = (status: number) => boolean;
22
37
  /**
23
38
  * 对外开放的网络请求配置。
24
39
  *
25
40
  * @remarks
26
- * 该配置面向业务层,保持 axios-like 的窄接口,不暴露宿主协议的原始字段。
41
+ * 该配置面向业务层,保持 axios-like 的窄接口,不暴露宿主协议的原始字段。请求进入 bridge
42
+ * 时会复制 plain object/array 数据并移除 `validateStatus`;响应中的 `config` 由 SDK 另行构造。
27
43
  */
28
44
  export interface MiniProgramNetworkRequestConfig {
29
- /** 请求地址。 */
45
+ /**
46
+ * 绝对请求地址。必须是无 username/password 的 HTTP(S) URL;生产环境只允许 HTTPS,本地
47
+ * 开发仅允许 Host 明确放行的数字 loopback/LAN HTTP origin。官方域名要求
48
+ * `package.json#heybox.permissions.network.useOfficialDomain` 的声明值与平台批准值都为
49
+ * `true`;Runtime auth、OpenAPI 内部路径和官方账号敏感路径始终禁止访问。
50
+ */
30
51
  url: string;
31
- /** HTTP 方法,默认 `GET`。 */
52
+ /** HTTP 方法,默认 `GET`;仅支持 {@link MiniProgramNetworkRequestMethod} 中列出的值。 */
32
53
  method?: MiniProgramNetworkRequestMethod;
33
- /** 查询参数,会被编码到请求 URL。 */
54
+ /** 查询参数;必须是普通对象,SDK 会递归复制 plain object/array 后交给 Host 编码。 */
34
55
  params?: MiniProgramNetworkParams;
35
- /** 请求体。 */
56
+ /**
57
+ * 请求体。
58
+ *
59
+ * @remarks
60
+ * 支持可序列化的 JSON-compatible 值与原始字符串,总大小不得超过 2 MiB。plain object/array
61
+ * 会递归复制,因此复用同一子对象可以,但循环引用会以 `INVALID_PARAMS` 拒绝。`GET`/`HEAD`
62
+ * 不应携带 body。
63
+ *
64
+ * 第三方 URL 的非字符串 JSON-compatible 值默认按 JSON 发送;官方域名为兼容既有 Host,
65
+ * plain object/array 在未显式设置 Content-Type 时默认按 form 编码。要强制 JSON,请设置
66
+ * `Content-Type: application/json`;表单请传
67
+ * `new URLSearchParams(values).toString()` 并设置
68
+ * `application/x-www-form-urlencoded`。
69
+ *
70
+ * 不支持 `FormData`、`Blob`、File/Directory 代理、`ArrayBuffer`、TypedArray、`DataView`、
71
+ * `SharedArrayBuffer` 或它们的嵌套值。`multipart/form-data` 与手写 multipart body 均不可用;
72
+ * 文件传输应使用专用能力。
73
+ */
36
74
  data?: unknown;
37
- /** 请求头。 */
75
+ /**
76
+ * 请求头;规则见 {@link MiniProgramNetworkHeaders}。调用方显式提供的普通 `Cookie` /
77
+ * `Authorization` 可作为应用 Header 交给 Host,但 SDK 不提供平台 Cookie/token,且不得在
78
+ * 小程序中持有或发送平台凭据、服务端应用密钥等敏感信息。
79
+ */
38
80
  headers?: MiniProgramNetworkHeaders;
39
- /** 超时时间,单位毫秒。 */
81
+ /**
82
+ * Host 请求超时,单位毫秒;必须是 `0` 至 `30000` 的有限数字。省略或 `0` 时的具体默认
83
+ * 行为由 Host 决定;业务需要明确超时时应传正数。
84
+ */
40
85
  timeout?: number;
41
- /** SDK 侧状态校验;不会跨 bridge 传输函数值。 */
86
+ /** SDK 侧状态校验;默认只接受 2xx,函数本身不会跨 bridge,详见 {@link MiniProgramNetworkValidateStatus}。 */
42
87
  validateStatus?: MiniProgramNetworkValidateStatus;
43
88
  }
44
- /** 流式下载的 request-scoped 进度。 */
89
+ /**
90
+ * 流式下载的 request-scoped 进度。
91
+ *
92
+ * @remarks
93
+ * Runtime 会过滤倒退、负数、超出可信 `Content-Length` 或 `maxBytes` 的进度,并在原子提交后、
94
+ * `download()` resolve 前发送一次最终进度。最终值可能与上一次相同,空文件也会发送
95
+ * `loaded: 0`;不要依赖回调次数或严格递增。
96
+ */
45
97
  export interface DownloadProgress {
98
+ /** 已接收并写入临时目标的非负字节数;原子提交完成前不表示原目标已改变。 */
46
99
  loaded: number;
100
+ /** 可从可信响应 framing 确定总长度时的非负字节数;未知、分块或压缩响应时省略。 */
47
101
  total?: number;
102
+ /** `total` 是否存在且可用于计算百分比;为 `false` 时应展示不定进度。 */
48
103
  lengthComputable: boolean;
49
104
  }
105
+ /**
106
+ * 流式下载两种 target 分支共享的地址、限制、取消与进度选项。
107
+ *
108
+ * @remarks
109
+ * 下载固定使用 GET、拒绝重定向,不接受 `method`、`data`、`body`、Range/If-Range/A-IM
110
+ * 等部分响应字段。响应字节由 Host 直接写入临时目标,不经过 iframe bridge。
111
+ */
50
112
  export interface DownloadBaseOptions {
113
+ /**
114
+ * 下载地址。必须是无 username/password 的 HTTP(S) URL;生产环境只允许 HTTPS,本地开发
115
+ * 仅允许 Host 明确放行的 loopback/LAN HTTP origin。当前公开 Host 的流式下载 adapter 不支持
116
+ * 小黑盒官方域名,即使 `network.useOfficialDomain` 已声明并获批也不应依赖;Runtime/账号
117
+ * 敏感路径始终禁止访问。
118
+ */
51
119
  url: string;
120
+ /** 查询参数;必须是对象,SDK 会复制后交给 Host 编码到下载 URL。 */
52
121
  params?: MiniProgramNetworkParams;
122
+ /**
123
+ * 请求头;必须是合法的字符串字典。Host/framing/hop-by-hop、平台保留认证头以及
124
+ * `Range`、`If-Range`、`A-IM` 会以 `INVALID_PARAMS` 拒绝。普通 `Authorization` / `Cookie`
125
+ * 不会被 Runtime 一律拒绝,但移动端下载不会自动附带 Host credential;鉴权资源优先使用
126
+ * 短期签名 URL。
127
+ */
53
128
  headers?: MiniProgramNetworkHeaders;
129
+ /** 网络与响应 body 的空闲超时,单位毫秒;必须是有限正数,不是整个下载的总时长。 */
54
130
  timeout?: number;
131
+ /**
132
+ * 单次下载可提交的最大字节数;必须是正的 safe integer。可信 `Content-Length` 已超限时
133
+ * 会在写入前返回 `FILE_TOO_LARGE`,流式传输过程中超限也不会提交部分文件。
134
+ */
55
135
  maxBytes?: number;
136
+ /**
137
+ * 用于取消当前下载。调用前已 aborted 会立即返回 `DOWNLOAD_CANCELLED`;提交前取消获胜时
138
+ * 原目标保持不变,Host 已完成原子提交时则成功结果优先。
139
+ */
56
140
  signal?: AbortSignal;
141
+ /**
142
+ * 接收当前下载的标准化 {@link DownloadProgress}。回调本身不会序列化到 bridge;回调抛错
143
+ * 不会中断下载。`lengthComputable` 为 `false` 时不要按 `total` 计算百分比。
144
+ */
57
145
  onProgress?: (progress: DownloadProgress) => void;
58
146
  }
59
- /** File target 原子替换,Directory target 创建或替换子文件。 */
147
+ /**
148
+ * 下载目标选项。
149
+ *
150
+ * @remarks
151
+ * File target 必须是当前 SDK session 中已存在的 `readwrite` {@link FileHandle}。下载成功后
152
+ * 原子替换该文件并返回传入的同一个代理,不接受 `suggestedName` 或 `overwrite`。
153
+ *
154
+ * Directory target 必须是当前 SDK session 中已存在的 `readwrite` {@link DirectoryHandle}。
155
+ * 下载会在其中创建一个直接子文件并返回新的冻结 `readwrite` File 代理;默认独占创建,
156
+ * 同名目标返回 `FILE_ALREADY_EXISTS`,仅 `overwrite: true` 允许原子创建或替换。
157
+ */
60
158
  export type DownloadOptions = DownloadBaseOptions & ({
159
+ /** 当前 SDK session 创建的 `readwrite` File 代理;目标文件必须已存在。成功后返回同一代理。 */
61
160
  to: FileHandle;
161
+ /** File target 不接受该字段;即使显式传入字符串也返回 `INVALID_PARAMS`。 */
62
162
  suggestedName?: never;
163
+ /** File target 固定原子替换,不接受该字段;即使显式传入 boolean 也返回 `INVALID_PARAMS`。 */
63
164
  overwrite?: never;
64
165
  } | {
166
+ /** 当前 SDK session 创建的、已存在的 `readwrite` Directory 代理;成功后返回其直接子 File 代理。 */
65
167
  to: DirectoryHandle;
168
+ /**
169
+ * 建议的安全子文件 basename。服务端安全 `Content-Disposition filename*` / `filename`
170
+ * 优先于该值;之后依次回退 URL basename 与 `download.bin`。不能包含路径分隔符、点段、
171
+ * 控制字符、Windows 保留名或尾随点/空格,最长 255 个 Unicode 字符。
172
+ */
66
173
  suggestedName?: string;
174
+ /** 是否允许原子创建或替换目录内的同名文件,默认 `false`;`false` 时采用独占创建。 */
67
175
  overwrite?: boolean;
68
176
  });
69
177
  /**
@@ -73,44 +181,124 @@ export type DownloadOptions = DownloadBaseOptions & ({
73
181
  * 这是从公开配置中裁剪得到的可序列化请求载荷,不包含函数值或内部实现细节。
74
182
  */
75
183
  export interface NetworkRequestPayload {
184
+ /** 请求地址。 */
76
185
  url: string;
186
+ /** HTTP 方法;省略时由 Host 按 `GET` 处理。 */
77
187
  method?: MiniProgramNetworkRequestMethod;
188
+ /** 查询参数。 */
78
189
  params?: MiniProgramNetworkParams;
190
+ /** 可序列化请求体。 */
79
191
  data?: unknown;
192
+ /** 字符串请求头。 */
80
193
  headers?: MiniProgramNetworkHeaders;
194
+ /** 请求超时时间,单位毫秒。 */
81
195
  timeout?: number;
82
196
  }
83
197
  /**
84
198
  * bridge / runtime 返回的标准化 HTTP 响应。
85
199
  *
86
- * @typeParam T - 标准化响应数据的类型。
200
+ * @typeParam T - 调用方声明的响应数据类型;只影响 TypeScript,不执行运行时 schema 校验。
87
201
  */
88
202
  export interface NetworkResponsePayload<T = unknown> {
203
+ /** Host 标准化后的响应数据;泛型 `T` 只提供 TypeScript 类型,不执行运行时 schema 校验。 */
89
204
  data: T;
205
+ /** 已完成 HTTP 响应的状态码。 */
90
206
  status: number;
207
+ /** 可用时的 HTTP 状态文本。 */
91
208
  statusText?: string;
209
+ /**
210
+ * Host 返回的安全字符串响应头;无有效响应头时为空对象。`Set-Cookie`、认证凭据以及
211
+ * `x-heybox-*` / `x-xhh-*` 平台保留 Header 会在跨 bridge 前移除。
212
+ */
92
213
  headers: MiniProgramNetworkHeaders;
93
214
  }
94
215
  /**
95
216
  * SDK 对外暴露的网络响应。
96
217
  *
97
- * @typeParam T - 标准化响应数据的类型。
218
+ * @typeParam T - 调用方期望的响应数据类型;SDK 不会在运行时校验 Host 返回值是否符合该类型。
219
+ *
220
+ * @remarks
221
+ * `config` 不包含 Host 内部 route、body encoding、Cookie 状态或协议字段。bridge 请求在调用时
222
+ * 使用独立克隆;响应完成时,SDK 再从原始公开 config 构造响应快照,递归复制其中的 plain
223
+ * object/array,并保留同一个 `validateStatus` 函数引用。因此请求进行期间对原 config 的修改
224
+ * 不会改变已发送 payload,但可能反映在完成时生成的 `response.config` 中。
98
225
  */
99
226
  export interface MiniProgramNetworkResponse<T = unknown> extends NetworkResponsePayload<T> {
100
- /** 发起请求时的 SDK 公共配置快照。 */
227
+ /** 响应标准化时构造的 SDK 公共配置快照;对象和数组已复制,`validateStatus` 保留原函数引用。 */
101
228
  config: MiniProgramNetworkRequestConfig;
102
229
  }
103
230
  export type { MiniProgramNetworkMethod } from '../../protocol/capabilities';
104
- /** 外部小程序可调用的网络模块。 */
231
+ /**
232
+ * Mini-program 可调用的受控网络模块。
233
+ *
234
+ * @remarks
235
+ * `request()` 与 `download()` 都要求声明并获得 `network` 平台批准,并使用 no-follow redirect policy。
236
+ * `download()` 还要求 `filesystem`,且响应字节由 Host 直接写入受控目标,不经过 iframe bridge。
237
+ */
105
238
  export interface MiniProgramNetworkModule {
106
239
  /**
107
240
  * 发起网络请求。
108
241
  *
109
- * @param config - 面向业务层的网络请求配置。
110
- * @returns 标准化网络响应;HTTP 2xx 默认返回 resolve。
111
- * @throws 当请求已完成但 HTTP 状态不满足 `validateStatus` 时抛出 `HbMiniProgramNetworkError`。
112
- * @throws 当 bridge、运行时或宿主能力调用失败时抛出 `HbMiniProgramSDKError`。
113
- * @remarks 自 0.8.1-alpha.7 起不再支持 `withCredentials` 配置:传入会被忽略且不报错,请从代码中移除;原生 Cookie 由客户端按目标域名决定。该 method 本身仍受支持,V1 没有替代调用入口。
242
+ * @typeParam T - 调用方期望的响应 data 类型;只影响 TypeScript,不做运行时 schema 校验。
243
+ * @param config - URL、方法、查询、body、Header、Host timeout 与 SDK 状态校验配置,详见
244
+ * {@link MiniProgramNetworkRequestConfig}。
245
+ * @returns 通过 `validateStatus` 的标准化 {@link MiniProgramNetworkResponse};默认仅 2xx
246
+ * resolve。响应包含安全 Header 与公开 config 快照。
247
+ * @throws {@link HbMiniProgramNetworkError} Host 已完成 HTTP 响应,但状态未通过
248
+ * `validateStatus` 时抛出;错误的 `status`、`data`、安全 `headers`、`config` 与 `response`
249
+ * 可用于业务分支。它不表示权限、bridge 或网络不可达。
250
+ * @throws {@link HbMiniProgramSDKError} 配置/数据/Header 非法时返回 `INVALID_PARAMS`;未声明、
251
+ * 未批准 `network` 或未获官方域名批准时返回 `PERMISSION_NOT_DECLARED` /
252
+ * `PERMISSION_DENIED`;Host 不支持请求形态时返回 `REQUEST_UNSUPPORTED`,Host/transport
253
+ * 失败返回 `REQUEST_FAILED`,Host 能力关闭或旧 Runtime 不认识 method 时可返回
254
+ * `METHOD_FORBIDDEN` / `METHOD_NOT_FOUND`,响应结构无效返回 `INVALID_NETWORK_RESPONSE`;
255
+ * 其他握手、bridge 或 Host 错误保留对应 SDK 错误码。
256
+ *
257
+ * @remarks
258
+ * 该 API 需要在 `package.json#heybox.permissions` 声明并启用 `network`,且取得平台批准;
259
+ * 不需要 `filesystem` 或可信用户手势。`useOfficialDomain` 只有开发者声明与平台批准都为
260
+ * `true` 时生效,并且不会绕过 HTTPS、敏感路径、Header、body、timeout 或响应策略。
261
+ *
262
+ * 公开请求使用 no-follow redirect policy。3xx 不会自动访问 `Location`;它作为已完成响应
263
+ * 返回到 SDK,默认触发 {@link HbMiniProgramNetworkError},只有自定义 `validateStatus`
264
+ * 接受时才 resolve。平台保留的 Runtime auth/OpenAPI 路径始终不能通过该能力访问。
265
+ *
266
+ * 自 0.8.1-alpha.7 起公开 config 不再支持 `withCredentials`;JavaScript 仍传入时会被 SDK
267
+ * 忽略且不报错,也不会把凭据开关传给 Host。原生 Cookie 是否随请求发送由 Host 按目标
268
+ * 域名决定,iframe Cookie 不会由 SDK 自动读取;响应中的 `Set-Cookie` 与认证 Header 不会
269
+ * 暴露给页面。应用显式 Header 仍必须遵守敏感信息边界。
270
+ *
271
+ * Browser Dev Host 与真实 App Host 都拒绝 multipart,并执行相同的 no-follow、官方域名和
272
+ * 敏感路径策略;本地代理另有 5 MiB 响应体上限,真机 Host 仍可能有不同的响应限制。
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * import hbSDK from '@heybox/hb-sdk'
277
+ *
278
+ * type ItemsResult = { items: string[] } | { message: string }
279
+ *
280
+ * const response = await hbSDK.network.request<ItemsResult>({
281
+ * url: 'https://api.example.com/items',
282
+ * method: 'POST',
283
+ * params: { page: 1, locale: 'zh-CN' },
284
+ * data: { filters: ['owned'] },
285
+ * headers: { 'content-type': 'application/json', 'x-request-id': 'request-1' },
286
+ * timeout: 10_000,
287
+ * validateStatus: (status) => (status >= 200 && status < 300) || status === 404,
288
+ * })
289
+ *
290
+ * if (response.status === 404) console.log('暂无数据')
291
+ * else if ('items' in response.data) console.log(response.data.items)
292
+ * ```
293
+ *
294
+ * @see {@link MiniProgramNetworkRequestConfig}
295
+ * @see {@link MiniProgramNetworkResponse}
296
+ * @see {@link HbMiniProgramNetworkError}
297
+ * @see {@link HbMiniProgramSDKError}
298
+ * @see {@link MiniProgramNetworkModule.download | network.download}
299
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/error-handling | 错误处理}
300
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/permissions | 权限声明}
301
+ *
114
302
  * @since 0.2.0-alpha.0
115
303
  * @hbPlatform android
116
304
  * @hbPlatform ios
@@ -127,8 +315,84 @@ export interface MiniProgramNetworkModule {
127
315
  /**
128
316
  * 将 GET 响应流式写入受控 File/Directory target。
129
317
  *
130
- * @param options - 下载地址、写入目标、取消信号与进度回调。
131
- * @returns 原子提交完成后的目标文件代理。
318
+ * @param options - 下载地址、File/Directory 写入目标、限制、取消信号与进度回调;两种 target
319
+ * 分支及全部字段见 {@link DownloadOptions}。
320
+ * @returns Host 完成原子提交后的 `readwrite` {@link FileHandle}。File target 返回传入的同一
321
+ * 代理;Directory target 返回目标目录中新建或替换的直接子 File 代理。
322
+ * @throws {@link HbMiniProgramSDKError} 参数、URL、Header、目标或 Host 返回值不合法时返回
323
+ * `INVALID_PARAMS` / `INVALID_NETWORK_RESPONSE`;未声明或未启用 `network`、`filesystem`
324
+ * 时返回 `PERMISSION_NOT_DECLARED` / `PERMISSION_DENIED`;Host 能力缺失时返回
325
+ * `METHOD_FORBIDDEN`,旧 Runtime 可返回 `METHOD_NOT_FOUND`。
326
+ * @throws {@link HbMiniProgramSDKError} 非成功或部分 HTTP 响应返回 `DOWNLOAD_HTTP_STATUS`;
327
+ * 网络/响应 framing 失败、空闲超时、提交前取消或超出 `maxBytes` 分别返回
328
+ * `DOWNLOAD_NETWORK_FAILED`、`DOWNLOAD_TIMEOUT`、`DOWNLOAD_CANCELLED`、`FILE_TOO_LARGE`。
329
+ * 文件授权、存在性、同名冲突、类型、配额和 I/O 失败返回对应稳定 `FILE_*` /
330
+ * `DIRECTORY_*` 错误码。下载不会抛出 {@link HbMiniProgramNetworkError}。
331
+ *
332
+ * @remarks
333
+ * 需要同时声明并启用 `network` 与 `filesystem`,其中 `network` 还必须获得平台批准;访问
334
+ * 当前公开 Host 的流式下载 adapter 不支持小黑盒官方域名;`useOfficialDomain` 的批准不能
335
+ * 单独保证 `download()` 可用,也不会绕过敏感路径、Header、重定向、大小或超时策略。
336
+ * 下载本身不要求可信用户手势,但外部 File/Directory
337
+ * 必须事先通过 files picker 或 `saveFile()` 获得当前 session 的 `readwrite` 授权。
338
+ *
339
+ * 固定使用 GET,不跟随重定向,也不接受 body、Range、上传或自定义 `validateStatus`。
340
+ * 非 2xx、206、226 与 `Content-Range` 都不会进入文件提交;`DOWNLOAD_HTTP_STATUS.data`
341
+ * 仅包含脱敏的 status、可选 statusText 和安全响应头。响应字节留在 Host,并直接流式写入
342
+ * 临时目标,不经过 iframe bridge。
343
+ *
344
+ * `timeout` 是网络/响应 body 空闲超时;`maxBytes` 是单次提交上限。Host 只有在长度与大小
345
+ * 约束全部满足并完成原子提交后才会 resolve。取消、超时、超限或其他失败不会改动原目标;
346
+ * signal 与原子提交竞态时,提交前取消返回 `DOWNLOAD_CANCELLED`,提交已完成则仍返回成功。
347
+ *
348
+ * Directory 文件名按安全的 `Content-Disposition filename*`、`filename`、`suggestedName`、
349
+ * URL basename、`download.bin` 依次选择;不安全的响应候选会跳过,但调用方显式提供的非法
350
+ * `suggestedName` 会在 Host I/O 前返回 `INVALID_PARAMS`。
351
+ *
352
+ * @example
353
+ * ```ts
354
+ * import hbSDK from '@heybox/hb-sdk'
355
+ *
356
+ * const directory = hbSDK.files.sandbox.directory('downloads')
357
+ * await directory.create({ recursive: true })
358
+ *
359
+ * const controller = new AbortController()
360
+ * const file = await hbSDK.network.download({
361
+ * url: 'https://cdn.example.com/report.json',
362
+ * to: directory,
363
+ * params: { format: 'full' },
364
+ * headers: { accept: 'application/json' },
365
+ * suggestedName: 'report.json',
366
+ * overwrite: true,
367
+ * timeout: 15_000,
368
+ * maxBytes: 8 * 1024 * 1024,
369
+ * signal: controller.signal,
370
+ * onProgress: ({ loaded, total, lengthComputable }) => {
371
+ * console.log(lengthComputable ? `${loaded}/${total}` : loaded)
372
+ * },
373
+ * })
374
+ *
375
+ * const exactFile = hbSDK.files.sandbox.file('downloads/latest.json')
376
+ * await exactFile.create()
377
+ * const replaced = await hbSDK.network.download({
378
+ * url: 'https://cdn.example.com/latest.json',
379
+ * to: exactFile,
380
+ * })
381
+ * console.log(replaced === exactFile) // true
382
+ * ```
383
+ *
384
+ * @see {@link DownloadOptions}
385
+ * @see {@link DownloadProgress}
386
+ * @see {@link FileSystem.file | files.sandbox.file}
387
+ * @see {@link FileSystem.directory | files.sandbox.directory}
388
+ * @see {@link FilesModule.pickFiles | files.pickFiles}
389
+ * @see {@link FilesModule.pickDirectory | files.pickDirectory}
390
+ * @see {@link FilesModule.saveFile | files.saveFile}
391
+ * @see {@link MiniProgramNetworkModule.request | network.request}
392
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/files-and-sandbox | 文件能力与沙箱}
393
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/error-handling | 错误处理}
394
+ * @see {@link https://docs.xiaoheihe.cn/hb_sdk/guide/permissions | 权限声明}
395
+ *
132
396
  * @since 0.8.0-alpha.2
133
397
  * @hbPlatform android
134
398
  * @hbPlatform ios
@@ -165,7 +429,14 @@ export interface MiniProgramNetworkModule {
165
429
  * ```
166
430
  */
167
431
  export declare function request<T = unknown>(requester: MiniProgramRequester, config: MiniProgramNetworkRequestConfig): Promise<MiniProgramNetworkResponse<T>>;
168
- /** 发起不使用 bridge 固定总时长 timer 的流式下载。 */
432
+ /**
433
+ * 发起不使用 bridge 固定总时长 timer 的流式下载。
434
+ *
435
+ * @param requester - 支持 request-scoped 取消与进度的 bridge 请求能力。
436
+ * @param options - 下载地址、受控写入目标、限制、取消信号与进度回调。
437
+ * @returns 原子提交完成后的 File 代理。
438
+ * @throws {@link HbMiniProgramSDKError} 参数、权限、目标、网络、取消或 Host 响应不符合公开合同时抛出。
439
+ */
169
440
  export declare function download(requester: MiniProgramOperationRequester, options: DownloadOptions): Promise<FileHandle>;
170
441
  /**
171
442
  * 创建 network 模块。
@@ -1,16 +1,46 @@
1
1
  import type { MiniProgramRequester } from '../../core/client';
2
2
  import type { MiniProgramCopyLinkOptions } from './types';
3
3
  export { SHARE_COPY_LINK_METHOD } from '../../protocol/capabilities';
4
- /** `share.copyLink` 入参。 */
4
+ /** `share.copyLink` 入参;省略后生成不带 `extra` 的通用分享链接。 */
5
5
  export type CopyLinkPayload = MiniProgramCopyLinkOptions | undefined;
6
- /** `share.copyLink` 返回已复制的完整分享链接。 */
6
+ /**
7
+ * `share.copyLink` 返回值;内容与 Host 已写入系统剪贴板的完整分享链接一致。
8
+ *
9
+ * @remarks Promise 只在剪贴板写入成功后 resolve;写入失败时调用直接 reject,不返回链接。
10
+ */
7
11
  export type CopyLinkResult = string;
8
12
  /**
9
13
  * 复制当前小程序的通用分享链接。
10
14
  *
11
15
  * @param requester - 底层 bridge 请求能力。
12
- * @param options - 分享扩展数据;不传时复制默认首页链接。
13
- * @returns 已写入系统剪贴板的完整分享链接。
14
- * @throws {@link HbMiniProgramSDKError} 当参数、bridge、父容器或剪贴板能力调用失败时抛出。
16
+ * @param options - 可选配置;只接受本次链接需要携带的 `extra`。省略 `options` 或
17
+ * `options.extra` 时生成不带扩展数据的链接。
18
+ * @returns Host 完成剪贴板写入后 resolve 的完整分享链接;返回字符串与剪贴板内容一致。
19
+ * @throws {@link HbMiniProgramSDKError} 参数、`extra` 编码或小程序身份不合法时返回
20
+ * `INVALID_PARAMS`;未声明或未启用 `share` 权限时分别返回
21
+ * `PERMISSION_NOT_DECLARED` 或 `PERMISSION_DENIED`;当前 Host 未开放剪贴板能力时可返回
22
+ * `METHOD_FORBIDDEN` 或 `REQUEST_UNSUPPORTED`。握手、bridge 超时和其他 Host 写入失败会保留
23
+ * 对应错误码。
24
+ *
25
+ * @remarks 该方法生成当前小程序的固定通用落地页,不复制当前页面路径或 hash,也不继承
26
+ * 启动 URL 中已有的 `extra`。显式传入的 `extra` 会先编码,再作为 Base64URL 参数写入链接;
27
+ * 接收方使用 {@link MiniProgramShareModule.getExtra | share.getExtra} 读取还原值。
28
+ *
29
+ * 该调用需要声明 `share` 权限,但不额外要求 `clipboard` 权限或可信用户手势。它只写入
30
+ * 系统剪贴板,不会打开分享面板或自动显示成功提示。
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import hbSDK from '@heybox/hb-sdk'
35
+ *
36
+ * const copiedUrl = await hbSDK.share.copyLink({
37
+ * extra: { page: 'ranking', season: 12 },
38
+ * })
39
+ *
40
+ * console.log('已复制分享链接', copiedUrl)
41
+ * ```
42
+ *
43
+ * @see {@link MiniProgramShareModule.getExtra | share.getExtra}
44
+ * @see {@link MiniProgramShareModule.showShareMenu | share.showShareMenu}
15
45
  */
16
46
  export declare function copyLink(requester: MiniProgramRequester, options?: MiniProgramCopyLinkOptions): Promise<CopyLinkResult>;