88 isBrowser ,
99 readByteStream ,
1010 calculateMD5Hash ,
11+ multipartStreamToBuffer ,
12+ multipartBufferToStream ,
1113} from '../internal/utils' ;
1214import { sdkVersion } from './version' ;
1315import { NetworkClient } from './networkClient.generated' ;
@@ -26,7 +28,15 @@ import { NetworkSession } from './network.generated';
2628export const userAgentHeader = `Box JavaScript generated SDK v${ sdkVersion } (${
2729 isBrowser ( ) ? navigator . userAgent : `Node ${ process . version } `
2830} )`;
31+
2932export const xBoxUaHeader = constructBoxUAHeader ( ) ;
33+ export const shouldIncludeBoxUaHeader = ( options : FetchOptions ) => {
34+ return ! (
35+ isBrowser ( ) &&
36+ ( options . responseFormat === 'binary' ||
37+ options . responseFormat === 'no_content' )
38+ ) ;
39+ } ;
3040
3141export interface MultipartItem {
3242 readonly partName : string ;
@@ -118,15 +128,18 @@ async function createRequestInit(options: FetchOptions): Promise<RequestInit> {
118128 return {
119129 method,
120130 headers : {
121- ...contentHeaders ,
131+ // Only set content type if it is not a GET request
132+ ...( method != 'GET' && contentHeaders ) ,
122133 ...headers ,
123134 ...( options . auth && {
124135 Authorization : await options . auth . retrieveAuthorizationHeader (
125136 options . networkSession ,
126137 ) ,
127138 } ) ,
128- 'User-Agent' : userAgentHeader ,
129- 'X-Box-UA' : xBoxUaHeader ,
139+ ...( shouldIncludeBoxUaHeader ( options ) && {
140+ 'User-Agent' : userAgentHeader ,
141+ 'X-Box-UA' : xBoxUaHeader ,
142+ } ) ,
130143 // Additional headers will override the default headers
131144 ...options . networkSession ?. additionalHeaders ,
132145 } ,
@@ -157,11 +170,18 @@ export class BoxNetworkClient implements NetworkClient {
157170 const fileStreamBuffer = fetchOptions . fileStream
158171 ? await readByteStream ( fetchOptions . fileStream )
159172 : void 0 ;
173+ const multipartBuffer = fetchOptions . multipartData
174+ ? await multipartStreamToBuffer ( fetchOptions . multipartData )
175+ : void 0 ;
176+
160177 const requestInit = await createRequestInit ( {
161178 ...fetchOptions ,
162179 fileStream : fileStreamBuffer
163180 ? generateByteStreamFromBuffer ( fileStreamBuffer )
164181 : void 0 ,
182+ multipartData : multipartBuffer
183+ ? multipartBufferToStream ( multipartBuffer )
184+ : void 0 ,
165185 } ) ;
166186
167187 const { params = { } } = fetchOptions ;
@@ -220,7 +240,16 @@ export class BoxNetworkClient implements NetworkClient {
220240 numRetries ,
221241 ) ;
222242 await new Promise ( ( resolve ) => setTimeout ( resolve , retryTimeout ) ) ;
223- return this . fetch ( { ...options , numRetries : numRetries + 1 } ) ;
243+ return this . fetch ( {
244+ ...options ,
245+ numRetries : numRetries + 1 ,
246+ fileStream : fileStreamBuffer
247+ ? generateByteStreamFromBuffer ( fileStreamBuffer )
248+ : void 0 ,
249+ multipartData : multipartBuffer
250+ ? multipartBufferToStream ( multipartBuffer )
251+ : void 0 ,
252+ } ) ;
224253 }
225254
226255 if (
0 commit comments