@revrag-ai/embed-react-native 1.0.24 → 1.0.26
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 +14 -0
- package/dist/commonjs/api/api.js +1 -3
- package/dist/commonjs/api/api.js.map +1 -1
- package/dist/commonjs/components/Embed/EmbedButton.js +2 -2
- package/dist/commonjs/components/Embed/EmbedButton.js.map +1 -1
- package/dist/commonjs/components/Embed/EmbedVoice.js +1 -2
- package/dist/commonjs/components/Embed/EmbedVoice.js.map +1 -1
- package/dist/commonjs/context/EmbedProvider.js +16 -12
- package/dist/commonjs/context/EmbedProvider.js.map +1 -1
- package/dist/commonjs/events/agent-event-emitter.js +0 -1
- package/dist/commonjs/events/agent-event-emitter.js.map +1 -1
- package/dist/commonjs/events/embed.event.js +11 -3
- package/dist/commonjs/events/embed.event.js.map +1 -1
- package/dist/commonjs/hooks/voiceagent.js +213 -78
- package/dist/commonjs/hooks/voiceagent.js.map +1 -1
- package/dist/commonjs/utils/constant.js +1 -1
- package/dist/commonjs/utils/permision.js +0 -2
- package/dist/commonjs/utils/permision.js.map +1 -1
- package/dist/commonjs/utils/reanimated.helper.js +0 -3
- package/dist/commonjs/utils/reanimated.helper.js.map +1 -1
- package/dist/module/api/api.js +1 -3
- package/dist/module/api/api.js.map +1 -1
- package/dist/module/components/Embed/EmbedButton.js +3 -3
- package/dist/module/components/Embed/EmbedButton.js.map +1 -1
- package/dist/module/components/Embed/EmbedVoice.js +1 -2
- package/dist/module/components/Embed/EmbedVoice.js.map +1 -1
- package/dist/module/context/EmbedProvider.js +16 -12
- package/dist/module/context/EmbedProvider.js.map +1 -1
- package/dist/module/events/agent-event-emitter.js +0 -1
- package/dist/module/events/agent-event-emitter.js.map +1 -1
- package/dist/module/events/embed.event.js +13 -4
- package/dist/module/events/embed.event.js.map +1 -1
- package/dist/module/hooks/voiceagent.js +214 -79
- package/dist/module/hooks/voiceagent.js.map +1 -1
- package/dist/module/utils/constant.js +1 -1
- package/dist/module/utils/permision.js +0 -2
- package/dist/module/utils/permision.js.map +1 -1
- package/dist/module/utils/reanimated.helper.js +0 -3
- package/dist/module/utils/reanimated.helper.js.map +1 -1
- package/dist/typescript/src/components/Embed/EmbedVoice.d.ts.map +1 -1
- package/dist/typescript/src/context/EmbedProvider.d.ts.map +1 -1
- package/dist/typescript/src/events/agent-event-emitter.d.ts.map +1 -1
- package/dist/typescript/src/events/embed.event.d.ts +4 -3
- package/dist/typescript/src/events/embed.event.d.ts.map +1 -1
- package/dist/typescript/src/hooks/voiceagent.d.ts.map +1 -1
- package/dist/typescript/src/utils/constant.d.ts +1 -1
- package/dist/typescript/src/utils/permision.d.ts.map +1 -1
- package/dist/typescript/src/utils/reanimated.helper.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -32,7 +32,7 @@ const Voice = props => {
|
|
|
32
32
|
// Start audio session safely - prevent multiple simultaneous starts
|
|
33
33
|
const startAudioSession = async () => {
|
|
34
34
|
if (audioSessionActive || audioSessionStarting) {
|
|
35
|
-
|
|
35
|
+
// Avoid repeated logs; just skip if already active/starting
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
try {
|
|
@@ -104,7 +104,6 @@ const Voice = props => {
|
|
|
104
104
|
|
|
105
105
|
// Safety check - don't render if we don't have valid props
|
|
106
106
|
if (!url || !token) {
|
|
107
|
-
console.warn('Voice component missing url or token');
|
|
108
107
|
return null;
|
|
109
108
|
}
|
|
110
109
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioSession","LiveKitRoom","useEffect","useRef","useState","jsx","_jsx","audioSessionActive","audioSessionStarting","audioSessionStopping","activeConnectionToken","Voice","props","url","token","onDisconnected","onConnected","roomRef","audioSessionStarted","setAudioSessionStarted","mountedRef","connectedRef","startAudioSession","
|
|
1
|
+
{"version":3,"names":["AudioSession","LiveKitRoom","useEffect","useRef","useState","jsx","_jsx","audioSessionActive","audioSessionStarting","audioSessionStopping","activeConnectionToken","Voice","props","url","token","onDisconnected","onConnected","roomRef","audioSessionStarted","setAudioSessionStarted","mountedRef","connectedRef","startAudioSession","current","err","console","error","stopAudioSession","room","state","serverUrl","screen","audio","undefined"],"sourceRoot":"../../../../src","sources":["components/Embed/EmbedVoice.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
17
17
|
import { EmbedButton } from "../components/Embed/EmbedButton.js";
|
|
18
18
|
import Embed, { EventKeys } from "../events/embed.event.js";
|
|
19
|
+
import { setAgentData } from "../store/store.key.js";
|
|
19
20
|
|
|
20
21
|
/* ============================================================================
|
|
21
22
|
* TYPE DEFINITIONS
|
|
@@ -528,20 +529,20 @@ export const EmbedProvider = ({
|
|
|
528
529
|
setShowEmbedButton(shouldShowButton);
|
|
529
530
|
}
|
|
530
531
|
|
|
531
|
-
//
|
|
532
|
+
// Persist screen context locally for later event enrichment
|
|
532
533
|
if (routeInfo) {
|
|
533
534
|
try {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
535
|
+
await setAgentData({
|
|
536
|
+
screen: routeInfo.currentScreen ?? screenName ?? 'default',
|
|
537
|
+
fullPath: routeInfo.fullPath,
|
|
538
|
+
allRoutes: routeInfo.allRoutes,
|
|
539
|
+
depth: routeInfo.depth,
|
|
540
|
+
parentRoute: routeInfo.parentRoute,
|
|
540
541
|
app_version: _appVersion,
|
|
541
542
|
timestamp: new Date().toISOString()
|
|
542
|
-
});
|
|
543
|
+
}, EventKeys.SCREEN_STATE);
|
|
543
544
|
} catch (error) {
|
|
544
|
-
// Silently fail -
|
|
545
|
+
// Silently fail - storage should not break the app
|
|
545
546
|
}
|
|
546
547
|
}
|
|
547
548
|
} catch (error) {
|
|
@@ -565,14 +566,16 @@ export const EmbedProvider = ({
|
|
|
565
566
|
}
|
|
566
567
|
let unsubscribe;
|
|
567
568
|
let delayTimer;
|
|
569
|
+
let isListenerActive = false;
|
|
568
570
|
|
|
569
571
|
/**
|
|
570
572
|
* Set up navigation state listener
|
|
571
573
|
*/
|
|
572
574
|
const setupListener = () => {
|
|
573
|
-
// Only set up if navigation ref is ready
|
|
574
|
-
if (navRef.current) {
|
|
575
|
+
// Only set up if navigation ref is ready and listener not already active
|
|
576
|
+
if (navRef.current && !isListenerActive) {
|
|
575
577
|
unsubscribe = navRef.current.addListener('state', trackScreen);
|
|
578
|
+
isListenerActive = true;
|
|
576
579
|
trackScreen(); // Track initial screen immediately
|
|
577
580
|
}
|
|
578
581
|
};
|
|
@@ -582,7 +585,7 @@ export const EmbedProvider = ({
|
|
|
582
585
|
|
|
583
586
|
// Also set up after delay in case navigation wasn't ready
|
|
584
587
|
delayTimer = setTimeout(() => {
|
|
585
|
-
if (!
|
|
588
|
+
if (!isListenerActive && navRef.current) {
|
|
586
589
|
setupListener();
|
|
587
590
|
}
|
|
588
591
|
}, NAVIGATION_LISTENER_DELAY);
|
|
@@ -594,6 +597,7 @@ export const EmbedProvider = ({
|
|
|
594
597
|
}
|
|
595
598
|
if (unsubscribe) {
|
|
596
599
|
unsubscribe();
|
|
600
|
+
isListenerActive = false;
|
|
597
601
|
}
|
|
598
602
|
};
|
|
599
603
|
}, [navRef, trackScreen]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","EmbedButton","Embed","EventKeys","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_INCLUDED_SCREENS","NAVIGATION_LISTENER_DELAY","getRouteHierarchy","state","allRoutes","routesByLevel","currentRouteParams","traverse","currentState","level","index","route","routes","name","routeName","push","params","length","currentScreen","parentRoute","undefined","depth","fullPath","join","routeParams","error","getAllRoutes","allRouteNamesSet","Set","collectRoutes","routeNames","Array","isArray","forEach","add","from","getNavigationTree","buildTree","filter","map","node","children","getAllDefinedRoutes","trackEmbedEvent","eventName","properties","Event","FORM_STATE","type","timestamp","Date","toISOString","trackRageClick","elementId","elementType","coordinates","clickCount","eventData","trackFormEvent","formId","eventType","formData","EmbedProvider","navigationRef","includeScreens","appVersion","_appVersion","defaultNavRef","navRef","isMountedRef","showEmbedButton","setShowEmbedButton","allIncludedScreens","Boolean","trackScreen","current","getRootState","routeInfo","screenName","getCurrentRoute","hasIncludeFilter","isIncluded","includes","shouldShowButton","screen","app_version","unsubscribe","delayTimer","setupListener","addListener","setTimeout","clearTimeout"],"sourceRoot":"../../../src","sources":["context/EmbedProvider.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","EmbedButton","Embed","EventKeys","setAgentData","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_INCLUDED_SCREENS","NAVIGATION_LISTENER_DELAY","getRouteHierarchy","state","allRoutes","routesByLevel","currentRouteParams","traverse","currentState","level","index","route","routes","name","routeName","push","params","length","currentScreen","parentRoute","undefined","depth","fullPath","join","routeParams","error","getAllRoutes","allRouteNamesSet","Set","collectRoutes","routeNames","Array","isArray","forEach","add","from","getNavigationTree","buildTree","filter","map","node","children","getAllDefinedRoutes","trackEmbedEvent","eventName","properties","Event","FORM_STATE","type","timestamp","Date","toISOString","trackRageClick","elementId","elementType","coordinates","clickCount","eventData","trackFormEvent","formId","eventType","formData","EmbedProvider","navigationRef","includeScreens","appVersion","_appVersion","defaultNavRef","navRef","isMountedRef","showEmbedButton","setShowEmbedButton","allIncludedScreens","Boolean","trackScreen","current","getRootState","routeInfo","screenName","getCurrentRoute","hasIncludeFilter","isIncluded","includes","shouldShowButton","screen","app_version","SCREEN_STATE","unsubscribe","delayTimer","isListenerActive","setupListener","addListener","setTimeout","clearTimeout"],"sourceRoot":"../../../src","sources":["context/EmbedProvider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -69,7 +69,6 @@ export class AgentEventEmitter {
|
|
|
69
69
|
// Get user identity to include app_user_id
|
|
70
70
|
const userIdentity = await getAgentData(EventKeys.USER_DATA);
|
|
71
71
|
if (!userIdentity?.app_user_id) {
|
|
72
|
-
console.warn(`[AgentEvent] Cannot send ${eventKey} to backend: User identity not found`);
|
|
73
72
|
return;
|
|
74
73
|
}
|
|
75
74
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAgentData","APIService","buildEventPayload","EventKeys","AgentEventEmitter","agentListeners","on","eventKey","callback","push","off","index","indexOf","undefined","splice","emit","data","forEach","error","console","sendToBackend","userIdentity","USER_DATA","app_user_id","
|
|
1
|
+
{"version":3,"names":["getAgentData","APIService","buildEventPayload","EventKeys","AgentEventEmitter","agentListeners","on","eventKey","callback","push","off","index","indexOf","undefined","splice","emit","data","forEach","error","console","sendToBackend","userIdentity","USER_DATA","app_user_id","payload","eventType","apiService","getInstance","paramsData","response","updateUserData","success","removeAllListeners"],"sourceRoot":"../../../src","sources":["events/agent-event-emitter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
* Main class for managing embed events and agent communication
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { getAgentData, setAgentData } from "../store/store.key.js";
|
|
9
8
|
import { APIService } from "../api/api.js";
|
|
9
|
+
import { getAgentData, setAgentData } from "../store/store.key.js";
|
|
10
10
|
import { buildEventPayload } from "../utils/constant.js";
|
|
11
11
|
import { AgentEventEmitter } from "./agent-event-emitter.js";
|
|
12
|
-
import {
|
|
12
|
+
import { EventKeys } from "./embed.types.js";
|
|
13
|
+
import { validateAnalyticsEvent, validateEventKey } from "./embed.validators.js";
|
|
13
14
|
class Embed {
|
|
14
15
|
events = {};
|
|
15
16
|
|
|
@@ -54,9 +55,17 @@ class Embed {
|
|
|
54
55
|
async sendEventToAPI(eventKey, data, key) {
|
|
55
56
|
try {
|
|
56
57
|
const apiService = APIService.getInstance();
|
|
58
|
+
|
|
59
|
+
// Get current screen name and app version from stored data
|
|
60
|
+
const screenData = await getAgentData(EventKeys.SCREEN_STATE);
|
|
61
|
+
const userData = await getAgentData(EventKeys.USER_DATA);
|
|
62
|
+
const currentScreen = screenData?.screen || data?.screen || 'default';
|
|
63
|
+
const appVersion = userData?.app_version || data?.app_version || '1.0.0';
|
|
57
64
|
const paramsData = buildEventPayload({
|
|
58
65
|
...data,
|
|
59
|
-
eventKey: key
|
|
66
|
+
eventKey: key,
|
|
67
|
+
screen: currentScreen,
|
|
68
|
+
app_version: appVersion
|
|
60
69
|
});
|
|
61
70
|
|
|
62
71
|
// Validate analytics events have event_name
|
|
@@ -119,5 +128,5 @@ const embed = new Embed();
|
|
|
119
128
|
export default embed;
|
|
120
129
|
|
|
121
130
|
// Re-export types and enums for convenience
|
|
122
|
-
export {
|
|
131
|
+
export { AgentEvent, EventKeys } from "./embed.types.js";
|
|
123
132
|
//# sourceMappingURL=embed.event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["APIService","getAgentData","setAgentData","buildEventPayload","AgentEventEmitter","EventKeys","validateAnalyticsEvent","validateEventKey","Embed","events","constructor","event","ensureDefaultListener","eventKey","_data","enrichEventData","data","userIdentity","app_user_id","Error","sendEventToAPI","key","apiService","getInstance","screenData","SCREEN_STATE","userData","USER_DATA","currentScreen","screen","appVersion","app_version","paramsData","response","updateUserData","success","error","triggerEventListeners","forEach","callback","Event","on","push","embed","AgentEvent"],"sourceRoot":"../../../src","sources":["events/embed.event.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { ConnectionState, Room } from 'livekit-client';
|
|
4
|
-
import { useEffect, useState } from 'react';
|
|
5
|
-
import { EventKeys } from "../events/embed.event.js";
|
|
4
|
+
import { useEffect, useRef, useState } from 'react';
|
|
6
5
|
import { APIService } from "../api/api.js";
|
|
6
|
+
import { EventKeys } from "../events/embed.event.js";
|
|
7
7
|
import { getAgentData } from "../store/store.key.js";
|
|
8
|
+
// Store original console.warn before patching
|
|
9
|
+
const originalWarn = console.warn;
|
|
10
|
+
|
|
11
|
+
// Patch console.warn to filter duplicate listener warnings from WebRTC/LiveKit
|
|
12
|
+
// This catches warnings that are emitted directly by react-native-webrtc and event-target-shim
|
|
13
|
+
console.warn = (...args) => {
|
|
14
|
+
// Check if this is the duplicate listener warning from WebRTC or event-target-shim
|
|
15
|
+
const message = String(args[0] || '');
|
|
16
|
+
if (message.includes('event listener wasn') && message.includes('added already')) {
|
|
17
|
+
// Silently ignore this warning in both dev and prod
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Pass all other warnings through to original handler
|
|
22
|
+
originalWarn.apply(console, args);
|
|
23
|
+
};
|
|
24
|
+
|
|
8
25
|
// Create a singleton instance of Room that persists across hook instances
|
|
9
26
|
// This ensures we don't create multiple Room instances that could conflict
|
|
10
27
|
let roomInstance = null;
|
|
@@ -13,7 +30,16 @@ let isDisconnecting = false;
|
|
|
13
30
|
let hasListeners = false;
|
|
14
31
|
let connectionAttempts = 0;
|
|
15
32
|
let stableConnectionTimerId = null;
|
|
33
|
+
let reconnectTimerId = null;
|
|
16
34
|
const MAX_CONNECTION_ATTEMPTS = 3;
|
|
35
|
+
|
|
36
|
+
// Store listener references for cleanup
|
|
37
|
+
let connectionChangeHandler = null;
|
|
38
|
+
let trackSubscribedHandler = null;
|
|
39
|
+
let participantDisconnectedHandler = null;
|
|
40
|
+
let mediaDevicesErrorHandler = null;
|
|
41
|
+
let connectionQualityChangedHandler = null;
|
|
42
|
+
let reconnectingHandler = null;
|
|
17
43
|
// Create getters for the room instance
|
|
18
44
|
const getRoomInstance = () => {
|
|
19
45
|
if (!roomInstance) {
|
|
@@ -25,6 +51,10 @@ const getRoomInstance = () => {
|
|
|
25
51
|
publishDefaults: {
|
|
26
52
|
simulcast: false // Disable simulcast to reduce SDP complexity
|
|
27
53
|
}
|
|
54
|
+
// Note: LiveKit uses internal ping/pong mechanism for connection health
|
|
55
|
+
// Ping timeout warnings are normal for temporary network issues and
|
|
56
|
+
// LiveKit will automatically handle reconnection when network recovers
|
|
57
|
+
// These warnings are now suppressed (see setWarningHandler above)
|
|
28
58
|
});
|
|
29
59
|
}
|
|
30
60
|
return roomInstance;
|
|
@@ -39,12 +69,56 @@ const resetConnectionAttempts = () => {
|
|
|
39
69
|
clearTimeout(stableConnectionTimerId);
|
|
40
70
|
stableConnectionTimerId = null;
|
|
41
71
|
}
|
|
72
|
+
|
|
73
|
+
// Clear any pending reconnect timer
|
|
74
|
+
if (reconnectTimerId) {
|
|
75
|
+
clearTimeout(reconnectTimerId);
|
|
76
|
+
reconnectTimerId = null;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Remove all event listeners from the room
|
|
81
|
+
const removeRoomListeners = () => {
|
|
82
|
+
if (roomInstance && hasListeners) {
|
|
83
|
+
try {
|
|
84
|
+
if (connectionChangeHandler) {
|
|
85
|
+
roomInstance.off('connectionStateChanged', connectionChangeHandler);
|
|
86
|
+
connectionChangeHandler = null;
|
|
87
|
+
}
|
|
88
|
+
if (trackSubscribedHandler) {
|
|
89
|
+
roomInstance.off('trackSubscribed', trackSubscribedHandler);
|
|
90
|
+
trackSubscribedHandler = null;
|
|
91
|
+
}
|
|
92
|
+
if (participantDisconnectedHandler) {
|
|
93
|
+
roomInstance.off('participantDisconnected', participantDisconnectedHandler);
|
|
94
|
+
participantDisconnectedHandler = null;
|
|
95
|
+
}
|
|
96
|
+
if (mediaDevicesErrorHandler) {
|
|
97
|
+
roomInstance.off('mediaDevicesError', mediaDevicesErrorHandler);
|
|
98
|
+
mediaDevicesErrorHandler = null;
|
|
99
|
+
}
|
|
100
|
+
if (connectionQualityChangedHandler) {
|
|
101
|
+
roomInstance.off('connectionQualityChanged', connectionQualityChangedHandler);
|
|
102
|
+
connectionQualityChangedHandler = null;
|
|
103
|
+
}
|
|
104
|
+
if (reconnectingHandler) {
|
|
105
|
+
roomInstance.off('reconnecting', reconnectingHandler);
|
|
106
|
+
reconnectingHandler = null;
|
|
107
|
+
}
|
|
108
|
+
hasListeners = false;
|
|
109
|
+
} catch (e) {
|
|
110
|
+
// Silently handle cleanup errors
|
|
111
|
+
}
|
|
112
|
+
}
|
|
42
113
|
};
|
|
43
114
|
|
|
44
115
|
// Cleanup function to reset the room state
|
|
45
116
|
const resetRoomState = () => {
|
|
46
117
|
if (roomInstance) {
|
|
47
118
|
try {
|
|
119
|
+
// Remove event listeners first
|
|
120
|
+
removeRoomListeners();
|
|
121
|
+
|
|
48
122
|
// Only disconnect if currently connected
|
|
49
123
|
if (roomInstance.state !== ConnectionState.Disconnected && !isDisconnecting) {
|
|
50
124
|
isDisconnecting = true;
|
|
@@ -52,9 +126,6 @@ const resetRoomState = () => {
|
|
|
52
126
|
isDisconnecting = false;
|
|
53
127
|
});
|
|
54
128
|
}
|
|
55
|
-
|
|
56
|
-
// Don't destroy the room instance, just reset its state
|
|
57
|
-
hasListeners = false;
|
|
58
129
|
resetConnectionAttempts();
|
|
59
130
|
} catch (e) {
|
|
60
131
|
// todo: handle error resetting room state
|
|
@@ -71,11 +142,76 @@ export const useVoiceAgent = () => {
|
|
|
71
142
|
const room = getRoomInstance();
|
|
72
143
|
return room ? room.state : ConnectionState.Disconnected;
|
|
73
144
|
});
|
|
145
|
+
const roomRef = useRef(getRoomInstance());
|
|
146
|
+
// Guard against React 18 Strict Mode double initialization
|
|
147
|
+
const initializedRef = useRef(false);
|
|
148
|
+
const connectRoomWithToken = useRef();
|
|
149
|
+
|
|
150
|
+
// Initialize connection helper (stable ref to avoid re-definition)
|
|
151
|
+
connectRoomWithToken.current = async details => {
|
|
152
|
+
const room = getRoomInstance();
|
|
153
|
+
|
|
154
|
+
// Prevent multiple connection attempts
|
|
155
|
+
if (isConnecting) return;
|
|
156
|
+
|
|
157
|
+
// Limit connection attempts to prevent infinite loops
|
|
158
|
+
if (connectionAttempts >= MAX_CONNECTION_ATTEMPTS) {
|
|
159
|
+
setError(`Failed to connect after ${MAX_CONNECTION_ATTEMPTS} attempts`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
connectionAttempts++;
|
|
163
|
+
try {
|
|
164
|
+
isConnecting = true;
|
|
165
|
+
|
|
166
|
+
// Clear any pending reconnect timer since we're attempting now
|
|
167
|
+
if (reconnectTimerId) {
|
|
168
|
+
clearTimeout(reconnectTimerId);
|
|
169
|
+
reconnectTimerId = null;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Only attempt to connect if we're disconnected
|
|
173
|
+
if (room.state === ConnectionState.Disconnected) {
|
|
174
|
+
// Update state before connection attempt
|
|
175
|
+
setConnectionState(ConnectionState.Connecting);
|
|
176
|
+
await room.connect(details.server_url, details.token, {
|
|
177
|
+
autoSubscribe: true // Ensure we subscribe to tracks automatically
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// Explicitly set to connected if connection was successful
|
|
181
|
+
setConnectionState(room.state);
|
|
182
|
+
} else if (room.state === ConnectionState.Connected) {
|
|
183
|
+
// Ensure our state matches
|
|
184
|
+
setConnectionState(ConnectionState.Connected);
|
|
185
|
+
} else {
|
|
186
|
+
// Sync our state with the room's current state
|
|
187
|
+
setConnectionState(room.state);
|
|
188
|
+
}
|
|
189
|
+
} catch (err) {
|
|
190
|
+
const message = err instanceof Error ? err.message : 'Failed to connect to room';
|
|
191
|
+
setError(message);
|
|
192
|
+
|
|
193
|
+
// Sync state to disconnected if we failed to connect
|
|
194
|
+
setConnectionState(room.state);
|
|
195
|
+
|
|
196
|
+
// Don't keep retrying if we hit an SDP error
|
|
197
|
+
if (message.includes('SDP') || message.includes('sdp')) {
|
|
198
|
+
// Stop further retries by exhausting attempts
|
|
199
|
+
connectionAttempts = MAX_CONNECTION_ATTEMPTS;
|
|
200
|
+
}
|
|
201
|
+
} finally {
|
|
202
|
+
isConnecting = false;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
74
205
|
|
|
75
206
|
// Setup event listeners for the room
|
|
76
207
|
const setupRoomListeners = () => {
|
|
77
|
-
if (
|
|
78
|
-
|
|
208
|
+
if (!roomInstance) return;
|
|
209
|
+
|
|
210
|
+
// Always clear previous listeners before re-registering to avoid duplicates
|
|
211
|
+
removeRoomListeners();
|
|
212
|
+
|
|
213
|
+
// Define all handlers as stable references
|
|
214
|
+
connectionChangeHandler = state => {
|
|
79
215
|
// Use a function to ensure we're setting with the latest state
|
|
80
216
|
setConnectionState(() => state);
|
|
81
217
|
|
|
@@ -105,29 +241,58 @@ export const useVoiceAgent = () => {
|
|
|
105
241
|
}
|
|
106
242
|
}
|
|
107
243
|
};
|
|
108
|
-
|
|
244
|
+
trackSubscribedHandler = track => {
|
|
109
245
|
if (track.kind === 'audio') {
|
|
110
246
|
track.setVolume(1.0);
|
|
111
247
|
}
|
|
112
248
|
};
|
|
113
|
-
|
|
114
|
-
// Handle participant disconnected - this could be helpful to detect server-side kicks
|
|
115
|
-
roomInstance.on('participantDisconnected', () => {
|
|
249
|
+
participantDisconnectedHandler = () => {
|
|
116
250
|
// todo: handle participant disconnected
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
roomInstance.on('trackSubscribed', handleTrackSubscribed);
|
|
120
|
-
|
|
121
|
-
// Listen for SDP negotiation errors to handle them better
|
|
122
|
-
roomInstance.on('mediaDevicesError', e => {
|
|
251
|
+
};
|
|
252
|
+
mediaDevicesErrorHandler = e => {
|
|
123
253
|
throw new Error(`Media devices error: ${e.message}`);
|
|
124
254
|
// todo: handle media devices error
|
|
125
|
-
}
|
|
126
|
-
|
|
255
|
+
};
|
|
256
|
+
connectionQualityChangedHandler = quality => {
|
|
257
|
+
// Monitor connection quality to detect network issues
|
|
258
|
+
// This helps understand when ping timeouts might occur
|
|
259
|
+
if (__DEV__) {
|
|
260
|
+
console.log('[LiveKit] Connection quality changed:', quality);
|
|
261
|
+
}
|
|
262
|
+
// If quality is poor, ping timeouts are more likely
|
|
263
|
+
// The connection will self-heal when network improves
|
|
264
|
+
};
|
|
265
|
+
reconnectingHandler = () => {
|
|
266
|
+
// Called when LiveKit detects connection issues and attempts to reconnect
|
|
267
|
+
if (__DEV__) {
|
|
268
|
+
console.log('[LiveKit] Attempting to reconnect...');
|
|
269
|
+
}
|
|
270
|
+
// This is expected behavior when ping timeouts occur
|
|
271
|
+
// LiveKit will automatically handle reconnection
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
// Add listeners with stored references - only if not already added
|
|
275
|
+
if (!hasListeners) {
|
|
276
|
+
roomInstance.on('participantDisconnected', participantDisconnectedHandler);
|
|
277
|
+
roomInstance.on('connectionStateChanged', connectionChangeHandler);
|
|
278
|
+
roomInstance.on('trackSubscribed', trackSubscribedHandler);
|
|
279
|
+
roomInstance.on('mediaDevicesError', mediaDevicesErrorHandler);
|
|
280
|
+
roomInstance.on('connectionQualityChanged', connectionQualityChangedHandler);
|
|
281
|
+
roomInstance.on('reconnecting', reconnectingHandler);
|
|
282
|
+
hasListeners = true;
|
|
283
|
+
}
|
|
127
284
|
};
|
|
128
285
|
|
|
129
286
|
// Initialize room and listeners
|
|
130
287
|
useEffect(() => {
|
|
288
|
+
// Guard against React 18 Strict Mode double initialization
|
|
289
|
+
if (initializedRef.current) {
|
|
290
|
+
// Already initialized, just sync state
|
|
291
|
+
const room = getRoomInstance();
|
|
292
|
+
setConnectionState(room.state);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
initializedRef.current = true;
|
|
131
296
|
const room = getRoomInstance();
|
|
132
297
|
setupRoomListeners();
|
|
133
298
|
|
|
@@ -151,53 +316,31 @@ export const useVoiceAgent = () => {
|
|
|
151
316
|
|
|
152
317
|
// Always sync our state with the room's current state
|
|
153
318
|
setConnectionState(room.state);
|
|
154
|
-
|
|
155
|
-
// Prevent multiple connection attempts
|
|
156
|
-
if (isConnecting) return;
|
|
157
|
-
|
|
158
|
-
// Limit connection attempts to prevent infinite loops
|
|
159
|
-
if (connectionAttempts >= MAX_CONNECTION_ATTEMPTS) {
|
|
160
|
-
setError(`Failed to connect after ${MAX_CONNECTION_ATTEMPTS} attempts`);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
connectionAttempts++;
|
|
164
|
-
try {
|
|
165
|
-
isConnecting = true;
|
|
166
|
-
|
|
167
|
-
// Only attempt to connect if we're disconnected
|
|
168
|
-
if (room.state === ConnectionState.Disconnected) {
|
|
169
|
-
// Update state before connection attempt
|
|
170
|
-
setConnectionState(ConnectionState.Connecting);
|
|
171
|
-
await room.connect(tokenDetails.server_url, tokenDetails.token, {
|
|
172
|
-
autoSubscribe: true // Ensure we subscribe to tracks automatically
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
// Explicitly set to connected if connection was successful
|
|
176
|
-
setConnectionState(room.state);
|
|
177
|
-
} else if (room.state === ConnectionState.Connected) {
|
|
178
|
-
// Ensure our state matches
|
|
179
|
-
setConnectionState(ConnectionState.Connected);
|
|
180
|
-
} else {
|
|
181
|
-
// Sync our state with the room's current state
|
|
182
|
-
setConnectionState(room.state);
|
|
183
|
-
}
|
|
184
|
-
} catch (err) {
|
|
185
|
-
const message = err instanceof Error ? err.message : 'Failed to connect to room';
|
|
186
|
-
setError(message);
|
|
319
|
+
connectRoomWithToken.current?.(tokenDetails);
|
|
187
320
|
|
|
188
|
-
|
|
189
|
-
|
|
321
|
+
// No cleanup here - we don't want to disconnect when token changes or component unmounts
|
|
322
|
+
}, [tokenDetails]);
|
|
190
323
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
324
|
+
// Attempt reconnect if disconnected while a token is present
|
|
325
|
+
useEffect(() => {
|
|
326
|
+
if (connectionState === ConnectionState.Disconnected && tokenDetails && !isDisconnecting && !isConnecting) {
|
|
327
|
+
// Schedule a reconnect with small backoff to avoid tight loops
|
|
328
|
+
if (reconnectTimerId) {
|
|
329
|
+
clearTimeout(reconnectTimerId);
|
|
195
330
|
}
|
|
196
|
-
|
|
197
|
-
|
|
331
|
+
reconnectTimerId = setTimeout(() => {
|
|
332
|
+
connectRoomWithToken.current?.(tokenDetails);
|
|
333
|
+
}, 1000);
|
|
334
|
+
}
|
|
198
335
|
|
|
199
|
-
//
|
|
200
|
-
|
|
336
|
+
// Clear timer when state changes away from Disconnected
|
|
337
|
+
return () => {
|
|
338
|
+
if (reconnectTimerId && connectionState !== ConnectionState.Disconnected) {
|
|
339
|
+
clearTimeout(reconnectTimerId);
|
|
340
|
+
reconnectTimerId = null;
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
}, [connectionState, tokenDetails]);
|
|
201
344
|
|
|
202
345
|
// Generate token and connect
|
|
203
346
|
const generateVoiceToken = async () => {
|
|
@@ -265,23 +408,17 @@ export const useVoiceAgent = () => {
|
|
|
265
408
|
isDisconnecting = false;
|
|
266
409
|
}
|
|
267
410
|
};
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const muteMic = () => {
|
|
411
|
+
const unmuteMic = async () => {
|
|
412
|
+
if (!isMicMuted) return; // 👈 important
|
|
271
413
|
const room = getRoomInstance();
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
setIsMicMuted(true);
|
|
275
|
-
}
|
|
414
|
+
await room.localParticipant.setMicrophoneEnabled(true);
|
|
415
|
+
setIsMicMuted(false);
|
|
276
416
|
};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
const unmuteMic = () => {
|
|
417
|
+
const muteMic = async () => {
|
|
418
|
+
if (isMicMuted) return; // 👈 important
|
|
280
419
|
const room = getRoomInstance();
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
setIsMicMuted(false);
|
|
284
|
-
}
|
|
420
|
+
await room.localParticipant.setMicrophoneEnabled(false);
|
|
421
|
+
setIsMicMuted(true);
|
|
285
422
|
};
|
|
286
423
|
|
|
287
424
|
// Clean up everything (use only when the app is shutting down)
|
|
@@ -309,9 +446,7 @@ export const useVoiceAgent = () => {
|
|
|
309
446
|
tokenDetails,
|
|
310
447
|
isLoading,
|
|
311
448
|
error,
|
|
312
|
-
roomRef
|
|
313
|
-
current: getRoomInstance()
|
|
314
|
-
},
|
|
449
|
+
roomRef,
|
|
315
450
|
cleanup,
|
|
316
451
|
getPopupDescription
|
|
317
452
|
};
|