fix: null-safe kRPC handshake error reporting
CI / Lint, typecheck, test, build (pull_request) Failing after 11s

The bridge was falling back to mock mode with a confusing
'Cannot read properties of null (reading code)' error. The actual
underlying error (ECONNREFUSED, timeout, protocol mismatch) was
being swallowed by our error handler that did `(e as Error).message`
on a value that was sometimes null.

Wrap the kRPC client connect() in per-step try/catch with a
formatErr() helper that handles:
- null / undefined
- strings
- Error with .code (NodeJS.ErrnoException)
- arbitrary objects (JSON.stringify fallback)

Now when the bridge can't reach kRPC you get a real error like
'kRPC RPC TCP connect to 127.0.0.1:50000 failed: code=ECONNREFUSED:
connect ECONNREFUSED 127.0.0.1:50000' instead of the cryptic
null-code message.

Also fixed the bridge's main() error handler to be null-safe.

Discovered while debugging the user's first end-to-end run on
Windows: kRPC was reachable (Test-NetConnection succeeded) but
the bridge couldn't complete the handshake. With this fix we'll
see the real failure mode on the next attempt.
This commit is contained in:
Mavis
2026-06-02 23:10:19 +00:00
parent 6cdd00fdfc
commit a69cd14817
2 changed files with 60 additions and 16 deletions
+2 -1
View File
@@ -60,7 +60,8 @@ async function main(): Promise<void> {
await adapter.connect();
log(`connected to kRPC at ${HOST}:${RPC_PORT} — running with real KSP state`);
} catch (e) {
log(`no kRPC server at ${HOST}:${RPC_PORT}: ${(e as Error).message}`);
const msg = e === null ? 'null' : e instanceof Error ? e.message : String(e);
log(`no kRPC server at ${HOST}:${RPC_PORT}: ${msg}`);
log('Falling back to MOCK mode (synthetic state).');
return runMock();
}