/** * Parse plugin error message from nested error structure * Extracts the real error message from PluginInvokeError JSON string * * @example * Input: { message: "req_id: xxx PluginInvokeError: {\"message\":\"Bad credentials\"}" } * Output: "Bad credentials" * * @param error - Error object (an Error or object with a message property) * @returns Parsed error message */ export const parsePluginErrorMessage = (error: any): string => { const rawMessage = error?.message || error?.toString() || 'Unknown error' // Try to extract nested JSON from PluginInvokeError // Use greedy match .+ to capture the complete JSON object with nested braces const pluginErrorPattern = /PluginInvokeError:\s*(\{.+\})/ const match = pluginErrorPattern.exec(rawMessage) if (match) { try { const errorData = JSON.parse(match[1]!) // Return the inner message if exists if (errorData.message) return errorData.message // Fallback to error_type if message not available if (errorData.error_type) return errorData.error_type } catch (parseError) { console.warn('Failed to parse plugin error JSON:', parseError) } } return rawMessage }