@heybox/hb-sdk 0.9.0-alpha.2 → 0.9.0-alpha.3
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 +6 -0
- package/README.md +5 -0
- package/dist/cli-chunks/{build-CvxoPTJb.cjs → build-C4d4WXYT.cjs} +5 -5
- package/dist/cli-chunks/{context-ChyajSZV.cjs → context-mt_ERryB.cjs} +2 -2
- package/dist/cli-chunks/{create-vXFVQGD7.cjs → create-LfZ8OhT6.cjs} +1 -1
- package/dist/cli-chunks/{dev-QH1jaFr1.cjs → dev-lgUgVorS.cjs} +9 -9
- package/dist/cli-chunks/{doctor-CU25P_q2.cjs → doctor-BSJnY0Bu.cjs} +1 -1
- package/dist/cli-chunks/{index-QY5q1rWs.cjs → index-BtqxUixL.cjs} +15 -15
- package/dist/cli-chunks/{index-I2MJ0S1h.cjs → index-DVALw2rx.cjs} +2 -2
- package/dist/cli-chunks/{index.esm-81ZfQF1o.cjs → index.esm-Deim9BX8.cjs} +7 -7
- package/dist/cli-chunks/{login-DCNzO2CY.cjs → login-TIFXGbKv.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-BA81QqiJ.cjs → project-vite-DSBP8NLj.cjs} +1 -1
- package/dist/cli-chunks/{remote-CBuPWvcD.cjs → remote-DyGb3YBA.cjs} +83 -17
- package/dist/cli-chunks/{runtime-gate-C1gdlVUB.cjs → runtime-gate-CWUZK4aE.cjs} +1 -1
- package/dist/cli-chunks/{runtime-permission-env-w3sXIJU4.cjs → runtime-permission-env-DdWYFrFT.cjs} +39 -6
- package/dist/cli-chunks/{session-Dtkbu4vT.cjs → session-CWCq-oeW.cjs} +1 -1
- package/dist/cli-chunks/{skill-DKgQa7PY.cjs → skill-DQzR5fMS.cjs} +2 -2
- package/dist/cli-chunks/{version-NZ-E_XUT.cjs → version-4zRtvcVD.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/browser-dev-host/assets/{browser-dev-host-CRdzRTKL.js → browser-dev-host-BEJTrPTS.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{desktop-app-launch-Cx-1tLJI.js → desktop-app-launch-Dod9L2SF.js} +1 -1
- package/dist/devtools/browser-dev-host/assets/{index-DAO9aQMF.js → index-xtE6gn7j.js} +3 -3
- package/dist/devtools/browser-dev-host/index.html +2 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/miniapp-publish.cjs.js +38 -5
- package/dist/miniapp-publish.esm.js +38 -5
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +6 -6
- package/skill/skill.json +4 -4
- package/types/miniapp-publish/index.d.ts +13 -3
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -456,6 +456,11 @@ hb-sdk remote deploy --release-note "本次更新说明"
|
|
|
456
456
|
| `hb-sdk build` | 执行生产构建与产物校验,不包含类型检查 |
|
|
457
457
|
| `hb-sdk remote deploy` | 构建、上传并提交当前版本审核 |
|
|
458
458
|
|
|
459
|
+
`remote deploy` 要求服务端支持产物协议 v2,不会降级为旧上传流程。同一小程序已有相同 Companion ZIP 时,
|
|
460
|
+
CLI 会复用已验证产物、跳过该 ZIP 的网络上传;Web 文件及发生变化的 ZIP 仍按当前版本上传。
|
|
461
|
+
新 ZIP 使用会话专属凭证直传到以 SHA-256 命名的候选对象,强制禁止覆盖。服务端一次读取完成哈希和 ZIP 安全校验后直接引用,不再复制对象。CLI 轮询持久化 Finalize 状态并在全部 Companion ready 后提交审核;中断后重新执行 deploy 可续接,校验失败则使用新会话重传。
|
|
462
|
+
每次部署仍会重新构建并计算本地产物摘要,审核与发布仍属于本次版本。
|
|
463
|
+
|
|
459
464
|
`hb-sdk create` 默认生成可直接删除的 Vanilla JavaScript + Vite HelloWorld,只保留 SDK Toast 示例、三端 Manifest 和开发/构建/部署命令,不绑定业务框架或项目内测试工具。
|
|
460
465
|
|
|
461
466
|
`hb-sdk dev` 会启动 Vue 3 Browser Dev Host。左侧诊断面板集中展示结构化日志、当前小程序作用域内的 Storage 快照和问题;日志区分 App、SDK、Network、Runtime、Host 来源,支持毫秒级时间、结果、耗时、重复计数、脱敏详情展开以及来源/级别筛选。右侧设备预览可在 iPhone 16 Pro Max(`440 x 956`)与 Pixel 9 Pro(`410 x 914`)间切换。切换预设只改变设备外框和 viewport,不会重新加载 iframe 或重启 Runtime;授权与操作弹窗、Toast、Loading 和振动反馈都限制在预览框内。
|
|
@@ -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-DdWYFrFT.cjs');
|
|
7
7
|
require('node:crypto');
|
|
8
8
|
require('node:zlib');
|
|
9
|
-
var runtimeGate = require('./runtime-gate-
|
|
10
|
-
var index = require('./index-
|
|
11
|
-
var projectVite = require('./project-vite-
|
|
12
|
-
require('./version-
|
|
9
|
+
var runtimeGate = require('./runtime-gate-CWUZK4aE.cjs');
|
|
10
|
+
var index = require('./index-BtqxUixL.cjs');
|
|
11
|
+
var projectVite = require('./project-vite-DSBP8NLj.cjs');
|
|
12
|
+
require('./version-4zRtvcVD.cjs');
|
|
13
13
|
require('node:async_hooks');
|
|
14
14
|
require('node:module');
|
|
15
15
|
require('path');
|
|
@@ -3,10 +3,10 @@
|
|
|
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 runtimePermissionEnv = require('./runtime-permission-env-
|
|
6
|
+
var runtimePermissionEnv = require('./runtime-permission-env-DdWYFrFT.cjs');
|
|
7
7
|
var fs$1 = require('node:fs');
|
|
8
8
|
var sharp = require('sharp');
|
|
9
|
-
var session = require('./session-
|
|
9
|
+
var session = require('./session-CWCq-oeW.cjs');
|
|
10
10
|
|
|
11
11
|
async function inspectBasicInfoImage(bytes, sourcePath, kind) {
|
|
12
12
|
const inspected = await inspectDecodedBasicInfoImage(bytes, kind);
|
|
@@ -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-BtqxUixL.cjs');
|
|
9
9
|
require('node:module');
|
|
10
10
|
require('os');
|
|
11
11
|
require('node:crypto');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var context = require('./context-
|
|
3
|
+
var context = require('./context-mt_ERryB.cjs');
|
|
4
4
|
var node_crypto = require('node:crypto');
|
|
5
5
|
var fs = require('node:fs');
|
|
6
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
6
|
+
var runtimePermissionEnv = require('./runtime-permission-env-DdWYFrFT.cjs');
|
|
7
7
|
var os = require('node:os');
|
|
8
8
|
var path = require('node:path');
|
|
9
9
|
var net = require('node:net');
|
|
@@ -12,13 +12,13 @@ var node_http = require('node:http');
|
|
|
12
12
|
var node_module = require('node:module');
|
|
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-BtqxUixL.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-CWCq-oeW.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-DSBP8NLj.cjs');
|
|
21
|
+
var version = require('./version-4zRtvcVD.cjs');
|
|
22
22
|
require('node:zlib');
|
|
23
23
|
|
|
24
24
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
@@ -1993,8 +1993,8 @@ const DEFAULT_CHANNEL_TRANSPORT = {
|
|
|
1993
1993
|
};
|
|
1994
1994
|
const IPV4_LOOPBACK_ADDRESSES = new net.BlockList();
|
|
1995
1995
|
IPV4_LOOPBACK_ADDRESSES.addSubnet('127.0.0.0', 8, 'ipv4');
|
|
1996
|
-
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-
|
|
1997
|
-
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-
|
|
1996
|
+
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-lgUgVorS.cjs', document.baseURI).href)))('ws');
|
|
1997
|
+
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-lgUgVorS.cjs', document.baseURI).href)))('parse5');
|
|
1998
1998
|
const BROWSER_DEV_HOST_ROOT_CANDIDATES = [
|
|
1999
1999
|
path.resolve(__dirname, 'devtools/browser-dev-host'),
|
|
2000
2000
|
path.resolve(__dirname, '../devtools/browser-dev-host'),
|
|
@@ -11089,7 +11089,7 @@ function assertNodeRuntimeCapabilities(ctx, settings) {
|
|
|
11089
11089
|
function createNodeRealtimeDriverRegistry() {
|
|
11090
11090
|
const registry = createRuntimeRealtimeDriverRegistry();
|
|
11091
11091
|
registry.registerLazy('node-websocket', async () => {
|
|
11092
|
-
const mod = await Promise.resolve().then(function () { return require('./index.esm-
|
|
11092
|
+
const mod = await Promise.resolve().then(function () { return require('./index.esm-Deim9BX8.cjs'); });
|
|
11093
11093
|
return mod.createNodeWebSocketRuntimeDriver();
|
|
11094
11094
|
});
|
|
11095
11095
|
return registry;
|
|
@@ -235,19 +235,19 @@ function requireArgument () {
|
|
|
235
235
|
|
|
236
236
|
var command = {};
|
|
237
237
|
|
|
238
|
-
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-
|
|
238
|
+
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-BtqxUixL.cjs', document.baseURI).href)));
|
|
239
239
|
function __require$4() { return require$5("node:events"); }
|
|
240
240
|
|
|
241
|
-
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-
|
|
241
|
+
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-BtqxUixL.cjs', document.baseURI).href)));
|
|
242
242
|
function __require$3() { return require$4("node:child_process"); }
|
|
243
243
|
|
|
244
|
-
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-
|
|
244
|
+
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-BtqxUixL.cjs', document.baseURI).href)));
|
|
245
245
|
function __require$2() { return require$3("node:path"); }
|
|
246
246
|
|
|
247
|
-
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-
|
|
247
|
+
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-BtqxUixL.cjs', document.baseURI).href)));
|
|
248
248
|
function __require$1() { return require$2("node:fs"); }
|
|
249
249
|
|
|
250
|
-
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-
|
|
250
|
+
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-BtqxUixL.cjs', document.baseURI).href)));
|
|
251
251
|
function __require() { return require$1("node:process"); }
|
|
252
252
|
|
|
253
253
|
var help = {};
|
|
@@ -13554,7 +13554,7 @@ function getPathname(pathWithQuery) {
|
|
|
13554
13554
|
}
|
|
13555
13555
|
|
|
13556
13556
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13557
|
-
const BUILT_CLI_VERSION = '0.9.0-alpha.
|
|
13557
|
+
const BUILT_CLI_VERSION = '0.9.0-alpha.3';
|
|
13558
13558
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13559
13559
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13560
13560
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13913,39 +13913,39 @@ function createCommandLoggerResolver(options) {
|
|
|
13913
13913
|
};
|
|
13914
13914
|
}
|
|
13915
13915
|
const defaultClearLoginStatus = async (...args) => {
|
|
13916
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13916
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-TIFXGbKv.cjs'); });
|
|
13917
13917
|
return clearLoginStatus(...args);
|
|
13918
13918
|
};
|
|
13919
13919
|
const defaultLoginToHeybox = async (...args) => {
|
|
13920
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13920
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-TIFXGbKv.cjs'); });
|
|
13921
13921
|
return loginToHeybox(...args);
|
|
13922
13922
|
};
|
|
13923
13923
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13924
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13924
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-TIFXGbKv.cjs'); });
|
|
13925
13925
|
return printLoginStatus(...args);
|
|
13926
13926
|
};
|
|
13927
13927
|
const defaultRunBuildCommand = async (...args) => {
|
|
13928
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13928
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-C4d4WXYT.cjs'); });
|
|
13929
13929
|
return runBuildCommand(...args);
|
|
13930
13930
|
};
|
|
13931
13931
|
const defaultRunCreateCommand = async (...args) => {
|
|
13932
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13932
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-LfZ8OhT6.cjs'); });
|
|
13933
13933
|
return runCreateCommand(...args);
|
|
13934
13934
|
};
|
|
13935
13935
|
const defaultRunDevCommand = async (...args) => {
|
|
13936
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13936
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-lgUgVorS.cjs'); }).then(function (n) { return n.dev; });
|
|
13937
13937
|
return runDevCommand(...args);
|
|
13938
13938
|
};
|
|
13939
13939
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13940
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13940
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-BSJnY0Bu.cjs'); });
|
|
13941
13941
|
return runDoctorCommand(...args);
|
|
13942
13942
|
};
|
|
13943
13943
|
const defaultRunSkillInstallCommand = async (...args) => {
|
|
13944
|
-
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-
|
|
13944
|
+
const { runSkillInstallCommand } = await Promise.resolve().then(function () { return require('./skill-DQzR5fMS.cjs'); });
|
|
13945
13945
|
return runSkillInstallCommand(...args);
|
|
13946
13946
|
};
|
|
13947
13947
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13948
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13948
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-DyGb3YBA.cjs'); });
|
|
13949
13949
|
return runRemoteCommand(...args);
|
|
13950
13950
|
};
|
|
13951
13951
|
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-BtqxUixL.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-DdWYFrFT.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');
|
|
@@ -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-BtqxUixL.cjs');
|
|
15
|
+
var dev = require('./dev-lgUgVorS.cjs');
|
|
16
16
|
require('node:module');
|
|
17
17
|
require('node:fs');
|
|
18
18
|
require('node:fs/promises');
|
|
@@ -23,12 +23,12 @@ require('node:crypto');
|
|
|
23
23
|
require('readline');
|
|
24
24
|
require('tty');
|
|
25
25
|
require('assert');
|
|
26
|
-
require('./context-
|
|
27
|
-
require('./runtime-permission-env-
|
|
28
|
-
require('./version-
|
|
26
|
+
require('./context-mt_ERryB.cjs');
|
|
27
|
+
require('./runtime-permission-env-DdWYFrFT.cjs');
|
|
28
|
+
require('./version-4zRtvcVD.cjs');
|
|
29
29
|
require('node:async_hooks');
|
|
30
30
|
require('sharp');
|
|
31
|
-
require('./session-
|
|
31
|
+
require('./session-CWCq-oeW.cjs');
|
|
32
32
|
require('fs');
|
|
33
33
|
require('constants');
|
|
34
34
|
require('node:os');
|
|
@@ -42,7 +42,7 @@ require('node:buffer');
|
|
|
42
42
|
require('node:url');
|
|
43
43
|
require('node:util');
|
|
44
44
|
require('node:child_process');
|
|
45
|
-
require('./project-vite-
|
|
45
|
+
require('./project-vite-DSBP8NLj.cjs');
|
|
46
46
|
require('node:zlib');
|
|
47
47
|
|
|
48
48
|
var bufferUtil = {exports: {}};
|
|
@@ -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-CWCq-oeW.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-BtqxUixL.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-BtqxUixL.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var runtimePermissionEnv = require('./runtime-permission-env-
|
|
4
|
-
var context = require('./context-
|
|
3
|
+
var runtimePermissionEnv = require('./runtime-permission-env-DdWYFrFT.cjs');
|
|
4
|
+
var context = require('./context-mt_ERryB.cjs');
|
|
5
5
|
var promises = require('node:readline/promises');
|
|
6
|
-
var index = require('./index-
|
|
7
|
-
var session = require('./session-
|
|
6
|
+
var index = require('./index-BtqxUixL.cjs');
|
|
7
|
+
var session = require('./session-CWCq-oeW.cjs');
|
|
8
8
|
var childProcess = require('node:child_process');
|
|
9
9
|
var fs = require('node:fs');
|
|
10
10
|
var fs$1 = require('node:fs/promises');
|
|
11
11
|
var path = require('node:path');
|
|
12
12
|
var node_crypto = require('node:crypto');
|
|
13
13
|
require('node:zlib');
|
|
14
|
-
var runtimeGate = require('./runtime-gate-
|
|
15
|
-
require('./version-
|
|
14
|
+
var runtimeGate = require('./runtime-gate-CWUZK4aE.cjs');
|
|
15
|
+
require('./version-4zRtvcVD.cjs');
|
|
16
16
|
require('node:async_hooks');
|
|
17
17
|
require('sharp');
|
|
18
18
|
require('node:module');
|
|
@@ -68,6 +68,14 @@ async function postHeyboxApi(pathWithQuery, body, session$1, runtime) {
|
|
|
68
68
|
|
|
69
69
|
const CREATE_USER_MINIPROGRAM_UPLOAD_SESSION_API_PATH = '/mall/developer/user_miniprogram/version/upload_session/create';
|
|
70
70
|
const RECORD_USER_MINIPROGRAM_UPLOAD_RESULT_API_PATH = '/mall/developer/user_miniprogram/version/upload_session/record';
|
|
71
|
+
const COMPANION_FINALIZATION_TIMEOUT_MS = 30 * 60_000;
|
|
72
|
+
async function authorizeCompanionUpload(options, runtime = {}) {
|
|
73
|
+
const result = await postUserMiniprogramVersionForm('/mall/developer/user_miniprogram/version/upload_session/companion_authorization', options, { version: options.version, session_id: options.sessionId, relative_paths: options.relativePaths.join(','), artifact_protocol_version: '2' }, runtime);
|
|
74
|
+
if (!result.bucket || !result.region || !Array.isArray(result.keys) || !result.tmp_secret_id || !result.tmp_secret_key || !result.session_token || !(result.expired_time > result.start_time)) {
|
|
75
|
+
throw new Error('Companion 上传凭证响应不完整');
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
71
79
|
async function precheckUserMiniprogramVersion(options, runtime = {}) {
|
|
72
80
|
return postUserMiniprogramVersionForm(runtimePermissionEnv.PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, options, {
|
|
73
81
|
// 构建前轻预检不携带独立资料;权威准入读取构建 Manifest。
|
|
@@ -78,11 +86,12 @@ async function precheckUserMiniprogramVersion(options, runtime = {}) {
|
|
|
78
86
|
}, runtime);
|
|
79
87
|
}
|
|
80
88
|
async function submitUserMiniprogramAudit(options, runtime = {}) {
|
|
81
|
-
return postUserMiniprogramVersionForm(runtimePermissionEnv.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, options, { session_id: options.sessionId, preflight_token: options.preflightToken }, runtime);
|
|
89
|
+
return postUserMiniprogramVersionForm(runtimePermissionEnv.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, options, { session_id: options.sessionId, preflight_token: options.preflightToken, artifact_protocol_version: '2' }, runtime);
|
|
82
90
|
}
|
|
83
91
|
async function createUserMiniprogramUploadSession(options, runtime = {}) {
|
|
84
92
|
return postUserMiniprogramVersionForm(CREATE_USER_MINIPROGRAM_UPLOAD_SESSION_API_PATH, options, {
|
|
85
93
|
version: options.version,
|
|
94
|
+
artifact_protocol_version: '2',
|
|
86
95
|
artifact_signature: options.artifactSignature,
|
|
87
96
|
files: JSON.stringify(options.files),
|
|
88
97
|
manifest: JSON.stringify(options.manifest),
|
|
@@ -91,11 +100,27 @@ async function createUserMiniprogramUploadSession(options, runtime = {}) {
|
|
|
91
100
|
}, runtime);
|
|
92
101
|
}
|
|
93
102
|
async function recordUserMiniprogramUploadResult(options, runtime = {}) {
|
|
94
|
-
|
|
103
|
+
const fields = {
|
|
95
104
|
version: options.version,
|
|
105
|
+
artifact_protocol_version: '2',
|
|
96
106
|
session_id: options.sessionId,
|
|
97
107
|
files: JSON.stringify(options.files),
|
|
98
|
-
}
|
|
108
|
+
};
|
|
109
|
+
const deadline = Date.now() + COMPANION_FINALIZATION_TIMEOUT_MS;
|
|
110
|
+
for (;;) {
|
|
111
|
+
const result = await postUserMiniprogramVersionForm(RECORD_USER_MINIPROGRAM_UPLOAD_RESULT_API_PATH, options, fields, runtime);
|
|
112
|
+
if (result.artifact_protocol_version !== 2 || !Array.isArray(result.companion_files)) {
|
|
113
|
+
throw new Error('服务端未返回产物协议 v2 Finalize 状态');
|
|
114
|
+
}
|
|
115
|
+
const failed = result.companion_files.find((file) => file.state === 'failed');
|
|
116
|
+
if (failed)
|
|
117
|
+
throw new Error(failed.error || `Companion 归档验证失败:${failed.relative_path}`);
|
|
118
|
+
if (result.complete)
|
|
119
|
+
return;
|
|
120
|
+
if (Date.now() >= deadline)
|
|
121
|
+
throw new Error('Companion 归档验证超时,请稍后重试');
|
|
122
|
+
await new Promise((resolve) => setTimeout(resolve, Math.max(250, Math.min(result.retry_after_ms || 1000, 5000))));
|
|
123
|
+
}
|
|
99
124
|
}
|
|
100
125
|
async function postUserMiniprogramVersionForm(path, options, fields, runtime) {
|
|
101
126
|
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
@@ -134,17 +159,21 @@ async function runUpload(options, runtime = {}) {
|
|
|
134
159
|
createCosClient = ({ uploadToken }) => createDefaultCosClient(uploadToken, COS);
|
|
135
160
|
}
|
|
136
161
|
const orderedFiles = runtimePermissionEnv.prepareMiniappArtifactFiles(options.files);
|
|
137
|
-
const batches = chunkUploadFiles(orderedFiles, runtimePermissionEnv.MINIAPP_UPLOAD_BATCH_SIZE);
|
|
162
|
+
const batches = [false, true].flatMap(companion => chunkUploadFiles(orderedFiles.filter(file => file.relativePath.startsWith('companions/') === companion), runtimePermissionEnv.MINIAPP_UPLOAD_BATCH_SIZE));
|
|
138
163
|
await logger.task(`正在上传 ${orderedFiles.length} 个文件`, async (taskContext) => {
|
|
139
164
|
logger.debug(`上传并发数: ${concurrency}`);
|
|
140
165
|
logger.debug(`上传批次数: ${batches.length}`);
|
|
141
166
|
let completed = 0;
|
|
142
167
|
for (let batchIndex = 0; batchIndex < batches.length; batchIndex += 1) {
|
|
143
168
|
const batch = batches[batchIndex];
|
|
169
|
+
const companion = batch[0].relativePath.startsWith('companions/');
|
|
170
|
+
const grant = companion ? await (runtime.authorizeCompanionUpload ?? authorizeCompanionUpload)({
|
|
171
|
+
session: options.session, miniProgramId: options.miniProgramId, version: options.version, sessionId: options.uploadSessionId, relativePaths: batch.map(file => file.relativePath),
|
|
172
|
+
}, { baseUrl: runtime.baseUrl, fetchImpl }) : undefined;
|
|
144
173
|
logger.debug(`正在处理上传批次 ${batchIndex + 1}/${batches.length},文件数: ${batch.length}`);
|
|
145
174
|
logger.debug('正在获取 CDN 上传信息');
|
|
146
175
|
const fileInfos = createUploadFileInfos(batch);
|
|
147
|
-
const uploadInfo = await getCDNUploadInfo$1({
|
|
176
|
+
const uploadInfo = grant ?? await getCDNUploadInfo$1({
|
|
148
177
|
session: options.session,
|
|
149
178
|
scope: runtimePermissionEnv.MINIAPP_UPLOAD_SCOPE,
|
|
150
179
|
fileInfos,
|
|
@@ -157,7 +186,10 @@ async function runUpload(options, runtime = {}) {
|
|
|
157
186
|
logger.debug('正在获取本批 CDN 上传凭证');
|
|
158
187
|
let uploadToken;
|
|
159
188
|
try {
|
|
160
|
-
uploadToken =
|
|
189
|
+
uploadToken = grant ? {
|
|
190
|
+
credentials: { tmpSecretId: grant.tmp_secret_id, tmpSecretKey: grant.tmp_secret_key, sessionToken: grant.session_token },
|
|
191
|
+
startTime: grant.start_time, expiredTime: grant.expired_time,
|
|
192
|
+
} : await getCDNUploadToken$1({
|
|
161
193
|
session: options.session,
|
|
162
194
|
bucket: uploadInfo.bucket,
|
|
163
195
|
keys: indexedFiles.map(item => item.key),
|
|
@@ -186,6 +218,11 @@ async function runUpload(options, runtime = {}) {
|
|
|
186
218
|
Body: createReadStream(uploadTask.file.absolutePath),
|
|
187
219
|
ContentLength: uploadTask.file.size,
|
|
188
220
|
ContentType: uploadTask.file.mimeType,
|
|
221
|
+
...(companion ? { Headers: { 'x-cos-forbid-overwrite': 'true' } } : {}),
|
|
222
|
+
}).catch(error => {
|
|
223
|
+
if (companion && isExistingCompanionObject(error))
|
|
224
|
+
return;
|
|
225
|
+
throw error;
|
|
189
226
|
});
|
|
190
227
|
successfulKeys.push(uploadTask.key);
|
|
191
228
|
completed += 1;
|
|
@@ -203,7 +240,8 @@ async function runUpload(options, runtime = {}) {
|
|
|
203
240
|
await Promise.all(workers);
|
|
204
241
|
if (successfulKeys.length > 0) {
|
|
205
242
|
logger.debug('正在确认 CDN 上传结果');
|
|
206
|
-
|
|
243
|
+
if (!companion)
|
|
244
|
+
await postCDNUploadCallback$1({ session: options.session, keys: successfulKeys, isFinished: true }, { baseUrl: runtime.baseUrl, fetchImpl });
|
|
207
245
|
await recordUserMiniprogramUploadResult$1({
|
|
208
246
|
session: options.session,
|
|
209
247
|
miniProgramId: options.miniProgramId,
|
|
@@ -227,6 +265,12 @@ function chunkUploadFiles(files, batchSize) {
|
|
|
227
265
|
}
|
|
228
266
|
return batches;
|
|
229
267
|
}
|
|
268
|
+
function isExistingCompanionObject(error) {
|
|
269
|
+
if (!error || typeof error !== 'object')
|
|
270
|
+
return false;
|
|
271
|
+
const value = error;
|
|
272
|
+
return Number(value.statusCode) === 409 && value.code === 'ObjectAlreadyExists';
|
|
273
|
+
}
|
|
230
274
|
function createUploadFileInfos(files) {
|
|
231
275
|
return files.map((file) => ({
|
|
232
276
|
name: file.relativePath.split('/').pop() ?? file.relativePath,
|
|
@@ -264,7 +308,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
264
308
|
return new Promise((resolve, reject) => {
|
|
265
309
|
cos.putObject(params, (err, result) => {
|
|
266
310
|
if (err) {
|
|
267
|
-
reject(err
|
|
311
|
+
reject(err);
|
|
268
312
|
return;
|
|
269
313
|
}
|
|
270
314
|
resolve(result);
|
|
@@ -274,7 +318,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
274
318
|
};
|
|
275
319
|
}
|
|
276
320
|
async function loadCosConstructor() {
|
|
277
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
321
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-DVALw2rx.cjs'); }).then(function (n) { return n.index; });
|
|
278
322
|
return cosModule.default;
|
|
279
323
|
}
|
|
280
324
|
function formatSize(bytes) {
|
|
@@ -519,6 +563,9 @@ const MIME_BY_EXT = {
|
|
|
519
563
|
'.woff': 'font/woff',
|
|
520
564
|
'.woff2': 'font/woff2',
|
|
521
565
|
};
|
|
566
|
+
function formatDeployBytes(bytes) {
|
|
567
|
+
return `${(bytes / (1024 * 1024)).toFixed(2)} MiB`;
|
|
568
|
+
}
|
|
522
569
|
async function runDeployCommand(options, runtime = {}) {
|
|
523
570
|
const logger = runtime.logger ?? index.createCliLogger();
|
|
524
571
|
const cwd = runtime.cwd ?? process.cwd();
|
|
@@ -691,24 +738,43 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
691
738
|
}
|
|
692
739
|
if (!result.preflight_token)
|
|
693
740
|
throw new Error('服务端未返回 preflight_token,请先升级服务端');
|
|
741
|
+
if (result.artifact_protocol_version !== 2) {
|
|
742
|
+
throw new Error('创建上传会话失败:服务端不支持产物协议 v2,请升级服务端后重试');
|
|
743
|
+
}
|
|
694
744
|
if (result.file_receipt_version !== 1) {
|
|
695
745
|
throw new Error('创建上传会话失败:服务端不支持文件完整性 receipt v1,请升级服务端后重试');
|
|
696
746
|
}
|
|
697
|
-
|
|
747
|
+
if (!Array.isArray(result.files) || !Array.isArray(result.uploaded_keys) || !Array.isArray(result.reused_companion_files)) {
|
|
748
|
+
throw new Error('创建上传会话失败:服务端返回的产物协议 v2 文件清单不完整');
|
|
749
|
+
}
|
|
750
|
+
const resolved = runtimePermissionEnv.resolveMiniappUploadSessionFiles(artifactReceipt.files, result.files, result.uploaded_keys, result.reused_companion_files);
|
|
698
751
|
return {
|
|
699
752
|
preflightToken: result.preflight_token,
|
|
700
753
|
sessionId: result.session_id.trim(),
|
|
701
754
|
files: resolved.files,
|
|
702
755
|
missingFiles: resolved.missingFiles,
|
|
756
|
+
reusedCompanionFiles: resolved.reusedCompanionFiles,
|
|
703
757
|
};
|
|
704
758
|
}, { successText: '上传会话已就绪' });
|
|
705
759
|
uploadSessionId = createdUploadSession.sessionId;
|
|
706
760
|
preflightToken = createdUploadSession.preflightToken;
|
|
707
761
|
const uploadedCount = createdUploadSession.files.length - createdUploadSession.missingFiles.length;
|
|
708
762
|
if (uploadedCount > 0) {
|
|
709
|
-
logger.debug(
|
|
763
|
+
logger.debug(`会话内已上传文件: ${uploadedCount}/${createdUploadSession.files.length}`);
|
|
710
764
|
}
|
|
765
|
+
const reusedBytes = createdUploadSession.reusedCompanionFiles.reduce((sum, file) => sum + file.size, 0);
|
|
766
|
+
const uploadBytes = createdUploadSession.missingFiles.reduce((sum, { file }) => sum + file.size, 0);
|
|
767
|
+
logger.info(`Companion Blob 复用: ${createdUploadSession.reusedCompanionFiles.length} 个,免上传 ${formatDeployBytes(reusedBytes)};实际待上传 ${formatDeployBytes(uploadBytes)}`);
|
|
711
768
|
try {
|
|
769
|
+
const missingKeys = new Set(createdUploadSession.missingFiles.map(item => item.key));
|
|
770
|
+
const uploadedCompanions = createdUploadSession.files.filter(item => item.file.relativePath.startsWith('companions/') && !missingKeys.has(item.key));
|
|
771
|
+
for (let index = 0; index < uploadedCompanions.length; index += runtimePermissionEnv.MINIAPP_UPLOAD_BATCH_SIZE) {
|
|
772
|
+
await (runtime.recordUserMiniprogramUploadResult ?? recordUserMiniprogramUploadResult)({
|
|
773
|
+
session: session$1, miniProgramId, version, sessionId: uploadSessionId,
|
|
774
|
+
files: uploadedCompanions.slice(index, index + runtimePermissionEnv.MINIAPP_UPLOAD_BATCH_SIZE)
|
|
775
|
+
.map(({ file }) => ({ path: file.relativePath, size: file.size, sha256: file.sha256 })),
|
|
776
|
+
}, { baseUrl: apiBaseUrl, fetchImpl: runtime.fetchImpl });
|
|
777
|
+
}
|
|
712
778
|
if (createdUploadSession.missingFiles.length > 0) {
|
|
713
779
|
await assertDeployUploadFilesStillMatchSignature({
|
|
714
780
|
computeMiniappArtifactReceipt: runtime.computeMiniappArtifactReceipt ?? computeMiniappArtifactReceipt,
|