@firekid/hurl 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -1
- package/dist/index.mjs +0 -1
- package/package.json +3 -3
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
"use strict";var O=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var oe=Object.prototype.hasOwnProperty;var ue=(e,r)=>{for(var t in r)O(e,t,{get:r[t],enumerable:!0})},ie=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of se(r))!oe.call(e,s)&&s!==t&&O(e,s,{get:()=>r[s],enumerable:!(n=ne(r,s))||n.enumerable});return e};var le=e=>ie(O({},"__esModule",{value:!0}),e);var me={};ue(me,{HurlError:()=>l,clearCache:()=>J,createInstance:()=>w,default:()=>Re});module.exports=le(me);var l=class extends Error{constructor(r){super(r.message),this.name="HurlError",this.type=r.type,this.status=r.status,this.statusText=r.statusText,this.data=r.data,this.headers=r.headers,this.requestId=r.requestId,this.retries=r.retries??0}};function $(e){return new l({message:`HTTP ${e.status}: ${e.statusText}`,type:"HTTP_ERROR",...e})}function v(e,r){return new l({message:e,type:"NETWORK_ERROR",requestId:r})}function F(e,r){return new l({message:`Request timed out after ${e}ms`,type:"TIMEOUT_ERROR",requestId:r})}function S(e){return new l({message:"Request was aborted",type:"ABORT_ERROR",requestId:e})}function B(e,r){return new l({message:`Failed to parse response: ${e}`,type:"PARSE_ERROR",requestId:r})}async function _(e,r){let t=e.body?.getReader(),n=parseInt(e.headers.get("content-length")??"0",10);if(!t)return e.text();let s=[],u=0;for(;;){let{done:i,value:c}=await t.read();if(i)break;s.push(c),u+=c.length,r({loaded:u,total:n,percent:n>0?Math.round(u/n*100):0})}let a=new Uint8Array(u),o=0;for(let i of s)a.set(i,o),o+=i.length;return new TextDecoder().decode(a)}function I(e){let r={};return e.forEach((t,n)=>{r[n]=t}),r}async function K(e,r,t,n){if(n==="HEAD"||e.status===204||e.headers.get("content-length")==="0")return null;let s=e.headers.get("content-type")??"";try{if(t){let a=await _(e,t);return s.includes("application/json")?JSON.parse(a):a}if(s.includes("application/json"))return await e.json();if(s.includes("text/"))return await e.text();if(s.includes("application/octet-stream")||s.includes("image/"))return await e.arrayBuffer();let u=await e.text();return u||null}catch(u){throw B(u.message,r)}}function L(e,r,t,n){let s=Date.now();return{data:e,status:r.status,statusText:r.statusText,headers:I(r.headers),requestId:t,timing:{start:n,end:s,duration:s-n},fromCache:!1}}function M(e,r,t){if(t.type==="bearer"&&(e.Authorization=`Bearer ${t.token}`),t.type==="basic"){let n=btoa(`${t.username}:${t.password}`);e.Authorization=`Basic ${n}`}t.type==="apikey"&&(t.in==="query"?r[t.key]=t.value:e[t.key]=t.value)}function j(e){return e==null?null:typeof e=="number"?{count:e,delay:300,backoff:"exponential"}:e}function N(e,r,t){return t>=r.count||e.type==="ABORT_ERROR"?!1:r.on&&e.status?r.on.includes(e.status):!!(e.type==="NETWORK_ERROR"||e.type==="TIMEOUT_ERROR"||e.status&&e.status>=500)}async function G(e,r){let t=e.delay??300,n=e.backoff==="exponential"?t*Math.pow(2,r):t*(r+1);await new Promise(s=>setTimeout(s,n))}var b=new Map;function P(e,r){return r?.key??e}function W(e){let r=b.get(e);return r?Date.now()>r.expiresAt?(b.delete(e),null):{...r.response,fromCache:!0}:null}function z(e,r,t){b.set(e,{response:r,expiresAt:Date.now()+t.ttl})}function J(){b.clear()}var k=new Map;function Q(e){return k.get(e)??null}function V(e,r){k.set(e,r),r.finally(()=>k.delete(e))}function X(e,r){console.group(`[hurl] \u2192 ${r.method??"GET"} ${e}`),r.headers&&Object.keys(r.headers).length>0&&console.log("headers:",r.headers),r.query&&console.log("query:",r.query),r.body&&console.log("body:",r.body),r.timeout&&console.log("timeout:",r.timeout),r.retry&&console.log("retry:",r.retry),console.groupEnd()}function C(e){let r=e.status>=400?"\u{1F534}":e.status>=300?"\u{1F7E1}":"\u{1F7E2}";console.group(`[hurl] ${r} ${e.status} ${e.statusText} (${e.timing.duration}ms)`),console.log("requestId:",e.requestId),e.fromCache&&console.log("served from cache"),console.log("headers:",e.headers),console.log("data:",e.data),console.groupEnd()}function Y(e){console.group("[hurl] \u{1F534} Error"),console.error(e),console.groupEnd()}function ae(){return Math.random().toString(36).slice(2,10)}function ce(e,r,t){let n;if(r.startsWith("http://")||r.startsWith("https://")){if(e){let u=new URL(e).origin,a=new URL(r).origin;if(u!==a)throw new Error(`Absolute URL "${r}" does not match baseUrl origin "${u}". Pass the full URL without baseUrl, or use a path-relative URL.`)}n=r}else{if(r.startsWith("//"))throw new Error("Protocol-relative URLs are not supported. Use an explicit https:// or http:// scheme.");n=e?`${e.replace(/\/$/,"")}/${r.replace(/^\//,"")}`:r}if(!t||Object.keys(t).length===0)return n;let s=new URLSearchParams;for(let[u,a]of Object.entries(t))s.set(u,String(a));return`${n}?${s.toString()}`}function pe(e,r){let t={...r.headers,...e.headers},n=e.body;return n&&typeof n=="object"&&!(n instanceof FormData)&&!(n instanceof Blob)&&(t["Content-Type"]=t["Content-Type"]??"application/json"),t}function fe(e){if(e!=null)return e instanceof FormData||e instanceof Blob||e instanceof ArrayBuffer||typeof e=="string"?e:JSON.stringify(e)}function de(e,r){if(r)return!0;let t=e;return!!(t?.name==="TimeoutError"||t?.name==="AbortError"&&t?.message?.includes("timeout"))}async function Z(e,r,t){let n=r.requestId??ae(),s=r.method??"GET",u=Date.now(),a=j(r.retry??t.retry),o=r.debug??t.debug??!1,i={...t.query,...r.query},c=pe(r,t),y=r.timeout??t.timeout,T=r.auth??t.auth;T&&M(c,i,T);let R=ce(t.baseUrl??"",e,Object.keys(i).length>0?i:void 0),m=r.cache??t.cache,f=!!m&&!m.bypass&&s==="GET";if(f){let d=P(R,m),h=W(d);if(h)return o&&C(h),h}let H=r.deduplicate??t.deduplicate??!1;if(H&&s==="GET"){let d=Q(R);if(d)return d}o&&X(R,{...r,method:s});let A=async d=>{let h=null,U=!1,x=new AbortController;r.signal&&r.signal.addEventListener("abort",()=>x.abort()),y&&(h=setTimeout(()=>{U=!0,x.abort()},y));try{let p=await fetch(R,{method:s,headers:c,body:fe(r.body),signal:x.signal,redirect:r.followRedirects??!0?"follow":"manual"});h&&clearTimeout(h);let g=await K(p,n,r.onDownloadProgress,s);if(!p.ok)throw $({status:p.status,statusText:p.statusText,data:g,headers:I(p.headers),requestId:n,retries:d});let q=L(g,p,n,u);return f&&m&&z(P(R,m),q,m),o&&C(q),q}catch(p){h&&clearTimeout(h);let g;if(p instanceof l?g=p:p.name==="AbortError"||p.name==="TimeoutError"?g=de(p,U)?F(y??0,n):S(n):g=v(p.message,n),g.retries=d,a&&N(g,a,d))return o&&console.log(`[hurl] retrying (${d+1}/${a.count})...`),await G(a,d),A(d+1);throw o&&Y(g),g}},D=A(0);return H&&s==="GET"&&V(R,D),D}function E(){let e=[];return{use(r){return e.push(r),()=>{let t=e.indexOf(r);t!==-1&&e.splice(t,1)}},clear(){e.length=0},getAll(){return[...e]}}}async function ee(e,r,t){let n={url:r,options:t};for(let s of e)n=await s(n.url,n.options);return n}async function re(e,r){let t=r;for(let n of e)t=await n(t);return t}async function te(e,r){let t=r;for(let n of e)t instanceof l&&(t=await n(t));return t}function w(e={}){let r={...e},t=E(),n=E(),s=E();async function u(o,i={}){let c=o,y=i,T=t.getAll(),R=n.getAll(),m=s.getAll();if(T.length>0){let f=await ee(T,o,i);c=f.url,y=f.options}try{let f=await Z(c,y,r);return R.length>0?await re(R,f):f}catch(f){if(f instanceof l&&m.length>0){let H=await te(m,f);if(!(H instanceof l))return H;throw H}throw f}}return{request:u,get(o,i){return u(o,{...i,method:"GET"})},post(o,i,c){return u(o,{...c,method:"POST",body:i})},put(o,i,c){return u(o,{...c,method:"PUT",body:i})},patch(o,i,c){return u(o,{...c,method:"PATCH",body:i})},delete(o,i){return u(o,{...i,method:"DELETE"})},head(o,i){return u(o,{...i,method:"HEAD"})},options(o,i){return u(o,{...i,method:"OPTIONS"})},all(o){return Promise.all(o)},defaults:{set(o){r={...r,...o}},get(){return{...r}},reset(){r={...e}}},interceptors:{request:{use:t.use.bind(t),clear:t.clear.bind(t)},response:{use:n.use.bind(n),clear:n.clear.bind(n)},error:{use:s.use.bind(s),clear:s.clear.bind(s)}},create(o){return w({...r,...o})},extend(o){return w({...r,...o})}}}var ge=w(),Re=ge;0&&(module.exports={HurlError,clearCache,createInstance});
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
var a=class extends Error{constructor(r){super(r.message),this.name="HurlError",this.type=r.type,this.status=r.status,this.statusText=r.statusText,this.data=r.data,this.headers=r.headers,this.requestId=r.requestId,this.retries=r.retries??0}};function U(e){return new a({message:`HTTP ${e.status}: ${e.statusText}`,type:"HTTP_ERROR",...e})}function $(e,r){return new a({message:e,type:"NETWORK_ERROR",requestId:r})}function v(e,r){return new a({message:`Request timed out after ${e}ms`,type:"TIMEOUT_ERROR",requestId:r})}function F(e){return new a({message:"Request was aborted",type:"ABORT_ERROR",requestId:e})}function S(e,r){return new a({message:`Failed to parse response: ${e}`,type:"PARSE_ERROR",requestId:r})}async function B(e,r){let t=e.body?.getReader(),n=parseInt(e.headers.get("content-length")??"0",10);if(!t)return e.text();let o=[],u=0;for(;;){let{done:i,value:c}=await t.read();if(i)break;o.push(c),u+=c.length,r({loaded:u,total:n,percent:n>0?Math.round(u/n*100):0})}let l=new Uint8Array(u),s=0;for(let i of o)l.set(i,s),s+=i.length;return new TextDecoder().decode(l)}function q(e){let r={};return e.forEach((t,n)=>{r[n]=t}),r}async function _(e,r,t,n){if(n==="HEAD"||e.status===204||e.headers.get("content-length")==="0")return null;let o=e.headers.get("content-type")??"";try{if(t){let l=await B(e,t);return o.includes("application/json")?JSON.parse(l):l}if(o.includes("application/json"))return await e.json();if(o.includes("text/"))return await e.text();if(o.includes("application/octet-stream")||o.includes("image/"))return await e.arrayBuffer();let u=await e.text();return u||null}catch(u){throw S(u.message,r)}}function K(e,r,t,n){let o=Date.now();return{data:e,status:r.status,statusText:r.statusText,headers:q(r.headers),requestId:t,timing:{start:n,end:o,duration:o-n},fromCache:!1}}function L(e,r,t){if(t.type==="bearer"&&(e.Authorization=`Bearer ${t.token}`),t.type==="basic"){let n=btoa(`${t.username}:${t.password}`);e.Authorization=`Basic ${n}`}t.type==="apikey"&&(t.in==="query"?r[t.key]=t.value:e[t.key]=t.value)}function M(e){return e==null?null:typeof e=="number"?{count:e,delay:300,backoff:"exponential"}:e}function j(e,r,t){return t>=r.count||e.type==="ABORT_ERROR"?!1:r.on&&e.status?r.on.includes(e.status):!!(e.type==="NETWORK_ERROR"||e.type==="TIMEOUT_ERROR"||e.status&&e.status>=500)}async function N(e,r){let t=e.delay??300,n=e.backoff==="exponential"?t*Math.pow(2,r):t*(r+1);await new Promise(o=>setTimeout(o,n))}var b=new Map;function O(e,r){return r?.key??e}function G(e){let r=b.get(e);return r?Date.now()>r.expiresAt?(b.delete(e),null):{...r.response,fromCache:!0}:null}function W(e,r,t){b.set(e,{response:r,expiresAt:Date.now()+t.ttl})}function re(){b.clear()}var I=new Map;function z(e){return I.get(e)??null}function J(e,r){I.set(e,r),r.finally(()=>I.delete(e))}function Q(e,r){console.group(`[hurl] \u2192 ${r.method??"GET"} ${e}`),r.headers&&Object.keys(r.headers).length>0&&console.log("headers:",r.headers),r.query&&console.log("query:",r.query),r.body&&console.log("body:",r.body),r.timeout&&console.log("timeout:",r.timeout),r.retry&&console.log("retry:",r.retry),console.groupEnd()}function P(e){let r=e.status>=400?"\u{1F534}":e.status>=300?"\u{1F7E1}":"\u{1F7E2}";console.group(`[hurl] ${r} ${e.status} ${e.statusText} (${e.timing.duration}ms)`),console.log("requestId:",e.requestId),e.fromCache&&console.log("served from cache"),console.log("headers:",e.headers),console.log("data:",e.data),console.groupEnd()}function V(e){console.group("[hurl] \u{1F534} Error"),console.error(e),console.groupEnd()}function te(){return Math.random().toString(36).slice(2,10)}function ne(e,r,t){let n;if(r.startsWith("http://")||r.startsWith("https://")){if(e){let u=new URL(e).origin,l=new URL(r).origin;if(u!==l)throw new Error(`Absolute URL "${r}" does not match baseUrl origin "${u}". Pass the full URL without baseUrl, or use a path-relative URL.`)}n=r}else{if(r.startsWith("//"))throw new Error("Protocol-relative URLs are not supported. Use an explicit https:// or http:// scheme.");n=e?`${e.replace(/\/$/,"")}/${r.replace(/^\//,"")}`:r}if(!t||Object.keys(t).length===0)return n;let o=new URLSearchParams;for(let[u,l]of Object.entries(t))o.set(u,String(l));return`${n}?${o.toString()}`}function se(e,r){let t={...r.headers,...e.headers},n=e.body;return n&&typeof n=="object"&&!(n instanceof FormData)&&!(n instanceof Blob)&&(t["Content-Type"]=t["Content-Type"]??"application/json"),t}function oe(e){if(e!=null)return e instanceof FormData||e instanceof Blob||e instanceof ArrayBuffer||typeof e=="string"?e:JSON.stringify(e)}function ue(e,r){if(r)return!0;let t=e;return!!(t?.name==="TimeoutError"||t?.name==="AbortError"&&t?.message?.includes("timeout"))}async function X(e,r,t){let n=r.requestId??te(),o=r.method??"GET",u=Date.now(),l=M(r.retry??t.retry),s=r.debug??t.debug??!1,i={...t.query,...r.query},c=se(r,t),y=r.timeout??t.timeout,T=r.auth??t.auth;T&&L(c,i,T);let R=ne(t.baseUrl??"",e,Object.keys(i).length>0?i:void 0),m=r.cache??t.cache,f=!!m&&!m.bypass&&o==="GET";if(f){let d=O(R,m),h=G(d);if(h)return s&&P(h),h}let H=r.deduplicate??t.deduplicate??!1;if(H&&o==="GET"){let d=z(R);if(d)return d}s&&Q(R,{...r,method:o});let C=async d=>{let h=null,D=!1,w=new AbortController;r.signal&&r.signal.addEventListener("abort",()=>w.abort()),y&&(h=setTimeout(()=>{D=!0,w.abort()},y));try{let p=await fetch(R,{method:o,headers:c,body:oe(r.body),signal:w.signal,redirect:r.followRedirects??!0?"follow":"manual"});h&&clearTimeout(h);let g=await _(p,n,r.onDownloadProgress,o);if(!p.ok)throw U({status:p.status,statusText:p.statusText,data:g,headers:q(p.headers),requestId:n,retries:d});let x=K(g,p,n,u);return f&&m&&W(O(R,m),x,m),s&&P(x),x}catch(p){h&&clearTimeout(h);let g;if(p instanceof a?g=p:p.name==="AbortError"||p.name==="TimeoutError"?g=ue(p,D)?v(y??0,n):F(n):g=$(p.message,n),g.retries=d,l&&j(g,l,d))return s&&console.log(`[hurl] retrying (${d+1}/${l.count})...`),await N(l,d),C(d+1);throw s&&V(g),g}},A=C(0);return H&&o==="GET"&&J(R,A),A}function E(){let e=[];return{use(r){return e.push(r),()=>{let t=e.indexOf(r);t!==-1&&e.splice(t,1)}},clear(){e.length=0},getAll(){return[...e]}}}async function Y(e,r,t){let n={url:r,options:t};for(let o of e)n=await o(n.url,n.options);return n}async function Z(e,r){let t=r;for(let n of e)t=await n(t);return t}async function ee(e,r){let t=r;for(let n of e)t instanceof a&&(t=await n(t));return t}function k(e={}){let r={...e},t=E(),n=E(),o=E();async function u(s,i={}){let c=s,y=i,T=t.getAll(),R=n.getAll(),m=o.getAll();if(T.length>0){let f=await Y(T,s,i);c=f.url,y=f.options}try{let f=await X(c,y,r);return R.length>0?await Z(R,f):f}catch(f){if(f instanceof a&&m.length>0){let H=await ee(m,f);if(!(H instanceof a))return H;throw H}throw f}}return{request:u,get(s,i){return u(s,{...i,method:"GET"})},post(s,i,c){return u(s,{...c,method:"POST",body:i})},put(s,i,c){return u(s,{...c,method:"PUT",body:i})},patch(s,i,c){return u(s,{...c,method:"PATCH",body:i})},delete(s,i){return u(s,{...i,method:"DELETE"})},head(s,i){return u(s,{...i,method:"HEAD"})},options(s,i){return u(s,{...i,method:"OPTIONS"})},all(s){return Promise.all(s)},defaults:{set(s){r={...r,...s}},get(){return{...r}},reset(){r={...e}}},interceptors:{request:{use:t.use.bind(t),clear:t.clear.bind(t)},response:{use:n.use.bind(n),clear:n.clear.bind(n)},error:{use:o.use.bind(o),clear:o.clear.bind(o)}},create(s){return k({...r,...s})},extend(s){return k({...r,...s})}}}var ie=k(),Ve=ie;export{a as HurlError,re as clearCache,k as createInstance,Ve as default};
|
|
2
|
-
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@firekid/hurl",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "The modern HTTP client. Axios DX. Fetch speed. Zero dependencies.",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": ["dist"],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "tsup
|
|
18
|
-
"dev": "tsup
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"dev": "tsup --watch",
|
|
19
19
|
"test": "vitest run",
|
|
20
20
|
"test:watch": "vitest",
|
|
21
21
|
"typecheck": "tsc --noEmit"
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/core/errors.ts","../src/features/progress.ts","../src/core/response.ts","../src/features/auth.ts","../src/features/retry.ts","../src/features/cache.ts","../src/features/dedup.ts","../src/features/debug.ts","../src/core/request.ts","../src/features/interceptors.ts"],"sourcesContent":["import {\n HurlRequestOptions,\n HurlDefaults,\n HurlResponse,\n HurlInstance,\n RequestInterceptor,\n ResponseInterceptor,\n ErrorInterceptor,\n HurlError,\n} from './types/index.js'\nimport { executeRequest } from './core/request.js'\nimport {\n createInterceptorStore,\n runRequestInterceptors,\n runResponseInterceptors,\n runErrorInterceptors,\n} from './features/interceptors.js'\nimport { clearCache } from './features/cache.js'\n\nfunction createInstance(initialDefaults: HurlDefaults = {}): HurlInstance {\n let defaults: HurlDefaults = { ...initialDefaults }\n\n const requestInterceptors = createInterceptorStore<RequestInterceptor>()\n const responseInterceptors = createInterceptorStore<ResponseInterceptor>()\n const errorInterceptors = createInterceptorStore<ErrorInterceptor>()\n\n async function request<T>(url: string, options: HurlRequestOptions = {}): Promise<HurlResponse<T>> {\n let finalUrl = url\n let finalOptions = options\n\n const reqInterceptors = requestInterceptors.getAll()\n const resInterceptors = responseInterceptors.getAll()\n const errInterceptors = errorInterceptors.getAll()\n\n if (reqInterceptors.length > 0) {\n const result = await runRequestInterceptors(reqInterceptors, url, options)\n finalUrl = result.url\n finalOptions = result.options\n }\n\n try {\n const response = await executeRequest<T>(finalUrl, finalOptions, defaults)\n\n if (resInterceptors.length > 0) {\n return await runResponseInterceptors(resInterceptors, response)\n }\n\n return response\n } catch (err) {\n if (err instanceof HurlError && errInterceptors.length > 0) {\n const result = await runErrorInterceptors(errInterceptors, err)\n if (!(result instanceof HurlError)) return result as HurlResponse<T>\n throw result\n }\n throw err\n }\n }\n\n const instance: HurlInstance = {\n request,\n\n get<T>(url: string, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'GET' })\n },\n\n post<T>(url: string, body?: unknown, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'POST', body })\n },\n\n put<T>(url: string, body?: unknown, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'PUT', body })\n },\n\n patch<T>(url: string, body?: unknown, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'PATCH', body })\n },\n\n delete<T>(url: string, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'DELETE' })\n },\n\n head(url: string, options?: HurlRequestOptions) {\n return request<void>(url, { ...options, method: 'HEAD' })\n },\n\n options<T>(url: string, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'OPTIONS' })\n },\n\n all<T extends unknown[]>(requests: { [K in keyof T]: Promise<T[K]> }) {\n return Promise.all(requests) as Promise<T>\n },\n\n defaults: {\n set(d: HurlDefaults) {\n defaults = { ...defaults, ...d }\n },\n get() {\n return { ...defaults }\n },\n reset() {\n defaults = { ...initialDefaults }\n },\n },\n\n interceptors: {\n request: {\n use: requestInterceptors.use.bind(requestInterceptors),\n clear: requestInterceptors.clear.bind(requestInterceptors),\n },\n response: {\n use: responseInterceptors.use.bind(responseInterceptors),\n clear: responseInterceptors.clear.bind(responseInterceptors),\n },\n error: {\n use: errorInterceptors.use.bind(errorInterceptors),\n clear: errorInterceptors.clear.bind(errorInterceptors),\n },\n },\n\n create(newDefaults?: HurlDefaults) {\n return createInstance({ ...defaults, ...newDefaults })\n },\n\n extend(newDefaults?: HurlDefaults) {\n return createInstance({ ...defaults, ...newDefaults })\n },\n }\n\n return instance\n}\n\nconst hurl = createInstance()\n\nexport default hurl\nexport { HurlError, createInstance, clearCache }\nexport type {\n HurlRequestOptions,\n HurlDefaults,\n HurlResponse,\n HurlInstance,\n RequestInterceptor,\n ResponseInterceptor,\n ErrorInterceptor,\n}\n","export type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'\n\nexport type AuthConfig =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string }\n | { type: 'apikey'; key: string; value: string; in?: 'header' | 'query' }\n\nexport type ProxyConfig = {\n url: string\n auth?: { username: string; password: string }\n}\n\nexport type RetryConfig = {\n count: number\n delay?: number\n backoff?: 'linear' | 'exponential'\n on?: number[]\n}\n\nexport type CacheConfig = {\n ttl: number\n key?: string\n bypass?: boolean\n}\n\nexport type ProgressCallback = (e: { loaded: number; total: number; percent: number }) => void\n\nexport type HurlRequestOptions = {\n method?: Method\n headers?: Record<string, string>\n body?: unknown\n query?: Record<string, string | number | boolean>\n timeout?: number\n retry?: RetryConfig | number\n auth?: AuthConfig\n proxy?: ProxyConfig\n cache?: CacheConfig\n signal?: AbortSignal\n followRedirects?: boolean\n maxRedirects?: number\n onUploadProgress?: ProgressCallback\n onDownloadProgress?: ProgressCallback\n stream?: boolean\n debug?: boolean\n requestId?: string\n deduplicate?: boolean\n}\n\nexport type HurlDefaults = Omit<HurlRequestOptions, 'body' | 'method'> & {\n baseUrl?: string\n}\n\nexport type HurlResponse<T = unknown> = {\n data: T\n status: number\n statusText: string\n headers: Record<string, string>\n requestId: string\n timing: { start: number; end: number; duration: number }\n fromCache: boolean\n}\n\nexport type RequestInterceptor = (\n url: string,\n options: HurlRequestOptions\n) => Promise<{ url: string; options: HurlRequestOptions }> | { url: string; options: HurlRequestOptions }\n\nexport type ResponseInterceptor<T = unknown> = (\n response: HurlResponse<T>\n) => Promise<HurlResponse<T>> | HurlResponse<T>\n\nexport type ErrorInterceptor = (\n error: HurlError\n) => Promise<HurlError | HurlResponse> | HurlError | HurlResponse\n\nexport type HurlErrorType = 'HTTP_ERROR' | 'NETWORK_ERROR' | 'TIMEOUT_ERROR' | 'ABORT_ERROR' | 'PARSE_ERROR'\n\nexport class HurlError extends Error {\n type: HurlErrorType\n status?: number\n statusText?: string\n data?: unknown\n headers?: Record<string, string>\n requestId: string\n retries: number\n\n constructor(params: {\n message: string\n type: HurlErrorType\n status?: number\n statusText?: string\n data?: unknown\n headers?: Record<string, string>\n requestId: string\n retries?: number\n }) {\n super(params.message)\n this.name = 'HurlError'\n this.type = params.type\n this.status = params.status\n this.statusText = params.statusText\n this.data = params.data\n this.headers = params.headers\n this.requestId = params.requestId\n this.retries = params.retries ?? 0\n }\n}\n\nexport type HurlInstance = {\n get<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n post<T = unknown>(url: string, body?: unknown, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n put<T = unknown>(url: string, body?: unknown, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n patch<T = unknown>(url: string, body?: unknown, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n delete<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n head(url: string, options?: HurlRequestOptions): Promise<HurlResponse<void>>\n options<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n request<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n all<T extends unknown[]>(requests: { [K in keyof T]: Promise<T[K]> }): Promise<T>\n defaults: {\n set(d: HurlDefaults): void\n get(): HurlDefaults\n reset(): void\n }\n interceptors: {\n request: { use(fn: RequestInterceptor): () => void; clear(): void }\n response: { use(fn: ResponseInterceptor): () => void; clear(): void }\n error: { use(fn: ErrorInterceptor): () => void; clear(): void }\n }\n create(defaults?: HurlDefaults): HurlInstance\n extend(defaults?: HurlDefaults): HurlInstance\n}\n","import { HurlError } from '../types/index.js'\n\nexport function buildHttpError(params: {\n status: number\n statusText: string\n data: unknown\n headers: Record<string, string>\n requestId: string\n retries: number\n}) {\n return new HurlError({\n message: `HTTP ${params.status}: ${params.statusText}`,\n type: 'HTTP_ERROR',\n ...params,\n })\n}\n\nexport function buildNetworkError(message: string, requestId: string) {\n return new HurlError({ message, type: 'NETWORK_ERROR', requestId })\n}\n\nexport function buildTimeoutError(timeout: number, requestId: string) {\n return new HurlError({\n message: `Request timed out after ${timeout}ms`,\n type: 'TIMEOUT_ERROR',\n requestId,\n })\n}\n\nexport function buildAbortError(requestId: string) {\n return new HurlError({ message: 'Request was aborted', type: 'ABORT_ERROR', requestId })\n}\n\nexport function buildParseError(message: string, requestId: string) {\n return new HurlError({\n message: `Failed to parse response: ${message}`,\n type: 'PARSE_ERROR',\n requestId,\n })\n}\n","import { ProgressCallback } from '../types/index.js'\n\nexport async function trackDownloadProgress(\n response: Response,\n onProgress: ProgressCallback\n): Promise<string> {\n const reader = response.body?.getReader()\n const total = parseInt(response.headers.get('content-length') ?? '0', 10)\n\n if (!reader) return response.text()\n\n const chunks: Uint8Array[] = []\n let loaded = 0\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n chunks.push(value)\n loaded += value.length\n onProgress({\n loaded,\n total,\n percent: total > 0 ? Math.round((loaded / total) * 100) : 0,\n })\n }\n\n const all = new Uint8Array(loaded)\n let offset = 0\n for (const chunk of chunks) {\n all.set(chunk, offset)\n offset += chunk.length\n }\n\n return new TextDecoder().decode(all)\n}\n\nexport function wrapFormDataWithProgress(formData: FormData, onProgress: ProgressCallback): FormData {\n return formData\n}\n","import { HurlResponse } from '../types/index.js'\nimport { buildParseError } from './errors.js'\nimport { trackDownloadProgress } from '../features/progress.js'\nimport { ProgressCallback } from '../types/index.js'\n\nexport function parseHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {}\n headers.forEach((value, key) => {\n result[key] = value\n })\n return result\n}\n\nexport async function parseResponseBody(\n response: Response,\n requestId: string,\n onDownloadProgress?: ProgressCallback,\n method?: string\n): Promise<unknown> {\n if (method === 'HEAD') return null\n if (response.status === 204 || response.headers.get('content-length') === '0') return null\n\n const contentType = response.headers.get('content-type') ?? ''\n\n try {\n if (onDownloadProgress) {\n const text = await trackDownloadProgress(response, onDownloadProgress)\n if (contentType.includes('application/json')) return JSON.parse(text)\n return text\n }\n\n if (contentType.includes('application/json')) return await response.json()\n if (contentType.includes('text/')) return await response.text()\n if (contentType.includes('application/octet-stream') || contentType.includes('image/')) {\n return await response.arrayBuffer()\n }\n\n const text = await response.text()\n if (!text) return null\n return text\n } catch (e) {\n throw buildParseError((e as Error).message, requestId)\n }\n}\n\nexport function buildResponse<T>(\n data: T,\n response: Response,\n requestId: string,\n start: number\n): HurlResponse<T> {\n const end = Date.now()\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: parseHeaders(response.headers),\n requestId,\n timing: { start, end, duration: end - start },\n fromCache: false,\n }\n}\n","import { AuthConfig, HurlRequestOptions } from '../types/index.js'\n\nexport function applyAuth(headers: Record<string, string>, query: Record<string, string>, auth: AuthConfig) {\n if (auth.type === 'bearer') {\n headers['Authorization'] = `Bearer ${auth.token}`\n }\n\n if (auth.type === 'basic') {\n const encoded = btoa(`${auth.username}:${auth.password}`)\n headers['Authorization'] = `Basic ${encoded}`\n }\n\n if (auth.type === 'apikey') {\n if (auth.in === 'query') {\n query[auth.key] = auth.value\n } else {\n headers[auth.key] = auth.value\n }\n }\n}\n\nexport function mergeAuth(options: HurlRequestOptions, defaults: { auth?: AuthConfig }) {\n return options.auth ?? defaults.auth\n}\n","import { RetryConfig, HurlError } from '../types/index.js'\n\nexport function normalizeRetry(retry: RetryConfig | number | undefined): RetryConfig | null {\n if (retry === undefined || retry === null) return null\n if (typeof retry === 'number') return { count: retry, delay: 300, backoff: 'exponential' }\n return retry\n}\n\nexport function shouldRetry(error: HurlError, config: RetryConfig, attempt: number): boolean {\n if (attempt >= config.count) return false\n if (error.type === 'ABORT_ERROR') return false\n\n if (config.on && error.status) {\n return config.on.includes(error.status)\n }\n\n if (error.type === 'NETWORK_ERROR' || error.type === 'TIMEOUT_ERROR') return true\n if (error.status && error.status >= 500) return true\n\n return false\n}\n\nexport async function waitForRetry(config: RetryConfig, attempt: number) {\n const base = config.delay ?? 300\n\n const delay =\n config.backoff === 'exponential'\n ? base * Math.pow(2, attempt)\n : base * (attempt + 1)\n\n await new Promise((res) => setTimeout(res, delay))\n}\n","import { HurlResponse, CacheConfig } from '../types/index.js'\n\ntype CacheEntry = {\n response: HurlResponse\n expiresAt: number\n}\n\nconst store = new Map<string, CacheEntry>()\n\nexport function getCacheKey(url: string, config?: CacheConfig) {\n return config?.key ?? url\n}\n\nexport function getFromCache(key: string): HurlResponse | null {\n const entry = store.get(key)\n if (!entry) return null\n if (Date.now() > entry.expiresAt) {\n store.delete(key)\n return null\n }\n return { ...entry.response, fromCache: true }\n}\n\nexport function setInCache(key: string, response: HurlResponse, config: CacheConfig) {\n store.set(key, {\n response,\n expiresAt: Date.now() + config.ttl,\n })\n}\n\nexport function invalidateCache(key: string) {\n store.delete(key)\n}\n\nexport function clearCache() {\n store.clear()\n}\n","import { HurlResponse } from '../types/index.js'\n\nconst inFlight = new Map<string, Promise<HurlResponse>>()\n\nexport function getInFlight(key: string): Promise<HurlResponse> | null {\n return inFlight.get(key) ?? null\n}\n\nexport function setInFlight(key: string, promise: Promise<HurlResponse>) {\n inFlight.set(key, promise)\n promise.finally(() => inFlight.delete(key))\n}\n","import { HurlRequestOptions, HurlResponse } from '../types/index.js'\n\nexport function debugRequest(url: string, options: HurlRequestOptions) {\n console.group(`[hurl] → ${options.method ?? 'GET'} ${url}`)\n if (options.headers && Object.keys(options.headers).length > 0) {\n console.log('headers:', options.headers)\n }\n if (options.query) console.log('query:', options.query)\n if (options.body) console.log('body:', options.body)\n if (options.timeout) console.log('timeout:', options.timeout)\n if (options.retry) console.log('retry:', options.retry)\n console.groupEnd()\n}\n\nexport function debugResponse(response: HurlResponse) {\n const color = response.status >= 400 ? '🔴' : response.status >= 300 ? '🟡' : '🟢'\n console.group(`[hurl] ${color} ${response.status} ${response.statusText} (${response.timing.duration}ms)`)\n console.log('requestId:', response.requestId)\n if (response.fromCache) console.log('served from cache')\n console.log('headers:', response.headers)\n console.log('data:', response.data)\n console.groupEnd()\n}\n\nexport function debugError(error: unknown) {\n console.group('[hurl] 🔴 Error')\n console.error(error)\n console.groupEnd()\n}\n","import { HurlRequestOptions, HurlResponse, HurlDefaults, HurlError } from '../types/index.js'\nimport { buildHttpError, buildNetworkError, buildTimeoutError, buildAbortError } from './errors.js'\nimport { parseResponseBody, buildResponse, parseHeaders } from './response.js'\nimport { applyAuth } from '../features/auth.js'\nimport { normalizeRetry, shouldRetry, waitForRetry } from '../features/retry.js'\nimport { getCacheKey, getFromCache, setInCache } from '../features/cache.js'\nimport { getInFlight, setInFlight } from '../features/dedup.js'\nimport { debugRequest, debugResponse, debugError } from '../features/debug.js'\n\nfunction generateId() {\n return Math.random().toString(36).slice(2, 10)\n}\n\nfunction buildUrl(base: string, url: string, query?: Record<string, string | number | boolean>) {\n let fullUrl: string\n\n if (url.startsWith('http://') || url.startsWith('https://')) {\n if (base) {\n const baseOrigin = new URL(base).origin\n const urlOrigin = new URL(url).origin\n if (baseOrigin !== urlOrigin) {\n throw new Error(\n `Absolute URL \"${url}\" does not match baseUrl origin \"${baseOrigin}\". ` +\n `Pass the full URL without baseUrl, or use a path-relative URL.`\n )\n }\n }\n fullUrl = url\n } else if (url.startsWith('//')) {\n throw new Error(\n `Protocol-relative URLs are not supported. Use an explicit https:// or http:// scheme.`\n )\n } else {\n fullUrl = base\n ? `${base.replace(/\\/$/, '')}/${url.replace(/^\\//, '')}`\n : url\n }\n\n if (!query || Object.keys(query).length === 0) return fullUrl\n\n const params = new URLSearchParams()\n for (const [k, v] of Object.entries(query)) {\n params.set(k, String(v))\n }\n return `${fullUrl}?${params.toString()}`\n}\n\nfunction buildHeaders(\n options: HurlRequestOptions,\n defaults: HurlDefaults\n): Record<string, string> {\n const headers: Record<string, string> = {\n ...defaults.headers,\n ...options.headers,\n }\n\n const body = options.body\n if (body && typeof body === 'object' && !(body instanceof FormData) && !(body instanceof Blob)) {\n headers['Content-Type'] = headers['Content-Type'] ?? 'application/json'\n }\n\n return headers\n}\n\nfunction buildBody(body: unknown): BodyInit | undefined {\n if (body === undefined || body === null) return undefined\n if (body instanceof FormData || body instanceof Blob || body instanceof ArrayBuffer) return body as BodyInit\n if (typeof body === 'string') return body\n return JSON.stringify(body)\n}\n\nfunction isTimeoutAbort(err: unknown, timedOut: boolean): boolean {\n if (timedOut) return true\n const e = err as any\n if (e?.name === 'TimeoutError') return true\n if (e?.name === 'AbortError' && e?.message?.includes('timeout')) return true\n return false\n}\n\nexport async function executeRequest<T>(\n url: string,\n options: HurlRequestOptions,\n defaults: HurlDefaults\n): Promise<HurlResponse<T>> {\n const requestId = options.requestId ?? generateId()\n const method = options.method ?? 'GET'\n const start = Date.now()\n const retryConfig = normalizeRetry(options.retry ?? defaults.retry)\n const debug = options.debug ?? defaults.debug ?? false\n\n const query = { ...defaults.query, ...options.query } as Record<string, string | number | boolean>\n const headers = buildHeaders(options, defaults)\n const timeout = options.timeout ?? defaults.timeout\n\n const auth = options.auth ?? defaults.auth\n if (auth) applyAuth(headers, query as Record<string, string>, auth)\n\n const fullUrl = buildUrl(defaults.baseUrl ?? '', url, Object.keys(query).length > 0 ? query : undefined)\n\n const cacheConfig = options.cache ?? defaults.cache\n const shouldCache = !!cacheConfig && !cacheConfig.bypass && method === 'GET'\n\n if (shouldCache) {\n const cacheKey = getCacheKey(fullUrl, cacheConfig)\n const cached = getFromCache(cacheKey)\n if (cached) {\n if (debug) debugResponse(cached)\n return cached as HurlResponse<T>\n }\n }\n\n const deduplicate = options.deduplicate ?? defaults.deduplicate ?? false\n\n if (deduplicate && method === 'GET') {\n const inflight = getInFlight(fullUrl)\n if (inflight) return inflight as Promise<HurlResponse<T>>\n }\n\n if (debug) debugRequest(fullUrl, { ...options, method })\n\n const run = async (attempt: number): Promise<HurlResponse<T>> => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n let timedOut = false\n\n const controller = new AbortController()\n\n if (options.signal) {\n options.signal.addEventListener('abort', () => controller.abort())\n }\n\n if (timeout) {\n timeoutId = setTimeout(() => {\n timedOut = true\n controller.abort()\n }, timeout)\n }\n\n try {\n const response = await fetch(fullUrl, {\n method,\n headers,\n body: buildBody(options.body),\n signal: controller.signal,\n redirect: (options.followRedirects ?? true) ? 'follow' : 'manual',\n })\n\n if (timeoutId) clearTimeout(timeoutId)\n\n const data = await parseResponseBody(response, requestId, options.onDownloadProgress, method) as T\n\n if (!response.ok) {\n throw buildHttpError({\n status: response.status,\n statusText: response.statusText,\n data,\n headers: parseHeaders(response.headers),\n requestId,\n retries: attempt,\n })\n }\n\n const result = buildResponse<T>(data, response, requestId, start)\n\n if (shouldCache && cacheConfig) {\n setInCache(getCacheKey(fullUrl, cacheConfig), result, cacheConfig)\n }\n\n if (debug) debugResponse(result)\n\n return result\n } catch (err) {\n if (timeoutId) clearTimeout(timeoutId)\n\n let hurlError: HurlError\n\n if (err instanceof HurlError) {\n hurlError = err\n } else if ((err as Error).name === 'AbortError' || (err as Error).name === 'TimeoutError') {\n hurlError = isTimeoutAbort(err, timedOut)\n ? buildTimeoutError(timeout ?? 0, requestId)\n : buildAbortError(requestId)\n } else {\n hurlError = buildNetworkError((err as Error).message, requestId)\n }\n\n hurlError.retries = attempt\n\n if (retryConfig && shouldRetry(hurlError, retryConfig, attempt)) {\n if (debug) console.log(`[hurl] retrying (${attempt + 1}/${retryConfig.count})...`)\n await waitForRetry(retryConfig, attempt)\n return run(attempt + 1)\n }\n\n if (debug) debugError(hurlError)\n throw hurlError\n }\n }\n\n const promise = run(0)\n\n if (deduplicate && method === 'GET') {\n setInFlight(fullUrl, promise as Promise<HurlResponse>)\n }\n\n return promise\n}\n","import { RequestInterceptor, ResponseInterceptor, ErrorInterceptor, HurlError, HurlResponse, HurlRequestOptions } from '../types/index.js'\n\nexport function createInterceptorStore<T extends (...args: any[]) => any>() {\n const fns: T[] = []\n\n return {\n use(fn: T) {\n fns.push(fn)\n return () => {\n const i = fns.indexOf(fn)\n if (i !== -1) fns.splice(i, 1)\n }\n },\n clear() {\n fns.length = 0\n },\n getAll() {\n return [...fns]\n },\n }\n}\n\nexport async function runRequestInterceptors(\n interceptors: RequestInterceptor[],\n url: string,\n options: HurlRequestOptions\n): Promise<{ url: string; options: HurlRequestOptions }> {\n let current = { url, options }\n for (const fn of interceptors) {\n current = await fn(current.url, current.options)\n }\n return current\n}\n\nexport async function runResponseInterceptors<T>(\n interceptors: ResponseInterceptor[],\n response: HurlResponse<T>\n): Promise<HurlResponse<T>> {\n let current = response as HurlResponse\n for (const fn of interceptors) {\n current = await fn(current)\n }\n return current as HurlResponse<T>\n}\n\nexport async function runErrorInterceptors(\n interceptors: ErrorInterceptor[],\n error: HurlError\n): Promise<HurlError | HurlResponse> {\n let current: HurlError | HurlResponse = error\n for (const fn of interceptors) {\n if (current instanceof HurlError) {\n current = await fn(current)\n }\n }\n return current\n}\n"],"mappings":"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","names":["index_exports","__export","HurlError","clearCache","createInstance","index_default","__toCommonJS","HurlError","params","buildHttpError","params","HurlError","buildNetworkError","message","requestId","buildTimeoutError","timeout","buildAbortError","buildParseError","trackDownloadProgress","response","onProgress","reader","total","chunks","loaded","done","value","all","offset","chunk","parseHeaders","headers","result","value","key","parseResponseBody","response","requestId","onDownloadProgress","method","contentType","text","trackDownloadProgress","e","buildParseError","buildResponse","data","start","end","applyAuth","headers","query","auth","encoded","normalizeRetry","retry","shouldRetry","error","config","attempt","waitForRetry","base","delay","res","store","getCacheKey","url","config","getFromCache","key","entry","setInCache","response","clearCache","store","inFlight","getInFlight","key","setInFlight","promise","debugRequest","url","options","debugResponse","response","color","debugError","error","generateId","buildUrl","base","url","query","fullUrl","baseOrigin","urlOrigin","params","k","v","buildHeaders","options","defaults","headers","body","buildBody","isTimeoutAbort","err","timedOut","e","executeRequest","requestId","method","start","retryConfig","normalizeRetry","debug","timeout","auth","applyAuth","cacheConfig","shouldCache","cacheKey","getCacheKey","cached","getFromCache","debugResponse","deduplicate","inflight","getInFlight","debugRequest","run","attempt","timeoutId","controller","response","data","parseResponseBody","buildHttpError","parseHeaders","result","buildResponse","setInCache","hurlError","HurlError","buildTimeoutError","buildAbortError","buildNetworkError","shouldRetry","waitForRetry","debugError","promise","setInFlight","createInterceptorStore","fns","fn","i","runRequestInterceptors","interceptors","url","options","current","runResponseInterceptors","response","runErrorInterceptors","error","HurlError","createInstance","initialDefaults","defaults","requestInterceptors","createInterceptorStore","responseInterceptors","errorInterceptors","request","url","options","finalUrl","finalOptions","reqInterceptors","resInterceptors","errInterceptors","result","runRequestInterceptors","response","executeRequest","runResponseInterceptors","err","HurlError","runErrorInterceptors","body","requests","d","newDefaults","hurl","index_default"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/index.ts","../src/core/errors.ts","../src/features/progress.ts","../src/core/response.ts","../src/features/auth.ts","../src/features/retry.ts","../src/features/cache.ts","../src/features/dedup.ts","../src/features/debug.ts","../src/core/request.ts","../src/features/interceptors.ts","../src/index.ts"],"sourcesContent":["export type Method = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'\n\nexport type AuthConfig =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string }\n | { type: 'apikey'; key: string; value: string; in?: 'header' | 'query' }\n\nexport type ProxyConfig = {\n url: string\n auth?: { username: string; password: string }\n}\n\nexport type RetryConfig = {\n count: number\n delay?: number\n backoff?: 'linear' | 'exponential'\n on?: number[]\n}\n\nexport type CacheConfig = {\n ttl: number\n key?: string\n bypass?: boolean\n}\n\nexport type ProgressCallback = (e: { loaded: number; total: number; percent: number }) => void\n\nexport type HurlRequestOptions = {\n method?: Method\n headers?: Record<string, string>\n body?: unknown\n query?: Record<string, string | number | boolean>\n timeout?: number\n retry?: RetryConfig | number\n auth?: AuthConfig\n proxy?: ProxyConfig\n cache?: CacheConfig\n signal?: AbortSignal\n followRedirects?: boolean\n maxRedirects?: number\n onUploadProgress?: ProgressCallback\n onDownloadProgress?: ProgressCallback\n stream?: boolean\n debug?: boolean\n requestId?: string\n deduplicate?: boolean\n}\n\nexport type HurlDefaults = Omit<HurlRequestOptions, 'body' | 'method'> & {\n baseUrl?: string\n}\n\nexport type HurlResponse<T = unknown> = {\n data: T\n status: number\n statusText: string\n headers: Record<string, string>\n requestId: string\n timing: { start: number; end: number; duration: number }\n fromCache: boolean\n}\n\nexport type RequestInterceptor = (\n url: string,\n options: HurlRequestOptions\n) => Promise<{ url: string; options: HurlRequestOptions }> | { url: string; options: HurlRequestOptions }\n\nexport type ResponseInterceptor<T = unknown> = (\n response: HurlResponse<T>\n) => Promise<HurlResponse<T>> | HurlResponse<T>\n\nexport type ErrorInterceptor = (\n error: HurlError\n) => Promise<HurlError | HurlResponse> | HurlError | HurlResponse\n\nexport type HurlErrorType = 'HTTP_ERROR' | 'NETWORK_ERROR' | 'TIMEOUT_ERROR' | 'ABORT_ERROR' | 'PARSE_ERROR'\n\nexport class HurlError extends Error {\n type: HurlErrorType\n status?: number\n statusText?: string\n data?: unknown\n headers?: Record<string, string>\n requestId: string\n retries: number\n\n constructor(params: {\n message: string\n type: HurlErrorType\n status?: number\n statusText?: string\n data?: unknown\n headers?: Record<string, string>\n requestId: string\n retries?: number\n }) {\n super(params.message)\n this.name = 'HurlError'\n this.type = params.type\n this.status = params.status\n this.statusText = params.statusText\n this.data = params.data\n this.headers = params.headers\n this.requestId = params.requestId\n this.retries = params.retries ?? 0\n }\n}\n\nexport type HurlInstance = {\n get<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n post<T = unknown>(url: string, body?: unknown, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n put<T = unknown>(url: string, body?: unknown, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n patch<T = unknown>(url: string, body?: unknown, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n delete<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n head(url: string, options?: HurlRequestOptions): Promise<HurlResponse<void>>\n options<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n request<T = unknown>(url: string, options?: HurlRequestOptions): Promise<HurlResponse<T>>\n all<T extends unknown[]>(requests: { [K in keyof T]: Promise<T[K]> }): Promise<T>\n defaults: {\n set(d: HurlDefaults): void\n get(): HurlDefaults\n reset(): void\n }\n interceptors: {\n request: { use(fn: RequestInterceptor): () => void; clear(): void }\n response: { use(fn: ResponseInterceptor): () => void; clear(): void }\n error: { use(fn: ErrorInterceptor): () => void; clear(): void }\n }\n create(defaults?: HurlDefaults): HurlInstance\n extend(defaults?: HurlDefaults): HurlInstance\n}\n","import { HurlError } from '../types/index.js'\n\nexport function buildHttpError(params: {\n status: number\n statusText: string\n data: unknown\n headers: Record<string, string>\n requestId: string\n retries: number\n}) {\n return new HurlError({\n message: `HTTP ${params.status}: ${params.statusText}`,\n type: 'HTTP_ERROR',\n ...params,\n })\n}\n\nexport function buildNetworkError(message: string, requestId: string) {\n return new HurlError({ message, type: 'NETWORK_ERROR', requestId })\n}\n\nexport function buildTimeoutError(timeout: number, requestId: string) {\n return new HurlError({\n message: `Request timed out after ${timeout}ms`,\n type: 'TIMEOUT_ERROR',\n requestId,\n })\n}\n\nexport function buildAbortError(requestId: string) {\n return new HurlError({ message: 'Request was aborted', type: 'ABORT_ERROR', requestId })\n}\n\nexport function buildParseError(message: string, requestId: string) {\n return new HurlError({\n message: `Failed to parse response: ${message}`,\n type: 'PARSE_ERROR',\n requestId,\n })\n}\n","import { ProgressCallback } from '../types/index.js'\n\nexport async function trackDownloadProgress(\n response: Response,\n onProgress: ProgressCallback\n): Promise<string> {\n const reader = response.body?.getReader()\n const total = parseInt(response.headers.get('content-length') ?? '0', 10)\n\n if (!reader) return response.text()\n\n const chunks: Uint8Array[] = []\n let loaded = 0\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n chunks.push(value)\n loaded += value.length\n onProgress({\n loaded,\n total,\n percent: total > 0 ? Math.round((loaded / total) * 100) : 0,\n })\n }\n\n const all = new Uint8Array(loaded)\n let offset = 0\n for (const chunk of chunks) {\n all.set(chunk, offset)\n offset += chunk.length\n }\n\n return new TextDecoder().decode(all)\n}\n\nexport function wrapFormDataWithProgress(formData: FormData, onProgress: ProgressCallback): FormData {\n return formData\n}\n","import { HurlResponse } from '../types/index.js'\nimport { buildParseError } from './errors.js'\nimport { trackDownloadProgress } from '../features/progress.js'\nimport { ProgressCallback } from '../types/index.js'\n\nexport function parseHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {}\n headers.forEach((value, key) => {\n result[key] = value\n })\n return result\n}\n\nexport async function parseResponseBody(\n response: Response,\n requestId: string,\n onDownloadProgress?: ProgressCallback,\n method?: string\n): Promise<unknown> {\n if (method === 'HEAD') return null\n if (response.status === 204 || response.headers.get('content-length') === '0') return null\n\n const contentType = response.headers.get('content-type') ?? ''\n\n try {\n if (onDownloadProgress) {\n const text = await trackDownloadProgress(response, onDownloadProgress)\n if (contentType.includes('application/json')) return JSON.parse(text)\n return text\n }\n\n if (contentType.includes('application/json')) return await response.json()\n if (contentType.includes('text/')) return await response.text()\n if (contentType.includes('application/octet-stream') || contentType.includes('image/')) {\n return await response.arrayBuffer()\n }\n\n const text = await response.text()\n if (!text) return null\n return text\n } catch (e) {\n throw buildParseError((e as Error).message, requestId)\n }\n}\n\nexport function buildResponse<T>(\n data: T,\n response: Response,\n requestId: string,\n start: number\n): HurlResponse<T> {\n const end = Date.now()\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: parseHeaders(response.headers),\n requestId,\n timing: { start, end, duration: end - start },\n fromCache: false,\n }\n}\n","import { AuthConfig, HurlRequestOptions } from '../types/index.js'\n\nexport function applyAuth(headers: Record<string, string>, query: Record<string, string>, auth: AuthConfig) {\n if (auth.type === 'bearer') {\n headers['Authorization'] = `Bearer ${auth.token}`\n }\n\n if (auth.type === 'basic') {\n const encoded = btoa(`${auth.username}:${auth.password}`)\n headers['Authorization'] = `Basic ${encoded}`\n }\n\n if (auth.type === 'apikey') {\n if (auth.in === 'query') {\n query[auth.key] = auth.value\n } else {\n headers[auth.key] = auth.value\n }\n }\n}\n\nexport function mergeAuth(options: HurlRequestOptions, defaults: { auth?: AuthConfig }) {\n return options.auth ?? defaults.auth\n}\n","import { RetryConfig, HurlError } from '../types/index.js'\n\nexport function normalizeRetry(retry: RetryConfig | number | undefined): RetryConfig | null {\n if (retry === undefined || retry === null) return null\n if (typeof retry === 'number') return { count: retry, delay: 300, backoff: 'exponential' }\n return retry\n}\n\nexport function shouldRetry(error: HurlError, config: RetryConfig, attempt: number): boolean {\n if (attempt >= config.count) return false\n if (error.type === 'ABORT_ERROR') return false\n\n if (config.on && error.status) {\n return config.on.includes(error.status)\n }\n\n if (error.type === 'NETWORK_ERROR' || error.type === 'TIMEOUT_ERROR') return true\n if (error.status && error.status >= 500) return true\n\n return false\n}\n\nexport async function waitForRetry(config: RetryConfig, attempt: number) {\n const base = config.delay ?? 300\n\n const delay =\n config.backoff === 'exponential'\n ? base * Math.pow(2, attempt)\n : base * (attempt + 1)\n\n await new Promise((res) => setTimeout(res, delay))\n}\n","import { HurlResponse, CacheConfig } from '../types/index.js'\n\ntype CacheEntry = {\n response: HurlResponse\n expiresAt: number\n}\n\nconst store = new Map<string, CacheEntry>()\n\nexport function getCacheKey(url: string, config?: CacheConfig) {\n return config?.key ?? url\n}\n\nexport function getFromCache(key: string): HurlResponse | null {\n const entry = store.get(key)\n if (!entry) return null\n if (Date.now() > entry.expiresAt) {\n store.delete(key)\n return null\n }\n return { ...entry.response, fromCache: true }\n}\n\nexport function setInCache(key: string, response: HurlResponse, config: CacheConfig) {\n store.set(key, {\n response,\n expiresAt: Date.now() + config.ttl,\n })\n}\n\nexport function invalidateCache(key: string) {\n store.delete(key)\n}\n\nexport function clearCache() {\n store.clear()\n}\n","import { HurlResponse } from '../types/index.js'\n\nconst inFlight = new Map<string, Promise<HurlResponse>>()\n\nexport function getInFlight(key: string): Promise<HurlResponse> | null {\n return inFlight.get(key) ?? null\n}\n\nexport function setInFlight(key: string, promise: Promise<HurlResponse>) {\n inFlight.set(key, promise)\n promise.finally(() => inFlight.delete(key))\n}\n","import { HurlRequestOptions, HurlResponse } from '../types/index.js'\n\nexport function debugRequest(url: string, options: HurlRequestOptions) {\n console.group(`[hurl] → ${options.method ?? 'GET'} ${url}`)\n if (options.headers && Object.keys(options.headers).length > 0) {\n console.log('headers:', options.headers)\n }\n if (options.query) console.log('query:', options.query)\n if (options.body) console.log('body:', options.body)\n if (options.timeout) console.log('timeout:', options.timeout)\n if (options.retry) console.log('retry:', options.retry)\n console.groupEnd()\n}\n\nexport function debugResponse(response: HurlResponse) {\n const color = response.status >= 400 ? '🔴' : response.status >= 300 ? '🟡' : '🟢'\n console.group(`[hurl] ${color} ${response.status} ${response.statusText} (${response.timing.duration}ms)`)\n console.log('requestId:', response.requestId)\n if (response.fromCache) console.log('served from cache')\n console.log('headers:', response.headers)\n console.log('data:', response.data)\n console.groupEnd()\n}\n\nexport function debugError(error: unknown) {\n console.group('[hurl] 🔴 Error')\n console.error(error)\n console.groupEnd()\n}\n","import { HurlRequestOptions, HurlResponse, HurlDefaults, HurlError } from '../types/index.js'\nimport { buildHttpError, buildNetworkError, buildTimeoutError, buildAbortError } from './errors.js'\nimport { parseResponseBody, buildResponse, parseHeaders } from './response.js'\nimport { applyAuth } from '../features/auth.js'\nimport { normalizeRetry, shouldRetry, waitForRetry } from '../features/retry.js'\nimport { getCacheKey, getFromCache, setInCache } from '../features/cache.js'\nimport { getInFlight, setInFlight } from '../features/dedup.js'\nimport { debugRequest, debugResponse, debugError } from '../features/debug.js'\n\nfunction generateId() {\n return Math.random().toString(36).slice(2, 10)\n}\n\nfunction buildUrl(base: string, url: string, query?: Record<string, string | number | boolean>) {\n let fullUrl: string\n\n if (url.startsWith('http://') || url.startsWith('https://')) {\n if (base) {\n const baseOrigin = new URL(base).origin\n const urlOrigin = new URL(url).origin\n if (baseOrigin !== urlOrigin) {\n throw new Error(\n `Absolute URL \"${url}\" does not match baseUrl origin \"${baseOrigin}\". ` +\n `Pass the full URL without baseUrl, or use a path-relative URL.`\n )\n }\n }\n fullUrl = url\n } else if (url.startsWith('//')) {\n throw new Error(\n `Protocol-relative URLs are not supported. Use an explicit https:// or http:// scheme.`\n )\n } else {\n fullUrl = base\n ? `${base.replace(/\\/$/, '')}/${url.replace(/^\\//, '')}`\n : url\n }\n\n if (!query || Object.keys(query).length === 0) return fullUrl\n\n const params = new URLSearchParams()\n for (const [k, v] of Object.entries(query)) {\n params.set(k, String(v))\n }\n return `${fullUrl}?${params.toString()}`\n}\n\nfunction buildHeaders(\n options: HurlRequestOptions,\n defaults: HurlDefaults\n): Record<string, string> {\n const headers: Record<string, string> = {\n ...defaults.headers,\n ...options.headers,\n }\n\n const body = options.body\n if (body && typeof body === 'object' && !(body instanceof FormData) && !(body instanceof Blob)) {\n headers['Content-Type'] = headers['Content-Type'] ?? 'application/json'\n }\n\n return headers\n}\n\nfunction buildBody(body: unknown): BodyInit | undefined {\n if (body === undefined || body === null) return undefined\n if (body instanceof FormData || body instanceof Blob || body instanceof ArrayBuffer) return body as BodyInit\n if (typeof body === 'string') return body\n return JSON.stringify(body)\n}\n\nfunction isTimeoutAbort(err: unknown, timedOut: boolean): boolean {\n if (timedOut) return true\n const e = err as any\n if (e?.name === 'TimeoutError') return true\n if (e?.name === 'AbortError' && e?.message?.includes('timeout')) return true\n return false\n}\n\nexport async function executeRequest<T>(\n url: string,\n options: HurlRequestOptions,\n defaults: HurlDefaults\n): Promise<HurlResponse<T>> {\n const requestId = options.requestId ?? generateId()\n const method = options.method ?? 'GET'\n const start = Date.now()\n const retryConfig = normalizeRetry(options.retry ?? defaults.retry)\n const debug = options.debug ?? defaults.debug ?? false\n\n const query = { ...defaults.query, ...options.query } as Record<string, string | number | boolean>\n const headers = buildHeaders(options, defaults)\n const timeout = options.timeout ?? defaults.timeout\n\n const auth = options.auth ?? defaults.auth\n if (auth) applyAuth(headers, query as Record<string, string>, auth)\n\n const fullUrl = buildUrl(defaults.baseUrl ?? '', url, Object.keys(query).length > 0 ? query : undefined)\n\n const cacheConfig = options.cache ?? defaults.cache\n const shouldCache = !!cacheConfig && !cacheConfig.bypass && method === 'GET'\n\n if (shouldCache) {\n const cacheKey = getCacheKey(fullUrl, cacheConfig)\n const cached = getFromCache(cacheKey)\n if (cached) {\n if (debug) debugResponse(cached)\n return cached as HurlResponse<T>\n }\n }\n\n const deduplicate = options.deduplicate ?? defaults.deduplicate ?? false\n\n if (deduplicate && method === 'GET') {\n const inflight = getInFlight(fullUrl)\n if (inflight) return inflight as Promise<HurlResponse<T>>\n }\n\n if (debug) debugRequest(fullUrl, { ...options, method })\n\n const run = async (attempt: number): Promise<HurlResponse<T>> => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null\n let timedOut = false\n\n const controller = new AbortController()\n\n if (options.signal) {\n options.signal.addEventListener('abort', () => controller.abort())\n }\n\n if (timeout) {\n timeoutId = setTimeout(() => {\n timedOut = true\n controller.abort()\n }, timeout)\n }\n\n try {\n const response = await fetch(fullUrl, {\n method,\n headers,\n body: buildBody(options.body),\n signal: controller.signal,\n redirect: (options.followRedirects ?? true) ? 'follow' : 'manual',\n })\n\n if (timeoutId) clearTimeout(timeoutId)\n\n const data = await parseResponseBody(response, requestId, options.onDownloadProgress, method) as T\n\n if (!response.ok) {\n throw buildHttpError({\n status: response.status,\n statusText: response.statusText,\n data,\n headers: parseHeaders(response.headers),\n requestId,\n retries: attempt,\n })\n }\n\n const result = buildResponse<T>(data, response, requestId, start)\n\n if (shouldCache && cacheConfig) {\n setInCache(getCacheKey(fullUrl, cacheConfig), result, cacheConfig)\n }\n\n if (debug) debugResponse(result)\n\n return result\n } catch (err) {\n if (timeoutId) clearTimeout(timeoutId)\n\n let hurlError: HurlError\n\n if (err instanceof HurlError) {\n hurlError = err\n } else if ((err as Error).name === 'AbortError' || (err as Error).name === 'TimeoutError') {\n hurlError = isTimeoutAbort(err, timedOut)\n ? buildTimeoutError(timeout ?? 0, requestId)\n : buildAbortError(requestId)\n } else {\n hurlError = buildNetworkError((err as Error).message, requestId)\n }\n\n hurlError.retries = attempt\n\n if (retryConfig && shouldRetry(hurlError, retryConfig, attempt)) {\n if (debug) console.log(`[hurl] retrying (${attempt + 1}/${retryConfig.count})...`)\n await waitForRetry(retryConfig, attempt)\n return run(attempt + 1)\n }\n\n if (debug) debugError(hurlError)\n throw hurlError\n }\n }\n\n const promise = run(0)\n\n if (deduplicate && method === 'GET') {\n setInFlight(fullUrl, promise as Promise<HurlResponse>)\n }\n\n return promise\n}\n","import { RequestInterceptor, ResponseInterceptor, ErrorInterceptor, HurlError, HurlResponse, HurlRequestOptions } from '../types/index.js'\n\nexport function createInterceptorStore<T extends (...args: any[]) => any>() {\n const fns: T[] = []\n\n return {\n use(fn: T) {\n fns.push(fn)\n return () => {\n const i = fns.indexOf(fn)\n if (i !== -1) fns.splice(i, 1)\n }\n },\n clear() {\n fns.length = 0\n },\n getAll() {\n return [...fns]\n },\n }\n}\n\nexport async function runRequestInterceptors(\n interceptors: RequestInterceptor[],\n url: string,\n options: HurlRequestOptions\n): Promise<{ url: string; options: HurlRequestOptions }> {\n let current = { url, options }\n for (const fn of interceptors) {\n current = await fn(current.url, current.options)\n }\n return current\n}\n\nexport async function runResponseInterceptors<T>(\n interceptors: ResponseInterceptor[],\n response: HurlResponse<T>\n): Promise<HurlResponse<T>> {\n let current = response as HurlResponse\n for (const fn of interceptors) {\n current = await fn(current)\n }\n return current as HurlResponse<T>\n}\n\nexport async function runErrorInterceptors(\n interceptors: ErrorInterceptor[],\n error: HurlError\n): Promise<HurlError | HurlResponse> {\n let current: HurlError | HurlResponse = error\n for (const fn of interceptors) {\n if (current instanceof HurlError) {\n current = await fn(current)\n }\n }\n return current\n}\n","import {\n HurlRequestOptions,\n HurlDefaults,\n HurlResponse,\n HurlInstance,\n RequestInterceptor,\n ResponseInterceptor,\n ErrorInterceptor,\n HurlError,\n} from './types/index.js'\nimport { executeRequest } from './core/request.js'\nimport {\n createInterceptorStore,\n runRequestInterceptors,\n runResponseInterceptors,\n runErrorInterceptors,\n} from './features/interceptors.js'\nimport { clearCache } from './features/cache.js'\n\nfunction createInstance(initialDefaults: HurlDefaults = {}): HurlInstance {\n let defaults: HurlDefaults = { ...initialDefaults }\n\n const requestInterceptors = createInterceptorStore<RequestInterceptor>()\n const responseInterceptors = createInterceptorStore<ResponseInterceptor>()\n const errorInterceptors = createInterceptorStore<ErrorInterceptor>()\n\n async function request<T>(url: string, options: HurlRequestOptions = {}): Promise<HurlResponse<T>> {\n let finalUrl = url\n let finalOptions = options\n\n const reqInterceptors = requestInterceptors.getAll()\n const resInterceptors = responseInterceptors.getAll()\n const errInterceptors = errorInterceptors.getAll()\n\n if (reqInterceptors.length > 0) {\n const result = await runRequestInterceptors(reqInterceptors, url, options)\n finalUrl = result.url\n finalOptions = result.options\n }\n\n try {\n const response = await executeRequest<T>(finalUrl, finalOptions, defaults)\n\n if (resInterceptors.length > 0) {\n return await runResponseInterceptors(resInterceptors, response)\n }\n\n return response\n } catch (err) {\n if (err instanceof HurlError && errInterceptors.length > 0) {\n const result = await runErrorInterceptors(errInterceptors, err)\n if (!(result instanceof HurlError)) return result as HurlResponse<T>\n throw result\n }\n throw err\n }\n }\n\n const instance: HurlInstance = {\n request,\n\n get<T>(url: string, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'GET' })\n },\n\n post<T>(url: string, body?: unknown, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'POST', body })\n },\n\n put<T>(url: string, body?: unknown, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'PUT', body })\n },\n\n patch<T>(url: string, body?: unknown, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'PATCH', body })\n },\n\n delete<T>(url: string, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'DELETE' })\n },\n\n head(url: string, options?: HurlRequestOptions) {\n return request<void>(url, { ...options, method: 'HEAD' })\n },\n\n options<T>(url: string, options?: HurlRequestOptions) {\n return request<T>(url, { ...options, method: 'OPTIONS' })\n },\n\n all<T extends unknown[]>(requests: { [K in keyof T]: Promise<T[K]> }) {\n return Promise.all(requests) as Promise<T>\n },\n\n defaults: {\n set(d: HurlDefaults) {\n defaults = { ...defaults, ...d }\n },\n get() {\n return { ...defaults }\n },\n reset() {\n defaults = { ...initialDefaults }\n },\n },\n\n interceptors: {\n request: {\n use: requestInterceptors.use.bind(requestInterceptors),\n clear: requestInterceptors.clear.bind(requestInterceptors),\n },\n response: {\n use: responseInterceptors.use.bind(responseInterceptors),\n clear: responseInterceptors.clear.bind(responseInterceptors),\n },\n error: {\n use: errorInterceptors.use.bind(errorInterceptors),\n clear: errorInterceptors.clear.bind(errorInterceptors),\n },\n },\n\n create(newDefaults?: HurlDefaults) {\n return createInstance({ ...defaults, ...newDefaults })\n },\n\n extend(newDefaults?: HurlDefaults) {\n return createInstance({ ...defaults, ...newDefaults })\n },\n }\n\n return instance\n}\n\nconst hurl = createInstance()\n\nexport default hurl\nexport { HurlError, createInstance, clearCache }\nexport type {\n HurlRequestOptions,\n HurlDefaults,\n HurlResponse,\n HurlInstance,\n RequestInterceptor,\n ResponseInterceptor,\n ErrorInterceptor,\n}\n"],"mappings":"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","names":["HurlError","params","buildHttpError","params","HurlError","buildNetworkError","message","requestId","buildTimeoutError","timeout","buildAbortError","buildParseError","trackDownloadProgress","response","onProgress","reader","total","chunks","loaded","done","value","all","offset","chunk","parseHeaders","headers","result","value","key","parseResponseBody","response","requestId","onDownloadProgress","method","contentType","text","trackDownloadProgress","e","buildParseError","buildResponse","data","start","end","applyAuth","headers","query","auth","encoded","normalizeRetry","retry","shouldRetry","error","config","attempt","waitForRetry","base","delay","res","store","getCacheKey","url","config","getFromCache","key","entry","setInCache","response","clearCache","store","inFlight","getInFlight","key","setInFlight","promise","debugRequest","url","options","debugResponse","response","color","debugError","error","generateId","buildUrl","base","url","query","fullUrl","baseOrigin","urlOrigin","params","k","v","buildHeaders","options","defaults","headers","body","buildBody","isTimeoutAbort","err","timedOut","e","executeRequest","requestId","method","start","retryConfig","normalizeRetry","debug","timeout","auth","applyAuth","cacheConfig","shouldCache","cacheKey","getCacheKey","cached","getFromCache","debugResponse","deduplicate","inflight","getInFlight","debugRequest","run","attempt","timeoutId","controller","response","data","parseResponseBody","buildHttpError","parseHeaders","result","buildResponse","setInCache","hurlError","HurlError","buildTimeoutError","buildAbortError","buildNetworkError","shouldRetry","waitForRetry","debugError","promise","setInFlight","createInterceptorStore","fns","fn","i","runRequestInterceptors","interceptors","url","options","current","runResponseInterceptors","response","runErrorInterceptors","error","HurlError","createInstance","initialDefaults","defaults","requestInterceptors","createInterceptorStore","responseInterceptors","errorInterceptors","request","url","options","finalUrl","finalOptions","reqInterceptors","resInterceptors","errInterceptors","result","runRequestInterceptors","response","executeRequest","runResponseInterceptors","err","HurlError","runErrorInterceptors","body","requests","d","newDefaults","hurl","index_default"]}
|