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.
Files changed (90) hide show
  1. package/dist/api/SignalClient.d.ts +6 -3
  2. package/dist/api/SignalClient.js +70 -28
  3. package/dist/api/SignalClient.js.map +1 -1
  4. package/dist/options.d.ts +5 -0
  5. package/dist/proto/livekit_models.d.ts +30 -0
  6. package/dist/proto/livekit_models.js +219 -1
  7. package/dist/proto/livekit_models.js.map +1 -1
  8. package/dist/proto/livekit_rtc.d.ts +15 -10
  9. package/dist/proto/livekit_rtc.js +36 -22
  10. package/dist/proto/livekit_rtc.js.map +1 -1
  11. package/dist/room/RTCEngine.d.ts +11 -2
  12. package/dist/room/RTCEngine.js +196 -44
  13. package/dist/room/RTCEngine.js.map +1 -1
  14. package/dist/room/Room.d.ts +7 -0
  15. package/dist/room/Room.js +70 -16
  16. package/dist/room/Room.js.map +1 -1
  17. package/dist/room/events.d.ts +5 -3
  18. package/dist/room/events.js +5 -3
  19. package/dist/room/events.js.map +1 -1
  20. package/dist/room/participant/LocalParticipant.d.ts +1 -2
  21. package/dist/room/participant/LocalParticipant.js +7 -6
  22. package/dist/room/participant/LocalParticipant.js.map +1 -1
  23. package/dist/room/participant/RemoteParticipant.js +3 -0
  24. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  25. package/dist/room/participant/publishUtils.js +1 -1
  26. package/dist/room/participant/publishUtils.js.map +1 -1
  27. package/dist/room/participant/publishUtils.test.js +9 -0
  28. package/dist/room/participant/publishUtils.test.js.map +1 -1
  29. package/dist/room/track/LocalTrackPublication.d.ts +2 -0
  30. package/dist/room/track/LocalTrackPublication.js.map +1 -1
  31. package/dist/room/track/RemoteTrackPublication.d.ts +2 -1
  32. package/dist/room/track/RemoteTrackPublication.js +22 -8
  33. package/dist/room/track/RemoteTrackPublication.js.map +1 -1
  34. package/dist/room/track/RemoteVideoTrack.js +12 -7
  35. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  36. package/dist/room/track/Track.js +28 -20
  37. package/dist/room/track/Track.js.map +1 -1
  38. package/dist/room/track/create.js +5 -0
  39. package/dist/room/track/create.js.map +1 -1
  40. package/dist/room/utils.d.ts +3 -0
  41. package/dist/room/utils.js +16 -1
  42. package/dist/room/utils.js.map +1 -1
  43. package/dist/version.d.ts +2 -2
  44. package/dist/version.js +2 -2
  45. package/package.json +3 -3
  46. package/src/api/SignalClient.ts +444 -0
  47. package/src/connect.ts +100 -0
  48. package/src/index.ts +47 -0
  49. package/src/logger.ts +22 -0
  50. package/src/options.ts +152 -0
  51. package/src/proto/livekit_models.ts +1863 -0
  52. package/src/proto/livekit_rtc.ts +3415 -0
  53. package/src/room/DeviceManager.ts +57 -0
  54. package/src/room/PCTransport.ts +86 -0
  55. package/src/room/RTCEngine.ts +598 -0
  56. package/src/room/Room.ts +840 -0
  57. package/src/room/errors.ts +65 -0
  58. package/src/room/events.ts +398 -0
  59. package/src/room/participant/LocalParticipant.ts +685 -0
  60. package/src/room/participant/Participant.ts +214 -0
  61. package/src/room/participant/ParticipantTrackPermission.ts +32 -0
  62. package/src/room/participant/RemoteParticipant.ts +241 -0
  63. package/src/room/participant/publishUtils.test.ts +105 -0
  64. package/src/room/participant/publishUtils.ts +180 -0
  65. package/src/room/stats.ts +130 -0
  66. package/src/room/track/LocalAudioTrack.ts +112 -0
  67. package/src/room/track/LocalTrack.ts +124 -0
  68. package/src/room/track/LocalTrackPublication.ts +66 -0
  69. package/src/room/track/LocalVideoTrack.test.ts +70 -0
  70. package/src/room/track/LocalVideoTrack.ts +416 -0
  71. package/src/room/track/RemoteAudioTrack.ts +58 -0
  72. package/src/room/track/RemoteTrack.ts +59 -0
  73. package/src/room/track/RemoteTrackPublication.ts +198 -0
  74. package/src/room/track/RemoteVideoTrack.ts +220 -0
  75. package/src/room/track/Track.ts +307 -0
  76. package/src/room/track/TrackPublication.ts +120 -0
  77. package/src/room/track/create.ts +120 -0
  78. package/src/room/track/defaults.ts +23 -0
  79. package/src/room/track/options.ts +229 -0
  80. package/src/room/track/types.ts +8 -0
  81. package/src/room/track/utils.test.ts +93 -0
  82. package/src/room/track/utils.ts +76 -0
  83. package/src/room/utils.ts +62 -0
  84. package/src/version.ts +2 -0
  85. package/.github/workflows/publish.yaml +0 -55
  86. package/.github/workflows/test.yaml +0 -36
  87. package/example/index.html +0 -247
  88. package/example/sample.ts +0 -632
  89. package/example/styles.css +0 -144
  90. package/example/webpack.config.js +0 -33
