@vertesia/api-fetch-client 1.2.0 → 1.4.0-dev.20260614.160504Z
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 +25 -0
- package/lib/base.d.ts +135 -0
- package/lib/base.d.ts.map +1 -0
- package/lib/base.js +374 -0
- package/lib/base.js.map +1 -0
- package/lib/{types/client.d.ts → client.d.ts} +7 -8
- package/lib/client.d.ts.map +1 -0
- package/lib/{esm/client.js → client.js} +24 -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 +21 -25
- package/src/base.ts +297 -79
- package/src/client.ts +46 -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,31 @@ 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
|
+
|
|
143
168
|
### Custom Error Factory
|
|
144
169
|
|
|
145
170
|
Transform errors before they're thrown:
|
package/lib/base.d.ts
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
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
|
+
* Retry network failures thrown by fetch. Defaults to true.
|
|
20
|
+
*/
|
|
21
|
+
retryOnConnectionError?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Initial backoff delay in milliseconds. Defaults to 250.
|
|
24
|
+
*/
|
|
25
|
+
baseDelayMs?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Maximum backoff delay in milliseconds. Defaults to 4000.
|
|
28
|
+
*/
|
|
29
|
+
maxDelayMs?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Use full jitter for backoff delays. Defaults to true.
|
|
32
|
+
*/
|
|
33
|
+
jitter?: boolean;
|
|
34
|
+
}
|
|
35
|
+
type NormalizedRetryPolicy = {
|
|
36
|
+
attempts: number;
|
|
37
|
+
methods: Set<string>;
|
|
38
|
+
statuses: Set<number>;
|
|
39
|
+
retryOnConnectionError: boolean;
|
|
40
|
+
baseDelayMs: number;
|
|
41
|
+
maxDelayMs: number;
|
|
42
|
+
jitter: boolean;
|
|
43
|
+
};
|
|
44
|
+
export interface IRequestParams {
|
|
45
|
+
query?: Record<string, IPrimitives> | null;
|
|
46
|
+
headers?: Record<string, string> | null;
|
|
47
|
+
reader?: 'sse' | ((response: Response) => unknown);
|
|
48
|
+
/**
|
|
49
|
+
* Set to false to disable automatic JSON payload serialization
|
|
50
|
+
* 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
|
|
51
|
+
*/
|
|
52
|
+
jsonPayload?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Opt-in retry policy for this request. Retries are disabled by default.
|
|
55
|
+
* Set to false to disable a client-level retry policy for this request.
|
|
56
|
+
*/
|
|
57
|
+
retryPolicy?: IRequestRetryPolicy | false | null;
|
|
58
|
+
}
|
|
59
|
+
export interface IRequestParamsWithPayload extends IRequestParams {
|
|
60
|
+
payload?: object | BodyInit | null;
|
|
61
|
+
}
|
|
62
|
+
export declare function fetchPromise(fetchImpl?: FETCH_FN | Promise<FETCH_FN>): Promise<FETCH_FN>;
|
|
63
|
+
export declare abstract class ClientBase {
|
|
64
|
+
_fetch: Promise<FETCH_FN>;
|
|
65
|
+
baseUrl: string;
|
|
66
|
+
errorFactory: (err: RequestError) => Error;
|
|
67
|
+
verboseErrors: boolean;
|
|
68
|
+
retryPolicy?: IRequestRetryPolicy;
|
|
69
|
+
abstract get headers(): Record<string, string>;
|
|
70
|
+
constructor(baseUrl: string, fetchImpl?: FETCH_FN | Promise<FETCH_FN>);
|
|
71
|
+
/**
|
|
72
|
+
* Can be subclassed to map to custom errors
|
|
73
|
+
* @param err
|
|
74
|
+
*/
|
|
75
|
+
throwError(err: RequestError): never;
|
|
76
|
+
withRetryPolicy(policy?: IRequestRetryPolicy | null): this;
|
|
77
|
+
getRetryPolicy(): IRequestRetryPolicy | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a path to a full URL. If the path is already an absolute URL
|
|
80
|
+
* (starts with http:// or https://), it is returned as-is.
|
|
81
|
+
*/
|
|
82
|
+
getUrl(path: string): string;
|
|
83
|
+
get<T = unknown>(path: string, params?: IRequestParams): Promise<T>;
|
|
84
|
+
del<T = unknown>(path: string, params?: IRequestParams): Promise<T>;
|
|
85
|
+
delete(path: string, params?: IRequestParams): Promise<unknown>;
|
|
86
|
+
post<T = unknown>(path: string, params?: IRequestParamsWithPayload): Promise<T>;
|
|
87
|
+
put<T = unknown>(path: string, params?: IRequestParamsWithPayload): Promise<T>;
|
|
88
|
+
/**
|
|
89
|
+
* You can customize the json parser by overriding this method
|
|
90
|
+
* @param text
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
jsonParse(text: string): unknown;
|
|
94
|
+
/**
|
|
95
|
+
* Can be overridden to create the request
|
|
96
|
+
* @param fetch
|
|
97
|
+
* @param url
|
|
98
|
+
* @param init
|
|
99
|
+
* @returns
|
|
100
|
+
*/
|
|
101
|
+
createRequest(url: string, init: RequestInit): Promise<Request>;
|
|
102
|
+
handleFetchResponse(_req: Request, _res: Response): void;
|
|
103
|
+
createServerError(req: Request, res: Response, payload: unknown): RequestError;
|
|
104
|
+
readJSONPayload(res: Response): Promise<unknown>;
|
|
105
|
+
/**
|
|
106
|
+
* Subclasses You can override this to do something with the response
|
|
107
|
+
* @param res
|
|
108
|
+
*/
|
|
109
|
+
handleResponse<T = unknown>(req: Request, res: Response, params: IRequestParamsWithPayload | undefined): T | Promise<T>;
|
|
110
|
+
request<T = unknown>(method: string, path: string, params?: IRequestParamsWithPayload): Promise<T>;
|
|
111
|
+
protected resolveRetryPolicy(params: IRequestParamsWithPayload | undefined): NormalizedRetryPolicy | undefined;
|
|
112
|
+
private shouldRetryResponse;
|
|
113
|
+
private shouldRetryConnectionError;
|
|
114
|
+
private waitBeforeRetry;
|
|
115
|
+
/**
|
|
116
|
+
* Perform a request and consume the response as an SSE stream.
|
|
117
|
+
* Calls `onEvent` for each parsed SSE event, then returns the last event.
|
|
118
|
+
*
|
|
119
|
+
* @param method HTTP method
|
|
120
|
+
* @param path URL path (relative to baseUrl) or absolute URL (http:// or https://)
|
|
121
|
+
* @param params Request parameters (payload, headers, query)
|
|
122
|
+
* @param onEvent Callback for each SSE event
|
|
123
|
+
* @returns The last SSE event received, or undefined if the stream was empty
|
|
124
|
+
*/
|
|
125
|
+
sseRequest(method: string, path: string, params: IRequestParamsWithPayload | undefined, onEvent: (event: ServerSentEvent) => void): Promise<ServerSentEvent | undefined>;
|
|
126
|
+
/**
|
|
127
|
+
* Expose the fetch method
|
|
128
|
+
* @param input
|
|
129
|
+
* @param init
|
|
130
|
+
* @returns
|
|
131
|
+
*/
|
|
132
|
+
fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;
|
|
133
|
+
}
|
|
134
|
+
export {};
|
|
135
|
+
//# 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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"}
|
package/lib/base.js
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { ConnectionError, ServerError } from './errors.js';
|
|
2
|
+
import { sse } from './sse/index.js';
|
|
3
|
+
import { buildQueryString, join, removeTrailingSlash } from './utils.js';
|
|
4
|
+
const DEFAULT_RETRY_METHODS = ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE'];
|
|
5
|
+
const DEFAULT_RETRY_STATUSES = [502, 503, 504];
|
|
6
|
+
const DEFAULT_RETRY_ATTEMPTS = 3;
|
|
7
|
+
const DEFAULT_RETRY_BASE_DELAY_MS = 250;
|
|
8
|
+
const DEFAULT_RETRY_MAX_DELAY_MS = 4000;
|
|
9
|
+
function isRecord(value) {
|
|
10
|
+
return value !== null && typeof value === 'object';
|
|
11
|
+
}
|
|
12
|
+
export function fetchPromise(fetchImpl) {
|
|
13
|
+
if (fetchImpl) {
|
|
14
|
+
return Promise.resolve(fetchImpl);
|
|
15
|
+
}
|
|
16
|
+
else if (typeof globalThis.fetch === 'function') {
|
|
17
|
+
return Promise.resolve(globalThis.fetch);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
// install an error impl
|
|
21
|
+
return Promise.resolve(() => {
|
|
22
|
+
throw new Error('No Fetch implementation found');
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function isInvalidJsonPayload(payload) {
|
|
27
|
+
return isRecord(payload) && payload.error === 'Not a valid JSON payload' && typeof payload.text === 'string';
|
|
28
|
+
}
|
|
29
|
+
function isReplayableBody(body) {
|
|
30
|
+
return !body || typeof ReadableStream === 'undefined' || !(body instanceof ReadableStream);
|
|
31
|
+
}
|
|
32
|
+
function normalizeRetryPolicy(policy) {
|
|
33
|
+
const attempts = Math.max(1, Math.floor(policy.attempts ?? DEFAULT_RETRY_ATTEMPTS));
|
|
34
|
+
const baseDelayMs = Math.max(0, policy.baseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS);
|
|
35
|
+
const maxDelayMs = Math.max(baseDelayMs, policy.maxDelayMs ?? DEFAULT_RETRY_MAX_DELAY_MS);
|
|
36
|
+
return {
|
|
37
|
+
attempts,
|
|
38
|
+
methods: new Set((policy.methods ?? DEFAULT_RETRY_METHODS).map((method) => method.toUpperCase())),
|
|
39
|
+
statuses: new Set(policy.statuses ?? DEFAULT_RETRY_STATUSES),
|
|
40
|
+
retryOnConnectionError: policy.retryOnConnectionError ?? true,
|
|
41
|
+
baseDelayMs,
|
|
42
|
+
maxDelayMs,
|
|
43
|
+
jitter: policy.jitter ?? true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function retryAfterDelayMs(res) {
|
|
47
|
+
const retryAfter = res.headers.get('retry-after');
|
|
48
|
+
if (!retryAfter) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const seconds = Number(retryAfter);
|
|
52
|
+
if (Number.isFinite(seconds) && seconds >= 0) {
|
|
53
|
+
return seconds * 1000;
|
|
54
|
+
}
|
|
55
|
+
const retryAt = Date.parse(retryAfter);
|
|
56
|
+
if (!Number.isNaN(retryAt)) {
|
|
57
|
+
return Math.max(0, retryAt - Date.now());
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
function retryDelayMs(policy, attempt, res) {
|
|
62
|
+
const retryAfter = res ? retryAfterDelayMs(res) : undefined;
|
|
63
|
+
const delay = retryAfter ?? Math.min(policy.maxDelayMs, policy.baseDelayMs * 2 ** attempt);
|
|
64
|
+
return policy.jitter ? Math.floor(Math.random() * delay) : delay;
|
|
65
|
+
}
|
|
66
|
+
function toError(err) {
|
|
67
|
+
return err instanceof Error ? err : new Error(String(err));
|
|
68
|
+
}
|
|
69
|
+
async function discardBody(res) {
|
|
70
|
+
try {
|
|
71
|
+
await res.body?.cancel();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Ignore body cleanup failures while retrying the original request.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export class ClientBase {
|
|
78
|
+
_fetch;
|
|
79
|
+
baseUrl;
|
|
80
|
+
errorFactory = (err) => err;
|
|
81
|
+
verboseErrors = true;
|
|
82
|
+
retryPolicy;
|
|
83
|
+
constructor(baseUrl, fetchImpl) {
|
|
84
|
+
this.baseUrl = removeTrailingSlash(baseUrl);
|
|
85
|
+
this._fetch = fetchPromise(fetchImpl);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Can be subclassed to map to custom errors
|
|
89
|
+
* @param err
|
|
90
|
+
*/
|
|
91
|
+
throwError(err) {
|
|
92
|
+
throw this.errorFactory(err);
|
|
93
|
+
}
|
|
94
|
+
withRetryPolicy(policy) {
|
|
95
|
+
this.retryPolicy = policy || undefined;
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
getRetryPolicy() {
|
|
99
|
+
return this.retryPolicy;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a path to a full URL. If the path is already an absolute URL
|
|
103
|
+
* (starts with http:// or https://), it is returned as-is.
|
|
104
|
+
*/
|
|
105
|
+
getUrl(path) {
|
|
106
|
+
if (path.startsWith('http://') || path.startsWith('https://')) {
|
|
107
|
+
return removeTrailingSlash(path);
|
|
108
|
+
}
|
|
109
|
+
return removeTrailingSlash(join(this.baseUrl, path));
|
|
110
|
+
}
|
|
111
|
+
get(path, params) {
|
|
112
|
+
return this.request('GET', path, params);
|
|
113
|
+
}
|
|
114
|
+
del(path, params) {
|
|
115
|
+
return this.request('DELETE', path, params);
|
|
116
|
+
}
|
|
117
|
+
delete(path, params) {
|
|
118
|
+
return this.request('DELETE', path, params);
|
|
119
|
+
}
|
|
120
|
+
post(path, params) {
|
|
121
|
+
return this.request('POST', path, params);
|
|
122
|
+
}
|
|
123
|
+
put(path, params) {
|
|
124
|
+
return this.request('PUT', path, params);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* You can customize the json parser by overriding this method
|
|
128
|
+
* @param text
|
|
129
|
+
* @returns
|
|
130
|
+
*/
|
|
131
|
+
jsonParse(text) {
|
|
132
|
+
return JSON.parse(text);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Can be overridden to create the request
|
|
136
|
+
* @param fetch
|
|
137
|
+
* @param url
|
|
138
|
+
* @param init
|
|
139
|
+
* @returns
|
|
140
|
+
*/
|
|
141
|
+
createRequest(url, init) {
|
|
142
|
+
return Promise.resolve(new Request(url, init));
|
|
143
|
+
}
|
|
144
|
+
handleFetchResponse(_req, _res) { }
|
|
145
|
+
createServerError(req, res, payload) {
|
|
146
|
+
const status = res.status;
|
|
147
|
+
let message = `Server Error: ${status}`;
|
|
148
|
+
if (payload) {
|
|
149
|
+
if (isInvalidJsonPayload(payload)) {
|
|
150
|
+
message += res.statusText ? ` ${res.statusText}` : '';
|
|
151
|
+
message += ': non-JSON response';
|
|
152
|
+
}
|
|
153
|
+
else if (isRecord(payload) && payload.message) {
|
|
154
|
+
message = String(payload.message);
|
|
155
|
+
}
|
|
156
|
+
else if (isRecord(payload) && payload.error) {
|
|
157
|
+
if (typeof payload.error === 'string') {
|
|
158
|
+
message = String(payload.error);
|
|
159
|
+
}
|
|
160
|
+
else if (isRecord(payload.error) && typeof payload.error.message === 'string') {
|
|
161
|
+
message = payload.error.message;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return new ServerError(message, req, res.status, payload, this.verboseErrors);
|
|
166
|
+
}
|
|
167
|
+
async readJSONPayload(res) {
|
|
168
|
+
return res
|
|
169
|
+
.text()
|
|
170
|
+
.then((text) => {
|
|
171
|
+
if (!text) {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
try {
|
|
176
|
+
return this.jsonParse(text);
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
return {
|
|
180
|
+
status: res.status,
|
|
181
|
+
error: 'Not a valid JSON payload',
|
|
182
|
+
message: err instanceof Error ? err.message : String(err),
|
|
183
|
+
text: text,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
.catch((err) => {
|
|
189
|
+
return {
|
|
190
|
+
status: res.status,
|
|
191
|
+
error: 'Unable to load response content',
|
|
192
|
+
message: err instanceof Error ? err.message : String(err),
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Subclasses You can override this to do something with the response
|
|
198
|
+
* @param res
|
|
199
|
+
*/
|
|
200
|
+
handleResponse(req, res, params) {
|
|
201
|
+
if (params?.reader) {
|
|
202
|
+
if (params.reader === 'sse') {
|
|
203
|
+
return sse(res);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return params.reader.call(this, res);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
return this.readJSONPayload(res).then((payload) => {
|
|
211
|
+
if (res.ok) {
|
|
212
|
+
return payload;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.throwError(this.createServerError(req, res, payload));
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async request(method, path, params) {
|
|
221
|
+
let url = this.getUrl(path);
|
|
222
|
+
if (params?.query) {
|
|
223
|
+
url += `?${buildQueryString(params.query)}`;
|
|
224
|
+
}
|
|
225
|
+
const headers = this.headers ? Object.assign({}, this.headers) : {};
|
|
226
|
+
const paramsHeaders = params?.headers;
|
|
227
|
+
if (paramsHeaders) {
|
|
228
|
+
for (const key in paramsHeaders) {
|
|
229
|
+
headers[key.toLowerCase()] = paramsHeaders[key];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
let body;
|
|
233
|
+
const payload = params?.payload;
|
|
234
|
+
if (payload) {
|
|
235
|
+
if (params && params.jsonPayload === false) {
|
|
236
|
+
body = payload;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
body = typeof payload !== 'string' ? JSON.stringify(payload) : payload;
|
|
240
|
+
if (!('content-type' in headers)) {
|
|
241
|
+
headers['content-type'] = 'application/json';
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// When using SSE reader, ensure the Accept header requests event-stream
|
|
246
|
+
if (params?.reader === 'sse') {
|
|
247
|
+
headers.accept = 'text/event-stream';
|
|
248
|
+
}
|
|
249
|
+
const normalizedMethod = method.toUpperCase();
|
|
250
|
+
const createRequestInit = () => {
|
|
251
|
+
return {
|
|
252
|
+
method: normalizedMethod,
|
|
253
|
+
headers: Object.assign({}, headers),
|
|
254
|
+
body: body,
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
const retryPolicy = this.resolveRetryPolicy(params);
|
|
258
|
+
const fetch = await this._fetch;
|
|
259
|
+
if (!retryPolicy) {
|
|
260
|
+
const req = await this.createRequest(url, createRequestInit());
|
|
261
|
+
let res;
|
|
262
|
+
try {
|
|
263
|
+
res = await fetch(req);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
console.error(`Failed to connect to ${url}`, err);
|
|
267
|
+
this.throwError(new ConnectionError(req, toError(err)));
|
|
268
|
+
}
|
|
269
|
+
this.handleFetchResponse(req, res);
|
|
270
|
+
return this.handleResponse(req, res, params);
|
|
271
|
+
}
|
|
272
|
+
const replayableBody = isReplayableBody(body);
|
|
273
|
+
let lastReq;
|
|
274
|
+
for (let attempt = 0; attempt < retryPolicy.attempts; attempt++) {
|
|
275
|
+
const req = await this.createRequest(url, createRequestInit());
|
|
276
|
+
lastReq = req;
|
|
277
|
+
let res;
|
|
278
|
+
try {
|
|
279
|
+
res = await fetch(req);
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
if (!this.shouldRetryConnectionError(retryPolicy, normalizedMethod, attempt, replayableBody)) {
|
|
283
|
+
console.error(`Failed to connect to ${url}`, err);
|
|
284
|
+
this.throwError(new ConnectionError(req, toError(err)));
|
|
285
|
+
}
|
|
286
|
+
await this.waitBeforeRetry(retryPolicy, attempt);
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
this.handleFetchResponse(req, res);
|
|
290
|
+
if (this.shouldRetryResponse(retryPolicy, normalizedMethod, attempt, replayableBody, res)) {
|
|
291
|
+
await discardBody(res);
|
|
292
|
+
await this.waitBeforeRetry(retryPolicy, attempt, res);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
return this.handleResponse(req, res, params);
|
|
296
|
+
}
|
|
297
|
+
if (lastReq) {
|
|
298
|
+
this.throwError(new ConnectionError(lastReq, new Error(`Retry attempts exhausted for ${normalizedMethod} ${url}`)));
|
|
299
|
+
}
|
|
300
|
+
throw new Error(`Retry attempts exhausted for ${normalizedMethod} ${url}`);
|
|
301
|
+
}
|
|
302
|
+
resolveRetryPolicy(params) {
|
|
303
|
+
if (params?.reader === 'sse' || params?.retryPolicy === false || params?.retryPolicy === null) {
|
|
304
|
+
return undefined;
|
|
305
|
+
}
|
|
306
|
+
const requestPolicy = params?.retryPolicy;
|
|
307
|
+
const clientPolicy = this.getRetryPolicy();
|
|
308
|
+
if (!requestPolicy && !clientPolicy) {
|
|
309
|
+
return undefined;
|
|
310
|
+
}
|
|
311
|
+
const policy = normalizeRetryPolicy({
|
|
312
|
+
...clientPolicy,
|
|
313
|
+
...requestPolicy,
|
|
314
|
+
});
|
|
315
|
+
return policy.attempts > 1 ? policy : undefined;
|
|
316
|
+
}
|
|
317
|
+
shouldRetryResponse(policy, method, attempt, replayableBody, res) {
|
|
318
|
+
return (attempt < policy.attempts - 1 &&
|
|
319
|
+
replayableBody &&
|
|
320
|
+
policy.methods.has(method) &&
|
|
321
|
+
policy.statuses.has(res.status));
|
|
322
|
+
}
|
|
323
|
+
shouldRetryConnectionError(policy, method, attempt, replayableBody) {
|
|
324
|
+
return (attempt < policy.attempts - 1 &&
|
|
325
|
+
replayableBody &&
|
|
326
|
+
policy.retryOnConnectionError &&
|
|
327
|
+
policy.methods.has(method));
|
|
328
|
+
}
|
|
329
|
+
waitBeforeRetry(policy, attempt, res) {
|
|
330
|
+
const delay = retryDelayMs(policy, attempt, res);
|
|
331
|
+
return new Promise((resolve) => setTimeout(resolve, delay));
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Perform a request and consume the response as an SSE stream.
|
|
335
|
+
* Calls `onEvent` for each parsed SSE event, then returns the last event.
|
|
336
|
+
*
|
|
337
|
+
* @param method HTTP method
|
|
338
|
+
* @param path URL path (relative to baseUrl) or absolute URL (http:// or https://)
|
|
339
|
+
* @param params Request parameters (payload, headers, query)
|
|
340
|
+
* @param onEvent Callback for each SSE event
|
|
341
|
+
* @returns The last SSE event received, or undefined if the stream was empty
|
|
342
|
+
*/
|
|
343
|
+
async sseRequest(method, path, params, onEvent) {
|
|
344
|
+
const stream = (await this.request(method, path, {
|
|
345
|
+
...params,
|
|
346
|
+
reader: 'sse',
|
|
347
|
+
}));
|
|
348
|
+
const reader = stream.getReader();
|
|
349
|
+
let lastEvent;
|
|
350
|
+
try {
|
|
351
|
+
while (true) {
|
|
352
|
+
const { done, value } = await reader.read();
|
|
353
|
+
if (done)
|
|
354
|
+
break;
|
|
355
|
+
lastEvent = value;
|
|
356
|
+
onEvent(value);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
finally {
|
|
360
|
+
reader.releaseLock();
|
|
361
|
+
}
|
|
362
|
+
return lastEvent;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Expose the fetch method
|
|
366
|
+
* @param input
|
|
367
|
+
* @param init
|
|
368
|
+
* @returns
|
|
369
|
+
*/
|
|
370
|
+
fetch(input, init) {
|
|
371
|
+
return this._fetch.then((fetch) => fetch(input, init));
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=base.js.map
|
package/lib/base.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAwB,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA8CzE,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1E,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/C,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AACxC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACvD,CAAC;AA+BD,MAAM,UAAU,YAAY,CAAC,SAAwC;IACjE,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACJ,wBAAwB;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgB;IAC1C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,0BAA0B,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;AACjH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA0B;IAChD,OAAO,CAAC,IAAI,IAAI,OAAO,cAAc,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,YAAY,cAAc,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA2B;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,sBAAsB,CAAC,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,IAAI,2BAA2B,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,0BAA0B,CAAC,CAAC;IAC1F,OAAO;QACH,QAAQ;QACR,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACjG,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,sBAAsB,CAAC;QAC5D,sBAAsB,EAAE,MAAM,CAAC,sBAAsB,IAAI,IAAI;QAC7D,WAAW;QACX,UAAU;QACV,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;KAChC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAa;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,MAA6B,EAAE,OAAe,EAAE,GAAc;IAChF,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACrE,CAAC;AAED,SAAS,OAAO,CAAC,GAAY;IACzB,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAa;IACpC,IAAI,CAAC;QACD,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACL,oEAAoE;IACxE,CAAC;AACL,CAAC;AAED,MAAM,OAAgB,UAAU;IAC5B,MAAM,CAAoB;IAC1B,OAAO,CAAS;IAChB,YAAY,GAAiC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;IAC1D,aAAa,GAAG,IAAI,CAAC;IACrB,WAAW,CAAuB;IAIlC,YAAY,OAAe,EAAE,SAAwC;QACjE,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,GAAiB;QACxB,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,eAAe,CAAC,MAAmC;QAC/C,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,IAAY;QACf,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAc,IAAY,EAAE,MAAuB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,GAAG,CAAc,IAAY,EAAE,MAAuB;QAClD,OAAO,IAAI,CAAC,OAAO,CAAI,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,MAAuB;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAc,IAAY,EAAE,MAAkC;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,GAAG,CAAc,IAAY,EAAE,MAAkC;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,GAAW,EAAE,IAAiB;QACxC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,mBAAmB,CAAC,IAAa,EAAE,IAAc,IAAS,CAAC;IAE3D,iBAAiB,CAAC,GAAY,EAAE,GAAa,EAAE,OAAgB;QAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,IAAI,OAAO,GAAG,iBAAiB,MAAM,EAAE,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,OAAO,IAAI,qBAAqB,CAAC;YACrC,CAAC;iBAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC9C,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC5C,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACpC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;qBAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC9E,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBACpC,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAa;QAC/B,OAAO,GAAG;aACL,IAAI,EAAE;aACN,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACX,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,OAAO,SAAS,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC;oBACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACpB,OAAO;wBACH,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,KAAK,EAAE,0BAA0B;wBACjC,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;wBACzD,IAAI,EAAE,IAAI;qBACb,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACpB,OAAO;gBACH,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,iCAAiC;gBACxC,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC5D,CAAC;QACN,CAAC,CAAC,CAAC;IACX,CAAC;IAED;;;OAGG;IACH,cAAc,CACV,GAAY,EACZ,GAAa,EACb,MAA6C;QAE7C,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YACjB,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1B,OAAO,GAAG,CAAC,GAAG,CAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAmB,CAAC;YAC3D,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC9C,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;oBACT,OAAO,OAAY,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAc,MAAc,EAAE,IAAY,EAAE,MAAkC;QACvF,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;YAChB,GAAG,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,EAAE,OAAO,CAAC;QACtC,IAAI,aAAa,EAAE,CAAC;YAChB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QACD,IAAI,IAA0B,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;gBACzC,IAAI,GAAG,OAAmB,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACvE,IAAI,CAAC,CAAC,cAAc,IAAI,OAAO,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;gBACjD,CAAC;YACL,CAAC;QACL,CAAC;QACD,wEAAwE;QACxE,IAAI,MAAM,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC;QACzC,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,iBAAiB,GAAG,GAAgB,EAAE;YACxC,OAAO;gBACH,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;gBACnC,IAAI,EAAE,IAAI;aACb,CAAC;QACN,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;QAEhC,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC/D,IAAI,GAAa,CAAC;YAClB,IAAI,CAAC;gBACD,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC,cAAc,CAAI,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,OAA4B,CAAC;QACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC/D,OAAO,GAAG,GAAG,CAAC;YACd,IAAI,GAAa,CAAC;YAClB,IAAI,CAAC;gBACD,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC;oBAC3F,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;oBAClD,IAAI,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACjD,SAAS;YACb,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxF,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;gBACvB,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;gBACtD,SAAS;YACb,CAAC;YACD,OAAO,IAAI,CAAC,cAAc,CAAI,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,CACX,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,gCAAgC,gBAAgB,IAAI,GAAG,EAAE,CAAC,CAAC,CACrG,CAAC;QACN,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,gBAAgB,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/E,CAAC;IAES,kBAAkB,CAAC,MAA6C;QACtE,IAAI,MAAM,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,EAAE,WAAW,KAAK,KAAK,IAAI,MAAM,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5F,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,EAAE,WAAW,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,oBAAoB,CAAC;YAChC,GAAG,YAAY;YACf,GAAG,aAAa;SACnB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAEO,mBAAmB,CACvB,MAA6B,EAC7B,MAAc,EACd,OAAe,EACf,cAAuB,EACvB,GAAa;QAEb,OAAO,CACH,OAAO,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC7B,cAAc;YACd,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAClC,CAAC;IACN,CAAC;IAEO,0BAA0B,CAC9B,MAA6B,EAC7B,MAAc,EACd,OAAe,EACf,cAAuB;QAEvB,OAAO,CACH,OAAO,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC7B,cAAc;YACd,MAAM,CAAC,sBAAsB;YAC7B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAC7B,CAAC;IACN,CAAC;IAEO,eAAe,CAAC,MAA6B,EAAE,OAAe,EAAE,GAAc;QAClF,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,UAAU,CACZ,MAAc,EACd,IAAY,EACZ,MAA6C,EAC7C,OAAyC;QAEzC,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE;YAC7C,GAAG,MAAM;YACT,MAAM,EAAE,KAAK;SAChB,CAAC,CAAoC,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,SAAsC,CAAC;QAE3C,IAAI,CAAC;YACD,OAAO,IAAI,EAAE,CAAC;gBACV,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,SAAS,GAAG,KAAK,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,MAAM,CAAC,WAAW,EAAE,CAAC;QACzB,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAkB,EAAE,IAAkB;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ClientBase, FETCH_FN, IRequestParamsWithPayload } from
|
|
2
|
-
import { RequestError } from
|
|
1
|
+
import { ClientBase, type FETCH_FN, type IRequestParamsWithPayload } from './base.js';
|
|
2
|
+
import type { RequestError } from './errors.js';
|
|
3
3
|
export declare class AbstractFetchClient<T extends AbstractFetchClient<T>> extends ClientBase {
|
|
4
4
|
headers: Record<string, string>;
|
|
5
5
|
_auth?: () => Promise<string>;
|
|
@@ -7,9 +7,7 @@ export declare class AbstractFetchClient<T extends AbstractFetchClient<T>> exten
|
|
|
7
7
|
onResponse?: (res: Response, req: Request) => void;
|
|
8
8
|
response?: Response;
|
|
9
9
|
constructor(baseUrl: string, fetchImpl?: FETCH_FN | Promise<FETCH_FN>);
|
|
10
|
-
get initialHeaders():
|
|
11
|
-
accept: string;
|
|
12
|
-
};
|
|
10
|
+
get initialHeaders(): Record<string, string>;
|
|
13
11
|
/**
|
|
14
12
|
* Install an auth callback. If the callback is undefined or null then remove the auth callback.
|
|
15
13
|
* @param authCb a function returning a promise that resolves to the value to use for the authorization header
|
|
@@ -21,16 +19,17 @@ export declare class AbstractFetchClient<T extends AbstractFetchClient<T>> exten
|
|
|
21
19
|
withHeaders(headers: Record<string, string>): T;
|
|
22
20
|
setHeader(key: string, value: string | undefined): void;
|
|
23
21
|
createRequest(url: string, init: RequestInit): Promise<Request>;
|
|
24
|
-
|
|
22
|
+
handleFetchResponse(req: Request, res: Response): void;
|
|
25
23
|
}
|
|
26
24
|
export declare class FetchClient extends AbstractFetchClient<FetchClient> {
|
|
27
|
-
constructor(baseUrl: string, fetchImpl?: FETCH_FN | Promise<FETCH_FN>);
|
|
28
25
|
}
|
|
29
26
|
export declare abstract class ApiTopic extends ClientBase {
|
|
30
27
|
client: ClientBase;
|
|
31
28
|
constructor(client: ClientBase, basePath: string);
|
|
32
29
|
createRequest(url: string, init: RequestInit): Promise<Request>;
|
|
33
|
-
handleResponse(req: Request, res: Response, params: IRequestParamsWithPayload | undefined): Promise<
|
|
30
|
+
handleResponse<T = unknown>(req: Request, res: Response, params: IRequestParamsWithPayload | undefined): T | Promise<T>;
|
|
31
|
+
handleFetchResponse(req: Request, res: Response): void;
|
|
32
|
+
getRetryPolicy(): import("./base.js").IRequestRetryPolicy | undefined;
|
|
34
33
|
get headers(): Record<string, string>;
|
|
35
34
|
}
|
|
36
35
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqBhD,qBAAa,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,CAAC,CAAC,CAAC,CAAE,SAAQ,UAAU;IACjF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEnD,QAAQ,CAAC,EAAE,QAAQ,CAAC;gBAER,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMrE,IAAI,cAAc,2BAMjB;IAED;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI;IAKxD,gBAAgB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,KAAK,GAExB,CAAC;IAG/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAMZ,CAAC;IAG/B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAQb,CAAC;IAG/B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS;IAQ1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAelD,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;CAIzD;AAED,qBAAa,WAAY,SAAQ,mBAAmB,CAAC,WAAW,CAAC;CAAG;AAEpE,8BAAsB,QAAS,SAAQ,UAAU;IAElC,MAAM,EAAE,UAAU;gBAAlB,MAAM,EAAE,UAAU,EACzB,QAAQ,EAAE,MAAM;IAUpB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/D,cAAc,CAAC,CAAC,GAAG,OAAO,EACtB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,yBAAyB,GAAG,SAAS,GAC9C,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;IAItD,cAAc;IAId,IAAI,OAAO,2BAEV;CACJ"}
|