diff --git a/packages/krpc-client/src/client.ts b/packages/krpc-client/src/client.ts index 1d7f6fd..451eeb7 100644 --- a/packages/krpc-client/src/client.ts +++ b/packages/krpc-client/src/client.ts @@ -84,6 +84,19 @@ export class KRPCClient { } async connect(): Promise { + // Wrap EVERYTHING in a top-level try so we always get a clean + // error message (not a buried TypeError from protobufjs + // nested-enum resolution). The specific sub-step failures are + // caught inline for nicer messages, but this top-level guard + // is the safety net. + try { + return await this._connectImpl(); + } catch (e) { + throw new Error(`kRPC connect failed at unknown step: ${formatErr(e)} (stack: ${e instanceof Error ? e.stack : 'n/a'})`); + } + } + + private async _connectImpl(): Promise { // RPC handshake try { this.rpcSocket = await tcpConnect( @@ -173,7 +186,7 @@ export class KRPCClient { // eslint-disable-next-line no-console console.error('[krpc-client] stream loop error:', err); }); - } + } // end _connectImpl isConnected(): boolean { return this.rpcSocket !== null && this.streamSocket !== null && !this.closed;