ugly-app 0.1.282 → 0.1.284
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/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/audio/AudioRecorder.d.ts.map +1 -1
- package/dist/client/audio/AudioRecorder.js +25 -0
- package/dist/client/audio/AudioRecorder.js.map +1 -1
- package/dist/client/audio/useSTT.d.ts.map +1 -1
- package/dist/client/audio/useSTT.js +26 -4
- package/dist/client/audio/useSTT.js.map +1 -1
- package/dist/client/uglyBotSocket.d.ts.map +1 -1
- package/dist/client/uglyBotSocket.js +14 -2
- package/dist/client/uglyBotSocket.js.map +1 -1
- package/dist/server/Socket.d.ts.map +1 -1
- package/dist/server/Socket.js +27 -1
- package/dist/server/Socket.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/client/audio/AudioRecorder.ts +28 -0
- package/src/client/audio/useSTT.ts +28 -4
- package/src/client/uglyBotSocket.ts +12 -2
- package/src/server/Socket.ts +28 -1
- package/templates/client/pages/AudioTestPage.tsx +30 -7
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.284";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioRecorder.d.ts","sourceRoot":"","sources":["../../../src/client/audio/AudioRecorder.ts"],"names":[],"mappings":"AA8BA,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA2C;IAE1D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAEK,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioRecorder.d.ts","sourceRoot":"","sources":["../../../src/client/audio/AudioRecorder.ts"],"names":[],"mappings":"AA8BA,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAA6B;IACxC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA2C;IAE1D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAEK,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DlE,IAAI,IAAI,IAAI;CAYb"}
|
|
@@ -40,6 +40,7 @@ export class AudioRecorder {
|
|
|
40
40
|
if (this._listening)
|
|
41
41
|
return;
|
|
42
42
|
this.onChunk = onChunk;
|
|
43
|
+
console.log('[AudioRecorder] requesting mic access…');
|
|
43
44
|
this.stream = await navigator.mediaDevices.getUserMedia({
|
|
44
45
|
audio: {
|
|
45
46
|
sampleRate: TARGET_SAMPLE_RATE,
|
|
@@ -48,13 +49,35 @@ export class AudioRecorder {
|
|
|
48
49
|
noiseSuppression: true,
|
|
49
50
|
},
|
|
50
51
|
});
|
|
52
|
+
const track = this.stream.getAudioTracks()[0];
|
|
53
|
+
if (track) {
|
|
54
|
+
const settings = track.getSettings();
|
|
55
|
+
console.log(`[AudioRecorder] mic acquired: ${track.label} (${settings.sampleRate ?? '?'}Hz, ${settings.channelCount ?? '?'}ch)`);
|
|
56
|
+
}
|
|
51
57
|
this.ctx = new AudioContext({ sampleRate: TARGET_SAMPLE_RATE });
|
|
58
|
+
console.log(`[AudioRecorder] AudioContext state=${this.ctx.state} sampleRate=${this.ctx.sampleRate}`);
|
|
52
59
|
const source = this.ctx.createMediaStreamSource(this.stream);
|
|
53
60
|
await this.ctx.audioWorklet.addModule(WORKLET_URL);
|
|
61
|
+
console.log('[AudioRecorder] worklet loaded');
|
|
54
62
|
this.worklet = new AudioWorkletNode(this.ctx, 'audio-recorder');
|
|
63
|
+
let chunkCount = 0;
|
|
64
|
+
let silentChunks = 0;
|
|
55
65
|
this.worklet.port.onmessage = (event) => {
|
|
56
66
|
if (event.data?.type === 'chunk') {
|
|
57
67
|
const floatData = event.data.samples;
|
|
68
|
+
chunkCount++;
|
|
69
|
+
// Check for silence (all samples near zero)
|
|
70
|
+
let maxAbs = 0;
|
|
71
|
+
for (let i = 0; i < floatData.length; i += 64) {
|
|
72
|
+
const abs = Math.abs(floatData[i] ?? 0);
|
|
73
|
+
if (abs > maxAbs)
|
|
74
|
+
maxAbs = abs;
|
|
75
|
+
}
|
|
76
|
+
if (maxAbs < 0.001)
|
|
77
|
+
silentChunks++;
|
|
78
|
+
if (chunkCount <= 3 || chunkCount % 100 === 0) {
|
|
79
|
+
console.log(`[AudioRecorder] chunk #${chunkCount} maxAbs=${maxAbs.toFixed(4)} silentChunks=${silentChunks}/${chunkCount}`);
|
|
80
|
+
}
|
|
58
81
|
const int16 = float32ToInt16(floatData);
|
|
59
82
|
const base64 = arrayBufferToBase64(int16.buffer);
|
|
60
83
|
this.onChunk?.(base64);
|
|
@@ -63,10 +86,12 @@ export class AudioRecorder {
|
|
|
63
86
|
source.connect(this.worklet);
|
|
64
87
|
this.worklet.connect(this.ctx.destination);
|
|
65
88
|
this._listening = true;
|
|
89
|
+
console.log('[AudioRecorder] recording started');
|
|
66
90
|
}
|
|
67
91
|
stop() {
|
|
68
92
|
if (!this._listening)
|
|
69
93
|
return;
|
|
94
|
+
console.log('[AudioRecorder] stopping');
|
|
70
95
|
this.worklet?.disconnect();
|
|
71
96
|
this.stream?.getTracks().forEach((t) => t.stop());
|
|
72
97
|
this.ctx?.close().catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioRecorder.js","sourceRoot":"","sources":["../../../src/client/audio/AudioRecorder.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBpB,CAAC;AACF,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAClF,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;AACtD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,MAAM,OAAO,aAAa;IAChB,GAAG,GAAwB,IAAI,CAAC;IAChC,MAAM,GAAuB,IAAI,CAAC;IAClC,OAAO,GAA4B,IAAI,CAAC;IACxC,UAAU,GAAG,KAAK,CAAC;IACnB,OAAO,GAAsC,IAAI,CAAC;IAE1D,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAsC;QAChD,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;YACtD,KAAK,EAAE;gBACL,UAAU,EAAE,kBAAkB;gBAC9B,YAAY,EAAE,CAAC;gBACf,gBAAgB,EAAE,IAAI;gBACtB,gBAAgB,EAAE,IAAI;aACvB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7D,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioRecorder.js","sourceRoot":"","sources":["../../../src/client/audio/AudioRecorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSTT.d.ts","sourceRoot":"","sources":["../../../src/client/audio/useSTT.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,UAAe;;;;;;;
|
|
1
|
+
{"version":3,"file":"useSTT.d.ts","sourceRoot":"","sources":["../../../src/client/audio/useSTT.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,UAAe;;;;;;;EA+HrE"}
|
|
@@ -28,20 +28,27 @@ export function useSTT(socket, options = {}) {
|
|
|
28
28
|
setIsFinal(false);
|
|
29
29
|
setError(null);
|
|
30
30
|
setListening(true);
|
|
31
|
+
const mode = options.mode ?? 'auto';
|
|
32
|
+
console.log(`[STT] start streamId=${streamId} mode=${mode} lang=${options.lang ?? 'auto'}`);
|
|
31
33
|
await socket.acquire();
|
|
34
|
+
console.log('[STT] socket acquired');
|
|
32
35
|
cleanupListeners();
|
|
36
|
+
let chunkCount = 0;
|
|
33
37
|
unsubsRef.current.push(socket.on('stt:ready', (data) => {
|
|
34
38
|
if (data.streamId !== streamId)
|
|
35
39
|
return;
|
|
40
|
+
console.log(`[STT] ready streamId=${streamId}`);
|
|
36
41
|
readyRef.current = true;
|
|
37
42
|
}), socket.on('stt:transcript', (data) => {
|
|
38
43
|
if (data.streamId !== streamId)
|
|
39
44
|
return;
|
|
45
|
+
console.log(`[STT] transcript isFinal=${data.isFinal} text="${data.text}" (after ${chunkCount} chunks)`);
|
|
40
46
|
setTranscript(data.text);
|
|
41
47
|
setIsFinal(data.isFinal);
|
|
42
48
|
}), socket.on('stt:error', (data) => {
|
|
43
49
|
if (data.streamId !== streamId)
|
|
44
50
|
return;
|
|
51
|
+
console.error(`[STT] error streamId=${streamId}: ${data.message}`);
|
|
45
52
|
setError(data.message);
|
|
46
53
|
setListening(false);
|
|
47
54
|
cleanupListeners();
|
|
@@ -49,34 +56,49 @@ export function useSTT(socket, options = {}) {
|
|
|
49
56
|
}), socket.on('stt:stopped', (data) => {
|
|
50
57
|
if (data.streamId !== streamId)
|
|
51
58
|
return;
|
|
59
|
+
console.log(`[STT] stopped streamId=${streamId} (sent ${chunkCount} audio chunks)`);
|
|
52
60
|
setListening(false);
|
|
53
61
|
cleanupListeners();
|
|
54
62
|
socket.release();
|
|
55
63
|
}));
|
|
56
64
|
socket.send('stt:start', {
|
|
57
65
|
streamId,
|
|
58
|
-
mode
|
|
66
|
+
mode,
|
|
59
67
|
lang: options.lang,
|
|
60
68
|
});
|
|
61
69
|
// Wait for stt:ready (timeout after 5s)
|
|
70
|
+
const readyStart = Date.now();
|
|
62
71
|
await new Promise((resolve) => {
|
|
63
|
-
const startTime = Date.now();
|
|
64
72
|
const poll = setInterval(() => {
|
|
65
|
-
if (readyRef.current || Date.now() -
|
|
73
|
+
if (readyRef.current || Date.now() - readyStart > 5000) {
|
|
66
74
|
clearInterval(poll);
|
|
67
75
|
resolve();
|
|
68
76
|
}
|
|
69
77
|
}, 50);
|
|
70
78
|
});
|
|
71
|
-
if (
|
|
79
|
+
if (!readyRef.current) {
|
|
80
|
+
console.warn(`[STT] ready timeout after ${Date.now() - readyStart}ms — proceeding anyway`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log(`[STT] ready in ${Date.now() - readyStart}ms`);
|
|
84
|
+
}
|
|
85
|
+
if (cancelledRef.current) {
|
|
86
|
+
console.log('[STT] cancelled before recording started');
|
|
72
87
|
return;
|
|
88
|
+
}
|
|
73
89
|
if (!recorderRef.current)
|
|
74
90
|
recorderRef.current = new AudioRecorder();
|
|
75
91
|
await recorderRef.current.start((audio) => {
|
|
92
|
+
chunkCount++;
|
|
93
|
+
if (chunkCount <= 3 || chunkCount % 50 === 0) {
|
|
94
|
+
console.log(`[STT] audio chunk #${chunkCount} (${audio.length} b64 chars)`);
|
|
95
|
+
}
|
|
76
96
|
socket.send('stt:audio', { streamId, audio });
|
|
77
97
|
});
|
|
98
|
+
console.log('[STT] recording started');
|
|
78
99
|
}, [socket, listening, options.mode, options.lang]);
|
|
79
100
|
const stop = useCallback(() => {
|
|
101
|
+
console.log(`[STT] stop streamId=${streamIdRef.current}`);
|
|
80
102
|
cancelledRef.current = true;
|
|
81
103
|
recorderRef.current?.stop();
|
|
82
104
|
if (streamIdRef.current) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSTT.js","sourceRoot":"","sources":["../../../src/client/audio/useSTT.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,MAAM,CAAC,MAAqB,EAAE,UAAsB,EAAE;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAiB,EAAE,CAAC,CAAC;IAE7C,SAAS,gBAAgB;QACvB,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO;YAAE,KAAK,EAAE,CAAC;QAC/C,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACnC,IAAI,SAAS;YAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC;QACvC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC/B,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;QAC7B,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useSTT.js","sourceRoot":"","sources":["../../../src/client/audio/useSTT.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uglyBotSocket.d.ts","sourceRoot":"","sources":["../../src/client/uglyBotSocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAC9B,KAAK,aAAa,GAAG,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,CAAC,SAAS,aAAa,EAC1B,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACpC,IAAI,CAAC;IACR,EAAE,CAAC,CAAC,SAAS,aAAa,EACxB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GACvD,WAAW,CAAC;IACf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"uglyBotSocket.d.ts","sourceRoot":"","sources":["../../src/client/uglyBotSocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAC9B,KAAK,aAAa,GAAG,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,CAAC,SAAS,aAAa,EAC1B,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACpC,IAAI,CAAC;IACR,EAAE,CAAC,CAAC,SAAS,aAAa,EACxB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GACvD,WAAW,CAAC;IACf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAmHnE"}
|
|
@@ -8,11 +8,15 @@ export function createUglyBotSocket(appToken) {
|
|
|
8
8
|
const listeners = new Map();
|
|
9
9
|
function handleMessage(event) {
|
|
10
10
|
const msg = JSON.parse(event.data);
|
|
11
|
+
console.log(`[UglyBotSocket] recv ${msg.type}`, msg.data);
|
|
11
12
|
const set = listeners.get(msg.type);
|
|
12
13
|
if (set) {
|
|
13
14
|
for (const handler of set)
|
|
14
15
|
handler(msg.data);
|
|
15
16
|
}
|
|
17
|
+
else {
|
|
18
|
+
console.warn(`[UglyBotSocket] no listeners for ${msg.type}`);
|
|
19
|
+
}
|
|
16
20
|
}
|
|
17
21
|
function ensureConnection() {
|
|
18
22
|
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
@@ -22,17 +26,21 @@ export function createUglyBotSocket(appToken) {
|
|
|
22
26
|
return connectPromise;
|
|
23
27
|
connectPromise = new Promise((resolve, reject) => {
|
|
24
28
|
const url = `${getUglyBotWsUrl()}/ws?token=${encodeURIComponent(appToken)}`;
|
|
29
|
+
console.log(`[UglyBotSocket] connecting to ${url.replace(/token=[^&]+/, 'token=***')}`);
|
|
25
30
|
const socket = new WebSocket(url);
|
|
26
31
|
socket.addEventListener('open', () => {
|
|
32
|
+
console.log('[UglyBotSocket] connected');
|
|
27
33
|
ws = socket;
|
|
28
34
|
connectPromise = null;
|
|
29
35
|
resolve();
|
|
30
36
|
});
|
|
31
|
-
socket.addEventListener('error', () => {
|
|
37
|
+
socket.addEventListener('error', (e) => {
|
|
38
|
+
console.error('[UglyBotSocket] connection error', e);
|
|
32
39
|
connectPromise = null;
|
|
33
40
|
reject(new Error('ugly.bot WebSocket connection failed'));
|
|
34
41
|
});
|
|
35
|
-
socket.addEventListener('close', () => {
|
|
42
|
+
socket.addEventListener('close', (e) => {
|
|
43
|
+
console.log(`[UglyBotSocket] closed code=${e.code} reason=${e.reason}`);
|
|
36
44
|
if (ws === socket)
|
|
37
45
|
ws = null;
|
|
38
46
|
connectPromise = null;
|
|
@@ -65,8 +73,12 @@ export function createUglyBotSocket(appToken) {
|
|
|
65
73
|
return {
|
|
66
74
|
send(type, data) {
|
|
67
75
|
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
76
|
+
console.log(`[UglyBotSocket] send ${type}`, data);
|
|
68
77
|
ws.send(JSON.stringify({ type, data }));
|
|
69
78
|
}
|
|
79
|
+
else {
|
|
80
|
+
console.error(`[UglyBotSocket] send DROPPED ${type} — ws ${ws ? `readyState=${ws.readyState}` : 'null'}`);
|
|
81
|
+
}
|
|
70
82
|
},
|
|
71
83
|
on(event, handler) {
|
|
72
84
|
let set = listeners.get(event);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uglyBotSocket.js","sourceRoot":"","sources":["../../src/client/uglyBotSocket.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAkB1D,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,EAAE,GAAqB,IAAI,CAAC;IAChC,IAAI,cAAc,GAAyB,IAAI,CAAC;IAChD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAyC,IAAI,CAAC;IAE3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwC,CAAC;IAElE,SAAS,aAAa,CAAC,KAAmB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAc,CAG1C,CAAC;QACF,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,MAAM,OAAO,IAAI,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB;QACvB,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,cAAc;YAAE,OAAO,cAAc,CAAC;QAE1C,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrD,MAAM,GAAG,GAAG,GAAG,eAAe,EAAE,aAAa,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;YAElC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;gBACnC,EAAE,GAAG,MAAM,CAAC;gBACZ,cAAc,GAAG,IAAI,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"uglyBotSocket.js","sourceRoot":"","sources":["../../src/client/uglyBotSocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Socket.d.ts","sourceRoot":"","sources":["../../src/server/Socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA+ClD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,aAAa,GAAG,IAAI,EAE9B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAErB,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,EAC5B,MAAM,SAAS,EACf,uBAAuB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,EAAE;AACtF;yEACyE;AACzE,WAAW,CAAC,EAAE,eAAe;AAC7B;+EAC+E;AAC/E,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACzF,eAAe,
|
|
1
|
+
{"version":3,"file":"Socket.d.ts","sourceRoot":"","sources":["../../src/server/Socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA+ClD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,aAAa,GAAG,IAAI,EAE9B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAErB,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,EAC5B,MAAM,SAAS,EACf,uBAAuB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,EAAE;AACtF;yEACyE;AACzE,WAAW,CAAC,EAAE,eAAe;AAC7B;+EAC+E;AAC/E,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACzF,eAAe,CA4ZjB"}
|
package/dist/server/Socket.js
CHANGED
|
@@ -29,7 +29,33 @@ onAuth) {
|
|
|
29
29
|
const sessions = new Map();
|
|
30
30
|
wss.on('connection', (ws, req) => {
|
|
31
31
|
let session = null;
|
|
32
|
+
// Support URL token auth: ws://host/ws?token=JWT
|
|
33
|
+
// This allows direct connections (e.g. UglyBotSocket) without a message-based auth handshake.
|
|
34
|
+
const connUrl = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
|
|
35
|
+
const urlToken = connUrl.searchParams.get('token');
|
|
36
|
+
let urlAuthPromise = null;
|
|
37
|
+
if (urlToken) {
|
|
38
|
+
urlAuthPromise = (async () => {
|
|
39
|
+
try {
|
|
40
|
+
const userId = await verifyToken(urlToken);
|
|
41
|
+
const user = { _id: userId, userId };
|
|
42
|
+
const unregisterPush = await registerPushConnection(userId, ws);
|
|
43
|
+
session = { userId, ws, subscriptions: new Map(), unregisterPush };
|
|
44
|
+
sessions.set(ws, session);
|
|
45
|
+
if (onAuth)
|
|
46
|
+
await onAuth(ws, userId, req);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
ws.close(4001, 'Invalid token');
|
|
50
|
+
}
|
|
51
|
+
})();
|
|
52
|
+
}
|
|
32
53
|
ws.on('message', async (data) => {
|
|
54
|
+
// If URL token auth is in progress, wait for it to complete
|
|
55
|
+
if (urlAuthPromise) {
|
|
56
|
+
await urlAuthPromise;
|
|
57
|
+
urlAuthPromise = null;
|
|
58
|
+
}
|
|
33
59
|
let msg;
|
|
34
60
|
try {
|
|
35
61
|
msg = JSON.parse(String(data));
|
|
@@ -38,7 +64,7 @@ onAuth) {
|
|
|
38
64
|
ws.close();
|
|
39
65
|
return;
|
|
40
66
|
}
|
|
41
|
-
// Auth handshake must be first message
|
|
67
|
+
// Auth handshake must be first message (unless URL token was used)
|
|
42
68
|
if (!session) {
|
|
43
69
|
if (msg.type !== 'auth') {
|
|
44
70
|
ws.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Socket.js","sourceRoot":"","sources":["../../src/server/Socket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Socket.js","sourceRoot":"","sources":["../../src/server/Socket.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.284";
|
|
@@ -43,6 +43,7 @@ export class AudioRecorder {
|
|
|
43
43
|
if (this._listening) return;
|
|
44
44
|
this.onChunk = onChunk;
|
|
45
45
|
|
|
46
|
+
console.log('[AudioRecorder] requesting mic access…');
|
|
46
47
|
this.stream = await navigator.mediaDevices.getUserMedia({
|
|
47
48
|
audio: {
|
|
48
49
|
sampleRate: TARGET_SAMPLE_RATE,
|
|
@@ -52,14 +53,39 @@ export class AudioRecorder {
|
|
|
52
53
|
},
|
|
53
54
|
});
|
|
54
55
|
|
|
56
|
+
const track = this.stream.getAudioTracks()[0];
|
|
57
|
+
if (track) {
|
|
58
|
+
const settings = track.getSettings();
|
|
59
|
+
console.log(`[AudioRecorder] mic acquired: ${track.label} (${settings.sampleRate ?? '?'}Hz, ${settings.channelCount ?? '?'}ch)`);
|
|
60
|
+
}
|
|
61
|
+
|
|
55
62
|
this.ctx = new AudioContext({ sampleRate: TARGET_SAMPLE_RATE });
|
|
63
|
+
console.log(`[AudioRecorder] AudioContext state=${this.ctx.state} sampleRate=${this.ctx.sampleRate}`);
|
|
56
64
|
const source = this.ctx.createMediaStreamSource(this.stream);
|
|
57
65
|
|
|
58
66
|
await this.ctx.audioWorklet.addModule(WORKLET_URL);
|
|
67
|
+
console.log('[AudioRecorder] worklet loaded');
|
|
59
68
|
this.worklet = new AudioWorkletNode(this.ctx, 'audio-recorder');
|
|
69
|
+
|
|
70
|
+
let chunkCount = 0;
|
|
71
|
+
let silentChunks = 0;
|
|
60
72
|
this.worklet.port.onmessage = (event: MessageEvent) => {
|
|
61
73
|
if (event.data?.type === 'chunk') {
|
|
62
74
|
const floatData = event.data.samples as Float32Array;
|
|
75
|
+
chunkCount++;
|
|
76
|
+
|
|
77
|
+
// Check for silence (all samples near zero)
|
|
78
|
+
let maxAbs = 0;
|
|
79
|
+
for (let i = 0; i < floatData.length; i += 64) {
|
|
80
|
+
const abs = Math.abs(floatData[i] ?? 0);
|
|
81
|
+
if (abs > maxAbs) maxAbs = abs;
|
|
82
|
+
}
|
|
83
|
+
if (maxAbs < 0.001) silentChunks++;
|
|
84
|
+
|
|
85
|
+
if (chunkCount <= 3 || chunkCount % 100 === 0) {
|
|
86
|
+
console.log(`[AudioRecorder] chunk #${chunkCount} maxAbs=${maxAbs.toFixed(4)} silentChunks=${silentChunks}/${chunkCount}`);
|
|
87
|
+
}
|
|
88
|
+
|
|
63
89
|
const int16 = float32ToInt16(floatData);
|
|
64
90
|
const base64 = arrayBufferToBase64(int16.buffer as ArrayBuffer);
|
|
65
91
|
this.onChunk?.(base64);
|
|
@@ -69,10 +95,12 @@ export class AudioRecorder {
|
|
|
69
95
|
source.connect(this.worklet);
|
|
70
96
|
this.worklet.connect(this.ctx.destination);
|
|
71
97
|
this._listening = true;
|
|
98
|
+
console.log('[AudioRecorder] recording started');
|
|
72
99
|
}
|
|
73
100
|
|
|
74
101
|
stop(): void {
|
|
75
102
|
if (!this._listening) return;
|
|
103
|
+
console.log('[AudioRecorder] stopping');
|
|
76
104
|
this.worklet?.disconnect();
|
|
77
105
|
this.stream?.getTracks().forEach((t) => t.stop());
|
|
78
106
|
this.ctx?.close().catch(() => {});
|
|
@@ -38,21 +38,29 @@ export function useSTT(socket: UglyBotSocket, options: STTOptions = {}) {
|
|
|
38
38
|
setError(null);
|
|
39
39
|
setListening(true);
|
|
40
40
|
|
|
41
|
+
const mode = options.mode ?? 'auto';
|
|
42
|
+
console.log(`[STT] start streamId=${streamId} mode=${mode} lang=${options.lang ?? 'auto'}`);
|
|
43
|
+
|
|
41
44
|
await socket.acquire();
|
|
45
|
+
console.log('[STT] socket acquired');
|
|
42
46
|
|
|
43
47
|
cleanupListeners();
|
|
48
|
+
let chunkCount = 0;
|
|
44
49
|
unsubsRef.current.push(
|
|
45
50
|
socket.on('stt:ready', (data) => {
|
|
46
51
|
if (data.streamId !== streamId) return;
|
|
52
|
+
console.log(`[STT] ready streamId=${streamId}`);
|
|
47
53
|
readyRef.current = true;
|
|
48
54
|
}),
|
|
49
55
|
socket.on('stt:transcript', (data) => {
|
|
50
56
|
if (data.streamId !== streamId) return;
|
|
57
|
+
console.log(`[STT] transcript isFinal=${data.isFinal} text="${data.text}" (after ${chunkCount} chunks)`);
|
|
51
58
|
setTranscript(data.text);
|
|
52
59
|
setIsFinal(data.isFinal);
|
|
53
60
|
}),
|
|
54
61
|
socket.on('stt:error', (data) => {
|
|
55
62
|
if (data.streamId !== streamId) return;
|
|
63
|
+
console.error(`[STT] error streamId=${streamId}: ${data.message}`);
|
|
56
64
|
setError(data.message);
|
|
57
65
|
setListening(false);
|
|
58
66
|
cleanupListeners();
|
|
@@ -60,6 +68,7 @@ export function useSTT(socket: UglyBotSocket, options: STTOptions = {}) {
|
|
|
60
68
|
}),
|
|
61
69
|
socket.on('stt:stopped', (data) => {
|
|
62
70
|
if (data.streamId !== streamId) return;
|
|
71
|
+
console.log(`[STT] stopped streamId=${streamId} (sent ${chunkCount} audio chunks)`);
|
|
63
72
|
setListening(false);
|
|
64
73
|
cleanupListeners();
|
|
65
74
|
socket.release();
|
|
@@ -68,30 +77,45 @@ export function useSTT(socket: UglyBotSocket, options: STTOptions = {}) {
|
|
|
68
77
|
|
|
69
78
|
socket.send('stt:start', {
|
|
70
79
|
streamId,
|
|
71
|
-
mode
|
|
80
|
+
mode,
|
|
72
81
|
lang: options.lang,
|
|
73
82
|
});
|
|
74
83
|
|
|
75
84
|
// Wait for stt:ready (timeout after 5s)
|
|
85
|
+
const readyStart = Date.now();
|
|
76
86
|
await new Promise<void>((resolve) => {
|
|
77
|
-
const startTime = Date.now();
|
|
78
87
|
const poll = setInterval(() => {
|
|
79
|
-
if (readyRef.current || Date.now() -
|
|
88
|
+
if (readyRef.current || Date.now() - readyStart > 5000) {
|
|
80
89
|
clearInterval(poll);
|
|
81
90
|
resolve();
|
|
82
91
|
}
|
|
83
92
|
}, 50);
|
|
84
93
|
});
|
|
85
94
|
|
|
86
|
-
if (
|
|
95
|
+
if (!readyRef.current) {
|
|
96
|
+
console.warn(`[STT] ready timeout after ${Date.now() - readyStart}ms — proceeding anyway`);
|
|
97
|
+
} else {
|
|
98
|
+
console.log(`[STT] ready in ${Date.now() - readyStart}ms`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (cancelledRef.current) {
|
|
102
|
+
console.log('[STT] cancelled before recording started');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
87
105
|
|
|
88
106
|
if (!recorderRef.current) recorderRef.current = new AudioRecorder();
|
|
89
107
|
await recorderRef.current.start((audio) => {
|
|
108
|
+
chunkCount++;
|
|
109
|
+
if (chunkCount <= 3 || chunkCount % 50 === 0) {
|
|
110
|
+
console.log(`[STT] audio chunk #${chunkCount} (${audio.length} b64 chars)`);
|
|
111
|
+
}
|
|
90
112
|
socket.send('stt:audio', { streamId, audio });
|
|
91
113
|
});
|
|
114
|
+
console.log('[STT] recording started');
|
|
92
115
|
}, [socket, listening, options.mode, options.lang]);
|
|
93
116
|
|
|
94
117
|
const stop = useCallback(() => {
|
|
118
|
+
console.log(`[STT] stop streamId=${streamIdRef.current}`);
|
|
95
119
|
cancelledRef.current = true;
|
|
96
120
|
recorderRef.current?.stop();
|
|
97
121
|
if (streamIdRef.current) {
|
|
@@ -33,9 +33,12 @@ export function createUglyBotSocket(appToken: string): UglyBotSocket {
|
|
|
33
33
|
type: string;
|
|
34
34
|
data?: unknown;
|
|
35
35
|
};
|
|
36
|
+
console.log(`[UglyBotSocket] recv ${msg.type}`, msg.data);
|
|
36
37
|
const set = listeners.get(msg.type);
|
|
37
38
|
if (set) {
|
|
38
39
|
for (const handler of set) handler(msg.data);
|
|
40
|
+
} else {
|
|
41
|
+
console.warn(`[UglyBotSocket] no listeners for ${msg.type}`);
|
|
39
42
|
}
|
|
40
43
|
}
|
|
41
44
|
|
|
@@ -47,20 +50,24 @@ export function createUglyBotSocket(appToken: string): UglyBotSocket {
|
|
|
47
50
|
|
|
48
51
|
connectPromise = new Promise<void>((resolve, reject) => {
|
|
49
52
|
const url = `${getUglyBotWsUrl()}/ws?token=${encodeURIComponent(appToken)}`;
|
|
53
|
+
console.log(`[UglyBotSocket] connecting to ${url.replace(/token=[^&]+/, 'token=***')}`);
|
|
50
54
|
const socket = new WebSocket(url);
|
|
51
55
|
|
|
52
56
|
socket.addEventListener('open', () => {
|
|
57
|
+
console.log('[UglyBotSocket] connected');
|
|
53
58
|
ws = socket;
|
|
54
59
|
connectPromise = null;
|
|
55
60
|
resolve();
|
|
56
61
|
});
|
|
57
62
|
|
|
58
|
-
socket.addEventListener('error', () => {
|
|
63
|
+
socket.addEventListener('error', (e) => {
|
|
64
|
+
console.error('[UglyBotSocket] connection error', e);
|
|
59
65
|
connectPromise = null;
|
|
60
66
|
reject(new Error('ugly.bot WebSocket connection failed'));
|
|
61
67
|
});
|
|
62
68
|
|
|
63
|
-
socket.addEventListener('close', () => {
|
|
69
|
+
socket.addEventListener('close', (e) => {
|
|
70
|
+
console.log(`[UglyBotSocket] closed code=${e.code} reason=${e.reason}`);
|
|
64
71
|
if (ws === socket) ws = null;
|
|
65
72
|
connectPromise = null;
|
|
66
73
|
});
|
|
@@ -97,7 +104,10 @@ export function createUglyBotSocket(appToken: string): UglyBotSocket {
|
|
|
97
104
|
return {
|
|
98
105
|
send(type, data) {
|
|
99
106
|
if (ws && ws.readyState === WebSocket.OPEN) {
|
|
107
|
+
console.log(`[UglyBotSocket] send ${type as string}`, data);
|
|
100
108
|
ws.send(JSON.stringify({ type, data }));
|
|
109
|
+
} else {
|
|
110
|
+
console.error(`[UglyBotSocket] send DROPPED ${type as string} — ws ${ws ? `readyState=${ws.readyState}` : 'null'}`);
|
|
101
111
|
}
|
|
102
112
|
},
|
|
103
113
|
|
package/src/server/Socket.ts
CHANGED
|
@@ -88,7 +88,34 @@ export function initWebSocketServer(
|
|
|
88
88
|
|
|
89
89
|
wss.on('connection', (ws, req) => {
|
|
90
90
|
let session: Session | null = null;
|
|
91
|
+
|
|
92
|
+
// Support URL token auth: ws://host/ws?token=JWT
|
|
93
|
+
// This allows direct connections (e.g. UglyBotSocket) without a message-based auth handshake.
|
|
94
|
+
const connUrl = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
|
|
95
|
+
const urlToken = connUrl.searchParams.get('token');
|
|
96
|
+
let urlAuthPromise: Promise<void> | null = null;
|
|
97
|
+
if (urlToken) {
|
|
98
|
+
urlAuthPromise = (async () => {
|
|
99
|
+
try {
|
|
100
|
+
const userId = await verifyToken(urlToken);
|
|
101
|
+
const user = { _id: userId, userId };
|
|
102
|
+
const unregisterPush = await registerPushConnection(userId, ws);
|
|
103
|
+
session = { userId, ws, subscriptions: new Map(), unregisterPush };
|
|
104
|
+
sessions.set(ws, session);
|
|
105
|
+
if (onAuth) await onAuth(ws, userId, req);
|
|
106
|
+
} catch {
|
|
107
|
+
ws.close(4001, 'Invalid token');
|
|
108
|
+
}
|
|
109
|
+
})();
|
|
110
|
+
}
|
|
111
|
+
|
|
91
112
|
ws.on('message', async (data) => {
|
|
113
|
+
// If URL token auth is in progress, wait for it to complete
|
|
114
|
+
if (urlAuthPromise) {
|
|
115
|
+
await urlAuthPromise;
|
|
116
|
+
urlAuthPromise = null;
|
|
117
|
+
}
|
|
118
|
+
|
|
92
119
|
let msg: IncomingMessage;
|
|
93
120
|
try {
|
|
94
121
|
msg = JSON.parse(String(data)) as IncomingMessage;
|
|
@@ -97,7 +124,7 @@ export function initWebSocketServer(
|
|
|
97
124
|
return;
|
|
98
125
|
}
|
|
99
126
|
|
|
100
|
-
// Auth handshake must be first message
|
|
127
|
+
// Auth handshake must be first message (unless URL token was used)
|
|
101
128
|
if (!session) {
|
|
102
129
|
if (msg.type !== 'auth') {
|
|
103
130
|
ws.close();
|
|
@@ -203,6 +203,7 @@ function useTTSAnalyzer() {
|
|
|
203
203
|
const ctxRef = useRef<AudioContext | null>(null);
|
|
204
204
|
const analyzerRef = useRef<AnalyserNode | null>(null);
|
|
205
205
|
const gainRef = useRef<GainNode | null>(null);
|
|
206
|
+
const nextStartRef = useRef(0);
|
|
206
207
|
const [analyzer, setAnalyzer] = useState<AnalyserNode | null>(null);
|
|
207
208
|
|
|
208
209
|
const init = useCallback(() => {
|
|
@@ -216,6 +217,7 @@ function useTTSAnalyzer() {
|
|
|
216
217
|
ctxRef.current = ctx;
|
|
217
218
|
analyzerRef.current = node;
|
|
218
219
|
gainRef.current = gain;
|
|
220
|
+
nextStartRef.current = 0;
|
|
219
221
|
setAnalyzer(node);
|
|
220
222
|
}, []);
|
|
221
223
|
|
|
@@ -232,7 +234,10 @@ function useTTSAnalyzer() {
|
|
|
232
234
|
const source = ctx.createBufferSource();
|
|
233
235
|
source.buffer = buffer;
|
|
234
236
|
source.connect(gain);
|
|
235
|
-
|
|
237
|
+
const now = ctx.currentTime;
|
|
238
|
+
if (nextStartRef.current < now) nextStartRef.current = now;
|
|
239
|
+
source.start(nextStartRef.current);
|
|
240
|
+
nextStartRef.current += buffer.duration;
|
|
236
241
|
}, []);
|
|
237
242
|
|
|
238
243
|
const close = useCallback(() => {
|
|
@@ -484,7 +489,7 @@ function STTSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
484
489
|
let ttsCounter = 0;
|
|
485
490
|
|
|
486
491
|
function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
487
|
-
const [text, setText] = useState('');
|
|
492
|
+
const [text, setText] = useState('The quick brown fox jumps over the lazy dog. Hello, this is a text to speech test.');
|
|
488
493
|
const [voice, setVoice] = useState('');
|
|
489
494
|
const [vizType, setVizType] = useState<VizType>('wave');
|
|
490
495
|
const [playing, setPlaying] = useState(false);
|
|
@@ -511,16 +516,19 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
511
516
|
|
|
512
517
|
function subscribe(streamId: string) {
|
|
513
518
|
unsubAll();
|
|
519
|
+
addLog(`Subscribing to events for stream ${streamId}`);
|
|
514
520
|
unsubsRef.current.push(
|
|
515
521
|
socket.on('tts:chunk', (data) => {
|
|
522
|
+
addLog(`Got tts:chunk streamId=${data.streamId} (expected=${streamId}) audioLen=${data.audio?.length ?? 0}`);
|
|
516
523
|
if (data.streamId !== streamId) return;
|
|
517
524
|
if (data.audio) {
|
|
518
525
|
ttsAudio.playChunk(data.audio);
|
|
519
|
-
addLog(`
|
|
526
|
+
addLog(`Queued audio chunk (${data.audio.length} b64 chars)`, 'ok');
|
|
520
527
|
}
|
|
521
528
|
}),
|
|
522
529
|
socket.on('tts:word', (data) => {
|
|
523
530
|
if (data.streamId !== streamId) return;
|
|
531
|
+
addLog(`Word: "${data.word}"`);
|
|
524
532
|
if (data.word) {
|
|
525
533
|
setCurrentWord(data.word);
|
|
526
534
|
activeWordIdxRef.current++;
|
|
@@ -535,6 +543,7 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
535
543
|
}
|
|
536
544
|
}),
|
|
537
545
|
socket.on('tts:done', (data) => {
|
|
546
|
+
addLog(`Got tts:done streamId=${data.streamId}`);
|
|
538
547
|
if (data.streamId !== streamId) return;
|
|
539
548
|
setPlaying(false);
|
|
540
549
|
setCurrentWord('');
|
|
@@ -543,6 +552,7 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
543
552
|
socket.release();
|
|
544
553
|
}),
|
|
545
554
|
socket.on('tts:error', (data) => {
|
|
555
|
+
addLog(`Got tts:error streamId=${data.streamId} msg=${data.message}`, 'err');
|
|
546
556
|
if (data.streamId !== streamId) return;
|
|
547
557
|
setPlaying(false);
|
|
548
558
|
addLog(`TTS error: ${data.message ?? 'unknown'}`, 'err');
|
|
@@ -568,16 +578,29 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
568
578
|
|
|
569
579
|
ttsAudio.init();
|
|
570
580
|
addLog(`Voice: ${voice || 'default'}`);
|
|
571
|
-
addLog(
|
|
581
|
+
addLog(`Stream ID: ${streamId}`);
|
|
582
|
+
addLog('Acquiring socket…');
|
|
583
|
+
|
|
584
|
+
try {
|
|
585
|
+
await socket.acquire();
|
|
586
|
+
addLog('Socket acquired', 'ok');
|
|
587
|
+
} catch (err) {
|
|
588
|
+
addLog(`Socket acquire failed: ${err}`, 'err');
|
|
589
|
+
setPlaying(false);
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
572
592
|
|
|
573
|
-
await socket.acquire();
|
|
574
593
|
subscribe(streamId);
|
|
575
|
-
|
|
594
|
+
|
|
595
|
+
const payload = {
|
|
576
596
|
streamId,
|
|
577
597
|
text: text.trim(),
|
|
578
598
|
...(voice ? { voice } : {}),
|
|
579
599
|
requestVisemes: false,
|
|
580
|
-
}
|
|
600
|
+
};
|
|
601
|
+
addLog(`Sending tts:start ${JSON.stringify(payload).slice(0, 200)}`);
|
|
602
|
+
socket.send('tts:start', payload);
|
|
603
|
+
addLog('tts:start sent, waiting for chunks…');
|
|
581
604
|
}
|
|
582
605
|
|
|
583
606
|
function handleStop() {
|