tuyoo-devflow 0.1.7 → 0.1.9
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 +6 -0
- package/dist/commands/agent/shared.js +1 -1
- package/dist/commands/agent/shared.js.map +1 -1
- package/dist/core/precheck/networkReport.d.ts +2 -1
- package/dist/core/precheck/networkReport.js +37 -4
- package/dist/core/precheck/networkReport.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.9] - 2026-04-22
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- `agent doctor` 生成白名单失败 OA 报告时,外网 IP 会优先通过 `curl ip.sb` 自动获取,拿不到时再回落为 `待补充`。
|
|
14
|
+
|
|
9
15
|
## [0.1.7] - 2026-04-22
|
|
10
16
|
|
|
11
17
|
### Changed
|
|
@@ -39,7 +39,7 @@ export async function printFailedWhitelistReport(checks) {
|
|
|
39
39
|
if (failedNetworkChecks.length === 0) {
|
|
40
40
|
return null;
|
|
41
41
|
}
|
|
42
|
-
const report = formatWhitelistFailureReport(failedNetworkChecks);
|
|
42
|
+
const report = await formatWhitelistFailureReport(failedNetworkChecks);
|
|
43
43
|
const reportPath = await saveWhitelistFailureReport(report);
|
|
44
44
|
console.error("\n以下为网络白名单未通过项的 OA 申请报告:");
|
|
45
45
|
console.error(report);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/agent/shared.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQpD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA2B,EAC3B,cAAsB;IAEtB,MAAM,YAAY,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,cAAc,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO;QACL,YAAY;QACZ,cAAc;QACd,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAyB;IAC1D,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CACnF,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAyB;IAChE,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC3D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAyB;IAC9D,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyB;IAC/D,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,UAAU,CAAC,KAAC,WAAW,IAAC,KAAK,EAAC,gCAAY,EAAC,OAAO,EAAE,MAAM,CAAC,YAAY,GAAI,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,UAAU,CAAC,KAAC,WAAW,IAAC,KAAK,EAAC,4CAAS,EAAC,OAAO,EAAE,MAAM,CAAC,cAAc,GAAI,CAAC,CAAC;IAClF,MAAM,UAAU,CAAC,KAAC,WAAW,IAAC,KAAK,EAAC,4CAAS,EAAC,OAAO,EAAE,MAAM,CAAC,WAAW,GAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,MAAyB;IACxE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,4BAA4B,CAAC,mBAAmB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/agent/shared.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ export interface WhitelistFailureReportOptions {
|
|
|
3
3
|
machineName?: string;
|
|
4
4
|
internalIp?: string;
|
|
5
5
|
externalIp?: string;
|
|
6
|
+
disableExternalIpLookup?: boolean;
|
|
6
7
|
}
|
|
7
|
-
export declare function formatWhitelistFailureReport(failedResults: NetworkCheckResult[], options?: WhitelistFailureReportOptions): string
|
|
8
|
+
export declare function formatWhitelistFailureReport(failedResults: NetworkCheckResult[], options?: WhitelistFailureReportOptions): Promise<string>;
|
|
8
9
|
export declare function getWhitelistFailureReportPath(): string;
|
|
9
10
|
export declare function saveWhitelistFailureReport(report: string): Promise<string>;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
1
2
|
import fs from "fs-extra";
|
|
2
3
|
import os from "node:os";
|
|
3
4
|
import path from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
4
6
|
import { getConfigDir } from "../platform.js";
|
|
7
|
+
const execFileAsync = promisify(execFile);
|
|
5
8
|
function unique(items) {
|
|
6
9
|
return Array.from(new Set(items));
|
|
7
10
|
}
|
|
@@ -25,8 +28,38 @@ function resolveInternalIp(options) {
|
|
|
25
28
|
pickPrimaryInternalIp() ||
|
|
26
29
|
"待补充");
|
|
27
30
|
}
|
|
28
|
-
function
|
|
29
|
-
|
|
31
|
+
function normalizeIpCandidate(value) {
|
|
32
|
+
const candidate = value?.trim();
|
|
33
|
+
if (!candidate) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const ipv4Pattern = /^(?:\d{1,3}\.){3}\d{1,3}$/;
|
|
37
|
+
const ipv6Pattern = /^[0-9a-f:]+$/i;
|
|
38
|
+
if (ipv4Pattern.test(candidate) || ipv6Pattern.test(candidate)) {
|
|
39
|
+
return candidate;
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
async function fetchExternalIpViaCurl() {
|
|
44
|
+
try {
|
|
45
|
+
const { stdout } = await execFileAsync("curl", ["-fsSL", "--max-time", "5", "ip.sb"], {
|
|
46
|
+
timeout: 6000,
|
|
47
|
+
});
|
|
48
|
+
return normalizeIpCandidate(stdout);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function resolveExternalIp(options) {
|
|
55
|
+
const explicit = normalizeIpCandidate(options.externalIp) ?? normalizeIpCandidate(process.env.TDF_EXTERNAL_IP);
|
|
56
|
+
if (explicit) {
|
|
57
|
+
return explicit;
|
|
58
|
+
}
|
|
59
|
+
if (options.disableExternalIpLookup) {
|
|
60
|
+
return "待补充";
|
|
61
|
+
}
|
|
62
|
+
return (await fetchExternalIpViaCurl()) ?? "待补充";
|
|
30
63
|
}
|
|
31
64
|
function formatFailureEndpoint(result) {
|
|
32
65
|
const addresses = result.resolvedAddresses.length > 0 ? result.resolvedAddresses : [result.target.host];
|
|
@@ -35,10 +68,10 @@ function formatFailureEndpoint(result) {
|
|
|
35
68
|
return `${address}:${result.target.port}(${result.target.name}${hostNote})`;
|
|
36
69
|
});
|
|
37
70
|
}
|
|
38
|
-
export function formatWhitelistFailureReport(failedResults, options = {}) {
|
|
71
|
+
export async function formatWhitelistFailureReport(failedResults, options = {}) {
|
|
39
72
|
const machineName = resolveMachineName(options);
|
|
40
73
|
const internalIp = resolveInternalIp(options);
|
|
41
|
-
const externalIp = resolveExternalIp(options);
|
|
74
|
+
const externalIp = await resolveExternalIp(options);
|
|
42
75
|
const endpoints = unique(failedResults.flatMap((item) => formatFailureEndpoint(item)));
|
|
43
76
|
const lines = endpoints.map((item, index) => `${index + 1}. ${item}`);
|
|
44
77
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkReport.js","sourceRoot":"","sources":["../../../src/core/precheck/networkReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"networkReport.js","sourceRoot":"","sources":["../../../src/core/precheck/networkReport.ts"],"names":[],"mappings":"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"}
|