@caitdesk/client 0.3.3 → 0.4.0
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 +100 -16
- package/dist/api.d.ts +2 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +3 -0
- package/dist/api.js.map +1 -1
- package/dist/broadcast-ws.d.ts +30 -0
- package/dist/broadcast-ws.d.ts.map +1 -0
- package/dist/broadcast-ws.js +183 -0
- package/dist/broadcast-ws.js.map +1 -0
- package/dist/client.d.ts +8 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +21 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +45 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @caitdesk/client
|
|
2
2
|
|
|
3
|
-
Official TypeScript client for the CaitDesk
|
|
3
|
+
Official TypeScript client for the CaitDesk API. Provides typed REST and WebSocket interfaces for third-party captioning and broadcast viewing applications.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -10,12 +10,14 @@ npm install @caitdesk/client
|
|
|
10
10
|
|
|
11
11
|
## Quick Start
|
|
12
12
|
|
|
13
|
+
### Captioner (sending captions)
|
|
14
|
+
|
|
13
15
|
```ts
|
|
14
16
|
import { CaitDeskClient } from '@caitdesk/client';
|
|
15
17
|
|
|
16
18
|
const client = new CaitDeskClient({
|
|
17
19
|
apiUrl: 'https://api.caitdesk.com',
|
|
18
|
-
apiKey: 'cait_sk_...',
|
|
20
|
+
apiKey: 'cait_sk_...', // needs captioner:stream + captioner:events scopes
|
|
19
21
|
onStatusChange: (status) => console.log('Connection:', status),
|
|
20
22
|
onSlotChange: (status) => console.log('Slot:', status),
|
|
21
23
|
onCaptionAck: (ack) => console.log('Ack seq:', ack.seq),
|
|
@@ -33,16 +35,34 @@ await client.connect(events[0].id);
|
|
|
33
35
|
client.append('Hello, world!');
|
|
34
36
|
client.append(' More text.');
|
|
35
37
|
|
|
36
|
-
// Control the event
|
|
37
|
-
client.start(); // Start the event
|
|
38
|
-
client.pause(); // Pause captions
|
|
39
|
-
client.resume(); // Resume captions
|
|
40
|
-
client.stop(); // End the event
|
|
41
|
-
|
|
42
38
|
// Disconnect when done
|
|
43
39
|
client.disconnect();
|
|
44
40
|
```
|
|
45
41
|
|
|
42
|
+
### Viewer (receiving captions)
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { CaitDeskClient } from '@caitdesk/client';
|
|
46
|
+
|
|
47
|
+
const client = new CaitDeskClient({
|
|
48
|
+
apiUrl: 'https://api.caitdesk.com',
|
|
49
|
+
apiKey: 'cait_sk_...', // needs broadcast:view scope
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Subscribe to an event's broadcast
|
|
53
|
+
await client.subscribe('event-id', {
|
|
54
|
+
onCaption: (text, seq) => console.log('Caption:', text),
|
|
55
|
+
onStatus: (status) => console.log('Event status:', status),
|
|
56
|
+
onViewerCount: (count) => console.log('Viewers:', count),
|
|
57
|
+
onError: (err) => console.error('Error:', err.message),
|
|
58
|
+
onEventEnded: (id) => console.log('Event ended:', id),
|
|
59
|
+
onStatusChange: (status) => console.log('Connection:', status),
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Later: disconnect
|
|
63
|
+
client.unsubscribe();
|
|
64
|
+
```
|
|
65
|
+
|
|
46
66
|
### Custom Fetch (Tauri, etc.)
|
|
47
67
|
|
|
48
68
|
```ts
|
|
@@ -68,10 +88,11 @@ new CaitDeskClient(config: CaitDeskConfig)
|
|
|
68
88
|
|
|
69
89
|
#### Properties
|
|
70
90
|
|
|
71
|
-
| Property
|
|
72
|
-
|
|
|
73
|
-
| `status`
|
|
74
|
-
| `slotStatus`
|
|
91
|
+
| Property | Type | Description |
|
|
92
|
+
| ----------------- | ------------------ | ---------------------------------------------- |
|
|
93
|
+
| `status` | `ConnectionStatus` | Current captioner WebSocket connection status |
|
|
94
|
+
| `slotStatus` | `SlotStatus` | Current slot status (active or waiting) |
|
|
95
|
+
| `broadcastStatus` | `ConnectionStatus` | Current broadcast WebSocket connection status |
|
|
75
96
|
|
|
76
97
|
#### REST Methods
|
|
77
98
|
|
|
@@ -123,6 +144,31 @@ These methods require an active WebSocket connection (call `connect()` first). F
|
|
|
123
144
|
client.releaseSlot(): void // Yield active slot to next waiting captioner
|
|
124
145
|
```
|
|
125
146
|
|
|
147
|
+
#### Broadcast Subscription (Viewer)
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
client.subscribe(eventId: string, config: SubscribeConfig): Promise<void>
|
|
151
|
+
client.unsubscribe(): void
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`subscribe()` fetches a broadcast ticket and opens a WebSocket connection to receive captions in real-time. Requires the `broadcast:view` API key scope.
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
await client.subscribe(eventId, {
|
|
158
|
+
onCaption: (text, seq) => console.log('Caption:', text),
|
|
159
|
+
onStatus: (status) => console.log('Event status:', status),
|
|
160
|
+
onViewerCount: (count) => console.log('Viewers:', count),
|
|
161
|
+
onError: (err) => console.error('Error:', err.message),
|
|
162
|
+
onEventEnded: (id) => console.log('Event ended:', id),
|
|
163
|
+
onStatusChange: (status) => console.log('Connection:', status),
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// Later: disconnect from broadcast
|
|
167
|
+
client.unsubscribe();
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The captioner connection (`connect`/`disconnect`) and broadcast subscription (`subscribe`/`unsubscribe`) are fully independent and can run simultaneously.
|
|
171
|
+
|
|
126
172
|
### Configuration
|
|
127
173
|
|
|
128
174
|
```ts
|
|
@@ -158,6 +204,8 @@ interface CaitDeskConfig {
|
|
|
158
204
|
|
|
159
205
|
### Types
|
|
160
206
|
|
|
207
|
+
#### Captioner types
|
|
208
|
+
|
|
161
209
|
```ts
|
|
162
210
|
interface User { id: string; email: string; name: string | null }
|
|
163
211
|
interface Event { id: string; organizationId: string; title: string; description: string | null; scheduledStart: string; scheduledEnd: string | null; status: string; clientName: string | null }
|
|
@@ -167,6 +215,28 @@ interface ServerError { type: 'error'; code: string; message: string; details?:
|
|
|
167
215
|
interface SlotDetail { position?: number; activeSince?: string }
|
|
168
216
|
```
|
|
169
217
|
|
|
218
|
+
#### Broadcast types
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
interface SubscribeConfig {
|
|
222
|
+
onCaption?: (text: string, seq: number) => void;
|
|
223
|
+
onStatus?: (status: string, detail?: { scheduledStart?: string }) => void;
|
|
224
|
+
onViewerCount?: (count: number) => void;
|
|
225
|
+
onError?: (error: ServerError) => void;
|
|
226
|
+
onEventEnded?: (eventId: string) => void;
|
|
227
|
+
onStatusChange?: (status: ConnectionStatus) => void;
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
| Callback | When it fires |
|
|
232
|
+
| ---------------- | ------------------------------------------------------- |
|
|
233
|
+
| `onCaption` | New caption text received (full text state + seq) |
|
|
234
|
+
| `onStatus` | Event status changes (waiting/live/ended) |
|
|
235
|
+
| `onViewerCount` | Viewer count updates |
|
|
236
|
+
| `onError` | Server sends an error message |
|
|
237
|
+
| `onEventEnded` | The event has ended (server-initiated, closes connection) |
|
|
238
|
+
| `onStatusChange` | Broadcast WebSocket connection state changes |
|
|
239
|
+
|
|
170
240
|
### Constants
|
|
171
241
|
|
|
172
242
|
```ts
|
|
@@ -175,6 +245,19 @@ import { EVENT_STATUS, ERROR_CODE, RATE_LIMITS, CONNECTION_DEFAULTS } from '@cai
|
|
|
175
245
|
|
|
176
246
|
- `EVENT_STATUS` — event status values (`DRAFT`, `SCHEDULED`, `LIVE`, `ENDED`, `ARCHIVED`, `CANCELLED`)
|
|
177
247
|
|
|
248
|
+
## API Key Scopes
|
|
249
|
+
|
|
250
|
+
Your API key must have the appropriate scopes for the methods you use:
|
|
251
|
+
|
|
252
|
+
| Scope | Required for |
|
|
253
|
+
| -------------------- | ------------------------------------------------------ |
|
|
254
|
+
| `captioner:events` | `getEvents()` |
|
|
255
|
+
| `captioner:stream` | `connect()` (fetches stream ticket) |
|
|
256
|
+
| `captioner:control` | `startEvent()`, `stopEvent()` |
|
|
257
|
+
| `broadcast:view` | `subscribe()` (fetches broadcast ticket) |
|
|
258
|
+
|
|
259
|
+
`getMe()` requires any valid API key (no specific scope).
|
|
260
|
+
|
|
178
261
|
## Error Handling
|
|
179
262
|
|
|
180
263
|
Errors are delivered via the `onError` callback. Some errors are terminal:
|
|
@@ -192,17 +275,18 @@ Terminal errors close the connection without reconnection.
|
|
|
192
275
|
|
|
193
276
|
## Reconnection
|
|
194
277
|
|
|
195
|
-
|
|
278
|
+
Both captioner and broadcast connections reconnect automatically on unexpected disconnects using exponential backoff (1s initial, 30s max, 1.5x multiplier). During reconnection:
|
|
196
279
|
|
|
197
280
|
1. A fresh ticket is fetched via the REST API
|
|
198
281
|
2. A new WebSocket connection is established
|
|
199
|
-
3. The slot system restores your position (same user ID = seamless takeover)
|
|
282
|
+
3. **Captioner**: The slot system restores your position (same user ID = seamless takeover)
|
|
283
|
+
4. **Broadcast**: Missed captions are replayed from the last received sequence number
|
|
200
284
|
|
|
201
285
|
The client does **not** reconnect when:
|
|
202
|
-
- You call `disconnect()`
|
|
286
|
+
- You call `disconnect()` / `unsubscribe()`
|
|
203
287
|
- The event ends (`event_ended` message)
|
|
204
288
|
- Authentication fails (close code `1008`)
|
|
205
|
-
- The slot queue is full (close code `1013
|
|
289
|
+
- The slot queue is full (close code `1013`, captioner only)
|
|
206
290
|
|
|
207
291
|
## Slot System
|
|
208
292
|
|
package/dist/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { User, Event, Ticket } from './types';
|
|
1
|
+
import type { User, Event, Ticket, BroadcastTicket } from './types';
|
|
2
2
|
export declare class ApiClient {
|
|
3
3
|
private readonly baseUrl;
|
|
4
4
|
private readonly apiKey;
|
|
@@ -14,6 +14,7 @@ export declare class ApiClient {
|
|
|
14
14
|
stopEvent(eventId: string): Promise<{
|
|
15
15
|
success: boolean;
|
|
16
16
|
}>;
|
|
17
|
+
getBroadcastTicket(eventId: string): Promise<BroadcastTicket>;
|
|
17
18
|
private request;
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAapE,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK;IAOxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAI7B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAI1D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAIzD,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAIrD,OAAO;CA+BtB"}
|
package/dist/api.js
CHANGED
|
@@ -25,6 +25,9 @@ export class ApiClient {
|
|
|
25
25
|
async stopEvent(eventId) {
|
|
26
26
|
return this.request('POST', `/api/v1/me/events/${eventId}/stop`);
|
|
27
27
|
}
|
|
28
|
+
async getBroadcastTicket(eventId) {
|
|
29
|
+
return this.request('POST', `/api/v1/me/events/${eventId}/broadcast/ticket`);
|
|
30
|
+
}
|
|
28
31
|
async request(method, path) {
|
|
29
32
|
const controller = new AbortController();
|
|
30
33
|
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
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;AAclD,MAAM,OAAO,SAAS;IACH,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,KAAK,CAA0B;IAEhD,YAAY,OAAe,EAAE,MAAc,EAAE,OAAiC;QAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAO,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,OAAO,CAAU,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAS,MAAM,EAAE,qBAAqB,OAAO,gBAAgB,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAuB,MAAM,EAAE,qBAAqB,OAAO,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAuB,MAAM,EAAE,qBAAqB,OAAO,OAAO,CAAC,CAAC;IACzF,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY;QACnD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBAC1D,MAAM;gBACN,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6C,CAAC;YAEjF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAwB,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,OAAQ,IAA8B,CAAC,IAAI,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAclD,MAAM,OAAO,SAAS;IACH,OAAO,CAAS;IAChB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,KAAK,CAA0B;IAEhD,YAAY,OAAe,EAAE,MAAc,EAAE,OAAiC;QAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,kBAAkB,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,OAAO,CAAO,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,OAAO,CAAU,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAS,MAAM,EAAE,qBAAqB,OAAO,gBAAgB,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAuB,MAAM,EAAE,qBAAqB,OAAO,QAAQ,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAuB,MAAM,EAAE,qBAAqB,OAAO,OAAO,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,OAAO,IAAI,CAAC,OAAO,CAAkB,MAAM,EAAE,qBAAqB,OAAO,mBAAmB,CAAC,CAAC;IAChG,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY;QACnD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBAC1D,MAAM;gBACN,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACtC,cAAc,EAAE,kBAAkB;iBACnC;gBACD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6C,CAAC;YAEjF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,IAAwB,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,OAAQ,IAA8B,CAAC,IAAI,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ConnectionStatus, BroadcastTicket, SubscribeConfig } from './types';
|
|
2
|
+
export declare class BroadcastWsClient {
|
|
3
|
+
private ws;
|
|
4
|
+
private _status;
|
|
5
|
+
private reconnectDelay;
|
|
6
|
+
private reconnectTimer;
|
|
7
|
+
private heartbeatTimer;
|
|
8
|
+
private intentionalClose;
|
|
9
|
+
private broadcastUrl;
|
|
10
|
+
private eventId;
|
|
11
|
+
private ticket;
|
|
12
|
+
private lastSeq;
|
|
13
|
+
private pendingReplay;
|
|
14
|
+
private readonly config;
|
|
15
|
+
private readonly refreshTicket;
|
|
16
|
+
constructor(config: SubscribeConfig, refreshTicket: () => Promise<BroadcastTicket>);
|
|
17
|
+
get status(): ConnectionStatus;
|
|
18
|
+
connect(ticket: BroadcastTicket, eventId: string): void;
|
|
19
|
+
disconnect(): void;
|
|
20
|
+
private send;
|
|
21
|
+
private openSocket;
|
|
22
|
+
private handleMessage;
|
|
23
|
+
private handleClose;
|
|
24
|
+
private scheduleReconnect;
|
|
25
|
+
private clearReconnectTimer;
|
|
26
|
+
private startHeartbeat;
|
|
27
|
+
private stopHeartbeat;
|
|
28
|
+
private setStatus;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=broadcast-ws.d.ts.map
|
|
@@ -0,0 +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;AAUjB,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,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,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQvD,UAAU,IAAI,IAAI;IAelB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,aAAa;IA0DrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { ERROR_CODE, CONNECTION_DEFAULTS, WS_CLOSE_CODE } from './constants';
|
|
2
|
+
/** Close codes that should not trigger reconnection */
|
|
3
|
+
const TERMINAL_CLOSE_CODES = new Set([
|
|
4
|
+
WS_CLOSE_CODE.AUTH_FAILED,
|
|
5
|
+
]);
|
|
6
|
+
/** Heartbeat interval in ms */
|
|
7
|
+
const HEARTBEAT_INTERVAL_MS = 30_000;
|
|
8
|
+
export class BroadcastWsClient {
|
|
9
|
+
ws = null;
|
|
10
|
+
_status = 'disconnected';
|
|
11
|
+
reconnectDelay = CONNECTION_DEFAULTS.RECONNECT_DELAY_MS;
|
|
12
|
+
reconnectTimer = null;
|
|
13
|
+
heartbeatTimer = null;
|
|
14
|
+
intentionalClose = false;
|
|
15
|
+
broadcastUrl = '';
|
|
16
|
+
eventId = '';
|
|
17
|
+
ticket = '';
|
|
18
|
+
lastSeq = 0;
|
|
19
|
+
pendingReplay = false;
|
|
20
|
+
config;
|
|
21
|
+
refreshTicket;
|
|
22
|
+
constructor(config, refreshTicket) {
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.refreshTicket = refreshTicket;
|
|
25
|
+
}
|
|
26
|
+
get status() {
|
|
27
|
+
return this._status;
|
|
28
|
+
}
|
|
29
|
+
connect(ticket, eventId) {
|
|
30
|
+
this.intentionalClose = false;
|
|
31
|
+
this.broadcastUrl = ticket.broadcastUrl;
|
|
32
|
+
this.ticket = ticket.ticket;
|
|
33
|
+
this.eventId = eventId;
|
|
34
|
+
this.openSocket();
|
|
35
|
+
}
|
|
36
|
+
disconnect() {
|
|
37
|
+
this.intentionalClose = true;
|
|
38
|
+
this.clearReconnectTimer();
|
|
39
|
+
this.stopHeartbeat();
|
|
40
|
+
if (this.ws) {
|
|
41
|
+
this.ws.close(1000);
|
|
42
|
+
this.ws = null;
|
|
43
|
+
}
|
|
44
|
+
this.setStatus('disconnected');
|
|
45
|
+
}
|
|
46
|
+
// -----------------------------------------------------------------------
|
|
47
|
+
// Private
|
|
48
|
+
// -----------------------------------------------------------------------
|
|
49
|
+
send(message) {
|
|
50
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
51
|
+
this.ws.send(JSON.stringify(message));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
openSocket() {
|
|
55
|
+
this.setStatus('connecting');
|
|
56
|
+
const base = this.broadcastUrl.replace(/\/+$/, '');
|
|
57
|
+
const url = new URL(`${base}/ws/${this.eventId}`);
|
|
58
|
+
url.searchParams.set('ticket', this.ticket);
|
|
59
|
+
this.ws = new WebSocket(url.toString());
|
|
60
|
+
this.ws.onopen = () => {
|
|
61
|
+
this.reconnectDelay = CONNECTION_DEFAULTS.RECONNECT_DELAY_MS;
|
|
62
|
+
this.setStatus('connected');
|
|
63
|
+
this.startHeartbeat();
|
|
64
|
+
};
|
|
65
|
+
this.ws.onmessage = (event) => {
|
|
66
|
+
this.handleMessage(event.data);
|
|
67
|
+
};
|
|
68
|
+
this.ws.onclose = (event) => {
|
|
69
|
+
this.handleClose(event);
|
|
70
|
+
};
|
|
71
|
+
this.ws.onerror = () => {
|
|
72
|
+
// The close event fires after error, which handles reconnection
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
handleMessage(data) {
|
|
76
|
+
let msg;
|
|
77
|
+
try {
|
|
78
|
+
msg = JSON.parse(data);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
switch (msg.type) {
|
|
84
|
+
case 'connected':
|
|
85
|
+
// Connection confirmed — request replay if reconnecting with missed captions
|
|
86
|
+
if (this.pendingReplay && this.lastSeq > 0) {
|
|
87
|
+
this.pendingReplay = false;
|
|
88
|
+
this.send({ type: 'reconnect', eventId: this.eventId, lastSeq: this.lastSeq });
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 'caption': {
|
|
92
|
+
const caption = msg;
|
|
93
|
+
this.lastSeq = caption.seq;
|
|
94
|
+
this.config.onCaption?.(caption.text, caption.seq);
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
case 'status': {
|
|
98
|
+
const status = msg;
|
|
99
|
+
const detail = status.scheduledStart ? { scheduledStart: status.scheduledStart } : undefined;
|
|
100
|
+
this.config.onStatus?.(status.status, detail);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case 'viewers': {
|
|
104
|
+
const viewers = msg;
|
|
105
|
+
this.config.onViewerCount?.(viewers.count);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'error':
|
|
109
|
+
this.config.onError?.(msg);
|
|
110
|
+
if (msg.code === ERROR_CODE.WS_AUTH_FAILED) {
|
|
111
|
+
this.intentionalClose = true;
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
case 'event_ended': {
|
|
115
|
+
const ended = msg;
|
|
116
|
+
this.config.onEventEnded?.(ended.eventId);
|
|
117
|
+
this.intentionalClose = true;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case 'pong':
|
|
121
|
+
case 'replay_complete':
|
|
122
|
+
// No-op: acknowledged by server
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
handleClose(event) {
|
|
127
|
+
this.ws = null;
|
|
128
|
+
this.stopHeartbeat();
|
|
129
|
+
if (this.intentionalClose || TERMINAL_CLOSE_CODES.has(event.code)) {
|
|
130
|
+
this.setStatus('disconnected');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Attempt reconnection
|
|
134
|
+
this.setStatus('reconnecting');
|
|
135
|
+
this.scheduleReconnect();
|
|
136
|
+
}
|
|
137
|
+
scheduleReconnect() {
|
|
138
|
+
this.clearReconnectTimer();
|
|
139
|
+
this.reconnectTimer = setTimeout(async () => {
|
|
140
|
+
try {
|
|
141
|
+
const newTicket = await this.refreshTicket();
|
|
142
|
+
this.ticket = newTicket.ticket;
|
|
143
|
+
this.broadcastUrl = newTicket.broadcastUrl;
|
|
144
|
+
this.pendingReplay = this.lastSeq > 0;
|
|
145
|
+
this.openSocket();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
this.config.onError?.({
|
|
149
|
+
type: 'error',
|
|
150
|
+
code: ERROR_CODE.NETWORK_ERROR,
|
|
151
|
+
message: 'Failed to refresh broadcast ticket',
|
|
152
|
+
});
|
|
153
|
+
this.reconnectDelay = Math.min(this.reconnectDelay * CONNECTION_DEFAULTS.RECONNECT_MULTIPLIER, CONNECTION_DEFAULTS.RECONNECT_DELAY_MAX_MS);
|
|
154
|
+
this.scheduleReconnect();
|
|
155
|
+
}
|
|
156
|
+
}, this.reconnectDelay);
|
|
157
|
+
}
|
|
158
|
+
clearReconnectTimer() {
|
|
159
|
+
if (this.reconnectTimer != null) {
|
|
160
|
+
clearTimeout(this.reconnectTimer);
|
|
161
|
+
this.reconnectTimer = null;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
startHeartbeat() {
|
|
165
|
+
this.stopHeartbeat();
|
|
166
|
+
this.heartbeatTimer = setInterval(() => {
|
|
167
|
+
this.send({ type: 'ping' });
|
|
168
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
169
|
+
}
|
|
170
|
+
stopHeartbeat() {
|
|
171
|
+
if (this.heartbeatTimer != null) {
|
|
172
|
+
clearInterval(this.heartbeatTimer);
|
|
173
|
+
this.heartbeatTimer = null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
setStatus(status) {
|
|
177
|
+
if (this._status !== status) {
|
|
178
|
+
this._status = status;
|
|
179
|
+
this.config.onStatusChange?.(status);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=broadcast-ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast-ws.js","sourceRoot":"","sources":["../src/broadcast-ws.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import type { CaitDeskConfig, User, Event, ConnectionStatus, SlotStatus } from './types';
|
|
1
|
+
import type { CaitDeskConfig, User, Event, ConnectionStatus, SlotStatus, SubscribeConfig } from './types';
|
|
2
2
|
export declare class CaitDeskClient {
|
|
3
3
|
private readonly api;
|
|
4
4
|
private ws;
|
|
5
5
|
private eventId;
|
|
6
|
+
private broadcastWs;
|
|
6
7
|
private readonly config;
|
|
7
8
|
constructor(config: CaitDeskConfig);
|
|
8
9
|
/** Current WebSocket connection status */
|
|
9
10
|
get status(): ConnectionStatus;
|
|
10
11
|
/** Current slot status (active, waiting, or unknown) */
|
|
11
12
|
get slotStatus(): SlotStatus;
|
|
13
|
+
/** Current broadcast WebSocket connection status */
|
|
14
|
+
get broadcastStatus(): ConnectionStatus;
|
|
12
15
|
/** Get the authenticated user's info */
|
|
13
16
|
getMe(): Promise<User>;
|
|
14
17
|
/** List events assigned to the authenticated user as captioner */
|
|
@@ -41,6 +44,10 @@ export declare class CaitDeskClient {
|
|
|
41
44
|
resume(): void;
|
|
42
45
|
/** Release the active slot to the next waiting captioner */
|
|
43
46
|
releaseSlot(): void;
|
|
47
|
+
/** Subscribe to an event's broadcast to receive captions in real-time */
|
|
48
|
+
subscribe(eventId: string, config: SubscribeConfig): Promise<void>;
|
|
49
|
+
/** Unsubscribe from the broadcast */
|
|
50
|
+
unsubscribe(): void;
|
|
44
51
|
private sendControl;
|
|
45
52
|
private requireConnection;
|
|
46
53
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACJ,KAAK,EACL,gBAAgB,EAChB,UAAU,EAEV,eAAe,EAChB,MAAM,SAAS,CAAC;AAIjB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,MAAM,EAAE,cAAc;IAKlC,0CAA0C;IAC1C,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,wDAAwD;IACxD,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,oDAAoD;IACpD,IAAI,eAAe,IAAI,gBAAgB,CAEtC;IAMD,wCAAwC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,kEAAkE;IAC5D,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAInC,uEAAuE;IACjE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAIhE,kEAAkE;IAC5D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQ/D,8CAA8C;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7C,4CAA4C;IAC5C,UAAU,IAAI,IAAI;IAUlB,gDAAgD;IAChD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ1B,2DAA2D;IAC3D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3B,kFAAkF;IAClF,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYxB,2DAA2D;IAC3D,KAAK,IAAI,IAAI;IAIb,sDAAsD;IACtD,IAAI,IAAI,IAAI;IAIZ,4BAA4B;IAC5B,KAAK,IAAI,IAAI;IAIb,6BAA6B;IAC7B,MAAM,IAAI,IAAI;IAQd,4DAA4D;IAC5D,WAAW,IAAI,IAAI;IASnB,yEAAyE;IACnE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IASxE,qCAAqC;IACrC,WAAW,IAAI,IAAI;IASnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,iBAAiB;CAM1B"}
|
package/dist/client.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { CONTROL_ACTION, RATE_LIMITS } from './constants';
|
|
2
2
|
import { ApiClient } from './api';
|
|
3
3
|
import { WsClient } from './ws';
|
|
4
|
+
import { BroadcastWsClient } from './broadcast-ws';
|
|
4
5
|
const noop = () => { };
|
|
5
6
|
export class CaitDeskClient {
|
|
6
7
|
api;
|
|
7
8
|
ws = null;
|
|
8
9
|
eventId = null;
|
|
10
|
+
broadcastWs = null;
|
|
9
11
|
config;
|
|
10
12
|
constructor(config) {
|
|
11
13
|
this.config = config;
|
|
@@ -19,6 +21,10 @@ export class CaitDeskClient {
|
|
|
19
21
|
get slotStatus() {
|
|
20
22
|
return this.ws?.slotStatus ?? 'unknown';
|
|
21
23
|
}
|
|
24
|
+
/** Current broadcast WebSocket connection status */
|
|
25
|
+
get broadcastStatus() {
|
|
26
|
+
return this.broadcastWs?.status ?? 'disconnected';
|
|
27
|
+
}
|
|
22
28
|
// -----------------------------------------------------------------------
|
|
23
29
|
// REST
|
|
24
30
|
// -----------------------------------------------------------------------
|
|
@@ -119,6 +125,21 @@ export class CaitDeskClient {
|
|
|
119
125
|
ws.releaseSlot();
|
|
120
126
|
}
|
|
121
127
|
// -----------------------------------------------------------------------
|
|
128
|
+
// Broadcast (viewer) subscription
|
|
129
|
+
// -----------------------------------------------------------------------
|
|
130
|
+
/** Subscribe to an event's broadcast to receive captions in real-time */
|
|
131
|
+
async subscribe(eventId, config) {
|
|
132
|
+
this.broadcastWs?.disconnect();
|
|
133
|
+
const ticket = await this.api.getBroadcastTicket(eventId);
|
|
134
|
+
this.broadcastWs = new BroadcastWsClient(config, () => this.api.getBroadcastTicket(eventId));
|
|
135
|
+
this.broadcastWs.connect(ticket, eventId);
|
|
136
|
+
}
|
|
137
|
+
/** Unsubscribe from the broadcast */
|
|
138
|
+
unsubscribe() {
|
|
139
|
+
this.broadcastWs?.disconnect();
|
|
140
|
+
this.broadcastWs = null;
|
|
141
|
+
}
|
|
142
|
+
// -----------------------------------------------------------------------
|
|
122
143
|
// Private
|
|
123
144
|
// -----------------------------------------------------------------------
|
|
124
145
|
sendControl(action) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { CaitDeskClient } from './client';
|
|
2
|
-
export type { CaitDeskConfig, User, Event, Ticket, ConnectionStatus, SlotStatus, SlotDetail, CaptionAck, ControlAck, ServerError, ControlActionValue, ErrorCodeValue, } from './types';
|
|
2
|
+
export type { CaitDeskConfig, User, Event, Ticket, ConnectionStatus, SlotStatus, SlotDetail, CaptionAck, ControlAck, ServerError, ControlActionValue, ErrorCodeValue, BroadcastTicket, BroadcastCaptionMessage, BroadcastStatusMessage, BroadcastViewerCountMessage, BroadcastEventEndedMessage, BroadcastMessage, SubscribeConfig, } from './types';
|
|
3
3
|
export { EVENT_STATUS, ERROR_CODE, RATE_LIMITS, CONNECTION_DEFAULTS, SESSION_ACTION, CONTROL_ACTION, WS_CLOSE_CODE, } from './constants';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,YAAY,EACV,cAAc,EACd,IAAI,EACJ,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,YAAY,EACV,cAAc,EACd,IAAI,EACJ,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAwB1C,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -126,4 +126,49 @@ export type SessionMessage = SlotGrantedMessage | SlotOccupiedMessage | SlotRequ
|
|
|
126
126
|
export type IncomingMessage = ConnectedMessage | CaptionAck | ControlAck | ServerError | EventEndedMessage | SessionMessage;
|
|
127
127
|
export type ControlActionValue = (typeof CONTROL_ACTION)[keyof typeof CONTROL_ACTION];
|
|
128
128
|
export type ErrorCodeValue = (typeof ERROR_CODE)[keyof typeof ERROR_CODE];
|
|
129
|
+
/** Response from the broadcast ticket API endpoint */
|
|
130
|
+
export interface BroadcastTicket {
|
|
131
|
+
ticket: string;
|
|
132
|
+
expiresIn: number;
|
|
133
|
+
broadcastUrl: string;
|
|
134
|
+
}
|
|
135
|
+
/** Caption message from broadcast service */
|
|
136
|
+
export interface BroadcastCaptionMessage {
|
|
137
|
+
type: 'caption';
|
|
138
|
+
eventId: string;
|
|
139
|
+
seq: number;
|
|
140
|
+
text: string;
|
|
141
|
+
}
|
|
142
|
+
/** Event status message from broadcast service */
|
|
143
|
+
export interface BroadcastStatusMessage {
|
|
144
|
+
type: 'status';
|
|
145
|
+
eventId: string;
|
|
146
|
+
status: string;
|
|
147
|
+
scheduledStart?: string;
|
|
148
|
+
}
|
|
149
|
+
/** Viewer count update from broadcast service */
|
|
150
|
+
export interface BroadcastViewerCountMessage {
|
|
151
|
+
type: 'viewers';
|
|
152
|
+
eventId: string;
|
|
153
|
+
count: number;
|
|
154
|
+
}
|
|
155
|
+
/** Event ended message from broadcast service */
|
|
156
|
+
export interface BroadcastEventEndedMessage {
|
|
157
|
+
type: 'event_ended';
|
|
158
|
+
eventId: string;
|
|
159
|
+
message: string;
|
|
160
|
+
}
|
|
161
|
+
/** All possible incoming broadcast messages */
|
|
162
|
+
export type BroadcastMessage = BroadcastCaptionMessage | BroadcastStatusMessage | BroadcastViewerCountMessage | BroadcastEventEndedMessage | ServerError;
|
|
163
|
+
/** Callback configuration for broadcast subscription */
|
|
164
|
+
export interface SubscribeConfig {
|
|
165
|
+
onCaption?: (text: string, seq: number) => void;
|
|
166
|
+
onStatus?: (status: string, detail?: {
|
|
167
|
+
scheduledStart?: string;
|
|
168
|
+
}) => void;
|
|
169
|
+
onViewerCount?: (count: number) => void;
|
|
170
|
+
onError?: (error: ServerError) => void;
|
|
171
|
+
onEventEnded?: (eventId: string) => void;
|
|
172
|
+
onStatusChange?: (status: ConnectionStatus) => void;
|
|
173
|
+
}
|
|
129
174
|
//# sourceMappingURL=types.d.ts.map
|
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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"}
|