@fgrzl/fetch 1.1.0-alpha.7 → 1.1.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/CHANGELOG.md +50 -0
- package/CONTRIBUTING.md +327 -0
- package/README.md +50 -21
- package/dist/cjs/index.js +1110 -105
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index.min.js +2 -0
- package/dist/cjs/index.min.js.map +1 -0
- package/dist/index.d.ts +1381 -10
- package/dist/index.js +1066 -91
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/package.json +14 -5
- package/dist/cjs/client/fetch-client.d.ts +0 -189
- package/dist/cjs/client/fetch-client.d.ts.map +0 -1
- package/dist/cjs/client/fetch-client.js +0 -339
- package/dist/cjs/client/fetch-client.js.map +0 -1
- package/dist/cjs/client/index.d.ts +0 -11
- package/dist/cjs/client/index.d.ts.map +0 -1
- package/dist/cjs/client/index.js +0 -14
- package/dist/cjs/client/index.js.map +0 -1
- package/dist/cjs/client/types.d.ts +0 -63
- package/dist/cjs/client/types.d.ts.map +0 -1
- package/dist/cjs/client/types.js +0 -9
- package/dist/cjs/client/types.js.map +0 -1
- package/dist/cjs/errors/index.d.ts +0 -64
- package/dist/cjs/errors/index.d.ts.map +0 -1
- package/dist/cjs/errors/index.js +0 -79
- package/dist/cjs/errors/index.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -65
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/middleware/authentication/authentication.d.ts +0 -31
- package/dist/cjs/middleware/authentication/authentication.d.ts.map +0 -1
- package/dist/cjs/middleware/authentication/authentication.js +0 -93
- package/dist/cjs/middleware/authentication/authentication.js.map +0 -1
- package/dist/cjs/middleware/authentication/index.d.ts +0 -37
- package/dist/cjs/middleware/authentication/index.d.ts.map +0 -1
- package/dist/cjs/middleware/authentication/index.js +0 -42
- package/dist/cjs/middleware/authentication/index.js.map +0 -1
- package/dist/cjs/middleware/authentication/types.d.ts +0 -73
- package/dist/cjs/middleware/authentication/types.d.ts.map +0 -1
- package/dist/cjs/middleware/authentication/types.js +0 -6
- package/dist/cjs/middleware/authentication/types.js.map +0 -1
- package/dist/cjs/middleware/authorization/authorization.d.ts +0 -30
- package/dist/cjs/middleware/authorization/authorization.d.ts.map +0 -1
- package/dist/cjs/middleware/authorization/authorization.js +0 -82
- package/dist/cjs/middleware/authorization/authorization.js.map +0 -1
- package/dist/cjs/middleware/authorization/index.d.ts +0 -36
- package/dist/cjs/middleware/authorization/index.d.ts.map +0 -1
- package/dist/cjs/middleware/authorization/index.js +0 -41
- package/dist/cjs/middleware/authorization/index.js.map +0 -1
- package/dist/cjs/middleware/authorization/types.d.ts +0 -67
- package/dist/cjs/middleware/authorization/types.d.ts.map +0 -1
- package/dist/cjs/middleware/authorization/types.js +0 -6
- package/dist/cjs/middleware/authorization/types.js.map +0 -1
- package/dist/cjs/middleware/cache/cache.d.ts +0 -41
- package/dist/cjs/middleware/cache/cache.d.ts.map +0 -1
- package/dist/cjs/middleware/cache/cache.js +0 -191
- package/dist/cjs/middleware/cache/cache.js.map +0 -1
- package/dist/cjs/middleware/cache/index.d.ts +0 -44
- package/dist/cjs/middleware/cache/index.d.ts.map +0 -1
- package/dist/cjs/middleware/cache/index.js +0 -50
- package/dist/cjs/middleware/cache/index.js.map +0 -1
- package/dist/cjs/middleware/cache/types.d.ts +0 -89
- package/dist/cjs/middleware/cache/types.d.ts.map +0 -1
- package/dist/cjs/middleware/cache/types.js +0 -6
- package/dist/cjs/middleware/cache/types.js.map +0 -1
- package/dist/cjs/middleware/csrf/csrf.d.ts +0 -34
- package/dist/cjs/middleware/csrf/csrf.d.ts.map +0 -1
- package/dist/cjs/middleware/csrf/csrf.js +0 -94
- package/dist/cjs/middleware/csrf/csrf.js.map +0 -1
- package/dist/cjs/middleware/csrf/index.d.ts +0 -57
- package/dist/cjs/middleware/csrf/index.d.ts.map +0 -1
- package/dist/cjs/middleware/csrf/index.js +0 -62
- package/dist/cjs/middleware/csrf/index.js.map +0 -1
- package/dist/cjs/middleware/csrf/types.d.ts +0 -57
- package/dist/cjs/middleware/csrf/types.d.ts.map +0 -1
- package/dist/cjs/middleware/csrf/types.js +0 -6
- package/dist/cjs/middleware/csrf/types.js.map +0 -1
- package/dist/cjs/middleware/index.d.ts +0 -115
- package/dist/cjs/middleware/index.d.ts.map +0 -1
- package/dist/cjs/middleware/index.js +0 -153
- package/dist/cjs/middleware/index.js.map +0 -1
- package/dist/cjs/middleware/logging/index.d.ts +0 -42
- package/dist/cjs/middleware/logging/index.d.ts.map +0 -1
- package/dist/cjs/middleware/logging/index.js +0 -47
- package/dist/cjs/middleware/logging/index.js.map +0 -1
- package/dist/cjs/middleware/logging/logging.d.ts +0 -29
- package/dist/cjs/middleware/logging/logging.d.ts.map +0 -1
- package/dist/cjs/middleware/logging/logging.js +0 -171
- package/dist/cjs/middleware/logging/logging.js.map +0 -1
- package/dist/cjs/middleware/logging/types.d.ts +0 -90
- package/dist/cjs/middleware/logging/types.d.ts.map +0 -1
- package/dist/cjs/middleware/logging/types.js +0 -6
- package/dist/cjs/middleware/logging/types.js.map +0 -1
- package/dist/cjs/middleware/rate-limit/index.d.ts +0 -16
- package/dist/cjs/middleware/rate-limit/index.d.ts.map +0 -1
- package/dist/cjs/middleware/rate-limit/index.js +0 -21
- package/dist/cjs/middleware/rate-limit/index.js.map +0 -1
- package/dist/cjs/middleware/rate-limit/rate-limit.d.ts +0 -14
- package/dist/cjs/middleware/rate-limit/rate-limit.d.ts.map +0 -1
- package/dist/cjs/middleware/rate-limit/rate-limit.js +0 -87
- package/dist/cjs/middleware/rate-limit/rate-limit.js.map +0 -1
- package/dist/cjs/middleware/rate-limit/types.d.ts +0 -97
- package/dist/cjs/middleware/rate-limit/types.d.ts.map +0 -1
- package/dist/cjs/middleware/rate-limit/types.js +0 -6
- package/dist/cjs/middleware/rate-limit/types.js.map +0 -1
- package/dist/cjs/middleware/retry/index.d.ts +0 -6
- package/dist/cjs/middleware/retry/index.d.ts.map +0 -1
- package/dist/cjs/middleware/retry/index.js +0 -11
- package/dist/cjs/middleware/retry/index.js.map +0 -1
- package/dist/cjs/middleware/retry/retry.d.ts +0 -39
- package/dist/cjs/middleware/retry/retry.d.ts.map +0 -1
- package/dist/cjs/middleware/retry/retry.js +0 -144
- package/dist/cjs/middleware/retry/retry.js.map +0 -1
- package/dist/cjs/middleware/retry/types.d.ts +0 -61
- package/dist/cjs/middleware/retry/types.d.ts.map +0 -1
- package/dist/cjs/middleware/retry/types.js +0 -6
- package/dist/cjs/middleware/retry/types.js.map +0 -1
- package/dist/client/fetch-client.d.ts +0 -189
- package/dist/client/fetch-client.d.ts.map +0 -1
- package/dist/client/fetch-client.js +0 -335
- package/dist/client/fetch-client.js.map +0 -1
- package/dist/client/index.d.ts +0 -11
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -10
- package/dist/client/index.js.map +0 -1
- package/dist/client/types.d.ts +0 -63
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -8
- package/dist/client/types.js.map +0 -1
- package/dist/errors/index.d.ts +0 -64
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -73
- package/dist/errors/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/middleware/authentication/authentication.d.ts +0 -31
- package/dist/middleware/authentication/authentication.d.ts.map +0 -1
- package/dist/middleware/authentication/authentication.js +0 -90
- package/dist/middleware/authentication/authentication.js.map +0 -1
- package/dist/middleware/authentication/index.d.ts +0 -37
- package/dist/middleware/authentication/index.d.ts.map +0 -1
- package/dist/middleware/authentication/index.js +0 -37
- package/dist/middleware/authentication/index.js.map +0 -1
- package/dist/middleware/authentication/types.d.ts +0 -73
- package/dist/middleware/authentication/types.d.ts.map +0 -1
- package/dist/middleware/authentication/types.js +0 -5
- package/dist/middleware/authentication/types.js.map +0 -1
- package/dist/middleware/authorization/authorization.d.ts +0 -30
- package/dist/middleware/authorization/authorization.d.ts.map +0 -1
- package/dist/middleware/authorization/authorization.js +0 -79
- package/dist/middleware/authorization/authorization.js.map +0 -1
- package/dist/middleware/authorization/index.d.ts +0 -36
- package/dist/middleware/authorization/index.d.ts.map +0 -1
- package/dist/middleware/authorization/index.js +0 -36
- package/dist/middleware/authorization/index.js.map +0 -1
- package/dist/middleware/authorization/types.d.ts +0 -67
- package/dist/middleware/authorization/types.d.ts.map +0 -1
- package/dist/middleware/authorization/types.js +0 -5
- package/dist/middleware/authorization/types.js.map +0 -1
- package/dist/middleware/cache/cache.d.ts +0 -41
- package/dist/middleware/cache/cache.d.ts.map +0 -1
- package/dist/middleware/cache/cache.js +0 -186
- package/dist/middleware/cache/cache.js.map +0 -1
- package/dist/middleware/cache/index.d.ts +0 -44
- package/dist/middleware/cache/index.d.ts.map +0 -1
- package/dist/middleware/cache/index.js +0 -44
- package/dist/middleware/cache/index.js.map +0 -1
- package/dist/middleware/cache/types.d.ts +0 -89
- package/dist/middleware/cache/types.d.ts.map +0 -1
- package/dist/middleware/cache/types.js +0 -5
- package/dist/middleware/cache/types.js.map +0 -1
- package/dist/middleware/csrf/csrf.d.ts +0 -34
- package/dist/middleware/csrf/csrf.d.ts.map +0 -1
- package/dist/middleware/csrf/csrf.js +0 -91
- package/dist/middleware/csrf/csrf.js.map +0 -1
- package/dist/middleware/csrf/index.d.ts +0 -57
- package/dist/middleware/csrf/index.d.ts.map +0 -1
- package/dist/middleware/csrf/index.js +0 -57
- package/dist/middleware/csrf/index.js.map +0 -1
- package/dist/middleware/csrf/types.d.ts +0 -57
- package/dist/middleware/csrf/types.d.ts.map +0 -1
- package/dist/middleware/csrf/types.js +0 -5
- package/dist/middleware/csrf/types.js.map +0 -1
- package/dist/middleware/index.d.ts +0 -115
- package/dist/middleware/index.d.ts.map +0 -1
- package/dist/middleware/index.js +0 -134
- package/dist/middleware/index.js.map +0 -1
- package/dist/middleware/logging/index.d.ts +0 -42
- package/dist/middleware/logging/index.d.ts.map +0 -1
- package/dist/middleware/logging/index.js +0 -42
- package/dist/middleware/logging/index.js.map +0 -1
- package/dist/middleware/logging/logging.d.ts +0 -29
- package/dist/middleware/logging/logging.d.ts.map +0 -1
- package/dist/middleware/logging/logging.js +0 -168
- package/dist/middleware/logging/logging.js.map +0 -1
- package/dist/middleware/logging/types.d.ts +0 -90
- package/dist/middleware/logging/types.d.ts.map +0 -1
- package/dist/middleware/logging/types.js +0 -5
- package/dist/middleware/logging/types.js.map +0 -1
- package/dist/middleware/rate-limit/index.d.ts +0 -16
- package/dist/middleware/rate-limit/index.d.ts.map +0 -1
- package/dist/middleware/rate-limit/index.js +0 -16
- package/dist/middleware/rate-limit/index.js.map +0 -1
- package/dist/middleware/rate-limit/rate-limit.d.ts +0 -14
- package/dist/middleware/rate-limit/rate-limit.d.ts.map +0 -1
- package/dist/middleware/rate-limit/rate-limit.js +0 -84
- package/dist/middleware/rate-limit/rate-limit.js.map +0 -1
- package/dist/middleware/rate-limit/types.d.ts +0 -97
- package/dist/middleware/rate-limit/types.d.ts.map +0 -1
- package/dist/middleware/rate-limit/types.js +0 -5
- package/dist/middleware/rate-limit/types.js.map +0 -1
- package/dist/middleware/retry/index.d.ts +0 -6
- package/dist/middleware/retry/index.d.ts.map +0 -1
- package/dist/middleware/retry/index.js +0 -6
- package/dist/middleware/retry/index.js.map +0 -1
- package/dist/middleware/retry/retry.d.ts +0 -39
- package/dist/middleware/retry/retry.d.ts.map +0 -1
- package/dist/middleware/retry/retry.js +0 -141
- package/dist/middleware/retry/retry.js.map +0 -1
- package/dist/middleware/retry/types.d.ts +0 -61
- package/dist/middleware/retry/types.d.ts.map +0 -1
- package/dist/middleware/retry/types.js +0 -5
- package/dist/middleware/retry/types.js.map +0 -1
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createRetryMiddleware = void 0;
|
|
4
|
-
exports.useRetry = useRetry;
|
|
5
|
-
const retry_1 = require("./retry");
|
|
6
|
-
var retry_2 = require("./retry");
|
|
7
|
-
Object.defineProperty(exports, "createRetryMiddleware", { enumerable: true, get: function () { return retry_2.createRetryMiddleware; } });
|
|
8
|
-
function useRetry(client, options = {}) {
|
|
9
|
-
return client.use((0, retry_1.createRetryMiddleware)(options));
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/middleware/retry/index.ts"],"names":[],"mappings":";;;AAOA,4BAKC;AAVD,mCAAgD;AAGhD,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA;AAE9B,SAAgB,QAAQ,CACtB,MAAmB,EACnB,UAAwB,EAAE;IAE1B,OAAO,MAAM,CAAC,GAAG,CAAC,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Retry middleware implementation with enhanced architecture.
|
|
3
|
-
*/
|
|
4
|
-
import type { FetchMiddleware } from '../../client/fetch-client';
|
|
5
|
-
import type { RetryOptions } from './types';
|
|
6
|
-
/**
|
|
7
|
-
* Creates a retry middleware with smart defaults.
|
|
8
|
-
*
|
|
9
|
-
* 🎯 PIT OF SUCCESS: Works great with no config, customizable when needed.
|
|
10
|
-
*
|
|
11
|
-
* Features:
|
|
12
|
-
* - ✅ Preserves full middleware chain on retries (unlike old implementation)
|
|
13
|
-
* - ✅ Exponential backoff with jitter
|
|
14
|
-
* - ✅ Smart retry conditions (network errors + 5xx)
|
|
15
|
-
* - ✅ Configurable but sensible defaults
|
|
16
|
-
* - ✅ Type-safe configuration
|
|
17
|
-
*
|
|
18
|
-
* @param options - Retry configuration (all optional)
|
|
19
|
-
* @returns Middleware function
|
|
20
|
-
*
|
|
21
|
-
* @example Basic usage:
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const client = new FetchClient();
|
|
24
|
-
* client.use(createRetryMiddleware()); // 3 retries with exponential backoff
|
|
25
|
-
* ```
|
|
26
|
-
*
|
|
27
|
-
* @example Custom configuration:
|
|
28
|
-
* ```typescript
|
|
29
|
-
* const client = new FetchClient();
|
|
30
|
-
* client.use(createRetryMiddleware({
|
|
31
|
-
* maxRetries: 5,
|
|
32
|
-
* delay: 500,
|
|
33
|
-
* backoff: 'linear',
|
|
34
|
-
* onRetry: (attempt, delay) => console.log(`Retry ${attempt} in ${delay}ms`)
|
|
35
|
-
* }));
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export declare function createRetryMiddleware(options?: RetryOptions): FetchMiddleware;
|
|
39
|
-
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/middleware/retry/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgD5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,YAAiB,GACzB,eAAe,CAgGjB"}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Retry middleware implementation with enhanced architecture.
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createRetryMiddleware = createRetryMiddleware;
|
|
7
|
-
/**
|
|
8
|
-
* Default retry condition - retry on network errors and 5xx server errors.
|
|
9
|
-
*/
|
|
10
|
-
const defaultShouldRetry = (response) => {
|
|
11
|
-
// Network errors (status 0) or server errors (5xx)
|
|
12
|
-
return (response.status === 0 || (response.status >= 500 && response.status < 600));
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Calculate delay for retry attempt based on backoff strategy.
|
|
16
|
-
*/
|
|
17
|
-
const calculateDelay = (attempt, baseDelay, backoff, maxDelay) => {
|
|
18
|
-
let delay;
|
|
19
|
-
switch (backoff) {
|
|
20
|
-
case 'exponential':
|
|
21
|
-
delay = baseDelay * Math.pow(2, attempt - 1);
|
|
22
|
-
break;
|
|
23
|
-
case 'linear':
|
|
24
|
-
delay = baseDelay * attempt;
|
|
25
|
-
break;
|
|
26
|
-
case 'fixed':
|
|
27
|
-
default:
|
|
28
|
-
delay = baseDelay;
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
return Math.min(delay, maxDelay);
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Sleep for specified duration.
|
|
35
|
-
*/
|
|
36
|
-
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
37
|
-
/**
|
|
38
|
-
* Creates a retry middleware with smart defaults.
|
|
39
|
-
*
|
|
40
|
-
* 🎯 PIT OF SUCCESS: Works great with no config, customizable when needed.
|
|
41
|
-
*
|
|
42
|
-
* Features:
|
|
43
|
-
* - ✅ Preserves full middleware chain on retries (unlike old implementation)
|
|
44
|
-
* - ✅ Exponential backoff with jitter
|
|
45
|
-
* - ✅ Smart retry conditions (network errors + 5xx)
|
|
46
|
-
* - ✅ Configurable but sensible defaults
|
|
47
|
-
* - ✅ Type-safe configuration
|
|
48
|
-
*
|
|
49
|
-
* @param options - Retry configuration (all optional)
|
|
50
|
-
* @returns Middleware function
|
|
51
|
-
*
|
|
52
|
-
* @example Basic usage:
|
|
53
|
-
* ```typescript
|
|
54
|
-
* const client = new FetchClient();
|
|
55
|
-
* client.use(createRetryMiddleware()); // 3 retries with exponential backoff
|
|
56
|
-
* ```
|
|
57
|
-
*
|
|
58
|
-
* @example Custom configuration:
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const client = new FetchClient();
|
|
61
|
-
* client.use(createRetryMiddleware({
|
|
62
|
-
* maxRetries: 5,
|
|
63
|
-
* delay: 500,
|
|
64
|
-
* backoff: 'linear',
|
|
65
|
-
* onRetry: (attempt, delay) => console.log(`Retry ${attempt} in ${delay}ms`)
|
|
66
|
-
* }));
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
function createRetryMiddleware(options = {}) {
|
|
70
|
-
const { maxRetries = 3, delay = 1000, backoff = 'exponential', maxDelay = 30000, shouldRetry = defaultShouldRetry, onRetry, } = options;
|
|
71
|
-
return async (request, next) => {
|
|
72
|
-
let lastResponse;
|
|
73
|
-
let attempt = 0;
|
|
74
|
-
while (attempt <= maxRetries) {
|
|
75
|
-
try {
|
|
76
|
-
// Execute the request through the middleware chain
|
|
77
|
-
const response = await next(request);
|
|
78
|
-
// If successful, return immediately
|
|
79
|
-
if (response.ok) {
|
|
80
|
-
return response;
|
|
81
|
-
}
|
|
82
|
-
// Check if we should retry this response with current attempt count
|
|
83
|
-
if (!shouldRetry({ status: response.status, ok: response.ok }, attempt + 1)) {
|
|
84
|
-
return response;
|
|
85
|
-
}
|
|
86
|
-
// If we've reached max retries, return the response
|
|
87
|
-
if (attempt >= maxRetries) {
|
|
88
|
-
return response;
|
|
89
|
-
}
|
|
90
|
-
// Store the failed response and increment attempt counter
|
|
91
|
-
lastResponse = response;
|
|
92
|
-
attempt++;
|
|
93
|
-
// Calculate delay for next attempt
|
|
94
|
-
const retryDelay = calculateDelay(attempt, delay, backoff, maxDelay);
|
|
95
|
-
// Call onRetry callback if provided
|
|
96
|
-
if (onRetry) {
|
|
97
|
-
onRetry(attempt, retryDelay, {
|
|
98
|
-
status: response.status,
|
|
99
|
-
statusText: response.statusText,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
// Wait before retrying
|
|
103
|
-
await sleep(retryDelay);
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
// Handle unexpected errors - treat as network error (status 0)
|
|
107
|
-
const errorResponse = {
|
|
108
|
-
data: null,
|
|
109
|
-
status: 0,
|
|
110
|
-
statusText: 'Network Error',
|
|
111
|
-
headers: new Headers(),
|
|
112
|
-
url: request.url || '',
|
|
113
|
-
ok: false,
|
|
114
|
-
error: {
|
|
115
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
116
|
-
body: error,
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
// If shouldn't retry, return error immediately
|
|
120
|
-
if (!shouldRetry(errorResponse, attempt + 1)) {
|
|
121
|
-
return errorResponse;
|
|
122
|
-
}
|
|
123
|
-
// If we've reached max retries, return the error
|
|
124
|
-
if (attempt >= maxRetries) {
|
|
125
|
-
return errorResponse;
|
|
126
|
-
}
|
|
127
|
-
lastResponse = errorResponse;
|
|
128
|
-
attempt++;
|
|
129
|
-
// Calculate delay for next attempt
|
|
130
|
-
const retryDelay = calculateDelay(attempt, delay, backoff, maxDelay);
|
|
131
|
-
if (onRetry) {
|
|
132
|
-
onRetry(attempt, retryDelay, {
|
|
133
|
-
status: errorResponse.status,
|
|
134
|
-
statusText: errorResponse.statusText,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
await sleep(retryDelay);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
// Return the last response if we've exhausted all retries
|
|
141
|
-
return lastResponse;
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=retry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/middleware/retry/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Retry middleware types and configuration.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Retry configuration options - optimized for "pit of success".
|
|
6
|
-
*
|
|
7
|
-
* Smart defaults:
|
|
8
|
-
* - 3 retries (4 total attempts)
|
|
9
|
-
* - Exponential backoff starting at 1000ms
|
|
10
|
-
* - Only retry on network errors and 5xx status codes
|
|
11
|
-
*/
|
|
12
|
-
export interface RetryOptions {
|
|
13
|
-
/**
|
|
14
|
-
* Maximum number of retry attempts (default: 3)
|
|
15
|
-
* Total attempts will be maxRetries + 1
|
|
16
|
-
*/
|
|
17
|
-
maxRetries?: number;
|
|
18
|
-
/**
|
|
19
|
-
* Initial delay in milliseconds (default: 1000)
|
|
20
|
-
* Subsequent delays use exponential backoff
|
|
21
|
-
*/
|
|
22
|
-
delay?: number;
|
|
23
|
-
/**
|
|
24
|
-
* Backoff strategy (default: 'exponential')
|
|
25
|
-
* - 'exponential': delay * (2 ^ attempt)
|
|
26
|
-
* - 'linear': delay * attempt
|
|
27
|
-
* - 'fixed': always use delay
|
|
28
|
-
*/
|
|
29
|
-
backoff?: 'exponential' | 'linear' | 'fixed';
|
|
30
|
-
/**
|
|
31
|
-
* Maximum delay cap in milliseconds (default: 30000 = 30s)
|
|
32
|
-
* Prevents exponential backoff from getting too large
|
|
33
|
-
*/
|
|
34
|
-
maxDelay?: number;
|
|
35
|
-
/**
|
|
36
|
-
* Custom function to determine if a response should be retried
|
|
37
|
-
* Default: retry on network errors (status 0) and server errors (5xx)
|
|
38
|
-
*
|
|
39
|
-
* @param response - The fetch response or error
|
|
40
|
-
* @param attempt - Current attempt number (1-based)
|
|
41
|
-
* @returns true if request should be retried
|
|
42
|
-
*/
|
|
43
|
-
shouldRetry?: (response: {
|
|
44
|
-
status: number;
|
|
45
|
-
ok: boolean;
|
|
46
|
-
}, attempt: number) => boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Optional callback called before each retry attempt
|
|
49
|
-
* Useful for logging or analytics
|
|
50
|
-
*
|
|
51
|
-
* @param attempt - Current attempt number (1-based)
|
|
52
|
-
* @param delay - Delay before this retry in ms
|
|
53
|
-
* @param lastResponse - The failed response that triggered the retry
|
|
54
|
-
*/
|
|
55
|
-
onRetry?: (attempt: number, delay: number, lastResponse: {
|
|
56
|
-
status: number;
|
|
57
|
-
statusText: string;
|
|
58
|
-
}) => void;
|
|
59
|
-
}
|
|
60
|
-
export {};
|
|
61
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/middleware/retry/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;IAE7C;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,CACZ,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,EACzC,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAEb;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KACjD,IAAI,CAAC;CACX;AAGD,OAAO,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/middleware/retry/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Enhanced fetch client with intercept middleware architecture.
|
|
3
|
-
*/
|
|
4
|
-
import type { FetchResponse, FetchClientOptions } from './types';
|
|
5
|
-
/**
|
|
6
|
-
* Intercept middleware type that allows full control over request/response cycle.
|
|
7
|
-
* Middleware can modify requests, handle responses, implement retries, etc.
|
|
8
|
-
*/
|
|
9
|
-
export type FetchMiddleware = (request: RequestInit & {
|
|
10
|
-
url?: string;
|
|
11
|
-
}, next: (modifiedRequest?: RequestInit & {
|
|
12
|
-
url?: string;
|
|
13
|
-
}) => Promise<FetchResponse<unknown>>) => Promise<FetchResponse<unknown>>;
|
|
14
|
-
/**
|
|
15
|
-
* Enhanced HTTP client with intercept middleware architecture.
|
|
16
|
-
*
|
|
17
|
-
* Features:
|
|
18
|
-
* - 🎯 Smart defaults (JSON content-type, same-origin credentials)
|
|
19
|
-
* - 🔧 Powerful middleware system for cross-cutting concerns
|
|
20
|
-
* - 🛡️ Consistent error handling (never throws, always returns response)
|
|
21
|
-
* - 📦 TypeScript-first with full type inference
|
|
22
|
-
* - 🚀 Modern async/await API
|
|
23
|
-
*
|
|
24
|
-
* @example Basic usage:
|
|
25
|
-
* ```typescript
|
|
26
|
-
* const client = new FetchClient();
|
|
27
|
-
*
|
|
28
|
-
* // GET request - just works
|
|
29
|
-
* const users = await client.get<User[]>('/api/users');
|
|
30
|
-
* if (users.ok) {
|
|
31
|
-
* console.log(users.data); // Type is User[]
|
|
32
|
-
* }
|
|
33
|
-
*
|
|
34
|
-
* // POST request - JSON by default
|
|
35
|
-
* const result = await client.post('/api/users', { name: 'John' });
|
|
36
|
-
* ```
|
|
37
|
-
*
|
|
38
|
-
* @example With middleware:
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const client = new FetchClient();
|
|
41
|
-
*
|
|
42
|
-
* // Add auth middleware
|
|
43
|
-
* client.use((request, next) => {
|
|
44
|
-
* request.headers = { ...request.headers, Authorization: 'Bearer token' };
|
|
45
|
-
* return next(request);
|
|
46
|
-
* });
|
|
47
|
-
*
|
|
48
|
-
* // Now all requests include auth
|
|
49
|
-
* const data = await client.get('/api/protected');
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export declare class FetchClient {
|
|
53
|
-
private middlewares;
|
|
54
|
-
private credentials;
|
|
55
|
-
constructor(config?: FetchClientOptions);
|
|
56
|
-
use(middleware: FetchMiddleware): this;
|
|
57
|
-
request<T = unknown>(url: string, init?: RequestInit): Promise<FetchResponse<T>>;
|
|
58
|
-
private coreFetch;
|
|
59
|
-
private parseResponse;
|
|
60
|
-
private buildUrlWithParams;
|
|
61
|
-
/**
|
|
62
|
-
* HEAD request with query parameter support.
|
|
63
|
-
*
|
|
64
|
-
* HEAD requests are used to retrieve metadata about a resource without downloading
|
|
65
|
-
* the response body. Useful for checking if a resource exists, getting content length,
|
|
66
|
-
* last modified date, etc.
|
|
67
|
-
*
|
|
68
|
-
* @template T - Expected response data type (will be null for HEAD requests)
|
|
69
|
-
* @param url - Request URL
|
|
70
|
-
* @param params - Query parameters to append to URL
|
|
71
|
-
* @returns Promise resolving to typed response (data will always be null)
|
|
72
|
-
*
|
|
73
|
-
* @example Check if resource exists:
|
|
74
|
-
* ```typescript
|
|
75
|
-
* const headResponse = await client.head('/api/large-file.zip');
|
|
76
|
-
* if (headResponse.ok) {
|
|
77
|
-
* const contentLength = headResponse.headers.get('content-length');
|
|
78
|
-
* const lastModified = headResponse.headers.get('last-modified');
|
|
79
|
-
* console.log(`File size: ${contentLength} bytes`);
|
|
80
|
-
* }
|
|
81
|
-
* ```
|
|
82
|
-
*
|
|
83
|
-
* @example Check with query parameters:
|
|
84
|
-
* ```typescript
|
|
85
|
-
* const exists = await client.head('/api/users', { id: 123 });
|
|
86
|
-
* if (exists.status === 404) {
|
|
87
|
-
* console.log('User not found');
|
|
88
|
-
* }
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
head<T = null>(url: string, params?: Record<string, string | number | boolean | undefined>): Promise<FetchResponse<T>>;
|
|
92
|
-
/**
|
|
93
|
-
* HEAD request that returns useful metadata about a resource.
|
|
94
|
-
*
|
|
95
|
-
* This is a convenience method that extracts common metadata from HEAD responses
|
|
96
|
-
* for easier consumption.
|
|
97
|
-
*
|
|
98
|
-
* @param url - Request URL
|
|
99
|
-
* @param params - Query parameters to append to URL
|
|
100
|
-
* @returns Promise resolving to response with extracted metadata
|
|
101
|
-
*
|
|
102
|
-
* @example Get resource metadata:
|
|
103
|
-
* ```typescript
|
|
104
|
-
* const metadata = await client.headMetadata('/api/large-file.zip');
|
|
105
|
-
* if (metadata.ok) {
|
|
106
|
-
* console.log('File exists:', metadata.exists);
|
|
107
|
-
* console.log('Content type:', metadata.contentType);
|
|
108
|
-
* console.log('Size:', metadata.contentLength, 'bytes');
|
|
109
|
-
* console.log('Last modified:', metadata.lastModified);
|
|
110
|
-
* }
|
|
111
|
-
* ```
|
|
112
|
-
*/
|
|
113
|
-
headMetadata(url: string, params?: Record<string, string | number | boolean | undefined>): Promise<FetchResponse<null> & {
|
|
114
|
-
exists: boolean;
|
|
115
|
-
contentType: string | undefined;
|
|
116
|
-
contentLength: number | undefined;
|
|
117
|
-
lastModified: Date | undefined;
|
|
118
|
-
etag: string | undefined;
|
|
119
|
-
cacheControl: string | undefined;
|
|
120
|
-
}>;
|
|
121
|
-
/**
|
|
122
|
-
* GET request with query parameter support.
|
|
123
|
-
*
|
|
124
|
-
* @template T - Expected response data type
|
|
125
|
-
* @param url - Request URL
|
|
126
|
-
* @param params - Query parameters to append to URL
|
|
127
|
-
* @returns Promise resolving to typed response
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```typescript
|
|
131
|
-
* const users = await client.get<User[]>('/api/users');
|
|
132
|
-
* const filteredUsers = await client.get<User[]>('/api/users', { status: 'active', limit: 10 });
|
|
133
|
-
* if (users.ok) console.log(users.data);
|
|
134
|
-
* ```
|
|
135
|
-
*/
|
|
136
|
-
get<T>(url: string, params?: Record<string, string | number | boolean | undefined>): Promise<FetchResponse<T>>;
|
|
137
|
-
/**
|
|
138
|
-
* POST request with automatic JSON serialization.
|
|
139
|
-
*
|
|
140
|
-
* @template T - Expected response data type
|
|
141
|
-
* @param url - Request URL
|
|
142
|
-
* @param body - Request body (auto-serialized to JSON)
|
|
143
|
-
* @param headers - Additional headers (Content-Type: application/json is default)
|
|
144
|
-
* @returns Promise resolving to typed response
|
|
145
|
-
*
|
|
146
|
-
* @example
|
|
147
|
-
* ```typescript
|
|
148
|
-
* const result = await client.post<User>('/api/users', { name: 'John' });
|
|
149
|
-
* ```
|
|
150
|
-
*/
|
|
151
|
-
post<T>(url: string, body?: unknown, headers?: Record<string, string>): Promise<FetchResponse<T>>;
|
|
152
|
-
/**
|
|
153
|
-
* PUT request with automatic JSON serialization.
|
|
154
|
-
*
|
|
155
|
-
* @template T - Expected response data type
|
|
156
|
-
* @param url - Request URL
|
|
157
|
-
* @param body - Request body (auto-serialized to JSON)
|
|
158
|
-
* @param headers - Additional headers (Content-Type: application/json is default)
|
|
159
|
-
* @returns Promise resolving to typed response
|
|
160
|
-
*/
|
|
161
|
-
put<T>(url: string, body?: unknown, headers?: Record<string, string>): Promise<FetchResponse<T>>;
|
|
162
|
-
/**
|
|
163
|
-
* PATCH request with automatic JSON serialization.
|
|
164
|
-
*
|
|
165
|
-
* @template T - Expected response data type
|
|
166
|
-
* @param url - Request URL
|
|
167
|
-
* @param body - Request body (auto-serialized to JSON)
|
|
168
|
-
* @param headers - Additional headers (Content-Type: application/json is default)
|
|
169
|
-
* @returns Promise resolving to typed response
|
|
170
|
-
*/
|
|
171
|
-
patch<T>(url: string, body?: unknown, headers?: Record<string, string>): Promise<FetchResponse<T>>;
|
|
172
|
-
/**
|
|
173
|
-
* DELETE request with query parameter support.
|
|
174
|
-
*
|
|
175
|
-
* @template T - Expected response data type
|
|
176
|
-
* @param url - Request URL
|
|
177
|
-
* @param params - Query parameters to append to URL
|
|
178
|
-
* @returns Promise resolving to typed response
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* ```typescript
|
|
182
|
-
* const result = await client.del('/api/users/123');
|
|
183
|
-
* const bulkResult = await client.del('/api/users', { status: 'inactive', force: true });
|
|
184
|
-
* if (result.ok) console.log('Deleted successfully');
|
|
185
|
-
* ```
|
|
186
|
-
*/
|
|
187
|
-
del<T>(url: string, params?: Record<string, string | number | boolean | undefined>): Promise<FetchResponse<T>>;
|
|
188
|
-
}
|
|
189
|
-
//# sourceMappingURL=fetch-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-client.d.ts","sourceRoot":"","sources":["../../src/client/fetch-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,IAAI,EAAE,CACJ,eAAe,CAAC,EAAE,WAAW,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,KAC7C,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KACjC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,GAAE,kBAAuB;IAI3C,GAAG,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAKhC,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YA6Bd,SAAS;YAyDT,aAAa;IA6B3B,OAAO,CAAC,kBAAkB;IA6B1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,IAAI,CAAC,CAAC,GAAG,IAAI,EACX,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAK5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC7D,OAAO,CACR,aAAa,CAAC,IAAI,CAAC,GAAG;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;QAClC,YAAY,EAAE,IAAI,GAAG,SAAS,CAAC;QAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;KAClC,CACF;IAiBD;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,CAAC,EACH,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAK5B;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,CAAC,EACJ,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAa5B;;;;;;;;OAQG;IACH,GAAG,CAAC,CAAC,EACH,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAa5B;;;;;;;;OAQG;IACH,KAAK,CAAC,CAAC,EACL,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAa5B;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,CAAC,EACH,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAI7B"}
|