@signalapp/ringrtc 2.33.0 → 2.34.1

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.
@@ -669,7 +669,7 @@ For more information on this, and how to apply and follow the GNU AGPL, see
669
669
 
670
670
  ```
671
671
 
672
- ## regex-aot 0.1.0, ringrtc 2.33.0
672
+ ## regex-aot 0.1.0, ringrtc 2.34.1
673
673
 
674
674
  ```
675
675
  GNU AFFERO GENERAL PUBLIC LICENSE
@@ -1631,7 +1631,7 @@ DEALINGS IN THE SOFTWARE.
1631
1631
 
1632
1632
  ```
1633
1633
 
1634
- ## bitflags 2.4.0, log 0.4.20, regex 1.9.4, regex-automata 0.3.7, regex-syntax 0.6.29, regex-syntax 0.7.5, semver 0.9.0
1634
+ ## bitflags 2.4.0, log 0.4.20, regex 1.9.6, regex-automata 0.3.9, regex-syntax 0.6.29, regex-syntax 0.7.5, semver 0.9.0
1635
1635
 
1636
1636
  ```
1637
1637
  Copyright (c) 2014 The Rust Project Developers
@@ -1662,7 +1662,7 @@ DEALINGS IN THE SOFTWARE.
1662
1662
 
1663
1663
  ```
1664
1664
 
1665
- ## libc 0.2.147
1665
+ ## libc 0.2.148
1666
1666
 
1667
1667
  ```
1668
1668
  Copyright (c) 2014-2020 The Rust Project Developers
@@ -1811,7 +1811,7 @@ DEALINGS IN THE SOFTWARE.
1811
1811
 
1812
1812
  ```
1813
1813
 
1814
- ## which 4.4.0
1814
+ ## which 4.4.2
1815
1815
 
1816
1816
  ```
1817
1817
  Copyright (c) 2015 fangyuanziti
@@ -1956,7 +1956,7 @@ DEALINGS IN THE SOFTWARE.
1956
1956
 
1957
1957
  ```
1958
1958
 
1959
- ## hashbrown 0.14.0
1959
+ ## hashbrown 0.14.1
1960
1960
 
1961
1961
  ```
1962
1962
  Copyright (c) 2016 Amanieu d'Antras
@@ -2049,7 +2049,7 @@ DEALINGS IN THE SOFTWARE.
2049
2049
 
2050
2050
  ```
2051
2051
 
2052
- ## indexmap 2.0.0
2052
+ ## indexmap 2.0.2
2053
2053
 
2054
2054
  ```
2055
2055
  Copyright (c) 2016--2017
@@ -2235,7 +2235,7 @@ DEALINGS IN THE SOFTWARE.
2235
2235
 
2236
2236
  ```
2237
2237
 
2238
- ## bytes 1.4.0
2238
+ ## bytes 1.5.0
2239
2239
 
2240
2240
  ```
2241
2241
  Copyright (c) 2018 Carl Lerche
@@ -2297,7 +2297,7 @@ DEALINGS IN THE SOFTWARE.
2297
2297
 
2298
2298
  ```
2299
2299
 
2300
- ## smallvec 1.11.0
2300
+ ## smallvec 1.11.1
2301
2301
 
2302
2302
  ```
2303
2303
  Copyright (c) 2018 The Servo Project Developers
@@ -2633,6 +2633,31 @@ DEALINGS IN THE SOFTWARE.
2633
2633
 
2634
2634
  ```
2635
2635
 
2636
+ ## toml_edit 0.19.15
2637
+
2638
+ ```
2639
+ Copyright (c) Individual contributors
2640
+
2641
+ Permission is hereby granted, free of charge, to any person obtaining a copy
2642
+ of this software and associated documentation files (the "Software"), to deal
2643
+ in the Software without restriction, including without limitation the rights
2644
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2645
+ copies of the Software, and to permit persons to whom the Software is
2646
+ furnished to do so, subject to the following conditions:
2647
+
2648
+ The above copyright notice and this permission notice shall be included in all
2649
+ copies or substantial portions of the Software.
2650
+
2651
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2652
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2653
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2654
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2655
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2656
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2657
+ SOFTWARE.
2658
+
2659
+ ```
2660
+
2636
2661
  ## getrandom 0.1.16, rand 0.7.3, rand_chacha 0.2.2, rand_core 0.5.1
2637
2662
 
2638
2663
  ```
@@ -2665,33 +2690,6 @@ DEALINGS IN THE SOFTWARE.
2665
2690
 
2666
2691
  ```
2667
2692
 
2668
- ## toml_edit 0.19.14
2669
-
2670
- ```
2671
- MIT License
2672
-
2673
- Copyright (c) 2017 Andronik Ordian
2674
-
2675
- Permission is hereby granted, free of charge, to any person obtaining a copy
2676
- of this software and associated documentation files (the "Software"), to deal
2677
- in the Software without restriction, including without limitation the rights
2678
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
2679
- copies of the Software, and to permit persons to whom the Software is
2680
- furnished to do so, subject to the following conditions:
2681
-
2682
- The above copyright notice and this permission notice shall be included in all
2683
- copies or substantial portions of the Software.
2684
-
2685
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2686
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2687
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2688
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2689
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2690
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2691
- SOFTWARE.
2692
-
2693
- ```
2694
-
2695
2693
  ## static_assertions 1.1.0
2696
2694
 
2697
2695
  ```
