diff --git a/packages/errors/src/errors/ResponseError.ts b/packages/errors/src/errors/ResponseError.ts index fa086561ed..0fff541218 100644 --- a/packages/errors/src/errors/ResponseError.ts +++ b/packages/errors/src/errors/ResponseError.ts @@ -77,9 +77,7 @@ export class ResponseError extends Error { const data = await parseErrorResponseBody( // TS isn't smart enough to know that this is done under the hood, - response as ConsumedResponse & { - bodyUsed: true; - }, + response, rawBody, ); diff --git a/packages/errors/src/errors/types.ts b/packages/errors/src/errors/types.ts index b0e86fd19a..b4b00f2707 100644 --- a/packages/errors/src/errors/types.ts +++ b/packages/errors/src/errors/types.ts @@ -34,6 +34,7 @@ export type ConsumedResponse = { values(): IterableIterator; [Symbol.iterator](): Iterator<[string, string]>; }; + readonly bodyUsed: boolean; readonly ok: boolean; readonly redirected: boolean; readonly status: number; diff --git a/packages/errors/src/serialization/response.ts b/packages/errors/src/serialization/response.ts index 522913be83..b956830278 100644 --- a/packages/errors/src/serialization/response.ts +++ b/packages/errors/src/serialization/response.ts @@ -54,20 +54,21 @@ export type ErrorResponseBody = { * @param response - The response of a failed request */ export async function parseErrorResponseBody( - response: ConsumedResponse & { bodyUsed: true }, + response: ConsumedResponse, rawBody: string, ): Promise; export async function parseErrorResponseBody( - response: ConsumedResponse & { text(): Promise; bodyUsed: false }, + response: ConsumedResponse & { text(): Promise }, ): Promise; export async function parseErrorResponseBody( - response: - | (ConsumedResponse & { bodyUsed: true }) - | (ConsumedResponse & { text(): Promise; bodyUsed: false }), + response: ConsumedResponse | (ConsumedResponse & { text(): Promise }), rawBody?: string, ): Promise { try { - const text = !response.bodyUsed ? await response.text() : rawBody; + const text = + !response.bodyUsed && 'text' in response + ? await response.text() + : rawBody; if (text) { if ( response.headers.get('content-type')?.startsWith('application/json')