@zayne-labs/callapi 1.2.1 → 1.3.0
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-C8Qkuwgy.d.cts} +38 -42
- 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-CMSDAXH4.js +1 -0
- package/dist/esm/chunk-CMSDAXH4.js.map +1 -0
- package/dist/esm/chunk-NWDP5KBB.js +1 -0
- package/dist/esm/chunk-NWDP5KBB.js.map +1 -0
- package/dist/esm/{index-Dtj-i4H7.d.ts → index-C8Qkuwgy.d.ts} +38 -42
- 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
|
/**
|
|
@@ -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> {
|
|
@@ -236,7 +239,7 @@ type InterceptorsArray<TData = unknown, TErrorData = unknown> = {
|
|
|
236
239
|
type InterceptorsOrInterceptorsArray<TData, TErrorData> = Interceptors<TData, TErrorData> | InterceptorsArray<TData, TErrorData>;
|
|
237
240
|
type FetchImpl = UnmaskType<(input: string | Request | URL, init?: RequestInit) => Promise<Response>>;
|
|
238
241
|
type CallApiPluginArray<TData, TErrorData> = Array<CallApiPlugin<TData, TErrorData>>;
|
|
239
|
-
type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion> = InterceptorsOrInterceptorsArray<TData, TErrorData> & RetryOptions<TErrorData> & {
|
|
242
|
+
type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = InterceptorsOrInterceptorsArray<TData, TErrorData> & RetryOptions<TErrorData> & TMoreOptions & {
|
|
240
243
|
/**
|
|
241
244
|
* @description Authorization header value.
|
|
242
245
|
*/
|
|
@@ -266,11 +269,9 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
266
269
|
dedupeKey?: string;
|
|
267
270
|
/**
|
|
268
271
|
* @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
|
-
*
|
|
272
|
+
* - If set to "cancel", the previous pending request with the same request key will be cancelled and lets the new request through.
|
|
273
273
|
* - If set to "defer", all new request with the same request key will be share the same response, until the previous one is completed.
|
|
274
|
+
* - If set to "none", deduplication is disabled.
|
|
274
275
|
* @default "cancel"
|
|
275
276
|
*/
|
|
276
277
|
dedupeStrategy?: "cancel" | "defer" | "none";
|
|
@@ -298,7 +299,7 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
298
299
|
* @description - Controls what order in which the merged hooks execute
|
|
299
300
|
* @default "mainHooksLast"
|
|
300
301
|
*/
|
|
301
|
-
mergedHooksExecutionOrder?: "
|
|
302
|
+
mergedHooksExecutionOrder?: "mainHooksAfterPlugins" | "mainHooksBeforePlugins";
|
|
302
303
|
/**
|
|
303
304
|
* @description - An optional field you can fill with additional information,
|
|
304
305
|
* to associate with the request, typically used for logging or tracing.
|
|
@@ -322,7 +323,7 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
322
323
|
* });
|
|
323
324
|
* ```
|
|
324
325
|
*/
|
|
325
|
-
meta?:
|
|
326
|
+
meta?: Meta;
|
|
326
327
|
/**
|
|
327
328
|
* @description Params to be appended to the URL (i.e: /:id)
|
|
328
329
|
*/
|
|
@@ -370,23 +371,19 @@ type ExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends Cal
|
|
|
370
371
|
*/
|
|
371
372
|
timeout?: number;
|
|
372
373
|
};
|
|
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
374
|
declare const optionsEnumToExtendFromBase: "plugins"[];
|
|
377
|
-
|
|
375
|
+
type CallApiExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = ExtraOptions<TData, TErrorData, TResultMode, TMoreOptions> & {
|
|
378
376
|
/**
|
|
379
377
|
* @description Options that should extend the base options.
|
|
380
378
|
*/
|
|
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>];
|
|
379
|
+
extend?: Pick<ExtraOptions<TData, TErrorData, TResultMode, TMoreOptions>, (typeof optionsEnumToExtendFromBase)[number]>;
|
|
380
|
+
};
|
|
381
|
+
declare const optionsEnumToOmitFromBase: ("dedupeKey" | "extend")[];
|
|
382
|
+
type BaseCallApiExtraOptions<TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = Omit<CallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode, TMoreOptions>, (typeof optionsEnumToOmitFromBase)[number]>;
|
|
383
|
+
type CombinedCallApiExtraOptions<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = BaseCallApiExtraOptions<TData, TErrorData, TResultMode, TMoreOptions> & CallApiExtraOptions<TData, TErrorData, TResultMode, TMoreOptions>;
|
|
384
|
+
type CallApiConfig<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = CallApiExtraOptions<TData, TErrorData, TResultMode, TMoreOptions> & CallApiRequestOptions;
|
|
385
|
+
type BaseCallApiConfig<TBaseData = unknown, TBaseErrorData = unknown, TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TBaseMoreOptions extends AnyObject = object> = BaseCallApiExtraOptions<TBaseData, TBaseErrorData, TBaseResultMode, TBaseMoreOptions> & CallApiRequestOptions;
|
|
386
|
+
type CallApiParameters<TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, TMoreOptions extends AnyObject = object> = [initURL: string, config?: CallApiConfig<TData, TErrorData, TResultMode, TMoreOptions>];
|
|
390
387
|
type RequestContext = UnmaskType<{
|
|
391
388
|
options: CombinedCallApiExtraOptions;
|
|
392
389
|
request: CallApiRequestOptionsForHooks;
|
|
@@ -410,6 +407,17 @@ type SuccessContext<TData> = UnmaskType<{
|
|
|
410
407
|
request: CallApiRequestOptionsForHooks;
|
|
411
408
|
response: Response;
|
|
412
409
|
}>;
|
|
410
|
+
type PossibleJavascriptErrorNames = "AbortError" | "Error" | "SyntaxError" | "TimeoutError" | "TypeError" | (`${string}Error` & {});
|
|
411
|
+
type PossibleJavaScriptError = UnmaskType<{
|
|
412
|
+
errorData: DOMException | Error | SyntaxError | TypeError;
|
|
413
|
+
message: string;
|
|
414
|
+
name: PossibleJavascriptErrorNames;
|
|
415
|
+
}>;
|
|
416
|
+
type PossibleHTTPError<TErrorData> = UnmaskType<{
|
|
417
|
+
errorData: TErrorData;
|
|
418
|
+
message: string;
|
|
419
|
+
name: "HTTPError";
|
|
420
|
+
}>;
|
|
413
421
|
type RequestErrorContext = UnmaskType<{
|
|
414
422
|
error: PossibleJavaScriptError;
|
|
415
423
|
options: CombinedCallApiExtraOptions;
|
|
@@ -432,18 +440,6 @@ type ErrorContext<TErrorData> = UnmaskType<{
|
|
|
432
440
|
request: CallApiRequestOptionsForHooks;
|
|
433
441
|
response: null;
|
|
434
442
|
}>;
|
|
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
443
|
type CallApiResultSuccessVariant<TData> = {
|
|
448
444
|
data: TData;
|
|
449
445
|
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:()=>$}),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,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))},P={onError:new Set,onRequest:new Set,onRequestError:new Set,onResponse:new Set,onResponseError:new Set,onRetry:new Set,onSuccess:new Set},$=e=>e,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,$]=(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(P)){const r=(L=t[e],B=$[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,...$,...U},{resolvedHooks:N,resolvedOptions:I,resolvedRequestOptions:W,url:G}=await(async e=>{const{initURL:r,options:t,request:o}=e,s=structuredClone(P),n=()=>{for(const e of Object.keys(P)){const r=t[e];s[e].add(r)}},a=e=>{for(const r of Object.keys(P)){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=j(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
|