@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.
Files changed (158) hide show
  1. package/README.md +239 -0
  2. package/dist/components/RTCWidget.d.ts +56 -0
  3. package/dist/components/RTCWidget.d.ts.map +1 -0
  4. package/dist/components/RTCWidget.js +419 -0
  5. package/dist/components/RTCWidget.js.map +1 -0
  6. package/dist/components/index.d.ts +3 -0
  7. package/dist/components/index.d.ts.map +1 -0
  8. package/dist/components/index.js +5 -0
  9. package/dist/components/index.js.map +1 -0
  10. package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts +10 -0
  11. package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts.map +1 -0
  12. package/dist/components/rtc-widget/components/AudioSettingsPanel.js +316 -0
  13. package/dist/components/rtc-widget/components/AudioSettingsPanel.js.map +1 -0
  14. package/dist/components/rtc-widget/components/ConviMessage.d.ts +10 -0
  15. package/dist/components/rtc-widget/components/ConviMessage.d.ts.map +1 -0
  16. package/dist/components/rtc-widget/components/ConviMessage.js +14 -0
  17. package/dist/components/rtc-widget/components/ConviMessage.js.map +1 -0
  18. package/dist/components/rtc-widget/components/FloatingVideo.d.ts +9 -0
  19. package/dist/components/rtc-widget/components/FloatingVideo.d.ts.map +1 -0
  20. package/dist/components/rtc-widget/components/FloatingVideo.js +122 -0
  21. package/dist/components/rtc-widget/components/FloatingVideo.js.map +1 -0
  22. package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts +7 -0
  23. package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts.map +1 -0
  24. package/dist/components/rtc-widget/components/MarkdownRenderer.js +68 -0
  25. package/dist/components/rtc-widget/components/MarkdownRenderer.js.map +1 -0
  26. package/dist/components/rtc-widget/components/MessageBubble.d.ts +10 -0
  27. package/dist/components/rtc-widget/components/MessageBubble.d.ts.map +1 -0
  28. package/dist/components/rtc-widget/components/MessageBubble.js +23 -0
  29. package/dist/components/rtc-widget/components/MessageBubble.js.map +1 -0
  30. package/dist/components/rtc-widget/components/MessageList.d.ts +11 -0
  31. package/dist/components/rtc-widget/components/MessageList.d.ts.map +1 -0
  32. package/dist/components/rtc-widget/components/MessageList.js +89 -0
  33. package/dist/components/rtc-widget/components/MessageList.js.map +1 -0
  34. package/dist/components/rtc-widget/components/UserMessage.d.ts +9 -0
  35. package/dist/components/rtc-widget/components/UserMessage.d.ts.map +1 -0
  36. package/dist/components/rtc-widget/components/UserMessage.js +15 -0
  37. package/dist/components/rtc-widget/components/UserMessage.js.map +1 -0
  38. package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts +6 -0
  39. package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts.map +1 -0
  40. package/dist/components/rtc-widget/components/conviComponents/ConviButton.js +15 -0
  41. package/dist/components/rtc-widget/components/conviComponents/ConviButton.js.map +1 -0
  42. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts +25 -0
  43. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts.map +1 -0
  44. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js +172 -0
  45. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js.map +1 -0
  46. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts +17 -0
  47. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts.map +1 -0
  48. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js +66 -0
  49. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js.map +1 -0
  50. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +12 -0
  51. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +1 -0
  52. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js +68 -0
  53. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -0
  54. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts +8 -0
  55. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts.map +1 -0
  56. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js +199 -0
  57. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js.map +1 -0
  58. package/dist/components/rtc-widget/components/conviComponents/index.d.ts +6 -0
  59. package/dist/components/rtc-widget/components/conviComponents/index.d.ts.map +1 -0
  60. package/dist/components/rtc-widget/components/conviComponents/index.js +6 -0
  61. package/dist/components/rtc-widget/components/conviComponents/index.js.map +1 -0
  62. package/dist/components/rtc-widget/components/index.d.ts +9 -0
  63. package/dist/components/rtc-widget/components/index.d.ts.map +1 -0
  64. package/dist/components/rtc-widget/components/index.js +13 -0
  65. package/dist/components/rtc-widget/components/index.js.map +1 -0
  66. package/dist/components/rtc-widget/index.d.ts +6 -0
  67. package/dist/components/rtc-widget/index.d.ts.map +1 -0
  68. package/dist/components/rtc-widget/index.js +7 -0
  69. package/dist/components/rtc-widget/index.js.map +1 -0
  70. package/dist/components/rtc-widget/styles/framerConfig.d.ts +116 -0
  71. package/dist/components/rtc-widget/styles/framerConfig.d.ts.map +1 -0
  72. package/dist/components/rtc-widget/styles/framerConfig.js +73 -0
  73. package/dist/components/rtc-widget/styles/framerConfig.js.map +1 -0
  74. package/dist/components/rtc-widget/styles/icons.d.ts +28 -0
  75. package/dist/components/rtc-widget/styles/icons.d.ts.map +1 -0
  76. package/dist/components/rtc-widget/styles/icons.js +257 -0
  77. package/dist/components/rtc-widget/styles/icons.js.map +1 -0
  78. package/dist/components/rtc-widget/styles/index.d.ts +6 -0
  79. package/dist/components/rtc-widget/styles/index.d.ts.map +1 -0
  80. package/dist/components/rtc-widget/styles/index.js +9 -0
  81. package/dist/components/rtc-widget/styles/index.js.map +1 -0
  82. package/dist/components/rtc-widget/styles/styledComponents.d.ts +90 -0
  83. package/dist/components/rtc-widget/styles/styledComponents.d.ts.map +1 -0
  84. package/dist/components/rtc-widget/styles/styledComponents.js +640 -0
  85. package/dist/components/rtc-widget/styles/styledComponents.js.map +1 -0
  86. package/dist/components/rtc-widget/styles/theme.d.ts +188 -0
  87. package/dist/components/rtc-widget/styles/theme.d.ts.map +1 -0
  88. package/dist/components/rtc-widget/styles/theme.js +290 -0
  89. package/dist/components/rtc-widget/styles/theme.js.map +1 -0
  90. package/dist/components/rtc-widget/types/index.d.ts +60 -0
  91. package/dist/components/rtc-widget/types/index.d.ts.map +1 -0
  92. package/dist/components/rtc-widget/types/index.js +2 -0
  93. package/dist/components/rtc-widget/types/index.js.map +1 -0
  94. package/dist/hooks/index.d.ts +13 -0
  95. package/dist/hooks/index.d.ts.map +1 -0
  96. package/dist/hooks/index.js +14 -0
  97. package/dist/hooks/index.js.map +1 -0
  98. package/dist/hooks/useAudioControls.d.ts +41 -0
  99. package/dist/hooks/useAudioControls.d.ts.map +1 -0
  100. package/dist/hooks/useAudioControls.js +219 -0
  101. package/dist/hooks/useAudioControls.js.map +1 -0
  102. package/dist/hooks/useCharacterInfo.d.ts +17 -0
  103. package/dist/hooks/useCharacterInfo.d.ts.map +1 -0
  104. package/dist/hooks/useCharacterInfo.js +61 -0
  105. package/dist/hooks/useCharacterInfo.js.map +1 -0
  106. package/dist/hooks/useConvaiClient.d.ts +37 -0
  107. package/dist/hooks/useConvaiClient.d.ts.map +1 -0
  108. package/dist/hooks/useConvaiClient.js +348 -0
  109. package/dist/hooks/useConvaiClient.js.map +1 -0
  110. package/dist/hooks/useDynamicInfoUpdater.d.ts +33 -0
  111. package/dist/hooks/useDynamicInfoUpdater.d.ts.map +1 -0
  112. package/dist/hooks/useDynamicInfoUpdater.js +51 -0
  113. package/dist/hooks/useDynamicInfoUpdater.js.map +1 -0
  114. package/dist/hooks/useLocalCameraTrack.d.ts +22 -0
  115. package/dist/hooks/useLocalCameraTrack.d.ts.map +1 -0
  116. package/dist/hooks/useLocalCameraTrack.js +34 -0
  117. package/dist/hooks/useLocalCameraTrack.js.map +1 -0
  118. package/dist/hooks/useMessageHandler.d.ts +28 -0
  119. package/dist/hooks/useMessageHandler.d.ts.map +1 -0
  120. package/dist/hooks/useMessageHandler.js +317 -0
  121. package/dist/hooks/useMessageHandler.js.map +1 -0
  122. package/dist/hooks/useScreenShare.d.ts +45 -0
  123. package/dist/hooks/useScreenShare.d.ts.map +1 -0
  124. package/dist/hooks/useScreenShare.js +198 -0
  125. package/dist/hooks/useScreenShare.js.map +1 -0
  126. package/dist/hooks/useTemplateKeysUpdater.d.ts +35 -0
  127. package/dist/hooks/useTemplateKeysUpdater.d.ts.map +1 -0
  128. package/dist/hooks/useTemplateKeysUpdater.js +53 -0
  129. package/dist/hooks/useTemplateKeysUpdater.js.map +1 -0
  130. package/dist/hooks/useTriggerMessageSender.d.ts +28 -0
  131. package/dist/hooks/useTriggerMessageSender.d.ts.map +1 -0
  132. package/dist/hooks/useTriggerMessageSender.js +52 -0
  133. package/dist/hooks/useTriggerMessageSender.js.map +1 -0
  134. package/dist/hooks/useTtsToggle.d.ts +37 -0
  135. package/dist/hooks/useTtsToggle.d.ts.map +1 -0
  136. package/dist/hooks/useTtsToggle.js +65 -0
  137. package/dist/hooks/useTtsToggle.js.map +1 -0
  138. package/dist/hooks/useUserTextMessageSender.d.ts +28 -0
  139. package/dist/hooks/useUserTextMessageSender.d.ts.map +1 -0
  140. package/dist/hooks/useUserTextMessageSender.js +61 -0
  141. package/dist/hooks/useUserTextMessageSender.js.map +1 -0
  142. package/dist/hooks/useVideoControls.d.ts +39 -0
  143. package/dist/hooks/useVideoControls.d.ts.map +1 -0
  144. package/dist/hooks/useVideoControls.js +211 -0
  145. package/dist/hooks/useVideoControls.js.map +1 -0
  146. package/dist/index.d.ts +5 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +9 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/types/index.d.ts +225 -0
  151. package/dist/types/index.d.ts.map +1 -0
  152. package/dist/types/index.js +2 -0
  153. package/dist/types/index.js.map +1 -0
  154. package/dist/utils/logger.d.ts +27 -0
  155. package/dist/utils/logger.d.ts.map +1 -0
  156. package/dist/utils/logger.js +96 -0
  157. package/dist/utils/logger.js.map +1 -0
  158. 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":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAiBzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAiB,EAAiB,EAAE;IACnE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEhD,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,aAAa,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE/C,oBAAoB;QACpB,iBAAiB,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QACxD,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,4CAA4C;QAEpE,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,CAAC,KAAU,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,CAAC,KAAU,EAAE,EAAE;YACxC,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvB,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,oBAAoB,GAAG,CAAC,KAAU,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACxB,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,sBAAsB,GAAG,CAAC,KAAU,EAAE,EAAE;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,eAAe,CAAC,IAAI,CAAC,CAAC;gBACtB,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;QAEF,sBAAsB;QACtB,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QACpD,gBAAgB,CAAC,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACxD,gBAAgB,CAAC,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QAC5D,gBAAgB,CAAC,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QAEhE,OAAO,GAAG,EAAE;YACV,gBAAgB,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACrD,gBAAgB,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YACzD,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;YAC7D,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QACnE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,eAAe;IACf,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,gBAAgB;IAChB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,aAAa;IACb,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,0FAA0F;YAC1F,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,eAAe;IACf,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,eAAe;IACf,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3C,mBAAmB;IACnB,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,8BAA8B;IAC9B,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAgC,EAAE;QACzE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAChE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;YAC5E,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;YACxD,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+BAA+B;IAC/B,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAG,EAAE;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC5D,uEAAuE;IACzE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,8BAA8B;IAC9B,MAAM,wBAAwB,GAAG,WAAW,CAAC,GAAG,EAAE;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO;QACL,cAAc;QACd,cAAc;QACd,YAAY;QACZ,UAAU;QAEV,iBAAiB;QACjB,WAAW;QACX,YAAY;QACZ,SAAS;QACT,WAAW;QACX,WAAW;QAEX,iBAAiB;QACjB,cAAc;QACd,eAAe;QAEf,mBAAmB;QACnB,yBAAyB;QACzB,wBAAwB;KACzB,CAAC;AACJ,CAAC,CAAC"}
@@ -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"}