@convai/web-sdk 0.1.1-beta.4 → 0.2.0
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 +735 -189
- package/dist/core/AudioManager.d.ts +8 -0
- package/dist/core/AudioManager.d.ts.map +1 -1
- package/dist/core/AudioManager.js +45 -5
- package/dist/core/AudioManager.js.map +1 -1
- package/dist/core/ConvaiClient.d.ts +22 -9
- package/dist/core/ConvaiClient.d.ts.map +1 -1
- package/dist/core/ConvaiClient.js +92 -41
- package/dist/core/ConvaiClient.js.map +1 -1
- package/dist/core/MessageHandler.d.ts.map +1 -1
- package/dist/core/MessageHandler.js +27 -24
- package/dist/core/MessageHandler.js.map +1 -1
- package/dist/core/ScreenShareManager.d.ts.map +1 -1
- package/dist/core/ScreenShareManager.js +4 -0
- package/dist/core/ScreenShareManager.js.map +1 -1
- package/dist/core/VideoManager.d.ts.map +1 -1
- package/dist/core/VideoManager.js +2 -0
- package/dist/core/VideoManager.js.map +1 -1
- package/dist/core/types.d.ts +13 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/react/components/ConvaiWidget.d.ts +3 -0
- package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
- package/dist/react/components/ConvaiWidget.js +25 -22
- package/dist/react/components/ConvaiWidget.js.map +1 -1
- package/dist/react/components/index.d.ts +0 -1
- package/dist/react/components/index.d.ts.map +1 -1
- package/dist/react/components/index.js +0 -2
- package/dist/react/components/index.js.map +1 -1
- package/dist/react/hooks/useConvaiClient.d.ts +3 -0
- package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
- package/dist/react/hooks/useConvaiClient.js +46 -9
- package/dist/react/hooks/useConvaiClient.js.map +1 -1
- package/dist/types/index.d.ts +1 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/vanilla/AudioRenderer.d.ts +45 -0
- package/dist/vanilla/AudioRenderer.d.ts.map +1 -0
- package/dist/vanilla/AudioRenderer.js +126 -0
- package/dist/vanilla/AudioRenderer.js.map +1 -0
- package/dist/vanilla/ConvaiWidget.d.ts +39 -0
- package/dist/vanilla/ConvaiWidget.d.ts.map +1 -0
- package/dist/vanilla/ConvaiWidget.js +1835 -0
- package/dist/vanilla/ConvaiWidget.js.map +1 -0
- package/dist/vanilla/icons.d.ts +34 -0
- package/dist/vanilla/icons.d.ts.map +1 -0
- package/dist/vanilla/icons.js +215 -0
- package/dist/vanilla/icons.js.map +1 -0
- package/dist/vanilla/index.d.ts +35 -0
- package/dist/vanilla/index.d.ts.map +1 -0
- package/dist/vanilla/index.js +37 -0
- package/dist/vanilla/index.js.map +1 -0
- package/dist/{components/rtc-widget/styles/theme.d.ts → vanilla/styles.d.ts} +14 -50
- package/dist/vanilla/styles.d.ts.map +1 -0
- package/dist/vanilla/styles.js +287 -0
- package/dist/vanilla/styles.js.map +1 -0
- package/dist/vanilla/types.d.ts +38 -0
- package/dist/vanilla/types.d.ts.map +1 -0
- package/dist/vanilla/types.js +2 -0
- package/dist/vanilla/types.js.map +1 -0
- package/package.json +12 -5
- package/dist/components/ConvaiWidget.d.ts +0 -59
- package/dist/components/ConvaiWidget.d.ts.map +0 -1
- package/dist/components/ConvaiWidget.js +0 -421
- package/dist/components/ConvaiWidget.js.map +0 -1
- package/dist/components/index.d.ts +0 -3
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -5
- package/dist/components/index.js.map +0 -1
- package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts +0 -10
- package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/AudioSettingsPanel.js +0 -316
- package/dist/components/rtc-widget/components/AudioSettingsPanel.js.map +0 -1
- package/dist/components/rtc-widget/components/ConviMessage.d.ts +0 -10
- package/dist/components/rtc-widget/components/ConviMessage.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/ConviMessage.js +0 -14
- package/dist/components/rtc-widget/components/ConviMessage.js.map +0 -1
- package/dist/components/rtc-widget/components/FloatingVideo.d.ts +0 -9
- package/dist/components/rtc-widget/components/FloatingVideo.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/FloatingVideo.js +0 -122
- package/dist/components/rtc-widget/components/FloatingVideo.js.map +0 -1
- package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts +0 -7
- package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/MarkdownRenderer.js +0 -68
- package/dist/components/rtc-widget/components/MarkdownRenderer.js.map +0 -1
- package/dist/components/rtc-widget/components/MessageBubble.d.ts +0 -10
- package/dist/components/rtc-widget/components/MessageBubble.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/MessageBubble.js +0 -23
- package/dist/components/rtc-widget/components/MessageBubble.js.map +0 -1
- package/dist/components/rtc-widget/components/MessageList.d.ts +0 -11
- package/dist/components/rtc-widget/components/MessageList.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/MessageList.js +0 -89
- package/dist/components/rtc-widget/components/MessageList.js.map +0 -1
- package/dist/components/rtc-widget/components/UserMessage.d.ts +0 -9
- package/dist/components/rtc-widget/components/UserMessage.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/UserMessage.js +0 -15
- package/dist/components/rtc-widget/components/UserMessage.js.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts +0 -6
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.js +0 -15
- package/dist/components/rtc-widget/components/conviComponents/ConviButton.js.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts +0 -25
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js +0 -172
- package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts +0 -17
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js +0 -66
- package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +0 -12
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js +0 -68
- package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts +0 -8
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js +0 -199
- package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/index.d.ts +0 -6
- package/dist/components/rtc-widget/components/conviComponents/index.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/conviComponents/index.js +0 -6
- package/dist/components/rtc-widget/components/conviComponents/index.js.map +0 -1
- package/dist/components/rtc-widget/components/index.d.ts +0 -8
- package/dist/components/rtc-widget/components/index.d.ts.map +0 -1
- package/dist/components/rtc-widget/components/index.js +0 -13
- package/dist/components/rtc-widget/components/index.js.map +0 -1
- package/dist/components/rtc-widget/index.d.ts +0 -6
- package/dist/components/rtc-widget/index.d.ts.map +0 -1
- package/dist/components/rtc-widget/index.js +0 -9
- package/dist/components/rtc-widget/index.js.map +0 -1
- package/dist/components/rtc-widget/styles/framerConfig.d.ts +0 -116
- package/dist/components/rtc-widget/styles/framerConfig.d.ts.map +0 -1
- package/dist/components/rtc-widget/styles/framerConfig.js +0 -73
- package/dist/components/rtc-widget/styles/framerConfig.js.map +0 -1
- package/dist/components/rtc-widget/styles/icons.d.ts +0 -28
- package/dist/components/rtc-widget/styles/icons.d.ts.map +0 -1
- package/dist/components/rtc-widget/styles/icons.js +0 -257
- package/dist/components/rtc-widget/styles/icons.js.map +0 -1
- package/dist/components/rtc-widget/styles/index.d.ts +0 -6
- package/dist/components/rtc-widget/styles/index.d.ts.map +0 -1
- package/dist/components/rtc-widget/styles/index.js +0 -9
- package/dist/components/rtc-widget/styles/index.js.map +0 -1
- package/dist/components/rtc-widget/styles/styledComponents.d.ts +0 -90
- package/dist/components/rtc-widget/styles/styledComponents.d.ts.map +0 -1
- package/dist/components/rtc-widget/styles/styledComponents.js +0 -661
- package/dist/components/rtc-widget/styles/styledComponents.js.map +0 -1
- package/dist/components/rtc-widget/styles/theme.d.ts.map +0 -1
- package/dist/components/rtc-widget/styles/theme.js +0 -290
- package/dist/components/rtc-widget/styles/theme.js.map +0 -1
- package/dist/components/rtc-widget/types/index.d.ts +0 -60
- package/dist/components/rtc-widget/types/index.d.ts.map +0 -1
- package/dist/components/rtc-widget/types/index.js +0 -2
- package/dist/components/rtc-widget/types/index.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -13
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -14
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useAudioControls.d.ts +0 -41
- package/dist/hooks/useAudioControls.d.ts.map +0 -1
- package/dist/hooks/useAudioControls.js +0 -208
- package/dist/hooks/useAudioControls.js.map +0 -1
- package/dist/hooks/useCharacterInfo.d.ts +0 -17
- package/dist/hooks/useCharacterInfo.d.ts.map +0 -1
- package/dist/hooks/useCharacterInfo.js +0 -60
- package/dist/hooks/useCharacterInfo.js.map +0 -1
- package/dist/hooks/useConvaiClient.d.ts +0 -30
- package/dist/hooks/useConvaiClient.d.ts.map +0 -1
- package/dist/hooks/useConvaiClient.js +0 -349
- package/dist/hooks/useConvaiClient.js.map +0 -1
- package/dist/hooks/useDynamicInfoUpdater.d.ts +0 -33
- package/dist/hooks/useDynamicInfoUpdater.d.ts.map +0 -1
- package/dist/hooks/useDynamicInfoUpdater.js +0 -49
- package/dist/hooks/useDynamicInfoUpdater.js.map +0 -1
- package/dist/hooks/useLocalCameraTrack.d.ts +0 -22
- package/dist/hooks/useLocalCameraTrack.d.ts.map +0 -1
- package/dist/hooks/useLocalCameraTrack.js +0 -34
- package/dist/hooks/useLocalCameraTrack.js.map +0 -1
- package/dist/hooks/useMessageHandler.d.ts +0 -28
- package/dist/hooks/useMessageHandler.d.ts.map +0 -1
- package/dist/hooks/useMessageHandler.js +0 -267
- package/dist/hooks/useMessageHandler.js.map +0 -1
- package/dist/hooks/useScreenShare.d.ts +0 -45
- package/dist/hooks/useScreenShare.d.ts.map +0 -1
- package/dist/hooks/useScreenShare.js +0 -186
- package/dist/hooks/useScreenShare.js.map +0 -1
- package/dist/hooks/useTemplateKeysUpdater.d.ts +0 -35
- package/dist/hooks/useTemplateKeysUpdater.d.ts.map +0 -1
- package/dist/hooks/useTemplateKeysUpdater.js +0 -51
- package/dist/hooks/useTemplateKeysUpdater.js.map +0 -1
- package/dist/hooks/useTriggerMessageSender.d.ts +0 -28
- package/dist/hooks/useTriggerMessageSender.d.ts.map +0 -1
- package/dist/hooks/useTriggerMessageSender.js +0 -46
- package/dist/hooks/useTriggerMessageSender.js.map +0 -1
- package/dist/hooks/useTtsToggle.d.ts +0 -37
- package/dist/hooks/useTtsToggle.d.ts.map +0 -1
- package/dist/hooks/useTtsToggle.js +0 -63
- package/dist/hooks/useTtsToggle.js.map +0 -1
- package/dist/hooks/useUserTextMessageSender.d.ts +0 -28
- package/dist/hooks/useUserTextMessageSender.d.ts.map +0 -1
- package/dist/hooks/useUserTextMessageSender.js +0 -58
- package/dist/hooks/useUserTextMessageSender.js.map +0 -1
- package/dist/hooks/useVideoControls.d.ts +0 -39
- package/dist/hooks/useVideoControls.d.ts.map +0 -1
- package/dist/hooks/useVideoControls.js +0 -193
- package/dist/hooks/useVideoControls.js.map +0 -1
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Room } from "livekit-client";
|
|
2
|
-
import { ChatMessage } from "../types";
|
|
3
|
-
/**
|
|
4
|
-
* Hook for handling incoming messages from Convai.
|
|
5
|
-
*
|
|
6
|
-
* Sets up data message listeners to process various message types
|
|
7
|
-
* from the AI assistant and updates the chat message history.
|
|
8
|
-
*
|
|
9
|
-
* @param {Room} room - LiveKit room instance
|
|
10
|
-
* @param {Function} setChatMessages - Function to update chat messages state
|
|
11
|
-
* @returns {Function} Cleanup function to remove message listeners
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```tsx
|
|
15
|
-
* function ChatComponent() {
|
|
16
|
-
* const [chatMessages, setChatMessages] = useState([]);
|
|
17
|
-
* const cleanup = useMessageHandler(room, setChatMessages);
|
|
18
|
-
*
|
|
19
|
-
* useEffect(() => {
|
|
20
|
-
* return cleanup;
|
|
21
|
-
* }, []);
|
|
22
|
-
* }
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare const useMessageHandler: (room: Room, setChatMessages: React.Dispatch<React.SetStateAction<ChatMessage[]>>, onUserTranscription?: (text: string) => void, setIsBotResponding?: (responding: boolean) => void, isBotResponding?: boolean, setIsSpeaking?: (speaking: boolean) => void, onConnectionStateChange?: (isConnected: boolean) => void, setActivity?: (activity: string) => void, setIsBotReady?: (isReady: boolean) => void) => {
|
|
26
|
-
setupMessageListener: () => (() => void) | undefined;
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=useMessageHandler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageHandler.d.ts","sourceRoot":"","sources":["../../src/hooks/useMessageHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA8B,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,IAAI,EACV,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,EACpE,sBAAsB,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5C,qBAAqB,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,EAClD,kBAAkB,OAAO,EACzB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,EAC3C,0BAA0B,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,EACxD,cAAc,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACxC,gBAAgB,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI;;CA8Q3C,CAAC"}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import { useCallback } from "react";
|
|
2
|
-
import { RoomEvent } from "livekit-client";
|
|
3
|
-
import { logger } from "../utils/logger";
|
|
4
|
-
/**
|
|
5
|
-
* Hook for handling incoming messages from Convai.
|
|
6
|
-
*
|
|
7
|
-
* Sets up data message listeners to process various message types
|
|
8
|
-
* from the AI assistant and updates the chat message history.
|
|
9
|
-
*
|
|
10
|
-
* @param {Room} room - LiveKit room instance
|
|
11
|
-
* @param {Function} setChatMessages - Function to update chat messages state
|
|
12
|
-
* @returns {Function} Cleanup function to remove message listeners
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```tsx
|
|
16
|
-
* function ChatComponent() {
|
|
17
|
-
* const [chatMessages, setChatMessages] = useState([]);
|
|
18
|
-
* const cleanup = useMessageHandler(room, setChatMessages);
|
|
19
|
-
*
|
|
20
|
-
* useEffect(() => {
|
|
21
|
-
* return cleanup;
|
|
22
|
-
* }, []);
|
|
23
|
-
* }
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export const useMessageHandler = (room, setChatMessages, onUserTranscription, setIsBotResponding, isBotResponding, setIsSpeaking, onConnectionStateChange, setActivity, setIsBotReady) => {
|
|
27
|
-
const handleDataReceived = useCallback((payload, participant) => {
|
|
28
|
-
try {
|
|
29
|
-
// Decode bytes to string
|
|
30
|
-
const decoder = new TextDecoder();
|
|
31
|
-
const messageString = decoder.decode(payload);
|
|
32
|
-
// Parse JSON
|
|
33
|
-
const messageData = JSON.parse(messageString);
|
|
34
|
-
// Extract and categorize messages for chat display
|
|
35
|
-
const timestamp = new Date().toISOString();
|
|
36
|
-
const messageId = `${messageData.type}-${Date.now()}-${Math.random()}`;
|
|
37
|
-
// Handle different message types
|
|
38
|
-
switch (messageData.type) {
|
|
39
|
-
// User text messages - Skip these, only allow user-transcription
|
|
40
|
-
case "user_text_message":
|
|
41
|
-
case "user-llm-text":
|
|
42
|
-
case "text-input":
|
|
43
|
-
case "user-input":
|
|
44
|
-
case "text-message":
|
|
45
|
-
case "chat-message":
|
|
46
|
-
case "input-text":
|
|
47
|
-
case "message":
|
|
48
|
-
// Skip user text messages - only allow user-transcription
|
|
49
|
-
break;
|
|
50
|
-
// Bot Ready - Bot is ready, connection should be true
|
|
51
|
-
case "bot-ready":
|
|
52
|
-
// Set connection state to true when bot is ready
|
|
53
|
-
if (onConnectionStateChange) {
|
|
54
|
-
onConnectionStateChange(true);
|
|
55
|
-
}
|
|
56
|
-
// Set bot-ready state to true - bot can now receive messages
|
|
57
|
-
if (setIsBotReady) {
|
|
58
|
-
setIsBotReady(true);
|
|
59
|
-
}
|
|
60
|
-
// Update activity state
|
|
61
|
-
if (setActivity) {
|
|
62
|
-
setActivity("Connected");
|
|
63
|
-
}
|
|
64
|
-
break;
|
|
65
|
-
// Bot LLM Started - Begin streaming response
|
|
66
|
-
case "bot-llm-started":
|
|
67
|
-
if (setIsBotResponding) {
|
|
68
|
-
setIsBotResponding(true);
|
|
69
|
-
}
|
|
70
|
-
// Mark any accumulated user message as final before starting bot response
|
|
71
|
-
setChatMessages((prevMessages) => {
|
|
72
|
-
const lastMessage = prevMessages[prevMessages.length - 1];
|
|
73
|
-
if (lastMessage && lastMessage.type === "user-transcription" && lastMessage.isFinal) {
|
|
74
|
-
// Mark the last user message as no longer accumulating
|
|
75
|
-
return [
|
|
76
|
-
...prevMessages.slice(0, -1),
|
|
77
|
-
{ ...lastMessage, isFinal: false }
|
|
78
|
-
];
|
|
79
|
-
}
|
|
80
|
-
return prevMessages;
|
|
81
|
-
});
|
|
82
|
-
// Add initial streaming message to chat
|
|
83
|
-
const streamingMessage = {
|
|
84
|
-
id: messageId,
|
|
85
|
-
type: "bot-llm-text",
|
|
86
|
-
content: "",
|
|
87
|
-
timestamp: timestamp,
|
|
88
|
-
isFinal: true,
|
|
89
|
-
};
|
|
90
|
-
setChatMessages((prev) => [...prev, streamingMessage]);
|
|
91
|
-
break;
|
|
92
|
-
// Bot LLM Text Messages - Streaming chunks
|
|
93
|
-
case "bot-llm-text":
|
|
94
|
-
if (messageData.data?.text) {
|
|
95
|
-
const newChunk = messageData.data.text;
|
|
96
|
-
// Update the streaming message in chat
|
|
97
|
-
setChatMessages((prevMessages) => {
|
|
98
|
-
const lastMessage = prevMessages[prevMessages.length - 1];
|
|
99
|
-
if (lastMessage && lastMessage.isFinal) {
|
|
100
|
-
return [
|
|
101
|
-
...prevMessages.slice(0, -1),
|
|
102
|
-
{ ...lastMessage, content: lastMessage.content + newChunk }
|
|
103
|
-
];
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
// If no streaming message exists yet, create one
|
|
107
|
-
const streamingMessage = {
|
|
108
|
-
id: `${messageData.type}-${Date.now()}-${Math.random()}`,
|
|
109
|
-
type: "bot-llm-text",
|
|
110
|
-
content: newChunk,
|
|
111
|
-
timestamp: new Date().toISOString(),
|
|
112
|
-
isFinal: true,
|
|
113
|
-
};
|
|
114
|
-
return [...prevMessages, streamingMessage];
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
break;
|
|
119
|
-
// Bot LLM Stopped - Complete streaming response
|
|
120
|
-
case "bot-llm-stopped":
|
|
121
|
-
// Get the most up-to-date content from the current message in chat
|
|
122
|
-
setChatMessages((prevMessages) => {
|
|
123
|
-
const lastMessage = prevMessages[prevMessages.length - 1];
|
|
124
|
-
if (lastMessage && lastMessage.isFinal) {
|
|
125
|
-
const finalContent = lastMessage.content;
|
|
126
|
-
return [
|
|
127
|
-
...prevMessages.slice(0, -1),
|
|
128
|
-
{ ...lastMessage, content: finalContent, isFinal: false }
|
|
129
|
-
];
|
|
130
|
-
}
|
|
131
|
-
return prevMessages;
|
|
132
|
-
});
|
|
133
|
-
// Clear streaming state
|
|
134
|
-
if (setIsBotResponding) {
|
|
135
|
-
setIsBotResponding(false);
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
// User Transcription Messages
|
|
139
|
-
case "user-transcription":
|
|
140
|
-
if (messageData.data?.text) {
|
|
141
|
-
const messageContent = messageData.data.text;
|
|
142
|
-
if (messageData.data?.final) {
|
|
143
|
-
// Final transcription - accumulate in single bubble until bot responds
|
|
144
|
-
setChatMessages((prev) => {
|
|
145
|
-
const lastMessage = prev[prev.length - 1];
|
|
146
|
-
// Check if last message is an accumulating user message (isFinal=true)
|
|
147
|
-
if (lastMessage &&
|
|
148
|
-
lastMessage.type === "user-transcription" &&
|
|
149
|
-
lastMessage.isFinal === true) {
|
|
150
|
-
// Accumulate: append new content to existing message with space
|
|
151
|
-
const accumulatedContent = lastMessage.content.trim() + " " + messageContent.trim();
|
|
152
|
-
return [
|
|
153
|
-
...prev.slice(0, -1),
|
|
154
|
-
{
|
|
155
|
-
...lastMessage,
|
|
156
|
-
content: accumulatedContent,
|
|
157
|
-
timestamp: timestamp // Update timestamp to most recent
|
|
158
|
-
}
|
|
159
|
-
];
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
// Start new accumulating message (isFinal=true means "still accumulating")
|
|
163
|
-
const userMessage = {
|
|
164
|
-
id: messageId,
|
|
165
|
-
type: "user-transcription",
|
|
166
|
-
content: messageContent,
|
|
167
|
-
timestamp: timestamp,
|
|
168
|
-
isFinal: true, // Mark as accumulating
|
|
169
|
-
};
|
|
170
|
-
return [...prev, userMessage];
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
// Clear live transcription when final
|
|
174
|
-
if (onUserTranscription) {
|
|
175
|
-
onUserTranscription('');
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
// Non-final transcription - show in input field
|
|
180
|
-
if (onUserTranscription) {
|
|
181
|
-
onUserTranscription(messageContent);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
break;
|
|
186
|
-
// Bot Emotion Messages
|
|
187
|
-
case "bot-emotion":
|
|
188
|
-
if (messageData.data?.emotion) {
|
|
189
|
-
const emotionMessage = {
|
|
190
|
-
id: messageId,
|
|
191
|
-
type: "bot-emotion",
|
|
192
|
-
content: `${messageData.data.emotion} (scale: ${messageData.data.scale || 1})`,
|
|
193
|
-
timestamp,
|
|
194
|
-
};
|
|
195
|
-
setChatMessages((prev) => [...prev, emotionMessage]);
|
|
196
|
-
}
|
|
197
|
-
break;
|
|
198
|
-
// Bot Started Speaking
|
|
199
|
-
case "bot-started-speaking":
|
|
200
|
-
if (setIsSpeaking) {
|
|
201
|
-
setIsSpeaking(true);
|
|
202
|
-
}
|
|
203
|
-
break;
|
|
204
|
-
// Bot Stopped Speaking
|
|
205
|
-
case "bot-stopped-speaking":
|
|
206
|
-
if (setIsSpeaking) {
|
|
207
|
-
setIsSpeaking(false);
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
// Action Response Messages
|
|
211
|
-
case "action-response":
|
|
212
|
-
if (messageData.data?.actions) {
|
|
213
|
-
const actionMessage = {
|
|
214
|
-
id: messageId,
|
|
215
|
-
type: "action",
|
|
216
|
-
content: `Actions: ${messageData.data.actions.join(", ")}`,
|
|
217
|
-
timestamp,
|
|
218
|
-
};
|
|
219
|
-
setChatMessages((prev) => [...prev, actionMessage]);
|
|
220
|
-
}
|
|
221
|
-
break;
|
|
222
|
-
// Behavior Tree Response Messages
|
|
223
|
-
case "behavior-tree-response":
|
|
224
|
-
if (messageData.data?.narrative_section_id) {
|
|
225
|
-
const behaviorMessage = {
|
|
226
|
-
id: messageId,
|
|
227
|
-
type: "behavior-tree",
|
|
228
|
-
content: `Narrative Section: ${messageData.data.narrative_section_id}`,
|
|
229
|
-
timestamp,
|
|
230
|
-
};
|
|
231
|
-
setChatMessages((prev) => [...prev, behaviorMessage]);
|
|
232
|
-
}
|
|
233
|
-
break;
|
|
234
|
-
// Moderation Response Messages
|
|
235
|
-
case "moderation-response":
|
|
236
|
-
break;
|
|
237
|
-
// Trigger Messages
|
|
238
|
-
case "trigger-message":
|
|
239
|
-
break;
|
|
240
|
-
// Template Keys Updates
|
|
241
|
-
case "update-template-keys":
|
|
242
|
-
break;
|
|
243
|
-
// Dynamic Info Updates
|
|
244
|
-
case "update-dynamic-info":
|
|
245
|
-
break;
|
|
246
|
-
}
|
|
247
|
-
// Silently ignore any unhandled message types
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
logger.error("Failed to parse data message:", error);
|
|
251
|
-
}
|
|
252
|
-
}, [setChatMessages, onUserTranscription, setIsBotResponding, isBotResponding, setIsSpeaking, onConnectionStateChange, setActivity]);
|
|
253
|
-
const setupMessageListener = useCallback(() => {
|
|
254
|
-
if (!room)
|
|
255
|
-
return;
|
|
256
|
-
// Listen for data received events
|
|
257
|
-
room.on(RoomEvent.DataReceived, handleDataReceived);
|
|
258
|
-
// Return cleanup function
|
|
259
|
-
return () => {
|
|
260
|
-
room.off(RoomEvent.DataReceived, handleDataReceived);
|
|
261
|
-
};
|
|
262
|
-
}, [room, handleDataReceived]);
|
|
263
|
-
return {
|
|
264
|
-
setupMessageListener,
|
|
265
|
-
};
|
|
266
|
-
};
|
|
267
|
-
//# sourceMappingURL=useMessageHandler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageHandler.js","sourceRoot":"","sources":["../../src/hooks/useMessageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Room } from "livekit-client";
|
|
2
|
-
export interface ScreenShareControls {
|
|
3
|
-
isScreenShareEnabled: boolean;
|
|
4
|
-
isScreenShareActive: boolean;
|
|
5
|
-
enableScreenShare: () => Promise<void>;
|
|
6
|
-
disableScreenShare: () => Promise<void>;
|
|
7
|
-
toggleScreenShare: () => Promise<void>;
|
|
8
|
-
enableScreenShareWithAudio: () => Promise<void>;
|
|
9
|
-
getScreenShareTracks: () => Promise<any[]>;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Hook for managing screen sharing controls in LiveKit.
|
|
13
|
-
*
|
|
14
|
-
* Provides methods to enable/disable screen sharing, manage screen share state,
|
|
15
|
-
* and handle screen sharing with audio support.
|
|
16
|
-
*
|
|
17
|
-
* Features:
|
|
18
|
-
* - Includes current tab in screen share options (selfBrowserSurface: "include")
|
|
19
|
-
* - Supports surface switching during screen share
|
|
20
|
-
* - Supports system audio capture
|
|
21
|
-
*
|
|
22
|
-
* Note: By default, browsers exclude the current tab from screen share to prevent
|
|
23
|
-
* infinite recursion ("hall of mirrors" effect). This hook enables it by setting
|
|
24
|
-
* selfBrowserSurface: "include", but be aware this may cause visual feedback loops.
|
|
25
|
-
*
|
|
26
|
-
* @param {Room | null} room - LiveKit room instance
|
|
27
|
-
* @returns {ScreenShareControls} Object containing screen share control methods and state
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```tsx
|
|
31
|
-
* function ScreenShareControls() {
|
|
32
|
-
* const screenShareControls = useScreenShare(room);
|
|
33
|
-
*
|
|
34
|
-
* return (
|
|
35
|
-
* <div>
|
|
36
|
-
* <button onClick={screenShareControls.toggleScreenShare}>
|
|
37
|
-
* {screenShareControls.isScreenShareEnabled ? 'Stop Sharing' : 'Share Screen'}
|
|
38
|
-
* </button>
|
|
39
|
-
* </div>
|
|
40
|
-
* );
|
|
41
|
-
* }
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
export declare const useScreenShare: (room: Room | null) => ScreenShareControls;
|
|
45
|
-
//# sourceMappingURL=useScreenShare.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,MAAM,WAAW,mBAAmB;IAElC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAG7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,0BAA0B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGhD,oBAAoB,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,GAAG,IAAI,KAAG,mBA0KlD,CAAC"}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { useCallback, useState, useEffect } from "react";
|
|
2
|
-
import { logger } from "../utils/logger";
|
|
3
|
-
/**
|
|
4
|
-
* Hook for managing screen sharing controls in LiveKit.
|
|
5
|
-
*
|
|
6
|
-
* Provides methods to enable/disable screen sharing, manage screen share state,
|
|
7
|
-
* and handle screen sharing with audio support.
|
|
8
|
-
*
|
|
9
|
-
* Features:
|
|
10
|
-
* - Includes current tab in screen share options (selfBrowserSurface: "include")
|
|
11
|
-
* - Supports surface switching during screen share
|
|
12
|
-
* - Supports system audio capture
|
|
13
|
-
*
|
|
14
|
-
* Note: By default, browsers exclude the current tab from screen share to prevent
|
|
15
|
-
* infinite recursion ("hall of mirrors" effect). This hook enables it by setting
|
|
16
|
-
* selfBrowserSurface: "include", but be aware this may cause visual feedback loops.
|
|
17
|
-
*
|
|
18
|
-
* @param {Room | null} room - LiveKit room instance
|
|
19
|
-
* @returns {ScreenShareControls} Object containing screen share control methods and state
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```tsx
|
|
23
|
-
* function ScreenShareControls() {
|
|
24
|
-
* const screenShareControls = useScreenShare(room);
|
|
25
|
-
*
|
|
26
|
-
* return (
|
|
27
|
-
* <div>
|
|
28
|
-
* <button onClick={screenShareControls.toggleScreenShare}>
|
|
29
|
-
* {screenShareControls.isScreenShareEnabled ? 'Stop Sharing' : 'Share Screen'}
|
|
30
|
-
* </button>
|
|
31
|
-
* </div>
|
|
32
|
-
* );
|
|
33
|
-
* }
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export const useScreenShare = (room) => {
|
|
37
|
-
const [isScreenShareEnabled, setIsScreenShareEnabled] = useState(false);
|
|
38
|
-
const [isScreenShareActive, setIsScreenShareActive] = useState(false);
|
|
39
|
-
// Update screen share state when room changes
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
if (!room || room.state === 'disconnected') {
|
|
42
|
-
setIsScreenShareEnabled(false);
|
|
43
|
-
setIsScreenShareActive(false);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const localParticipant = room.localParticipant;
|
|
47
|
-
// Set initial state
|
|
48
|
-
setIsScreenShareEnabled(localParticipant.isScreenShareEnabled);
|
|
49
|
-
setIsScreenShareActive(localParticipant.isScreenShareEnabled);
|
|
50
|
-
// Listen for screen share state changes
|
|
51
|
-
const handleTrackPublished = (track) => {
|
|
52
|
-
if (track.source === 'screen_share') {
|
|
53
|
-
setIsScreenShareActive(true);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const handleTrackUnpublished = (track) => {
|
|
57
|
-
if (track.source === 'screen_share') {
|
|
58
|
-
setIsScreenShareActive(false);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
const handleTrackMuted = (track) => {
|
|
62
|
-
if (track.source === 'screen_share') {
|
|
63
|
-
setIsScreenShareActive(false);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
const handleTrackUnmuted = (track) => {
|
|
67
|
-
if (track.source === 'screen_share') {
|
|
68
|
-
setIsScreenShareActive(true);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
// Subscribe to events
|
|
72
|
-
localParticipant.on('trackPublished', handleTrackPublished);
|
|
73
|
-
localParticipant.on('trackUnpublished', handleTrackUnpublished);
|
|
74
|
-
localParticipant.on('trackMuted', handleTrackMuted);
|
|
75
|
-
localParticipant.on('trackUnmuted', handleTrackUnmuted);
|
|
76
|
-
return () => {
|
|
77
|
-
localParticipant.off('trackPublished', handleTrackPublished);
|
|
78
|
-
localParticipant.off('trackUnpublished', handleTrackUnpublished);
|
|
79
|
-
localParticipant.off('trackMuted', handleTrackMuted);
|
|
80
|
-
localParticipant.off('trackUnmuted', handleTrackUnmuted);
|
|
81
|
-
};
|
|
82
|
-
}, [room, room?.state]);
|
|
83
|
-
// Enable screen share
|
|
84
|
-
const enableScreenShare = useCallback(async () => {
|
|
85
|
-
if (!room) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
try {
|
|
89
|
-
// Use setScreenShareEnabled with options to include current tab
|
|
90
|
-
await room.localParticipant.setScreenShareEnabled(true, {
|
|
91
|
-
// @ts-ignore - selfBrowserSurface is a valid Chrome option but may not be in types
|
|
92
|
-
selfBrowserSurface: "include",
|
|
93
|
-
surfaceSwitching: "include",
|
|
94
|
-
systemAudio: "include",
|
|
95
|
-
});
|
|
96
|
-
setIsScreenShareEnabled(true);
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
logger.error("Failed to enable screen share:", error);
|
|
100
|
-
throw error;
|
|
101
|
-
}
|
|
102
|
-
}, [room]);
|
|
103
|
-
// Disable screen share
|
|
104
|
-
const disableScreenShare = useCallback(async () => {
|
|
105
|
-
if (!room) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
await room.localParticipant.setScreenShareEnabled(false);
|
|
110
|
-
setIsScreenShareEnabled(false);
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
logger.error("Failed to disable screen share:", error);
|
|
114
|
-
throw error;
|
|
115
|
-
}
|
|
116
|
-
}, [room]);
|
|
117
|
-
// Toggle screen share
|
|
118
|
-
const toggleScreenShare = useCallback(async () => {
|
|
119
|
-
if (isScreenShareEnabled) {
|
|
120
|
-
await disableScreenShare();
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
await enableScreenShare();
|
|
124
|
-
}
|
|
125
|
-
}, [isScreenShareEnabled, enableScreenShare, disableScreenShare]);
|
|
126
|
-
// Enable screen share with audio
|
|
127
|
-
const enableScreenShareWithAudio = useCallback(async () => {
|
|
128
|
-
if (!room) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
// Create screen tracks with audio enabled and include current tab
|
|
133
|
-
const tracks = await room.localParticipant.createScreenTracks({
|
|
134
|
-
audio: true,
|
|
135
|
-
// @ts-ignore - selfBrowserSurface is a valid Chrome option but may not be in types
|
|
136
|
-
selfBrowserSurface: "include",
|
|
137
|
-
surfaceSwitching: "include",
|
|
138
|
-
systemAudio: "include",
|
|
139
|
-
});
|
|
140
|
-
// Publish each track
|
|
141
|
-
tracks.forEach((track) => {
|
|
142
|
-
room.localParticipant.publishTrack(track);
|
|
143
|
-
});
|
|
144
|
-
setIsScreenShareEnabled(true);
|
|
145
|
-
}
|
|
146
|
-
catch (error) {
|
|
147
|
-
logger.error("Failed to enable screen share with audio:", error);
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
}, [room]);
|
|
151
|
-
// Get screen share tracks
|
|
152
|
-
const getScreenShareTracks = useCallback(async () => {
|
|
153
|
-
if (!room) {
|
|
154
|
-
return [];
|
|
155
|
-
}
|
|
156
|
-
try {
|
|
157
|
-
const localParticipant = room.localParticipant;
|
|
158
|
-
const screenShareTracks = [];
|
|
159
|
-
// Get all published tracks
|
|
160
|
-
localParticipant.trackPublications.forEach((publication) => {
|
|
161
|
-
if (publication.source === 'screen_share' && publication.track) {
|
|
162
|
-
screenShareTracks.push(publication.track);
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
return screenShareTracks;
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
logger.error("Failed to get screen share tracks:", error);
|
|
169
|
-
throw error;
|
|
170
|
-
}
|
|
171
|
-
}, [room]);
|
|
172
|
-
return {
|
|
173
|
-
// Screen share state
|
|
174
|
-
isScreenShareEnabled,
|
|
175
|
-
isScreenShareActive,
|
|
176
|
-
// Screen share controls
|
|
177
|
-
enableScreenShare,
|
|
178
|
-
disableScreenShare,
|
|
179
|
-
toggleScreenShare,
|
|
180
|
-
// Screen share with audio
|
|
181
|
-
enableScreenShareWithAudio,
|
|
182
|
-
// Screen share settings
|
|
183
|
-
getScreenShareTracks,
|
|
184
|
-
};
|
|
185
|
-
};
|
|
186
|
-
//# sourceMappingURL=useScreenShare.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Room } from "livekit-client";
|
|
2
|
-
export interface TemplateKeys {
|
|
3
|
-
[key: string]: string;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Hook for updating template keys in Convai.
|
|
7
|
-
*
|
|
8
|
-
* Updates dynamic template variables that can be used in AI responses
|
|
9
|
-
* to provide personalized and contextual information.
|
|
10
|
-
*
|
|
11
|
-
* @param {Room} room - LiveKit room instance
|
|
12
|
-
* @param {string} participantSid - Participant session ID
|
|
13
|
-
* @returns {Object} Object containing updateTemplateKeys function
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```tsx
|
|
17
|
-
* function TemplateComponent() {
|
|
18
|
-
* const { updateTemplateKeys } = useTemplateKeysUpdater(room, participantSid);
|
|
19
|
-
*
|
|
20
|
-
* const handleUpdate = () => {
|
|
21
|
-
* updateTemplateKeys({
|
|
22
|
-
* user_name: "John",
|
|
23
|
-
* location: "New York",
|
|
24
|
-
* mood: "happy"
|
|
25
|
-
* });
|
|
26
|
-
* };
|
|
27
|
-
*
|
|
28
|
-
* return <button onClick={handleUpdate}>Update Templates</button>;
|
|
29
|
-
* }
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export declare const useTemplateKeysUpdater: (room: Room, participantSid: string) => {
|
|
33
|
-
updateTemplateKeys: (templateKeys: TemplateKeys) => void;
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=useTemplateKeysUpdater.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTemplateKeysUpdater.d.ts","sourceRoot":"","sources":["../../src/hooks/useTemplateKeysUpdater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,IAAI,EACV,gBAAgB,MAAM;uCAGL,YAAY;CA0B9B,CAAC"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { useCallback } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Hook for updating template keys in Convai.
|
|
4
|
-
*
|
|
5
|
-
* Updates dynamic template variables that can be used in AI responses
|
|
6
|
-
* to provide personalized and contextual information.
|
|
7
|
-
*
|
|
8
|
-
* @param {Room} room - LiveKit room instance
|
|
9
|
-
* @param {string} participantSid - Participant session ID
|
|
10
|
-
* @returns {Object} Object containing updateTemplateKeys function
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```tsx
|
|
14
|
-
* function TemplateComponent() {
|
|
15
|
-
* const { updateTemplateKeys } = useTemplateKeysUpdater(room, participantSid);
|
|
16
|
-
*
|
|
17
|
-
* const handleUpdate = () => {
|
|
18
|
-
* updateTemplateKeys({
|
|
19
|
-
* user_name: "John",
|
|
20
|
-
* location: "New York",
|
|
21
|
-
* mood: "happy"
|
|
22
|
-
* });
|
|
23
|
-
* };
|
|
24
|
-
*
|
|
25
|
-
* return <button onClick={handleUpdate}>Update Templates</button>;
|
|
26
|
-
* }
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export const useTemplateKeysUpdater = (room, participantSid) => {
|
|
30
|
-
const updateTemplateKeys = useCallback((templateKeys) => {
|
|
31
|
-
if (room &&
|
|
32
|
-
room.localParticipant &&
|
|
33
|
-
Object.keys(templateKeys).length > 0) {
|
|
34
|
-
const message = {
|
|
35
|
-
type: "update-template-keys",
|
|
36
|
-
data: {
|
|
37
|
-
template_keys: templateKeys,
|
|
38
|
-
participant_sid: participantSid || room.localParticipant.sid,
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
const encodedData = new TextEncoder().encode(JSON.stringify(message));
|
|
42
|
-
room.localParticipant.publishData(encodedData, {
|
|
43
|
-
reliable: true,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}, [room, participantSid]);
|
|
47
|
-
return {
|
|
48
|
-
updateTemplateKeys,
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
//# sourceMappingURL=useTemplateKeysUpdater.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTemplateKeysUpdater.js","sourceRoot":"","sources":["../../src/hooks/useTemplateKeysUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAQpC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAU,EACV,cAAsB,EACtB,EAAE;IACF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,YAA0B,EAAE,EAAE;QAC7B,IACE,IAAI;YACJ,IAAI,CAAC,gBAAgB;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;YACD,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE;oBACJ,aAAa,EAAE,YAAY;oBAC3B,eAAe,EAAE,cAAc,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG;iBAC7D;aACF,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,EAAE;gBAC7C,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EACD,CAAC,IAAI,EAAE,cAAc,CAAC,CACvB,CAAC;IAEF,OAAO;QACL,kBAAkB;KACnB,CAAC;AACJ,CAAC,CAAC"}
|