@@ -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 = 5;
28
- exports.maxICEConnectTimeout = 5 * 1000;
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.iceConnected = false;
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 >= maxReconnectRetries) {
88
- logger_1.default.info('could not connect to signal after', maxReconnectRetries, 'attempts. giving up');
89
- this.emit(events_2.EngineEvent.Disconnected);
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.reconnect()
96
- .then(() => {
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
- .catch(this.handleDisconnect);
100
- }, delay);
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
- yield this.negotiate();
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.oniceconnectionstatechange = () => {
204
- if (primaryPC.iceConnectionState === 'connected') {
205
- logger_1.default.trace('ICE connected');
206
- if (!this.iceConnected) {
207
- this.iceConnected = true;
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
- else if (primaryPC.iceConnectionState === 'disconnected' || primaryPC.iceConnectionState === 'failed') {
212
- logger_1.default.trace('ICE disconnected');
213
- if (this.iceConnected) {
214
- this.iceConnected = false;
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
- this.emit(events_2.EngineEvent.Disconnected);
281
- this.close();
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
- reconnect() {
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
- throw new errors_1.ConnectionError('could not reconnect, url or token not saved');
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 to signal connection, attempt', this.reconnectAttempts);
358
+ logger_1.default.info('reconnecting, attempt', this.reconnectAttempts);
293
359
  if (this.reconnectAttempts === 0) {
294
- this.emit(events_2.EngineEvent.Reconnecting);
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
- while ((new Date()).getTime() - startTime < exports.maxICEConnectTimeout * 2) {
310
- if (this.iceConnected) {
311
- // reconnect success
312
- this.emit(events_2.EngineEvent.Reconnected);
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 ICE connection');
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"}
@@ -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.on(events_2.EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {
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.on(events_2.EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate);
362
- this.engine.on(events_2.EngineEvent.DataPacketReceived, this.handleDataPacket);
363
- this.engine.on(events_2.EngineEvent.Reconnecting, () => {
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
- this.engine.on(events_2.EngineEvent.Reconnected, () => {
402
+ })
403
+ .on(events_2.EngineEvent.Resumed, () => {
368
404
  this.state = RoomState.Connected;
369
405
  this.emit(events_2.RoomEvent.Reconnected);
370
- });
371
- this.engine.on(events_2.EngineEvent.SignalConnected, () => {
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
- this.engine.client.onConnectionQuality = this.handleConnectionQualityUpdate;
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);