@rqmii_immersive/agent-react-sdk 2.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -357
- package/dist/{RqmiiCloudAvatarPlayer-BnsY8xIR.js → RqmiiCloudAvatarPlayer-CESlcAGy.js} +6095 -6108
- package/dist/RqmiiCloudAvatarPlayer-CESlcAGy.js.map +1 -0
- package/dist/RqmiiCloudAvatarPlayer-D5npgPcs.cjs +2939 -0
- package/dist/RqmiiCloudAvatarPlayer-D5npgPcs.cjs.map +1 -0
- package/dist/agent-react-sdk.css +1 -1
- package/dist/components/RqmiiAgentRoom.d.ts +3 -0
- package/dist/components/RqmiiAgentRoom.d.ts.map +1 -0
- package/dist/components/RqmiiCloudAvatarPlayer.d.ts +3 -0
- package/dist/components/RqmiiCloudAvatarPlayer.d.ts.map +1 -0
- package/dist/components/RqmiiErrorBoundary.d.ts +19 -0
- package/dist/components/RqmiiErrorBoundary.d.ts.map +1 -0
- package/dist/components/pxs/EpicPixelStreamingPlayer.d.ts +5 -0
- package/dist/components/pxs/EpicPixelStreamingPlayer.d.ts.map +1 -0
- package/dist/core/constants.d.ts +81 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/events/emitter.d.ts +10 -0
- package/dist/core/events/emitter.d.ts.map +1 -0
- package/dist/core/managers/audio.d.ts +24 -0
- package/dist/core/managers/audio.d.ts.map +1 -0
- package/dist/core/managers/heartbeat.d.ts +13 -0
- package/dist/core/managers/heartbeat.d.ts.map +1 -0
- package/dist/core/managers/reconnect.d.ts +29 -0
- package/dist/core/managers/reconnect.d.ts.map +1 -0
- package/dist/core/managers/session.d.ts +20 -0
- package/dist/core/managers/session.d.ts.map +1 -0
- package/dist/core/managers/socket.d.ts +15 -0
- package/dist/core/managers/socket.d.ts.map +1 -0
- package/dist/core/state/reducer.d.ts +4 -0
- package/dist/core/state/reducer.d.ts.map +1 -0
- package/dist/core/state/selectors.d.ts +24 -0
- package/dist/core/state/selectors.d.ts.map +1 -0
- package/dist/core/state/types.d.ts +60 -0
- package/dist/core/state/types.d.ts.map +1 -0
- package/dist/core/utils/accumulator.d.ts +11 -0
- package/dist/core/utils/accumulator.d.ts.map +1 -0
- package/dist/core/utils/agent-type.d.ts +2 -0
- package/dist/core/utils/agent-type.d.ts.map +1 -0
- package/dist/core/utils/bytes.d.ts +2 -0
- package/dist/core/utils/bytes.d.ts.map +1 -0
- package/dist/core/utils/sleep.d.ts +2 -0
- package/dist/core/utils/sleep.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-agent.d.ts +2 -0
- package/dist/hooks/use-rqmii-agent.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-audio-element.d.ts +2 -0
- package/dist/hooks/use-rqmii-audio-element.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-avatar.d.ts +13 -0
- package/dist/hooks/use-rqmii-avatar.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-connection.d.ts +27 -0
- package/dist/hooks/use-rqmii-connection.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-events.d.ts +3 -0
- package/dist/hooks/use-rqmii-events.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-messages.d.ts +6 -0
- package/dist/hooks/use-rqmii-messages.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-press-to-talk.d.ts +3 -0
- package/dist/hooks/use-rqmii-press-to-talk.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-sdk.d.ts +81 -0
- package/dist/hooks/use-rqmii-sdk.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-session.d.ts +9 -0
- package/dist/hooks/use-rqmii-session.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-vad.d.ts +3 -0
- package/dist/hooks/use-rqmii-vad.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-voice.d.ts +12 -0
- package/dist/hooks/use-rqmii-voice.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -340
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +270 -20
- package/dist/index.js.map +1 -1
- package/dist/provider/RqmiiAgentProvider.d.ts +4 -0
- package/dist/provider/RqmiiAgentProvider.d.ts.map +1 -0
- package/dist/provider/socket-handlers.d.ts +77 -0
- package/dist/provider/socket-handlers.d.ts.map +1 -0
- package/dist/provider/use-manager-lifecycle.d.ts +76 -0
- package/dist/provider/use-manager-lifecycle.d.ts.map +1 -0
- package/dist/types/index.d.ts +385 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/ui/Orb.d.ts +19 -0
- package/dist/ui/Orb.d.ts.map +1 -0
- package/dist/ui/RqmiiAgentChat.d.ts +4 -0
- package/dist/ui/RqmiiAgentChat.d.ts.map +1 -0
- package/dist/ui/agent-data.d.ts +17 -0
- package/dist/ui/agent-data.d.ts.map +1 -0
- package/dist/ui/chat/ChatBox.d.ts +22 -0
- package/dist/ui/chat/ChatBox.d.ts.map +1 -0
- package/dist/ui/chat/CreditsExhaustedPanel.d.ts +6 -0
- package/dist/ui/chat/CreditsExhaustedPanel.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-avatar.d.ts +3 -0
- package/dist/ui/chat/chat-box-avatar.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-content.d.ts +26 -0
- package/dist/ui/chat/chat-box-content.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-shared.d.ts +24 -0
- package/dist/ui/chat/chat-box-shared.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-text-and-voice.d.ts +3 -0
- package/dist/ui/chat/chat-box-text-and-voice.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-text.d.ts +3 -0
- package/dist/ui/chat/chat-box-text.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-types.d.ts +83 -0
- package/dist/ui/chat/chat-box-types.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-voice.d.ts +3 -0
- package/dist/ui/chat/chat-box-voice.d.ts.map +1 -0
- package/dist/ui/chat/components.d.ts +4 -0
- package/dist/ui/chat/components.d.ts.map +1 -0
- package/dist/ui/chat/panels.d.ts +78 -0
- package/dist/ui/chat/panels.d.ts.map +1 -0
- package/dist/ui/chat/primitives.d.ts +47 -0
- package/dist/ui/chat/primitives.d.ts.map +1 -0
- package/dist/ui/chat/utils.d.ts +7 -0
- package/dist/ui/chat/utils.d.ts.map +1 -0
- package/dist/ui/faces.d.ts +3 -0
- package/dist/ui/faces.d.ts.map +1 -0
- package/dist/ui/languages.d.ts +10 -0
- package/dist/ui/languages.d.ts.map +1 -0
- package/dist/ui.cjs +122 -1
- package/dist/ui.cjs.map +1 -1
- package/dist/ui.d.ts +11 -10
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +1771 -4
- package/dist/ui.js.map +1 -1
- package/package.json +33 -5
- package/dist/RqmiiCloudAvatarPlayer-BnsY8xIR.js.map +0 -1
- package/dist/RqmiiCloudAvatarPlayer-lqCz2xlU.cjs +0 -2938
- package/dist/RqmiiCloudAvatarPlayer-lqCz2xlU.cjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,23 +1,273 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { u as p, j as R } from "./RqmiiCloudAvatarPlayer-CESlcAGy.js";
|
|
2
|
+
import { A as re, C as se, a as ie, D as oe, b as ae, c as ce, R as ue, d as de, e as le, S as pe, f as me, g as ge, h as fe, i as Se, k as Ee, l as he } from "./RqmiiCloudAvatarPlayer-CESlcAGy.js";
|
|
3
|
+
import { useEffect as P, useRef as S, useState as x, useCallback as l, useMemo as H, Component as z } from "react";
|
|
4
|
+
function J() {
|
|
5
|
+
return p();
|
|
6
|
+
}
|
|
7
|
+
function Q() {
|
|
8
|
+
const e = p();
|
|
9
|
+
return {
|
|
10
|
+
sessionState: e.sessionState,
|
|
11
|
+
isSessionTerminated: e.isSessionTerminated,
|
|
12
|
+
isSessionTerminating: e.isSessionTerminating,
|
|
13
|
+
isAgentThinking: e.isAgentThinking,
|
|
14
|
+
isAgentSpeaking: e.isAgentSpeaking,
|
|
15
|
+
isToolExecuting: e.isToolExecuting
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function W(e) {
|
|
19
|
+
const { attachAudioElement: t, resumeAudioPlayback: n } = p();
|
|
20
|
+
P(() => {
|
|
21
|
+
if (!e?.current) return;
|
|
22
|
+
t(e.current);
|
|
23
|
+
const s = () => {
|
|
24
|
+
n();
|
|
25
|
+
}, a = e.current;
|
|
26
|
+
return a.addEventListener("click", s), a.addEventListener("touchstart", s), () => {
|
|
27
|
+
a.removeEventListener("click", s), a.removeEventListener("touchstart", s), t(null);
|
|
28
|
+
};
|
|
29
|
+
}, [t, e, n]);
|
|
30
|
+
}
|
|
31
|
+
const B = {
|
|
32
|
+
echoCancellation: !0,
|
|
33
|
+
noiseSuppression: !0,
|
|
34
|
+
autoGainControl: !0,
|
|
35
|
+
channelCount: 1,
|
|
36
|
+
sampleRate: 16e3
|
|
37
|
+
}, V = [
|
|
38
|
+
"audio/webm;codecs=opus",
|
|
39
|
+
"audio/webm",
|
|
40
|
+
"audio/mp4"
|
|
41
|
+
], G = () => typeof window > "u" || !window.MediaRecorder?.isTypeSupported ? "" : V.find((e) => window.MediaRecorder.isTypeSupported(e)) || "";
|
|
42
|
+
function X(e = {}) {
|
|
43
|
+
const {
|
|
44
|
+
onAudioChunk: t,
|
|
45
|
+
onAudioEnd: n,
|
|
46
|
+
onError: s,
|
|
47
|
+
holdDelayMs: a = 220,
|
|
48
|
+
timesliceMs: D = 100,
|
|
49
|
+
interruptOnHoldStart: M = !0,
|
|
50
|
+
audioConstraints: w = B
|
|
51
|
+
} = e, { sendAudioChunk: _, endAudioStream: v, interrupt: q } = p(), u = S(null), c = S(null), o = S(null), O = S(!0), E = S(!1), [b, I] = x(!1), [j, m] = x(!1), [U, h] = x(null), N = l(
|
|
52
|
+
async (r) => {
|
|
53
|
+
if (!r || r.size <= 0) return;
|
|
54
|
+
const i = await r.arrayBuffer();
|
|
55
|
+
if (t) {
|
|
56
|
+
t(i);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
_(i);
|
|
60
|
+
},
|
|
61
|
+
[t, _]
|
|
62
|
+
), d = l(() => {
|
|
63
|
+
c.current && (c.current.getTracks().forEach((r) => r.stop()), c.current = null);
|
|
64
|
+
}, []), g = l(
|
|
65
|
+
({ discard: r = !1 } = {}) => {
|
|
66
|
+
const i = u.current;
|
|
67
|
+
if (!i)
|
|
68
|
+
return E.current = !0, !1;
|
|
69
|
+
if (O.current = !r, u.current = null, i.state === "inactive")
|
|
70
|
+
return r || (n ? n() : v()), d(), m(!1), !0;
|
|
71
|
+
try {
|
|
72
|
+
i.requestData();
|
|
73
|
+
} catch {
|
|
74
|
+
}
|
|
75
|
+
i.onstop = () => {
|
|
76
|
+
O.current && (n ? n() : v()), d(), m(!1);
|
|
77
|
+
};
|
|
78
|
+
try {
|
|
79
|
+
i.stop();
|
|
80
|
+
} catch (T) {
|
|
81
|
+
d(), m(!1), s?.(T);
|
|
82
|
+
}
|
|
83
|
+
return !0;
|
|
84
|
+
},
|
|
85
|
+
[d, v, n, s]
|
|
86
|
+
), y = l(async () => {
|
|
87
|
+
if (u.current) return !0;
|
|
88
|
+
if (E.current = !1, typeof navigator > "u" || !navigator.mediaDevices?.getUserMedia || typeof window > "u" || typeof window.MediaRecorder > "u") {
|
|
89
|
+
const r = new Error("MediaRecorder or microphone APIs are unavailable in this browser");
|
|
90
|
+
return h(r.message), s?.(r), !1;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const r = await navigator.mediaDevices.getUserMedia({ audio: w });
|
|
94
|
+
c.current = r;
|
|
95
|
+
const i = G(), T = i ? { mimeType: i } : void 0, A = new window.MediaRecorder(r, T);
|
|
96
|
+
return A.ondataavailable = (C) => {
|
|
97
|
+
N(C.data);
|
|
98
|
+
}, A.onerror = (C) => {
|
|
99
|
+
const L = C?.error || new Error("Microphone recording failed");
|
|
100
|
+
h(L?.message || "recording_failed"), s?.(L);
|
|
101
|
+
}, u.current = A, m(!0), h(null), A.start(D), E.current && (E.current = !1, g()), !0;
|
|
102
|
+
} catch (r) {
|
|
103
|
+
return d(), m(!1), h("permission_denied"), s?.(r), !1;
|
|
104
|
+
}
|
|
105
|
+
}, [w, d, N, s, D, g]), k = l(() => {
|
|
106
|
+
o.current && (clearTimeout(o.current), o.current = null), I(!0), o.current = setTimeout(() => {
|
|
107
|
+
M && q(), y();
|
|
108
|
+
}, a);
|
|
109
|
+
}, [a, q, M, y]), f = l(() => {
|
|
110
|
+
I(!1), o.current && (clearTimeout(o.current), o.current = null), g();
|
|
111
|
+
}, [g]);
|
|
112
|
+
P(() => () => {
|
|
113
|
+
o.current && (clearTimeout(o.current), o.current = null);
|
|
114
|
+
const r = u.current;
|
|
115
|
+
if (r && (u.current = null, r.state !== "inactive"))
|
|
116
|
+
try {
|
|
117
|
+
r.stop();
|
|
118
|
+
} catch {
|
|
119
|
+
}
|
|
120
|
+
c.current && (c.current.getTracks().forEach((i) => i.stop()), c.current = null);
|
|
121
|
+
}, []);
|
|
122
|
+
const F = H(
|
|
123
|
+
() => ({
|
|
124
|
+
onPointerDown: (r) => {
|
|
125
|
+
r.preventDefault(), k();
|
|
126
|
+
},
|
|
127
|
+
onPointerUp: (r) => {
|
|
128
|
+
r.preventDefault(), f();
|
|
129
|
+
},
|
|
130
|
+
onPointerCancel: (r) => {
|
|
131
|
+
r.preventDefault(), f();
|
|
132
|
+
},
|
|
133
|
+
onPointerLeave: (r) => {
|
|
134
|
+
r.preventDefault(), f();
|
|
135
|
+
}
|
|
136
|
+
}),
|
|
137
|
+
[k, f]
|
|
138
|
+
);
|
|
139
|
+
return {
|
|
140
|
+
isPressing: b,
|
|
141
|
+
isRecording: j,
|
|
142
|
+
micError: U,
|
|
143
|
+
startRecording: y,
|
|
144
|
+
stopRecording: g,
|
|
145
|
+
startPress: k,
|
|
146
|
+
stopPress: f,
|
|
147
|
+
eventHandlers: F
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function Z(e, t, n = []) {
|
|
151
|
+
const { events: s } = p();
|
|
152
|
+
P(() => s.on(e, t), [e, t, s, ...n]);
|
|
153
|
+
}
|
|
154
|
+
function $() {
|
|
155
|
+
const e = p(), t = e.events;
|
|
156
|
+
return {
|
|
157
|
+
state: {
|
|
158
|
+
messages: e.messages,
|
|
159
|
+
connectionState: e.connectionState,
|
|
160
|
+
isConnected: e.isConnected,
|
|
161
|
+
isSessionReady: e.isSessionReady,
|
|
162
|
+
isAudioPlaying: e.isAudioPlaying,
|
|
163
|
+
isAgentThinking: e.isAgentThinking,
|
|
164
|
+
isAgentSpeaking: e.isAgentSpeaking,
|
|
165
|
+
isToolExecuting: e.isToolExecuting,
|
|
166
|
+
isSessionTerminated: e.isSessionTerminated,
|
|
167
|
+
isSessionTerminating: e.isSessionTerminating,
|
|
168
|
+
creditExhausted: e.creditExhausted,
|
|
169
|
+
creditError: e.creditError,
|
|
170
|
+
error: e.error,
|
|
171
|
+
transcript: e.transcript,
|
|
172
|
+
partialTranscript: e.partialTranscript,
|
|
173
|
+
session: e.session,
|
|
174
|
+
sessionState: e.sessionState,
|
|
175
|
+
reconnectAttempt: e.reconnectAttempt
|
|
176
|
+
},
|
|
177
|
+
actions: {
|
|
178
|
+
sendTextMessage: e.sendTextMessage,
|
|
179
|
+
sendAudioChunk: e.sendAudioChunk,
|
|
180
|
+
endAudioStream: e.endAudioStream,
|
|
181
|
+
interrupt: e.interrupt,
|
|
182
|
+
clearSessionHistory: e.clearSessionHistory,
|
|
183
|
+
clearMessages: e.clearMessages,
|
|
184
|
+
changeSessionLanguage: e.changeSessionLanguage,
|
|
185
|
+
signalClientReady: e.signalClientReady,
|
|
186
|
+
initializeSession: e.initializeSession,
|
|
187
|
+
joinDesktopSession: e.joinDesktopSession,
|
|
188
|
+
disconnect: e.disconnect,
|
|
189
|
+
terminateSession: e.terminateSession,
|
|
190
|
+
resumeAudioPlayback: e.resumeAudioPlayback,
|
|
191
|
+
pauseAudioPlayback: e.pauseAudioPlayback,
|
|
192
|
+
attachAudioElement: e.attachAudioElement
|
|
193
|
+
},
|
|
194
|
+
events: {
|
|
195
|
+
onSessionReady: (n) => t.on("session:ready", n),
|
|
196
|
+
onSessionJoined: (n) => t.on("session:joined", n),
|
|
197
|
+
onSessionTerminated: (n) => t.on("session:terminated", n),
|
|
198
|
+
onSessionExpired: (n) => t.on("session:expired", n),
|
|
199
|
+
onMessageReceived: (n) => t.on("message:received", n),
|
|
200
|
+
onMessageSent: (n) => t.on("message:sent", n),
|
|
201
|
+
onAudioPlaying: (n) => t.on("audio:playing", n),
|
|
202
|
+
onAudioStopped: (n) => t.on("audio:stopped", n),
|
|
203
|
+
onAvatarSpeaking: (n) => t.on("avatar:speaking", n),
|
|
204
|
+
onAvatarSpeakingDone: (n) => t.on("avatar:speaking_done", n),
|
|
205
|
+
onStateChanged: (n) => t.on("state:changed", n),
|
|
206
|
+
onConnected: (n) => t.on("connection:connected", n),
|
|
207
|
+
onDisconnected: (n) => t.on("connection:disconnected", n),
|
|
208
|
+
onReconnecting: (n) => t.on("connection:reconnecting", n),
|
|
209
|
+
onConnectionFailed: (n) => t.on("connection:failed", n),
|
|
210
|
+
onError: (n) => t.on("error", n),
|
|
211
|
+
onCreditsExhausted: (n) => t.on("credits:exhausted", n),
|
|
212
|
+
onTranscript: (n) => t.on("transcript", n),
|
|
213
|
+
onPartialTranscript: (n) => t.on("partial_transcript", n),
|
|
214
|
+
onInterrupted: (n) => t.on("interrupted", n)
|
|
215
|
+
},
|
|
216
|
+
raw: {
|
|
217
|
+
socket: e.socket,
|
|
218
|
+
audioElement: e.audioElement
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
class ee extends z {
|
|
223
|
+
constructor(t) {
|
|
224
|
+
super(t), this.state = { hasError: !1, error: null };
|
|
225
|
+
}
|
|
226
|
+
static getDerivedStateFromError(t) {
|
|
227
|
+
return { hasError: !0, error: t };
|
|
228
|
+
}
|
|
229
|
+
componentDidCatch(t, n) {
|
|
230
|
+
this.props.onError?.(t, n);
|
|
231
|
+
}
|
|
232
|
+
reset = () => {
|
|
233
|
+
this.setState({ hasError: !1, error: null });
|
|
234
|
+
};
|
|
235
|
+
render() {
|
|
236
|
+
if (this.state.hasError) {
|
|
237
|
+
const { fallback: t } = this.props;
|
|
238
|
+
return t ? typeof t == "function" ? this.state.error ? t(this.state.error, this.reset) : null : t : /* @__PURE__ */ R.jsxs("div", { style: { padding: "24px", textAlign: "center", color: "#ef4444" }, children: [
|
|
239
|
+
/* @__PURE__ */ R.jsx("h3", { children: "Something went wrong" }),
|
|
240
|
+
/* @__PURE__ */ R.jsx("p", { children: this.state.error?.message || "An unexpected error occurred" }),
|
|
241
|
+
/* @__PURE__ */ R.jsx("button", { onClick: this.reset, style: { marginTop: "12px", padding: "8px 16px", cursor: "pointer" }, children: "Try again" })
|
|
242
|
+
] });
|
|
243
|
+
}
|
|
244
|
+
return this.props.children;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
2
247
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
248
|
+
re as AGENT_TYPES,
|
|
249
|
+
se as CLOUD_STREAM_STATE,
|
|
250
|
+
ie as CONNECTION_STATE,
|
|
251
|
+
oe as DEFAULT_PCM_OPTIONS,
|
|
252
|
+
ae as DEFAULT_RECONNECT_OPTIONS,
|
|
253
|
+
ce as EventEmitter,
|
|
254
|
+
ue as RqmiiAgentProvider,
|
|
255
|
+
de as RqmiiAgentRoom,
|
|
256
|
+
le as RqmiiCloudAvatarPlayer,
|
|
257
|
+
ee as RqmiiErrorBoundary,
|
|
258
|
+
pe as SESSION_STATE,
|
|
259
|
+
me as SOCKET_EVENTS,
|
|
260
|
+
J as useRqmiiAgent,
|
|
261
|
+
p as useRqmiiAgentContext,
|
|
262
|
+
W as useRqmiiAudioElement,
|
|
263
|
+
ge as useRqmiiAvatar,
|
|
264
|
+
fe as useRqmiiConnection,
|
|
265
|
+
Z as useRqmiiEvents,
|
|
266
|
+
Se as useRqmiiMessages,
|
|
267
|
+
X as useRqmiiPressToTalk,
|
|
268
|
+
$ as useRqmiiSDK,
|
|
269
|
+
Q as useRqmiiSession,
|
|
270
|
+
Ee as useRqmiiVAD,
|
|
271
|
+
he as useRqmiiVoice
|
|
22
272
|
};
|
|
23
273
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/hooks/use-rqmii-agent.ts","../src/hooks/use-rqmii-session.ts","../src/hooks/use-rqmii-audio-element.ts","../src/hooks/use-rqmii-press-to-talk.ts","../src/hooks/use-rqmii-events.ts","../src/hooks/use-rqmii-sdk.ts","../src/components/RqmiiErrorBoundary.tsx"],"sourcesContent":["import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiAgent() {\n return useRqmiiAgentContext();\n}\n","import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiSession() {\n const ctx = useRqmiiAgentContext();\n return {\n sessionState: ctx.sessionState,\n isSessionTerminated: ctx.isSessionTerminated,\n isSessionTerminating: ctx.isSessionTerminating,\n isAgentThinking: ctx.isAgentThinking,\n isAgentSpeaking: ctx.isAgentSpeaking,\n isToolExecuting: ctx.isToolExecuting,\n };\n}\n","import { useEffect } from 'react';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiAudioElement(audioRef: React.RefObject<HTMLAudioElement | null>) {\n const { attachAudioElement, resumeAudioPlayback } = useRqmiiAgentContext();\n\n useEffect(() => {\n if (!audioRef?.current) return undefined;\n\n attachAudioElement(audioRef.current);\n const unlock = () => {\n void resumeAudioPlayback();\n };\n\n const node = audioRef.current;\n node.addEventListener('click', unlock);\n node.addEventListener('touchstart', unlock);\n\n return () => {\n node.removeEventListener('click', unlock);\n node.removeEventListener('touchstart', unlock);\n attachAudioElement(null);\n };\n }, [attachAudioElement, audioRef, resumeAudioPlayback]);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\nimport type { UseRqmiiPressToTalkOptions, UseRqmiiPressToTalkReturn } from '../types';\n\nconst DEFAULT_AUDIO_CONSTRAINTS: MediaTrackConstraints = {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 16000,\n};\n\nconst MEDIA_RECORDER_MIME_TYPES = [\n 'audio/webm;codecs=opus',\n 'audio/webm',\n 'audio/mp4',\n];\n\nconst getRecorderMimeType = (): string => {\n if (typeof window === 'undefined' || !window.MediaRecorder?.isTypeSupported) return '';\n return MEDIA_RECORDER_MIME_TYPES.find((type) => window.MediaRecorder.isTypeSupported(type)) || '';\n};\n\nexport function useRqmiiPressToTalk(options: UseRqmiiPressToTalkOptions = {}): UseRqmiiPressToTalkReturn {\n const {\n onAudioChunk,\n onAudioEnd,\n onError,\n holdDelayMs = 220,\n timesliceMs = 100,\n interruptOnHoldStart = true,\n audioConstraints = DEFAULT_AUDIO_CONSTRAINTS,\n } = options;\n\n const { sendAudioChunk, endAudioStream, interrupt } = useRqmiiAgentContext();\n\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const holdTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shouldSendAudioEndRef = useRef(true);\n const stopRequestedRef = useRef(false);\n\n const [isPressing, setIsPressing] = useState(false);\n const [isRecording, setIsRecording] = useState(false);\n const [micError, setMicError] = useState<string | null>(null);\n\n const handleChunk = useCallback(\n async (blob: Blob) => {\n if (!blob || blob.size <= 0) return;\n const chunkBuffer = await blob.arrayBuffer();\n if (onAudioChunk) {\n onAudioChunk(chunkBuffer);\n return;\n }\n sendAudioChunk(chunkBuffer);\n },\n [onAudioChunk, sendAudioChunk],\n );\n\n const cleanupStream = useCallback(() => {\n if (!streamRef.current) return;\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }, []);\n\n const stopRecording = useCallback(\n ({ discard = false }: { discard?: boolean } = {}): boolean => {\n const mediaRecorder = mediaRecorderRef.current;\n if (!mediaRecorder) {\n stopRequestedRef.current = true;\n return false;\n }\n\n shouldSendAudioEndRef.current = !discard;\n mediaRecorderRef.current = null;\n\n if (mediaRecorder.state === 'inactive') {\n if (!discard) {\n if (onAudioEnd) onAudioEnd();\n else endAudioStream();\n }\n cleanupStream();\n setIsRecording(false);\n return true;\n }\n\n try {\n mediaRecorder.requestData();\n } catch {\n // some browsers throw if requestData is called after stopping\n }\n\n mediaRecorder.onstop = () => {\n const shouldSendEnd = shouldSendAudioEndRef.current;\n if (shouldSendEnd) {\n if (onAudioEnd) onAudioEnd();\n else endAudioStream();\n }\n cleanupStream();\n setIsRecording(false);\n };\n\n try {\n mediaRecorder.stop();\n } catch (error) {\n cleanupStream();\n setIsRecording(false);\n onError?.(error);\n }\n\n return true;\n },\n [cleanupStream, endAudioStream, onAudioEnd, onError],\n );\n\n const startRecording = useCallback(async (): Promise<boolean> => {\n if (mediaRecorderRef.current) return true;\n stopRequestedRef.current = false;\n if (\n typeof navigator === 'undefined' ||\n !navigator.mediaDevices?.getUserMedia ||\n typeof window === 'undefined' ||\n typeof window.MediaRecorder === 'undefined'\n ) {\n const error = new Error('MediaRecorder or microphone APIs are unavailable in this browser');\n setMicError(error.message);\n onError?.(error);\n return false;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: audioConstraints });\n streamRef.current = stream;\n\n const mimeType = getRecorderMimeType();\n const recorderOptions = mimeType ? { mimeType } : undefined;\n const mediaRecorder = new window.MediaRecorder(stream, recorderOptions);\n\n mediaRecorder.ondataavailable = (event) => {\n void handleChunk(event.data);\n };\n\n mediaRecorder.onerror = (event) => {\n const error = (event as ErrorEvent)?.error || new Error('Microphone recording failed');\n setMicError((error as Error)?.message || 'recording_failed');\n onError?.(error);\n };\n\n mediaRecorderRef.current = mediaRecorder;\n setIsRecording(true);\n setMicError(null);\n mediaRecorder.start(timesliceMs);\n\n if (stopRequestedRef.current) {\n stopRequestedRef.current = false;\n stopRecording();\n }\n\n return true;\n } catch (error) {\n cleanupStream();\n setIsRecording(false);\n setMicError('permission_denied');\n onError?.(error);\n return false;\n }\n }, [audioConstraints, cleanupStream, handleChunk, onError, timesliceMs, stopRecording]);\n\n const startPress = useCallback(() => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n\n setIsPressing(true);\n\n holdTimerRef.current = setTimeout(() => {\n if (interruptOnHoldStart) {\n interrupt();\n }\n void startRecording();\n }, holdDelayMs);\n }, [holdDelayMs, interrupt, interruptOnHoldStart, startRecording]);\n\n const stopPress = useCallback(() => {\n setIsPressing(false);\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n stopRecording();\n }, [stopRecording]);\n\n useEffect(() => {\n return () => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n const mr = mediaRecorderRef.current;\n if (mr) {\n mediaRecorderRef.current = null;\n if (mr.state !== 'inactive') {\n try { mr.stop(); } catch { /* ignore */ }\n }\n }\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n };\n }, []);\n\n const eventHandlers = useMemo(\n () => ({\n onPointerDown: (e: React.PointerEvent) => {\n e.preventDefault();\n startPress();\n },\n onPointerUp: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n onPointerCancel: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n }),\n [startPress, stopPress],\n );\n\n return {\n isPressing,\n isRecording,\n micError,\n startRecording,\n stopRecording,\n startPress,\n stopPress,\n eventHandlers,\n };\n}\n","import { useEffect } from 'react';\nimport type { EventType, EventHandlerMap } from '../types';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiEvents<T extends EventType>(event: T, handler: EventHandlerMap[T], deps: unknown[] = []) {\n const { events } = useRqmiiAgentContext();\n\n useEffect(() => {\n return events.on(event, handler);\n }, [event, handler, events, ...deps]);\n}\n","import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\nimport type { EventHandlerMap, RqmiiMessage, RqmiiState, TranscriptPayload, PartialTranscriptPayload, SessionData } from '../types';\n\ntype Listener<T> = (handler: T) => () => void;\n\nexport interface RqmiiEventListeners {\n onSessionReady: Listener<EventHandlerMap['session:ready']>;\n onSessionJoined: Listener<EventHandlerMap['session:joined']>;\n onSessionTerminated: Listener<EventHandlerMap['session:terminated']>;\n onSessionExpired: Listener<EventHandlerMap['session:expired']>;\n onMessageReceived: Listener<EventHandlerMap['message:received']>;\n onMessageSent: Listener<EventHandlerMap['message:sent']>;\n onAudioPlaying: Listener<EventHandlerMap['audio:playing']>;\n onAudioStopped: Listener<EventHandlerMap['audio:stopped']>;\n onAvatarSpeaking: Listener<EventHandlerMap['avatar:speaking']>;\n onAvatarSpeakingDone: Listener<EventHandlerMap['avatar:speaking_done']>;\n onStateChanged: Listener<EventHandlerMap['state:changed']>;\n onConnected: Listener<EventHandlerMap['connection:connected']>;\n onDisconnected: Listener<EventHandlerMap['connection:disconnected']>;\n onReconnecting: Listener<EventHandlerMap['connection:reconnecting']>;\n onConnectionFailed: Listener<EventHandlerMap['connection:failed']>;\n onError: Listener<EventHandlerMap['error']>;\n onCreditsExhausted: Listener<EventHandlerMap['credits:exhausted']>;\n onTranscript: Listener<EventHandlerMap['transcript']>;\n onPartialTranscript: Listener<EventHandlerMap['partial_transcript']>;\n onInterrupted: Listener<EventHandlerMap['interrupted']>;\n}\n\nexport interface RqmiiSDKHandle {\n state: {\n messages: RqmiiMessage[];\n connectionState: RqmiiState['connectionState'];\n isConnected: boolean;\n isSessionReady: boolean;\n isAudioPlaying: boolean;\n isAgentThinking: boolean;\n isAgentSpeaking: boolean;\n isToolExecuting: boolean;\n isSessionTerminated: boolean;\n isSessionTerminating: boolean;\n creditExhausted: boolean;\n creditError: string | null;\n error: string | null;\n transcript: TranscriptPayload | null;\n partialTranscript: PartialTranscriptPayload | null;\n session: RqmiiState['session'];\n sessionState: RqmiiState['sessionState'];\n reconnectAttempt: number;\n };\n actions: {\n sendTextMessage: (text: string) => boolean;\n sendAudioChunk: (audio: unknown) => boolean;\n endAudioStream: () => boolean;\n interrupt: () => boolean;\n clearSessionHistory: () => boolean;\n clearMessages: () => void;\n changeSessionLanguage: (language: string) => boolean;\n signalClientReady: (payload?: Record<string, unknown>) => boolean;\n initializeSession: (opts?: { apiKey?: string; publicChatId?: string; agentId?: string; language?: string }) => Promise<SessionData>;\n joinDesktopSession: (opts: { uniqueId: string; language?: string }) => Promise<SessionData>;\n disconnect: () => void;\n terminateSession: () => Promise<{ success: boolean }>;\n resumeAudioPlayback: () => void;\n pauseAudioPlayback: () => void;\n attachAudioElement: (el: HTMLAudioElement | null) => void;\n };\n events: RqmiiEventListeners;\n raw: {\n socket: ReturnType<typeof import('socket.io-client').io> | null;\n audioElement: HTMLAudioElement | null;\n };\n}\n\nexport function useRqmiiSDK(): RqmiiSDKHandle {\n const ctx = useRqmiiAgentContext();\n const ev = ctx.events;\n\n return {\n state: {\n messages: ctx.messages,\n connectionState: ctx.connectionState,\n isConnected: ctx.isConnected,\n isSessionReady: ctx.isSessionReady,\n isAudioPlaying: ctx.isAudioPlaying,\n isAgentThinking: ctx.isAgentThinking,\n isAgentSpeaking: ctx.isAgentSpeaking,\n isToolExecuting: ctx.isToolExecuting,\n isSessionTerminated: ctx.isSessionTerminated,\n isSessionTerminating: ctx.isSessionTerminating,\n creditExhausted: ctx.creditExhausted,\n creditError: ctx.creditError,\n error: ctx.error,\n transcript: ctx.transcript,\n partialTranscript: ctx.partialTranscript,\n session: ctx.session,\n sessionState: ctx.sessionState,\n reconnectAttempt: ctx.reconnectAttempt,\n },\n actions: {\n sendTextMessage: ctx.sendTextMessage,\n sendAudioChunk: ctx.sendAudioChunk,\n endAudioStream: ctx.endAudioStream,\n interrupt: ctx.interrupt,\n clearSessionHistory: ctx.clearSessionHistory,\n clearMessages: ctx.clearMessages,\n changeSessionLanguage: ctx.changeSessionLanguage,\n signalClientReady: ctx.signalClientReady,\n initializeSession: ctx.initializeSession,\n joinDesktopSession: ctx.joinDesktopSession,\n disconnect: ctx.disconnect,\n terminateSession: ctx.terminateSession,\n resumeAudioPlayback: ctx.resumeAudioPlayback,\n pauseAudioPlayback: ctx.pauseAudioPlayback,\n attachAudioElement: ctx.attachAudioElement,\n },\n events: {\n onSessionReady: (h) => ev.on('session:ready', h),\n onSessionJoined: (h) => ev.on('session:joined', h),\n onSessionTerminated: (h) => ev.on('session:terminated', h),\n onSessionExpired: (h) => ev.on('session:expired', h),\n onMessageReceived: (h) => ev.on('message:received', h),\n onMessageSent: (h) => ev.on('message:sent', h),\n onAudioPlaying: (h) => ev.on('audio:playing', h),\n onAudioStopped: (h) => ev.on('audio:stopped', h),\n onAvatarSpeaking: (h) => ev.on('avatar:speaking', h),\n onAvatarSpeakingDone: (h) => ev.on('avatar:speaking_done', h),\n onStateChanged: (h) => ev.on('state:changed', h),\n onConnected: (h) => ev.on('connection:connected', h),\n onDisconnected: (h) => ev.on('connection:disconnected', h),\n onReconnecting: (h) => ev.on('connection:reconnecting', h),\n onConnectionFailed: (h) => ev.on('connection:failed', h),\n onError: (h) => ev.on('error', h),\n onCreditsExhausted: (h) => ev.on('credits:exhausted', h),\n onTranscript: (h) => ev.on('transcript', h),\n onPartialTranscript: (h) => ev.on('partial_transcript', h),\n onInterrupted: (h) => ev.on('interrupted', h),\n },\n raw: {\n socket: ctx.socket,\n audioElement: ctx.audioElement,\n },\n };\n}\n","import React, { Component, type ErrorInfo, type ReactNode } from 'react';\n\ninterface RqmiiErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n onError?: (error: Error, info: ErrorInfo) => void;\n}\n\ninterface RqmiiErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class RqmiiErrorBoundary extends Component<RqmiiErrorBoundaryProps, RqmiiErrorBoundaryState> {\n constructor(props: RqmiiErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): RqmiiErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n this.props.onError?.(error, info);\n }\n\n reset = () => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n if (this.state.hasError) {\n const { fallback } = this.props;\n if (fallback) {\n if (typeof fallback === 'function') {\n return this.state.error ? fallback(this.state.error, this.reset) : null;\n }\n return fallback;\n }\n return (\n <div style={{ padding: '24px', textAlign: 'center', color: '#ef4444' }}>\n <h3>Something went wrong</h3>\n <p>{this.state.error?.message || 'An unexpected error occurred'}</p>\n <button onClick={this.reset} style={{ marginTop: '12px', padding: '8px 16px', cursor: 'pointer' }}>\n Try again\n </button>\n </div>\n );\n }\n return this.props.children;\n }\n}\n"],"names":["useRqmiiAgent","useRqmiiAgentContext","useRqmiiSession","ctx","useRqmiiAudioElement","audioRef","attachAudioElement","resumeAudioPlayback","useEffect","unlock","node","DEFAULT_AUDIO_CONSTRAINTS","MEDIA_RECORDER_MIME_TYPES","getRecorderMimeType","type","useRqmiiPressToTalk","options","onAudioChunk","onAudioEnd","onError","holdDelayMs","timesliceMs","interruptOnHoldStart","audioConstraints","sendAudioChunk","endAudioStream","interrupt","mediaRecorderRef","useRef","streamRef","holdTimerRef","shouldSendAudioEndRef","stopRequestedRef","isPressing","setIsPressing","useState","isRecording","setIsRecording","micError","setMicError","handleChunk","useCallback","blob","chunkBuffer","cleanupStream","track","stopRecording","discard","mediaRecorder","error","startRecording","stream","mimeType","recorderOptions","event","startPress","stopPress","mr","eventHandlers","useMemo","e","useRqmiiEvents","handler","deps","events","useRqmiiSDK","ev","h","RqmiiErrorBoundary","Component","props","info","fallback","jsxs","jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RqmiiAgentProviderProps, RqmiiAgentContextValue } from '../types';
|
|
2
|
+
export declare function RqmiiAgentProvider({ children, wsUrl, restUrl, reconnectOptions, enableAudio, pcmOptions, debug, heartbeatIntervalSeconds, withCredentials, onSessionExpired, onSessionTerminated, onError, onDisconnect, onReconnectSuccess, onReconnectFailed, }: RqmiiAgentProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare function useRqmiiAgentContext(): RqmiiAgentContextValue;
|
|
4
|
+
//# sourceMappingURL=RqmiiAgentProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RqmiiAgentProvider.d.ts","sourceRoot":"","sources":["../../src/provider/RqmiiAgentProvider.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EAMvB,MAAM,UAAU,CAAC;AAIlB,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,KAAK,EACL,OAAO,EACP,gBAAgB,EAChB,WAAkB,EAClB,UAAU,EACV,KAAa,EACb,wBAA6B,EAC7B,eAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,EAAE,uBAAuB,2CAiSzB;AAED,wBAAgB,oBAAoB,IAAI,sBAAsB,CAI7D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Socket } from 'socket.io-client';
|
|
2
|
+
import type { Dispatch } from 'react';
|
|
3
|
+
import type { createResponseChunkAccumulator } from '../core/utils/accumulator';
|
|
4
|
+
import type { RqmiiState, RqmiiReconnectOptions, AgentType } from '../types';
|
|
5
|
+
import type { StateAction } from '../core/state/types';
|
|
6
|
+
interface SocketHandlerDeps {
|
|
7
|
+
socket: Socket;
|
|
8
|
+
dispatch: Dispatch<StateAction>;
|
|
9
|
+
stateRef: {
|
|
10
|
+
current: RqmiiState;
|
|
11
|
+
};
|
|
12
|
+
sessionIdRef: {
|
|
13
|
+
current: string | null;
|
|
14
|
+
};
|
|
15
|
+
sessionAgentTypeRef: {
|
|
16
|
+
current: AgentType | null;
|
|
17
|
+
};
|
|
18
|
+
interruptedRef: {
|
|
19
|
+
current: boolean;
|
|
20
|
+
};
|
|
21
|
+
manualDisconnectRef: {
|
|
22
|
+
current: boolean;
|
|
23
|
+
};
|
|
24
|
+
chunkAccumulatorRef: {
|
|
25
|
+
current: ReturnType<typeof createResponseChunkAccumulator>;
|
|
26
|
+
};
|
|
27
|
+
reconnectMgrRef: {
|
|
28
|
+
current: {
|
|
29
|
+
storeCredential: (p: unknown) => void;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
heartbeatMgrRef: {
|
|
33
|
+
current: {
|
|
34
|
+
start: (s: Socket) => void;
|
|
35
|
+
stop: () => void;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
audioMgrRef: {
|
|
39
|
+
current: {
|
|
40
|
+
feedAudio: (d: Uint8Array) => void;
|
|
41
|
+
requestStop: () => void;
|
|
42
|
+
interruptPlayback: () => void;
|
|
43
|
+
isDestroyed: () => boolean;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
enableAudio: boolean;
|
|
47
|
+
reconnectOptions?: RqmiiReconnectOptions;
|
|
48
|
+
cbRefs: {
|
|
49
|
+
current: {
|
|
50
|
+
onSessionExpired?: (payload?: {
|
|
51
|
+
sessionId?: string;
|
|
52
|
+
message?: string;
|
|
53
|
+
timestamp?: string;
|
|
54
|
+
}) => void;
|
|
55
|
+
onSessionTerminated?: () => void;
|
|
56
|
+
onError?: (payload?: {
|
|
57
|
+
code?: string;
|
|
58
|
+
message?: string;
|
|
59
|
+
detail?: string;
|
|
60
|
+
}) => void;
|
|
61
|
+
onDisconnect?: (reason?: string) => void;
|
|
62
|
+
onReconnectSuccess?: (payload?: {
|
|
63
|
+
sessionId?: string;
|
|
64
|
+
reconnectToken?: string;
|
|
65
|
+
role?: string;
|
|
66
|
+
}) => void;
|
|
67
|
+
onReconnectFailed?: (payload?: {
|
|
68
|
+
code?: string;
|
|
69
|
+
reason?: string;
|
|
70
|
+
}) => void;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
log: (...args: unknown[]) => void;
|
|
74
|
+
}
|
|
75
|
+
export declare function registerSocketHandlers(deps: SocketHandlerDeps): void;
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=socket-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-handlers.d.ts","sourceRoot":"","sources":["../../src/provider/socket-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Socket } from 'socket.io-client';
|
|
2
|
+
import type { RqmiiReconnectOptions, RqmiiPCMOptions } from '../types';
|
|
3
|
+
interface ManagerLifecycleOptions {
|
|
4
|
+
wsUrl: string;
|
|
5
|
+
restUrl: string;
|
|
6
|
+
reconnectOptions?: RqmiiReconnectOptions;
|
|
7
|
+
enableAudio: boolean;
|
|
8
|
+
pcmOptions?: RqmiiPCMOptions;
|
|
9
|
+
debug: boolean;
|
|
10
|
+
withCredentials: boolean;
|
|
11
|
+
heartbeatIntervalSeconds: number;
|
|
12
|
+
onPlaybackComplete: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function useManagerLifecycle(options: ManagerLifecycleOptions): {
|
|
15
|
+
socketMgrRef: import("react").MutableRefObject<{
|
|
16
|
+
connectSocketRaw: ({ authPayload, queryToken }: {
|
|
17
|
+
authPayload: Record<string, unknown>;
|
|
18
|
+
queryToken?: string | null;
|
|
19
|
+
}) => Socket;
|
|
20
|
+
cleanupSocket: () => void;
|
|
21
|
+
getSocket: () => Socket | null;
|
|
22
|
+
} | null>;
|
|
23
|
+
audioMgrRef: import("react").MutableRefObject<{
|
|
24
|
+
ensurePcmPlayer: () => (import("pcm-stream-player").FUPCMPlayer & {
|
|
25
|
+
_isDestroyed: () => boolean;
|
|
26
|
+
}) | null;
|
|
27
|
+
destroyPcmPlayer: () => void;
|
|
28
|
+
feedAudio: (audioData: Uint8Array) => void;
|
|
29
|
+
requestStop: () => void;
|
|
30
|
+
interruptPlayback: () => void;
|
|
31
|
+
pauseAudioPlayback: () => void;
|
|
32
|
+
resumeAudioPlayback: () => Promise<void>;
|
|
33
|
+
attachAudioElement: (element: HTMLAudioElement | null) => void;
|
|
34
|
+
getAudioElement: () => HTMLAudioElement | null;
|
|
35
|
+
isDestroyed: () => boolean;
|
|
36
|
+
} | null>;
|
|
37
|
+
reconnectMgrRef: import("react").MutableRefObject<{
|
|
38
|
+
storeCredential: (payload: unknown) => void;
|
|
39
|
+
getCredential: () => import("../core/managers/reconnect").ReconnectCredential | null;
|
|
40
|
+
clearCredential: () => void;
|
|
41
|
+
tryReconnect: ({ connectSocket, onAttempt, onSuccess, onFailure, isAborted, }: {
|
|
42
|
+
connectSocket: (args: {
|
|
43
|
+
authPayload: Record<string, unknown>;
|
|
44
|
+
expectReconnectSuccess: boolean;
|
|
45
|
+
}) => Promise<unknown>;
|
|
46
|
+
onAttempt?: (attempt: number) => void;
|
|
47
|
+
onSuccess?: () => void;
|
|
48
|
+
onFailure?: (msg: string) => void;
|
|
49
|
+
isAborted?: () => boolean;
|
|
50
|
+
}) => Promise<void>;
|
|
51
|
+
abortReconnect: () => void;
|
|
52
|
+
isReconnecting: () => boolean;
|
|
53
|
+
} | null>;
|
|
54
|
+
sessionMgrRef: import("react").MutableRefObject<{
|
|
55
|
+
initializeSession: ({ apiKey, publicChatId, agentId, userId, language, }?: {
|
|
56
|
+
apiKey?: string;
|
|
57
|
+
publicChatId?: string;
|
|
58
|
+
agentId?: string;
|
|
59
|
+
userId?: string;
|
|
60
|
+
language?: string;
|
|
61
|
+
}) => Promise<Record<string, unknown>>;
|
|
62
|
+
joinDesktopSession: ({ uniqueId, }: {
|
|
63
|
+
uniqueId: string;
|
|
64
|
+
}) => Promise<Record<string, unknown>>;
|
|
65
|
+
} | null>;
|
|
66
|
+
heartbeatMgrRef: import("react").MutableRefObject<{
|
|
67
|
+
start: (socket: {
|
|
68
|
+
emit: (event: string, payload: unknown) => void;
|
|
69
|
+
}) => void;
|
|
70
|
+
stop: () => void;
|
|
71
|
+
isRunning: () => boolean;
|
|
72
|
+
} | null>;
|
|
73
|
+
log: (...args: unknown[]) => void;
|
|
74
|
+
};
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=use-manager-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-manager-lifecycle.d.ts","sourceRoot":"","sources":["../../src/provider/use-manager-lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEvE,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB;;;;sBAhBP,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAyBnC,CAAC;qBAA0C,CAAC;qBAClE,CAAC;qBAAsC,CAAC;;;;;;;kBAF7B,CAAC;wBAA0B,CAAC;mBAAqB,CAAC;kBAC9D,CAAC;oBAAsB,CAAC;;;;;;;;;;;;;mBANQ,OAAO,EAAE;EA0C5C"}
|