@heybox/hb-sdk 0.2.0-alpha.0 → 0.2.0-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/README.md +193 -452
- package/bin/hb-sdk.cjs +1 -1
- package/dist/cli.cjs +71660 -3903
- package/dist/devtools/mock-host/index.html +13 -387
- package/dist/devtools/mock-host/main.js +975 -0
- package/dist/index.cjs.js +50 -63
- package/dist/index.esm.js +51 -50
- package/dist/miniapp-publish.cjs.js +77 -0
- package/dist/miniapp-publish.esm.js +66 -0
- package/dist/protocol.cjs.js +72 -13
- package/dist/protocol.esm.js +72 -14
- package/dist/templates/vue3-vite-ts/README.md.ejs +1 -5
- package/dist/templates/vue3-vite-ts/package.json.ejs +0 -1
- package/dist/templates/vue3-vite-ts/vite.config.ts +2 -1
- package/dist/vite.cjs.js +62 -0
- package/dist/vite.esm.js +60 -0
- package/package.json +30 -1
- package/skill/SKILL.md +106 -0
- package/skill/references/api-protocol.md +135 -0
- package/skill/references/api-root.md +474 -0
- package/skill/references/cli.md +376 -0
- package/skill/references/examples.md +119 -0
- package/skill/references/llms-index.md +44 -0
- package/skill/references/recipes.md +374 -0
- package/skill/references/safety-boundaries.md +30 -0
- package/skill/references/smoke-evaluation.md +24 -0
- package/skill/scripts/check-references.mjs +14 -0
- package/skill/scripts/package-skill.mjs +60 -0
- package/skill/scripts/package-skill.sh +6 -0
- package/skill/scripts/skill-metadata.mjs +74 -0
- package/skill/scripts/sync-references.mjs +565 -0
- package/skill/scripts/validate-skill.mjs +235 -0
- package/skill/skill.json +11 -0
- package/types/index.d.ts +8 -6
- package/types/miniapp-publish/index.d.ts +23 -0
- package/types/modules/auth/index.d.ts +2 -9
- package/types/modules/network/index.d.ts +6 -11
- package/types/modules/share/index.d.ts +3 -9
- package/types/modules/share/screenshot.d.ts +1 -7
- package/types/modules/share/show-share-menu.d.ts +1 -7
- package/types/modules/storage/index.d.ts +2 -16
- package/types/modules/user/get-info.d.ts +1 -7
- package/types/modules/user/index.d.ts +2 -8
- package/types/modules/viewport/index.d.ts +2 -9
- package/types/protocol/capabilities.d.ts +180 -0
- package/types/protocol.d.ts +8 -13
- package/types/vite/index.d.ts +17 -0
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# Root API reference
|
|
2
|
+
|
|
3
|
+
> Generated by `node packages/hb-sdk/skill/scripts/sync-references.mjs` from the public hb-sdk source/docs. Do not edit by hand; update sources or this generator instead.
|
|
4
|
+
|
|
5
|
+
## Sources
|
|
6
|
+
|
|
7
|
+
- packages/hb-sdk/package.json
|
|
8
|
+
- packages/hb-sdk/src/index.ts
|
|
9
|
+
- packages/hb-sdk/src/vite/index.ts
|
|
10
|
+
- packages/hb-sdk/README.md
|
|
11
|
+
|
|
12
|
+
## Contents
|
|
13
|
+
|
|
14
|
+
- [Package metadata](#package-metadata)
|
|
15
|
+
- [Public root entrypoint](#public-root-entrypoint)
|
|
16
|
+
- [Vite plugin export](#vite-plugin-export)
|
|
17
|
+
- [App-facing concepts](#app-facing-concepts)
|
|
18
|
+
- [Public modules](#public-modules)
|
|
19
|
+
## Package metadata
|
|
20
|
+
|
|
21
|
+
- Package: `@heybox/hb-sdk`
|
|
22
|
+
- Version at generation time: `0.2.0-alpha.2`
|
|
23
|
+
- Public root export: `@heybox/hb-sdk`
|
|
24
|
+
- Protocol export: `@heybox/hb-sdk/protocol`
|
|
25
|
+
- Vite plugin export: `@heybox/hb-sdk/vite`
|
|
26
|
+
|
|
27
|
+
## Public root entrypoint
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
export { createMiniProgramSDK, MiniProgramSDK } from './core/sdk';
|
|
31
|
+
export { HbMiniProgramSDKError, HbMiniProgramNetworkError } from './core/errors';
|
|
32
|
+
export type { MiniProgramRequester, MiniProgramSDKOptions } from './core/client';
|
|
33
|
+
export { ready, on, off, auth, user, share, viewport, storage, network } from './core/singleton';
|
|
34
|
+
export {
|
|
35
|
+
MINI_PROGRAM_BRIDGE_NONCE_PARAM,
|
|
36
|
+
MINI_PROGRAM_MESSAGE_NAMESPACE,
|
|
37
|
+
MINI_PROGRAM_MESSAGE_VERSION,
|
|
38
|
+
SDK_HANDSHAKE_METHOD,
|
|
39
|
+
} from './protocol/constants';
|
|
40
|
+
export { isMiniProgramBridgeMessage } from './protocol/guards';
|
|
41
|
+
export type {
|
|
42
|
+
MiniProgramBridgeError,
|
|
43
|
+
MiniProgramBridgeMessage,
|
|
44
|
+
MiniProgramBridgeMessageType,
|
|
45
|
+
MiniProgramEventHandler,
|
|
46
|
+
MiniProgramEventName,
|
|
47
|
+
MiniProgramEventPayloadMap,
|
|
48
|
+
} from './protocol/types';
|
|
49
|
+
export {
|
|
50
|
+
AUTH_LOGIN_METHOD,
|
|
51
|
+
NETWORK_REQUEST_METHOD,
|
|
52
|
+
SHARE_SCREENSHOT_METHOD,
|
|
53
|
+
SHARE_SHOW_SHARE_MENU_METHOD,
|
|
54
|
+
STORAGE_GET_STORAGE_METHOD,
|
|
55
|
+
STORAGE_SET_STORAGE_METHOD,
|
|
56
|
+
USER_GET_INFO_METHOD,
|
|
57
|
+
VIEWPORT_GET_WINDOW_INFO_METHOD,
|
|
58
|
+
} from './protocol/capabilities';
|
|
59
|
+
export type {
|
|
60
|
+
MiniProgramAuthMethod,
|
|
61
|
+
MiniProgramBridgeMethod,
|
|
62
|
+
MiniProgramCapabilityDefinition,
|
|
63
|
+
MiniProgramCapabilityModule,
|
|
64
|
+
MiniProgramCapabilityPayload,
|
|
65
|
+
MiniProgramCapabilityPayloadMap,
|
|
66
|
+
MiniProgramCapabilityResult,
|
|
67
|
+
MiniProgramCapabilityResultMap,
|
|
68
|
+
MiniProgramCapabilityRisk,
|
|
69
|
+
MiniProgramNetworkMethod,
|
|
70
|
+
MiniProgramShareMethod,
|
|
71
|
+
MiniProgramStorageMethod,
|
|
72
|
+
MiniProgramUserMethod,
|
|
73
|
+
MiniProgramViewportMethod,
|
|
74
|
+
} from './protocol/capabilities';
|
|
75
|
+
export type { LoginPayload, LoginResult, MiniProgramAuthModule } from './modules/auth';
|
|
76
|
+
export type {
|
|
77
|
+
GetUserInfoPayload,
|
|
78
|
+
GetUserInfoResult,
|
|
79
|
+
MiniProgramUserInfo,
|
|
80
|
+
MiniProgramUserInfoResult,
|
|
81
|
+
MiniProgramUserModule,
|
|
82
|
+
} from './modules/user';
|
|
83
|
+
export type {
|
|
84
|
+
MiniProgramScreenshotOptions,
|
|
85
|
+
MiniProgramScreenshotRect,
|
|
86
|
+
MiniProgramShareChannel,
|
|
87
|
+
MiniProgramShareModule,
|
|
88
|
+
MiniProgramShowShareMenuOptions,
|
|
89
|
+
ScreenshotPayload,
|
|
90
|
+
ScreenshotResult,
|
|
91
|
+
ShowShareMenuPayload,
|
|
92
|
+
ShowShareMenuResult,
|
|
93
|
+
} from './modules/share';
|
|
94
|
+
export type {
|
|
95
|
+
GetWindowInfoPayload,
|
|
96
|
+
GetWindowInfoResult,
|
|
97
|
+
MiniProgramSafeArea,
|
|
98
|
+
MiniProgramViewportModule,
|
|
99
|
+
MiniProgramWindowInfoResult,
|
|
100
|
+
} from './modules/viewport';
|
|
101
|
+
export type {
|
|
102
|
+
GetStoragePayload,
|
|
103
|
+
GetStorageResult,
|
|
104
|
+
MiniProgramStorageModule,
|
|
105
|
+
SetStoragePayload,
|
|
106
|
+
} from './modules/storage';
|
|
107
|
+
export type {
|
|
108
|
+
MiniProgramNetworkHeaders,
|
|
109
|
+
MiniProgramNetworkModule,
|
|
110
|
+
MiniProgramNetworkParams,
|
|
111
|
+
MiniProgramNetworkRequestConfig,
|
|
112
|
+
MiniProgramNetworkRequestMethod,
|
|
113
|
+
MiniProgramNetworkResponse,
|
|
114
|
+
MiniProgramNetworkValidateStatus,
|
|
115
|
+
NetworkRequestPayload,
|
|
116
|
+
NetworkResponsePayload,
|
|
117
|
+
} from './modules/network';
|
|
118
|
+
|
|
119
|
+
import { auth, network, off, on, ready, share, storage, viewport, user } from './core/singleton';
|
|
120
|
+
|
|
121
|
+
const hbSDK = {
|
|
122
|
+
ready,
|
|
123
|
+
on,
|
|
124
|
+
off,
|
|
125
|
+
auth,
|
|
126
|
+
user,
|
|
127
|
+
share,
|
|
128
|
+
viewport,
|
|
129
|
+
storage,
|
|
130
|
+
network,
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export default hbSDK;
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Vite plugin export
|
|
137
|
+
|
|
138
|
+
Use `@heybox/hb-sdk/vite` only in `vite.config.ts`. Do not import it from iframe mini-program business code.
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
142
|
+
import path from 'node:path';
|
|
143
|
+
|
|
144
|
+
const TEMPLATE_VERSION = '0.0.0';
|
|
145
|
+
const SEMVER_LIKE_RE = /^\d+\.\d+\.\d+(?:[-+].*)?$/;
|
|
146
|
+
const TEMPLATE_VERSION_ERROR = '@heybox/hb-sdk 提示:请把 package.json.version 从模板默认的 0.0.0 改成实际版本号再发布';
|
|
147
|
+
|
|
148
|
+
type MiniappManifestPlugin = {
|
|
149
|
+
name: string;
|
|
150
|
+
apply: 'build';
|
|
151
|
+
configResolved: (resolved: MiniappManifestResolvedConfig) => void;
|
|
152
|
+
writeBundle: (this: MiniappManifestPluginContext) => void;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
interface MiniappManifestPluginContext {
|
|
156
|
+
warn: (message: string) => void;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
interface MiniappManifestResolvedConfig {
|
|
160
|
+
root: string;
|
|
161
|
+
build: {
|
|
162
|
+
outDir: string;
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function miniappManifest(): MiniappManifestPlugin {
|
|
167
|
+
let root = process.cwd();
|
|
168
|
+
let outDir = 'dist';
|
|
169
|
+
|
|
170
|
+
return {
|
|
171
|
+
name: 'heybox-miniapp-manifest',
|
|
172
|
+
apply: 'build',
|
|
173
|
+
configResolved(resolved) {
|
|
174
|
+
root = resolved.root;
|
|
175
|
+
outDir = resolved.build.outDir;
|
|
176
|
+
},
|
|
177
|
+
writeBundle() {
|
|
178
|
+
const version = readMiniappVersion(root);
|
|
179
|
+
|
|
180
|
+
if (!SEMVER_LIKE_RE.test(version)) {
|
|
181
|
+
this.warn(`package.json.version "${version}" 不是标准 semver,仍会写入 manifest.json`);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const manifestPath = path.resolve(root, outDir, 'manifest.json');
|
|
185
|
+
mkdirSync(path.dirname(manifestPath), { recursive: true });
|
|
186
|
+
writeFileSync(manifestPath, `${JSON.stringify({ version }, null, 2)}\n`);
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function readMiniappVersion(root: string): string {
|
|
192
|
+
const packageJsonPath = path.join(root, 'package.json');
|
|
193
|
+
let content: string;
|
|
194
|
+
|
|
195
|
+
try {
|
|
196
|
+
content = readFileSync(packageJsonPath, 'utf8');
|
|
197
|
+
} catch (error) {
|
|
198
|
+
throw new Error(`@heybox/hb-sdk 读取 package.json 失败:${formatReason(error)}`);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
let packageJson: { version?: unknown };
|
|
202
|
+
|
|
203
|
+
try {
|
|
204
|
+
packageJson = JSON.parse(content) as { version?: unknown };
|
|
205
|
+
} catch (error) {
|
|
206
|
+
throw new Error(`@heybox/hb-sdk 解析 package.json 失败:${formatReason(error)}`);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (typeof packageJson.version !== 'string' || packageJson.version.trim() === '') {
|
|
210
|
+
throw new Error('@heybox/hb-sdk 提示:package.json.version 必须是非空字符串');
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const version = packageJson.version.trim();
|
|
214
|
+
|
|
215
|
+
if (version === TEMPLATE_VERSION) {
|
|
216
|
+
throw new Error(TEMPLATE_VERSION_ERROR);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return version;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function formatReason(error: unknown): string {
|
|
223
|
+
if (error instanceof Error && error.message) {
|
|
224
|
+
return error.message;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return String(error);
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Manifest
|
|
232
|
+
|
|
233
|
+
`@heybox/hb-sdk/vite` 提供构建时插件 `miniappManifest()`。Vite 项目完成 `vite build` 后,会在输出目录写入 `manifest.json`:
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"version": "1.2.3"
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
`version` 来自小程序项目自身的 `package.json.version`。`hb-sdk create` 生成的模板默认已注册插件;现有 Vite 项目可以在 `vite.config.ts` 中手动接入:
|
|
242
|
+
|
|
243
|
+
```ts
|
|
244
|
+
import { miniappManifest } from '@heybox/hb-sdk/vite';
|
|
245
|
+
import { defineConfig } from 'vite';
|
|
246
|
+
|
|
247
|
+
export default defineConfig({
|
|
248
|
+
plugins: [miniappManifest()],
|
|
249
|
+
});
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
失败与警告语义:
|
|
253
|
+
|
|
254
|
+
- 读取 `package.json` 失败或 JSON 解析失败:`vite build` 直接失败,并输出具体原因。
|
|
255
|
+
- `package.json.version` 不是非空字符串:`vite build` 直接失败。
|
|
256
|
+
- `package.json.version` 仍是模板默认值 `0.0.0`:`vite build` 直接失败,并提示把模板默认版本改成实际版本号再发布。
|
|
257
|
+
- 版本号不满足极简 semver 形态 `x.y.z`:只输出 Rollup/Vite warning,仍会写入 manifest。
|
|
258
|
+
|
|
259
|
+
`manifest.json` 不部署到 CDN,只交给发布流水线读取后上送后台;Host 通过后台 API 间接读取版本信息。第一阶段只支持 Vite 项目,非 Vite 打包器未来通过其他子入口扩展。
|
|
260
|
+
|
|
261
|
+
## App-facing concepts
|
|
262
|
+
|
|
263
|
+
## 快速开始
|
|
264
|
+
|
|
265
|
+
创建一个新的外部小程序项目:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
npx @heybox/hb-sdk create my-miniapp
|
|
269
|
+
cd my-miniapp
|
|
270
|
+
npm install
|
|
271
|
+
npm run dev
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
模板默认使用 Vue 3、Vite、TypeScript 和 npm。`npm run dev` 会启动小程序页面服务,并打开 `hb-sdk` 内置的浏览器 mock 宿主环境,适合在普通浏览器里调试 SDK 能力;调试页内可点击按钮在 Mac 版 APP 中启动同一页面。
|
|
275
|
+
|
|
276
|
+
在已有项目中安装:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
npm install @heybox/hb-sdk
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
然后在页面入口等待父容器 ready:
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
import hbSDK from '@heybox/hb-sdk';
|
|
286
|
+
|
|
287
|
+
await hbSDK.ready();
|
|
288
|
+
|
|
289
|
+
const user = await hbSDK.user.getInfo();
|
|
290
|
+
|
|
291
|
+
if (user.isLogin) {
|
|
292
|
+
console.log(user.userInfo.nickname);
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
也可以按需导入:
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
import { auth, ready, user } from '@heybox/hb-sdk';
|
|
300
|
+
|
|
301
|
+
await ready();
|
|
302
|
+
|
|
303
|
+
const currentUser = await user.getInfo();
|
|
304
|
+
|
|
305
|
+
if (!currentUser.isLogin) {
|
|
306
|
+
await auth.login();
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## 运行环境
|
|
311
|
+
|
|
312
|
+
SDK 需要在黑盒小程序 iframe 容器内运行。父容器会为页面注入 bridge nonce,并通过 `postMessage` 与 SDK 通信。普通浏览器直接打开小程序页面时通常无法完成握手;本地开发请优先使用:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
npm run dev
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
调试页会通过 iframe 加载本地页面并补齐小程序 bridge 环境;如果需要真实黑盒小程序容器加载同一页面,点击调试页里的「在 Mac 版 APP 中启动」按钮。
|
|
319
|
+
|
|
320
|
+
在未使用脚手架的 Vite 项目中,可以把命令加到 `package.json`:
|
|
321
|
+
|
|
322
|
+
```json
|
|
323
|
+
{
|
|
324
|
+
"scripts": {
|
|
325
|
+
"dev": "hb-sdk dev"
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## 错误处理
|
|
331
|
+
|
|
332
|
+
bridge、父容器运行时、协议校验或能力调用失败时会抛出 `HbMiniProgramSDKError`,其中包含稳定的 `code`、开发者可读的 `message` 和可选 `data`。
|
|
333
|
+
|
|
334
|
+
```ts
|
|
335
|
+
import { HbMiniProgramSDKError, ready } from '@heybox/hb-sdk';
|
|
336
|
+
|
|
337
|
+
try {
|
|
338
|
+
await ready();
|
|
339
|
+
} catch (error) {
|
|
340
|
+
if (error instanceof HbMiniProgramSDKError) {
|
|
341
|
+
console.log(error.code, error.message, error.data);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
网络请求已完成但 HTTP 状态不满足 `validateStatus` 时会抛出 `HbMiniProgramNetworkError`,其 `response` 字段包含标准化后的 `status`、`headers`、`data` 和原始公共请求配置快照。
|
|
347
|
+
|
|
348
|
+
## Public modules
|
|
349
|
+
|
|
350
|
+
## 常用能力
|
|
351
|
+
|
|
352
|
+
### 用户与登录
|
|
353
|
+
|
|
354
|
+
`user.getInfo()` 只读取当前登录态,不会主动唤起登录。需要用户操作时再调用 `auth.login()`。
|
|
355
|
+
|
|
356
|
+
```ts
|
|
357
|
+
import { auth, user } from '@heybox/hb-sdk';
|
|
358
|
+
|
|
359
|
+
const result = await user.getInfo();
|
|
360
|
+
|
|
361
|
+
if (!result.isLogin) {
|
|
362
|
+
const loginResult = await auth.login();
|
|
363
|
+
console.log(loginResult.userInfo);
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
SDK 只返回允许暴露给外部小程序的公开资料,不会返回 token、cookie、手机号或其他私有凭据。
|
|
368
|
+
|
|
369
|
+
### 分享
|
|
370
|
+
|
|
371
|
+
```ts
|
|
372
|
+
import { share } from '@heybox/hb-sdk';
|
|
373
|
+
|
|
374
|
+
await share.showShareMenu({
|
|
375
|
+
title: '我的小程序页面',
|
|
376
|
+
desc: '来自黑盒小程序的分享',
|
|
377
|
+
url: window.location.href,
|
|
378
|
+
imageUrl: 'https://imgheybox.max-c.com/demo.png',
|
|
379
|
+
});
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
截图分享:
|
|
383
|
+
|
|
384
|
+
```ts
|
|
385
|
+
await share.screenshot({
|
|
386
|
+
delay: 100,
|
|
387
|
+
saveToAlbum: true,
|
|
388
|
+
});
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### 窗口信息
|
|
392
|
+
|
|
393
|
+
```ts
|
|
394
|
+
import { viewport } from '@heybox/hb-sdk';
|
|
395
|
+
|
|
396
|
+
const windowInfo = await viewport.getWindowInfo();
|
|
397
|
+
|
|
398
|
+
console.log(windowInfo.windowWidth, windowInfo.windowHeight, windowInfo.safeArea.top);
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### 隔离 Storage
|
|
402
|
+
|
|
403
|
+
```ts
|
|
404
|
+
import { storage } from '@heybox/hb-sdk';
|
|
405
|
+
|
|
406
|
+
await storage.setStorage({
|
|
407
|
+
key: 'settings',
|
|
408
|
+
data: {
|
|
409
|
+
theme: 'dark',
|
|
410
|
+
},
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
const { data } = await storage.getStorage<{ theme: string }>({
|
|
414
|
+
key: 'settings',
|
|
415
|
+
});
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
storage key 只允许 1-128 位字母、数字、下划线和连字符。父容器会按小程序维度隔离 key,外部小程序不能读写黑盒客户端全局 storage。
|
|
419
|
+
|
|
420
|
+
### 网络请求
|
|
421
|
+
|
|
422
|
+
`network.request()` 提供窄化的 axios-like 接口。SDK 只接受公开请求字段,真实请求由父容器运行时映射到宿主网络能力。
|
|
423
|
+
|
|
424
|
+
```ts
|
|
425
|
+
import { HbMiniProgramNetworkError, network } from '@heybox/hb-sdk';
|
|
426
|
+
|
|
427
|
+
try {
|
|
428
|
+
const response = await network.request<{ ok: boolean }>({
|
|
429
|
+
url: 'https://api.example.com/demo',
|
|
430
|
+
method: 'GET',
|
|
431
|
+
headers: {
|
|
432
|
+
accept: 'application/json',
|
|
433
|
+
},
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
console.log(response.status, response.data.ok);
|
|
437
|
+
} catch (error) {
|
|
438
|
+
if (error instanceof HbMiniProgramNetworkError) {
|
|
439
|
+
console.log(error.response.status, error.response.data);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
默认只有 `2xx` 会 resolve;`4xx/5xx` 这类已完成 HTTP 响应会抛出 `HbMiniProgramNetworkError`。可以用 `validateStatus` 调整 SDK 本地判定逻辑,函数不会跨 bridge 传给父容器。
|
|
445
|
+
|
|
446
|
+
```ts
|
|
447
|
+
await network.request({
|
|
448
|
+
url: 'https://api.example.com/demo',
|
|
449
|
+
validateStatus: status => status < 500,
|
|
450
|
+
});
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
支持的 HTTP method 为 `GET`、`POST`、`PUT`、`PATCH`、`DELETE`、`HEAD`、`OPTIONS`。
|
|
454
|
+
|
|
455
|
+
## 生命周期事件
|
|
456
|
+
|
|
457
|
+
使用 `on()` 监听父容器派发的小程序事件。`on()` 会返回取消监听函数,组件卸载或页面销毁时应及时调用。
|
|
458
|
+
|
|
459
|
+
```ts
|
|
460
|
+
import { on } from '@heybox/hb-sdk';
|
|
461
|
+
|
|
462
|
+
const unsubscribeShow = on('show', payload => {
|
|
463
|
+
console.log('页面展示', payload.timestamp, payload.source);
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
const unsubscribeAuth = on('authChange', payload => {
|
|
467
|
+
console.log('登录态变化', payload.isLogin, payload.userInfo);
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
unsubscribeShow();
|
|
471
|
+
unsubscribeAuth();
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
当前可监听事件包括 `launch`、`ready`、`show`、`hide`、`unload`、`error`、`authChange`。
|