@100mslive/react-native-hms 1.8.0 → 1.9.0

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 (152) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +15 -5
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +43 -5
  5. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +120 -25
  6. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +220 -26
  7. package/ios/HMSConstants.swift +1 -0
  8. package/ios/HMSDecoder.swift +16 -5
  9. package/ios/HMSHelper.swift +33 -4
  10. package/ios/HMSManager.m +26 -0
  11. package/ios/HMSManager.swift +45 -1
  12. package/ios/HMSRNSDK.swift +158 -15
  13. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  14. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  15. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  17. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  18. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  19. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  20. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  21. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  22. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  23. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  24. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  25. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  26. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  27. package/lib/commonjs/classes/HMSConstants.js +1 -2
  28. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  29. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  30. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  31. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  32. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  33. package/lib/commonjs/classes/HMSLayer.js +1 -2
  34. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  35. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  36. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  37. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  38. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  39. package/lib/commonjs/classes/HMSLogger.js +1 -2
  40. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  41. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  42. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  43. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  44. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  45. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  46. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  47. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  48. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  49. package/lib/commonjs/classes/HMSPeer.js +15 -0
  50. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  51. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  52. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  53. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  54. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  55. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  56. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  57. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  58. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  59. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  60. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  61. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  62. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  63. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  64. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  65. package/lib/commonjs/classes/HMSSDK.js +152 -6
  66. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  67. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  68. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  69. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  70. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  71. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  72. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  73. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  74. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  75. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  76. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  77. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  78. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  79. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  80. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  81. package/lib/commonjs/classes/HmsView.js +3 -4
  82. package/lib/commonjs/classes/HmsView.js.map +1 -1
  83. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +3 -4
  84. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  85. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  86. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  87. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +5 -10
  88. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  89. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  90. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  91. package/lib/commonjs/index.js +1 -2
  92. package/lib/commonjs/index.js.map +1 -1
  93. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  94. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  95. package/lib/commonjs/stores/hms-store.js +1 -2
  96. package/lib/commonjs/stores/hms-store.js.map +1 -1
  97. package/lib/commonjs/types.js +3 -6
  98. package/lib/commonjs/types.js.map +1 -1
  99. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  100. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  101. package/lib/module/classes/HMSPeer.js +15 -0
  102. package/lib/module/classes/HMSPeer.js.map +1 -1
  103. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  104. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  105. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  106. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  107. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  108. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  109. package/lib/module/classes/HMSPeersCache.js +7 -0
  110. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  111. package/lib/module/classes/HMSSDK.js +153 -7
  112. package/lib/module/classes/HMSSDK.js.map +1 -1
  113. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  114. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  115. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  116. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  117. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  118. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  119. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  120. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  121. package/lib/typescript/classes/HMSSDK.d.ts +46 -1
  122. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  123. package/package.json +1 -1
  124. package/sdk-versions.json +2 -2
  125. package/src/classes/HMSPIPListenerActions.ts +1 -0
  126. package/src/classes/HMSPeer.ts +25 -0
  127. package/src/classes/HMSPeerListIterator.ts +60 -0
  128. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  129. package/src/classes/HMSPeerUpdate.ts +2 -0
  130. package/src/classes/HMSPeersCache.ts +7 -0
  131. package/src/classes/HMSSDK.tsx +187 -4
  132. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  133. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  134. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  135. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  136. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  137. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  138. package/android/.gradle/6.7.1/gc.properties +0 -0
  139. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  140. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  141. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  142. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  143. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  144. package/android/.gradle/6.9/gc.properties +0 -0
  145. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  146. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  147. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  148. package/android/.gradle/checksums/checksums.lock +0 -0
  149. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  150. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  151. package/android/.gradle/configuration-cache/gc.properties +0 -0
  152. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -26,6 +26,7 @@ export let HMSUpdateListenerActions = /*#__PURE__*/function (HMSUpdateListenerAc
26
26
  HMSUpdateListenerActions["ON_AUDIO_DEVICE_CHANGED"] = "ON_AUDIO_DEVICE_CHANGED";
27
27
  HMSUpdateListenerActions["ON_SESSION_STORE_AVAILABLE"] = "ON_SESSION_STORE_AVAILABLE";
28
28
  HMSUpdateListenerActions["ON_SESSION_STORE_CHANGED"] = "ON_SESSION_STORE_CHANGED";
29
+ HMSUpdateListenerActions["ON_PEER_LIST_UPDATED"] = "ON_PEER_LIST_UPDATED";
29
30
  return HMSUpdateListenerActions;
30
31
  }({});
