feat: flexible response parsing in HTTP client (allows text now)

This commit is contained in:
Sam Chau
2026-01-19 02:28:32 +10:30
parent 8d3e20d3c3
commit d11e060c91
2 changed files with 5 additions and 3 deletions

View File

@@ -75,16 +75,17 @@ export class BaseHttpClient {
clearTimeout(timeoutId);
// Parse response - handle empty body (common for DELETE)
// Parse response based on responseType
const text = await response.text();
const data = text ? JSON.parse(text) : null;
const responseType = options?.responseType ?? 'json';
const data = responseType === 'text' ? text : (text ? JSON.parse(text) : null);
// Check for HTTP errors
if (!response.ok) {
const error = new HttpError(
`HTTP ${response.status}: ${response.statusText}`,
response.status,
data
responseType === 'json' ? data : text
);
// Retry on specific status codes

View File

@@ -16,6 +16,7 @@ export interface RequestOptions {
headers?: Record<string, string>; // Additional headers for this request
timeout?: number; // Override timeout for this request
signal?: AbortSignal; // Abort signal for cancellation
responseType?: 'json' | 'text'; // Response parsing type (default: 'json')
}
export class HttpError extends Error {