@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 +2 -0
- package/dist/cli-chunks/{context-Do5YcZPw.cjs → context-D-cb_pNY.cjs} +1 -1
- package/dist/cli-chunks/{create-CG36zW_8.cjs → create-DlU4nWz_.cjs} +1 -1
- package/dist/cli-chunks/{dev-BjlyFzNU.cjs → dev-Bb4U965a.cjs} +11 -64
- package/dist/cli-chunks/{doctor-OIjeEwrd.cjs → doctor-DwDqOLdV.cjs} +1 -1
- package/dist/cli-chunks/{index-NrjOOQMK.cjs → index-B6gnwx39.cjs} +2 -2
- package/dist/cli-chunks/{index-Ck6a9STO.cjs → index-gP0K2xx1.cjs} +13 -13
- package/dist/cli-chunks/{login-CqXRKZgq.cjs → login-BFIcNgmi.cjs} +2 -2
- package/dist/cli-chunks/{remote-vquOa1cT.cjs → remote-YESvKni6.cjs} +4 -4
- package/dist/cli-chunks/{session-DUM4KQHQ.cjs → session-BRwveiW8.cjs} +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/devtools/mock-host/main.js +2 -45
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +2 -2
- package/skill/references/api-root.md +3 -1
- package/skill/references/cli.md +1 -1
- package/skill/skill.json +4 -4
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()` 会返回取消监听函数,组件卸载或页面销毁时应及时调用。
|
|
@@ -5,7 +5,7 @@ var fs = require('node:fs/promises');
|
|
|
5
5
|
var path = require('node:path');
|
|
6
6
|
var require$$0 = require('fs');
|
|
7
7
|
var require$$1 = require('path');
|
|
8
|
-
var index = require('./index-
|
|
8
|
+
var index = require('./index-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-
|
|
16
|
-
var context = require('./context-
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
6
|
+
var session = require('./session-BRwveiW8.cjs');
|
|
7
7
|
var browser = require('./browser-RAy8e8cV.cjs');
|
|
8
|
-
var index = require('./index-
|
|
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-
|
|
5
|
-
var session = require('./session-
|
|
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-
|
|
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-
|
|
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) {
|
package/dist/cli.cjs
CHANGED
|
@@ -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
|
-
|
|
4110
|
+
assertNetworkRequestUrl(requestUrl);
|
|
4111
4111
|
return requestUrl;
|
|
4112
4112
|
}
|
|
4113
|
-
function
|
|
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
package/dist/index.esm.js
CHANGED
package/dist/vite.cjs.js
CHANGED
package/dist/vite.esm.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heybox/hb-sdk",
|
|
3
|
-
"version": "0.6.6-alpha.
|
|
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.
|
|
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.
|
|
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()` 会返回取消监听函数,组件卸载或页面销毁时应及时调用。
|
package/skill/references/cli.md
CHANGED
|
@@ -126,7 +126,7 @@ Dev Context 中调整的 `network.request` 权限不会修改线上配置,但
|
|
|
126
126
|
|
|
127
127
|
### 浏览器 Mock 的边界
|
|
128
128
|
|
|
129
|
-
浏览器 Mock 用于提高开发效率,不代表正式线上环境。Dev Session 的网络请求只对绑定 token 的本机或局域网开发页面生效,通过本地代理转发,不使用黑盒原生凭据 adapter;`useOfficialDomain` 始终为 `false
|
|
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.
|
|
3
|
+
"skillVersion": "0.6.6-alpha.1+skill.2799351c9553",
|
|
4
4
|
"sdk": {
|
|
5
5
|
"package": "@heybox/hb-sdk",
|
|
6
|
-
"version": "0.6.6-alpha.
|
|
7
|
-
"compatibility": "0.6.6-alpha.
|
|
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-
|
|
10
|
+
"integrity": "sha256-2799351c9553f32af834bd0a53e6d016d647aafb275dff139ddd0dfaf2261321"
|
|
11
11
|
}
|