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 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.
Thanks for your contribution!
This PR doesn't have a linked issue. All PRs must reference an existing issue.
Please:
- Open an issue describing the bug/feature (if one doesn't exist)
- Add
Fixes #<number>orCloses #<number>to this PR description
See CONTRIBUTING.md for details.
The following comment was made by an LLM, it may be inaccurate:
No duplicate PRs found
You can't just manually edit auto generated code, this will be deleted next time stuff is regenerated