ugly-app 0.1.281 → 0.1.283

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.
Files changed (34) hide show
  1. package/dist/cli/version.d.ts +1 -1
  2. package/dist/cli/version.js +1 -1
  3. package/dist/client/audio/AudioRecorder.d.ts.map +1 -1
  4. package/dist/client/audio/AudioRecorder.js +25 -0
  5. package/dist/client/audio/AudioRecorder.js.map +1 -1
  6. package/dist/client/audio/useSTT.d.ts.map +1 -1
  7. package/dist/client/audio/useSTT.js +26 -4
  8. package/dist/client/audio/useSTT.js.map +1 -1
  9. package/dist/client/createSocket.d.ts +0 -2
  10. package/dist/client/createSocket.d.ts.map +1 -1
  11. package/dist/client/createSocket.js +0 -3
  12. package/dist/client/createSocket.js.map +1 -1
  13. package/dist/server/Email.d.ts +7 -8
  14. package/dist/server/Email.d.ts.map +1 -1
  15. package/dist/server/Email.js +7 -12
  16. package/dist/server/Email.js.map +1 -1
  17. package/dist/server/EmailTemplate.d.ts +1 -1
  18. package/dist/server/EmailTemplate.d.ts.map +1 -1
  19. package/dist/server/EmailTemplate.js +1 -1
  20. package/dist/server/EmailTemplate.js.map +1 -1
  21. package/dist/server/billing/BillingAlert.js +1 -1
  22. package/dist/server/billing/BillingAlert.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/cli/version.ts +1 -1
  25. package/src/client/audio/AudioRecorder.ts +28 -0
  26. package/src/client/audio/useSTT.ts +28 -4
  27. package/src/client/createSocket.ts +0 -6
  28. package/src/server/Email.ts +10 -14
  29. package/src/server/EmailTemplate.ts +2 -2
  30. package/src/server/billing/BillingAlert.ts +1 -1
  31. package/templates/client/pages/AudioTestPage.tsx +120 -87
  32. package/templates/client/pages/EmailTestPage.tsx +1 -1
  33. package/templates/client/pages/PushTestPage.tsx +2 -2
  34. package/templates/server/index.ts +1 -3
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.281";
1
+ export declare const CLI_VERSION = "0.1.283";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.281";
2
+ export const CLI_VERSION = "0.1.283";
3
3
  //# sourceMappingURL=version.js.map
@@ -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;IAgClE,IAAI,IAAI,IAAI;CAWb"}
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":"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"}
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;;;;;;;EAuGrE"}
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: options.mode ?? 'auto',
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() - startTime > 5000) {
73
+ if (readyRef.current || Date.now() - readyStart > 5000) {
66
74
  clearInterval(poll);
67
75
  resolve();
68
76
  }
69
77
  }, 50);
70
78
  });
