@vapi-ai/web 1.0.215 → 1.0.217
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 +4 -0
- package/dist/vapi.d.ts +18 -1
- package/dist/vapi.js +26 -3
- package/package.json +1 -1
- package/vapi.ts +58 -4
package/README.md
CHANGED
package/dist/vapi.d.ts
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { CreateAssistantDTO } from "./api";
|
|
3
3
|
import EventEmitter from "events";
|
|
4
|
-
|
|
4
|
+
type VapiEventNames = "call-end" | "call-start" | "volume-level" | "speech-start" | "speech-end" | "error";
|
|
5
|
+
type VapiEventListeners = {
|
|
6
|
+
"call-end": () => void;
|
|
7
|
+
"call-start": () => void;
|
|
8
|
+
"volume-level": (volume: number) => void;
|
|
9
|
+
"speech-start": () => void;
|
|
10
|
+
"speech-end": () => void;
|
|
11
|
+
error: (error: any) => void;
|
|
12
|
+
};
|
|
13
|
+
declare class VapiEventEmitter extends EventEmitter {
|
|
14
|
+
on<E extends VapiEventNames>(event: E, listener: VapiEventListeners[E]): this;
|
|
15
|
+
once<E extends VapiEventNames>(event: E, listener: VapiEventListeners[E]): this;
|
|
16
|
+
emit<E extends VapiEventNames>(event: E, ...args: Parameters<VapiEventListeners[E]>): boolean;
|
|
17
|
+
removeListener<E extends VapiEventNames>(event: E, listener: VapiEventListeners[E]): this;
|
|
18
|
+
removeAllListeners(event?: VapiEventNames): this;
|
|
19
|
+
}
|
|
20
|
+
export default class Vapi extends VapiEventEmitter {
|
|
5
21
|
private started;
|
|
6
22
|
private call;
|
|
7
23
|
private speakingTimeout;
|
|
@@ -10,3 +26,4 @@ export default class Vapi extends EventEmitter {
|
|
|
10
26
|
private handleRemoteParticipantsAudioLevel;
|
|
11
27
|
stop(): void;
|
|
12
28
|
}
|
|
29
|
+
export {};
|
package/dist/vapi.js
CHANGED
|
@@ -48,7 +48,28 @@ function subscribeToTracks(e, call) {
|
|
|
48
48
|
},
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
class
|
|
51
|
+
class VapiEventEmitter extends events_1.default {
|
|
52
|
+
on(event, listener) {
|
|
53
|
+
super.on(event, listener);
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
once(event, listener) {
|
|
57
|
+
super.once(event, listener);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
emit(event, ...args) {
|
|
61
|
+
return super.emit(event, ...args);
|
|
62
|
+
}
|
|
63
|
+
removeListener(event, listener) {
|
|
64
|
+
super.removeListener(event, listener);
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
removeAllListeners(event) {
|
|
68
|
+
super.removeAllListeners(event);
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
class Vapi extends VapiEventEmitter {
|
|
52
73
|
constructor(apiToken, apiBaseUrl) {
|
|
53
74
|
super();
|
|
54
75
|
this.started = false;
|
|
@@ -109,7 +130,7 @@ class Vapi extends events_1.default {
|
|
|
109
130
|
url: webCallUrl,
|
|
110
131
|
subscribeToTracksAutomatically: false,
|
|
111
132
|
});
|
|
112
|
-
this.call.startRemoteParticipantsAudioLevelObserver();
|
|
133
|
+
this.call.startRemoteParticipantsAudioLevelObserver(100);
|
|
113
134
|
this.call.on("remote-participants-audio-level", (e) => this.handleRemoteParticipantsAudioLevel(e));
|
|
114
135
|
this.call.updateInputSettings({
|
|
115
136
|
audio: {
|
|
@@ -126,7 +147,9 @@ class Vapi extends events_1.default {
|
|
|
126
147
|
});
|
|
127
148
|
}
|
|
128
149
|
handleRemoteParticipantsAudioLevel(e) {
|
|
129
|
-
const
|
|
150
|
+
const speechLevel = Object.values(e.participantsAudioLevel).reduce((a, b) => a + b, 0);
|
|
151
|
+
this.emit("volume-level", speechLevel);
|
|
152
|
+
const isSpeaking = speechLevel > 0.1;
|
|
130
153
|
if (!isSpeaking)
|
|
131
154
|
return;
|
|
132
155
|
if (this.speakingTimeout) {
|
package/package.json
CHANGED
package/vapi.ts
CHANGED
|
@@ -41,7 +41,57 @@ function subscribeToTracks(e: DailyEventObjectParticipant, call: DailyCall) {
|
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
type VapiEventNames =
|
|
45
|
+
| "call-end"
|
|
46
|
+
| "call-start"
|
|
47
|
+
| "volume-level"
|
|
48
|
+
| "speech-start"
|
|
49
|
+
| "speech-end"
|
|
50
|
+
| "error";
|
|
51
|
+
type VapiEventListeners = {
|
|
52
|
+
"call-end": () => void;
|
|
53
|
+
"call-start": () => void;
|
|
54
|
+
"volume-level": (volume: number) => void;
|
|
55
|
+
"speech-start": () => void;
|
|
56
|
+
"speech-end": () => void;
|
|
57
|
+
error: (error: any) => void;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
class VapiEventEmitter extends EventEmitter {
|
|
61
|
+
on<E extends VapiEventNames>(
|
|
62
|
+
event: E,
|
|
63
|
+
listener: VapiEventListeners[E]
|
|
64
|
+
): this {
|
|
65
|
+
super.on(event, listener);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
once<E extends VapiEventNames>(
|
|
69
|
+
event: E,
|
|
70
|
+
listener: VapiEventListeners[E]
|
|
71
|
+
): this {
|
|
72
|
+
super.once(event, listener);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
emit<E extends VapiEventNames>(
|
|
76
|
+
event: E,
|
|
77
|
+
...args: Parameters<VapiEventListeners[E]>
|
|
78
|
+
): boolean {
|
|
79
|
+
return super.emit(event, ...args);
|
|
80
|
+
}
|
|
81
|
+
removeListener<E extends VapiEventNames>(
|
|
82
|
+
event: E,
|
|
83
|
+
listener: VapiEventListeners[E]
|
|
84
|
+
): this {
|
|
85
|
+
super.removeListener(event, listener);
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
removeAllListeners(event?: VapiEventNames): this {
|
|
89
|
+
super.removeAllListeners(event);
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export default class Vapi extends VapiEventEmitter {
|
|
45
95
|
private started: boolean = false;
|
|
46
96
|
private call: DailyCall | null = null;
|
|
47
97
|
private speakingTimeout: NodeJS.Timeout | null = null;
|
|
@@ -108,7 +158,7 @@ export default class Vapi extends EventEmitter {
|
|
|
108
158
|
subscribeToTracksAutomatically: false,
|
|
109
159
|
});
|
|
110
160
|
|
|
111
|
-
this.call.startRemoteParticipantsAudioLevelObserver();
|
|
161
|
+
this.call.startRemoteParticipantsAudioLevelObserver(100);
|
|
112
162
|
this.call.on("remote-participants-audio-level", (e) =>
|
|
113
163
|
this.handleRemoteParticipantsAudioLevel(e)
|
|
114
164
|
);
|
|
@@ -131,9 +181,13 @@ export default class Vapi extends EventEmitter {
|
|
|
131
181
|
private handleRemoteParticipantsAudioLevel(
|
|
132
182
|
e: DailyEventObjectRemoteParticipantsAudioLevel
|
|
133
183
|
) {
|
|
134
|
-
const
|
|
135
|
-
(
|
|
184
|
+
const speechLevel = Object.values(e.participantsAudioLevel).reduce(
|
|
185
|
+
(a, b) => a + b,
|
|
186
|
+
0
|
|
136
187
|
);
|
|
188
|
+
this.emit("volume-level", speechLevel);
|
|
189
|
+
|
|
190
|
+
const isSpeaking = speechLevel > 0.1;
|
|
137
191
|
if (!isSpeaking) return;
|
|
138
192
|
|
|
139
193
|
if (this.speakingTimeout) {
|