51 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 | |
| import { Stream } from "../core/streaming.mjs";
 | |
| import { formatRequestDetails, loggerFor } from "./utils/log.mjs";
 | |
| export async function defaultParseResponse(client, props) {
 | |
|     const { response, requestLogID, retryOfRequestLogID, startTime } = props;
 | |
|     const body = await (async () => {
 | |
|         if (props.options.stream) {
 | |
|             loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);
 | |
|             // Note: there is an invariant here that isn't represented in the type system
 | |
|             // that if you set `stream: true` the response type must also be `Stream<T>`
 | |
|             if (props.options.__streamClass) {
 | |
|                 return props.options.__streamClass.fromSSEResponse(response, props.controller, client);
 | |
|             }
 | |
|             return Stream.fromSSEResponse(response, props.controller, client);
 | |
|         }
 | |
|         // fetch refuses to read the body when the status code is 204.
 | |
|         if (response.status === 204) {
 | |
|             return null;
 | |
|         }
 | |
|         if (props.options.__binaryResponse) {
 | |
|             return response;
 | |
|         }
 | |
|         const contentType = response.headers.get('content-type');
 | |
|         const mediaType = contentType?.split(';')[0]?.trim();
 | |
|         const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');
 | |
|         if (isJSON) {
 | |
|             const json = await response.json();
 | |
|             return addRequestID(json, response);
 | |
|         }
 | |
|         const text = await response.text();
 | |
|         return text;
 | |
|     })();
 | |
|     loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({
 | |
|         retryOfRequestLogID,
 | |
|         url: response.url,
 | |
|         status: response.status,
 | |
|         body,
 | |
|         durationMs: Date.now() - startTime,
 | |
|     }));
 | |
|     return body;
 | |
| }
 | |
| export function addRequestID(value, response) {
 | |
|     if (!value || typeof value !== 'object' || Array.isArray(value)) {
 | |
|         return value;
 | |
|     }
 | |
|     return Object.defineProperty(value, '_request_id', {
 | |
|         value: response.headers.get('x-request-id'),
 | |
|         enumerable: false,
 | |
|     });
 | |
| }
 | |
| //# sourceMappingURL=parse.mjs.map
 |