11import { Promise } from 'es6-promise'
22import 'isomorphic-fetch' ;
33
4- import { Options , URLComponents , GraphError , oDataQueryNames , GraphRequestCallback , PACKAGE_VERSION } from "./common"
4+ import { Options , URLComponents , GraphError , oDataQueryNames , GraphRequestCallback , PACKAGE_VERSION , DefaultRequestHeaders } from "./common"
55import { ResponseHandler } from "./ResponseHandler"
66import { RequestMethod } from './RequestMethod' ;
77import { GraphHelper } from './GraphHelper' ;
@@ -269,8 +269,6 @@ export class GraphRequest {
269269 ) ;
270270 }
271271
272-
273- // Given the built SuperAgentRequest, get an auth token from the authProvider, make the request and return a promise
274272 private routeResponseToPromise ( request : Request ) {
275273 return new Promise ( ( resolve , reject ) => {
276274 this . routeResponseToCallback ( request , ( err , body ) => {
@@ -283,19 +281,26 @@ export class GraphRequest {
283281 } ) ;
284282 }
285283
286- // Given the built SuperAgentRequest, get an auth token from the authProvider, make the request and invoke the callback
284+ // Given the Request object, make the request and invoke callback
285+ private handleFetch ( request : Request | string , callback : GraphRequestCallback , options ?: any ) {
286+ ( ( request . constructor . name === "Request" ) ? fetch ( request ) : fetch ( request , options ) ) . then ( ( response ) => {
287+ this . convertResponseType ( response ) . then ( ( responseValue ) => {
288+ ResponseHandler . init ( response , undefined , responseValue , callback ) ;
289+ } ) . catch ( ( error ) => {
290+ ResponseHandler . init ( response , error , undefined , callback )
291+ } ) ;
292+ } ) . catch ( ( error ) => {
293+ ResponseHandler . init ( undefined , error , undefined , callback )
294+ } ) ;
295+ }
296+
297+ // Given the Request object, get an auth token from the authProvider, make the fetch call
287298 private routeResponseToCallback ( request : Request , callback : GraphRequestCallback ) {
288- this . config . authProvider ( ( err , accessToken ) => {
299+ let self = this ;
300+ self . config . authProvider ( ( err , accessToken ) => {
289301 if ( err == null && accessToken != null ) {
290- fetch ( this . configureRequest ( request , accessToken ) ) . then ( ( response ) => {
291- this . convertResponseType ( response ) . then ( ( responseValue ) => {
292- ResponseHandler . init ( response , undefined , responseValue , callback ) ;
293- } ) . catch ( ( error ) => {
294- ResponseHandler . init ( response , error , undefined , callback )
295- } ) ;
296- } ) . catch ( ( error ) => {
297- ResponseHandler . init ( undefined , error , undefined , callback )
298- } ) ;
302+ request = self . configureRequest ( request , accessToken ) ;
303+ self . handleFetch ( request , callback ) ;
299304 } else {
300305 callback ( err , null , null ) ;
301306 }
@@ -316,48 +321,55 @@ export class GraphRequest {
316321 }
317322
318323 getStream ( callback : GraphRequestCallback ) {
319- this . config . authProvider ( ( err , accessToken ) => {
324+ let self = this ;
325+ self . config . authProvider ( ( err , accessToken ) => {
320326 if ( err === null && accessToken !== null ) {
321- let url = this . buildFullUrl ( ) ;
322- callback ( null , this . configureRequest (
323- new Request ( url , { method : RequestMethod . GET , headers : new Headers ( ) } ) ,
324- accessToken ) ) ;
327+ let url = self . buildFullUrl ( ) ;
328+ let options = {
329+ method : RequestMethod . GET ,
330+ headers : self . getDefaultRequestHeaders ( accessToken )
331+ } ;
332+ self . responseType ( "stream" ) ;
333+ Object . keys ( self . _headers ) . forEach ( ( key ) => options . headers [ key ] = self . _headers [ key ] as string ) ;
334+ self . handleFetch ( url , callback , options ) ;
325335 } else {
326336 callback ( err , null ) ;
327337 }
328338 } ) ;
329339 }
330340
331- putStream ( stream : any , callback : Function ) {
332- this . config . authProvider ( ( err , accessToken ) => {
341+ putStream ( stream : any , callback : GraphRequestCallback ) {
342+ let self = this ;
343+ self . config . authProvider ( ( err , accessToken ) => {
333344 if ( err === null && accessToken !== null ) {
334- let url = this . buildFullUrl ( ) ;
335- let req : Request = this . configureRequest (
336- new Request (
337- url ,
338- {
339- method : RequestMethod . PUT ,
340- headers : new Headers ( { 'Content-Type' : 'application/octet-stream' } )
341- } ) ,
342- accessToken
343- ) ;
344- stream
345- . pipe ( req )
346- . on ( 'error' , function ( err ) {
347- callback ( err , null )
348- } )
349- . on ( 'end' , function ( ) {
350- callback ( null )
351- } ) ;
345+ let url = self . buildFullUrl ( ) ;
346+ let options = {
347+ method : RequestMethod . PUT ,
348+ headers : {
349+ 'Content-Type' : 'application/octet-stream' ,
350+ } ,
351+ body : stream
352+ }
353+ let defaultHeaders = self . getDefaultRequestHeaders ( accessToken ) ;
354+ Object . keys ( defaultHeaders ) . forEach ( ( key ) => options . headers [ key ] = defaultHeaders [ key ] as string ) ;
355+ Object . keys ( self . _headers ) . forEach ( ( key ) => options . headers [ key ] = self . _headers [ key ] as string ) ;
356+ self . handleFetch ( url , callback , options ) ;
352357 }
353358 } ) ;
354359 }
355360
356- private configureRequest ( request : Request , accessToken : string ) : Request {
357- request . headers . append ( 'Authorization' , 'Bearer ' + accessToken ) ;
358- request . headers . append ( 'SdkVersion' , "graph-js-" + PACKAGE_VERSION ) ;
361+ private getDefaultRequestHeaders ( accessToken : string ) : DefaultRequestHeaders {
362+ return {
363+ Authorization : `Bearer ${ accessToken } ` ,
364+ SdkVersion : `graph-js-${ PACKAGE_VERSION } `
365+ }
366+ }
359367
360- Object . keys ( this . _headers ) . forEach ( ( key ) => request . headers . set ( key , this . _headers [ key ] as string ) ) ;
368+ private configureRequest ( request : Request , accessToken : string ) : Request {
369+ let self = this ,
370+ defaultHeaders = self . getDefaultRequestHeaders ( accessToken ) ;
371+ Object . keys ( defaultHeaders ) . forEach ( ( key ) => request . headers . set ( key , defaultHeaders [ key ] as string ) ) ;
372+ Object . keys ( self . _headers ) . forEach ( ( key ) => request . headers . set ( key , self . _headers [ key ] as string ) ) ;
361373 return request ;
362374 }
363375
@@ -424,6 +436,9 @@ export class GraphRequest {
424436 case "text" :
425437 responseValue = response . text ( ) ;
426438 break ;
439+ case "stream" :
440+ responseValue = Promise . resolve ( response . body ) ;
441+ break ;
427442 default :
428443 responseValue = response . json ( ) ;
429444 break ;
0 commit comments