@caitdesk/client 0.4.2 → 0.5.1
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/README.md +39 -18
- package/dist/api.js +2 -2
- package/dist/api.js.map +1 -1
- package/dist/broadcast-ws.d.ts +4 -0
- package/dist/broadcast-ws.d.ts.map +1 -1
- package/dist/broadcast-ws.js +46 -5
- package/dist/broadcast-ws.js.map +1 -1
- package/dist/types.d.ts +12 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ws.d.ts +7 -0
- package/dist/ws.d.ts.map +1 -1
- package/dist/ws.js +42 -1
- package/dist/ws.js.map +1 -1
- package/package.json +19 -2
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ const client = new CaitDeskClient({
|
|
|
51
51
|
|
|
52
52
|
// Subscribe to an event's broadcast
|
|
53
53
|
await client.subscribe('event-id', {
|
|
54
|
-
onCaption: (text, seq) => console.log('Caption:', text),
|
|
54
|
+
onCaption: (text, seq, meta) => console.log('Caption:', text, meta?.latency),
|
|
55
55
|
onStatus: (status) => console.log('Event status:', status),
|
|
56
56
|
onViewerCount: (count) => console.log('Viewers:', count),
|
|
57
57
|
onError: (err) => console.error('Error:', err.message),
|
|
@@ -116,17 +116,6 @@ client.startEvent(eventId: string): Promise<{ success: boolean }>
|
|
|
116
116
|
client.stopEvent(eventId: string): Promise<{ success: boolean }>
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
### Standalone Functions
|
|
120
|
-
|
|
121
|
-
#### `checkEvent(apiUrl, eventId, fetchFn?)`
|
|
122
|
-
|
|
123
|
-
Public endpoint — no API key required. Returns `{ exists: boolean; joinable: boolean }`. Useful for validating an event ID before attempting a WebSocket connection. On network errors, returns `{ exists: false, joinable: false }`.
|
|
124
|
-
|
|
125
|
-
- `getMe()` — returns the authenticated user's info
|
|
126
|
-
- `getEvents()` — returns events assigned to you as captioner (scheduled and live only)
|
|
127
|
-
- `startEvent(eventId)` — start an event via REST (scheduled → live). Requires `captioner:control` scope
|
|
128
|
-
- `stopEvent(eventId)` — stop an event via REST (live → ended). Requires `captioner:control` scope
|
|
129
|
-
|
|
130
119
|
#### Connection
|
|
131
120
|
|
|
132
121
|
```ts
|
|
@@ -176,7 +165,7 @@ client.unsubscribe(): void
|
|
|
176
165
|
|
|
177
166
|
```ts
|
|
178
167
|
await client.subscribe(eventId, {
|
|
179
|
-
onCaption: (text, seq) => console.log('Caption:', text),
|
|
168
|
+
onCaption: (text, seq, meta) => console.log('Caption:', text, meta?.latency),
|
|
180
169
|
onStatus: (status) => console.log('Event status:', status),
|
|
181
170
|
onViewerCount: (count) => console.log('Viewers:', count),
|
|
182
171
|
onError: (err) => console.error('Error:', err.message),
|
|
@@ -190,6 +179,12 @@ client.unsubscribe();
|
|
|
190
179
|
|
|
191
180
|
The captioner connection (`connect`/`disconnect`) and broadcast subscription (`subscribe`/`unsubscribe`) are fully independent and can run simultaneously.
|
|
192
181
|
|
|
182
|
+
### Standalone Functions
|
|
183
|
+
|
|
184
|
+
#### `checkEvent(apiUrl, eventId, fetchFn?)`
|
|
185
|
+
|
|
186
|
+
Public endpoint — no API key required. Returns `{ exists: boolean; joinable: boolean }`. Useful for validating an event ID before attempting a WebSocket connection. On network errors, returns `{ exists: false, joinable: false }`.
|
|
187
|
+
|
|
193
188
|
### Configuration
|
|
194
189
|
|
|
195
190
|
```ts
|
|
@@ -232,15 +227,33 @@ interface User { id: string; email: string; name: string | null }
|
|
|
232
227
|
interface Event { id: string; organizationId: string; title: string; description: string | null; scheduledStart: string; scheduledEnd: string | null; status: string; clientName: string | null }
|
|
233
228
|
interface CaptionAck { type: 'ack'; timestamp: number; seq: number }
|
|
234
229
|
interface ControlAck { type: 'ack'; action: string }
|
|
235
|
-
interface ServerError { type: 'error'; code:
|
|
230
|
+
interface ServerError { type: 'error'; code: ErrorCodeValue; message: string; details?: Record<string, unknown> }
|
|
236
231
|
interface SlotDetail { position?: number; activeSince?: string }
|
|
237
232
|
```
|
|
238
233
|
|
|
234
|
+
#### Utility types
|
|
235
|
+
|
|
236
|
+
```ts
|
|
237
|
+
type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting'
|
|
238
|
+
type SlotStatus = 'unknown' | 'active' | 'waiting'
|
|
239
|
+
type ControlActionValue = (typeof CONTROL_ACTION)[keyof typeof CONTROL_ACTION]
|
|
240
|
+
type ErrorCodeValue = (typeof ERROR_CODE)[keyof typeof ERROR_CODE]
|
|
241
|
+
interface EventCheckResult { exists: boolean; joinable: boolean }
|
|
242
|
+
```
|
|
243
|
+
|
|
239
244
|
#### Broadcast types
|
|
240
245
|
|
|
246
|
+
```ts
|
|
247
|
+
interface BroadcastCaptionMessage { type: 'caption'; eventId: string; seq: number; text: string; ts?: number; lineTs?: number[] }
|
|
248
|
+
interface BroadcastStatusMessage { type: 'status'; eventId: string; status: string; scheduledStart?: string }
|
|
249
|
+
interface BroadcastViewerCountMessage { type: 'viewers'; eventId: string; count: number }
|
|
250
|
+
interface BroadcastEventEndedMessage { type: 'event_ended'; eventId: string; message: string }
|
|
251
|
+
type BroadcastMessage = BroadcastCaptionMessage | BroadcastStatusMessage | BroadcastViewerCountMessage | BroadcastEventEndedMessage | ServerError
|
|
252
|
+
```
|
|
253
|
+
|
|
241
254
|
```ts
|
|
242
255
|
interface SubscribeConfig {
|
|
243
|
-
onCaption?: (text: string, seq: number) => void;
|
|
256
|
+
onCaption?: (text: string, seq: number, meta?: { ts?: number; lineTs?: number[]; latency?: number }) => void;
|
|
244
257
|
onStatus?: (status: string, detail?: { scheduledStart?: string }) => void;
|
|
245
258
|
onViewerCount?: (count: number) => void;
|
|
246
259
|
onError?: (error: ServerError) => void;
|
|
@@ -251,7 +264,7 @@ interface SubscribeConfig {
|
|
|
251
264
|
|
|
252
265
|
| Callback | When it fires |
|
|
253
266
|
| ---------------- | ------------------------------------------------------- |
|
|
254
|
-
| `onCaption` | New caption text received (full text state + seq)
|
|
267
|
+
| `onCaption` | New caption text received (full text state + seq + optional meta with `ts`, `lineTs`, `latency`) |
|
|
255
268
|
| `onStatus` | Event status changes (waiting/live/ended) |
|
|
256
269
|
| `onViewerCount` | Viewer count updates |
|
|
257
270
|
| `onError` | Server sends an error message |
|
|
@@ -261,10 +274,18 @@ interface SubscribeConfig {
|
|
|
261
274
|
### Constants
|
|
262
275
|
|
|
263
276
|
```ts
|
|
264
|
-
import { EVENT_STATUS, ERROR_CODE, RATE_LIMITS, CONNECTION_DEFAULTS } from '@caitdesk/client';
|
|
277
|
+
import { EVENT_STATUS, ERROR_CODE, RATE_LIMITS, CONNECTION_DEFAULTS, SESSION_ACTION, CONTROL_ACTION, WS_CLOSE_CODE } from '@caitdesk/client';
|
|
265
278
|
```
|
|
266
279
|
|
|
267
|
-
|
|
280
|
+
| Constant | Description |
|
|
281
|
+
|----------|-------------|
|
|
282
|
+
| `EVENT_STATUS` | Event status values (`DRAFT`, `SCHEDULED`, `LIVE`, `ENDED`, `ARCHIVED`, `CANCELLED`) |
|
|
283
|
+
| `ERROR_CODE` | Error codes from the API and gateway (auth, validation, WebSocket, rate limiting) |
|
|
284
|
+
| `RATE_LIMITS` | Gateway-enforced limits (max message rate, text lengths, timestamp drift) |
|
|
285
|
+
| `CONNECTION_DEFAULTS` | Reconnect timing (initial delay, max delay, multiplier, request timeout) |
|
|
286
|
+
| `SESSION_ACTION` | Slot management actions (`SLOT_GRANTED`, `SLOT_OCCUPIED`, `SLOT_REQUESTED`, `SLOT_REQUEST_CANCELLED`, `SLOT_RELEASE`) |
|
|
287
|
+
| `CONTROL_ACTION` | Event control actions (`START`, `STOP`, `PAUSE`, `RESUME`) |
|
|
288
|
+
| `WS_CLOSE_CODE` | WebSocket close codes with special meaning (`NORMAL`, `AUTH_FAILED`, `SLOT_FULL`) |
|
|
268
289
|
|
|
269
290
|
## API Key Scopes
|
|
270
291
|
|
package/dist/api.js
CHANGED
|
@@ -17,10 +17,10 @@ export async function checkEvent(apiUrl, eventId, fetchFn) {
|
|
|
17
17
|
return { exists: false, joinable: false };
|
|
18
18
|
}
|
|
19
19
|
const body = await response.json();
|
|
20
|
-
if (typeof body?.exists !== 'boolean' || typeof body?.joinable !== 'boolean') {
|
|
20
|
+
if (typeof body?.data?.exists !== 'boolean' || typeof body?.data?.joinable !== 'boolean') {
|
|
21
21
|
return { exists: false, joinable: false };
|
|
22
22
|
}
|
|
23
|
-
return { exists: body.exists, joinable: body.joinable };
|
|
23
|
+
return { exists: body.data.exists, joinable: body.data.joinable };
|
|
24
24
|
}
|
|
25
25
|
catch {
|
|
26
26
|
return { exists: false, joinable: false };
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,OAAe,EACf,OAAiC;IAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAE3F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,yBAAyB,OAAO,QAAQ,EAAE;YACxE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/broadcast-ws.d.ts
CHANGED
|
@@ -10,11 +10,14 @@ export declare class BroadcastWsClient {
|
|
|
10
10
|
private eventId;
|
|
11
11
|
private ticket;
|
|
12
12
|
private lastSeq;
|
|
13
|
+
private _latency;
|
|
14
|
+
private latencyStalenessTimer;
|
|
13
15
|
private pendingReplay;
|
|
14
16
|
private readonly config;
|
|
15
17
|
private readonly refreshTicket;
|
|
16
18
|
constructor(config: SubscribeConfig, refreshTicket: () => Promise<BroadcastTicket>);
|
|
17
19
|
get status(): ConnectionStatus;
|
|
20
|
+
get latency(): number | null;
|
|
18
21
|
connect(ticket: BroadcastTicket, eventId: string): void;
|
|
19
22
|
disconnect(): void;
|
|
20
23
|
private send;
|
|
@@ -25,6 +28,7 @@ export declare class BroadcastWsClient {
|
|
|
25
28
|
private clearReconnectTimer;
|
|
26
29
|
private startHeartbeat;
|
|
27
30
|
private stopHeartbeat;
|
|
31
|
+
private updateLatency;
|
|
28
32
|
private setStatus;
|
|
29
33
|
}
|
|
30
34
|
//# sourceMappingURL=broadcast-ws.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-ws.d.ts","sourceRoot":"","sources":["../src/broadcast-ws.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAGf,eAAe,EAChB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcast-ws.d.ts","sourceRoot":"","sources":["../src/broadcast-ws.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAGf,eAAe,EAChB,MAAM,SAAS,CAAC;AAWjB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;gBAEnD,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC;IAKlF,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQvD,UAAU,IAAI,IAAI;IAiBlB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,aAAa;IA2ErB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,SAAS;CAMlB"}
|
package/dist/broadcast-ws.js
CHANGED
|
@@ -4,7 +4,8 @@ const TERMINAL_CLOSE_CODES = new Set([
|
|
|
4
4
|
WS_CLOSE_CODE.AUTH_FAILED,
|
|
5
5
|
]);
|
|
6
6
|
/** Heartbeat interval in ms */
|
|
7
|
-
const HEARTBEAT_INTERVAL_MS =
|
|
7
|
+
const HEARTBEAT_INTERVAL_MS = 5_000;
|
|
8
|
+
const LATENCY_STALE_TIMEOUT_MS = 15_000;
|
|
8
9
|
export class BroadcastWsClient {
|
|
9
10
|
ws = null;
|
|
10
11
|
_status = 'disconnected';
|
|
@@ -16,6 +17,8 @@ export class BroadcastWsClient {
|
|
|
16
17
|
eventId = '';
|
|
17
18
|
ticket = '';
|
|
18
19
|
lastSeq = 0;
|
|
20
|
+
_latency = null;
|
|
21
|
+
latencyStalenessTimer = null;
|
|
19
22
|
pendingReplay = false;
|
|
20
23
|
config;
|
|
21
24
|
refreshTicket;
|
|
@@ -26,6 +29,9 @@ export class BroadcastWsClient {
|
|
|
26
29
|
get status() {
|
|
27
30
|
return this._status;
|
|
28
31
|
}
|
|
32
|
+
get latency() {
|
|
33
|
+
return this._latency;
|
|
34
|
+
}
|
|
29
35
|
connect(ticket, eventId) {
|
|
30
36
|
this.intentionalClose = false;
|
|
31
37
|
this.broadcastUrl = ticket.broadcastUrl;
|
|
@@ -41,6 +47,11 @@ export class BroadcastWsClient {
|
|
|
41
47
|
this.ws.close(1000);
|
|
42
48
|
this.ws = null;
|
|
43
49
|
}
|
|
50
|
+
if (this.latencyStalenessTimer != null) {
|
|
51
|
+
clearTimeout(this.latencyStalenessTimer);
|
|
52
|
+
this.latencyStalenessTimer = null;
|
|
53
|
+
}
|
|
54
|
+
this._latency = null;
|
|
44
55
|
this.setStatus('disconnected');
|
|
45
56
|
}
|
|
46
57
|
// -----------------------------------------------------------------------
|
|
@@ -91,7 +102,21 @@ export class BroadcastWsClient {
|
|
|
91
102
|
case 'caption': {
|
|
92
103
|
const caption = msg;
|
|
93
104
|
this.lastSeq = caption.seq;
|
|
94
|
-
|
|
105
|
+
let meta;
|
|
106
|
+
if (caption.ts != null || caption.lineTs != null) {
|
|
107
|
+
meta = {};
|
|
108
|
+
if (caption.ts != null) {
|
|
109
|
+
meta.ts = caption.ts;
|
|
110
|
+
const raw = Date.now() - caption.ts;
|
|
111
|
+
if (raw >= 0) {
|
|
112
|
+
meta.latency = raw;
|
|
113
|
+
this.updateLatency(raw);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (caption.lineTs != null)
|
|
117
|
+
meta.lineTs = caption.lineTs;
|
|
118
|
+
}
|
|
119
|
+
this.config.onCaption?.(caption.text, caption.seq, meta);
|
|
95
120
|
break;
|
|
96
121
|
}
|
|
97
122
|
case 'status': {
|
|
@@ -117,9 +142,13 @@ export class BroadcastWsClient {
|
|
|
117
142
|
this.intentionalClose = true;
|
|
118
143
|
break;
|
|
119
144
|
}
|
|
120
|
-
case 'pong':
|
|
145
|
+
case 'pong': {
|
|
146
|
+
const pong = msg;
|
|
147
|
+
if (pong.timestamp != null)
|
|
148
|
+
this.updateLatency(Date.now() - pong.timestamp);
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
121
151
|
case 'replay_complete':
|
|
122
|
-
// No-op: acknowledged by server
|
|
123
152
|
break;
|
|
124
153
|
}
|
|
125
154
|
}
|
|
@@ -164,7 +193,7 @@ export class BroadcastWsClient {
|
|
|
164
193
|
startHeartbeat() {
|
|
165
194
|
this.stopHeartbeat();
|
|
166
195
|
this.heartbeatTimer = setInterval(() => {
|
|
167
|
-
this.send({ type: 'ping' });
|
|
196
|
+
this.send({ type: 'ping', timestamp: Date.now() });
|
|
168
197
|
}, HEARTBEAT_INTERVAL_MS);
|
|
169
198
|
}
|
|
170
199
|
stopHeartbeat() {
|
|
@@ -172,6 +201,18 @@ export class BroadcastWsClient {
|
|
|
172
201
|
clearInterval(this.heartbeatTimer);
|
|
173
202
|
this.heartbeatTimer = null;
|
|
174
203
|
}
|
|
204
|
+
if (this.latencyStalenessTimer != null) {
|
|
205
|
+
clearTimeout(this.latencyStalenessTimer);
|
|
206
|
+
this.latencyStalenessTimer = null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
updateLatency(rtt) {
|
|
210
|
+
if (!(rtt >= 0))
|
|
211
|
+
return;
|
|
212
|
+
this._latency = this._latency === null ? rtt : Math.round(this._latency * 0.7 + rtt * 0.3);
|
|
213
|
+
if (this.latencyStalenessTimer)
|
|
214
|
+
clearTimeout(this.latencyStalenessTimer);
|
|
215
|
+
this.latencyStalenessTimer = setTimeout(() => { this._latency = null; }, LATENCY_STALE_TIMEOUT_MS);
|
|
175
216
|
}
|
|
176
217
|
setStatus(status) {
|
|
177
218
|
if (this._status !== status) {
|
package/dist/broadcast-ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast-ws.js","sourceRoot":"","sources":["../src/broadcast-ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS7E,uDAAuD;AACvD,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IACxD,aAAa,CAAC,WAAW;CAC1B,CAAC,CAAC;AAEH,+BAA+B;AAC/B,MAAM,qBAAqB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"broadcast-ws.js","sourceRoot":"","sources":["../src/broadcast-ws.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -127,7 +127,11 @@ export interface SlotRequestCancelledMessage {
|
|
|
127
127
|
waitingCount: number;
|
|
128
128
|
}
|
|
129
129
|
export type SessionMessage = SlotGrantedMessage | SlotOccupiedMessage | SlotRequestedMessage | SlotRequestCancelledMessage;
|
|
130
|
-
export
|
|
130
|
+
export interface PongMessage {
|
|
131
|
+
type: 'pong';
|
|
132
|
+
timestamp: number;
|
|
133
|
+
}
|
|
134
|
+
export type IncomingMessage = ConnectedMessage | CaptionAck | ControlAck | ServerError | EventEndedMessage | SessionMessage | PongMessage;
|
|
131
135
|
export type ControlActionValue = (typeof CONTROL_ACTION)[keyof typeof CONTROL_ACTION];
|
|
132
136
|
export type ErrorCodeValue = (typeof ERROR_CODE)[keyof typeof ERROR_CODE];
|
|
133
137
|
/** Response from the broadcast ticket API endpoint */
|
|
@@ -142,6 +146,8 @@ export interface BroadcastCaptionMessage {
|
|
|
142
146
|
eventId: string;
|
|
143
147
|
seq: number;
|
|
144
148
|
text: string;
|
|
149
|
+
ts?: number;
|
|
150
|
+
lineTs?: number[];
|
|
145
151
|
}
|
|
146
152
|
/** Event status message from broadcast service */
|
|
147
153
|
export interface BroadcastStatusMessage {
|
|
@@ -166,7 +172,11 @@ export interface BroadcastEventEndedMessage {
|
|
|
166
172
|
export type BroadcastMessage = BroadcastCaptionMessage | BroadcastStatusMessage | BroadcastViewerCountMessage | BroadcastEventEndedMessage | ServerError;
|
|
167
173
|
/** Callback configuration for broadcast subscription */
|
|
168
174
|
export interface SubscribeConfig {
|
|
169
|
-
onCaption?: (text: string, seq: number
|
|
175
|
+
onCaption?: (text: string, seq: number, meta?: {
|
|
176
|
+
ts?: number;
|
|
177
|
+
lineTs?: number[];
|
|
178
|
+
latency?: number;
|
|
179
|
+
}) => void;
|
|
170
180
|
onStatus?: (status: string, detail?: {
|
|
171
181
|
scheduledStart?: string;
|
|
172
182
|
}) => void;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/ws.d.ts
CHANGED
|
@@ -19,10 +19,14 @@ export declare class WsClient {
|
|
|
19
19
|
private intentionalClose;
|
|
20
20
|
private gatewayUrl;
|
|
21
21
|
private ticket;
|
|
22
|
+
private _latency;
|
|
23
|
+
private latencyPingTimer;
|
|
24
|
+
private latencyStalenessTimer;
|
|
22
25
|
private readonly cb;
|
|
23
26
|
constructor(callbacks: WsClientCallbacks);
|
|
24
27
|
get status(): ConnectionStatus;
|
|
25
28
|
get slotStatus(): SlotStatus;
|
|
29
|
+
get latency(): number | null;
|
|
26
30
|
connect(ticket: Ticket): void;
|
|
27
31
|
disconnect(): void;
|
|
28
32
|
send(message: object): void;
|
|
@@ -33,6 +37,9 @@ export declare class WsClient {
|
|
|
33
37
|
private handleClose;
|
|
34
38
|
private scheduleReconnect;
|
|
35
39
|
private clearReconnectTimer;
|
|
40
|
+
private updateLatency;
|
|
41
|
+
private startLatencyPing;
|
|
42
|
+
private stopLatencyPing;
|
|
36
43
|
private setStatus;
|
|
37
44
|
private setSlotStatus;
|
|
38
45
|
}
|
package/dist/ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EAEV,UAAU,EACV,UAAU,EACV,WAAW,EAEX,MAAM,EACP,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EAEV,UAAU,EACV,UAAU,EACV,WAAW,EAEX,MAAM,EACP,MAAM,SAAS,CAAC;AAiBjB,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACnD,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,cAAc,CAAkD;IACxE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,gBAAgB,CAA+C;IACvE,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;gBAE3B,SAAS,EAAE,iBAAiB;IAIxC,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO7B,UAAU,IAAI,IAAI;IAalB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,WAAW,IAAI,IAAI;IASnB,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,aAAa;CAStB"}
|
package/dist/ws.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { SESSION_ACTION, ERROR_CODE, CONNECTION_DEFAULTS, WS_CLOSE_CODE } from './constants';
|
|
2
|
+
const LATENCY_PING_INTERVAL_MS = 5_000;
|
|
3
|
+
const LATENCY_STALE_TIMEOUT_MS = 15_000;
|
|
2
4
|
/** Terminal error codes that should not trigger reconnection */
|
|
3
5
|
const TERMINAL_CODES = new Set([
|
|
4
6
|
ERROR_CODE.WS_AUTH_FAILED,
|
|
@@ -19,6 +21,9 @@ export class WsClient {
|
|
|
19
21
|
intentionalClose = false;
|
|
20
22
|
gatewayUrl = '';
|
|
21
23
|
ticket = '';
|
|
24
|
+
_latency = null;
|
|
25
|
+
latencyPingTimer = null;
|
|
26
|
+
latencyStalenessTimer = null;
|
|
22
27
|
cb;
|
|
23
28
|
constructor(callbacks) {
|
|
24
29
|
this.cb = callbacks;
|
|
@@ -29,6 +34,9 @@ export class WsClient {
|
|
|
29
34
|
get slotStatus() {
|
|
30
35
|
return this._slotStatus;
|
|
31
36
|
}
|
|
37
|
+
get latency() {
|
|
38
|
+
return this._latency;
|
|
39
|
+
}
|
|
32
40
|
connect(ticket) {
|
|
33
41
|
this.intentionalClose = false;
|
|
34
42
|
this.gatewayUrl = ticket.gatewayUrl;
|
|
@@ -38,10 +46,12 @@ export class WsClient {
|
|
|
38
46
|
disconnect() {
|
|
39
47
|
this.intentionalClose = true;
|
|
40
48
|
this.clearReconnectTimer();
|
|
49
|
+
this.stopLatencyPing();
|
|
41
50
|
if (this.ws) {
|
|
42
51
|
this.ws.close(1000);
|
|
43
52
|
this.ws = null;
|
|
44
53
|
}
|
|
54
|
+
this._latency = null;
|
|
45
55
|
this.setStatus('disconnected');
|
|
46
56
|
this.setSlotStatus('unknown');
|
|
47
57
|
}
|
|
@@ -66,6 +76,7 @@ export class WsClient {
|
|
|
66
76
|
this.ws.onopen = () => {
|
|
67
77
|
this.reconnectDelay = CONNECTION_DEFAULTS.RECONNECT_DELAY_MS;
|
|
68
78
|
this.setStatus('connected');
|
|
79
|
+
this.startLatencyPing();
|
|
69
80
|
};
|
|
70
81
|
this.ws.onmessage = (event) => {
|
|
71
82
|
this.handleMessage(event.data);
|
|
@@ -94,12 +105,17 @@ export class WsClient {
|
|
|
94
105
|
break;
|
|
95
106
|
case 'ack':
|
|
96
107
|
if ('seq' in msg) {
|
|
97
|
-
|
|
108
|
+
const ack = msg;
|
|
109
|
+
this.updateLatency(Date.now() - ack.timestamp);
|
|
110
|
+
this.cb.onCaptionAck(ack);
|
|
98
111
|
}
|
|
99
112
|
else if ('action' in msg) {
|
|
100
113
|
this.cb.onControlAck(msg);
|
|
101
114
|
}
|
|
102
115
|
break;
|
|
116
|
+
case 'pong':
|
|
117
|
+
this.updateLatency(Date.now() - msg.timestamp);
|
|
118
|
+
break;
|
|
103
119
|
case 'error':
|
|
104
120
|
this.cb.onError(msg);
|
|
105
121
|
if (TERMINAL_CODES.has(msg.code)) {
|
|
@@ -131,6 +147,7 @@ export class WsClient {
|
|
|
131
147
|
}
|
|
132
148
|
handleClose(event) {
|
|
133
149
|
this.ws = null;
|
|
150
|
+
this.stopLatencyPing();
|
|
134
151
|
if (this.intentionalClose || TERMINAL_CLOSE_CODES.has(event.code)) {
|
|
135
152
|
this.setStatus('disconnected');
|
|
136
153
|
this.setSlotStatus('unknown');
|
|
@@ -166,6 +183,30 @@ export class WsClient {
|
|
|
166
183
|
this.reconnectTimer = null;
|
|
167
184
|
}
|
|
168
185
|
}
|
|
186
|
+
updateLatency(rtt) {
|
|
187
|
+
if (!(rtt >= 0))
|
|
188
|
+
return;
|
|
189
|
+
this._latency = this._latency === null ? rtt : Math.round(this._latency * 0.7 + rtt * 0.3);
|
|
190
|
+
if (this.latencyStalenessTimer)
|
|
191
|
+
clearTimeout(this.latencyStalenessTimer);
|
|
192
|
+
this.latencyStalenessTimer = setTimeout(() => { this._latency = null; }, LATENCY_STALE_TIMEOUT_MS);
|
|
193
|
+
}
|
|
194
|
+
startLatencyPing() {
|
|
195
|
+
this.stopLatencyPing();
|
|
196
|
+
this.latencyPingTimer = setInterval(() => {
|
|
197
|
+
this.send({ type: 'ping', timestamp: Date.now() });
|
|
198
|
+
}, LATENCY_PING_INTERVAL_MS);
|
|
199
|
+
}
|
|
200
|
+
stopLatencyPing() {
|
|
201
|
+
if (this.latencyPingTimer != null) {
|
|
202
|
+
clearInterval(this.latencyPingTimer);
|
|
203
|
+
this.latencyPingTimer = null;
|
|
204
|
+
}
|
|
205
|
+
if (this.latencyStalenessTimer != null) {
|
|
206
|
+
clearTimeout(this.latencyStalenessTimer);
|
|
207
|
+
this.latencyStalenessTimer = null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
169
210
|
setStatus(status) {
|
|
170
211
|
if (this._status !== status) {
|
|
171
212
|
this._status = status;
|
package/dist/ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAa7F,gEAAgE;AAChE,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,UAAU,CAAC,cAAc;IACzB,UAAU,CAAC,YAAY;CACxB,CAAC,CAAC;AAEH,uDAAuD;AACvD,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IACxD,aAAa,CAAC,WAAW;IACzB,aAAa,CAAC,SAAS;CACxB,CAAC,CAAC;AAaH,MAAM,OAAO,QAAQ;IACX,EAAE,GAAqB,IAAI,CAAC;IAC5B,OAAO,GAAqB,cAAc,CAAC;IAC3C,WAAW,GAAe,SAAS,CAAC;IACpC,WAAW,CAAyB;IACpC,cAAc,GAAW,mBAAmB,CAAC,kBAAkB,CAAC;IAChE,cAAc,GAAyC,IAAI,CAAC;IAC5D,gBAAgB,GAAG,KAAK,CAAC;IACzB,UAAU,GAAG,EAAE,CAAC;IAChB,MAAM,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caitdesk/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Official TypeScript client for the CaitDesk captioner API",
|
|
6
6
|
"exports": {
|
|
@@ -26,5 +26,22 @@
|
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"typescript": "^5.7.2"
|
|
29
|
-
}
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"license": "Proprietary",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/caitdesk/caitdesk",
|
|
37
|
+
"directory": "packages/caitdesk-client"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"caitdesk",
|
|
41
|
+
"captions",
|
|
42
|
+
"captioner",
|
|
43
|
+
"client",
|
|
44
|
+
"websocket",
|
|
45
|
+
"real-time"
|
|
46
|
+
]
|
|
30
47
|
}
|