livekit-client 0.15.0 → 0.15.4

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 (136) hide show
  1. package/.gitmodules +3 -0
  2. package/README.md +21 -4
  3. package/dist/api/SignalClient.d.ts +11 -2
  4. package/dist/api/SignalClient.js +92 -25
  5. package/dist/api/SignalClient.js.map +1 -1
  6. package/dist/connect.js +3 -0
  7. package/dist/connect.js.map +1 -1
  8. package/dist/index.d.ts +5 -2
  9. package/dist/index.js +6 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/logger.js +1 -0
  12. package/dist/logger.js.map +1 -1
  13. package/dist/options.d.ts +28 -14
  14. package/dist/proto/livekit_models.d.ts +48 -0
  15. package/dist/proto/livekit_models.js +367 -5
  16. package/dist/proto/livekit_models.js.map +1 -1
  17. package/dist/proto/livekit_rtc.d.ts +100 -1
  18. package/dist/proto/livekit_rtc.js +745 -3
  19. package/dist/proto/livekit_rtc.js.map +1 -1
  20. package/dist/room/PCTransport.js +4 -0
  21. package/dist/room/PCTransport.js.map +1 -1
  22. package/dist/room/RTCEngine.d.ts +4 -0
  23. package/dist/room/RTCEngine.js +73 -34
  24. package/dist/room/RTCEngine.js.map +1 -1
  25. package/dist/room/Room.d.ts +15 -0
  26. package/dist/room/Room.js +172 -59
  27. package/dist/room/Room.js.map +1 -1
  28. package/dist/room/events.d.ts +60 -24
  29. package/dist/room/events.js +58 -22
  30. package/dist/room/events.js.map +1 -1
  31. package/dist/room/participant/LocalParticipant.d.ts +26 -2
  32. package/dist/room/participant/LocalParticipant.js +69 -21
  33. package/dist/room/participant/LocalParticipant.js.map +1 -1
  34. package/dist/room/participant/Participant.d.ts +3 -1
  35. package/dist/room/participant/Participant.js +1 -0
  36. package/dist/room/participant/Participant.js.map +1 -1
  37. package/dist/room/participant/ParticipantTrackPermission.d.ts +19 -0
  38. package/dist/room/participant/ParticipantTrackPermission.js +16 -0
  39. package/dist/room/participant/ParticipantTrackPermission.js.map +1 -0
  40. package/dist/room/participant/RemoteParticipant.d.ts +2 -2
  41. package/dist/room/participant/RemoteParticipant.js +9 -15
  42. package/dist/room/participant/RemoteParticipant.js.map +1 -1
  43. package/dist/room/participant/publishUtils.d.ts +1 -1
  44. package/dist/room/participant/publishUtils.js +4 -4
  45. package/dist/room/participant/publishUtils.js.map +1 -1
  46. package/dist/room/participant/publishUtils.test.js +10 -1
  47. package/dist/room/participant/publishUtils.test.js.map +1 -1
  48. package/dist/room/stats.d.ts +21 -6
  49. package/dist/room/stats.js +22 -1
  50. package/dist/room/stats.js.map +1 -1
  51. package/dist/room/track/LocalAudioTrack.d.ts +5 -1
  52. package/dist/room/track/LocalAudioTrack.js +45 -1
  53. package/dist/room/track/LocalAudioTrack.js.map +1 -1
  54. package/dist/room/track/LocalTrack.js +1 -1
  55. package/dist/room/track/LocalTrack.js.map +1 -1
  56. package/dist/room/track/LocalTrackPublication.d.ts +3 -1
  57. package/dist/room/track/LocalTrackPublication.js +15 -5
  58. package/dist/room/track/LocalTrackPublication.js.map +1 -1
  59. package/dist/room/track/LocalVideoTrack.d.ts +8 -1
  60. package/dist/room/track/LocalVideoTrack.js +117 -52
  61. package/dist/room/track/LocalVideoTrack.js.map +1 -1
  62. package/dist/room/track/RemoteAudioTrack.d.ts +6 -8
  63. package/dist/room/track/RemoteAudioTrack.js +55 -19
  64. package/dist/room/track/RemoteAudioTrack.js.map +1 -1
  65. package/dist/room/track/RemoteTrack.d.ts +14 -0
  66. package/dist/room/track/RemoteTrack.js +47 -0
  67. package/dist/room/track/RemoteTrack.js.map +1 -0
  68. package/dist/room/track/RemoteTrackPublication.d.ts +10 -2
  69. package/dist/room/track/RemoteTrackPublication.js +49 -16
  70. package/dist/room/track/RemoteTrackPublication.js.map +1 -1
  71. package/dist/room/track/RemoteVideoTrack.d.ts +7 -7
  72. package/dist/room/track/RemoteVideoTrack.js +66 -22
  73. package/dist/room/track/RemoteVideoTrack.js.map +1 -1
  74. package/dist/room/track/Track.d.ts +12 -0
  75. package/dist/room/track/Track.js +33 -0
  76. package/dist/room/track/Track.js.map +1 -1
  77. package/dist/room/track/TrackPublication.d.ts +14 -1
  78. package/dist/room/track/TrackPublication.js +24 -7
  79. package/dist/room/track/TrackPublication.js.map +1 -1
  80. package/dist/room/track/create.d.ts +23 -0
  81. package/dist/room/track/create.js +130 -0
  82. package/dist/room/track/create.js.map +1 -0
  83. package/dist/room/track/defaults.d.ts +4 -0
  84. package/dist/room/track/defaults.js +21 -0
  85. package/dist/room/track/defaults.js.map +1 -0
  86. package/dist/room/utils.d.ts +3 -1
  87. package/dist/room/utils.js +36 -6
  88. package/dist/room/utils.js.map +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/package.json +5 -3
  92. package/src/api/SignalClient.ts +434 -0
  93. package/src/connect.ts +100 -0
  94. package/src/index.ts +47 -0
  95. package/src/logger.ts +22 -0
  96. package/src/options.ts +152 -0
  97. package/src/proto/livekit_models.ts +1863 -0
  98. package/src/proto/livekit_rtc.ts +3401 -0
  99. package/src/room/DeviceManager.ts +57 -0
  100. package/src/room/PCTransport.ts +86 -0
  101. package/src/room/RTCEngine.ts +484 -0
  102. package/src/room/Room.ts +785 -0
  103. package/src/room/errors.ts +65 -0
  104. package/src/room/events.ts +396 -0
  105. package/src/room/participant/LocalParticipant.ts +685 -0
  106. package/src/room/participant/Participant.ts +214 -0
  107. package/src/room/participant/ParticipantTrackPermission.ts +32 -0
  108. package/src/room/participant/RemoteParticipant.ts +238 -0
  109. package/src/room/participant/publishUtils.test.ts +105 -0
  110. package/src/room/participant/publishUtils.ts +180 -0
  111. package/src/room/stats.ts +130 -0
  112. package/src/room/track/LocalAudioTrack.ts +112 -0
  113. package/src/room/track/LocalTrack.ts +124 -0
  114. package/src/room/track/LocalTrackPublication.ts +63 -0
  115. package/src/room/track/LocalVideoTrack.test.ts +70 -0
  116. package/src/room/track/LocalVideoTrack.ts +416 -0
  117. package/src/room/track/RemoteAudioTrack.ts +58 -0
  118. package/src/room/track/RemoteTrack.ts +59 -0
  119. package/src/room/track/RemoteTrackPublication.ts +192 -0
  120. package/src/room/track/RemoteVideoTrack.ts +213 -0
  121. package/src/room/track/Track.ts +301 -0
  122. package/src/room/track/TrackPublication.ts +120 -0
  123. package/src/room/track/create.ts +120 -0
  124. package/src/room/track/defaults.ts +23 -0
  125. package/src/room/track/options.ts +229 -0
  126. package/src/room/track/types.ts +8 -0
  127. package/src/room/track/utils.test.ts +93 -0
  128. package/src/room/track/utils.ts +76 -0
  129. package/src/room/utils.ts +74 -0
  130. package/src/version.ts +2 -0
  131. package/.github/workflows/publish.yaml +0 -55
  132. package/.github/workflows/test.yaml +0 -36
  133. package/example/index.html +0 -237
  134. package/example/sample.ts +0 -575
  135. package/example/styles.css +0 -144
  136. package/example/webpack.config.js +0 -33
