@livedigital/client 3.40.0-test-rejoins.2 → 3.40.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 (95) hide show
  1. package/dist/constants/common.d.ts +2 -0
  2. package/dist/constants/common.ts +4 -0
  3. package/dist/constants/events.d.ts +4 -2
  4. package/dist/constants/events.ts +4 -2
  5. package/dist/engine/ChannelStateSynchronizer/ChannelStateSynchronizer.d.ts +6 -2
  6. package/dist/engine/EventsQueue.d.ts +9 -4
  7. package/dist/engine/PeerProducer.d.ts +1 -1
  8. package/dist/engine/Peers.d.ts +2 -4
  9. package/dist/engine/PeersStorage.d.ts +13 -0
  10. package/dist/engine/handlers/ChannelAudioObserverEventHandler.d.ts +4 -3
  11. package/dist/engine/handlers/ChannelEventHandler.d.ts +20 -8
  12. package/dist/engine/handlers/ChannelStateSyncEventHandler/ChannelStateConsistencyChecker.d.ts +3 -3
  13. package/dist/engine/handlers/ChannelStateSyncEventHandler/index.d.ts +6 -7
  14. package/dist/engine/handlers/MediaEventHandler.d.ts +27 -0
  15. package/dist/engine/index.d.ts +4 -7
  16. package/dist/engine/network/DataChannelsManager.d.ts +13 -14
  17. package/dist/engine/network/index.d.ts +12 -7
  18. package/dist/helpers/channelMessageConverter.d.ts +16 -0
  19. package/dist/helpers/common.d.ts +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.es.js +2 -2
  22. package/dist/index.js +2 -2
  23. package/dist/inversify.tokens.d.ts +3 -2
  24. package/dist/proto/generated/channel/channel_activity_confirmation_time.d.ts +25 -0
  25. package/dist/proto/generated/channel/channel_management_event.d.ts +32 -0
  26. package/dist/proto/generated/channel/channel_produce_permissions.d.ts +29 -0
  27. package/dist/proto/generated/channel/channel_state.d.ts +26 -0
  28. package/dist/proto/generated/channel/channel_state_short.d.ts +36 -0
  29. package/dist/proto/generated/channel_message/channel_event.d.ts +56 -0
  30. package/dist/proto/generated/channel_message/channel_message.d.ts +29 -0
  31. package/dist/proto/generated/channel_message/media_event.d.ts +51 -0
  32. package/dist/proto/generated/consumer/consumer.d.ts +29 -0
  33. package/dist/proto/generated/google/protobuf/struct.d.ts +107 -0
  34. package/dist/proto/generated/google/protobuf/timestamp.d.ts +128 -0
  35. package/dist/proto/generated/peer/peer.d.ts +45 -0
  36. package/dist/proto/generated/peer/peer_group.d.ts +9 -0
  37. package/dist/proto/generated/peer/peer_role.d.ts +9 -0
  38. package/dist/proto/generated/producer/producer.d.ts +33 -0
  39. package/dist/proto/generated/producer/producer_kind.d.ts +9 -0
  40. package/dist/proto/generated/producer/producer_label.d.ts +14 -0
  41. package/dist/proto/generated/producer/producer_spatial_layer_request.d.ts +26 -0
  42. package/dist/proto/generated/transport/transport_connection_timeout.d.ts +30 -0
  43. package/dist/proto/generated/transport/transport_connection_timeout_reason.d.ts +9 -0
  44. package/dist/proto/generated/transport/transport_direction.d.ts +9 -0
  45. package/dist/types/channelStateSyncronizer.d.ts +6 -16
  46. package/dist/types/common.d.ts +3 -14
  47. package/dist/types/engine.d.ts +1 -0
  48. package/package.json +4 -3
  49. package/src/constants/common.ts +4 -0
  50. package/src/constants/events.ts +4 -2
  51. package/src/engine/ChannelStateSynchronizer/ChannelStateSynchronizer.ts +99 -21
  52. package/src/engine/EventsQueue.ts +230 -98
  53. package/src/engine/PeerProducer.ts +3 -3
  54. package/src/engine/Peers.ts +6 -23
  55. package/src/engine/PeersStorage.ts +45 -0
  56. package/src/engine/handlers/ChannelAudioObserverEventHandler.ts +20 -9
  57. package/src/engine/handlers/ChannelEventHandler.ts +205 -105
  58. package/src/engine/handlers/ChannelStateSyncEventHandler/ChannelStateConsistencyChecker.ts +15 -12
  59. package/src/engine/handlers/ChannelStateSyncEventHandler/index.ts +38 -32
  60. package/src/engine/handlers/MediaEventHandler.ts +270 -0
  61. package/src/engine/index.ts +62 -21
  62. package/src/engine/network/DataChannelsManager.ts +79 -77
  63. package/src/engine/network/index.ts +118 -54
  64. package/src/helpers/channelMessageConverter.ts +124 -0
  65. package/src/helpers/common.ts +5 -5
  66. package/src/index.ts +4 -0
  67. package/src/inversify.config.ts +9 -3
  68. package/src/inversify.tokens.ts +2 -1
  69. package/src/proto/.gitkeep +0 -0
  70. package/src/proto/generated/channel/channel_activity_confirmation_time.ts +110 -0
  71. package/src/proto/generated/channel/channel_management_event.ts +213 -0
  72. package/src/proto/generated/channel/channel_produce_permissions.ts +171 -0
  73. package/src/proto/generated/channel/channel_state.ts +94 -0
  74. package/src/proto/generated/channel/channel_state_short.ts +282 -0
  75. package/src/proto/generated/channel_message/channel_event.ts +343 -0
  76. package/src/proto/generated/channel_message/channel_message.ts +139 -0
  77. package/src/proto/generated/channel_message/media_event.ts +290 -0
  78. package/src/proto/generated/consumer/consumer.ts +167 -0
  79. package/src/proto/generated/google/protobuf/struct.ts +588 -0
  80. package/src/proto/generated/google/protobuf/timestamp.ts +229 -0
  81. package/src/proto/generated/peer/peer.ts +430 -0
  82. package/src/proto/generated/peer/peer_group.ts +48 -0
  83. package/src/proto/generated/peer/peer_role.ts +48 -0
  84. package/src/proto/generated/producer/producer.ts +204 -0
  85. package/src/proto/generated/producer/producer_kind.ts +48 -0
  86. package/src/proto/generated/producer/producer_label.ts +78 -0
  87. package/src/proto/generated/producer/producer_spatial_layer_request.ts +116 -0
  88. package/src/proto/generated/transport/transport_connection_timeout.ts +156 -0
  89. package/src/proto/generated/transport/transport_connection_timeout_reason.ts +48 -0
  90. package/src/proto/generated/transport/transport_direction.ts +48 -0
  91. package/src/types/channelStateSyncronizer.ts +7 -18
  92. package/src/types/common.ts +3 -17
  93. package/src/types/engine.ts +1 -0
  94. package/dist/engine/handlers/MediaSoupEventHandler.d.ts +0 -19
  95. package/src/engine/handlers/MediaSoupEventHandler.ts +0 -202
