diff --git a/clients/javascript/src/bidi/client.ts b/clients/javascript/src/bidi/client.ts index 4cc0df9e..5bd422f7 100644 --- a/clients/javascript/src/bidi/client.ts +++ b/clients/javascript/src/bidi/client.ts @@ -39,7 +39,22 @@ export class BiDiClient { this.pendingCommands.delete(response.id); if (response.type === 'error' && response.error) { - pending.reject(new Error(`${response.error}: ${response.message}`)); + // Handle both flat and nested error formats for compatibility + let errorCode: string; + let errorMessage: string; + + if (typeof response.error === 'object' && response.error !== null) { + // Nested format: { error: { error: "code", message: "msg" } } + const errObj = response.error as { error?: string; message?: string }; + errorCode = errObj.error || 'unknown error'; + errorMessage = errObj.message || 'An error occurred'; + } else { + // Flat format (BiDi spec): { error: "code", message: "msg" } + errorCode = String(response.error); + errorMessage = response.message || 'An error occurred'; + } + + pending.reject(new Error(`${errorCode}: ${errorMessage}`)); } else { pending.resolve(response.result); } diff --git a/clients/javascript/src/bidi/types.ts b/clients/javascript/src/bidi/types.ts index 7732beef..8b2d7d20 100644 --- a/clients/javascript/src/bidi/types.ts +++ b/clients/javascript/src/bidi/types.ts @@ -10,7 +10,7 @@ export interface BiDiResponse { id: number; type: 'success' | 'error'; result?: unknown; - error?: string; + error?: string | { error?: string; message?: string }; // Can be flat (spec) or nested (current impl) message?: string; }