31
32
  //# sourceMappingURL=HMSUpdateListenerActions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["HMSUpdateListenerActions"],"sources":["HMSUpdateListenerActions.ts"],"sourcesContent":["/**\n * These are the available events emitted by the `HMSSDK`\n *\n * For more info about these events, checkout Event Listener docs\n * {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/listen-to-room-updates/event-listeners}\n */\nexport enum HMSUpdateListenerActions {\n ON_PREVIEW = 'ON_PREVIEW',\n ON_JOIN = 'ON_JOIN',\n ON_ROOM_UPDATE = 'ON_ROOM_UPDATE',\n ON_PEER_UPDATE = '3',\n ON_TRACK_UPDATE = 'ON_TRACK_UPDATE',\n ON_ERROR = 'ON_ERROR',\n ON_MESSAGE = 'ON_MESSAGE',\n ON_SPEAKER = 'ON_SPEAKER',\n RECONNECTING = 'RECONNECTING',\n RECONNECTED = 'RECONNECTED',\n ON_ROLE_CHANGE_REQUEST = 'ON_ROLE_CHANGE_REQUEST',\n ON_CHANGE_TRACK_STATE_REQUEST = 'ON_CHANGE_TRACK_STATE_REQUEST',\n ON_REMOVED_FROM_ROOM = 'ON_REMOVED_FROM_ROOM',\n ON_RTC_STATS = 'ON_RTC_STATS',\n ON_LOCAL_AUDIO_STATS = 'ON_LOCAL_AUDIO_STATS',\n ON_LOCAL_VIDEO_STATS = 'ON_LOCAL_VIDEO_STATS',\n ON_REMOTE_AUDIO_STATS = 'ON_REMOTE_AUDIO_STATS',\n ON_REMOTE_VIDEO_STATS = 'ON_REMOTE_VIDEO_STATS',\n ON_AUDIO_DEVICE_CHANGED = 'ON_AUDIO_DEVICE_CHANGED',\n ON_SESSION_STORE_AVAILABLE = 'ON_SESSION_STORE_AVAILABLE',\n ON_SESSION_STORE_CHANGED = 'ON_SESSION_STORE_CHANGED',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,wBAAwB,0BAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA"}