@@ -55,3 +55,5 @@ export declare enum HttpStatusCode {
55
55
  ServiceUnavailable = 503,
56
56
  GatewayTimeout = 504
57
57
  }
58
+ export declare const CHANNEL_MESSAGES_DATA_PRODUCER = "channel-messages-data-producer";
59
+ export declare const UI_BLOCKING_THRESHOLD_MS = 50;
@@ -83,3 +83,7 @@ export enum HttpStatusCode {
83
83
  ServiceUnavailable = 503,
84
84
  GatewayTimeout = 504,
85
85
  }
86
+
87
+ export const CHANNEL_MESSAGES_DATA_PRODUCER = 'channel-messages-data-producer';
88
+
89
+ export const UI_BLOCKING_THRESHOLD_MS = 50;
@@ -2,6 +2,8 @@ export declare const CHANNEL_EVENTS: {
2
2
  readonly channelEvent: "channel.event";
3
3
  readonly channelJoin: "channel.join";
4
4
  readonly channelGetPeers: "channel.getPeers";
5
+ readonly channelTriggerStateEvent: "channel.triggerStateEvent";
6
+ readonly channelState: "channel.state";
5
7
  readonly channelLeave: "peer.disconnected";
6
8
  readonly updatePeerAppData: "peer.updateAppData";
7
9
  readonly activityConfirm: "channel.confirmActivity";
@@ -9,8 +11,6 @@ export declare const CHANNEL_EVENTS: {
9
11
  readonly activityConfirmationRequired: "channel.activityConfirmationRequired";
10
12
  readonly activityConfirmationExpired: "channel.activityConfirmationExpired";
11
13
  readonly getAudioObserverProducer: "channel.getAudioObserverProducer";
12
- readonly getGeneralDataProducer: "channel.getGeneralDataProducer";
13
- readonly getChannelStateSyncDataProducer: "channel.getChannelStateSyncDataProducer";
14
14
  readonly changeProducePermissions: "channel.changeProducePermissions";
15
15
  readonly deleteProducePermissions: "channel.deleteProducePermissions";
16
16
  readonly changePeerProducePermissions: "peer.changeProducePermissions";
@@ -18,6 +18,7 @@ export declare const CHANNEL_EVENTS: {
18
18
  readonly removePeerProducePermissions: "peer.removeProducePermissions";
19
19
  readonly changePeerGroups: "peer.groupsChanged";
20
20
  readonly ping: "peer.ping";
21
+ readonly audioObserverMessage: "audioObserver.message";
21
22
  };
22
23
  export declare const CLIENT_EVENTS: {
23
24
  readonly channelEvent: "channel-event";
@@ -38,6 +39,7 @@ export declare const CLIENT_EVENTS: {
38
39
  readonly forcedDisconnect: "forced-disconnect";
39
40
  readonly rejectUnauthorized: "reject-unauthorized";
40
41
  readonly denoiserInitializing: "denoiser-initializing";
42
+ readonly channelStateSynced: "channel-state-synced";
41
43
  readonly denoiserEnabled: "denoiser-enabled";
42
44
  readonly denoiserDisabled: "denoiser-disabled";
43
45
  readonly denoiserFallback: "denoiser-fallback";
@@ -2,6 +2,8 @@ export const CHANNEL_EVENTS = {
2
2
  channelEvent: 'channel.event',
3
3
  channelJoin: 'channel.join',
4
4
  channelGetPeers: 'channel.getPeers',
5
+ channelTriggerStateEvent: 'channel.triggerStateEvent',
6
+ channelState: 'channel.state',
5
7
  channelLeave: 'peer.disconnected',
6
8
  updatePeerAppData: 'peer.updateAppData',
7
9
  activityConfirm: 'channel.confirmActivity',
@@ -9,8 +11,6 @@ export const CHANNEL_EVENTS = {
9
11
  activityConfirmationRequired: 'channel.activityConfirmationRequired',
10
12
  activityConfirmationExpired: 'channel.activityConfirmationExpired',
11
13
  getAudioObserverProducer: 'channel.getAudioObserverProducer',
12
- getGeneralDataProducer: 'channel.getGeneralDataProducer',
13
- getChannelStateSyncDataProducer: 'channel.getChannelStateSyncDataProducer',
14
14
  changeProducePermissions: 'channel.changeProducePermissions',
15
15
  deleteProducePermissions: 'channel.deleteProducePermissions',
16
16
  changePeerProducePermissions: 'peer.changeProducePermissions',
@@ -18,6 +18,7 @@ export const CHANNEL_EVENTS = {
18
18
  removePeerProducePermissions: 'peer.removeProducePermissions',
19
19
  changePeerGroups: 'peer.groupsChanged',
20
20
  ping: 'peer.ping',
21
+ audioObserverMessage: 'audioObserver.message',
21
22
  } as const;
22
23
 
23
24
  export const CLIENT_EVENTS = {
@@ -39,6 +40,7 @@ export const CLIENT_EVENTS = {
39
40
  forcedDisconnect: 'forced-disconnect',
40
41
  rejectUnauthorized: 'reject-unauthorized',
41
42
  denoiserInitializing: 'denoiser-initializing',
43
+ channelStateSynced: 'channel-state-synced',
42
44
  denoiserEnabled: 'denoiser-enabled',
43
45
  denoiserDisabled: 'denoiser-disabled',
44
46
  denoiserFallback: 'denoiser-fallback',
@@ -6,6 +6,7 @@ import EnhancedEventEmitter from '../../EnhancedEventEmitter';
6
6
  import EventsQueue from '../EventsQueue';
7
7
  import Logger from '../Logger';
8
8
  import { RestoreChannelStateResult } from './types';
9
+ import { ChannelState } from '../../proto/generated/channel/channel_state';
9
10
  declare class ChannelStateSynchronizer {
10
11
  #private;
11
12
  private readonly network;
@@ -14,10 +15,13 @@ declare class ChannelStateSynchronizer {
14
15
  private readonly eventsQueue;
15
16
  private readonly clientEventEmitter;
16
17
  private readonly peers;
17
- readonly debouncedRestoreState: (this: ChannelStateSynchronizer, ...args: Parameters<() => Promise<void>>) => void | Promise<void>;
18
+ readonly debouncedTriggerChannelStateEvent: (this: ChannelStateSynchronizer) => void;
18
19
  constructor(network: Network, media: Media, myPeer: MyPeer, eventsQueue: EventsQueue, clientEventEmitter: EnhancedEventEmitter, peers: Peers, loggerFactory: (namespace: string) => Logger);
20
+ handleChannelStateEvent(channelState: ChannelState): void;
19
21
  private watchNetworkState;
20
- restoreState(): Promise<RestoreChannelStateResult>;
22
+ triggerChannelStateEvent(): Promise<void>;
23
+ loadChannelState(channelState: ChannelState): void;
24
+ restoreState(channelState: ChannelState): Promise<RestoreChannelStateResult>;
21
25
  private restoreRemoteProducersState;
22
26
  private removeUnnecessaryPeers;
23
27
  private setMissingPeers;
@@ -1,16 +1,21 @@
1
1
  import { DataConsumer } from 'mediasoup-client/lib/DataConsumer';
2
2
  import { Logger } from '../types/common';
3
+ import { ChannelEvent } from '../proto/generated/channel_message/channel_event';
4
+ import { MediaEvent } from '../proto/generated/channel_message/media_event';
3
5
  export default class EventsQueue {
4
6
  #private;
5
7
  constructor(loggerFactory: (namespace: string) => Logger);
8
+ setMediaEventHandler(handler: (event: MediaEvent) => void): void;
9
+ setChannelEventHandler(handler: (event: ChannelEvent) => void): void;
6
10
  subscribe(dataChannel: DataConsumer): void;
7
- on(event: string, handler: (...args: any[]) => void | Promise<void>): void;
8
- removeListener(event: string): void;
9
- removeListeners(events: string[], emitter?: DataConsumer): void;
10
11
  private push;
11
12
  private process;
12
- private emit;
13
+ private processMessageChunk;
14
+ private parseMessageChunkHeader;
15
+ private isPendingMessageFullyReceived;
16
+ private finalizeMessageBytes;
13
17
  pause(): void;
14
18
  size(): number;
15
19
  resume(): void;
20
+ isMessageReceived(messageId: number): boolean;
16
21
  }
@@ -8,8 +8,8 @@ declare class PeerProducer {
8
8
  readonly label: TrackLabel;
9
9
  paused: boolean;
10
10
  readonly encodings: RtpEncodingParameters[];
11
- readonly trackTransformParams: TrackTransformParams;
12
11
  readonly maxSpatialLayer: number;
12
+ readonly trackTransformParams?: TrackTransformParams;
13
13
  constructor(params: ProducerData);
14
14
  }
15
15
  export default PeerProducer;
@@ -5,6 +5,7 @@ import { MyPeer } from './MyPeer';
5
5
  import Network from './network';
6
6
  import Peer from './Peer';
7
7
  import PeerConsumer from './PeerConsumer';
8
+ import PeersStorage from './PeersStorage';
8
9
  export interface IPeersService {
9
10
  has: (id: Peer['id']) => boolean;
10
11
  get: (id: Peer['id']) => Peer | undefined;
@@ -16,7 +17,6 @@ export interface IPeersService {
16
17
  load: (role?: Role) => Promise<void>;
17
18
  add: (peerData: PeerResponse, emit: boolean) => Peer;
18
19
  isModerator: (id: Peer['id'] | undefined) => boolean;
19
- setActiveSpeaker: (peer?: Peer) => void;
20
20
  }
21
21
  export interface CreatePeerParams {
22
22
  id: string;
@@ -39,8 +39,7 @@ export declare class Peers implements IPeersService {
39
39
  private readonly peerFactory;
40
40
  private readonly clientEventEmitter;
41
41
  private readonly peersStorage;
42
- private activePeerId?;
43
- constructor(myPeer: MyPeer, network: Network, peerFactory: PeerFactory, clientEventEmitter: EnhancedEventEmitter);
42
+ constructor(myPeer: MyPeer, network: Network, peerFactory: PeerFactory, clientEventEmitter: EnhancedEventEmitter, peersStorage: PeersStorage);
44
43
  has(id: Peer['id']): boolean;
45
44
  private set;
46
45
  get(id: Peer['id']): Peer | undefined;
@@ -53,5 +52,4 @@ export declare class Peers implements IPeersService {
53
52
  load(role?: Role): Promise<void>;
54
53
  add(peerData: PeerResponse, emit?: boolean): Peer;
55
54
  isModerator(id: Peer['id'] | undefined): boolean;
56
- setActiveSpeaker(peer?: Peer): void;
57
55
  }
@@ -0,0 +1,13 @@
1
+ import Peer from './Peer';
2
+ declare class PeersStorage {
3
+ private readonly peers;
4
+ has(id: Peer['id']): boolean;
5
+ set(id: Peer['id'], peer: Peer): void;
6
+ get(id: Peer['id']): Peer | undefined;
7
+ delete(id: Peer['id']): boolean;
8
+ all(): Peer[];
9
+ hosts(): Peer[];
10
+ audience(): Peer[];
11
+ clear(): void;
12
+ }
13
+ export default PeersStorage;
@@ -1,16 +1,17 @@
1
1
  import EnhancedEventEmitter from '../../EnhancedEventEmitter';
2
2
  import Logger from '../Logger';
3
- import { Peers } from '../Peers';
3
+ import PeersStorage from '../PeersStorage';
4
4
  declare class ChannelAudioObserverEventHandler {
5
5
  #private;
6
- private readonly peers;
6
+ private readonly peersStorage;
7
7
  private readonly clientEventEmitter;
8
- constructor(peers: Peers, clientEventEmitter: EnhancedEventEmitter, loggerFactory: (namespace: string) => Logger);
8
+ constructor(peersStorage: PeersStorage, clientEventEmitter: EnhancedEventEmitter, loggerFactory: (namespace: string) => Logger);
9
9
  handle(data: string): void;
10
10
  private handleDominantSpeaker;
11
11
  private handlePeerVolumes;
12
12
  private handleSilence;
13
13
  private watchPeersLeave;
14
+ private setActiveSpeaker;
14
15
  private static validateEventPayload;
15
16
  static throwInvalidPayload(): void;
16
17
  }
@@ -1,17 +1,29 @@
1
1
  import EnhancedEventEmitter from '../../EnhancedEventEmitter';
2
- import EventsQueue from '../EventsQueue';
3
2
  import Logger from '../Logger';
4
3
  import { Peers } from '../Peers';
5
- import DataChannelsManager from '../network/DataChannelsManager';
4
+ import ChannelStateSyncEventHandler from './ChannelStateSyncEventHandler';
5
+ import type { ChannelEvent } from '../../proto/generated/channel_message/channel_event';
6
+ import ChannelStateSynchronizer from '../ChannelStateSynchronizer/ChannelStateSynchronizer';
6
7
  declare class ChannelEventHandler {
7
8
  #private;
8
- private readonly eventsQueue;
9
- private readonly dataChannelsManager;
10
9
  private readonly peers;
11
10
  private readonly clientEventEmitter;
12
- constructor(eventsQueue: EventsQueue, dataChannelsManager: DataChannelsManager, peers: Peers, clientEventEmitter: EnhancedEventEmitter, loggerFactory: (namespace: string) => Logger);
13
- subscribeToEvents(): void;
14
- private removeEventListeners;
15
- reset(): void;
11
+ private readonly channelStateSyncEventHandler;
12
+ private readonly channelStateSynchronizer;
13
+ constructor(peers: Peers, clientEventEmitter: EnhancedEventEmitter, loggerFactory: (namespace: string) => Logger, channelStateSyncEventHandler: ChannelStateSyncEventHandler, channelStateSynchronizer: ChannelStateSynchronizer);
14
+ handleChannelEvent(event: ChannelEvent): void;
15
+ private handleChannelManagementEvent;
16
+ private handlePeerJoined;
17
+ private handlePeerLeft;
18
+ private handleChannelState;
19
+ private handleChannelStateShort;
20
+ private handlePeerAppDataChanged;
21
+ private handlePeerGroupsChanged;
22
+ private handleChannelActivityConfirmationExpired;
23
+ private handleChannelActivityConfirmationAcquired;
24
+ private handleChannelActivityConfirmationRequired;
25
+ private handleChannelProducePermissionsChanged;
26
+ private handlePeerProducePermissionsChanged;
27
+ private handleChannelProducePermissionsDeleted;
16
28
  }
17
29
  export default ChannelEventHandler;
@@ -1,8 +1,8 @@
1
- import type { ChannelState } from '../../../types/channelStateSyncronizer';
1
+ import type { ChannelStateShort } from '../../../proto/generated/channel/channel_state_short';
2
2
  import ChannelStateConsistencyCheckResult from './ChannelStateConsistencyCheckResult';
3
3
  interface ChannelStateConsistencyCheckerParams {
4
- localState: ChannelState;
5
- remoteState: ChannelState;
4
+ localState: ChannelStateShort;
5
+ remoteState: ChannelStateShort;
6
6
  }
7
7
  declare class ChannelStateConsistencyChecker {
8
8
  private readonly localState;
@@ -1,22 +1,22 @@
1
1
  import WebRTCIssueDetector from 'webrtc-issue-detector';
2
2
  import Network from '../../network';
3
3
  import SocketIO from '../../network/Socket';
4
- import { Peers } from '../../Peers';
5
4
  import EnhancedEventEmitter from '../../../EnhancedEventEmitter';
6
- import ChannelStateSynchronizer from '../../ChannelStateSynchronizer/ChannelStateSynchronizer';
7
5
  import Logger from '../../Logger';
8
6
  import { CallState } from '../../CallState';
7
+ import PeersStorage from '../../PeersStorage';
8
+ import { ChannelStateShort } from '../../../proto/generated/channel/channel_state_short';
9
9
  declare class ChannelStateSyncEventHandler {
10
10
  #private;
11
- private readonly channelStateSynchronizer;
12
11
  private readonly network;
13
12
  private readonly callState;
14
13
  private readonly socket;
15
- private readonly peers;
14
+ private readonly peersStorage;
16
15
  private readonly clientEventEmitter;
17
16
  private readonly webRtcIssueDetector?;
18
- constructor(channelStateSynchronizer: ChannelStateSynchronizer, loggerFactory: (namespace: string) => Logger, network: Network, callState: CallState, socket: SocketIO, peers: Peers, clientEventEmitter: EnhancedEventEmitter, webRtcIssueDetector?: WebRTCIssueDetector | undefined);
19
- handle(payload: Buffer): Promise<void>;
17
+ readonly debouncedHandleChannelStateEvent: (remoteState: ChannelStateShort) => Promise<void>;
18
+ constructor(loggerFactory: (namespace: string) => Logger, network: Network, callState: CallState, socket: SocketIO, peersStorage: PeersStorage, clientEventEmitter: EnhancedEventEmitter, webRtcIssueDetector?: WebRTCIssueDetector | undefined);
19
+ handleChannelStateShort(data: ChannelStateShort): Promise<void>;
20
20
  private handleChannelStateEvent;
21
21
  private getLastInconsistencyCheckResult;
22
22
  private handleConfirmedInconsistencyResult;
@@ -30,7 +30,6 @@ declare class ChannelStateSyncEventHandler {
30
30
  private getConfirmedConsumersWithInconsistencState;
31
31
  private getConfirmedProducersWithInconsistencState;
32
32
  private getConfirmedPeersWithInconsistentAppData;
33
- private parseChannelStateSyncEventPayload;
34
33
  private getLocalState;
35
34
  private getIsConnectionActive;
36
35
  private listenNetworkScoresUpdatedEvents;
@@ -0,0 +1,27 @@
1
+ import Media from '../media';
2
+ import EnhancedEventEmitter from '../../EnhancedEventEmitter';
3
+ import { Logger } from '../../types/common';
4
+ import PeersStorage from '../PeersStorage';
5
+ import { MediaEvent } from '../../proto/generated/channel_message/media_event';
6
+ declare class MediaEventHandler {
7
+ #private;
8
+ private readonly media;
9
+ private readonly internalEventEmitter;
10
+ private readonly peersStorage;
11
+ private readonly clientEventEmitter;
12
+ constructor(media: Media, internalEventEmitter: EnhancedEventEmitter, peersStorage: PeersStorage, clientEventEmitter: EnhancedEventEmitter, loggerFactory: (namespace: string) => Logger);
13
+ handleMediaEvent(event: MediaEvent): void;
14
+ private handleProducerCreated;
15
+ private handleProducerClosed;
16
+ private handleProducerPaused;
17
+ private handleProducerResumed;
18
+ private handleProducerMaxSpatialLayerChanged;
19
+ private handleProducerRequestMaxSpatialLayer;
20
+ private handleProducerForciblyClosed;
21
+ private handleConsumerClosed;
22
+ private handleConsumerResumed;
23
+ private handleConsumerPaused;
24
+ private handleConsumerPreferredLayersChanged;
25
+ private handleTransportConnectionTimeout;
26
+ }
27
+ export default MediaEventHandler;
@@ -5,10 +5,9 @@ import type { PeerTrackFactory } from '../types/container';
5
5
  import { ClientObserverEvents, InternalObserverEvents } from '../types/engine';
6
6
  import { AudioTrack, BaseTrack, Track } from '../types/media';
7
7
  import { CallState } from './CallState';
8
- import ChannelStateSynchronizer from './ChannelStateSynchronizer/ChannelStateSynchronizer';
9
8
  import EventsQueue from './EventsQueue';
10
9
  import ChannelEventHandler from './handlers/ChannelEventHandler';
11
- import MediaSoupEventHandler from './handlers/MediaSoupEventHandler';
10
+ import MediaEventHandler from './handlers/MediaEventHandler';
12
11
  import { IntegrationsService } from './IntegrationsService';
13
12
  import Logger from './Logger';
14
13
  import Media from './media';
@@ -16,7 +15,6 @@ import { ProcessorsCache } from './media/streamEffects/ProcessorsCache';
16
15
  import VideoTrack from './media/tracks/DefaultVideoTrack';
17
16
  import { MyPeer } from './MyPeer';
18
17
  import Network from './network';
19
- import DataChannelsManager from './network/DataChannelsManager';
20
18
  import LoadBalancerApiClient from './network/LoadBalancerClient';
21
19
  import SocketIO from './network/Socket';
22
20
  import Peer from './Peer';
@@ -31,9 +29,8 @@ declare class Engine {
31
29
  private readonly myPeer;
32
30
  private readonly integrationsService;
33
31
  private readonly processorsCache;
34
- private readonly mediaSoupEventsHandler;
32
+ private readonly mediaEventHandler;
35
33
  private readonly channelEventsHandler;
36
- readonly channelStateSynchronizer: ChannelStateSynchronizer;
37
34
  private readonly peerTrackFactory;
38
35
  private readonly peers;
39
36
  readonly system: System;
@@ -45,13 +42,12 @@ declare class Engine {
45
42
  private readonly clientEventEmitter;
46
43
  private readonly internalEventEmitter;
47
44
  private readonly statsHandler;
48
- private readonly dataChannelsManager;
49
45
  private readonly transportsStatsProvider;
50
46
  private readonly webRtcIssueDetector?;
51
47
  private rejoinRequested;
52
48
  private isReleasing;
53
49
  private readonly mark;
54
- constructor(state: CallState, myPeer: MyPeer, loggerFactory: (namespace: string) => Logger, integrationsService: IntegrationsService, processorsCache: ProcessorsCache, mediaSoupEventsHandler: MediaSoupEventHandler, channelEventsHandler: ChannelEventHandler, channelStateSynchronizer: ChannelStateSynchronizer, peerTrackFactory: PeerTrackFactory, peers: IPeersService, system: System, media: Media, network: Network, loadBalancerClient: LoadBalancerApiClient, socket: SocketIO, eventsQueue: EventsQueue, clientEventEmitter: EnhancedEventEmitter<ClientObserverEvents>, internalEventEmitter: EnhancedEventEmitter<InternalObserverEvents>, statsHandler: StatsHandler, dataChannelsManager: DataChannelsManager, transportsStatsProvider: TransportsStatsProvider, webRtcIssueDetector?: WebRTCIssueDetector | undefined);
50
+ constructor(state: CallState, myPeer: MyPeer, loggerFactory: (namespace: string) => Logger, integrationsService: IntegrationsService, processorsCache: ProcessorsCache, mediaEventHandler: MediaEventHandler, channelEventsHandler: ChannelEventHandler, peerTrackFactory: PeerTrackFactory, peers: IPeersService, system: System, media: Media, network: Network, loadBalancerClient: LoadBalancerApiClient, socket: SocketIO, eventsQueue: EventsQueue, clientEventEmitter: EnhancedEventEmitter<ClientObserverEvents>, internalEventEmitter: EnhancedEventEmitter<InternalObserverEvents>, statsHandler: StatsHandler, transportsStatsProvider: TransportsStatsProvider, webRtcIssueDetector?: WebRTCIssueDetector | undefined);
55
51
  get isChannelJoined(): boolean;
56
52
  private initialize;
57
53
  release(keepTracks?: boolean): Promise<void>;
@@ -61,6 +57,7 @@ declare class Engine {
61
57
  confirmActivity(): Promise<void>;
62
58
  join(params: JoinChannelParams): Promise<void>;
63
59
  loadPeers(role?: Role): Promise<void>;
60
+ requestChannelStateSync(): void;
64
61
  setPeer(peerData: PeerResponse, emit?: boolean): Peer;
65
62
  removePeer(peerId: string): Promise<void>;
66
63
  updateAppData(appData: Record<string, unknown>): Promise<void>;
@@ -1,25 +1,24 @@
1
1
  import { DataConsumer } from 'mediasoup-client/lib/DataConsumer';
2
2
  import Logger from '../Logger';
3
- import Network from '.';
4
- import ChannelAudioObserverEventHandler from '../handlers/ChannelAudioObserverEventHandler';
5
- import ChannelStateSyncEventHandler from '../handlers/ChannelStateSyncEventHandler';
6
- import EventsQueue from '../EventsQueue';
7
3
  import { CallState } from '../CallState';
8
4
  import { MyPeer } from '../MyPeer';
5
+ import SocketIO from './Socket';
6
+ import { types } from 'mediasoup-client';
7
+ import ChannelAudioObserverEventHandler from '../handlers/ChannelAudioObserverEventHandler';
9
8
  declare class DataChannelsManager {
10
9
  #private;
11
10
  private readonly state;
12
11
  private readonly myPeer;
13
- readonly network: Network;
14
- private readonly eventsQueue;
12
+ private readonly socket;
15
13
  private readonly channelAudioObserverEventHandler;
16
- private readonly channelStateSyncEventHandler;
17
- constructor(state: CallState, loggerFactory: (namespace: string) => Logger, myPeer: MyPeer, network: Network, eventsQueue: EventsQueue, channelAudioObserverEventHandler: ChannelAudioObserverEventHandler, channelStateSyncEventHandler: ChannelStateSyncEventHandler);
18
- get generalDataConsumer(): DataConsumer | undefined;
19
- createAllDataChannels(): Promise<void>;
20
- closeAllDataChannels(): void;
21
- private createAudioObserver;
22
- private createGeneralDataConsumer;
23
- private createChannelStateSyncDataConsumer;
14
+ constructor(state: CallState, loggerFactory: (namespace: string) => Logger, myPeer: MyPeer, socket: SocketIO, channelAudioObserverEventHandler: ChannelAudioObserverEventHandler);
15
+ get channelMessagesDataConsumer(): DataConsumer | undefined;
16
+ createAudioObserver(transport: types.Transport): Promise<void>;
17
+ createChannelMessagesDataConsumer(transport: types.Transport): Promise<void>;
18
+ closeAudioObserver(): void;
19
+ closeChannelMessagesDataConsumer(): void;
20
+ private createDataProducer;
21
+ private createDataConsumer;
22
+ private getAudioObserverProducer;
24
23
  }
25
24
  export default DataChannelsManager;
@@ -1,7 +1,7 @@
1
1
  import { Device, type types } from 'mediasoup-client';
2
2
  import { IceParameters, Transport } from 'mediasoup-client/lib/Transport';
3
3
  import EnhancedEventEmitter from '../../EnhancedEventEmitter';
4
- import { CreateConsumerPayload, CreateConsumerResponse, CreateDataConsumerPayload, PeerResponse, Role, SocketResponse, TransportsStateInfo, UpdatePeerAppDataPayload } from '../../types/common';
4
+ import { CreateConsumerPayload, CreateConsumerResponse, PeerResponse, Role, SocketResponse, TransportsStateInfo, UpdatePeerAppDataPayload } from '../../types/common';
5
5
  import { NetworkObserverEvents } from '../../types/network';
6
6
  import { CallState } from '../CallState';
7
7
  import Logger from '../Logger';
@@ -9,12 +9,14 @@ import { MyPeer } from '../MyPeer';
9
9
  import SocketIO from './Socket';
10
10
  import { LDTransport } from '../../types/mediasoup';
11
11
  import { ClientObserverEvents } from '../../types/engine';
12
+ import DataChannelsManager from './DataChannelsManager';
12
13
  declare class Network {
13
14
  #private;
14
15
  private readonly state;
15
16
  private readonly myPeer;
16
17
  private readonly socket;
17
18
  private readonly clientEventEmitter;
19
+ private readonly dataChannelsManager;
18
20
  sendTransport?: Transport;
19
21
  receiveTransport?: Transport;
20
22
  signalingDataProducer?: types.DataProducer;
@@ -22,7 +24,7 @@ declare class Network {
22
24
  private signalingConsumerId?;
23
25
  private preferRelay?;
24
26
  peersLoaded: boolean;
25
- constructor(state: CallState, myPeer: MyPeer, loggerFactory: (namespace: string) => Logger, socket: SocketIO, clientEventEmitter: EnhancedEventEmitter<ClientObserverEvents>);
27
+ constructor(state: CallState, myPeer: MyPeer, loggerFactory: (namespace: string) => Logger, socket: SocketIO, clientEventEmitter: EnhancedEventEmitter<ClientObserverEvents>, dataChannelsManager: DataChannelsManager);
26
28
  get isNetworkActive(): boolean;
27
29
  get observer(): EnhancedEventEmitter<NetworkObserverEvents>;
28
30
  get isSocketConnectionActive(): boolean;
@@ -40,24 +42,27 @@ declare class Network {
40
42
  getIceParameters(transport: Transport): Promise<IceParameters>;
41
43
  restartIce(transport: Transport): Promise<void>;
42
44
  createConsumer({ producerId, rtpCapabilities, appId, channelId, producerPeerId, }: CreateConsumerPayload): Promise<CreateConsumerResponse>;
43
- createDataConsumer({ producerId, appId, channelId, ordered, }: CreateDataConsumerPayload): Promise<types.DataConsumer>;
44
45
  createSignalingConsumer(): Promise<void>;
46
+ get channelMessagesDataConsumer(): types.DataConsumer | undefined;
45
47
  private closePingConsumer;
46
48
  closeRemoteConsumer(consumerId: string): Promise<SocketResponse>;
47
49
  resumeRemoteConsumer(consumerId: string): Promise<SocketResponse>;
48
50
  pauseRemoteProducer(producerId: string): Promise<SocketResponse>;
49
51
  pauseRemoteConsumer(consumerId: string): Promise<SocketResponse>;
50
52
  updatePeerAppData({ peerId, appData }: UpdatePeerAppDataPayload): Promise<SocketResponse>;
51
- getAudioObserverProducer(): Promise<SocketResponse>;
52
- getGeneralDataProducer(): Promise<SocketResponse>;
53
- getChannelStateSyncDataProducer(): Promise<SocketResponse>;
54
- createDataProducer(label: string): Promise<SocketResponse>;
55
53
  getTransportsStateInfo(): Promise<TransportsStateInfo>;
56
54
  setPreferRelay(value: boolean): void;
57
55
  getPreferRelay(): boolean;
58
56
  getChannelPeers(role?: Role): Promise<{
59
57
  peers: PeerResponse[];
60
58
  }>;
59
+ createAllDataChannels(): Promise<void>;
60
+ closeAllDataChannels(): void;
61
+ waitForReceiveTransportConnected(): Promise<void>;
62
+ triggerChannelStateEvent(peersRole?: Role): Promise<number>;
63
+ waitForChannelMessagesDataConsumerConnected(): Promise<void>;
64
+ private waitForTransportConnected;
65
+ private waitForDataConsumerConnected;
61
66
  private getParsedTransportStats;
62
67
  private logTransportDetails;
63
68
  private stopRestartIceAttempts;
@@ -0,0 +1,16 @@
1
+ import type { MediaKind } from 'mediasoup-client/lib/RtpParameters';
2
+ import type { PeerGroup, PeerResponse, ProducerData, Role } from '../types/common';
3
+ import { TrackLabel } from '../types/common';
4
+ import { ProducerLabel } from '../proto/generated/producer/producer_label';
5
+ import type { Producer as ChannelMessageProducer } from '../proto/generated/producer/producer';
6
+ import type { Peer as ChannelMessagePeer } from '../proto/generated/peer/peer';
7
+ import { PeerGroup as ChannelMessagePeerGroup } from '../proto/generated/peer/peer_group';
8
+ import { PeerRole as ChannelMessagePeerRole } from '../proto/generated/peer/peer_role';
9
+ import { ProducerKind as ChannelMessageProducerKind } from '../proto/generated/producer/producer_kind';
10
+ export declare const convertChannelMessageProducerKindToMediaKind: (producerKind: ChannelMessageProducerKind) => MediaKind;
11
+ export declare const convertChannelMessagePeerGroupsToPeerGroups: (peerGroup: ChannelMessagePeerGroup) => PeerGroup;
12
+ export declare const convertChannelMessageProducerLabelsToTrackLabels: (producerLabel: ProducerLabel) => TrackLabel;
13
+ export declare const convertChannelMessagePeerRoleToRole: (peerRole: ChannelMessagePeerRole) => Role;
14
+ export declare const convertChannelMessagePeerToPeerResponse: (peer: ChannelMessagePeer) => PeerResponse;
15
+ export declare const convertChannelMessageProducerToProducerData: (producer: ChannelMessageProducer) => ProducerData;
16
+ export declare const convertPeerGroupsToChannelMessagePeerGroups: (peerGroup: PeerGroup) => ChannelMessagePeerGroup;
@@ -7,7 +7,7 @@ declare global {
7
7
  type PlainObject = Record<string, unknown>;
8
8
  export declare function isObject(value: unknown): value is PlainObject;
9
9
  export declare function deepEqualObject(object1: PlainObject, object2: PlainObject): boolean;
10
- export declare function debounce<T extends (...args: unknown[]) => void>(callback: T, delay: number, immediate?: boolean): (this: unknown, ...args: Parameters<typeof callback>) => void;
10
+ export declare function debounce<T extends (...args: never[]) => Promise<void>>(callback: T, delay: number, immediate?: boolean): (this: unknown, ...args: Parameters<typeof callback>) => Promise<void>;
11
11
  export declare function prepareLogLevel(level?: LogLevel): LogLevel;
12
12
  export declare function isAnalyticsActive(flag?: boolean): boolean;
13
13
  export declare function randomString(): string;
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ declare class Client {
29
29
  createCustomVideoTrack(options: CreateCustomVideoOptions): Track;
30
30
  deleteTrack(track: Track): Promise<void>;
31
31
  loadPeers(role?: Role): Promise<void>;
32
+ requestChannelStateSync(): void;
32
33
  updateAppData(appData: Record<string, unknown>): Promise<void>;
33
34
  getTransportsInfo(): Promise<TransportsStateInfo>;
34
35
  setPreferRelay(value: boolean): void;