@heybox/hb-sdk 0.9.5-alpha.3 → 0.9.5-alpha.5
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 +12 -0
- package/README.md +14 -0
- package/dist/cli-chunks/{artifact-qcqjww0s.cjs → artifact-DuTM9Kkc.cjs} +3 -3
- package/dist/cli-chunks/{build-DCgpTg32.cjs → build-BWDU-AtP.cjs} +5 -5
- package/dist/cli-chunks/{create-B1R3GzUJ.cjs → create-CsQyw8YT.cjs} +1 -1
- package/dist/cli-chunks/{dev-BktX-Knf.cjs → dev-C9nexLav.cjs} +136 -96
- package/dist/cli-chunks/{dev-context-CE4HgJig.cjs → dev-context-812hbY77.cjs} +2 -2
- package/dist/cli-chunks/{doctor-ahqYzMjt.cjs → doctor-k1s0u_G0.cjs} +1 -1
- package/dist/cli-chunks/{games-DeOUz5bI.cjs → games-DW3oq7Sr.cjs} +1 -1
- package/dist/cli-chunks/{index-C3p93h2e.cjs → index-COv3PHDL.cjs} +17 -17
- package/dist/cli-chunks/{index-Ca7rRS2Z.cjs → index-febilXsM.cjs} +1 -1
- package/dist/cli-chunks/{index.esm-BjwRn4Dl.cjs → index.esm-C_HWbFOx.cjs} +6 -6
- package/dist/cli-chunks/{login-DuOq0Gm9.cjs → login-CpqRWN5g.cjs} +1 -1
- package/dist/cli-chunks/{project-vite-C48AvOrg.cjs → project-vite-Bz3Plr6e.cjs} +1 -1
- package/dist/cli-chunks/{remote-BqbatO77.cjs → remote-jmVwiybR.cjs} +6 -6
- package/dist/cli-chunks/{runtime-permission-env-BfP6motG.cjs → runtime-permission-env-N2wT7zID.cjs} +2 -2
- package/dist/cli-chunks/{skill-CN-_HmPx.cjs → skill-CFf7FLdK.cjs} +2 -2
- package/dist/cli-chunks/{version-DyS8HIuU.cjs → version-xFLkgSE1.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-Bp0sNbdG.js +103 -0
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-KWxMdRrR.js → desktop-app-launch-BIkaTCqe.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-B0sWGR7o.js → index-Cxs813A9.js} +3 -3
- package/dist/devtools/browser-dev-host/index.html +2 -2
- package/dist/index.cjs.js +33 -3
- package/dist/index.esm.js +33 -4
- package/dist/protocol.cjs.js +33 -0
- package/dist/protocol.esm.js +31 -1
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +5 -5
- package/skill/skill.json +4 -4
- package/types/index.d.ts +69 -3
- package/types/protocol.d.ts +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-CPoh6wpa.js +0 -102
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。
|
|
4
4
|
|
|
5
|
+
## 0.9.5-alpha.5 - 2026-10-30
|
|
6
|
+
|
|
7
|
+
### 新增能力
|
|
8
|
+
|
|
9
|
+
- 新增 `user.getFollowStatus()` 与 `user.requestFollowAuthor()`,支持查询和引导关注当前小程序作者;使用方式见[关注小程序作者](https://docs.xiaoheihe.cn/hb_sdk/guide/auth#%E5%85%B3%E6%B3%A8%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BD%9C%E8%80%85)。需要配套更新宿主与后端。本地调试台支持关注确认,并等待登录、确认交互完成。
|
|
10
|
+
|
|
11
|
+
## 0.9.5-alpha.4 - 2026-10-30
|
|
12
|
+
|
|
13
|
+
### 文档与工具
|
|
14
|
+
|
|
15
|
+
- 修正 [auth.getAccountState()](https://docs.xiaoheihe.cn/hb_sdk/reference/sdk/auth/getAccountState) 的类型注释,明确 Mobile 账号快照及切号后重新打开小程序的要求。
|
|
16
|
+
|
|
5
17
|
## 0.9.5-alpha.3 - 2026-10-30
|
|
6
18
|
|
|
7
19
|
### 新增能力
|
package/README.md
CHANGED
|
@@ -103,6 +103,20 @@ async function revokeAuthorizationFromUserAction() {
|
|
|
103
103
|
|
|
104
104
|
`user.revokeAuthorization()` 位于无需声明白名单,不接收小程序 ID、黑盒用户 ID 或手势参数。调用必须来自可信用户操作,否则返回 `USER_GESTURE_REQUIRED`。撤销成功后,后续身份或授权读取会重新进入授权流程;SDK 不会替业务清理已经持久化的数据。
|
|
105
105
|
|
|
106
|
+
在握手 ready 后,开发者可以通过按钮直接关注当前小程序作者:
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
import hbSDK, { AuthorFollowStatus } from '@heybox/hb-sdk';
|
|
110
|
+
|
|
111
|
+
async function onFollowAuthorClick() {
|
|
112
|
+
const status = await hbSDK.user.requestFollowAuthor();
|
|
113
|
+
if (status === AuthorFollowStatus.Self) return;
|
|
114
|
+
// status === AuthorFollowStatus.Following 时将按钮更新为“已关注”。失败时按 SDK 错误处理。
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`user.requestFollowAuthor()` 不接收参数,不需要 `userInfo` 或 `network` 权限。它要求真实用户手势,由平台绑定作者;未登录时先登录,再展示宿主居中确认框。`user.getFollowStatus()` 可无手势查询 `notFollowing` / `following` / `self`,不登录、不弹框。已关注和作者本人直接返回;每天同账号同小程序最多领取 10 次引导额度(跨设备合计,北京时间自然日重置)。需要配套更新 Host,旧 Runtime 可能返回 `METHOD_NOT_FOUND`,缺少宿主能力时返回 `METHOD_FORBIDDEN`。完整说明见[关注小程序作者](https://docs.xiaoheihe.cn/hb_sdk/guide/auth#关注小程序作者)。
|
|
119
|
+
|
|
106
120
|
已有 Vite 项目先在 `package.json#heybox.platforms` 声明实际承诺适配的平台(下面是官方模板的起始默认,未适配的平台应删除):
|
|
107
121
|
|
|
108
122
|
```json
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
var fs = require('node:fs');
|
|
4
4
|
var fs$1 = require('node:fs/promises');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
7
|
-
require('./version-
|
|
8
|
-
var index = require('./index-
|
|
6
|
+
var runtimePermissionEnv = require('./runtime-permission-env-N2wT7zID.cjs');
|
|
7
|
+
require('./version-xFLkgSE1.cjs');
|
|
8
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
9
9
|
var node_crypto = require('node:crypto');
|
|
10
10
|
require('node:zlib');
|
|
11
11
|
require('node:module');
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
var fs = require('node:fs/promises');
|
|
4
4
|
var path = require('node:path');
|
|
5
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
6
|
-
var index = require('./index-
|
|
5
|
+
var runtimePermissionEnv = require('./runtime-permission-env-N2wT7zID.cjs');
|
|
6
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
7
7
|
require('node:crypto');
|
|
8
8
|
require('node:fs');
|
|
9
9
|
require('node:zlib');
|
|
10
|
-
var artifact = require('./artifact-
|
|
11
|
-
var projectVite = require('./project-vite-
|
|
12
|
-
require('./version-
|
|
10
|
+
var artifact = require('./artifact-DuTM9Kkc.cjs');
|
|
11
|
+
var projectVite = require('./project-vite-Bz3Plr6e.cjs');
|
|
12
|
+
require('./version-xFLkgSE1.cjs');
|
|
13
13
|
require('node:async_hooks');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('readline');
|
|
@@ -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-COv3PHDL.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('readline');
|
|
11
11
|
require('os');
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var fs = require('node:fs');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
8
|
-
var version = require('./version-
|
|
7
|
+
var runtimePermissionEnv = require('./runtime-permission-env-N2wT7zID.cjs');
|
|
8
|
+
var version = require('./version-xFLkgSE1.cjs');
|
|
9
9
|
require('node:zlib');
|
|
10
|
-
var devContext = require('./dev-context-
|
|
10
|
+
var devContext = require('./dev-context-812hbY77.cjs');
|
|
11
11
|
var os = require('node:os');
|
|
12
12
|
var net = require('node:net');
|
|
13
13
|
var promises = require('node:dns/promises');
|
|
@@ -18,7 +18,7 @@ var fs$1 = require('node:fs/promises');
|
|
|
18
18
|
var require$$0$1 = require('crypto');
|
|
19
19
|
var require$$0 = require('buffer');
|
|
20
20
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
21
|
-
var projectVite = require('./project-vite-
|
|
21
|
+
var projectVite = require('./project-vite-Bz3Plr6e.cjs');
|
|
22
22
|
|
|
23
23
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
24
24
|
const DEFAULT_DEV_CONTEXT_TIMEOUT_MS = 3000;
|
|
@@ -3056,8 +3056,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
|
|
|
3056
3056
|
};
|
|
3057
3057
|
const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
|
|
3058
3058
|
IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
|
|
3059
|
-
const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-
|
|
3060
|
-
const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-
|
|
3059
|
+
const { WebSocket, WebSocketServer } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-C9nexLav.cjs', document.baseURI).href)))('ws');
|
|
3060
|
+
const { parse: parseHtml } = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli-chunks/dev-C9nexLav.cjs', document.baseURI).href)))('parse5');
|
|
3061
3061
|
const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
|
|
3062
3062
|
path.resolve(__dirname, 'devtools/browser-dev-host'),
|
|
3063
3063
|
path.resolve(__dirname, '../devtools/browser-dev-host'),
|
|
@@ -7112,6 +7112,33 @@ function resolveRequestAuth(ctx, requirement) {
|
|
|
7112
7112
|
}
|
|
7113
7113
|
return auth.require(requirement.realm, requirement.profile);
|
|
7114
7114
|
}
|
|
7115
|
+
/**
|
|
7116
|
+
* 验证宿主能够代行当前请求声明的认证域,不能用宿主账号替代其它 realm/profile。
|
|
7117
|
+
*
|
|
7118
|
+
* @param ctx - 当前 runtime 上下文。
|
|
7119
|
+
* @param policy - 当前请求策略。
|
|
7120
|
+
* @param auth - 请求保留的认证声明。
|
|
7121
|
+
*/
|
|
7122
|
+
function assertHostAuthRequirement(ctx, policy, auth) {
|
|
7123
|
+
const hostKey = policy.hostAuthKey;
|
|
7124
|
+
if (!hostKey?.realm) {
|
|
7125
|
+
throw new RuntimeAuthRequiredError('host-auth-key-missing');
|
|
7126
|
+
}
|
|
7127
|
+
if (!auth || auth === 'none') {
|
|
7128
|
+
return;
|
|
7129
|
+
}
|
|
7130
|
+
const requestKey = typeof auth === 'object'
|
|
7131
|
+
? auth
|
|
7132
|
+
: ctx.auth && isRuntimeAuthManager$1(ctx.auth)
|
|
7133
|
+
? { profile: ctx.auth.defaultProfile, realm: ctx.auth.defaultRealm }
|
|
7134
|
+
: ctx.auth?.getSession().authKey;
|
|
7135
|
+
if (!requestKey?.realm) {
|
|
7136
|
+
throw new RuntimeAuthRequiredError('host-auth-request-key-missing');
|
|
7137
|
+
}
|
|
7138
|
+
if (requestKey.realm !== hostKey.realm || requestKey.profile !== hostKey.profile) {
|
|
7139
|
+
throw new RuntimeAuthRequiredError('host-auth-key-mismatch');
|
|
7140
|
+
}
|
|
7141
|
+
}
|
|
7115
7142
|
/**
|
|
7116
7143
|
* 判断错误是否来自主动取消。
|
|
7117
7144
|
*
|
|
@@ -7435,8 +7462,20 @@ function createRuntimeRequest(options) {
|
|
|
7435
7462
|
observation.attemptCount = Math.max(observation.attemptCount, attempt + 1);
|
|
7436
7463
|
const policyResolvedConfig = await applyPolicy(config, attempt, channel, channelPolicy);
|
|
7437
7464
|
const authRequirement = normalizeAuthRequirement(policyResolvedConfig.auth);
|
|
7438
|
-
const
|
|
7439
|
-
|
|
7465
|
+
const authExecution = (await policy?.getAuthExecution?.({
|
|
7466
|
+
attempt,
|
|
7467
|
+
channel,
|
|
7468
|
+
config: { ...policyResolvedConfig, transport: policyResolvedConfig.transport ?? channelPolicy?.transport ?? defaultTransportId },
|
|
7469
|
+
ctx,
|
|
7470
|
+
})) ??
|
|
7471
|
+
policy?.authExecution ??
|
|
7472
|
+
'runtime';
|
|
7473
|
+
const hostAuth = authExecution === 'host';
|
|
7474
|
+
if (hostAuth && policy) {
|
|
7475
|
+
assertHostAuthRequirement(ctx, policy, policyResolvedConfig.auth);
|
|
7476
|
+
}
|
|
7477
|
+
const requestAuth = hostAuth ? undefined : resolveRequestAuth(ctx, authRequirement);
|
|
7478
|
+
if (!hostAuth && attempt === 0 && shouldRequireAuth(policyResolvedConfig.auth)) {
|
|
7440
7479
|
if (!requestAuth) {
|
|
7441
7480
|
throw new RuntimeAuthRequiredError(`request:${policyResolvedConfig.url}`);
|
|
7442
7481
|
}
|
|
@@ -7483,8 +7522,8 @@ function createRuntimeRequest(options) {
|
|
|
7483
7522
|
data: await policy.resolveResponseData(response, policyContext),
|
|
7484
7523
|
};
|
|
7485
7524
|
}
|
|
7486
|
-
const authExpired = (await requestAuth?.isAuthExpired?.(response))
|
|
7487
|
-
if (authExpired
|
|
7525
|
+
const authExpired = !hostAuth && ((await requestAuth?.isAuthExpired?.(response)) || (await policy?.isAuthExpired?.(response, policyContext)));
|
|
7526
|
+
if (authExpired) {
|
|
7488
7527
|
observation.status = response.status;
|
|
7489
7528
|
if (attempt === 0 && (await refreshForReplay(requestAuth ?? ctx.auth))) {
|
|
7490
7529
|
return send(config, observation, attempt + 1);
|
|
@@ -12185,7 +12224,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
|
|
|
12185
12224
|
function createNodeRealtimeDriverRegistry() {
|
|
12186
12225
|
const registry = createRuntimeRealtimeDriverRegistry();
|
|
12187
12226
|
registry.registerLazy('node-websocket', async () => {
|
|
12188
|
-
const mod = await Promise.resolve().then(function () { return require('./index.esm-
|
|
12227
|
+
const mod = await Promise.resolve().then(function () { return require('./index.esm-C_HWbFOx.cjs'); });
|
|
12189
12228
|
return mod.createNodeWebSocketRuntimeDriver();
|
|
12190
12229
|
});
|
|
12191
12230
|
return registry;
|
|
@@ -15366,6 +15405,91 @@ function applyRuntimeRequestTargetPolicy(policy, input) {
|
|
|
15366
15405
|
};
|
|
15367
15406
|
}
|
|
15368
15407
|
|
|
15408
|
+
/**
|
|
15409
|
+
* 显式控制 Heybox Web V4 请求签名的 metadata key。
|
|
15410
|
+
* 设置为 false 时跳过签名,主要用于第三方或已预签名请求。
|
|
15411
|
+
*/
|
|
15412
|
+
const HEYBOX_WEB_V4_SIGNING_METADATA_KEY = 'heyboxWebV4Signing';
|
|
15413
|
+
/**
|
|
15414
|
+
* 判断绝对 URL 是否指向允许携带 Heybox Web V4 签名的第一方域名。
|
|
15415
|
+
*
|
|
15416
|
+
* @param value - 待判断的绝对 URL。
|
|
15417
|
+
*/
|
|
15418
|
+
function isHeyboxFirstPartyURL(value) {
|
|
15419
|
+
try {
|
|
15420
|
+
const hostname = new URL(value, 'https://runtime.xiaoheihe.cn').hostname.toLowerCase();
|
|
15421
|
+
return /(^|\.)(xiaoheihe\.cn|maxjia\.com|debugmode\.cn)$/.test(hostname);
|
|
15422
|
+
}
|
|
15423
|
+
catch {
|
|
15424
|
+
return false;
|
|
15425
|
+
}
|
|
15426
|
+
}
|
|
15427
|
+
/**
|
|
15428
|
+
* 判断请求地址是否包含独立 origin,包括协议相对 URL。
|
|
15429
|
+
*
|
|
15430
|
+
* @param value - 待判断的请求地址。
|
|
15431
|
+
*/
|
|
15432
|
+
function isAbsoluteRequestURL(value) {
|
|
15433
|
+
return /^[a-z][a-z\d+\-.]*:/i.test(value) || value.startsWith('//');
|
|
15434
|
+
}
|
|
15435
|
+
/**
|
|
15436
|
+
* 判断当前请求是否应由 Runtime 自动补充 Heybox Web V4 签名。
|
|
15437
|
+
*
|
|
15438
|
+
* @param config - 已合并 policy、channel 和业务参数的请求配置。
|
|
15439
|
+
*/
|
|
15440
|
+
function shouldSignHeyboxWebV4Request(config) {
|
|
15441
|
+
if (config.metadata?.[HEYBOX_WEB_V4_SIGNING_METADATA_KEY] === false) {
|
|
15442
|
+
return false;
|
|
15443
|
+
}
|
|
15444
|
+
if (isAbsoluteRequestURL(config.url)) {
|
|
15445
|
+
return isHeyboxFirstPartyURL(config.url);
|
|
15446
|
+
}
|
|
15447
|
+
if (config.baseURL && isAbsoluteRequestURL(config.baseURL)) {
|
|
15448
|
+
return isHeyboxFirstPartyURL(config.baseURL);
|
|
15449
|
+
}
|
|
15450
|
+
return true;
|
|
15451
|
+
}
|
|
15452
|
+
/**
|
|
15453
|
+
* 在 transport 发送前使用服务端实际 pathname 生成 Heybox Web V4 签名。
|
|
15454
|
+
*
|
|
15455
|
+
* @param config - 已完成 query 合并的请求配置。
|
|
15456
|
+
*/
|
|
15457
|
+
function applyHeyboxWebV4Signing(config) {
|
|
15458
|
+
if (!shouldSignHeyboxWebV4Request(config)) {
|
|
15459
|
+
return config;
|
|
15460
|
+
}
|
|
15461
|
+
const pathname = stripRuntimeRequestTargetDevPrefix(normalizeHeyboxWebV4Pathname(config.url));
|
|
15462
|
+
return {
|
|
15463
|
+
...config,
|
|
15464
|
+
query: {
|
|
15465
|
+
...config.query,
|
|
15466
|
+
...createHeyboxWebV4Params(pathname),
|
|
15467
|
+
},
|
|
15468
|
+
};
|
|
15469
|
+
}
|
|
15470
|
+
/**
|
|
15471
|
+
* 在 Web V4 参数生成后追加可选的 RND 15 签名。
|
|
15472
|
+
*
|
|
15473
|
+
* @param config - 已完成 Web V4 签名的请求配置。
|
|
15474
|
+
*/
|
|
15475
|
+
function applyHeyboxRND15Signing(config) {
|
|
15476
|
+
if (config.security?.rnd !== '15') {
|
|
15477
|
+
return config;
|
|
15478
|
+
}
|
|
15479
|
+
const nonce = config.query?.nonce;
|
|
15480
|
+
const time = config.query?._time;
|
|
15481
|
+
if (typeof nonce !== 'string' || (typeof time !== 'string' && typeof time !== 'number')) {
|
|
15482
|
+
return config;
|
|
15483
|
+
}
|
|
15484
|
+
return {
|
|
15485
|
+
...config,
|
|
15486
|
+
query: {
|
|
15487
|
+
...config.query,
|
|
15488
|
+
_rnd: `15:${createHeyboxRND15Signature(nonce, `${time}:${nonce}`)}`,
|
|
15489
|
+
},
|
|
15490
|
+
};
|
|
15491
|
+
}
|
|
15492
|
+
|
|
15369
15493
|
/**
|
|
15370
15494
|
* @packageDocumentation
|
|
15371
15495
|
* 定义 Heybox 多产品、多容器的 runtime 策略集合。
|
|
@@ -15412,11 +15536,6 @@ const HEYBOX_REQUEST_SKIP_RECALL_METADATA_KEY = 'heyboxRequestSkipRecall';
|
|
|
15412
15536
|
* 标记 Heybox request recall 已尝试过的 metadata key。
|
|
15413
15537
|
*/
|
|
15414
15538
|
const HEYBOX_REQUEST_RECALL_ATTEMPTED_METADATA_KEY = 'heyboxRequestRecallAttempted';
|
|
15415
|
-
/**
|
|
15416
|
-
* 显式控制 Heybox Web V4 请求签名的 metadata key。
|
|
15417
|
-
* 设置为 false 时跳过签名,主要用于第三方或已预签名请求。
|
|
15418
|
-
*/
|
|
15419
|
-
const HEYBOX_WEB_V4_SIGNING_METADATA_KEY = 'heyboxWebV4Signing';
|
|
15420
15539
|
/**
|
|
15421
15540
|
* 需要触发认证或实名流程的 Heybox 业务状态。
|
|
15422
15541
|
*/
|
|
@@ -15721,63 +15840,6 @@ const heyboxWechatAppInvokeOptions = {
|
|
|
15721
15840
|
function createHeyboxWechatBrowserBridgePolicy() {
|
|
15722
15841
|
return createBrowserBridgePolicy('heybox://', heyboxWechatAppInvokeOptions);
|
|
15723
15842
|
}
|
|
15724
|
-
/**
|
|
15725
|
-
* 判断绝对 URL 是否指向允许携带 Heybox Web V4 签名的第一方域名。
|
|
15726
|
-
*
|
|
15727
|
-
* @param value - 待判断的绝对 URL。
|
|
15728
|
-
*/
|
|
15729
|
-
function isHeyboxFirstPartyURL(value) {
|
|
15730
|
-
try {
|
|
15731
|
-
const hostname = new URL(value, 'https://runtime.xiaoheihe.cn').hostname.toLowerCase();
|
|
15732
|
-
return /(^|\.)(xiaoheihe\.cn|maxjia\.com|debugmode\.cn)$/.test(hostname);
|
|
15733
|
-
}
|
|
15734
|
-
catch {
|
|
15735
|
-
return false;
|
|
15736
|
-
}
|
|
15737
|
-
}
|
|
15738
|
-
/**
|
|
15739
|
-
* 判断请求地址是否包含独立 origin,包括协议相对 URL。
|
|
15740
|
-
*
|
|
15741
|
-
* @param value - 待判断的请求地址。
|
|
15742
|
-
*/
|
|
15743
|
-
function isAbsoluteRequestURL(value) {
|
|
15744
|
-
return /^[a-z][a-z\d+\-.]*:/i.test(value) || value.startsWith('//');
|
|
15745
|
-
}
|
|
15746
|
-
/**
|
|
15747
|
-
* 判断当前请求是否应由 Runtime 自动补充 Heybox Web V4 签名。
|
|
15748
|
-
*
|
|
15749
|
-
* @param config - 已合并 policy、channel 和业务参数的请求配置。
|
|
15750
|
-
*/
|
|
15751
|
-
function shouldSignHeyboxWebV4Request(config) {
|
|
15752
|
-
if (config.metadata?.[HEYBOX_WEB_V4_SIGNING_METADATA_KEY] === false) {
|
|
15753
|
-
return false;
|
|
15754
|
-
}
|
|
15755
|
-
if (isAbsoluteRequestURL(config.url)) {
|
|
15756
|
-
return isHeyboxFirstPartyURL(config.url);
|
|
15757
|
-
}
|
|
15758
|
-
if (config.baseURL && isAbsoluteRequestURL(config.baseURL)) {
|
|
15759
|
-
return isHeyboxFirstPartyURL(config.baseURL);
|
|
15760
|
-
}
|
|
15761
|
-
return true;
|
|
15762
|
-
}
|
|
15763
|
-
/**
|
|
15764
|
-
* 在 transport 发送前使用服务端实际 pathname 生成 Heybox Web V4 签名。
|
|
15765
|
-
*
|
|
15766
|
-
* @param config - 已完成 query 合并的请求配置。
|
|
15767
|
-
*/
|
|
15768
|
-
function applyHeyboxWebV4Signing(config) {
|
|
15769
|
-
if (!shouldSignHeyboxWebV4Request(config)) {
|
|
15770
|
-
return config;
|
|
15771
|
-
}
|
|
15772
|
-
const pathname = stripRuntimeRequestTargetDevPrefix(normalizeHeyboxWebV4Pathname(config.url));
|
|
15773
|
-
return {
|
|
15774
|
-
...config,
|
|
15775
|
-
query: {
|
|
15776
|
-
...config.query,
|
|
15777
|
-
...createHeyboxWebV4Params(pathname),
|
|
15778
|
-
},
|
|
15779
|
-
};
|
|
15780
|
-
}
|
|
15781
15843
|
/**
|
|
15782
15844
|
* 根据显式 Content-Type 推断旧 Web 请求体编码方式。
|
|
15783
15845
|
*
|
|
@@ -15812,28 +15874,6 @@ function applyHeyboxLegacyWebDefaults(config) {
|
|
|
15812
15874
|
queryEncoding: config.queryEncoding ?? 'axios-compatible',
|
|
15813
15875
|
};
|
|
15814
15876
|
}
|
|
15815
|
-
/**
|
|
15816
|
-
* 在 Web V4 参数生成后追加可选的 RND 15 签名。
|
|
15817
|
-
*
|
|
15818
|
-
* @param config - 已完成 Web V4 签名的请求配置。
|
|
15819
|
-
*/
|
|
15820
|
-
function applyHeyboxRND15Signing(config) {
|
|
15821
|
-
if (config.security?.rnd !== '15') {
|
|
15822
|
-
return config;
|
|
15823
|
-
}
|
|
15824
|
-
const nonce = config.query?.nonce;
|
|
15825
|
-
const time = config.query?._time;
|
|
15826
|
-
if (typeof nonce !== 'string' || (typeof time !== 'string' && typeof time !== 'number')) {
|
|
15827
|
-
return config;
|
|
15828
|
-
}
|
|
15829
|
-
return {
|
|
15830
|
-
...config,
|
|
15831
|
-
query: {
|
|
15832
|
-
...config.query,
|
|
15833
|
-
_rnd: `15:${createHeyboxRND15Signature(nonce, `${time}:${nonce}`)}`,
|
|
15834
|
-
},
|
|
15835
|
-
};
|
|
15836
|
-
}
|
|
15837
15877
|
/**
|
|
15838
15878
|
* 应用 Heybox 浏览器请求默认值、安全签名和最终发送配置。
|
|
15839
15879
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
4
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
3
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
4
|
+
var runtimePermissionEnv = require('./runtime-permission-env-N2wT7zID.cjs');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
7
7
|
var path = require('node:path');
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var node_crypto = require('node:crypto');
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var index = require('./index-
|
|
6
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
7
7
|
require('node:module');
|
|
8
8
|
require('readline');
|
|
9
9
|
require('os');
|
|
@@ -240,19 +240,19 @@ function requireArgument () {
|
|
|
240
240
|
|
|
241
241
|
var command = {};
|
|
242
242
|
|
|
243
|
-
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-
|
|
243
|
+
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-COv3PHDL.cjs', document.baseURI).href)));
|
|
244
244
|
function __require$4() { return require$5("node:events"); }
|
|
245
245
|
|
|
246
|
-
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-
|
|
246
|
+
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-COv3PHDL.cjs', document.baseURI).href)));
|
|
247
247
|
function __require$3() { return require$4("node:child_process"); }
|
|
248
248
|
|
|
249
|
-
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-
|
|
249
|
+
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-COv3PHDL.cjs', document.baseURI).href)));
|
|
250
250
|
function __require$2() { return require$3("node:path"); }
|
|
251
251
|
|
|
252
|
-
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-
|
|
252
|
+
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-COv3PHDL.cjs', document.baseURI).href)));
|
|
253
253
|
function __require$1() { return require$2("node:fs"); }
|
|
254
254
|
|
|
255
|
-
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-
|
|
255
|
+
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-COv3PHDL.cjs', document.baseURI).href)));
|
|
256
256
|
function __require() { return require$1("node:process"); }
|
|
257
257
|
|
|
258
258
|
var help = {};
|
|
@@ -17251,7 +17251,7 @@ async function inspectFeedbackLog(file, size) {
|
|
|
17251
17251
|
return { mimeType: 'text/plain', width: 0, height: 0 };
|
|
17252
17252
|
}
|
|
17253
17253
|
async function createFeedbackCosClient(getToken) {
|
|
17254
|
-
const { default: COS } = await Promise.resolve().then(function () { return require('./index-
|
|
17254
|
+
const { default: COS } = await Promise.resolve().then(function () { return require('./index-febilXsM.cjs'); }).then(function (n) { return n.index; });
|
|
17255
17255
|
const cos = new COS({
|
|
17256
17256
|
getAuthorization(_options, callback) {
|
|
17257
17257
|
void getToken().then((token) => callback({
|
|
@@ -20452,7 +20452,7 @@ function installDevLogCommands(dev) {
|
|
|
20452
20452
|
}
|
|
20453
20453
|
|
|
20454
20454
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
20455
|
-
const BUILT_CLI_VERSION = '0.9.5-alpha.
|
|
20455
|
+
const BUILT_CLI_VERSION = '0.9.5-alpha.5';
|
|
20456
20456
|
const PACKAGE_JSON_CANDIDATES$1 = [
|
|
20457
20457
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
20458
20458
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -21717,39 +21717,39 @@ function createCommandLoggerResolver(options) {
|
|
|
21717
21717
|
};
|
|
21718
21718
|
}
|
|
21719
21719
|
const defaultClearLoginStatus = async (...args) => {
|
|
21720
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
21720
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CpqRWN5g.cjs'); });
|
|
21721
21721
|
return clearLoginStatus(...args);
|
|
21722
21722
|
};
|
|
21723
21723
|
const defaultLoginToHeybox = async (...args) => {
|
|
21724
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
21724
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CpqRWN5g.cjs'); });
|
|
21725
21725
|
return loginToHeybox(...args);
|
|
21726
21726
|
};
|
|
21727
21727
|
const defaultPrintLoginStatus = async (...args) => {
|
|
21728
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
21728
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CpqRWN5g.cjs'); });
|
|
21729
21729
|
return printLoginStatus(...args);
|
|
21730
21730
|
};
|
|
21731
21731
|
const defaultRunBuildCommand = async (...args) => {
|
|
21732
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
21732
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-BWDU-AtP.cjs'); });
|
|
21733
21733
|
return runBuildCommand(...args);
|
|
21734
21734
|
};
|
|
21735
21735
|
const defaultRunCreateCommand = async (...args) => {
|
|
21736
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
21736
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-CsQyw8YT.cjs'); });
|
|
21737
21737
|
return runCreateCommand(...args);
|
|
21738
21738
|
};
|
|
21739
21739
|
const defaultRunDevCommand = async (...args) => {
|
|
21740
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
21740
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-C9nexLav.cjs'); }).then(function (n) { return n.dev; });
|
|
21741
21741
|
return runDevCommand(...args);
|
|
21742
21742
|
};
|
|
21743
21743
|
const defaultRunDoctorCommand = async (...args) => {
|
|
21744
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
21744
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-k1s0u_G0.cjs'); });
|
|
21745
21745
|
return runDoctorCommand(...args);
|
|
21746
21746
|
};
|
|
21747
21747
|
const defaultRunSkillInstallCommand = async (...args) => {
|
|
21748
|
-
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-
|
|
21748
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-CFf7FLdK.cjs'); });
|
|
21749
21749
|
return runSkillInstallCommand(...args);
|
|
21750
21750
|
};
|
|
21751
21751
|
const defaultRunRemoteCommand = async (...args) => {
|
|
21752
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
21752
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-jmVwiybR.cjs'); });
|
|
21753
21753
|
return runRemoteCommand(...args);
|
|
21754
21754
|
};
|
|
21755
21755
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -21841,7 +21841,7 @@ function parseNonNegativeInteger(value) {
|
|
|
21841
21841
|
return parsed;
|
|
21842
21842
|
}
|
|
21843
21843
|
const defaultRunGameSearchCommand = async (...args) => {
|
|
21844
|
-
const { runGameSearchCommand } = await Promise.resolve().then(function () { return require('./games-
|
|
21844
|
+
const { runGameSearchCommand } = await Promise.resolve().then(function () { return require('./games-DW3oq7Sr.cjs'); });
|
|
21845
21845
|
return runGameSearchCommand(...args);
|
|
21846
21846
|
};
|
|
21847
21847
|
|
|
@@ -11,8 +11,8 @@ var require$$0$3 = require('url');
|
|
|
11
11
|
var require$$5 = require('zlib');
|
|
12
12
|
var require$$0 = require('buffer');
|
|
13
13
|
var require$$1 = require('util');
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
var dev = require('./dev-
|
|
14
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
15
|
+
var dev = require('./dev-C9nexLav.cjs');
|
|
16
16
|
require('node:module');
|
|
17
17
|
require('readline');
|
|
18
18
|
require('os');
|
|
@@ -28,10 +28,10 @@ require('node:fs/promises');
|
|
|
28
28
|
require('node:zlib');
|
|
29
29
|
require('node:readline/promises');
|
|
30
30
|
require('node:timers/promises');
|
|
31
|
-
require('./runtime-permission-env-
|
|
32
|
-
require('./version-
|
|
31
|
+
require('./runtime-permission-env-N2wT7zID.cjs');
|
|
32
|
+
require('./version-xFLkgSE1.cjs');
|
|
33
33
|
require('node:async_hooks');
|
|
34
|
-
require('./dev-context-
|
|
34
|
+
require('./dev-context-812hbY77.cjs');
|
|
35
35
|
require('sharp');
|
|
36
36
|
require('node:os');
|
|
37
37
|
require('node:net');
|
|
@@ -44,7 +44,7 @@ require('node:buffer');
|
|
|
44
44
|
require('node:url');
|
|
45
45
|
require('node:util');
|
|
46
46
|
require('node:child_process');
|
|
47
|
-
require('./project-vite-
|
|
47
|
+
require('./project-vite-Bz3Plr6e.cjs');
|
|
48
48
|
|
|
49
49
|
var bufferUtil = {exports: {}};
|
|
50
50
|
|
|
@@ -3,7 +3,7 @@
|
|
|
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 index = require('./index-
|
|
6
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
8
|
require('node:module');
|
|
9
9
|
require('readline');
|
|
@@ -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-COv3PHDL.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
4
|
-
var devContext = require('./dev-context-
|
|
3
|
+
var runtimePermissionEnv = require('./runtime-permission-env-N2wT7zID.cjs');
|
|
4
|
+
var devContext = require('./dev-context-812hbY77.cjs');
|
|
5
5
|
var promises = require('node:readline/promises');
|
|
6
|
-
var index = require('./index-
|
|
6
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
7
7
|
var childProcess = require('node:child_process');
|
|
8
8
|
var fs = require('node:fs');
|
|
9
9
|
var fs$1 = require('node:fs/promises');
|
|
10
10
|
var path = require('node:path');
|
|
11
11
|
var node_crypto = require('node:crypto');
|
|
12
12
|
require('node:zlib');
|
|
13
|
-
var artifact = require('./artifact-
|
|
14
|
-
require('./version-
|
|
13
|
+
var artifact = require('./artifact-DuTM9Kkc.cjs');
|
|
14
|
+
require('./version-xFLkgSE1.cjs');
|
|
15
15
|
require('node:async_hooks');
|
|
16
16
|
require('sharp');
|
|
17
17
|
require('node:module');
|
|
@@ -308,7 +308,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
308
308
|
};
|
|
309
309
|
}
|
|
310
310
|
async function loadCosConstructor() {
|
|
311
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
311
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-febilXsM.cjs'); }).then(function (n) { return n.index; });
|
|
312
312
|
return cosModule.default;
|
|
313
313
|
}
|
|
314
314
|
function formatSize(bytes) {
|
package/dist/cli-chunks/{runtime-permission-env-BfP6motG.cjs → runtime-permission-env-N2wT7zID.cjs}
RENAMED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var fs = require('node:fs');
|
|
4
4
|
var path = require('node:path');
|
|
5
|
-
var version$1 = require('./version-
|
|
5
|
+
var version$1 = require('./version-xFLkgSE1.cjs');
|
|
6
6
|
require('node:crypto');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-COv3PHDL.cjs');
|
|
8
8
|
var node_async_hooks = require('node:async_hooks');
|
|
9
9
|
|
|
10
10
|
/**
|