1- /*! dynamics-web-api-callbacks v1.6.15 (c) 2020 Aleksandr Rogov */
1+ /*! dynamics-web-api-callbacks v1.7.0 (c) 2020 Aleksandr Rogov */
22( function webpackUniversalModuleDefinition ( root , factory ) {
33 if ( typeof exports === 'object' && typeof module === 'object' )
44 module . exports = factory ( ) ;
@@ -958,11 +958,12 @@ function DynamicsWebApi(config) {
958958 if ( offset <= fileBytes . length ) {
959959 _uploadFileChunk ( request , fileBytes , chunkSize , offset , successCallback , errorCallback ) ;
960960 }
961-
962- successCallback ( ) ;
961+ else {
962+ successCallback ( ) ;
963+ }
963964 }
964965
965- return _makeRequest ( "PATCH" , request , "uploadFile" , internalSuccessCallback , errorCallback ) ;
966+ _makeRequest ( "PATCH" , request , "uploadFile" , internalSuccessCallback , errorCallback ) ;
966967 } ;
967968
968969 /**
@@ -988,40 +989,39 @@ function DynamicsWebApi(config) {
988989 internalRequest . url = response . data . location ;
989990 delete internalRequest . transferMode ;
990991 delete internalRequest . fieldName ;
991- return _uploadFileChunk ( internalRequest , request . data , response . data . chunkSize , null , successCallback , errorCallback ) ;
992+ _uploadFileChunk ( internalRequest , request . data , response . data . chunkSize , null , successCallback , errorCallback ) ;
992993 }
993994
994- return _makeRequest ( "PATCH" , internalRequest , "uploadFile" , internalSuccessCallback , errorCallback ) ;
995+ _makeRequest ( "PATCH" , internalRequest , "uploadFile" , internalSuccessCallback , errorCallback ) ;
995996 } ;
996997
997- var _chunkSize = 4194304 ;
998-
999998 var _downloadFileChunk = function ( request , bytesDownloaded , fileSize , data , successCallback , errorCallback ) {
1000999 bytesDownloaded = bytesDownloaded || 0 ;
10011000 fileSize = fileSize || 0 ;
10021001 data = data || "" ;
10031002
1004- request . range = "bytes=" + bytesDownloaded + "-" + ( bytesDownloaded + _chunkSize - 1 ) ;
1003+ request . range = "bytes=" + bytesDownloaded + "-" + ( bytesDownloaded + Utility . downloadChunkSize - 1 ) ;
10051004 request . downloadSize = "full" ;
10061005
10071006 var internalSuccessCallback = function ( response ) {
10081007 request . url = response . data . location ;
10091008 data += response . data . value ;
10101009
1011- bytesDownloaded += _chunkSize ;
1010+ bytesDownloaded += Utility . downloadChunkSize ;
10121011
10131012 if ( bytesDownloaded <= response . data . fileSize ) {
10141013 _downloadFileChunk ( request , bytesDownloaded , response . data . fileSize , data , successCallback , errorCallback ) ;
10151014 }
1016-
1017- successCallback ( {
1018- fileName : response . data . fileName ,
1019- fileSize : response . data . fileSize ,
1020- data : Utility . convertToFileBuffer ( data )
1021- } ) ;
1015+ else {
1016+ successCallback ( {
1017+ fileName : response . data . fileName ,
1018+ fileSize : response . data . fileSize ,
1019+ data : Utility . convertToFileBuffer ( data )
1020+ } ) ;
1021+ }
10221022 }
10231023
1024- return _makeRequest ( "GET" , request , "downloadFile" , internalSuccessCallback , errorCallback , { parse : true } ) ;
1024+ _makeRequest ( "GET" , request , "downloadFile" , internalSuccessCallback , errorCallback , { parse : true } ) ;
10251025 } ;
10261026
10271027 /**
@@ -2466,7 +2466,7 @@ function setStandardHeaders(additionalHeaders) {
24662466 additionalHeaders [ "OData-Version" ] = "4.0" ;
24672467 additionalHeaders [ 'Content-Type' ] = additionalHeaders [ "Content-Range" ]
24682468 ? 'application/octet-stream'
2469- : 'application/json; charset=utf-8' ;
2469+ : 'application/json;charset=utf-8' ;
24702470
24712471 return additionalHeaders ;
24722472}
@@ -2722,7 +2722,7 @@ function sendRequest(method, path, config, data, additionalHeaders, responsePara
27222722
27232723 var executeRequest ;
27242724 /* webpack-strip-block:removed */
2725- executeRequest = __webpack_require__ ( 105 ) ;
2725+ executeRequest = __webpack_require__ ( 105 ) . xhrRequest ;
27262726 /* webpack-strip-block:removed */
27272727
27282728 var sendInternalRequest = function ( token ) {
@@ -2873,124 +2873,130 @@ if (!Array.isArray) {
28732873 * Sends a request to given URL with given parameters
28742874 *
28752875 */
2876- var xhrRequest = function ( options ) {
2877- var method = options . method ;
2878- var uri = options . uri ;
2879- var data = options . data ;
2880- var additionalHeaders = options . additionalHeaders ;
2881- var responseParams = options . responseParams ;
2882- var successCallback = options . successCallback ;
2883- var errorCallback = options . errorCallback ;
2884- var isAsync = options . isAsync ;
2885- var requestId = options . requestId ;
2886-
2887- var request = new XMLHttpRequest ( ) ;
2888- request . open ( method , uri , isAsync ) ;
2889-
2890- //set additional headers
2891- for ( var key in additionalHeaders ) {
2892- request . setRequestHeader ( key , additionalHeaders [ key ] ) ;
2893- }
2894-
2895- request . onreadystatechange = function ( ) {
2896- if ( request . readyState === 4 ) {
2897- switch ( request . status ) {
2898- case 200 : // Success with content returned in response body.
2899- case 201 : // Success with content returned in response body.
2900- case 204 : // Success with no content returned in response body.
2901- case 304 : { // Success with Not Modified
2902- var responseHeaders = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2903- var responseData = parseResponse ( request . responseText , responseHeaders , responseParams [ requestId ] ) ;
2904-
2905- var response = {
2906- data : responseData ,
2907- headers : responseHeaders ,
2908- status : request . status
2909- } ;
29102876
2911- delete responseParams [ requestId ] ;
2912- request = null ;
2877+ let xhrWrapper = {
2878+ //for testing
2879+ afterSendEvent : null ,
2880+ xhrRequest : function ( options ) {
2881+ var method = options . method ;
2882+ var uri = options . uri ;
2883+ var data = options . data ;
2884+ var additionalHeaders = options . additionalHeaders ;
2885+ var responseParams = options . responseParams ;
2886+ var successCallback = options . successCallback ;
2887+ var errorCallback = options . errorCallback ;
2888+ var isAsync = options . isAsync ;
2889+ var requestId = options . requestId ;
2890+
2891+
2892+ var request = new XMLHttpRequest ( ) ;
2893+ request . open ( method , uri , isAsync ) ;
2894+
2895+ //set additional headers
2896+ for ( var key in additionalHeaders ) {
2897+ request . setRequestHeader ( key , additionalHeaders [ key ] ) ;
2898+ }
29132899
2914- successCallback ( response ) ;
2900+ request . onreadystatechange = function ( ) {
2901+ if ( request . readyState === 4 ) {
2902+ switch ( request . status ) {
2903+ case 200 : // Success with content returned in response body.
2904+ case 201 : // Success with content returned in response body.
2905+ case 204 : // Success with no content returned in response body.
2906+ case 206 : //Success with partial content
2907+ case 304 : { // Success with Not Modified
2908+ var responseHeaders = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2909+ var responseData = parseResponse ( request . responseText , responseHeaders , responseParams [ requestId ] ) ;
2910+
2911+ var response = {
2912+ data : responseData ,
2913+ headers : responseHeaders ,
2914+ status : request . status
2915+ } ;
2916+
2917+ delete responseParams [ requestId ] ;
2918+ request = null ;
2919+
2920+ successCallback ( response ) ;
2921+
2922+ break ;
2923+ }
2924+ default : // All other statuses are error cases.
2925+ var error ;
2926+ try {
2927+ var headers = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2928+ var errorParsed = parseResponse ( request . responseText , headers , responseParams [ requestId ] ) ;
2929+
2930+ if ( Array . isArray ( errorParsed ) ) {
2931+ errorCallback ( errorParsed ) ;
2932+ break ;
2933+ }
29152934
2916- break ;
2917- }
2918- case 206 : { //Success with partial content
2919- //true indicates continue
2920- successCallback ( true ) ;
2921- break ;
2922- }
2923- default : // All other statuses are error cases.
2924- var error ;
2925- try {
2926- var headers = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2927- var errorParsed = parseResponse ( request . responseText , headers , responseParams [ requestId ] ) ;
2928-
2929- if ( Array . isArray ( errorParsed ) ) {
2930- errorCallback ( errorParsed ) ;
2931- break ;
2935+ error = errorParsed . error ;
2936+ } catch ( e ) {
2937+ if ( request . response . length > 0 ) {
2938+ error = { message : request . response } ;
2939+ }
2940+ else {
2941+ error = { message : "Unexpected Error" } ;
2942+ }
29322943 }
29332944
2934- error = errorParsed . error ;
2935- } catch ( e ) {
2936- if ( request . response . length > 0 ) {
2937- error = { message : request . response } ;
2938- }
2939- else {
2940- error = { message : "Unexpected Error" } ;
2945+ var errorResponse = {
2946+ status : request . status ,
2947+ statusText : request . statusText ,
2948+ headers : headers
29412949 }
2942- }
29432950
2944- var errorResponse = {
2945- status : request . status ,
2946- statusText : request . statusText ,
2947- headers : headers
2948- }
2951+ delete responseParams [ requestId ] ;
2952+ request = null ;
29492953
2950- delete responseParams [ requestId ] ;
2951- request = null ;
2954+ errorCallback ( ErrorHelper . handleHttpError ( error , errorResponse ) ) ;
29522955
2953- errorCallback ( ErrorHelper . handleHttpError ( error , errorResponse ) ) ;
2954-
2955- break ;
2956+ break ;
2957+ }
29562958 }
2959+ } ;
2960+
2961+ if ( options . timeout ) {
2962+ request . timeout = options . timeout ;
29572963 }
2958- } ;
29592964
2960- if ( options . timeout ) {
2961- request . timeout = options . timeout ;
2962- }
2965+ request . onerror = function ( ) {
2966+ var headers = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2967+ errorCallback ( ErrorHelper . handleHttpError ( {
2968+ status : request . status ,
2969+ statusText : request . statusText ,
2970+ message : request . responseText || "Network Error" ,
2971+ headers : headers
2972+ } ) ) ;
2973+ delete responseParams [ requestId ] ;
2974+ request = null ;
2975+ } ;
29632976
2964- request . onerror = function ( ) {
2965- var headers = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2966- errorCallback ( ErrorHelper . handleHttpError ( {
2967- status : request . status ,
2968- statusText : request . statusText ,
2969- message : request . responseText || "Network Error " ,
2970- headers : headers
2971- } ) ) ;
2972- delete responseParams [ requestId ] ;
2973- request = null ;
2974- } ;
2977+ request . ontimeout = function ( ) {
2978+ var headers = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2979+ errorCallback ( ErrorHelper . handleHttpError ( {
2980+ status : request . status ,
2981+ statusText : request . statusText ,
2982+ message : request . responseText || "Request Timed Out " ,
2983+ headers : headers
2984+ } ) ) ;
2985+ delete responseParams [ requestId ] ;
2986+ request = null ;
2987+ } ;
29752988
2976- request . ontimeout = function ( ) {
2977- var headers = parseResponseHeaders ( request . getAllResponseHeaders ( ) ) ;
2978- errorCallback ( ErrorHelper . handleHttpError ( {
2979- status : request . status ,
2980- statusText : request . statusText ,
2981- message : request . responseText || "Request Timed Out" ,
2982- headers : headers
2983- } ) ) ;
2984- delete responseParams [ requestId ] ;
2985- request = null ;
2986- } ;
2989+ data
2990+ ? request . send ( data )
2991+ : request . send ( ) ;
29872992
2988- data
2989- ? request . send ( data )
2990- : request . send ( ) ;
2991- } ;
2993+ //called for testing
2994+ if ( xhrWrapper . afterSendEvent )
2995+ xhrWrapper . afterSendEvent ( ) ;
2996+ }
2997+ }
29922998
2993- module . exports = xhrRequest ;
2999+ module . exports = xhrWrapper ;
29943000
29953001
29963002/***/ } ) ,
@@ -3339,13 +3345,12 @@ function getCrypto() {
33393345 return window . crypto ;
33403346}
33413347
3342- var uCrypto = getCrypto ( ) ;
3343-
33443348function isNull ( value ) {
33453349 return typeof value === "undefined" || value == null ;
33463350}
33473351
33483352function generateRandomBytes ( ) {
3353+ var uCrypto = getCrypto ( ) ;
33493354 /* webpack-strip-block:removed */
33503355 return uCrypto . getRandomValues ( new Uint8Array ( 1 ) ) ;
33513356 /* webpack-strip-block:removed */
@@ -3448,14 +3453,16 @@ function setFileChunk(request, fileBuffer, chunkSize, offset) {
34483453
34493454function convertToFileBuffer ( binaryString ) {
34503455 /* webpack-strip-block:removed */
3451- var bytes = new Uint8Array ( data . length ) ;
3452- for ( var i = 0 ; i < data . length ; i ++ ) {
3453- bytes [ i ] = data . charCodeAt ( i ) ;
3456+ var bytes = new Uint8Array ( binaryString . length ) ;
3457+ for ( var i = 0 ; i < binaryString . length ; i ++ ) {
3458+ bytes [ i ] = binaryString . charCodeAt ( i ) ;
34543459 }
34553460 return bytes ;
34563461 /* webpack-strip-block:removed */
34573462}
34583463
3464+ var downloadChunkSize = 4194304 ;
3465+
34593466var Utility = {
34603467 /**
34613468 * Builds parametes for a funciton. Returns '()' (if no parameters) or '([params])?[query]'
@@ -3505,7 +3512,9 @@ var Utility = {
35053512
35063513 setFileChunk : setFileChunk ,
35073514
3508- convertToFileBuffer : convertToFileBuffer
3515+ convertToFileBuffer : convertToFileBuffer ,
3516+
3517+ downloadChunkSize : downloadChunkSize
35093518} ;
35103519
35113520module . exports = Utility ;
0 commit comments