@foundatiofx/fetchclient 1.1.0 → 1.1.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.
|
@@ -73,6 +73,13 @@ export function getCurrentProvider() {
|
|
|
73
73
|
}
|
|
74
74
|
return getCurrentProviderFunc() ?? defaultProvider;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Gets the cache from the current provider.
|
|
78
|
+
* @returns The FetchClientCache instance.
|
|
79
|
+
*/
|
|
80
|
+
export function getCache() {
|
|
81
|
+
return getCurrentProvider().cache;
|
|
82
|
+
}
|
|
76
83
|
/**
|
|
77
84
|
* Sets the function that retrieves the current FetchClientProvider using whatever scoping mechanism is available.
|
|
78
85
|
* @param getProviderFunc - The function that retrieves the current FetchClientProvider.
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -14,7 +14,7 @@ handling.
|
|
|
14
14
|
|
|
15
15
|
- **Typed JSON helpers** - `getJSON`, `postJSON`, `putJSON`, `patchJSON`,
|
|
16
16
|
`deleteJSON`
|
|
17
|
-
- **Two API styles** - Functional
|
|
17
|
+
- **Two API styles** - Functional or class-based - your choice
|
|
18
18
|
- **Response caching** - TTL-based caching with tags for grouped invalidation
|
|
19
19
|
- **Middleware** - Intercept requests/responses for logging, auth, transforms
|
|
20
20
|
- **Rate limiting** - Per-domain rate limits with automatic header detection
|
|
@@ -33,15 +33,13 @@ npm install @foundatiofx/fetchclient
|
|
|
33
33
|
|
|
34
34
|
FetchClient works two ways - pick whichever style you prefer:
|
|
35
35
|
|
|
36
|
-
### Functional API
|
|
36
|
+
### Functional API
|
|
37
37
|
|
|
38
38
|
```ts
|
|
39
39
|
import { getJSON, postJSON, setBaseUrl } from "@foundatiofx/fetchclient";
|
|
40
40
|
|
|
41
|
-
// Optional: configure once at startup
|
|
42
41
|
setBaseUrl("https://api.example.com");
|
|
43
42
|
|
|
44
|
-
// Use simple functions anywhere
|
|
45
43
|
const { data: users } = await getJSON<User[]>("/users");
|
|
46
44
|
const { data: created } = await postJSON<User>("/users", { name: "Alice" });
|
|
47
45
|
```
|
|
@@ -69,9 +67,6 @@ const client = new FetchClient({ baseUrl: "https://api.example.com" });
|
|
|
69
67
|
const { data } = await client.getJSON<User[]>("/users");
|
|
70
68
|
```
|
|
71
69
|
|
|
72
|
-
All styles share the same configuration - the functional API wraps a
|
|
73
|
-
[default provider](https://fetchclient.foundatio.dev/guide/provider#default-provider).
|
|
74
|
-
|
|
75
70
|
## Caching
|
|
76
71
|
|
|
77
72
|
```ts
|
|
@@ -112,12 +107,11 @@ usePerDomainRateLimit({
|
|
|
112
107
|
## Circuit Breaker
|
|
113
108
|
|
|
114
109
|
```ts
|
|
115
|
-
import {
|
|
110
|
+
import { useCircuitBreaker } from "@foundatiofx/fetchclient";
|
|
116
111
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
openDurationMs: 30000, // Stay open for 30 seconds
|
|
112
|
+
useCircuitBreaker({
|
|
113
|
+
failureThreshold: 5,
|
|
114
|
+
openDurationMs: 30000,
|
|
121
115
|
});
|
|
122
116
|
|
|
123
117
|
// When API fails repeatedly, circuit opens
|
|
@@ -133,10 +127,9 @@ import { MockRegistry } from "@foundatiofx/fetchclient/mocks";
|
|
|
133
127
|
const mocks = new MockRegistry();
|
|
134
128
|
mocks.onGet("/api/users").reply(200, [{ id: 1, name: "Alice" }]);
|
|
135
129
|
|
|
136
|
-
const
|
|
137
|
-
mocks.install(
|
|
130
|
+
const client = new FetchClient();
|
|
131
|
+
mocks.install(client);
|
|
138
132
|
|
|
139
|
-
const client = provider.getFetchClient();
|
|
140
133
|
const { data } = await client.getJSON("/api/users");
|
|
141
134
|
// data = [{ id: 1, name: "Alice" }]
|
|
142
135
|
```
|
|
@@ -7,6 +7,7 @@ exports.putJSON = putJSON;
|
|
|
7
7
|
exports.patchJSON = patchJSON;
|
|
8
8
|
exports.deleteJSON = deleteJSON;
|
|
9
9
|
exports.getCurrentProvider = getCurrentProvider;
|
|
10
|
+
exports.getCache = getCache;
|
|
10
11
|
exports.setCurrentProviderFunc = setCurrentProviderFunc;
|
|
11
12
|
exports.setBaseUrl = setBaseUrl;
|
|
12
13
|
exports.setAccessTokenFunc = setAccessTokenFunc;
|
|
@@ -92,6 +93,13 @@ function getCurrentProvider() {
|
|
|
92
93
|
}
|
|
93
94
|
return getCurrentProviderFunc() ?? FetchClientProvider_js_1.defaultInstance;
|
|
94
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Gets the cache from the current provider.
|
|
98
|
+
* @returns The FetchClientCache instance.
|
|
99
|
+
*/
|
|
100
|
+
function getCache() {
|
|
101
|
+
return getCurrentProvider().cache;
|
|
102
|
+
}
|
|
95
103
|
/**
|
|
96
104
|
* Sets the function that retrieves the current FetchClientProvider using whatever scoping mechanism is available.
|
|
97
105
|
* @param getProviderFunc - The function that retrieves the current FetchClientProvider.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FetchClient } from "./FetchClient.js";
|
|
2
|
+
import type { FetchClientCache } from "./FetchClientCache.js";
|
|
2
3
|
import type { FetchClientMiddleware } from "./FetchClientMiddleware.js";
|
|
3
4
|
import type { FetchClientOptions } from "./FetchClientOptions.js";
|
|
4
5
|
import { type FetchClientProvider } from "./FetchClientProvider.js";
|
|
@@ -63,6 +64,11 @@ export declare function deleteJSON<T>(url: string, options?: RequestOptions): Pr
|
|
|
63
64
|
* @returns The current FetchClientProvider.
|
|
64
65
|
*/
|
|
65
66
|
export declare function getCurrentProvider(): FetchClientProvider;
|
|
67
|
+
/**
|
|
68
|
+
* Gets the cache from the current provider.
|
|
69
|
+
* @returns The FetchClientCache instance.
|
|
70
|
+
*/
|
|
71
|
+
export declare function getCache(): FetchClientCache;
|
|
66
72
|
/**
|
|
67
73
|
* Sets the function that retrieves the current FetchClientProvider using whatever scoping mechanism is available.
|
|
68
74
|
* @param getProviderFunc - The function that retrieves the current FetchClientProvider.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultHelpers.d.ts","sourceRoot":"","sources":["../../src/src/DefaultHelpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DefaultHelpers.d.ts","sourceRoot":"","sources":["../../src/src/DefaultHelpers.ts"],"names":[],"mappings":"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"}
|