1
+ {"version":3,"names":["HMSUpdateListenerActions"],"sources":["HMSUpdateListenerActions.ts"],"sourcesContent":["/**\n * These are the available events emitted by the `HMSSDK`\n *\n * For more info about these events, checkout Event Listener docs\n * {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/listen-to-room-updates/event-listeners}\n */\nexport enum HMSUpdateListenerActions {\n ON_PREVIEW = 'ON_PREVIEW',\n ON_JOIN = 'ON_JOIN',\n ON_ROOM_UPDATE = 'ON_ROOM_UPDATE',\n ON_PEER_UPDATE = '3',\n ON_TRACK_UPDATE = 'ON_TRACK_UPDATE',\n ON_ERROR = 'ON_ERROR',\n ON_MESSAGE = 'ON_MESSAGE',\n ON_SPEAKER = 'ON_SPEAKER',\n RECONNECTING = 'RECONNECTING',\n RECONNECTED = 'RECONNECTED',\n ON_ROLE_CHANGE_REQUEST = 'ON_ROLE_CHANGE_REQUEST',\n ON_CHANGE_TRACK_STATE_REQUEST = 'ON_CHANGE_TRACK_STATE_REQUEST',\n ON_REMOVED_FROM_ROOM = 'ON_REMOVED_FROM_ROOM',\n ON_RTC_STATS = 'ON_RTC_STATS',\n ON_LOCAL_AUDIO_STATS = 'ON_LOCAL_AUDIO_STATS',\n ON_LOCAL_VIDEO_STATS = 'ON_LOCAL_VIDEO_STATS',\n ON_REMOTE_AUDIO_STATS = 'ON_REMOTE_AUDIO_STATS',\n ON_REMOTE_VIDEO_STATS = 'ON_REMOTE_VIDEO_STATS',\n ON_AUDIO_DEVICE_CHANGED = 'ON_AUDIO_DEVICE_CHANGED',\n ON_SESSION_STORE_AVAILABLE = 'ON_SESSION_STORE_AVAILABLE',\n ON_SESSION_STORE_CHANGED = 'ON_SESSION_STORE_CHANGED',\n ON_PEER_LIST_UPDATED = 'ON_PEER_LIST_UPDATED',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,wBAAwB,0BAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA"}
@@ -1,3 +1,4 @@
1
1
  export declare enum HMSPIPListenerActions {
2
+ ON_PIP_MODE_CHANGED = "ON_PIP_MODE_CHANGED",
2
3
  ON_PIP_ROOM_LEAVE = "ON_PIP_ROOM_LEAVE"
3
4
  }
@@ -10,7 +10,9 @@ export declare class HMSPeer {
10
10
  private _customerUserID;
11
11
  private _metadata;
12
12
  private _role;
13
+ private _isHandRaised;
13
14
  private _updateIsLocal;
15
+ private _updateIsHandRaised;
14
16
  private _updateCustomerUserID;
15
17
  private _updateMetadata;
16
18
  private _updateRole;
@@ -19,6 +21,7 @@ export declare class HMSPeer {
19
21
  name: string;
20
22
  });
21
23
  get isLocal(): boolean | undefined;
24
+ get isHandRaised(): boolean;
22
25
  get networkQuality(): HMSNetworkQuality | undefined;
23
26
  get customerUserID(): string | undefined;
24
27
  get metadata(): string | undefined;
@@ -0,0 +1,9 @@
1
+ import type { HMSPeer } from './HMSPeer';
2
+ export declare class HMSPeerListIterator {
3
+ private readonly uniqueId;
4
+ private _totalCount;
5
+ get totalCount(): number;
6
+ constructor(uniqueId: string, totalCount: number);
7
+ hasNext(): Promise<boolean>;
8
+ next(): Promise<HMSPeer[]>;
9
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * options for creating `HMSPeerListIterator` instance
3
+ *
4
+ * ```
5
+ * const peerListIterator = hmsInstance.getPeerListIterator({
6
+ * limit: 10,
7
+ * byRoleName: 'viewer-realtime',
8
+ * });
9
+ * ```
10
+ */
11
+ export interface HMSPeerListIteratorOptions {
12
+ /**
13
+ * filter by role of the peers
14
+ */
15
+ byRoleName?: string;
16
+ /**
17
+ * `peerID`s of the peers you want to fetch with iterator.
18
+ */
19
+ byPeerIds?: string[];
20
+ /**
21
+ * number of peers fetched by the iterator in `next` method call. Default value is `10`
22
+ */
23
+ limit?: number;
24
+ }
@@ -4,6 +4,7 @@ export declare enum HMSPeerUpdate {
4
4
  METADATA_CHANGED = "METADATA_CHANGED",
5
5
  ROLE_CHANGED = "ROLE_CHANGED",
6
6
  NAME_CHANGED = "NAME_CHANGED",
7
- NETWORK_QUALITY_UPDATED = "NETWORK_QUALITY_UPDATED"
7
+ NETWORK_QUALITY_UPDATED = "NETWORK_QUALITY_UPDATED",
8
+ HAND_RAISED_CHANGED = "HAND_RAISED_CHANGED"
8
9
  }
9
10
  export declare const HMSPeerUpdateOrdinals: Map<string, HMSPeerUpdate>;
@@ -20,6 +20,7 @@ export type HMSPeerCacheProps = {
20
20
  audioTrack?: HMSAudioTrack | undefined;
21
21
  videoTrack?: HMSVideoTrack | undefined;
22
22
  auxiliaryTracks?: HMSTrack[] | undefined;
23
+ isHandRaised?: boolean | undefined;
23
24
  };
24
25
  export declare class HMSPeersCache {
25
26
  private _data;
@@ -18,8 +18,11 @@ import type { HMSAudioMode } from './HMSAudioMode';
18
18
  import type { HMSAudioMixingMode } from './HMSAudioMixingMode';
19
19
  import type { HMSLogSettings } from './HMSLogSettings';
20
20
  import { HMSPIPListenerActions } from './HMSPIPListenerActions';
21
+ import type { HMSPeerListIteratorOptions } from './HMSPeerListIteratorOptions';
22
+ import { HMSPeerListIterator } from './HMSPeerListIterator';
21
23
  type HmsViewProps = Omit<HmsComponentProps, 'id'>;
22
24
  interface PIPConfig {
25
+ autoEnterPipMode?: boolean;
23
26
  aspectRatio?: [number, number];
24
27
  endButton?: boolean;
25
28
  audioButton?: boolean;
@@ -33,6 +36,7 @@ export declare class HMSSDK {
33
36
  private onJoinDelegate?;
34
37
  private onRoomDelegate?;
35
38
  private onPeerDelegate?;
39
+ private onPeerListUpdatedDelegate?;
36
40
  private onTrackDelegate?;
37
41
  private onErrorDelegate?;
38
42
  private onMessageDelegate?;
@@ -50,6 +54,7 @@ export declare class HMSSDK {
50
54
  private onAudioDeviceChangedDelegate?;
51
55
  private onSessionStoreAvailableDelegate?;
52
56
  private onPIPRoomLeaveDelegate?;
57
+ private onPIPModeChangedDelegate?;
53
58
  private emitterSubscriptions;
54
59
  private constructor();
55
60
  /**
@@ -525,6 +530,40 @@ export declare class HMSSDK {
525
530
  getRemoteVideoTrackFromTrackId: (trackId: string) => Promise<import("./HMSRemoteVideoTrack").HMSRemoteVideoTrack>;
526
531
  getRemoteAudioTrackFromTrackId: (trackId: string) => Promise<import("./HMSRemoteAudioTrack").HMSRemoteAudioTrack>;
527
532
  getPeerFromPeerId: (peerId: string) => HMSPeer | undefined;
533
+ /**
534
+ * - This function is used to raise hand for the local peer
535
+ * @memberof HMSSDK
536
+ */
537
+ raiseLocalPeerHand: () => Promise<any>;
538
+ /**
539
+ * - This function is used to lower hand for the local peer
540
+ * @memberof HMSSDK
541
+ */
542
+ lowerLocalPeerHand: () => Promise<any>;
543
+ /**
544
+ * - This function is used to lower hand for the remote peer
545
+ * @param peer
546
+ */
547
+ lowerRemotePeerHand: (peer: HMSPeer) => Promise<any>;
548
+ /**
549
+ * `getPeerListIterator` method returns an instance of `HMSPeerListIterator` class
550
+ *
551
+ * @param options options for configuring iterator
552
+ * @returns instance of HMSPeerListIterator class
553
+ *
554
+ * Example usage:
555
+ * ```
556
+ * const peerListIterator = hmsInstance.getPeerListIterator();
557
+ * ```
558
+ * OR
559
+ * ```
560
+ * const peerListIterator = hmsInstance.getPeerListIterator({
561
+ * limit: 10,
562
+ * byRoleName: 'viewer-realtime',
563
+ * });
564
+ * ```
565
+ */
566
+ getPeerListIterator: (options?: HMSPeerListIteratorOptions) => HMSPeerListIterator;
528
567
  /**
529
568
  * - This is a prototype event listener that takes action and listens for updates related to that particular action
530
569
  *
@@ -565,6 +604,9 @@ export declare class HMSSDK {
565
604
  onJoinListener: (data: any) => void;
566
605
  onRoomListener: (data: any) => void;
567
606
  onPeerListener: (peerData: any) => void;
607
+ private sendPeerUpdate;
608
+ private sendPeerUpdateWhenPeerLeaves;
609
+ onPeerListUpdatedListener: (data: any) => void;
568
610
  onTrackListener: (data: any) => void;
569
611
  onMessageListener: (data: any) => void;
570
612
  onSpeakerListener: (data: any) => void;
@@ -590,8 +632,11 @@ export declare class HMSSDK {
590
632
  onPIPRoomLeaveListener: (data: {
591
633
  id: string;
592
634
  }) => void;
635
+ onPIPModeChangedListener: (data: {
636
+ isInPictureInPictureMode: boolean;
637
+ }) => void;
593
638
  isPipModeSupported(): Promise<undefined | boolean>;
594
- enablePipMode(data?: PIPConfig): Promise<undefined | boolean>;
639
+ enterPipMode(data?: PIPConfig): Promise<undefined | boolean>;
595
640
  setPipParams(data?: PIPConfig): Promise<undefined | boolean>;
596
641
  /**
597
642
  * - Returns the instance of logger which can be used to manipulate log levels.
@@ -25,5 +25,6 @@ export declare enum HMSUpdateListenerActions {
25
25
  ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS",
26
26
  ON_AUDIO_DEVICE_CHANGED = "ON_AUDIO_DEVICE_CHANGED",
27
27
  ON_SESSION_STORE_AVAILABLE = "ON_SESSION_STORE_AVAILABLE",
28
- ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED"
28
+ ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED",
29
+ ON_PEER_LIST_UPDATED = "ON_PEER_LIST_UPDATED"
29
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@100mslive/react-native-hms",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Integrate Real Time Audio and Video conferencing, Interactive Live Streaming, and Chat in your apps with 100ms React Native SDK. With support for HLS and RTMP Live Streaming and Recording, Picture-in-Picture (PiP), one-to-one Video Call Modes, Audio Rooms, Video Player and much more, add immersive real-time communications to your apps.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/sdk-versions.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "ios": "0.9.12",
2
+ "ios": "1.1.0",
3
3
  "iOSBroadcastExtension": "0.0.9",
4
4
  "iOSHMSHLSPlayer": "0.0.2",
5
- "android": "2.7.6"
5
+ "android": "2.7.7"
6
6
  }
@@ -1,3 +1,4 @@
1
1
  export enum HMSPIPListenerActions {
2
+ ON_PIP_MODE_CHANGED = 'ON_PIP_MODE_CHANGED',
2
3
  ON_PIP_ROOM_LEAVE = 'ON_PIP_ROOM_LEAVE',
3
4
  }
@@ -13,6 +13,7 @@ export class HMSPeer {
13
13
  private _customerUserID: string | undefined;
14
14
  private _metadata: string | undefined;
15
15
  private _role: HMSRole | undefined;
16
+ private _isHandRaised: boolean = false;
16
17
 
17
18
  private _updateIsLocal(value: boolean) {
18
19
  // If `_isLocal` is outdated, update it
@@ -21,6 +22,13 @@ export class HMSPeer {
21
22
  }
22
23
  }
23
24
 
25
+ private _updateIsHandRaised(value: boolean) {
26
+ // If `_isHandRaised` is outdated, update it
27
+ if (this._isHandRaised !== value) {
28
+ this._isHandRaised = value;
29
+ }
30
+ }
31
+
24
32
  private _updateCustomerUserID(value: string) {
25
33
  // If `_customerUserID` is outdated, update it
26
34
  if (this._customerUserID !== value) {
@@ -64,6 +72,23 @@ export class HMSPeer {
64
72
  return value ?? this._isLocal;
65
73
  }
66
74
 
75
+ get isHandRaised(): boolean {
76
+ const hmsPeersCache = getHmsPeersCache();
77
+
78
+ const value = hmsPeersCache
79
+ ? hmsPeersCache.getProperty(this.peerID, 'isHandRaised')
80
+ : getPeerPropertyFromNative(
81
+ HMSConstants.DEFAULT_SDK_ID,
82
+ this.peerID,
83
+ 'isHandRaised'
84
+ );
85
+
86
+ if (typeof value === 'boolean') {
87
+ this._updateIsHandRaised(value);
88
+ }
89
+ return value ?? this._isHandRaised;
90
+ }
91
+
67
92
  get networkQuality(): HMSNetworkQuality | undefined {
68
93
  const hmsPeersCache = getHmsPeersCache();
69
94
 
@@ -0,0 +1,60 @@
1
+ // import type { HMSException } from "./HMSException";
2
+ import type { HMSPeer } from './HMSPeer';
3
+ import HMSManagerModule from './HMSManagerModule';
4
+ import { HMSEncoder, logger } from '@100mslive/react-native-hms';
5
+ import { HMSConstants } from './HMSConstants';
6
+ import { getHmsPeersCache } from './HMSPeersCache';
7
+
8
+ export class HMSPeerListIterator {
9
+ private readonly uniqueId: string;
10
+ private _totalCount: number = 0;
11
+
12
+ get totalCount() {
13
+ return this._totalCount;
14
+ }
15
+
16
+ constructor(uniqueId: string, totalCount: number) {
17
+ this.uniqueId = uniqueId;
18
+ this._totalCount = totalCount;
19
+ }
20
+
21
+ async hasNext(): Promise<boolean> {
22
+ logger?.verbose('#Function HMSPeerListIterator#hasNext', this.uniqueId);
23
+ try {
24
+ return HMSManagerModule.peerListIteratorHasNext({
25
+ id: HMSConstants.DEFAULT_SDK_ID,
26
+ uniqueId: this.uniqueId,
27
+ });
28
+ } catch (e) {
29
+ logger?.error('#Error in #Function HMSPeerListIterator#hasNext ', e);
30
+ return Promise.reject(e);
31
+ }
32
+ }
33
+
34
+ async next(): Promise<HMSPeer[]> {
35
+ logger?.verbose('#Function HMSPeerListIterator#next', this.uniqueId);
36
+ try {
37
+ const { totalCount, peers } = await HMSManagerModule.peerListIteratorNext({
38
+ id: HMSConstants.DEFAULT_SDK_ID,
39
+ uniqueId: this.uniqueId,
40
+ });
41
+
42
+ this._totalCount = totalCount;
43
+
44
+ if (Array.isArray(peers) && peers.length > 0) {
45
+ const hmsPeersCache = getHmsPeersCache();
46
+
47
+ if (hmsPeersCache) {
48
+ peers.forEach(peer => {
49
+ hmsPeersCache.updatePeerCache(peer.peerID, peer);
50
+ });
51
+ }
52
+ }
53
+
54
+ return HMSEncoder.encodeHmsPeers(peers);
55
+ } catch (e) {
56
+ logger?.error('#Error in #Function HMSPeerListIterator#next ', e);
57
+ return Promise.reject(e);
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * options for creating `HMSPeerListIterator` instance
3
+ *
4
+ * ```
5
+ * const peerListIterator = hmsInstance.getPeerListIterator({
6
+ * limit: 10,
7
+ * byRoleName: 'viewer-realtime',
8
+ * });
9
+ * ```
10
+ */
11
+ export interface HMSPeerListIteratorOptions {
12
+ /**
13
+ * filter by role of the peers
14
+ */
15
+ byRoleName?: string;
16
+
17
+ /**
18
+ * `peerID`s of the peers you want to fetch with iterator.
19
+ */
20
+ byPeerIds?: string[];
21
+
22
+ /**
23
+ * number of peers fetched by the iterator in `next` method call. Default value is `10`
24
+ */
25
+ limit?: number;
26
+ }
@@ -5,6 +5,7 @@ export enum HMSPeerUpdate {
5
5
  ROLE_CHANGED = 'ROLE_CHANGED',
6
6
  NAME_CHANGED = 'NAME_CHANGED',
7
7
  NETWORK_QUALITY_UPDATED = 'NETWORK_QUALITY_UPDATED',
8
+ HAND_RAISED_CHANGED = 'HAND_RAISED_CHANGED',
8
9
  }
9
10
 
10
11
  export const HMSPeerUpdateOrdinals = new Map([
@@ -14,4 +15,5 @@ export const HMSPeerUpdateOrdinals = new Map([
14
15
  ['5', HMSPeerUpdate.NAME_CHANGED],
15
16
  ['6', HMSPeerUpdate.METADATA_CHANGED],
16
17
  ['7', HMSPeerUpdate.NETWORK_QUALITY_UPDATED],
18
+ ['8', HMSPeerUpdate.HAND_RAISED_CHANGED],
17
19
  ]);
@@ -39,6 +39,7 @@ export type HMSPeerCacheProps = {
39
39
  audioTrack?: HMSAudioTrack | undefined;
40
40
  videoTrack?: HMSVideoTrack | undefined;
41
41
  auxiliaryTracks?: HMSTrack[] | undefined;
42
+ isHandRaised?: boolean | undefined;
42
43
  };
43
44
 
44
45
  export class HMSPeersCache {
@@ -206,6 +207,10 @@ export class HMSPeersCache {
206
207
  updatedObj.name = data.name;
207
208
  break;
208
209
  }
210
+ case HMSPeerUpdate.HAND_RAISED_CHANGED: {
211
+ updatedObj.isHandRaised = data.isHandRaised;
212
+ break;
213
+ }
209
214
  default: {
210
215
  updatedObj = { ...updatedObj, ...data };
211
216
  break;
@@ -256,6 +261,8 @@ export function getPeerPropertyFromNative<T extends keyof HMSPeerCacheProps>(
256
261
  : undefined;
257
262
  } else if (property === 'name') {
258
263
  value = data?.[property];
264
+ } else if (property === 'isHandRaised') {
265
+ value = data ? data[property] : false;
259
266
  } else {
260
267
  value = data ? data[property] : undefined;
261
268
  }
@@ -41,13 +41,16 @@ import {
41
41
  HMSRoomCache,
42
42
  setHmsRoomCache,
43
43
  } from './HMSRoomCache';
44
- import { HMSPeerUpdateOrdinals } from './HMSPeerUpdate';
44
+ import { HMSPeerUpdate, HMSPeerUpdateOrdinals } from './HMSPeerUpdate';
45
45
  import { HMSSessionStore } from './HMSSessionStore';
46
+ import type { HMSPeerListIteratorOptions } from './HMSPeerListIteratorOptions';
47
+ import { HMSPeerListIterator } from './HMSPeerListIterator';
46
48
 
47
49
  type HmsViewProps = Omit<HmsComponentProps, 'id'>;
48
50
 
49
51
  // TODO: Rename to HMSPIPConfig & to be moved to a separate file
50
52
  interface PIPConfig {
53
+ autoEnterPipMode?: boolean;
51
54
  aspectRatio?: [number, number];
52
55
  endButton?: boolean;
53
56
  audioButton?: boolean;
@@ -66,6 +69,7 @@ export class HMSSDK {
66
69
  private onJoinDelegate?: any;
67
70
  private onRoomDelegate?: any;
68
71
  private onPeerDelegate?: any;
72
+ private onPeerListUpdatedDelegate?: any;
69
73
  private onTrackDelegate?: any;
70
74
  private onErrorDelegate?: any;
71
75
  private onMessageDelegate?: any;
@@ -83,6 +87,7 @@ export class HMSSDK {
83
87
  private onAudioDeviceChangedDelegate?: any;
84
88
  private onSessionStoreAvailableDelegate?: any;
85
89
  private onPIPRoomLeaveDelegate?: any;
90
+ private onPIPModeChangedDelegate?: any;
86
91
 
87
92
  private emitterSubscriptions: Partial<
88
93
  Record<
@@ -1145,6 +1150,86 @@ export class HMSSDK {
1145
1150
  return HMSEncoder.encodeHmsPeer({ peerID: peerId });
1146
1151
  };
1147
1152
 
1153
+ /**
1154
+ * - This function is used to raise hand for the local peer
1155
+ * @memberof HMSSDK
1156
+ */
1157
+ raiseLocalPeerHand = async () => {
1158
+ const data = {
1159
+ id: this.id,
1160
+ };
1161
+ logger?.verbose('#Function raiseLocalPeerHand', data);
1162
+ return HMSManager.raiseLocalPeerHand(data);
1163
+ };
1164
+
1165
+ /**
1166
+ * - This function is used to lower hand for the local peer
1167
+ * @memberof HMSSDK
1168
+ */
1169
+ lowerLocalPeerHand = async () => {
1170
+ const data = {
1171
+ id: this.id,
1172
+ };
1173
+ logger?.verbose('#Function lowerLocalPeerHand', data);
1174
+ return HMSManager.lowerLocalPeerHand(data);
1175
+ };
1176
+
1177
+ /**
1178
+ * - This function is used to lower hand for the remote peer
1179
+ * @param peer
1180
+ */
1181
+ lowerRemotePeerHand = async (peer: HMSPeer) => {
1182
+ const data = {
1183
+ peerId: peer.peerID,
1184
+ id: this.id,
1185
+ };
1186
+ logger?.verbose('#Function lowerRemotePeerHand', data);
1187
+ return HMSManager.lowerRemotePeerHand(data);
1188
+ };
1189
+
1190
+ /**
1191
+ * `getPeerListIterator` method returns an instance of `HMSPeerListIterator` class
1192
+ *
1193
+ * @param options options for configuring iterator
1194
+ * @returns instance of HMSPeerListIterator class
1195
+ *
1196
+ * Example usage:
1197
+ * ```
1198
+ * const peerListIterator = hmsInstance.getPeerListIterator();
1199
+ * ```
1200
+ * OR
1201
+ * ```
1202
+ * const peerListIterator = hmsInstance.getPeerListIterator({
1203
+ * limit: 10,
1204
+ * byRoleName: 'viewer-realtime',
1205
+ * });
1206
+ * ```
1207
+ */
1208
+ getPeerListIterator = (
1209
+ options?: HMSPeerListIteratorOptions
1210
+ ): HMSPeerListIterator => {
1211
+ logger?.verbose('#Function getPeerListIterator', {
1212
+ id: this.id,
1213
+ options,
1214
+ });
1215
+
1216
+ const uniqueId = Math.random().toString(16).slice(2);
1217
+
1218
+ const data: null | { sucess: boolean; uniqueId: string; totalCount: number; } =
1219
+ HMSManager.getPeerListIterator({
1220
+ id: this.id,
1221
+ ...options,
1222
+ limit: options?.limit ?? 10,
1223
+ uniqueId,
1224
+ });
1225
+
1226
+ if (!data) {
1227
+ throw new Error('Unable to create PeerListIterator');
1228
+ }
1229
+
1230
+ return new HMSPeerListIterator(data.uniqueId, data.totalCount);
1231
+ };
1232
+
1148
1233
  /**
1149
1234
  * - This is a prototype event listener that takes action and listens for updates related to that particular action
1150
1235
  *
@@ -1229,6 +1314,28 @@ export class HMSSDK {
1229
1314
  this.onPeerDelegate = callback;
1230
1315
  break;
1231
1316
  }
1317
+ case HMSUpdateListenerActions.ON_PEER_LIST_UPDATED: {
1318
+ // Checking if we already have ON_PEER_LIST_UPDATED subscription
1319
+ if (
1320
+ !this.emitterSubscriptions[
1321
+ HMSUpdateListenerActions.ON_PEER_LIST_UPDATED
1322
+ ]
1323
+ ) {
1324
+ // Adding ON_PEER_LIST_UPDATED native listener
1325
+ const peerListUpdatedSubscription =
1326
+ HMSNativeEventListener.addListener(
1327
+ this.id,
1328
+ HMSUpdateListenerActions.ON_PEER_LIST_UPDATED,
1329
+ this.onPeerListUpdatedListener
1330
+ );
1331
+ this.emitterSubscriptions[
1332
+ HMSUpdateListenerActions.ON_PEER_LIST_UPDATED
1333
+ ] = peerListUpdatedSubscription;
1334
+ }
1335
+ // Adding App Delegate listener
1336
+ this.onPeerListUpdatedDelegate = callback;
1337
+ break;
1338
+ }
1232
1339
  case HMSUpdateListenerActions.ON_TRACK_UPDATE: {
1233
1340
  // Checking if we already have ON_TRACK_UPDATE subscription
1234
1341
  if (
@@ -1554,6 +1661,25 @@ export class HMSSDK {
1554
1661
  }
1555
1662
  break;
1556
1663
  }
1664
+ case HMSPIPListenerActions.ON_PIP_MODE_CHANGED: {
1665
+ if (Platform.OS === 'android') {
1666
+ // Checking if we already have ON_PIP_MODE_CHANGED subscription
1667
+ if (
1668
+ !this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED]
1669
+ ) {
1670
+ const pipModeChangedSubscription = HMSNativeEventListener.addListener(
1671
+ this.id,
1672
+ HMSPIPListenerActions.ON_PIP_MODE_CHANGED,
1673
+ this.onPIPModeChangedListener
1674
+ );
1675
+ this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED] =
1676
+ pipModeChangedSubscription;
1677
+ }
1678
+ // Adding PIP mode changed Delegate listener
1679
+ this.onPIPModeChangedDelegate = callback;
1680
+ }
1681
+ break;
1682
+ }
1557
1683
  default:
1558
1684
  }
1559
1685
  };
@@ -1893,6 +2019,22 @@ export class HMSSDK {
1893
2019
  }
1894
2020
  break;
1895
2021
  }
2022
+ case HMSPIPListenerActions.ON_PIP_MODE_CHANGED: {
2023
+ if (Platform.OS === 'android') {
2024
+ const subscription =
2025
+ this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED];
2026
+ // Removing ON_PIP_MODE_CHANGED native listener
2027
+ if (subscription) {
2028
+ subscription.remove();
2029
+
2030
+ this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED] =
2031
+ undefined;
2032
+ }
2033
+ // Removing App Delegate listener
2034
+ this.onPIPModeChangedDelegate = null;
2035
+ }
2036
+ break;
2037
+ }
1896
2038
  default:
1897
2039
  }
1898
2040
  };
@@ -2015,8 +2157,15 @@ export class HMSSDK {
2015
2157
  const peer: HMSPeer = HMSEncoder.encodeHmsPeer(data.peer);
2016
2158
  const type = HMSEncoder.encodeHmsPeerUpdate(data.type) || data.type;
2017
2159
 
2018
- getHmsPeersCache()?.updatePeerCache(data.peer.peerID, data.peer, type);
2160
+ if (type === HMSPeerUpdate.PEER_LEFT) {
2161
+ this.sendPeerUpdateWhenPeerLeaves(data, peer, type);
2162
+ } else {
2163
+ getHmsPeersCache()?.updatePeerCache(data.peer.peerID, data.peer, type);
2164
+ this.sendPeerUpdate(peer, type);
2165
+ }
2166
+ };
2019
2167
 
2168
+ private sendPeerUpdate = (peer: any, type: any) => {
2020
2169
  if (this.onPeerDelegate) {
2021
2170
  logger?.verbose('#Listener ON_PEER_LISTENER_CALL', {
2022
2171
  peer,
@@ -2024,6 +2173,32 @@ export class HMSSDK {
2024
2173
  });
2025
2174
  this.onPeerDelegate({ peer, type });
2026
2175
  }
2176
+ }
2177
+
2178
+ private sendPeerUpdateWhenPeerLeaves = (data: any, peer: any, type: any) => {
2179
+ this.sendPeerUpdate(peer, type);
2180
+
2181
+ getHmsPeersCache()?.updatePeerCache(data.peer.peerID, data.peer, type);
2182
+ }
2183
+
2184
+ onPeerListUpdatedListener = (data: any) => {
2185
+ if (data.id !== this.id) {
2186
+ return;
2187
+ }
2188
+ const addedPeers = HMSEncoder.encodeHmsPeers(data.addedPeers);
2189
+ const removedPeers = HMSEncoder.encodeHmsPeers(data.removedPeers);
2190
+
2191
+ if (this.onPeerListUpdatedDelegate) {
2192
+ logger?.verbose('#Listener ON_PEER_LIST_UPDATED_LISTENER_CALL', {
2193
+ totalAddedPeers: addedPeers.length,
2194
+ totalRemovedPeers: removedPeers.length,
2195
+ });
2196
+
2197
+ this.onPeerListUpdatedDelegate({
2198
+ addedPeers,
2199
+ removedPeers,
2200
+ });
2201
+ }
2027
2202
  };
2028
2203
 
2029
2204
  onTrackListener = (data: any) => {
@@ -2324,12 +2499,20 @@ export class HMSSDK {
2324
2499
  }
2325
2500
  };
2326
2501
 
2502
+ onPIPModeChangedListener = (data: { isInPictureInPictureMode: boolean }) => {
2503
+ if (this.onPIPModeChangedDelegate) {
2504
+ logger?.verbose('#Listener onPIPModeChanged_CALL', data);
2505
+
2506
+ this.onPIPModeChangedDelegate(data);
2507
+ }
2508
+ }
2509
+
2327
2510
  async isPipModeSupported(): Promise<undefined | boolean> {
2328
2511
  return HMSManager.handlePipActions('isPipModeSupported', { id: this.id });
2329
2512
  }
2330
2513
 
2331
- async enablePipMode(data?: PIPConfig): Promise<undefined | boolean> {
2332
- return HMSManager.handlePipActions('enablePipMode', {
2514
+ async enterPipMode(data?: PIPConfig): Promise<undefined | boolean> {
2515
+ return HMSManager.handlePipActions('enterPipMode', {
2333
2516
  ...data,
2334
2517
  id: this.id,
2335
2518
  });
@@ -26,4 +26,5 @@ export enum HMSUpdateListenerActions {
26
26
  ON_AUDIO_DEVICE_CHANGED = 'ON_AUDIO_DEVICE_CHANGED',
27
27
  ON_SESSION_STORE_AVAILABLE = 'ON_SESSION_STORE_AVAILABLE',
28
28
  ON_SESSION_STORE_CHANGED = 'ON_SESSION_STORE_CHANGED',
29
+ ON_PEER_LIST_UPDATED = 'ON_PEER_LIST_UPDATED',
29
30
  }