55 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "use strict"; | ||
|  | // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | exports.defaultParseResponse = defaultParseResponse; | ||
|  | exports.addRequestID = addRequestID; | ||
|  | const streaming_1 = require("../core/streaming.js"); | ||
|  | const log_1 = require("./utils/log.js"); | ||
|  | async function defaultParseResponse(client, props) { | ||
|  |     const { response, requestLogID, retryOfRequestLogID, startTime } = props; | ||
|  |     const body = await (async () => { | ||
|  |         if (props.options.stream) { | ||
|  |             (0, log_1.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 streaming_1.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; | ||
|  |     })(); | ||
|  |     (0, log_1.loggerFor)(client).debug(`[${requestLogID}] response parsed`, (0, log_1.formatRequestDetails)({ | ||
|  |         retryOfRequestLogID, | ||
|  |         url: response.url, | ||
|  |         status: response.status, | ||
|  |         body, | ||
|  |         durationMs: Date.now() - startTime, | ||
|  |     })); | ||
|  |     return body; | ||
|  | } | ||
|  | 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.js.map
 |