@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.
Files changed (35) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +2 -0
  3. package/dist/cli-chunks/{build-Do18KfQL.cjs → build-D4crgajb.cjs} +29 -25
  4. package/dist/cli-chunks/{context-CQ5481xZ.cjs → context-fRWWSXDj.cjs} +122 -23
  5. package/dist/cli-chunks/{create-BU7nViJ9.cjs → create-BU_EFgDz.cjs} +1 -1
  6. package/dist/cli-chunks/{dev-DJY-_cK4.cjs → dev-BrkChQ7v.cjs} +142 -108
  7. package/dist/cli-chunks/{doctor-BduOKHnV.cjs → doctor-DZXVO4rL.cjs} +1 -1
  8. package/dist/cli-chunks/{index-e2GK8bAH.cjs → index-CSjJrnkO.cjs} +14 -14
  9. package/dist/cli-chunks/{index-BVNo9ygg.cjs → index-DxH41nsb.cjs} +3 -3
  10. package/dist/cli-chunks/{login-C2wtKo_W.cjs → login-DLVozxrs.cjs} +2 -2
  11. package/dist/cli-chunks/{project-vite-D769ezhw.cjs → project-vite-CwmMfCk3.cjs} +1 -1
  12. package/dist/cli-chunks/{remote-Cf4i1DSL.cjs → remote-CfpkkC9I.cjs} +40 -22
  13. package/dist/cli-chunks/{runtime-gate-DfMJQGH9.cjs → runtime-gate-CgN_v4Te.cjs} +3 -3
  14. package/dist/cli-chunks/{index-v4-6fbXX.cjs → runtime-permission-env-B0jK9Rt1.cjs} +71 -0
  15. package/dist/cli-chunks/{session-z1D8xVrB.cjs → session-DB7ARwm4.cjs} +1 -1
  16. package/dist/cli.cjs +1 -1
  17. package/dist/devtools/mock-host/main.js +609 -6
  18. package/dist/index.cjs.js +403 -7
  19. package/dist/index.esm.js +403 -7
  20. package/dist/vite.cjs.js +17 -2
  21. package/dist/vite.esm.js +17 -2
  22. package/package.json +2 -2
  23. package/skill/SKILL.md +7 -6
  24. package/skill/references/api-root.md +7 -2
  25. package/skill/references/cli.md +4 -0
  26. package/skill/references/examples.md +17 -2
  27. package/skill/references/safety-boundaries.md +2 -0
  28. package/skill/scripts/sync-references.mjs +17 -2
  29. package/skill/skill.json +4 -4
  30. package/types/core/network-sanitize.d.ts +31 -0
  31. package/types/modules/network/index.d.ts +2 -0
  32. package/types/modules/network/observability.d.ts +39 -0
  33. package/types/modules/network/request-shape.d.ts +44 -0
  34. package/types/vite/html-policy.d.ts +1 -0
  35. 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-e2GK8bAH.cjs');
13
- var projectVite = require('./project-vite-D769ezhw.cjs');
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('util');
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-alpha.1';
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-e2GK8bAH.cjs');
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-e2GK8bAH.cjs', document.baseURI).href)));
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-e2GK8bAH.cjs', document.baseURI).href)));
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-e2GK8bAH.cjs', document.baseURI).href)));
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-e2GK8bAH.cjs', document.baseURI).href)));
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-e2GK8bAH.cjs', document.baseURI).href)));
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-alpha.1';
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-C2wtKo_W.cjs'); });
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-C2wtKo_W.cjs'); });
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-C2wtKo_W.cjs'); });
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-Do18KfQL.cjs'); });
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-BU7nViJ9.cjs'); });
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-DJY-_cK4.cjs'); });
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-BduOKHnV.cjs'); });
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-Cf4i1DSL.cjs'); });
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-e2GK8bAH.cjs');
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 index$3 = require('./index-v4-6fbXX.cjs');
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 = index$3.requireSemver();
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-z1D8xVrB.cjs');
6
+ var session = require('./session-DB7ARwm4.cjs');
7
7
  var browser = require('./browser-RAy8e8cV.cjs');
8
- var index = require('./index-e2GK8bAH.cjs');
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-e2GK8bAH.cjs');
8
+ var index = require('./index-CSjJrnkO.cjs');
9
9
 
10
10
  function findProjectRoot(startDir) {
11
11
  let current = path.resolve(startDir);