@@ -2825,7 +2823,7 @@ SOFTWARE.
2825
2823
 
2826
2824
  ```
2827
2825
 
2828
- ## anyhow 1.0.75, fastrand 2.0.0, itoa 1.0.9, linux-raw-sys 0.4.5, num_enum 0.7.0, num_enum_derive 0.7.0, once_cell 1.18.0, pin-project-lite 0.2.13, prettyplease 0.1.25, proc-macro-crate 1.3.1, proc-macro2 1.0.66, quote 1.0.33, rustix 0.38.10, serde 1.0.188, serde_derive 1.0.188, serde_json 1.0.105, syn 1.0.109, syn 2.0.29, syn-mid 0.5.4, thiserror 1.0.47, thiserror-impl 1.0.47, unicode-ident 1.0.11
2826
+ ## anyhow 1.0.75, fastrand 2.0.1, home 0.5.5, itoa 1.0.9, linux-raw-sys 0.4.8, num_enum 0.7.0, num_enum_derive 0.7.0, once_cell 1.18.0, pin-project-lite 0.2.13, prettyplease 0.1.25, proc-macro-crate 1.3.1, proc-macro2 1.0.67, quote 1.0.33, rustix 0.38.15, serde 1.0.188, serde_derive 1.0.188, serde_json 1.0.107, syn 1.0.109, syn 2.0.37, syn-mid 0.5.4, thiserror 1.0.49, thiserror-impl 1.0.49, unicode-ident 1.0.12
2829
2827
 
2830
2828
  ```
2831
2829
  Permission is hereby granted, free of charge, to any
@@ -2930,7 +2928,7 @@ SOFTWARE.
2930
2928
 
2931
2929
  ```
2932
2930
 
2933
- ## typenum 1.16.0
2931
+ ## typenum 1.17.0
2934
2932
 
2935
2933
  ```
2936
2934
  The MIT License (MIT)
@@ -2957,7 +2955,7 @@ SOFTWARE.
2957
2955
 
2958
2956
  ```
2959
2957
 
2960
- ## base64 0.13.1, base64 0.21.3
2958
+ ## base64 0.13.1, base64 0.21.4
2961
2959
 
2962
2960
  ```
2963
2961
  The MIT License (MIT)
@@ -2984,7 +2982,7 @@ THE SOFTWARE.
2984
2982
 
2985
2983
  ```
2986
2984
 
2987
- ## aho-corasick 1.0.5, byteorder 1.4.3, memchr 2.6.2, regex-automata 0.1.10
2985
+ ## aho-corasick 1.1.1, byteorder 1.4.3, memchr 2.6.3, regex-automata 0.1.10
2988
2986
 
2989
2987
  ```
2990
2988
  The MIT License (MIT)
@@ -3146,7 +3144,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3146
3144
  SOFTWARE.
3147
3145
  ```
3148
3146
 
3149
- ## unicode-ident 1.0.11
3147
+ ## unicode-ident 1.0.12
3150
3148
 
3151
3149
  ```
3152
3150
  UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
