request.js
9.16 KB
// All material copyright ESRI, All Rights Reserved, unless otherwise specified.
// See https://js.arcgis.com/4.6/esri/copyright.txt for details.
//>>built
define("require dojo/_base/config dojo/Deferred dojo/_base/lang dojo/_base/url dojo/request dojo/io-query ./config ./core/Error ./core/global ./core/sniff ./core/lang ./core/urlUtils ./core/deferredUtils ./core/promiseUtils ./core/requireUtils dojo/has!host-browser?./core/request/script dojo/has!host-webworker?./core/workers/request".split(" "),function(R,S,w,q,J,D,E,T,F,U,k,y,g,V,n,W,X,K){function Y(a){var c=E.objectToQuery(a.content);c&&(a.url+=(-1===a.url.indexOf("?")?"?":"\x26")+c);if(2E3<a.url.length){if(!g.isDataProtocol(a.url))return n.reject(q.mixin(Error(),
{message:"When using responseType 'image', URL length cannot exceed 2000 characters."}));if(3E6<a.url.length)return n.reject(q.mixin(Error(),{message:"When using responseType 'image', data URL length cannot exceed 3000000 characters."}))}var b=new Image;a.allowImageDataAccess&&(b.crossOrigin=a.withCredentials?"use-credentials":"anonymous");var f=!1,d=new w(function(a){f=!0;b.onload=b.onerror=b.onabort=null;b.src=""}),c=function(a){b.onload=b.onerror=b.onabort=null;f||d.reject(Error("Unable to load the resource"))};
b.onload=function(){b.onload=b.onerror=b.onabort=null;f||d.resolve(this)};b.onerror=c;b.onabort=c;b.alt="";b.src=a.url;return d.promise}function G(a){a=new J(a);return(a.host+(a.port?":"+a.port:"")).toLowerCase()}function Z(){return H?H:H=W.when(R,"./identity/IdentityManager").then(function(a){l=a})}function aa(a,c){var b=!!a.useProxy,f=a.method||"auto",d=y.isDefined(a.crossOrigin)?a.crossOrigin:m.useCors;a=q.mixin({},a);a._ssl&&(a.url=a.url.replace(/^http:/i,"https:"));var e=a.content,p=a.url;a._token&&
(a.content=a.content||{},a.content.token=a._token);var C=0,r;p&&(r=E.objectToQuery(e),C=r.length+p.length+1,k("esri-url-encodes-apostrophe")&&(C=r.replace(/'/g,"%27").length+p.length+1));a.timeout=y.isDefined(a.timeout)?a.timeout:m.timeout;a.handleAs=a.handleAs||"json";try{var z,u,I=d&&g.canUseXhr(a.urlObj)&&!/https?:\/\/[^\/]+\/[^\/]+\/admin\/?(\/.*)?$/i.test(a.url),L=g.hasSameOrigin(a.urlObj,g.appUrl)||I,h="post"===f||!!a.body||C>m.maxUrlLength,M=!L&&-1!==a.handleAs.indexOf("json")&&a.callbackParamName&&
!a.body,x=!!g.getProxyRule(a.url)||m.forceProxy||b||("image"!==a.handleAs||a.allowImageDataAccess)&&(!M||h)&&!L;x&&(g.isBlobProtocol(a.url)||g.isDataProtocol(a.url))&&(x=!1);if((k("host-browser")||k("host-webworker"))&&x)if(z=g.getProxyUrl(p,d),u=z.path,z._xo&&(I=!0),!h&&u.length+1+C>m.maxUrlLength&&(h=!0),a.url=u+"?"+p,h)a.content=q.mixin(z.query||{},e);else{var N=E.objectToQuery(q.mixin(z.query||{},e));N&&(a.url+=(-1===p.indexOf("?")?"?":"\x26")+N);a.content=null}if(M&&!h&&!x&&k("host-browser"))return a=
A?A(a):a,a.jsonp=a.callbackParamName,a.query=a.content,X.get(a.url,a);var B=a.headers;!k("host-browser")&&!k("host-webworker")||B&&B.hasOwnProperty("X-Requested-With")||(B=a.headers=B||{},B["X-Requested-With"]=null);if(k("host-browser")&&c){var n=a.content&&a.content.token;n&&(c.set?c.set("token",n):c.append("token",n));a.contentType=!1}if(I&&!a.hasOwnProperty("withCredentials")&&"with-credentials"===m.useCors){var b=x?u:p,t=g.getCorsConfig(b);if(t&&t.hasOwnProperty("withCredentials"))t.withCredentials&&
(a.withCredentials=!0);else if(l){var v=l.findServerInfo(b);v&&v.webTierAuth&&(a.withCredentials=!0)}}a=A?A(a):a;if("image"===a.handleAs)return Y(a);if(h)return a.body?(a.data=c||a.body,a.query=a.content):a.data=a.content,delete a.body,delete a.content,!x&&k("safari")&&(a.url+=(-1===a.url.indexOf("?")?"?":"\x26")+"_ts\x3d"+(new Date).getTime()+ba++),D.post(a.url,a);a.query=a.content;delete a.content;return D.get(a.url,a)}catch(ca){return a=new w,a.reject(ca),a.promise}}function da(a){var c=m.corsStatus;
try{var b=G(a.url);if(m.corsDetection&&m.useCors&&k("esri-cors")&&a.url&&-1!==a.url.toLowerCase().indexOf("/rest/services")&&!g.hasSameOrigin(a.urlObj,g.appUrl)&&!g.canUseXhr(a.urlObj)){if(c[b])return c[b];var f=new w;c[b]=f.promise;var d=a.url.substring(0,a.url.toLowerCase().indexOf("/rest/")+6)+"info";D.get(d,{query:{f:"json"},handleAs:"json",headers:{"X-Requested-With":null},timeout:1E3*m.corsDetectionTimeout}).then(function(c){c?(g.canUseXhr(a.url)||m.corsEnabledServers.push(b),f.resolve()):f.reject()},
function(a){f.reject()});return f.promise}}catch(e){console.log("esri._detectCors: an unknown error occurred while detecting CORS support")}return ea}function t(a,c,b,f){function d(a){a._pendingDfd=aa(b,r);var c=!!a._pendingDfd.response;(a._pendingDfd.response||a._pendingDfd).then(function(a){if(!c||!a.data)return a;var b=a.getHeader("Content-Type");if(b&&(b=b.toLowerCase(),-1===b.indexOf("text/plain")&&-1===b.indexOf("application/json")))return a;b=a.data;if(b instanceof ArrayBuffer&&750>=b.byteLength)b=
new Blob([b]);else if(!(b instanceof Blob&&750>=b.size))return a;var h=new w,d=new FileReader;d.readAsText(b);d.onloadend=function(){if(!d.error)try{var b=JSON.parse(d.result);b.error&&(Object.isExtensible(a)||(a=q.mixin({},a)),a._jsonData=b)}catch(ga){}h.resolve(a)};return h.promise}).then(function(b){var d=c?b.data:b,h=c?b.getHeader.bind(b):O;if(d&&(b=c&&b._jsonData||d,b.error||"error"===b.status))throw d=q.mixin(Error(),b.error||b),d.getHeader=h,d;a.resolve({data:d,url:f.url,requestOptions:f.requestOptions,
getHeader:h});a._pendingDfd=null}).otherwise(function(c){var d,h,e;c&&(d=c.code,h=c.subcode,e=(e=c.messageCode)&&e.toUpperCase());if(c&&403==d&&(4==h||c.message&&-1<c.message.toLowerCase().indexOf("ssl")&&-1===c.message.toLowerCase().indexOf("permission"))){if(!b._ssl){b._ssl=b._sslFromServer=!0;t(a,!0,b,f);return}}else if(c&&415==c.status){if(d=b.url,h=m.corsStatus,e=g.getCorsConfig(d,!0),-1<e&&m.corsEnabledServers.splice(e,1),e=new w,e.reject({log:!!S.isDebug}),h[G(d)]=e.promise,!b._err415){b._err415=
1;t(a,!0,b,f);return}}else if(p&&"no-prompt"!==b.authMode&&l._errorCodes&&-1!==l._errorCodes.indexOf(d)&&!l._isPublic(b.url)&&(403!=d||P&&-1===P.indexOf(e)&&(!y.isDefined(h)||2==h&&b._token))){fa(a,b,f,v("request:server",c,f));return}a.reject(v("request:server",c,f));a._pendingDfd=null})}var e=b.body,p=b.useIdentity,k,r=null,n=e instanceof FormData;if(n||e&&e.elements)r=n?e:new FormData(e);var u=!!(-1!==b.url.toLowerCase().indexOf("token\x3d")||b.content&&b.content.token||r&&r.get&&r.get("token")||
e&&e.elements&&e.elements.token);c||(!p||u||b._token||l._isPublic(b.url)||(c=function(a){a&&(b._token=a.token,b._ssl=a.ssl)},"immediate"===b.authMode?k=l.getCredential(b.url).then(c):"no-prompt"===b.authMode?k=l.checkSignInStatus(b.url).then(c).otherwise(function(){}):c(l.findCredential(b.url))),a.then(function(a){if((/\/sharing\/rest\/accounts\/self/i.test(b.url)||/\/sharing\/rest\/portals\/self/i.test(b.url))&&!u&&!b._token&&a.user&&a.user.username){var c=m.corsEnabledServers,d=g.getCorsConfig(b.url,
!0),e={host:G(b.url),withCredentials:!0};if(-1===d)c.push(e);else{var f=c[d];"object"===typeof f?f.withCredentials=!0:c.splice(d,1,e)}}if(c=b._credential)if(d=(d=l.findServerInfo(c.server))&&d.owningSystemUrl)d=d.replace(/\/?$/,"/sharing"),(c=l.findCredential(d,c.userId))&&-1===l._getIdenticalSvcIdx(d,c)&&c.resources.splice(0,0,d);return a}).always(function(a){delete b._credential;if(a){var c=!!b._ssl;a instanceof F?a.details.ssl=c:a.ssl=c}}));k?k.then(function(){d(a)}).otherwise(function(b){a.reject(b)}):
d(a);return a.promise}function fa(a,c,b,f){a._pendingDfd=l.getCredential(c.url,{error:f,token:c._token});a._pendingDfd.then(function(d){c._token=d.token;c._credential=d;c._ssl=c._sslFromServer||d.ssl;t(a,!0,c,b)}).otherwise(function(b){a.reject(b);a._pendingDfd=null})}function v(a,c,b){var f="Error",d={url:b.url,requestOptions:b.requestOptions,getHeader:O};if(c instanceof F)return c.details?(c.details=y.clone(c.details),c.details.url=b.url,c.details.requestOptions=b.requestOptions):c.details=d,c;
if(c){var e=c.response;b=e&&e.getHeader;var e=e&&e.status,g=c.message;b=c.getHeader||b;g&&(f=g);b&&(d.getHeader=b);d.httpStatus=(y.isDefined(c.httpCode)?c.httpCode:c.code)||e;d.subCode=c.subcode;d.messageCode=c.messageCode;d.messages="string"===typeof c.details?[c.details]:c.details}a=new F(a,f,d);c&&"cancel"===c.dojoType&&(a.dojoType="cancel");return a}function Q(a,c){if(K&&U.invokeStaticMessage)return K.execute(a,c);var b=q.mixin({},c),f={url:a,requestOptions:q.mixin({},c)};b.content=b.query;delete b.query;
b.preventCache=!!b.cacheBust;delete b.cacheBust;b.handleAs=b.responseType;delete b.responseType;"array-buffer"===b.handleAs&&(b.handleAs="arraybuffer");if("image"===b.handleAs){if(k("host-webworker"))return n.reject(v("request:invalid-parameters",Error("responseType 'image' is not supported in Web Workers or Node environment"),f));b.preventCache&&(b.content=b.content||{},b.content["request.preventCache"]=Date.now());b.method="auto"}else if(g.isDataProtocol(a))return n.reject(v("request:invalid-parameters",
Error("Data URLs are not supported for responseType \x3d "+b.handleAs),f));var d=m.useIdentity;"anonymous"===b.authMode&&(d=!1);b.useIdentity=d;b.url=g.normalize(a);b.urlObj=new J(b.url);var e=V.makeDeferredCancellingPending();da(b).always(function(){if(d&&!l)return Z()}).always(function(){t(e,!1,b,f)});return e.promise}var A,m=T.request,P=["COM_0056","COM_0057"],ba=0,O=function(){return null},ea=(new w).resolve(),l,H;Q.setRequestPreCallback=function(a){A=a};return Q});