@heybox/hb-sdk 0.8.1-alpha.3 → 0.8.1-alpha.7
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 +40 -0
- package/README.md +47 -3
- package/dist/cli-chunks/{build-B5Sbi8Sq.cjs → build-C8oN_Ms9.cjs} +7 -5
- package/dist/cli-chunks/{context-DuxaBL3Y.cjs → context-DZkqvg9S.cjs} +8 -3
- package/dist/cli-chunks/{create-CIfZrg3F.cjs → create-CToSHRfO.cjs} +1 -1
- package/dist/cli-chunks/{dev-CFubP5kW.cjs → dev-CTA0lsLD.cjs} +479 -140
- package/dist/cli-chunks/{doctor-IPKn3PBn.cjs → doctor-DRa_kjP1.cjs} +1 -1
- package/dist/cli-chunks/{index-KHhdZ8eZ.cjs → index-Bkl5YmtN.cjs} +2 -2
- package/dist/cli-chunks/{index-DCJN-V1y.cjs → index-zNpZDWhc.cjs} +87 -15
- package/dist/cli-chunks/{index.esm-8hgZlNF8.cjs → index.esm-CGoUW47e.cjs} +9 -8
- package/dist/cli-chunks/{login-CoB9jXxC.cjs → login-CCEPk2Ok.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-DMxdOWsU.cjs → project-vite-couFw5bL.cjs} +1 -1
- package/dist/cli-chunks/{remote-D4ZcngLn.cjs → remote-DQ70o-Km.cjs} +33 -24
- package/dist/cli-chunks/{runtime-permission-env-XAZFauvZ.cjs → runtime-permission-env-BN43V7d0.cjs} +181 -16
- package/dist/cli-chunks/{session-BnoHxzFq.cjs → session-C1R_39si.cjs} +1 -1
- package/dist/cli-chunks/{skill-CDEJtATn.cjs → skill-CVXOE5jH.cjs} +83 -27
- package/dist/cli-chunks/{version-BGzCIQhE.cjs → version-DbDVL6vm.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-CH6L1ZJI.js +101 -0
- package/dist/devtools/browser-dev-host/assets/desktop-app-launch-DnPRjCa3.js +6 -0
- package/dist/devtools/browser-dev-host/assets/index-D-aNERAr.css +1 -0
- package/dist/devtools/browser-dev-host/assets/index-DocojUxT.js +567 -0
- package/dist/devtools/browser-dev-host/index.html +3 -3
- package/dist/index.cjs.js +1893 -1571
- package/dist/index.esm.js +1893 -1572
- package/dist/miniapp-publish.cjs.js +61 -0
- package/dist/miniapp-publish.esm.js +59 -1
- package/dist/protocol.cjs.js +64 -13
- package/dist/protocol.esm.js +64 -13
- package/dist/vite.cjs.js +1316 -10
- package/dist/vite.esm.js +1317 -12
- package/package.json +7 -7
- package/skill/SKILL.md +8 -3
- package/skill/references/api-protocol.md +3 -3
- package/skill/references/api-root.md +224 -208
- package/skill/references/cli.md +7 -1
- package/skill/references/examples.md +4 -0
- package/skill/references/recipes.md +161 -0
- package/skill/references/safety-boundaries.md +8 -2
- package/skill/skill.json +5 -5
- package/types/core/client.d.ts +2 -0
- package/types/core/sdk.d.ts +3 -0
- package/types/core/singleton.d.ts +3 -0
- package/types/devtools/device-logs.d.ts +48 -0
- package/types/index.d.ts +3 -1
- package/types/miniapp-manifest/companion-directory.d.ts +2 -0
- package/types/miniapp-manifest/companion-executable.d.ts +4 -0
- package/types/miniapp-manifest/companion-types.d.ts +38 -0
- package/types/miniapp-manifest/companions.d.ts +17 -0
- package/types/miniapp-manifest/index.d.ts +2 -0
- package/types/miniapp-manifest/node.d.ts +7 -0
- package/types/miniapp-manifest/permissions.d.ts +1 -1
- package/types/miniapp-manifest/schema.d.ts +4 -1
- package/types/miniapp-publish/index.d.ts +17 -2
- package/types/modules/companion/index.d.ts +57 -0
- 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 +6 -0
- package/types/vite/index.d.ts +10 -0
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-DzEst9n7.js +0 -99
- package/dist/devtools/browser-dev-host/assets/index-B-NHlLsr.js +0 -567
- package/dist/devtools/browser-dev-host/assets/index-P-ra4m1y.css +0 -1
- package/dist/devtools/browser-dev-host/assets/workbench-state-BwV7bm4n.js +0 -5
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index$2 = require('./index-
|
|
3
|
+
var index$2 = require('./index-zNpZDWhc.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-BN43V7d0.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');
|
|
@@ -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-zNpZDWhc.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-zNpZDWhc.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-zNpZDWhc.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-zNpZDWhc.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-zNpZDWhc.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -3795,6 +3795,77 @@ const {
|
|
|
3795
3795
|
Help,
|
|
3796
3796
|
} = commander;
|
|
3797
3797
|
|
|
3798
|
+
/** Agent 输出只使用 stdout JSON/NDJSON,不混入交互提示。 */
|
|
3799
|
+
function installDevLogCommands(dev) {
|
|
3800
|
+
dev.command('sandbox').description('查看设备沙箱').command('list')
|
|
3801
|
+
.requiredOption('--device <id>', '设备会话 ID').option('--path <path>', '逻辑目录', '.')
|
|
3802
|
+
.option('--port <port>', '调试台端口', '5174').option('--json', 'JSON 输出')
|
|
3803
|
+
.action(async (options, command) => {
|
|
3804
|
+
const port = Number(command.parent?.parent?.opts().port ?? options.port);
|
|
3805
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535)
|
|
3806
|
+
throw new Error('端口无效');
|
|
3807
|
+
const origin = `http://127.0.0.1:${port}`;
|
|
3808
|
+
const bootstrap = await (await fetch(origin + '/__hb_sdk_bootstrap__', { signal: AbortSignal.timeout(5000), redirect: 'error' })).json();
|
|
3809
|
+
const response = await fetch(origin + '/__hb_sdk__/sandbox', { method: 'POST', redirect: 'error', headers: { origin, 'content-type': 'application/json', 'x-hb-sdk-csrf': bootstrap.csrfToken }, body: JSON.stringify({ device: options.device, path: options.path }), signal: AbortSignal.timeout(12000) });
|
|
3810
|
+
if (!response.ok)
|
|
3811
|
+
throw new Error(`目录查询失败:HTTP ${response.status}`);
|
|
3812
|
+
process.stdout.write(JSON.stringify(await response.json()) + '\n');
|
|
3813
|
+
});
|
|
3814
|
+
for (const kind of ['logs', 'devices']) {
|
|
3815
|
+
dev
|
|
3816
|
+
.command(kind)
|
|
3817
|
+
.description(kind === 'logs' ? '读取多设备调试日志' : '列出调试设备会话')
|
|
3818
|
+
.option('--port <port>', '调试台端口', '5174')
|
|
3819
|
+
.option('--json', '输出机器可读 JSON')
|
|
3820
|
+
.option('--device <id>', '设备会话 ID')
|
|
3821
|
+
.option('--level <level>', '日志级别')
|
|
3822
|
+
.option('--source <source>', '日志来源')
|
|
3823
|
+
.option('--query <text>', '搜索输出')
|
|
3824
|
+
.option('--callId <id>', '关联 SDK 调用 ID')
|
|
3825
|
+
.option('--id <id>', '读取服务端日志 ID')
|
|
3826
|
+
.option('--since <timestamp>', '设备时间下界,毫秒')
|
|
3827
|
+
.option('--after <cursor>', '从游标后继续读取', '0')
|
|
3828
|
+
.option('--limit <count>', '每页条数', '100')
|
|
3829
|
+
.option('--follow', '持续输出 NDJSON')
|
|
3830
|
+
.option('--duration <seconds>', '持续读取时长,默认 60 秒', '60')
|
|
3831
|
+
.action(async (options, command) => {
|
|
3832
|
+
const port = Number(command.parent?.opts().port ?? options.port);
|
|
3833
|
+
const duration = Number(options.duration);
|
|
3834
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535 || !Number.isFinite(duration) || duration <= 0)
|
|
3835
|
+
throw new Error('端口或持续时间无效');
|
|
3836
|
+
const params = new URLSearchParams();
|
|
3837
|
+
for (const key of ['device', 'level', 'source', 'query', 'after', 'limit', 'callId', 'id', 'since'])
|
|
3838
|
+
if (options[key])
|
|
3839
|
+
params.set(key, options[key]);
|
|
3840
|
+
let epoch = '';
|
|
3841
|
+
const deadline = Date.now() + duration * 1000;
|
|
3842
|
+
do {
|
|
3843
|
+
const response = await fetch(`http://127.0.0.1:${port}/__hb_sdk__/device-logs?${params}`, {
|
|
3844
|
+
signal: AbortSignal.timeout(5000),
|
|
3845
|
+
redirect: 'error',
|
|
3846
|
+
});
|
|
3847
|
+
if (!response.ok)
|
|
3848
|
+
throw new Error(`日志读取失败:HTTP ${response.status}`);
|
|
3849
|
+
const page = await response.json();
|
|
3850
|
+
if (!page.epoch)
|
|
3851
|
+
throw new Error('当前调试台没有设备日志服务,请确认项目使用 miniappManifest 并通过 hb-sdk dev 启动');
|
|
3852
|
+
if (epoch && epoch !== page.epoch) {
|
|
3853
|
+
params.set('after', '0');
|
|
3854
|
+
epoch = page.epoch;
|
|
3855
|
+
continue;
|
|
3856
|
+
}
|
|
3857
|
+
epoch = page.epoch;
|
|
3858
|
+
process.stdout.write(JSON.stringify(kind === 'devices' ? { epoch, devices: page.devices } : page) + '\n');
|
|
3859
|
+
params.set('after', String(page.nextCursor));
|
|
3860
|
+
if (!options.follow)
|
|
3861
|
+
break;
|
|
3862
|
+
if (!page.hasMore)
|
|
3863
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
3864
|
+
} while (Date.now() < deadline);
|
|
3865
|
+
});
|
|
3866
|
+
}
|
|
3867
|
+
}
|
|
3868
|
+
|
|
3798
3869
|
var envPaths$1 = {exports: {}};
|
|
3799
3870
|
|
|
3800
3871
|
var hasRequiredEnvPaths;
|
|
@@ -13353,7 +13424,7 @@ function getPathname(pathWithQuery) {
|
|
|
13353
13424
|
}
|
|
13354
13425
|
|
|
13355
13426
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13356
|
-
const BUILT_CLI_VERSION = '0.8.1-alpha.
|
|
13427
|
+
const BUILT_CLI_VERSION = '0.8.1-alpha.7';
|
|
13357
13428
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13358
13429
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13359
13430
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13447,6 +13518,7 @@ function createCliProgram(overrides = {}) {
|
|
|
13447
13518
|
const logger = resolveLogger(command);
|
|
13448
13519
|
await handlers.runDevCommand(options, { logger });
|
|
13449
13520
|
}, handlers.printUpdateReminder, resolveLogger));
|
|
13521
|
+
installDevLogCommands(program.commands.find(command => command.name() === 'dev'));
|
|
13450
13522
|
addVerboseOption(program.command('build').description('构建当前小程序项目').option('--env <name>', '加载项目根下 .env.<name> 预设并作为 Vite mode')).action(async (...args) => {
|
|
13451
13523
|
const command = readCommandFromActionArgs(args);
|
|
13452
13524
|
if (!command) {
|
|
@@ -13701,39 +13773,39 @@ function createCommandLoggerResolver(options) {
|
|
|
13701
13773
|
};
|
|
13702
13774
|
}
|
|
13703
13775
|
const defaultClearLoginStatus = async (...args) => {
|
|
13704
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13776
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CCEPk2Ok.cjs'); });
|
|
13705
13777
|
return clearLoginStatus(...args);
|
|
13706
13778
|
};
|
|
13707
13779
|
const defaultLoginToHeybox = async (...args) => {
|
|
13708
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13780
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CCEPk2Ok.cjs'); });
|
|
13709
13781
|
return loginToHeybox(...args);
|
|
13710
13782
|
};
|
|
13711
13783
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13712
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13784
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CCEPk2Ok.cjs'); });
|
|
13713
13785
|
return printLoginStatus(...args);
|
|
13714
13786
|
};
|
|
13715
13787
|
const defaultRunBuildCommand = async (...args) => {
|
|
13716
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13788
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-C8oN_Ms9.cjs'); });
|
|
13717
13789
|
return runBuildCommand(...args);
|
|
13718
13790
|
};
|
|
13719
13791
|
const defaultRunCreateCommand = async (...args) => {
|
|
13720
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13792
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-CToSHRfO.cjs'); });
|
|
13721
13793
|
return runCreateCommand(...args);
|
|
13722
13794
|
};
|
|
13723
13795
|
const defaultRunDevCommand = async (...args) => {
|
|
13724
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13796
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-CTA0lsLD.cjs'); }).then(function (n) { return n.dev; });
|
|
13725
13797
|
return runDevCommand(...args);
|
|
13726
13798
|
};
|
|
13727
13799
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13728
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13800
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-DRa_kjP1.cjs'); });
|
|
13729
13801
|
return runDoctorCommand(...args);
|
|
13730
13802
|
};
|
|
13731
13803
|
const defaultRunSkillInstallCommand = async (...args) => {
|
|
13732
|
-
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-
|
|
13804
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-CVXOE5jH.cjs'); });
|
|
13733
13805
|
return runSkillInstallCommand(...args);
|
|
13734
13806
|
};
|
|
13735
13807
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13736
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13808
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-DQ70o-Km.cjs'); });
|
|
13737
13809
|
return runRemoteCommand(...args);
|
|
13738
13810
|
};
|
|
13739
13811
|
function resolveStandaloneLogger(options, verbose) {
|
|
@@ -11,8 +11,8 @@ var require$$0$4 = require('url');
|
|
|
11
11
|
var require$$0 = require('zlib');
|
|
12
12
|
var require$$0$1 = require('buffer');
|
|
13
13
|
var require$$1 = require('util');
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
var dev = require('./dev-
|
|
14
|
+
var index = require('./index-zNpZDWhc.cjs');
|
|
15
|
+
var dev = require('./dev-CTA0lsLD.cjs');
|
|
16
16
|
require('node:module');
|
|
17
17
|
require('node:fs');
|
|
18
18
|
require('node:fs/promises');
|
|
@@ -22,16 +22,16 @@ require('os');
|
|
|
22
22
|
require('readline');
|
|
23
23
|
require('tty');
|
|
24
24
|
require('assert');
|
|
25
|
+
require('node:crypto');
|
|
25
26
|
require('node:os');
|
|
26
27
|
require('node:net');
|
|
27
|
-
require('node:crypto');
|
|
28
28
|
require('node:dns/promises');
|
|
29
29
|
require('node:http');
|
|
30
|
-
require('./context-
|
|
31
|
-
require('./runtime-permission-env-
|
|
32
|
-
require('./version-
|
|
30
|
+
require('./context-DZkqvg9S.cjs');
|
|
31
|
+
require('./runtime-permission-env-BN43V7d0.cjs');
|
|
32
|
+
require('./version-DbDVL6vm.cjs');
|
|
33
33
|
require('node:async_hooks');
|
|
34
|
-
require('./session-
|
|
34
|
+
require('./session-C1R_39si.cjs');
|
|
35
35
|
require('fs');
|
|
36
36
|
require('constants');
|
|
37
37
|
require('undici');
|
|
@@ -41,7 +41,8 @@ require('node:buffer');
|
|
|
41
41
|
require('node:url');
|
|
42
42
|
require('node:util');
|
|
43
43
|
require('node:child_process');
|
|
44
|
-
require('./project-vite-
|
|
44
|
+
require('./project-vite-couFw5bL.cjs');
|
|
45
|
+
require('node:zlib');
|
|
45
46
|
|
|
46
47
|
var bufferUtil = {exports: {}};
|
|
47
48
|
|
|
@@ -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-C1R_39si.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-zNpZDWhc.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-zNpZDWhc.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,16 +1,17 @@
|
|
|
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-zNpZDWhc.cjs');
|
|
5
|
+
var session = require('./session-C1R_39si.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');
|
|
9
9
|
var path = require('node:path');
|
|
10
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
10
|
+
var runtimePermissionEnv = require('./runtime-permission-env-BN43V7d0.cjs');
|
|
11
11
|
var node_crypto = require('node:crypto');
|
|
12
|
+
require('node:zlib');
|
|
12
13
|
var runtimeGate = require('./runtime-gate-BWb8QIcX.cjs');
|
|
13
|
-
var context = require('./context-
|
|
14
|
+
var context = require('./context-DZkqvg9S.cjs');
|
|
14
15
|
require('node:module');
|
|
15
16
|
require('path');
|
|
16
17
|
require('os');
|
|
@@ -23,7 +24,7 @@ require('buffer');
|
|
|
23
24
|
require('util');
|
|
24
25
|
require('fs');
|
|
25
26
|
require('constants');
|
|
26
|
-
require('./version-
|
|
27
|
+
require('./version-DbDVL6vm.cjs');
|
|
27
28
|
require('node:async_hooks');
|
|
28
29
|
|
|
29
30
|
async function getCDNUploadInfo(options, runtime = {}) {
|
|
@@ -86,15 +87,14 @@ async function createUserMiniprogramUploadSession(options, runtime = {}) {
|
|
|
86
87
|
return postUserMiniprogramVersionForm(CREATE_USER_MINIPROGRAM_UPLOAD_SESSION_API_PATH, options, {
|
|
87
88
|
version: options.version,
|
|
88
89
|
artifact_signature: options.artifactSignature,
|
|
89
|
-
|
|
90
|
-
file_sizes: options.fileSizes.map(size => String(size)).join(','),
|
|
90
|
+
files: JSON.stringify(options.files),
|
|
91
91
|
}, runtime);
|
|
92
92
|
}
|
|
93
93
|
async function recordUserMiniprogramUploadResult(options, runtime = {}) {
|
|
94
94
|
await postUserMiniprogramVersionForm(RECORD_USER_MINIPROGRAM_UPLOAD_RESULT_API_PATH, options, {
|
|
95
95
|
version: options.version,
|
|
96
96
|
session_id: options.sessionId,
|
|
97
|
-
|
|
97
|
+
files: JSON.stringify(options.files),
|
|
98
98
|
}, runtime);
|
|
99
99
|
}
|
|
100
100
|
async function postUserMiniprogramVersionForm(path, options, fields, runtime) {
|
|
@@ -209,7 +209,9 @@ async function runUpload(options, runtime = {}) {
|
|
|
209
209
|
miniProgramId: options.miniProgramId,
|
|
210
210
|
version: options.version,
|
|
211
211
|
sessionId: options.uploadSessionId,
|
|
212
|
-
|
|
212
|
+
files: indexedFiles
|
|
213
|
+
.filter((item) => successfulKeys.includes(item.key))
|
|
214
|
+
.map((item) => ({ path: item.file.relativePath, size: item.file.size, sha256: item.file.sha256 })),
|
|
213
215
|
}, { baseUrl: runtime.baseUrl, fetchImpl });
|
|
214
216
|
}
|
|
215
217
|
if (firstUploadError) {
|
|
@@ -272,7 +274,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
272
274
|
};
|
|
273
275
|
}
|
|
274
276
|
async function loadCosConstructor() {
|
|
275
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
277
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-Bkl5YmtN.cjs'); }).then(function (n) { return n.index; });
|
|
276
278
|
return cosModule.default;
|
|
277
279
|
}
|
|
278
280
|
function formatSize(bytes) {
|
|
@@ -315,24 +317,28 @@ function isRecord(value) {
|
|
|
315
317
|
return Object.prototype.toString.call(value) === '[object Object]';
|
|
316
318
|
}
|
|
317
319
|
|
|
318
|
-
|
|
320
|
+
/** 单次流式读取同时生成整包签名和逐文件 SHA-256 receipt。 */
|
|
321
|
+
async function computeMiniappArtifactReceipt(files, runtime = {}) {
|
|
319
322
|
const preparedFiles = runtimePermissionEnv.prepareMiniappArtifactFiles(files);
|
|
320
323
|
const hash = node_crypto.createHash('sha256');
|
|
321
324
|
const createReadStream = runtime.createReadStream ?? fs.createReadStream;
|
|
322
325
|
hash.update(runtimePermissionEnv.createMiniappArtifactSignatureHeader(preparedFiles.length));
|
|
323
326
|
for (const file of preparedFiles) {
|
|
324
327
|
hash.update(runtimePermissionEnv.createMiniappArtifactFileHeader(file));
|
|
328
|
+
const fileHash = node_crypto.createHash('sha256');
|
|
325
329
|
let bytesRead = 0;
|
|
326
330
|
for await (const chunk of createReadStream(file.absolutePath)) {
|
|
327
331
|
const bytes = typeof chunk === 'string' ? Buffer.from(chunk) : chunk;
|
|
328
332
|
bytesRead += bytes.byteLength;
|
|
329
333
|
hash.update(bytes);
|
|
334
|
+
fileHash.update(bytes);
|
|
330
335
|
}
|
|
331
336
|
if (bytesRead !== file.size) {
|
|
332
337
|
throw new Error(`构建产物在签名期间发生变化:${file.relativePath}`);
|
|
333
338
|
}
|
|
339
|
+
Object.assign(file, { sha256: fileHash.digest('hex') });
|
|
334
340
|
}
|
|
335
|
-
return hash.digest('hex');
|
|
341
|
+
return { artifactSignature: hash.digest('hex'), files: preparedFiles };
|
|
336
342
|
}
|
|
337
343
|
|
|
338
344
|
const DEPLOY_LOCKED_MESSAGE = '当前设备已有同版本产物正在上传,请等待完成后重试';
|
|
@@ -601,7 +607,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
601
607
|
if (pathError) {
|
|
602
608
|
throw new Error(pathError);
|
|
603
609
|
}
|
|
604
|
-
const sizeError = runtimePermissionEnv.
|
|
610
|
+
const sizeError = runtimePermissionEnv.validateMiniappUploadSizeBudgets(files);
|
|
605
611
|
if (sizeError) {
|
|
606
612
|
throw new Error(sizeError);
|
|
607
613
|
}
|
|
@@ -609,20 +615,23 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
609
615
|
return files;
|
|
610
616
|
}, { successText: 'dist 上传文件校验完成' });
|
|
611
617
|
// deploy 期间 dist 视为稳定构建输出;为避免持有大量文件描述符,签名和上传不会共享打开的文件句柄。
|
|
612
|
-
const
|
|
618
|
+
const artifactReceipt = await logger.task('正在计算构建产物签名', () => (runtime.computeMiniappArtifactReceipt ?? computeMiniappArtifactReceipt)(uploadFiles), { successText: '构建产物签名计算完成' });
|
|
619
|
+
runtimePermissionEnv.validateMiniappCompanionFileReceipts(manifest?.companions, artifactReceipt.files);
|
|
613
620
|
const createdUploadSession = await logger.task('正在创建或恢复上传会话', async () => {
|
|
614
621
|
const result = await (runtime.createUserMiniprogramUploadSession ?? createUserMiniprogramUploadSession)({
|
|
615
622
|
session: session$1,
|
|
616
623
|
miniProgramId,
|
|
617
624
|
version,
|
|
618
|
-
artifactSignature,
|
|
619
|
-
|
|
620
|
-
fileSizes: uploadFiles.map((file) => file.size),
|
|
625
|
+
artifactSignature: artifactReceipt.artifactSignature,
|
|
626
|
+
files: artifactReceipt.files.map((file) => ({ path: file.relativePath, size: file.size, sha256: file.sha256 })),
|
|
621
627
|
}, { baseUrl: apiBaseUrl, fetchImpl: runtime.fetchImpl });
|
|
622
628
|
if (typeof result.session_id !== 'string' || !result.session_id.trim()) {
|
|
623
629
|
throw new Error('创建上传会话失败:服务端未返回 session_id');
|
|
624
630
|
}
|
|
625
|
-
|
|
631
|
+
if (result.file_receipt_version !== 1) {
|
|
632
|
+
throw new Error('创建上传会话失败:服务端不支持文件完整性 receipt v1,请升级服务端后重试');
|
|
633
|
+
}
|
|
634
|
+
const resolved = runtimePermissionEnv.resolveMiniappUploadSessionFiles(artifactReceipt.files, Array.isArray(result.files) ? result.files : [], Array.isArray(result.uploaded_keys) ? result.uploaded_keys : []);
|
|
626
635
|
return {
|
|
627
636
|
sessionId: result.session_id.trim(),
|
|
628
637
|
files: resolved.files,
|
|
@@ -637,10 +646,10 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
637
646
|
try {
|
|
638
647
|
if (createdUploadSession.missingFiles.length > 0) {
|
|
639
648
|
await assertDeployUploadFilesStillMatchSignature({
|
|
640
|
-
|
|
649
|
+
computeMiniappArtifactReceipt: runtime.computeMiniappArtifactReceipt ?? computeMiniappArtifactReceipt,
|
|
641
650
|
distDir,
|
|
642
|
-
expectedFiles:
|
|
643
|
-
expectedSignature: artifactSignature,
|
|
651
|
+
expectedFiles: artifactReceipt.files,
|
|
652
|
+
expectedSignature: artifactReceipt.artifactSignature,
|
|
644
653
|
miniProgramId,
|
|
645
654
|
});
|
|
646
655
|
await (runtime.runUpload ?? runUpload)({
|
|
@@ -912,12 +921,12 @@ async function assertDeployUploadFilesStillMatchSignature(options) {
|
|
|
912
921
|
if (pathError) {
|
|
913
922
|
throw new Error(pathError);
|
|
914
923
|
}
|
|
915
|
-
const sizeError = runtimePermissionEnv.
|
|
924
|
+
const sizeError = runtimePermissionEnv.validateMiniappUploadSizeBudgets(currentFiles);
|
|
916
925
|
if (sizeError) {
|
|
917
926
|
throw new Error(sizeError);
|
|
918
927
|
}
|
|
919
|
-
const
|
|
920
|
-
if (
|
|
928
|
+
const currentReceipt = await options.computeMiniappArtifactReceipt(currentFiles);
|
|
929
|
+
if (currentReceipt.artifactSignature !== options.expectedSignature) {
|
|
921
930
|
throw new Error('dist 构建产物在签名后发生变化,请重新 build 后再 deploy');
|
|
922
931
|
}
|
|
923
932
|
}
|