@@ -214,6 +214,7 @@ export declare class RingRTCType {
214
214
  handleAudioLevels(clientId: GroupCallClientId, capturedLevel: RawAudioLevel, receivedLevels: Array<ReceivedAudioLevel>): void;
215
215
  handleLowBandwidthForVideo(clientId: GroupCallClientId, recovered: boolean): void;
216
216
  handleReactions(clientId: GroupCallClientId, reactions: Array<Reaction>): void;
217
+ handleRaisedHands(clientId: GroupCallClientId, raisedHands: Array<number>): void;
217
218
  handleRemoteDevicesChanged(clientId: GroupCallClientId, remoteDeviceStates: Array<RemoteDeviceState>): void;
218
219
  handlePeekChanged(clientId: GroupCallClientId, info: PeekInfo): void;
219
220
  handlePeekResponse(requestId: number, statusCode: number, info: PeekInfo | undefined): void;
@@ -260,6 +261,7 @@ export interface CallSettings {
260
261
  interface IceServer {
261
262
  username?: string;
262
263
  password?: string;
264
+ hostname?: string;
263
265
  urls: Array<string>;
264
266
  }
265
267
  export interface AudioDevice {
@@ -440,6 +442,7 @@ export interface GroupCallObserver {
440
442
  onAudioLevels(groupCall: GroupCall): void;
441
443
  onLowBandwidthForVideo(groupCall: GroupCall, recovered: boolean): void;
442
444
  onReactions(groupCall: GroupCall, reactions: Array<Reaction>): void;
445
+ onRaisedHands(groupCall: GroupCall, raisedHands: Array<number>): void;
443
446
  onPeekChanged(groupCall: GroupCall): void;
444
447
  onEnded(groupCall: GroupCall, reason: GroupCallEndReason): void;
445
448
  }
@@ -463,6 +466,7 @@ export declare class GroupCall {
463
466
  getPeekInfo(): PeekInfo | undefined;
464
467
  setOutgoingAudioMuted(muted: boolean): void;
465
468
  react(value: string): void;
469
+ raiseHand(raise: boolean): void;
466
470
  setOutgoingVideoMuted(muted: boolean): void;
467
471
  setPresenting(presenting: boolean): void;
468
472
  setOutgoingVideoIsScreenShare(isScreenShare: boolean): void;
@@ -484,6 +488,7 @@ export declare class GroupCall {
484
488
  handleAudioLevels(capturedLevel: RawAudioLevel, receivedLevels: Array<ReceivedAudioLevel>): void;
485
489
  handleLowBandwidthForVideo(recovered: boolean): void;
486
490
  handleReactions(reactions: Array<Reaction>): void;
491
+ handleRaisedHands(raisedHands: Array<number>): void;
487
492
  handleRemoteDevicesChanged(remoteDeviceStates: Array<RemoteDeviceState>): void;
488
493
  handlePeekChanged(info: PeekInfo): void;
489
494
  handleEnded(reason: GroupCallEndReason): void;
@@ -571,7 +576,7 @@ export interface CallManager {
571
576
  setConfig(config: Config): void;
572
577
  setSelfUuid(uuid: Buffer): void;
573
578
  createOutgoingCall(remoteUserId: UserId, isVideoCall: boolean, localDeviceId: DeviceId): CallId;
574
- proceed(callId: CallId, iceServerUsername: string, iceServerPassword: string, iceServerUrls: Array<string>, hideIp: boolean, dataMode: DataMode, audioLevelsIntervalMillis: number): void;
579
+ proceed(callId: CallId, iceServerUsername: string, iceServerPassword: string, iceServerHostname: string, iceServerUrls: Array<string>, hideIp: boolean, dataMode: DataMode, audioLevelsIntervalMillis: number): void;
575
580
  accept(callId: CallId): void;
576
581
  ignore(callId: CallId): void;
577
582
  hangup(): void;
@@ -605,6 +610,7 @@ export interface CallManager {
605
610
  setOutgoingGroupCallVideoIsScreenShare(clientId: GroupCallClientId, isScreenShare: boolean): void;
606
611
  groupRing(clientId: GroupCallClientId, recipient: Buffer | undefined): void;
607
612
  groupReact(clientId: GroupCallClientId, value: string): void;
613
+ groupRaiseHand(clientId: GroupCallClientId, raise: boolean): void;
608
614
  resendMediaKeys(clientId: GroupCallClientId): void;
609
615
  setDataMode(clientId: GroupCallClientId, dataMode: DataMode): void;
610
616
  requestVideo(clientId: GroupCallClientId, resolutions: Array<VideoRequest>, activeSpeakerHeight: number): void;
@@ -3,45 +3,11 @@
3
3
  // Copyright 2019-2021 Signal Messenger, LLC
4
4
  // SPDX-License-Identifier: AGPL-3.0-only
5
5
  //
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
30
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
31
- return new (P || (P = Promise))(function (resolve, reject) {
32
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
33
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
34
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
35
- step((generator = generator.apply(thisArg, _arguments || [])).next());
36
- });
37
- };
38
6
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
8
  };
41
9
  Object.defineProperty(exports, "__esModule", { value: true });
42
10
  exports.CallLogLevel = exports.CallEndedReason = exports.CallState = exports.RingCancelReason = exports.DataMode = exports.HangupType = exports.OpaqueMessage = exports.HangupMessage = exports.BusyMessage = exports.IceCandidateMessage = exports.AnswerMessage = exports.OfferType = exports.OfferMessage = exports.CallingMessage = exports.GroupCall = exports.GroupCallKind = exports.VideoRequest = exports.GroupMemberInfo = exports.RemoteDeviceState = exports.LocalDeviceState = exports.HttpMethod = exports.RingUpdate = exports.CallMessageUrgency = exports.GroupCallEndReason = exports.JoinState = exports.ConnectionState = exports.Call = exports.RingRTCType = exports.ReceivedAudioLevel = exports.NetworkRoute = exports.PeekStatusCodes = exports.callIdFromRingId = exports.callIdFromEra = void 0;
43
- /* eslint-disable max-classes-per-file */
44
- const process = __importStar(require("process"));
45
11
  const CallLinks_1 = require("./CallLinks");
46
12
  const Native_1 = __importDefault(require("./Native"));
47
13
  exports.callIdFromEra = Native_1.default.callIdFromEra;
@@ -80,11 +46,6 @@ class NativeCallManager {
80
46
  configurable: true,
81
47
  get() {
82
48
  const callEndpoint = Native_1.default.createCallEndpoint(this, config.use_new_audio_device_module, fieldTrialsString);
83
- if (process.platform === 'darwin') {
84
- // Preload devices to work around
85
- // https://bugs.chromium.org/p/chromium/issues/detail?id=1287628
86
- void window.navigator.mediaDevices.enumerateDevices();
87
- }
88
49
  Object.defineProperty(this, Native_1.default.callEndpointPropertyKey, {
89
50
  configurable: true,
90
51
  value: callEndpoint,
@@ -146,6 +107,7 @@ NativeCallManager.prototype.leave = Native_1.default.cm_leave;
146
107
  NativeCallManager.prototype.disconnect = Native_1.default.cm_disconnect;
147
108
  NativeCallManager.prototype.groupRing = Native_1.default.cm_groupRing;
148
109
  NativeCallManager.prototype.groupReact = Native_1.default.cm_groupReact;
110
+ NativeCallManager.prototype.groupRaiseHand = Native_1.default.cm_groupRaiseHand;
149
111
  NativeCallManager.prototype.setOutgoingAudioMuted =
150
112
  Native_1.default.cm_setOutgoingAudioMuted;
151
113
  NativeCallManager.prototype.setOutgoingVideoMuted =
@@ -382,7 +344,7 @@ class RingRTCType {
382
344
  }
383
345
  proceed(callId, settings) {
384
346
  sillyDeadlockProtection(() => {
385
- this.callManager.proceed(callId, settings.iceServer.username || '', settings.iceServer.password || '', settings.iceServer.urls, settings.hideIp, settings.dataMode, settings.audioLevelsIntervalMillis || 0);
347
+ this.callManager.proceed(callId, settings.iceServer.username || '', settings.iceServer.password || '', settings.iceServer.hostname || '', settings.iceServer.urls, settings.hideIp, settings.dataMode, settings.audioLevelsIntervalMillis || 0);
386
348
  });
387
349
  }
388
350
  // Called by Rust
@@ -493,13 +455,12 @@ class RingRTCType {
493
455
  }
494
456
  }
495
457
  renderVideoFrame(width, height, buffer) {
496
- var _a, _b;
497
458
  const call = this._call;
498
459
  if (!call) {
499
460
  return;
500
461
  }
501
- if ((_a = this._call) === null || _a === void 0 ? void 0 : _a.renderVideoFrame) {
502
- (_b = this._call) === null || _b === void 0 ? void 0 : _b.renderVideoFrame(width, height, buffer);
462
+ if (this._call?.renderVideoFrame) {
463
+ this._call?.renderVideoFrame(width, height, buffer);
503
464
  }
504
465
  }
505
466
  // Called by Rust
@@ -543,9 +504,9 @@ class RingRTCType {
543
504
  message.destinationDeviceId = remoteDeviceId;
544
505
  }
545
506
  /* eslint-enable no-param-reassign */
546
- (() => __awaiter(this, void 0, void 0, function* () {
507
+ (async () => {
547
508
  if (this.handleOutgoingSignaling) {
548
- const signalingResult = yield this.handleOutgoingSignaling(remoteUserId, message);
509
+ const signalingResult = await this.handleOutgoingSignaling(remoteUserId, message);
549
510
  if (signalingResult) {
550
511
  this.callManager.signalingMessageSent(callId);
551
512
  }
@@ -556,7 +517,7 @@ class RingRTCType {
556
517
  else {
557
518
  this.callManager.signalingMessageSendFailed(callId);
558
519
  }
559
- }))().catch(e => this.logError(e.toString()));
520
+ })().catch(e => this.logError(e.toString()));
560
521
  }
561
522
  // Call Links
562
523
  /**
@@ -696,7 +657,7 @@ class RingRTCType {
696
657
  try {
697
658
  this.callManager.receivedHttpResponse(requestId, status, body);
698
659
  }
699
- catch (_a) {
660
+ catch {
700
661
  // We may not have an active connection any more.
701
662
  // In which case it doesn't matter
702
663
  }
@@ -707,7 +668,7 @@ class RingRTCType {
707
668
  try {
708
669
  this.callManager.httpRequestFailed(requestId, debugInfo);
709
670
  }
710
- catch (_a) {
671
+ catch {
711
672
  // We may not have an active connection any more.
712
673
  // In which case it doesn't matter
713
674
  }
@@ -843,6 +804,15 @@ class RingRTCType {
843
804
  });
844
805
  }
845
806
  // Called by Rust
807
+ handleRaisedHands(clientId, raisedHands) {
808
+ sillyDeadlockProtection(() => {
809
+ const groupCall = this._groupCallByClientId.get(clientId);
810
+ if (groupCall) {
811
+ groupCall.handleRaisedHands(raisedHands);
812
+ }
813
+ });
814
+ }
815
+ // Called by Rust
846
816
  handleRemoteDevicesChanged(clientId, remoteDeviceStates) {
847
817
  sillyDeadlockProtection(() => {
848
818
  const groupCall = this._groupCallByClientId.get(clientId);
@@ -954,13 +924,12 @@ class RingRTCType {
954
924
  }
955
925
  // Called by MessageReceiver
956
926
  handleCallingMessage(remoteUserId, remoteUuid, remoteDeviceId, localDeviceId, messageAgeSec, messageReceivedAtCounter, message, senderIdentityKey, receiverIdentityKey) {
957
- var _a, _b, _c, _d, _e;
958
927
  if (message.destinationDeviceId &&
959
928
  message.destinationDeviceId !== localDeviceId) {
960
929
  // Drop the message as it isn't for this device, handleIgnoredCall() is not needed.
961
930
  return;
962
931
  }
963
- if ((_a = message.offer) === null || _a === void 0 ? void 0 : _a.callId) {
932
+ if (message.offer?.callId) {
964
933
  const callId = message.offer.callId;
965
934
  const opaque = toBuffer(message.offer.opaque);
966
935
  // opaque is required. sdp is obsolete, but it might still come with opaque.
@@ -975,7 +944,7 @@ class RingRTCType {
975
944
  this._callInfoByCallId.set(this.getCallInfoKey(callId), callInfo);
976
945
  this.callManager.receivedOffer(remoteUserId, remoteDeviceId, localDeviceId, messageAgeSec, callId, offerType, opaque, senderIdentityKey, receiverIdentityKey);
977
946
  }
978
- if ((_b = message.answer) === null || _b === void 0 ? void 0 : _b.callId) {
947
+ if (message.answer?.callId) {
979
948
  const callId = message.answer.callId;
980
949
  const opaque = toBuffer(message.answer.opaque);
981
950
  // opaque is required. sdp is obsolete, but it might still come with opaque.
@@ -1012,19 +981,19 @@ class RingRTCType {
1012
981
  }
1013
982
  this.callManager.receivedIceCandidates(remoteUserId, remoteDeviceId, callId, candidates);
1014
983
  }
1015
- if ((_c = message.hangup) === null || _c === void 0 ? void 0 : _c.callId) {
984
+ if (message.hangup?.callId) {
1016
985
  const callId = message.hangup.callId;
1017
986
  const hangupType = message.hangup.type || HangupType.Normal;
1018
987
  const hangupDeviceId = message.hangup.deviceId || null;
1019
988
  this.callManager.receivedHangup(remoteUserId, remoteDeviceId, callId, hangupType, hangupDeviceId);
1020
989
  }
1021
- if ((_d = message.legacyHangup) === null || _d === void 0 ? void 0 : _d.callId) {
990
+ if (message.legacyHangup?.callId) {
1022
991
  const callId = message.legacyHangup.callId;
1023
992
  const hangupType = message.legacyHangup.type || HangupType.Normal;
1024
993
  const hangupDeviceId = message.legacyHangup.deviceId || null;
1025
994
  this.callManager.receivedHangup(remoteUserId, remoteDeviceId, callId, hangupType, hangupDeviceId);
1026
995
  }
1027
- if ((_e = message.busy) === null || _e === void 0 ? void 0 : _e.callId) {
996
+ if (message.busy?.callId) {
1028
997
  const callId = message.busy.callId;
1029
998
  this.callManager.receivedBusy(remoteUserId, remoteDeviceId, callId);
1030
999
  }
@@ -1316,7 +1285,7 @@ class Call {
1316
1285
  try {
1317
1286
  this._callManager.setOutgoingVideoEnabled(enabled);
1318
1287
  }
1319
- catch (_a) {
1288
+ catch {
1320
1289
  // We may not have an active connection any more.
1321
1290
  // In which case it doesn't matter
1322
1291
  }
@@ -1327,7 +1296,7 @@ class Call {
1327
1296
  try {
1328
1297
  this._callManager.updateDataMode(dataMode);
1329
1298
  }
1330
- catch (_a) {
1299
+ catch {
1331
1300
  // We may not have an active connection any more.
1332
1301
  // In which case it doesn't matter
1333
1302
  }
@@ -1530,6 +1499,10 @@ class GroupCall {
1530
1499
  this._callManager.groupReact(this._clientId, value);
1531
1500
  }
1532
1501
  // Called by UI
1502
+ raiseHand(raise) {
1503
+ this._callManager.groupRaiseHand(this._clientId, raise);
1504
+ }
1505
+ // Called by UI
1533
1506
  setOutgoingVideoMuted(muted) {
1534
1507
  this._localDeviceState.videoMuted = muted;
1535
1508
  this._callManager.setOutgoingVideoMuted(this._clientId, muted);
@@ -1634,13 +1607,15 @@ class GroupCall {
1634
1607
  handleReactions(reactions) {
1635
1608
  this._observer.onReactions(this, reactions);
1636
1609
  }
1610
+ handleRaisedHands(raisedHands) {
1611
+ this._observer.onRaisedHands(this, raisedHands);
1612
+ }
1637
1613
  // Called by Rust via RingRTC object
1638
1614
  handleRemoteDevicesChanged(remoteDeviceStates) {
1639
- var _a;
1640
1615
  // We don't get aspect ratios from RingRTC, so make sure to copy them over.
1641
1616
  for (const noo of remoteDeviceStates) {
1642
- const old = (_a = this._remoteDeviceStates) === null || _a === void 0 ? void 0 : _a.find(old => old.demuxId == noo.demuxId);
1643
- noo.videoAspectRatio = old === null || old === void 0 ? void 0 : old.videoAspectRatio;
1617
+ const old = this._remoteDeviceStates?.find(old => old.demuxId == noo.demuxId);
1618
+ noo.videoAspectRatio = old?.videoAspectRatio;
1644
1619
  }
1645
1620
  this._remoteDeviceStates = remoteDeviceStates;
1646
1621
  this._observer.onRemoteDeviceStatesChanged(this);
@@ -1666,8 +1641,7 @@ class GroupCall {
1666
1641
  }
1667
1642
  // Called by the GroupCallVideoFrameSource when it receives a video frame.
1668
1643
  setRemoteAspectRatio(remoteDemuxId, aspectRatio) {
1669
- var _a;
1670
- const remoteDevice = (_a = this._remoteDeviceStates) === null || _a === void 0 ? void 0 : _a.find(device => device.demuxId == remoteDemuxId);
1644
+ const remoteDevice = this._remoteDeviceStates?.find(device => device.demuxId == remoteDemuxId);
1671
1645
  if (!!remoteDevice && remoteDevice.videoAspectRatio != aspectRatio) {
1672
1646
  remoteDevice.videoAspectRatio = aspectRatio;
1673
1647
  this._observer.onRemoteDeviceStatesChanged(this);
@@ -1809,11 +1783,11 @@ var CallLogLevel;
1809
1783
  CallLogLevel[CallLogLevel["Trace"] = 5] = "Trace";
1810
1784
  })(CallLogLevel || (exports.CallLogLevel = CallLogLevel = {}));
1811
1785
  function sillyDeadlockProtection(f) {
1812
- void (() => __awaiter(this, void 0, void 0, function* () {
1786
+ void (async () => {
1813
1787
  // This is a silly way of preventing a deadlock.
1814
1788
  // eslint-disable-next-line @typescript-eslint/await-thenable
1815
- yield 0;
1789
+ await 0;
1816
1790
  f();
1817
- }))();
1791
+ })();
1818
1792
  }
1819
1793
  //# sourceMappingURL=Service.js.map
@@ -3,15 +3,6 @@
3
3
  // Copyright 2019-2021 Signal Messenger, LLC
4
4
  // SPDX-License-Identifier: AGPL-3.0-only
5
5
  //
6
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
- return new (P || (P = Promise))(function (resolve, reject) {
9
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
- step((generator = generator.apply(thisArg, _arguments || [])).next());
13
- });
14
- };
15
6
  Object.defineProperty(exports, "__esModule", { value: true });
16
7
  exports.CanvasVideoRenderer = exports.MAX_VIDEO_CAPTURE_BUFFER_SIZE = exports.MAX_VIDEO_CAPTURE_AREA = exports.MAX_VIDEO_CAPTURE_HEIGHT = exports.MAX_VIDEO_CAPTURE_WIDTH = exports.GumVideoCapturer = exports.GumVideoCaptureOptions = exports.VideoPixelFormatEnum = void 0;
17
8
  const index_1 = require("../index");
@@ -66,8 +57,7 @@ class GumVideoCapturer {
66
57
  return this.captureOptions != undefined;
67
58
  }
68
59
  setLocalPreview(localPreview) {
69
- var _a;
70
- const oldLocalPreview = (_a = this.localPreview) === null || _a === void 0 ? void 0 : _a.current;
60
+ const oldLocalPreview = this.localPreview?.current;
71
61
  if (oldLocalPreview) {
72
62
  oldLocalPreview.srcObject = null;
73
63
  }
@@ -88,7 +78,7 @@ class GumVideoCapturer {
88
78
  }
89
79
  enableCaptureAndSend(sender, options) {
90
80
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
91
- this.startCapturing(options !== null && options !== void 0 ? options : this.defaultCaptureOptions);
81
+ this.startCapturing(options ?? this.defaultCaptureOptions);
92
82
  this.startSending(sender);
93
83
  }
94
84
  disable() {
@@ -100,34 +90,29 @@ class GumVideoCapturer {
100
90
  this.updateLocalPreviewIntervalId = undefined;
101
91
  }
102
92
  // eslint-disable-next-line @typescript-eslint/require-await
103
- setPreferredDevice(deviceId) {
104
- return __awaiter(this, void 0, void 0, function* () {
105
- this.preferredDeviceId = deviceId;
106
- if (this.captureOptions) {
107
- const { captureOptions, sender } = this;
108
- this.disable();
109
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
110
- this.startCapturing(captureOptions);
111
- if (sender) {
112
- this.startSending(sender);
113
- }
93
+ async setPreferredDevice(deviceId) {
94
+ this.preferredDeviceId = deviceId;
95
+ if (this.captureOptions) {
96
+ const { captureOptions, sender } = this;
97
+ this.disable();
98
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
99
+ this.startCapturing(captureOptions);
100
+ if (sender) {
101
+ this.startSending(sender);
114
102
  }
115
- });
103
+ }
116
104
  }
117
- enumerateDevices() {
118
- return __awaiter(this, void 0, void 0, function* () {
119
- const devices = yield window.navigator.mediaDevices.enumerateDevices();
120
- const cameras = devices.filter(d => d.kind == 'videoinput');
121
- return cameras;
122
- });
105
+ async enumerateDevices() {
106
+ const devices = await window.navigator.mediaDevices.enumerateDevices();
107
+ const cameras = devices.filter(d => d.kind == 'videoinput');
108
+ return cameras;
123
109
  }
124
110
  getUserMedia(options) {
125
- var _a;
126
111
  // TODO: Figure out a better way to make typescript accept "mandatory".
127
112
  const constraints = {
128
113
  audio: false,
129
114
  video: {
130
- deviceId: (_a = options.preferredDeviceId) !== null && _a !== void 0 ? _a : this.preferredDeviceId,
115
+ deviceId: options.preferredDeviceId ?? this.preferredDeviceId,
131
116
  width: {
132
117
  max: options.maxWidth,
133
118
  ideal: options.maxWidth,
@@ -156,60 +141,58 @@ class GumVideoCapturer {
156
141
  }
157
142
  return window.navigator.mediaDevices.getUserMedia(constraints);
158
143
  }
159
- startCapturing(options) {
160
- return __awaiter(this, void 0, void 0, function* () {
161
- if (this.capturing()) {
162
- index_1.RingRTC.logWarn('startCapturing(): already capturing');
144
+ async startCapturing(options) {
145
+ if (this.capturing()) {
146
+ index_1.RingRTC.logWarn('startCapturing(): already capturing');
147
+ return;
148
+ }
149
+ index_1.RingRTC.logInfo(`startCapturing(): ${options.maxWidth}x${options.maxHeight}@${options.maxFramerate}`);
150
+ this.captureOptions = options;
151
+ try {
152
+ // If we start/stop/start, we may have concurrent calls to getUserMedia,
153
+ // which is what we want if we're switching from camera to screenshare.
154
+ // But we need to make sure we deal with the fact that things might be
155
+ // different after the await here.
156
+ const mediaStream = await this.getUserMedia(options);
157
+ // It's possible video was disabled, switched to screenshare, or
158
+ // switched to a different camera while awaiting a response, in
159
+ // which case we need to disable the camera we just accessed.
160
+ if (this.captureOptions != options) {
161
+ index_1.RingRTC.logWarn('startCapturing(): different state after getUserMedia()');
162
+ for (const track of mediaStream.getVideoTracks()) {
163
+ // Make the light turn off faster
164
+ track.stop();
165
+ }
163
166
  return;
164
167
  }
165
- index_1.RingRTC.logInfo(`startCapturing(): ${options.maxWidth}x${options.maxHeight}@${options.maxFramerate}`);
166
- this.captureOptions = options;
167
- try {
168
- // If we start/stop/start, we may have concurrent calls to getUserMedia,
169
- // which is what we want if we're switching from camera to screenshare.
170
- // But we need to make sure we deal with the fact that things might be
171
- // different after the await here.
172
- const mediaStream = yield this.getUserMedia(options);
173
- // It's possible video was disabled, switched to screenshare, or
174
- // switched to a different camera while awaiting a response, in
175
- // which case we need to disable the camera we just accessed.
176
- if (this.captureOptions != options) {
177
- index_1.RingRTC.logWarn('startCapturing(): different state after getUserMedia()');
178
- for (const track of mediaStream.getVideoTracks()) {
179
- // Make the light turn off faster
180
- track.stop();
181
- }
182
- return;
168
+ if (this.mediaStream !== undefined &&
169
+ this.mediaStream.getVideoTracks().length > 0) {
170
+ // We have a stream and track for the requested camera already. Stop
171
+ // the duplicate track that we just started.
172
+ index_1.RingRTC.logWarn('startCapturing(): dropping duplicate call to startCapturing');
173
+ for (const track of mediaStream.getVideoTracks()) {
174
+ track.stop();
183
175
  }
184
- if (this.mediaStream !== undefined &&
185
- this.mediaStream.getVideoTracks().length > 0) {
186
- // We have a stream and track for the requested camera already. Stop
187
- // the duplicate track that we just started.
188
- index_1.RingRTC.logWarn('startCapturing(): dropping duplicate call to startCapturing');
189
- for (const track of mediaStream.getVideoTracks()) {
190
- track.stop();
191
- }
192
- return;
193
- }
194
- this.mediaStream = mediaStream;
195
- if (!this.spawnedSenderRunning &&
196
- this.mediaStream != undefined &&
197
- this.sender != undefined) {
198
- this.spawnSender(this.mediaStream, this.sender);
199
- }
200
- this.updateLocalPreviewSourceObject();
176
+ return;
201
177
  }
202
- catch (e) {
203
- index_1.RingRTC.logError(`startCapturing(): ${e}`);
204
- // It's possible video was disabled, switched to screenshare, or
205
- // switched to a different camera while awaiting a response, in
206
- // which case we should reset the captureOptions if we set them.
207
- if (this.captureOptions == options) {
208
- // We couldn't open the camera. Oh well.
209
- this.captureOptions = undefined;
210
- }
178
+ this.mediaStream = mediaStream;
179
+ if (!this.spawnedSenderRunning &&
180
+ this.mediaStream != undefined &&
181
+ this.sender != undefined) {
182
+ this.spawnSender(this.mediaStream, this.sender);
183
+ }
184
+ this.updateLocalPreviewSourceObject();
185
+ }
186
+ catch (e) {
187
+ index_1.RingRTC.logError(`startCapturing(): ${e}`);
188
+ // It's possible video was disabled, switched to screenshare, or
189
+ // switched to a different camera while awaiting a response, in
190
+ // which case we should reset the captureOptions if we set them.
191
+ if (this.captureOptions == options) {
192
+ // We couldn't open the camera. Oh well.
193
+ this.captureOptions = undefined;
211
194
  }
212
- });
195
+ }
213
196
  }
214
197
  stopCapturing() {
215
198
  if (!this.capturing()) {
@@ -257,11 +240,10 @@ class GumVideoCapturer {
257
240
  const buffer = Buffer.alloc(exports.MAX_VIDEO_CAPTURE_BUFFER_SIZE);
258
241
  this.spawnedSenderRunning = true;
259
242
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
260
- (() => __awaiter(this, void 0, void 0, function* () {
261
- var _a;
243
+ (async () => {
262
244
  try {
263
245
  while (mediaStream == this.mediaStream) {
264
- const { done, value: frame } = yield reader.read();
246
+ const { done, value: frame } = await reader.read();
265
247
  if (done) {
266
248
  break;
267
249
  }
@@ -269,7 +251,7 @@ class GumVideoCapturer {
269
251
  continue;
270
252
  }
271
253
  try {
272
- const format = videoPixelFormatToEnum((_a = frame.format) !== null && _a !== void 0 ? _a : 'I420');
254
+ const format = videoPixelFormatToEnum(frame.format ?? 'I420');
273
255
  if (format == undefined) {
274
256
  index_1.RingRTC.logWarn(`Unsupported video frame format: ${frame.format}`);
275
257
  break;
@@ -278,7 +260,7 @@ class GumVideoCapturer {
278
260
  if (!visibleRect) {
279
261
  continue;
280
262
  }
281
- yield frame.copyTo(buffer);
263
+ await frame.copyTo(buffer);
282
264
  if (sender !== this.sender) {
283
265
  break;
284
266
  }
@@ -300,7 +282,7 @@ class GumVideoCapturer {
300
282
  reader.releaseLock();
301
283
  }
302
284
  this.spawnedSenderRunning = false;
303
- }))();
285
+ })();
304
286
  }
305
287
  stopSending() {
306
288
  // The spawned sender should stop
@@ -387,7 +369,6 @@ class CanvasVideoRenderer {
387
369
  context.fillRect(0, 0, canvas.width, canvas.height);
388
370
  }
389
371
  renderVideoFrame() {
390
- var _a, _b;
391
372
  if (!this.source || !this.canvas) {
392
373
  return;
393
374
  }
@@ -435,7 +416,7 @@ class CanvasVideoRenderer {
435
416
  context.fillStyle = 'black';
436
417
  context.fillRect(0, 0, canvas.width, canvas.height);
437
418
  }
438
- if (((_a = this.imageData) === null || _a === void 0 ? void 0 : _a.width) !== width || ((_b = this.imageData) === null || _b === void 0 ? void 0 : _b.height) !== height) {
419
+ if (this.imageData?.width !== width || this.imageData?.height !== height) {
439
420
  this.imageData = new ImageData(width, height);
440
421
  }
441
422
  this.imageData.data.set(this.buffer.subarray(0, width * height * 4));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signalapp/ringrtc",
3
- "version": "2.33.0",
3
+ "version": "2.34.1",
4
4
  "description": "Signal Messenger voice and video calling library.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "config": {
26
26
  "prebuildUrl": "https://build-artifacts.signal.org/libraries/ringrtc-desktop-build-v${npm_package_version}.tar.gz",
27
- "prebuildChecksum": "4e431ad65093548bd787a8b1a045d1fad3944e74cbc3f031dc53320fba92af7e"
27
+ "prebuildChecksum": "38903e11c7799d67fd3089328e4c9b9b67a64d2791556e8521809a22c1afc336"
28
28
  },
29
29
  "author": "",
30
30
  "license": "AGPL-3.0-only",