@heybox/hb-sdk 0.9.1-alpha.1 → 0.9.1-alpha.10
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 +117 -2
- package/README.md +43 -5
- package/dist/card-controller.cjs.js +194 -0
- package/dist/card-controller.esm.js +159 -0
- package/dist/cli-chunks/_commonjs-dynamic-modules-DUamuDzp.cjs +7 -0
- package/dist/cli-chunks/{build-C5jFqooo.cjs → build-BK0MOduC.cjs} +15 -7
- package/dist/cli-chunks/{context-BkvtRlQM.cjs → context-D7AFyc_9.cjs} +14 -14
- package/dist/cli-chunks/{create-uHfLV3qo.cjs → create-C-pAXZR_.cjs} +5 -3
- package/dist/cli-chunks/{dev-BGgykbLg.cjs → dev-CONKtd6c.cjs} +59 -14
- package/dist/cli-chunks/{doctor-Cfn2luVo.cjs → doctor-D18leeH7.cjs} +8 -5
- package/dist/cli-chunks/{index-B0eNYO7I.cjs → index-BWRDIX1T.cjs} +7851 -486
- package/dist/cli-chunks/{index-DZQ84rXZ.cjs → index-DJoBhXcG.cjs} +9 -13
- package/dist/cli-chunks/{index.esm-I50IudW7.cjs → index.esm-CtAKePcf.cjs} +36 -37
- package/dist/cli-chunks/{login-BonS2uKg.cjs → login-BHq8vDRt.cjs} +36 -36
- package/dist/cli-chunks/{project-vite-BA_CFVq_.cjs → project-vite-DD3bmbqm.cjs} +1 -1
- package/dist/cli-chunks/{remote-NMK4n5ov.cjs → remote-DeLLzkXt.cjs} +71 -90
- package/dist/cli-chunks/runtime-gate-wKj1l5xM.cjs +201946 -0
- package/dist/cli-chunks/{runtime-permission-env-Bg7f-uj8.cjs → runtime-permission-env-DBra_0-U.cjs} +7012 -3305
- package/dist/cli-chunks/{skill-DV2oEH-I.cjs → skill-Cq3wjRBj.cjs} +9 -6
- package/dist/cli-chunks/{version-rxh3jOOI.cjs → version-BF4JQQCU.cjs} +1 -1
- package/dist/cli.cjs +10 -7
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-C4b9nlYA.js +102 -0
- package/dist/devtools/browser-dev-host/assets/desktop-app-launch-DXmUwcoE.js +6 -0
- package/dist/devtools/browser-dev-host/assets/index-BRxbUJVN.css +1 -0
- package/dist/devtools/browser-dev-host/assets/{index-sykXQUSO.js → index-CVZ3CdPt.js} +4 -4
- package/dist/devtools/browser-dev-host/index.html +3 -3
- package/dist/index.cjs.js +6331 -280
- package/dist/index.esm.js +6331 -281
- package/dist/miniapp-publish.cjs.js +6613 -157
- package/dist/miniapp-publish.esm.js +6613 -158
- package/dist/protocol.cjs.js +5824 -0
- package/dist/protocol.esm.js +5823 -1
- package/dist/vite.cjs.js +7476 -206
- package/dist/vite.esm.js +7475 -207
- package/dist/workspace-card-build-sandbox-worker.mjs +72 -0
- package/package.json +33 -18
- package/skill/SKILL.md +15 -0
- package/skill/skill.json +5 -5
- package/types/card-controller.d.ts +3682 -0
- package/types/index.d.ts +7639 -35
- package/types/miniapp-publish/index.d.ts +542 -64
- package/types/protocol.d.ts +2094 -9
- package/types/vite/index.d.ts +25 -12
- package/dist/cli-chunks/runtime-gate-CKGRK3wC.cjs +0 -65
- package/dist/cli-chunks/session-XP1Y_N72.cjs +0 -3403
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-CBMI8jM6.js +0 -102
- package/dist/devtools/browser-dev-host/assets/desktop-app-launch-DXfb_JMF.js +0 -6
- package/dist/devtools/browser-dev-host/assets/index-DRM3hPNc.css +0 -1
- package/types/core/client.d.ts +0 -108
- package/types/core/csp-violation.d.ts +0 -5
- package/types/core/errors.d.ts +0 -78
- package/types/core/event-bus.d.ts +0 -11
- package/types/core/handshake-state.d.ts +0 -54
- package/types/core/history-observer.d.ts +0 -4
- package/types/core/mini-dev-console.d.ts +0 -36
- package/types/core/network-sanitize.d.ts +0 -31
- package/types/core/sdk.d.ts +0 -104
- package/types/core/singleton.d.ts +0 -372
- package/types/core/utils.d.ts +0 -10
- package/types/core/version.d.ts +0 -2
- package/types/devtools/device-logs.d.ts +0 -48
- package/types/miniapp-manifest/basic-info-browser.d.ts +0 -37
- package/types/miniapp-manifest/basic-info-image-header.d.ts +0 -6
- package/types/miniapp-manifest/basic-info-node.d.ts +0 -17
- package/types/miniapp-manifest/basic-info-placeholder.d.ts +0 -1
- package/types/miniapp-manifest/basic-info.d.ts +0 -33
- package/types/miniapp-manifest/bindings.d.ts +0 -70
- package/types/miniapp-manifest/category.d.ts +0 -11
- package/types/miniapp-manifest/companion-directory.d.ts +0 -2
- package/types/miniapp-manifest/companion-executable.d.ts +0 -4
- package/types/miniapp-manifest/companion-types.d.ts +0 -63
- package/types/miniapp-manifest/companions.d.ts +0 -17
- package/types/miniapp-manifest/index.d.ts +0 -7
- package/types/miniapp-manifest/node.d.ts +0 -22
- package/types/miniapp-manifest/permissions.d.ts +0 -48
- package/types/miniapp-manifest/runtime-gate.d.ts +0 -12
- package/types/miniapp-manifest/schema.d.ts +0 -302
- package/types/modules/auth/index.d.ts +0 -204
- package/types/modules/cloud/index.d.ts +0 -669
- package/types/modules/companion/index.d.ts +0 -1619
- package/types/modules/device/index.d.ts +0 -193
- package/types/modules/environment/index.d.ts +0 -238
- package/types/modules/files/index.d.ts +0 -5
- package/types/modules/files/registry.d.ts +0 -35
- package/types/modules/files/types.d.ts +0 -1548
- package/types/modules/navigation/app-pages/index.d.ts +0 -4
- package/types/modules/navigation/app-pages/types.d.ts +0 -135
- package/types/modules/navigation/index.d.ts +0 -312
- package/types/modules/network/index.d.ts +0 -457
- package/types/modules/network/observability.d.ts +0 -38
- package/types/modules/network/request-shape.d.ts +0 -44
- package/types/modules/share/copy-link.d.ts +0 -46
- package/types/modules/share/extra.d.ts +0 -5
- package/types/modules/share/index.d.ts +0 -294
- package/types/modules/share/screenshot.d.ts +0 -34
- package/types/modules/share/show-share-menu.d.ts +0 -29
- package/types/modules/share/types.d.ts +0 -201
- package/types/modules/storage/index.d.ts +0 -214
- package/types/modules/ui/index.d.ts +0 -315
- package/types/modules/user/get-info.d.ts +0 -44
- package/types/modules/user/index.d.ts +0 -245
- package/types/modules/user/revoke-authorization.d.ts +0 -31
- package/types/modules/user/steam-game-list.d.ts +0 -153
- package/types/modules/user/types.d.ts +0 -2
- package/types/modules/viewport/index.d.ts +0 -319
- package/types/protocol/capabilities.d.ts +0 -2
- package/types/protocol/constants.d.ts +0 -1
- package/types/protocol/dev-session.d.ts +0 -74
- package/types/protocol/guards.d.ts +0 -1
- package/types/protocol/runtime-permissions.d.ts +0 -2
- package/types/protocol/types.d.ts +0 -22
- package/types/skill-metadata.d.ts +0 -18
- package/types/vite/html-policy.d.ts +0 -6
- package/types/vite/runtime-permission-env.d.ts +0 -9
|
@@ -1,71 +1,38 @@
|
|
|
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-DBra_0-U.cjs');
|
|
4
|
+
var context = require('./context-D7AFyc_9.cjs');
|
|
5
5
|
var promises = require('node:readline/promises');
|
|
6
|
-
var index = require('./index-
|
|
7
|
-
var
|
|
6
|
+
var index = require('./index-BWRDIX1T.cjs');
|
|
7
|
+
var runtimeGate = require('./runtime-gate-wKj1l5xM.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
|
-
|
|
15
|
-
require('./version-rxh3jOOI.cjs');
|
|
14
|
+
require('./version-BF4JQQCU.cjs');
|
|
16
15
|
require('node:async_hooks');
|
|
17
16
|
require('sharp');
|
|
18
17
|
require('node:module');
|
|
19
|
-
require('path');
|
|
20
|
-
require('os');
|
|
21
18
|
require('readline');
|
|
19
|
+
require('os');
|
|
22
20
|
require('tty');
|
|
23
21
|
require('assert');
|
|
24
22
|
require('events');
|
|
25
23
|
require('stream');
|
|
26
24
|
require('buffer');
|
|
27
25
|
require('util');
|
|
26
|
+
require('path');
|
|
28
27
|
require('fs');
|
|
29
28
|
require('constants');
|
|
29
|
+
require('node:url');
|
|
30
|
+
require('./_commonjs-dynamic-modules-DUamuDzp.cjs');
|
|
31
|
+
require('inspector');
|
|
30
32
|
|
|
31
33
|
// 脚手架开发占位图;构建可用,提审前必须替换。
|
|
32
34
|
const BASIC_INFO_PLACEHOLDER_SHA256 = 'd14e54b30f5e6d1bcbf51267bc82b06a0af7c333f2945bcc16b4e1adc3b123dd';
|
|
33
35
|
|
|
34
|
-
async function getCDNUploadInfo(options, runtime = {}) {
|
|
35
|
-
const body = new URLSearchParams();
|
|
36
|
-
body.set('file_infos', JSON.stringify(options.fileInfos));
|
|
37
|
-
body.set('scope', options.scope);
|
|
38
|
-
body.set('need_cache', options.needCache ? '1' : '0');
|
|
39
|
-
return postHeyboxApi('/bbs/app/api/qcloud/cos/upload/info/v2', body, options.session, runtime);
|
|
40
|
-
}
|
|
41
|
-
async function getCDNUploadToken(options, runtime = {}) {
|
|
42
|
-
const body = new URLSearchParams();
|
|
43
|
-
body.set('bucket', options.bucket);
|
|
44
|
-
body.set('keys', JSON.stringify(options.keys));
|
|
45
|
-
body.set('mimetypes', JSON.stringify(options.mimetypes));
|
|
46
|
-
body.set('is_multipart_upload', String(options.isMultipartUpload));
|
|
47
|
-
return postHeyboxApi('/bbs/app/api/qcloud/cos/upload/token/v2', body, options.session, runtime);
|
|
48
|
-
}
|
|
49
|
-
async function postCDNUploadCallback(options, runtime = {}) {
|
|
50
|
-
const body = new URLSearchParams();
|
|
51
|
-
body.set('keys', JSON.stringify(options.keys));
|
|
52
|
-
const query = options.isFinished ? '?is_finished=true' : '';
|
|
53
|
-
return postHeyboxApi(`/bbs/app/api/qcloud/cos/upload/callback/v2${query}`, body, options.session, runtime);
|
|
54
|
-
}
|
|
55
|
-
async function postHeyboxApi(pathWithQuery, body, session$1, runtime) {
|
|
56
|
-
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
57
|
-
const context = session.createHeyboxOpenPlatformRequestContext(session$1, pathWithQuery, {
|
|
58
|
-
contentType: 'application/x-www-form-urlencoded',
|
|
59
|
-
});
|
|
60
|
-
const response = await fetchImpl(session.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, pathWithQuery, context.platformParams), {
|
|
61
|
-
method: 'POST',
|
|
62
|
-
headers: context.headers,
|
|
63
|
-
body: body.toString(),
|
|
64
|
-
});
|
|
65
|
-
const result = await session.readHeyboxApiEnvelope(response, { pathWithQuery, requireResult: true });
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
36
|
const CREATE_USER_MINIPROGRAM_UPLOAD_SESSION_API_PATH = '/mall/developer/user_miniprogram/version/upload_session/create';
|
|
70
37
|
const RECORD_USER_MINIPROGRAM_UPLOAD_RESULT_API_PATH = '/mall/developer/user_miniprogram/version/upload_session/record';
|
|
71
38
|
const COMPANION_FINALIZATION_TIMEOUT_MS = 30 * 60_000;
|
|
@@ -124,7 +91,7 @@ async function recordUserMiniprogramUploadResult(options, runtime = {}) {
|
|
|
124
91
|
}
|
|
125
92
|
async function postUserMiniprogramVersionForm(path, options, fields, runtime) {
|
|
126
93
|
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
127
|
-
const context =
|
|
94
|
+
const context = index.createHeyboxOpenPlatformRequestContext(options.session, path, {
|
|
128
95
|
contentType: 'application/x-www-form-urlencoded',
|
|
129
96
|
});
|
|
130
97
|
const body = new URLSearchParams();
|
|
@@ -132,12 +99,12 @@ async function postUserMiniprogramVersionForm(path, options, fields, runtime) {
|
|
|
132
99
|
for (const [key, value] of Object.entries(fields)) {
|
|
133
100
|
body.set(key, value);
|
|
134
101
|
}
|
|
135
|
-
const response = await fetchImpl(
|
|
102
|
+
const response = await fetchImpl(index.createHeyboxApiUrl(runtime.baseUrl ?? context.baseUrl, path, context.platformParams), {
|
|
136
103
|
method: 'POST',
|
|
137
104
|
headers: context.headers,
|
|
138
105
|
body: body.toString(),
|
|
139
106
|
});
|
|
140
|
-
const result = await
|
|
107
|
+
const result = await index.readHeyboxApiEnvelope(response, {
|
|
141
108
|
pathWithQuery: path,
|
|
142
109
|
});
|
|
143
110
|
return result ?? {};
|
|
@@ -148,11 +115,12 @@ async function runUpload(options, runtime = {}) {
|
|
|
148
115
|
const logger = runtime.logger ?? index.createCliLogger();
|
|
149
116
|
const concurrency = runtime.concurrency ?? DEFAULT_CONCURRENCY;
|
|
150
117
|
const fetchImpl = runtime.fetchImpl ?? fetch;
|
|
151
|
-
const getCDNUploadInfo
|
|
152
|
-
const getCDNUploadToken
|
|
153
|
-
const postCDNUploadCallback
|
|
118
|
+
const getCDNUploadInfo = runtime.getCDNUploadInfo ?? index.getCDNUploadInfo;
|
|
119
|
+
const getCDNUploadToken = runtime.getCDNUploadToken ?? index.getCDNUploadToken;
|
|
120
|
+
const postCDNUploadCallback = runtime.postCDNUploadCallback ?? index.postCDNUploadCallback;
|
|
154
121
|
const recordUserMiniprogramUploadResult$1 = runtime.recordUserMiniprogramUploadResult ?? recordUserMiniprogramUploadResult;
|
|
155
122
|
const createReadStream = runtime.createReadStream ?? fs.createReadStream;
|
|
123
|
+
const cdnBaseUrl = runtime.cdnBaseUrl ?? runtime.baseUrl;
|
|
156
124
|
let createCosClient = runtime.createCosClient;
|
|
157
125
|
if (!createCosClient) {
|
|
158
126
|
const COS = await loadCosConstructor();
|
|
@@ -173,12 +141,12 @@ async function runUpload(options, runtime = {}) {
|
|
|
173
141
|
logger.debug(`正在处理上传批次 ${batchIndex + 1}/${batches.length},文件数: ${batch.length}`);
|
|
174
142
|
logger.debug('正在获取 CDN 上传信息');
|
|
175
143
|
const fileInfos = createUploadFileInfos(batch);
|
|
176
|
-
const uploadInfo = grant ?? await getCDNUploadInfo
|
|
144
|
+
const uploadInfo = grant ?? await getCDNUploadInfo({
|
|
177
145
|
session: options.session,
|
|
178
146
|
scope: runtimePermissionEnv.MINIAPP_UPLOAD_SCOPE,
|
|
179
147
|
fileInfos,
|
|
180
148
|
needCache: false,
|
|
181
|
-
}, { baseUrl:
|
|
149
|
+
}, { baseUrl: cdnBaseUrl, fetchImpl });
|
|
182
150
|
logger.debug(`CDN bucket: ${uploadInfo.bucket}`);
|
|
183
151
|
logger.debug(`CDN region: ${uploadInfo.region}`);
|
|
184
152
|
validateUploadInfoKeys(batch, uploadInfo.keys);
|
|
@@ -189,13 +157,13 @@ async function runUpload(options, runtime = {}) {
|
|
|
189
157
|
uploadToken = grant ? {
|
|
190
158
|
credentials: { tmpSecretId: grant.tmp_secret_id, tmpSecretKey: grant.tmp_secret_key, sessionToken: grant.session_token },
|
|
191
159
|
startTime: grant.start_time, expiredTime: grant.expired_time,
|
|
192
|
-
} : await getCDNUploadToken
|
|
160
|
+
} : await getCDNUploadToken({
|
|
193
161
|
session: options.session,
|
|
194
162
|
bucket: uploadInfo.bucket,
|
|
195
|
-
keys: indexedFiles.map(item => item.key),
|
|
196
|
-
mimetypes: indexedFiles.map(item => item.file.mimeType),
|
|
163
|
+
keys: indexedFiles.map((item) => item.key),
|
|
164
|
+
mimetypes: indexedFiles.map((item) => item.file.mimeType),
|
|
197
165
|
isMultipartUpload: 0,
|
|
198
|
-
}, { baseUrl:
|
|
166
|
+
}, { baseUrl: cdnBaseUrl, fetchImpl });
|
|
199
167
|
}
|
|
200
168
|
catch (error) {
|
|
201
169
|
throw new index.CliError(`获取 CDN 上传凭证失败:${readErrorMessage(error)}`);
|
|
@@ -241,7 +209,7 @@ async function runUpload(options, runtime = {}) {
|
|
|
241
209
|
if (successfulKeys.length > 0) {
|
|
242
210
|
logger.debug('正在确认 CDN 上传结果');
|
|
243
211
|
if (!companion)
|
|
244
|
-
await postCDNUploadCallback
|
|
212
|
+
await postCDNUploadCallback({ session: options.session, keys: successfulKeys, isFinished: true }, { baseUrl: cdnBaseUrl, fetchImpl });
|
|
245
213
|
await recordUserMiniprogramUploadResult$1({
|
|
246
214
|
session: options.session,
|
|
247
215
|
miniProgramId: options.miniProgramId,
|
|
@@ -318,7 +286,7 @@ function createDefaultCosClient(uploadToken, COS) {
|
|
|
318
286
|
};
|
|
319
287
|
}
|
|
320
288
|
async function loadCosConstructor() {
|
|
321
|
-
const cosModule = await Promise.resolve().then(function () { return require('./index-
|
|
289
|
+
const cosModule = await Promise.resolve().then(function () { return require('./index-DJoBhXcG.cjs'); }).then(function (n) { return n.index; });
|
|
322
290
|
return cosModule.default;
|
|
323
291
|
}
|
|
324
292
|
function formatSize(bytes) {
|
|
@@ -523,18 +491,18 @@ function isNodeError(error) {
|
|
|
523
491
|
return error instanceof Error && 'code' in error;
|
|
524
492
|
}
|
|
525
493
|
|
|
526
|
-
/**
|
|
527
|
-
function getUnapprovedPermissionWarning(local, approvals) {
|
|
494
|
+
/** 发布提示使用显式声明与远端主体批准策略,不消费本地调试授权。 */
|
|
495
|
+
function getUnapprovedPermissionWarning(local, approvals, partyType) {
|
|
528
496
|
if (!local.declared)
|
|
529
497
|
return undefined;
|
|
530
|
-
const { views } = runtimePermissionEnv.composeMiniappRuntimePermissions(local, approvals);
|
|
498
|
+
const { views } = runtimePermissionEnv.composeMiniappRuntimePermissions(local, approvals, partyType);
|
|
531
499
|
const missing = [];
|
|
532
500
|
for (const view of views) {
|
|
533
501
|
if (!view.declared || view.access !== 'platform-approval')
|
|
534
502
|
continue;
|
|
535
|
-
if (!view.
|
|
503
|
+
if (!view.effective)
|
|
536
504
|
missing.push(view.key);
|
|
537
|
-
if (view.key === 'network' && view.requestedConfig?.useOfficialDomain && !view.
|
|
505
|
+
if (view.key === 'network' && view.requestedConfig?.useOfficialDomain && !view.effectiveConfig?.useOfficialDomain) {
|
|
538
506
|
missing.push('network.useOfficialDomain');
|
|
539
507
|
}
|
|
540
508
|
}
|
|
@@ -574,8 +542,8 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
574
542
|
const miniProgramId = packageJson.heybox?.miniProgramId;
|
|
575
543
|
const autoPublish = Boolean(options.autoPublish);
|
|
576
544
|
const env = options.env ?? process.env;
|
|
577
|
-
const apiBaseUrl =
|
|
578
|
-
const loginBaseUrl =
|
|
545
|
+
const apiBaseUrl = index.resolveHeyboxApiBaseUrl({ ...options, env });
|
|
546
|
+
const loginBaseUrl = index.resolveHeyboxLoginBaseUrl({ ...options, env });
|
|
579
547
|
if (typeof miniProgramId !== 'string' || !miniProgramId.trim()) {
|
|
580
548
|
throw new Error('未在 package.json 中找到 heybox.miniProgramId,请先配置 mini program id');
|
|
581
549
|
}
|
|
@@ -584,7 +552,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
584
552
|
const declaredBindAppIds = runtimePermissionEnv.readMiniappBindAppIdsFromPackageJson(projectRoot);
|
|
585
553
|
const declaredCategory = runtimePermissionEnv.readMiniappCategoryFromPackageJson(projectRoot);
|
|
586
554
|
const releaseNote = await resolveDeployReleaseNote(options, runtime);
|
|
587
|
-
const session
|
|
555
|
+
const session = await logger.task('正在校验 Heybox 登录态', () => (runtime.requireAuthSession ?? index.requireHeyboxAuthSession)({ loginBaseUrl }), { successText: 'Heybox 登录态有效' });
|
|
588
556
|
logger.debug(`Heybox API: ${apiBaseUrl}`);
|
|
589
557
|
const uploadVersion = validateVersionForDeploy(packageJson.version, 'package.json.version');
|
|
590
558
|
const deploy = async () => {
|
|
@@ -599,7 +567,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
599
567
|
env,
|
|
600
568
|
fetchImpl: runtime.fetchImpl,
|
|
601
569
|
loginBaseUrl,
|
|
602
|
-
session
|
|
570
|
+
session,
|
|
603
571
|
});
|
|
604
572
|
await context.migrateBasicInfo(projectRoot, bound.detail, miniProgramId, runtime.fetchImpl);
|
|
605
573
|
}
|
|
@@ -609,7 +577,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
609
577
|
}
|
|
610
578
|
precheckVersion = uploadVersion;
|
|
611
579
|
await runVersionPrecheck({
|
|
612
|
-
session
|
|
580
|
+
session,
|
|
613
581
|
miniProgramId,
|
|
614
582
|
version: precheckVersion,
|
|
615
583
|
releaseNote,
|
|
@@ -624,11 +592,11 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
624
592
|
env,
|
|
625
593
|
fetchImpl: runtime.fetchImpl,
|
|
626
594
|
loginBaseUrl,
|
|
627
|
-
session
|
|
595
|
+
session,
|
|
628
596
|
}), { successText: '已读取远端小程序权限' });
|
|
629
|
-
const
|
|
630
|
-
skipPlatformCsp =
|
|
631
|
-
const permissionWarning = getUnapprovedPermissionWarning(localPermissions, detail.runtime_permissions);
|
|
597
|
+
const effectivePermissions = runtimePermissionEnv.composeMiniappRuntimePermissions(localPermissions, detail.runtime_permissions, detail.party_type).runtimePermissions;
|
|
598
|
+
skipPlatformCsp = context.shouldSkipMiniappPlatformCsp(effectivePermissions);
|
|
599
|
+
const permissionWarning = getUnapprovedPermissionWarning(localPermissions, detail.runtime_permissions, detail.party_type);
|
|
632
600
|
if (permissionWarning)
|
|
633
601
|
logger.warn(permissionWarning);
|
|
634
602
|
}
|
|
@@ -675,7 +643,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
675
643
|
throw new Error('dist/manifest.json.bindAppIds 与 package.json#heybox.bindAppIds 不一致,请重新 build 后再 deploy');
|
|
676
644
|
}
|
|
677
645
|
await runVersionPrecheck({
|
|
678
|
-
session
|
|
646
|
+
session,
|
|
679
647
|
miniProgramId,
|
|
680
648
|
version,
|
|
681
649
|
manifest,
|
|
@@ -703,6 +671,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
703
671
|
// deploy 期间 dist 视为稳定构建输出;为避免持有大量文件描述符,签名和上传不会共享打开的文件句柄。
|
|
704
672
|
const artifactReceipt = await logger.task('正在计算构建产物签名', () => (runtime.computeMiniappArtifactReceipt ?? computeMiniappArtifactReceipt)(uploadFiles), { successText: '构建产物签名计算完成' });
|
|
705
673
|
runtimePermissionEnv.validateMiniappCompanionFileReceipts(manifest?.companions, artifactReceipt.files);
|
|
674
|
+
runtimePermissionEnv.validateMiniappWorkspaceCardFileReceipts(manifest?.workspaceCards, artifactReceipt.files);
|
|
706
675
|
const profile = runtimePermissionEnv.parseMiniappBasicInfo(manifest, String(manifest.sdkVersion));
|
|
707
676
|
if (profile) {
|
|
708
677
|
const localProfile = runtimePermissionEnv.parseMiniappBasicInfo((await readPackageJson(projectRoot)).heybox ?? {});
|
|
@@ -724,7 +693,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
724
693
|
}
|
|
725
694
|
const createdUploadSession = await logger.task('正在创建或恢复上传会话', async () => {
|
|
726
695
|
const result = await (runtime.createUserMiniprogramUploadSession ?? createUserMiniprogramUploadSession)({
|
|
727
|
-
session
|
|
696
|
+
session,
|
|
728
697
|
miniProgramId,
|
|
729
698
|
version,
|
|
730
699
|
manifest,
|
|
@@ -770,7 +739,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
770
739
|
const uploadedCompanions = createdUploadSession.files.filter(item => item.file.relativePath.startsWith('companions/') && !missingKeys.has(item.key));
|
|
771
740
|
for (let index = 0; index < uploadedCompanions.length; index += runtimePermissionEnv.MINIAPP_UPLOAD_BATCH_SIZE) {
|
|
772
741
|
await (runtime.recordUserMiniprogramUploadResult ?? recordUserMiniprogramUploadResult)({
|
|
773
|
-
session
|
|
742
|
+
session, miniProgramId, version, sessionId: uploadSessionId,
|
|
774
743
|
files: uploadedCompanions.slice(index, index + runtimePermissionEnv.MINIAPP_UPLOAD_BATCH_SIZE)
|
|
775
744
|
.map(({ file }) => ({ path: file.relativePath, size: file.size, sha256: file.sha256 })),
|
|
776
745
|
}, { baseUrl: apiBaseUrl, fetchImpl: runtime.fetchImpl });
|
|
@@ -784,12 +753,12 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
784
753
|
miniProgramId,
|
|
785
754
|
});
|
|
786
755
|
await (runtime.runUpload ?? runUpload)({
|
|
787
|
-
session
|
|
756
|
+
session,
|
|
788
757
|
files: createdUploadSession.missingFiles.map(({ file, key }) => ({ ...file, key })),
|
|
789
758
|
miniProgramId,
|
|
790
759
|
version,
|
|
791
760
|
uploadSessionId,
|
|
792
|
-
}, { baseUrl: apiBaseUrl, fetchImpl: runtime.fetchImpl, logger });
|
|
761
|
+
}, { baseUrl: apiBaseUrl, cdnBaseUrl: index.HEYBOX_API_BASE_URL, fetchImpl: runtime.fetchImpl, logger });
|
|
793
762
|
}
|
|
794
763
|
}
|
|
795
764
|
catch (error) {
|
|
@@ -797,7 +766,7 @@ async function runDeployCommand(options, runtime = {}) {
|
|
|
797
766
|
}
|
|
798
767
|
}
|
|
799
768
|
try {
|
|
800
|
-
const submitOptions = { session
|
|
769
|
+
const submitOptions = { session, miniProgramId, sessionId: uploadSessionId, preflightToken };
|
|
801
770
|
submitAuditResult = await logger.task('正在提交审核', () => (runtime.submitUserMiniprogramAudit ?? submitUserMiniprogramAudit)(submitOptions, {
|
|
802
771
|
baseUrl: apiBaseUrl,
|
|
803
772
|
fetchImpl: runtime.fetchImpl,
|
|
@@ -881,6 +850,10 @@ async function readDeployManifest(projectRoot, logger) {
|
|
|
881
850
|
logger.warn('dist/manifest.json 包含 BOM,已自动剥离');
|
|
882
851
|
}
|
|
883
852
|
const validated = runtimePermissionEnv.validateMiniappManifestForDeploy(manifest);
|
|
853
|
+
if (validated.workspaceCards) {
|
|
854
|
+
runtimeGate.verifyWorkspaceCardsSnapshot({ ...validated, bindAppIds: validated.bindAppIds ?? [], workspaceCards: validated.workspaceCards });
|
|
855
|
+
runtimeGate.verifyWorkspaceCardArtifacts(distDir, validated.workspaceCards);
|
|
856
|
+
}
|
|
884
857
|
const bindAppIds = validated.bindAppIds ?? [];
|
|
885
858
|
return {
|
|
886
859
|
manifest: {
|
|
@@ -1200,7 +1173,7 @@ async function runRemoteDeployCommand(options, runtime) {
|
|
|
1200
1173
|
return finishRemoteCommand(options, runtime, output);
|
|
1201
1174
|
}
|
|
1202
1175
|
async function createRemoteCommandContext(options, runtime) {
|
|
1203
|
-
index.
|
|
1176
|
+
index.applyMiniProgramServiceTagIfNeeded(options.serviceTag);
|
|
1204
1177
|
const logger = resolveRemoteLogger(options, runtime);
|
|
1205
1178
|
const environment = await context.resolveRemoteEnvironment({
|
|
1206
1179
|
allowUnsafeApiBaseUrl: options.allowUnsafeApiBaseUrl,
|
|
@@ -1320,7 +1293,7 @@ async function remoteEntitySwitch(options, context, runtime) {
|
|
|
1320
1293
|
throw new Error('远端响应缺少 entity_id');
|
|
1321
1294
|
}
|
|
1322
1295
|
const switchedOwnerHeyboxId = normalizePositiveInteger(switched.owner_heybox_id);
|
|
1323
|
-
await
|
|
1296
|
+
await index.setSelectedDeveloperEntitySnapshot({
|
|
1324
1297
|
entityId: switchedEntityId,
|
|
1325
1298
|
entityName: switched.entity_name || '--',
|
|
1326
1299
|
...(switchedOwnerHeyboxId !== undefined ? { ownerHeyboxId: switchedOwnerHeyboxId } : {}),
|
|
@@ -1401,7 +1374,7 @@ async function remoteInfo(options, context$1, runtime) {
|
|
|
1401
1374
|
const miniProgramId = requireBinding(context$1);
|
|
1402
1375
|
const detail = await context$1.api.getMiniProgramDetail(miniProgramId);
|
|
1403
1376
|
const localPermissions = runtimePermissionEnv.readMiniappPermissionsFromPackageJson(context$1.packageJson.projectRoot, runtimePermissionEnv.resolveMiniappSdkVersion());
|
|
1404
|
-
const permissionViews = runtimePermissionEnv.composeMiniappRuntimePermissions(localPermissions, detail.runtime_permissions).views;
|
|
1377
|
+
const permissionViews = runtimePermissionEnv.composeMiniappRuntimePermissions(localPermissions, detail.runtime_permissions, detail.party_type).views;
|
|
1405
1378
|
const localBindAppIds = runtimePermissionEnv.readMiniappBindAppIdsFromPackageJson(context$1.packageJson.projectRoot);
|
|
1406
1379
|
const currentBindApps = normalizeRemoteBoundApps(detail.bind_apps);
|
|
1407
1380
|
const currentByID = new Map(currentBindApps.map((item) => [item.appid, item]));
|
|
@@ -1455,24 +1428,30 @@ async function remoteAllowlistWrite(options, context, runtime) {
|
|
|
1455
1428
|
async function remotePermissionList(options, context, runtime) {
|
|
1456
1429
|
const miniProgramId = requireBinding(context);
|
|
1457
1430
|
const result = await context.api.listPermissionApplications(miniProgramId);
|
|
1431
|
+
const detail = await context.api.getMiniProgramDetail(miniProgramId);
|
|
1432
|
+
const localPermissions = runtimePermissionEnv.readMiniappPermissionsFromPackageJson(context.packageJson.projectRoot, runtimePermissionEnv.resolveMiniappSdkVersion());
|
|
1433
|
+
const { views } = runtimePermissionEnv.composeMiniappRuntimePermissions(localPermissions, result.runtime_permissions, detail.party_type);
|
|
1458
1434
|
if (!options.json) {
|
|
1459
|
-
for (const
|
|
1460
|
-
const
|
|
1461
|
-
const
|
|
1462
|
-
|
|
1435
|
+
for (const view of views.filter(entry => entry.access === 'platform-approval')) {
|
|
1436
|
+
const item = result.items.find(entry => entry.permission_key === view.key);
|
|
1437
|
+
const application = item?.latest_application;
|
|
1438
|
+
const name = item?.permission_name ?? runtimePermissionEnv.MINI_PROGRAM_PERMISSION_CATALOG.find(entry => entry.key === view.key)?.name ?? view.key;
|
|
1439
|
+
const approval = result.runtime_permissions?.entries?.find(entry => entry.key === view.key);
|
|
1440
|
+
const source = view.approvalSource === 'first-party' ? ' 批准来源=第一方自动批准' : '';
|
|
1441
|
+
context.logger.info(`${view.key} (${name}) 原始审批=${approval?.status ?? 'disabled'}${source} 本地生效=${view.effective ? 'enabled' : 'disabled'} 最近申请=${application?.status ?? '未申请'}`);
|
|
1463
1442
|
if (application?.application_id)
|
|
1464
1443
|
context.logger.info(`申请 ID:${application.application_id}`);
|
|
1465
1444
|
if (application?.review_remark)
|
|
1466
1445
|
context.logger.info(`审核意见:${application.review_remark}`);
|
|
1467
1446
|
}
|
|
1468
1447
|
}
|
|
1469
|
-
return finishRemoteCommand(options, runtime, { changed: false, miniProgramId, items: toCamelCaseDeep(result.items), runtimePermissions: toCamelCaseDeep(result.runtime_permissions) });
|
|
1448
|
+
return finishRemoteCommand(options, runtime, { changed: false, miniProgramId, items: toCamelCaseDeep(result.items), runtimePermissions: toCamelCaseDeep(result.runtime_permissions), permissions: views });
|
|
1470
1449
|
}
|
|
1471
1450
|
async function remotePermissionApply(options, context, runtime) {
|
|
1472
1451
|
const miniProgramId = requireBinding(context);
|
|
1473
|
-
const key = requireNonEmpty(options.key, '请指定申请权限 network 或
|
|
1474
|
-
if (key !== 'network' && key !== 'companion')
|
|
1475
|
-
throw new Error('仅支持申请 network 或
|
|
1452
|
+
const key = requireNonEmpty(options.key, '请指定申请权限 network、companion 或 appProtocol');
|
|
1453
|
+
if (key !== 'network' && key !== 'companion' && key !== 'appProtocol')
|
|
1454
|
+
throw new Error('仅支持申请 network、companion 或 appProtocol 权限');
|
|
1476
1455
|
const reason = requireNonEmpty(options.reason, '权限申请必须传 --reason');
|
|
1477
1456
|
if (Array.from(reason).length > 500)
|
|
1478
1457
|
throw new Error('申请理由不能超过 500 字');
|
|
@@ -1594,7 +1573,7 @@ async function remoteDangerousWrite(options, context, runtime) {
|
|
|
1594
1573
|
status: detail.status,
|
|
1595
1574
|
version,
|
|
1596
1575
|
permissionWarning: options.command === 'release'
|
|
1597
|
-
? getUnapprovedPermissionWarning(runtimePermissionEnv.readMiniappPermissionsFromPackageJson(context.packageJson.projectRoot, runtimePermissionEnv.resolveMiniappSdkVersion()), detail.runtime_permissions)
|
|
1576
|
+
? getUnapprovedPermissionWarning(runtimePermissionEnv.readMiniappPermissionsFromPackageJson(context.packageJson.projectRoot, runtimePermissionEnv.resolveMiniappSdkVersion()), detail.runtime_permissions, detail.party_type)
|
|
1598
1577
|
: undefined,
|
|
1599
1578
|
});
|
|
1600
1579
|
if (options.command === 'release') {
|
|
@@ -1975,7 +1954,9 @@ function printMiniProgramDetail(logger, detail, permissionViews, bindings) {
|
|
|
1975
1954
|
}
|
|
1976
1955
|
logger.info('权限:');
|
|
1977
1956
|
for (const view of permissionViews) {
|
|
1978
|
-
const approval = view.
|
|
1957
|
+
const approval = view.approvalSource === 'first-party'
|
|
1958
|
+
? ` 需申请=否 批准来源=第一方自动批准 原始批准=${view.approved ? '是' : '否'}`
|
|
1959
|
+
: view.access === 'platform-approval' ? ` 需申请=是 批准=${view.approved ? '是' : '否'}` : ' 需申请=否';
|
|
1979
1960
|
const configs = view.requestedConfig
|
|
1980
1961
|
? ` requested=${JSON.stringify(view.requestedConfig)} approved=${JSON.stringify(view.approvedConfig)} effective=${JSON.stringify(view.effectiveConfig)}`
|
|
1981
1962
|
: '';
|