@@ -86,8 +86,8 @@ class RTCEngine extends events_1.EventEmitter {
86
86
  logger_1.default.debug(`${connection} disconnected`);
87
87
  if (this.reconnectAttempts >= maxReconnectRetries) {
88
88
  logger_1.default.info('could not connect to signal after', maxReconnectRetries, 'attempts. giving up');
89
- this.close();
90
89
  this.emit(events_2.EngineEvent.Disconnected);
90
+ this.close();
91
91
  return;
92
92
  }
93
93
  const delay = (this.reconnectAttempts * this.reconnectAttempts) * 300;
@@ -106,6 +106,7 @@ class RTCEngine extends events_1.EventEmitter {
106
106
  this.url = url;
107
107
  this.token = token;
108
108
  const joinResponse = yield this.client.join(url, token, opts);
109
+ this.emit(events_2.EngineEvent.SignalConnected);
109
110
  this.isClosed = false;
110
111
  this.subscriberPrimary = joinResponse.subscriberPrimary;
111
112
  if (!this.publisher) {
@@ -113,7 +114,7 @@ class RTCEngine extends events_1.EventEmitter {
113
114
  }
114
115
  // create offer
115
116
  if (!this.subscriberPrimary) {
116
- yield this.negotiate();
117
+ this.negotiate();
117
118
  }
118
119
  return joinResponse;
119
120
  });
@@ -152,6 +153,13 @@ class RTCEngine extends events_1.EventEmitter {
152
153
  updateMuteStatus(trackSid, muted) {
153
154
  this.client.sendMuteTrack(trackSid, muted);
154
155
  }
156
+ get dataSubscriberReadyState() {
157
+ var _a;
158
+ return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;
159
+ }
160
+ get connectedServerAddress() {
161
+ return this.connectedServerAddr;
162
+ }
155
163
  configure(joinResponse) {
156
164
  // already configured
157
165
  if (this.publisher || this.subscriber) {
@@ -202,8 +210,12 @@ class RTCEngine extends events_1.EventEmitter {
202
210
  this.iceConnected = true;
203
211
  this.emit(events_2.EngineEvent.Connected);
204
212
  }
213
+ getConnectedAddress(primaryPC).then((v) => {
214
+ this.connectedServerAddr = v;
215
+ });
205
216
  }
206
217
  else if (primaryPC.iceConnectionState === 'failed') {
218
+ // on Safari, PeerConnection will switch to 'disconnected' during renegotiation
207
219
  logger_1.default.trace('ICE disconnected');
208
220
  if (this.iceConnected) {
209
221
  this.iceConnected = false;
@@ -259,10 +271,8 @@ class RTCEngine extends events_1.EventEmitter {
259
271
  yield this.subscriber.pc.setLocalDescription(answer);
260
272
  this.client.sendAnswer(answer);
261
273
  });
262
- this.client.onParticipantUpdate = (updates) => {
263
- this.emit(events_2.EngineEvent.ParticipantUpdate, updates);
264
- };
265
274
  this.client.onLocalTrackPublished = (res) => {
275
+ logger_1.default.debug('received trackPublishedResponse', res);
266
276
  const resolve = this.pendingTrackResolvers[res.cid];
267
277
  if (!resolve) {
268
278
  logger_1.default.error('missing track resolver for ', res.cid);
@@ -271,24 +281,12 @@ class RTCEngine extends events_1.EventEmitter {
271
281
  delete this.pendingTrackResolvers[res.cid];
272
282
  resolve(res.track);
273
283
  };
274
- this.client.onSpeakersChanged = (speakers) => {
275
- this.emit(events_2.EngineEvent.SpeakersChanged, speakers);
276
- };
277
284
  this.client.onClose = () => {
278
285
  this.handleDisconnect('signal');
279
286
  };
280
287
  this.client.onLeave = () => {
281
- this.close();
282
288
  this.emit(events_2.EngineEvent.Disconnected);
283
- };
284
- this.client.onRemoteMuteChanged = (trackSid, muted) => {
285
- this.emit(events_2.EngineEvent.RemoteMuteChanged, trackSid, muted);
286
- };
287
- this.client.onRoomUpdate = (room) => {
288
- this.emit(events_2.EngineEvent.RoomUpdate, room);
289
- };
290
- this.client.onConnectionQuality = (update) => {
291
- this.emit(events_2.EngineEvent.ConnectionQualityUpdate, update);
289
+ this.close();
292
290
  };
293
291
  }
294
292
  reconnect() {
@@ -305,6 +303,7 @@ class RTCEngine extends events_1.EventEmitter {
305
303
  }
306
304
  this.reconnectAttempts += 1;
307
305
  yield this.client.reconnect(this.url, this.token);
306
+ this.emit(events_2.EngineEvent.SignalConnected);
308
307
  // trigger publisher reconnect
309
308
  if (!this.publisher || !this.subscriber) {
310
309
  throw new errors_1.UnexpectedConnectionState('publisher and subscriber connections unset');
@@ -342,34 +341,31 @@ class RTCEngine extends events_1.EventEmitter {
342
341
  });
343
342
  }
344
343
  ensurePublisherConnected(kind) {
345
- var _a;
344
+ var _a, _b;
346
345
  return __awaiter(this, void 0, void 0, function* () {
347
346
  if (!this.subscriberPrimary) {
348
347
  return;
349
348
  }
350
- if (this.publisher && this.publisher.isICEConnected) {
349
+ if (!this.publisher) {
350
+ throw new errors_1.ConnectionError('publisher connection not set');
351
+ }
352
+ if (!this.publisher.isICEConnected && this.publisher.pc.iceConnectionState !== 'checking') {
353
+ // start negotiation
354
+ this.negotiate();
355
+ }
356
+ const targetChannel = this.dataChannelForKind(kind);
357
+ if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {
351
358
  return;
352
359
  }
353
- // start negotiation
354
- this.negotiate();
355
360
  // wait until publisher ICE connected
356
361
  const endTime = (new Date()).getTime() + exports.maxICEConnectTimeout;
357
362
  while ((new Date()).getTime() < endTime) {
358
- if (this.publisher && this.publisher.isICEConnected) {
359
- let status = 'connecting';
360
- if (kind === livekit_models_1.DataPacket_Kind.LOSSY && this.lossyDC) {
361
- status = this.lossyDC.readyState;
362
- }
363
- else if (kind === livekit_models_1.DataPacket_Kind.RELIABLE && this.reliableDC) {
364
- status = this.reliableDC.readyState;
365
- }
366
- if (status === 'open') {
367
- return;
368
- }
363
+ if (this.publisher.isICEConnected && ((_a = this.dataChannelForKind(kind)) === null || _a === void 0 ? void 0 : _a.readyState) === 'open') {
364
+ return;
369
365
  }
370
366
  yield utils_1.sleep(50);
371
367
  }
372
- throw new errors_1.ConnectionError(`could not establish publisher connection, state ${(_a = this.publisher) === null || _a === void 0 ? void 0 : _a.pc.iceConnectionState}`);
368
+ throw new errors_1.ConnectionError(`could not establish publisher connection, state ${(_b = this.publisher) === null || _b === void 0 ? void 0 : _b.pc.iceConnectionState}`);
373
369
  });
374
370
  }
375
371
  /** @internal */
@@ -380,6 +376,49 @@ class RTCEngine extends events_1.EventEmitter {
380
376
  this.hasPublished = true;
381
377
  this.publisher.negotiate();
382
378
  }
379
+ dataChannelForKind(kind) {
380
+ if (kind === livekit_models_1.DataPacket_Kind.LOSSY) {
381
+ return this.lossyDC;
382
+ }
383
+ if (kind === livekit_models_1.DataPacket_Kind.RELIABLE) {
384
+ return this.reliableDC;
385
+ }
386
+ }
383
387
  }
384
388
  exports.default = RTCEngine;
389
+ function getConnectedAddress(pc) {
390
+ var _a;
391
+ return __awaiter(this, void 0, void 0, function* () {
392
+ let selectedCandidatePairId = '';
393
+ const candidatePairs = new Map();
394
+ // id -> candidate ip
395
+ const candidates = new Map();
396
+ const stats = yield pc.getStats();
397
+ stats.forEach((v) => {
398
+ switch (v.type) {
399
+ case 'transport':
400
+ selectedCandidatePairId = v.selectedCandidatePairId;
401
+ break;
402
+ case 'candidate-pair':
403
+ if (selectedCandidatePairId === '' && v.selected) {
404
+ selectedCandidatePairId = v.id;
405
+ }
406
+ candidatePairs.set(v.id, v);
407
+ break;
408
+ case 'remote-candidate':
409
+ candidates.set(v.id, `${v.address}:${v.port}`);
410
+ break;
411
+ default:
412
+ }
413
+ });
414
+ if (selectedCandidatePairId === '') {
415
+ return undefined;
416
+ }
417
+ const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;
418
+ if (selectedID === undefined) {
419
+ return undefined;
420
+ }
421
+ return candidates.get(selectedID);
422
+ });
423
+ }
385
424
  //# 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":"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"}
@@ -39,6 +39,8 @@ declare class Room extends EventEmitter {
39
39
  metadata: string | undefined;
40
40
  /** options of room */
41
41
  options: RoomOptions;
42
+ /** connect options of room */
43
+ private connOptions?;
42
44
  private audioEnabled;
43
45
  private audioContext?;
44
46
  /**
@@ -61,6 +63,16 @@ declare class Room extends EventEmitter {
61
63
  * disconnects the room, emits [[RoomEvent.Disconnected]]
62
64
  */
63
65
  disconnect: (stopTracks?: boolean) => void;
66
+ /**
67
+ * retrieves a participant by identity
68
+ * @param identity
69
+ * @returns
70
+ */
71
+ getParticipantByIdentity(identity: string): Participant | undefined;
72
+ /**
73
+ * @internal for testing
74
+ */
75
+ simulateScenario(scenario: string): void;
64
76
  private onBeforeUnload;
65
77
  /**
66
78
  * Browsers have different policies regarding audio playback. Most requiring
@@ -91,6 +103,8 @@ declare class Room extends EventEmitter {
91
103
  private handleParticipantDisconnected;
92
104
  private handleActiveSpeakersUpdate;
93
105
  private handleSpeakersChanged;
106
+ private handleStreamStateUpdate;
107
+ private handleSubscriptionPermissionUpdate;
94
108
  private handleDataPacket;
95
109
  private handleAudioPlaybackStarted;
96
110
  private handleAudioPlaybackFailed;
@@ -99,6 +113,7 @@ declare class Room extends EventEmitter {
99
113
  private handleConnectionQualityUpdate;
100
114
  private acquireAudioContext;
101
115
  private getOrCreateParticipant;
116
+ private sendSyncState;
102
117
  /** @internal */
103
118
  emit(event: string | symbol, ...args: any[]): boolean;
104
119
  }
package/dist/room/Room.js CHANGED
@@ -33,15 +33,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
34
  exports.RoomState = void 0;
35
35
  const events_1 = require("events");
36
+ const SignalClient_1 = require("../api/SignalClient");
36
37
  const logger_1 = __importDefault(require("../logger"));
37
38
  const livekit_models_1 = require("../proto/livekit_models");
39
+ const livekit_rtc_1 = require("../proto/livekit_rtc");
38
40
  const DeviceManager_1 = __importDefault(require("./DeviceManager"));
39
41
  const errors_1 = require("./errors");
40
42
  const events_2 = require("./events");
41
43
  const LocalParticipant_1 = __importDefault(require("./participant/LocalParticipant"));
42
44
  const RemoteParticipant_1 = __importDefault(require("./participant/RemoteParticipant"));
43
45
  const RTCEngine_1 = __importStar(require("./RTCEngine"));
44
- const options_1 = require("./track/options");
46
+ const defaults_1 = require("./track/defaults");
45
47
  const Track_1 = require("./track/Track");
46
48
  const utils_1 = require("./utils");
47
49
  var RoomState;
@@ -50,22 +52,6 @@ var RoomState;
50
52
  RoomState["Connected"] = "connected";
51
53
  RoomState["Reconnecting"] = "reconnecting";
52
54
  })(RoomState = exports.RoomState || (exports.RoomState = {}));
53
- const publishDefaults = {
54
- audioBitrate: options_1.AudioPresets.speech.maxBitrate,
55
- dtx: true,
56
- simulcast: true,
57
- screenShareEncoding: options_1.ScreenSharePresets.hd_15.encoding,
58
- stopMicTrackOnMute: false,
59
- };
60
- const audioDefaults = {
61
- autoGainControl: true,
62
- channelCount: 1,
63
- echoCancellation: true,
64
- noiseSuppression: true,
65
- };
66
- const videoDefaults = {
67
- resolution: options_1.VideoPresets.qhd.resolution,
68
- };
69
55
  /**
70
56
  * In LiveKit, a room is the logical grouping for a list of participants.
71
57
  * Participants in a room can publish tracks, and subscribe to others' tracks.
@@ -107,12 +93,18 @@ class Room extends events_1.EventEmitter {
107
93
  if (opts === null || opts === void 0 ? void 0 : opts.rtcConfig) {
108
94
  this.engine.rtcConfig = opts.rtcConfig;
109
95
  }
96
+ this.connOptions = opts;
110
97
  try {
111
98
  const joinResponse = yield this.engine.join(url, token, opts);
112
99
  logger_1.default.debug('connected to Livekit Server', joinResponse.serverVersion);
113
100
  if (!joinResponse.serverVersion) {
114
101
  throw new errors_1.UnsupportedServer('unknown server version');
115
102
  }
103
+ if (joinResponse.serverVersion === '0.15.1' && this.options.dynacast) {
104
+ logger_1.default.debug('disabling dynacast due to server version');
105
+ // dynacast has a bug in 0.15.1, so we cannot use it then
106
+ this.options.dynacast = false;
107
+ }
116
108
  this.state = RoomState.Connected;
117
109
  const pi = joinResponse.participant;
118
110
  this.localParticipant = new LocalParticipant_1.default(pi.sid, pi.identity, this.engine, this.options);
@@ -149,6 +141,7 @@ class Room extends events_1.EventEmitter {
149
141
  });
150
142
  this.name = joinResponse.room.name;
151
143
  this.sid = joinResponse.room.sid;
144
+ this.metadata = joinResponse.room.metadata;
152
145
  }
153
146
  catch (err) {
154
147
  this.engine.close();
@@ -175,8 +168,10 @@ class Room extends events_1.EventEmitter {
175
168
  */
176
169
  this.disconnect = (stopTracks = true) => {
177
170
  // send leave
178
- this.engine.client.sendLeave();
179
- this.engine.close();
171
+ if (this.engine) {
172
+ this.engine.client.sendLeave();
173
+ this.engine.close();
174
+ }
180
175
  this.handleDisconnect(stopTracks);
181
176
  /* @ts-ignore */
182
177
  this.engine = undefined;
@@ -184,6 +179,31 @@ class Room extends events_1.EventEmitter {
184
179
  this.onBeforeUnload = () => {
185
180
  this.disconnect();
186
181
  };
182
+ this.handleParticipantUpdates = (participantInfos) => {
183
+ // handle changes to participant state, and send events
184
+ participantInfos.forEach((info) => {
185
+ if (info.sid === this.localParticipant.sid) {
186
+ this.localParticipant.updateInfo(info);
187
+ return;
188
+ }
189
+ let remoteParticipant = this.participants.get(info.sid);
190
+ const isNewParticipant = !remoteParticipant;
191
+ // create participant if doesn't exist
192
+ remoteParticipant = this.getOrCreateParticipant(info.sid, info);
193
+ // when it's disconnected, send updates
194
+ if (info.state === livekit_models_1.ParticipantInfo_State.DISCONNECTED) {
195
+ this.handleParticipantDisconnected(info.sid, remoteParticipant);
196
+ }
197
+ else if (isNewParticipant) {
198
+ // fire connected event
199
+ this.emit(events_2.RoomEvent.ParticipantConnected, remoteParticipant);
200
+ }
201
+ else {
202
+ // just update, no events
203
+ remoteParticipant.updateInfo(info);
204
+ }
205
+ });
206
+ };
187
207
  // updates are sent only when there's a change to speaker ordering
188
208
  this.handleActiveSpeakersUpdate = (speakers) => {
189
209
  const activeSpeakers = [];
@@ -245,6 +265,34 @@ class Room extends events_1.EventEmitter {
245
265
  this.activeSpeakers = activeSpeakers;
246
266
  this.emit(events_2.RoomEvent.ActiveSpeakersChanged, activeSpeakers);
247
267
  };
268
+ this.handleStreamStateUpdate = (streamStateUpdate) => {
269
+ streamStateUpdate.streamStates.forEach((streamState) => {
270
+ const participant = this.participants.get(streamState.participantSid);
271
+ if (!participant) {
272
+ return;
273
+ }
274
+ const pub = participant.getTrackPublication(streamState.trackSid);
275
+ if (!pub || !pub.track) {
276
+ return;
277
+ }
278
+ pub.track.streamState = Track_1.Track.streamStateFromProto(streamState.state);
279
+ participant.emit(events_2.ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);
280
+ this.emit(events_2.ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);
281
+ });
282
+ };
283
+ this.handleSubscriptionPermissionUpdate = (update) => {
284
+ const participant = this.participants.get(update.participantSid);
285
+ if (!participant) {
286
+ return;
287
+ }
288
+ const pub = participant.getTrackPublication(update.trackSid);
289
+ if (!pub) {
290
+ return;
291
+ }
292
+ pub._allowed = update.allowed;
293
+ participant.emit(events_2.ParticipantEvent.TrackSubscriptionPermissionChanged, pub, pub.subscriptionStatus);
294
+ this.emit(events_2.ParticipantEvent.TrackSubscriptionPermissionChanged, pub, pub.subscriptionStatus, participant);
295
+ };
248
296
  this.handleDataPacket = (userPacket, kind) => {
249
297
  // find the participant
250
298
  const participant = this.participants.get(userPacket.participantSid);
@@ -288,9 +336,9 @@ class Room extends events_1.EventEmitter {
288
336
  };
289
337
  this.participants = new Map();
290
338
  this.options = options || {};
291
- this.options.audioCaptureDefaults = Object.assign(Object.assign({}, audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);
292
- this.options.videoCaptureDefaults = Object.assign(Object.assign({}, videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);
293
- this.options.publishDefaults = Object.assign(Object.assign({}, publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);
339
+ this.options.audioCaptureDefaults = Object.assign(Object.assign({}, defaults_1.audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);
340
+ this.options.videoCaptureDefaults = Object.assign(Object.assign({}, defaults_1.videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);
341
+ this.options.publishDefaults = Object.assign(Object.assign({}, defaults_1.publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);
294
342
  this.createEngine();
295
343
  this.localParticipant = new LocalParticipant_1.default('', '', this.engine, this.options);
296
344
  }
@@ -299,18 +347,19 @@ class Room extends events_1.EventEmitter {
299
347
  return;
300
348
  }
301
349
  this.engine = new RTCEngine_1.default();
350
+ this.engine.client.signalLatency = this.options.expSignalLatency;
302
351
  this.engine.on(events_2.EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {
303
352
  this.onTrackAdded(mediaTrack, stream, receiver);
304
353
  });
305
354
  this.engine.on(events_2.EngineEvent.Disconnected, () => {
306
355
  this.handleDisconnect();
307
356
  });
308
- this.engine.on(events_2.EngineEvent.ParticipantUpdate, (participants) => {
309
- this.handleParticipantUpdates(participants);
310
- });
311
- this.engine.on(events_2.EngineEvent.RoomUpdate, this.handleRoomUpdate);
357
+ this.engine.client.onParticipantUpdate = this.handleParticipantUpdates;
358
+ this.engine.client.onRoomUpdate = this.handleRoomUpdate;
359
+ this.engine.client.onSpeakersChanged = this.handleSpeakersChanged;
360
+ this.engine.client.onStreamStateUpdate = this.handleStreamStateUpdate;
361
+ this.engine.client.onSubscriptionPermissionUpdate = this.handleSubscriptionPermissionUpdate;
312
362
  this.engine.on(events_2.EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate);
313
- this.engine.on(events_2.EngineEvent.SpeakersChanged, this.handleSpeakersChanged);
314
363
  this.engine.on(events_2.EngineEvent.DataPacketReceived, this.handleDataPacket);
315
364
  this.engine.on(events_2.EngineEvent.Reconnecting, () => {
316
365
  this.state = RoomState.Reconnecting;
@@ -320,7 +369,12 @@ class Room extends events_1.EventEmitter {
320
369
  this.state = RoomState.Connected;
321
370
  this.emit(events_2.RoomEvent.Reconnected);
322
371
  });
323
- this.engine.on(events_2.EngineEvent.ConnectionQualityUpdate, this.handleConnectionQualityUpdate);
372
+ this.engine.on(events_2.EngineEvent.SignalConnected, () => {
373
+ if (this.state === RoomState.Reconnecting) {
374
+ this.sendSyncState();
375
+ }
376
+ });
377
+ this.engine.client.onConnectionQuality = this.handleConnectionQualityUpdate;
324
378
  }
325
379
  /**
326
380
  * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.
@@ -333,6 +387,53 @@ class Room extends events_1.EventEmitter {
333
387
  static getLocalDevices(kind) {
334
388
  return DeviceManager_1.default.getInstance().getDevices(kind);
335
389
  }
390
+ /**
391
+ * retrieves a participant by identity
392
+ * @param identity
393
+ * @returns
394
+ */
395
+ getParticipantByIdentity(identity) {
396
+ for (const [, p] of this.participants) {
397
+ if (p.identity === identity) {
398
+ return p;
399
+ }
400
+ }
401
+ if (this.localParticipant.identity === identity) {
402
+ return this.localParticipant;
403
+ }
404
+ }
405
+ /**
406
+ * @internal for testing
407
+ */
408
+ simulateScenario(scenario) {
409
+ let req;
410
+ switch (scenario) {
411
+ case 'speaker':
412
+ req = livekit_rtc_1.SimulateScenario.fromPartial({
413
+ speakerUpdate: 3,
414
+ });
415
+ break;
416
+ case 'node-failure':
417
+ req = livekit_rtc_1.SimulateScenario.fromPartial({
418
+ nodeFailure: true,
419
+ });
420
+ break;
421
+ case 'server-leave':
422
+ req = livekit_rtc_1.SimulateScenario.fromPartial({
423
+ serverLeave: true,
424
+ });
425
+ break;
426
+ case 'migration':
427
+ req = livekit_rtc_1.SimulateScenario.fromPartial({
428
+ migration: true,
429
+ });
430
+ break;
431
+ default:
432
+ }
433
+ if (req) {
434
+ this.engine.client.sendSimulateScenario(req);
435
+ }
436
+ }
336
437
  /**
337
438
  * Browsers have different policies regarding audio playback. Most requiring
338
439
  * some form of user interaction (click/tap/etc).
@@ -422,7 +523,7 @@ class Room extends events_1.EventEmitter {
422
523
  if (!trackId || trackId === '')
423
524
  trackId = mediaTrack.id;
424
525
  const participant = this.getOrCreateParticipant(participantId);
425
- participant.addSubscribedMediaTrack(mediaTrack, trackId, receiver, this.options.autoManageVideo);
526
+ participant.addSubscribedMediaTrack(mediaTrack, trackId, stream, receiver, this.options.adaptiveStream);
426
527
  }
427
528
  handleDisconnect(shouldStopTracks = true) {
428
529
  if (this.state === RoomState.Disconnected) {
@@ -433,13 +534,16 @@ class Room extends events_1.EventEmitter {
433
534
  p.unpublishTrack(pub.trackSid);
434
535
  });
435
536
  });
436
- if (shouldStopTracks) {
437
- this.localParticipant.tracks.forEach((pub) => {
438
- var _a, _b;
537
+ this.localParticipant.tracks.forEach((pub) => {
538
+ var _a, _b;
539
+ if (pub.track) {
540
+ this.localParticipant.unpublishTrack(pub.track);
541
+ }
542
+ if (shouldStopTracks) {
439
543
  (_a = pub.track) === null || _a === void 0 ? void 0 : _a.detach();
440
544
  (_b = pub.track) === null || _b === void 0 ? void 0 : _b.stop();
441
- });
442
- }
545
+ }
546
+ });
443
547
  this.participants.clear();
444
548
  this.activeSpeakers = [];
445
549
  if (this.audioContext) {
@@ -451,31 +555,6 @@ class Room extends events_1.EventEmitter {
451
555
  this.state = RoomState.Disconnected;
452
556
  this.emit(events_2.RoomEvent.Disconnected);
453
557
  }
454
- handleParticipantUpdates(participantInfos) {
455
- // handle changes to participant state, and send events
456
- participantInfos.forEach((info) => {
457
- if (info.sid === this.localParticipant.sid) {
458
- this.localParticipant.updateInfo(info);
459
- return;
460
- }
461
- let remoteParticipant = this.participants.get(info.sid);
462
- const isNewParticipant = !remoteParticipant;
463
- // create participant if doesn't exist
464
- remoteParticipant = this.getOrCreateParticipant(info.sid, info);
465
- // when it's disconnected, send updates
466
- if (info.state === livekit_models_1.ParticipantInfo_State.DISCONNECTED) {
467
- this.handleParticipantDisconnected(info.sid, remoteParticipant);
468
- }
469
- else if (isNewParticipant) {
470
- // fire connected event
471
- this.emit(events_2.RoomEvent.ParticipantConnected, remoteParticipant);
472
- }
473
- else {
474
- // just update, no events
475
- remoteParticipant.updateInfo(info);
476
- }
477
- });
478
- }
479
558
  handleParticipantDisconnected(sid, participant) {
480
559
  // remove and send event
481
560
  this.participants.delete(sid);
@@ -553,6 +632,40 @@ class Room extends events_1.EventEmitter {
553
632
  }
554
633
  return participant;
555
634
  }
635
+ sendSyncState() {
636
+ var _a;
637
+ if (this.engine.subscriber === undefined
638
+ || this.engine.subscriber.pc.localDescription === null) {
639
+ return;
640
+ }
641
+ const previousSdp = this.engine.subscriber.pc.localDescription;
642
+ /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,
643
+ in this case, we send unsub tracks, so server add all tracks to this
644
+ subscribe pc and unsub special tracks from it.
645
+ 2. autosubscribe off, we send subscribed tracks.
646
+ */
647
+ const sendUnsub = ((_a = this.connOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe) || false;
648
+ const trackSids = new Array();
649
+ this.participants.forEach((participant) => {
650
+ participant.tracks.forEach((track) => {
651
+ if (track.isSubscribed !== sendUnsub) {
652
+ trackSids.push(track.trackSid);
653
+ }
654
+ });
655
+ });
656
+ this.engine.client.sendSyncState({
657
+ answer: SignalClient_1.toProtoSessionDescription({
658
+ sdp: previousSdp.sdp,
659
+ type: previousSdp.type,
660
+ }),
661
+ subscription: {
662
+ trackSids,
663
+ subscribe: !sendUnsub,
664
+ participantTracks: [],
665
+ },
666
+ publishTracks: this.localParticipant.publishedTracksInfo(),
667
+ });
668
+ }
556
669
  /** @internal */
557
670
  emit(event, ...args) {
558
671
  logger_1.default.debug('room event', event, ...args);