@heybox/hb-sdk 0.6.8-alpha.1 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/README.md +2 -0
- package/dist/cli-chunks/{build-Do18KfQL.cjs → build-D4crgajb.cjs} +29 -25
- package/dist/cli-chunks/{context-CQ5481xZ.cjs → context-fRWWSXDj.cjs} +122 -23
- package/dist/cli-chunks/{create-BU7nViJ9.cjs → create-BU_EFgDz.cjs} +1 -1
- package/dist/cli-chunks/{dev-DJY-_cK4.cjs → dev-BrkChQ7v.cjs} +142 -108
- package/dist/cli-chunks/{doctor-BduOKHnV.cjs → doctor-DZXVO4rL.cjs} +1 -1
- package/dist/cli-chunks/{index-e2GK8bAH.cjs → index-CSjJrnkO.cjs} +14 -14
- package/dist/cli-chunks/{index-BVNo9ygg.cjs → index-DxH41nsb.cjs} +3 -3
- package/dist/cli-chunks/{login-C2wtKo_W.cjs → login-DLVozxrs.cjs} +2 -2
- package/dist/cli-chunks/{project-vite-D769ezhw.cjs → project-vite-CwmMfCk3.cjs} +1 -1
- package/dist/cli-chunks/{remote-Cf4i1DSL.cjs → remote-CfpkkC9I.cjs} +40 -22
- package/dist/cli-chunks/{runtime-gate-DfMJQGH9.cjs → runtime-gate-CgN_v4Te.cjs} +3 -3
- package/dist/cli-chunks/{index-v4-6fbXX.cjs → runtime-permission-env-B0jK9Rt1.cjs} +71 -0
- package/dist/cli-chunks/{session-z1D8xVrB.cjs → session-DB7ARwm4.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/mock-host/main.js +609 -6
- package/dist/index.cjs.js +403 -7
- package/dist/index.esm.js +403 -7
- package/dist/vite.cjs.js +17 -2
- package/dist/vite.esm.js +17 -2
- package/package.json +2 -2
- package/skill/SKILL.md +7 -6
- package/skill/references/api-root.md +7 -2
- package/skill/references/cli.md +4 -0
- package/skill/references/examples.md +17 -2
- package/skill/references/safety-boundaries.md +2 -0
- package/skill/scripts/sync-references.mjs +17 -2
- package/skill/skill.json +4 -4
- package/types/core/network-sanitize.d.ts +31 -0
- package/types/modules/network/index.d.ts +2 -0
- package/types/modules/network/observability.d.ts +39 -0
- package/types/modules/network/request-shape.d.ts +44 -0
- package/types/vite/html-policy.d.ts +1 -0
- package/types/vite/runtime-permission-env.d.ts +9 -0
|
@@ -6,32 +6,33 @@ var path = require('node:path');
|
|
|
6
6
|
var net = require('node:net');
|
|
7
7
|
var promises = require('node:dns/promises');
|
|
8
8
|
var node_http = require('node:http');
|
|
9
|
+
var context = require('./context-fRWWSXDj.cjs');
|
|
9
10
|
var node_crypto = require('node:crypto');
|
|
10
11
|
var undici = require('undici');
|
|
11
12
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
12
|
-
var index = require('./index-
|
|
13
|
-
var projectVite = require('./project-vite-
|
|
14
|
-
var context = require('./context-CQ5481xZ.cjs');
|
|
13
|
+
var index = require('./index-CSjJrnkO.cjs');
|
|
14
|
+
var projectVite = require('./project-vite-CwmMfCk3.cjs');
|
|
15
15
|
var fs$1 = require('node:fs/promises');
|
|
16
|
+
var runtimePermissionEnv = require('./runtime-permission-env-B0jK9Rt1.cjs');
|
|
17
|
+
require('./session-DB7ARwm4.cjs');
|
|
18
|
+
require('fs');
|
|
19
|
+
require('constants');
|
|
20
|
+
require('stream');
|
|
21
|
+
require('util');
|
|
22
|
+
require('assert');
|
|
23
|
+
require('path');
|
|
16
24
|
require('node:process');
|
|
17
25
|
require('node:buffer');
|
|
18
26
|
require('node:url');
|
|
19
27
|
require('node:util');
|
|
20
28
|
require('node:child_process');
|
|
21
29
|
require('node:module');
|
|
22
|
-
require('path');
|
|
23
30
|
require('os');
|
|
24
31
|
require('readline');
|
|
25
32
|
require('tty');
|
|
26
|
-
require('assert');
|
|
27
33
|
require('events');
|
|
28
|
-
require('stream');
|
|
29
34
|
require('buffer');
|
|
30
|
-
require('
|
|
31
|
-
require('./session-z1D8xVrB.cjs');
|
|
32
|
-
require('fs');
|
|
33
|
-
require('constants');
|
|
34
|
-
require('./index-v4-6fbXX.cjs');
|
|
35
|
+
require('node:async_hooks');
|
|
35
36
|
|
|
36
37
|
class Locked extends Error {
|
|
37
38
|
constructor(port) {
|
|
@@ -195,58 +196,6 @@ async function getPorts(options) {
|
|
|
195
196
|
throw new Error('No available ports found');
|
|
196
197
|
}
|
|
197
198
|
|
|
198
|
-
const MANAGED_RUNTIME_PERMISSION_KEYS = new Set(['network.request']);
|
|
199
|
-
/**
|
|
200
|
-
* 判断 permission key 是否由 Runtime 权限快照管理。
|
|
201
|
-
*
|
|
202
|
-
* @param key 待判断的 permission key。
|
|
203
|
-
* @returns 该 key 需要读取 Runtime 权限快照时返回 `true`。
|
|
204
|
-
*/
|
|
205
|
-
function isManagedMiniProgramRuntimePermissionKey(key) {
|
|
206
|
-
return MANAGED_RUNTIME_PERMISSION_KEYS.has(key);
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* 解析服务端权限快照;格式不完整时整份快照失效并 fail closed。
|
|
210
|
-
*
|
|
211
|
-
* @param snapshot 待校验的服务端权限快照。
|
|
212
|
-
* @returns 解析状态和通过校验的受管权限。
|
|
213
|
-
*/
|
|
214
|
-
function parseMiniProgramRuntimePermissions(snapshot) {
|
|
215
|
-
if (!isRecord$2(snapshot) || snapshot.schema_version !== 1 || !Array.isArray(snapshot.entries)) {
|
|
216
|
-
return { valid: false, permissions: {} };
|
|
217
|
-
}
|
|
218
|
-
if (snapshot.revision !== undefined && (typeof snapshot.revision !== 'number' || !Number.isInteger(snapshot.revision) || snapshot.revision < 0)) {
|
|
219
|
-
return { valid: false, permissions: {} };
|
|
220
|
-
}
|
|
221
|
-
const seenKeys = new Set();
|
|
222
|
-
const permissions = {};
|
|
223
|
-
for (const rawEntry of snapshot.entries) {
|
|
224
|
-
if (!isRecord$2(rawEntry) || typeof rawEntry.key !== 'string' || !rawEntry.key.trim()) {
|
|
225
|
-
return { valid: false, permissions: {} };
|
|
226
|
-
}
|
|
227
|
-
const key = rawEntry.key.trim();
|
|
228
|
-
if (seenKeys.has(key) || (rawEntry.status !== 'enabled' && rawEntry.status !== 'disabled') || !isRecord$2(rawEntry.config)) {
|
|
229
|
-
return { valid: false, permissions: {} };
|
|
230
|
-
}
|
|
231
|
-
seenKeys.add(key);
|
|
232
|
-
if (!isManagedMiniProgramRuntimePermissionKey(key)) {
|
|
233
|
-
continue;
|
|
234
|
-
}
|
|
235
|
-
if (key === 'network.request' && typeof rawEntry.config.useOfficialDomain !== 'boolean') {
|
|
236
|
-
return { valid: false, permissions: {} };
|
|
237
|
-
}
|
|
238
|
-
permissions[key] = {
|
|
239
|
-
key,
|
|
240
|
-
status: rawEntry.status,
|
|
241
|
-
config: { useOfficialDomain: rawEntry.config.useOfficialDomain },
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
return { valid: true, permissions };
|
|
245
|
-
}
|
|
246
|
-
function isRecord$2(value) {
|
|
247
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
199
|
/** Dev Shell 读取局域网 Dev Session endpoint 的 query 参数。 */
|
|
251
200
|
/** Mock Host 创建和读取 Dev Session 的固定路径。 */
|
|
252
201
|
const MINI_PROGRAM_DEV_CONTEXT_PATH = '/__hb_sdk__/dev-context';
|
|
@@ -343,6 +292,74 @@ function readErrorMessage(error) {
|
|
|
343
292
|
return error instanceof Error ? error.message : String(error);
|
|
344
293
|
}
|
|
345
294
|
|
|
295
|
+
/**
|
|
296
|
+
* network.request 诊断日志的纯脱敏工具。
|
|
297
|
+
*
|
|
298
|
+
* @remarks
|
|
299
|
+
* 放在 `core` 而非 `modules/network`:无错误类型依赖,供 SDK 错误文案、
|
|
300
|
+
* modules observability、devtools Mock Host / proxy 共用,并满足 boundary
|
|
301
|
+
*(devtools 不得直接 import runtime capability modules)。
|
|
302
|
+
*/
|
|
303
|
+
/** 敏感字段名:header / query / body key 共用。 */
|
|
304
|
+
const SENSITIVE_KEY_PATTERN = /(authorization|cookie|password|passwd|secret|token|pkey|private[_-]?key|access[_-]?key|client[_-]?secret|api[_-]?key|apikey|session|jwt|refresh[_-]?token|csrf)/i;
|
|
305
|
+
/**
|
|
306
|
+
* 脱敏请求 URL:去掉 userinfo,并将 query / fragment 中的敏感参数值替换为 `[redacted]`。
|
|
307
|
+
*/
|
|
308
|
+
function sanitizeNetworkRequestUrl(url) {
|
|
309
|
+
if (!url) {
|
|
310
|
+
return url;
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
const parsed = new URL(url);
|
|
314
|
+
parsed.username = '';
|
|
315
|
+
parsed.password = '';
|
|
316
|
+
redactUrlSearchParams(parsed.searchParams);
|
|
317
|
+
if (parsed.hash && parsed.hash.length > 1) {
|
|
318
|
+
const hashBody = parsed.hash.slice(1);
|
|
319
|
+
if (hashBody.includes('=')) {
|
|
320
|
+
const hashParams = new URLSearchParams(hashBody);
|
|
321
|
+
if (redactUrlSearchParams(hashParams)) {
|
|
322
|
+
parsed.hash = hashParams.toString();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return parsed.toString();
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
return redactSensitivePairsInRawText(url);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* 诊断 message 中的 URL 片段做脱敏,避免 error.message 二次泄漏 query secrets。
|
|
334
|
+
*/
|
|
335
|
+
function sanitizeDiagnosticMessage(message) {
|
|
336
|
+
if (!message) {
|
|
337
|
+
return message;
|
|
338
|
+
}
|
|
339
|
+
return message.replace(/https?:\/\/[^\s]+/gi, matched => sanitizeNetworkRequestUrl(matched.replace(/[),.;]+$/g, '')));
|
|
340
|
+
}
|
|
341
|
+
function isSensitiveNetworkKey(key) {
|
|
342
|
+
return SENSITIVE_KEY_PATTERN.test(key.trim());
|
|
343
|
+
}
|
|
344
|
+
function redactUrlSearchParams(params) {
|
|
345
|
+
let changed = false;
|
|
346
|
+
for (const key of [...params.keys()]) {
|
|
347
|
+
if (isSensitiveNetworkKey(key)) {
|
|
348
|
+
params.set(key, '[redacted]');
|
|
349
|
+
changed = true;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return changed;
|
|
353
|
+
}
|
|
354
|
+
function redactSensitivePairsInRawText(text) {
|
|
355
|
+
return text.replace(/([?&#]|^|[?&])([^=&#\s]+)=([^&#\s]*)/g, (full, prefix, key, value) => {
|
|
356
|
+
if (!isSensitiveNetworkKey(key)) {
|
|
357
|
+
return full;
|
|
358
|
+
}
|
|
359
|
+
return `${prefix}${key}=[redacted]`;
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
|
|
346
363
|
const MAX_MOCK_NETWORK_REDIRECTS = 5;
|
|
347
364
|
const MAX_MOCK_NETWORK_REQUEST_BODY = 2 * 1024 * 1024;
|
|
348
365
|
const MAX_MOCK_NETWORK_RESPONSE_BODY = 5 * 1024 * 1024;
|
|
@@ -361,12 +378,49 @@ async function handleMockNetworkProxy(request, response, fetchImpl, lookupHostna
|
|
|
361
378
|
try {
|
|
362
379
|
const payload = await readJsonRequestBody(request);
|
|
363
380
|
const result = await requestMockNetwork(payload, fetchImpl, lookupHostname);
|
|
381
|
+
if (typeof result.status === 'number' && (result.status < 200 || result.status >= 300)) {
|
|
382
|
+
logMockNetworkProxyDiagnostic('http_status', payload, result);
|
|
383
|
+
}
|
|
364
384
|
writeNetworkJsonResponse(response, 200, result, cors);
|
|
365
385
|
}
|
|
366
386
|
catch (error) {
|
|
387
|
+
logMockNetworkProxyDiagnostic('proxy_error', undefined, undefined, error);
|
|
367
388
|
writeNetworkJsonResponse(response, readMockHostErrorStatus(error), toMockHostErrorPayload(error), cors);
|
|
368
389
|
}
|
|
369
390
|
}
|
|
391
|
+
function logMockNetworkProxyDiagnostic(phase, payload, result, error) {
|
|
392
|
+
try {
|
|
393
|
+
const consoleRef = typeof console === 'undefined' ? undefined : console;
|
|
394
|
+
const logger = consoleRef?.warn || consoleRef?.error || consoleRef?.log;
|
|
395
|
+
if (!logger) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
const detail = { phase };
|
|
399
|
+
if (isRecord$1(payload) && typeof payload.url === 'string') {
|
|
400
|
+
detail.url = sanitizeNetworkRequestUrl(payload.url);
|
|
401
|
+
}
|
|
402
|
+
if (isRecord$1(payload) && typeof payload.method === 'string') {
|
|
403
|
+
detail.method = payload.method;
|
|
404
|
+
}
|
|
405
|
+
if (typeof result?.status === 'number') {
|
|
406
|
+
detail.status = result.status;
|
|
407
|
+
}
|
|
408
|
+
if (result?.statusText) {
|
|
409
|
+
detail.statusText = result.statusText;
|
|
410
|
+
}
|
|
411
|
+
if (error instanceof Error) {
|
|
412
|
+
detail.message = sanitizeDiagnosticMessage(error.message);
|
|
413
|
+
}
|
|
414
|
+
else if (error !== undefined) {
|
|
415
|
+
detail.message = sanitizeDiagnosticMessage(readErrorMessage(error));
|
|
416
|
+
}
|
|
417
|
+
const summaryUrl = typeof detail.url === 'string' ? detail.url : '';
|
|
418
|
+
logger.call(consoleRef, '[hb-sdk][mock-network]', `${phase}${summaryUrl ? ` ${summaryUrl}` : ''}`, detail);
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
// ignore diagnostic failures
|
|
422
|
+
}
|
|
423
|
+
}
|
|
370
424
|
function writeNetworkJsonResponse(response, status, body, cors) {
|
|
371
425
|
if (cors) {
|
|
372
426
|
writeTokenNetworkJsonResponse(response, status, body);
|
|
@@ -374,6 +428,7 @@ function writeNetworkJsonResponse(response, status, body, cors) {
|
|
|
374
428
|
}
|
|
375
429
|
writeJsonResponse(response, status, body);
|
|
376
430
|
}
|
|
431
|
+
const MOCK_NETWORK_MULTIPART_UNSUPPORTED_MESSAGE = 'network.request 不支持 multipart/form-data。App Host 客户端代发仅支持 application/x-www-form-urlencoded(form)与 application/json;请将 data 编码为 form 字符串(例如 new URLSearchParams({...}).toString())并设置 Content-Type: application/x-www-form-urlencoded。文件上传请使用专用上传能力,勿手写 multipart boundary。';
|
|
377
432
|
async function requestMockNetwork(payload, fetchImpl, lookupHostname) {
|
|
378
433
|
if (!isRecord$1(payload) || typeof payload.url !== 'string' || !payload.url.trim()) {
|
|
379
434
|
throw createMockHostError(400, 'INVALID_NETWORK_REQUEST', 'network.request url 必须是非空字符串');
|
|
@@ -381,6 +436,7 @@ async function requestMockNetwork(payload, fetchImpl, lookupHostname) {
|
|
|
381
436
|
const url = createMockNetworkUrl(payload.url, payload.params);
|
|
382
437
|
const method = typeof payload.method === 'string' && payload.method.trim() ? payload.method.trim().toUpperCase() : 'GET';
|
|
383
438
|
const headers = normalizeMockNetworkHeaders(payload.headers);
|
|
439
|
+
assertSupportedMockNetworkRequestShape(headers, payload.data);
|
|
384
440
|
const body = createMockNetworkBody(method, payload.data, headers);
|
|
385
441
|
const controller = new AbortController();
|
|
386
442
|
const timeout = Number(payload.timeout) > 0 ? Number(payload.timeout) : 10000;
|
|
@@ -565,6 +621,22 @@ function isBlockedMockNetworkHeader(key) {
|
|
|
565
621
|
'upgrade',
|
|
566
622
|
].includes(key.toLowerCase());
|
|
567
623
|
}
|
|
624
|
+
/**
|
|
625
|
+
* 与 App Host 对齐:Mock 不再放行 multipart,避免“本地成功、上线失败”。
|
|
626
|
+
*/
|
|
627
|
+
function assertSupportedMockNetworkRequestShape(headers, data) {
|
|
628
|
+
const contentType = headers.get('content-type') || '';
|
|
629
|
+
if (contentType.toLowerCase().includes('multipart/form-data') || looksLikeMultipartBody(data)) {
|
|
630
|
+
throw createMockHostError(400, 'INVALID_NETWORK_REQUEST', MOCK_NETWORK_MULTIPART_UNSUPPORTED_MESSAGE);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
function looksLikeMultipartBody(data) {
|
|
634
|
+
if (typeof data !== 'string') {
|
|
635
|
+
return false;
|
|
636
|
+
}
|
|
637
|
+
const trimmed = data.trimStart();
|
|
638
|
+
return trimmed.startsWith('--') && /content-disposition\s*:\s*form-data/i.test(data);
|
|
639
|
+
}
|
|
568
640
|
function createMockNetworkBody(method, data, headers) {
|
|
569
641
|
if (data === undefined || method === 'GET' || method === 'HEAD') {
|
|
570
642
|
return undefined;
|
|
@@ -692,7 +764,7 @@ function validateDevSessionCreatePayload(payload, allowedMiniUrlOrigins) {
|
|
|
692
764
|
!allowedMiniUrlOrigins.has(miniUrlOrigin.origin)) {
|
|
693
765
|
throw new TypeError('mini_url_origin must be an allowed LAN origin');
|
|
694
766
|
}
|
|
695
|
-
const parsedPermissions = parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
767
|
+
const parsedPermissions = context.parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
696
768
|
if (!parsedPermissions.valid) {
|
|
697
769
|
throw new TypeError('runtime_permissions is invalid');
|
|
698
770
|
}
|
|
@@ -1035,7 +1107,7 @@ async function handleDevPermissionMutation(request, response, controller) {
|
|
|
1035
1107
|
if (!isRecord$1(payload) || Object.keys(payload).length !== 1 || !Object.hasOwn(payload, 'runtime_permissions')) {
|
|
1036
1108
|
throw createMockHostError(400, 'INVALID_DEV_PERMISSIONS', 'Dev permissions update body is invalid');
|
|
1037
1109
|
}
|
|
1038
|
-
const parsed = parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
1110
|
+
const parsed = context.parseMiniProgramRuntimePermissions(payload.runtime_permissions);
|
|
1039
1111
|
if (!parsed.valid) {
|
|
1040
1112
|
throw createMockHostError(400, 'INVALID_DEV_PERMISSIONS', 'runtime_permissions is invalid');
|
|
1041
1113
|
}
|
|
@@ -1218,48 +1290,10 @@ function createHeyboxProtocol(payload) {
|
|
|
1218
1290
|
return `heybox://${encodeURIComponent(JSON.stringify(payload))}`;
|
|
1219
1291
|
}
|
|
1220
1292
|
|
|
1221
|
-
const DEFAULT_PERMISSION_STATE = {
|
|
1222
|
-
networkRequest: {
|
|
1223
|
-
status: 'disabled',
|
|
1224
|
-
useOfficialDomain: false,
|
|
1225
|
-
},
|
|
1226
|
-
};
|
|
1227
|
-
function createMiniProgramMockPermissionState(context) {
|
|
1228
|
-
const parsed = parseMiniProgramRuntimePermissions(context.runtimePermissions);
|
|
1229
|
-
const networkRequest = parsed.permissions['network.request'];
|
|
1230
|
-
return parsed.valid && networkRequest
|
|
1231
|
-
? {
|
|
1232
|
-
networkRequest: {
|
|
1233
|
-
status: networkRequest.status,
|
|
1234
|
-
useOfficialDomain: networkRequest.config.useOfficialDomain === true,
|
|
1235
|
-
},
|
|
1236
|
-
}
|
|
1237
|
-
: cloneDefaultPermissionState();
|
|
1238
|
-
}
|
|
1239
|
-
function createMiniProgramMockRuntimePermissions(state) {
|
|
1240
|
-
return {
|
|
1241
|
-
schema_version: 1,
|
|
1242
|
-
entries: [
|
|
1243
|
-
{
|
|
1244
|
-
key: 'network.request',
|
|
1245
|
-
status: state.networkRequest.status,
|
|
1246
|
-
config: {
|
|
1247
|
-
useOfficialDomain: state.networkRequest.useOfficialDomain,
|
|
1248
|
-
},
|
|
1249
|
-
},
|
|
1250
|
-
],
|
|
1251
|
-
};
|
|
1252
|
-
}
|
|
1253
|
-
function cloneDefaultPermissionState() {
|
|
1254
|
-
return {
|
|
1255
|
-
networkRequest: { ...DEFAULT_PERMISSION_STATE.networkRequest },
|
|
1256
|
-
};
|
|
1257
|
-
}
|
|
1258
|
-
|
|
1259
1293
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
1260
1294
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
1261
1295
|
? undefined
|
|
1262
|
-
: '0.6.8
|
|
1296
|
+
: '0.6.8';
|
|
1263
1297
|
|
|
1264
1298
|
class DevPermissionOverrideStoreError extends Error {
|
|
1265
1299
|
code;
|
|
@@ -1430,7 +1464,7 @@ async function runDevCommand(options, runtime = {}) {
|
|
|
1430
1464
|
projectRoot,
|
|
1431
1465
|
});
|
|
1432
1466
|
const vite = await logger.task('正在加载项目 Vite', () => projectVite.loadProjectVite(projectRoot), { successText: '已加载项目 Vite' });
|
|
1433
|
-
const appServer = await logger.task('正在创建 Vite dev server', () => withManagedDevOutputEnv(() => vite.createServer(createViteServerOptions(projectRoot, resolvedOptions)), runtime.env), { successText: '已创建 Vite dev server' });
|
|
1467
|
+
const appServer = await logger.task('正在创建 Vite dev server', () => runtimePermissionEnv.withMiniappPlatformCspEnv(context.shouldSkipMiniappPlatformCsp(devLaunchContext.runtimePermissions), () => withManagedDevOutputEnv(() => vite.createServer(createViteServerOptions(projectRoot, resolvedOptions)), runtime.env), runtime.env), { successText: '已创建 Vite dev server' });
|
|
1434
1468
|
await logger.task('正在启动 Vite dev server', () => appServer.listen(appPort), {
|
|
1435
1469
|
successText: 'Vite dev server 已启动',
|
|
1436
1470
|
});
|
|
@@ -1547,7 +1581,7 @@ function createDevPermissionController(options) {
|
|
|
1547
1581
|
source: devContext.source,
|
|
1548
1582
|
...(miniProgramId ? { mini_program_id: miniProgramId } : {}),
|
|
1549
1583
|
...(isRuntimePermissionsSnapshot(devContext.runtimePermissions) ? { remote_permissions: devContext.runtimePermissions } : {}),
|
|
1550
|
-
...(overrides ? { override_permissions: createMiniProgramMockRuntimePermissions(overrides) } : {}),
|
|
1584
|
+
...(overrides ? { override_permissions: context.createMiniProgramMockRuntimePermissions(overrides) } : {}),
|
|
1551
1585
|
...(error ? { persistence_error: error } : {}),
|
|
1552
1586
|
};
|
|
1553
1587
|
};
|
|
@@ -1584,7 +1618,7 @@ function createDevPermissionController(options) {
|
|
|
1584
1618
|
return createConfiguration(undefined);
|
|
1585
1619
|
},
|
|
1586
1620
|
async save(runtimePermissions) {
|
|
1587
|
-
const overrides = createMiniProgramMockPermissionState({
|
|
1621
|
+
const overrides = context.createMiniProgramMockPermissionState({
|
|
1588
1622
|
runtimePermissions,
|
|
1589
1623
|
});
|
|
1590
1624
|
try {
|
|
@@ -1602,7 +1636,7 @@ function createDevPermissionController(options) {
|
|
|
1602
1636
|
};
|
|
1603
1637
|
}
|
|
1604
1638
|
function isRuntimePermissionsSnapshot(value) {
|
|
1605
|
-
return parseMiniProgramRuntimePermissions(value).valid;
|
|
1639
|
+
return context.parseMiniProgramRuntimePermissions(value).valid;
|
|
1606
1640
|
}
|
|
1607
1641
|
async function loadRemoteDevContextWithTimeout(options) {
|
|
1608
1642
|
const controller = new AbortController();
|
|
@@ -4,7 +4,7 @@ var fs$1 = require('node:fs');
|
|
|
4
4
|
var fs = require('node:fs/promises');
|
|
5
5
|
var os = require('node:os');
|
|
6
6
|
var path = require('node:path');
|
|
7
|
-
var index = require('./index-
|
|
7
|
+
var index = require('./index-CSjJrnkO.cjs');
|
|
8
8
|
require('node:module');
|
|
9
9
|
require('path');
|
|
10
10
|
require('os');
|
|
@@ -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-CSjJrnkO.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-CSjJrnkO.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-CSjJrnkO.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-CSjJrnkO.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-CSjJrnkO.cjs', document.baseURI).href)));
|
|
250
250
|
function __require() { return require$1("node:process"); }
|
|
251
251
|
|
|
252
252
|
var help = {};
|
|
@@ -13347,7 +13347,7 @@ function getPathname(pathWithQuery) {
|
|
|
13347
13347
|
}
|
|
13348
13348
|
|
|
13349
13349
|
const CLI_VERSION_PLACEHOLDER = ['__HB', 'SDK', 'CLI', 'VERSION__'].join('_');
|
|
13350
|
-
const BUILT_CLI_VERSION = '0.6.8
|
|
13350
|
+
const BUILT_CLI_VERSION = '0.6.8';
|
|
13351
13351
|
const PACKAGE_JSON_CANDIDATES = [
|
|
13352
13352
|
path.resolve(__dirname, '..', '..', 'package.json'),
|
|
13353
13353
|
path.resolve(__dirname, '..', 'package.json'),
|
|
@@ -13680,35 +13680,35 @@ function createCommandLoggerResolver(options) {
|
|
|
13680
13680
|
};
|
|
13681
13681
|
}
|
|
13682
13682
|
const defaultClearLoginStatus = async (...args) => {
|
|
13683
|
-
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13683
|
+
const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-DLVozxrs.cjs'); });
|
|
13684
13684
|
return clearLoginStatus(...args);
|
|
13685
13685
|
};
|
|
13686
13686
|
const defaultLoginToHeybox = async (...args) => {
|
|
13687
|
-
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-
|
|
13687
|
+
const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-DLVozxrs.cjs'); });
|
|
13688
13688
|
return loginToHeybox(...args);
|
|
13689
13689
|
};
|
|
13690
13690
|
const defaultPrintLoginStatus = async (...args) => {
|
|
13691
|
-
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-
|
|
13691
|
+
const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-DLVozxrs.cjs'); });
|
|
13692
13692
|
return printLoginStatus(...args);
|
|
13693
13693
|
};
|
|
13694
13694
|
const defaultRunBuildCommand = async (...args) => {
|
|
13695
|
-
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-
|
|
13695
|
+
const { runBuildCommand } = await Promise.resolve().then(function () { return require('./build-D4crgajb.cjs'); });
|
|
13696
13696
|
return runBuildCommand(...args);
|
|
13697
13697
|
};
|
|
13698
13698
|
const defaultRunCreateCommand = async (...args) => {
|
|
13699
|
-
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-
|
|
13699
|
+
const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-BU_EFgDz.cjs'); });
|
|
13700
13700
|
return runCreateCommand(...args);
|
|
13701
13701
|
};
|
|
13702
13702
|
const defaultRunDevCommand = async (...args) => {
|
|
13703
|
-
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-
|
|
13703
|
+
const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-BrkChQ7v.cjs'); });
|
|
13704
13704
|
return runDevCommand(...args);
|
|
13705
13705
|
};
|
|
13706
13706
|
const defaultRunDoctorCommand = async (...args) => {
|
|
13707
|
-
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-
|
|
13707
|
+
const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-DZXVO4rL.cjs'); });
|
|
13708
13708
|
return runDoctorCommand(...args);
|
|
13709
13709
|
};
|
|
13710
13710
|
const defaultRunRemoteCommand = async (...args) => {
|
|
13711
|
-
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-
|
|
13711
|
+
const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-CfpkkC9I.cjs'); });
|
|
13712
13712
|
return runRemoteCommand(...args);
|
|
13713
13713
|
};
|
|
13714
13714
|
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-CSjJrnkO.cjs');
|
|
4
4
|
var require$$0$2 = require('fs');
|
|
5
5
|
var require$$2$1 = require('crypto');
|
|
6
6
|
var require$$1$2 = require('path');
|
|
7
7
|
var require$$0$3 = require('assert');
|
|
8
8
|
var require$$4$2 = require('events');
|
|
9
9
|
var require$$1$1 = require('util');
|
|
10
|
-
var
|
|
10
|
+
var runtimePermissionEnv = require('./runtime-permission-env-B0jK9Rt1.cjs');
|
|
11
11
|
var require$$0$5 = require('net');
|
|
12
12
|
var require$$0$4 = require('url');
|
|
13
13
|
var require$$2$2 = require('http');
|
|
@@ -13707,7 +13707,7 @@ function requireSource () {
|
|
|
13707
13707
|
const ajv_1 = requireAjv$1();
|
|
13708
13708
|
const ajv_formats_1 = requireDist();
|
|
13709
13709
|
const debounceFn = requireDebounceFn();
|
|
13710
|
-
const semver =
|
|
13710
|
+
const semver = runtimePermissionEnv.requireSemver();
|
|
13711
13711
|
const onetime = index$2.requireOnetime();
|
|
13712
13712
|
const encryptionAlgorithm = 'aes-256-cbc';
|
|
13713
13713
|
const createPlainObject = () => {
|
|
@@ -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-DB7ARwm4.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-CSjJrnkO.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-CSjJrnkO.cjs');
|
|
9
9
|
|
|
10
10
|
function findProjectRoot(startDir) {
|
|
11
11
|
let current = path.resolve(startDir);
|