@heybox/hb-sdk 0.7.2-alpha.0 → 0.7.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 +8 -0
- package/README.md +10 -10
- package/dist/cli-chunks/{build-DbQt0LIs.cjs → build-DvPd8Z03.cjs} +2 -2
- package/dist/cli-chunks/{context-Cmrhge3Y.cjs → context-B8RhXSIn.cjs} +1 -1
- package/dist/cli-chunks/{create-5ZLxb2p_.cjs → create-BnoTI3uE.cjs} +1 -1
- package/dist/cli-chunks/{dev-CWSJ0YIw.cjs → dev-cujCrkqz.cjs} +5 -5
- package/dist/cli-chunks/{doctor-CpFYiqK9.cjs → doctor-bgqFvpfQ.cjs} +1 -1
- package/dist/cli-chunks/{index-DomfJMuO.cjs → index-CxDUgJ7Y.cjs} +1 -1
- package/dist/cli-chunks/{index-BV8DdyEP.cjs → index-D2DLvveO.cjs} +14 -14
- package/dist/cli-chunks/{login-DhD2o29N.cjs → login-CPEIFPSg.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-8IkVMyPu.cjs → project-vite-CoApr_-L.cjs} +1 -1
- package/dist/cli-chunks/{remote-BZ6rfyuZ.cjs → remote-BfbWxVM8.cjs} +4 -4
- package/dist/cli-chunks/{session-DnqyIY87.cjs → session-CFd3REzM.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/mock-host/main.js +34 -55
- package/dist/index.cjs.js +3 -11
- package/dist/index.esm.js +3 -11
- package/dist/protocol.cjs.js +0 -10
- package/dist/protocol.esm.js +1 -10
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +4 -4
- package/skill/references/api-protocol.md +2 -5
- package/skill/references/api-root.md +9 -18
- package/skill/references/cli.md +2 -2
- package/skill/references/examples.md +5 -11
- package/skill/references/recipes.md +16 -33
- package/skill/references/safety-boundaries.md +2 -2
- package/skill/scripts/sync-references.mjs +6 -12
- package/skill/scripts/validate-skill.mjs +7 -1
- package/skill/skill.json +4 -4
- package/types/index.d.ts +1 -1
- package/types/modules/user/get-info.d.ts +2 -2
- package/types/modules/user/index.d.ts +1 -5
- package/types/modules/user/types.d.ts +5 -3
- package/types/protocol/capabilities.d.ts +2 -12
- package/types/protocol.d.ts +2 -2
- package/types/modules/user/get-local-identity.d.ts +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.2
|
|
4
|
+
|
|
5
|
+
### SDK / Runtime
|
|
6
|
+
|
|
7
|
+
- 移除 `user.getLocalIdentity()`;未开通网络权限的小程序改用 `user.getInfo()` 静默获取 `userInfo.app_user_id`,不再展示身份授权弹窗。
|
|
8
|
+
- 未开通网络权限且用户已登录时,`user.getInfo()` 会静默建立或读取当前小程序隔离身份,并在每次成功调用后广播 `identity: granted`;撤销授权后再次调用会建立新的隔离身份。
|
|
9
|
+
- Runtime 不再兼容缺少 canonical `miniProgramId` 的无参 `getUserInfo()` adapter 路径;身份缺失时 `user.getInfo()` 返回 `INVALID_STATE`。
|
|
10
|
+
|
|
3
11
|
## 0.7.1
|
|
4
12
|
|
|
5
13
|
### Docs / Agent Skill
|
package/README.md
CHANGED
|
@@ -23,20 +23,20 @@ npm run dev
|
|
|
23
23
|
npm install @heybox/hb-sdk
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
SDK 会在导入时启动握手,能力调用会自动等待 SDK
|
|
26
|
+
SDK 会在导入时启动握手,能力调用会自动等待 SDK 就绪。未开通网络权限的小程序通过 `user.getInfo()` 静默读取当前小程序内的隔离身份:
|
|
27
27
|
|
|
28
28
|
需要可信用户手势的按钮不能在点击回调里等待握手。页面加载时先用 `getHandshakeState()` 读取当前状态,再用 `onHandshakeStateChange()` 订阅并立即接收当前状态;仅在 `status === 'ready'` 时启用按钮,并在组件或页面销毁时调用订阅返回的取消函数。`ready` 生命周期事件只是握手成功瞬间派发、不会重放的边沿通知,不能用来判断当前状态。
|
|
29
29
|
|
|
30
30
|
```ts
|
|
31
31
|
import hbSDK from '@heybox/hb-sdk';
|
|
32
32
|
|
|
33
|
-
async function
|
|
34
|
-
const
|
|
35
|
-
return
|
|
33
|
+
async function getCurrentUser() {
|
|
34
|
+
const result = await hbSDK.user.getInfo();
|
|
35
|
+
return result.userInfo?.app_user_id;
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
`user.getInfo()` 不展示授权弹窗,也不要求可信用户手势。未登录时返回 `isHeyboxAppLoggedIn: false`;已登录时默认返回当前小程序隔离的 `app_user_id`。
|
|
40
40
|
|
|
41
41
|
已开通网络权限的小程序在按钮点击等明确的用户操作中调用 `auth.login()`:
|
|
42
42
|
|
|
@@ -52,7 +52,7 @@ async function loginFromUserAction() {
|
|
|
52
52
|
}
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
`auth.login()` 返回 `{ code, expiresIn: 300, scopes }`,其中 `identity` 隐式强制包含;它不返回 user、profile、`
|
|
55
|
+
`auth.login()` 返回 `{ code, expiresIn: 300, scopes }`,其中 `identity` 隐式强制包含;它不返回 user、profile、`app_user_id` 或 token。页面只能把 code 交给开发者服务端,再由服务端按后端 OpenAPI 文档换取 token。未开通网络权限的小程序使用 `user.getInfo()`,无法获取 code 或调用 OpenAPI。完整边界见[用户身份与登录](https://docs.xiaoheihe.cn/hb_sdk/guide/auth)。
|
|
56
56
|
|
|
57
57
|
用户可以在明确的按钮点击和二次确认后撤销当前小程序的授权:
|
|
58
58
|
|
|
@@ -62,7 +62,7 @@ async function revokeAuthorizationFromUserAction() {
|
|
|
62
62
|
if (!confirmed) return;
|
|
63
63
|
|
|
64
64
|
await hbSDK.user.revokeAuthorization();
|
|
65
|
-
// 同步清理业务保存的
|
|
65
|
+
// 同步清理业务保存的 app_user_id、用户资料和服务端会话。
|
|
66
66
|
}
|
|
67
67
|
```
|
|
68
68
|
|
|
@@ -107,7 +107,7 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
107
107
|
| 模块 | 用途 |
|
|
108
108
|
| ------------ | ------------------------------------------------------------ |
|
|
109
109
|
| `auth` | 获取交给开发者服务端交换的短期授权码 |
|
|
110
|
-
| `user` |
|
|
110
|
+
| `user` | 读取 Host 当前用户资料、隔离身份或撤销授权 |
|
|
111
111
|
| `share` | 打开分享或截图分享流程 |
|
|
112
112
|
| `ui` | 展示 Toast 和 Loading |
|
|
113
113
|
| `device` | 调用振动和剪贴板能力 |
|
|
@@ -127,8 +127,8 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
127
127
|
- `auth.login({ scopes? })` 只返回 `{ code, expiresIn: 300, scopes }`;identity 隐式强制包含,code 只能提交给开发者服务端。
|
|
128
128
|
- 需要授权 UI 时,`auth.login()` 必须来自可信用户手势,否则返回 `USER_GESTURE_REQUIRED`;用户取消或关闭时返回 `AUTHORIZATION_CANCELLED`。已授权时可以静默返回新 code。
|
|
129
129
|
- `user.getSteamGameList()` 仅供未开通网络权限的小程序通过 Host 读取;已开通网络权限时返回 `SERVER_API_REQUIRED`,且授权码与 OpenAPI 不提供 Steam 游戏库 scope 或资源接口。
|
|
130
|
-
- 已开通网络权限时,公开的 `user.getInfo()`
|
|
131
|
-
-
|
|
130
|
+
- 已开通网络权限时,公开的 `user.getInfo()` 返回 `SERVER_API_REQUIRED`;对应身份和资料数据应由开发者服务端通过 OpenAPI 获取。
|
|
131
|
+
- 未开通网络权限时,使用 `user.getInfo()` 静默读取 `userInfo.app_user_id`,不能获取 code 或调用 OpenAPI。
|
|
132
132
|
- `user.revokeAuthorization()` 在两种网络模式下都要求可信用户手势;成功后必须停止使用并清理业务缓存的旧身份、资料和服务端会话。
|
|
133
133
|
- `on()` 返回取消监听函数,组件卸载或页面销毁时需要调用。
|
|
134
134
|
- 业务网络请求使用 `network.request()`,不要依赖浏览器原生网络出口。
|
|
@@ -5,8 +5,8 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var runtimePermissionEnv = require('./runtime-permission-env-D-8_jPG3.cjs');
|
|
7
7
|
var runtimeGate = require('./runtime-gate-CtV7rWyX.cjs');
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var projectVite = require('./project-vite-
|
|
8
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
9
|
+
var projectVite = require('./project-vite-CoApr_-L.cjs');
|
|
10
10
|
require('node:async_hooks');
|
|
11
11
|
require('node:module');
|
|
12
12
|
require('path');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var session = require('./session-
|
|
3
|
+
var session = require('./session-CFd3REzM.cjs');
|
|
4
4
|
var runtimePermissionEnv = require('./runtime-permission-env-D-8_jPG3.cjs');
|
|
5
5
|
var fs$1 = require('node:fs');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var require$$0 = require('fs');
|
|
7
7
|
var require$$1 = require('path');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('readline');
|
|
@@ -6,15 +6,15 @@ var path = require('node:path');
|
|
|
6
6
|
var net = require('node:net');
|
|
7
7
|
var promises = require('node:dns/promises');
|
|
8
8
|
var node_http = require('node:http');
|
|
9
|
-
var context = require('./context-
|
|
9
|
+
var context = require('./context-B8RhXSIn.cjs');
|
|
10
10
|
var node_crypto = require('node:crypto');
|
|
11
11
|
var undici = require('undici');
|
|
12
12
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
13
|
-
var index = require('./index-
|
|
14
|
-
var projectVite = require('./project-vite-
|
|
13
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
14
|
+
var projectVite = require('./project-vite-CoApr_-L.cjs');
|
|
15
15
|
var fs$1 = require('node:fs/promises');
|
|
16
16
|
var runtimePermissionEnv = require('./runtime-permission-env-D-8_jPG3.cjs');
|
|
17
|
-
require('./session-
|
|
17
|
+
require('./session-CFd3REzM.cjs');
|
|
18
18
|
require('fs');
|
|
19
19
|
require('constants');
|
|
20
20
|
require('stream');
|
|
@@ -1347,7 +1347,7 @@ function createHeyboxProtocol(payload) {
|
|
|
1347
1347
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
1348
1348
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
1349
1349
|
? undefined
|
|
1350
|
-
: '0.7.2
|
|
1350
|
+
: '0.7.2';
|
|
1351
1351
|
|
|
1352
1352
|
class DevPermissionOverrideStoreError extends Error {
|
|
1353
1353
|
code;
|
|
@@ -4,7 +4,7 @@ var fs$1 = require('node:fs');
|
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
8
8
|
require('node:module');
|
|
9
9
|
require('path');
|
|
10
10
|
require('os');
|
|
@@ -234,19 +234,19 @@ function requireArgument () {
|
|
|
234
234
|
|
|
235
235
|
var command = {};
|
|
236
236
|
|
|
237
|
-
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
237
|
+
const require$5 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-D2DLvveO.cjs', document.baseURI).href)));
|
|
238
238
|
function __require$4() { return require$5("node:events"); }
|
|
239
239
|
|
|
240
|
-
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
240
|
+
const require$4 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-D2DLvveO.cjs', document.baseURI).href)));
|
|
241
241
|
function __require$3() { return require$4("node:child_process"); }
|
|
242
242
|
|
|
243
|
-
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
243
|
+
const require$3 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-D2DLvveO.cjs', document.baseURI).href)));
|
|
244
244
|
function __require$2() { return require$3("node:path"); }
|
|
245
245
|
|
|
246
|
-
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
246
|
+
const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-D2DLvveO.cjs', document.baseURI).href)));
|
|
247
247
|
function __require$1() { return require$2("node:fs"); }
|
|
248
248
|
|
|
249
|
-
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-
|
|
249
|
+
const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/index-D2DLvveO.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -13347,7 +13347,7 @@ function getPathname(pathWithQuery) {
|
|
|
13347
13347
|
}
|
|
13348
13348
|
|
|
13349
13349
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13350
|
-
const BUILT_CLI_VERSION = '0.7.2
|
|
13350
|
+
const BUILT_CLI_VERSION = '0.7.2';
|
|
13351
13351
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13352
13352
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13353
13353
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13681,35 +13681,35 @@ function createCommandLoggerResolver(options) {
|
|
|
13681
13681
|
};
|
|
13682
13682
|
}
|
|
13683
13683
|
const defaultClearLoginStatus = async (...args) => {
|
|
13684
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13684
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CPEIFPSg.cjs'); });
|
|
13685
13685
|
return clearLoginStatus(...args);
|
|
13686
13686
|
};
|
|
13687
13687
|
const defaultLoginToHeybox = async (...args) => {
|
|
13688
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13688
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CPEIFPSg.cjs'); });
|
|
13689
13689
|
return loginToHeybox(...args);
|
|
13690
13690
|
};
|
|
13691
13691
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13692
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13692
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CPEIFPSg.cjs'); });
|
|
13693
13693
|
return printLoginStatus(...args);
|
|
13694
13694
|
};
|
|
13695
13695
|
const defaultRunBuildCommand = async (...args) => {
|
|
13696
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13696
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-DvPd8Z03.cjs'); });
|
|
13697
13697
|
return runBuildCommand(...args);
|
|
13698
13698
|
};
|
|
13699
13699
|
const defaultRunCreateCommand = async (...args) => {
|
|
13700
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13700
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-BnoTI3uE.cjs'); });
|
|
13701
13701
|
return runCreateCommand(...args);
|
|
13702
13702
|
};
|
|
13703
13703
|
const defaultRunDevCommand = async (...args) => {
|
|
13704
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13704
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-cujCrkqz.cjs'); });
|
|
13705
13705
|
return runDevCommand(...args);
|
|
13706
13706
|
};
|
|
13707
13707
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13708
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13708
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-bgqFvpfQ.cjs'); });
|
|
13709
13709
|
return runDoctorCommand(...args);
|
|
13710
13710
|
};
|
|
13711
13711
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13712
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13712
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-BfbWxVM8.cjs'); });
|
|
13713
13713
|
return runRemoteCommand(...args);
|
|
13714
13714
|
};
|
|
13715
13715
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var node_http = require('node:http');
|
|
6
|
-
var session = require('./session-
|
|
6
|
+
var session = require('./session-CFd3REzM.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
9
9
|
require('node:path');
|
|
10
10
|
require('fs');
|
|
11
11
|
require('constants');
|
|
@@ -5,7 +5,7 @@ var fs$1 = require('node:fs/promises');
|
|
|
5
5
|
var node_module = require('node:module');
|
|
6
6
|
var path = require('node:path');
|
|
7
7
|
var node_url = require('node:url');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var promises = require('node:readline/promises');
|
|
4
|
-
var index = require('./index-
|
|
5
|
-
var session = require('./session-
|
|
4
|
+
var index = require('./index-D2DLvveO.cjs');
|
|
5
|
+
var session = require('./session-CFd3REzM.cjs');
|
|
6
6
|
var childProcess = require('node:child_process');
|
|
7
7
|
var fs = require('node:fs');
|
|
8
8
|
var fs$1 = require('node:fs/promises');
|
|
@@ -10,7 +10,7 @@ var path = require('node:path');
|
|
|
10
10
|
var runtimePermissionEnv = require('./runtime-permission-env-D-8_jPG3.cjs');
|
|
11
11
|
var runtimeGate = require('./runtime-gate-CtV7rWyX.cjs');
|
|
12
12
|
var node_crypto = require('node:crypto');
|
|
13
|
-
var context = require('./context-
|
|
13
|
+
var context = require('./context-B8RhXSIn.cjs');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('path');
|
|
16
16
|
require('os');
|
|
@@ -271,7 +271,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
271
271
|
};
|
|
272
272
|
}
|
|
273
273
|
async function loadCosConstructor() {
|
|
274
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
274
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-CxDUgJ7Y.cjs'); }).then(function (n) { return n.index; });
|
|
275
275
|
return cosModule.default;
|
|
276
276
|
}
|
|
277
277
|
function formatSize(bytes) {
|
package/dist/cli.cjs
CHANGED
|
@@ -163,8 +163,6 @@ function normalizeDecodedNetworkPathname(decoded) {
|
|
|
163
163
|
const AUTH_LOGIN_METHOD = 'auth.login';
|
|
164
164
|
/** 读取当前登录态、授权状态和已获准披露资料的 bridge method 标识。 */
|
|
165
165
|
const USER_GET_INFO_METHOD = 'user.getInfo';
|
|
166
|
-
/** 读取当前用户小程序隔离身份的 bridge method 标识。 */
|
|
167
|
-
const USER_GET_LOCAL_IDENTITY_METHOD = 'user.getLocalIdentity';
|
|
168
166
|
/** 撤销当前用户授予本小程序授权的 bridge method 标识。 */
|
|
169
167
|
const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
|
|
170
168
|
/** 读取当前已登录用户 Steam 游戏库的 bridge method 标识。 */
|
|
@@ -265,13 +263,6 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
|
|
|
265
263
|
permission: 'user.getInfo',
|
|
266
264
|
risk: 'medium',
|
|
267
265
|
},
|
|
268
|
-
{
|
|
269
|
-
method: USER_GET_LOCAL_IDENTITY_METHOD,
|
|
270
|
-
module: 'user',
|
|
271
|
-
capability: USER_GET_LOCAL_IDENTITY_METHOD,
|
|
272
|
-
permission: 'user.getLocalIdentity',
|
|
273
|
-
risk: 'medium',
|
|
274
|
-
},
|
|
275
266
|
{
|
|
276
267
|
method: USER_REVOKE_AUTHORIZATION_METHOD,
|
|
277
268
|
module: 'user',
|
|
@@ -5189,34 +5180,15 @@ function hashString(value) {
|
|
|
5189
5180
|
}
|
|
5190
5181
|
|
|
5191
5182
|
async function getMiniProgramRuntimeUserInfo(platformAdapter, identity) {
|
|
5192
|
-
const miniProgramId = identity?.miniProgramId?.trim();
|
|
5193
|
-
return miniProgramId
|
|
5194
|
-
? platformAdapter.user.getUserInfo({ miniProgramId })
|
|
5195
|
-
: platformAdapter.user.getUserInfo();
|
|
5196
|
-
}
|
|
5197
|
-
|
|
5198
|
-
async function getMiniProgramRuntimeLocalIdentity(payload, platformAdapter, identity, trustedUserGesture) {
|
|
5199
|
-
if (payload !== undefined) {
|
|
5200
|
-
throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', 'user.getLocalIdentity 不接收入参');
|
|
5201
|
-
}
|
|
5202
5183
|
const miniProgramId = identity?.miniProgramId?.trim();
|
|
5203
5184
|
if (!miniProgramId) {
|
|
5204
|
-
throw createMiniProgramRuntimeBridgeError('INVALID_STATE', 'user.
|
|
5185
|
+
throw createMiniProgramRuntimeBridgeError('INVALID_STATE', 'user.getInfo 缺少可信小程序身份');
|
|
5205
5186
|
}
|
|
5206
|
-
const result = await platformAdapter.user.
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
});
|
|
5210
|
-
if (!isMiniProgramRuntimeRecord(result)
|
|
5211
|
-
|| typeof result.appUserId !== 'string'
|
|
5212
|
-
|| !result.appUserId.trim()) {
|
|
5213
|
-
throw createMiniProgramRuntimeBridgeError('INVALID_RESPONSE', 'Host user.getLocalIdentity 返回无效');
|
|
5187
|
+
const result = await platformAdapter.user.getUserInfo({ miniProgramId });
|
|
5188
|
+
if (result.isHeyboxAppLoggedIn) {
|
|
5189
|
+
platformAdapter.auth.emitAuthEvent?.('user_info_authorization_change', result.authorization);
|
|
5214
5190
|
}
|
|
5215
|
-
|
|
5216
|
-
identity: 'granted',
|
|
5217
|
-
profile: 'not_requested',
|
|
5218
|
-
});
|
|
5219
|
-
return { appUserId: result.appUserId };
|
|
5191
|
+
return result;
|
|
5220
5192
|
}
|
|
5221
5193
|
|
|
5222
5194
|
async function revokeMiniProgramRuntimeAuthorization(payload, platformAdapter, identity, trustedUserGesture) {
|
|
@@ -5568,7 +5540,6 @@ const MINI_PROGRAM_MOCK_RUNTIME_METHODS = MINI_PROGRAM_PROTOCOL_CAPABILITIES.map
|
|
|
5568
5540
|
const MINI_PROGRAM_MOCK_RUNTIME_METHOD_HANDLER_MAP = {
|
|
5569
5541
|
[AUTH_LOGIN_METHOD]: (runtime, payload, context) => runtime.login(payload, context),
|
|
5570
5542
|
[USER_GET_INFO_METHOD]: (runtime) => runtime.getUserInfo(),
|
|
5571
|
-
[USER_GET_LOCAL_IDENTITY_METHOD]: (runtime, payload, context) => runtime.getLocalIdentity(payload, context),
|
|
5572
5543
|
[USER_REVOKE_AUTHORIZATION_METHOD]: (runtime, payload, context) => runtime.revokeAuthorization(payload, context),
|
|
5573
5544
|
[USER_GET_STEAM_GAME_LIST_METHOD]: (runtime, payload) => runtime.getSteamGameList(payload),
|
|
5574
5545
|
[SHARE_SHOW_SHARE_MENU_METHOD]: (runtime, payload) => runtime.showShareMenu(payload),
|
|
@@ -5610,6 +5581,9 @@ function createBrowserMockRuntimePlatformAdapter(options) {
|
|
|
5610
5581
|
},
|
|
5611
5582
|
},
|
|
5612
5583
|
auth: {
|
|
5584
|
+
emitAuthEvent(name, payload) {
|
|
5585
|
+
options.onAuthEvent?.(name, payload);
|
|
5586
|
+
},
|
|
5613
5587
|
async getCurrentUserId() {
|
|
5614
5588
|
const user = options.getCurrentUser();
|
|
5615
5589
|
return user?.app_user_id;
|
|
@@ -5629,27 +5603,21 @@ function createBrowserMockRuntimePlatformAdapter(options) {
|
|
|
5629
5603
|
},
|
|
5630
5604
|
},
|
|
5631
5605
|
user: {
|
|
5632
|
-
async getUserInfo() {
|
|
5606
|
+
async getUserInfo(identity) {
|
|
5633
5607
|
const currentUser = options.getCurrentUser();
|
|
5634
5608
|
const appUserId = currentUser?.app_user_id;
|
|
5635
|
-
|
|
5609
|
+
const miniProgramId = identity?.miniProgramId;
|
|
5610
|
+
return appUserId && miniProgramId
|
|
5636
5611
|
? {
|
|
5637
5612
|
isHeyboxAppLoggedIn: true,
|
|
5638
5613
|
authorization: { identity: 'granted', profile: 'not_requested' },
|
|
5639
5614
|
userInfo: {
|
|
5640
|
-
app_user_id: appUserId
|
|
5615
|
+
app_user_id: `${appUserId}:${miniProgramId}`,
|
|
5641
5616
|
profile: { nickname: currentUser?.nickname || '', avatar: currentUser?.avatar || '' },
|
|
5642
5617
|
},
|
|
5643
5618
|
}
|
|
5644
5619
|
: { isHeyboxAppLoggedIn: false, authorization: null, userInfo: null };
|
|
5645
5620
|
},
|
|
5646
|
-
async getLocalIdentity() {
|
|
5647
|
-
const appUserId = options.getCurrentUser()?.app_user_id;
|
|
5648
|
-
if (!appUserId) {
|
|
5649
|
-
throw createMockBridgeError('NOT_LOGGED_IN', '当前 Mock 用户未登录');
|
|
5650
|
-
}
|
|
5651
|
-
return { appUserId };
|
|
5652
|
-
},
|
|
5653
5621
|
async revokeAuthorization(request) {
|
|
5654
5622
|
if (!request.trustedUserGesture) {
|
|
5655
5623
|
throw createMockBridgeError('USER_GESTURE_REQUIRED', 'Mock 撤销授权需要可信用户手势');
|
|
@@ -5838,10 +5806,6 @@ class MiniProgramMockRuntime {
|
|
|
5838
5806
|
this.assertMockHostUserApiEnabled();
|
|
5839
5807
|
return getMiniProgramRuntimeUserInfo(this.adapter, this.options.identity);
|
|
5840
5808
|
}
|
|
5841
|
-
getLocalIdentity(payload, context) {
|
|
5842
|
-
this.assertMockHostUserApiEnabled();
|
|
5843
|
-
return getMiniProgramRuntimeLocalIdentity(payload, this.adapter, this.options.identity, context.trustedUserGesture);
|
|
5844
|
-
}
|
|
5845
5809
|
revokeAuthorization(payload, context) {
|
|
5846
5810
|
if (!this.authorizationMutationEnabled) {
|
|
5847
5811
|
throw createMockBridgeError('SERVER_API_REQUIRED', '当前模式缺少有效的小程序权限快照');
|
|
@@ -6852,8 +6816,10 @@ const storage = new Map();
|
|
|
6852
6816
|
const logs = [];
|
|
6853
6817
|
let handshaken = false;
|
|
6854
6818
|
let navigationBarStyle = 'dark';
|
|
6819
|
+
let mockHostDisposed = false;
|
|
6855
6820
|
let mobileQrGeneration = 0;
|
|
6856
6821
|
let mobileQrRefreshTimer;
|
|
6822
|
+
let nativeLaunchConfigRefreshTimer;
|
|
6857
6823
|
let mobileDevSessionCreation = Promise.resolve();
|
|
6858
6824
|
let currentUser = {
|
|
6859
6825
|
app_user_id: 'au_debug_user',
|
|
@@ -6913,6 +6879,7 @@ const platformAdapter = createBrowserMockRuntimePlatformAdapter({
|
|
|
6913
6879
|
currentUser = createUserFromForm();
|
|
6914
6880
|
updateUserStatus();
|
|
6915
6881
|
},
|
|
6882
|
+
onAuthEvent: (name, payload) => postEvent(name, payload),
|
|
6916
6883
|
requestNetwork,
|
|
6917
6884
|
setDocumentTitle(title) {
|
|
6918
6885
|
document.title = title;
|
|
@@ -6931,10 +6898,7 @@ updateUserStatus();
|
|
|
6931
6898
|
updateStorageSnapshot();
|
|
6932
6899
|
updatePermissionControls();
|
|
6933
6900
|
window.addEventListener('message', handleMessage);
|
|
6934
|
-
window.addEventListener('beforeunload',
|
|
6935
|
-
clearMobileQrRefreshTimer();
|
|
6936
|
-
postEvent('unload', { timestamp: Date.now() });
|
|
6937
|
-
});
|
|
6901
|
+
window.addEventListener('beforeunload', disposeMockHost);
|
|
6938
6902
|
queryElement('#login-button').addEventListener('click', () => {
|
|
6939
6903
|
void runtime.login();
|
|
6940
6904
|
});
|
|
@@ -6967,13 +6931,13 @@ elements.resetPermissionsButton.addEventListener('click', () => {
|
|
|
6967
6931
|
const mobileAppQrReady = setupMobileAppQr();
|
|
6968
6932
|
if (bootstrap.devContext.source === 'remote') {
|
|
6969
6933
|
void mobileAppQrReady.then(() => {
|
|
6970
|
-
|
|
6934
|
+
if (mockHostDisposed)
|
|
6935
|
+
return;
|
|
6936
|
+
nativeLaunchConfigRefreshTimer = window.setInterval(() => void refreshNativeLaunchConfig(), NATIVE_LAUNCH_CONFIG_REFRESH_MS);
|
|
6971
6937
|
});
|
|
6972
6938
|
}
|
|
6973
6939
|
function createRuntime() {
|
|
6974
6940
|
return new MiniProgramMockRuntime(platformAdapter, {
|
|
6975
|
-
onHeyboxAppLoginChange: payload => postEvent('heybox_app_login_change', payload),
|
|
6976
|
-
onUserInfoAuthorizationChange: authorization => postEvent('user_info_authorization_change', authorization),
|
|
6977
6941
|
runtimePermissions: createMiniProgramMockRuntimePermissions(permissionState),
|
|
6978
6942
|
});
|
|
6979
6943
|
}
|
|
@@ -7475,6 +7439,8 @@ function setupMobileLanSelect() {
|
|
|
7475
7439
|
elements.mobileLanSelect.disabled = !hasLanAddress;
|
|
7476
7440
|
}
|
|
7477
7441
|
async function updateMobileQrCode() {
|
|
7442
|
+
if (mockHostDisposed)
|
|
7443
|
+
return;
|
|
7478
7444
|
const generation = ++mobileQrGeneration;
|
|
7479
7445
|
clearMobileQrRefreshTimer();
|
|
7480
7446
|
if (nativeAppLaunchUnavailableReason) {
|
|
@@ -7586,6 +7552,19 @@ function clearMobileQrRefreshTimer() {
|
|
|
7586
7552
|
window.clearTimeout(mobileQrRefreshTimer);
|
|
7587
7553
|
mobileQrRefreshTimer = undefined;
|
|
7588
7554
|
}
|
|
7555
|
+
function disposeMockHost() {
|
|
7556
|
+
if (mockHostDisposed)
|
|
7557
|
+
return;
|
|
7558
|
+
mockHostDisposed = true;
|
|
7559
|
+
mobileQrGeneration += 1;
|
|
7560
|
+
clearMobileQrRefreshTimer();
|
|
7561
|
+
if (nativeLaunchConfigRefreshTimer !== undefined) {
|
|
7562
|
+
window.clearInterval(nativeLaunchConfigRefreshTimer);
|
|
7563
|
+
nativeLaunchConfigRefreshTimer = undefined;
|
|
7564
|
+
}
|
|
7565
|
+
window.removeEventListener('message', handleMessage);
|
|
7566
|
+
postEvent('unload', { timestamp: Date.now() });
|
|
7567
|
+
}
|
|
7589
7568
|
function applyDevContextToMobileQrPayload(payload, devContextUrl) {
|
|
7590
7569
|
const protocolMarker = payload.includes('#heybox://') ? '#heybox://' : 'heybox://';
|
|
7591
7570
|
const protocolIndex = payload.indexOf(protocolMarker);
|
package/dist/index.cjs.js
CHANGED
|
@@ -640,7 +640,7 @@ function createMessageId() {
|
|
|
640
640
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
641
641
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
642
642
|
? undefined
|
|
643
|
-
: '0.7.2
|
|
643
|
+
: '0.7.2';
|
|
644
644
|
|
|
645
645
|
/**
|
|
646
646
|
* 判断未知数据是否符合小程序 bridge 消息信封。
|
|
@@ -1019,8 +1019,6 @@ class MiniProgramBridgeClient {
|
|
|
1019
1019
|
const AUTH_LOGIN_METHOD = 'auth.login';
|
|
1020
1020
|
/** 读取当前登录态、授权状态和已获准披露资料的 bridge method 标识。 */
|
|
1021
1021
|
const USER_GET_INFO_METHOD = 'user.getInfo';
|
|
1022
|
-
/** 读取当前用户小程序隔离身份的 bridge method 标识。 */
|
|
1023
|
-
const USER_GET_LOCAL_IDENTITY_METHOD = 'user.getLocalIdentity';
|
|
1024
1022
|
/** 撤销当前用户授予本小程序授权的 bridge method 标识。 */
|
|
1025
1023
|
const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
|
|
1026
1024
|
/** 读取当前已登录用户 Steam 游戏库的 bridge method 标识。 */
|
|
@@ -1450,8 +1448,8 @@ function createViewportModule(requester) {
|
|
|
1450
1448
|
*
|
|
1451
1449
|
* @returns 当前用户的登录态与公开基础资料。
|
|
1452
1450
|
*
|
|
1453
|
-
*
|
|
1454
|
-
* 授权后返回昵称与头像。未登录时返回
|
|
1451
|
+
* 未开通网络权限且当前黑盒 APP 用户已登录时,该能力会静默建立或读取按小程序隔离的
|
|
1452
|
+
* `app_user_id`,不展示授权 UI;仅在 profile 授权后返回昵称与头像。未登录时返回
|
|
1455
1453
|
* `{ isHeyboxAppLoggedIn: false, authorization: null, userInfo: null }`。
|
|
1456
1454
|
*
|
|
1457
1455
|
* @throws {HbMiniProgramSDKError} 当 SDK 调用失败时抛出。
|
|
@@ -1460,10 +1458,6 @@ function getInfo(requester) {
|
|
|
1460
1458
|
return requester.request(USER_GET_INFO_METHOD);
|
|
1461
1459
|
}
|
|
1462
1460
|
|
|
1463
|
-
function getLocalIdentity(requester) {
|
|
1464
|
-
return requester.request(USER_GET_LOCAL_IDENTITY_METHOD);
|
|
1465
|
-
}
|
|
1466
|
-
|
|
1467
1461
|
function revokeAuthorization(requester) {
|
|
1468
1462
|
return requester.request(USER_REVOKE_AUTHORIZATION_METHOD);
|
|
1469
1463
|
}
|
|
@@ -1482,7 +1476,6 @@ function getSteamGameList(requester, options) {
|
|
|
1482
1476
|
function createUserModule(requester) {
|
|
1483
1477
|
return {
|
|
1484
1478
|
getInfo: () => getInfo(requester),
|
|
1485
|
-
getLocalIdentity: () => getLocalIdentity(requester),
|
|
1486
1479
|
revokeAuthorization: () => revokeAuthorization(requester),
|
|
1487
1480
|
getSteamGameList: (options) => getSteamGameList(requester, options),
|
|
1488
1481
|
};
|
|
@@ -1785,7 +1778,6 @@ const auth = {
|
|
|
1785
1778
|
/** 默认 SDK 实例的用户资料模块。 */
|
|
1786
1779
|
const user = {
|
|
1787
1780
|
getInfo: () => getDefaultSDK().user.getInfo(),
|
|
1788
|
-
getLocalIdentity: () => getDefaultSDK().user.getLocalIdentity(),
|
|
1789
1781
|
revokeAuthorization: () => getDefaultSDK().user.revokeAuthorization(),
|
|
1790
1782
|
getSteamGameList: (options) => getDefaultSDK().user.getSteamGameList(options),
|
|
1791
1783
|
};
|
package/dist/index.esm.js
CHANGED
|
@@ -636,7 +636,7 @@ function createMessageId() {
|
|
|
636
636
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
637
637
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
638
638
|
? undefined
|
|
639
|
-
: '0.7.2
|
|
639
|
+
: '0.7.2';
|
|
640
640
|
|
|
641
641
|
/**
|
|
642
642
|
* 判断未知数据是否符合小程序 bridge 消息信封。
|
|
@@ -1015,8 +1015,6 @@ class MiniProgramBridgeClient {
|
|
|
1015
1015
|
const AUTH_LOGIN_METHOD = 'auth.login';
|
|
1016
1016
|
/** 读取当前登录态、授权状态和已获准披露资料的 bridge method 标识。 */
|
|
1017
1017
|
const USER_GET_INFO_METHOD = 'user.getInfo';
|
|
1018
|
-
/** 读取当前用户小程序隔离身份的 bridge method 标识。 */
|
|
1019
|
-
const USER_GET_LOCAL_IDENTITY_METHOD = 'user.getLocalIdentity';
|
|
1020
1018
|
/** 撤销当前用户授予本小程序授权的 bridge method 标识。 */
|
|
1021
1019
|
const USER_REVOKE_AUTHORIZATION_METHOD = 'user.revokeAuthorization';
|
|
1022
1020
|
/** 读取当前已登录用户 Steam 游戏库的 bridge method 标识。 */
|
|
@@ -1446,8 +1444,8 @@ function createViewportModule(requester) {
|
|
|
1446
1444
|
*
|
|
1447
1445
|
* @returns 当前用户的登录态与公开基础资料。
|
|
1448
1446
|
*
|
|
1449
|
-
*
|
|
1450
|
-
* 授权后返回昵称与头像。未登录时返回
|
|
1447
|
+
* 未开通网络权限且当前黑盒 APP 用户已登录时,该能力会静默建立或读取按小程序隔离的
|
|
1448
|
+
* `app_user_id`,不展示授权 UI;仅在 profile 授权后返回昵称与头像。未登录时返回
|
|
1451
1449
|
* `{ isHeyboxAppLoggedIn: false, authorization: null, userInfo: null }`。
|
|
1452
1450
|
*
|
|
1453
1451
|
* @throws {HbMiniProgramSDKError} 当 SDK 调用失败时抛出。
|
|
@@ -1456,10 +1454,6 @@ function getInfo(requester) {
|
|
|
1456
1454
|
return requester.request(USER_GET_INFO_METHOD);
|
|
1457
1455
|
}
|
|
1458
1456
|
|
|
1459
|
-
function getLocalIdentity(requester) {
|
|
1460
|
-
return requester.request(USER_GET_LOCAL_IDENTITY_METHOD);
|
|
1461
|
-
}
|
|
1462
|
-
|
|
1463
1457
|
function revokeAuthorization(requester) {
|
|
1464
1458
|
return requester.request(USER_REVOKE_AUTHORIZATION_METHOD);
|
|
1465
1459
|
}
|
|
@@ -1478,7 +1472,6 @@ function getSteamGameList(requester, options) {
|
|
|
1478
1472
|
function createUserModule(requester) {
|
|
1479
1473
|
return {
|
|
1480
1474
|
getInfo: () => getInfo(requester),
|
|
1481
|
-
getLocalIdentity: () => getLocalIdentity(requester),
|
|
1482
1475
|
revokeAuthorization: () => revokeAuthorization(requester),
|
|
1483
1476
|
getSteamGameList: (options) => getSteamGameList(requester, options),
|
|
1484
1477
|
};
|
|
@@ -1781,7 +1774,6 @@ const auth = {
|
|
|
1781
1774
|
/** 默认 SDK 实例的用户资料模块。 */
|
|
1782
1775
|
const user = {
|
|
1783
1776
|
getInfo: () => getDefaultSDK().user.getInfo(),
|
|
1784
|
-
getLocalIdentity: () => getDefaultSDK().user.getLocalIdentity(),
|
|
1785
1777
|
revokeAuthorization: () => getDefaultSDK().user.revokeAuthorization(),
|
|
1786
1778
|
getSteamGameList: (options) => getDefaultSDK().user.getSteamGameList(options),
|
|
1787
1779
|
};
|