@wootsup/yt-builder-mcp 1.6.0 → 1.6.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/bin/yt-builder-mcp.js +72 -0
- package/dist/diagnostics/ca-reexec.d.ts +41 -0
- package/dist/diagnostics/ca-reexec.d.ts.map +1 -0
- package/dist/diagnostics/ca-reexec.js +91 -0
- package/dist/diagnostics/ca-reexec.js.map +1 -0
- package/dist/diagnostics/ca-trust.d.ts +11 -0
- package/dist/diagnostics/ca-trust.d.ts.map +1 -1
- package/dist/diagnostics/ca-trust.js +14 -1
- package/dist/diagnostics/ca-trust.js.map +1 -1
- package/dist/diagnostics/diagnose-network-error.d.ts +11 -0
- package/dist/diagnostics/diagnose-network-error.d.ts.map +1 -1
- package/dist/diagnostics/diagnose-network-error.js +18 -3
- package/dist/diagnostics/diagnose-network-error.js.map +1 -1
- package/dist/setup-wizard-handshake.d.ts.map +1 -1
- package/dist/setup-wizard-handshake.js +17 -4
- package/dist/setup-wizard-handshake.js.map +1 -1
- package/dist/setup-wizard-types.d.ts +13 -0
- package/dist/setup-wizard-types.d.ts.map +1 -1
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +74 -0
- package/dist/setup-wizard.js.map +1 -1
- package/dist/tools/format/pages-format.d.ts +9 -5
- package/dist/tools/format/pages-format.d.ts.map +1 -1
- package/dist/tools/format/pages-format.js +22 -14
- package/dist/tools/format/pages-format.js.map +1 -1
- package/dist/tools/pages/builders.d.ts.map +1 -1
- package/dist/tools/pages/builders.js +24 -11
- package/dist/tools/pages/builders.js.map +1 -1
- package/dist/tools/pages/handlers-read.d.ts +5 -2
- package/dist/tools/pages/handlers-read.d.ts.map +1 -1
- package/dist/tools/pages/handlers-read.js +29 -7
- package/dist/tools/pages/handlers-read.js.map +1 -1
- package/dist/tools/pages/schemas.d.ts +14 -1
- package/dist/tools/pages/schemas.d.ts.map +1 -1
- package/dist/tools/pages/schemas.js +28 -5
- package/dist/tools/pages/schemas.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
package/bin/yt-builder-mcp.js
CHANGED
|
@@ -25,15 +25,39 @@
|
|
|
25
25
|
* YTB_MCP_TEST_MODE=1 forces the 'server' route so the smoke-test probe
|
|
26
26
|
* always reaches `dist/index.js` even when run from a TTY.
|
|
27
27
|
*
|
|
28
|
+
* RUNTIME CA SELF-HEAL (server branch only): corporate-CA trust used to depend
|
|
29
|
+
* ENTIRELY on `NODE_OPTIONS=--use-system-ca` being in the client config env
|
|
30
|
+
* before Node booted. When that value got clobbered (Glöckle v1.6) Node fell
|
|
31
|
+
* back to its bundled Mozilla CAs, could not build the corporate TLS-inspection
|
|
32
|
+
* chain, and `/mcp` hung for 30s. To stop depending on the config carrying the
|
|
33
|
+
* flag, the server SELF-HEALS: in the 'server' branch, BEFORE importing
|
|
34
|
+
* `dist/index.js`, if this Node supports `--use-system-ca` (≥ 22.15.0) AND the
|
|
35
|
+
* flag is not already active AND a loop-guard sentinel is not set, we re-exec
|
|
36
|
+
* the SAME bin with `node --use-system-ca …`, inherit stdio (so the MCP stdio
|
|
37
|
+
* JSON-RPC transport is byte-transparent — the parent is a thin passthrough),
|
|
38
|
+
* forward the child's exit code, and do NOT continue in the parent. The sentinel
|
|
39
|
+
* (set on the child env) + the already-active check PREVENT an infinite re-exec
|
|
40
|
+
* loop. The whole step is wrapped in try/catch: ANY failure falls through to a
|
|
41
|
+
* normal in-process start — a re-exec failure must NEVER break startup. The
|
|
42
|
+
* decision is the pure, unit-tested `decideCaReexec()`. The re-exec is SKIPPED
|
|
43
|
+
* under YTB_MCP_TEST_MODE=1 and never runs on the 'cli'/'hint' routes.
|
|
44
|
+
*
|
|
28
45
|
* @license MIT
|
|
29
46
|
*/
|
|
30
47
|
import { argv, stdin, stderr, exit } from 'node:process';
|
|
48
|
+
import { spawnSync } from 'node:child_process';
|
|
49
|
+
import { fileURLToPath } from 'node:url';
|
|
31
50
|
|
|
32
51
|
import {
|
|
33
52
|
decideInvocation,
|
|
34
53
|
isKnownSubcommand,
|
|
35
54
|
BARE_INVOCATION_HINT,
|
|
36
55
|
} from '../dist/cli/invocation-decision.js';
|
|
56
|
+
import {
|
|
57
|
+
decideCaReexec,
|
|
58
|
+
CA_REEXEC_SENTINEL,
|
|
59
|
+
USE_SYSTEM_CA_FLAG,
|
|
60
|
+
} from '../dist/diagnostics/ca-reexec.js';
|
|
37
61
|
|
|
38
62
|
const args = argv.slice(2);
|
|
39
63
|
const subcommand = args[0];
|
|
@@ -67,6 +91,54 @@ if (action === 'cli') {
|
|
|
67
91
|
} else {
|
|
68
92
|
// 'server' — stdin is NOT a TTY (an AI client piping JSON-RPC → real
|
|
69
93
|
// MCP stdio server) or YTB_MCP_TEST_MODE=1 forced this route.
|
|
94
|
+
|
|
95
|
+
// RUNTIME CA SELF-HEAL: re-exec with `--use-system-ca` when needed so
|
|
96
|
+
// corporate TLS-inspection trust no longer depends on the client config
|
|
97
|
+
// carrying NODE_OPTIONS. SKIPPED under test mode (the smoke test must reach
|
|
98
|
+
// dist/index.js without a fork). Defensive: ANY failure falls through to a
|
|
99
|
+
// normal in-process start — a re-exec failure must never break startup.
|
|
100
|
+
if (process.env.YTB_MCP_TEST_MODE !== '1') {
|
|
101
|
+
try {
|
|
102
|
+
const shouldReexec = decideCaReexec({
|
|
103
|
+
nodeVersion: process.version,
|
|
104
|
+
execArgv: process.execArgv,
|
|
105
|
+
nodeOptions: process.env.NODE_OPTIONS,
|
|
106
|
+
sentinel: process.env[CA_REEXEC_SENTINEL],
|
|
107
|
+
});
|
|
108
|
+
if (shouldReexec) {
|
|
109
|
+
const self = fileURLToPath(import.meta.url);
|
|
110
|
+
// stdio:'inherit' → the child owns the MCP stdio JSON-RPC
|
|
111
|
+
// transport directly; the parent is a transparent passthrough
|
|
112
|
+
// that just forwards the child's exit code.
|
|
113
|
+
const child = spawnSync(
|
|
114
|
+
process.execPath,
|
|
115
|
+
[USE_SYSTEM_CA_FLAG, self, ...args],
|
|
116
|
+
{
|
|
117
|
+
stdio: 'inherit',
|
|
118
|
+
env: { ...process.env, [CA_REEXEC_SENTINEL]: '1' },
|
|
119
|
+
},
|
|
120
|
+
);
|
|
121
|
+
if (child.error) {
|
|
122
|
+
// Spawn itself failed (e.g. EACCES) — fall through to an
|
|
123
|
+
// in-process start rather than exiting on a heal failure.
|
|
124
|
+
stderr.write(
|
|
125
|
+
`yt-builder-mcp: CA self-heal re-exec failed (${child.error.message}); ` +
|
|
126
|
+
'starting in-process.\n',
|
|
127
|
+
);
|
|
128
|
+
} else {
|
|
129
|
+
// The child ran the server to completion; mirror its exit.
|
|
130
|
+
// signal → 1 (no clean code), else the child's code (or 0).
|
|
131
|
+
exit(child.signal ? 1 : (child.status ?? 0));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} catch (err) {
|
|
135
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
136
|
+
stderr.write(
|
|
137
|
+
`yt-builder-mcp: CA self-heal skipped (${msg}); starting in-process.\n`,
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
70
142
|
// `dist/index.js` branches on the env var: test-mode prints the tool
|
|
71
143
|
// list to stderr and exits 0; otherwise it starts the stdio server.
|
|
72
144
|
// Importing here does NOT itself force stdio mode.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Env var name the parent stamps on the re-exec'd child to break the loop. */
|
|
2
|
+
export declare const CA_REEXEC_SENTINEL = "YTB_MCP_CA_REEXEC";
|
|
3
|
+
/** The Node flag we re-exec with — adds the OS trust store, never disables TLS. */
|
|
4
|
+
export declare const USE_SYSTEM_CA_FLAG = "--use-system-ca";
|
|
5
|
+
/**
|
|
6
|
+
* Is `--use-system-ca` already active for THIS process — either passed on the
|
|
7
|
+
* command line (surfaces in `process.execArgv`) or carried in `NODE_OPTIONS`?
|
|
8
|
+
*
|
|
9
|
+
* Both inputs are matched as whitespace-delimited tokens so a longer flag that
|
|
10
|
+
* merely CONTAINS the substring (none exists today, but defensively) cannot
|
|
11
|
+
* produce a false positive. `execArgv` entries are already individual tokens;
|
|
12
|
+
* `NODE_OPTIONS` is a single space-separated string, so it is split first.
|
|
13
|
+
*
|
|
14
|
+
* @param execArgv `process.execArgv` (Node-level flags, one per element).
|
|
15
|
+
* @param nodeOptions the `NODE_OPTIONS` env value (or undefined when unset).
|
|
16
|
+
*/
|
|
17
|
+
export declare function isSystemCaActive(execArgv: readonly string[], nodeOptions: string | undefined): boolean;
|
|
18
|
+
/** Inputs to {@link decideCaReexec} — every signal is passed in (no globals). */
|
|
19
|
+
export interface CaReexecInputs {
|
|
20
|
+
/** `process.version`, e.g. "v22.17.0". */
|
|
21
|
+
readonly nodeVersion: string;
|
|
22
|
+
/** `process.execArgv` — Node flags this process was launched with. */
|
|
23
|
+
readonly execArgv: readonly string[];
|
|
24
|
+
/** The `NODE_OPTIONS` env value, or undefined when unset. */
|
|
25
|
+
readonly nodeOptions: string | undefined;
|
|
26
|
+
/** The loop-guard sentinel env value ({@link CA_REEXEC_SENTINEL}), or undefined. */
|
|
27
|
+
readonly sentinel: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Should the server bin re-exec itself WITH `--use-system-ca`?
|
|
31
|
+
*
|
|
32
|
+
* Returns `true` iff ALL hold:
|
|
33
|
+
* 1. this Node can read the OS trust store ({@link supportsSystemCa}: ≥ 22.15.0),
|
|
34
|
+
* 2. `--use-system-ca` is NOT already active ({@link isSystemCaActive}),
|
|
35
|
+
* 3. the loop-guard sentinel is NOT set.
|
|
36
|
+
*
|
|
37
|
+
* Any of: Node too old, flag already active, or sentinel set → `false`
|
|
38
|
+
* (proceed in-process). Pure: depends only on its arguments.
|
|
39
|
+
*/
|
|
40
|
+
export declare function decideCaReexec(inputs: CaReexecInputs): boolean;
|
|
41
|
+
//# sourceMappingURL=ca-reexec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ca-reexec.d.ts","sourceRoot":"","sources":["../../src/diagnostics/ca-reexec.ts"],"names":[],"mappings":"AAoCA,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,GAChC,OAAO,CAaT;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAe9D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// packages/mcp/src/diagnostics/ca-reexec.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pure decision core for the runtime `--use-system-ca` SELF-HEAL re-exec in
|
|
4
|
+
* `bin/yt-builder-mcp.js` (server branch only).
|
|
5
|
+
*
|
|
6
|
+
* THE PROBLEM IT SOLVES — env-clobber regression (Glöckle v1.6, 2026-06):
|
|
7
|
+
* corporate-CA trust depended ENTIRELY on `NODE_OPTIONS=--use-system-ca` being
|
|
8
|
+
* present in the MCP client config env BEFORE Node booted. On the Glöckle
|
|
9
|
+
* install that value got wiped, so Node fell back to its bundled Mozilla CA set,
|
|
10
|
+
* could not build the corporate TLS-inspection chain, and the `/mcp` handshake
|
|
11
|
+
* hung for 30s. `mergeServerEnv` (clients/index.ts) is correct; the robust fix
|
|
12
|
+
* is to STOP depending on the config carrying the flag and have the SERVER
|
|
13
|
+
* self-heal at launch by re-exec'ing itself WITH `--use-system-ca`.
|
|
14
|
+
*
|
|
15
|
+
* WHY `--use-system-ca` IS SAFE TO APPLY UNCONDITIONALLY (on a supporting Node):
|
|
16
|
+
* the flag only ADDS the OS trust store (Windows CryptoAPI / macOS Keychain) to
|
|
17
|
+
* Node's bundled Mozilla CAs. It never DISABLES TLS verification. For a
|
|
18
|
+
* non-corporate user it is a harmless superset; for a corporate user it is the
|
|
19
|
+
* whole fix.
|
|
20
|
+
*
|
|
21
|
+
* THE LOOP-GUARD (critical): a re-exec that itself re-execs is an infinite fork
|
|
22
|
+
* bomb. {@link decideCaReexec} returns `false` whenever the flag is ALREADY
|
|
23
|
+
* active (in `process.execArgv` OR the `NODE_OPTIONS` env) OR a sentinel env var
|
|
24
|
+
* (set by the parent on the child it spawns) is present. The shim sets the
|
|
25
|
+
* sentinel on the child, so the child's own `decideCaReexec` returns `false` and
|
|
26
|
+
* proceeds in-process.
|
|
27
|
+
*
|
|
28
|
+
* The bin shim is a thin, un-typed JS file; the decision logic lives here, in a
|
|
29
|
+
* typed + unit-tested module, exactly like `cli/invocation-decision.ts`.
|
|
30
|
+
*
|
|
31
|
+
* @license MIT
|
|
32
|
+
*/
|
|
33
|
+
import { supportsSystemCa } from './ca-trust.js';
|
|
34
|
+
/** Env var name the parent stamps on the re-exec'd child to break the loop. */
|
|
35
|
+
export const CA_REEXEC_SENTINEL = 'YTB_MCP_CA_REEXEC';
|
|
36
|
+
/** The Node flag we re-exec with — adds the OS trust store, never disables TLS. */
|
|
37
|
+
export const USE_SYSTEM_CA_FLAG = '--use-system-ca';
|
|
38
|
+
/**
|
|
39
|
+
* Is `--use-system-ca` already active for THIS process — either passed on the
|
|
40
|
+
* command line (surfaces in `process.execArgv`) or carried in `NODE_OPTIONS`?
|
|
41
|
+
*
|
|
42
|
+
* Both inputs are matched as whitespace-delimited tokens so a longer flag that
|
|
43
|
+
* merely CONTAINS the substring (none exists today, but defensively) cannot
|
|
44
|
+
* produce a false positive. `execArgv` entries are already individual tokens;
|
|
45
|
+
* `NODE_OPTIONS` is a single space-separated string, so it is split first.
|
|
46
|
+
*
|
|
47
|
+
* @param execArgv `process.execArgv` (Node-level flags, one per element).
|
|
48
|
+
* @param nodeOptions the `NODE_OPTIONS` env value (or undefined when unset).
|
|
49
|
+
*/
|
|
50
|
+
export function isSystemCaActive(execArgv, nodeOptions) {
|
|
51
|
+
if (execArgv.includes(USE_SYSTEM_CA_FLAG)) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if (typeof nodeOptions === 'string') {
|
|
55
|
+
// NODE_OPTIONS is a space-separated flag list; tokenise before matching
|
|
56
|
+
// so we compare whole flags, never a substring of one.
|
|
57
|
+
const tokens = nodeOptions.split(/\s+/).filter((t) => t.length > 0);
|
|
58
|
+
if (tokens.includes(USE_SYSTEM_CA_FLAG)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Should the server bin re-exec itself WITH `--use-system-ca`?
|
|
66
|
+
*
|
|
67
|
+
* Returns `true` iff ALL hold:
|
|
68
|
+
* 1. this Node can read the OS trust store ({@link supportsSystemCa}: ≥ 22.15.0),
|
|
69
|
+
* 2. `--use-system-ca` is NOT already active ({@link isSystemCaActive}),
|
|
70
|
+
* 3. the loop-guard sentinel is NOT set.
|
|
71
|
+
*
|
|
72
|
+
* Any of: Node too old, flag already active, or sentinel set → `false`
|
|
73
|
+
* (proceed in-process). Pure: depends only on its arguments.
|
|
74
|
+
*/
|
|
75
|
+
export function decideCaReexec(inputs) {
|
|
76
|
+
const { nodeVersion, execArgv, nodeOptions, sentinel } = inputs;
|
|
77
|
+
// Loop-guard: a child we already re-exec'd carries the sentinel. Never re-exec it.
|
|
78
|
+
if (sentinel !== undefined && sentinel !== '') {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
// Node too old to read the OS trust store — re-exec would be a no-op flag.
|
|
82
|
+
if (!supportsSystemCa(nodeVersion)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
// Already running with the flag (execArgv or NODE_OPTIONS) — nothing to heal.
|
|
86
|
+
if (isSystemCaActive(execArgv, nodeOptions)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=ca-reexec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ca-reexec.js","sourceRoot":"","sources":["../../src/diagnostics/ca-reexec.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC5B,QAA2B,EAC3B,WAA+B;IAE/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QAClC,wEAAwE;QACxE,uDAAuD;QACvD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAcD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACjD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAChE,mFAAmF;IACnF,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,2EAA2E;IAC3E,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,8EAA8E;IAC9E,IAAI,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
* same walker + code set as {@link diagnoseNetworkError}.
|
|
6
6
|
*/
|
|
7
7
|
export declare function isCaTrustError(err: unknown): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* True when `err` (or anything in its `.cause` / `AggregateError.errors`
|
|
10
|
+
* chain) carries a connection/handshake timeout code — the OPAQUE form a
|
|
11
|
+
* corporate TLS-inspection proxy takes when the cert chain can't be built and
|
|
12
|
+
* the handshake hangs instead of failing with a clean CA-trust code. Pure;
|
|
13
|
+
* reuses the same walker + canonical {@link TIMEOUT_CODES} set as
|
|
14
|
+
* {@link diagnoseNetworkError} (no duplicate classifier). The wizard uses this
|
|
15
|
+
* to attempt the OS-trust-store (`--use-system-ca`) recovery on a timeout —
|
|
16
|
+
* safe because `--use-system-ca` only ADDS the OS store and never disables TLS.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isTimeoutError(err: unknown): boolean;
|
|
8
19
|
/** Node version that first reads the OS trust store via `--use-system-ca`. */
|
|
9
20
|
export declare const SYSTEM_CA_NODE_FLOOR: readonly [number, number, number];
|
|
10
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ca-trust.d.ts","sourceRoot":"","sources":["../../src/diagnostics/ca-trust.ts"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAe,CAAC;AAQnF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,GAAE,MAAwB,GAAG,OAAO,CAS/E"}
|
|
1
|
+
{"version":3,"file":"ca-trust.d.ts","sourceRoot":"","sources":["../../src/diagnostics/ca-trust.ts"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAe,CAAC;AAQnF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,GAAE,MAAwB,GAAG,OAAO,CAS/E"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* 22.15.0. Below that floor, a corporate CA must be supplied as a `.pem`
|
|
16
16
|
* via NODE_EXTRA_CA_CERTS. Neither path ever disables TLS verification.
|
|
17
17
|
*/
|
|
18
|
-
import { CA_TRUST_CODES, collectCodes } from './diagnose-network-error.js';
|
|
18
|
+
import { CA_TRUST_CODES, collectCodes, TIMEOUT_CODES } from './diagnose-network-error.js';
|
|
19
19
|
/**
|
|
20
20
|
* True when `err` (or anything in its `.cause` / `AggregateError.errors`
|
|
21
21
|
* chain) carries a TLS chain-of-trust failure code — the signature of a
|
|
@@ -25,6 +25,19 @@ import { CA_TRUST_CODES, collectCodes } from './diagnose-network-error.js';
|
|
|
25
25
|
export function isCaTrustError(err) {
|
|
26
26
|
return collectCodes(err).some((c) => CA_TRUST_CODES.has(c));
|
|
27
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* True when `err` (or anything in its `.cause` / `AggregateError.errors`
|
|
30
|
+
* chain) carries a connection/handshake timeout code — the OPAQUE form a
|
|
31
|
+
* corporate TLS-inspection proxy takes when the cert chain can't be built and
|
|
32
|
+
* the handshake hangs instead of failing with a clean CA-trust code. Pure;
|
|
33
|
+
* reuses the same walker + canonical {@link TIMEOUT_CODES} set as
|
|
34
|
+
* {@link diagnoseNetworkError} (no duplicate classifier). The wizard uses this
|
|
35
|
+
* to attempt the OS-trust-store (`--use-system-ca`) recovery on a timeout —
|
|
36
|
+
* safe because `--use-system-ca` only ADDS the OS store and never disables TLS.
|
|
37
|
+
*/
|
|
38
|
+
export function isTimeoutError(err) {
|
|
39
|
+
return collectCodes(err).some((c) => TIMEOUT_CODES.has(c));
|
|
40
|
+
}
|
|
28
41
|
/** Node version that first reads the OS trust store via `--use-system-ca`. */
|
|
29
42
|
export const SYSTEM_CA_NODE_FLOOR = [22, 15, 0];
|
|
30
43
|
function parseNodeVersion(v) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ca-trust.js","sourceRoot":"","sources":["../../src/diagnostics/ca-trust.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ca-trust.js","sourceRoot":"","sources":["../../src/diagnostics/ca-trust.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAsC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEnF,SAAS,gBAAgB,CAAC,CAAS;IAC/B,MAAM,CAAC,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,cAAsB,OAAO,CAAC,OAAO;IAClE,MAAM,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,KAAK,GAAG,oBAAoB,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,CAAC,CAAE;YAAE,OAAO,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,6BAA6B;AAC9C,CAAC"}
|
|
@@ -22,6 +22,17 @@ export interface NetworkDiagnosis {
|
|
|
22
22
|
* definition of "this is a TLS-inspection CA problem" in the package.
|
|
23
23
|
*/
|
|
24
24
|
export declare const CA_TRUST_CODES: ReadonlySet<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Connection/handshake timeout signatures.
|
|
27
|
+
*
|
|
28
|
+
* Exported so the wizard's timeout-detection path (`isTimeoutError`) classifies
|
|
29
|
+
* an outbound failure against the SAME canonical set — there is exactly one
|
|
30
|
+
* definition of "this connection timed out" in the package. A TLS-inspecting
|
|
31
|
+
* corporate proxy whose root CA can't be built can manifest as one of these
|
|
32
|
+
* opaque timeouts (the handshake hangs) rather than a clean CA-trust code, which
|
|
33
|
+
* is why the wizard now attempts `--use-system-ca` on a timeout too.
|
|
34
|
+
*/
|
|
35
|
+
export declare const TIMEOUT_CODES: ReadonlySet<string>;
|
|
25
36
|
/**
|
|
26
37
|
* Walk `err`, its `.cause` chain, and any `AggregateError.errors`, collecting
|
|
27
38
|
* every `.code` string. A Node global-fetch failure (`TypeError: fetch failed`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose-network-error.d.ts","sourceRoot":"","sources":["../../src/diagnostics/diagnose-network-error.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAO7C,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnose-network-error.d.ts","sourceRoot":"","sources":["../../src/diagnostics/diagnose-network-error.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAO7C,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,CAK5C,CAAC;AA4BH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAa9D;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,GAAG,EAAE,OAAO,EACZ,GAAG,GAAE,MAAM,CAAC,UAAwB,GACrC,gBAAgB,GAAG,IAAI,CA2FzB"}
|
|
@@ -14,7 +14,17 @@ export const CA_TRUST_CODES = new Set([
|
|
|
14
14
|
'SELF_SIGNED_CERT',
|
|
15
15
|
'CERT_UNTRUSTED',
|
|
16
16
|
]);
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Connection/handshake timeout signatures.
|
|
19
|
+
*
|
|
20
|
+
* Exported so the wizard's timeout-detection path (`isTimeoutError`) classifies
|
|
21
|
+
* an outbound failure against the SAME canonical set — there is exactly one
|
|
22
|
+
* definition of "this connection timed out" in the package. A TLS-inspecting
|
|
23
|
+
* corporate proxy whose root CA can't be built can manifest as one of these
|
|
24
|
+
* opaque timeouts (the handshake hangs) rather than a clean CA-trust code, which
|
|
25
|
+
* is why the wizard now attempts `--use-system-ca` on a timeout too.
|
|
26
|
+
*/
|
|
27
|
+
export const TIMEOUT_CODES = new Set([
|
|
18
28
|
'UND_ERR_CONNECT_TIMEOUT',
|
|
19
29
|
'ETIMEDOUT',
|
|
20
30
|
'UND_ERR_HEADERS_TIMEOUT',
|
|
@@ -133,16 +143,21 @@ export function diagnoseNetworkError(err, env = process.env) {
|
|
|
133
143
|
}
|
|
134
144
|
const timeoutCode = has(TIMEOUT_CODES);
|
|
135
145
|
if (timeoutCode !== null) {
|
|
146
|
+
// A TLS-inspecting corporate CA can hang the handshake into an opaque
|
|
147
|
+
// timeout (not a clean cert code), so the CA path is named alongside the
|
|
148
|
+
// proxy/VPN guidance — setup now retries with --use-system-ca on a
|
|
149
|
+
// timeout automatically; if it still fails, pin the corporate root CA.
|
|
150
|
+
const caHint = ' If your network uses TLS inspection / a self-signed corporate CA, setup now retries with --use-system-ca automatically (Node ≥ 22.15); if it still fails, re-run setup with `--ca <corp-root-ca.pem>`. Never disable TLS verification.';
|
|
136
151
|
return proxy !== null
|
|
137
152
|
? {
|
|
138
153
|
code: timeoutCode,
|
|
139
154
|
summary: `The connection through the proxy (${proxy}) timed out.`,
|
|
140
|
-
fix: `Confirm HTTPS_PROXY=${proxy} can reach the site, and set NO_PROXY for internal hosts. Run \`… doctor
|
|
155
|
+
fix: `Confirm HTTPS_PROXY=${proxy} can reach the site, and set NO_PROXY for internal hosts. Run \`… doctor\`.${caHint}`,
|
|
141
156
|
}
|
|
142
157
|
: {
|
|
143
158
|
code: timeoutCode,
|
|
144
159
|
summary: 'The connection timed out.',
|
|
145
|
-
fix:
|
|
160
|
+
fix: `The site may be internal (VPN needed) or require a proxy (set HTTPS_PROXY). Run \`npx -y @wootsup/yt-builder-mcp doctor\` to diagnose.${caHint}`,
|
|
146
161
|
};
|
|
147
162
|
}
|
|
148
163
|
const dnsCode = has(DNS_CODES);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose-network-error.js","sourceRoot":"","sources":["../../src/diagnostics/diagnose-network-error.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAmBzD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IACvD,2BAA2B;IAC3B,6BAA6B;IAC7B,iCAAiC;IACjC,mCAAmC;IACnC,kBAAkB;IAClB,gBAAgB;CACnB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnose-network-error.js","sourceRoot":"","sources":["../../src/diagnostics/diagnose-network-error.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAmBzD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IACvD,2BAA2B;IAC3B,6BAA6B;IAC7B,iCAAiC;IACjC,mCAAmC;IACnC,kBAAkB;IAClB,gBAAgB;CACnB,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC;IACtD,yBAAyB;IACzB,WAAW;IACX,yBAAyB;IACzB,sBAAsB;CACzB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,GACR,qHAAqH;IACrH,uHAAuH;IACvH,uHAAuH;IACvH,2FAA2F,CAAC;AAEhG,2DAA2D;AAC3D,SAAS,MAAM,CAAC,KAAc;IAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACjE,MAAM,CAAC,GAAI,KAA2B,CAAC,IAAI,CAAC;QAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,KAAc;IAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACnE,MAAM,CAAC,GAAI,KAA6B,CAAC,MAAM,CAAC;QAChD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,KAAK,GAAG,CAAC;IAChD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACpE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,OAAO,IAAI,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAE,GAA0B,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9F,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,GAAI,GAA2B,CAAC,MAAM,CAAC;QACjD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,8DAA8D;AAC9D,SAAS,eAAe,CAAC,GAAsB;IAC3C,OAAO,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAChC,GAAY,EACZ,MAAyB,OAAO,CAAC,GAAG;IAEpC,0EAA0E;IAC1E,sDAAsD;IACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnC,OAAO;YACH,IAAI,EAAE,QAAQ,MAAM,EAAE;YACtB,OAAO,EAAE,4CAA4C,MAAM,IAAI;YAC/D,GAAG,EAAE,gHAAgH;SACxH,CAAC;IACN,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO;YACH,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,4CAA4C;YACrD,GAAG,EAAE,uHAAuH;SAC/H,CAAC;IACN,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACnC,OAAO;YACH,IAAI,EAAE,QAAQ,MAAM,EAAE;YACtB,OAAO,EAAE,0CAA0C,MAAM,IAAI;YAC7D,GAAG,EAAE,uHAAuH;SAC/H,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,CAAC,GAAwB,EAAiB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAE/F,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;YACH,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,6HAA6H;YACtI,GAAG,EAAE,MAAM;SACd,CAAC;IACN,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrC,OAAO;YACH,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,yDAAyD;YAClE,GAAG,EAAE,qGAAqG;SAC7G,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,KAAK,IAAI;YACjB,CAAC,CAAC;gBACI,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,yBAAyB,KAAK,2BAA2B;gBAClE,GAAG,EAAE,sBAAsB,KAAK,qFAAqF;aACxH;YACH,CAAC,CAAC;gBACI,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,yCAAyC;gBAClD,GAAG,EAAE,uFAAuF;aAC/F,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,sEAAsE;QACtE,yEAAyE;QACzE,mEAAmE;QACnE,uEAAuE;QACvE,MAAM,MAAM,GACR,yOAAyO,CAAC;QAC9O,OAAO,KAAK,KAAK,IAAI;YACjB,CAAC,CAAC;gBACI,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,qCAAqC,KAAK,cAAc;gBACjE,GAAG,EAAE,uBAAuB,KAAK,8EAA8E,MAAM,EAAE;aAC1H;YACH,CAAC,CAAC;gBACI,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,yIAAyI,MAAM,EAAE;aACzJ,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,sCAAsC;YAC/C,GAAG,EAAE,qGAAqG;SAC7G,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard-handshake.d.ts","sourceRoot":"","sources":["../src/setup-wizard-handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACR,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAgCjC,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,KAAK,EACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"setup-wizard-handshake.d.ts","sourceRoot":"","sources":["../src/setup-wizard-handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACR,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,yBAAyB,CAAC;AAgCjC,wBAAsB,kBAAkB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,KAAK,EACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAuB5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACtC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,KAAK,EACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,mBAAmB,CAAC,CA4B9B;AAED,wBAAsB,gBAAgB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,OAAO,KAAK,EACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,0GAA0G;AAC1G,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAsB,gBAAgB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,eAAe,CAAC,CAgB1B"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @license MIT
|
|
8
8
|
*/
|
|
9
9
|
import { RestClient } from './client.js';
|
|
10
|
-
import { isCaTrustError } from './diagnostics/ca-trust.js';
|
|
10
|
+
import { isCaTrustError, isTimeoutError } from './diagnostics/ca-trust.js';
|
|
11
11
|
import { diagnoseNetworkError } from './diagnostics/diagnose-network-error.js';
|
|
12
12
|
// Placeholder Bearer used only for the unauthenticated /health probe;
|
|
13
13
|
// constructed dynamically so the secret-grep-gate doesn't flag the
|
|
@@ -51,8 +51,16 @@ export async function defaultProbeHealth(wpUrl, fetchImpl, extraHeaders) {
|
|
|
51
51
|
}
|
|
52
52
|
catch (e) {
|
|
53
53
|
// Classify the raw error BEFORE stringifying so the wizard can offer
|
|
54
|
-
// the corporate-CA prompt (G-D #6) on a TLS chain-of-trust failure
|
|
55
|
-
|
|
54
|
+
// the corporate-CA prompt (G-D #6) on a TLS chain-of-trust failure, OR
|
|
55
|
+
// auto-attempt --use-system-ca on an opaque timeout (a TLS-inspecting
|
|
56
|
+
// proxy whose CA chain can't be built often hangs into a 30s timeout
|
|
57
|
+
// rather than a clean cert code).
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
error: describeProbeError(e),
|
|
61
|
+
...(isCaTrustError(e) ? { caTrust: true } : {}),
|
|
62
|
+
...(isTimeoutError(e) ? { timeout: true } : {}),
|
|
63
|
+
};
|
|
56
64
|
}
|
|
57
65
|
}
|
|
58
66
|
/**
|
|
@@ -106,7 +114,12 @@ export async function defaultProbeAuth(wpUrl, bearer, fetchImpl, extraHeaders) {
|
|
|
106
114
|
return { ok: true };
|
|
107
115
|
}
|
|
108
116
|
catch (e) {
|
|
109
|
-
return {
|
|
117
|
+
return {
|
|
118
|
+
ok: false,
|
|
119
|
+
error: describeProbeError(e),
|
|
120
|
+
...(isCaTrustError(e) ? { caTrust: true } : {}),
|
|
121
|
+
...(isTimeoutError(e) ? { timeout: true } : {}),
|
|
122
|
+
};
|
|
110
123
|
}
|
|
111
124
|
}
|
|
112
125
|
/** Extract `major.minor` from a semver-like string (`0.1.0-alpha.1` → `0.1`); `''` on malformed input. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard-handshake.js","sourceRoot":"","sources":["../src/setup-wizard-handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-wizard-handshake.js","sourceRoot":"","sources":["../src/setup-wizard-handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,12 +115,25 @@ export interface HealthProbeResult {
|
|
|
115
115
|
* {@link isCaTrustError}; absent/false means "not a CA problem".
|
|
116
116
|
*/
|
|
117
117
|
readonly caTrust?: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* True when the failure was a connection/handshake TIMEOUT (e.g.
|
|
120
|
+
* `UND_ERR_CONNECT_TIMEOUT` / `ETIMEDOUT`). A TLS-inspecting corporate
|
|
121
|
+
* proxy whose root CA can't be built often manifests as an opaque 30s
|
|
122
|
+
* timeout rather than a clean CA-trust code, so the wizard attempts the
|
|
123
|
+
* OS-trust-store (`--use-system-ca`) recovery on a timeout too (on Node ≥
|
|
124
|
+
* 22.15). Set by the probe via {@link isTimeoutError}; absent/false means
|
|
125
|
+
* "not a timeout". May coincide with — but is independent of —
|
|
126
|
+
* {@link caTrust}.
|
|
127
|
+
*/
|
|
128
|
+
readonly timeout?: boolean;
|
|
118
129
|
}
|
|
119
130
|
export interface AuthProbeResult {
|
|
120
131
|
readonly ok: boolean;
|
|
121
132
|
readonly error?: string;
|
|
122
133
|
/** See {@link HealthProbeResult.caTrust}. */
|
|
123
134
|
readonly caTrust?: boolean;
|
|
135
|
+
/** See {@link HealthProbeResult.timeout}. */
|
|
136
|
+
readonly timeout?: boolean;
|
|
124
137
|
}
|
|
125
138
|
/**
|
|
126
139
|
* The user's answer to the wizard's corporate-CA prompt (G-D #6).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard-types.d.ts","sourceRoot":"","sources":["../src/setup-wizard-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup-wizard-types.d.ts","sourceRoot":"","sources":["../src/setup-wizard-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,OAAO,KAAK,EACR,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,WAAW,EACd,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7E,YAAY,EACR,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,WAAW,GACd,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,OAAO,KAAK,EACR,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,WAAW,EACd,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7E,YAAY,EACR,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,WAAW,GACd,CAAC;AAqCF;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAC3B,IAAI,GAAE,UAAgC,GACvC,OAAO,CAAC,MAAM,CAAC,CAsYjB"}
|
package/dist/setup-wizard.js
CHANGED
|
@@ -40,6 +40,19 @@ const SERVER_KEY = 'yt-builder-mcp';
|
|
|
40
40
|
*/
|
|
41
41
|
const SYSTEM_CA_DEFERRED_MESSAGE = '✅ Configured to use the OS trust store (--use-system-ca) — this takes effect when ' +
|
|
42
42
|
"your AI client next launches the server. The current setup process can't validate it in-process.";
|
|
43
|
+
/**
|
|
44
|
+
* Honest outcome when the health probe failed with an opaque TIMEOUT and we
|
|
45
|
+
* auto-attempted the OS-trust-store recovery (a TLS-inspecting corporate proxy
|
|
46
|
+
* whose CA chain can't be built hangs into a 30s timeout rather than a clean
|
|
47
|
+
* cert error). Like {@link SYSTEM_CA_DEFERRED_MESSAGE}, system mode can't be
|
|
48
|
+
* validated in-process — but a timeout is ALSO ambiguous (it can be a genuine
|
|
49
|
+
* proxy/VPN reachability problem), so we keep the proxy/VPN guidance visible:
|
|
50
|
+
* if the next launch still fails, the cause was reachability, not the CA.
|
|
51
|
+
*/
|
|
52
|
+
const TIMEOUT_SYSTEM_CA_DEFERRED_MESSAGE = '✅ The connection timed out — a TLS-inspecting corporate proxy can hang the handshake this way, so the ' +
|
|
53
|
+
'server was configured to use the OS trust store (--use-system-ca), validated when your AI client next ' +
|
|
54
|
+
'launches the server. If it still fails after restart, the timeout was a reachability problem instead: ' +
|
|
55
|
+
'the site may be internal (VPN needed) or require a proxy (set HTTPS_PROXY). Never disables TLS verification.';
|
|
43
56
|
/**
|
|
44
57
|
* Run the interactive setup wizard. Returns a process exit-code so the
|
|
45
58
|
* outer dispatcher can `process.exit(rc)` cleanly.
|
|
@@ -166,6 +179,67 @@ export async function runWizard(deps = DEFAULT_WIZARD_DEPS) {
|
|
|
166
179
|
}
|
|
167
180
|
}
|
|
168
181
|
}
|
|
182
|
+
// Timeout → OS-trust-store auto-bake (Glöckle corporate-CA timeout gap).
|
|
183
|
+
// A TLS-inspecting corporate proxy whose root CA chain can't be built
|
|
184
|
+
// often hangs the handshake into an OPAQUE 30s timeout rather than a
|
|
185
|
+
// clean cert code — so `health.caTrust` is false and the CA prompt above
|
|
186
|
+
// never fires, leaving the operator to set NODE_OPTIONS=--use-system-ca
|
|
187
|
+
// by hand. When the probe failed with a TIMEOUT, this Node can read the
|
|
188
|
+
// OS trust store (Node ≥ 22.15), and NO CA was chosen yet, attempt the
|
|
189
|
+
// SAME system-CA recovery the caTrust branch does: bake caMode:'system'
|
|
190
|
+
// and RE-PROBE. `--use-system-ca` only ADDS the OS store (never disables
|
|
191
|
+
// TLS), so attempting it on a timeout is safe even if the timeout turns
|
|
192
|
+
// out to be a genuine proxy/VPN issue — the re-probe just fails again and
|
|
193
|
+
// the proxy/VPN guidance is still shown. Like the caTrust branch, system
|
|
194
|
+
// mode can't validate in-process, so a still-failing re-probe defers
|
|
195
|
+
// validation to next launch (the written config is correct) rather than
|
|
196
|
+
// discarding it; the ambiguity (CA vs reachability) is surfaced honestly.
|
|
197
|
+
const caChosenSoFar = caChoice.caCertPath !== undefined || caChoice.caMode !== undefined;
|
|
198
|
+
if (!health.ok && health.timeout === true && !caChosenSoFar && supportsSystemCa(nodeVersion)) {
|
|
199
|
+
log.warn(`The connection timed out — attempting the OS trust store (--use-system-ca) in case a corporate TLS-inspection proxy is hanging the TLS handshake: ${health.error ?? 'timeout'}`);
|
|
200
|
+
caChoice = { caMode: 'system' };
|
|
201
|
+
const reSpinner = spinner();
|
|
202
|
+
reSpinner.start('Re-checking the connection with --use-system-ca applied…');
|
|
203
|
+
if (deps.applyAndReProbe !== undefined) {
|
|
204
|
+
const re = await deps.applyAndReProbe({
|
|
205
|
+
wpUrl: answers.wpUrl,
|
|
206
|
+
bearer: answers.bearer,
|
|
207
|
+
choice: { choice: 'system' },
|
|
208
|
+
});
|
|
209
|
+
health = re.health;
|
|
210
|
+
auth = re.auth;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
health = await deps.probeHealth(answers.wpUrl);
|
|
214
|
+
auth = await deps.probeAuth(answers.wpUrl, answers.bearer);
|
|
215
|
+
}
|
|
216
|
+
if (health.ok) {
|
|
217
|
+
reSpinner.stop('✅ connected — OS trust store resolved the timeout.');
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// System mode can't validate in-process (the OS store is only
|
|
221
|
+
// read when Node restarts WITH the flag). Defer validation to the
|
|
222
|
+
// next launch instead of discarding the (now correct) config —
|
|
223
|
+
// but keep the proxy/VPN guidance visible for the ambiguous case.
|
|
224
|
+
systemCaDeferred = true;
|
|
225
|
+
reSpinner.stop('OS trust store configured (--use-system-ca).');
|
|
226
|
+
logFn(TIMEOUT_SYSTEM_CA_DEFERRED_MESSAGE);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (!health.ok && health.timeout === true && !caChosenSoFar && !supportsSystemCa(nodeVersion)) {
|
|
230
|
+
// Below the system-CA floor we cannot write a flag the target Node
|
|
231
|
+
// would reject. Warn to supply a .pem instead (the only CA option on
|
|
232
|
+
// an old Node), then fall through to the generic continue decision.
|
|
233
|
+
// Route through BOTH the clack UI and the logFn sink so the warning is
|
|
234
|
+
// capturable in non-TTY / test contexts (mirrors the P0.1 below-floor
|
|
235
|
+
// branch). Intentionally does NOT name the OS-trust-store flag (the
|
|
236
|
+
// whole point is that it's unavailable on this Node).
|
|
237
|
+
const warnPem = `The connection timed out and this Node (${nodeVersion}) is below 22.15, so the OS trust store cannot be read. ` +
|
|
238
|
+
'If a corporate TLS-inspection proxy is the cause, re-run setup with `--ca <path-to-corp-root-ca.pem>` ' +
|
|
239
|
+
'(export your corporate root CA to a .pem). Otherwise the site may need a VPN/proxy. Never disable TLS verification.';
|
|
240
|
+
log.warn(warnPem);
|
|
241
|
+
logFn(warnPem);
|
|
242
|
+
}
|
|
169
243
|
// If the connection is still down after the (optional) CA step, fall
|
|
170
244
|
// through to the generic continue-anyway decision — UNLESS system-CA was
|
|
171
245
|
// configured, where validation is deferred to next launch and the (false-
|