From d11e060c91d89458ea0d6ffe96f60494c5acbf58 Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Mon, 19 Jan 2026 02:28:32 +1030 Subject: [PATCH] feat: flexible response parsing in HTTP client (allows text now) --- src/lib/server/utils/http/client.ts | 7 ++++--- src/lib/server/utils/http/types.ts | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/server/utils/http/client.ts b/src/lib/server/utils/http/client.ts index e18a28b..be6ea52 100644 --- a/src/lib/server/utils/http/client.ts +++ b/src/lib/server/utils/http/client.ts @@ -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 diff --git a/src/lib/server/utils/http/types.ts b/src/lib/server/utils/http/types.ts index 5dadd67..3ef4379 100644 --- a/src/lib/server/utils/http/types.ts +++ b/src/lib/server/utils/http/types.ts @@ -16,6 +16,7 @@ export interface RequestOptions { headers?: Record; // 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 {