@amigo-ai/platform-sdk 0.4.1 → 0.4.2
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 +87 -0
- package/api.md +354 -0
- package/dist/core/errors.js +26 -4
- package/dist/core/errors.js.map +1 -1
- package/dist/core/openapi-client.js +108 -6
- package/dist/core/openapi-client.js.map +1 -1
- package/dist/core/retry.js +5 -2
- package/dist/core/retry.js.map +1 -1
- package/dist/core/utils.js +48 -2
- package/dist/core/utils.js.map +1 -1
- package/dist/index.cjs +258 -38
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +50 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +258 -38
- package/dist/index.mjs.map +4 -4
- package/dist/types/core/errors.d.ts +6 -0
- package/dist/types/core/errors.d.ts.map +1 -1
- package/dist/types/core/openapi-client.d.ts +24 -1
- package/dist/types/core/openapi-client.d.ts.map +1 -1
- package/dist/types/core/retry.d.ts +1 -1
- package/dist/types/core/retry.d.ts.map +1 -1
- package/dist/types/core/utils.d.ts +27 -1
- package/dist/types/core/utils.d.ts.map +1 -1
- package/dist/types/index.d.ts +40 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/resources/actions.d.ts +5 -5
- package/dist/types/resources/agents.d.ts +7 -7
- package/dist/types/resources/analytics.d.ts +11 -11
- package/dist/types/resources/api-keys.d.ts +4 -4
- package/dist/types/resources/audit.d.ts +6 -6
- package/dist/types/resources/billing.d.ts +6 -6
- package/dist/types/resources/calls.d.ts +6 -6
- package/dist/types/resources/compliance.d.ts +3 -3
- package/dist/types/resources/context-graphs.d.ts +7 -7
- package/dist/types/resources/data-sources.d.ts +6 -6
- package/dist/types/resources/functions.d.ts +6 -6
- package/dist/types/resources/integrations.d.ts +6 -6
- package/dist/types/resources/memory.d.ts +3 -3
- package/dist/types/resources/operators.d.ts +18 -18
- package/dist/types/resources/personas.d.ts +4 -4
- package/dist/types/resources/phone-numbers.d.ts +5 -5
- package/dist/types/resources/recordings.d.ts +2 -2
- package/dist/types/resources/review-queue.d.ts +17 -17
- package/dist/types/resources/safety.d.ts +5 -5
- package/dist/types/resources/services.d.ts +4 -4
- package/dist/types/resources/settings.d.ts +14 -14
- package/dist/types/resources/simulations.d.ts +6 -6
- package/dist/types/resources/skills.d.ts +5 -5
- package/dist/types/resources/triggers.d.ts +8 -8
- package/dist/types/resources/webhook-destinations.d.ts +6 -6
- package/dist/types/resources/workspaces.d.ts +5 -5
- package/dist/types/resources/world.d.ts +18 -18
- package/package.json +2 -1
|
@@ -7,25 +7,38 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import createClientImport from 'openapi-fetch';
|
|
9
9
|
import { createAuthMiddleware } from './auth.js';
|
|
10
|
-
import { createApiError, NetworkError } from './errors.js';
|
|
10
|
+
import { createApiError, NetworkError, RequestTimeoutError } from './errors.js';
|
|
11
|
+
import { parseRateLimitHeaders } from './rate-limit.js';
|
|
11
12
|
import { shouldRetry, computeDelay, resolveRetryOptions } from './retry.js';
|
|
13
|
+
import { extractRequestId } from './utils.js';
|
|
12
14
|
// Handle ESM/CJS interop for openapi-fetch (esbuild __toESM wrapper)
|
|
13
15
|
const createClient = typeof createClientImport === 'function'
|
|
14
16
|
? createClientImport
|
|
15
17
|
: createClientImport.default;
|
|
16
18
|
export function createPlatformClient(config) {
|
|
17
|
-
const retryOpts = resolveRetryOptions(config.retry);
|
|
18
19
|
const baseFetch = config.fetch ?? globalThis.fetch;
|
|
19
20
|
// Wrap fetch with retry logic
|
|
20
21
|
const retryingFetch = async (input, init) => {
|
|
21
|
-
const
|
|
22
|
-
const
|
|
22
|
+
const baseRequest = input instanceof Request ? input : new Request(input, init);
|
|
23
|
+
const method = baseRequest.method.toUpperCase();
|
|
24
|
+
const requestRetry = getRequestOption(baseRequest, 'retry');
|
|
25
|
+
const requestMaxRetries = getRequestOption(baseRequest, 'maxRetries');
|
|
26
|
+
const retryOpts = resolveRetryOptions(requestRetry ?? config.retry, requestMaxRetries ?? config.maxRetries);
|
|
27
|
+
const timeoutMs = getRequestOption(baseRequest, 'timeout') ?? config.timeout;
|
|
23
28
|
const isIdempotent = method === 'GET' || method === 'HEAD' || method === 'OPTIONS';
|
|
24
29
|
for (let attempt = 0; attempt < retryOpts.maxAttempts; attempt++) {
|
|
25
30
|
let response;
|
|
26
31
|
let error;
|
|
32
|
+
let timedOut = false;
|
|
27
33
|
try {
|
|
28
|
-
|
|
34
|
+
const prepared = prepareRequestForAttempt(baseRequest, timeoutMs);
|
|
35
|
+
try {
|
|
36
|
+
response = await baseFetch(prepared.request, init);
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
timedOut = prepared.timedOut;
|
|
40
|
+
prepared.cleanup();
|
|
41
|
+
}
|
|
29
42
|
}
|
|
30
43
|
catch (err) {
|
|
31
44
|
error = err;
|
|
@@ -35,6 +48,9 @@ export function createPlatformClient(config) {
|
|
|
35
48
|
const ctx = { method, attempt, response: response, options: retryOpts };
|
|
36
49
|
const attemptsRemain = attempt + 1 < retryOpts.maxAttempts;
|
|
37
50
|
if (error) {
|
|
51
|
+
if (timedOut) {
|
|
52
|
+
throw new RequestTimeoutError(`Request timed out after ${timeoutMs}ms`, timeoutMs, error);
|
|
53
|
+
}
|
|
38
54
|
if (isIdempotent && attemptsRemain) {
|
|
39
55
|
await sleep(computeDelay(attempt, new Response(), retryOpts));
|
|
40
56
|
continue;
|
|
@@ -43,7 +59,7 @@ export function createPlatformClient(config) {
|
|
|
43
59
|
}
|
|
44
60
|
if (response && attemptsRemain && shouldRetry(ctx)) {
|
|
45
61
|
const delay = computeDelay(attempt, response, retryOpts);
|
|
46
|
-
if (signal
|
|
62
|
+
if (baseRequest.signal.aborted)
|
|
47
63
|
return response;
|
|
48
64
|
await sleep(delay);
|
|
49
65
|
continue;
|
|
@@ -55,6 +71,7 @@ export function createPlatformClient(config) {
|
|
|
55
71
|
const client = createClient({
|
|
56
72
|
baseUrl: config.baseUrl,
|
|
57
73
|
fetch: retryingFetch,
|
|
74
|
+
headers: config.headers,
|
|
58
75
|
});
|
|
59
76
|
// Error middleware — convert HTTP errors to typed AmigoError subclasses
|
|
60
77
|
const errorMiddleware = {
|
|
@@ -67,12 +84,97 @@ export function createPlatformClient(config) {
|
|
|
67
84
|
};
|
|
68
85
|
// Auth middleware — attach Bearer token
|
|
69
86
|
const authMiddleware = createAuthMiddleware({ apiKey: config.apiKey });
|
|
87
|
+
const hookMiddleware = config.hooks
|
|
88
|
+
? {
|
|
89
|
+
async onRequest({ request, schemaPath, id }) {
|
|
90
|
+
await config.hooks?.onRequest?.({ request, schemaPath, id });
|
|
91
|
+
return request;
|
|
92
|
+
},
|
|
93
|
+
async onResponse({ request, response, schemaPath, id }) {
|
|
94
|
+
await config.hooks?.onResponse?.({
|
|
95
|
+
id,
|
|
96
|
+
request,
|
|
97
|
+
response,
|
|
98
|
+
schemaPath,
|
|
99
|
+
requestId: extractRequestId(response),
|
|
100
|
+
rateLimit: parseRateLimitHeaders(response.headers),
|
|
101
|
+
});
|
|
102
|
+
return response;
|
|
103
|
+
},
|
|
104
|
+
async onError({ request, error, schemaPath, id }) {
|
|
105
|
+
await config.hooks?.onError?.({ id, request, error, schemaPath });
|
|
106
|
+
},
|
|
107
|
+
}
|
|
108
|
+
: undefined;
|
|
70
109
|
// Order: auth first (adds header), then error (converts failures)
|
|
71
110
|
client.use(authMiddleware);
|
|
72
111
|
client.use(errorMiddleware);
|
|
112
|
+
if (hookMiddleware) {
|
|
113
|
+
client.use(hookMiddleware);
|
|
114
|
+
}
|
|
73
115
|
return client;
|
|
74
116
|
}
|
|
75
117
|
function sleep(ms) {
|
|
76
118
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
77
119
|
}
|
|
120
|
+
function getRequestOption(request, key) {
|
|
121
|
+
const value = request[key];
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
function prepareRequestForAttempt(request, timeoutMs) {
|
|
125
|
+
const attemptRequest = request.clone();
|
|
126
|
+
const timeout = createTimeoutSignal(attemptRequest.signal, timeoutMs);
|
|
127
|
+
if (!timeout.signal) {
|
|
128
|
+
return {
|
|
129
|
+
request: attemptRequest,
|
|
130
|
+
timedOut: false,
|
|
131
|
+
cleanup: timeout.cleanup,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
request: new Request(attemptRequest, { signal: timeout.signal }),
|
|
136
|
+
get timedOut() {
|
|
137
|
+
return timeout.didTimeout;
|
|
138
|
+
},
|
|
139
|
+
cleanup: timeout.cleanup,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function createTimeoutSignal(upstream, timeoutMs) {
|
|
143
|
+
if (!timeoutMs || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
144
|
+
return {
|
|
145
|
+
signal: upstream ?? undefined,
|
|
146
|
+
didTimeout: false,
|
|
147
|
+
cleanup: () => { },
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const controller = new AbortController();
|
|
151
|
+
let didTimeout = false;
|
|
152
|
+
const cleanups = [];
|
|
153
|
+
const onAbort = () => controller.abort(upstream?.reason);
|
|
154
|
+
if (upstream) {
|
|
155
|
+
if (upstream.aborted) {
|
|
156
|
+
controller.abort(upstream.reason);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
upstream.addEventListener('abort', onAbort, { once: true });
|
|
160
|
+
cleanups.push(() => upstream.removeEventListener('abort', onAbort));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const timer = setTimeout(() => {
|
|
164
|
+
didTimeout = true;
|
|
165
|
+
controller.abort();
|
|
166
|
+
}, timeoutMs);
|
|
167
|
+
cleanups.push(() => clearTimeout(timer));
|
|
168
|
+
return {
|
|
169
|
+
signal: controller.signal,
|
|
170
|
+
get didTimeout() {
|
|
171
|
+
return didTimeout;
|
|
172
|
+
},
|
|
173
|
+
cleanup: () => {
|
|
174
|
+
for (const cleanup of cleanups) {
|
|
175
|
+
cleanup();
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
78
180
|
//# sourceMappingURL=openapi-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-client.js","sourceRoot":"","sources":["../../src/core/openapi-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"openapi-client.js","sourceRoot":"","sources":["../../src/core/openapi-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,kBAA4D,MAAM,eAAe,CAAA;AAExF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAqB,MAAM,YAAY,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C,qEAAqE;AACrE,MAAM,YAAY,GAChB,OAAO,kBAAkB,KAAK,UAAU;IACtC,CAAC,CAAC,kBAAkB;IACpB,CAAC,CAAE,kBAAwE,CAAC,OAAO,CAAA;AAsCvF,MAAM,UAAU,oBAAoB,CAAC,MAAoB;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAElD,8BAA8B;IAC9B,MAAM,aAAa,GAA4B,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnE,MAAM,WAAW,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC/E,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QAC/C,MAAM,YAAY,GAAG,gBAAgB,CAAe,WAAW,EAAE,OAAO,CAAC,CAAA;QACzE,MAAM,iBAAiB,GAAG,gBAAgB,CAAS,WAAW,EAAE,YAAY,CAAC,CAAA;QAC7E,MAAM,SAAS,GAAG,mBAAmB,CACnC,YAAY,IAAI,MAAM,CAAC,KAAK,EAC5B,iBAAiB,IAAI,MAAM,CAAC,UAAU,CACvC,CAAA;QACD,MAAM,SAAS,GAAG,gBAAgB,CAAS,WAAW,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAA;QACpF,MAAM,YAAY,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAA;QAElF,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACjE,IAAI,QAA8B,CAAA;YAClC,IAAI,KAAc,CAAA;YAClB,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,wBAAwB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;gBAEjE,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACpD,CAAC;wBAAS,CAAC;oBACT,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;oBAC5B,QAAQ,CAAC,OAAO,EAAE,CAAA;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,GAAG,GAAG,CAAA;YACb,CAAC;YAED,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,EAAE;gBAAE,OAAO,QAAQ,CAAA;YAEtD,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;YACxE,MAAM,cAAc,GAAG,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,WAAW,CAAA;YAE1D,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,SAAS,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC3F,CAAC;gBACD,IAAI,YAAY,IAAI,cAAc,EAAE,CAAC;oBACnC,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAA;oBAC7D,SAAQ;gBACV,CAAC;gBACD,MAAM,IAAI,YAAY,CACpB,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC1E,KAAK,CACN,CAAA;YACH,CAAC;YAED,IAAI,QAAQ,IAAI,cAAc,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;gBACxD,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAO,QAAQ,CAAA;gBAC/C,MAAM,KAAK,CAAC,KAAK,CAAC,CAAA;gBAClB,SAAQ;YACV,CAAC;YAED,OAAO,QAAS,CAAA;QAClB,CAAC;QAED,MAAM,IAAI,YAAY,CAAC,sBAAsB,CAAC,CAAA;IAChD,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,YAAY,CAAQ;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAA;IAEF,wEAAwE;IACxE,MAAM,eAAe,GAAe;QAClC,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAA;YACtC,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC;KACF,CAAA;IAED,wCAAwC;IACxC,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACtE,MAAM,cAAc,GAA2B,MAAM,CAAC,KAAK;QACzD,CAAC,CAAC;YACE,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;gBACzC,MAAM,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC5D,OAAO,OAAO,CAAA;YAChB,CAAC;YACD,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;gBACpD,MAAM,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;oBAC/B,EAAE;oBACF,OAAO;oBACP,QAAQ;oBACR,UAAU;oBACV,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC;oBACrC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnD,CAAC,CAAA;gBACF,OAAO,QAAQ,CAAA;YACjB,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;gBAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;YACnE,CAAC;SACF;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,kEAAkE;IAClE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC1B,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAC3B,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAI,OAAgB,EAAE,GAAW;IACxD,MAAM,KAAK,GAAI,OAA6C,CAAC,GAAG,CAAC,CAAA;IACjE,OAAO,KAAsB,CAAA;AAC/B,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAgB,EAChB,SAAkB;IAMlB,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;IACtC,MAAM,OAAO,GAAG,mBAAmB,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAErE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAA;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAChE,IAAI,QAAQ;YACV,OAAO,OAAO,CAAC,UAAU,CAAA;QAC3B,CAAC;QACD,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAA4B,EAC5B,SAAkB;IAMlB,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO;YACL,MAAM,EAAE,QAAQ,IAAI,SAAS;YAC7B,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;SAClB,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,MAAM,QAAQ,GAAsB,EAAE,CAAA;IAEtC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,UAAU,GAAG,IAAI,CAAA;QACjB,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC,EAAE,SAAS,CAAC,CAAA;IACb,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IAExC,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,IAAI,UAAU;YACZ,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/core/retry.js
CHANGED
|
@@ -38,9 +38,12 @@ function parseRetryAfterHeader(header) {
|
|
|
38
38
|
}
|
|
39
39
|
return undefined;
|
|
40
40
|
}
|
|
41
|
-
export function resolveRetryOptions(opts) {
|
|
41
|
+
export function resolveRetryOptions(opts, maxRetries) {
|
|
42
|
+
const maxAttempts = typeof maxRetries === 'number' && Number.isFinite(maxRetries)
|
|
43
|
+
? Math.max(1, Math.floor(maxRetries) + 1)
|
|
44
|
+
: (opts?.maxAttempts ?? 3);
|
|
42
45
|
return {
|
|
43
|
-
maxAttempts
|
|
46
|
+
maxAttempts,
|
|
44
47
|
baseDelayMs: opts?.baseDelayMs ?? 250,
|
|
45
48
|
maxDelayMs: opts?.maxDelayMs ?? 30_000,
|
|
46
49
|
};
|
package/dist/core/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/core/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AACtE,8EAA8E;AAC9E,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AASlD,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;IAClD,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC9B,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,OAAO,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,YAAY,
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/core/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AACtE,8EAA8E;AAC9E,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AASlD,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;IAClD,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;IAC9B,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1C,OAAO,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,QAAkB,EAClB,OAA+B;IAE/B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC5D,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAA;QACvD,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,GAAG,IAAI,CAAA;IAClD,CAAC;IAED,6FAA6F;IAC7F,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5F,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAA;AACpC,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAmB,EACnB,UAAmB;IAEnB,MAAM,WAAW,GACf,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3D,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC,CAAA;IAE9B,OAAO;QACL,WAAW;QACX,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,GAAG;QACrC,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,MAAM;KACvC,CAAA;AACH,CAAC"}
|
package/dist/core/utils.js
CHANGED
|
@@ -2,15 +2,38 @@
|
|
|
2
2
|
* Shared utilities: response extraction and pagination helpers.
|
|
3
3
|
*/
|
|
4
4
|
import { ParseError } from './errors.js';
|
|
5
|
+
import { parseRateLimitHeaders } from './rate-limit.js';
|
|
6
|
+
export function extractRequestId(response) {
|
|
7
|
+
return response.headers.get('x-request-id');
|
|
8
|
+
}
|
|
9
|
+
export function buildLastResponse(response) {
|
|
10
|
+
return {
|
|
11
|
+
requestId: extractRequestId(response),
|
|
12
|
+
statusCode: response.status,
|
|
13
|
+
headers: response.headers,
|
|
14
|
+
rateLimit: parseRateLimitHeaders(response.headers),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
5
17
|
/**
|
|
6
18
|
* Extracts the data payload from an openapi-fetch response,
|
|
7
19
|
* throwing ParseError if the response is empty or unexpected.
|
|
8
20
|
*/
|
|
9
21
|
export function extractData(result) {
|
|
10
|
-
if (result.data !== undefined)
|
|
11
|
-
return result.data;
|
|
22
|
+
if (result.data !== undefined) {
|
|
23
|
+
return attachResponseMetadata(result.data, result.response);
|
|
24
|
+
}
|
|
12
25
|
throw new ParseError('Unexpected empty response from API', result.error !== undefined ? JSON.stringify(result.error) : undefined);
|
|
13
26
|
}
|
|
27
|
+
export function withResponse(result) {
|
|
28
|
+
const data = extractData(result);
|
|
29
|
+
const lastResponse = buildLastResponse(result.response);
|
|
30
|
+
return {
|
|
31
|
+
data,
|
|
32
|
+
response: result.response,
|
|
33
|
+
requestId: lastResponse.requestId,
|
|
34
|
+
rateLimit: lastResponse.rateLimit,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
14
37
|
/**
|
|
15
38
|
* Async iterator that auto-paginates through all pages.
|
|
16
39
|
* Yields one item at a time.
|
|
@@ -32,4 +55,27 @@ export async function* paginate(fetcher) {
|
|
|
32
55
|
token = page.continuation_token;
|
|
33
56
|
}
|
|
34
57
|
}
|
|
58
|
+
function attachResponseMetadata(data, response) {
|
|
59
|
+
if (!response || typeof data !== 'object' || data === null) {
|
|
60
|
+
return data;
|
|
61
|
+
}
|
|
62
|
+
const target = data;
|
|
63
|
+
const lastResponse = buildLastResponse(response);
|
|
64
|
+
defineHiddenMetadata(target, '_request_id', lastResponse.requestId);
|
|
65
|
+
defineHiddenMetadata(target, 'lastResponse', lastResponse);
|
|
66
|
+
return target;
|
|
67
|
+
}
|
|
68
|
+
function defineHiddenMetadata(target, key, value) {
|
|
69
|
+
try {
|
|
70
|
+
Object.defineProperty(target, key, {
|
|
71
|
+
value,
|
|
72
|
+
enumerable: false,
|
|
73
|
+
configurable: true,
|
|
74
|
+
writable: false,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Ignore non-extensible return values.
|
|
79
|
+
}
|
|
80
|
+
}
|
|
35
81
|
//# sourceMappingURL=utils.js.map
|
package/dist/core/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"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"}
|