@zayne-labs/callapi 1.2.1 → 1.3.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/dist/cjs/{index-Dtj-i4H7.d.cts → index-BlA2n_X7.d.cts} +41 -46
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +5 -5
- package/dist/cjs/options/index.cjs +1 -1
- package/dist/cjs/options/index.cjs.map +1 -1
- package/dist/cjs/options/index.d.cts +5 -5
- package/dist/cjs/utils/index.cjs.map +1 -1
- package/dist/cjs/utils/index.d.cts +1 -1
- package/dist/esm/chunk-ARVXNKNE.js +1 -0
- package/dist/esm/chunk-ARVXNKNE.js.map +1 -0
- package/dist/esm/chunk-BJB7GSNU.js +1 -0
- package/dist/esm/chunk-BJB7GSNU.js.map +1 -0
- package/dist/esm/{index-Dtj-i4H7.d.ts → index-BlA2n_X7.d.ts} +41 -46
- package/dist/esm/index.d.ts +5 -5
- package/dist/esm/index.js +1 -1
- package/dist/esm/options/index.d.ts +5 -5
- package/dist/esm/options/index.js +1 -1
- package/dist/esm/options/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -1
- package/dist/esm/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-6J5ULO5O.js +0 -1
- package/dist/esm/chunk-6J5ULO5O.js.map +0 -1
- package/dist/esm/chunk-T4SK5DXR.js +0 -1
- package/dist/esm/chunk-T4SK5DXR.js.map +0 -1
|
@@ -48,23 +48,25 @@ type CustomAuth = {
|
|
|
48
48
|
type Auth = BearerOrTokenAuth | BasicAuth | CustomAuth;
|
|
49
49
|
|
|
50
50
|
type AnyString = string & {
|
|
51
|
-
|
|
51
|
+
z_placeholder?: never;
|
|
52
52
|
};
|
|
53
53
|
type AnyNumber = number & {
|
|
54
|
-
|
|
54
|
+
z_placeholder?: never;
|
|
55
55
|
};
|
|
56
|
+
type AnyObject = Record<string, any>;
|
|
56
57
|
type AnyFunction<TResult = any> = (...args: any[]) => TResult;
|
|
57
58
|
type UnmaskType<TValue> = {
|
|
58
59
|
_: TValue;
|
|
59
60
|
}["_"];
|
|
60
61
|
type Awaitable<TValue> = Promise<TValue> | TValue;
|
|
61
62
|
type CommonRequestHeaders = "Access-Control-Allow-Credentials" | "Access-Control-Allow-Headers" | "Access-Control-Allow-Methods" | "Access-Control-Allow-Origin" | "Access-Control-Expose-Headers" | "Access-Control-Max-Age" | "Age" | "Allow" | "Cache-Control" | "Clear-Site-Data" | "Content-Disposition" | "Content-Encoding" | "Content-Language" | "Content-Length" | "Content-Location" | "Content-Range" | "Content-Security-Policy-Report-Only" | "Content-Security-Policy" | "Cookie" | "Cross-Origin-Embedder-Policy" | "Cross-Origin-Opener-Policy" | "Cross-Origin-Resource-Policy" | "Date" | "ETag" | "Expires" | "Last-Modified" | "Location" | "Permissions-Policy" | "Pragma" | "Retry-After" | "Save-Data" | "Sec-CH-Prefers-Color-Scheme" | "Sec-CH-Prefers-Reduced-Motion" | "Sec-CH-UA-Arch" | "Sec-CH-UA-Bitness" | "Sec-CH-UA-Form-Factor" | "Sec-CH-UA-Full-Version-List" | "Sec-CH-UA-Full-Version" | "Sec-CH-UA-Mobile" | "Sec-CH-UA-Model" | "Sec-CH-UA-Platform-Version" | "Sec-CH-UA-Platform" | "Sec-CH-UA-WoW64" | "Sec-CH-UA" | "Sec-Fetch-Dest" | "Sec-Fetch-Mode" | "Sec-Fetch-Site" | "Sec-Fetch-User" | "Sec-GPC" | "Server-Timing" | "Server" | "Service-Worker-Navigation-Preload" | "Set-Cookie" | "Strict-Transport-Security" | "Timing-Allow-Origin" | "Trailer" | "Transfer-Encoding" | "Upgrade" | "Vary" | "Warning" | "WWW-Authenticate" | "X-Content-Type-Options" | "X-DNS-Prefetch-Control" | "X-Frame-Options" | "X-Permitted-Cross-Domain-Policies" | "X-Powered-By" | "X-Robots-Tag" | "X-XSS-Protection";
|
|
63
|
+
type CommonAuthorizationHeaders = "Basic" | "Bearer" | "Token";
|
|
62
64
|
type CommonContentTypes = "application/epub+zip" | "application/gzip" | "application/json" | "application/ld+json" | "application/octet-stream" | "application/ogg" | "application/pdf" | "application/rtf" | "application/vnd.ms-fontobject" | "application/wasm" | "application/xhtml+xml" | "application/xml" | "application/zip" | "audio/aac" | "audio/mpeg" | "audio/ogg" | "audio/opus" | "audio/webm" | "audio/x-midi" | "font/otf" | "font/ttf" | "font/woff" | "font/woff2" | "image/avif" | "image/bmp" | "image/gif" | "image/jpeg" | "image/png" | "image/svg+xml" | "image/tiff" | "image/webp" | "image/x-icon" | "model/gltf-binary" | "model/gltf+json" | "text/calendar" | "text/css" | "text/csv" | "text/html" | "text/javascript" | "text/plain" | "video/3gpp" | "video/3gpp2" | "video/av1" | "video/mp2t" | "video/mp4" | "video/mpeg" | "video/ogg" | "video/webm" | "video/x-msvideo";
|
|
63
65
|
|
|
64
66
|
type PluginInitContext<TData = unknown, TErrorData = unknown> = {
|
|
65
67
|
initURL: string;
|
|
66
68
|
options: CombinedCallApiExtraOptions<TData, TErrorData>;
|
|
67
|
-
request:
|
|
69
|
+
request: CallApiRequestOptionsForHooks;
|
|
68
70
|
};
|
|
69
71
|
type CallApiPlugin<TData = unknown, TErrorData = unknown> = {
|
|
70
72
|
/**
|
|
@@ -74,7 +76,7 @@ type CallApiPlugin<TData = unknown, TErrorData = unknown> = {
|
|
|
74
76
|
/**
|
|
75
77
|
* Hooks/Interceptors for the plugin
|
|
76
78
|
*/
|
|
77
|
-
hooks?:
|
|
79
|
+
hooks?: InterceptorsOrInterceptorArray<TData, TErrorData>;
|
|
78
80
|
/**
|
|
79
81
|
* @description A unique id for the plugin
|
|
80
82
|
*/
|
|
@@ -107,11 +109,6 @@ interface RetryOptions<TErrorData> {
|
|
|
107
109
|
* @default 0
|
|
108
110
|
*/
|
|
109
111
|
retryAttempts?: number;
|
|
110
|
-
/**
|
|
111
|
-
* @description HTTP status codes that trigger a retry
|
|
112
|
-
* @default [409, 425, 429, 500, 502, 503, 504]
|
|
113
|
-
*/
|
|
114
|
-
retryCodes?: Array<409 | 425 | 429 | 500 | 502 | 503 | 504 | AnyNumber>;
|
|
115
112
|
/**
|
|
116
113
|
* @description Callback whose return value determines if a request should be retried or not
|
|
117
114
|
*/
|
|
@@ -135,6 +132,11 @@ interface RetryOptions<TErrorData> {
|
|
|
135
132
|
* @default ["GET", "POST"]
|
|
136
133
|
*/
|
|
137
134
|
retryMethods?: Array<"GET" | "POST" | AnyString>;
|
|
135
|
+
/**
|
|
136
|
+
* @description HTTP status codes that trigger a retry
|
|
137
|
+
* @default [409, 425, 429, 500, 502, 503, 504]
|
|
138
|
+
*/
|
|
139
|
+
retryStatusCodes?: Array<409 | 425 | 429 | 500 | 502 | 503 | 504 | AnyNumber>;
|
|
138
140
|
/**
|
|
139
141
|
* @description Strategy to use when retrying
|
|
140
142
|
* @default "linear"
|
|
@@ -155,6 +157,7 @@ declare const getResponseType: <TResponse>(response: Response, parser?: Required
|
|
|
155
157
|
stream: () => ReadableStream<Uint8Array<ArrayBufferLike>> | null;
|
|
156
158
|
text: () => Promise<TResponse>;
|
|
157
159
|
};
|
|
160
|
+
type ErrorObjectUnion<TErrorData = unknown> = PossibleHTTPError<TErrorData> | PossibleJavaScriptError;
|
|
158
161
|
declare const isHTTPError: <TErrorData>(error: ErrorObjectUnion<TErrorData> | null) => error is PossibleHTTPError<TErrorData>;
|
|
159
162
|
type ErrorDetails<TErrorResponse> = {
|
|
160
163
|
defaultErrorMessage: string;
|
|
@@ -184,7 +187,7 @@ interface CallApiRequestOptions extends Pick<RequestInit, FetchSpecificKeysUnion
|
|
|
184
187
|
/**
|
|
185
188
|
* @description Headers to be used in the request.
|
|
186
189
|
*/
|
|
187
|
-
headers?: Record<"Content-Type", CommonContentTypes> | Record<CommonRequestHeaders | AnyString, string> | RequestInit["headers"];
|
|
190
|
+
headers?: Record<"Authorization", CommonAuthorizationHeaders> | Record<"Content-Type", CommonContentTypes> | Record<CommonRequestHeaders | AnyString, string> | RequestInit["headers"];
|
|
188
191
|
/**
|
|
189
192
|
* @description HTTP method for the request.
|
|
190
193
|
* @default "GET"
|
|
@@ -196,7 +199,7 @@ interface CallApiRequestOptionsForHooks extends CallApiRequestOptions {
|
|
|
196
199
|
}
|
|
197
200
|
interface Register {
|
|
198
201
|
}
|
|
199
|
-
type
|
|
202
|
+
type Meta = Register extends {
|
|
200
203
|
meta?: infer TMeta extends Record<string, unknown>;
|
|
201
204
|
} ? TMeta : never;
|
|
202
205
|
interface Interceptors<TData = unknown, TErrorData = unknown> {
|
|
@@ -230,13 +233,12 @@ interface Interceptors<TData = unknown, TErrorData = unknown> {
|
|
|
230
233
|
*/
|
|
231
234
|
onSuccess?: (context: SuccessContext<TData>) => Awaitable<unknown>;
|
|
232
235
|
}
|
|
233
|
-
type
|
|
234
|
-
[Key in keyof Interceptors<TData, TErrorData>]: Array<Interceptors<TData, TErrorData>[Key]>;
|
|
236
|
+
type InterceptorsOrInterceptorArray<TData = unknown, TErrorData = unknown> = {
|
|
237
|
+
[Key in keyof Interceptors<TData, TErrorData>]: Interceptors<TData, TErrorData>[Key] | Array<Interceptors<TData, TErrorData>[Key]>;
|
|
235
238
|
};
|
|
236
|
-
type InterceptorsOrInterceptorsArray<TData, TErrorData> = Interceptors<TData, TErrorData> | InterceptorsArray<TData, TErrorData>;
|
|
237
239
|
type FetchImpl = UnmaskType<(input: string | Request | URL, init?: RequestInit) => Promise<Response>>;
|
|
238
240
|
type CallApiPluginArray<TData, TErrorData> = Array<CallApiPlugin<TData, TErrorData>>;
|
|
239
|
-
type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion> =
|
|
241
|
+
type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = InterceptorsOrInterceptorArray<TData, TErrorData> & RetryOptions<TErrorData> & TMoreOptions & {
|
|
240
242
|
/**
|
|
241
243
|
* @description Authorization header value.
|
|
242
244
|
*/
|
|
@@ -266,11 +268,9 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
266
268
|
dedupeKey?: string;
|
|
267
269
|
/**
|
|
268
270
|
* @description Defines the deduplication strategy for the request, can be set to "none" | "defer" | "cancel".
|
|
269
|
-
* - If set to "
|
|
270
|
-
*
|
|
271
|
-
* - If set to "cancel"(default), the previous pending request with the same request key will be cancelled and lets the new request through.
|
|
272
|
-
*
|
|
271
|
+
* - If set to "cancel", the previous pending request with the same request key will be cancelled and lets the new request through.
|
|
273
272
|
* - If set to "defer", all new request with the same request key will be share the same response, until the previous one is completed.
|
|
273
|
+
* - If set to "none", deduplication is disabled.
|
|
274
274
|
* @default "cancel"
|
|
275
275
|
*/
|
|
276
276
|
dedupeStrategy?: "cancel" | "defer" | "none";
|
|
@@ -298,7 +298,7 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
298
298
|
* @description - Controls what order in which the merged hooks execute
|
|
299
299
|
* @default "mainHooksLast"
|
|
300
300
|
*/
|
|
301
|
-
mergedHooksExecutionOrder?: "
|
|
301
|
+
mergedHooksExecutionOrder?: "mainHooksAfterPlugins" | "mainHooksBeforePlugins";
|
|
302
302
|
/**
|
|
303
303
|
* @description - An optional field you can fill with additional information,
|
|
304
304
|
* to associate with the request, typically used for logging or tracing.
|
|
@@ -322,7 +322,7 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
322
322
|
* });
|
|
323
323
|
* ```
|
|
324
324
|
*/
|
|
325
|
-
meta?:
|
|
325
|
+
meta?: Meta;
|
|
326
326
|
/**
|
|
327
327
|
* @description Params to be appended to the URL (i.e: /:id)
|
|
328
328
|
*/
|
|
@@ -370,23 +370,19 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
370
370
|
*/
|
|
371
371
|
timeout?: number;
|
|
372
372
|
};
|
|
373
|
-
declare const optionsEnumToOmitFromBase: ["extend", "dedupeKey"];
|
|
374
|
-
interface BaseCallApiExtraOptions<TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion> extends Omit<CallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode>, typeof optionsEnumToOmitFromBase[number]> {
|
|
375
|
-
}
|
|
376
373
|
declare const optionsEnumToExtendFromBase: "plugins"[];
|
|
377
|
-
|
|
374
|
+
type CallApiExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = ExtraOptions<TData, TErrorData, TResultMode, TMoreOptions> & {
|
|
378
375
|
/**
|
|
379
376
|
* @description Options that should extend the base options.
|
|
380
377
|
*/
|
|
381
|
-
extend?: Pick<ExtraOptions<TData, TErrorData, TResultMode>, typeof optionsEnumToExtendFromBase[number]>;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
type CallApiParameters<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion> = [initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode>];
|
|
378
|
+
extend?: Pick<ExtraOptions<TData, TErrorData, TResultMode, TMoreOptions>, (typeof optionsEnumToExtendFromBase)[number]>;
|
|
379
|
+
};
|
|
380
|
+
declare const optionsEnumToOmitFromBase: ("dedupeKey" | "extend")[];
|
|
381
|
+
type BaseCallApiExtraOptions<TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = Omit<CallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode, TMoreOptions>, (typeof optionsEnumToOmitFromBase)[number]>;
|
|
382
|
+
type CombinedCallApiExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = BaseCallApiExtraOptions<TData, TErrorData, TResultMode, TMoreOptions> & CallApiExtraOptions<TData, TErrorData, TResultMode, TMoreOptions>;
|
|
383
|
+
type CallApiConfig<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = CallApiExtraOptions<TData, TErrorData, TResultMode, TMoreOptions> & CallApiRequestOptions;
|
|
384
|
+
type BaseCallApiConfig<TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TBaseMoreOptions extends AnyObject = object> = BaseCallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode, TBaseMoreOptions> & CallApiRequestOptions;
|
|
385
|
+
type CallApiParameters<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = [initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TMoreOptions>];
|
|
390
386
|
type RequestContext = UnmaskType<{
|
|
391
387
|
options: CombinedCallApiExtraOptions;
|
|
392
388
|
request: CallApiRequestOptionsForHooks;
|
|
@@ -410,6 +406,17 @@ type SuccessContext<TData> = UnmaskType<{
|
|
|
410
406
|
request: CallApiRequestOptionsForHooks;
|
|
411
407
|
response: Response;
|
|
412
408
|
}>;
|
|
409
|
+
type PossibleJavascriptErrorNames = "AbortError" | "Error" | "SyntaxError" | "TimeoutError" | "TypeError" | (`${string}Error` & {});
|
|
410
|
+
type PossibleJavaScriptError = UnmaskType<{
|
|
411
|
+
errorData: DOMException | Error | SyntaxError | TypeError;
|
|
412
|
+
message: string;
|
|
413
|
+
name: PossibleJavascriptErrorNames;
|
|
414
|
+
}>;
|
|
415
|
+
type PossibleHTTPError<TErrorData> = UnmaskType<{
|
|
416
|
+
errorData: TErrorData;
|
|
417
|
+
message: string;
|
|
418
|
+
name: "HTTPError";
|
|
419
|
+
}>;
|
|
413
420
|
type RequestErrorContext = UnmaskType<{
|
|
414
421
|
error: PossibleJavaScriptError;
|
|
415
422
|
options: CombinedCallApiExtraOptions;
|
|
@@ -432,18 +439,6 @@ type ErrorContext<TErrorData> = UnmaskType<{
|
|
|
432
439
|
request: CallApiRequestOptionsForHooks;
|
|
433
440
|
response: null;
|
|
434
441
|
}>;
|
|
435
|
-
type PossibleJavascriptErrorNames = "AbortError" | "Error" | "SyntaxError" | "TimeoutError" | "TypeError" | (`${string}Error` & {});
|
|
436
|
-
type PossibleJavaScriptError = UnmaskType<{
|
|
437
|
-
errorData: DOMException | Error | SyntaxError | TypeError;
|
|
438
|
-
message: string;
|
|
439
|
-
name: PossibleJavascriptErrorNames;
|
|
440
|
-
}>;
|
|
441
|
-
type PossibleHTTPError<TErrorData> = UnmaskType<{
|
|
442
|
-
errorData: TErrorData;
|
|
443
|
-
message: string;
|
|
444
|
-
name: "HTTPError";
|
|
445
|
-
}>;
|
|
446
|
-
type ErrorObjectUnion<TErrorData = unknown> = PossibleHTTPError<TErrorData> | PossibleJavaScriptError;
|
|
447
442
|
type CallApiResultSuccessVariant<TData> = {
|
|
448
443
|
data: TData;
|
|
449
444
|
error: null;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,r=Object.defineProperty,t=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,n={};((e,t)=>{for(var o in t)r(e,o,{get:t[o],enumerable:!0})})(n,{callApi:()=>H,createFetchClient:()=>A,definePlugin:()=>
|
|
1
|
+
"use strict";var e,r=Object.defineProperty,t=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,n={};((e,t)=>{for(var o in t)r(e,o,{get:t[o],enumerable:!0})})(n,{callApi:()=>H,createFetchClient:()=>A,definePlugin:()=>j}),module.exports=(e=n,((e,n,a,i)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let l of o(n))s.call(e,l)||l===a||r(e,l,{get:()=>n[l],enumerable:!(i=t(n,l))||i.enumerable});return e})(r({},"__esModule",{value:!0}),e));var a=e=>Array.isArray(e),i=e=>{if(!(e=>"object"==typeof e&&null!==e)(e))return!1;const r=Object.getPrototypeOf(e);return(null==r||r===Object.prototype||null===Object.getPrototypeOf(r))&&!(Symbol.toStringTag in e)},l=e=>"function"==typeof e,u=e=>"string"==typeof e,c=e=>l(e)?e():e,p=e=>{if(void 0!==e){if(u(e)||null===e)return{Authorization:`Bearer ${e}`};switch(e.type){case"Basic":{const r=c(e.username),t=c(e.password);if(void 0===r||void 0===t)return;return{Authorization:`Basic ${globalThis.btoa(`${r}:${t}`)}`}}case"Custom":{const r=c(e.value);if(void 0===r)return;return{Authorization:`${c(e.prefix)} ${r}`}}default:{const r=c(e.bearer),t=c(e.token);return"token"in e&&void 0!==t?{Authorization:`Token ${t}`}:void 0!==r&&{Authorization:`Bearer ${r}`}}}}},d=["extend","dedupeKey"],f=["body","integrity","method","headers","signal","cache","redirect","window","credentials","keepalive","referrer","priority","mode","referrerPolicy"],y={408:"Request Timeout",409:"Conflict",425:"Too Early",429:"Too Many Requests",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"},m=["GET","POST"],g=Object.keys(y).map(Number),w=(e,r)=>{const t={},o=new Set(r);for(const[r,s]of Object.entries(e))o.has(r)||(t[r]=s);return t},h=(e,r)=>{const t={},o=new Set(r);for(const[r,s]of Object.entries(e))o.has(r)&&(t[r]=s);return t},b=e=>!e||i(e)?e:Object.fromEntries(e),E=e=>{const{auth:r,baseHeaders:t,body:o,headers:s}=e;if(!Boolean(t||s||o||r))return;const n={...p(r),...b(t),...b(s)};return u(a=o)&&a.includes("=")?(n["Content-Type"]="application/x-www-form-urlencoded",n):((i(o)||u(o)&&o.startsWith("{"))&&(n["Content-Type"]="application/json",n.Accept="application/json"),n);var a},S=(...e)=>Promise.all(e),O=async(e,r,t,o)=>{const s=((e,r)=>({arrayBuffer:()=>e.arrayBuffer(),blob:()=>e.blob(),formData:()=>e.formData(),json:async()=>{if(r){const t=await e.text();return r(t)}return e.json()},stream:()=>e.body,text:()=>e.text()}))(e,t);if(!Object.hasOwn(s,r))throw new Error(`Invalid response type: ${r}`);const n=await s[r]();return o?o(n):n},R=e=>{const{defaultErrorMessage:r,error:t,message:o,resultMode:s}=e;let n={data:null,error:{errorData:t,message:o??t.message,name:t.name},response:null};if(v(t)){const{errorData:e,message:o=r,name:s,response:a}=t;n={data:null,error:{errorData:e,message:o,name:s},response:a}}return{apiDetails:n,generalErrorResult:{all:n,onlyError:n.error,onlyResponse:n.response,onlySuccess:n.data,onlySuccessWithException:n.data}[s??"all"],resolveCustomErrorInfo:({message:r})=>R({...e,message:r}).generalErrorResult}},q=class extends Error{errorData;isHTTPError=!0;name="HTTPError";response;constructor(e,r){const{defaultErrorMessage:t,errorData:o,response:s}=e;super(o?.message??t,r),this.errorData=o,this.response=s,Error.captureStackTrace(this,this.constructor)}},v=e=>e instanceof q||i(e)&&"HTTPError"===e.name&&!0===e.isHTTPError,T=e=>{if(0===e)return;const{promise:r,resolve:t}=(()=>{let e,r;return{promise:new Promise(((t,o)=>{r=t,e=o})),reject:e,resolve:r}})();return setTimeout(t,e),r},M=(e,r,t,o)=>{const s=(e=>{if(e)return e;if("undefined"!=typeof globalThis&&l(globalThis.fetch))return globalThis.fetch;throw new Error("No fetch implementation found")})(r.customFetchImpl);return o&&"defer"===r.dedupeStrategy?o.responsePromise:s(e,t)},j=e=>e,P=(e,r)=>async t=>{if("sequential"!==r){if("parallel"===r){const r=[...e];await Promise.all(r.map((e=>e?.(t))))}}else for(const r of e)await(r?.(t))},$={onError:new Set,onRequest:new Set,onRequestError:new Set,onResponse:new Set,onResponseError:new Set,onRetry:new Set,onSuccess:new Set},k=(e,r)=>{const t=e.retryCount??0;return{getDelay:()=>"exponential"===e.retryStrategy?((e,r)=>{const t=r.retryMaxDelay??1e4,o=(r.retryDelay??1e3)*2**e;return Math.min(o,t)})(t,e):(e=>e.retryDelay??1e3)(e),shouldAttemptRetry:async()=>{const o=await(e.retryCondition?.(r))??!0,s=(e.retryAttempts??0)>t&&o;if("HTTPError"!==r.error.name)return s;const n=!!r.request.method&&e.retryMethods?.includes(r.request.method);return!!r.response?.status&&e.retryStatusCodes?.includes(r.response.status)&&n&&s}}},D=(e,r)=>{if(!r)return e;const t=(o=r)?new URLSearchParams(o).toString():(console.error("toQueryString:","No query params provided!"),null);var o;return 0===t?.length?e:e.endsWith("?")?`${e}${t}`:e.includes("?")?`${e}&${t}`:`${e}?${t}`},x=(e,r,t)=>{const o=((e,r)=>{if(!r)return e;let t=e;if(a(r)){const e=t.split("/").filter((e=>e.startsWith(":")));for(const[o,s]of e.entries()){const e=r[o];t=t.replace(s,e)}return t}for(const[e,o]of Object.entries(r))t=t.replace(`:${e}`,String(o));return t})(e,r);return D(o,t)},A=(e={})=>{const[r,t]=(e=>[h(e,f),w(e,[...f,...d])])(e),{body:o,headers:s,signal:n,...c}=r,p=new Map,y=async(...e)=>{const[r,d]=e,[b,j]=(e=>[h(e,f),w(e,f)])(d??{}),{body:D=o,headers:A,signal:H=n,...C}=b,U={};for(const e of Object.keys($)){const r=(L=t[e],B=j[e],a(L)?[L,B].flat():B??L);U[e]=r}var L,B;const z={baseURL:"",bodySerializer:JSON.stringify,dedupeStrategy:"cancel",defaultErrorMessage:"Failed to fetch data from server!",mergedHooksExecutionMode:"parallel",mergedHooksExecutionOrder:"mainHooksAfterPlugins",responseType:"json",resultMode:"all",retryAttempts:0,retryDelay:1e3,retryMaxDelay:1e4,retryMethods:m,retryStatusCodes:g,retryStrategy:"linear",...t,...j,...U},{resolvedHooks:N,resolvedOptions:I,resolvedRequestOptions:W,url:G}=await(async e=>{const{initURL:r,options:t,request:o}=e,s=structuredClone($),n=()=>{for(const e of Object.keys($)){const r=t[e];s[e].add(r)}},a=e=>{for(const r of Object.keys($)){const t=e[r];s[r].add(t)}};"mainHooksBeforePlugins"===t.mergedHooksExecutionOrder&&n();const c=e=>e?l(e)?e({initURL:r,options:t,request:o}):e:[],p=[...c(t.plugins),...c(t.extend?.plugins)];let d=r,f=t,y=o;const m=async e=>{if(!e)return;const s=await e({initURL:r,options:t,request:o});i(s)&&(u(s.url)&&(d=s.url),i(s.request)&&(y=s.request),i(s.options)&&(f=s.options))};for(const e of p)await m(e.init),e.hooks&&a(e.hooks);t.mergedHooksExecutionOrder&&"mainHooksAfterPlugins"!==t.mergedHooksExecutionOrder||n();const g={};for(const[e,r]of Object.entries(s)){const o=[...r].flat(),s=P(o,t.mergedHooksExecutionMode);g[e]=s}return{resolvedHooks:g,resolvedOptions:f,resolvedRequestOptions:y,url:d}})({initURL:r,options:z,request:{...c,...C}}),K=`${I.baseURL}${x(G,I.params,I.query)}`,F={...I,...N,fullURL:K,initURL:r},J={body:i(D)?F.bodySerializer(D):D,method:"GET",...W},V=new AbortController,_=null!=F.timeout?(Q=F.timeout,AbortSignal.timeout(Q)):null;var Q;const X=((...e)=>AbortSignal.any(e.filter(Boolean)))(V.signal,_,H),Y={...J,signal:X},Z=F.dedupeKey??((e,r,t)=>"cancel"===t.dedupeStrategy||"defer"===t.dedupeStrategy?`${t.fullURL}-${JSON.stringify({options:t,request:r})}`:null)(0,Y,F);null!==Z&&await T(.1);const ee=null!==Z?p:null,re=ee?.get(Z);((e,r,t)=>{if(t&&"cancel"===r.dedupeStrategy){const e=r.dedupeKey?`Duplicate request detected - Aborting previous request with key '${r.dedupeKey}' as a new request was initiated`:`Duplicate request detected - Aborting previous request to '${r.fullURL}' as a new request with identical options was initiated`,o=new DOMException(e,"AbortError");t.controller.abort(o)}})(0,F,re);try{await S(F.onRequest({options:F,request:Y})),Y.headers=E({auth:F.auth,baseHeaders:s??A,body:D,headers:Y.headers});const e=M(K,F,Y,re);ee?.set(Z,{controller:V,responsePromise:e});const r=await e,t="defer"===F.dedupeStrategy||F.cloneResponse;if(!r.ok){const e=await O(t?r.clone():r,F.responseType,F.responseParser,F.responseErrorValidator);throw new q({defaultErrorMessage:F.defaultErrorMessage,errorData:e,response:r})}const o=await O(t?r.clone():r,F.responseType,F.responseParser,F.responseValidator);return await S(F.onSuccess({data:o,options:F,request:Y,response:F.cloneResponse?r.clone():r}),F.onResponse({data:o,error:null,options:F,request:Y,response:F.cloneResponse?r.clone():r})),await(e=>{const{data:r,response:t,resultMode:o}=e,s={data:r,error:null,response:t};return o?{all:s,onlyError:s.error,onlyResponse:s.response,onlySuccess:s.data,onlySuccessWithException:s.data}[o]:s})({data:o,response:r,resultMode:F.resultMode})}catch(e){const{apiDetails:t,generalErrorResult:o,resolveCustomErrorInfo:s}=R({defaultErrorMessage:F.defaultErrorMessage,error:e,resultMode:F.resultMode}),n={error:t.error,options:F,request:Y,response:t.response},{getDelay:a,shouldAttemptRetry:i}=k(F,n);if(!X.aborted&&await i()){await S(F.onRetry(n));const e=a();return await T(e),await y(r,{...d,retryCount:(F.retryCount??0)+1})}const u=l(F.throwOnError)?F.throwOnError(n):F.throwOnError,c=()=>{if(u)throw t.error};if(v(e)){const{response:r}=e,t=o.error;return await S(F.onResponseError({error:t,options:F,request:Y,response:F.cloneResponse?r.clone():r}),F.onError({error:t,options:F,request:Y,response:F.cloneResponse?r.clone():r}),F.onResponse({data:null,error:t,options:F,request:Y,response:F.cloneResponse?r.clone():r})),c(),o}if(e instanceof DOMException&&"AbortError"===e.name){const{message:r,name:t}=e;return console.error(`${t}:`,r),c(),o}if(e instanceof DOMException&&"TimeoutError"===e.name){const r=`Request timed out after ${F.timeout}ms`;return console.error(`${e.name}:`,r),c(),s({message:r})}const p=o.error;return await S(F.onRequestError({error:p,options:F,request:Y}),F.onError({error:p,options:F,request:Y,response:null})),c(),o}finally{ee?.delete(Z)}};return y.create=A,y},H=A();//# sourceMappingURL=index.cjs.map
|