@wazo/sdk 0.37.3 → 0.37.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.
package/esm/index.js CHANGED
@@ -12722,9 +12722,11 @@ class Room extends Emitter {
12722
12722
  _onParticipantTrackUpdate(oldParticipant , update ) {
12723
12723
  const newParticipant = oldParticipant;
12724
12724
 
12725
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12725
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12726
12726
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12727
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12727
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12728
+ const stream = pc.getRemoteStreams().find(someStream =>
12729
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12728
12730
 
12729
12731
  if (update === 'downgrade') {
12730
12732
  newParticipant.streams = [];
@@ -12754,15 +12756,41 @@ class Room extends Emitter {
12754
12756
  return;
12755
12757
  }
12756
12758
 
12757
- if (this._unassociatedVideoStreams[trackId]) {
12759
+ const streamId = this._getStreamIdFrTrackId(trackId);
12760
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12761
+ const stream = this._unassociatedVideoStreams[key];
12762
+
12763
+ if (stream) {
12758
12764
  // Try to associate stream
12759
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12765
+ this._associateStreamTo(stream, participant);
12760
12766
 
12761
- delete this._unassociatedVideoStreams[trackId];
12767
+ delete this._unassociatedVideoStreams[key];
12762
12768
  delete this._unassociatedParticipants[participant.callId];
12763
12769
  }
12764
12770
  }
12765
12771
 
12772
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12773
+ // Find by trackId
12774
+ if (trackId in this._unassociatedVideoStreams) {
12775
+ return trackId;
12776
+ }
12777
+
12778
+ // Find by streamId
12779
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12780
+ return streamId;
12781
+ }
12782
+
12783
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12784
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12785
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12786
+ }
12787
+
12788
+ _getStreamIdFrTrackId(trackId ) {
12789
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12790
+
12791
+ return mapping ? mapping.streamId : null;
12792
+ }
12793
+
12766
12794
  _associateStreamTo(rawStream , participant ) {
12767
12795
  const stream = new Wazo.Stream(rawStream, participant);
12768
12796
  participant.streams.push(stream);
@@ -11485,9 +11485,11 @@ class Room$1 extends Emitter {
11485
11485
  _onParticipantTrackUpdate(oldParticipant , update ) {
11486
11486
  const newParticipant = oldParticipant;
11487
11487
 
11488
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11488
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11489
11489
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11490
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11490
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11491
+ const stream = pc.getRemoteStreams().find(someStream =>
11492
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11491
11493
 
11492
11494
  if (update === 'downgrade') {
11493
11495
  newParticipant.streams = [];
@@ -11517,15 +11519,41 @@ class Room$1 extends Emitter {
11517
11519
  return;
11518
11520
  }
11519
11521
 
11520
- if (this._unassociatedVideoStreams[trackId]) {
11522
+ const streamId = this._getStreamIdFrTrackId(trackId);
11523
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11524
+ const stream = this._unassociatedVideoStreams[key];
11525
+
11526
+ if (stream) {
11521
11527
  // Try to associate stream
11522
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11528
+ this._associateStreamTo(stream, participant);
11523
11529
 
11524
- delete this._unassociatedVideoStreams[trackId];
11530
+ delete this._unassociatedVideoStreams[key];
11525
11531
  delete this._unassociatedParticipants[participant.callId];
11526
11532
  }
11527
11533
  }
11528
11534
 
11535
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11536
+ // Find by trackId
11537
+ if (trackId in this._unassociatedVideoStreams) {
11538
+ return trackId;
11539
+ }
11540
+
11541
+ // Find by streamId
11542
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11543
+ return streamId;
11544
+ }
11545
+
11546
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11547
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11548
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11549
+ }
11550
+
11551
+ _getStreamIdFrTrackId(trackId ) {
11552
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11553
+
11554
+ return mapping ? mapping.streamId : null;
11555
+ }
11556
+
11529
11557
  _associateStreamTo(rawStream , participant ) {
11530
11558
  const stream = new Wazo.Stream(rawStream, participant);
11531
11559
  participant.streams.push(stream);
@@ -11485,9 +11485,11 @@ class Room$1 extends Emitter {
11485
11485
  _onParticipantTrackUpdate(oldParticipant , update ) {
11486
11486
  const newParticipant = oldParticipant;
11487
11487
 
11488
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11488
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11489
11489
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11490
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11490
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11491
+ const stream = pc.getRemoteStreams().find(someStream =>
11492
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11491
11493
 
11492
11494
  if (update === 'downgrade') {
11493
11495
  newParticipant.streams = [];
@@ -11517,15 +11519,41 @@ class Room$1 extends Emitter {
11517
11519
  return;
11518
11520
  }
11519
11521
 
11520
- if (this._unassociatedVideoStreams[trackId]) {
11522
+ const streamId = this._getStreamIdFrTrackId(trackId);
11523
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11524
+ const stream = this._unassociatedVideoStreams[key];
11525
+
11526
+ if (stream) {
11521
11527
  // Try to associate stream
11522
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11528
+ this._associateStreamTo(stream, participant);
11523
11529
 
11524
- delete this._unassociatedVideoStreams[trackId];
11530
+ delete this._unassociatedVideoStreams[key];
11525
11531
  delete this._unassociatedParticipants[participant.callId];
11526
11532
  }
11527
11533
  }
11528
11534
 
11535
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11536
+ // Find by trackId
11537
+ if (trackId in this._unassociatedVideoStreams) {
11538
+ return trackId;
11539
+ }
11540
+
11541
+ // Find by streamId
11542
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11543
+ return streamId;
11544
+ }
11545
+
11546
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11547
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11548
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11549
+ }
11550
+
11551
+ _getStreamIdFrTrackId(trackId ) {
11552
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11553
+
11554
+ return mapping ? mapping.streamId : null;
11555
+ }
11556
+
11529
11557
  _associateStreamTo(rawStream , participant ) {
11530
11558
  const stream = new Wazo.Stream(rawStream, participant);
11531
11559
  participant.streams.push(stream);
@@ -11358,9 +11358,11 @@ class Room$1 extends Emitter {
11358
11358
  _onParticipantTrackUpdate(oldParticipant , update ) {
11359
11359
  const newParticipant = oldParticipant;
11360
11360
 
11361
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11361
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11362
11362
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11363
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11363
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11364
+ const stream = pc.getRemoteStreams().find(someStream =>
11365
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11364
11366
 
11365
11367
  if (update === 'downgrade') {
11366
11368
  newParticipant.streams = [];
@@ -11390,15 +11392,41 @@ class Room$1 extends Emitter {
11390
11392
  return;
11391
11393
  }
11392
11394
 
11393
- if (this._unassociatedVideoStreams[trackId]) {
11395
+ const streamId = this._getStreamIdFrTrackId(trackId);
11396
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11397
+ const stream = this._unassociatedVideoStreams[key];
11398
+
11399
+ if (stream) {
11394
11400
  // Try to associate stream
11395
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11401
+ this._associateStreamTo(stream, participant);
11396
11402
 
11397
- delete this._unassociatedVideoStreams[trackId];
11403
+ delete this._unassociatedVideoStreams[key];
11398
11404
  delete this._unassociatedParticipants[participant.callId];
11399
11405
  }
11400
11406
  }
11401
11407
 
11408
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11409
+ // Find by trackId
11410
+ if (trackId in this._unassociatedVideoStreams) {
11411
+ return trackId;
11412
+ }
11413
+
11414
+ // Find by streamId
11415
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11416
+ return streamId;
11417
+ }
11418
+
11419
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11420
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11421
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11422
+ }
11423
+
11424
+ _getStreamIdFrTrackId(trackId ) {
11425
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11426
+
11427
+ return mapping ? mapping.streamId : null;
11428
+ }
11429
+
11402
11430
  _associateStreamTo(rawStream , participant ) {
11403
11431
  const stream = new Wazo.Stream(rawStream, participant);
11404
11432
  participant.streams.push(stream);
@@ -11747,9 +11747,11 @@ class Room$1 extends Emitter {
11747
11747
  _onParticipantTrackUpdate(oldParticipant , update ) {
11748
11748
  const newParticipant = oldParticipant;
11749
11749
 
11750
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11750
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11751
11751
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11752
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11752
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11753
+ const stream = pc.getRemoteStreams().find(someStream =>
11754
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11753
11755
 
11754
11756
  if (update === 'downgrade') {
11755
11757
  newParticipant.streams = [];
@@ -11779,15 +11781,41 @@ class Room$1 extends Emitter {
11779
11781
  return;
11780
11782
  }
11781
11783
 
11782
- if (this._unassociatedVideoStreams[trackId]) {
11784
+ const streamId = this._getStreamIdFrTrackId(trackId);
11785
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11786
+ const stream = this._unassociatedVideoStreams[key];
11787
+
11788
+ if (stream) {
11783
11789
  // Try to associate stream
11784
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11790
+ this._associateStreamTo(stream, participant);
11785
11791
 
11786
- delete this._unassociatedVideoStreams[trackId];
11792
+ delete this._unassociatedVideoStreams[key];
11787
11793
  delete this._unassociatedParticipants[participant.callId];
11788
11794
  }
11789
11795
  }
11790
11796
 
11797
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11798
+ // Find by trackId
11799
+ if (trackId in this._unassociatedVideoStreams) {
11800
+ return trackId;
11801
+ }
11802
+
11803
+ // Find by streamId
11804
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11805
+ return streamId;
11806
+ }
11807
+
11808
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11809
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11810
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11811
+ }
11812
+
11813
+ _getStreamIdFrTrackId(trackId ) {
11814
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11815
+
11816
+ return mapping ? mapping.streamId : null;
11817
+ }
11818
+
11791
11819
  _associateStreamTo(rawStream , participant ) {
11792
11820
  const stream = new Wazo.Stream(rawStream, participant);
11793
11821
  participant.streams.push(stream);
@@ -12613,9 +12613,11 @@ class Room extends Emitter {
12613
12613
  _onParticipantTrackUpdate(oldParticipant , update ) {
12614
12614
  const newParticipant = oldParticipant;
12615
12615
 
12616
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12616
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12617
12617
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12618
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12618
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12619
+ const stream = pc.getRemoteStreams().find(someStream =>
12620
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12619
12621
 
12620
12622
  if (update === 'downgrade') {
12621
12623
  newParticipant.streams = [];
@@ -12645,15 +12647,41 @@ class Room extends Emitter {
12645
12647
  return;
12646
12648
  }
12647
12649
 
12648
- if (this._unassociatedVideoStreams[trackId]) {
12650
+ const streamId = this._getStreamIdFrTrackId(trackId);
12651
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12652
+ const stream = this._unassociatedVideoStreams[key];
12653
+
12654
+ if (stream) {
12649
12655
  // Try to associate stream
12650
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12656
+ this._associateStreamTo(stream, participant);
12651
12657
 
12652
- delete this._unassociatedVideoStreams[trackId];
12658
+ delete this._unassociatedVideoStreams[key];
12653
12659
  delete this._unassociatedParticipants[participant.callId];
12654
12660
  }
12655
12661
  }
12656
12662
 
12663
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12664
+ // Find by trackId
12665
+ if (trackId in this._unassociatedVideoStreams) {
12666
+ return trackId;
12667
+ }
12668
+
12669
+ // Find by streamId
12670
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12671
+ return streamId;
12672
+ }
12673
+
12674
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12675
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12676
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12677
+ }
12678
+
12679
+ _getStreamIdFrTrackId(trackId ) {
12680
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12681
+
12682
+ return mapping ? mapping.streamId : null;
12683
+ }
12684
+
12657
12685
  _associateStreamTo(rawStream , participant ) {
12658
12686
  const stream = new Wazo.Stream(rawStream, participant);
12659
12687
  participant.streams.push(stream);
@@ -12618,9 +12618,11 @@ class Room extends Emitter {
12618
12618
  _onParticipantTrackUpdate(oldParticipant , update ) {
12619
12619
  const newParticipant = oldParticipant;
12620
12620
 
12621
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12621
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12622
12622
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12623
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12623
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12624
+ const stream = pc.getRemoteStreams().find(someStream =>
12625
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12624
12626
 
12625
12627
  if (update === 'downgrade') {
12626
12628
  newParticipant.streams = [];
@@ -12650,15 +12652,41 @@ class Room extends Emitter {
12650
12652
  return;
12651
12653
  }
12652
12654
 
12653
- if (this._unassociatedVideoStreams[trackId]) {
12655
+ const streamId = this._getStreamIdFrTrackId(trackId);
12656
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12657
+ const stream = this._unassociatedVideoStreams[key];
12658
+
12659
+ if (stream) {
12654
12660
  // Try to associate stream
12655
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12661
+ this._associateStreamTo(stream, participant);
12656
12662
 
12657
- delete this._unassociatedVideoStreams[trackId];
12663
+ delete this._unassociatedVideoStreams[key];
12658
12664
  delete this._unassociatedParticipants[participant.callId];
12659
12665
  }
12660
12666
  }
12661
12667
 
12668
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12669
+ // Find by trackId
12670
+ if (trackId in this._unassociatedVideoStreams) {
12671
+ return trackId;
12672
+ }
12673
+
12674
+ // Find by streamId
12675
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12676
+ return streamId;
12677
+ }
12678
+
12679
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12680
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12681
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12682
+ }
12683
+
12684
+ _getStreamIdFrTrackId(trackId ) {
12685
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12686
+
12687
+ return mapping ? mapping.streamId : null;
12688
+ }
12689
+
12662
12690
  _associateStreamTo(rawStream , participant ) {
12663
12691
  const stream = new Wazo.Stream(rawStream, participant);
12664
12692
  participant.streams.push(stream);
@@ -12892,9 +12892,11 @@ class Room extends Emitter {
12892
12892
  _onParticipantTrackUpdate(oldParticipant , update ) {
12893
12893
  const newParticipant = oldParticipant;
12894
12894
 
12895
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12895
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12896
12896
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12897
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12897
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12898
+ const stream = pc.getRemoteStreams().find(someStream =>
12899
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12898
12900
 
12899
12901
  if (update === 'downgrade') {
12900
12902
  newParticipant.streams = [];
@@ -12924,15 +12926,41 @@ class Room extends Emitter {
12924
12926
  return;
12925
12927
  }
12926
12928
 
12927
- if (this._unassociatedVideoStreams[trackId]) {
12929
+ const streamId = this._getStreamIdFrTrackId(trackId);
12930
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12931
+ const stream = this._unassociatedVideoStreams[key];
12932
+
12933
+ if (stream) {
12928
12934
  // Try to associate stream
12929
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12935
+ this._associateStreamTo(stream, participant);
12930
12936
 
12931
- delete this._unassociatedVideoStreams[trackId];
12937
+ delete this._unassociatedVideoStreams[key];
12932
12938
  delete this._unassociatedParticipants[participant.callId];
12933
12939
  }
12934
12940
  }
12935
12941
 
12942
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12943
+ // Find by trackId
12944
+ if (trackId in this._unassociatedVideoStreams) {
12945
+ return trackId;
12946
+ }
12947
+
12948
+ // Find by streamId
12949
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12950
+ return streamId;
12951
+ }
12952
+
12953
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12954
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12955
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12956
+ }
12957
+
12958
+ _getStreamIdFrTrackId(trackId ) {
12959
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12960
+
12961
+ return mapping ? mapping.streamId : null;
12962
+ }
12963
+
12936
12964
  _associateStreamTo(rawStream , participant ) {
12937
12965
  const stream = new Wazo.Stream(rawStream, participant);
12938
12966
  participant.streams.push(stream);
@@ -12903,9 +12903,11 @@ class Room extends Emitter {
12903
12903
  _onParticipantTrackUpdate(oldParticipant , update ) {
12904
12904
  const newParticipant = oldParticipant;
12905
12905
 
12906
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12906
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
12907
12907
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
12908
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
12908
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
12909
+ const stream = pc.getRemoteStreams().find(someStream =>
12910
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
12909
12911
 
12910
12912
  if (update === 'downgrade') {
12911
12913
  newParticipant.streams = [];
@@ -12935,15 +12937,41 @@ class Room extends Emitter {
12935
12937
  return;
12936
12938
  }
12937
12939
 
12938
- if (this._unassociatedVideoStreams[trackId]) {
12940
+ const streamId = this._getStreamIdFrTrackId(trackId);
12941
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
12942
+ const stream = this._unassociatedVideoStreams[key];
12943
+
12944
+ if (stream) {
12939
12945
  // Try to associate stream
12940
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
12946
+ this._associateStreamTo(stream, participant);
12941
12947
 
12942
- delete this._unassociatedVideoStreams[trackId];
12948
+ delete this._unassociatedVideoStreams[key];
12943
12949
  delete this._unassociatedParticipants[participant.callId];
12944
12950
  }
12945
12951
  }
12946
12952
 
12953
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
12954
+ // Find by trackId
12955
+ if (trackId in this._unassociatedVideoStreams) {
12956
+ return trackId;
12957
+ }
12958
+
12959
+ // Find by streamId
12960
+ if (streamId && streamId in this._unassociatedVideoStreams) {
12961
+ return streamId;
12962
+ }
12963
+
12964
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
12965
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
12966
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
12967
+ }
12968
+
12969
+ _getStreamIdFrTrackId(trackId ) {
12970
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
12971
+
12972
+ return mapping ? mapping.streamId : null;
12973
+ }
12974
+
12947
12975
  _associateStreamTo(rawStream , participant ) {
12948
12976
  const stream = new Wazo.Stream(rawStream, participant);
12949
12977
  participant.streams.push(stream);
@@ -11747,9 +11747,11 @@ class Room$1 extends Emitter {
11747
11747
  _onParticipantTrackUpdate(oldParticipant , update ) {
11748
11748
  const newParticipant = oldParticipant;
11749
11749
 
11750
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11750
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11751
11751
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11752
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11752
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11753
+ const stream = pc.getRemoteStreams().find(someStream =>
11754
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11753
11755
 
11754
11756
  if (update === 'downgrade') {
11755
11757
  newParticipant.streams = [];
@@ -11779,15 +11781,41 @@ class Room$1 extends Emitter {
11779
11781
  return;
11780
11782
  }
11781
11783
 
11782
- if (this._unassociatedVideoStreams[trackId]) {
11784
+ const streamId = this._getStreamIdFrTrackId(trackId);
11785
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11786
+ const stream = this._unassociatedVideoStreams[key];
11787
+
11788
+ if (stream) {
11783
11789
  // Try to associate stream
11784
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11790
+ this._associateStreamTo(stream, participant);
11785
11791
 
11786
- delete this._unassociatedVideoStreams[trackId];
11792
+ delete this._unassociatedVideoStreams[key];
11787
11793
  delete this._unassociatedParticipants[participant.callId];
11788
11794
  }
11789
11795
  }
11790
11796
 
11797
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11798
+ // Find by trackId
11799
+ if (trackId in this._unassociatedVideoStreams) {
11800
+ return trackId;
11801
+ }
11802
+
11803
+ // Find by streamId
11804
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11805
+ return streamId;
11806
+ }
11807
+
11808
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11809
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11810
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11811
+ }
11812
+
11813
+ _getStreamIdFrTrackId(trackId ) {
11814
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11815
+
11816
+ return mapping ? mapping.streamId : null;
11817
+ }
11818
+
11791
11819
  _associateStreamTo(rawStream , participant ) {
11792
11820
  const stream = new Wazo.Stream(rawStream, participant);
11793
11821
  participant.streams.push(stream);
@@ -11747,9 +11747,11 @@ class Room$1 extends Emitter {
11747
11747
  _onParticipantTrackUpdate(oldParticipant , update ) {
11748
11748
  const newParticipant = oldParticipant;
11749
11749
 
11750
- const { trackId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11750
+ const { trackId, streamId } = this._callIdStreamIdMap[newParticipant.callId] || {};
11751
11751
  const pc = Wazo.Phone.phone.currentSipSession.sessionDescriptionHandler.peerConnection;
11752
- const stream = pc.getRemoteStreams().find(someStream => someStream.getTracks().some(track => track.id === trackId));
11752
+ // Can't use `getReceivers` here because on FF we make the mapping based on the streamId
11753
+ const stream = pc.getRemoteStreams().find(someStream =>
11754
+ someStream.id === streamId || someStream.getTracks().some(track => track.id === trackId));
11753
11755
 
11754
11756
  if (update === 'downgrade') {
11755
11757
  newParticipant.streams = [];
@@ -11779,15 +11781,41 @@ class Room$1 extends Emitter {
11779
11781
  return;
11780
11782
  }
11781
11783
 
11782
- if (this._unassociatedVideoStreams[trackId]) {
11784
+ const streamId = this._getStreamIdFrTrackId(trackId);
11785
+ const key = this._getUnassociatedMapIdFromTrackIdOrStreamId(trackId, streamId);
11786
+ const stream = this._unassociatedVideoStreams[key];
11787
+
11788
+ if (stream) {
11783
11789
  // Try to associate stream
11784
- this._associateStreamTo(this._unassociatedVideoStreams[trackId], participant);
11790
+ this._associateStreamTo(stream, participant);
11785
11791
 
11786
- delete this._unassociatedVideoStreams[trackId];
11792
+ delete this._unassociatedVideoStreams[key];
11787
11793
  delete this._unassociatedParticipants[participant.callId];
11788
11794
  }
11789
11795
  }
11790
11796
 
11797
+ _getUnassociatedMapIdFromTrackIdOrStreamId(trackId , streamId ) {
11798
+ // Find by trackId
11799
+ if (trackId in this._unassociatedVideoStreams) {
11800
+ return trackId;
11801
+ }
11802
+
11803
+ // Find by streamId
11804
+ if (streamId && streamId in this._unassociatedVideoStreams) {
11805
+ return streamId;
11806
+ }
11807
+
11808
+ // Find in all the streams by streamId (used on FF where we can't map by trackId)
11809
+ const idx = Object.values(this._unassociatedVideoStreams).findIndex((stream ) => stream.id === streamId);
11810
+ return idx === -1 ? null : Object.keys(this._unassociatedVideoStreams)[idx];
11811
+ }
11812
+
11813
+ _getStreamIdFrTrackId(trackId ) {
11814
+ const mapping = Object.values(this._callIdStreamIdMap).find((map ) => map.trackId === trackId);
11815
+
11816
+ return mapping ? mapping.streamId : null;
11817
+ }
11818
+
11791
11819
  _associateStreamTo(rawStream , participant ) {
11792
11820
  const stream = new Wazo.Stream(rawStream, participant);
11793
11821
  participant.streams.push(stream);