@scirexs/fetchy 0.1.3 → 0.2.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 CHANGED
@@ -11,7 +11,7 @@ A lightweight, type-safe fetch wrapper with built-in retry logic, timeout handli
11
11
  - **Lightweight** - Zero dependencies, works in Deno, Node.js, and browsers
12
12
  - **Simple API** - Drop-in replacement for native fetch with enhanced capabilities
13
13
  - **Timeout Support** - Configurable request timeouts with automatic cancellation
14
- - **Smart Retry Logic** - Exponential backoff with Retry-After header support
14
+ - **Retry Logic** - Exponential backoff with Retry-After header support
15
15
  - **Type-Safe** - Full TypeScript support with generic type inference
16
16
  - **Bearer Token Helper** - Built-in Authorization header management
17
17
  - **Jitter Support** - Prevent thundering herd with randomized delays
@@ -105,16 +105,20 @@ const html = await fetchyb("https://example.com", "text");
105
105
  const image = await fetchyb("https://example.com/image.png", "bytes");
106
106
  ```
107
107
 
108
- ## Configuration Options
108
+ ## Configurations
109
+
110
+ ### API Options
111
+
112
+ #### `FetchyOptions`
109
113
 
110
- ### FetchyOptions
111
114
  ```ts
112
115
  interface FetchyOptions {
113
116
  // Standard fetch options (method, headers, etc.)
114
117
  method?: string;
115
118
  headers?: HeadersInit;
116
119
 
117
- // Request body (auto-serializes JSON)
120
+ // Request body (auto-serializes JSON, ReadableStream is NOT supported)
121
+ // type JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };
118
122
  body?: JSONValue | FormData | URLSearchParams | Blob | ArrayBuffer | string;
119
123
 
120
124
  // Timeout in seconds (default: 15)
@@ -148,7 +152,8 @@ interface FetchyOptions {
148
152
  }
149
153
  ```
150
154
 
151
- ### Default Values
155
+ #### Default Values
156
+
152
157
  ```ts
153
158
  {
154
159
  timeout: 15, // 15 seconds
@@ -167,6 +172,44 @@ interface FetchyOptions {
167
172
  }
168
173
  ```
169
174
 
175
+ ### Auto-Configurations
176
+
177
+ #### Method
178
+
179
+ If a body is passed as an option without specifying a method, the method will default to "POST".
180
+
181
+ #### Headers
182
+
183
+ If the following headers are not specified, they will be automatically set:
184
+
185
+ - Accept: `application/json, text/plain`
186
+ - Content-Type: Automatically determined based on the body type:
187
+ - `string`, `URLSearchParams`, `FormData`, `Blob` with type: Not set by this package; [`fetch` will set it automatically](https://fetch.spec.whatwg.org/#concept-bodyinit-extract).
188
+ - `JSONValue`: `application/json`
189
+ - `Blob` without type: `application/octet-stream`
190
+ - `ArrayBuffer`: `application/octet-stream`
191
+ - Authorization: Set to `Bearer ${options.bearerToken}` if `options.bearerToken` is provided.
192
+
193
+ **Note:** If you pass serialized JSON as the body (i.e., a string), Content-Type will be set to `text/plain;charset=UTF-8`. To ensure Content-Type is set to `application/json`, pass the JSON object directly instead of a serialized string.
194
+
195
+ ## Error Behavior
196
+
197
+ ### Timeout
198
+
199
+ If the timeout duration specified in the `timeout` option is exceeded, `abort("timeout")` will be called on the provided AbortController. Note that there is no specific error class for timeout errors; they will be thrown as standard `AbortError`s.
200
+
201
+ ### HTTPStatusError
202
+
203
+ If `onErrorStatus` is set to `true`, an `HTTPStatusError` will be thrown when the response status is outside the 200 range. The error message format is: `404 Not Found`.
204
+
205
+ ### RedirectError
206
+
207
+ If `redirect` is set to `"error"`, a `RedirectError` will be thrown when the response status is in the 300 range. The error message format is: `Received redirect response: 301`.
208
+
209
+ ### Others
210
+
211
+ If the `onError` option is set to `true`, any other errors that occur will be thrown directly.
212
+
170
213
  ## Usage Examples
171
214
 
172
215
  ### Basic Requests
@@ -231,29 +274,30 @@ const response = await fetchy("https://api.example.com/data", {
231
274
  ```ts
232
275
  import { fetchy, HTTPStatusError, RedirectError } from "@scirexs/fetchy";
233
276
 
234
- // Return null on error (default)
235
- const data = await fetchyb("https://api.example.com/data", "json");
236
- if (data === null) {
237
- console.log("Request failed");
238
- }
239
-
240
- // Throw on error
277
+ // Throw on error (default is same with `fetch`)
241
278
  try {
242
- const data = await fetchyb("https://api.example.com/data", "json", {
243
- throwError: true
244
- });
279
+ const response = await fetchy("https://api.example.com/data");
245
280
  } catch (error) {
246
281
  console.error("Request failed:", error);
247
282
  }
248
283
 
284
+ // Return null on error
285
+ const response = await fetchy("https://api.example.com/data", {
286
+ throwError: false,
287
+ });
288
+ if (response === null) {
289
+ console.log("Request failed");
290
+ }
291
+
249
292
  // Throw only on HTTP errors
250
293
  try {
251
- const data = await fetchyb("https://api.example.com/data", "json", {
252
- throwError: { onErrorStatus: true }
294
+ const response = await fetchy("https://api.example.com/data", {
295
+ throwError: { onError: false, onErrorStatus: true }
253
296
  });
254
297
  } catch (error) {
255
298
  if (error instanceof HTTPStatusError) {
256
- console.error("HTTP error:", error.message); // e.g., "404 Not Found"
299
+ // You can also use error.status and error.body.
300
+ console.error("HTTP error:", error.message); // e.g., "404 Not Found: (no response body)"
257
301
  }
258
302
  }
259
303
 
package/esm/main.js CHANGED
@@ -17,7 +17,7 @@ const DEFAULT = {
17
17
  };
18
18
  /*=============== Main Code =====================*/
19
19
  /**
20
- * Error thrown when HTTP response has a non-OK status code (4xx, 5xx).
20
+ * Error thrown when HTTP response has a non-OK status code (4xx, 5xx, ...).
21
21
  * Only thrown when throwError.onErrorStatus is set to true.
22
22
  *
23
23
  * @example
@@ -28,15 +28,28 @@ const DEFAULT = {
28
28
  * });
29
29
  * } catch (error) {
30
30
  * if (error instanceof HTTPStatusError) {
31
- * console.error("HTTP error:", error.message); // e.g., "404 Not Found"
31
+ * console.error("HTTP error:", error.message); // e.g., "403 Forbidden: {success:false}"
32
32
  * }
33
33
  * }
34
34
  * ```
35
35
  */
36
36
  class HTTPStatusError extends Error {
37
- constructor(msg) {
37
+ static #MAX_BODY_LEN = 80;
38
+ status;
39
+ body;
40
+ constructor(msg, status, body) {
38
41
  super(msg);
39
42
  this.name = "HTTPStatusError";
43
+ this.status = status;
44
+ this.body = body;
45
+ }
46
+ static async fromResponse(resp) {
47
+ const body = await resp.text();
48
+ const bodyMsg = body.length > this.#MAX_BODY_LEN
49
+ ? `${body.slice(0, this.#MAX_BODY_LEN)}... (more ${body.length - this.#MAX_BODY_LEN} chars)`
50
+ : body || "(no response body)";
51
+ const msg = `${resp.status} ${resp.statusText}: ${bodyMsg}`;
52
+ return new this(msg, resp.status, body);
40
53
  }
41
54
  }
42
55
  /**
@@ -56,9 +69,15 @@ class HTTPStatusError extends Error {
56
69
  * ```
57
70
  */
58
71
  class RedirectError extends Error {
59
- constructor(msg) {
72
+ status;
73
+ constructor(msg, status) {
60
74
  super(msg);
61
75
  this.name = "RedirectError";
76
+ this.status = status;
77
+ }
78
+ static fromResponse(resp) {
79
+ const msg = `${resp.status} ${resp.statusText}`.trim();
80
+ return new this(msg, resp.status);
62
81
  }
63
82
  }
64
83
  async function fetchyb(url, type = "auto", options) {
@@ -117,7 +136,7 @@ async function fetchy(url, options) {
117
136
  const init = _getRequestInit(options, opts.abort);
118
137
  const resp = await _fetchWithRetry(url, init, opts);
119
138
  if (!resp.ok && opts.onErrorStatus)
120
- throw new HTTPStatusError(`${resp.status} ${resp.statusText}`.trim());
139
+ throw await HTTPStatusError.fromResponse(resp);
121
140
  return resp;
122
141
  }
123
142
  catch (e) {
@@ -278,12 +297,10 @@ function _getHeaders(options) {
278
297
  * @returns Content-Type string or undefined.
279
298
  */
280
299
  function _getContentType(body) {
281
- if (body === void 0 || body instanceof FormData)
300
+ if (body === void 0 || _isString(body) || body instanceof FormData || body instanceof URLSearchParams)
301
+ return;
302
+ if (body instanceof Blob && body.type)
282
303
  return;
283
- if (_isString(body))
284
- return "text/plain";
285
- if (body instanceof URLSearchParams)
286
- return "application/x-www-form-urlencoded";
287
304
  if (_isJSONObject(body))
288
305
  return "application/json";
289
306
  return "application/octet-stream";
@@ -325,7 +342,7 @@ async function _shouldNotRetry(count, opts, resp) {
325
342
  return true;
326
343
  if (opts.userRedirect === "error") {
327
344
  opts.max = 0;
328
- throw new RedirectError(`Received redirect response: ${resp.status}`);
345
+ throw RedirectError.fromResponse(resp);
329
346
  }
330
347
  }
331
348
  const interval = _getNextInterval(count, opts, resp);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scirexs/fetchy",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "A lightweight fetch wrapper.",
5
5
  "keywords": [
6
6
  "fetch",
package/types/main.d.ts CHANGED
@@ -27,7 +27,7 @@ interface Options {
27
27
  userRedirect: "follow" | "error" | "manual";
28
28
  }
29
29
  /**
30
- * Error thrown when HTTP response has a non-OK status code (4xx, 5xx).
30
+ * Error thrown when HTTP response has a non-OK status code (4xx, 5xx, ...).
31
31
  * Only thrown when throwError.onErrorStatus is set to true.
32
32
  *
33
33
  * @example
@@ -38,13 +38,17 @@ interface Options {
38
38
  * });
39
39
  * } catch (error) {
40
40
  * if (error instanceof HTTPStatusError) {
41
- * console.error("HTTP error:", error.message); // e.g., "404 Not Found"
41
+ * console.error("HTTP error:", error.message); // e.g., "403 Forbidden: {success:false}"
42
42
  * }
43
43
  * }
44
44
  * ```
45
45
  */
46
46
  declare class HTTPStatusError extends Error {
47
- constructor(msg: string);
47
+ #private;
48
+ status: number;
49
+ body: string;
50
+ constructor(msg: string, status: number, body: string);
51
+ static fromResponse(resp: Response): Promise<InstanceType<typeof this>>;
48
52
  }
49
53
  /**
50
54
  * Error thrown when a redirect response is received and redirect option is set to "error".
@@ -63,7 +67,9 @@ declare class HTTPStatusError extends Error {
63
67
  * ```
64
68
  */
65
69
  declare class RedirectError extends Error {
66
- constructor(msg: string);
70
+ status: number;
71
+ constructor(msg: string, status: number);
72
+ static fromResponse(resp: Response): InstanceType<typeof this>;
67
73
  }
68
74
  /**
69
75
  * Performs an HTTP request and automatically parses the response body based on Content-Type or specified type.
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}