@vertesia/api-fetch-client 1.2.0 → 1.3.0-dev.20260620.091720Z
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 +51 -0
- package/lib/base.d.ts +169 -0
- package/lib/base.d.ts.map +1 -0
- package/lib/base.js +481 -0
- package/lib/base.js.map +1 -0
- package/lib/{types/client.d.ts → client.d.ts} +8 -8
- package/lib/client.d.ts.map +1 -0
- package/lib/{esm/client.js → client.js} +27 -11
- package/lib/client.js.map +1 -0
- package/lib/{types/errors.d.ts → errors.d.ts} +5 -5
- package/lib/errors.d.ts.map +1 -0
- package/lib/{esm/errors.js → errors.js} +22 -9
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/{types/sse → sse}/EventSourceParserStream.d.ts +4 -1
- package/lib/sse/EventSourceParserStream.d.ts.map +1 -0
- package/lib/{esm/sse → sse}/EventSourceParserStream.js +5 -4
- package/lib/sse/EventSourceParserStream.js.map +1 -0
- package/lib/sse/TextDecoderStream.d.ts.map +1 -0
- package/lib/{esm/sse → sse}/TextDecoderStream.js +2 -2
- package/lib/sse/TextDecoderStream.js.map +1 -0
- package/lib/{types/sse → sse}/index.d.ts +7 -2
- package/lib/sse/index.d.ts.map +1 -0
- package/lib/{esm/sse → sse}/index.js +3 -3
- package/lib/sse/index.js.map +1 -0
- package/lib/{types/utils.d.ts → utils.d.ts} +1 -1
- package/lib/utils.d.ts.map +1 -0
- package/lib/{esm/utils.js → utils.js} +3 -3
- package/lib/utils.js.map +1 -0
- package/package.json +22 -25
- package/src/base.ts +432 -79
- package/src/client.ts +50 -24
- package/src/errors.ts +28 -15
- package/src/index.ts +4 -4
- package/src/sse/EventSourceParserStream.ts +13 -10
- package/src/sse/TextDecoderStream.ts +16 -11
- package/src/sse/index.ts +14 -8
- package/src/utils.ts +5 -6
- package/lib/cjs/base.js +0 -240
- package/lib/cjs/base.js.map +0 -1
- package/lib/cjs/client.js +0 -115
- package/lib/cjs/client.js.map +0 -1
- package/lib/cjs/errors.js +0 -63
- package/lib/cjs/errors.js.map +0 -1
- package/lib/cjs/index.js +0 -21
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/package.json +0 -3
- package/lib/cjs/sse/EventSourceParserStream.js +0 -41
- package/lib/cjs/sse/EventSourceParserStream.js.map +0 -1
- package/lib/cjs/sse/TextDecoderStream.js +0 -53
- package/lib/cjs/sse/TextDecoderStream.js.map +0 -1
- package/lib/cjs/sse/index.js +0 -27
- package/lib/cjs/sse/index.js.map +0 -1
- package/lib/cjs/utils.js +0 -38
- package/lib/cjs/utils.js.map +0 -1
- package/lib/esm/base.js +0 -235
- package/lib/esm/base.js.map +0 -1
- package/lib/esm/client.js.map +0 -1
- package/lib/esm/errors.js.map +0 -1
- package/lib/esm/index.js +0 -5
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/sse/EventSourceParserStream.js.map +0 -1
- package/lib/esm/sse/TextDecoderStream.js.map +0 -1
- package/lib/esm/sse/index.js.map +0 -1
- package/lib/esm/utils.js.map +0 -1
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/lib/types/base.d.ts +0 -83
- package/lib/types/base.d.ts.map +0 -1
- package/lib/types/client.d.ts.map +0 -1
- package/lib/types/errors.d.ts.map +0 -1
- package/lib/types/index.d.ts +0 -5
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/sse/EventSourceParserStream.d.ts.map +0 -1
- package/lib/types/sse/TextDecoderStream.d.ts.map +0 -1
- package/lib/types/sse/index.d.ts.map +0 -1
- package/lib/types/utils.d.ts.map +0 -1
- /package/lib/{types/sse → sse}/TextDecoderStream.d.ts +0 -0
package/README.md
CHANGED
|
@@ -140,6 +140,54 @@ try {
|
|
|
140
140
|
}
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
+
## Retries
|
|
144
|
+
|
|
145
|
+
Retries are disabled by default. Enable them explicitly on a client or a single request:
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
const client = new FetchClient('https://api.example.com')
|
|
149
|
+
.withRetryPolicy({
|
|
150
|
+
attempts: 3,
|
|
151
|
+
methods: ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE'],
|
|
152
|
+
statuses: [502, 503, 504],
|
|
153
|
+
baseDelayMs: 250,
|
|
154
|
+
maxDelayMs: 4000
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// POST requests are not retried by the default method list. Opt in only when
|
|
158
|
+
// the operation is safe to replay.
|
|
159
|
+
await client.post('/workflow/execute', {
|
|
160
|
+
payload,
|
|
161
|
+
retryPolicy: { methods: ['POST'] }
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// Disable a client-level retry policy for one request.
|
|
165
|
+
await client.get('/no-retry', { retryPolicy: false });
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Timeouts
|
|
169
|
+
|
|
170
|
+
No request timeout is applied by default. Set a default on the client (applies to every request) and/or override it per request. The timeout aborts the **whole** request — connection, response headers, **and** body consumption (JSON parse) — using a browser-standard `AbortSignal`, so it behaves the same in the browser and in Node (no `undici`-specific configuration).
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
// Default timeout (ms) for every request on this client.
|
|
174
|
+
const client = new FetchClient('https://api.example.com').withTimeout(60_000);
|
|
175
|
+
|
|
176
|
+
// Override for a single slow request (e.g. one that blocks on an LLM).
|
|
177
|
+
await client.post('/long-running', { payload, timeoutMs: 30 * 60_000 });
|
|
178
|
+
|
|
179
|
+
// Disable the client default for one request.
|
|
180
|
+
await client.get('/no-timeout', { timeoutMs: false });
|
|
181
|
+
|
|
182
|
+
// Combine with a caller-supplied AbortSignal — whichever aborts first wins.
|
|
183
|
+
await client.get('/data', { signal: controller.signal, timeoutMs: 5_000 });
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
- `timeoutMs`: a positive number sets the timeout; `false`/`null`/`0` disables it for that request (overriding the client default); omitted falls back to the client default (`withTimeout` / `defaultTimeoutMs`).
|
|
187
|
+
- On timeout the request rejects as a connection failure. When a retry policy is enabled, a timed-out attempt is retried like any other connection error, with a **fresh deadline per attempt**.
|
|
188
|
+
- SSE requests (`reader: 'sse'`) are never given a total-request timeout — they are long-lived by design; apply your own idle/close handling to the stream.
|
|
189
|
+
- `ApiTopic` sub-clients inherit the parent client's default timeout, so setting it once on the root client covers all topics.
|
|
190
|
+
|
|
143
191
|
### Custom Error Factory
|
|
144
192
|
|
|
145
193
|
Transform errors before they're thrown:
|
|
@@ -256,6 +304,9 @@ The main client class for making HTTP requests.
|
|
|
256
304
|
| `payload` | `object \| BodyInit` | Request body |
|
|
257
305
|
| `reader` | `'sse' \| function` | Custom response reader |
|
|
258
306
|
| `jsonPayload` | `boolean` | Auto-serialize payload as JSON (default: true) |
|
|
307
|
+
| `retryPolicy` | `IRequestRetryPolicy \| false` | Per-request retry policy; `false` disables the client default |
|
|
308
|
+
| `timeoutMs` | `number \| false \| null` | Per-request timeout (ms). Positive sets it; `false`/`null`/`0` disables; omitted uses the client default |
|
|
309
|
+
| `signal` | `AbortSignal` | Caller abort signal, merged with the timeout signal |
|
|
259
310
|
|
|
260
311
|
### Error Classes
|
|
261
312
|
|
package/lib/base.d.ts
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { type RequestError } from './errors.js';
|
|
2
|
+
import { type ServerSentEvent } from './sse/index.js';
|
|
3
|
+
export type FETCH_FN = (input: RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
4
|
+
type IPrimitives = string | number | boolean | null | undefined | string[] | number[] | boolean[];
|
|
5
|
+
export interface IRequestRetryPolicy {
|
|
6
|
+
/**
|
|
7
|
+
* Total attempts, including the first request. Defaults to 3 when a retry policy is enabled.
|
|
8
|
+
*/
|
|
9
|
+
attempts?: number;
|
|
10
|
+
/**
|
|
11
|
+
* HTTP methods that may be retried. Defaults to idempotent methods.
|
|
12
|
+
*/
|
|
13
|
+
methods?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* HTTP response statuses that should be retried. Defaults to 502, 503, and 504.
|
|
16
|
+
*/
|
|
17
|
+
statuses?: number[];
|
|
18
|
+
/**
|
|
19
|
+
* Also retry any 5xx whose body is not JSON — e.g. an HTML error page from a load balancer,
|
|
20
|
+
* gateway, or Cloud Run ("no available instance" / "try again in 30 seconds"). These originate
|
|
21
|
+
* at the edge, not the application (which serializes its errors as JSON), so they are transient
|
|
22
|
+
* and safe to retry even when the exact status (often 500) is not in `statuses`. Defaults to true.
|
|
23
|
+
*/
|
|
24
|
+
retryNonJsonServerErrors?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Retry network failures thrown by fetch. Defaults to true.
|
|
27
|
+
*/
|
|
28
|
+
retryOnConnectionError?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Initial backoff delay in milliseconds. Defaults to 250.
|
|
31
|
+
*/
|
|
32
|
+
baseDelayMs?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Maximum backoff delay in milliseconds. Defaults to 4000.
|
|
35
|
+
*/
|
|
36
|
+
maxDelayMs?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Use full jitter for backoff delays. Defaults to true.
|
|
39
|
+
*/
|
|
40
|
+
jitter?: boolean;
|
|
41
|
+
}
|
|
42
|
+
type NormalizedRetryPolicy = {
|
|
43
|
+
attempts: number;
|
|
44
|
+
methods: Set<string>;
|
|
45
|
+
statuses: Set<number>;
|
|
46
|
+
retryNonJsonServerErrors: boolean;
|
|
47
|
+
retryOnConnectionError: boolean;
|
|
48
|
+
baseDelayMs: number;
|
|
49
|
+
maxDelayMs: number;
|
|
50
|
+
jitter: boolean;
|
|
51
|
+
};
|
|
52
|
+
export interface IRequestParams {
|
|
53
|
+
query?: Record<string, IPrimitives> | null;
|
|
54
|
+
headers?: Record<string, string> | null;
|
|
55
|
+
reader?: 'sse' | ((response: Response) => unknown);
|
|
56
|
+
/**
|
|
57
|
+
* Set to false to disable automatic JSON payload serialization
|
|
58
|
+
* If you need to post other data than a json payload, set this to false and use the `payload` property to set the desired payload
|
|
59
|
+
*/
|
|
60
|
+
jsonPayload?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Opt-in retry policy for this request. Retries are disabled by default.
|
|
63
|
+
* Set to false to disable a client-level retry policy for this request.
|
|
64
|
+
*/
|
|
65
|
+
retryPolicy?: IRequestRetryPolicy | false | null;
|
|
66
|
+
/**
|
|
67
|
+
* Per-request timeout in milliseconds. Aborts the whole request — connection, response headers,
|
|
68
|
+
* AND body consumption (JSON parse) — via a browser-standard AbortSignal. A positive number sets
|
|
69
|
+
* the timeout; `false`/`null`/`0` disables it for this request (overriding any client default).
|
|
70
|
+
* When omitted, the client-level default (`withTimeout` / `defaultTimeoutMs`) applies.
|
|
71
|
+
* Not applied to SSE (`reader: 'sse'`) requests, which are long-lived by design.
|
|
72
|
+
*/
|
|
73
|
+
timeoutMs?: number | false | null;
|
|
74
|
+
/**
|
|
75
|
+
* Caller-supplied AbortSignal. Merged with the timeout signal — whichever aborts first wins.
|
|
76
|
+
*/
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
}
|
|
79
|
+
export interface IRequestParamsWithPayload extends IRequestParams {
|
|
80
|
+
payload?: object | BodyInit | null;
|
|
81
|
+
}
|
|
82
|
+
export declare function fetchPromise(fetchImpl?: FETCH_FN | Promise<FETCH_FN>): Promise<FETCH_FN>;
|
|
83
|
+
export declare abstract class ClientBase {
|
|
84
|
+
_fetch: Promise<FETCH_FN>;
|
|
85
|
+
baseUrl: string;
|
|
86
|
+
errorFactory: (err: RequestError) => Error;
|
|
87
|
+
verboseErrors: boolean;
|
|
88
|
+
retryPolicy?: IRequestRetryPolicy;
|
|
89
|
+
defaultTimeoutMs?: number;
|
|
90
|
+
abstract get headers(): Record<string, string>;
|
|
91
|
+
constructor(baseUrl: string, fetchImpl?: FETCH_FN | Promise<FETCH_FN>);
|
|
92
|
+
/**
|
|
93
|
+
* Can be subclassed to map to custom errors
|
|
94
|
+
* @param err
|
|
95
|
+
*/
|
|
96
|
+
throwError(err: RequestError): never;
|
|
97
|
+
withRetryPolicy(policy?: IRequestRetryPolicy | null): this;
|
|
98
|
+
getRetryPolicy(): IRequestRetryPolicy | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* Set a default request timeout (ms) applied to every request unless overridden per-request via
|
|
101
|
+
* `timeoutMs`. Pass `false`/`null`/`0` to clear it. The timeout aborts the whole request
|
|
102
|
+
* (connection + response headers + body consumption) via AbortSignal.
|
|
103
|
+
*/
|
|
104
|
+
withTimeout(timeoutMs?: number | false | null): this;
|
|
105
|
+
getTimeout(): number | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve the effective timeout for a request: per-request `timeoutMs` wins (a positive number
|
|
108
|
+
* sets it; `false`/`null`/`0` disables it), otherwise the client default applies. SSE streams are
|
|
109
|
+
* never given a total-request timeout.
|
|
110
|
+
*/
|
|
111
|
+
protected resolveTimeout(params: IRequestParams | undefined): number | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Resolve a path to a full URL. If the path is already an absolute URL
|
|
114
|
+
* (starts with http:// or https://), it is returned as-is.
|
|
115
|
+
*/
|
|
116
|
+
getUrl(path: string): string;
|
|
117
|
+
get<T = unknown>(path: string, params?: IRequestParams): Promise<T>;
|
|
118
|
+
del<T = unknown>(path: string, params?: IRequestParams): Promise<T>;
|
|
119
|
+
delete(path: string, params?: IRequestParams): Promise<unknown>;
|
|
120
|
+
post<T = unknown>(path: string, params?: IRequestParamsWithPayload): Promise<T>;
|
|
121
|
+
put<T = unknown>(path: string, params?: IRequestParamsWithPayload): Promise<T>;
|
|
122
|
+
/**
|
|
123
|
+
* You can customize the json parser by overriding this method
|
|
124
|
+
* @param text
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
jsonParse(text: string): unknown;
|
|
128
|
+
/**
|
|
129
|
+
* Can be overridden to create the request
|
|
130
|
+
* @param fetch
|
|
131
|
+
* @param url
|
|
132
|
+
* @param init
|
|
133
|
+
* @returns
|
|
134
|
+
*/
|
|
135
|
+
createRequest(url: string, init: RequestInit): Promise<Request>;
|
|
136
|
+
handleFetchResponse(_req: Request, _res: Response): void;
|
|
137
|
+
createServerError(req: Request, res: Response, payload: unknown): RequestError;
|
|
138
|
+
readJSONPayload(res: Response): Promise<unknown>;
|
|
139
|
+
/**
|
|
140
|
+
* Subclasses You can override this to do something with the response
|
|
141
|
+
* @param res
|
|
142
|
+
*/
|
|
143
|
+
handleResponse<T = unknown>(req: Request, res: Response, params: IRequestParamsWithPayload | undefined): T | Promise<T>;
|
|
144
|
+
request<T = unknown>(method: string, path: string, params?: IRequestParamsWithPayload): Promise<T>;
|
|
145
|
+
protected resolveRetryPolicy(params: IRequestParamsWithPayload | undefined): NormalizedRetryPolicy | undefined;
|
|
146
|
+
private shouldRetryResponse;
|
|
147
|
+
private shouldRetryConnectionError;
|
|
148
|
+
private waitBeforeRetry;
|
|
149
|
+
/**
|
|
150
|
+
* Perform a request and consume the response as an SSE stream.
|
|
151
|
+
* Calls `onEvent` for each parsed SSE event, then returns the last event.
|
|
152
|
+
*
|
|
153
|
+
* @param method HTTP method
|
|
154
|
+
* @param path URL path (relative to baseUrl) or absolute URL (http:// or https://)
|
|
155
|
+
* @param params Request parameters (payload, headers, query)
|
|
156
|
+
* @param onEvent Callback for each SSE event
|
|
157
|
+
* @returns The last SSE event received, or undefined if the stream was empty
|
|
158
|
+
*/
|
|
159
|
+
sseRequest(method: string, path: string, params: IRequestParamsWithPayload | undefined, onEvent: (event: ServerSentEvent) => void): Promise<ServerSentEvent | undefined>;
|
|
160
|
+
/**
|
|
161
|
+
* Expose the fetch method
|
|
162
|
+
* @param input
|
|
163
|
+
* @param init
|
|
164
|
+
* @returns
|
|
165
|
+
*/
|
|
166
|
+
fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
|
|
167
|
+
}
|
|
168
|
+
export {};
|
|
169
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|