@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
package/dist/index.js
CHANGED
|
@@ -45,8 +45,11 @@ import { WebhookDestinationsResource } from './resources/webhook-destinations.js
|
|
|
45
45
|
import { SafetyResource } from './resources/safety.js';
|
|
46
46
|
import { ComplianceResource } from './resources/compliance.js';
|
|
47
47
|
import { FunctionsResource } from './resources/functions.js';
|
|
48
|
+
import { withResponse } from './core/utils.js';
|
|
48
49
|
export const DEFAULT_BASE_URL = 'https://api.platform.amigo.ai';
|
|
49
50
|
export class AmigoClient {
|
|
51
|
+
workspaceId;
|
|
52
|
+
baseUrl;
|
|
50
53
|
workspaces;
|
|
51
54
|
apiKeys;
|
|
52
55
|
agents;
|
|
@@ -75,6 +78,7 @@ export class AmigoClient {
|
|
|
75
78
|
safety;
|
|
76
79
|
compliance;
|
|
77
80
|
functions;
|
|
81
|
+
api;
|
|
78
82
|
constructor(config) {
|
|
79
83
|
if (!config.apiKey || typeof config.apiKey !== 'string') {
|
|
80
84
|
throw new ConfigurationError('apiKey is required and must be a non-empty string');
|
|
@@ -87,9 +91,16 @@ export class AmigoClient {
|
|
|
87
91
|
apiKey: config.apiKey,
|
|
88
92
|
baseUrl,
|
|
89
93
|
retry: config.retry,
|
|
94
|
+
maxRetries: config.maxRetries,
|
|
95
|
+
timeout: config.timeout,
|
|
96
|
+
headers: config.headers,
|
|
97
|
+
hooks: config.hooks,
|
|
90
98
|
fetch: config.fetch,
|
|
91
99
|
});
|
|
92
100
|
const ws = config.workspaceId;
|
|
101
|
+
this.workspaceId = ws;
|
|
102
|
+
this.baseUrl = baseUrl;
|
|
103
|
+
this.api = client;
|
|
93
104
|
this.workspaces = new WorkspacesResource(client, ws);
|
|
94
105
|
this.apiKeys = new ApiKeysResource(client, ws);
|
|
95
106
|
this.agents = new AgentsResource(client, ws);
|
|
@@ -118,10 +129,48 @@ export class AmigoClient {
|
|
|
118
129
|
this.compliance = new ComplianceResource(client, ws);
|
|
119
130
|
this.functions = new FunctionsResource(client, ws);
|
|
120
131
|
}
|
|
132
|
+
async GET(path, init) {
|
|
133
|
+
return withResponse(await this.api.GET(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
134
|
+
}
|
|
135
|
+
async POST(path, init) {
|
|
136
|
+
return withResponse(await this.api.POST(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
137
|
+
}
|
|
138
|
+
async PUT(path, init) {
|
|
139
|
+
return withResponse(await this.api.PUT(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
140
|
+
}
|
|
141
|
+
async PATCH(path, init) {
|
|
142
|
+
return withResponse(await this.api.PATCH(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
143
|
+
}
|
|
144
|
+
async DELETE(path, init) {
|
|
145
|
+
return withResponse(await this.api.DELETE(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
146
|
+
}
|
|
147
|
+
async HEAD(path, init) {
|
|
148
|
+
return withResponse(await this.api.HEAD(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
149
|
+
}
|
|
150
|
+
async OPTIONS(path, init) {
|
|
151
|
+
return withResponse(await this.api.OPTIONS(path, withWorkspaceId(path, init, this.workspaceId)));
|
|
152
|
+
}
|
|
121
153
|
}
|
|
122
|
-
export { AmigoError, BadRequestError, AuthenticationError, PermissionError, NotFoundError, ConflictError, ValidationError, RateLimitError, ServerError, ServiceUnavailableError, NetworkError, ParseError, ConfigurationError, isAmigoError, isNotFoundError, isRateLimitError, isAuthenticationError, } from './core/errors.js';
|
|
154
|
+
export { AmigoError, BadRequestError, AuthenticationError, PermissionError, NotFoundError, ConflictError, ValidationError, RateLimitError, ServerError, ServiceUnavailableError, NetworkError, RequestTimeoutError, ParseError, ConfigurationError, isAmigoError, isNotFoundError, isRateLimitError, isAuthenticationError, isRequestTimeoutError, } from './core/errors.js';
|
|
123
155
|
export { workspaceId, apiKeyId, agentId, personaId, skillId, actionId, serviceId, contextGraphId, callId, phoneNumberId, integrationId, entityId, eventId, simulationRunId, simulationSessionId, functionId, dataSourceId, } from './core/branded-types.js';
|
|
124
156
|
export { paginate } from './core/utils.js';
|
|
157
|
+
export { buildLastResponse, extractRequestId } from './core/utils.js';
|
|
125
158
|
export { parseRateLimitHeaders } from './core/rate-limit.js';
|
|
126
159
|
export { verifyWebhookSignature, parseWebhookEvent, WebhookVerificationError, } from './core/webhooks.js';
|
|
160
|
+
function withWorkspaceId(path, init, workspaceId) {
|
|
161
|
+
if (!path.includes('{workspace_id}')) {
|
|
162
|
+
return (init ?? {});
|
|
163
|
+
}
|
|
164
|
+
const current = (init ?? {});
|
|
165
|
+
return {
|
|
166
|
+
...current,
|
|
167
|
+
params: {
|
|
168
|
+
...(current.params ?? {}),
|
|
169
|
+
path: {
|
|
170
|
+
workspace_id: workspaceId,
|
|
171
|
+
...(current.params?.path ?? {}),
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
127
176
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -115,6 +115,13 @@ var NetworkError = class extends AmigoError {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
};
|
|
118
|
+
var RequestTimeoutError = class extends NetworkError {
|
|
119
|
+
timeoutMs;
|
|
120
|
+
constructor(message, timeoutMs, cause) {
|
|
121
|
+
super(message, cause);
|
|
122
|
+
this.timeoutMs = timeoutMs;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
118
125
|
var ParseError = class extends AmigoError {
|
|
119
126
|
body;
|
|
120
127
|
constructor(message, body) {
|
|
@@ -188,6 +195,9 @@ function isRateLimitError(err) {
|
|
|
188
195
|
function isAuthenticationError(err) {
|
|
189
196
|
return err instanceof AuthenticationError;
|
|
190
197
|
}
|
|
198
|
+
function isRequestTimeoutError(err) {
|
|
199
|
+
return err instanceof RequestTimeoutError;
|
|
200
|
+
}
|
|
191
201
|
|
|
192
202
|
// src/core/openapi-client.ts
|
|
193
203
|
import createClientImport from "openapi-fetch";
|
|
@@ -210,6 +220,20 @@ function createAuthMiddleware(config) {
|
|
|
210
220
|
};
|
|
211
221
|
}
|
|
212
222
|
|
|
223
|
+
// src/core/rate-limit.ts
|
|
224
|
+
function parseRateLimitHeaders(headers) {
|
|
225
|
+
const limit = headers.get("x-ratelimit-limit");
|
|
226
|
+
const remaining = headers.get("x-ratelimit-remaining");
|
|
227
|
+
const reset = headers.get("x-ratelimit-reset");
|
|
228
|
+
const retryAfter = headers.get("retry-after");
|
|
229
|
+
return {
|
|
230
|
+
limit: limit ? parseInt(limit, 10) : null,
|
|
231
|
+
remaining: remaining ? parseInt(remaining, 10) : null,
|
|
232
|
+
reset: reset ? new Date(parseInt(reset, 10) * 1e3) : null,
|
|
233
|
+
retryAfter: retryAfter ? parseInt(retryAfter, 10) : null
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
213
237
|
// src/core/retry.ts
|
|
214
238
|
var RETRYABLE_STATUS_CODES = /* @__PURE__ */ new Set([408, 429, 500, 502, 503, 504]);
|
|
215
239
|
var POST_RETRYABLE_STATUS_CODES = /* @__PURE__ */ new Set([429]);
|
|
@@ -243,28 +267,106 @@ function parseRetryAfterHeader(header) {
|
|
|
243
267
|
}
|
|
244
268
|
return void 0;
|
|
245
269
|
}
|
|
246
|
-
function resolveRetryOptions(opts) {
|
|
270
|
+
function resolveRetryOptions(opts, maxRetries) {
|
|
271
|
+
const maxAttempts = typeof maxRetries === "number" && Number.isFinite(maxRetries) ? Math.max(1, Math.floor(maxRetries) + 1) : opts?.maxAttempts ?? 3;
|
|
247
272
|
return {
|
|
248
|
-
maxAttempts
|
|
273
|
+
maxAttempts,
|
|
249
274
|
baseDelayMs: opts?.baseDelayMs ?? 250,
|
|
250
275
|
maxDelayMs: opts?.maxDelayMs ?? 3e4
|
|
251
276
|
};
|
|
252
277
|
}
|
|
253
278
|
|
|
279
|
+
// src/core/utils.ts
|
|
280
|
+
function extractRequestId(response) {
|
|
281
|
+
return response.headers.get("x-request-id");
|
|
282
|
+
}
|
|
283
|
+
function buildLastResponse(response) {
|
|
284
|
+
return {
|
|
285
|
+
requestId: extractRequestId(response),
|
|
286
|
+
statusCode: response.status,
|
|
287
|
+
headers: response.headers,
|
|
288
|
+
rateLimit: parseRateLimitHeaders(response.headers)
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function extractData(result) {
|
|
292
|
+
if (result.data !== void 0) {
|
|
293
|
+
return attachResponseMetadata(result.data, result.response);
|
|
294
|
+
}
|
|
295
|
+
throw new ParseError(
|
|
296
|
+
"Unexpected empty response from API",
|
|
297
|
+
result.error !== void 0 ? JSON.stringify(result.error) : void 0
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
function withResponse(result) {
|
|
301
|
+
const data = extractData(result);
|
|
302
|
+
const lastResponse = buildLastResponse(result.response);
|
|
303
|
+
return {
|
|
304
|
+
data,
|
|
305
|
+
response: result.response,
|
|
306
|
+
requestId: lastResponse.requestId,
|
|
307
|
+
rateLimit: lastResponse.rateLimit
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
async function* paginate(fetcher) {
|
|
311
|
+
let token = void 0;
|
|
312
|
+
while (true) {
|
|
313
|
+
const page = await fetcher(token);
|
|
314
|
+
for (const item of page.items) {
|
|
315
|
+
yield item;
|
|
316
|
+
}
|
|
317
|
+
if (!page.has_more || page.continuation_token === null) break;
|
|
318
|
+
token = page.continuation_token;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function attachResponseMetadata(data, response) {
|
|
322
|
+
if (!response || typeof data !== "object" || data === null) {
|
|
323
|
+
return data;
|
|
324
|
+
}
|
|
325
|
+
const target = data;
|
|
326
|
+
const lastResponse = buildLastResponse(response);
|
|
327
|
+
defineHiddenMetadata(target, "_request_id", lastResponse.requestId);
|
|
328
|
+
defineHiddenMetadata(target, "lastResponse", lastResponse);
|
|
329
|
+
return target;
|
|
330
|
+
}
|
|
331
|
+
function defineHiddenMetadata(target, key, value) {
|
|
332
|
+
try {
|
|
333
|
+
Object.defineProperty(target, key, {
|
|
334
|
+
value,
|
|
335
|
+
enumerable: false,
|
|
336
|
+
configurable: true,
|
|
337
|
+
writable: false
|
|
338
|
+
});
|
|
339
|
+
} catch {
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
254
343
|
// src/core/openapi-client.ts
|
|
255
344
|
var createClient = typeof createClientImport === "function" ? createClientImport : createClientImport.default;
|
|
256
345
|
function createPlatformClient(config) {
|
|
257
|
-
const retryOpts = resolveRetryOptions(config.retry);
|
|
258
346
|
const baseFetch = config.fetch ?? globalThis.fetch;
|
|
259
347
|
const retryingFetch = async (input, init) => {
|
|
260
|
-
const
|
|
261
|
-
const
|
|
348
|
+
const baseRequest = input instanceof Request ? input : new Request(input, init);
|
|
349
|
+
const method = baseRequest.method.toUpperCase();
|
|
350
|
+
const requestRetry = getRequestOption(baseRequest, "retry");
|
|
351
|
+
const requestMaxRetries = getRequestOption(baseRequest, "maxRetries");
|
|
352
|
+
const retryOpts = resolveRetryOptions(
|
|
353
|
+
requestRetry ?? config.retry,
|
|
354
|
+
requestMaxRetries ?? config.maxRetries
|
|
355
|
+
);
|
|
356
|
+
const timeoutMs = getRequestOption(baseRequest, "timeout") ?? config.timeout;
|
|
262
357
|
const isIdempotent = method === "GET" || method === "HEAD" || method === "OPTIONS";
|
|
263
358
|
for (let attempt = 0; attempt < retryOpts.maxAttempts; attempt++) {
|
|
264
359
|
let response;
|
|
265
360
|
let error;
|
|
361
|
+
let timedOut = false;
|
|
266
362
|
try {
|
|
267
|
-
|
|
363
|
+
const prepared = prepareRequestForAttempt(baseRequest, timeoutMs);
|
|
364
|
+
try {
|
|
365
|
+
response = await baseFetch(prepared.request, init);
|
|
366
|
+
} finally {
|
|
367
|
+
timedOut = prepared.timedOut;
|
|
368
|
+
prepared.cleanup();
|
|
369
|
+
}
|
|
268
370
|
} catch (err) {
|
|
269
371
|
error = err;
|
|
270
372
|
}
|
|
@@ -272,6 +374,9 @@ function createPlatformClient(config) {
|
|
|
272
374
|
const ctx = { method, attempt, response, options: retryOpts };
|
|
273
375
|
const attemptsRemain = attempt + 1 < retryOpts.maxAttempts;
|
|
274
376
|
if (error) {
|
|
377
|
+
if (timedOut) {
|
|
378
|
+
throw new RequestTimeoutError(`Request timed out after ${timeoutMs}ms`, timeoutMs, error);
|
|
379
|
+
}
|
|
275
380
|
if (isIdempotent && attemptsRemain) {
|
|
276
381
|
await sleep(computeDelay(attempt, new Response(), retryOpts));
|
|
277
382
|
continue;
|
|
@@ -283,7 +388,7 @@ function createPlatformClient(config) {
|
|
|
283
388
|
}
|
|
284
389
|
if (response && attemptsRemain && shouldRetry(ctx)) {
|
|
285
390
|
const delay = computeDelay(attempt, response, retryOpts);
|
|
286
|
-
if (signal
|
|
391
|
+
if (baseRequest.signal.aborted) return response;
|
|
287
392
|
await sleep(delay);
|
|
288
393
|
continue;
|
|
289
394
|
}
|
|
@@ -293,7 +398,8 @@ function createPlatformClient(config) {
|
|
|
293
398
|
};
|
|
294
399
|
const client = createClient({
|
|
295
400
|
baseUrl: config.baseUrl,
|
|
296
|
-
fetch: retryingFetch
|
|
401
|
+
fetch: retryingFetch,
|
|
402
|
+
headers: config.headers
|
|
297
403
|
});
|
|
298
404
|
const errorMiddleware = {
|
|
299
405
|
async onResponse({ response }) {
|
|
@@ -304,32 +410,95 @@ function createPlatformClient(config) {
|
|
|
304
410
|
}
|
|
305
411
|
};
|
|
306
412
|
const authMiddleware = createAuthMiddleware({ apiKey: config.apiKey });
|
|
413
|
+
const hookMiddleware = config.hooks ? {
|
|
414
|
+
async onRequest({ request, schemaPath, id }) {
|
|
415
|
+
await config.hooks?.onRequest?.({ request, schemaPath, id });
|
|
416
|
+
return request;
|
|
417
|
+
},
|
|
418
|
+
async onResponse({ request, response, schemaPath, id }) {
|
|
419
|
+
await config.hooks?.onResponse?.({
|
|
420
|
+
id,
|
|
421
|
+
request,
|
|
422
|
+
response,
|
|
423
|
+
schemaPath,
|
|
424
|
+
requestId: extractRequestId(response),
|
|
425
|
+
rateLimit: parseRateLimitHeaders(response.headers)
|
|
426
|
+
});
|
|
427
|
+
return response;
|
|
428
|
+
},
|
|
429
|
+
async onError({ request, error, schemaPath, id }) {
|
|
430
|
+
await config.hooks?.onError?.({ id, request, error, schemaPath });
|
|
431
|
+
}
|
|
432
|
+
} : void 0;
|
|
307
433
|
client.use(authMiddleware);
|
|
308
434
|
client.use(errorMiddleware);
|
|
435
|
+
if (hookMiddleware) {
|
|
436
|
+
client.use(hookMiddleware);
|
|
437
|
+
}
|
|
309
438
|
return client;
|
|
310
439
|
}
|
|
311
440
|
function sleep(ms) {
|
|
312
441
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
313
442
|
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
if (result.data !== void 0) return result.data;
|
|
318
|
-
throw new ParseError(
|
|
319
|
-
"Unexpected empty response from API",
|
|
320
|
-
result.error !== void 0 ? JSON.stringify(result.error) : void 0
|
|
321
|
-
);
|
|
443
|
+
function getRequestOption(request, key) {
|
|
444
|
+
const value = request[key];
|
|
445
|
+
return value;
|
|
322
446
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
447
|
+
function prepareRequestForAttempt(request, timeoutMs) {
|
|
448
|
+
const attemptRequest = request.clone();
|
|
449
|
+
const timeout = createTimeoutSignal(attemptRequest.signal, timeoutMs);
|
|
450
|
+
if (!timeout.signal) {
|
|
451
|
+
return {
|
|
452
|
+
request: attemptRequest,
|
|
453
|
+
timedOut: false,
|
|
454
|
+
cleanup: timeout.cleanup
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
return {
|
|
458
|
+
request: new Request(attemptRequest, { signal: timeout.signal }),
|
|
459
|
+
get timedOut() {
|
|
460
|
+
return timeout.didTimeout;
|
|
461
|
+
},
|
|
462
|
+
cleanup: timeout.cleanup
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
function createTimeoutSignal(upstream, timeoutMs) {
|
|
466
|
+
if (!timeoutMs || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
467
|
+
return {
|
|
468
|
+
signal: upstream ?? void 0,
|
|
469
|
+
didTimeout: false,
|
|
470
|
+
cleanup: () => {
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
const controller = new AbortController();
|
|
475
|
+
let didTimeout = false;
|
|
476
|
+
const cleanups = [];
|
|
477
|
+
const onAbort = () => controller.abort(upstream?.reason);
|
|
478
|
+
if (upstream) {
|
|
479
|
+
if (upstream.aborted) {
|
|
480
|
+
controller.abort(upstream.reason);
|
|
481
|
+
} else {
|
|
482
|
+
upstream.addEventListener("abort", onAbort, { once: true });
|
|
483
|
+
cleanups.push(() => upstream.removeEventListener("abort", onAbort));
|
|
329
484
|
}
|
|
330
|
-
if (!page.has_more || page.continuation_token === null) break;
|
|
331
|
-
token = page.continuation_token;
|
|
332
485
|
}
|
|
486
|
+
const timer = setTimeout(() => {
|
|
487
|
+
didTimeout = true;
|
|
488
|
+
controller.abort();
|
|
489
|
+
}, timeoutMs);
|
|
490
|
+
cleanups.push(() => clearTimeout(timer));
|
|
491
|
+
return {
|
|
492
|
+
signal: controller.signal,
|
|
493
|
+
get didTimeout() {
|
|
494
|
+
return didTimeout;
|
|
495
|
+
},
|
|
496
|
+
cleanup: () => {
|
|
497
|
+
for (const cleanup of cleanups) {
|
|
498
|
+
cleanup();
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
};
|
|
333
502
|
}
|
|
334
503
|
|
|
335
504
|
// src/resources/base.ts
|
|
@@ -2108,20 +2277,6 @@ var simulationSessionId = (id) => id;
|
|
|
2108
2277
|
var functionId = (id) => id;
|
|
2109
2278
|
var dataSourceId = (id) => id;
|
|
2110
2279
|
|
|
2111
|
-
// src/core/rate-limit.ts
|
|
2112
|
-
function parseRateLimitHeaders(headers) {
|
|
2113
|
-
const limit = headers.get("x-ratelimit-limit");
|
|
2114
|
-
const remaining = headers.get("x-ratelimit-remaining");
|
|
2115
|
-
const reset = headers.get("x-ratelimit-reset");
|
|
2116
|
-
const retryAfter = headers.get("retry-after");
|
|
2117
|
-
return {
|
|
2118
|
-
limit: limit ? parseInt(limit, 10) : null,
|
|
2119
|
-
remaining: remaining ? parseInt(remaining, 10) : null,
|
|
2120
|
-
reset: reset ? new Date(parseInt(reset, 10) * 1e3) : null,
|
|
2121
|
-
retryAfter: retryAfter ? parseInt(retryAfter, 10) : null
|
|
2122
|
-
};
|
|
2123
|
-
}
|
|
2124
|
-
|
|
2125
2280
|
// src/core/webhooks.ts
|
|
2126
2281
|
var textEncoder = new TextEncoder();
|
|
2127
2282
|
var MAX_TIMESTAMP_SKEW_MS = 5 * 60 * 1e3;
|
|
@@ -2264,6 +2419,8 @@ function toCryptoBuffer(bytes) {
|
|
|
2264
2419
|
// src/index.ts
|
|
2265
2420
|
var DEFAULT_BASE_URL = "https://api.platform.amigo.ai";
|
|
2266
2421
|
var AmigoClient = class {
|
|
2422
|
+
workspaceId;
|
|
2423
|
+
baseUrl;
|
|
2267
2424
|
workspaces;
|
|
2268
2425
|
apiKeys;
|
|
2269
2426
|
agents;
|
|
@@ -2292,6 +2449,7 @@ var AmigoClient = class {
|
|
|
2292
2449
|
safety;
|
|
2293
2450
|
compliance;
|
|
2294
2451
|
functions;
|
|
2452
|
+
api;
|
|
2295
2453
|
constructor(config) {
|
|
2296
2454
|
if (!config.apiKey || typeof config.apiKey !== "string") {
|
|
2297
2455
|
throw new ConfigurationError("apiKey is required and must be a non-empty string");
|
|
@@ -2304,9 +2462,16 @@ var AmigoClient = class {
|
|
|
2304
2462
|
apiKey: config.apiKey,
|
|
2305
2463
|
baseUrl,
|
|
2306
2464
|
retry: config.retry,
|
|
2465
|
+
maxRetries: config.maxRetries,
|
|
2466
|
+
timeout: config.timeout,
|
|
2467
|
+
headers: config.headers,
|
|
2468
|
+
hooks: config.hooks,
|
|
2307
2469
|
fetch: config.fetch
|
|
2308
2470
|
});
|
|
2309
2471
|
const ws = config.workspaceId;
|
|
2472
|
+
this.workspaceId = ws;
|
|
2473
|
+
this.baseUrl = baseUrl;
|
|
2474
|
+
this.api = client;
|
|
2310
2475
|
this.workspaces = new WorkspacesResource(client, ws);
|
|
2311
2476
|
this.apiKeys = new ApiKeysResource(client, ws);
|
|
2312
2477
|
this.agents = new AgentsResource(client, ws);
|
|
@@ -2335,7 +2500,58 @@ var AmigoClient = class {
|
|
|
2335
2500
|
this.compliance = new ComplianceResource(client, ws);
|
|
2336
2501
|
this.functions = new FunctionsResource(client, ws);
|
|
2337
2502
|
}
|
|
2503
|
+
async GET(path, init) {
|
|
2504
|
+
return withResponse(
|
|
2505
|
+
await this.api.GET(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2506
|
+
);
|
|
2507
|
+
}
|
|
2508
|
+
async POST(path, init) {
|
|
2509
|
+
return withResponse(
|
|
2510
|
+
await this.api.POST(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2511
|
+
);
|
|
2512
|
+
}
|
|
2513
|
+
async PUT(path, init) {
|
|
2514
|
+
return withResponse(
|
|
2515
|
+
await this.api.PUT(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2516
|
+
);
|
|
2517
|
+
}
|
|
2518
|
+
async PATCH(path, init) {
|
|
2519
|
+
return withResponse(
|
|
2520
|
+
await this.api.PATCH(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2521
|
+
);
|
|
2522
|
+
}
|
|
2523
|
+
async DELETE(path, init) {
|
|
2524
|
+
return withResponse(
|
|
2525
|
+
await this.api.DELETE(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2526
|
+
);
|
|
2527
|
+
}
|
|
2528
|
+
async HEAD(path, init) {
|
|
2529
|
+
return withResponse(
|
|
2530
|
+
await this.api.HEAD(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2531
|
+
);
|
|
2532
|
+
}
|
|
2533
|
+
async OPTIONS(path, init) {
|
|
2534
|
+
return withResponse(
|
|
2535
|
+
await this.api.OPTIONS(path, withWorkspaceId(path, init, this.workspaceId))
|
|
2536
|
+
);
|
|
2537
|
+
}
|
|
2338
2538
|
};
|
|
2539
|
+
function withWorkspaceId(path, init, workspaceId2) {
|
|
2540
|
+
if (!path.includes("{workspace_id}")) {
|
|
2541
|
+
return init ?? {};
|
|
2542
|
+
}
|
|
2543
|
+
const current = init ?? {};
|
|
2544
|
+
return {
|
|
2545
|
+
...current,
|
|
2546
|
+
params: {
|
|
2547
|
+
...current.params ?? {},
|
|
2548
|
+
path: {
|
|
2549
|
+
workspace_id: workspaceId2,
|
|
2550
|
+
...current.params?.path ?? {}
|
|
2551
|
+
}
|
|
2552
|
+
}
|
|
2553
|
+
};
|
|
2554
|
+
}
|
|
2339
2555
|
export {
|
|
2340
2556
|
AmigoClient,
|
|
2341
2557
|
AmigoError,
|
|
@@ -2349,6 +2565,7 @@ export {
|
|
|
2349
2565
|
ParseError,
|
|
2350
2566
|
PermissionError,
|
|
2351
2567
|
RateLimitError,
|
|
2568
|
+
RequestTimeoutError,
|
|
2352
2569
|
ServerError,
|
|
2353
2570
|
ServiceUnavailableError,
|
|
2354
2571
|
ValidationError,
|
|
@@ -2356,17 +2573,20 @@ export {
|
|
|
2356
2573
|
actionId,
|
|
2357
2574
|
agentId,
|
|
2358
2575
|
apiKeyId,
|
|
2576
|
+
buildLastResponse,
|
|
2359
2577
|
callId,
|
|
2360
2578
|
contextGraphId,
|
|
2361
2579
|
dataSourceId,
|
|
2362
2580
|
entityId,
|
|
2363
2581
|
eventId,
|
|
2582
|
+
extractRequestId,
|
|
2364
2583
|
functionId,
|
|
2365
2584
|
integrationId,
|
|
2366
2585
|
isAmigoError,
|
|
2367
2586
|
isAuthenticationError,
|
|
2368
2587
|
isNotFoundError,
|
|
2369
2588
|
isRateLimitError,
|
|
2589
|
+
isRequestTimeoutError,
|
|
2370
2590
|
paginate,
|
|
2371
2591
|
parseRateLimitHeaders,
|
|
2372
2592
|
parseWebhookEvent,
|