@livedigital/client 3.34.0 → 3.34.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@livedigital/client",
3
3
  "author": "vlprojects",
4
4
  "license": "MIT",
5
- "version": "3.34.0",
5
+ "version": "3.34.2",
6
6
  "private": false,
7
7
  "bugs": {
8
8
  "url": "https://github.com/vlprojects/livedigital-sdk/issues"
@@ -26,6 +26,7 @@ import {
26
26
  } from './consts';
27
27
  import { InconsistenceType, StorageKey } from './types';
28
28
  import { CallState } from '../../CallState';
29
+ import { getSDKInstancesMarks } from '../../../helpers/common';
29
30
 
30
31
  const RESTORE_STATE_RECOMMENDED_INTERVAL = 15_000;
31
32
 
@@ -114,6 +115,8 @@ class ChannelStateSyncEventHandler {
114
115
  confirmedInconsistencyResult.missingPeers.forEach((peerId) => {
115
116
  this.clientEventEmitter.safeEmit(CLIENT_EVENTS.channelStateInconsistent, {
116
117
  peerId,
118
+ peersLoaded: this.network.peersLoaded,
119
+ sdkInstances: getSDKInstancesMarks().length,
117
120
  type: InconsistenceType.MissingPeer,
118
121
  });
119
122
  });
@@ -4,7 +4,6 @@ import { RtpCapabilities } from 'mediasoup-client/lib/RtpParameters';
4
4
  import { serializeError } from 'serialize-error';
5
5
  import WebRTCIssueDetector from 'webrtc-issue-detector';
6
6
  import clientMetaProvider from '../ClientMetaProvider';
7
- import ConfigService from '../config/ConfigService';
8
7
  import { MAX_JOIN_ATTEMPTS, SOCKET_ERROR_CODE_UNAUTHORIZED } from '../constants/common';
9
8
  import {
10
9
  CHANNEL_EVENTS, CLIENT_EVENTS, INTERNAL_CLIENT_EVENTS, NETWORK_OBSERVER_EVENTS,
@@ -65,6 +64,7 @@ import ConnectionStatManager from './WebRTCStats/ConnectionStatsManager';
65
64
  import StatsHandler from './WebRTCStats/StatsHandler';
66
65
  import { TransportsWebRTCStats } from './WebRTCStats/types';
67
66
  import DataChannelsManager from './network/DataChannelsManager';
67
+ import { markSDKInstance, randomString } from '../helpers/common';
68
68
 
69
69
  @injectable()
70
70
  class Engine {
@@ -80,8 +80,9 @@ class Engine {
80
80
 
81
81
  #denoiserInitializing: boolean = false;
82
82
 
83
+ private mark = randomString();
84
+
83
85
  constructor(
84
- @inject(TOKEN.Config) private readonly config: ConfigService,
85
86
  @inject(TOKEN.CallState) private readonly state: CallState,
86
87
  @inject(TOKEN.MyPeer) private readonly myPeer: MyPeer,
87
88
  @inject(TOKEN.LoggerFactory) loggerFactory: (namespace: string) => Logger,
@@ -110,6 +111,8 @@ class Engine {
110
111
 
111
112
  this.watchNetworkState();
112
113
  this.watchDocumentUnload();
114
+
115
+ markSDKInstance(this.mark);
113
116
  }
114
117
 
115
118
  get isChannelJoined(): boolean {
@@ -64,6 +64,8 @@ class Network {
64
64
 
65
65
  readonly #logger: Logger;
66
66
 
67
+ peersLoaded = false;
68
+
67
69
  constructor(
68
70
  @inject(TOKEN.CallState) private readonly state: CallState,
69
71
  @inject(TOKEN.MyPeer) private readonly myPeer: MyPeer,
@@ -404,7 +406,11 @@ class Network {
404
406
  }
405
407
 
406
408
  public async getChannelPeers(role?: Role): Promise<{ peers: PeerResponse[] }> {
407
- return this.socket.request<{ peers: PeerResponse[] }>(CHANNEL_EVENTS.channelGetPeers, { role });
409
+ const response = await this.socket.request<{ peers: PeerResponse[] }>(CHANNEL_EVENTS.channelGetPeers, { role });
410
+
411
+ this.peersLoaded = true;
412
+
413
+ return response;
408
414
  }
409
415
 
410
416
  private async getParsedTransportStats(transport?: Transport): Promise<TransportStateInfo | undefined> {
@@ -1,6 +1,13 @@
1
+ import crypto from 'crypto';
1
2
  import { LogLevels } from '../constants/common';
2
3
  import { LogLevel } from '../types/common';
3
4
 
5
+ declare global {
6
+ interface Window {
7
+ _sdkMarks: Set<string>,
8
+ }
9
+ }
10
+
4
11
  export const isObject = (object: unknown): object is Record<string, unknown> => (
5
12
  object !== null && typeof object === 'object'
6
13
  );
@@ -64,3 +71,16 @@ export function prepareLogLevel(level?: LogLevel): LogLevel {
64
71
  export function isAnalyticsActive(flag?: boolean): boolean {
65
72
  return flag ?? true;
66
73
  }
74
+
75
+ export function randomString() {
76
+ return crypto.randomBytes(10).toString('hex');
77
+ }
78
+
79
+ export function markSDKInstance(mark: string) {
80
+ window._sdkMarks = window._sdkMarks || new Set<string>();
81
+ window._sdkMarks.add(mark);
82
+ }
83
+
84
+ export function getSDKInstancesMarks(): string[] {
85
+ return Array.from(window._sdkMarks || []);
86
+ }