opencode icon indicating copy to clipboard operation
opencode copied to clipboard

fix(sdk): improve JSON parsing error handling with contextual messages

Open Skeptomenos opened this issue 2 days ago • 2 comments

Summary

When API responses return empty or malformed JSON (e.g., network interruption, API timeout, truncated response), the SDK now provides actionable error messages instead of cryptic SyntaxError: Unexpected end of JSON input.

Problem

The current implementation calls response.json() directly without error handling:

case "json":
  data = await response[parseAs]()  // Throws unhelpful error on malformed JSON
  break

When the API returns an incomplete response, users see:

SyntaxError: Unexpected end of JSON input
    at json (unknown)
    at <anonymous> (../sdk/js/src/v2/gen/client/client.gen.ts:167:33)

This provides no context about what went wrong or how to debug it.

Solution

Wrap response.json() in try-catch and provide enhanced error messages:

  • Include HTTP status code
  • Include request URL
  • Preserve original error as cause for debugging
  • Route errors through interceptors for custom handling

After this fix:

Error: Failed to parse JSON response: Unexpected end of JSON input. Status: 200, URL: https://api.example.com/v1/chat

Changes

  • packages/sdk/js/src/v2/gen/client/client.gen.ts - v2 client
  • packages/sdk/js/src/gen/client/client.gen.ts - v1 client

Note

These files are auto-generated by @hey-api/openapi-ts. This is a temporary fix until upstream handles JSON parsing errors gracefully. The fix will need to be reapplied after regeneration, or ideally contributed upstream to @hey-api/client-fetch.

Skeptomenos avatar Jan 10 '26 10:01 Skeptomenos