71
- if (cancelledRef.current)
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":"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"}
1
+ {"version":3,"file":"useSTT.js","sourceRoot":"","sources":["../../../src/client/audio/useSTT.ts"],"names":[],"mappings":"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"}
@@ -44,8 +44,6 @@ export interface AppSocket<R extends AppRegistryBase> {
44
44
  send<K extends keyof R['messages']>(type: K, data: MessageData<R['messages'][K]>, timeout?: number): Promise<MessageResponse<R['messages'][K]>>;
45
45
  /** Subscribe to a message type. Returns unsubscribe. */
46
46
  on<K extends keyof R['messages']>(event: K, handler: (data: MessageData<R['messages'][K]>) => void): Unsubscribe;
47
- /** Send a raw object (framework streaming). */
48
- rawSend(msg: object): void;
49
47
  waitForConnection(timeout?: number): Promise<void>;
50
48
  readonly connectionState: ConnectionState;
51
49
  disconnect(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"createSocket.d.ts","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSocket.d.ts","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"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"}
@@ -460,9 +460,6 @@ export function createSocket(opts) {
460
460
  typedListeners.delete(event);
461
461
  };
462
462
  },
463
- rawSend(msg) {
464
- enqueueOrSend(JSON.stringify(msg));
465
- },
466
463
  waitForConnection(timeout = 30000) {
467
464
  if (isConnected)
468
465
  return Promise.resolve();
@@ -1 +1 @@
1
- {"version":3,"file":"createSocket.js","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSocket.js","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ export interface EmailOptions {
2
2
  to: string;
3
3
  subject: string;
4
4
  html: string;
5
- from?: string;
5
+ /** Optional tag — ugly.bot sends from `<projectId>+<id>@ugly.bot`, or `<projectId>@ugly.bot` when omitted */
6
+ id?: string | undefined;
6
7
  replyTo?: string;
7
8
  headers?: Record<string, string>;
8
9
  }
@@ -14,19 +15,17 @@ export interface EmailOptions {
14
15
  */
15
16
  export declare function emailSend(options: EmailOptions): Promise<void>;
16
17
  /**
17
- * Create a scoped email sender for an app domain.
18
+ * Create a scoped email sender.
18
19
  *
19
- * Sends from `{domain}@ugly.bot` by default, or `{domain}+{id}@ugly.bot`
20
- * when an `id` is provided (for reply correlation).
21
- *
22
- * @param domain - The app's registered subdomain (e.g. 'myapp')
20
+ * The `from` tag is optional — ugly.bot infers the full address from the
21
+ * project's identity: `<projectId>@ugly.bot` or `<projectId>+<tag>@ugly.bot`.
23
22
  */
24
- export declare function createEmailSender(domain: string): {
23
+ export declare function createEmailSender(): {
25
24
  send(options: {
26
25
  to: string;
27
26
  subject: string;
28
27
  html: string;
29
- /** Optional tag for reply correlation — becomes the +tag in the from address */
28
+ /** Optional tag for reply correlation — ugly.bot builds the from address */
30
29
  id?: string;
31
30
  replyTo?: string;
32
31
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../src/server/Email.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM;kBAExB;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,gFAAgF;QAChF,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;EAapB"}
1
+ {"version":3,"file":"Email.d.ts","sourceRoot":"","sources":["../../src/server/Email.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,6GAA6G;IAC7G,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB;kBAET;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,4EAA4E;QAC5E,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;EAUpB"}
@@ -18,7 +18,7 @@ export async function emailSend(options) {
18
18
  to: options.to,
19
19
  subject: options.subject,
20
20
  html: options.html,
21
- from: options.from,
21
+ id: options.id,
22
22
  replyTo: options.replyTo,
23
23
  headers: options.headers,
24
24
  });
@@ -34,25 +34,20 @@ export async function emailSend(options) {
34
34
  }
35
35
  }
36
36
  /**
37
- * Create a scoped email sender for an app domain.
37
+ * Create a scoped email sender.
38
38
  *
39
- * Sends from `{domain}@ugly.bot` by default, or `{domain}+{id}@ugly.bot`
40
- * when an `id` is provided (for reply correlation).
41
- *
42
- * @param domain - The app's registered subdomain (e.g. 'myapp')
39
+ * The `from` tag is optional — ugly.bot infers the full address from the
40
+ * project's identity: `<projectId>@ugly.bot` or `<projectId>+<tag>@ugly.bot`.
43
41
  */
44
- export function createEmailSender(domain) {
42
+ export function createEmailSender() {
45
43
  return {
46
44
  async send(options) {
47
- const from = options.id
48
- ? `${domain}+${options.id}@ugly.bot`
49
- : `${domain}@ugly.bot`;
50
45
  await emailSend({
51
46
  to: options.to,
52
47
  subject: options.subject,
53
48
  html: options.html,
54
- from,
55
- replyTo: options.replyTo ?? from,
49
+ id: options.id,
50
+ replyTo: options.replyTo,
56
51
  });
57
52
  },
58
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Email.js","sourceRoot":"","sources":["../../src/server/Email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAWnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,WAAW,EAAE;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE;YACnC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAOV;YACC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE;gBACrB,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,EAAE,WAAW;gBACpC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC;YACzB,MAAM,SAAS,CAAC;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI;gBACJ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;aACjC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Email.js","sourceRoot":"","sources":["../../src/server/Email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,WAAW,EAAE;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE;YACnC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAOV;YACC,MAAM,SAAS,CAAC;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -10,7 +10,7 @@ export declare function loadEmailTemplate<T>(absolutePath: string): CompiledTemp
10
10
  * Render a compiled template with the provided data and send it via sendEmail().
11
11
  */
12
12
  export declare function sendTemplateEmail<T>(to: string, subject: string, template: CompiledTemplate<T>, data: T, options?: {
13
- from?: string;
13
+ id?: string;
14
14
  replyTo?: string;
15
15
  headers?: Record<string, string>;
16
16
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplate.d.ts","sourceRoot":"","sources":["../../src/server/EmailTemplate.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,YAAY,EAAE,MAAM,GACnB,gBAAgB,CAAC,CAAC,CAAC,CAMrB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GACA,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"EmailTemplate.d.ts","sourceRoot":"","sources":["../../src/server/EmailTemplate.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,YAAY,EAAE,MAAM,GACnB,gBAAgB,CAAC,CAAC,CAAC,CAMrB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;IACR,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GACA,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -21,7 +21,7 @@ export async function sendTemplateEmail(to, subject, template, data, options) {
21
21
  to,
22
22
  subject,
23
23
  html,
24
- from: options?.from,
24
+ id: options?.id,
25
25
  replyTo: options?.replyTo,
26
26
  headers: options?.headers,
27
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplate.js","sourceRoot":"","sources":["../../src/server/EmailTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB;IAEpB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAI,MAAM,CAAC,CAAC;IAC/C,OAAO;QACL,MAAM,EAAE,CAAC,IAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAU,EACV,OAAe,EACf,QAA6B,EAC7B,IAAO,EACP,OAIC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC;QACd,EAAE;QACF,OAAO;QACP,IAAI;QACJ,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,OAAO,EAAE,OAAO,EAAE,OAAO;KAC1B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"EmailTemplate.js","sourceRoot":"","sources":["../../src/server/EmailTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB;IAEpB,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAI,MAAM,CAAC,CAAC;IAC/C,OAAO;QACL,MAAM,EAAE,CAAC,IAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAU,EACV,OAAe,EACf,QAA6B,EAC7B,IAAO,EACP,OAIC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,CAAC;QACd,EAAE;QACF,OAAO;QACP,IAAI;QACJ,EAAE,EAAE,OAAO,EAAE,EAAE;QACf,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,OAAO,EAAE,OAAO,EAAE,OAAO;KAC1B,CAAC,CAAC;AACL,CAAC"}
@@ -84,7 +84,7 @@ async function sendBillingAlertEmail(to, provider, status, errorText) {
84
84
  const timestamp = new Date().toISOString();
85
85
  const truncatedError = errorText.length > 1000 ? errorText.slice(0, 1000) + '...' : errorText;
86
86
  await emailSend({
87
- from: 'Billing Alerts <alerts@ugly.bot>',
87
+ id: 'billing-alerts',
88
88
  to,
89
89
  subject: `Billing Alert: ${provider} — HTTP ${status}`,
90
90
  html: `
@@ -1 +1 @@
1
- {"version":3,"file":"BillingAlert.js","sourceRoot":"","sources":["../../../src/server/billing/BillingAlert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BillingAlert.js","sourceRoot":"","sources":["../../../src/server/billing/BillingAlert.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.281",
3
+ "version": "0.1.283",
4
4
  "type": "module",
5
5
  "main": "./dist/server/index.js",
6
6
  "exports": {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.281";
2
+ export const CLI_VERSION = "0.1.283";
@@ -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: options.mode ?? 'auto',
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() - startTime > 5000) {
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 (cancelledRef.current) return;
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) {
@@ -83,8 +83,6 @@ export interface AppSocket<R extends AppRegistryBase> {
83
83
  event: K,
84
84
  handler: (data: MessageData<R['messages'][K]>) => void,
85
85
  ): Unsubscribe;
86
- /** Send a raw object (framework streaming). */
87
- rawSend(msg: object): void;
88
86
  waitForConnection(timeout?: number): Promise<void>;
89
87
  readonly connectionState: ConnectionState;
90
88
  disconnect(): void;
@@ -698,10 +696,6 @@ export function createSocket<R extends AppRegistryBase>(
698
696
  };
699
697
  },
700
698
 
701
- rawSend(msg: object): void {
702
- enqueueOrSend(JSON.stringify(msg));
703
- },
704
-
705
699
  waitForConnection(timeout = 30000): Promise<void> {
706
700
  if (isConnected) return Promise.resolve();
707
701
  return new Promise((resolve, reject) => {
@@ -4,7 +4,8 @@ export interface EmailOptions {
4
4
  to: string;
5
5
  subject: string;
6
6
  html: string;
7
- from?: string;
7
+ /** Optional tag — ugly.bot sends from `<projectId>+<id>@ugly.bot`, or `<projectId>@ugly.bot` when omitted */
8
+ id?: string | undefined;
8
9
  replyTo?: string;
9
10
  headers?: Record<string, string>;
10
11
  }
@@ -30,7 +31,7 @@ export async function emailSend(options: EmailOptions): Promise<void> {
30
31
  to: options.to,
31
32
  subject: options.subject,
32
33
  html: options.html,
33
- from: options.from,
34
+ id: options.id,
34
35
  replyTo: options.replyTo,
35
36
  headers: options.headers,
36
37
  });
@@ -46,32 +47,27 @@ export async function emailSend(options: EmailOptions): Promise<void> {
46
47
  }
47
48
 
48
49
  /**
49
- * Create a scoped email sender for an app domain.
50
+ * Create a scoped email sender.
50
51
  *
51
- * Sends from `{domain}@ugly.bot` by default, or `{domain}+{id}@ugly.bot`
52
- * when an `id` is provided (for reply correlation).
53
- *
54
- * @param domain - The app's registered subdomain (e.g. 'myapp')
52
+ * The `from` tag is optional — ugly.bot infers the full address from the
53
+ * project's identity: `<projectId>@ugly.bot` or `<projectId>+<tag>@ugly.bot`.
55
54
  */
56
- export function createEmailSender(domain: string) {
55
+ export function createEmailSender() {
57
56
  return {
58
57
  async send(options: {
59
58
  to: string;
60
59
  subject: string;
61
60
  html: string;
62
- /** Optional tag for reply correlation — becomes the +tag in the from address */
61
+ /** Optional tag for reply correlation — ugly.bot builds the from address */
63
62
  id?: string;
64
63
  replyTo?: string;
65
64
  }): Promise<void> {
66
- const from = options.id
67
- ? `${domain}+${options.id}@ugly.bot`
68
- : `${domain}@ugly.bot`;
69
65
  await emailSend({
70
66
  to: options.to,
71
67
  subject: options.subject,
72
68
  html: options.html,
73
- from,
74
- replyTo: options.replyTo ?? from,
69
+ id: options.id,
70
+ replyTo: options.replyTo,
75
71
  });
76
72
  },
77
73
  };
@@ -29,7 +29,7 @@ export async function sendTemplateEmail<T>(
29
29
  template: CompiledTemplate<T>,
30
30
  data: T,
31
31
  options?: {
32
- from?: string;
32
+ id?: string;
33
33
  replyTo?: string;
34
34
  headers?: Record<string, string>;
35
35
  },
@@ -39,7 +39,7 @@ export async function sendTemplateEmail<T>(
39
39
  to,
40
40
  subject,
41
41
  html,
42
- from: options?.from,
42
+ id: options?.id,
43
43
  replyTo: options?.replyTo,
44
44
  headers: options?.headers,
45
45
  });
@@ -114,7 +114,7 @@ async function sendBillingAlertEmail(
114
114
  errorText.length > 1000 ? errorText.slice(0, 1000) + '...' : errorText;
115
115
 
116
116
  await emailSend({
117
- from: 'Billing Alerts <alerts@ugly.bot>',
117
+ id: 'billing-alerts',
118
118
  to,
119
119
  subject: `Billing Alert: ${provider} — HTTP ${status}`,
120
120
  html: `
@@ -16,17 +16,11 @@ import type {
16
16
  AudioVisualizer,
17
17
  BlobStyleType,
18
18
  BlobVisualizerFunctions,
19
+ UglyBotSocket,
19
20
  } from 'ugly-app/client';
20
21
 
21
22
  // ─── Types ───────────────────────────────────────────────────────────────────
22
23
 
23
- /** Raw WebSocket-like interface used by STT/TTS sections for streaming audio. */
24
- interface RawSocket {
25
- send(msg: unknown): void;
26
- on(e: string, h: (m: unknown) => void): void;
27
- off(e: string, h: (m: unknown) => void): void;
28
- }
29
-
30
24
  type Tab = 'stt' | 'tts';
31
25
  type STTMode = 'continuous' | 'push-to-talk';
32
26
 
@@ -209,6 +203,7 @@ function useTTSAnalyzer() {
209
203
  const ctxRef = useRef<AudioContext | null>(null);
210
204
  const analyzerRef = useRef<AnalyserNode | null>(null);
211
205
  const gainRef = useRef<GainNode | null>(null);
206
+ const nextStartRef = useRef(0);
212
207
  const [analyzer, setAnalyzer] = useState<AnalyserNode | null>(null);
213
208
 
214
209
  const init = useCallback(() => {
@@ -222,6 +217,7 @@ function useTTSAnalyzer() {
222
217
  ctxRef.current = ctx;
223
218
  analyzerRef.current = node;
224
219
  gainRef.current = gain;
220
+ nextStartRef.current = 0;
225
221
  setAnalyzer(node);
226
222
  }, []);
227
223
 
@@ -238,7 +234,10 @@ function useTTSAnalyzer() {
238
234
  const source = ctx.createBufferSource();
239
235
  source.buffer = buffer;
240
236
  source.connect(gain);
241
- source.start();
237
+ const now = ctx.currentTime;
238
+ if (nextStartRef.current < now) nextStartRef.current = now;
239
+ source.start(nextStartRef.current);
240
+ nextStartRef.current += buffer.duration;
242
241
  }, []);
243
242
 
244
243
  const close = useCallback(() => {
@@ -256,7 +255,7 @@ function useTTSAnalyzer() {
256
255
 
257
256
  let sttCounter = 0;
258
257
 
259
- function STTSection({ socket }: { socket: RawSocket }) {
258
+ function STTSection({ socket }: { socket: UglyBotSocket }) {
260
259
  const [sttMode, setSTTMode] = useState<STTMode>('continuous');
261
260
  const [vizType, setVizType] = useState<VizType>('mic');
262
261
  const [listening, setListening] = useState(false);
@@ -268,6 +267,7 @@ function STTSection({ socket }: { socket: RawSocket }) {
268
267
  const streamIdRef = useRef<string | null>(null);
269
268
  const recorderRef = useRef<AudioRecorder | null>(null);
270
269
  const chunkCountRef = useRef(0);
270
+ const unsubsRef = useRef<Array<() => void>>([]);
271
271
 
272
272
  function addLog(msg: string, kind: LogEntry['kind'] = 'info') {
273
273
  const prefix = '[STT]';
@@ -276,26 +276,34 @@ function STTSection({ socket }: { socket: RawSocket }) {
276
276
  setLogs((prev) => [...prev, { ts: Date.now(), msg, kind }]);
277
277
  }
278
278
 
279
- const handleMessage = useCallback( // eslint-disable-line react-hooks/exhaustive-deps
280
- (msg: unknown) => {
281
- const m = msg as { type: string; streamId: string; text?: string; isFinal?: boolean; message?: string };
282
- if (m.streamId !== streamIdRef.current) return;
283
- if (m.type === 'stt:transcript') {
284
- addLog(`Transcript${m.isFinal ? ' (final)' : ''}: ${m.text ?? ''}`, m.isFinal ? 'ok' : 'info');
285
- setTranscript(m.text ?? '');
286
- if (m.isFinal && m.text) {
287
- setTranscriptHistory((prev) => [...prev, m.text!]);
279
+ function unsubAll() {
280
+ for (const unsub of unsubsRef.current) unsub();
281
+ unsubsRef.current = [];
282
+ }
283
+
284
+ function subscribe(streamId: string) {
285
+ unsubAll();
286
+ unsubsRef.current.push(
287
+ socket.on('stt:transcript', (data) => {
288
+ if (data.streamId !== streamId) return;
289
+ addLog(`Transcript${data.isFinal ? ' (final)' : ''}: ${data.text ?? ''}`, data.isFinal ? 'ok' : 'info');
290
+ setTranscript(data.text ?? '');
291
+ if (data.isFinal && data.text) {
292
+ setTranscriptHistory((prev) => [...prev, data.text!]);
288
293
  setTranscript('');
289
294
  }
290
- } else if (m.type === 'stt:error') {
291
- addLog(`STT error: ${m.message ?? 'unknown'}`, 'err');
295
+ }),
296
+ socket.on('stt:error', (data) => {
297
+ if (data.streamId !== streamId) return;
298
+ addLog(`STT error: ${data.message ?? 'unknown'}`, 'err');
292
299
  stopListening();
293
- } else if (m.type === 'stt:stopped') {
300
+ }),
301
+ socket.on('stt:stopped', (data) => {
302
+ if (data.streamId !== streamId) return;
294
303
  addLog(`STT stopped — sent ${chunkCountRef.current} audio chunks`, 'ok');
295
- }
296
- },
297
- [],
298
- );
304
+ }),
305
+ );
306
+ }
299
307
 
300
308
  async function startListening() {
301
309
  const streamId = `stt-${++sttCounter}`;
@@ -307,29 +315,30 @@ function STTSection({ socket }: { socket: RawSocket }) {
307
315
  const started = Date.now();
308
316
  addLog(`Mode: ${sttMode}${sttMode === 'continuous' ? ' (VAD enabled)' : ''}`);
309
317
 
310
- socket.on('message', handleMessage);
318
+ await socket.acquire();
319
+ subscribe(streamId);
311
320
 
312
- const startMsg = {
313
- type: 'stt:start' as const,
321
+ socket.send('stt:start', {
314
322
  streamId,
315
- mode: sttMode === 'continuous' ? ('realtime' as const) : ('batch' as const),
323
+ mode: sttMode === 'continuous' ? 'realtime' : 'batch',
316
324
  enableVAD: sttMode === 'continuous',
317
- };
318
- socket.send(startMsg);
325
+ });
319
326
 
320
327
  // Wait for ready
321
328
  await new Promise<void>((resolve) => {
322
- const readyHandler = (msg: unknown) => {
323
- const m = msg as { type: string; streamId: string };
324
- if (m.type === 'stt:ready' && m.streamId === streamId) {
325
- socket.off('message', readyHandler);
329
+ let resolved = false;
330
+ const unsub = socket.on('stt:ready', (data) => {
331
+ if (data.streamId === streamId) {
332
+ resolved = true;
333
+ unsub();
326
334
  resolve();
327
335
  }
328
- };
329
- socket.on('message', readyHandler);
336
+ });
330
337
  setTimeout(() => {
331
- socket.off('message', readyHandler);
332
- resolve();
338
+ if (!resolved) {
339
+ unsub();
340
+ resolve();
341
+ }
333
342
  }, 5000);
334
343
  });
335
344
 
@@ -342,7 +351,7 @@ function STTSection({ socket }: { socket: RawSocket }) {
342
351
  if (!recorderRef.current) recorderRef.current = new AudioRecorder();
343
352
  await recorderRef.current.start((audio) => {
344
353
  chunkCountRef.current++;
345
- socket.send({ type: 'stt:audio', streamId: streamIdRef.current, audio });
354
+ socket.send('stt:audio', { streamId, audio });
346
355
  });
347
356
  addLog('Recording started', 'ok');
348
357
 
@@ -354,9 +363,10 @@ function STTSection({ socket }: { socket: RawSocket }) {
354
363
  recorderRef.current?.stop();
355
364
  mic.stop();
356
365
  if (streamIdRef.current) {
357
- socket.send({ type: 'stt:stop', streamId: streamIdRef.current });
366
+ socket.send('stt:stop', { streamId: streamIdRef.current });
358
367
  }
359
- socket.off('message', handleMessage);
368
+ unsubAll();
369
+ socket.release();
360
370
  setListening(false);
361
371
  }
362
372
 
@@ -374,9 +384,10 @@ function STTSection({ socket }: { socket: RawSocket }) {
374
384
  recorderRef.current?.stop();
375
385
  mic.stop();
376
386
  if (streamIdRef.current) {
377
- socket.send({ type: 'stt:stop', streamId: streamIdRef.current });
387
+ socket.send('stt:stop', { streamId: streamIdRef.current });
378
388
  }
379
- socket.off('message', handleMessage);
389
+ unsubAll();
390
+ socket.release();
380
391
  };
381
392
  }, []);
382
393
 
@@ -477,8 +488,8 @@ function STTSection({ socket }: { socket: RawSocket }) {
477
488
 
478
489
  let ttsCounter = 0;
479
490
 
480
- function TTSSection({ socket }: { socket: RawSocket }) {
481
- const [text, setText] = useState('');
491
+ function TTSSection({ socket }: { socket: UglyBotSocket }) {
492
+ const [text, setText] = useState('The quick brown fox jumps over the lazy dog. Hello, this is a text to speech test.');
482
493
  const [voice, setVoice] = useState('');
483
494
  const [vizType, setVizType] = useState<VizType>('wave');
484
495
  const [playing, setPlaying] = useState(false);
@@ -489,6 +500,7 @@ function TTSSection({ socket }: { socket: RawSocket }) {
489
500
  const ttsAudio = useTTSAnalyzer();
490
501
  const streamIdRef = useRef<string | null>(null);
491
502
  const activeWordIdxRef = useRef(-1);
503
+ const unsubsRef = useRef<Array<() => void>>([]);
492
504
 
493
505
  function addLog(msg: string, kind: LogEntry['kind'] = 'info') {
494
506
  const prefix = '[TTS]';
@@ -497,40 +509,55 @@ function TTSSection({ socket }: { socket: RawSocket }) {
497
509
  setLogs((prev) => [...prev, { ts: Date.now(), msg, kind }]);
498
510
  }
499
511
 
500
- const handleMessage = useCallback( // eslint-disable-line react-hooks/exhaustive-deps
501
- (msg: unknown) => {
502
- const m = msg as { type: string; streamId: string; audio?: string; word?: string; message?: string };
503
- if ((m as { streamId?: string }).streamId !== streamIdRef.current) return;
504
-
505
- if (m.type === 'tts:chunk' && m.audio) {
506
- ttsAudio.playChunk(m.audio);
507
- addLog(`Received audio chunk (${m.audio.length} b64 chars)`);
508
- } else if (m.type === 'tts:word' && m.word) {
509
- setCurrentWord(m.word);
510
- activeWordIdxRef.current++;
511
- const idx = activeWordIdxRef.current;
512
- setWordHistory((prev) => {
513
- const next = prev.map((w) => ({ ...w, active: false }));
514
- if (idx < next.length) {
515
- next[idx] = { ...next[idx]!, active: true };
516
- }
517
- return next;
518
- });
519
- } else if (m.type === 'tts:done') {
512
+ function unsubAll() {
513
+ for (const unsub of unsubsRef.current) unsub();
514
+ unsubsRef.current = [];
515
+ }
516
+
517
+ function subscribe(streamId: string) {
518
+ unsubAll();
519
+ unsubsRef.current.push(
520
+ socket.on('tts:chunk', (data) => {
521
+ if (data.streamId !== streamId) return;
522
+ if (data.audio) {
523
+ ttsAudio.playChunk(data.audio);
524
+ addLog(`Received audio chunk (${data.audio.length} b64 chars)`);
525
+ }
526
+ }),
527
+ socket.on('tts:word', (data) => {
528
+ if (data.streamId !== streamId) return;
529
+ if (data.word) {
530
+ setCurrentWord(data.word);
531
+ activeWordIdxRef.current++;
532
+ const idx = activeWordIdxRef.current;
533
+ setWordHistory((prev) => {
534
+ const next = prev.map((w) => ({ ...w, active: false }));
535
+ if (idx < next.length) {
536
+ next[idx] = { ...next[idx]!, active: true };
537
+ }
538
+ return next;
539
+ });
540
+ }
541
+ }),
542
+ socket.on('tts:done', (data) => {
543
+ if (data.streamId !== streamId) return;
520
544
  setPlaying(false);
521
545
  setCurrentWord('');
522
546
  addLog('Playback complete', 'ok');
523
- socket.off('message', handleMessage);
524
- } else if (m.type === 'tts:error') {
547
+ unsubAll();
548
+ socket.release();
549
+ }),
550
+ socket.on('tts:error', (data) => {
551
+ if (data.streamId !== streamId) return;
525
552
  setPlaying(false);
526
- addLog(`TTS error: ${m.message ?? 'unknown'}`, 'err');
527
- socket.off('message', handleMessage);
528
- }
529
- },
530
- [],
531
- );
553
+ addLog(`TTS error: ${data.message ?? 'unknown'}`, 'err');
554
+ unsubAll();
555
+ socket.release();
556
+ }),
557
+ );
558
+ }
532
559
 
533
- function handlePlay() {
560
+ async function handlePlay() {
534
561
  if (!text.trim()) return;
535
562
  const streamId = `tts-${++ttsCounter}`;
536
563
  streamIdRef.current = streamId;
@@ -548,21 +575,22 @@ function TTSSection({ socket }: { socket: RawSocket }) {
548
575
  addLog(`Voice: ${voice || 'default'}`);
549
576
  addLog('Streaming…');
550
577
 
551
- socket.on('message', handleMessage);
552
- socket.send({
553
- type: 'tts:start',
578
+ await socket.acquire();
579
+ subscribe(streamId);
580
+ socket.send('tts:start', {
554
581
  streamId,
555
582
  text: text.trim(),
556
- voice: voice || undefined,
583
+ ...(voice ? { voice } : {}),
557
584
  requestVisemes: false,
558
585
  });
559
586
  }
560
587
 
561
588
  function handleStop() {
562
589
  if (streamIdRef.current) {
563
- socket.send({ type: 'tts:cancel', streamId: streamIdRef.current });
590
+ socket.send('tts:cancel', { streamId: streamIdRef.current });
564
591
  }
565
- socket.off('message', handleMessage);
592
+ unsubAll();
593
+ socket.release();
566
594
  setPlaying(false);
567
595
  setCurrentWord('');
568
596
  }
@@ -570,9 +598,10 @@ function TTSSection({ socket }: { socket: RawSocket }) {
570
598
  useEffect(() => { // eslint-disable-line react-hooks/exhaustive-deps
571
599
  return () => {
572
600
  if (streamIdRef.current) {
573
- socket.send({ type: 'tts:cancel', streamId: streamIdRef.current });
601
+ socket.send('tts:cancel', { streamId: streamIdRef.current });
574
602
  }
575
- socket.off('message', handleMessage);
603
+ unsubAll();
604
+ socket.release();
576
605
  ttsAudio.close();
577
606
  };
578
607
  }, []);
@@ -665,7 +694,7 @@ function TTSSection({ socket }: { socket: RawSocket }) {
665
694
  // ─── Main Page ───────────────────────────────────────────────────────────────
666
695
 
667
696
  export default function AudioTestPage(): React.ReactElement {
668
- const { socket } = useApp();
697
+ const { uglyBotSocket } = useApp();
669
698
  const [tab, setTab] = useState<Tab>('stt');
670
699
 
671
700
  return (
@@ -695,10 +724,14 @@ export default function AudioTestPage(): React.ReactElement {
695
724
  ))}
696
725
  </div>
697
726
 
698
- {tab === 'stt' ? (
699
- <STTSection socket={socket as unknown as RawSocket} />
727
+ {uglyBotSocket ? (
728
+ tab === 'stt' ? (
729
+ <STTSection socket={uglyBotSocket} />
730
+ ) : (
731
+ <TTSSection socket={uglyBotSocket} />
732
+ )
700
733
  ) : (
701
- <TTSSection socket={socket as unknown as RawSocket} />
734
+ <p>UglyBot socket not available. Make sure the app is configured with an app token.</p>
702
735
  )}
703
736
  </div>
704
737
  </PageLayout>
@@ -165,7 +165,7 @@ await sendEmail({
165
165
  to: 'user@example.com',
166
166
  subject: 'Hello',
167
167
  html: '<p>Hi there!</p>',
168
- from: 'myapp@ugly.bot',
168
+ id: 'thread-123', // optional — becomes <projectId>+thread-123@ugly.bot
169
169
  });
170
170
 
171
171
  // Receive replies:
@@ -9,10 +9,10 @@ interface LogEntry {
9
9
  }
10
10
 
11
11
  export default function PushTestPage(): React.ReactElement {
12
- const { socket } = useApp();
12
+ const { socket, userId } = useApp();
13
13
  const [registered, setRegistered] = useState<boolean | null>(null);
14
14
  const [logs, setLogs] = useState<LogEntry[]>([]);
15
- const [targetUserId, setTargetUserId] = useState('');
15
+ const [targetUserId, setTargetUserId] = useState(userId ?? '');
16
16
  const [title, setTitle] = useState('Test Notification');
17
17
  const [body, setBody] = useState('Hello from ugly-app!');
18
18
  const [loading, setLoading] = useState(false);
@@ -89,9 +89,7 @@ const app = createApp(
89
89
  },
90
90
 
91
91
  sendTestEmail: async (_userId, { to, subject, html, id }) => {
92
- const projectId = process.env['NATS_PREFIX'] ?? 'myapp';
93
- const from = id ? `${projectId}+${id}@ugly.bot` : `${projectId}@ugly.bot`;
94
- await emailSend({ to, subject, html, from, replyTo: from });
92
+ await emailSend({ to, subject, html, id });
95
93
  return { ok: true };
96
94
  },
97
95
  } satisfies RequestHandlers<typeof requests>,