dvgateway-sdk 1.4.3 → 1.4.5
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 +168 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +167 -6
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/simulator/simulator.d.ts +71 -0
- package/dist/simulator/simulator.d.ts.map +1 -0
- package/dist/simulator/simulator.js +306 -0
- package/dist/simulator/simulator.js.map +1 -0
- package/dist/simulator/simulator.test.d.ts +2 -0
- package/dist/simulator/simulator.test.d.ts.map +1 -0
- package/dist/simulator/simulator.test.js +105 -0
- package/dist/simulator/simulator.test.js.map +1 -0
- package/dist/simulator/wav.d.ts +19 -0
- package/dist/simulator/wav.d.ts.map +1 -0
- package/dist/simulator/wav.js +100 -0
- package/dist/simulator/wav.js.map +1 -0
- package/dist/streams/tts-stream.d.ts.map +1 -1
- package/dist/streams/tts-stream.js +24 -12
- package/dist/streams/tts-stream.js.map +1 -1
- package/dist/transport/ws-pool.d.ts +39 -0
- package/dist/transport/ws-pool.d.ts.map +1 -1
- package/dist/transport/ws-pool.js +88 -2
- package/dist/transport/ws-pool.js.map +1 -1
- package/package.json +1 -1
|
@@ -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;
|
|
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
|
|
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
|
|
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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,SAAS,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-pool.js","sourceRoot":"","sources":["../../src/transport/ws-pool.ts"],"names":[],"mappings":"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"}
|