@convai/web-sdk 0.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 +239 -0
- package/dist/components/RTCWidget.d.ts +56 -0
- package/dist/components/RTCWidget.d.ts.map +1 -0
- package/dist/components/RTCWidget.js +419 -0
- package/dist/components/RTCWidget.js.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +5 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts +10 -0
- package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/AudioSettingsPanel.js +316 -0
- package/dist/components/rtc-widget/components/AudioSettingsPanel.js.map +1 -0
- package/dist/components/rtc-widget/components/ConviMessage.d.ts +10 -0
- package/dist/components/rtc-widget/components/ConviMessage.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/ConviMessage.js +14 -0
- package/dist/components/rtc-widget/components/ConviMessage.js.map +1 -0
- package/dist/components/rtc-widget/components/FloatingVideo.d.ts +9 -0
- package/dist/components/rtc-widget/components/FloatingVideo.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/FloatingVideo.js +122 -0
- package/dist/components/rtc-widget/components/FloatingVideo.js.map +1 -0
- package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts +7 -0
- package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/MarkdownRenderer.js +68 -0
- package/dist/components/rtc-widget/components/MarkdownRenderer.js.map +1 -0
- package/dist/components/rtc-widget/components/MessageBubble.d.ts +10 -0
- package/dist/components/rtc-widget/components/MessageBubble.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/MessageBubble.js +23 -0
- package/dist/components/rtc-widget/components/MessageBubble.js.map +1 -0
- package/dist/components/rtc-widget/components/MessageList.d.ts +11 -0
- package/dist/components/rtc-widget/components/MessageList.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/MessageList.js +89 -0
- package/dist/components/rtc-widget/components/MessageList.js.map +1 -0
- package/dist/components/rtc-widget/components/UserMessage.d.ts +9 -0
- package/dist/components/rtc-widget/components/UserMessage.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/UserMessage.js +15 -0
- package/dist/components/rtc-widget/components/UserMessage.js.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts +6 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.js +15 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.js.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts +25 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js +172 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts +17 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js +66 -0
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +12 -0
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js +68 -0
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts +8 -0
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js +199 -0
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/index.d.ts +6 -0
- package/dist/components/rtc-widget/components/conviComponents/index.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/conviComponents/index.js +6 -0
- package/dist/components/rtc-widget/components/conviComponents/index.js.map +1 -0
- package/dist/components/rtc-widget/components/index.d.ts +9 -0
- package/dist/components/rtc-widget/components/index.d.ts.map +1 -0
- package/dist/components/rtc-widget/components/index.js +13 -0
- package/dist/components/rtc-widget/components/index.js.map +1 -0
- package/dist/components/rtc-widget/index.d.ts +6 -0
- package/dist/components/rtc-widget/index.d.ts.map +1 -0
- package/dist/components/rtc-widget/index.js +7 -0
- package/dist/components/rtc-widget/index.js.map +1 -0
- package/dist/components/rtc-widget/styles/framerConfig.d.ts +116 -0
- package/dist/components/rtc-widget/styles/framerConfig.d.ts.map +1 -0
- package/dist/components/rtc-widget/styles/framerConfig.js +73 -0
- package/dist/components/rtc-widget/styles/framerConfig.js.map +1 -0
- package/dist/components/rtc-widget/styles/icons.d.ts +28 -0
- package/dist/components/rtc-widget/styles/icons.d.ts.map +1 -0
- package/dist/components/rtc-widget/styles/icons.js +257 -0
- package/dist/components/rtc-widget/styles/icons.js.map +1 -0
- package/dist/components/rtc-widget/styles/index.d.ts +6 -0
- package/dist/components/rtc-widget/styles/index.d.ts.map +1 -0
- package/dist/components/rtc-widget/styles/index.js +9 -0
- package/dist/components/rtc-widget/styles/index.js.map +1 -0
- package/dist/components/rtc-widget/styles/styledComponents.d.ts +90 -0
- package/dist/components/rtc-widget/styles/styledComponents.d.ts.map +1 -0
- package/dist/components/rtc-widget/styles/styledComponents.js +640 -0
- package/dist/components/rtc-widget/styles/styledComponents.js.map +1 -0
- package/dist/components/rtc-widget/styles/theme.d.ts +188 -0
- package/dist/components/rtc-widget/styles/theme.d.ts.map +1 -0
- package/dist/components/rtc-widget/styles/theme.js +290 -0
- package/dist/components/rtc-widget/styles/theme.js.map +1 -0
- package/dist/components/rtc-widget/types/index.d.ts +60 -0
- package/dist/components/rtc-widget/types/index.d.ts.map +1 -0
- package/dist/components/rtc-widget/types/index.js +2 -0
- package/dist/components/rtc-widget/types/index.js.map +1 -0
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +14 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAudioControls.d.ts +41 -0
- package/dist/hooks/useAudioControls.d.ts.map +1 -0
- package/dist/hooks/useAudioControls.js +219 -0
- package/dist/hooks/useAudioControls.js.map +1 -0
- package/dist/hooks/useCharacterInfo.d.ts +17 -0
- package/dist/hooks/useCharacterInfo.d.ts.map +1 -0
- package/dist/hooks/useCharacterInfo.js +61 -0
- package/dist/hooks/useCharacterInfo.js.map +1 -0
- package/dist/hooks/useConvaiClient.d.ts +37 -0
- package/dist/hooks/useConvaiClient.d.ts.map +1 -0
- package/dist/hooks/useConvaiClient.js +348 -0
- package/dist/hooks/useConvaiClient.js.map +1 -0
- package/dist/hooks/useDynamicInfoUpdater.d.ts +33 -0
- package/dist/hooks/useDynamicInfoUpdater.d.ts.map +1 -0
- package/dist/hooks/useDynamicInfoUpdater.js +51 -0
- package/dist/hooks/useDynamicInfoUpdater.js.map +1 -0
- package/dist/hooks/useLocalCameraTrack.d.ts +22 -0
- package/dist/hooks/useLocalCameraTrack.d.ts.map +1 -0
- package/dist/hooks/useLocalCameraTrack.js +34 -0
- package/dist/hooks/useLocalCameraTrack.js.map +1 -0
- package/dist/hooks/useMessageHandler.d.ts +28 -0
- package/dist/hooks/useMessageHandler.d.ts.map +1 -0
- package/dist/hooks/useMessageHandler.js +317 -0
- package/dist/hooks/useMessageHandler.js.map +1 -0
- package/dist/hooks/useScreenShare.d.ts +45 -0
- package/dist/hooks/useScreenShare.d.ts.map +1 -0
- package/dist/hooks/useScreenShare.js +198 -0
- package/dist/hooks/useScreenShare.js.map +1 -0
- package/dist/hooks/useTemplateKeysUpdater.d.ts +35 -0
- package/dist/hooks/useTemplateKeysUpdater.d.ts.map +1 -0
- package/dist/hooks/useTemplateKeysUpdater.js +53 -0
- package/dist/hooks/useTemplateKeysUpdater.js.map +1 -0
- package/dist/hooks/useTriggerMessageSender.d.ts +28 -0
- package/dist/hooks/useTriggerMessageSender.d.ts.map +1 -0
- package/dist/hooks/useTriggerMessageSender.js +52 -0
- package/dist/hooks/useTriggerMessageSender.js.map +1 -0
- package/dist/hooks/useTtsToggle.d.ts +37 -0
- package/dist/hooks/useTtsToggle.d.ts.map +1 -0
- package/dist/hooks/useTtsToggle.js +65 -0
- package/dist/hooks/useTtsToggle.js.map +1 -0
- package/dist/hooks/useUserTextMessageSender.d.ts +28 -0
- package/dist/hooks/useUserTextMessageSender.d.ts.map +1 -0
- package/dist/hooks/useUserTextMessageSender.js +61 -0
- package/dist/hooks/useUserTextMessageSender.js.map +1 -0
- package/dist/hooks/useVideoControls.d.ts +39 -0
- package/dist/hooks/useVideoControls.d.ts.map +1 -0
- package/dist/hooks/useVideoControls.js +211 -0
- package/dist/hooks/useVideoControls.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +225 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +96 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { useCallback, useState, useEffect } from "react";
|
|
2
|
+
import { logger } from "../utils/logger";
|
|
3
|
+
/**
|
|
4
|
+
* Hook for managing audio controls in LiveKit.
|
|
5
|
+
*
|
|
6
|
+
* Provides methods to enable/disable microphone, manage audio devices,
|
|
7
|
+
* and control audio visibility state.
|
|
8
|
+
*
|
|
9
|
+
* @param {Room | null} room - LiveKit room instance
|
|
10
|
+
* @returns {AudioControls} Object containing audio control methods and state
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* function AudioControls() {
|
|
15
|
+
* const audioControls = useAudioControls(room);
|
|
16
|
+
*
|
|
17
|
+
* return (
|
|
18
|
+
* <div>
|
|
19
|
+
* <button onClick={audioControls.toggleAudio}>
|
|
20
|
+
* {audioControls.isAudioEnabled ? 'Mute' : 'Unmute'}
|
|
21
|
+
* </button>
|
|
22
|
+
* </div>
|
|
23
|
+
* );
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export const useAudioControls = (room) => {
|
|
28
|
+
const [isAudioEnabled, setIsAudioEnabled] = useState(false);
|
|
29
|
+
const [isAudioMuted, setIsAudioMuted] = useState(false);
|
|
30
|
+
const [audioLevel, setAudioLevel] = useState(0);
|
|
31
|
+
// Update audio state when room changes
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (!room) {
|
|
34
|
+
setIsAudioEnabled(false);
|
|
35
|
+
setIsAudioMuted(false);
|
|
36
|
+
setAudioLevel(0);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const localParticipant = room.localParticipant;
|
|
40
|
+
// Set initial state
|
|
41
|
+
setIsAudioEnabled(localParticipant.isMicrophoneEnabled);
|
|
42
|
+
setIsAudioMuted(false); // LiveKit doesn't have a direct muted state
|
|
43
|
+
// Listen for audio state changes
|
|
44
|
+
const handleTrackMuted = (track) => {
|
|
45
|
+
if (track.source === 'microphone') {
|
|
46
|
+
setIsAudioMuted(true);
|
|
47
|
+
setIsAudioEnabled(false);
|
|
48
|
+
logger.log("🔇 Audio muted");
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const handleTrackUnmuted = (track) => {
|
|
52
|
+
if (track.source === 'microphone') {
|
|
53
|
+
setIsAudioMuted(false);
|
|
54
|
+
setIsAudioEnabled(true);
|
|
55
|
+
logger.log("🎤 Audio unmuted");
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const handleTrackPublished = (track) => {
|
|
59
|
+
if (track.source === 'microphone') {
|
|
60
|
+
setIsAudioEnabled(true);
|
|
61
|
+
setIsAudioMuted(false);
|
|
62
|
+
logger.log("🎤 Audio track published");
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const handleTrackUnpublished = (track) => {
|
|
66
|
+
if (track.source === 'microphone') {
|
|
67
|
+
setIsAudioEnabled(false);
|
|
68
|
+
setIsAudioMuted(true);
|
|
69
|
+
logger.log("🔇 Audio track unpublished");
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
// Subscribe to events
|
|
73
|
+
localParticipant.on('trackMuted', handleTrackMuted);
|
|
74
|
+
localParticipant.on('trackUnmuted', handleTrackUnmuted);
|
|
75
|
+
localParticipant.on('trackPublished', handleTrackPublished);
|
|
76
|
+
localParticipant.on('trackUnpublished', handleTrackUnpublished);
|
|
77
|
+
return () => {
|
|
78
|
+
localParticipant.off('trackMuted', handleTrackMuted);
|
|
79
|
+
localParticipant.off('trackUnmuted', handleTrackUnmuted);
|
|
80
|
+
localParticipant.off('trackPublished', handleTrackPublished);
|
|
81
|
+
localParticipant.off('trackUnpublished', handleTrackUnpublished);
|
|
82
|
+
};
|
|
83
|
+
}, [room]);
|
|
84
|
+
// Enable audio
|
|
85
|
+
const enableAudio = useCallback(async () => {
|
|
86
|
+
if (!room) {
|
|
87
|
+
logger.warn("Cannot enable audio: no room connection");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
await room.localParticipant.setMicrophoneEnabled(true);
|
|
92
|
+
logger.log("🎤 Audio enabled successfully");
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
logger.error("Failed to enable audio:", error);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}, [room]);
|
|
99
|
+
// Disable audio
|
|
100
|
+
const disableAudio = useCallback(async () => {
|
|
101
|
+
if (!room) {
|
|
102
|
+
logger.warn("Cannot disable audio: no room connection");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
await room.localParticipant.setMicrophoneEnabled(false);
|
|
107
|
+
logger.log("🔇 Audio disabled successfully");
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
logger.error("Failed to disable audio:", error);
|
|
111
|
+
throw error;
|
|
112
|
+
}
|
|
113
|
+
}, [room]);
|
|
114
|
+
// Mute audio
|
|
115
|
+
const muteAudio = useCallback(async () => {
|
|
116
|
+
if (!room) {
|
|
117
|
+
logger.warn("Cannot mute audio: no room connection");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
// For now, we'll just disable the microphone as LiveKit doesn't have a direct mute method
|
|
122
|
+
await room.localParticipant.setMicrophoneEnabled(false);
|
|
123
|
+
logger.log("🔇 Audio muted successfully");
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
logger.error("Failed to mute audio:", error);
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}, [room]);
|
|
130
|
+
// Unmute audio
|
|
131
|
+
const unmuteAudio = useCallback(async () => {
|
|
132
|
+
if (!room) {
|
|
133
|
+
logger.warn("Cannot unmute audio: no room connection");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
await room.localParticipant.setMicrophoneEnabled(true);
|
|
138
|
+
logger.log("🎤 Audio unmuted successfully");
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.error("Failed to unmute audio:", error);
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
}, [room]);
|
|
145
|
+
// Toggle audio
|
|
146
|
+
const toggleAudio = useCallback(async () => {
|
|
147
|
+
if (isAudioMuted) {
|
|
148
|
+
await unmuteAudio();
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
await muteAudio();
|
|
152
|
+
}
|
|
153
|
+
}, [isAudioMuted, muteAudio, unmuteAudio]);
|
|
154
|
+
// Set audio device
|
|
155
|
+
const setAudioDevice = useCallback(async (deviceId) => {
|
|
156
|
+
if (!room) {
|
|
157
|
+
logger.warn("Cannot set audio device: no room connection");
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
await room.localParticipant.setMicrophoneEnabled(true, { deviceId });
|
|
162
|
+
logger.log("🎤 Audio device changed to:", deviceId);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
logger.error("Failed to set audio device:", error);
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
}, [room]);
|
|
169
|
+
// Get available audio devices
|
|
170
|
+
const getAudioDevices = useCallback(async () => {
|
|
171
|
+
try {
|
|
172
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
173
|
+
const audioDevices = devices.filter(device => device.kind === 'audioinput');
|
|
174
|
+
logger.log("🎤 Available audio devices:", audioDevices);
|
|
175
|
+
return audioDevices;
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
logger.error("Failed to get audio devices:", error);
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}, []);
|
|
182
|
+
// Start audio level monitoring
|
|
183
|
+
const startAudioLevelMonitoring = useCallback(() => {
|
|
184
|
+
if (!room) {
|
|
185
|
+
logger.warn("Cannot start audio monitoring: no room connection");
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
logger.log("🎤 Audio level monitoring not implemented yet");
|
|
189
|
+
// TODO: Implement audio level monitoring when LiveKit provides the API
|
|
190
|
+
}, [room]);
|
|
191
|
+
// Stop audio level monitoring
|
|
192
|
+
const stopAudioLevelMonitoring = useCallback(() => {
|
|
193
|
+
if (!room) {
|
|
194
|
+
logger.warn("Cannot stop audio monitoring: no room connection");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
setAudioLevel(0);
|
|
198
|
+
logger.log("🎤 Audio level monitoring stopped");
|
|
199
|
+
}, [room]);
|
|
200
|
+
return {
|
|
201
|
+
// Audio state
|
|
202
|
+
isAudioEnabled,
|
|
203
|
+
isAudioMuted,
|
|
204
|
+
audioLevel,
|
|
205
|
+
// Audio controls
|
|
206
|
+
enableAudio,
|
|
207
|
+
disableAudio,
|
|
208
|
+
muteAudio,
|
|
209
|
+
unmuteAudio,
|
|
210
|
+
toggleAudio,
|
|
211
|
+
// Audio settings
|
|
212
|
+
setAudioDevice,
|
|
213
|
+
getAudioDevices,
|
|
214
|
+
// Audio monitoring
|
|
215
|
+
startAudioLevelMonitoring,
|
|
216
|
+
stopAudioLevelMonitoring,
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=useAudioControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAudioControls.js","sourceRoot":"","sources":["../../src/hooks/useAudioControls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
interface CharacterInfo {
|
|
2
|
+
name: string;
|
|
3
|
+
image: string | null;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Hook to fetch character information from Convai API
|
|
7
|
+
*
|
|
8
|
+
* @param characterId - The character ID to fetch information for
|
|
9
|
+
* @param apiKey - The Convai API key
|
|
10
|
+
* @returns Character information including name and image URL
|
|
11
|
+
*/
|
|
12
|
+
export declare const useCharacterInfo: (characterId: string, apiKey: string) => CharacterInfo & {
|
|
13
|
+
isLoading: boolean;
|
|
14
|
+
error: Error | null;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=useCharacterInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCharacterInfo.d.ts","sourceRoot":"","sources":["../../src/hooks/useCharacterInfo.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,aAAa,MAAM,EACnB,QAAQ,MAAM,KACb,aAAa,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CA0D3D,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { useState, useEffect } from "react";
|
|
2
|
+
import { logger } from "../utils/logger";
|
|
3
|
+
/**
|
|
4
|
+
* Hook to fetch character information from Convai API
|
|
5
|
+
*
|
|
6
|
+
* @param characterId - The character ID to fetch information for
|
|
7
|
+
* @param apiKey - The Convai API key
|
|
8
|
+
* @returns Character information including name and image URL
|
|
9
|
+
*/
|
|
10
|
+
export const useCharacterInfo = (characterId, apiKey) => {
|
|
11
|
+
const [characterInfo, setCharacterInfo] = useState({
|
|
12
|
+
name: "Convi",
|
|
13
|
+
image: null,
|
|
14
|
+
});
|
|
15
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const fetchCharacterInfo = async () => {
|
|
19
|
+
if (!characterId || !apiKey) {
|
|
20
|
+
setIsLoading(false);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
setIsLoading(true);
|
|
25
|
+
setError(null);
|
|
26
|
+
const response = await fetch("https://api.convai.com/character/get", {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: {
|
|
29
|
+
"Content-Type": "application/json",
|
|
30
|
+
"CONVAI-API-KEY": apiKey,
|
|
31
|
+
},
|
|
32
|
+
body: JSON.stringify({ charID: characterId }),
|
|
33
|
+
});
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error(`Failed to fetch character info: ${response.status}`);
|
|
36
|
+
}
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
// Extract character name and image with fallbacks
|
|
39
|
+
const name = data.character_name || "Convi";
|
|
40
|
+
const image = data.model_details?.METAHUMAN?.avatar_image_square ||
|
|
41
|
+
data.model_details?.METAHUMAN?.avatar_image ||
|
|
42
|
+
data.model_details?.modelPlaceholder ||
|
|
43
|
+
null;
|
|
44
|
+
setCharacterInfo({ name, image });
|
|
45
|
+
logger.log("Character info loaded:", { name, hasImage: !!image });
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
const error = err instanceof Error ? err : new Error("Unknown error");
|
|
49
|
+
logger.error("Failed to fetch character info:", error);
|
|
50
|
+
setError(error);
|
|
51
|
+
// Keep default values on error
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
setIsLoading(false);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
fetchCharacterInfo();
|
|
58
|
+
}, [characterId, apiKey]);
|
|
59
|
+
return { ...characterInfo, isLoading, error };
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=useCharacterInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCharacterInfo.js","sourceRoot":"","sources":["../../src/hooks/useCharacterInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,WAAmB,EACnB,MAAc,EAC+C,EAAE;IAC/D,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB;QAChE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;YACpC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAEf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sCAAsC,EAAE;oBACnE,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,gBAAgB,EAAE,MAAM;qBACzB;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;iBAC9C,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxE,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAEnC,kDAAkD;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC;gBAC5C,MAAM,KAAK,GACT,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,mBAAmB;oBAClD,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY;oBAC3C,IAAI,CAAC,aAAa,EAAE,gBAAgB;oBACpC,IAAI,CAAC;gBAEP,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;gBACtE,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBACvD,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,+BAA+B;YACjC,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,kBAAkB,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ConvaiClient, ChatMessage } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Main hook for managing Convai client connection and functionality.
|
|
4
|
+
*
|
|
5
|
+
* Provides a complete interface for connecting to Convai's AI-powered voice assistants,
|
|
6
|
+
* managing real-time audio/video conversations, and handling various message types.
|
|
7
|
+
*
|
|
8
|
+
* @returns {ConvaiClient & { activity: string; chatMessages: ChatMessage[] }} Complete client interface with connection state, methods, and message history
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* function App() {
|
|
13
|
+
* const convaiClient = useConvaiClient();
|
|
14
|
+
*
|
|
15
|
+
* const connect = async () => {
|
|
16
|
+
* await convaiClient.connect({
|
|
17
|
+
* apiKey: 'your-api-key',
|
|
18
|
+
* characterId: 'your-character-id',
|
|
19
|
+
* enableVideo: true,
|
|
20
|
+
* enableAudio: true
|
|
21
|
+
* });
|
|
22
|
+
* };
|
|
23
|
+
*
|
|
24
|
+
* return (
|
|
25
|
+
* <div>
|
|
26
|
+
* <button onClick={connect}>Connect</button>
|
|
27
|
+
* <p>Status: {convaiClient.state.isConnected ? 'Connected' : 'Disconnected'}</p>
|
|
28
|
+
* </div>
|
|
29
|
+
* );
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare const useConvaiClient: () => ConvaiClient & {
|
|
34
|
+
activity: string;
|
|
35
|
+
chatMessages: ChatMessage[];
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=useConvaiClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConvaiClient.d.ts","sourceRoot":"","sources":["../../src/hooks/useConvaiClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,YAAY,EAEZ,WAAW,EAEZ,MAAM,UAAU,CAAC;AAYlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,eAAe,QAAO,YAAY,GAAG;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;CA4W7B,CAAC"}
|