@guava-ai/guava-sdk 0.3.0 → 0.4.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.
Files changed (59) hide show
  1. package/README.internal.md +13 -0
  2. package/README.md +50 -8
  3. package/bin/example-runner.js +16 -7
  4. package/dist/examples/credit-card-activation.js +94 -112
  5. package/dist/examples/credit-card-activation.js.map +1 -1
  6. package/dist/examples/property-insurance.js +12 -26
  7. package/dist/examples/property-insurance.js.map +1 -1
  8. package/dist/examples/scheduling-outbound.d.ts +1 -0
  9. package/dist/examples/scheduling-outbound.js +77 -0
  10. package/dist/examples/scheduling-outbound.js.map +1 -0
  11. package/dist/examples/thai-palace.js +25 -43
  12. package/dist/examples/thai-palace.js.map +1 -1
  13. package/dist/package.json +9 -5
  14. package/dist/src/action_item.d.ts +34 -12
  15. package/dist/src/action_item.js +34 -7
  16. package/dist/src/action_item.js.map +1 -1
  17. package/dist/src/call-controller.d.ts +137 -0
  18. package/dist/src/call-controller.js +433 -0
  19. package/dist/src/call-controller.js.map +1 -0
  20. package/dist/src/commands.d.ts +67 -27
  21. package/dist/src/commands.js +41 -27
  22. package/dist/src/commands.js.map +1 -1
  23. package/dist/src/events.d.ts +47 -30
  24. package/dist/src/events.js +42 -36
  25. package/dist/src/events.js.map +1 -1
  26. package/dist/src/example_data.d.ts +1 -0
  27. package/dist/src/example_data.js +33 -0
  28. package/dist/src/example_data.js.map +1 -1
  29. package/dist/src/helpers/openai.d.ts +12 -1
  30. package/dist/src/helpers/openai.js +168 -68
  31. package/dist/src/helpers/openai.js.map +1 -1
  32. package/dist/src/index.d.ts +6 -121
  33. package/dist/src/index.js +249 -483
  34. package/dist/src/index.js.map +1 -1
  35. package/dist/src/logging.d.ts +2 -1
  36. package/dist/src/logging.js +32 -7
  37. package/dist/src/logging.js.map +1 -1
  38. package/dist/src/telemetry.d.ts +23 -0
  39. package/dist/src/telemetry.js +98 -0
  40. package/dist/src/telemetry.js.map +1 -0
  41. package/dist/src/utils.d.ts +3 -0
  42. package/dist/src/utils.js +28 -0
  43. package/dist/src/utils.js.map +1 -0
  44. package/examples/biome.json +5 -0
  45. package/examples/credit-card-activation.ts +20 -26
  46. package/examples/property-insurance.ts +6 -16
  47. package/examples/scheduling-outbound.ts +97 -0
  48. package/examples/thai-palace.ts +10 -13
  49. package/package.json +9 -5
  50. package/src/action_item.ts +53 -13
  51. package/src/call-controller.ts +451 -0
  52. package/src/commands.ts +58 -42
  53. package/src/events.ts +66 -51
  54. package/src/example_data.ts +42 -0
  55. package/src/helpers/openai.ts +73 -18
  56. package/src/index.ts +81 -403
  57. package/src/logging.ts +39 -7
  58. package/src/telemetry.ts +125 -0
  59. package/src/utils.ts +32 -0
@@ -1,26 +1,46 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
9
27
  };
10
- var __asyncValues = (this && this.__asyncValues) || function (o) {
11
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
12
- var m = o[Symbol.asyncIterator], i;
13
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
14
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
15
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
16
34
  };
17
35
  import OpenAI, { toFile } from "openai";
36
+ import { zodTextFormat } from "openai/helpers/zod";
37
+ import { getDefaultLogger } from "../logging.js";
18
38
  import * as z from "zod";
39
+ import { telemetryClient } from "../telemetry.js";
19
40
  // from beta.py
20
41
  // TODO: Remove after beta
