livekit-client 0.15.3 → 0.16.2
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/api/SignalClient.d.ts +6 -3
- package/dist/api/SignalClient.js +70 -28
- package/dist/api/SignalClient.js.map +1 -1
- package/dist/options.d.ts +5 -0
- package/dist/proto/livekit_models.d.ts +30 -0
- package/dist/proto/livekit_models.js +219 -1
- package/dist/proto/livekit_models.js.map +1 -1
- package/dist/proto/livekit_rtc.d.ts +15 -10
- package/dist/proto/livekit_rtc.js +36 -22
- package/dist/proto/livekit_rtc.js.map +1 -1
- package/dist/room/RTCEngine.d.ts +11 -2
- package/dist/room/RTCEngine.js +196 -44
- package/dist/room/RTCEngine.js.map +1 -1
- package/dist/room/Room.d.ts +7 -0
- package/dist/room/Room.js +70 -16
- package/dist/room/Room.js.map +1 -1
- package/dist/room/events.d.ts +5 -3
- package/dist/room/events.js +5 -3
- package/dist/room/events.js.map +1 -1
- package/dist/room/participant/LocalParticipant.d.ts +1 -2
- package/dist/room/participant/LocalParticipant.js +7 -6
- package/dist/room/participant/LocalParticipant.js.map +1 -1
- package/dist/room/participant/RemoteParticipant.js +3 -0
- package/dist/room/participant/RemoteParticipant.js.map +1 -1
- package/dist/room/participant/publishUtils.js +1 -1
- package/dist/room/participant/publishUtils.js.map +1 -1
- package/dist/room/participant/publishUtils.test.js +9 -0
- package/dist/room/participant/publishUtils.test.js.map +1 -1
- package/dist/room/track/LocalTrackPublication.d.ts +2 -0
- package/dist/room/track/LocalTrackPublication.js.map +1 -1
- package/dist/room/track/RemoteTrackPublication.d.ts +2 -1
- package/dist/room/track/RemoteTrackPublication.js +22 -8
- package/dist/room/track/RemoteTrackPublication.js.map +1 -1
- package/dist/room/track/RemoteVideoTrack.js +12 -7
- package/dist/room/track/RemoteVideoTrack.js.map +1 -1
- package/dist/room/track/Track.js +28 -20
- package/dist/room/track/Track.js.map +1 -1
- package/dist/room/track/create.js +5 -0
- package/dist/room/track/create.js.map +1 -1
- package/dist/room/utils.d.ts +3 -0
- package/dist/room/utils.js +16 -1
- package/dist/room/utils.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/package.json +3 -3
- package/src/api/SignalClient.ts +444 -0
- package/src/connect.ts +100 -0
- package/src/index.ts +47 -0
- package/src/logger.ts +22 -0
- package/src/options.ts +152 -0
- package/src/proto/livekit_models.ts +1863 -0
- package/src/proto/livekit_rtc.ts +3415 -0
- package/src/room/DeviceManager.ts +57 -0
- package/src/room/PCTransport.ts +86 -0
- package/src/room/RTCEngine.ts +598 -0
- package/src/room/Room.ts +840 -0
- package/src/room/errors.ts +65 -0
- package/src/room/events.ts +398 -0
- package/src/room/participant/LocalParticipant.ts +685 -0
- package/src/room/participant/Participant.ts +214 -0
- package/src/room/participant/ParticipantTrackPermission.ts +32 -0
- package/src/room/participant/RemoteParticipant.ts +241 -0
- package/src/room/participant/publishUtils.test.ts +105 -0
- package/src/room/participant/publishUtils.ts +180 -0
- package/src/room/stats.ts +130 -0
- package/src/room/track/LocalAudioTrack.ts +112 -0
- package/src/room/track/LocalTrack.ts +124 -0
- package/src/room/track/LocalTrackPublication.ts +66 -0
- package/src/room/track/LocalVideoTrack.test.ts +70 -0
- package/src/room/track/LocalVideoTrack.ts +416 -0
- package/src/room/track/RemoteAudioTrack.ts +58 -0
- package/src/room/track/RemoteTrack.ts +59 -0
- package/src/room/track/RemoteTrackPublication.ts +198 -0
- package/src/room/track/RemoteVideoTrack.ts +220 -0
- package/src/room/track/Track.ts +307 -0
- package/src/room/track/TrackPublication.ts +120 -0
- package/src/room/track/create.ts +120 -0
- package/src/room/track/defaults.ts +23 -0
- package/src/room/track/options.ts +229 -0
- package/src/room/track/types.ts +8 -0
- package/src/room/track/utils.test.ts +93 -0
- package/src/room/track/utils.ts +76 -0
- package/src/room/utils.ts +62 -0
- package/src/version.ts +2 -0
- package/.github/workflows/publish.yaml +0 -55
- package/.github/workflows/test.yaml +0 -36
- package/example/index.html +0 -247
- package/example/sample.ts +0 -632
- package/example/styles.css +0 -144
- package/example/webpack.config.js +0 -33
package/dist/room/RTCEngine.js
CHANGED
@@ -24,21 +24,25 @@ const PCTransport_1 = __importDefault(require("./PCTransport"));
|
|
24
24
|
const utils_1 = require("./utils");
|
25
25
|
const lossyDataChannel = '_lossy';
|
26
26
|
const reliableDataChannel = '_reliable';
|
27
|
-
const maxReconnectRetries =
|
28
|
-
|
27
|
+
const maxReconnectRetries = 10;
|
28
|
+
const minReconnectWait = 1 * 1000;
|
29
|
+
const maxReconnectDuration = 60 * 1000;
|
30
|
+
exports.maxICEConnectTimeout = 15 * 1000;
|
29
31
|
/** @internal */
|
30
32
|
class RTCEngine extends events_1.EventEmitter {
|
31
33
|
constructor() {
|
32
34
|
super();
|
33
35
|
this.rtcConfig = {};
|
34
36
|
this.subscriberPrimary = false;
|
35
|
-
this.
|
37
|
+
this.pcConnected = false;
|
36
38
|
this.isClosed = true;
|
37
39
|
this.pendingTrackResolvers = {};
|
38
40
|
// true if publisher connection has already been established.
|
39
41
|
// this is helpful to know if we need to restart ICE on the publisher connection
|
40
42
|
this.hasPublished = false;
|
41
43
|
this.reconnectAttempts = 0;
|
44
|
+
this.reconnectStart = 0;
|
45
|
+
this.fullReconnect = false;
|
42
46
|
this.handleDataChannel = ({ channel }) => __awaiter(this, void 0, void 0, function* () {
|
43
47
|
if (!channel) {
|
44
48
|
return;
|
@@ -76,6 +80,17 @@ class RTCEngine extends events_1.EventEmitter {
|
|
76
80
|
this.emit(events_2.EngineEvent.DataPacketReceived, dp.user, dp.kind);
|
77
81
|
}
|
78
82
|
});
|
83
|
+
this.handleDataError = (event) => {
|
84
|
+
const channel = event.currentTarget;
|
85
|
+
const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';
|
86
|
+
if (event instanceof ErrorEvent) {
|
87
|
+
const { error } = event.error;
|
88
|
+
logger_1.default.error(`DataChannel error on ${channelKind}: ${event.message}`, error);
|
89
|
+
}
|
90
|
+
else {
|
91
|
+
logger_1.default.error(`Unknown DataChannel Error on ${channelKind}`, event);
|
92
|
+
}
|
93
|
+
};
|
79
94
|
// websocket reconnect behavior. if websocket is interrupted, and the PeerConnection
|
80
95
|
// continues to work, we can reconnect to websocket to continue the session
|
81
96
|
// after a number of retries, we'll close and give up permanently
|
@@ -84,20 +99,51 @@ class RTCEngine extends events_1.EventEmitter {
|
|
84
99
|
return;
|
85
100
|
}
|
86
101
|
logger_1.default.debug(`${connection} disconnected`);
|
87
|
-
if (this.reconnectAttempts
|
88
|
-
|
89
|
-
this.
|
90
|
-
this.close();
|
91
|
-
return;
|
102
|
+
if (this.reconnectAttempts === 0) {
|
103
|
+
// only reset start time on the first try
|
104
|
+
this.reconnectStart = Date.now();
|
92
105
|
}
|
93
106
|
const delay = (this.reconnectAttempts * this.reconnectAttempts) * 300;
|
94
|
-
setTimeout(() => {
|
95
|
-
this.
|
96
|
-
|
107
|
+
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
108
|
+
if (this.isClosed) {
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
try {
|
112
|
+
if (this.fullReconnect) {
|
113
|
+
yield this.restartConnection();
|
114
|
+
}
|
115
|
+
else {
|
116
|
+
yield this.resumeConnection();
|
117
|
+
}
|
97
118
|
this.reconnectAttempts = 0;
|
98
|
-
|
99
|
-
|
100
|
-
|
119
|
+
this.fullReconnect = false;
|
120
|
+
}
|
121
|
+
catch (e) {
|
122
|
+
this.reconnectAttempts += 1;
|
123
|
+
let recoverable = true;
|
124
|
+
if (e instanceof errors_1.UnexpectedConnectionState) {
|
125
|
+
logger_1.default.debug('received unrecoverable error', e.message);
|
126
|
+
// unrecoverable
|
127
|
+
recoverable = false;
|
128
|
+
}
|
129
|
+
else if (!(e instanceof SignalReconnectError)) {
|
130
|
+
// cannot resume
|
131
|
+
this.fullReconnect = true;
|
132
|
+
}
|
133
|
+
const duration = Date.now() - this.reconnectStart;
|
134
|
+
if (this.reconnectAttempts >= maxReconnectRetries || duration > maxReconnectDuration) {
|
135
|
+
recoverable = false;
|
136
|
+
}
|
137
|
+
if (recoverable) {
|
138
|
+
this.handleDisconnect('reconnect');
|
139
|
+
}
|
140
|
+
else {
|
141
|
+
logger_1.default.info(`could not recover connection after ${maxReconnectRetries} attempts, ${duration}ms. giving up`);
|
142
|
+
this.emit(events_2.EngineEvent.Disconnected);
|
143
|
+
this.close();
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}), delay);
|
101
147
|
};
|
102
148
|
this.client = new SignalClient_1.SignalClient();
|
103
149
|
}
|
@@ -105,8 +151,8 @@ class RTCEngine extends events_1.EventEmitter {
|
|
105
151
|
return __awaiter(this, void 0, void 0, function* () {
|
106
152
|
this.url = url;
|
107
153
|
this.token = token;
|
154
|
+
this.signalOpts = opts;
|
108
155
|
const joinResponse = yield this.client.join(url, token, opts);
|
109
|
-
this.emit(events_2.EngineEvent.SignalConnected);
|
110
156
|
this.isClosed = false;
|
111
157
|
this.subscriberPrimary = joinResponse.subscriberPrimary;
|
112
158
|
if (!this.publisher) {
|
@@ -114,7 +160,7 @@ class RTCEngine extends events_1.EventEmitter {
|
|
114
160
|
}
|
115
161
|
// create offer
|
116
162
|
if (!this.subscriberPrimary) {
|
117
|
-
|
163
|
+
this.negotiate();
|
118
164
|
}
|
119
165
|
return joinResponse;
|
120
166
|
});
|
@@ -157,6 +203,9 @@ class RTCEngine extends events_1.EventEmitter {
|
|
157
203
|
var _a;
|
158
204
|
return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;
|
159
205
|
}
|
206
|
+
get connectedServerAddress() {
|
207
|
+
return this.connectedServerAddr;
|
208
|
+
}
|
160
209
|
configure(joinResponse) {
|
161
210
|
// already configured
|
162
211
|
if (this.publisher || this.subscriber) {
|
@@ -200,18 +249,23 @@ class RTCEngine extends events_1.EventEmitter {
|
|
200
249
|
// in subscriber primary mode, server side opens sub data channels.
|
201
250
|
this.subscriber.pc.ondatachannel = this.handleDataChannel;
|
202
251
|
}
|
203
|
-
primaryPC
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
252
|
+
this.primaryPC = primaryPC;
|
253
|
+
primaryPC.onconnectionstatechange = () => {
|
254
|
+
if (primaryPC.connectionState === 'connected') {
|
255
|
+
logger_1.default.trace('pc connected');
|
256
|
+
if (!this.pcConnected) {
|
257
|
+
this.pcConnected = true;
|
208
258
|
this.emit(events_2.EngineEvent.Connected);
|
209
259
|
}
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
260
|
+
getConnectedAddress(primaryPC).then((v) => {
|
261
|
+
this.connectedServerAddr = v;
|
262
|
+
});
|
263
|
+
}
|
264
|
+
else if (primaryPC.connectionState === 'failed') {
|
265
|
+
// on Safari, PeerConnection will switch to 'disconnected' during renegotiation
|
266
|
+
logger_1.default.trace('pc disconnected');
|
267
|
+
if (this.pcConnected) {
|
268
|
+
this.pcConnected = false;
|
215
269
|
this.handleDisconnect('peerconnection');
|
216
270
|
}
|
217
271
|
}
|
@@ -231,6 +285,9 @@ class RTCEngine extends events_1.EventEmitter {
|
|
231
285
|
// also handle messages over the pub channel, for backwards compatibility
|
232
286
|
this.lossyDC.onmessage = this.handleDataMessage;
|
233
287
|
this.reliableDC.onmessage = this.handleDataMessage;
|
288
|
+
// handle datachannel errors
|
289
|
+
this.lossyDC.onerror = this.handleDataError;
|
290
|
+
this.reliableDC.onerror = this.handleDataError;
|
234
291
|
// configure signaling client
|
235
292
|
this.client.onAnswer = (sd) => __awaiter(this, void 0, void 0, function* () {
|
236
293
|
if (!this.publisher) {
|
@@ -265,6 +322,7 @@ class RTCEngine extends events_1.EventEmitter {
|
|
265
322
|
this.client.sendAnswer(answer);
|
266
323
|
});
|
267
324
|
this.client.onLocalTrackPublished = (res) => {
|
325
|
+
logger_1.default.debug('received trackPublishedResponse', res);
|
268
326
|
const resolve = this.pendingTrackResolvers[res.cid];
|
269
327
|
if (!resolve) {
|
270
328
|
logger_1.default.error('missing track resolver for ', res.cid);
|
@@ -273,49 +331,106 @@ class RTCEngine extends events_1.EventEmitter {
|
|
273
331
|
delete this.pendingTrackResolvers[res.cid];
|
274
332
|
resolve(res.track);
|
275
333
|
};
|
334
|
+
this.client.onTokenRefresh = (token) => {
|
335
|
+
this.token = token;
|
336
|
+
};
|
276
337
|
this.client.onClose = () => {
|
277
338
|
this.handleDisconnect('signal');
|
278
339
|
};
|
279
|
-
this.client.onLeave = () => {
|
280
|
-
|
281
|
-
|
340
|
+
this.client.onLeave = (leave) => {
|
341
|
+
if (leave === null || leave === void 0 ? void 0 : leave.canReconnect) {
|
342
|
+
this.fullReconnect = true;
|
343
|
+
this.primaryPC = undefined;
|
344
|
+
}
|
345
|
+
else {
|
346
|
+
this.emit(events_2.EngineEvent.Disconnected);
|
347
|
+
this.close();
|
348
|
+
}
|
282
349
|
};
|
283
350
|
}
|
284
|
-
|
351
|
+
restartConnection() {
|
352
|
+
var _a, _b;
|
285
353
|
return __awaiter(this, void 0, void 0, function* () {
|
286
|
-
if (this.isClosed) {
|
287
|
-
return;
|
288
|
-
}
|
289
354
|
if (!this.url || !this.token) {
|
290
|
-
|
355
|
+
// permanent failure, don't attempt reconnection
|
356
|
+
throw new errors_1.UnexpectedConnectionState('could not reconnect, url or token not saved');
|
291
357
|
}
|
292
|
-
logger_1.default.info('reconnecting
|
358
|
+
logger_1.default.info('reconnecting, attempt', this.reconnectAttempts);
|
293
359
|
if (this.reconnectAttempts === 0) {
|
294
|
-
this.emit(events_2.EngineEvent.
|
360
|
+
this.emit(events_2.EngineEvent.Restarting);
|
361
|
+
}
|
362
|
+
this.primaryPC = undefined;
|
363
|
+
(_a = this.publisher) === null || _a === void 0 ? void 0 : _a.close();
|
364
|
+
this.publisher = undefined;
|
365
|
+
(_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.close();
|
366
|
+
this.subscriber = undefined;
|
367
|
+
let joinResponse;
|
368
|
+
try {
|
369
|
+
joinResponse = yield this.join(this.url, this.token, this.signalOpts);
|
370
|
+
}
|
371
|
+
catch (e) {
|
372
|
+
throw new SignalReconnectError();
|
373
|
+
}
|
374
|
+
yield this.waitForPCConnected();
|
375
|
+
// reconnect success
|
376
|
+
this.emit(events_2.EngineEvent.Restarted, joinResponse);
|
377
|
+
});
|
378
|
+
}
|
379
|
+
resumeConnection() {
|
380
|
+
return __awaiter(this, void 0, void 0, function* () {
|
381
|
+
if (!this.url || !this.token) {
|
382
|
+
// permanent failure, don't attempt reconnection
|
383
|
+
throw new errors_1.UnexpectedConnectionState('could not reconnect, url or token not saved');
|
295
384
|
}
|
296
|
-
this.reconnectAttempts += 1;
|
297
|
-
yield this.client.reconnect(this.url, this.token);
|
298
|
-
this.emit(events_2.EngineEvent.SignalConnected);
|
299
385
|
// trigger publisher reconnect
|
300
386
|
if (!this.publisher || !this.subscriber) {
|
301
387
|
throw new errors_1.UnexpectedConnectionState('publisher and subscriber connections unset');
|
302
388
|
}
|
389
|
+
logger_1.default.info('resuming signal connection, attempt', this.reconnectAttempts);
|
390
|
+
if (this.reconnectAttempts === 0) {
|
391
|
+
this.emit(events_2.EngineEvent.Resuming);
|
392
|
+
}
|
393
|
+
try {
|
394
|
+
yield this.client.reconnect(this.url, this.token);
|
395
|
+
}
|
396
|
+
catch (e) {
|
397
|
+
throw new SignalReconnectError();
|
398
|
+
}
|
399
|
+
this.emit(events_2.EngineEvent.SignalResumed);
|
303
400
|
this.subscriber.restartingIce = true;
|
304
401
|
// only restart publisher if it's needed
|
305
402
|
if (this.hasPublished) {
|
306
403
|
yield this.publisher.createAndSendOffer({ iceRestart: true });
|
307
404
|
}
|
405
|
+
yield this.waitForPCConnected();
|
406
|
+
// resume success
|
407
|
+
this.emit(events_2.EngineEvent.Resumed);
|
408
|
+
});
|
409
|
+
}
|
410
|
+
waitForPCConnected() {
|
411
|
+
var _a;
|
412
|
+
return __awaiter(this, void 0, void 0, function* () {
|
308
413
|
const startTime = (new Date()).getTime();
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
414
|
+
let now = startTime;
|
415
|
+
this.pcConnected = false;
|
416
|
+
while (now - startTime < exports.maxICEConnectTimeout) {
|
417
|
+
// if there is no connectionstatechange callback fired
|
418
|
+
// check connectionstate after minReconnectWait
|
419
|
+
if (this.primaryPC === undefined) {
|
420
|
+
// we can abort early, connection is hosed
|
421
|
+
break;
|
422
|
+
}
|
423
|
+
else if (now - startTime > minReconnectWait && ((_a = this.primaryPC) === null || _a === void 0 ? void 0 : _a.connectionState) === 'connected') {
|
424
|
+
this.pcConnected = true;
|
425
|
+
}
|
426
|
+
if (this.pcConnected) {
|
313
427
|
return;
|
314
428
|
}
|
315
429
|
yield utils_1.sleep(100);
|
430
|
+
now = (new Date()).getTime();
|
316
431
|
}
|
317
432
|
// have not reconnected, throw
|
318
|
-
throw new errors_1.ConnectionError('could not establish
|
433
|
+
throw new errors_1.ConnectionError('could not establish PC connection');
|
319
434
|
});
|
320
435
|
}
|
321
436
|
/* @internal */
|
@@ -378,4 +493,41 @@ class RTCEngine extends events_1.EventEmitter {
|
|
378
493
|
}
|
379
494
|
}
|
380
495
|
exports.default = RTCEngine;
|
496
|
+
function getConnectedAddress(pc) {
|
497
|
+
var _a;
|
498
|
+
return __awaiter(this, void 0, void 0, function* () {
|
499
|
+
let selectedCandidatePairId = '';
|
500
|
+
const candidatePairs = new Map();
|
501
|
+
// id -> candidate ip
|
502
|
+
const candidates = new Map();
|
503
|
+
const stats = yield pc.getStats();
|
504
|
+
stats.forEach((v) => {
|
505
|
+
switch (v.type) {
|
506
|
+
case 'transport':
|
507
|
+
selectedCandidatePairId = v.selectedCandidatePairId;
|
508
|
+
break;
|
509
|
+
case 'candidate-pair':
|
510
|
+
if (selectedCandidatePairId === '' && v.selected) {
|
511
|
+
selectedCandidatePairId = v.id;
|
512
|
+
}
|
513
|
+
candidatePairs.set(v.id, v);
|
514
|
+
break;
|
515
|
+
case 'remote-candidate':
|
516
|
+
candidates.set(v.id, `${v.address}:${v.port}`);
|
517
|
+
break;
|
518
|
+
default:
|
519
|
+
}
|
520
|
+
});
|
521
|
+
if (selectedCandidatePairId === '') {
|
522
|
+
return undefined;
|
523
|
+
}
|
524
|
+
const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;
|
525
|
+
if (selectedID === undefined) {
|
526
|
+
return undefined;
|
527
|
+
}
|
528
|
+
return candidates.get(selectedID);
|
529
|
+
});
|
530
|
+
}
|
531
|
+
class SignalReconnectError extends Error {
|
532
|
+
}
|
381
533
|
//# sourceMappingURL=RTCEngine.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RTCEngine.js","sourceRoot":"","sources":["../../src/room/RTCEngine.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"RTCEngine.js","sourceRoot":"","sources":["../../src/room/RTCEngine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mCAAsC;AACtC,sDAAkE;AAClE,uDAA4B;AAC5B,4DAAiF;AACjF,sDAK8B;AAC9B,qCAAyF;AACzF,qCAAuC;AACvC,gEAAwC;AACxC,mCAAgC;AAEhC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAClC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC;AAClC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC1B,QAAA,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,gBAAgB;AAChB,MAAqB,SAAU,SAAQ,qBAAY;IAgDjD;QACE,KAAK,EAAE,CAAC;QA1CV,cAAS,GAAqB,EAAE,CAAC;QAYzB,sBAAiB,GAAY,KAAK,CAAC;QAInC,gBAAW,GAAY,KAAK,CAAC;QAE7B,aAAQ,GAAY,IAAI,CAAC;QAEzB,0BAAqB,GAAiD,EAAE,CAAC;QAEjF,6DAA6D;QAC7D,gFAAgF;QACxE,iBAAY,GAAY,KAAK,CAAC;QAS9B,sBAAiB,GAAW,CAAC,CAAC;QAE9B,mBAAc,GAAW,CAAC,CAAC;QAE3B,kBAAa,GAAY,KAAK,CAAC;QA8O/B,sBAAiB,GAAG,CAAO,EAAE,OAAO,EAAuB,EAAE,EAAE;YACrE,IAAI,CAAC,OAAO,EAAE;gBACZ,OAAO;aACR;YACD,IAAI,OAAO,CAAC,KAAK,KAAK,mBAAmB,EAAE;gBACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;aAC9B;iBAAM,IAAI,OAAO,CAAC,KAAK,KAAK,gBAAgB,EAAE;gBAC7C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;aAC3B;iBAAM;gBACL,OAAO;aACR;YACD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7C,CAAC,CAAA,CAAC;QAEM,sBAAiB,GAAG,CAAO,OAAqB,EAAE,EAAE;YAC1D,SAAS;YACT,IAAI,MAA+B,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,YAAY,WAAW,EAAE;gBACvC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;aACvB;iBAAM,IAAI,OAAO,CAAC,IAAI,YAAY,IAAI,EAAE;gBACvC,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;aAC3C;iBAAM;gBACL,gBAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjD,OAAO;aACR;YACD,MAAM,EAAE,GAAG,2BAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,OAAO,EAAE;gBACd,2BAA2B;gBAC3B,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,oBAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aAClE;iBAAM,IAAI,EAAE,CAAC,IAAI,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,kBAAkB,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;aAC7D;QACH,CAAC,CAAA,CAAC;QAEM,oBAAe,GAAG,CAAC,KAAY,EAAE,EAAE;YACzC,MAAM,OAAO,GAAG,KAAK,CAAC,aAA+B,CAAC;YACtD,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YAExE,IAAI,KAAK,YAAY,UAAU,EAAE;gBAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC9B,gBAAG,CAAC,KAAK,CAAC,wBAAwB,WAAW,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;aAC3E;iBAAM;gBACL,gBAAG,CAAC,KAAK,CAAC,gCAAgC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;aACjE;QACH,CAAC,CAAC;QAEF,oFAAoF;QACpF,2EAA2E;QAC3E,iEAAiE;QACzD,qBAAgB,GAAG,CAAC,UAAkB,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,OAAO;aACR;YACD,gBAAG,CAAC,KAAK,CAAC,GAAG,UAAU,eAAe,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE;gBAChC,yCAAyC;gBACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;aAClC;YAED,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC;YACtE,UAAU,CAAC,GAAS,EAAE;gBACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,OAAO;iBACR;gBAED,IAAI;oBACF,IAAI,IAAI,CAAC,aAAa,EAAE;wBACtB,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;qBAChC;yBAAM;wBACL,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;qBAC/B;oBACD,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;oBAC3B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;iBAC5B;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;oBAC5B,IAAI,WAAW,GAAG,IAAI,CAAC;oBACvB,IAAI,CAAC,YAAY,kCAAyB,EAAE;wBAC1C,gBAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBACrD,gBAAgB;wBAChB,WAAW,GAAG,KAAK,CAAC;qBACrB;yBAAM,IAAI,CAAC,CAAC,CAAC,YAAY,oBAAoB,CAAC,EAAE;wBAC/C,gBAAgB;wBAChB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;qBAC3B;oBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;oBAClD,IAAI,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,IAAI,QAAQ,GAAG,oBAAoB,EAAE;wBACpF,WAAW,GAAG,KAAK,CAAC;qBACrB;oBAED,IAAI,WAAW,EAAE;wBACf,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;qBACpC;yBAAM;wBACL,gBAAG,CAAC,IAAI,CACN,sCAAsC,mBAAmB,cAAc,QAAQ,eAAe,CAC/F,CAAC;wBACF,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,YAAY,CAAC,CAAC;wBACpC,IAAI,CAAC,KAAK,EAAE,CAAC;qBACd;iBACF;YACH,CAAC,CAAA,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC;QA7UA,IAAI,CAAC,MAAM,GAAG,IAAI,2BAAY,EAAE,CAAC;IACnC,CAAC;IAEK,IAAI,CAAC,GAAW,EAAE,KAAa,EAAE,IAAoB;;YACzD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YAEtB,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;aAC9B;YAED,eAAe;YACf,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YAED,OAAO,YAAY,CAAC;QACtB,CAAC;KAAA;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,KAAK,QAAQ,EAAE;YACnE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;;gBAChD,IAAI;oBACF,MAAA,IAAI,CAAC,SAAS,0CAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACxC;gBAAC,OAAO,CAAC,EAAE;oBACV,gBAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;iBACtC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,QAAQ,CAAC,GAAoB;QAC3B,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACvC,MAAM,IAAI,0BAAiB,CACzB,qDAAqD,CACtD,CAAC;SACH;QACD,OAAO,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;YACxC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,QAAgB,EAAE,KAAc;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,wBAAwB;;QAC1B,OAAO,MAAA,IAAI,CAAC,aAAa,0CAAE,UAAU,CAAC;IACxC,CAAC;IAED,IAAI,sBAAsB;QACxB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAEO,SAAS,CAAC,YAA0B;QAC1C,qBAAqB;QACrB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,OAAO;SACR;QAED,oDAAoD;QACpD,IAAI,YAAY,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YACzD,MAAM,aAAa,GAAmB,EAAE,CAAC;YACzC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC5C,MAAM,YAAY,GAAiB;oBACjC,IAAI,EAAE,SAAS,CAAC,IAAI;iBACrB,CAAC;gBACF,IAAI,SAAS,CAAC,QAAQ;oBAAE,YAAY,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACnE,IAAI,SAAS,CAAC,UAAU,EAAE;oBAAE,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;iBAAE;gBAC7E,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,aAAa,CAAC;SAC3C;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE;YACxC,IAAI,CAAC,EAAE,CAAC,SAAS;gBAAE,OAAO;YAC1B,gBAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,0BAAY,CAAC,SAAS,CAAC,CAAC;QACrE,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE;YACzC,IAAI,CAAC,EAAE,CAAC,SAAS;gBAAE,OAAO;YAC1B,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,0BAAY,CAAC,UAAU,CAAC,CAAC;QACtE,CAAC,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,IAAI,YAAY,CAAC,iBAAiB,EAAE;YAClC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,mEAAmE;YACnE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC3D;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,SAAS,CAAC,uBAAuB,GAAG,GAAG,EAAE;YACvC,IAAI,SAAS,CAAC,eAAe,KAAK,WAAW,EAAE;gBAC7C,gBAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,SAAS,CAAC,CAAC;iBAClC;gBACD,mBAAmB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBACxC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACJ;iBAAM,IAAI,SAAS,CAAC,eAAe,KAAK,QAAQ,EAAE;gBACjD,+EAA+E;gBAC/E,gBAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBAEzB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;iBACzC;aACF;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAiB,EAAE,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,eAAe,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/E,CAAC,CAAC;QAEF,gBAAgB;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,gBAAgB,EAAE;YACnE,sCAAsC;YACtC,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,CAAC;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,EAAE;YACzE,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,yEAAyE;QACzE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEnD,4BAA4B;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QAE/C,6BAA6B;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAO,EAAE,EAAE,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,OAAO;aACR;YACD,gBAAG,CAAC,KAAK,CACP,wBAAwB,EACxB,EAAE,CAAC,IAAI,EACP,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,CACjC,CAAC;YACF,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAA,CAAC;QAEF,2BAA2B;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACvC,OAAO;aACR;YACD,gBAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,MAAM,KAAK,0BAAY,CAAC,SAAS,EAAE;gBACrC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;aAC3C;iBAAM;gBACL,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC;QAEF,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAO,EAAE,EAAE,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,OAAO;aACR;YACD,gBAAG,CAAC,KAAK,CACP,uBAAuB,EACvB,EAAE,CAAC,IAAI,EACP,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,CAClC,CAAC;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YAE/C,mBAAmB;YACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;YACvD,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAA,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,qBAAqB,GAAG,CAAC,GAA2B,EAAE,EAAE;YAClE,gBAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE;gBACZ,gBAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClD,OAAO;aACR;YACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAM,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;YAC7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,EAAE;gBACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC5B;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,YAAY,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;QACH,CAAC,CAAC;IACJ,CAAC;IAyGa,iBAAiB;;;YAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC5B,gDAAgD;gBAChD,MAAM,IAAI,kCAAyB,CAAC,6CAA6C,CAAC,CAAC;aACpF;YAED,gBAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,UAAU,CAAC,CAAC;aACnC;YAED,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,MAAA,IAAI,CAAC,SAAS,0CAAE,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAE5B,IAAI,YAA0B,CAAC;YAC/B,IAAI;gBACF,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aACvE;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,IAAI,oBAAoB,EAAE,CAAC;aAClC;YAED,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhC,oBAAoB;YACpB,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;;KAChD;IAEa,gBAAgB;;YAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAC5B,gDAAgD;gBAChD,MAAM,IAAI,kCAAyB,CAAC,6CAA6C,CAAC,CAAC;aACpF;YACD,8BAA8B;YAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACvC,MAAM,IAAI,kCAAyB,CAAC,4CAA4C,CAAC,CAAC;aACnF;YACD,gBAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxE,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,QAAQ,CAAC,CAAC;aACjC;YAED,IAAI;gBACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACnD;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,IAAI,oBAAoB,EAAE,CAAC;aAClC;YACD,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,aAAa,CAAC,CAAC;YAErC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC;YAErC,wCAAwC;YACxC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;aAC/D;YAED,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhC,iBAAiB;YACjB,IAAI,CAAC,IAAI,CAAC,oBAAW,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;KAAA;IAEK,kBAAkB;;;YACtB,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,GAAG,GAAG,SAAS,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,OAAO,GAAG,GAAG,SAAS,GAAG,4BAAoB,EAAE;gBAC7C,sDAAsD;gBACtD,+CAA+C;gBAC/C,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;oBAChC,0CAA0C;oBAC1C,MAAM;iBACP;qBAAM,IAAI,GAAG,GAAG,SAAS,GAAG,gBAAgB,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,eAAe,MAAK,WAAW,EAAE;oBAChG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;iBACzB;gBACD,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,OAAO;iBACR;gBACD,MAAM,aAAK,CAAC,GAAG,CAAC,CAAC;gBACjB,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;aAC9B;YAED,8BAA8B;YAC9B,MAAM,IAAI,wBAAe,CAAC,mCAAmC,CAAC,CAAC;;KAChE;IAED,eAAe;IACT,cAAc,CAAC,MAAkB,EAAE,IAAqB;;YAC5D,MAAM,GAAG,GAAG,2BAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;YAE/C,yCAAyC;YACzC,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,IAAI,KAAK,gCAAe,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;gBAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxB;iBAAM,IAAI,IAAI,KAAK,gCAAe,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC/D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC3B;QACH,CAAC;KAAA;IAEa,wBAAwB,CAAC,IAAqB;;;YAC1D,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,OAAO;aACR;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,MAAM,IAAI,wBAAe,CAAC,8BAA8B,CAAC,CAAC;aAC3D;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,KAAK,UAAU,EAAE;gBACzF,oBAAoB;gBACpB,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,UAAU,MAAK,MAAM,EAAE;gBACxC,OAAO;aACR;YAED,qCAAqC;YACrC,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,4BAAoB,CAAC;YAC9D,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;gBACvC,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,IAAI,CAAA,MAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,0CAAE,UAAU,MAAK,MAAM,EAAE;oBACzF,OAAO;iBACR;gBACD,MAAM,aAAK,CAAC,EAAE,CAAC,CAAC;aACjB;YAED,MAAM,IAAI,wBAAe,CAAC,mDAAmD,MAAA,IAAI,CAAC,SAAS,0CAAE,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;;KACvH;IAED,gBAAgB;IAChB,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;IAC7B,CAAC;IAEO,kBAAkB,CAAC,IAAqB;QAC9C,IAAI,IAAI,KAAK,gCAAe,CAAC,KAAK,EAAE;YAClC,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QAAC,IAAI,IAAI,KAAK,gCAAe,CAAC,QAAQ,EAAE;YACvC,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;IACH,CAAC;CACF;AAzhBD,4BAyhBC;AAED,SAAe,mBAAmB,CAAC,EAAqB;;;QACtD,IAAI,uBAAuB,GAAG,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoC,CAAC;QACnE,qBAAqB;QACrB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,MAAM,KAAK,GAAmB,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,QAAQ,CAAC,CAAC,IAAI,EAAE;gBACd,KAAK,WAAW;oBACd,uBAAuB,GAAG,CAAC,CAAC,uBAAuB,CAAC;oBACpD,MAAM;gBACR,KAAK,gBAAgB;oBACnB,IAAI,uBAAuB,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE;wBAChD,uBAAuB,GAAG,CAAC,CAAC,EAAE,CAAC;qBAChC;oBACD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC5B,MAAM;gBACR,KAAK,kBAAkB;oBACrB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC/C,MAAM;gBACR,QAAQ;aACT;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,uBAAuB,KAAK,EAAE,EAAE;YAClC,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,UAAU,GAAG,MAAA,cAAc,CAAC,GAAG,CAAC,uBAAuB,CAAC,0CAAE,iBAAiB,CAAC;QAClF,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;CACnC;AAED,MAAM,oBAAqB,SAAQ,KAAK;CACvC"}
|
package/dist/room/Room.d.ts
CHANGED
@@ -98,6 +98,8 @@ declare class Room extends EventEmitter {
|
|
98
98
|
*/
|
99
99
|
switchActiveDevice(kind: MediaDeviceKind, deviceId: string): Promise<void>;
|
100
100
|
private onTrackAdded;
|
101
|
+
private handleRestarting;
|
102
|
+
private handleRestarted;
|
101
103
|
private handleDisconnect;
|
102
104
|
private handleParticipantUpdates;
|
103
105
|
private handleParticipantDisconnected;
|
@@ -114,6 +116,11 @@ declare class Room extends EventEmitter {
|
|
114
116
|
private acquireAudioContext;
|
115
117
|
private getOrCreateParticipant;
|
116
118
|
private sendSyncState;
|
119
|
+
/**
|
120
|
+
* After resuming, we'll need to notify the server of the current
|
121
|
+
* subscription settings.
|
122
|
+
*/
|
123
|
+
private updateSubscriptions;
|
117
124
|
/** @internal */
|
118
125
|
emit(event: string | symbol, ...args: any[]): boolean;
|
119
126
|
}
|
package/dist/room/Room.js
CHANGED
@@ -44,6 +44,7 @@ const LocalParticipant_1 = __importDefault(require("./participant/LocalParticipa
|
|
44
44
|
const RemoteParticipant_1 = __importDefault(require("./participant/RemoteParticipant"));
|
45
45
|
const RTCEngine_1 = __importStar(require("./RTCEngine"));
|
46
46
|
const defaults_1 = require("./track/defaults");
|
47
|
+
const RemoteTrackPublication_1 = __importDefault(require("./track/RemoteTrackPublication"));
|
47
48
|
const Track_1 = require("./track/Track");
|
48
49
|
const utils_1 = require("./utils");
|
49
50
|
var RoomState;
|
@@ -179,10 +180,42 @@ class Room extends events_1.EventEmitter {
|
|
179
180
|
this.onBeforeUnload = () => {
|
180
181
|
this.disconnect();
|
181
182
|
};
|
183
|
+
this.handleRestarting = () => {
|
184
|
+
this.state = RoomState.Reconnecting;
|
185
|
+
this.emit(events_2.RoomEvent.Reconnecting);
|
186
|
+
// also unwind existing participants & existing subscriptions
|
187
|
+
for (const p of this.participants.values()) {
|
188
|
+
this.handleParticipantDisconnected(p.sid, p);
|
189
|
+
}
|
190
|
+
};
|
191
|
+
this.handleRestarted = (joinResponse) => __awaiter(this, void 0, void 0, function* () {
|
192
|
+
this.state = RoomState.Connected;
|
193
|
+
this.emit(events_2.RoomEvent.Reconnected);
|
194
|
+
// rehydrate participants
|
195
|
+
if (joinResponse.participant) {
|
196
|
+
// with a restart, the sid will have changed, we'll map our understanding to it
|
197
|
+
this.localParticipant.sid = joinResponse.participant.sid;
|
198
|
+
this.handleParticipantUpdates([joinResponse.participant]);
|
199
|
+
}
|
200
|
+
this.handleParticipantUpdates(joinResponse.otherParticipants);
|
201
|
+
// unpublish & republish tracks
|
202
|
+
const localPubs = [];
|
203
|
+
this.localParticipant.tracks.forEach((pub) => {
|
204
|
+
if (pub.track) {
|
205
|
+
localPubs.push(pub);
|
206
|
+
}
|
207
|
+
});
|
208
|
+
yield Promise.all(localPubs.map((pub) => __awaiter(this, void 0, void 0, function* () {
|
209
|
+
const track = pub.track;
|
210
|
+
this.localParticipant.unpublishTrack(track, false);
|
211
|
+
this.localParticipant.publishTrack(track, pub.options);
|
212
|
+
})));
|
213
|
+
});
|
182
214
|
this.handleParticipantUpdates = (participantInfos) => {
|
183
215
|
// handle changes to participant state, and send events
|
184
216
|
participantInfos.forEach((info) => {
|
185
|
-
if (info.sid === this.localParticipant.sid
|
217
|
+
if (info.sid === this.localParticipant.sid
|
218
|
+
|| info.identity === this.localParticipant.identity) {
|
186
219
|
this.localParticipant.updateInfo(info);
|
187
220
|
return;
|
188
221
|
}
|
@@ -347,33 +380,38 @@ class Room extends events_1.EventEmitter {
|
|
347
380
|
return;
|
348
381
|
}
|
349
382
|
this.engine = new RTCEngine_1.default();
|
350
|
-
this.engine.
|
351
|
-
this.onTrackAdded(mediaTrack, stream, receiver);
|
352
|
-
});
|
353
|
-
this.engine.on(events_2.EngineEvent.Disconnected, () => {
|
354
|
-
this.handleDisconnect();
|
355
|
-
});
|
383
|
+
this.engine.client.signalLatency = this.options.expSignalLatency;
|
356
384
|
this.engine.client.onParticipantUpdate = this.handleParticipantUpdates;
|
357
385
|
this.engine.client.onRoomUpdate = this.handleRoomUpdate;
|
358
386
|
this.engine.client.onSpeakersChanged = this.handleSpeakersChanged;
|
359
387
|
this.engine.client.onStreamStateUpdate = this.handleStreamStateUpdate;
|
360
388
|
this.engine.client.onSubscriptionPermissionUpdate = this.handleSubscriptionPermissionUpdate;
|
361
|
-
this.engine.
|
362
|
-
this.engine
|
363
|
-
|
389
|
+
this.engine.client.onConnectionQuality = this.handleConnectionQualityUpdate;
|
390
|
+
this.engine
|
391
|
+
.on(events_2.EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {
|
392
|
+
this.onTrackAdded(mediaTrack, stream, receiver);
|
393
|
+
})
|
394
|
+
.on(events_2.EngineEvent.Disconnected, () => {
|
395
|
+
this.handleDisconnect();
|
396
|
+
})
|
397
|
+
.on(events_2.EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate)
|
398
|
+
.on(events_2.EngineEvent.DataPacketReceived, this.handleDataPacket)
|
399
|
+
.on(events_2.EngineEvent.Resuming, () => {
|
364
400
|
this.state = RoomState.Reconnecting;
|
365
401
|
this.emit(events_2.RoomEvent.Reconnecting);
|
366
|
-
})
|
367
|
-
|
402
|
+
})
|
403
|
+
.on(events_2.EngineEvent.Resumed, () => {
|
368
404
|
this.state = RoomState.Connected;
|
369
405
|
this.emit(events_2.RoomEvent.Reconnected);
|
370
|
-
|
371
|
-
|
406
|
+
this.updateSubscriptions();
|
407
|
+
})
|
408
|
+
.on(events_2.EngineEvent.SignalResumed, () => {
|
372
409
|
if (this.state === RoomState.Reconnecting) {
|
373
410
|
this.sendSyncState();
|
374
411
|
}
|
375
|
-
})
|
376
|
-
|
412
|
+
})
|
413
|
+
.on(events_2.EngineEvent.Restarting, this.handleRestarting)
|
414
|
+
.on(events_2.EngineEvent.Restarted, this.handleRestarted);
|
377
415
|
}
|
378
416
|
/**
|
379
417
|
* getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.
|
@@ -397,6 +435,9 @@ class Room extends events_1.EventEmitter {
|
|
397
435
|
return p;
|
398
436
|
}
|
399
437
|
}
|
438
|
+
if (this.localParticipant.identity === identity) {
|
439
|
+
return this.localParticipant;
|
440
|
+
}
|
400
441
|
}
|
401
442
|
/**
|
402
443
|
* @internal for testing
|
@@ -662,6 +703,19 @@ class Room extends events_1.EventEmitter {
|
|
662
703
|
publishTracks: this.localParticipant.publishedTracksInfo(),
|
663
704
|
});
|
664
705
|
}
|
706
|
+
/**
|
707
|
+
* After resuming, we'll need to notify the server of the current
|
708
|
+
* subscription settings.
|
709
|
+
*/
|
710
|
+
updateSubscriptions() {
|
711
|
+
for (const p of this.participants.values()) {
|
712
|
+
for (const pub of p.videoTracks.values()) {
|
713
|
+
if (pub.isSubscribed && pub instanceof RemoteTrackPublication_1.default) {
|
714
|
+
pub.emitTrackUpdate();
|
715
|
+
}
|
716
|
+
}
|
717
|
+
}
|
718
|
+
}
|
665
719
|
/** @internal */
|
666
720
|
emit(event, ...args) {
|
667
721
|
logger_1.default.debug('room event', event, ...args);
|