/* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
import{a as d}from"./TJDAE43J.js";import{a as u,b as t,c as h}from"./6AFP7DRB.js";import"./5O53T3SW.js";import{a as w}from"./AJZDBHB6.js";import"./EXBEKVP5.js";var f=e=>new Promise(o=>setTimeout(o,e));async function G(e){m(e);let o=P(e),{pollInterval:r,updateCache:n,progressCallback:s}=e,a;return n&&(a="updateCache"),E(o,r,a,s)}function m(e){let{layers:o=[]}=e;if(o.length===0)throw new d("fetchHubApiDownloadFileUrl","No layers provided for download");if(o.length>1)throw new d("fetchHubApiDownloadFileUrl","Multiple layer downloads are not yet supported")}function P(e){let{entity:o,format:r,context:n,layers:s,geometry:a,where:c}=e,i=new URLSearchParams({redirect:"false",layers:s[0].toString()});if(a){let l=a.toJSON();l.type=a.type,i.append("geometry",JSON.stringify(l))}[u.GEOJSON,u.KML].includes(r)&&i.append("spatialRefId","4326"),c&&i.append("where",c);let p=w(n,"hubRequestOptions.authentication.token");return p&&i.append("token",p),`${n.hubUrl}/api/download/v1/items/${o.id}/${r}?${i.toString()}`}async function E(e,o,r,n){let s=e;r&&(s=`${e}&${r}=true`);let a=await fetch(s);if(!a.ok){let g=await a.json();throw new h({rawMessage:g.message})}let{status:c,progressInPercent:i,resultUrl:p,cacheStatus:l}=await a.json(),S=C(c);if(S===t.FAILED)throw new d("fetchHubApiDownloadFileUrl","Download operation failed with a 200");return p?{type:"url",href:p,cacheStatus:l}:(n&&n(S,i),await f(o),E(e,o,"trackCacheUpdate",n))}function C(e){let o={Pending:t.PENDING,InProgress:t.PROCESSING,ExportingData:t.PROCESSING,ExportAttachments:t.PROCESSING,Completed:t.COMPLETED,CompletedWithErrors:t.FAILED,Failed:t.FAILED,ProvisioningReplica:t.PROCESSING,ImportChanges:t.PROCESSING,ExportChanges:t.PROCESSING,ExportingSnapshot:t.PROCESSING,ImportAttachments:t.PROCESSING,UnRegisteringReplica:t.PROCESSING},r={Pending:t.PENDING,InProgress:t.PROCESSING,PagingData:t.PROCESSING,ConvertingData:t.CONVERTING,Failed:t.FAILED,Completed:t.COMPLETED};return o[e]||r[e]}export{G as fetchHubApiDownloadFile};