21
42
  function beta_create_openai_client(logger) {
22
- var _a;
23
- const baseUrl = (_a = process.env.GUAVA_BASE_URL) !== null && _a !== void 0 ? _a : "https://guava-dev.gridspace.com/";
43
+ const baseUrl = process.env.GUAVA_BASE_URL ?? "https://guava-dev.gridspace.com/";
24
44
  // to get it working with OpenAI TS/JS client
25
45
  const basedUrl = new URL("openai/v1/", baseUrl);
26
46
  logger.info(`Creating beta OpenAI client`);
@@ -29,15 +49,30 @@ function beta_create_openai_client(logger) {
29
49
  apiKey: process.env.GUAVA_API_KEY,
30
50
  });
31
51
  }
32
- export class IntentRecognizer {
33
- constructor(choices, logger, client) {
34
- this.intentChoices = choices;
35
- this.client = client !== null && client !== void 0 ? client : beta_create_openai_client(logger);
36
- this.choiceModel = z.union(choices.map((s) => z.literal(s)));
37
- }
38
- classify(intent) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- const response = yield this.client.responses.parse({
52
+ let IntentRecognizer = (() => {
53
+ let _classDecorators = [telemetryClient.trackClass()];
54
+ let _classDescriptor;
55
+ let _classExtraInitializers = [];
56
+ let _classThis;
57
+ var IntentRecognizer = class {
58
+ static { _classThis = this; }
59
+ static {
60
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
61
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
62
+ IntentRecognizer = _classThis = _classDescriptor.value;
63
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
64
+ __runInitializers(_classThis, _classExtraInitializers);
65
+ }
66
+ client;
67
+ intentChoices;
68
+ choiceModel;
69
+ constructor(choices, logger, client) {
70
+ this.intentChoices = choices;
71
+ this.client = client ?? beta_create_openai_client(logger);
72
+ this.choiceModel = z.union(choices.map((s) => z.literal(s)));
73
+ }
74
+ async classify(intent) {
75
+ const response = await this.client.responses.parse({
41
76
  model: "gpt-5-mini",
42
77
  input: `
43
78
  Pick the choice in the list of choices that best reflects the given intent.
@@ -50,47 +85,51 @@ Possible Choices: ${this.intentChoices}.
50
85
  });
51
86
  const parsed_output = this.choiceModel.parse(response.output_text);
52
87
  return parsed_output;
53
- });
54
- }
55
- }
56
- export class DocumentQA {
57
- constructor(vector_store_name, document, logger, client) {
58
- this.client = client !== null && client !== void 0 ? client : beta_create_openai_client(logger);
59
- this.vector_store = this.getOrCreateVectorStore(vector_store_name, document);
60
- this.logger = logger;
61
- }
62
- getOrCreateVectorStore(vector_store_name, document) {
63
- return __awaiter(this, void 0, void 0, function* () {
64
- var _a, e_1, _b, _c;
88
+ }
89
+ };
90
+ return IntentRecognizer = _classThis;
91
+ })();
92
+ export { IntentRecognizer };
93
+ let DocumentQA = (() => {
94
+ let _classDecorators = [telemetryClient.trackClass()];
95
+ let _classDescriptor;
96
+ let _classExtraInitializers = [];
97
+ let _classThis;
98
+ var DocumentQA = class {
99
+ static { _classThis = this; }
100
+ static {
101
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
102
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
103
+ DocumentQA = _classThis = _classDescriptor.value;
104
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
105
+ __runInitializers(_classThis, _classExtraInitializers);
106
+ }
107
+ client;
108
+ vector_store;
109
+ logger;
110
+ constructor(vector_store_name, document, logger = getDefaultLogger(), client) {
111
+ this.client = client ?? beta_create_openai_client(logger);
112
+ this.vector_store = this.getOrCreateVectorStore(vector_store_name, document);
113
+ this.logger = logger;
114
+ }
115
+ async getOrCreateVectorStore(vector_store_name, document) {
65
116
  const encoder = new TextEncoder();
66
117
  const document_buffer = encoder.encode(document);
67
- const document_hash_buffer = yield crypto.subtle.digest("SHA-256", document_buffer);
118
+ const document_hash_buffer = await crypto.subtle.digest("SHA-256", document_buffer);
68
119
  const u8view = new Uint8Array(document_hash_buffer);
69
120
  const document_hash = Array.from(u8view)
70
121
  .map((b) => b.toString(16).padStart(2, "0"))
71
122
  .join("");
72
- try {
73
- for (var _d = true, _e = __asyncValues(this.client.vectorStores.list()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
74
- _c = _f.value;
75
- _d = false;
76
- const vs = _c;
77
- if (vs.name == vector_store_name &&
78
- vs.metadata &&
79
- vs.metadata["document_hash"] == document_hash) {
80
- this.logger.info("Re-using existing vector store...");
81
- return vs;
82
- }
83
- }
84
- }
85
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
86
- finally {
87
- try {
88
- if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
123
+ for await (const vs of this.client.vectorStores.list()) {
124
+ if (vs.name === vector_store_name &&
125
+ vs.metadata &&
126
+ vs.metadata.document_hash === document_hash) {
127
+ this.logger.info("Re-using existing vector store...");
128
+ return vs;
89
129
  }
90
- finally { if (e_1) throw e_1.error; }
91
130
  }
92
131
  this.logger.info("Creating vector store...");
93
- const vector_store = yield this.client.vectorStores.create({
132
+ const vector_store = await this.client.vectorStores.create({
94
133
  name: vector_store_name,
95
134
  expires_after: {
96
135
  anchor: "last_active_at",
@@ -98,26 +137,24 @@ export class DocumentQA {
98
137
  },
99
138
  });
100
139
  this.logger.info("Uploading file...");
101
- yield this.client.vectorStores.files.uploadAndPoll(vector_store.id, yield toFile(new Blob([document], { type: "text/plain" }), "document.txt"));
140
+ await this.client.vectorStores.files.uploadAndPoll(vector_store.id, await toFile(new Blob([document], { type: "text/plain" }), "document.txt"));
102
141
  this.logger.info("Updating vector store metadata...");
103
- yield this.client.vectorStores.update(vector_store.id, {
142
+ await this.client.vectorStores.update(vector_store.id, {
104
143
  metadata: {
105
144
  document_hash,
106
145
  },
107
146
  });
108
147
  return vector_store;
109
- });
110
- }
111
- ask(question) {
112
- return __awaiter(this, void 0, void 0, function* () {
113
- const response = yield this.client.responses.create({
148
+ }
149
+ async ask(question) {
150
+ const response = await this.client.responses.create({
114
151
  model: "gpt-5-mini",
115
152
  instructions: "You are a virtual contact center agent. Your task is to answer questions using the provided supporting document. Just answer the question - do not offer any follow-ups.",
116
153
  input: question,
117
154
  tools: [
118
155
  {
119
156
  type: "file_search",
120
- vector_store_ids: [(yield this.vector_store).id],
157
+ vector_store_ids: [(await this.vector_store).id],
121
158
  },
122
159
  ],
123
160
  reasoning: {
@@ -125,7 +162,70 @@ export class DocumentQA {
125
162
  },
126
163
  });
127
164
  return response.output_text;
128
- });
129
- }
130
- }
165
+ }
166
+ };
167
+ return DocumentQA = _classThis;
168
+ })();
169
+ export { DocumentQA };
170
+ const filterSchema = z.object({
171
+ matchingAppointments: z.array(z.string()).describe("List of datetimes matching the query."),
172
+ otherAppointments: z
173
+ .array(z.string())
174
+ .describe("If no datetimes match the query, list of datetimes to suggest."),
175
+ });
176
+ let DatetimeFilter = (() => {
177
+ let _classDecorators = [telemetryClient.trackClass()];
178
+ let _classDescriptor;
179
+ let _classExtraInitializers = [];
180
+ let _classThis;
181
+ var DatetimeFilter = class {
182
+ static { _classThis = this; }
183
+ static {
184
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
185
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
186
+ DatetimeFilter = _classThis = _classDescriptor.value;
187
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
188
+ __runInitializers(_classThis, _classExtraInitializers);
189
+ }
190
+ client;
191
+ sourceList;
192
+ constructor({ sourceList, client }, logger = getDefaultLogger()) {
193
+ this.sourceList = sourceList;
194
+ this.client = client ?? beta_create_openai_client(logger);
195
+ }
196
+ async filter(query, { maxResults = 5 } = {}) {
197
+ const appointmentTimesStr = this.sourceList.join("\n");
198
+ const today = new Date().toLocaleDateString("en-US", {
199
+ month: "long",
200
+ day: "numeric",
201
+ year: "numeric",
202
+ });
203
+ const prompt = `\
204
+ Return a few datetimes in the list matching the query. If no datetimes match the query, return a few other datetimes from the list that can be used as close suggestions.
205
+ NEVER HALLUCINATE DATETIMES THAT ARE NOT IN THE LIST.
206
+ Query: ${query}
207
+ Today's Date: ${today}
208
+ Appointment Times:
209
+ ${appointmentTimesStr}
210
+ ==================
211
+ You must return at most ${maxResults} options per list.`;
212
+ const response = await this.client.responses.parse({
213
+ model: "gpt-5-mini",
214
+ input: [{ role: "system", content: prompt }],
215
+ text: { format: zodTextFormat(filterSchema, "filter") },
216
+ reasoning: { effort: "medium" },
217
+ });
218
+ const output = response.output_parsed;
219
+ if (!output) {
220
+ throw new Error("Failed to produce parseable output.");
221
+ }
222
+ return [
223
+ output.matchingAppointments.slice(0, maxResults),
224
+ output.otherAppointments.slice(0, maxResults),
225
+ ];
226
+ }
227
+ };
228
+ return DatetimeFilter = _classThis;
229
+ })();
230
+ export { DatetimeFilter };
131
231
  //# sourceMappingURL=openai.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/helpers/openai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/helpers/openai.ts"],"names":[],"mappings":"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"}
@@ -1,127 +1,13 @@
1
1
  import WebSocket from "ws";
2
2
  import { type Logger } from "./logging.ts";
3
- import { type Command } from "./commands.ts";
4
- import { type GuavaEvent, type CallerSpeechEvent, type AgentSpeechEvent } from "./events.ts";
5
- import type { Field, Say } from "./action_item.ts";
6
- /**
7
- * Interface between Guava services and user-supplied code
8
- */
9
- export declare class CallController {
10
- private _commandQueue;
11
- private _on_complete_current_task?;
12
- private _current_task_id?;
13
- /**
14
- * @protected
15
- * @description logger used to emit diagnostics
16
- */
17
- protected logger: Logger;
18
- private _drain?;
19
- private _fieldValues;
20
- constructor(logger: Logger);
21
- /**
22
- * @description Supply a function used to consume commands from the internal command queue.
23
- *
24
- * The function is expected to remove from the argument array commands that it has handled (iterating
25
- * through the result of `Array.splice(0)` is sufficient)
26
- */
27
- setDrain(newDrain: (_: Command[]) => Promise<void>): void;
28
- /**
29
- * @description [inbound] receive a call, and process further.
30
- */
31
- protected acceptCall(): Promise<void>;
32
- /**
33
- * @description read a span of text verbatim
34
- */
35
- protected readScript(script: string): Promise<void>;
36
- /**
37
- * @description [inbound] reject a call
38
- */
39
- protected rejectCall(): Promise<void>;
40
- protected addInfo(_info: string): Promise<void>;
41
- /**
42
- * @description read a span of text non-verbatim
43
- */
44
- protected sendInstruction(instruction: string): Promise<void>;
45
- /**
46
- * @description provide identifiers the agent will use to identify the virtual agent
47
- */
48
- protected setPersona(args: {
49
- organizationName?: string;
50
- agentName?: string;
51
- agentPurpose?: string;
52
- }): Promise<void>;
53
- /**
54
- * @description direct the agent to collect information
55
- * @param goal {} an objective string and/or a checklist of information to collect
56
- * @param on_complete {} a callback to call once the information is available from the agent
57
- * @param args {} arguments to pass through to the `on_complete` callback
58
- */
59
- protected setTask(goal: TaskObjective, on_complete?: (...c: any[]) => void, ...args: any[]): void;
60
- /**
61
- * @description direct the agent to collect information, continuing execution once the agent has collected the information
62
- * @param goal {} an objective string and/or a checklist of information to collect
63
- */
64
- protected awaitTask(goal: TaskObjective): Promise<void>;
65
- /**
66
- * @description retrieve a piece of information that the agent has collected
67
- * @param key {string} key of the field checklist item
68
- */
69
- protected getField(key: string): unknown;
70
- /**
71
- * @description [inbound] hang up an accepted call
72
- */
73
- protected hangup(final_instructions?: string): Promise<void>;
74
- /**
75
- * @description transfer an accepted call
76
- */
77
- protected transfer(to_number: string, transfer_message?: string): void;
78
- private sendCommand;
79
- private flush;
80
- onEvent(event: GuavaEvent): Promise<void>;
81
- /**
82
- * @abstract
83
- * @description called when an inbound call is received. The overriding function must start
84
- * with `await super.onIncomingCall(from_number)`
85
- */
86
- onIncomingCall(from_number?: string): Promise<void>;
87
- /**
88
- * @abstract
89
- * @description called when a call is connected by the API, whether inbound or outbound
90
- */
91
- onCallStart(): Promise<void>;
92
- /**
93
- * @abstract
94
- * @description called when the caller speaks to the agent.
95
- */
96
- onCallerSpeech(event: CallerSpeechEvent): Promise<void>;
97
- /**
98
- * @abstract
99
- * @description called when the agent speaks to the caller.
100
- */
101
- onAgentSpeech(event: AgentSpeechEvent): Promise<void>;
102
- /**
103
- * @abstract
104
- * @description called when the caller expresses a task they wish to execute
105
- */
106
- onIntent(intent: string): Promise<string | null>;
107
- /**
108
- * @abstract
109
- * @description called when the agent needs to respond to a question that it doesn't know
110
- * the answer to.
111
- */
112
- onQuestion(question: string): Promise<string>;
113
- }
3
+ import type { CallController } from "./call-controller.ts";
4
+ export { CallController, type TaskObjective } from "./call-controller.ts";
5
+ export { Say, Field } from "./action_item.ts";
114
6
  export type InboundConnection = {
115
7
  agent_number: string;
116
8
  } | {
117
9
  webrtc_code: string;
118
10
  };
119
- export type TaskObjective = {
120
- objective: string;
121
- } | {
122
- objective?: string;
123
- checklist: (Field | Say | string)[];
124
- };
125
11
  export declare class Client {
126
12
  private _apiKey;
127
13
  private _baseUrl;
@@ -129,18 +15,18 @@ export declare class Client {
129
15
  private _ws?;
130
16
  private _controller?;
131
17
  private messageHandler?;
132
- constructor(apiKey?: string, baseUrl?: string, logger?: Logger);
18
+ constructor(apiKey?: string, baseUrl?: string, logger?: Logger, captureWarnings?: boolean);
133
19
  private getWebsocketBase;
134
20
  private getHttpBase;
135
21
  private headers;
22
+ private _checkSdkDeprecation;
136
23
  /**
137
24
  * @description use the Guava API to call out to a number
138
25
  */
139
- createOutbound(fromNumber: string | undefined, toNumber: string, callControllerFactory?: (logger: Logger) => CallController): void;
26
+ createOutbound(fromNumber: string | undefined, toNumber: string, callController: CallController): void;
140
27
  private replaceHandler;
141
28
  private uninitializedOutbound;
142
29
  private initializedOutbound;
143
- setInboundHandler(agent_number: string, public_url: string, inbound_token: string): Promise<void>;
144
30
  /**
145
31
  * @description use the Guava API to receive calls at a given number
146
32
  */
@@ -151,4 +37,3 @@ declare class InboundListener {
151
37
  constructor(ws: WebSocket);
152
38
  close(): void;
153
39
  }
154
- export {};