dvgateway-sdk 1.4.4 → 1.4.6

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/client.d.ts CHANGED
@@ -22,6 +22,7 @@
22
22
  import { type AudioStreamHandle, type PipelineType } from './streams/audio-stream.js';
23
23
  import { PipelineBuilder } from './pipeline/builder.js';
24
24
  import { PipelineMetrics } from './observability/metrics.js';
25
+ import { type SimulateOptions, type SimulatedCall } from './simulator/simulator.js';
25
26
  import type { DVGatewayOptions, CallSession, CallEvent, TTSCompleteEvent, TranscriptResult, StreamDir, TtsAdapter, Unsubscribe } from './types/index.js';
26
27
  export declare class DVGatewayClient {
27
28
  private readonly auth;
@@ -48,6 +49,51 @@ export declare class DVGatewayClient {
48
49
  * ```
49
50
  */
50
51
  pipeline(): PipelineBuilder;
52
+ /**
53
+ * Simulate an inbound call from a local audio file — no gateway, no
54
+ * PBX, no phone number required. The existing pipeline runs unchanged
55
+ * (same `pipeline().stt().llm().tts().start()`) and the simulator
56
+ * acts as a loopback gateway: it fires a synthetic `call:new` event,
57
+ * streams the audio file frame-by-frame into the pipeline, captures
58
+ * the bot's injected TTS reply into an in-memory buffer, then fires
59
+ * `call:ended` after a grace period.
60
+ *
61
+ * This is the recommended way to:
62
+ * - run SDK examples in the docs "Try it" widgets,
63
+ * - write unit tests for voice-bot logic,
64
+ * - onboard developers before their gateway and DID are provisioned.
65
+ *
66
+ * The audio file must be 16 kHz mono 16-bit PCM — either a WAV or a
67
+ * raw slin16 capture. Convert arbitrary assets with:
68
+ *
69
+ * `ffmpeg -i input.mp3 -ar 16000 -ac 1 -sample_fmt s16 caller.wav`
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const gw = new DVGatewayClient({
74
+ * baseUrl: 'http://localhost:8080',
75
+ * auth: { type: 'apiKey', apiKey: 'simulation' },
76
+ * });
77
+ *
78
+ * // Start the pipeline (non-awaited — runs until gw.close()).
79
+ * void gw.pipeline().stt(stt).llm(llm).tts(tts).start();
80
+ *
81
+ * // Drive a fake call.
82
+ * const call = await gw.simulate({
83
+ * audioFile: './samples/customer-inquiry.wav',
84
+ * caller: '+82-10-1234-5678',
85
+ * });
86
+ * await call.waitForEnd();
87
+ * await call.saveTts('./samples/bot-reply.wav');
88
+ *
89
+ * gw.close();
90
+ * ```
91
+ *
92
+ * @param opts Simulation parameters — audio file path is required.
93
+ * @returns A handle exposing `waitForEnd()`, `saveTts(path)`,
94
+ * `capturedTtsBytes()`, and `stop()`.
95
+ */
96
+ simulate(opts: SimulateOptions): Promise<SimulatedCall>;
51
97
  /**
52
98
  * Subscribe to real-time audio from a call.
53
99
  * Returns an AsyncIterable that yields AudioChunk (Float32, 16kHz).
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -30,6 +30,7 @@ import { MinutesManager } from './minutes/manager.js';
30
30
  import { PipelineBuilder } from './pipeline/builder.js';
31
31
  import { PipelineMetrics } from './observability/metrics.js';
32
32
  import { createLogger } from './observability/logger.js';
33
+ import { createSimulatedCall, } from './simulator/simulator.js';
33
34
  export class DVGatewayClient {
34
35
  auth;
35
36
  wsPool;
@@ -70,6 +71,54 @@ export class DVGatewayClient {
70
71
  pipeline() {
71
72
  return new PipelineBuilder(this.wsPool, this.callEvents, this.ttsInjector, this.logger);
72
73
  }
74
+ // ─── Simulation (no gateway / no phone required) ────────────────────────
75
+ /**
76
+ * Simulate an inbound call from a local audio file — no gateway, no
77
+ * PBX, no phone number required. The existing pipeline runs unchanged
78
+ * (same `pipeline().stt().llm().tts().start()`) and the simulator
79
+ * acts as a loopback gateway: it fires a synthetic `call:new` event,
80
+ * streams the audio file frame-by-frame into the pipeline, captures
81
+ * the bot's injected TTS reply into an in-memory buffer, then fires
82
+ * `call:ended` after a grace period.
83
+ *
84
+ * This is the recommended way to:
85
+ * - run SDK examples in the docs "Try it" widgets,
86
+ * - write unit tests for voice-bot logic,
87
+ * - onboard developers before their gateway and DID are provisioned.
88
+ *
89
+ * The audio file must be 16 kHz mono 16-bit PCM — either a WAV or a
90
+ * raw slin16 capture. Convert arbitrary assets with:
91
+ *
92
+ * `ffmpeg -i input.mp3 -ar 16000 -ac 1 -sample_fmt s16 caller.wav`
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * const gw = new DVGatewayClient({
97
+ * baseUrl: 'http://localhost:8080',
98
+ * auth: { type: 'apiKey', apiKey: 'simulation' },
99
+ * });
100
+ *
101
+ * // Start the pipeline (non-awaited — runs until gw.close()).
102
+ * void gw.pipeline().stt(stt).llm(llm).tts(tts).start();
103
+ *
104
+ * // Drive a fake call.
105
+ * const call = await gw.simulate({
106
+ * audioFile: './samples/customer-inquiry.wav',
107
+ * caller: '+82-10-1234-5678',
108
+ * });
109
+ * await call.waitForEnd();
110
+ * await call.saveTts('./samples/bot-reply.wav');
111
+ *
112
+ * gw.close();
113
+ * ```
114
+ *
115
+ * @param opts Simulation parameters — audio file path is required.
116
+ * @returns A handle exposing `waitForEnd()`, `saveTts(path)`,
117
+ * `capturedTtsBytes()`, and `stop()`.
118
+ */
119
+ async simulate(opts) {
120
+ return createSimulatedCall({ wsPool: this.wsPool, logger: this.logger }, opts);
121
+ }
73
122
  // ─── Mid-Level: Audio Streaming ─────────────────────────────────────────
74
123
  /**
75
124
  * Subscribe to real-time audio from a call.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@
29
29
  */
30
30
  export { DVGatewayClient } from './client.js';
31
31
  export type { PipelineType, AudioStreamOptions } from './streams/audio-stream.js';
32
+ export type { SimulateOptions, SimulatedCall } from './simulator/simulator.js';
32
33
  export type { ApiKeyAuth, JwtAuth, Auth, DVGatewayOptions, ReconnectOptions, SecurityOptions, MtlsOptions, CallSession, ConferenceSession, ConferenceParticipant, StreamDir, CallEvent, CallNewEvent, CallEndedEvent, ConfJoinEvent, ConfLeaveEvent, ConfEndedEvent, TTSCompleteEvent, CallEventType, AudioChunk, RawAudioChunk, SttAdapter, TtsAdapter, LlmAdapter, TranscriptResult, TranscriptWord, SentimentResult, TtsOptions, VoiceInfo, HumanVoiceOptions, SttOptions, Message, LlmOptions, PipelineOptions, PipelineEventHandlers, HookContext, BeforeChatHook, AfterChatHook, HistoryOptions, PipelineConfig, MinutesDownloadOptions, Logger, Unsubscribe, Result, } from './types/index.js';
33
34
  export { HUMAN_VOICE_DEFAULTS_KO, HUMAN_VOICE_DEFAULTS_EN, } from './types/index.js';
34
35
  export { slin16ToFloat32, float32ToSlin16, ulawToSlin16, slin16ToUlaw, resample, calculateRms, detectVoiceActivity, } from './audio/codec.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGlF,YAAY,EAEV,UAAU,EACV,OAAO,EACP,IAAI,EAGJ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,WAAW,EAGX,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EAGT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,EAGb,UAAU,EACV,aAAa,EAGb,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,UAAU,EAGV,eAAe,EACf,qBAAqB,EAGrB,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EAGd,sBAAsB,EAGtB,MAAM,EAGN,WAAW,EACX,MAAM,GACP,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGlF,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG/E,YAAY,EAEV,UAAU,EACV,OAAO,EACP,IAAI,EAGJ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,WAAW,EAGX,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EAGT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,EAGb,UAAU,EACV,aAAa,EAGb,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,UAAU,EAGV,eAAe,EACf,qBAAqB,EAGrB,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EAGd,sBAAsB,EAGtB,MAAM,EAGN,WAAW,EACX,MAAM,GACP,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA0E9C,sBAAsB;AACtB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,qDAAqD;AACrD,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAExE,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA6E9C,sBAAsB;AACtB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,qDAAqD;AACrD,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAExE,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { WsPool } from '../transport/ws-pool.js';
2
+ import type { CallSession, Logger } from '../types/index.js';
3
+ import { SIMULATOR_SAMPLE_RATE } from './wav.js';
4
+ /** Options passed to `DVGatewayClient.simulate()`. */
5
+ export interface SimulateOptions {
6
+ /**
7
+ * Path to the caller's audio. Accepts:
8
+ * - 16 kHz mono 16-bit PCM WAV (standard), or
9
+ * - raw slin16 PCM (no header).
10
+ *
11
+ * Convert arbitrary sources with:
12
+ * `ffmpeg -i input.mp3 -ar 16000 -ac 1 -sample_fmt s16 caller.wav`
13
+ */
14
+ readonly audioFile: string;
15
+ /** Unique call identifier. Auto-generated if omitted. */
16
+ readonly linkedId?: string;
17
+ /** Synthetic CallerID number shown to the pipeline. */
18
+ readonly caller?: string;
19
+ /** Synthetic CallerID name. */
20
+ readonly callerName?: string;
21
+ /** Dialled extension shown to the pipeline. */
22
+ readonly callee?: string;
23
+ /** DID main number. */
24
+ readonly did?: string;
25
+ /** Tenant identifier — propagated into the synthetic call:new event. */
26
+ readonly tenantId?: string;
27
+ /**
28
+ * Pace playback at 20 ms/frame (default, mimics a real call). Set to
29
+ * `false` to flush all frames as fast as possible — useful in CI
30
+ * where wall-clock time matters more than fidelity.
31
+ */
32
+ readonly realtime?: boolean;
33
+ /**
34
+ * Delay between end-of-caller-audio and the synthetic `call:ended`
35
+ * event. Gives the pipeline time to finish its last TTS response
36
+ * before the call is "hung up". Default: 5 seconds.
37
+ */
38
+ readonly hangupDelayMs?: number;
39
+ /** Optional hook: invoked for every captured TTS frame. */
40
+ readonly onTts?: (chunk: Buffer) => void;
41
+ }
42
+ /**
43
+ * Handle returned from `simulate()`. Lets the caller wait for the
44
+ * simulated call to finish, retrieve the bot's spoken reply, or stop
45
+ * the simulation early.
46
+ */
47
+ export interface SimulatedCall {
48
+ readonly linkedId: string;
49
+ readonly session: CallSession;
50
+ /** Resolves once the caller audio has drained and the hangup fires. */
51
+ waitForEnd(): Promise<void>;
52
+ /** Terminate early — emits `call:ended` and releases routes. */
53
+ stop(): Promise<void>;
54
+ /** Return the concatenated captured-TTS PCM (slin16). */
55
+ capturedTtsBytes(): Buffer;
56
+ /** Write captured TTS as a 16 kHz mono WAV to disk. */
57
+ saveTts(outputPath: string): Promise<void>;
58
+ }
59
+ /** Construction context — not part of the public API. */
60
+ export interface SimulatorContext {
61
+ readonly wsPool: WsPool;
62
+ readonly logger: Logger;
63
+ }
64
+ /**
65
+ * Core factory — used by `DVGatewayClient.simulate()`. Returns a
66
+ * SimulatedCall that has already registered its WS routes; the pipeline
67
+ * will start pulling from them as soon as it subscribes.
68
+ */
69
+ export declare function createSimulatedCall(ctx: SimulatorContext, opts: SimulateOptions): Promise<SimulatedCall>;
70
+ export { SIMULATOR_SAMPLE_RATE };
71
+ //# sourceMappingURL=simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/simulator/simulator.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,MAAM,EAAmD,MAAM,yBAAyB,CAAC;AACvG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAkC,MAAM,UAAU,CAAC;AAMjF,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,uEAAuE;IACvE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,gEAAgE;IAChE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,yDAAyD;IACzD,gBAAgB,IAAI,MAAM,CAAC;IAC3B,uDAAuD;IACvD,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAsBD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,aAAa,CAAC,CA2ExB;AAkLD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * DVGateway SDK Simulator
3
+ *
4
+ * Drives an existing DVGatewayClient pipeline from a local audio file
5
+ * without ever opening a real connection to a gateway or placing a real
6
+ * phone call. Intended for unit tests, CI, docs "Try it" widgets, and
7
+ * developer onboarding — `npm start` → hear your bot answer a recorded
8
+ * customer inquiry in seconds.
9
+ *
10
+ * Implementation strategy: `DVGatewayClient.simulate()` installs three
11
+ * simulated routes on the internal `WsPool`:
12
+ *
13
+ * 1. `/api/v1/ws/callinfo` — emits one synthetic `call:new` event for
14
+ * the simulated call, then a `call:ended` event after the audio
15
+ * finishes plus a grace period.
16
+ * 2. `/api/v1/ws/stream?linkedid={id}` — streams slin16 frames from
17
+ * the caller's audio file, paced at 20 ms/frame by default
18
+ * (`realtime: true`). Any inbound `thinking:start/stop` signals
19
+ * from the pipeline are silently acknowledged.
20
+ * 3. `/api/v1/ws/tts/{linkedId}` — captures injected TTS bytes into
21
+ * an in-memory buffer. Retrievable via `capturedTtsBytes()` or
22
+ * written out via `saveTts()`.
23
+ *
24
+ * The pipeline code under test doesn't change — the same five-line
25
+ * `gw.pipeline().stt().llm().tts().start()` runs, and the simulator
26
+ * simply acts as a loopback gateway. The simulator drives call
27
+ * progression (audio playback, hangup) on its own clock so a call
28
+ * still completes cleanly even when the pipeline has not subscribed
29
+ * to the audio stream (useful for unit tests of event handling).
30
+ */
31
+ import { EventEmitter } from 'events';
32
+ import { randomBytes } from 'crypto';
33
+ import { SIMULATOR_SAMPLE_RATE, writeSlin16Wav, readSlin16File } from './wav.js';
34
+ /** 20 ms slin16 frame — matches the gateway's native frame size. */
35
+ const FRAME_BYTES = 640;
36
+ const FRAME_DURATION_MS = 20;
37
+ /** Build a synthetic CallSession from user overrides + defaults. */
38
+ function buildSession(opts, linkedId) {
39
+ return {
40
+ linkedId,
41
+ dir: 'both',
42
+ caller: opts.caller ?? '+1-555-0100',
43
+ callerName: opts.callerName ?? 'Simulated Caller',
44
+ callee: opts.callee ?? '100',
45
+ did: opts.did ?? opts.callee ?? '100',
46
+ startedAt: new Date(),
47
+ streamUrl: `sim://audio/${linkedId}`,
48
+ tenantId: opts.tenantId,
49
+ };
50
+ }
51
+ /** Pick a linkedId that won't collide with real gateway IDs. */
52
+ function generateLinkedId() {
53
+ return `sim-${Date.now().toString(36)}-${randomBytes(4).toString('hex')}`;
54
+ }
55
+ /**
56
+ * Core factory — used by `DVGatewayClient.simulate()`. Returns a
57
+ * SimulatedCall that has already registered its WS routes; the pipeline
58
+ * will start pulling from them as soon as it subscribes.
59
+ */
60
+ export async function createSimulatedCall(ctx, opts) {
61
+ const linkedId = opts.linkedId ?? generateLinkedId();
62
+ const session = buildSession(opts, linkedId);
63
+ const hangupDelayMs = opts.hangupDelayMs ?? 5_000;
64
+ const realtime = opts.realtime !== false;
65
+ const pcm = await readSlin16File(opts.audioFile);
66
+ if (pcm.length === 0) {
67
+ throw new Error(`simulator: audio file is empty: ${opts.audioFile}`);
68
+ }
69
+ const state = new SimulatorState(ctx.logger, linkedId, session, pcm, realtime, hangupDelayMs);
70
+ // ── Route 1: call events ────────────────────────────────────────────
71
+ const callInfoRoute = {
72
+ matches: (path) => path === '/api/v1/ws/callinfo',
73
+ onSubscribe: (sub) => {
74
+ state.attachCallinfo(sub);
75
+ return {
76
+ send: () => { },
77
+ sendText: () => { },
78
+ close: () => state.detachCallinfo(sub),
79
+ };
80
+ },
81
+ };
82
+ // ── Route 2: audio stream ───────────────────────────────────────────
83
+ const audioRoute = {
84
+ matches: (path, params) => path === '/api/v1/ws/stream' && params['linkedid'] === linkedId,
85
+ onSubscribe: (sub) => {
86
+ state.attachAudio(sub);
87
+ return {
88
+ // pipeline never sends binary on the inbound-audio WS
89
+ send: () => { },
90
+ sendText: (text) => {
91
+ // thinking:start / thinking:stop — log only, no side effects
92
+ ctx.logger.debug({ linkedId, text }, 'simulator: thinking signal');
93
+ },
94
+ close: () => state.detachAudio(sub),
95
+ };
96
+ },
97
+ };
98
+ // ── Route 3: TTS capture ────────────────────────────────────────────
99
+ const ttsPath = `/api/v1/ws/tts/${encodeURIComponent(linkedId)}`;
100
+ const ttsRoute = {
101
+ matches: (path) => path === ttsPath,
102
+ onSubscribe: () => {
103
+ return {
104
+ send: (chunk) => {
105
+ state.captureTts(chunk);
106
+ opts.onTts?.(chunk);
107
+ },
108
+ sendText: () => { },
109
+ close: () => { },
110
+ };
111
+ },
112
+ };
113
+ const disposers = [
114
+ ctx.wsPool.addSimulatedRoute(callInfoRoute),
115
+ ctx.wsPool.addSimulatedRoute(audioRoute),
116
+ ctx.wsPool.addSimulatedRoute(ttsRoute),
117
+ ];
118
+ state.onStop = () => {
119
+ for (const d of disposers)
120
+ d();
121
+ };
122
+ // Kick off the call clock. Playback runs on its own timer so the
123
+ // simulation always terminates, even when nothing subscribes to the
124
+ // audio stream (e.g. a unit test that only listens for call events).
125
+ state.start();
126
+ return state.handle();
127
+ }
128
+ // ─── Private implementation ──────────────────────────────────────────
129
+ class SimulatorState {
130
+ logger;
131
+ linkedId;
132
+ session;
133
+ pcm;
134
+ realtime;
135
+ hangupDelayMs;
136
+ callNewPayload;
137
+ callNewDeliveredTo = new WeakSet();
138
+ callinfoSubs = new Set();
139
+ audioSubs = new Set();
140
+ callEndedDelivered = false;
141
+ frameIndex = 0;
142
+ totalFrames;
143
+ playbackTimer = null;
144
+ hangupTimer = null;
145
+ captured = [];
146
+ end = new EventEmitter();
147
+ stopped = false;
148
+ startedAt = 0;
149
+ onStop = () => undefined;
150
+ constructor(logger, linkedId, session, pcm, realtime, hangupDelayMs) {
151
+ this.logger = logger;
152
+ this.linkedId = linkedId;
153
+ this.session = session;
154
+ this.pcm = pcm;
155
+ this.realtime = realtime;
156
+ this.hangupDelayMs = hangupDelayMs;
157
+ this.totalFrames = Math.ceil(pcm.length / FRAME_BYTES);
158
+ this.callNewPayload = Buffer.from(JSON.stringify({
159
+ event: 'call:new',
160
+ linkedId: this.linkedId,
161
+ dir: this.session.dir,
162
+ caller: this.session.caller,
163
+ callerName: this.session.callerName,
164
+ callee: this.session.callee,
165
+ did: this.session.did,
166
+ streamUrl: this.session.streamUrl,
167
+ tenantId: this.session.tenantId,
168
+ }), 'utf8');
169
+ }
170
+ start() {
171
+ this.startedAt = Date.now();
172
+ if (this.realtime) {
173
+ // Realtime: one 20 ms frame per tick; setInterval naturally calls
174
+ // `tick()` once more after the last frame, which triggers
175
+ // `onPlaybackComplete()` via the frameIndex >= totalFrames branch.
176
+ this.playbackTimer = setInterval(() => this.tick(), FRAME_DURATION_MS);
177
+ }
178
+ else {
179
+ // Fast path for tests/CI: flush all frames on a microtask, then
180
+ // explicitly complete. Subscribers attaching synchronously after
181
+ // simulate() resolves still catch every frame (they register
182
+ // before this microtask runs).
183
+ queueMicrotask(() => {
184
+ while (!this.stopped && this.frameIndex < this.totalFrames) {
185
+ this.pushFrame();
186
+ }
187
+ if (!this.stopped)
188
+ this.onPlaybackComplete();
189
+ });
190
+ }
191
+ }
192
+ tick() {
193
+ if (this.stopped)
194
+ return;
195
+ if (this.frameIndex >= this.totalFrames) {
196
+ this.onPlaybackComplete();
197
+ return;
198
+ }
199
+ this.pushFrame();
200
+ }
201
+ pushFrame() {
202
+ const start = this.frameIndex * FRAME_BYTES;
203
+ const end = Math.min(start + FRAME_BYTES, this.pcm.length);
204
+ const frame = this.pcm.subarray(start, end);
205
+ // Share the slice; subscribers that modify must copy. All known
206
+ // SDK consumers only read.
207
+ for (const sub of this.audioSubs) {
208
+ sub.onMessage(Buffer.from(frame));
209
+ }
210
+ this.frameIndex++;
211
+ }
212
+ onPlaybackComplete() {
213
+ if (this.playbackTimer) {
214
+ clearInterval(this.playbackTimer);
215
+ this.playbackTimer = null;
216
+ }
217
+ // Close audio streams so the STT adapter sees EOF.
218
+ for (const sub of this.audioSubs) {
219
+ sub.onClose?.();
220
+ }
221
+ // Schedule the hangup so the pipeline finishes its last TTS reply.
222
+ this.hangupTimer = setTimeout(() => {
223
+ this.emitCallEnded((Date.now() - this.startedAt) / 1000);
224
+ this.end.emit('end');
225
+ }, this.hangupDelayMs);
226
+ }
227
+ attachCallinfo(sub) {
228
+ this.callinfoSubs.add(sub);
229
+ // Deliver call:new on the next microtask so subscribe() returns
230
+ // before the event lands in the caller's handler.
231
+ queueMicrotask(() => {
232
+ if (this.stopped)
233
+ return;
234
+ if (this.callNewDeliveredTo.has(sub))
235
+ return;
236
+ this.callNewDeliveredTo.add(sub);
237
+ sub.onMessage(Buffer.from(this.callNewPayload));
238
+ this.logger.info({ linkedId: this.linkedId }, 'simulator: call:new delivered');
239
+ });
240
+ }
241
+ detachCallinfo(sub) {
242
+ this.callinfoSubs.delete(sub);
243
+ }
244
+ attachAudio(sub) {
245
+ this.audioSubs.add(sub);
246
+ }
247
+ detachAudio(sub) {
248
+ this.audioSubs.delete(sub);
249
+ }
250
+ captureTts(chunk) {
251
+ this.captured.push(Buffer.from(chunk));
252
+ }
253
+ emitCallEnded(durationSec) {
254
+ if (this.callEndedDelivered)
255
+ return;
256
+ this.callEndedDelivered = true;
257
+ const payload = Buffer.from(JSON.stringify({
258
+ event: 'call:ended',
259
+ linkedId: this.linkedId,
260
+ duration: durationSec,
261
+ }), 'utf8');
262
+ for (const sub of this.callinfoSubs) {
263
+ sub.onMessage(payload);
264
+ }
265
+ this.logger.info({ linkedId: this.linkedId, durationSec }, 'simulator: call:ended delivered');
266
+ }
267
+ handle() {
268
+ const self = this;
269
+ return {
270
+ linkedId: self.linkedId,
271
+ session: self.session,
272
+ waitForEnd() {
273
+ if (self.callEndedDelivered)
274
+ return Promise.resolve();
275
+ return new Promise((resolve) => {
276
+ self.end.once('end', () => resolve());
277
+ });
278
+ },
279
+ async stop() {
280
+ if (self.stopped)
281
+ return;
282
+ self.stopped = true;
283
+ if (self.playbackTimer) {
284
+ clearInterval(self.playbackTimer);
285
+ self.playbackTimer = null;
286
+ }
287
+ if (self.hangupTimer) {
288
+ clearTimeout(self.hangupTimer);
289
+ self.hangupTimer = null;
290
+ }
291
+ self.emitCallEnded(0);
292
+ self.end.emit('end');
293
+ self.onStop();
294
+ },
295
+ capturedTtsBytes() {
296
+ return Buffer.concat(self.captured);
297
+ },
298
+ async saveTts(outputPath) {
299
+ const buf = Buffer.concat(self.captured);
300
+ await writeSlin16Wav(outputPath, buf);
301
+ },
302
+ };
303
+ }
304
+ }
305
+ export { SIMULATOR_SAMPLE_RATE };
306
+ //# sourceMappingURL=simulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../src/simulator/simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=simulator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.test.d.ts","sourceRoot":"","sources":["../../src/simulator/simulator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Unit tests for the SDK simulator.
3
+ *
4
+ * Exercises the end-to-end shape of `DVGatewayClient.simulate()`:
5
+ * - synthetic `call:new` delivery,
6
+ * - paced slin16 frame playback,
7
+ * - captured-TTS buffer round-trip,
8
+ * - graceful hangup.
9
+ */
10
+ import { promises as fs } from 'fs';
11
+ import { tmpdir } from 'os';
12
+ import { join } from 'path';
13
+ import { DVGatewayClient } from '../client.js';
14
+ import { writeSlin16Wav } from './wav.js';
15
+ // 800 ms of silence at 16 kHz → 40 frames of 640 bytes each.
16
+ const SILENCE_PCM = Buffer.alloc(16_000 * 2 * 0.8);
17
+ async function tmpWav() {
18
+ const p = join(tmpdir(), `dvgateway-sim-${Date.now()}-${Math.random().toString(36).slice(2)}.wav`);
19
+ await writeSlin16Wav(p, SILENCE_PCM);
20
+ return p;
21
+ }
22
+ describe('DVGatewayClient.simulate', () => {
23
+ it('delivers a synthetic call:new event and resolves waitForEnd', async () => {
24
+ const gw = new DVGatewayClient({
25
+ baseUrl: 'http://localhost:8080',
26
+ auth: { type: 'apiKey', apiKey: 'simulation' },
27
+ });
28
+ const wavPath = await tmpWav();
29
+ try {
30
+ const events = [];
31
+ gw.onCallEvent((e) => { events.push(e.type); });
32
+ const call = await gw.simulate({
33
+ audioFile: wavPath,
34
+ caller: '+82-10-0000-1111',
35
+ realtime: false, // flush ASAP in tests
36
+ hangupDelayMs: 50, // short grace period
37
+ });
38
+ expect(call.linkedId).toMatch(/^sim-/);
39
+ expect(call.session.caller).toBe('+82-10-0000-1111');
40
+ await call.waitForEnd();
41
+ expect(events).toContain('call:new');
42
+ expect(events).toContain('call:ended');
43
+ }
44
+ finally {
45
+ gw.close();
46
+ await fs.unlink(wavPath).catch(() => undefined);
47
+ }
48
+ });
49
+ it('captures injected TTS into the handle buffer', async () => {
50
+ const gw = new DVGatewayClient({
51
+ baseUrl: 'http://localhost:8080',
52
+ auth: { type: 'apiKey', apiKey: 'simulation' },
53
+ });
54
+ const wavPath = await tmpWav();
55
+ try {
56
+ const call = await gw.simulate({
57
+ audioFile: wavPath,
58
+ realtime: false,
59
+ hangupDelayMs: 100,
60
+ });
61
+ // Generate ~200 ms of fake TTS (sine-wave placeholder values would be
62
+ // ideal, but for capture semantics any slin16 bytes suffice).
63
+ async function* fakeTts() {
64
+ for (let i = 0; i < 5; i++) {
65
+ yield Buffer.alloc(640, i + 1);
66
+ }
67
+ }
68
+ await gw.injectTts(call.linkedId, fakeTts());
69
+ const captured = call.capturedTtsBytes();
70
+ expect(captured.length).toBe(5 * 640);
71
+ const outPath = join(tmpdir(), `sim-tts-${Date.now()}.wav`);
72
+ await call.saveTts(outPath);
73
+ const onDisk = await fs.readFile(outPath);
74
+ // 44-byte WAV header + pcm
75
+ expect(onDisk.length).toBe(44 + captured.length);
76
+ await fs.unlink(outPath).catch(() => undefined);
77
+ await call.waitForEnd();
78
+ }
79
+ finally {
80
+ gw.close();
81
+ await fs.unlink(wavPath).catch(() => undefined);
82
+ }
83
+ });
84
+ it('stop() short-circuits the simulation', async () => {
85
+ const gw = new DVGatewayClient({
86
+ baseUrl: 'http://localhost:8080',
87
+ auth: { type: 'apiKey', apiKey: 'simulation' },
88
+ });
89
+ const wavPath = await tmpWav();
90
+ try {
91
+ const call = await gw.simulate({
92
+ audioFile: wavPath,
93
+ realtime: true, // would otherwise run for 800ms
94
+ hangupDelayMs: 60_000, // ridiculous grace period we want to skip
95
+ });
96
+ await call.stop();
97
+ await call.waitForEnd(); // must resolve immediately
98
+ }
99
+ finally {
100
+ gw.close();
101
+ await fs.unlink(wavPath).catch(() => undefined);
102
+ }
103
+ });
104
+ });
105
+ //# sourceMappingURL=simulator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.test.js","sourceRoot":"","sources":["../../src/simulator/simulator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Target sample rate for all gateway audio (slin16). */
2
+ export declare const SIMULATOR_SAMPLE_RATE: 16000;
3
+ /**
4
+ * Read a WAV or raw slin16 file into a single Buffer of 16-bit LE PCM.
5
+ * The returned buffer can be sliced into 640-byte frames directly.
6
+ *
7
+ * @throws If the file is a WAV with unsupported format (non-PCM,
8
+ * non-mono, or sample rate != 16 kHz).
9
+ */
10
+ export declare function readSlin16File(path: string): Promise<Buffer>;
11
+ /** Same as readSlin16File but operates on an in-memory Buffer. */
12
+ export declare function parseSlin16(data: Buffer): Buffer;
13
+ /**
14
+ * Wrap raw 16 kHz mono slin16 PCM into a minimal WAV container and write
15
+ * it to disk. Used by `SimulatedCall.saveTts()` so captured TTS can be
16
+ * played back in any audio tool.
17
+ */
18
+ export declare function writeSlin16Wav(path: string, pcm: Buffer): Promise<void>;
19
+ //# sourceMappingURL=wav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wav.d.ts","sourceRoot":"","sources":["../../src/simulator/wav.ts"],"names":[],"mappings":"AAaA,yDAAyD;AACzD,eAAO,MAAM,qBAAqB,EAAG,KAAe,CAAC;AAErD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyDhD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7E"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Minimal WAV file reader/writer for the SDK simulator.
3
+ *
4
+ * Supports the narrow format needed by DVGateway simulation:
5
+ * - PCM (format code 1), 16-bit little-endian, mono, 16 kHz.
6
+ *
7
+ * Also accepts raw slin16 files (no RIFF header) — any file whose first
8
+ * four bytes are not `RIFF` is treated as a raw slin16 stream. This lets
9
+ * callers point `audioFile` at either a standard WAV asset or a raw PCM
10
+ * capture without juggling conversions themselves.
11
+ */
12
+ import { promises as fs } from 'fs';
13
+ /** Target sample rate for all gateway audio (slin16). */
14
+ export const SIMULATOR_SAMPLE_RATE = 16_000;
15
+ /**
16
+ * Read a WAV or raw slin16 file into a single Buffer of 16-bit LE PCM.
17
+ * The returned buffer can be sliced into 640-byte frames directly.
18
+ *
19
+ * @throws If the file is a WAV with unsupported format (non-PCM,
20
+ * non-mono, or sample rate != 16 kHz).
21
+ */
22
+ export async function readSlin16File(path) {
23
+ const data = await fs.readFile(path);
24
+ return parseSlin16(data);
25
+ }
26
+ /** Same as readSlin16File but operates on an in-memory Buffer. */
27
+ export function parseSlin16(data) {
28
+ if (data.length < 4 || data.subarray(0, 4).toString('ascii') !== 'RIFF') {
29
+ // Not a RIFF container — treat as raw slin16 PCM.
30
+ return data;
31
+ }
32
+ // RIFF WAV — find fmt and data chunks.
33
+ if (data.subarray(8, 12).toString('ascii') !== 'WAVE') {
34
+ throw new Error('simulator: file starts with RIFF but is not a WAVE');
35
+ }
36
+ let offset = 12;
37
+ let audioFormat = 0;
38
+ let numChannels = 0;
39
+ let sampleRate = 0;
40
+ let bitsPerSample = 0;
41
+ let pcm = null;
42
+ while (offset + 8 <= data.length) {
43
+ const id = data.subarray(offset, offset + 4).toString('ascii');
44
+ const size = data.readUInt32LE(offset + 4);
45
+ const body = data.subarray(offset + 8, offset + 8 + size);
46
+ if (id === 'fmt ') {
47
+ audioFormat = body.readUInt16LE(0);
48
+ numChannels = body.readUInt16LE(2);
49
+ sampleRate = body.readUInt32LE(4);
50
+ bitsPerSample = body.readUInt16LE(14);
51
+ }
52
+ else if (id === 'data') {
53
+ pcm = body;
54
+ break; // we've got everything we need
55
+ }
56
+ // Chunks are word-aligned — odd sizes carry a trailing pad byte.
57
+ offset += 8 + size + (size % 2);
58
+ }
59
+ if (!pcm) {
60
+ throw new Error('simulator: WAV file has no data chunk');
61
+ }
62
+ if (audioFormat !== 1) {
63
+ throw new Error(`simulator: unsupported WAV format code ${audioFormat} (need PCM=1)`);
64
+ }
65
+ if (numChannels !== 1) {
66
+ throw new Error(`simulator: unsupported channel count ${numChannels} (need mono)`);
67
+ }
68
+ if (sampleRate !== SIMULATOR_SAMPLE_RATE) {
69
+ throw new Error(`simulator: unsupported sample rate ${sampleRate} Hz (need ${SIMULATOR_SAMPLE_RATE} Hz); ` +
70
+ `convert with: ffmpeg -i input.wav -ar 16000 -ac 1 -sample_fmt s16 output.wav`);
71
+ }
72
+ if (bitsPerSample !== 16) {
73
+ throw new Error(`simulator: unsupported bit depth ${bitsPerSample} (need 16)`);
74
+ }
75
+ return pcm;
76
+ }
77
+ /**
78
+ * Wrap raw 16 kHz mono slin16 PCM into a minimal WAV container and write
79
+ * it to disk. Used by `SimulatedCall.saveTts()` so captured TTS can be
80
+ * played back in any audio tool.
81
+ */
82
+ export async function writeSlin16Wav(path, pcm) {
83
+ const header = Buffer.alloc(44);
84
+ const byteRate = SIMULATOR_SAMPLE_RATE * 2; // 16-bit mono
85
+ header.write('RIFF', 0, 'ascii');
86
+ header.writeUInt32LE(36 + pcm.length, 4);
87
+ header.write('WAVE', 8, 'ascii');
88
+ header.write('fmt ', 12, 'ascii');
89
+ header.writeUInt32LE(16, 16); // fmt chunk size
90
+ header.writeUInt16LE(1, 20); // PCM
91
+ header.writeUInt16LE(1, 22); // mono
92
+ header.writeUInt32LE(SIMULATOR_SAMPLE_RATE, 24);
93
+ header.writeUInt32LE(byteRate, 28);
94
+ header.writeUInt16LE(2, 32); // block align
95
+ header.writeUInt16LE(16, 34); // bits per sample
96
+ header.write('data', 36, 'ascii');
97
+ header.writeUInt32LE(pcm.length, 40);
98
+ await fs.writeFile(path, Buffer.concat([header, pcm]));
99
+ }
100
+ //# sourceMappingURL=wav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wav.js","sourceRoot":"","sources":["../../src/simulator/wav.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tts-stream.d.ts","sourceRoot":"","sources":["../../src/streams/tts-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAM5D;;;;;;;;OAQG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IA6ChB;;;;;;OAMG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE;;;;;OAKG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAejB"}
1
+ {"version":3,"file":"tts-stream.d.ts","sourceRoot":"","sources":["../../src/streams/tts-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAM5D;;;;;;;;OAQG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAwDhB;;;;;;OAMG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE;;;;;OAKG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;CAejB"}
@@ -32,7 +32,29 @@ export class TtsInjector {
32
32
  const subId = `tts-ws-${linkedId}-${uuidv4()}`;
33
33
  let wsReady = false;
34
34
  let pendingSend = [];
35
- // Establish WebSocket first, buffer any early audio
35
+ // Attach the "connected" listener BEFORE calling subscribe() so we
36
+ // never miss the event. The simulator (and any future transport
37
+ // that completes the handshake synchronously) fires `connected` on
38
+ // the very next microtask after subscribe() resolves; if the for-
39
+ // await loop below runs synchronously-yielding chunks, it can drain
40
+ // its entire microtask queue before the listener registration —
41
+ // losing the event and all buffered frames. Using `on` + manual
42
+ // `off` instead of `once` also avoids the cross-subscription race
43
+ // where an unrelated `connected` (different subId) would consume
44
+ // our one-shot listener.
45
+ const onConnected = (id) => {
46
+ if (id !== subId)
47
+ return;
48
+ wsReady = true;
49
+ for (const buf of pendingSend) {
50
+ this.wsPool.emit('__send', subId, buf);
51
+ }
52
+ pendingSend = [];
53
+ this.wsPool.off('connected', onConnected);
54
+ };
55
+ this.wsPool.on('connected', onConnected);
56
+ // Establish WebSocket; early audio frames buffer in pendingSend
57
+ // until the handler above flips `wsReady`.
36
58
  await this.wsPool.subscribe({
37
59
  id: subId,
38
60
  path: `/api/v1/ws/tts/${encodeURIComponent(linkedId)}`,
@@ -42,17 +64,6 @@ export class TtsInjector {
42
64
  this.logger.debug({ linkedId }, 'TTS WebSocket closed');
43
65
  },
44
66
  });
45
- // The WsPool emits 'connected' when the handshake completes
46
- this.wsPool.once('connected', (id) => {
47
- if (id !== subId)
48
- return;
49
- wsReady = true;
50
- // Flush buffered frames
51
- for (const buf of pendingSend) {
52
- this.wsPool.emit('__send', subId, buf);
53
- }
54
- pendingSend = [];
55
- });
56
67
  // Stream audio chunks
57
68
  try {
58
69
  for await (const chunk of audioChunks) {
@@ -68,6 +79,7 @@ export class TtsInjector {
68
79
  }
69
80
  }
70
81
  finally {
82
+ this.wsPool.off('connected', onConnected);
71
83
  this.wsPool.unsubscribe(subId);
72
84
  }
73
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tts-stream.js","sourceRoot":"","sources":["../../src/streams/tts-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tts-stream.js","sourceRoot":"","sources":["../../src/streams/tts-stream.ts"],"names":[],"mappings":"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"}
@@ -16,12 +16,51 @@ export interface WsSubscription {
16
16
  readonly onMessage: (data: Buffer) => void;
17
17
  readonly onClose?: () => void;
18
18
  }
19
+ /**
20
+ * Handle returned from a simulated route's `onSubscribe` callback.
21
+ * Allows the WsPool to forward outbound `__send` / `__sendText` events
22
+ * into the simulator, and close the virtual connection cleanly.
23
+ */
24
+ export interface SimulatedSocket {
25
+ send(data: Buffer): void;
26
+ sendText(text: string): void;
27
+ close(): void;
28
+ }
29
+ /**
30
+ * Route interceptor used by the simulator to replace real WebSocket
31
+ * connections with in-process virtual sockets. When `matches()` returns
32
+ * true for a subscription's `path + params`, `onSubscribe()` is invoked
33
+ * and the returned handle receives all outbound sends, while inbound
34
+ * frames are pushed back into the subscription's `onMessage` callback.
35
+ *
36
+ * Registered via `WsPool.addSimulatedRoute()` and unregistered via the
37
+ * returned disposer. Routes are matched in registration order; the first
38
+ * match wins.
39
+ */
40
+ export interface SimulatedRoute {
41
+ matches(path: string, params: Record<string, string>): boolean;
42
+ onSubscribe(sub: WsSubscription): SimulatedSocket;
43
+ }
19
44
  export declare class WsPool extends EventEmitter {
20
45
  private readonly auth;
21
46
  private readonly reconnect;
22
47
  private readonly logger;
23
48
  private readonly connections;
49
+ /** Simulated routes registered by the simulator; checked before real WS connect. */
50
+ private readonly simulatedRoutes;
24
51
  constructor(auth: AuthManager, reconnect: ReconnectOptions, logger: Logger);
52
+ /**
53
+ * Register a simulated route. Returns a disposer that removes the
54
+ * route. Used exclusively by the simulator — production code should
55
+ * never touch this.
56
+ *
57
+ * If any existing connections have already subscribed to a path that
58
+ * matches this route (e.g. a pipeline started before `simulate()`
59
+ * was called), those connections are cut over to the simulator: any
60
+ * pending real-WS attempt is cancelled, a virtual socket is attached,
61
+ * and a synthetic `connected` event is emitted.
62
+ */
63
+ addSimulatedRoute(route: SimulatedRoute): () => void;
25
64
  /** Open a managed WebSocket connection for a subscription */
26
65
  subscribe(sub: WsSubscription): Promise<void>;
27
66
  /** Close a specific subscription */
@@ -1 +1 @@
1
- {"version":3,"file":"ws-pool.d.ts","sourceRoot":"","sources":["../../src/transport/ws-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAWD,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;gBAExD,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM;IA8B1E,6DAA6D;IACvD,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAanD,oCAAoC;IACpC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAc7B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,4BAA4B;IAC5B,QAAQ,IAAI,IAAI;YAMF,OAAO;IAwDrB,OAAO,CAAC,iBAAiB;CA+B1B"}
1
+ {"version":3,"file":"ws-pool.d.ts","sourceRoot":"","sources":["../../src/transport/ws-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;IAC/D,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CAAC;CACnD;AAYD,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IACpE,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;gBAE5C,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM;IAwC1E;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,IAAI;IA6BpD,6DAA6D;IACvD,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCnD,oCAAoC;IACpC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAkB7B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,4BAA4B;IAC5B,QAAQ,IAAI,IAAI;YAMF,OAAO;IAwDrB,OAAO,CAAC,iBAAiB;CA+B1B"}
@@ -13,6 +13,8 @@ export class WsPool extends EventEmitter {
13
13
  reconnect;
14
14
  logger;
15
15
  connections = new Map();
16
+ /** Simulated routes registered by the simulator; checked before real WS connect. */
17
+ simulatedRoutes = [];
16
18
  constructor(auth, reconnect, logger) {
17
19
  super();
18
20
  this.auth = auth;
@@ -28,22 +30,84 @@ export class WsPool extends EventEmitter {
28
30
  // Handle binary frame sends from TtsInjector
29
31
  this.on('__send', (id, data) => {
30
32
  const conn = this.connections.get(id);
31
- if (conn?.ws && conn.ws.readyState === WebSocket.OPEN) {
33
+ if (!conn)
34
+ return;
35
+ if (conn.simulated) {
36
+ conn.simulated.send(data);
37
+ return;
38
+ }
39
+ if (conn.ws && conn.ws.readyState === WebSocket.OPEN) {
32
40
  conn.ws.send(data);
33
41
  }
34
42
  });
35
43
  // Handle text message sends (e.g., thinking signals)
36
44
  this.on('__sendText', (id, text) => {
37
45
  const conn = this.connections.get(id);
38
- if (conn?.ws && conn.ws.readyState === WebSocket.OPEN) {
46
+ if (!conn)
47
+ return;
48
+ if (conn.simulated) {
49
+ conn.simulated.sendText(text);
50
+ return;
51
+ }
52
+ if (conn.ws && conn.ws.readyState === WebSocket.OPEN) {
39
53
  conn.ws.send(text);
40
54
  }
41
55
  });
42
56
  }
57
+ /**
58
+ * Register a simulated route. Returns a disposer that removes the
59
+ * route. Used exclusively by the simulator — production code should
60
+ * never touch this.
61
+ *
62
+ * If any existing connections have already subscribed to a path that
63
+ * matches this route (e.g. a pipeline started before `simulate()`
64
+ * was called), those connections are cut over to the simulator: any
65
+ * pending real-WS attempt is cancelled, a virtual socket is attached,
66
+ * and a synthetic `connected` event is emitted.
67
+ */
68
+ addSimulatedRoute(route) {
69
+ this.simulatedRoutes.push(route);
70
+ // Cut over any live connections that now match this route.
71
+ for (const [id, conn] of this.connections) {
72
+ if (conn.closed || conn.simulated)
73
+ continue;
74
+ if (!route.matches(conn.subscription.path, conn.subscription.params))
75
+ continue;
76
+ // Cancel pending reconnect and any real WS that's in flight.
77
+ if (conn.reconnectTimer) {
78
+ clearTimeout(conn.reconnectTimer);
79
+ conn.reconnectTimer = null;
80
+ }
81
+ if (conn.pingTimer) {
82
+ clearInterval(conn.pingTimer);
83
+ conn.pingTimer = null;
84
+ }
85
+ if (conn.ws) {
86
+ conn.ws.removeAllListeners();
87
+ try {
88
+ conn.ws.close(1000, 'replaced by simulator');
89
+ }
90
+ catch { /* already closing */ }
91
+ conn.ws = null;
92
+ }
93
+ conn.reconnectAttempts = 0;
94
+ conn.simulated = route.onSubscribe(conn.subscription);
95
+ queueMicrotask(() => {
96
+ if (!conn.closed)
97
+ this.emit('connected', id);
98
+ });
99
+ }
100
+ return () => {
101
+ const idx = this.simulatedRoutes.indexOf(route);
102
+ if (idx >= 0)
103
+ this.simulatedRoutes.splice(idx, 1);
104
+ };
105
+ }
43
106
  /** Open a managed WebSocket connection for a subscription */
44
107
  async subscribe(sub) {
45
108
  const conn = {
46
109
  ws: null,
110
+ simulated: null,
47
111
  subscription: sub,
48
112
  reconnectAttempts: 0,
49
113
  closed: false,
@@ -51,6 +115,24 @@ export class WsPool extends EventEmitter {
51
115
  pingTimer: null,
52
116
  };
53
117
  this.connections.set(sub.id, conn);
118
+ // Check simulated routes first — matches intercept before we open a
119
+ // real socket. This is how the SDK simulator replaces the gateway.
120
+ for (const route of this.simulatedRoutes) {
121
+ if (route.matches(sub.path, sub.params)) {
122
+ conn.simulated = route.onSubscribe(sub);
123
+ // Announce "connected" as a microtask so subscribers that attach
124
+ // `on('connected')` (or `once`) synchronously after the await
125
+ // return still catch the event. Microtask FIFO order: the
126
+ // caller's await-continuation is queued first (when this async
127
+ // function resolves), then this emit runs — so handlers have
128
+ // been registered by the time the event fires.
129
+ queueMicrotask(() => {
130
+ if (!conn.closed)
131
+ this.emit('connected', sub.id);
132
+ });
133
+ return;
134
+ }
135
+ }
54
136
  await this.connect(conn);
55
137
  }
56
138
  /** Close a specific subscription */
@@ -63,6 +145,10 @@ export class WsPool extends EventEmitter {
63
145
  clearInterval(conn.pingTimer);
64
146
  if (conn.reconnectTimer)
65
147
  clearTimeout(conn.reconnectTimer);
148
+ if (conn.simulated) {
149
+ conn.simulated.close();
150
+ conn.simulated = null;
151
+ }
66
152
  if (conn.ws) {
67
153
  conn.ws.removeAllListeners();
68
154
  conn.ws.close(1000, 'unsubscribed');
@@ -1 +1 @@
1
- {"version":3,"file":"ws-pool.js","sourceRoot":"","sources":["../../src/transport/ws-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-pool.js","sourceRoot":"","sources":["../../src/transport/ws-pool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dvgateway-sdk",
3
- "version": "1.4.4",
3
+ "version": "1.4.6",
4
4
  "description": "DVGateway SDK — Real-time voice AI integration for the DVGateway media gateway",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",