fix(sdk): improve JSON parsing error handling with contextual messages
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
causefor 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 clientpackages/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.