tanstack-fetch 1.0.0 → 1.0.1
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/README.md +53 -3
- package/dist/cli.js +22 -239
- package/dist/client.type-BE-mgD4y.d.cts +116 -0
- package/dist/client.type-D1zw5tFf.d.ts +116 -0
- package/dist/config.type-eG_cuxpu.d.cts +132 -0
- package/dist/config.type-eG_cuxpu.d.ts +132 -0
- package/dist/index.cjs +2 -881
- package/dist/index.d.cts +20 -17
- package/dist/index.d.ts +20 -17
- package/dist/index.js +2 -3
- package/dist/plugins.cjs +1 -0
- package/dist/plugins.d.cts +19 -0
- package/dist/plugins.d.ts +19 -0
- package/dist/plugins.js +1 -0
- package/dist/react.cjs +1 -951
- package/dist/react.d.cts +6 -6
- package/dist/react.d.ts +6 -6
- package/dist/react.js +1 -91
- package/dist/sse.cjs +7 -0
- package/dist/sse.d.cts +9 -0
- package/dist/sse.d.ts +9 -0
- package/dist/sse.js +7 -0
- package/package.json +19 -6
- package/dist/chunk-T27KPHCL.js +0 -867
- package/dist/chunk-T27KPHCL.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/fetch-error-B10Od9AT.d.cts +0 -257
- package/dist/fetch-error-B10Od9AT.d.ts +0 -257
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/react.cjs.map +0 -1
- package/dist/react.js.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import { C as CreateFetchOptions, F as FetchClient
|
|
2
|
-
export {
|
|
1
|
+
import { C as CreateFetchOptions, F as FetchClient } from './client.type-BE-mgD4y.cjs';
|
|
2
|
+
export { a as CreateClientOptions, H as HttpClient, R as RequestOptions, S as SseCallOptions, b as SseEvent, c as SseHandlers, d as SseSubscription } from './client.type-BE-mgD4y.cjs';
|
|
3
|
+
import { F as FetchResult, a as FetchErrorInfo } from './config.type-eG_cuxpu.cjs';
|
|
4
|
+
export { A as AuthConfig, H as HttpError, b as HttpInterceptor, c as HttpMethod, d as HttpResult, I as IncomingHeaders, P as PluginName, R as RequestContext, S as StatusHandler, e as StatusHandlerInput, f as StatusHandlerResult, g as StatusHandlers } from './config.type-eG_cuxpu.cjs';
|
|
3
5
|
|
|
4
|
-
|
|
6
|
+
/** Tiny HTTP client (no SSE). For streams use `tanstack-fetch/sse`. */
|
|
7
|
+
declare const createFetch: (options?: CreateFetchOptions) => Omit<FetchClient, "sse">;
|
|
5
8
|
/** @deprecated Use createFetch */
|
|
6
|
-
declare const createClient: (options?: CreateFetchOptions) => FetchClient
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
declare const
|
|
17
|
-
|
|
18
|
-
declare const
|
|
9
|
+
declare const createClient: (options?: CreateFetchOptions) => Omit<FetchClient, "sse">;
|
|
10
|
+
|
|
11
|
+
type FetchError = Error & {
|
|
12
|
+
readonly name: 'FetchError';
|
|
13
|
+
readonly status: number;
|
|
14
|
+
readonly code: string;
|
|
15
|
+
readonly body: unknown;
|
|
16
|
+
readonly headers: Headers;
|
|
17
|
+
readonly result: FetchResult<never, FetchErrorInfo>;
|
|
18
|
+
};
|
|
19
|
+
declare const createFetchError: (result: FetchResult<never, FetchErrorInfo>) => FetchError;
|
|
20
|
+
declare const isFetchError: (error: unknown) => error is FetchError;
|
|
21
|
+
declare const isAbortError: (error: unknown) => boolean;
|
|
19
22
|
|
|
20
23
|
declare const unwrap: <T>(result: FetchResult<T, FetchErrorInfo>) => T;
|
|
21
24
|
declare const unwrapAsync: <T>(promise: Promise<FetchResult<T, FetchErrorInfo>>) => Promise<T>;
|
|
22
25
|
|
|
23
|
-
export {
|
|
26
|
+
export { CreateFetchOptions, FetchClient, type FetchError, FetchErrorInfo, FetchResult, createClient, createFetch, createFetchError, isAbortError, isFetchError, unwrap, unwrapAsync };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import { C as CreateFetchOptions, F as FetchClient
|
|
2
|
-
export {
|
|
1
|
+
import { C as CreateFetchOptions, F as FetchClient } from './client.type-D1zw5tFf.js';
|
|
2
|
+
export { a as CreateClientOptions, H as HttpClient, R as RequestOptions, S as SseCallOptions, b as SseEvent, c as SseHandlers, d as SseSubscription } from './client.type-D1zw5tFf.js';
|
|
3
|
+
import { F as FetchResult, a as FetchErrorInfo } from './config.type-eG_cuxpu.js';
|
|
4
|
+
export { A as AuthConfig, H as HttpError, b as HttpInterceptor, c as HttpMethod, d as HttpResult, I as IncomingHeaders, P as PluginName, R as RequestContext, S as StatusHandler, e as StatusHandlerInput, f as StatusHandlerResult, g as StatusHandlers } from './config.type-eG_cuxpu.js';
|
|
3
5
|
|
|
4
|
-
|
|
6
|
+
/** Tiny HTTP client (no SSE). For streams use `tanstack-fetch/sse`. */
|
|
7
|
+
declare const createFetch: (options?: CreateFetchOptions) => Omit<FetchClient, "sse">;
|
|
5
8
|
/** @deprecated Use createFetch */
|
|
6
|
-
declare const createClient: (options?: CreateFetchOptions) => FetchClient
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
declare const
|
|
17
|
-
|
|
18
|
-
declare const
|
|
9
|
+
declare const createClient: (options?: CreateFetchOptions) => Omit<FetchClient, "sse">;
|
|
10
|
+
|
|
11
|
+
type FetchError = Error & {
|
|
12
|
+
readonly name: 'FetchError';
|
|
13
|
+
readonly status: number;
|
|
14
|
+
readonly code: string;
|
|
15
|
+
readonly body: unknown;
|
|
16
|
+
readonly headers: Headers;
|
|
17
|
+
readonly result: FetchResult<never, FetchErrorInfo>;
|
|
18
|
+
};
|
|
19
|
+
declare const createFetchError: (result: FetchResult<never, FetchErrorInfo>) => FetchError;
|
|
20
|
+
declare const isFetchError: (error: unknown) => error is FetchError;
|
|
21
|
+
declare const isAbortError: (error: unknown) => boolean;
|
|
19
22
|
|
|
20
23
|
declare const unwrap: <T>(result: FetchResult<T, FetchErrorInfo>) => T;
|
|
21
24
|
declare const unwrapAsync: <T>(promise: Promise<FetchResult<T, FetchErrorInfo>>) => Promise<T>;
|
|
22
25
|
|
|
23
|
-
export {
|
|
26
|
+
export { CreateFetchOptions, FetchClient, type FetchError, FetchErrorInfo, FetchResult, createClient, createFetch, createFetchError, isAbortError, isFetchError, unwrap, unwrapAsync };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
var E=e=>({name:"auth",order:15,onRequest:async t=>{let r=await e.getToken();if(!r)return {action:"continue",context:t};let n=e.header??"authorization",o=e.scheme===void 0?"Bearer":e.scheme,c=o?`${o} ${r}`:r;return t.request.headers.set(n,c),{action:"continue",context:t}}});var z=(e,t)=>{let r=t[e];return r||(e>=500&&e<600&&t["5xx"]?t["5xx"]:e>=400&&e<500&&t["4xx"]?t["4xx"]:t.default)},I=e=>({name:"on-status",order:95,onResponseError:async t=>{let r=t.error?.status??t.response?.status;if(r===void 0||!t.error)return {action:"continue",context:t};let n=z(r,e);if(!n)return {action:"continue",context:t};let o=await n({status:r,error:t.error,context:t});return o?.action==="retry"?{action:"retry",delayMs:o.delayMs}:{action:"continue",context:t}}});var $=e=>{let t={...e.onStatus??{}};return e.onUnauthorized&&t[401]===void 0&&(t[401]=e.onUnauthorized),e.onForbidden&&t[403]===void 0&&(t[403]=e.onForbidden),e.onNotFound&&t[404]===void 0&&(t[404]=e.onNotFound),e.onServerError&&t["5xx"]===void 0&&t[500]===void 0&&(t["5xx"]=e.onServerError),Object.entries(t).some(([,n])=>!!n)?t:void 0},Q=e=>{if(e.auth)return e.auth;if(e.getToken)return {getToken:e.getToken}},R=e=>{let t=[],r=Q(e);r&&t.push(E(r));let n=$(e);return n&&t.push(I(n)),t};var H=new Set(["GET","HEAD","OPTIONS"]),g=new Set([502,503,504]);var F=()=>({name:"retry-idempotent",order:80,onResponseError:e=>H.has(e.request.method)&&e.meta.attempt<e.meta.maxRetries&&!!(e.error&&g.has(e.error.status))?{action:"retry",delayMs:200*(e.meta.attempt+1)}:{action:"continue",context:e}});var T=()=>({name:"sse-resume",order:20,onSseEvent:e=>e.event.event==="ping"||e.event.event==="heartbeat"?{action:"drop"}:{action:"continue",context:e},onSseReconnect:e=>(e.meta.lastEventId&&e.request.headers.set("last-event-id",e.meta.lastEventId),{action:"continue",context:e})});var O=()=>({name:"ssr-forward",order:10,onRequest:e=>e.meta.source==="browser"?{action:"skip"}:(e.incoming?.cookie&&e.request.headers.set("cookie",e.incoming.cookie),e.incoming?.authorization&&e.request.headers.set("authorization",e.incoming.authorization),e.incoming?.requestId&&e.request.headers.set("x-request-id",e.incoming.requestId),{action:"continue",context:e})});var w=()=>({name:"trace",order:0,onRequest:e=>{let t=e.incoming?.requestId??globalThis.crypto.randomUUID();return e.request.headers.set("x-request-id",t),e.meta.requestId=t,{action:"continue",context:e}}});var S={trace:w,"ssr-forward":O,"retry-idempotent":F,"sse-resume":T};var d=e=>{let t=e.ok?{status:e.status,code:"UNKNOWN",message:"Request failed",body:e.data}:e.error,r=new Error(t.message);return Object.defineProperties(r,{name:{value:"FetchError"},status:{value:t.status},code:{value:t.code},body:{value:t.body},headers:{value:e.headers},result:{value:e.ok?{ok:false,status:t.status,error:t,headers:e.headers}:e}}),r},J=e=>!!(e&&typeof e=="object"&&e.name==="FetchError"&&"status"in e&&"code"in e),h=e=>e instanceof DOMException&&e.name==="AbortError"||e instanceof Error&&e.name==="AbortError";var G=(e,t)=>{let r=e.match;return r?!(r.operation&&r.operation!==t.meta.operation||r.method&&r.method!==t.request.method||r.pathPrefix&&!t.request.url.pathname.startsWith(r.pathPrefix)||r.status!==void 0&&t.response?.status!==r.status):true},q=(e,t)=>{let r=new Set(t?.eject??[]);return [...e,...t?.use??[]].filter(o=>!r.has(o.name)).sort((o,c)=>(o.order??100)-(c.order??100))},f=async(e,t,r)=>{let n=r;for(let o of e){if(!G(o,n))continue;let c=t(o);if(!c)continue;let s=await c(n)??{action:"continue",context:n};if(s.action!=="skip"){if(s.action==="drop")return {type:"drop"};if(s.action==="retry")return {type:"retry",delayMs:s.delayMs};if(s.action==="short-circuit")return {type:"short-circuit",result:s.result};n=s.context??n;}}return {type:"continue",context:n}};var K=e=>!!(e&&e.includes("json")),b=async(e,t)=>{if(e.status===204)return null;if(t==="blob")return e.blob();if(t==="text")return e.text();let r=e.headers.get("content-type");if(t==="json"||K(r)){let n=await e.text();return n?JSON.parse(n):null}return e.text()},x=(e,t)=>{if(e!=null)return typeof e=="string"||e instanceof FormData||e instanceof Blob||e instanceof URLSearchParams||e instanceof ArrayBuffer?e:(t.has("content-type")||t.set("content-type","application/json"),JSON.stringify(e))};var l=(e,t)=>{let r=t&&typeof t=="object"?t:void 0,n=typeof r?.code=="string"?r.code:"HTTP_ERROR",o=typeof r?.message=="string"?r.message:`Request failed with status ${e}`;return {status:e,code:n,message:o,body:t}},C=(e,t,r)=>({ok:true,status:e,data:t,headers:r}),y=(e,t,r)=>({ok:false,status:e,error:t,headers:r}),k=e=>{if(e.ok)return e.data;throw d(e)},X=async e=>k(await e);var A=async e=>{let{context:t,interceptors:r,fetchImpl:n,client:o,requestOptions:c}=e;try{let s=await n(t.request.url,{method:t.request.method,headers:t.request.headers,body:x(t.request.body,t.request.headers),signal:t.request.signal,credentials:o.credentials});return Y({interceptors:r,context:t,response:s,requestOptions:c})}catch(s){if(h(s))throw s;t.error=l(0,{code:"NETWORK_ERROR",message:s instanceof Error?s.message:"Network error"});let a=await f(r,u=>u.onRequestError,t);if(a.type==="retry")return {kind:"retry",delayMs:a.delayMs};if(a.type==="short-circuit")return {kind:"result",result:a.result};throw d(y(0,t.error,new Headers))}},Y=async e=>{let{interceptors:t,response:r,requestOptions:n}=e,o={...e.context,response:r,data:await b(r,n?.parseAs)},c=r.ok?i=>i.onResponse:i=>i.onResponseError;r.ok||(o.error=l(r.status,o.data));let s=await f(t,c,o);if(s.type==="retry")return {kind:"retry",delayMs:s.delayMs};if(s.type==="short-circuit")return {kind:"result",result:s.result};let a=s.type==="continue"?s.context:o;return {kind:"result",result:r.ok?C(r.status,a.data,r.headers):y(r.status,a.error??l(r.status,a.data),r.headers)}};var Z=(e,t)=>e.replace(/:([A-Za-z0-9_]+)/g,(r,n)=>{let o=t?.[n];if(o===void 0)throw new Error(`tanstack-fetch: missing path param "${n}"`);return encodeURIComponent(String(o))}),V=(e,t)=>{t&&Object.entries(t).forEach(([r,n])=>{n!=null&&e.searchParams.set(r,String(n));});},P=(e,t)=>{if(!(t==="browser"||!e)&&!/^https?:\/\//i.test(e))throw new Error("tanstack-fetch: set an absolute baseUrl for SSR and Edge runtimes")},M=(e,t,r,n)=>{let o=Z(t.replace(/\{([A-Za-z0-9_]+)\}/g,":$1"),r),c=/^https?:\/\//i.test(o)?o:`${(e??"").replace(/\/$/,"")}/${o.replace(/^\//,"")}`,s=new URL(c);return V(s,n),s};var ee=e=>new Headers(e),v=(...e)=>{let t=new Headers;return e.forEach(r=>{r&&new Headers(r).forEach((n,o)=>{t.set(o,n);});}),t},U=async e=>{if(!e)return new Headers;let t=typeof e=="function"?await e():e;return ee(t)};var _=e=>new Promise(t=>setTimeout(t,e)),D=e=>{let t=e.filter(n=>!!n);if(t.length===0)return;if(t.length===1)return t[0];if(typeof AbortSignal.any=="function")return AbortSignal.any(t);let r=new AbortController;return t.forEach(n=>{if(n.aborted){r.abort(n.reason);return}n.addEventListener("abort",()=>r.abort(n.reason),{once:true});}),r.signal},N=e=>{if(!e||e<=0)return;let t=new AbortController,r=setTimeout(()=>t.abort(new Error("tanstack-fetch: request timed out")),e);return t.signal.addEventListener("abort",()=>clearTimeout(r),{once:true}),t.signal};var re=async e=>{if(e.incoming)return typeof e.incoming=="function"?e.incoming():e.incoming},ne=async(e,t)=>{let{method:r,path:n,requestOptions:o,client:c}=e,s=c.source??"browser";P(c.baseUrl,s);let a=M(c.baseUrl,n,o?.params,o?.query),u=v(await U(c.headers),o?.headers),i=o?.timeoutMs??c.timeoutMs??3e4,p=D([o?.signal,N(i)]);return {request:{method:r,url:a,headers:u,body:o?.body,signal:p},incoming:await re(c),meta:{attempt:t,maxRetries:c.maxRetries??2,source:s,operation:o?.operation}}},j=async e=>{let t=q(e.interceptors,e.requestOptions?.interceptors),r=e.client.fetch??globalThis.fetch;if(!r)throw new Error("tanstack-fetch: fetch is not available");let n=0,o=e.client.maxRetries??2;for(;n<=o;){let c=await oe({args:e,interceptors:t,fetchImpl:r,attempt:n});if(c.kind==="result")return c.result;n+=1,c.delayMs&&await _(c.delayMs);}throw new Error("tanstack-fetch: exceeded retry budget")},oe=async e=>{let t=await ne(e.args,e.attempt),r=await f(e.interceptors,n=>n.onRequest,t);return r.type==="short-circuit"?{kind:"result",result:r.result}:r.type==="retry"?{kind:"retry",delayMs:r.delayMs}:(r.type==="continue"&&(t=r.context),A({requestOptions:e.args.requestOptions,client:e.args.client,interceptors:e.interceptors,fetchImpl:e.fetchImpl,context:t}))};var se=(e={})=>{let t={throwOnError:true,...e},r=[...R(t),...(t.plugins??[]).map(n=>S[n]()),...t.interceptors??[]];return {clientOptions:t,interceptors:r}},ce=e=>{let{clientOptions:t,interceptors:r}=e,n=(a,u,i)=>{let p={...u,name:a,order:i?.order??u.order},m=r.findIndex(L=>L.name===a);if(m>=0){r.splice(m,1,p);return}r.push(p);},o=a=>{let u=r.findIndex(i=>i.name===a);u>=0&&r.splice(u,1);},c=(async(a,u,i)=>{let p=await j({method:a,path:u,requestOptions:i,client:t,interceptors:r}),m=i?.throwOnError??t.throwOnError??true;if(!p.ok&&m)throw d(p);return m&&p.ok?p.data:p}),s=a=>(i,p)=>c(a,i,p);return {use:n,eject:o,request:c,get:s("GET"),post:s("POST"),put:s("PUT"),patch:s("PATCH"),delete:s("DELETE")}},B=e=>ce(se(e)),ae=B;
|
|
2
|
+
export{ae as createClient,B as createFetch,d as createFetchError,h as isAbortError,J as isFetchError,k as unwrap,X as unwrapAsync};
|
package/dist/plugins.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';var c=e=>({name:"auth",order:15,onRequest:async t=>{let r=await e.getToken();if(!r)return {action:"continue",context:t};let n=e.header??"authorization",o=e.scheme===void 0?"Bearer":e.scheme,f=o?`${o} ${r}`:r;return t.request.headers.set(n,f),{action:"continue",context:t}}});var u=new Set(["GET","HEAD","OPTIONS"]),m=new Set([502,503,504]);var s=()=>({name:"retry-idempotent",order:80,onResponseError:e=>u.has(e.request.method)&&e.meta.attempt<e.meta.maxRetries&&!!(e.error&&m.has(e.error.status))?{action:"retry",delayMs:200*(e.meta.attempt+1)}:{action:"continue",context:e}});var a=()=>({name:"sse-resume",order:20,onSseEvent:e=>e.event.event==="ping"||e.event.event==="heartbeat"?{action:"drop"}:{action:"continue",context:e},onSseReconnect:e=>(e.meta.lastEventId&&e.request.headers.set("last-event-id",e.meta.lastEventId),{action:"continue",context:e})});var p=()=>({name:"ssr-forward",order:10,onRequest:e=>e.meta.source==="browser"?{action:"skip"}:(e.incoming?.cookie&&e.request.headers.set("cookie",e.incoming.cookie),e.incoming?.authorization&&e.request.headers.set("authorization",e.incoming.authorization),e.incoming?.requestId&&e.request.headers.set("x-request-id",e.incoming.requestId),{action:"continue",context:e})});var y=(e,t)=>{let r=t[e];return r||(e>=500&&e<600&&t["5xx"]?t["5xx"]:e>=400&&e<500&&t["4xx"]?t["4xx"]:t.default)},d=e=>({name:"on-status",order:95,onResponseError:async t=>{let r=t.error?.status??t.response?.status;if(r===void 0||!t.error)return {action:"continue",context:t};let n=y(r,e);if(!n)return {action:"continue",context:t};let o=await n({status:r,error:t.error,context:t});return o?.action==="retry"?{action:"retry",delayMs:o.delayMs}:{action:"continue",context:t}}});var i=()=>({name:"trace",order:0,onRequest:e=>{let t=e.incoming?.requestId??globalThis.crypto.randomUUID();return e.request.headers.set("x-request-id",t),e.meta.requestId=t,{action:"continue",context:e}}});var I={trace:i,"ssr-forward":p,"retry-idempotent":s,"sse-resume":a};var N=e=>e.map(t=>I[t]());exports.createAuthInterceptor=c;exports.createRetryIdempotentInterceptor=s;exports.createSseResumeInterceptor=a;exports.createSsrForwardInterceptor=p;exports.createStatusInterceptor=d;exports.createTraceInterceptor=i;exports.pluginFactories=I;exports.resolvePlugins=N;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { A as AuthConfig, b as HttpInterceptor, g as StatusHandlers, P as PluginName } from './config.type-eG_cuxpu.cjs';
|
|
2
|
+
|
|
3
|
+
declare const createAuthInterceptor: (auth: AuthConfig) => HttpInterceptor;
|
|
4
|
+
|
|
5
|
+
declare const createRetryIdempotentInterceptor: () => HttpInterceptor;
|
|
6
|
+
|
|
7
|
+
declare const createSseResumeInterceptor: () => HttpInterceptor;
|
|
8
|
+
|
|
9
|
+
declare const createSsrForwardInterceptor: () => HttpInterceptor;
|
|
10
|
+
|
|
11
|
+
declare const createStatusInterceptor: (handlers: StatusHandlers) => HttpInterceptor;
|
|
12
|
+
|
|
13
|
+
declare const createTraceInterceptor: () => HttpInterceptor;
|
|
14
|
+
|
|
15
|
+
declare const pluginFactories: Record<PluginName, () => HttpInterceptor>;
|
|
16
|
+
|
|
17
|
+
declare const resolvePlugins: (names: PluginName[]) => HttpInterceptor[];
|
|
18
|
+
|
|
19
|
+
export { HttpInterceptor, PluginName, createAuthInterceptor, createRetryIdempotentInterceptor, createSseResumeInterceptor, createSsrForwardInterceptor, createStatusInterceptor, createTraceInterceptor, pluginFactories, resolvePlugins };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { A as AuthConfig, b as HttpInterceptor, g as StatusHandlers, P as PluginName } from './config.type-eG_cuxpu.js';
|
|
2
|
+
|
|
3
|
+
declare const createAuthInterceptor: (auth: AuthConfig) => HttpInterceptor;
|
|
4
|
+
|
|
5
|
+
declare const createRetryIdempotentInterceptor: () => HttpInterceptor;
|
|
6
|
+
|
|
7
|
+
declare const createSseResumeInterceptor: () => HttpInterceptor;
|
|
8
|
+
|
|
9
|
+
declare const createSsrForwardInterceptor: () => HttpInterceptor;
|
|
10
|
+
|
|
11
|
+
declare const createStatusInterceptor: (handlers: StatusHandlers) => HttpInterceptor;
|
|
12
|
+
|
|
13
|
+
declare const createTraceInterceptor: () => HttpInterceptor;
|
|
14
|
+
|
|
15
|
+
declare const pluginFactories: Record<PluginName, () => HttpInterceptor>;
|
|
16
|
+
|
|
17
|
+
declare const resolvePlugins: (names: PluginName[]) => HttpInterceptor[];
|
|
18
|
+
|
|
19
|
+
export { HttpInterceptor, PluginName, createAuthInterceptor, createRetryIdempotentInterceptor, createSseResumeInterceptor, createSsrForwardInterceptor, createStatusInterceptor, createTraceInterceptor, pluginFactories, resolvePlugins };
|
package/dist/plugins.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var c=e=>({name:"auth",order:15,onRequest:async t=>{let r=await e.getToken();if(!r)return {action:"continue",context:t};let n=e.header??"authorization",o=e.scheme===void 0?"Bearer":e.scheme,f=o?`${o} ${r}`:r;return t.request.headers.set(n,f),{action:"continue",context:t}}});var u=new Set(["GET","HEAD","OPTIONS"]),m=new Set([502,503,504]);var s=()=>({name:"retry-idempotent",order:80,onResponseError:e=>u.has(e.request.method)&&e.meta.attempt<e.meta.maxRetries&&!!(e.error&&m.has(e.error.status))?{action:"retry",delayMs:200*(e.meta.attempt+1)}:{action:"continue",context:e}});var a=()=>({name:"sse-resume",order:20,onSseEvent:e=>e.event.event==="ping"||e.event.event==="heartbeat"?{action:"drop"}:{action:"continue",context:e},onSseReconnect:e=>(e.meta.lastEventId&&e.request.headers.set("last-event-id",e.meta.lastEventId),{action:"continue",context:e})});var p=()=>({name:"ssr-forward",order:10,onRequest:e=>e.meta.source==="browser"?{action:"skip"}:(e.incoming?.cookie&&e.request.headers.set("cookie",e.incoming.cookie),e.incoming?.authorization&&e.request.headers.set("authorization",e.incoming.authorization),e.incoming?.requestId&&e.request.headers.set("x-request-id",e.incoming.requestId),{action:"continue",context:e})});var y=(e,t)=>{let r=t[e];return r||(e>=500&&e<600&&t["5xx"]?t["5xx"]:e>=400&&e<500&&t["4xx"]?t["4xx"]:t.default)},d=e=>({name:"on-status",order:95,onResponseError:async t=>{let r=t.error?.status??t.response?.status;if(r===void 0||!t.error)return {action:"continue",context:t};let n=y(r,e);if(!n)return {action:"continue",context:t};let o=await n({status:r,error:t.error,context:t});return o?.action==="retry"?{action:"retry",delayMs:o.delayMs}:{action:"continue",context:t}}});var i=()=>({name:"trace",order:0,onRequest:e=>{let t=e.incoming?.requestId??globalThis.crypto.randomUUID();return e.request.headers.set("x-request-id",t),e.meta.requestId=t,{action:"continue",context:e}}});var I={trace:i,"ssr-forward":p,"retry-idempotent":s,"sse-resume":a};var N=e=>e.map(t=>I[t]());export{c as createAuthInterceptor,s as createRetryIdempotentInterceptor,a as createSseResumeInterceptor,p as createSsrForwardInterceptor,d as createStatusInterceptor,i as createTraceInterceptor,I as pluginFactories,N as resolvePlugins};
|