@heybox/hb-sdk 0.8.1-alpha.6 → 0.8.1-alpha.8
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 +10 -1
- package/README.md +3 -3
- package/dist/cli-chunks/{build-B0X9pazW.cjs → build-BYWPo2MY.cjs} +4 -4
- package/dist/cli-chunks/{context-DVfWZ6d1.cjs → context-B4tBsR6l.cjs} +11 -2
- package/dist/cli-chunks/{create-CyQWVxCA.cjs → create-Dct-INxs.cjs} +1 -1
- package/dist/cli-chunks/{dev-DP7WtQOo.cjs → dev-6N5ruKiC.cjs} +172 -49
- package/dist/cli-chunks/{doctor-D6l-ONq-.cjs → doctor-9HtdddBL.cjs} +1 -1
- package/dist/cli-chunks/{index-CDwwaNvP.cjs → index-Bc4AXYHM.cjs} +15 -15
- package/dist/cli-chunks/{index-DvOPzPxS.cjs → index-Cl5cfUqJ.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-B8pX0BrZ.cjs → index.esm-DhXN7XjE.cjs} +7 -7
- package/dist/cli-chunks/{login-Dt-FHzpL.cjs → login-CTZgu8Q-.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-CE7kyqxl.cjs → project-vite--h2M6eBb.cjs} +1 -1
- package/dist/cli-chunks/{remote-Be6PeR-n.cjs → remote-0hw42fDG.cjs} +6 -6
- package/dist/cli-chunks/{runtime-permission-env-DWSscWBT.cjs → runtime-permission-env-Bvggu6mn.cjs} +1 -1
- package/dist/cli-chunks/{session-DZXRQ4Dp.cjs → session-5fnHlEGO.cjs} +1 -1
- package/dist/cli-chunks/{skill-B8GWL2KT.cjs → skill-DrFEqmdD.cjs} +2 -2
- package/dist/cli-chunks/{version-D19lZmYN.cjs → version-CccOA4so.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-BQ9v4rI1.js +101 -0
- package/dist/devtools/browser-dev-host/assets/{index-Dh5wRj5c.js → index-8LTH05np.js} +2 -2
- package/dist/devtools/browser-dev-host/index.html +1 -1
- package/dist/index.cjs.js +1 -10
- package/dist/index.esm.js +1 -10
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +7 -7
- package/skill/SKILL.md +1 -1
- package/skill/references/api-root.md +1 -1
- package/skill/references/cli.md +2 -0
- package/skill/references/safety-boundaries.md +2 -2
- package/skill/skill.json +5 -5
- package/types/modules/network/index.d.ts +1 -4
- package/types/modules/network/observability.d.ts +0 -1
- package/types/protocol/dev-session.d.ts +2 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-Bb43BPMS.js +0 -101
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
本文件随 `@heybox/hb-sdk` npm 包公开分发,只记录外部小程序开发者可观察到的变化。内部集成、实现策略和审查证据不在此维护。
|
|
4
4
|
|
|
5
|
+
## 0.8.1-alpha.8
|
|
6
|
+
|
|
7
|
+
- 手机 Dev Session 仅使用当前版本声明与平台批准结果求交后的有效权限;两者均允许 `useOfficialDomain: true` 时,真机扫码调试可访问官方域名,本地调试状态不能扩大该权限。
|
|
8
|
+
- 创建手机调试会话前会刷新远端批准结果;读取失败时拒绝签发新会话,已创建会话仍按短期有效期自动失效。
|
|
9
|
+
- 保持升级或回滚 CLI 时的新旧调试页兼容,并继续拒绝官方账号敏感路径、敏感请求头和自动重定向。
|
|
10
|
+
|
|
11
|
+
## 0.8.1-alpha.7
|
|
12
|
+
|
|
13
|
+
- `network.request` 已标记为废弃,但仍可调用,目前没有替代接口。请移除 `withCredentials`;旧版 SDK 的 wire 字段由 Runtime 兼容忽略。Mobile 对官方 HTTPS 默认端口目标自动携带 Native Cookie,第三方不自动携带。需要第三方会话时可显式提供应用 `Cookie` 或 `Authorization`;Web Host 受浏览器 Fetch 限制,不支持显式 `Cookie`。`Origin`、`Referer`、`User-Agent` 由 Host 管理,路由/分帧/逐跳请求头不能由小程序设置。
|
|
14
|
+
|
|
5
15
|
## 0.8.1-alpha.6
|
|
6
16
|
|
|
7
17
|
- 修复远端权限快照包含未知权限且 `config` 为 `null` 时,`hb-sdk remote info` 把已批准的网络权限和官方域名配置误判为未批准的问题。
|
|
@@ -30,7 +40,6 @@
|
|
|
30
40
|
|
|
31
41
|
- 目标平台声明统一迁移到 `package.json#heybox.platforms`;`miniappManifest()` 恢复无参调用,并在构建时将该声明写入 `dist/manifest.json`。
|
|
32
42
|
- `hb-sdk dev`、`hb-sdk build` 和普通 `hb-sdk remote deploy` 会拒绝缺失或非法的平台声明;build/deploy 也会拒绝与项目配置不一致的 Manifest。已有项目升级时需把原 Vite 参数中的 `platforms` 移入 `package.json#heybox`。
|
|
33
|
-
|
|
34
43
|
## 0.8.1-alpha.2
|
|
35
44
|
|
|
36
45
|
- 新增 `environment.getInfo()` 与 `environment.getInfoSync()`,用于读取运行模式、小黑盒 App 版本、canonical 小程序 ID/版本、操作系统和 SDK 版本的冻结快照。
|
package/README.md
CHANGED
|
@@ -258,12 +258,12 @@ SDK 还提供 `getHandshakeState()` / `onHandshakeStateChange()` 管理持久握
|
|
|
258
258
|
- `auth.login()`、`user.getInfo()` 和 `user.getSteamGameList()` 的可用性不由 `network` 决定;它们分别要求 `userInfo` 或 `steamLibrary`,并继续遵循各自的用户授权和数据规则。
|
|
259
259
|
- `user.revokeAuthorization()` 在两种网络模式下都要求可信用户手势;成功后必须停止使用并清理业务缓存的旧身份、资料和服务端会话。
|
|
260
260
|
- `on()` 返回取消监听函数,组件卸载或页面销毁时需要调用。
|
|
261
|
-
-
|
|
261
|
+
- 现有业务网络请求仍使用 `network.request()`;该 API 已标记废弃,但目前没有替代调用入口,不要依赖浏览器原生网络出口。
|
|
262
262
|
- 公开 `network.request()` 与 `network.download()` 均使用 no-follow redirect policy;3xx 不会在 Host 内静默跳转。
|
|
263
263
|
- `network.request()` 不能访问平台保留的 runtime auth 与 OpenAPI 内部路径;页面不得持有或交换服务端应用凭据。
|
|
264
264
|
- `network.request` 不支持 `multipart/form-data`;App Host 仅支持 form(`application/x-www-form-urlencoded`)与 JSON。表单请用 `URLSearchParams#toString()` 作为 `data`,文件上传请走专用上传能力。
|
|
265
265
|
- 新 PC 开放持久 sandbox、单文件/目录 picker、精确 File 保存与公网 `network.download()`;多选和小黑盒域名流式下载暂不支持。Mobile、Web 与 Browser Dev Host 仍未开放这些 primitive。
|
|
266
|
-
-
|
|
266
|
+
- `withCredentials` 不再是支持的配置字段,也不会进入新 SDK、协议或 Host contract;旧 SDK 构建产物的 wire 字段仅由 Runtime 兼容忽略。Mobile 对官方 HTTPS 默认端口目标自动启用 Native Cookie,第三方关闭;应用可显式提供 `Cookie`、`Authorization` 等请求头。`Origin`、`Referer`、`User-Agent` 由 Host 接管;`Host`、分帧及逐跳请求头由传输层管理,不能由小程序设置。Web Host 使用浏览器 Fetch,无法发送显式 `Cookie` 等浏览器禁止的头,会返回 `REQUEST_UNSUPPORTED`;需要第三方 Cookie 会话时请在支持原始请求头的 Mobile/PC Host 验收。
|
|
267
267
|
- 新 PC 不支持振动、分享菜单和截图分享;`navigation.openAppPage` 仅支持 `game_detail`,用户/帖子详情会明确失败。调用平台相关能力时应处理 `METHOD_FORBIDDEN` 或 `REQUEST_UNSUPPORTED`。
|
|
268
268
|
- picker 必须来自可信用户手势;取消选择返回 `FILE_PICKER_CANCELLED`。`saveFile()` 只接受 `suggestedName`,不接受 `accept`。
|
|
269
269
|
- `pickFiles()` / `pickDirectory()` 默认只读;`pickFiles()` 仅在显式传入 `multiple: true` 时允许 Host 返回多个文件。要写入或作为下载目标时显式请求 `mode: 'readwrite'`。
|
|
@@ -355,7 +355,7 @@ hb-sdk remote deploy --release-note "本次更新说明"
|
|
|
355
355
|
|
|
356
356
|
右上角的桌面图标与二维码按钮使用相同样式。点击桌面图标后选择小黑盒正式版或 Debug 版,选择会立即请求客户端打开当前本地页面并在本地记忆,不需要二次确认。桌面端只接受无凭据的 `http://127.0.0.1:<port>`,拒绝 `localhost`、IPv6 和 LAN 地址,不提供地址选择或手工 URL;手机二维码继续独立选择局域网地址。入口仅在项目已绑定且本地调试启动票有效时可用,统一 URI 只携带 `mini_program_id` 和 `mini_url`,启动票继续由 detail 从同源 `launch.json` 发现并交给后端验证。浏览器无法确认客户端是否真正打开,因此调试台只记录“已请求打开”,不会自动切换正式版或 Debug 版。
|
|
357
357
|
|
|
358
|
-
浏览器调试入口不要求 CLI 登录或项目绑定;需要账号或远端配置的能力会按当前可用上下文返回结果或明确失败。调试台不提供权限修改入口,远端权限快照始终是 Runtime
|
|
358
|
+
浏览器调试入口不要求 CLI 登录或项目绑定;需要账号或远端配置的能力会按当前可用上下文返回结果或明确失败。调试台不提供权限修改入口,远端权限快照始终是 Runtime 的规范输入。手机 Dev Session 只使用当前版本声明与平台批准结果求交后的有效权限;两者均允许 `useOfficialDomain: true` 时会保留官方域名权限,浏览器端不能本地覆盖。手机验收统一从右上角二维码入口进入,选择手机可达的局域网网卡后扫码;二维码使用 `open_inapp` 与 `heybox://` `openWindow` 包装的短链。完整操作见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli),实现与安全边界由 [Runtime Host 迁移](./docs/runtime-host-migration.md) 维护。
|
|
359
359
|
|
|
360
360
|
远端提交前需要完成 CLI 登录和小程序绑定。完整的登录、绑定、预览、版本与发布流程见 [CLI 指南](https://docs.xiaoheihe.cn/hb_sdk/guide/cli)。
|
|
361
361
|
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
var fs$1 = require('node:fs');
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var path = require('node:path');
|
|
6
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
6
|
+
var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
|
|
7
7
|
require('node:crypto');
|
|
8
8
|
require('node:zlib');
|
|
9
9
|
var runtimeGate = require('./runtime-gate-BWb8QIcX.cjs');
|
|
10
|
-
var index = require('./index-
|
|
11
|
-
var projectVite = require('./project-vite
|
|
12
|
-
require('./version-
|
|
10
|
+
var index = require('./index-Bc4AXYHM.cjs');
|
|
11
|
+
var projectVite = require('./project-vite--h2M6eBb.cjs');
|
|
12
|
+
require('./version-CccOA4so.cjs');
|
|
13
13
|
require('node:async_hooks');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('path');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
4
|
-
var session = require('./session-
|
|
3
|
+
var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
|
|
4
|
+
var session = require('./session-5fnHlEGO.cjs');
|
|
5
5
|
var fs$1 = require('node:fs');
|
|
6
6
|
var fs = require('node:fs/promises');
|
|
7
7
|
var path = require('node:path');
|
|
@@ -32,6 +32,14 @@ function createBrowserDevPermissionState(context) {
|
|
|
32
32
|
function createBrowserDevRuntimePermissions(snapshot, state) {
|
|
33
33
|
return createDevRuntimePermissions(snapshot, state, state.networkRequest.useOfficialDomain);
|
|
34
34
|
}
|
|
35
|
+
/** Mobile Dev Session 只接受线上远端权限快照,不读取 Browser 本地权限状态。 */
|
|
36
|
+
function createMobileDevSessionRuntimePermissions(context) {
|
|
37
|
+
if (context.source !== 'remote') {
|
|
38
|
+
return { schema_version: 1, entries: [] };
|
|
39
|
+
}
|
|
40
|
+
const state = createBrowserDevPermissionState(context);
|
|
41
|
+
return createDevRuntimePermissions(context.runtimePermissions, state, state.networkRequest.useOfficialDomain);
|
|
42
|
+
}
|
|
35
43
|
function cloneDefaultPermissionState() {
|
|
36
44
|
return {
|
|
37
45
|
networkRequest: { ...DEFAULT_PERMISSION_STATE.networkRequest },
|
|
@@ -388,6 +396,7 @@ exports.MiniProgramProjectBindingError = MiniProgramProjectBindingError;
|
|
|
388
396
|
exports.createBrowserDevPermissionState = createBrowserDevPermissionState;
|
|
389
397
|
exports.createBrowserDevRuntimePermissions = createBrowserDevRuntimePermissions;
|
|
390
398
|
exports.createLocalDevLaunchToken = createLocalDevLaunchToken;
|
|
399
|
+
exports.createMobileDevSessionRuntimePermissions = createMobileDevSessionRuntimePermissions;
|
|
391
400
|
exports.createRemoteApiClientForEnvironment = createRemoteApiClientForEnvironment;
|
|
392
401
|
exports.getBoundMiniProgram = getBoundMiniProgram;
|
|
393
402
|
exports.readBoundMiniProgramId = readBoundMiniProgramId;
|
|
@@ -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-Bc4AXYHM.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('readline');
|
|
@@ -8,17 +8,17 @@ var net = require('node:net');
|
|
|
8
8
|
var promises = require('node:dns/promises');
|
|
9
9
|
var node_http = require('node:http');
|
|
10
10
|
var node_module = require('node:module');
|
|
11
|
-
var context = require('./context-
|
|
12
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
11
|
+
var context = require('./context-B4tBsR6l.cjs');
|
|
12
|
+
var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
|
|
13
13
|
var undici = require('undici');
|
|
14
14
|
var fs$1 = require('node:fs/promises');
|
|
15
|
-
var index = require('./index-
|
|
15
|
+
var index = require('./index-Bc4AXYHM.cjs');
|
|
16
16
|
var require$$0$1 = require('crypto');
|
|
17
17
|
var require$$0 = require('buffer');
|
|
18
|
-
var session = require('./session-
|
|
18
|
+
var session = require('./session-5fnHlEGO.cjs');
|
|
19
19
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
20
|
-
var projectVite = require('./project-vite
|
|
21
|
-
var version = require('./version-
|
|
20
|
+
var projectVite = require('./project-vite--h2M6eBb.cjs');
|
|
21
|
+
var version = require('./version-CccOA4so.cjs');
|
|
22
22
|
require('node:zlib');
|
|
23
23
|
|
|
24
24
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
@@ -623,10 +623,100 @@ function readErrorMessage(error) {
|
|
|
623
623
|
return error instanceof Error ? error.message : String(error);
|
|
624
624
|
}
|
|
625
625
|
|
|
626
|
+
const PATHNAME_MAX_DECODE_ROUNDS = 4;
|
|
627
|
+
const OFFICIAL_ROOT_DOMAINS = ['xiaoheihe.cn', 'max-c.com', 'debugmode.cn', 'maxjia.com'];
|
|
628
|
+
const DENIED_REQUEST_HEADERS = new Set([
|
|
629
|
+
'connection',
|
|
630
|
+
'content-length',
|
|
631
|
+
'host',
|
|
632
|
+
'keep-alive',
|
|
633
|
+
'proxy-connection',
|
|
634
|
+
'te',
|
|
635
|
+
'trailer',
|
|
636
|
+
'transfer-encoding',
|
|
637
|
+
'upgrade',
|
|
638
|
+
]);
|
|
639
|
+
/** 任意 origin 都不得通过公开 network.request 访问的 Runtime 私有路径。 */
|
|
640
|
+
const PUBLIC_NETWORK_PROTECTED_PATH_PREFIXES = ['/user_miniprogram/runtime/auth', '/user_miniprogram/openapi/v1'];
|
|
641
|
+
/** 官方 origin 上会签发、恢复或校验账号 credential 的私有路径。 */
|
|
642
|
+
const PUBLIC_NETWORK_OFFICIAL_ACCOUNT_SENSITIVE_PATH_PREFIXES = [
|
|
643
|
+
'/account/restore_login',
|
|
644
|
+
'/account/check_login',
|
|
645
|
+
'/account/login',
|
|
646
|
+
'/account/get_login_code',
|
|
647
|
+
'/account/login_code',
|
|
648
|
+
'/account/get_qrcode_url',
|
|
649
|
+
'/account/qr_state',
|
|
650
|
+
'/account/google_2fa_verify',
|
|
651
|
+
'/account/open/login',
|
|
652
|
+
'/account/captcha',
|
|
653
|
+
'/account/get_verify_code',
|
|
654
|
+
'/account/send_verify_code',
|
|
655
|
+
'/account/verify_code',
|
|
656
|
+
];
|
|
657
|
+
/** 判断公开网络能力是否命中 Runtime 或官方账号敏感路径。 */
|
|
658
|
+
function isProtectedMiniProgramNetworkPath(pathname, official) {
|
|
659
|
+
const normalized = normalizePublicNetworkPathname(pathname);
|
|
660
|
+
if (normalized === null)
|
|
661
|
+
return true;
|
|
662
|
+
if (matchesPathPrefix(normalized, PUBLIC_NETWORK_PROTECTED_PATH_PREFIXES))
|
|
663
|
+
return true;
|
|
664
|
+
return official && matchesPathPrefix(normalized, PUBLIC_NETWORK_OFFICIAL_ACCOUNT_SENSITIVE_PATH_PREFIXES);
|
|
665
|
+
}
|
|
666
|
+
/** 使用 Runtime 唯一的官方域名分类规则判断请求目标。 */
|
|
667
|
+
function isOfficialMiniProgramNetworkUrl(url) {
|
|
668
|
+
const hostname = url.hostname.toLowerCase().replace(/\.$/, '');
|
|
669
|
+
return OFFICIAL_ROOT_DOMAINS.some((rootDomain) => hostname === rootDomain || hostname.endsWith(`.${rootDomain}`));
|
|
670
|
+
}
|
|
671
|
+
/** 判断公开网络能力是否禁止调用方设置该请求头。 */
|
|
672
|
+
function isForbiddenMiniProgramNetworkRequestHeader(name) {
|
|
673
|
+
const normalized = name.trim().toLowerCase();
|
|
674
|
+
return DENIED_REQUEST_HEADERS.has(normalized) || /^(?:x-heybox|x-xhh)-(?:access-token|auth|authorization|pkey|session|token)$/.test(normalized);
|
|
675
|
+
}
|
|
676
|
+
function normalizePublicNetworkPathname(pathname) {
|
|
677
|
+
let decoded = pathname;
|
|
678
|
+
for (let round = 0; round < PATHNAME_MAX_DECODE_ROUNDS; round += 1) {
|
|
679
|
+
let next;
|
|
680
|
+
try {
|
|
681
|
+
next = decodeURIComponent(decoded);
|
|
682
|
+
}
|
|
683
|
+
catch {
|
|
684
|
+
return null;
|
|
685
|
+
}
|
|
686
|
+
if (next === decoded)
|
|
687
|
+
return normalizeDecodedPathname(decoded);
|
|
688
|
+
decoded = next;
|
|
689
|
+
}
|
|
690
|
+
try {
|
|
691
|
+
if (decodeURIComponent(decoded) !== decoded)
|
|
692
|
+
return null;
|
|
693
|
+
}
|
|
694
|
+
catch {
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
697
|
+
return normalizeDecodedPathname(decoded);
|
|
698
|
+
}
|
|
699
|
+
function matchesPathPrefix(pathname, prefixes) {
|
|
700
|
+
return prefixes.some((prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`));
|
|
701
|
+
}
|
|
702
|
+
function normalizeDecodedPathname(pathname) {
|
|
703
|
+
const segments = [];
|
|
704
|
+
for (const segment of pathname.replace(/\\/g, '/').split('/')) {
|
|
705
|
+
if (!segment || segment === '.')
|
|
706
|
+
continue;
|
|
707
|
+
if (segment === '..')
|
|
708
|
+
segments.pop();
|
|
709
|
+
else
|
|
710
|
+
segments.push(segment);
|
|
711
|
+
}
|
|
712
|
+
return `/${segments.join('/')}`;
|
|
713
|
+
}
|
|
714
|
+
|
|
626
715
|
const MAX_BROWSER_DEV_HOST_NETWORK_REQUEST_BODY = 2 * 1024 * 1024;
|
|
627
716
|
const MAX_BROWSER_DEV_HOST_NETWORK_RESPONSE_BODY = 5 * 1024 * 1024;
|
|
628
717
|
const DENIED_NETWORK_TARGETS = createDeniedNetworkTargets();
|
|
629
|
-
const
|
|
718
|
+
const CREDENTIAL_RESPONSE_HEADER_RE = /^(?:authentication-info|authorization|cookie|cookie2|proxy-authenticate|proxy-authentication-info|proxy-authorization|set-cookie|set-cookie2|www-authenticate|pkey|x-pkey|x-access-token|x-auth-token|x-api-key)$/i;
|
|
719
|
+
const HOST_CONTROLLED_REQUEST_HEADERS = new Set(['origin', 'referer', 'user-agent']);
|
|
630
720
|
async function handleBrowserDevHostNetworkProxy(request, response, fetchImpl, lookupHostname, options) {
|
|
631
721
|
const cors = options.cors === true;
|
|
632
722
|
if (request.method === 'OPTIONS') {
|
|
@@ -645,7 +735,7 @@ async function handleBrowserDevHostNetworkProxy(request, response, fetchImpl, lo
|
|
|
645
735
|
payload = await readJsonRequestBody(request);
|
|
646
736
|
const requestAbort = createBrowserDevHostRequestAbortScope(request, response);
|
|
647
737
|
try {
|
|
648
|
-
const result = await requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, options.allowedHttpOrigins, requestAbort.signal);
|
|
738
|
+
const result = await requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, options.allowedHttpOrigins, requestAbort.signal, options.permission);
|
|
649
739
|
if (typeof result.status === 'number' && (result.status < 200 || result.status >= 300)) {
|
|
650
740
|
logBrowserDevHostNetworkProxyDiagnostic('http_status', payload, result);
|
|
651
741
|
}
|
|
@@ -701,11 +791,12 @@ function writeNetworkJsonResponse(response, status, body, cors) {
|
|
|
701
791
|
writeJsonResponse(response, status, body);
|
|
702
792
|
}
|
|
703
793
|
const BROWSER_DEV_HOST_NETWORK_MULTIPART_UNSUPPORTED_MESSAGE = 'network.request 不支持 multipart/form-data。App Host 客户端代发仅支持 application/x-www-form-urlencoded(form)与 application/json;请将 data 编码为 form 字符串(例如 new URLSearchParams({...}).toString())并设置 Content-Type: application/x-www-form-urlencoded。文件上传请使用专用上传能力,勿手写 multipart boundary。';
|
|
704
|
-
async function requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, allowedHttpOrigins, requestSignal) {
|
|
794
|
+
async function requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname, allowedHttpOrigins, requestSignal, permission) {
|
|
705
795
|
if (!isRecord$2(payload) || typeof payload.url !== 'string' || !payload.url.trim()) {
|
|
706
796
|
throw createBrowserDevHostError(400, 'INVALID_NETWORK_REQUEST', 'network.request url 必须是非空字符串');
|
|
707
797
|
}
|
|
708
798
|
const url = createBrowserDevHostNetworkUrl(payload.url, payload.params);
|
|
799
|
+
assertMiniProgramNetworkPolicy(url, permission);
|
|
709
800
|
const method = typeof payload.method === 'string' && payload.method.trim() ? payload.method.trim().toUpperCase() : 'GET';
|
|
710
801
|
const headers = normalizeBrowserDevHostNetworkHeaders(payload.headers);
|
|
711
802
|
assertSupportedBrowserDevHostNetworkRequestShape(headers, payload.data);
|
|
@@ -738,7 +829,7 @@ async function requestBrowserDevHostNetwork(payload, fetchImpl, lookupHostname,
|
|
|
738
829
|
data: contentType.includes('application/json') ? safeJsonParse(text) : text,
|
|
739
830
|
status: response.status,
|
|
740
831
|
statusText: response.statusText,
|
|
741
|
-
headers: Object.fromEntries([...response.headers.entries()].filter(([name]) => !
|
|
832
|
+
headers: Object.fromEntries([...response.headers.entries()].filter(([name]) => !isCredentialResponseHeader(name))),
|
|
742
833
|
};
|
|
743
834
|
}
|
|
744
835
|
catch (error) {
|
|
@@ -833,9 +924,9 @@ function isDeniedNetworkAddress(address, family) {
|
|
|
833
924
|
}
|
|
834
925
|
return true;
|
|
835
926
|
}
|
|
836
|
-
function
|
|
927
|
+
function isCredentialResponseHeader(name) {
|
|
837
928
|
const normalized = name.trim().toLowerCase();
|
|
838
|
-
return
|
|
929
|
+
return CREDENTIAL_RESPONSE_HEADER_RE.test(normalized) || normalized.startsWith('x-heybox-') || normalized.startsWith('x-xhh-');
|
|
839
930
|
}
|
|
840
931
|
function createPinnedNetworkDispatcher(pinnedTargets) {
|
|
841
932
|
const connect = undici.buildConnector({});
|
|
@@ -908,31 +999,29 @@ function normalizeBrowserDevHostNetworkHeaders(headers) {
|
|
|
908
999
|
return normalized;
|
|
909
1000
|
}
|
|
910
1001
|
Object.entries(headers).forEach(([key, value]) => {
|
|
911
|
-
if (
|
|
1002
|
+
if (isForbiddenMiniProgramNetworkRequestHeader(key)) {
|
|
912
1003
|
throw createBrowserDevHostError(400, 'INVALID_NETWORK_REQUEST', `network.request 不允许设置敏感请求头: ${key}`);
|
|
913
1004
|
}
|
|
914
|
-
if (typeof value === 'string' && !
|
|
1005
|
+
if (typeof value === 'string' && !isHostManagedRequestHeader(key)) {
|
|
915
1006
|
normalized.set(key, value);
|
|
916
1007
|
}
|
|
917
1008
|
});
|
|
918
1009
|
return normalized;
|
|
919
1010
|
}
|
|
920
|
-
function
|
|
921
|
-
|
|
1011
|
+
function isHostManagedRequestHeader(name) {
|
|
1012
|
+
const normalized = name.trim().toLowerCase();
|
|
1013
|
+
return HOST_CONTROLLED_REQUEST_HEADERS.has(normalized);
|
|
922
1014
|
}
|
|
923
|
-
function
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
'
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
'
|
|
932
|
-
|
|
933
|
-
'transfer-encoding',
|
|
934
|
-
'upgrade',
|
|
935
|
-
].includes(key.toLowerCase());
|
|
1015
|
+
function assertMiniProgramNetworkPolicy(url, permission) {
|
|
1016
|
+
if (!permission)
|
|
1017
|
+
return;
|
|
1018
|
+
const official = isOfficialMiniProgramNetworkUrl(url);
|
|
1019
|
+
if (official && !permission.useOfficialDomain) {
|
|
1020
|
+
throw createBrowserDevHostError(403, 'PERMISSION_DENIED', '当前小程序暂不支持访问官方域名');
|
|
1021
|
+
}
|
|
1022
|
+
if (isProtectedMiniProgramNetworkPath(url.pathname, official)) {
|
|
1023
|
+
throw createBrowserDevHostError(403, 'PERMISSION_DENIED', 'network.request 不允许访问 Runtime 或账号敏感接口');
|
|
1024
|
+
}
|
|
936
1025
|
}
|
|
937
1026
|
/**
|
|
938
1027
|
* 与 App Host 对齐:Mock 不再放行 multipart,避免“本地成功、上线失败”。
|
|
@@ -1071,7 +1160,8 @@ function createDevSessionRoutes(options) {
|
|
|
1071
1160
|
}
|
|
1072
1161
|
try {
|
|
1073
1162
|
const payload = await readJsonRequestBody(request);
|
|
1074
|
-
const
|
|
1163
|
+
const runtimePermissions = context.createMobileDevSessionRuntimePermissions(await options.readDevContext());
|
|
1164
|
+
const validated = validateDevSessionCreatePayload(payload, options.allowedMiniUrlOrigins, runtimePermissions);
|
|
1075
1165
|
reapExpiredDevSessions(devSessions, expiredDevSessions, options.now());
|
|
1076
1166
|
const replacedTokens = findDevSessionTokensForOrigin(devSessions, validated.miniUrlOrigin);
|
|
1077
1167
|
if (devSessions.size - replacedTokens.length >= MAX_ACTIVE_DEV_SESSIONS) {
|
|
@@ -1090,6 +1180,7 @@ function createDevSessionRoutes(options) {
|
|
|
1090
1180
|
expiresAt,
|
|
1091
1181
|
miniUrlOrigin: validated.miniUrlOrigin,
|
|
1092
1182
|
networkRequestEnabled: validated.networkRequestEnabled,
|
|
1183
|
+
useOfficialDomain: validated.useOfficialDomain,
|
|
1093
1184
|
serialized: JSON.stringify(snapshot),
|
|
1094
1185
|
});
|
|
1095
1186
|
try {
|
|
@@ -1138,7 +1229,7 @@ function createDevSessionRoutes(options) {
|
|
|
1138
1229
|
},
|
|
1139
1230
|
};
|
|
1140
1231
|
}
|
|
1141
|
-
function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins) {
|
|
1232
|
+
function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins, runtimePermissions) {
|
|
1142
1233
|
if (!isRecord$2(payload) || Object.keys(payload).some((key) => !['mini_url_origin', 'runtime_permissions'].includes(key))) {
|
|
1143
1234
|
throw new TypeError('Dev Session body is invalid');
|
|
1144
1235
|
}
|
|
@@ -1158,18 +1249,16 @@ function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins) {
|
|
|
1158
1249
|
!allowedMiniUrlOrigins.has(miniUrlOrigin.origin)) {
|
|
1159
1250
|
throw new TypeError('mini_url_origin must be an allowed LAN origin');
|
|
1160
1251
|
}
|
|
1161
|
-
const parsedPermissions = runtimePermissionEnv.parseMiniProgramRuntimePermissions(
|
|
1252
|
+
const parsedPermissions = runtimePermissionEnv.parseMiniProgramRuntimePermissions(runtimePermissions);
|
|
1162
1253
|
if (!parsedPermissions.valid) {
|
|
1163
1254
|
throw new TypeError('runtime_permissions is invalid');
|
|
1164
1255
|
}
|
|
1165
1256
|
const networkPermission = parsedPermissions.permissions.network;
|
|
1166
|
-
if (networkPermission?.config.useOfficialDomain !== false) {
|
|
1167
|
-
throw new TypeError('Dev Session does not allow official domains');
|
|
1168
|
-
}
|
|
1169
1257
|
return {
|
|
1170
1258
|
miniUrlOrigin: miniUrlOrigin.origin,
|
|
1171
|
-
networkRequestEnabled: networkPermission
|
|
1172
|
-
|
|
1259
|
+
networkRequestEnabled: networkPermission?.status === 'enabled',
|
|
1260
|
+
useOfficialDomain: networkPermission?.status === 'enabled' && networkPermission.config.useOfficialDomain === true,
|
|
1261
|
+
runtimePermissions: JSON.parse(JSON.stringify(runtimePermissions)),
|
|
1173
1262
|
};
|
|
1174
1263
|
}
|
|
1175
1264
|
async function handleTokenNetworkProxy(request, response, token, runtime) {
|
|
@@ -1199,6 +1288,7 @@ async function handleTokenNetworkProxy(request, response, token, runtime) {
|
|
|
1199
1288
|
await handleBrowserDevHostNetworkProxy(request, response, runtime.fetchImpl, runtime.lookupHostname, {
|
|
1200
1289
|
allowedHttpOrigins: new Set([resolved.session.miniUrlOrigin]),
|
|
1201
1290
|
cors: true,
|
|
1291
|
+
permission: { useOfficialDomain: resolved.session.useOfficialDomain },
|
|
1202
1292
|
});
|
|
1203
1293
|
}
|
|
1204
1294
|
function resolveDevSession(token, devSessions, expiredDevSessions, now) {
|
|
@@ -1860,8 +1950,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
|
|
|
1860
1950
|
};
|
|
1861
1951
|
const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
|
|
1862
1952
|
IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
|
|
1863
|
-
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-
|
|
1864
|
-
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-
|
|
1953
|
+
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-6N5ruKiC.cjs', document.baseURI).href)))('ws');
|
|
1954
|
+
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-6N5ruKiC.cjs', document.baseURI).href)))('parse5');
|
|
1865
1955
|
const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
|
|
1866
1956
|
path.resolve(__dirname, 'devtools/browser-dev-host'),
|
|
1867
1957
|
path.resolve(__dirname, '../devtools/browser-dev-host'),
|
|
@@ -1916,6 +2006,8 @@ async function startBrowserDevHostServer(options) {
|
|
|
1916
2006
|
loginAvailable: options.loginService !== undefined,
|
|
1917
2007
|
cliAuth: options.cliAuth,
|
|
1918
2008
|
readDevContext: () => bootstrap.devContext ?? { source: 'anonymous', runtimePermissions: bootstrap.runtimePermissions },
|
|
2009
|
+
readMobileDevSessionContext: options.readMobileDevSessionContext ??
|
|
2010
|
+
(() => Promise.resolve(bootstrap.devContext ?? { source: 'anonymous', runtimePermissions: bootstrap.runtimePermissions })),
|
|
1919
2011
|
readLanAddresses: () => bootstrap.lanAddresses,
|
|
1920
2012
|
mobileLaunchRedirectRegistry,
|
|
1921
2013
|
onMobileDevSessionCreated: options.onMobileDevSessionCreated,
|
|
@@ -2085,6 +2177,7 @@ function createBrowserDevHostServer(root, runtime) {
|
|
|
2085
2177
|
fetchImpl: runtime.fetchImpl,
|
|
2086
2178
|
lookupHostname: runtime.lookupHostname,
|
|
2087
2179
|
now: runtime.now,
|
|
2180
|
+
readDevContext: runtime.readMobileDevSessionContext,
|
|
2088
2181
|
onCreated: ({ expiresAt, miniUrlOrigin, token }, request) => {
|
|
2089
2182
|
const origin = new URL(readRequestOrigin(request));
|
|
2090
2183
|
const hostname = origin.hostname.startsWith('[') && origin.hostname.endsWith(']') ? origin.hostname.slice(1, -1) : origin.hostname;
|
|
@@ -10952,7 +11045,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
|
|
|
10952
11045
|
function createNodeRealtimeDriverRegistry() {
|
|
10953
11046
|
const registry = createRuntimeRealtimeDriverRegistry();
|
|
10954
11047
|
registry.registerLazy('node-websocket', async () => {
|
|
10955
|
-
const mod = await Promise.resolve().then(function () { return require('./index.esm-
|
|
11048
|
+
const mod = await Promise.resolve().then(function () { return require('./index.esm-DhXN7XjE.cjs'); });
|
|
10956
11049
|
return mod.createNodeWebSocketRuntimeDriver();
|
|
10957
11050
|
});
|
|
10958
11051
|
return registry;
|
|
@@ -15072,6 +15165,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15072
15165
|
projectRoot,
|
|
15073
15166
|
timeoutMs: runtime.devContextTimeoutMs ?? DEFAULT_DEV_CONTEXT_TIMEOUT_MS,
|
|
15074
15167
|
});
|
|
15168
|
+
let currentDevContext = devLaunchContext;
|
|
15075
15169
|
let launchRuntimePermissions = context.createBrowserDevRuntimePermissions(devLaunchContext.runtimePermissions, context.createBrowserDevPermissionState(devLaunchContext));
|
|
15076
15170
|
const mobileDevContextUrlsByOrigin = new Map();
|
|
15077
15171
|
let currentCompanionManifestSha256;
|
|
@@ -15142,7 +15236,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15142
15236
|
try {
|
|
15143
15237
|
browserDevHost = await runDevStartupTask(logger, '正在启动浏览器调试页服务', () => startBrowserDevHostServer({
|
|
15144
15238
|
appUrl,
|
|
15145
|
-
devContext:
|
|
15239
|
+
devContext: currentDevContext,
|
|
15146
15240
|
fetchImpl,
|
|
15147
15241
|
getPort: getPortImpl,
|
|
15148
15242
|
defaultLanAddressId: lanAddresses[0]?.id,
|
|
@@ -15157,6 +15251,30 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15157
15251
|
lanAddresses: buildLanAddresses(),
|
|
15158
15252
|
});
|
|
15159
15253
|
},
|
|
15254
|
+
readMobileDevSessionContext: async () => {
|
|
15255
|
+
try {
|
|
15256
|
+
const refreshed = await loadDevLaunchContext({
|
|
15257
|
+
env: runtime.env,
|
|
15258
|
+
fetchImpl,
|
|
15259
|
+
logger,
|
|
15260
|
+
projectRoot,
|
|
15261
|
+
timeoutMs: runtime.devContextTimeoutMs ?? DEFAULT_DEV_CONTEXT_TIMEOUT_MS,
|
|
15262
|
+
});
|
|
15263
|
+
currentDevContext = withCurrentLocalDevLaunchToken(refreshed.context, currentLocalDevLaunchToken);
|
|
15264
|
+
launchRuntimePermissions = context.createMobileDevSessionRuntimePermissions(currentDevContext);
|
|
15265
|
+
browserDevHost.updateBootstrap({
|
|
15266
|
+
devContext: currentDevContext,
|
|
15267
|
+
miniProgram: refreshed.miniProgram,
|
|
15268
|
+
});
|
|
15269
|
+
return currentDevContext;
|
|
15270
|
+
}
|
|
15271
|
+
catch (error) {
|
|
15272
|
+
currentDevContext = { source: 'anonymous' };
|
|
15273
|
+
launchRuntimePermissions = { schema_version: 1, entries: [] };
|
|
15274
|
+
browserDevHost.updateBootstrap({ devContext: currentDevContext });
|
|
15275
|
+
throw error;
|
|
15276
|
+
}
|
|
15277
|
+
},
|
|
15160
15278
|
port: options.browserDevHostPort ?? DEFAULT_BROWSER_DEV_HOST_PORT,
|
|
15161
15279
|
root: runtime.browserDevHostRoot,
|
|
15162
15280
|
rootCandidates: runtime.browserDevHostRootCandidates,
|
|
@@ -15183,22 +15301,18 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15183
15301
|
if (refreshed.context.miniProgramId !== devLaunchContext.miniProgramId)
|
|
15184
15302
|
throw new Error('项目绑定已变更,请重新启动调试');
|
|
15185
15303
|
devLaunchContext.runtimePermissions = refreshed.context.runtimePermissions;
|
|
15304
|
+
currentDevContext = withCurrentLocalDevLaunchToken(devLaunchContext, currentLocalDevLaunchToken);
|
|
15186
15305
|
launchRuntimePermissions = context.createBrowserDevRuntimePermissions(devLaunchContext.runtimePermissions, context.createBrowserDevPermissionState(devLaunchContext));
|
|
15187
|
-
browserDevHost.updateBootstrap({ devContext:
|
|
15306
|
+
browserDevHost.updateBootstrap({ devContext: currentDevContext });
|
|
15188
15307
|
return hasCompanionApproval(devLaunchContext.runtimePermissions);
|
|
15189
15308
|
},
|
|
15190
15309
|
onToken: (localDevLaunchToken, companionManifestSha256, expiresAt) => {
|
|
15191
15310
|
currentExpiresAt = expiresAt;
|
|
15192
15311
|
currentCompanionManifestSha256 = companionManifestSha256;
|
|
15193
15312
|
currentLocalDevLaunchToken = localDevLaunchToken;
|
|
15194
|
-
|
|
15195
|
-
source: 'remote',
|
|
15196
|
-
miniProgramId: devLaunchContext.miniProgramId,
|
|
15197
|
-
...(localDevLaunchToken ? { localDevLaunchToken } : {}),
|
|
15198
|
-
runtimePermissions: devLaunchContext.runtimePermissions,
|
|
15199
|
-
};
|
|
15313
|
+
currentDevContext = withCurrentLocalDevLaunchToken(currentDevContext, localDevLaunchToken);
|
|
15200
15314
|
browserDevHost.updateBootstrap({
|
|
15201
|
-
devContext:
|
|
15315
|
+
devContext: currentDevContext,
|
|
15202
15316
|
lanAddresses: buildLanAddresses(),
|
|
15203
15317
|
});
|
|
15204
15318
|
},
|
|
@@ -15228,6 +15342,15 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
15228
15342
|
}
|
|
15229
15343
|
installShutdownHandlers(closers, runtime.process ?? process);
|
|
15230
15344
|
}
|
|
15345
|
+
function withCurrentLocalDevLaunchToken(context, localDevLaunchToken) {
|
|
15346
|
+
return {
|
|
15347
|
+
source: context.source,
|
|
15348
|
+
...(context.miniProgramId ? { miniProgramId: context.miniProgramId } : {}),
|
|
15349
|
+
...(localDevLaunchToken ? { localDevLaunchToken } : {}),
|
|
15350
|
+
...(context.runtimePermissions !== undefined ? { runtimePermissions: context.runtimePermissions } : {}),
|
|
15351
|
+
...(context.warning ? { warning: context.warning } : {}),
|
|
15352
|
+
};
|
|
15353
|
+
}
|
|
15231
15354
|
function runDevStartupTask(logger, text, action, successText) {
|
|
15232
15355
|
if (!logger.verbose) {
|
|
15233
15356
|
return action();
|
|
@@ -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-Bc4AXYHM.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-Bc4AXYHM.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-Bc4AXYHM.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-Bc4AXYHM.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-Bc4AXYHM.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -13424,7 +13424,7 @@ function getPathname(pathWithQuery) {
|
|
|
13424
13424
|
}
|
|
13425
13425
|
|
|
13426
13426
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13427
|
-
const BUILT_CLI_VERSION = '0.8.1-alpha.
|
|
13427
|
+
const BUILT_CLI_VERSION = '0.8.1-alpha.8';
|
|
13428
13428
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13429
13429
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13430
13430
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13773,39 +13773,39 @@ function createCommandLoggerResolver(options) {
|
|
|
13773
13773
|
};
|
|
13774
13774
|
}
|
|
13775
13775
|
const defaultClearLoginStatus = async (...args) => {
|
|
13776
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13776
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CTZgu8Q-.cjs'); });
|
|
13777
13777
|
return clearLoginStatus(...args);
|
|
13778
13778
|
};
|
|
13779
13779
|
const defaultLoginToHeybox = async (...args) => {
|
|
13780
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13780
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CTZgu8Q-.cjs'); });
|
|
13781
13781
|
return loginToHeybox(...args);
|
|
13782
13782
|
};
|
|
13783
13783
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13784
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13784
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CTZgu8Q-.cjs'); });
|
|
13785
13785
|
return printLoginStatus(...args);
|
|
13786
13786
|
};
|
|
13787
13787
|
const defaultRunBuildCommand = async (...args) => {
|
|
13788
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13788
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-BYWPo2MY.cjs'); });
|
|
13789
13789
|
return runBuildCommand(...args);
|
|
13790
13790
|
};
|
|
13791
13791
|
const defaultRunCreateCommand = async (...args) => {
|
|
13792
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13792
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-Dct-INxs.cjs'); });
|
|
13793
13793
|
return runCreateCommand(...args);
|
|
13794
13794
|
};
|
|
13795
13795
|
const defaultRunDevCommand = async (...args) => {
|
|
13796
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13796
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-6N5ruKiC.cjs'); }).then(function (n) { return n.dev; });
|
|
13797
13797
|
return runDevCommand(...args);
|
|
13798
13798
|
};
|
|
13799
13799
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13800
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13800
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-9HtdddBL.cjs'); });
|
|
13801
13801
|
return runDoctorCommand(...args);
|
|
13802
13802
|
};
|
|
13803
13803
|
const defaultRunSkillInstallCommand = async (...args) => {
|
|
13804
|
-
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-
|
|
13804
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-DrFEqmdD.cjs'); });
|
|
13805
13805
|
return runSkillInstallCommand(...args);
|
|
13806
13806
|
};
|
|
13807
13807
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13808
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13808
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-0hw42fDG.cjs'); });
|
|
13809
13809
|
return runRemoteCommand(...args);
|
|
13810
13810
|
};
|
|
13811
13811
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index$2 = require('./index-
|
|
3
|
+
var index$2 = require('./index-Bc4AXYHM.cjs');
|
|
4
4
|
var require$$0$3 = require('fs');
|
|
5
5
|
var require$$0$2 = require('crypto');
|
|
6
6
|
var require$$1$2 = require('path');
|
|
7
7
|
var require$$0$5 = require('assert');
|
|
8
8
|
var require$$0$4 = require('events');
|
|
9
9
|
var require$$1$1 = require('util');
|
|
10
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
10
|
+
var runtimePermissionEnv = require('./runtime-permission-env-Bvggu6mn.cjs');
|
|
11
11
|
var require$$0$7 = require('net');
|
|
12
12
|
var require$$0$6 = require('url');
|
|
13
13
|
var require$$2$1 = require('http');
|