@voicethere/client 0.3.0 → 0.4.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/CHANGELOG.md +8 -0
- package/dist/browser/browser-session.d.ts +1 -1
- package/dist/browser/browser-session.d.ts.map +1 -1
- package/dist/browser/browser-session.js +1 -1
- package/dist/browser/browser-session.js.map +1 -1
- package/dist/browser/browser-voice-session.d.ts +12 -0
- package/dist/browser/browser-voice-session.d.ts.map +1 -1
- package/dist/browser/browser-voice-session.js +87 -24
- package/dist/browser/browser-voice-session.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0 — 2026-06-16
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `BrowserVoiceSession.sendBinary` / `sendSyncBinary` — send `ArrayBuffer`/`Uint8Array` on control or sync data channels.
|
|
8
|
+
- `onBinaryMessage` callback for inbound binary frames.
|
|
9
|
+
- Export `VOICE_SYNC_CHANNEL_LABEL` (matches helpers / agent sync channel).
|
|
10
|
+
|
|
3
11
|
## 0.3.0 — 2026-06-15
|
|
4
12
|
|
|
5
13
|
### Added
|
|
@@ -14,7 +14,7 @@ export type BrowserSession = BrowserVoiceSession & {
|
|
|
14
14
|
};
|
|
15
15
|
export declare function connectBrowserSession(options: ConnectBrowserSessionOptions): Promise<BrowserSession>;
|
|
16
16
|
export { connectBrowserChatSession } from "./browser-chat-session.js";
|
|
17
|
-
export { connectBrowserVoiceSession } from "./browser-voice-session.js";
|
|
17
|
+
export { connectBrowserVoiceSession, VOICE_SYNC_CHANNEL_LABEL, VOICE_CONTROL_CHANNEL_LABEL, type BinaryMessageHandler, type DataChannelKind, } from "./browser-voice-session.js";
|
|
18
18
|
export { startSession } from "./session-provision.js";
|
|
19
19
|
export { attachAudioVisualizer } from "./audio-visualizer.js";
|
|
20
20
|
export { createDebugConsole } from "./debug-console.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG;IACjD,IAAI,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG;IACjD,IAAI,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -11,7 +11,7 @@ export async function connectBrowserSession(options) {
|
|
|
11
11
|
return { ...session, mode: options.mode };
|
|
12
12
|
}
|
|
13
13
|
export { connectBrowserChatSession } from "./browser-chat-session.js";
|
|
14
|
-
export { connectBrowserVoiceSession } from "./browser-voice-session.js";
|
|
14
|
+
export { connectBrowserVoiceSession, VOICE_SYNC_CHANNEL_LABEL, VOICE_CONTROL_CHANNEL_LABEL, } from "./browser-voice-session.js";
|
|
15
15
|
export { startSession } from "./session-provision.js";
|
|
16
16
|
export { attachAudioVisualizer } from "./audio-visualizer.js";
|
|
17
17
|
export { createDebugConsole } from "./debug-console.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,0BAA0B,GAE3B,MAAM,4BAA4B,CAAC;AAgBpC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAqC;IAErC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC;QAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU;QACV,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../../src/browser/browser-session.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,0BAA0B,GAE3B,MAAM,4BAA4B,CAAC;AAgBpC,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAqC;IAErC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC;QAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU;QACV,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,GAG5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -2,18 +2,30 @@ import type { SessionCredentials } from "./session-provision.js";
|
|
|
2
2
|
import type { DebugConsole } from "./debug-console.js";
|
|
3
3
|
export declare const VOICE_AGENT_SERVER_PEER_ID = "voice-agent-server";
|
|
4
4
|
export declare const VOICE_CONTROL_CHANNEL_LABEL = "voice-control";
|
|
5
|
+
/** High-frequency binary sync channel (matches `@node-webrtc-rust/sdk/voice`). */
|
|
6
|
+
export declare const VOICE_SYNC_CHANNEL_LABEL = "voicethere-sync";
|
|
7
|
+
export type DataChannelKind = "control" | "sync";
|
|
8
|
+
export type BinaryMessageHandler = (data: ArrayBuffer, channel: DataChannelKind) => void;
|
|
5
9
|
export type BrowserVoiceSessionOptions = {
|
|
6
10
|
credentials: SessionCredentials;
|
|
7
11
|
peerId?: string;
|
|
8
12
|
requestMic?: boolean;
|
|
9
13
|
audioElement?: HTMLAudioElement;
|
|
10
14
|
onDebugEvent?: DebugConsole;
|
|
15
|
+
/** Fired for binary frames on voice-control or voicethere-sync. */
|
|
16
|
+
onBinaryMessage?: BinaryMessageHandler;
|
|
11
17
|
};
|
|
12
18
|
export type BrowserVoiceSession = {
|
|
13
19
|
peerId: string;
|
|
14
20
|
disconnect: () => void;
|
|
15
21
|
sendSpeak: (text: string) => void;
|
|
16
22
|
sendChat: (text: string) => void;
|
|
23
|
+
/** JSON on voice-control (same as sendChat for `{ type: 'chat' }`). */
|
|
24
|
+
sendToAgent: (payload: Record<string, unknown>) => void;
|
|
25
|
+
/** Binary on voice-control data channel. */
|
|
26
|
+
sendBinary: (data: ArrayBuffer | Uint8Array) => void;
|
|
27
|
+
/** Binary on voicethere-sync data channel (throws if channel not open). */
|
|
28
|
+
sendSyncBinary: (data: ArrayBuffer | Uint8Array) => void;
|
|
17
29
|
getMicStream: () => MediaStream | null;
|
|
18
30
|
};
|
|
19
31
|
export declare function connectBrowserVoiceSession(options: BrowserVoiceSessionOptions): Promise<BrowserVoiceSession>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-voice-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-voice-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,0BAA0B,uBAAuB,CAAC;AAC/D,eAAO,MAAM,2BAA2B,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-voice-session.d.ts","sourceRoot":"","sources":["../../src/browser/browser-voice-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,0BAA0B,uBAAuB,CAAC;AAC/D,eAAO,MAAM,2BAA2B,kBAAkB,CAAC;AAC3D,kFAAkF;AAClF,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,KACrB,IAAI,CAAC;AAEV,MAAM,MAAM,0BAA0B,GAAG;IACvC,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mEAAmE;IACnE,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,uEAAuE;IACvE,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxD,4CAA4C;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,KAAK,IAAI,CAAC;IACrD,2EAA2E;IAC3E,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;CACxC,CAAC;AAcF,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAyQ9B"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { appendJoinToken } from "../resolve-connection.js";
|
|
2
2
|
export const VOICE_AGENT_SERVER_PEER_ID = "voice-agent-server";
|
|
3
3
|
export const VOICE_CONTROL_CHANNEL_LABEL = "voice-control";
|
|
4
|
+
/** High-frequency binary sync channel (matches `@node-webrtc-rust/sdk/voice`). */
|
|
5
|
+
export const VOICE_SYNC_CHANNEL_LABEL = "voicethere-sync";
|
|
4
6
|
function defaultPeerId() {
|
|
5
7
|
return `client-${Math.random().toString(36).slice(2, 10)}`;
|
|
6
8
|
}
|
|
9
|
+
function toArrayBuffer(data) {
|
|
10
|
+
if (data instanceof ArrayBuffer)
|
|
11
|
+
return data;
|
|
12
|
+
return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
13
|
+
}
|
|
7
14
|
export async function connectBrowserVoiceSession(options) {
|
|
8
15
|
const debug = options.onDebugEvent;
|
|
9
16
|
const peerId = options.peerId ?? defaultPeerId();
|
|
@@ -15,6 +22,7 @@ export async function connectBrowserVoiceSession(options) {
|
|
|
15
22
|
let ws = null;
|
|
16
23
|
let pc = null;
|
|
17
24
|
let controlChannel = null;
|
|
25
|
+
let syncChannel = null;
|
|
18
26
|
let micStream = null;
|
|
19
27
|
const pendingIce = [];
|
|
20
28
|
const sendSignal = (message) => {
|
|
@@ -25,6 +33,42 @@ export async function connectBrowserVoiceSession(options) {
|
|
|
25
33
|
const sendToServer = (payload) => {
|
|
26
34
|
sendSignal({ room: roomId, peerId, ...payload });
|
|
27
35
|
};
|
|
36
|
+
const dispatchBinary = (data, channel) => {
|
|
37
|
+
debug?.debug("dc", "binary", `${channel}:${data.byteLength}b`);
|
|
38
|
+
options.onBinaryMessage?.(data, channel);
|
|
39
|
+
};
|
|
40
|
+
const wireBinaryChannel = (channel, kind) => {
|
|
41
|
+
channel.binaryType = "arraybuffer";
|
|
42
|
+
channel.onmessage = (event) => {
|
|
43
|
+
if (typeof event.data === "string") {
|
|
44
|
+
if (kind === "control") {
|
|
45
|
+
debug?.debug("dc", "message", String(event.data));
|
|
46
|
+
try {
|
|
47
|
+
const message = JSON.parse(String(event.data));
|
|
48
|
+
if (message.type === "speech_event") {
|
|
49
|
+
debug?.info("speech", message.event ?? "event", message.text);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
debug?.info("dc", message.type ?? "json", message.text);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
debug?.warn("dc", "malformed", String(event.data));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const buf = event.data instanceof ArrayBuffer
|
|
62
|
+
? event.data
|
|
63
|
+
: (() => {
|
|
64
|
+
const view = event.data;
|
|
65
|
+
const copy = new ArrayBuffer(view.byteLength);
|
|
66
|
+
new Uint8Array(copy).set(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
|
|
67
|
+
return copy;
|
|
68
|
+
})();
|
|
69
|
+
dispatchBinary(buf, kind);
|
|
70
|
+
};
|
|
71
|
+
};
|
|
28
72
|
if (options.requestMic !== false) {
|
|
29
73
|
micStream = await navigator.mediaDevices.getUserMedia({
|
|
30
74
|
audio: true,
|
|
@@ -50,27 +94,24 @@ export async function connectBrowserVoiceSession(options) {
|
|
|
50
94
|
debug?.info("dc", "close", VOICE_CONTROL_CHANNEL_LABEL);
|
|
51
95
|
controlChannel = null;
|
|
52
96
|
};
|
|
53
|
-
channel
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
debug?.info("dc", message.type ?? "json", message.text);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
debug?.warn("dc", "malformed", String(event.data));
|
|
66
|
-
}
|
|
97
|
+
wireBinaryChannel(channel, "control");
|
|
98
|
+
};
|
|
99
|
+
const wireSync = (channel) => {
|
|
100
|
+
syncChannel = channel;
|
|
101
|
+
channel.onopen = () => debug?.info("dc", "open", VOICE_SYNC_CHANNEL_LABEL);
|
|
102
|
+
channel.onclose = () => {
|
|
103
|
+
debug?.info("dc", "close", VOICE_SYNC_CHANNEL_LABEL);
|
|
104
|
+
syncChannel = null;
|
|
67
105
|
};
|
|
106
|
+
wireBinaryChannel(channel, "sync");
|
|
68
107
|
};
|
|
69
108
|
const onServerOffer = async (sdp) => {
|
|
70
109
|
if (pc) {
|
|
71
110
|
pc.close();
|
|
72
111
|
pc = null;
|
|
73
112
|
pendingIce.length = 0;
|
|
113
|
+
controlChannel = null;
|
|
114
|
+
syncChannel = null;
|
|
74
115
|
}
|
|
75
116
|
pc = new RTCPeerConnection({ iceServers });
|
|
76
117
|
pc.ontrack = (event) => {
|
|
@@ -87,6 +128,9 @@ export async function connectBrowserVoiceSession(options) {
|
|
|
87
128
|
if (event.channel.label === VOICE_CONTROL_CHANNEL_LABEL) {
|
|
88
129
|
wireControl(event.channel);
|
|
89
130
|
}
|
|
131
|
+
else if (event.channel.label === VOICE_SYNC_CHANNEL_LABEL) {
|
|
132
|
+
wireSync(event.channel);
|
|
133
|
+
}
|
|
90
134
|
};
|
|
91
135
|
pc.onicecandidate = (event) => {
|
|
92
136
|
if (event.candidate) {
|
|
@@ -143,27 +187,46 @@ export async function connectBrowserVoiceSession(options) {
|
|
|
143
187
|
break;
|
|
144
188
|
}
|
|
145
189
|
};
|
|
190
|
+
const requireOpenControl = () => {
|
|
191
|
+
if (!controlChannel || controlChannel.readyState !== "open") {
|
|
192
|
+
debug?.error("dc", "control_not_open");
|
|
193
|
+
throw new Error("voice-control data channel is not open");
|
|
194
|
+
}
|
|
195
|
+
return controlChannel;
|
|
196
|
+
};
|
|
197
|
+
const requireOpenSync = () => {
|
|
198
|
+
if (!syncChannel || syncChannel.readyState !== "open") {
|
|
199
|
+
debug?.error("dc", "sync_not_open");
|
|
200
|
+
throw new Error("voicethere-sync data channel is not open");
|
|
201
|
+
}
|
|
202
|
+
return syncChannel;
|
|
203
|
+
};
|
|
146
204
|
return {
|
|
147
205
|
peerId,
|
|
148
206
|
getMicStream: () => micStream,
|
|
149
207
|
sendSpeak: (text) => {
|
|
150
|
-
|
|
151
|
-
debug?.error("dc", "speak_failed", "control channel not open");
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
controlChannel.send(JSON.stringify({ type: "speak", text }));
|
|
208
|
+
requireOpenControl().send(JSON.stringify({ type: "speak", text }));
|
|
155
209
|
debug?.info("dc", "speak", text);
|
|
156
210
|
},
|
|
157
211
|
sendChat: (text) => {
|
|
158
|
-
|
|
159
|
-
debug?.error("dc", "chat_failed", "control channel not open");
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
controlChannel.send(JSON.stringify({ type: "chat", text }));
|
|
212
|
+
requireOpenControl().send(JSON.stringify({ type: "chat", text }));
|
|
163
213
|
debug?.info("dc", "chat", text);
|
|
164
214
|
},
|
|
215
|
+
sendToAgent: (payload) => {
|
|
216
|
+
requireOpenControl().send(JSON.stringify(payload));
|
|
217
|
+
debug?.info("dc", "json", String(payload.type ?? "payload"));
|
|
218
|
+
},
|
|
219
|
+
sendBinary: (data) => {
|
|
220
|
+
requireOpenControl().send(toArrayBuffer(data));
|
|
221
|
+
debug?.debug("dc", "binary_send", `control:${data.byteLength}b`);
|
|
222
|
+
},
|
|
223
|
+
sendSyncBinary: (data) => {
|
|
224
|
+
requireOpenSync().send(toArrayBuffer(data));
|
|
225
|
+
debug?.debug("dc", "binary_send", `sync:${data.byteLength}b`);
|
|
226
|
+
},
|
|
165
227
|
disconnect: () => {
|
|
166
228
|
controlChannel?.close();
|
|
229
|
+
syncChannel?.close();
|
|
167
230
|
pc?.close();
|
|
168
231
|
micStream?.getTracks().forEach((track) => track.stop());
|
|
169
232
|
ws?.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-voice-session.js","sourceRoot":"","sources":["../../src/browser/browser-voice-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAI3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAC/D,MAAM,CAAC,MAAM,2BAA2B,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-voice-session.js","sourceRoot":"","sources":["../../src/browser/browser-voice-session.ts"],"names":[],"mappings":"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"}
|