@scirexs/fetchy 0.6.1 → 0.8.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 +269 -220
- package/esm/main.js +1 -1
- package/esm/mod.js +1 -1
- package/package.json +1 -1
- package/types/main.d.ts +149 -222
- package/types/main.d.ts.map +1 -1
- package/types/mod.d.ts +2 -2
- package/types/mod.d.ts.map +1 -1
- package/types/types.d.ts +282 -18
- package/types/types.d.ts.map +1 -1
package/types/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/types/types.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type JSONValue = string | number | boolean | null | JSONValue[] | {
|
|
|
9
9
|
* Represents the body content that can be sent in a fetch request.
|
|
10
10
|
* Includes JSON-compatible values and standard BodyInit types except ReadableStream.
|
|
11
11
|
*/
|
|
12
|
-
export type FetchyBody = JSONValue |
|
|
12
|
+
export type FetchyBody = JSONValue | BodyInit;
|
|
13
13
|
/**
|
|
14
14
|
* Configuration options for fetchy requests.
|
|
15
15
|
* Extends standard RequestInit but provides additional features like timeout, retry, and error handling.
|
|
@@ -22,26 +22,41 @@ export type FetchyBody = JSONValue | Exclude<BodyInit, ReadableStream>;
|
|
|
22
22
|
* method: "POST",
|
|
23
23
|
* body: { key: "value" },
|
|
24
24
|
* timeout: 10,
|
|
25
|
-
* retry: {
|
|
26
|
-
*
|
|
25
|
+
* retry: { maxAttempts: 3, interval: 2 },
|
|
26
|
+
* bearer: "your-token-here"
|
|
27
27
|
* });
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
export interface FetchyOptions extends Omit<RequestInit, "body"> {
|
|
31
|
-
/** Request URL. Used
|
|
32
|
-
url?: string | URL;
|
|
31
|
+
/** Request URL. Used when calling fetchy with null as the first argument. */
|
|
32
|
+
url?: string | URL | Request;
|
|
33
|
+
/**
|
|
34
|
+
* Base URL prepended to the request URL.
|
|
35
|
+
* Only used when the URL argument is a string or URL (not when it's a Request object).
|
|
36
|
+
*/
|
|
37
|
+
base?: string | URL;
|
|
33
38
|
/** Request body content. Automatically serializes JSON objects. */
|
|
34
39
|
body?: FetchyBody;
|
|
35
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Request timeout in seconds.
|
|
42
|
+
* @default 15
|
|
43
|
+
*/
|
|
36
44
|
timeout?: number;
|
|
37
45
|
/** Retry configuration. Set to false to disable retry functionality. */
|
|
38
46
|
retry?: RetryOptions | false;
|
|
39
47
|
/** Bearer token for Authorization header. Automatically adds "Bearer " prefix. */
|
|
40
48
|
bearer?: string;
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Maximum jitter delay in seconds applied before each request (including retries).
|
|
51
|
+
* Adds randomness (0 to specified value) to prevent thundering herd.
|
|
52
|
+
* @default 0
|
|
53
|
+
*/
|
|
54
|
+
jitter?: number;
|
|
55
|
+
/**
|
|
56
|
+
* If true, does not throw error on HTTP error status, behaving like native fetch.
|
|
57
|
+
* @default false
|
|
58
|
+
*/
|
|
59
|
+
native?: boolean;
|
|
45
60
|
}
|
|
46
61
|
/**
|
|
47
62
|
* Configuration options for retry behavior.
|
|
@@ -52,19 +67,268 @@ export interface FetchyOptions extends Omit<RequestInit, "body"> {
|
|
|
52
67
|
* const retryOptions: RetryOptions = {
|
|
53
68
|
* interval: 3,
|
|
54
69
|
* maxInterval: 30,
|
|
55
|
-
*
|
|
56
|
-
*
|
|
70
|
+
* maxAttempts: 3,
|
|
71
|
+
* idempotentOnly: true,
|
|
57
72
|
* };
|
|
58
73
|
* ```
|
|
59
74
|
*/
|
|
60
75
|
export interface RetryOptions {
|
|
61
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Maximum number of retry attempts. Minimum is 1.
|
|
78
|
+
* @default 3
|
|
79
|
+
*/
|
|
80
|
+
maxAttempts?: number;
|
|
81
|
+
/**
|
|
82
|
+
* Base interval in seconds between retries. Used for exponential backoff calculation. Minimum is 0.01.
|
|
83
|
+
* @default 3
|
|
84
|
+
*/
|
|
62
85
|
interval?: number;
|
|
63
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* Maximum interval in seconds between retries. Caps the exponential backoff. Minimum is 1.
|
|
88
|
+
* @default 30
|
|
89
|
+
*/
|
|
64
90
|
maxInterval?: number;
|
|
65
|
-
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Whether to retry on request timeout.
|
|
93
|
+
* @default true
|
|
94
|
+
*/
|
|
95
|
+
retryOnTimeout?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Whether to only retry on idempotent HTTP methods (GET, HEAD, PUT, DELETE, OPTIONS, TRACE).
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
idempotentOnly?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* HTTP status codes that should trigger a retry.
|
|
103
|
+
* @default [500,502,503,504,408,429]
|
|
104
|
+
*/
|
|
105
|
+
statusCodes?: number[];
|
|
106
|
+
/**
|
|
107
|
+
* Response headers to respect for retry timing.
|
|
108
|
+
* @default ["retry-after","ratelimit-reset","x-ratelimit-reset"]
|
|
109
|
+
*/
|
|
110
|
+
respectHeaders?: string[];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Promise-like response object that extends Promise<Response> with convenience methods.
|
|
114
|
+
* Provides methods to parse response body in various formats.
|
|
115
|
+
* All methods return parsed data directly without needing to await the Response first.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* // Return response same with native fetch
|
|
120
|
+
* const response = await fetchy("https://api.example.com/hello");
|
|
121
|
+
*
|
|
122
|
+
* // Direct parsing methods
|
|
123
|
+
* const data = await fetchy("https://api.example.com/data").json<User>();
|
|
124
|
+
* const text = await fetchy("https://example.com/page").text();
|
|
125
|
+
* const bytes = await fetchy("https://example.com/file").bytes();
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export interface FetchyResponse extends Promise<Response> {
|
|
129
|
+
/** Parses response body as text. */
|
|
130
|
+
text: () => Promise<string>;
|
|
131
|
+
/** Parses response body as JSON with optional type parameter. */
|
|
132
|
+
json: <T>() => Promise<T>;
|
|
133
|
+
/** Parses response body as Uint8Array. */
|
|
134
|
+
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
|
|
135
|
+
/** Parses response body as Blob. */
|
|
136
|
+
blob: () => Promise<Blob>;
|
|
137
|
+
/** Parses response body as ArrayBuffer. */
|
|
138
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
139
|
+
/** Parses response body as FormData. */
|
|
140
|
+
formData: () => Promise<FormData>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Promise-like response object for safe mode that extends Promise<Response | null>.
|
|
144
|
+
* Returns null instead of throwing errors on request failure.
|
|
145
|
+
* Provides the same convenience methods as FetchyResponse.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```ts
|
|
149
|
+
* // Returns null on error instead of throwing
|
|
150
|
+
* const response = await sfetchy("https://api.example.com/data");
|
|
151
|
+
* if (response === null) {
|
|
152
|
+
* // Handle error case
|
|
153
|
+
* }
|
|
154
|
+
*
|
|
155
|
+
* // Direct safe parsing
|
|
156
|
+
* const data = await sfetchy("https://api.example.com/data").json<User>();
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
export interface FetchySafeResponse extends Promise<Response | null> {
|
|
160
|
+
/** Parses response body safety as text. */
|
|
161
|
+
text: () => Promise<string | null>;
|
|
162
|
+
/** Parses response body safety as JSON with optional type parameter. */
|
|
163
|
+
json: <T>() => Promise<T | null>;
|
|
164
|
+
/** Parses response body safety as Uint8Array. */
|
|
165
|
+
bytes: () => Promise<Uint8Array<ArrayBuffer> | null>;
|
|
166
|
+
/** Parses response body safety as Blob. */
|
|
167
|
+
blob: () => Promise<Blob | null>;
|
|
168
|
+
/** Parses response body safety as ArrayBuffer. */
|
|
169
|
+
arrayBuffer: () => Promise<ArrayBuffer | null>;
|
|
170
|
+
/** Parses response body safety as FormData. */
|
|
171
|
+
formData: () => Promise<FormData | null>;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Fluent HTTP client interface with pre-configured options.
|
|
175
|
+
* Created by `fy()` function, this interface allows method chaining and provides
|
|
176
|
+
* both standard and safe (error-suppressing) variants of HTTP methods.
|
|
177
|
+
*
|
|
178
|
+
* All methods inherit the options specified when creating the Fetchy instance,
|
|
179
|
+
* which can be overridden by passing additional options to individual method calls.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts
|
|
183
|
+
* import { fy } from "@scirexs/fetchy";
|
|
184
|
+
*
|
|
185
|
+
* // Create client with base configuration
|
|
186
|
+
* const api = fy({
|
|
187
|
+
* base: "https://api.example.com",
|
|
188
|
+
* bearer: "token123",
|
|
189
|
+
* timeout: 10,
|
|
190
|
+
* retry: { maxAttempts: 3 }
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // Use standard methods (throw on error)
|
|
194
|
+
* const user = await api.get("/user").json<User>();
|
|
195
|
+
* const result = await api.post("/data", { body: { key: "value" } }).json();
|
|
196
|
+
*
|
|
197
|
+
* // Use safe methods (return null on error)
|
|
198
|
+
* const posts = await api.sget("/posts").json<Post[]>();
|
|
199
|
+
* if (posts === null) {
|
|
200
|
+
* console.log("Failed to fetch posts");
|
|
201
|
+
* }
|
|
202
|
+
*
|
|
203
|
+
* // Override instance options
|
|
204
|
+
* const data = await api.get("/important", {
|
|
205
|
+
* timeout: 30,
|
|
206
|
+
* retry: { maxAttempts: 5 }
|
|
207
|
+
* }).json();
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
export interface Fetchy extends FetchyOptions {
|
|
211
|
+
/**
|
|
212
|
+
* Performs HTTP request with instance options.
|
|
213
|
+
* Equivalent to calling `fetchy()` with pre-configured options.
|
|
214
|
+
*
|
|
215
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
216
|
+
* @param options - Additional options to merge with instance options.
|
|
217
|
+
* @returns Promise-like response object with parsing methods.
|
|
218
|
+
*/
|
|
219
|
+
fetch(url?: string | URL | Request | null, options?: FetchyOptions): FetchyResponse;
|
|
220
|
+
/**
|
|
221
|
+
* Performs GET request with instance options.
|
|
222
|
+
*
|
|
223
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
224
|
+
* @param options - Additional options to merge with instance options.
|
|
225
|
+
* @returns Promise-like response object with parsing methods.
|
|
226
|
+
*/
|
|
227
|
+
get(url?: string | URL | Request | null, options?: FetchyOptions): FetchyResponse;
|
|
228
|
+
/**
|
|
229
|
+
* Performs HEAD request with instance options.
|
|
230
|
+
* HEAD requests only retrieve headers without response body.
|
|
231
|
+
*
|
|
232
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
233
|
+
* @param options - Additional options to merge with instance options.
|
|
234
|
+
* @returns Promise resolving to Response object.
|
|
235
|
+
*/
|
|
236
|
+
head(url?: string | URL | Request | null, options?: FetchyOptions): Promise<Response>;
|
|
237
|
+
/**
|
|
238
|
+
* Performs POST request with instance options.
|
|
239
|
+
*
|
|
240
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
241
|
+
* @param options - Additional options to merge with instance options (typically includes `body`).
|
|
242
|
+
* @returns Promise-like response object with parsing methods.
|
|
243
|
+
*/
|
|
244
|
+
post(url?: string | URL | Request | null, options?: FetchyOptions): FetchyResponse;
|
|
245
|
+
/**
|
|
246
|
+
* Performs PUT request with instance options.
|
|
247
|
+
*
|
|
248
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
249
|
+
* @param options - Additional options to merge with instance options (typically includes `body`).
|
|
250
|
+
* @returns Promise-like response object with parsing methods.
|
|
251
|
+
*/
|
|
252
|
+
put(url?: string | URL | Request | null, options?: FetchyOptions): FetchyResponse;
|
|
253
|
+
/**
|
|
254
|
+
* Performs PATCH request with instance options.
|
|
255
|
+
*
|
|
256
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
257
|
+
* @param options - Additional options to merge with instance options (typically includes `body`).
|
|
258
|
+
* @returns Promise-like response object with parsing methods.
|
|
259
|
+
*/
|
|
260
|
+
patch(url?: string | URL | Request | null, options?: FetchyOptions): FetchyResponse;
|
|
261
|
+
/**
|
|
262
|
+
* Performs DELETE request with instance options.
|
|
263
|
+
*
|
|
264
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
265
|
+
* @param options - Additional options to merge with instance options.
|
|
266
|
+
* @returns Promise-like response object with parsing methods.
|
|
267
|
+
*/
|
|
268
|
+
delete(url?: string | URL | Request | null, options?: FetchyOptions): FetchyResponse;
|
|
269
|
+
/**
|
|
270
|
+
* Performs HTTP request in safe mode with instance options.
|
|
271
|
+
* Returns `null` on any error instead of throwing.
|
|
272
|
+
* Equivalent to calling `sfetchy()` with pre-configured options.
|
|
273
|
+
*
|
|
274
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
275
|
+
* @param options - Additional options to merge with instance options.
|
|
276
|
+
* @returns Promise-like response object that resolves to Response or null.
|
|
277
|
+
*/
|
|
278
|
+
sfetch(url?: string | URL | Request | null, options?: FetchyOptions): FetchySafeResponse;
|
|
279
|
+
/**
|
|
280
|
+
* Performs GET request in safe mode with instance options.
|
|
281
|
+
* Returns `null` on any error instead of throwing.
|
|
282
|
+
*
|
|
283
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
284
|
+
* @param options - Additional options to merge with instance options.
|
|
285
|
+
* @returns Promise-like response object that resolves to Response or null.
|
|
286
|
+
*/
|
|
287
|
+
sget(url?: string | URL | Request | null, options?: FetchyOptions): FetchySafeResponse;
|
|
288
|
+
/**
|
|
289
|
+
* Performs HEAD request in safe mode with instance options.
|
|
290
|
+
* Returns `null` on any error instead of throwing.
|
|
291
|
+
*
|
|
292
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
293
|
+
* @param options - Additional options to merge with instance options.
|
|
294
|
+
* @returns Promise resolving to Response or null.
|
|
295
|
+
*/
|
|
296
|
+
shead(url?: string | URL | Request | null, options?: FetchyOptions): Promise<Response | null>;
|
|
297
|
+
/**
|
|
298
|
+
* Performs POST request in safe mode with instance options.
|
|
299
|
+
* Returns `null` on any error instead of throwing.
|
|
300
|
+
*
|
|
301
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
302
|
+
* @param options - Additional options to merge with instance options (typically includes `body`).
|
|
303
|
+
* @returns Promise-like response object that resolves to Response or null.
|
|
304
|
+
*/
|
|
305
|
+
spost(url?: string | URL | Request | null, options?: FetchyOptions): FetchySafeResponse;
|
|
306
|
+
/**
|
|
307
|
+
* Performs PUT request in safe mode with instance options.
|
|
308
|
+
* Returns `null` on any error instead of throwing.
|
|
309
|
+
*
|
|
310
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
311
|
+
* @param options - Additional options to merge with instance options (typically includes `body`).
|
|
312
|
+
* @returns Promise-like response object that resolves to Response or null.
|
|
313
|
+
*/
|
|
314
|
+
sput(url?: string | URL | Request | null, options?: FetchyOptions): FetchySafeResponse;
|
|
315
|
+
/**
|
|
316
|
+
* Performs PATCH request in safe mode with instance options.
|
|
317
|
+
* Returns `null` on any error instead of throwing.
|
|
318
|
+
*
|
|
319
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
320
|
+
* @param options - Additional options to merge with instance options (typically includes `body`).
|
|
321
|
+
* @returns Promise-like response object that resolves to Response or null.
|
|
322
|
+
*/
|
|
323
|
+
spatch(url?: string | URL | Request | null, options?: FetchyOptions): FetchySafeResponse;
|
|
324
|
+
/**
|
|
325
|
+
* Performs DELETE request in safe mode with instance options.
|
|
326
|
+
* Returns `null` on any error instead of throwing.
|
|
327
|
+
*
|
|
328
|
+
* @param url - Request URL (uses instance `url` if omitted).
|
|
329
|
+
* @param options - Additional options to merge with instance options.
|
|
330
|
+
* @returns Promise-like response object that resolves to Response or null.
|
|
331
|
+
*/
|
|
332
|
+
sdelete(url?: string | URL | Request | null, options?: FetchyOptions): FetchySafeResponse;
|
|
69
333
|
}
|
|
70
334
|
//# sourceMappingURL=types.d.ts.map
|
package/types/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtG;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|