@amigo-ai/sdk 1.0.0-alpha.1 → 1.0.0-alpha.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 CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![Tests](https://github.com/amigo-ai/amigo-typescript-sdk/actions/workflows/test.yml/badge.svg)](https://github.com/amigo-ai/amigo-typescript-sdk/actions/workflows/test.yml)
4
4
  [![codecov](https://codecov.io/gh/amigo-ai/amigo-typescript-sdk/graph/badge.svg?token=PQU5JBU941)](https://codecov.io/gh/amigo-ai/amigo-typescript-sdk)
5
+ [![npm version](https://img.shields.io/npm/v/%40amigo-ai%2Fsdk?logo=npm)](https://www.npmjs.com/package/@amigo-ai/sdk)
5
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
7
 
7
8
  The official TypeScript SDK for the Amigo API, providing a simple and intuitive interface to interact with Amigo's AI services.
@@ -60,6 +61,10 @@ The SDK requires the following configuration parameters:
60
61
 
61
62
  For detailed instructions on generating API keys, see the [Authentication Guide](https://docs.amigo.ai/developer-guide).
62
63
 
64
+ ### API compatibility
65
+
66
+ This SDK autogenerates its types from the latest Amigo OpenAPI schema. As a result, only the latest published SDK version is guaranteed to match the current API. If you pin to an older version, it may not include the newest endpoints or fields.
67
+
63
68
  ## Error Handling
64
69
 
65
70
  The SDK provides typed error handling:
package/dist/index.js CHANGED
@@ -30,7 +30,46 @@ __export(errors_exports, {
30
30
  // src/core/utils.ts
31
31
  async function extractData(responsePromise) {
32
32
  const result = await responsePromise;
33
- return result.data;
33
+ const data = result.data;
34
+ if (data === void 0 || data === null) {
35
+ throw new ParseError("Expected response data to be present for successful request", "response");
36
+ }
37
+ return data;
38
+ }
39
+ async function* parseNdjsonStream(response) {
40
+ const body = response.body;
41
+ if (!body) return;
42
+ const reader = body.getReader();
43
+ const decoder = new TextDecoder();
44
+ let bufferedText = "";
45
+ try {
46
+ while (true) {
47
+ const { done, value } = await reader.read();
48
+ if (done) break;
49
+ bufferedText += decoder.decode(value, { stream: true });
50
+ let newlineIndex;
51
+ while ((newlineIndex = bufferedText.indexOf("\n")) !== -1) {
52
+ const line = bufferedText.slice(0, newlineIndex).trim();
53
+ bufferedText = bufferedText.slice(newlineIndex + 1);
54
+ if (!line) continue;
55
+ try {
56
+ yield JSON.parse(line);
57
+ } catch (err) {
58
+ throw new ParseError("Failed to parse NDJSON line", "json", err);
59
+ }
60
+ }
61
+ }
62
+ const trailing = bufferedText.trim();
63
+ if (trailing) {
64
+ try {
65
+ yield JSON.parse(trailing);
66
+ } catch (err) {
67
+ throw new ParseError("Failed to parse trailing NDJSON line", "json", err);
68
+ }
69
+ }
70
+ } finally {
71
+ reader.releaseLock();
72
+ }
34
73
  }
35
74
  async function parseResponseBody(response) {
36
75
  try {
@@ -289,13 +328,213 @@ function createAmigoFetch(config, mockFetch) {
289
328
 
290
329
  // src/resources/organization.ts
291
330
  var OrganizationResource = class {
292
- constructor(c) {
331
+ constructor(c, orgId) {
293
332
  this.c = c;
333
+ this.orgId = orgId;
294
334
  }
295
- async getOrganization(orgId) {
335
+ /**
336
+ * Get organization details
337
+ * @param headers - The headers
338
+ * @returns The organization details
339
+ */
340
+ async getOrganization(headers) {
296
341
  return extractData(
297
342
  this.c.GET("/v1/{organization}/organization/", {
298
- params: { path: { organization: orgId } }
343
+ params: { path: { organization: this.orgId } },
344
+ headers
345
+ })
346
+ );
347
+ }
348
+ /**
349
+ * Create an agent
350
+ * @param agentName - The name of the agent
351
+ * @param headers - The headers
352
+ * @returns The agent details
353
+ */
354
+ async createAgent(body, headers) {
355
+ return extractData(
356
+ this.c.POST("/v1/{organization}/organization/agent", {
357
+ params: { path: { organization: this.orgId } },
358
+ body,
359
+ headers
360
+ })
361
+ );
362
+ }
363
+ /**
364
+ * Create an agent version
365
+ * @param agentId - The ID of the agent
366
+ * @param body - The body of the request
367
+ * @param queryParams - The query parameters
368
+ * @param headers - The headers
369
+ * @returns The agent version details
370
+ */
371
+ async createAgentVersion(agentId, body, queryParams, headers) {
372
+ return extractData(
373
+ this.c.POST("/v1/{organization}/organization/agent/{agent_id}/", {
374
+ params: { path: { organization: this.orgId, agent_id: agentId }, query: queryParams },
375
+ body,
376
+ headers
377
+ })
378
+ );
379
+ }
380
+ /**
381
+ * Get agents
382
+ * @param queryParams - The query parameters
383
+ * @param headers - The headers
384
+ * @returns The agents
385
+ */
386
+ async getAgents(queryParams, headers) {
387
+ return extractData(
388
+ this.c.GET("/v1/{organization}/organization/agent", {
389
+ params: { path: { organization: this.orgId }, query: queryParams },
390
+ headers
391
+ })
392
+ );
393
+ }
394
+ /**
395
+ * Delete an agent
396
+ * @param agentId - The ID of the agent
397
+ * @param headers - The headers
398
+ * @returns The agent details
399
+ */
400
+ async deleteAgent(agentId, headers) {
401
+ await this.c.DELETE("/v1/{organization}/organization/agent/{agent_id}/", {
402
+ params: { path: { organization: this.orgId, agent_id: agentId } },
403
+ headers
404
+ });
405
+ return;
406
+ }
407
+ /**
408
+ * Get agent versions
409
+ * @param agentId - The ID of the agent
410
+ * @param queryParams - The query parameters
411
+ * @param headers - The headers
412
+ * @returns The agent versions
413
+ */
414
+ async getAgentVersions(agentId, queryParams, headers) {
415
+ return extractData(
416
+ this.c.GET("/v1/{organization}/organization/agent/{agent_id}/version", {
417
+ params: { path: { organization: this.orgId, agent_id: agentId }, query: queryParams },
418
+ headers
419
+ })
420
+ );
421
+ }
422
+ };
423
+
424
+ // src/resources/conversation.ts
425
+ var ConversationResource = class {
426
+ constructor(c, orgId) {
427
+ this.c = c;
428
+ this.orgId = orgId;
429
+ }
430
+ async createConversation(body, queryParams, headers, options) {
431
+ const resp = await this.c.POST("/v1/{organization}/conversation/", {
432
+ params: { path: { organization: this.orgId }, query: queryParams },
433
+ body,
434
+ headers,
435
+ // Ensure we receive a stream for NDJSON
436
+ parseAs: "stream",
437
+ ...options?.signal && { signal: options.signal }
438
+ });
439
+ return parseNdjsonStream(resp.response);
440
+ }
441
+ async interactWithConversation(conversationId, body, queryParams, headers, options) {
442
+ const resp = await this.c.POST("/v1/{organization}/conversation/{conversation_id}/interact", {
443
+ params: {
444
+ path: { organization: this.orgId, conversation_id: conversationId },
445
+ query: queryParams
446
+ },
447
+ body,
448
+ headers,
449
+ parseAs: "stream",
450
+ ...options?.signal && { signal: options.signal }
451
+ });
452
+ return parseNdjsonStream(resp.response);
453
+ }
454
+ async getConversations(queryParams, headers) {
455
+ return extractData(
456
+ this.c.GET("/v1/{organization}/conversation/", {
457
+ params: { path: { organization: this.orgId }, query: queryParams },
458
+ headers
459
+ })
460
+ );
461
+ }
462
+ async getConversationMessages(conversationId, queryParams, headers) {
463
+ return extractData(
464
+ this.c.GET("/v1/{organization}/conversation/{conversation_id}/messages/", {
465
+ params: {
466
+ path: { organization: this.orgId, conversation_id: conversationId },
467
+ query: queryParams
468
+ },
469
+ headers
470
+ })
471
+ );
472
+ }
473
+ async finishConversation(conversationId, headers) {
474
+ await this.c.POST("/v1/{organization}/conversation/{conversation_id}/finish/", {
475
+ params: { path: { organization: this.orgId, conversation_id: conversationId } },
476
+ headers,
477
+ // No content is expected; parse as text to access raw Response
478
+ parseAs: "text"
479
+ });
480
+ return;
481
+ }
482
+ async recommendResponsesForInteraction(conversationId, interactionId, headers) {
483
+ return extractData(
484
+ this.c.GET(
485
+ "/v1/{organization}/conversation/{conversation_id}/interaction/{interaction_id}/recommend_responses",
486
+ {
487
+ params: {
488
+ path: {
489
+ organization: this.orgId,
490
+ conversation_id: conversationId,
491
+ interaction_id: interactionId
492
+ }
493
+ },
494
+ headers
495
+ }
496
+ )
497
+ );
498
+ }
499
+ async getInteractionInsights(conversationId, interactionId, headers) {
500
+ return extractData(
501
+ this.c.GET(
502
+ "/v1/{organization}/conversation/{conversation_id}/interaction/{interaction_id}/insights",
503
+ {
504
+ params: {
505
+ path: {
506
+ organization: this.orgId,
507
+ conversation_id: conversationId,
508
+ interaction_id: interactionId
509
+ }
510
+ },
511
+ headers
512
+ }
513
+ )
514
+ );
515
+ }
516
+ // Note: the OpenAPI response schema isn't correct for this endpoint.
517
+ // TODO -- fix response typing.
518
+ async getMessageSource(conversationId, messageId, headers) {
519
+ return extractData(
520
+ this.c.GET("/v1/{organization}/conversation/{conversation_id}/messages/{message_id}/source", {
521
+ params: {
522
+ path: {
523
+ organization: this.orgId,
524
+ conversation_id: conversationId,
525
+ message_id: messageId
526
+ }
527
+ },
528
+ headers
529
+ })
530
+ );
531
+ }
532
+ async generateConversationStarters(body, headers) {
533
+ return extractData(
534
+ this.c.POST("/v1/{organization}/conversation/conversation_starter", {
535
+ params: { path: { organization: this.orgId } },
536
+ body,
537
+ headers
299
538
  })
300
539
  );
301
540
  }
@@ -303,13 +542,20 @@ var OrganizationResource = class {
303
542
 
304
543
  // src/resources/services.ts
305
544
  var ServiceResource = class {
306
- constructor(c) {
545
+ constructor(c, orgId) {
307
546
  this.c = c;
547
+ this.orgId = orgId;
308
548
  }
309
- async getServices(orgId) {
549
+ /**
550
+ * Get services
551
+ * @param headers - The headers
552
+ * @returns The services
553
+ */
554
+ async getServices(queryParams, headers) {
310
555
  return extractData(
311
556
  this.c.GET("/v1/{organization}/service/", {
312
- params: { path: { organization: orgId } }
557
+ params: { path: { organization: this.orgId }, query: queryParams },
558
+ headers
313
559
  })
314
560
  );
315
561
  }
@@ -320,12 +566,14 @@ var defaultBaseUrl = "https://api.amigo.ai";
320
566
  var AmigoClient = class {
321
567
  constructor(config) {
322
568
  __publicField(this, "organizations");
569
+ __publicField(this, "conversations");
323
570
  __publicField(this, "services");
324
571
  __publicField(this, "config");
325
572
  this.config = validateConfig(config);
326
573
  const api = createAmigoFetch(this.config);
327
- this.organizations = new OrganizationResource(api);
328
- this.services = new ServiceResource(api);
574
+ this.organizations = new OrganizationResource(api, this.config.orgId);
575
+ this.conversations = new ConversationResource(api, this.config.orgId);
576
+ this.services = new ServiceResource(api, this.config.orgId);
329
577
  }
330
578
  };
331
579
  function validateConfig(config) {
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/core/errors.ts", "../src/core/utils.ts", "../src/core/openapi-client.ts", "../src/core/auth.ts", "../src/resources/organization.ts", "../src/resources/services.ts", "../src/index.ts"],
4
- "sourcesContent": ["import type { Middleware } from 'openapi-fetch'\nimport { isNetworkError, parseResponseBody } from './utils'\n\n/**\n * Base error class for all Amigo SDK errors.\n * Provides common functionality and error identification.\n */\nexport class AmigoError extends Error {\n /**\n * Unique error code for programmatic error handling\n */\n readonly errorCode?: string\n\n /**\n * HTTP status code if applicable\n */\n readonly statusCode?: number\n\n /**\n * Additional context data\n */\n context?: Record<string, unknown>\n\n constructor(message: string, options?: Record<string, unknown>) {\n super(message)\n this.name = this.constructor.name\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n\n // Capture stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n\n // copies status, code, etc.\n Object.assign(this, options)\n }\n\n /**\n * Returns a JSON-serializable representation of the error\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.errorCode,\n statusCode: this.statusCode,\n context: this.context,\n stack: this.stack,\n }\n }\n}\n\n/* 4xx client errors */\nexport class BadRequestError extends AmigoError {}\nexport class AuthenticationError extends AmigoError {}\nexport class PermissionError extends AmigoError {}\nexport class NotFoundError extends AmigoError {}\nexport class ConflictError extends AmigoError {}\nexport class RateLimitError extends AmigoError {}\n\n/* 5xx server errors */\nexport class ServerError extends AmigoError {}\nexport class ServiceUnavailableError extends ServerError {}\n\n/* Internal SDK errors */\nexport class ConfigurationError extends AmigoError {\n constructor(\n message: string,\n public field?: string\n ) {\n super(message)\n this.context = { field }\n }\n}\n\n/* Validation errors */\nexport class ValidationError extends BadRequestError {\n constructor(\n msg: string,\n public fieldErrors?: Record<string, string>\n ) {\n super(msg)\n }\n}\n\n/* Network-related errors */\nexport class NetworkError extends AmigoError {\n constructor(\n message: string,\n public readonly originalError?: Error,\n public readonly request?: {\n url?: string\n method?: string\n }\n ) {\n super(message, { cause: originalError })\n this.context = { request }\n }\n}\n\n/* Parsing errors */\nexport class ParseError extends AmigoError {\n constructor(\n message: string,\n public readonly parseType: 'json' | 'response' | 'other',\n public readonly originalError?: Error\n ) {\n super(message, { cause: originalError })\n this.context = { parseType }\n }\n}\n\n/* Type guard functions */\nexport function isAmigoError(error: unknown): error is AmigoError {\n return error instanceof AmigoError\n}\n\n/* Error factory to create appropriate error instances from API responses */\nexport function createApiError(response: Response, body?: unknown): AmigoError {\n const map: Record<number, typeof AmigoError> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 403: PermissionError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: ValidationError,\n 429: RateLimitError,\n 500: ServerError,\n 503: ServiceUnavailableError,\n }\n\n const ErrorClass = map[response.status] ?? AmigoError\n const message =\n body && typeof body === 'object' && 'message' in body\n ? String((body as Record<string, unknown>).message)\n : response.statusText\n\n const options = {\n status: response.status,\n code:\n body && typeof body === 'object' && 'code' in body\n ? (body as Record<string, unknown>).code\n : undefined,\n response: body,\n }\n\n const error = new ErrorClass(message, options)\n\n return error\n}\n\nexport function createErrorMiddleware(): Middleware {\n return {\n onResponse: async ({ response }) => {\n if (!response.ok) {\n const body = await parseResponseBody(response)\n throw createApiError(response, body)\n }\n },\n onError: async ({ error, request }) => {\n // Handle network-related errors consistently\n if (isNetworkError(error)) {\n throw new NetworkError(\n `Network error: ${error instanceof Error ? error.message : String(error)}`,\n error instanceof Error ? error : new Error(String(error)),\n {\n url: request?.url,\n method: request?.method,\n }\n )\n }\n throw error\n },\n }\n}\n", "// Note: ParseError import removed as it's unused in current implementation\n\n// Type helper to extract the data type from openapi-fetch responses\nexport type ExtractDataType<T> = T extends { data?: infer D } ? D : never\n\n// Helper function to extract data from openapi-fetch responses\n// Since our middleware throws on errors, successful responses will have data\nexport async function extractData<T>(responsePromise: Promise<T>): Promise<ExtractDataType<T>> {\n const result = await responsePromise\n // openapi-fetch guarantees data exists on successful responses\n return (result as { data: ExtractDataType<T> }).data\n}\n\n// Utility function to safely parse response bodies without throwing errors\nexport async function parseResponseBody(response: Response): Promise<unknown> {\n try {\n const text = await response.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text // Return as string if not valid JSON\n }\n } catch {\n return undefined // Return undefined if any error occurs\n }\n}\n\n// Helper to detect network-related errors\nexport function isNetworkError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n\n return (\n error instanceof TypeError ||\n error.message.includes('fetch') ||\n error.message.includes('Failed to fetch') ||\n error.message.includes('Network request failed') ||\n error.message.includes('ECONNREFUSED') ||\n error.message.includes('ETIMEDOUT') ||\n error.message.includes('ENOTFOUND') ||\n error.message.includes('network')\n )\n}\n", "import createClient, { type Client } from 'openapi-fetch'\nimport { createErrorMiddleware } from './errors'\nimport { createAuthMiddleware } from './auth'\nimport type { paths } from '../generated/api-types'\nimport type { AmigoSdkConfig } from '..'\n\nexport type AmigoFetch = Client<paths>\n\nexport function createAmigoFetch(\n config: AmigoSdkConfig,\n mockFetch?: (input: Request) => Promise<Response>\n): AmigoFetch {\n const client = createClient<paths>({\n baseUrl: config.baseUrl,\n ...(mockFetch && { fetch: mockFetch }),\n })\n\n // Apply error handling middleware first (to catch all errors)\n client.use(createErrorMiddleware())\n\n // Apply auth middleware after error handling (so auth errors are properly handled)\n client.use(createAuthMiddleware(config))\n\n return client\n}\n", "import type { Middleware } from 'openapi-fetch'\nimport type { components } from '../generated/api-types'\nimport type { AmigoSdkConfig } from '..'\nimport { AmigoError, AuthenticationError, NetworkError, ParseError, createApiError } from './errors'\nimport { isNetworkError, parseResponseBody } from './utils'\n\ntype SignInWithApiKeyResponse =\n components['schemas']['src__app__endpoints__user__sign_in_with_api_key__Response']\n\n/** Helper function to trade API key for a bearer token */\nexport async function getBearerToken(config: AmigoSdkConfig): Promise<SignInWithApiKeyResponse> {\n const url = `${config.baseUrl}/v1/${config.orgId}/user/signin_with_api_key`\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'x-api-key': config.apiKey,\n 'x-api-key-id': config.apiKeyId,\n 'x-user-id': config.userId,\n },\n })\n\n if (!response.ok) {\n const body = await parseResponseBody(response)\n const apiError = createApiError(response, body)\n\n // Enhance authentication errors with additional context\n if (response.status === 401) {\n throw new AuthenticationError(`Authentication failed: ${apiError.message}`, {\n ...apiError,\n context: { ...apiError.context, endpoint: 'signin_with_api_key' },\n })\n }\n throw apiError\n }\n\n return (await response.json()) as SignInWithApiKeyResponse\n } catch (err) {\n // Re-throw our custom errors as-is\n if (err instanceof AmigoError) {\n throw err\n }\n\n // Handle network errors\n if (isNetworkError(err)) {\n throw new NetworkError('Failed to connect to authentication endpoint', err as Error, {\n url,\n method: 'POST',\n })\n }\n\n // Handle JSON parsing errors\n throw new ParseError(\n 'Failed to parse authentication response',\n 'json',\n err instanceof Error ? err : new Error(String(err))\n )\n }\n}\n\nexport function createAuthMiddleware(config: AmigoSdkConfig): Middleware {\n let token: SignInWithApiKeyResponse | null = null\n let refreshPromise: Promise<SignInWithApiKeyResponse> | null = null\n\n const shouldRefreshToken = (tokenData: SignInWithApiKeyResponse): boolean => {\n if (!tokenData.expires_at) return false\n\n const expiryTime = new Date(tokenData.expires_at).getTime()\n const currentTime = Date.now()\n const timeUntilExpiry = expiryTime - currentTime\n const refreshThreshold = 5 * 60 * 1000 // 5 minutes in milliseconds\n\n return timeUntilExpiry <= refreshThreshold\n }\n\n const ensureValidToken = async (): Promise<SignInWithApiKeyResponse> => {\n if (!token || shouldRefreshToken(token)) {\n if (!refreshPromise) {\n refreshPromise = getBearerToken(config)\n try {\n token = await refreshPromise\n } finally {\n refreshPromise = null\n }\n } else {\n token = await refreshPromise\n }\n }\n return token\n }\n\n return {\n onRequest: async ({ request }) => {\n try {\n const validToken = await ensureValidToken()\n if (validToken?.id_token) {\n request.headers.set('Authorization', `Bearer ${validToken.id_token}`)\n }\n } catch (error) {\n // Clear token and re-throw - getBearerToken already provides proper error types\n token = null\n throw error\n }\n return request\n },\n\n onResponse: async ({ response }) => {\n // Handle 401 responses by clearing token to force refresh on next request\n if (response.status === 401) {\n token = null\n }\n },\n\n onError: async ({ error }) => {\n // Clear token on any error to force refresh\n token = null\n throw error\n },\n }\n}\n", "import type { AmigoFetch } from '../core/openapi-client'\nimport { extractData } from '../core/utils'\n\nexport class OrganizationResource {\n constructor(private c: AmigoFetch) {}\n\n async getOrganization(orgId: string) {\n return extractData(\n this.c.GET('/v1/{organization}/organization/', {\n params: { path: { organization: orgId } },\n })\n )\n }\n}\n", "import type { AmigoFetch } from '../core/openapi-client'\nimport { extractData } from '../core/utils'\n\nexport class ServiceResource {\n constructor(private c: AmigoFetch) {}\n\n async getServices(orgId: string) {\n return extractData(\n this.c.GET('/v1/{organization}/service/', {\n params: { path: { organization: orgId } },\n })\n )\n }\n}\n", "import { ConfigurationError } from './core/errors'\nimport { createAmigoFetch } from './core/openapi-client'\nimport { OrganizationResource } from './resources/organization'\nimport { ServiceResource } from './resources/services'\n\nexport interface AmigoSdkConfig {\n /** API key from Amigo dashboard */\n apiKey: string\n /** API-key ID from Amigo dashboard */\n apiKeyId: string\n /** User ID on whose behalf the request is made */\n userId: string\n /** The Organization ID */\n orgId: string\n /** Base URL of the Amigo API */\n baseUrl?: string\n}\n\nconst defaultBaseUrl = 'https://api.amigo.ai'\n\nexport class AmigoClient {\n readonly organizations: OrganizationResource\n readonly services: ServiceResource\n readonly config: AmigoSdkConfig\n\n constructor(config: AmigoSdkConfig) {\n this.config = validateConfig(config)\n\n const api = createAmigoFetch(this.config)\n this.organizations = new OrganizationResource(api)\n this.services = new ServiceResource(api)\n }\n}\n\nfunction validateConfig(config: AmigoSdkConfig) {\n if (!config.apiKey) {\n throw new ConfigurationError('API key is required', 'apiKey')\n }\n if (!config.apiKeyId) {\n throw new ConfigurationError('API key ID is required', 'apiKeyId')\n }\n if (!config.userId) {\n throw new ConfigurationError('User ID is required', 'userId')\n }\n if (!config.orgId) {\n throw new ConfigurationError('Organization ID is required', 'orgId')\n }\n if (!config.baseUrl) {\n config.baseUrl = defaultBaseUrl\n }\n return config\n}\n\n// Export all errors as a namespace to avoid polluting the main import space\nexport * as errors from './core/errors'\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/core/errors.ts", "../src/core/utils.ts", "../src/core/openapi-client.ts", "../src/core/auth.ts", "../src/resources/organization.ts", "../src/resources/conversation.ts", "../src/resources/services.ts", "../src/index.ts"],
4
+ "sourcesContent": ["import type { Middleware } from 'openapi-fetch'\nimport { isNetworkError, parseResponseBody } from './utils'\n\n/**\n * Base error class for all Amigo SDK errors.\n * Provides common functionality and error identification.\n */\nexport class AmigoError extends Error {\n /**\n * Unique error code for programmatic error handling\n */\n readonly errorCode?: string\n\n /**\n * HTTP status code if applicable\n */\n readonly statusCode?: number\n\n /**\n * Additional context data\n */\n context?: Record<string, unknown>\n\n constructor(message: string, options?: Record<string, unknown>) {\n super(message)\n this.name = this.constructor.name\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, new.target.prototype)\n\n // Capture stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n\n // copies status, code, etc.\n Object.assign(this, options)\n }\n\n /**\n * Returns a JSON-serializable representation of the error\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.errorCode,\n statusCode: this.statusCode,\n context: this.context,\n stack: this.stack,\n }\n }\n}\n\n/* 4xx client errors */\nexport class BadRequestError extends AmigoError {}\nexport class AuthenticationError extends AmigoError {}\nexport class PermissionError extends AmigoError {}\nexport class NotFoundError extends AmigoError {}\nexport class ConflictError extends AmigoError {}\nexport class RateLimitError extends AmigoError {}\n\n/* 5xx server errors */\nexport class ServerError extends AmigoError {}\nexport class ServiceUnavailableError extends ServerError {}\n\n/* Internal SDK errors */\nexport class ConfigurationError extends AmigoError {\n constructor(\n message: string,\n public field?: string\n ) {\n super(message)\n this.context = { field }\n }\n}\n\n/* Validation errors */\nexport class ValidationError extends BadRequestError {\n constructor(\n msg: string,\n public fieldErrors?: Record<string, string>\n ) {\n super(msg)\n }\n}\n\n/* Network-related errors */\nexport class NetworkError extends AmigoError {\n constructor(\n message: string,\n public readonly originalError?: Error,\n public readonly request?: {\n url?: string\n method?: string\n }\n ) {\n super(message, { cause: originalError })\n this.context = { request }\n }\n}\n\n/* Parsing errors */\nexport class ParseError extends AmigoError {\n constructor(\n message: string,\n public readonly parseType: 'json' | 'response' | 'other',\n public readonly originalError?: Error\n ) {\n super(message, { cause: originalError })\n this.context = { parseType }\n }\n}\n\n/* Type guard functions */\nexport function isAmigoError(error: unknown): error is AmigoError {\n return error instanceof AmigoError\n}\n\n/* Error factory to create appropriate error instances from API responses */\nexport function createApiError(response: Response, body?: unknown): AmigoError {\n const map: Record<number, typeof AmigoError> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 403: PermissionError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: ValidationError,\n 429: RateLimitError,\n 500: ServerError,\n 503: ServiceUnavailableError,\n }\n\n const ErrorClass = map[response.status] ?? AmigoError\n const message =\n body && typeof body === 'object' && 'message' in body\n ? String((body as Record<string, unknown>).message)\n : response.statusText\n\n const options = {\n status: response.status,\n code:\n body && typeof body === 'object' && 'code' in body\n ? (body as Record<string, unknown>).code\n : undefined,\n response: body,\n }\n\n const error = new ErrorClass(message, options)\n\n return error\n}\n\nexport function createErrorMiddleware(): Middleware {\n return {\n onResponse: async ({ response }) => {\n if (!response.ok) {\n const body = await parseResponseBody(response)\n throw createApiError(response, body)\n }\n },\n onError: async ({ error, request }) => {\n // Handle network-related errors consistently\n if (isNetworkError(error)) {\n throw new NetworkError(\n `Network error: ${error instanceof Error ? error.message : String(error)}`,\n error instanceof Error ? error : new Error(String(error)),\n {\n url: request?.url,\n method: request?.method,\n }\n )\n }\n throw error\n },\n }\n}\n", "import { ParseError } from './errors'\n\n// Type helper to extract the data type from openapi-fetch responses\nexport type ExtractDataType<T> = T extends { data?: infer D } ? NonNullable<D> : never\n\n// Helper function to extract data from openapi-fetch responses\n// Since our middleware throws on errors, successful responses will have data\nexport async function extractData<T extends { data?: unknown }>(\n responsePromise: Promise<T>\n): Promise<ExtractDataType<T>> {\n const result = await responsePromise\n const data = (result as { data?: ExtractDataType<T> }).data\n\n if (data === undefined || data === null) {\n // Invariant: our error middleware throws for non-2xx responses.\n // If we reach here without data, treat as a parse/protocol error.\n throw new ParseError('Expected response data to be present for successful request', 'response')\n }\n\n return data\n}\n\n/**\n * Parse an NDJSON HTTP response body into an async generator of parsed JSON objects.\n * The generator yields one parsed object per line. Empty lines are skipped.\n */\nexport async function* parseNdjsonStream<T = unknown>(response: Response): AsyncGenerator<T> {\n const body = response.body\n if (!body) return\n\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let bufferedText = ''\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n bufferedText += decoder.decode(value, { stream: true })\n\n let newlineIndex: number\n // Process all complete lines in the buffer\n while ((newlineIndex = bufferedText.indexOf('\\n')) !== -1) {\n const line = bufferedText.slice(0, newlineIndex).trim()\n bufferedText = bufferedText.slice(newlineIndex + 1)\n if (!line) continue\n try {\n yield JSON.parse(line) as T\n } catch (err) {\n throw new ParseError('Failed to parse NDJSON line', 'json', err as Error)\n }\n }\n }\n\n // Flush any trailing line without a newline\n const trailing = bufferedText.trim()\n if (trailing) {\n try {\n yield JSON.parse(trailing) as T\n } catch (err) {\n throw new ParseError('Failed to parse trailing NDJSON line', 'json', err as Error)\n }\n }\n } finally {\n reader.releaseLock()\n }\n}\n\n// Utility function to safely parse response bodies without throwing errors\nexport async function parseResponseBody(response: Response): Promise<unknown> {\n try {\n const text = await response.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text // Return as string if not valid JSON\n }\n } catch {\n return undefined // Return undefined if any error occurs\n }\n}\n\n// Helper to detect network-related errors\nexport function isNetworkError(error: unknown): boolean {\n if (!(error instanceof Error)) return false\n\n return (\n error instanceof TypeError ||\n error.message.includes('fetch') ||\n error.message.includes('Failed to fetch') ||\n error.message.includes('Network request failed') ||\n error.message.includes('ECONNREFUSED') ||\n error.message.includes('ETIMEDOUT') ||\n error.message.includes('ENOTFOUND') ||\n error.message.includes('network')\n )\n}\n", "import createClient, { type Client } from 'openapi-fetch'\nimport { createErrorMiddleware } from './errors'\nimport { createAuthMiddleware } from './auth'\nimport type { paths } from '../generated/api-types'\nimport type { AmigoSdkConfig } from '..'\n\nexport type AmigoFetch = Client<paths>\n\nexport function createAmigoFetch(\n config: AmigoSdkConfig,\n mockFetch?: (input: Request) => Promise<Response>\n): AmigoFetch {\n const client = createClient<paths>({\n baseUrl: config.baseUrl,\n ...(mockFetch && { fetch: mockFetch }),\n })\n\n // Apply error handling middleware first (to catch all errors)\n client.use(createErrorMiddleware())\n\n // Apply auth middleware after error handling (so auth errors are properly handled)\n client.use(createAuthMiddleware(config))\n\n return client\n}\n", "import type { Middleware } from 'openapi-fetch'\nimport type { components } from '../generated/api-types'\nimport type { AmigoSdkConfig } from '..'\nimport { AmigoError, AuthenticationError, NetworkError, ParseError, createApiError } from './errors'\nimport { isNetworkError, parseResponseBody } from './utils'\n\ntype SignInWithApiKeyResponse =\n components['schemas']['src__app__endpoints__user__sign_in_with_api_key__Response']\n\n/** Helper function to trade API key for a bearer token */\nexport async function getBearerToken(config: AmigoSdkConfig): Promise<SignInWithApiKeyResponse> {\n const url = `${config.baseUrl}/v1/${config.orgId}/user/signin_with_api_key`\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'x-api-key': config.apiKey,\n 'x-api-key-id': config.apiKeyId,\n 'x-user-id': config.userId,\n },\n })\n\n if (!response.ok) {\n const body = await parseResponseBody(response)\n const apiError = createApiError(response, body)\n\n // Enhance authentication errors with additional context\n if (response.status === 401) {\n throw new AuthenticationError(`Authentication failed: ${apiError.message}`, {\n ...apiError,\n context: { ...apiError.context, endpoint: 'signin_with_api_key' },\n })\n }\n throw apiError\n }\n\n return (await response.json()) as SignInWithApiKeyResponse\n } catch (err) {\n // Re-throw our custom errors as-is\n if (err instanceof AmigoError) {\n throw err\n }\n\n // Handle network errors\n if (isNetworkError(err)) {\n throw new NetworkError('Failed to connect to authentication endpoint', err as Error, {\n url,\n method: 'POST',\n })\n }\n\n // Handle JSON parsing errors\n throw new ParseError(\n 'Failed to parse authentication response',\n 'json',\n err instanceof Error ? err : new Error(String(err))\n )\n }\n}\n\nexport function createAuthMiddleware(config: AmigoSdkConfig): Middleware {\n let token: SignInWithApiKeyResponse | null = null\n let refreshPromise: Promise<SignInWithApiKeyResponse> | null = null\n\n const shouldRefreshToken = (tokenData: SignInWithApiKeyResponse): boolean => {\n if (!tokenData.expires_at) return false\n\n const expiryTime = new Date(tokenData.expires_at).getTime()\n const currentTime = Date.now()\n const timeUntilExpiry = expiryTime - currentTime\n const refreshThreshold = 5 * 60 * 1000 // 5 minutes in milliseconds\n\n return timeUntilExpiry <= refreshThreshold\n }\n\n const ensureValidToken = async (): Promise<SignInWithApiKeyResponse> => {\n if (!token || shouldRefreshToken(token)) {\n if (!refreshPromise) {\n refreshPromise = getBearerToken(config)\n try {\n token = await refreshPromise\n } finally {\n refreshPromise = null\n }\n } else {\n token = await refreshPromise\n }\n }\n return token\n }\n\n return {\n onRequest: async ({ request }) => {\n try {\n const validToken = await ensureValidToken()\n if (validToken?.id_token) {\n request.headers.set('Authorization', `Bearer ${validToken.id_token}`)\n }\n } catch (error) {\n // Clear token and re-throw - getBearerToken already provides proper error types\n token = null\n throw error\n }\n return request\n },\n\n onResponse: async ({ response }) => {\n // Handle 401 responses by clearing token to force refresh on next request\n if (response.status === 401) {\n token = null\n }\n },\n\n onError: async ({ error }) => {\n // Clear token on any error to force refresh\n token = null\n throw error\n },\n }\n}\n", "import type { AmigoFetch } from '../core/openapi-client'\nimport { extractData } from '../core/utils'\nimport type { components, operations } from '../generated/api-types'\n\nexport class OrganizationResource {\n constructor(\n private c: AmigoFetch,\n private orgId: string\n ) {}\n\n /**\n * Get organization details\n * @param headers - The headers\n * @returns The organization details\n */\n async getOrganization(headers?: operations['get-organization']['parameters']['header']) {\n return extractData(\n this.c.GET('/v1/{organization}/organization/', {\n params: { path: { organization: this.orgId } },\n headers,\n })\n )\n }\n\n /**\n * Create an agent\n * @param agentName - The name of the agent\n * @param headers - The headers\n * @returns The agent details\n */\n async createAgent(\n body: components['schemas']['src__app__endpoints__organization__create_agent__Request'],\n headers?: operations['create-agent']['parameters']['header']\n ) {\n return extractData(\n this.c.POST('/v1/{organization}/organization/agent', {\n params: { path: { organization: this.orgId } },\n body,\n headers,\n })\n )\n }\n\n /**\n * Create an agent version\n * @param agentId - The ID of the agent\n * @param body - The body of the request\n * @param queryParams - The query parameters\n * @param headers - The headers\n * @returns The agent version details\n */\n async createAgentVersion(\n agentId: string,\n body: components['schemas']['src__app__endpoints__organization__create_agent_version__Request'],\n queryParams?: operations['create-agent-version']['parameters']['query'],\n headers?: operations['create-agent-version']['parameters']['header']\n ) {\n return extractData(\n this.c.POST('/v1/{organization}/organization/agent/{agent_id}/', {\n params: { path: { organization: this.orgId, agent_id: agentId }, query: queryParams },\n body,\n headers,\n })\n )\n }\n\n /**\n * Get agents\n * @param queryParams - The query parameters\n * @param headers - The headers\n * @returns The agents\n */\n async getAgents(\n queryParams?: operations['get-agents']['parameters']['query'],\n headers?: operations['get-agents']['parameters']['header']\n ) {\n return extractData(\n this.c.GET('/v1/{organization}/organization/agent', {\n params: { path: { organization: this.orgId }, query: queryParams },\n headers,\n })\n )\n }\n\n /**\n * Delete an agent\n * @param agentId - The ID of the agent\n * @param headers - The headers\n * @returns The agent details\n */\n async deleteAgent(\n agentId: string,\n headers?: operations['delete-agent']['parameters']['header']\n ): Promise<void> {\n // DELETE endpoints returns no content (e.g., 204 No Content).\n // Our middleware already throws on non-2xx responses, so simply await the call.\n await this.c.DELETE('/v1/{organization}/organization/agent/{agent_id}/', {\n params: { path: { organization: this.orgId, agent_id: agentId } },\n headers,\n })\n return\n }\n\n /**\n * Get agent versions\n * @param agentId - The ID of the agent\n * @param queryParams - The query parameters\n * @param headers - The headers\n * @returns The agent versions\n */\n async getAgentVersions(\n agentId: string,\n queryParams?: operations['get-agent-versions']['parameters']['query'],\n headers?: operations['get-agent-versions']['parameters']['header']\n ) {\n return extractData(\n this.c.GET('/v1/{organization}/organization/agent/{agent_id}/version', {\n params: { path: { organization: this.orgId, agent_id: agentId }, query: queryParams },\n headers,\n })\n )\n }\n}\n", "import type { AmigoFetch } from '../core/openapi-client'\nimport { extractData, parseNdjsonStream } from '../core/utils'\nimport type { components, operations } from '../generated/api-types'\n\n// Request body for Interact with Conversation\nexport type InteractWithConversationBody =\n | FormData // text: multipart/form-data with field `recorded_message`\n | Blob // voice: raw audio (or text encoded to bytes)\n | ArrayBuffer // voice\n | Uint8Array // voice\n | ReadableStream<Uint8Array> // voice streaming\n | Buffer // Node.js environments: voice\n\nexport class ConversationResource {\n constructor(\n private c: AmigoFetch,\n private orgId: string\n ) {}\n\n async createConversation(\n body: components['schemas']['src__app__endpoints__conversation__create_conversation__Request'],\n queryParams: operations['create-conversation']['parameters']['query'],\n headers?: operations['create-conversation']['parameters']['header'],\n options?: { signal?: AbortSignal }\n ) {\n const resp = await this.c.POST('/v1/{organization}/conversation/', {\n params: { path: { organization: this.orgId }, query: queryParams },\n body,\n headers,\n // Ensure we receive a stream for NDJSON\n parseAs: 'stream',\n ...(options?.signal && { signal: options.signal }),\n })\n\n // onResponse middleware throws for non-2xx; if we reach here, it's OK.\n return parseNdjsonStream<\n components['schemas']['src__app__endpoints__conversation__create_conversation__Response']\n >(resp.response)\n }\n\n async interactWithConversation(\n conversationId: string,\n body: InteractWithConversationBody,\n queryParams: operations['interact-with-conversation']['parameters']['query'],\n headers?: operations['interact-with-conversation']['parameters']['header'],\n options?: { signal?: AbortSignal }\n ) {\n const resp = await this.c.POST('/v1/{organization}/conversation/{conversation_id}/interact', {\n params: {\n path: { organization: this.orgId, conversation_id: conversationId },\n query: queryParams,\n },\n body,\n headers,\n parseAs: 'stream',\n ...(options?.signal && { signal: options.signal }),\n })\n\n return parseNdjsonStream<\n components['schemas']['src__app__endpoints__conversation__interact_with_conversation__Response']\n >(resp.response)\n }\n\n async getConversations(\n queryParams?: operations['get-conversations']['parameters']['query'],\n headers?: operations['get-conversations']['parameters']['header']\n ) {\n return extractData(\n this.c.GET('/v1/{organization}/conversation/', {\n params: { path: { organization: this.orgId }, query: queryParams },\n headers,\n })\n )\n }\n\n async getConversationMessages(\n conversationId: string,\n queryParams?: operations['get-conversation-messages']['parameters']['query'],\n headers?: operations['get-conversation-messages']['parameters']['header']\n ) {\n return extractData(\n this.c.GET('/v1/{organization}/conversation/{conversation_id}/messages/', {\n params: {\n path: { organization: this.orgId, conversation_id: conversationId },\n query: queryParams,\n },\n headers,\n })\n )\n }\n\n async finishConversation(\n conversationId: string,\n headers?: operations['finish-conversation']['parameters']['header']\n ) {\n await this.c.POST('/v1/{organization}/conversation/{conversation_id}/finish/', {\n params: { path: { organization: this.orgId, conversation_id: conversationId } },\n headers,\n // No content is expected; parse as text to access raw Response\n parseAs: 'text',\n })\n return\n }\n\n async recommendResponsesForInteraction(\n conversationId: string,\n interactionId: string,\n headers?: operations['recommend-responses-for-interaction']['parameters']['header']\n ) {\n return extractData(\n this.c.GET(\n '/v1/{organization}/conversation/{conversation_id}/interaction/{interaction_id}/recommend_responses',\n {\n params: {\n path: {\n organization: this.orgId,\n conversation_id: conversationId,\n interaction_id: interactionId,\n },\n },\n headers,\n }\n )\n )\n }\n\n async getInteractionInsights(\n conversationId: string,\n interactionId: string,\n headers?: operations['get-interaction-insights']['parameters']['header']\n ) {\n return extractData(\n this.c.GET(\n '/v1/{organization}/conversation/{conversation_id}/interaction/{interaction_id}/insights',\n {\n params: {\n path: {\n organization: this.orgId,\n conversation_id: conversationId,\n interaction_id: interactionId,\n },\n },\n headers,\n }\n )\n )\n }\n\n // Note: the OpenAPI response schema isn't correct for this endpoint.\n // TODO -- fix response typing.\n async getMessageSource(\n conversationId: string,\n messageId: string,\n headers?: operations['retrieve-message-source']['parameters']['header']\n ) {\n return extractData(\n this.c.GET('/v1/{organization}/conversation/{conversation_id}/messages/{message_id}/source', {\n params: {\n path: {\n organization: this.orgId,\n conversation_id: conversationId,\n message_id: messageId,\n },\n },\n headers,\n })\n )\n }\n\n async generateConversationStarters(\n body: components['schemas']['src__app__endpoints__conversation__generate_conversation_starter__Request'],\n headers?: operations['generate-conversation-starter']['parameters']['header']\n ) {\n return extractData(\n this.c.POST('/v1/{organization}/conversation/conversation_starter', {\n params: { path: { organization: this.orgId } },\n body,\n headers,\n })\n )\n }\n}\n", "import type { AmigoFetch } from '../core/openapi-client'\nimport { extractData } from '../core/utils'\nimport type { operations } from '../generated/api-types'\n\nexport class ServiceResource {\n constructor(\n private c: AmigoFetch,\n private orgId: string\n ) {}\n\n /**\n * Get services\n * @param headers - The headers\n * @returns The services\n */\n async getServices(\n queryParams?: operations['get-services']['parameters']['query'],\n headers?: operations['get-services']['parameters']['header']\n ) {\n return extractData(\n this.c.GET('/v1/{organization}/service/', {\n params: { path: { organization: this.orgId }, query: queryParams },\n headers,\n })\n )\n }\n}\n", "import { ConfigurationError } from './core/errors'\nimport { createAmigoFetch } from './core/openapi-client'\nimport { OrganizationResource } from './resources/organization'\nimport { ConversationResource } from './resources/conversation'\nimport { ServiceResource } from './resources/services'\n\nexport interface AmigoSdkConfig {\n /** API key from Amigo dashboard */\n apiKey: string\n /** API-key ID from Amigo dashboard */\n apiKeyId: string\n /** User ID on whose behalf the request is made */\n userId: string\n /** The Organization ID */\n orgId: string\n /** Base URL of the Amigo API */\n baseUrl?: string\n}\n\nconst defaultBaseUrl = 'https://api.amigo.ai'\n\nexport class AmigoClient {\n readonly organizations: OrganizationResource\n readonly conversations: ConversationResource\n readonly services: ServiceResource\n readonly config: AmigoSdkConfig\n\n constructor(config: AmigoSdkConfig) {\n this.config = validateConfig(config)\n\n const api = createAmigoFetch(this.config)\n this.organizations = new OrganizationResource(api, this.config.orgId)\n this.conversations = new ConversationResource(api, this.config.orgId)\n this.services = new ServiceResource(api, this.config.orgId)\n }\n}\n\nfunction validateConfig(config: AmigoSdkConfig) {\n if (!config.apiKey) {\n throw new ConfigurationError('API key is required', 'apiKey')\n }\n if (!config.apiKeyId) {\n throw new ConfigurationError('API key ID is required', 'apiKeyId')\n }\n if (!config.userId) {\n throw new ConfigurationError('User ID is required', 'userId')\n }\n if (!config.orgId) {\n throw new ConfigurationError('Organization ID is required', 'orgId')\n }\n if (!config.baseUrl) {\n config.baseUrl = defaultBaseUrl\n }\n return config\n}\n\n// Export all errors as a namespace to avoid polluting the main import space\nexport * as errors from './core/errors'\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,13 @@
1
1
  export type ExtractDataType<T> = T extends {
2
2
  data?: infer D;
3
- } ? D : never;
4
- export declare function extractData<T>(responsePromise: Promise<T>): Promise<ExtractDataType<T>>;
3
+ } ? NonNullable<D> : never;
4
+ export declare function extractData<T extends {
5
+ data?: unknown;
6
+ }>(responsePromise: Promise<T>): Promise<ExtractDataType<T>>;
7
+ /**
8
+ * Parse an NDJSON HTTP response body into an async generator of parsed JSON objects.
9
+ * The generator yields one parsed object per line. Empty lines are skipped.
10
+ */
11
+ export declare function parseNdjsonStream<T = unknown>(response: Response): AsyncGenerator<T>;
5
12
  export declare function parseResponseBody(response: Response): Promise<unknown>;
6
13
  export declare function isNetworkError(error: unknown): boolean;
@@ -3229,9 +3229,9 @@ export interface components {
3229
3229
  };
3230
3230
  };
3231
3231
  /** @enum {string} */
3232
- LLMLoadBalancingSetType: "o4-mini-2025-04-16" | "gpt-4.1-2025-04-14" | "gpt-4.1-mini-2025-04-14" | "gpt-4.1-nano-2025-04-14" | "claude-3-7-sonnet@20250219" | "claude-sonnet-4@20250514";
3232
+ LLMLoadBalancingSetType: "o4-mini-2025-04-16" | "gpt-4.1-2025-04-14" | "gpt-4.1-mini-2025-04-14" | "gpt-5-2025-08-07" | "gpt-5-mini-2025-08-07" | "gpt-5-nano-2025-08-07" | "gpt-5-chat-2025-08-07" | "claude-sonnet-4@20250514";
3233
3233
  /** @enum {string} */
3234
- LLMType: "openai_o3-2025-04-16" | "openai_o4-mini-2025-04-16" | "openai_gpt-4.1-2025-04-14" | "openai_gpt-4.1-mini-2025-04-14" | "openai_gpt-4.1-nano-2025-04-14" | "azure_o4-mini-2025-04-16" | "azure_gpt-4.1-2025-04-14" | "azure_gpt-4.1-mini-2025-04-14" | "azure_gpt-4.1-nano-2025-04-14" | "google_claude-3-7-sonnet@20250219" | "google_claude-sonnet-4@20250514" | "aws_claude-3-7-sonnet@20250219" | "aws_claude-sonnet-4@20250514" | "anthropic_claude-3-7-sonnet@20250219" | "anthropic_claude-sonnet-4@20250514" | "google_gemini-2.5-pro" | "google_gemini-2.5-flash";
3234
+ LLMType: "openai_o4-mini-2025-04-16" | "openai_gpt-4.1-2025-04-14" | "openai_gpt-4.1-mini-2025-04-14" | "openai_gpt-5-2025-08-07" | "openai_gpt-5-mini-2025-08-07" | "openai_gpt-5-nano-2025-08-07" | "openai_gpt-5-chat-2025-08-07" | "azure_o4-mini-2025-04-16" | "azure_gpt-4.1-2025-04-14" | "azure_gpt-4.1-mini-2025-04-14" | "azure_gpt-5-2025-08-07" | "azure_gpt-5-mini-2025-08-07" | "azure_gpt-5-nano-2025-08-07" | "azure_gpt-5-chat-2025-08-07" | "google_claude-sonnet-4@20250514" | "aws_claude-sonnet-4@20250514" | "anthropic_claude-sonnet-4@20250514" | "google_gemini-2.5-pro" | "google_gemini-2.5-flash";
3235
3235
  /** MP3UserMessageAudioConfig */
3236
3236
  MP3UserMessageAudioConfig: {
3237
3237
  /**
@@ -10639,7 +10639,7 @@ export interface operations {
10639
10639
  };
10640
10640
  cookie?: never;
10641
10641
  };
10642
- requestBody?: never;
10642
+ requestBody?: any;
10643
10643
  responses: {
10644
10644
  /** @description
10645
10645
  * Succeeded. The response will be a stream of events in JSON format separated by newlines. The server will transmit an event as soon as one is available,
@@ -1,4 +1,5 @@
1
1
  import { OrganizationResource } from './resources/organization';
2
+ import { ConversationResource } from './resources/conversation';
2
3
  import { ServiceResource } from './resources/services';
3
4
  export interface AmigoSdkConfig {
4
5
  /** API key from Amigo dashboard */
@@ -14,6 +15,7 @@ export interface AmigoSdkConfig {
14
15
  }
15
16
  export declare class AmigoClient {
16
17
  readonly organizations: OrganizationResource;
18
+ readonly conversations: ConversationResource;
17
19
  readonly services: ServiceResource;
18
20
  readonly config: AmigoSdkConfig;
19
21
  constructor(config: AmigoSdkConfig);
@@ -0,0 +1,92 @@
1
+ import type { AmigoFetch } from '../core/openapi-client';
2
+ import type { components, operations } from '../generated/api-types';
3
+ export type InteractWithConversationBody = FormData | Blob | ArrayBuffer | Uint8Array | ReadableStream<Uint8Array> | Buffer;
4
+ export declare class ConversationResource {
5
+ private c;
6
+ private orgId;
7
+ constructor(c: AmigoFetch, orgId: string);
8
+ createConversation(body: components['schemas']['src__app__endpoints__conversation__create_conversation__Request'], queryParams: operations['create-conversation']['parameters']['query'], headers?: operations['create-conversation']['parameters']['header'], options?: {
9
+ signal?: AbortSignal;
10
+ }): Promise<AsyncGenerator<{
11
+ type: "conversation-created";
12
+ conversation_id: string;
13
+ } | {
14
+ type: "interaction-complete";
15
+ message_id: string;
16
+ interaction_id: string;
17
+ full_message: string;
18
+ conversation_completed: boolean;
19
+ } | {
20
+ type: "new-message";
21
+ message: string;
22
+ message_metadata: string[];
23
+ transcript_alignment: [number, string][] | null;
24
+ stop: boolean;
25
+ sequence_number: number;
26
+ message_id: string;
27
+ } | {
28
+ type: "current-agent-action";
29
+ action: components["schemas"]["src__app__amigo__service__conversation__Action"];
30
+ } | {
31
+ type: "error";
32
+ http_error_code: number;
33
+ error_description: string;
34
+ }, any, any>>;
35
+ interactWithConversation(conversationId: string, body: InteractWithConversationBody, queryParams: operations['interact-with-conversation']['parameters']['query'], headers?: operations['interact-with-conversation']['parameters']['header'], options?: {
36
+ signal?: AbortSignal;
37
+ }): Promise<AsyncGenerator<{
38
+ type: "interaction-complete";
39
+ message_id: string;
40
+ interaction_id: string;
41
+ full_message: string;
42
+ conversation_completed: boolean;
43
+ } | {
44
+ type: "end-session";
45
+ } | {
46
+ type: "new-message";
47
+ message: string;
48
+ message_metadata: string[];
49
+ transcript_alignment: [number, string][] | null;
50
+ stop: boolean;
51
+ sequence_number: number;
52
+ message_id: string;
53
+ } | {
54
+ type: "current-agent-action";
55
+ action: components["schemas"]["src__app__amigo__service__conversation__Action"];
56
+ } | {
57
+ type: "error";
58
+ http_error_code: number;
59
+ error_description: string;
60
+ } | {
61
+ type: "user-message-available";
62
+ message_id: string;
63
+ user_message: string;
64
+ }, any, any>>;
65
+ getConversations(queryParams?: operations['get-conversations']['parameters']['query'], headers?: operations['get-conversations']['parameters']['header']): Promise<{
66
+ conversations: components["schemas"]["Conversation"][];
67
+ has_more: boolean;
68
+ continuation_token: number | null;
69
+ }>;
70
+ getConversationMessages(conversationId: string, queryParams?: operations['get-conversation-messages']['parameters']['query'], headers?: operations['get-conversation-messages']['parameters']['header']): Promise<{
71
+ messages: components["schemas"]["MessageInstance"][];
72
+ has_more: boolean;
73
+ continuation_token: number | null;
74
+ }>;
75
+ finishConversation(conversationId: string, headers?: operations['finish-conversation']['parameters']['header']): Promise<void>;
76
+ recommendResponsesForInteraction(conversationId: string, interactionId: string, headers?: operations['recommend-responses-for-interaction']['parameters']['header']): Promise<{
77
+ recommended_responses: string[];
78
+ }>;
79
+ getInteractionInsights(conversationId: string, interactionId: string, headers?: operations['get-interaction-insights']['parameters']['header']): Promise<{
80
+ current_state_name: string;
81
+ current_state_action: string;
82
+ current_state_objective: string;
83
+ state_transition_logs: components["schemas"]["StateTransitionLog"][];
84
+ working_memory: components["schemas"]["WorkingMemory"][];
85
+ reflections: string[];
86
+ triggered_dynamic_behavior_set_version_info: [string, number] | null;
87
+ }>;
88
+ getMessageSource(conversationId: string, messageId: string, headers?: operations['retrieve-message-source']['parameters']['header']): Promise<{}>;
89
+ generateConversationStarters(body: components['schemas']['src__app__endpoints__conversation__generate_conversation_starter__Request'], headers?: operations['generate-conversation-starter']['parameters']['header']): Promise<{
90
+ prompts: components["schemas"]["Prompt"][];
91
+ }>;
92
+ }
@@ -1,14 +1,73 @@
1
1
  import type { AmigoFetch } from '../core/openapi-client';
2
+ import type { components, operations } from '../generated/api-types';
2
3
  export declare class OrganizationResource {
3
4
  private c;
4
- constructor(c: AmigoFetch);
5
- getOrganization(orgId: string): Promise<{
5
+ private orgId;
6
+ constructor(c: AmigoFetch, orgId: string);
7
+ /**
8
+ * Get organization details
9
+ * @param headers - The headers
10
+ * @returns The organization details
11
+ */
12
+ getOrganization(headers?: operations['get-organization']['parameters']['header']): Promise<{
6
13
  org_id: string;
7
14
  org_name: string;
8
15
  title: string;
9
16
  main_description: string;
10
17
  sub_description: string;
11
18
  onboarding_instructions: string[];
12
- default_user_preferences: import("../generated/api-types").components["schemas"]["Preferences-Output"] | null;
13
- } | undefined>;
19
+ default_user_preferences: components["schemas"]["Preferences-Output"] | null;
20
+ }>;
21
+ /**
22
+ * Create an agent
23
+ * @param agentName - The name of the agent
24
+ * @param headers - The headers
25
+ * @returns The agent details
26
+ */
27
+ createAgent(body: components['schemas']['src__app__endpoints__organization__create_agent__Request'], headers?: operations['create-agent']['parameters']['header']): Promise<{
28
+ id: string;
29
+ }>;
30
+ /**
31
+ * Create an agent version
32
+ * @param agentId - The ID of the agent
33
+ * @param body - The body of the request
34
+ * @param queryParams - The query parameters
35
+ * @param headers - The headers
36
+ * @returns The agent version details
37
+ */
38
+ createAgentVersion(agentId: string, body: components['schemas']['src__app__endpoints__organization__create_agent_version__Request'], queryParams?: operations['create-agent-version']['parameters']['query'], headers?: operations['create-agent-version']['parameters']['header']): Promise<{
39
+ id: string;
40
+ version: number;
41
+ created_at: string;
42
+ }>;
43
+ /**
44
+ * Get agents
45
+ * @param queryParams - The query parameters
46
+ * @param headers - The headers
47
+ * @returns The agents
48
+ */
49
+ getAgents(queryParams?: operations['get-agents']['parameters']['query'], headers?: operations['get-agents']['parameters']['header']): Promise<{
50
+ agents: components["schemas"]["src__app__endpoints__organization__get_agents__Response__AgentInstance"][];
51
+ has_more: boolean;
52
+ continuation_token: number | null;
53
+ }>;
54
+ /**
55
+ * Delete an agent
56
+ * @param agentId - The ID of the agent
57
+ * @param headers - The headers
58
+ * @returns The agent details
59
+ */
60
+ deleteAgent(agentId: string, headers?: operations['delete-agent']['parameters']['header']): Promise<void>;
61
+ /**
62
+ * Get agent versions
63
+ * @param agentId - The ID of the agent
64
+ * @param queryParams - The query parameters
65
+ * @param headers - The headers
66
+ * @returns The agent versions
67
+ */
68
+ getAgentVersions(agentId: string, queryParams?: operations['get-agent-versions']['parameters']['query'], headers?: operations['get-agent-versions']['parameters']['header']): Promise<{
69
+ agent_versions: components["schemas"]["src__app__endpoints__organization__get_agent_versions__Response__AgentInstance"][];
70
+ has_more: boolean;
71
+ continuation_token: number | null;
72
+ }>;
14
73
  }
@@ -1,11 +1,18 @@
1
1
  import type { AmigoFetch } from '../core/openapi-client';
2
+ import type { operations } from '../generated/api-types';
2
3
  export declare class ServiceResource {
3
4
  private c;
4
- constructor(c: AmigoFetch);
5
- getServices(orgId: string): Promise<{
5
+ private orgId;
6
+ constructor(c: AmigoFetch, orgId: string);
7
+ /**
8
+ * Get services
9
+ * @param headers - The headers
10
+ * @returns The services
11
+ */
12
+ getServices(queryParams?: operations['get-services']['parameters']['query'], headers?: operations['get-services']['parameters']['header']): Promise<{
6
13
  services: import("../generated/api-types").components["schemas"]["ServiceInstance"][];
7
14
  has_more: boolean;
8
15
  continuation_token: number | null;
9
16
  filter_values: import("../generated/api-types").components["schemas"]["src__app__endpoints__service__get_services__Response__FilterValues"] | null;
10
- } | undefined>;
17
+ }>;
11
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amigo-ai/sdk",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "Amigo TypeScript SDK",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -10,16 +10,17 @@
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
- "gen-types": "node scripts/gen-types.mjs",
14
- "test": "vitest run",
15
- "test:integration": "RUN_INTEGRATION=true vitest run tests/integration.test.ts",
13
+ "gen-types": "node scripts/gen.mjs",
14
+ "test": "vitest run --project unit",
15
+ "test:integration": "vitest run --project integration",
16
16
  "test:watch": "vitest",
17
- "test:coverage": "vitest run --coverage",
17
+ "test:coverage": "vitest run --coverage --project unit",
18
18
  "build": "node scripts/gen.mjs && node scripts/build.mjs && tsc --project tsconfig.build.json",
19
19
  "dev": "node scripts/gen.mjs && node scripts/build.mjs --watch",
20
20
  "format": "prettier --check .",
21
21
  "format:write": "prettier --write .",
22
- "lint": "eslint 'src/**/*.{ts,tsx}' --max-warnings 0"
22
+ "lint": "eslint 'src/**/*.{ts,tsx}' --max-warnings 0",
23
+ "lint:fix": "eslint 'src/**/*.{ts,tsx}' --fix"
23
24
  },
24
25
  "exports": {
25
26
  ".": {