@heybox/hb-sdk 0.6.6-alpha.0 → 0.6.6-alpha.1

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/README.md CHANGED
@@ -336,6 +336,8 @@ await network.request({
336
336
 
337
337
  `network.request` 由平台 Runtime 权限控制。未授权时 SDK 会收到 `PERMISSION_DENIED` 和“当前小程序暂不支持网络请求”;即使已开启网络请求,访问黑盒官方域名仍需要运营侧单独开启官方域名配置。业务代码不能自行请求或注入 Cookie、pkey 等官方凭据。
338
338
 
339
+ 权限开启后,`network.request` 可以访问任意 HTTP(S) 目标,包括本机、局域网和保留地址。Runtime 不按目标地址类别拦截请求;宿主网络适配器仍负责实际连接、重定向和系统网络错误。
340
+
339
341
  ## 生命周期事件
340
342
 
341
343
  导入 SDK 根包时会 eager 创建唯一默认实例并立即开始与父容器握手。使用 `on()` 监听父容器派发的小程序事件时不会创建第二个实例;`on()` 会返回取消监听函数,组件卸载或页面销毁时应及时调用。
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var session = require('./session-DUM4KQHQ.cjs');
3
+ var session = require('./session-BRwveiW8.cjs');
4
4
  var fs$1 = require('node:fs');
5
5
  var fs = require('node:fs/promises');
6
6
  var path = require('node:path');
@@ -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-Ck6a9STO.cjs');
8
+ var index = require('./index-gP0K2xx1.cjs');
9
9
  require('node:module');
10
10
  require('os');
11
11
  require('readline');
@@ -12,8 +12,8 @@ var node_http = require('node:http');
12
12
  var node_crypto = require('node:crypto');
13
13
  var undici = require('undici');
14
14
  var browser = require('./browser-RAy8e8cV.cjs');
15
- var index = require('./index-Ck6a9STO.cjs');
16
- var context = require('./context-Do5YcZPw.cjs');
15
+ var index = require('./index-gP0K2xx1.cjs');
16
+ var context = require('./context-D-cb_pNY.cjs');
17
17
  require('node:process');
18
18
  require('node:buffer');
19
19
  require('node:util');
@@ -27,7 +27,7 @@ require('events');
27
27
  require('stream');
28
28
  require('buffer');
29
29
  require('util');
30
- require('./session-DUM4KQHQ.cjs');
30
+ require('./session-BRwveiW8.cjs');
31
31
  require('fs');
32
32
  require('constants');
33
33
 
@@ -422,7 +422,7 @@ async function fetchMockNetworkWithRedirects(options) {
422
422
  let method = options.method;
423
423
  let body = options.body;
424
424
  for (let redirectCount = 0; redirectCount <= MAX_MOCK_NETWORK_REDIRECTS; redirectCount += 1) {
425
- const pinnedTarget = await resolvePublicMockNetworkTarget(url, options.lookupHostname);
425
+ const pinnedTarget = await resolveMockNetworkTarget(url, options.lookupHostname);
426
426
  options.pinnedTargets.set(createPinnedNetworkTargetKey(url), pinnedTarget);
427
427
  const response = await options.fetchImpl(url.toString(), {
428
428
  body,
@@ -451,17 +451,18 @@ async function fetchMockNetworkWithRedirects(options) {
451
451
  }
452
452
  throw createMockHostError(502, 'TOO_MANY_REDIRECTS', 'network.request redirect limit exceeded');
453
453
  }
454
- async function resolvePublicMockNetworkTarget(url, lookupHostname) {
454
+ async function resolveMockNetworkTarget(url, lookupHostname) {
455
455
  if (!['http:', 'https:'].includes(url.protocol)) {
456
456
  throw createMockHostError(403, 'NETWORK_TARGET_DENIED', 'network.request redirect 仅支持 HTTP(S) URL');
457
457
  }
458
458
  if (url.username || url.password) {
459
459
  throw createMockHostError(403, 'NETWORK_TARGET_DENIED', 'network.request URL 不允许包含凭据');
460
460
  }
461
- const addressFamily = net.isIP(url.hostname);
462
- const addresses = addressFamily ? [{ address: url.hostname, family: addressFamily }] : await lookupHostname(url.hostname);
463
- if (!addresses.length || addresses.some(({ address, family }) => !isPublicIpAddress(address, family))) {
464
- throw createMockHostError(403, 'NETWORK_TARGET_DENIED', 'network.request 不允许指向本机、内网或保留地址');
461
+ const hostname = normalizeNetworkHostname(url.hostname);
462
+ const addressFamily = net.isIP(hostname);
463
+ const addresses = addressFamily ? [{ address: hostname, family: addressFamily }] : await lookupHostname(hostname);
464
+ if (!addresses.length) {
465
+ throw new Error('network.request target DNS lookup returned no addresses');
465
466
  }
466
467
  return addresses[0];
467
468
  }
@@ -489,60 +490,6 @@ function createPinnedNetworkTargetKey(url) {
489
490
  function normalizeNetworkHostname(hostname) {
490
491
  return hostname.startsWith('[') && hostname.endsWith(']') ? hostname.slice(1, -1) : hostname;
491
492
  }
492
- const blockedNetworkTargets = createBlockedNetworkTargets();
493
- const publicIpv6Targets = createPublicIpv6Targets();
494
- function createBlockedNetworkTargets() {
495
- const blockList = new net.BlockList();
496
- for (const [network, prefix] of [
497
- ['0.0.0.0', 8],
498
- ['10.0.0.0', 8],
499
- ['100.64.0.0', 10],
500
- ['127.0.0.0', 8],
501
- ['169.254.0.0', 16],
502
- ['172.16.0.0', 12],
503
- ['192.0.0.0', 24],
504
- ['192.0.2.0', 24],
505
- ['192.168.0.0', 16],
506
- ['198.18.0.0', 15],
507
- ['198.51.100.0', 24],
508
- ['203.0.113.0', 24],
509
- ['224.0.0.0', 4],
510
- ['240.0.0.0', 4],
511
- ]) {
512
- blockList.addSubnet(network, prefix, 'ipv4');
513
- }
514
- for (const [network, prefix] of [
515
- ['::', 128],
516
- ['::1', 128],
517
- ['fc00::', 7],
518
- ['fe80::', 10],
519
- ['ff00::', 8],
520
- ['2001:db8::', 32],
521
- ['2001::', 23],
522
- ['2002::', 16],
523
- ['3ffe::', 16],
524
- ]) {
525
- blockList.addSubnet(network, prefix, 'ipv6');
526
- }
527
- return blockList;
528
- }
529
- function createPublicIpv6Targets() {
530
- const blockList = new net.BlockList();
531
- blockList.addSubnet('2000::', 3, 'ipv6');
532
- return blockList;
533
- }
534
- function isPublicIpAddress(address, family) {
535
- if (family === 4 || net.isIP(address) === 4) {
536
- return !blockedNetworkTargets.check(address, 'ipv4');
537
- }
538
- if (family === 6 || net.isIP(address) === 6) {
539
- if (address.toLowerCase().startsWith('::ffff:')) {
540
- return false;
541
- }
542
- return publicIpv6Targets.check(address, 'ipv6') && !blockedNetworkTargets.check(address, 'ipv6');
543
- }
544
- return false;
545
- }
546
493
  async function readLimitedMockNetworkResponse(response) {
547
494
  if (!response.body) {
548
495
  return '';
@@ -1310,7 +1257,7 @@ function cloneDefaultPermissionState() {
1310
1257
  /** 构建时替换为当前发布包的实际版本。 */
1311
1258
  const HB_SDK_VERSION = typeof undefined === 'string'
1312
1259
  ? undefined
1313
- : '0.6.6-alpha.0';
1260
+ : '0.6.6-alpha.1';
1314
1261
 
1315
1262
  class DevPermissionOverrideStoreError extends Error {
1316
1263
  code;
@@ -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-Ck6a9STO.cjs');
7
+ var index = require('./index-gP0K2xx1.cjs');
8
8
  require('node:module');
9
9
  require('path');
10
10
  require('os');
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var index$2 = require('./index-Ck6a9STO.cjs');
3
+ var index$2 = require('./index-gP0K2xx1.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 context$1 = require('./context-Do5YcZPw.cjs');
10
+ var context$1 = require('./context-D-cb_pNY.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');
@@ -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-Ck6a9STO.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-gP0K2xx1.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-Ck6a9STO.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-gP0K2xx1.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-Ck6a9STO.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-gP0K2xx1.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-Ck6a9STO.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-gP0K2xx1.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-Ck6a9STO.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-gP0K2xx1.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.6-alpha.0';
13350
+ const BUILT_CLI_VERSION = '0.6.6-alpha.1';
13351
13351
  const PACKAGE_JSON_CANDIDATES = [
13352
13352
  path.resolve(__dirname, '..', '..', 'package.json'),
13353
13353
  path.resolve(__dirname, '..', 'package.json'),
@@ -13668,31 +13668,31 @@ function createCommandLoggerResolver(options) {
13668
13668
  };
13669
13669
  }
13670
13670
  const defaultClearLoginStatus = async (...args) => {
13671
- const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-CqXRKZgq.cjs'); });
13671
+ const { clearLoginStatus } = await Promise.resolve().then(function () { return require('./login-BFIcNgmi.cjs'); });
13672
13672
  return clearLoginStatus(...args);
13673
13673
  };
13674
13674
  const defaultLoginToHeybox = async (...args) => {
13675
- const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-CqXRKZgq.cjs'); });
13675
+ const { loginToHeybox } = await Promise.resolve().then(function () { return require('./login-BFIcNgmi.cjs'); });
13676
13676
  return loginToHeybox(...args);
13677
13677
  };
13678
13678
  const defaultPrintLoginStatus = async (...args) => {
13679
- const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-CqXRKZgq.cjs'); });
13679
+ const { printLoginStatus } = await Promise.resolve().then(function () { return require('./login-BFIcNgmi.cjs'); });
13680
13680
  return printLoginStatus(...args);
13681
13681
  };
13682
13682
  const defaultRunCreateCommand = async (...args) => {
13683
- const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-CG36zW_8.cjs'); });
13683
+ const { runCreateCommand } = await Promise.resolve().then(function () { return require('./create-DlU4nWz_.cjs'); });
13684
13684
  return runCreateCommand(...args);
13685
13685
  };
13686
13686
  const defaultRunDevCommand = async (...args) => {
13687
- const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-BjlyFzNU.cjs'); });
13687
+ const { runDevCommand } = await Promise.resolve().then(function () { return require('./dev-Bb4U965a.cjs'); });
13688
13688
  return runDevCommand(...args);
13689
13689
  };
13690
13690
  const defaultRunDoctorCommand = async (...args) => {
13691
- const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-OIjeEwrd.cjs'); });
13691
+ const { runDoctorCommand } = await Promise.resolve().then(function () { return require('./doctor-DwDqOLdV.cjs'); });
13692
13692
  return runDoctorCommand(...args);
13693
13693
  };
13694
13694
  const defaultRunRemoteCommand = async (...args) => {
13695
- const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-vquOa1cT.cjs'); });
13695
+ const { runRemoteCommand } = await Promise.resolve().then(function () { return require('./remote-YESvKni6.cjs'); });
13696
13696
  return runRemoteCommand(...args);
13697
13697
  };
13698
13698
  function resolveStandaloneLogger(options, verbose) {
@@ -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-DUM4KQHQ.cjs');
6
+ var session = require('./session-BRwveiW8.cjs');
7
7
  var browser = require('./browser-RAy8e8cV.cjs');
8
- var index = require('./index-Ck6a9STO.cjs');
8
+ var index = require('./index-gP0K2xx1.cjs');
9
9
  require('node:path');
10
10
  require('fs');
11
11
  require('constants');
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var promises = require('node:readline/promises');
4
- var index = require('./index-Ck6a9STO.cjs');
5
- var session = require('./session-DUM4KQHQ.cjs');
4
+ var index = require('./index-gP0K2xx1.cjs');
5
+ var session = require('./session-BRwveiW8.cjs');
6
6
  var childProcess = require('node:child_process');
7
7
  var fs = require('node:fs');
8
8
  var fs$1 = require('node:fs/promises');
9
9
  var path = require('node:path');
10
- var context = require('./context-Do5YcZPw.cjs');
10
+ var context = require('./context-D-cb_pNY.cjs');
11
11
  require('node:module');
12
12
  require('path');
13
13
  require('os');
@@ -264,7 +264,7 @@ async function createDefaultCosClient(uploadToken) {
264
264
  };
265
265
  }
266
266
  async function loadCosConstructor() {
267
- const cosModule = await Promise.resolve().then(function () { return require('./index-NrjOOQMK.cjs'); }).then(function (n) { return n.index; });
267
+ const cosModule = await Promise.resolve().then(function () { return require('./index-B6gnwx39.cjs'); }).then(function (n) { return n.index; });
268
268
  return cosModule.default;
269
269
  }
270
270
  function formatSize(bytes) {
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Ck6a9STO.cjs');
3
+ var index = require('./index-gP0K2xx1.cjs');
4
4
  var node_crypto = require('node:crypto');
5
5
  var path = require('node:path');
6
6
  var require$$0$2 = require('fs');
package/dist/cli.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./cli-chunks/index-Ck6a9STO.cjs');
3
+ var index = require('./cli-chunks/index-gP0K2xx1.cjs');
4
4
  require('node:module');
5
5
  require('node:fs');
6
6
  require('node:fs/promises');
@@ -4107,57 +4107,14 @@ function assertNetworkAllowedKeys(payload) {
4107
4107
  }
4108
4108
  function readNetworkRequestUrl(value) {
4109
4109
  const requestUrl = readMiniProgramRuntimeHttpUrl(value, 'network.request url 必须是 HTTP(S) URL');
4110
- assertPublicNetworkRequestUrl(requestUrl);
4110
+ assertNetworkRequestUrl(requestUrl);
4111
4111
  return requestUrl;
4112
4112
  }
4113
- function assertPublicNetworkRequestUrl(requestUrl) {
4113
+ function assertNetworkRequestUrl(requestUrl) {
4114
4114
  const url = new URL(requestUrl);
4115
4115
  if (url.username || url.password) {
4116
4116
  throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', 'network.request url 不允许包含用户信息');
4117
4117
  }
4118
- if (isUnsafeNetworkHost(url.hostname)) {
4119
- throw createMiniProgramRuntimeBridgeError('INVALID_PARAMS', 'network.request url 不允许指向本机、内网或保留地址');
4120
- }
4121
- }
4122
- function isUnsafeNetworkHost(hostname) {
4123
- const normalizedHost = hostname.toLowerCase();
4124
- const ipv6Host = normalizedHost.startsWith('[') && normalizedHost.endsWith(']')
4125
- ? normalizedHost.slice(1, -1)
4126
- : normalizedHost;
4127
- if (normalizedHost === 'localhost' ||
4128
- normalizedHost.endsWith('.localhost') ||
4129
- normalizedHost.endsWith('.local') ||
4130
- normalizedHost === 'metadata.google.internal') {
4131
- return true;
4132
- }
4133
- if (isUnsafeIPv4Host(normalizedHost)) {
4134
- return true;
4135
- }
4136
- return isUnsafeIPv6Host(ipv6Host);
4137
- }
4138
- function isUnsafeIPv4Host(hostname) {
4139
- if (!/^\d{1,3}(\.\d{1,3}){3}$/.test(hostname)) {
4140
- return false;
4141
- }
4142
- const parts = hostname.split('.').map(part => Number(part));
4143
- if (parts.some(part => !Number.isInteger(part) || part < 0 || part > 255)) {
4144
- return true;
4145
- }
4146
- const [a, b] = parts;
4147
- return (a === 0 ||
4148
- a === 10 ||
4149
- a === 127 ||
4150
- (a === 100 && b >= 64 && b <= 127) ||
4151
- (a === 169 && b === 254) ||
4152
- (a === 172 && b >= 16 && b <= 31) ||
4153
- (a === 192 && b === 168));
4154
- }
4155
- function isUnsafeIPv6Host(hostname) {
4156
- return (hostname === '::' ||
4157
- hostname === '::1' ||
4158
- hostname.startsWith('fc') ||
4159
- hostname.startsWith('fd') ||
4160
- hostname.startsWith('fe80:'));
4161
4118
  }
4162
4119
  function readNetworkRequestHeaders(value) {
4163
4120
  const headers = readStringRecord(value, 'network.request headers 必须是 Record<string, string>');
package/dist/index.cjs.js CHANGED
@@ -325,7 +325,7 @@ function createMessageId() {
325
325
  /** 构建时替换为当前发布包的实际版本。 */
326
326
  const HB_SDK_VERSION = typeof undefined === 'string'
327
327
  ? undefined
328
- : '0.6.6-alpha.0';
328
+ : '0.6.6-alpha.1';
329
329
 
330
330
  /**
331
331
  * 判断未知数据是否符合小程序 bridge 消息信封。
package/dist/index.esm.js CHANGED
@@ -321,7 +321,7 @@ function createMessageId() {
321
321
  /** 构建时替换为当前发布包的实际版本。 */
322
322
  const HB_SDK_VERSION = typeof undefined === 'string'
323
323
  ? undefined
324
- : '0.6.6-alpha.0';
324
+ : '0.6.6-alpha.1';
325
325
 
326
326
  /**
327
327
  * 判断未知数据是否符合小程序 bridge 消息信封。
package/dist/vite.cjs.js CHANGED
@@ -7,7 +7,7 @@ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentS
7
7
  /** 构建时替换为当前发布包的实际版本。 */
8
8
  const HB_SDK_VERSION = typeof undefined === 'string'
9
9
  ? undefined
10
- : '0.6.6-alpha.0';
10
+ : '0.6.6-alpha.1';
11
11
 
12
12
  var re = {exports: {}};
13
13
 
package/dist/vite.esm.js CHANGED
@@ -4,7 +4,7 @@ import path from 'node:path';
4
4
  /** 构建时替换为当前发布包的实际版本。 */
5
5
  const HB_SDK_VERSION = typeof undefined === 'string'
6
6
  ? undefined
7
- : '0.6.6-alpha.0';
7
+ : '0.6.6-alpha.1';
8
8
 
9
9
  var re = {exports: {}};
10
10
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heybox/hb-sdk",
3
- "version": "0.6.6-alpha.0",
3
+ "version": "0.6.6-alpha.1",
4
4
  "sideEffects": [
5
5
  "./src/index.ts",
6
6
  "./src/core/singleton.ts",
@@ -93,7 +93,7 @@
93
93
  "vue": "^2.7.16",
94
94
  "vite": "^8.0.12",
95
95
  "vitest": "^3.2.4",
96
- "@heybox/hb-api": "~1.25.4"
96
+ "@heybox/hb-api": "~1.25.5"
97
97
  },
98
98
  "publishConfig": {
99
99
  "registry": "https://registry.npmjs.org/",
@@ -19,7 +19,7 @@
19
19
  ## Package metadata
20
20
 
21
21
  - Package: `@heybox/hb-sdk`
22
- - Version at generation time: `0.6.6-alpha.0`
22
+ - Version at generation time: `0.6.6-alpha.1`
23
23
  - Public root export: `@heybox/hb-sdk`
24
24
  - Protocol export: `@heybox/hb-sdk/protocol`
25
25
  - Vite plugin export: `@heybox/hb-sdk/vite`
@@ -749,6 +749,8 @@ await network.request({
749
749
 
750
750
  `network.request` 由平台 Runtime 权限控制。未授权时 SDK 会收到 `PERMISSION_DENIED` 和“当前小程序暂不支持网络请求”;即使已开启网络请求,访问黑盒官方域名仍需要运营侧单独开启官方域名配置。业务代码不能自行请求或注入 Cookie、pkey 等官方凭据。
751
751
 
752
+ 权限开启后,`network.request` 可以访问任意 HTTP(S) 目标,包括本机、局域网和保留地址。Runtime 不按目标地址类别拦截请求;宿主网络适配器仍负责实际连接、重定向和系统网络错误。
753
+
752
754
  ## 生命周期事件
753
755
 
754
756
  导入 SDK 根包时会 eager 创建唯一默认实例并立即开始与父容器握手。使用 `on()` 监听父容器派发的小程序事件时不会创建第二个实例;`on()` 会返回取消监听函数,组件卸载或页面销毁时应及时调用。
@@ -126,7 +126,7 @@ Dev Context 中调整的 `network.request` 权限不会修改线上配置,但
126
126
 
127
127
  ### 浏览器 Mock 的边界
128
128
 
129
- 浏览器 Mock 用于提高开发效率,不代表正式线上环境。Dev Session 的网络请求只对绑定 token 的本机或局域网开发页面生效,通过本地代理转发,不使用黑盒原生凭据 adapter;`useOfficialDomain` 始终为 `false`。旧 `dev_network_request` query 不再授权,权限只能来自有效的不可变 Dev Session 快照。该方案不要求修改 Android/iOS 客户端;用户状态仍只保存在浏览器 Mock,线上权限、客户端兼容性和最终交互仍需按真实发布配置验收。
129
+ 浏览器 Mock 用于提高开发效率,不代表正式线上环境。Dev Session 的网络请求只对绑定 token 的本机或局域网开发页面生效,通过本地代理转发,不使用黑盒原生凭据 adapter;`useOfficialDomain` 始终为 `false`。代理允许访问本机、局域网和保留地址,并对初始 URL 与每次重定向分别解析和固定连接地址。旧 `dev_network_request` query 不再授权,权限只能来自有效的不可变 Dev Session 快照。该方案不要求修改 Android/iOS 客户端;用户状态仍只保存在浏览器 Mock,线上权限、客户端兼容性和最终交互仍需按真实发布配置验收。
130
130
 
131
131
  ### 常用参数
132
132
 
package/skill/skill.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "hb-sdk",
3
- "skillVersion": "0.6.6-alpha.0+skill.cfc5c9fb3951",
3
+ "skillVersion": "0.6.6-alpha.1+skill.2799351c9553",
4
4
  "sdk": {
5
5
  "package": "@heybox/hb-sdk",
6
- "version": "0.6.6-alpha.0",
7
- "compatibility": "0.6.6-alpha.0"
6
+ "version": "0.6.6-alpha.1",
7
+ "compatibility": "0.6.6-alpha.1"
8
8
  },
9
9
  "source": "https://open.xiaoheihe.cn/agent-skills/hb-sdk",
10
- "integrity": "sha256-cfc5c9fb39515fb1aa10fa2fc4db030d31ff0034b389062e009c0d6f2195e9e4"
10
+ "integrity": "sha256-2799351c9553f32af834bd0a53e6d016d647aafb275dff139ddd0dfaf2261321"
11
11
  }