@voice-ai-labs/web-sdk 0.9.2 → 1.0.1
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 +159 -24
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +6 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/base.d.ts +8 -2
- package/dist/client/base.d.ts.map +1 -1
- package/dist/client/base.js +31 -13
- package/dist/client/base.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/managed-tools.d.ts +17 -0
- package/dist/client/managed-tools.d.ts.map +1 -0
- package/dist/client/managed-tools.js +24 -0
- package/dist/client/managed-tools.js.map +1 -0
- package/dist/client/tts.d.ts +1 -1
- package/dist/client/tts.js +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +781 -46
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +798 -45
- package/dist/index.js.map +1 -1
- package/dist/managed-tools/google.d.ts +29 -0
- package/dist/managed-tools/google.d.ts.map +1 -0
- package/dist/managed-tools/google.js +178 -0
- package/dist/managed-tools/google.js.map +1 -0
- package/dist/managed-tools/iana-timezones.d.ts +10 -0
- package/dist/managed-tools/iana-timezones.d.ts.map +1 -0
- package/dist/managed-tools/iana-timezones.js +470 -0
- package/dist/managed-tools/iana-timezones.js.map +1 -0
- package/dist/types.d.ts +78 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,6 +35,7 @@ The SDK provides a unified interface for:
|
|
|
35
35
|
- [**Real-time Voice**](#real-time-voice) — Connect to voice agents with live transcription
|
|
36
36
|
- [**Text-to-Speech**](#text-to-speech) — Generate speech and manage voices
|
|
37
37
|
- [**Agent Management**](#agent-management) — Create, update, deploy, and manage agents
|
|
38
|
+
- [**Managed Tools**](#managed-tools) — Connect first-party managed integrations such as Google Calendar, Sheets, and Gmail
|
|
38
39
|
- [**Knowledge Base**](#knowledge-base) — Manage RAG documents for your agents
|
|
39
40
|
- [**Phone Numbers**](#phone-numbers) — Search and manage phone numbers
|
|
40
41
|
- [**Analytics**](#analytics) — Access call history, transcripts, and recordings
|
|
@@ -167,7 +168,7 @@ const audio = await voiceai.tts.synthesize({
|
|
|
167
168
|
// List all available voices
|
|
168
169
|
const voices = await voiceai.tts.listVoices();
|
|
169
170
|
|
|
170
|
-
// Clone a voice from audio file (MP3/WAV/
|
|
171
|
+
// Clone a voice from audio file (MP3/WAV/M4A, max 7.5MB)
|
|
171
172
|
const voice = await voiceai.tts.cloneVoice({
|
|
172
173
|
file: audioFile,
|
|
173
174
|
name: 'My Voice',
|
|
@@ -279,6 +280,129 @@ await voiceai.agents.createOutboundCall({
|
|
|
279
280
|
});
|
|
280
281
|
```
|
|
281
282
|
|
|
283
|
+
## Managed Tools
|
|
284
|
+
|
|
285
|
+
The managed tools surface is generic. Today it covers Google Calendar, Google Sheets, and Gmail.
|
|
286
|
+
|
|
287
|
+
Managed tools are exposed under `voiceai.managedTools`.
|
|
288
|
+
|
|
289
|
+
Today the SDK includes one Google entry:
|
|
290
|
+
|
|
291
|
+
- `voiceai.managedTools.google`
|
|
292
|
+
- Use it to start OAuth, check status, and disconnect Google managed tools for an agent
|
|
293
|
+
- Pass the individual managed tool configs under `managedTools.google_calendar`, `managedTools.google_sheets`, and `managedTools.google_gmail`
|
|
294
|
+
|
|
295
|
+
Use the managed Google surface to connect an agent to Google Calendar, Sheets, or Gmail.
|
|
296
|
+
|
|
297
|
+
For a working browser example, see [`demo/managed-tools.html`](https://github.com/voice-ai/web-sdk/blob/main/demo/managed-tools.html).
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
import VoiceAI, {
|
|
301
|
+
GOOGLE_CALENDAR_OPERATION_OPTIONS,
|
|
302
|
+
IANA_TIMEZONE_OPTIONS,
|
|
303
|
+
getGoogleReconnectState,
|
|
304
|
+
hasEnabledGoogleManagedTools,
|
|
305
|
+
} from '@voice-ai-labs/web-sdk';
|
|
306
|
+
|
|
307
|
+
const voiceai = new VoiceAI({ apiKey: 'vk_your_api_key' });
|
|
308
|
+
|
|
309
|
+
const start = await voiceai.managedTools.google.startOAuth('agent-123', {
|
|
310
|
+
returnUrl: window.location.href,
|
|
311
|
+
managedTools: {
|
|
312
|
+
google_calendar: {
|
|
313
|
+
enabled: true,
|
|
314
|
+
timezone: 'America/Los_Angeles',
|
|
315
|
+
selected_operations: ['google_calendar_check_availability', 'google_calendar_create_event'],
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
window.open(start.auth_url, 'google-oauth', 'popup,width=540,height=720');
|
|
321
|
+
|
|
322
|
+
const status = await voiceai.managedTools.google.getStatus('agent-123');
|
|
323
|
+
const reconnect = getGoogleReconnectState(
|
|
324
|
+
{
|
|
325
|
+
google_calendar: {
|
|
326
|
+
enabled: true,
|
|
327
|
+
selected_operations: ['google_calendar_check_availability', 'google_calendar_create_event'],
|
|
328
|
+
},
|
|
329
|
+
},
|
|
330
|
+
status
|
|
331
|
+
);
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Connection flow:
|
|
335
|
+
|
|
336
|
+
1. Call `startOAuth(...)` with the agent ID, `returnUrl`, and the currently enabled Google managed tool config for the agent.
|
|
337
|
+
2. Open the returned `auth_url` in a popup or browser tab.
|
|
338
|
+
3. Google redirects to the VoiceAI backend callback.
|
|
339
|
+
4. The backend completes OAuth and then returns the user to your `returnUrl`.
|
|
340
|
+
5. Refresh or poll `voiceai.managedTools.google.getStatus(agentId)` to confirm the connection state.
|
|
341
|
+
|
|
342
|
+
Connection semantics:
|
|
343
|
+
|
|
344
|
+
- `startOAuth(...)` manages Google managed-tools access for the agent
|
|
345
|
+
- the Google connection is shared across Calendar, Sheets, and Gmail for that agent
|
|
346
|
+
- enabling more Google operations later can require reconnecting to grant access for the currently enabled Google tools
|
|
347
|
+
- `disconnect(...)` removes Google managed-tools access for all Google tools on that agent
|
|
348
|
+
|
|
349
|
+
Available helpers:
|
|
350
|
+
|
|
351
|
+
- `voiceai.managedTools.google.startOAuth(agentId, { returnUrl, managedTools })`
|
|
352
|
+
- `voiceai.managedTools.google.getStatus(agentId)`
|
|
353
|
+
- `voiceai.managedTools.google.disconnect(agentId)`
|
|
354
|
+
- `GOOGLE_CALENDAR_OPERATION_OPTIONS`, `GOOGLE_SHEETS_OPERATION_OPTIONS`, `GOOGLE_GMAIL_OPERATION_OPTIONS`
|
|
355
|
+
- `getManagedToolSelectedOperations(...)`, `toggleManagedToolOperation(...)`
|
|
356
|
+
- `getRequiredGoogleScopes(...)`, `getGoogleReconnectState(...)`, `hasEnabledGoogleManagedTools(...)`
|
|
357
|
+
- `IANA_TIMEZONE_OPTIONS` for timezone selectors. Each option includes `{ value, label, offsetMinutes }`, where `value` is the canonical IANA timezone like `America/Los_Angeles`
|
|
358
|
+
|
|
359
|
+
Managed tool config fields:
|
|
360
|
+
|
|
361
|
+
- `google_calendar`
|
|
362
|
+
- `enabled: boolean`
|
|
363
|
+
- `default_calendar_id?: string`
|
|
364
|
+
- `timezone?: string`
|
|
365
|
+
- `selected_operations?: GoogleCalendarOperation[]`
|
|
366
|
+
- `google_sheets`
|
|
367
|
+
- `enabled: boolean`
|
|
368
|
+
- `spreadsheet_id?: string`
|
|
369
|
+
- `sheet_name?: string`
|
|
370
|
+
- `selected_operations?: GoogleSheetsOperation[]`
|
|
371
|
+
- `google_gmail`
|
|
372
|
+
- `enabled: boolean`
|
|
373
|
+
- `selected_operations?: GoogleGmailOperation[]`
|
|
374
|
+
|
|
375
|
+
Supported Calendar operations:
|
|
376
|
+
|
|
377
|
+
- `google_calendar_check_availability` — Check whether a calendar is free during a time window
|
|
378
|
+
- `google_calendar_list_upcoming_events` — Read the next upcoming events from the calendar
|
|
379
|
+
- `google_calendar_create_event` — Create a new calendar event
|
|
380
|
+
- `google_calendar_update_event` — Modify an existing calendar event
|
|
381
|
+
- `google_calendar_cancel_event` — Cancel or delete an existing calendar event
|
|
382
|
+
|
|
383
|
+
Supported Sheets operations:
|
|
384
|
+
|
|
385
|
+
- `google_sheets_append_row` — Write a new row into a spreadsheet
|
|
386
|
+
- `google_sheets_list_sheets` — List worksheet tabs and spreadsheet metadata
|
|
387
|
+
- `google_sheets_read_rows` — Read rows from a worksheet range
|
|
388
|
+
|
|
389
|
+
Supported Gmail operations:
|
|
390
|
+
|
|
391
|
+
- `google_gmail_search_messages` — Search Gmail and return readable message summaries
|
|
392
|
+
- `google_gmail_get_message` — Fetch a specific Gmail message by ID
|
|
393
|
+
- `google_gmail_send_email` — Send an email from the connected Gmail account
|
|
394
|
+
|
|
395
|
+
Notes:
|
|
396
|
+
|
|
397
|
+
- Google Calendar, Sheets, and Gmail all use the `voiceai.managedTools.google` surface.
|
|
398
|
+
- `startOAuth(...)` uses the Google managed tool config you pass in `managedTools` to determine the scopes requested for the shared agent-level Google connection.
|
|
399
|
+
- If you enable additional Google operations later, `getStatus()` / `getGoogleReconnectState(...)` may report `reconnect_required` until you reconnect and grant access for the currently enabled Google tools.
|
|
400
|
+
- `voiceai.managedTools.google.disconnect(agentId)` removes Google managed-tools access for the agent.
|
|
401
|
+
- `returnUrl` is your app/frontend return target after the VoiceAI backend callback completes. It is not the Google-registered OAuth redirect URI.
|
|
402
|
+
- Calendar `timezone` should be an IANA timezone like `America/Los_Angeles`
|
|
403
|
+
- If `selected_operations` is omitted, the SDK helpers treat that managed tool config as “all supported operations selected”
|
|
404
|
+
- If `selected_operations` is an empty array, the managed tool config remains present but requests no additional provider scopes
|
|
405
|
+
|
|
282
406
|
> **Outbound access control:** `POST /api/v1/calls/outbound` is restricted to approved accounts.
|
|
283
407
|
> If you need outbound enabled for your account/workspace, please contact Voice.ai support.
|
|
284
408
|
|
|
@@ -365,7 +489,10 @@ await voiceai.phoneNumbers.release('+14155551234');
|
|
|
365
489
|
const history = await voiceai.analytics.getCallHistory({
|
|
366
490
|
page: 1,
|
|
367
491
|
limit: 20,
|
|
368
|
-
agent_ids: ['agent-123']
|
|
492
|
+
agent_ids: ['agent-123'],
|
|
493
|
+
agent_name: 'support',
|
|
494
|
+
sort_by: 'duration',
|
|
495
|
+
sort_dir: 'desc'
|
|
369
496
|
});
|
|
370
497
|
|
|
371
498
|
// Get transcript URL
|
|
@@ -385,9 +512,9 @@ const stats = await voiceai.analytics.getStatsSummary();
|
|
|
385
512
|
|
|
386
513
|
Configure webhooks when creating or updating an agent.
|
|
387
514
|
|
|
388
|
-
`webhooks.events`, `webhooks.inbound_call`, and `webhooks.tools` use different contracts:
|
|
515
|
+
`webhooks.events[]`, `webhooks.inbound_call`, and `webhooks.tools` use different contracts:
|
|
389
516
|
|
|
390
|
-
- `webhooks.events` supports `secret` (write-only on create/update) and `has_secret` (read-only on fetch).
|
|
517
|
+
- `webhooks.events[]` supports `secret` (write-only on create/update) and `has_secret` (read-only on fetch), with fan-out across enabled endpoints.
|
|
391
518
|
- `webhooks.inbound_call` supports `secret` (write-only on create/update) and `has_secret` (read-only on fetch).
|
|
392
519
|
- `webhooks.tools` define outbound API calls and do not use `secret`.
|
|
393
520
|
|
|
@@ -400,13 +527,15 @@ const agent = await voiceai.agents.create({
|
|
|
400
527
|
config: {
|
|
401
528
|
prompt: 'You are a helpful support agent.',
|
|
402
529
|
webhooks: {
|
|
403
|
-
events:
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
530
|
+
events: [
|
|
531
|
+
{
|
|
532
|
+
url: 'https://your-server.com/webhooks/voice-events',
|
|
533
|
+
secret: 'your-hmac-secret', // Event webhook signing secret
|
|
534
|
+
events: ['call.started', 'call.completed'], // Or omit for all events
|
|
535
|
+
timeout: 5,
|
|
536
|
+
enabled: true
|
|
537
|
+
}
|
|
538
|
+
],
|
|
410
539
|
inbound_call: {
|
|
411
540
|
url: 'https://your-server.com/webhooks/inbound-call',
|
|
412
541
|
secret: 'your-inbound-call-secret', // Inbound call webhook signing secret
|
|
@@ -446,11 +575,13 @@ const agent = await voiceai.agents.create({
|
|
|
446
575
|
await voiceai.agents.update(agentId, {
|
|
447
576
|
config: {
|
|
448
577
|
webhooks: {
|
|
449
|
-
events:
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
578
|
+
events: [
|
|
579
|
+
{
|
|
580
|
+
url: 'https://your-server.com/webhooks',
|
|
581
|
+
events: ['call.completed'], // Only receive call.completed
|
|
582
|
+
enabled: true
|
|
583
|
+
}
|
|
584
|
+
],
|
|
454
585
|
tools: [
|
|
455
586
|
{
|
|
456
587
|
name: 'search_knowledge_base',
|
|
@@ -476,10 +607,12 @@ await voiceai.agents.update(agentId, {
|
|
|
476
607
|
|
|
477
608
|
### Webhook configuration requiredness
|
|
478
609
|
|
|
479
|
-
- `webhooks.events`
|
|
480
|
-
- Required: `url`
|
|
481
|
-
- Optional: `secret`, `events`, `timeout` (default `5`), `enabled` (default `true`)
|
|
482
|
-
- On update: omit `events` to preserve the
|
|
610
|
+
- `webhooks.events[]`
|
|
611
|
+
- Required per endpoint: `url`
|
|
612
|
+
- Optional per endpoint: `secret`, `events`, `timeout` (default `5`), `enabled` (default `true`)
|
|
613
|
+
- On update: omit `webhooks.events` to preserve the current list, set `webhooks.events: null` to remove it, or pass a full array to replace the list
|
|
614
|
+
- When replacing the array: omitted `secret` values are preserved only for entries whose `url` exactly matches an existing endpoint, `secret: null` clears the signing secret for that endpoint, and duplicate URLs are invalid
|
|
615
|
+
- Use `events: []` on an endpoint to receive all event types
|
|
483
616
|
- `webhooks.inbound_call`
|
|
484
617
|
- Required: `url`
|
|
485
618
|
- Optional: `secret`, `timeout` (default `5`), `enabled` (default `true`)
|
|
@@ -520,8 +653,10 @@ interface WebhookEvent {
|
|
|
520
653
|
|
|
521
654
|
For webhook tools, Voice.ai makes outbound HTTP requests directly to each tool `url`.
|
|
522
655
|
|
|
523
|
-
- `method: 'GET'`: tool arguments are sent as query parameters.
|
|
524
|
-
- `method: 'POST' | 'PUT' | 'PATCH'
|
|
656
|
+
- `method: 'GET' | 'DELETE'`: tool arguments are sent as query parameters.
|
|
657
|
+
- `method: 'POST' | 'PUT' | 'PATCH'`: tool arguments are sent as JSON body.
|
|
658
|
+
- For body methods, Voice.ai always sends `Content-Type: application/json`.
|
|
659
|
+
- If you configure a `Content-Type` header in `headers`, it is ignored for webhook tools.
|
|
525
660
|
- Metadata headers are always sent:
|
|
526
661
|
- `X-VoiceAI-Request-Id`
|
|
527
662
|
- `X-VoiceAI-Tool-Name`
|
|
@@ -552,7 +687,7 @@ X-VoiceAI-Call-Id: call_123
|
|
|
552
687
|
- `auth_type: 'none'`: no auth headers added.
|
|
553
688
|
- `auth_type: 'bearer_token'`: sends `Authorization: Bearer <auth_token>`.
|
|
554
689
|
- `auth_type: 'api_key'`: sends `X-API-Key: <auth_token>`.
|
|
555
|
-
- `auth_type: 'custom_headers'`: sends your configured `headers` map.
|
|
690
|
+
- `auth_type: 'custom_headers'`: sends your configured `headers` map, except `Content-Type`, which is agent-managed for body methods.
|
|
556
691
|
|
|
557
692
|
### Webhook Tool Response Behavior
|
|
558
693
|
|
|
@@ -561,7 +696,7 @@ X-VoiceAI-Call-Id: call_123
|
|
|
561
696
|
|
|
562
697
|
### Signature Verification (Event Webhooks)
|
|
563
698
|
|
|
564
|
-
If you configure `webhooks.events.secret`, verify the HMAC-SHA256 signature:
|
|
699
|
+
If you configure `webhooks.events[].secret`, verify the HMAC-SHA256 signature:
|
|
565
700
|
|
|
566
701
|
```typescript
|
|
567
702
|
import crypto from 'crypto';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,MAAM,EAAE,gBAAgB;IAIpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,KAAK,EACV,4BAA4B,EAC5B,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,MAAM,EAAE,gBAAgB;IAIpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAe5F;;;;;;;;;;;;;OAaG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE;;;;;;;;;;;;;;OAcG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIjE;;;;;;;;;;;;;OAaG;IACG,eAAe,IAAI,OAAO,CAAC,yBAAyB,CAAC;CAG5D"}
|
package/dist/client/analytics.js
CHANGED
|
@@ -56,6 +56,12 @@ export class AnalyticsClient extends BaseClient {
|
|
|
56
56
|
params.end_date = options.end_date;
|
|
57
57
|
if (options?.agent_ids)
|
|
58
58
|
params.agent_ids = options.agent_ids;
|
|
59
|
+
if (options?.agent_name)
|
|
60
|
+
params.agent_name = options.agent_name;
|
|
61
|
+
if (options?.sort_by)
|
|
62
|
+
params.sort_by = options.sort_by;
|
|
63
|
+
if (options?.sort_dir)
|
|
64
|
+
params.sort_dir = options.sort_dir;
|
|
59
65
|
return this.get('/agent/call-history', params);
|
|
60
66
|
}
|
|
61
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAoB,MAAM,QAAQ,CAAC;AAStD;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,MAAwB;QAClC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,cAAc,CAAC,OAA+B;QAClD,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC5D,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/D,IAAI,OAAO,EAAE,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAChE,IAAI,OAAO,EAAE,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC1D,IAAI,OAAO,EAAE,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/client/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAoB,MAAM,QAAQ,CAAC;AAStD;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,MAAwB;QAClC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,cAAc,CAAC,OAA+B;QAClD,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC5D,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/D,IAAI,OAAO,EAAE,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAChE,IAAI,OAAO,EAAE,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC1D,IAAI,OAAO,EAAE,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC7D,IAAI,OAAO,EAAE,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAChE,IAAI,OAAO,EAAE,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACvD,IAAI,OAAO,EAAE,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAE1D,OAAO,IAAI,CAAC,GAAG,CAA+B,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,OAAO,IAAI,CAAC,GAAG,CAAqB,uBAAuB,MAAM,aAAa,CAAC,CAAC;IAClF,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,OAAO,IAAI,CAAC,GAAG,CAAoB,uBAAuB,MAAM,YAAY,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,GAAG,CAA4B,sBAAsB,CAAC,CAAC;IACrE,CAAC;CACF"}
|
package/dist/client/base.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - Error handling and response parsing
|
|
7
7
|
* - Common HTTP methods (GET, POST, PUT, PATCH, DELETE)
|
|
8
8
|
*/
|
|
9
|
+
import type { AuthTokenProvider } from '../types';
|
|
9
10
|
/** Error thrown by Voice.ai API client */
|
|
10
11
|
export declare class VoiceAIError extends Error {
|
|
11
12
|
readonly status?: number | undefined;
|
|
@@ -15,7 +16,9 @@ export declare class VoiceAIError extends Error {
|
|
|
15
16
|
}
|
|
16
17
|
/** Configuration for BaseClient */
|
|
17
18
|
export interface BaseClientConfig {
|
|
18
|
-
apiKey
|
|
19
|
+
apiKey?: string;
|
|
20
|
+
authToken?: string;
|
|
21
|
+
getAuthToken?: AuthTokenProvider;
|
|
19
22
|
apiUrl: string;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
@@ -23,12 +26,15 @@ export interface BaseClientConfig {
|
|
|
23
26
|
*/
|
|
24
27
|
export declare class BaseClient {
|
|
25
28
|
protected readonly apiKey: string;
|
|
29
|
+
protected readonly authToken?: string;
|
|
30
|
+
protected readonly getAuthToken?: AuthTokenProvider;
|
|
26
31
|
protected readonly apiUrl: string;
|
|
27
32
|
constructor(config: BaseClientConfig);
|
|
33
|
+
protected resolveBearerToken(): Promise<string>;
|
|
28
34
|
/**
|
|
29
35
|
* Build headers with authentication
|
|
30
36
|
*/
|
|
31
|
-
protected getHeaders(contentType?: string): Record<string, string
|
|
37
|
+
protected getHeaders(contentType?: string): Promise<Record<string, string>>;
|
|
32
38
|
/**
|
|
33
39
|
* Handle API response and parse errors
|
|
34
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,UAAU,CAAC;AAEtF,0CAA0C;AAC1C,qBAAa,YAAa,SAAQ,KAAK;aAGnB,MAAM,CAAC,EAAE,MAAM;aACf,IAAI,CAAC,EAAE,MAAM;aACb,MAAM,CAAC,EAAE,MAAM;gBAH/B,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEtB,MAAM,EAAE,gBAAgB;cAOpB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBrD;;OAEG;cACa,UAAU,CAAC,WAAW,GAAE,MAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAarG;;OAEG;cACa,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAuEjE;;OAEG;cACa,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAuB9E;;OAEG;cACa,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCrF;;OAEG;cACa,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAU7D;;OAEG;cACa,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAe7E;;OAEG;cACa,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAU5D;;OAEG;cACa,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAU9D;;OAEG;cACa,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASvD;;OAEG;cACa,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BpE;;OAEG;cACa,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyB3E"}
|
package/dist/client/base.js
CHANGED
|
@@ -21,15 +21,33 @@ export class VoiceAIError extends Error {
|
|
|
21
21
|
*/
|
|
22
22
|
export class BaseClient {
|
|
23
23
|
constructor(config) {
|
|
24
|
-
this.apiKey = config.apiKey;
|
|
24
|
+
this.apiKey = config.apiKey || '';
|
|
25
|
+
this.authToken = config.authToken;
|
|
26
|
+
this.getAuthToken = config.getAuthToken;
|
|
25
27
|
this.apiUrl = config.apiUrl;
|
|
26
28
|
}
|
|
29
|
+
async resolveBearerToken() {
|
|
30
|
+
if (this.apiKey) {
|
|
31
|
+
return this.apiKey;
|
|
32
|
+
}
|
|
33
|
+
if (this.authToken) {
|
|
34
|
+
return this.authToken;
|
|
35
|
+
}
|
|
36
|
+
if (this.getAuthToken) {
|
|
37
|
+
const resolvedToken = await this.getAuthToken();
|
|
38
|
+
if (typeof resolvedToken === 'string' && resolvedToken.trim()) {
|
|
39
|
+
return resolvedToken;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
throw new VoiceAIError('Authentication required. Configure apiKey, authToken, or getAuthToken.', 401, 'UNAUTHORIZED');
|
|
43
|
+
}
|
|
27
44
|
/**
|
|
28
45
|
* Build headers with authentication
|
|
29
46
|
*/
|
|
30
|
-
getHeaders(contentType = 'application/json') {
|
|
47
|
+
async getHeaders(contentType = 'application/json') {
|
|
48
|
+
const bearerToken = await this.resolveBearerToken();
|
|
31
49
|
const headers = {
|
|
32
|
-
'Authorization': `Bearer ${
|
|
50
|
+
'Authorization': `Bearer ${bearerToken}`,
|
|
33
51
|
};
|
|
34
52
|
if (contentType) {
|
|
35
53
|
headers['Content-Type'] = contentType;
|
|
@@ -59,7 +77,7 @@ export class BaseClient {
|
|
|
59
77
|
}
|
|
60
78
|
// Handle specific error codes
|
|
61
79
|
if (response.status === 401) {
|
|
62
|
-
throw new VoiceAIError('Authentication failed. Please check your API key.', 401, 'UNAUTHORIZED');
|
|
80
|
+
throw new VoiceAIError('Authentication failed. Please check your API key or auth token.', 401, 'UNAUTHORIZED');
|
|
63
81
|
}
|
|
64
82
|
if (response.status === 403) {
|
|
65
83
|
const detail = errorData?.detail || errorData?.error;
|
|
@@ -100,7 +118,7 @@ export class BaseClient {
|
|
|
100
118
|
}
|
|
101
119
|
const response = await fetch(url.toString(), {
|
|
102
120
|
method: 'GET',
|
|
103
|
-
headers: this.getHeaders(),
|
|
121
|
+
headers: await this.getHeaders(),
|
|
104
122
|
});
|
|
105
123
|
return this.handleResponse(response);
|
|
106
124
|
}
|
|
@@ -123,7 +141,7 @@ export class BaseClient {
|
|
|
123
141
|
}
|
|
124
142
|
const response = await fetch(url.toString(), {
|
|
125
143
|
method: 'GET',
|
|
126
|
-
headers: this.getHeaders(),
|
|
144
|
+
headers: await this.getHeaders(),
|
|
127
145
|
});
|
|
128
146
|
if (!response.ok) {
|
|
129
147
|
let errorData = null;
|
|
@@ -143,7 +161,7 @@ export class BaseClient {
|
|
|
143
161
|
async post(path, body) {
|
|
144
162
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
145
163
|
method: 'POST',
|
|
146
|
-
headers: this.getHeaders(),
|
|
164
|
+
headers: await this.getHeaders(),
|
|
147
165
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
148
166
|
});
|
|
149
167
|
return this.handleResponse(response);
|
|
@@ -154,7 +172,7 @@ export class BaseClient {
|
|
|
154
172
|
async postFormData(path, formData) {
|
|
155
173
|
// Don't set Content-Type header - browser will set it with boundary
|
|
156
174
|
const headers = {
|
|
157
|
-
'Authorization': `Bearer ${this.
|
|
175
|
+
'Authorization': `Bearer ${await this.resolveBearerToken()}`,
|
|
158
176
|
};
|
|
159
177
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
160
178
|
method: 'POST',
|
|
@@ -169,7 +187,7 @@ export class BaseClient {
|
|
|
169
187
|
async put(path, body) {
|
|
170
188
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
171
189
|
method: 'PUT',
|
|
172
|
-
headers: this.getHeaders(),
|
|
190
|
+
headers: await this.getHeaders(),
|
|
173
191
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
174
192
|
});
|
|
175
193
|
return this.handleResponse(response);
|
|
@@ -180,7 +198,7 @@ export class BaseClient {
|
|
|
180
198
|
async patch(path, body) {
|
|
181
199
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
182
200
|
method: 'PATCH',
|
|
183
|
-
headers: this.getHeaders(),
|
|
201
|
+
headers: await this.getHeaders(),
|
|
184
202
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
185
203
|
});
|
|
186
204
|
return this.handleResponse(response);
|
|
@@ -191,7 +209,7 @@ export class BaseClient {
|
|
|
191
209
|
async httpDelete(path) {
|
|
192
210
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
193
211
|
method: 'DELETE',
|
|
194
|
-
headers: this.getHeaders(),
|
|
212
|
+
headers: await this.getHeaders(),
|
|
195
213
|
});
|
|
196
214
|
return this.handleResponse(response);
|
|
197
215
|
}
|
|
@@ -201,7 +219,7 @@ export class BaseClient {
|
|
|
201
219
|
async postForBlob(path, body) {
|
|
202
220
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
203
221
|
method: 'POST',
|
|
204
|
-
headers: this.getHeaders(),
|
|
222
|
+
headers: await this.getHeaders(),
|
|
205
223
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
206
224
|
});
|
|
207
225
|
if (!response.ok) {
|
|
@@ -223,7 +241,7 @@ export class BaseClient {
|
|
|
223
241
|
async postForStream(path, body) {
|
|
224
242
|
const response = await fetch(`${this.apiUrl}${path}`, {
|
|
225
243
|
method: 'POST',
|
|
226
|
-
headers: this.getHeaders(),
|
|
244
|
+
headers: await this.getHeaders(),
|
|
227
245
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
228
246
|
});
|
|
229
247
|
if (!response.ok) {
|
package/dist/client/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,0CAA0C;AAC1C,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YACE,OAAe,EACC,MAAe,EACf,IAAa,EACb,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAS;QACf,SAAI,GAAJ,IAAI,CAAS;QACb,WAAM,GAAN,MAAM,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/client/base.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { VoiceAIError } from './base';
|
|
|
7
7
|
export { AgentClient } from './agents';
|
|
8
8
|
export { AnalyticsClient } from './analytics';
|
|
9
9
|
export { KnowledgeBaseClient } from './knowledge-base';
|
|
10
|
+
export { ManagedToolsClient } from './managed-tools';
|
|
10
11
|
export { PhoneNumberClient } from './phone-numbers';
|
|
11
12
|
export { TTSClient } from './tts';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export { VoiceAIError } from './base';
|
|
|
7
7
|
export { AgentClient } from './agents';
|
|
8
8
|
export { AnalyticsClient } from './analytics';
|
|
9
9
|
export { KnowledgeBaseClient } from './knowledge-base';
|
|
10
|
+
export { ManagedToolsClient } from './managed-tools';
|
|
10
11
|
export { PhoneNumberClient } from './phone-numbers';
|
|
11
12
|
export { TTSClient } from './tts';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseClient, type BaseClientConfig } from './base';
|
|
2
|
+
import type { GoogleConnectionStatus, GoogleOAuthStartOptions, GoogleOAuthStartResponse } from '../types';
|
|
3
|
+
declare class GoogleManagedToolsClient extends BaseClient {
|
|
4
|
+
constructor(config: BaseClientConfig);
|
|
5
|
+
startOAuth(agentId: string, options?: GoogleOAuthStartOptions): Promise<GoogleOAuthStartResponse>;
|
|
6
|
+
getStatus(agentId: string): Promise<GoogleConnectionStatus>;
|
|
7
|
+
disconnect(agentId: string): Promise<{
|
|
8
|
+
disconnected: boolean;
|
|
9
|
+
agent_id: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare class ManagedToolsClient {
|
|
13
|
+
readonly google: GoogleManagedToolsClient;
|
|
14
|
+
constructor(config: BaseClientConfig);
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=managed-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-tools.d.ts","sourceRoot":"","sources":["../../src/client/managed-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAElB,cAAM,wBAAyB,SAAQ,UAAU;gBACnC,MAAM,EAAE,gBAAgB;IAI9B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAUrG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI3D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAGxF;AAED,qBAAa,kBAAkB;IAC7B,SAAgB,MAAM,EAAE,wBAAwB,CAAC;gBAErC,MAAM,EAAE,gBAAgB;CAGrC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseClient } from './base';
|
|
2
|
+
class GoogleManagedToolsClient extends BaseClient {
|
|
3
|
+
constructor(config) {
|
|
4
|
+
super(config);
|
|
5
|
+
}
|
|
6
|
+
async startOAuth(agentId, options = {}) {
|
|
7
|
+
return this.post(`/google/${encodeURIComponent(agentId)}/oauth/start`, {
|
|
8
|
+
return_path: options.returnUrl,
|
|
9
|
+
managed_tools: options.managedTools,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async getStatus(agentId) {
|
|
13
|
+
return this.get(`/google/${encodeURIComponent(agentId)}/status`);
|
|
14
|
+
}
|
|
15
|
+
async disconnect(agentId) {
|
|
16
|
+
return this.httpDelete(`/google/${encodeURIComponent(agentId)}/disconnect`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class ManagedToolsClient {
|
|
20
|
+
constructor(config) {
|
|
21
|
+
this.google = new GoogleManagedToolsClient(config);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=managed-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-tools.js","sourceRoot":"","sources":["../../src/client/managed-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,QAAQ,CAAC;AAO3D,MAAM,wBAAyB,SAAQ,UAAU;IAC/C,YAAY,MAAwB;QAClC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,UAAmC,EAAE;QACrE,OAAO,IAAI,CAAC,IAAI,CACd,WAAW,kBAAkB,CAAC,OAAO,CAAC,cAAc,EACpD;YACE,WAAW,EAAE,OAAO,CAAC,SAAS;YAC9B,aAAa,EAAE,OAAO,CAAC,YAAY;SACpC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAyB,WAAW,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,UAAU,CAA8C,WAAW,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3H,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAG7B,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;CACF"}
|
package/dist/client/tts.d.ts
CHANGED
|
@@ -148,7 +148,7 @@ export declare class TTSClient extends BaseClient {
|
|
|
148
148
|
/**
|
|
149
149
|
* Clone a voice from a reference audio file
|
|
150
150
|
*
|
|
151
|
-
* Accepts an audio file (MP3, WAV, or
|
|
151
|
+
* Accepts an audio file (MP3, WAV, or M4A, max 7.5MB) and creates
|
|
152
152
|
* a cloned voice. The voice starts in PENDING status and moves to
|
|
153
153
|
* PROCESSING, then AVAILABLE once ready.
|
|
154
154
|
*
|
package/dist/client/tts.js
CHANGED
|
@@ -163,7 +163,7 @@ export class TTSClient extends BaseClient {
|
|
|
163
163
|
/**
|
|
164
164
|
* Clone a voice from a reference audio file
|
|
165
165
|
*
|
|
166
|
-
* Accepts an audio file (MP3, WAV, or
|
|
166
|
+
* Accepts an audio file (MP3, WAV, or M4A, max 7.5MB) and creates
|
|
167
167
|
* a cloned voice. The voice starts in PENDING status and moves to
|
|
168
168
|
* PROCESSING, then AVAILABLE once ready.
|
|
169
169
|
*
|