@livedigital/client 2.11.0 → 2.12.0-add-onissue-callback.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.
Files changed (38) hide show
  1. package/dist/constants/common.d.ts +11 -0
  2. package/dist/engine/DefaultEngineDependenciesFactory.d.ts +3 -4
  3. package/dist/engine/Logger.d.ts +10 -3
  4. package/dist/engine/PeerConsumer.d.ts +6 -2
  5. package/dist/engine/index.d.ts +10 -4
  6. package/dist/engine/media/index.d.ts +2 -0
  7. package/dist/engine/media/tracks/BaseTrack.d.ts +6 -2
  8. package/dist/engine/network/Socket.d.ts +5 -2
  9. package/dist/engine/network/index.d.ts +2 -0
  10. package/dist/engine/system/index.d.ts +2 -4
  11. package/dist/engine/wid/types.d.ts +1 -1
  12. package/dist/helpers/retry.d.ts +2 -0
  13. package/dist/index.d.ts +4 -1
  14. package/dist/index.es.js +1 -1
  15. package/dist/index.js +2 -2
  16. package/dist/types/common.d.ts +1 -0
  17. package/dist/types/engine.d.ts +15 -5
  18. package/package.json +1 -1
  19. package/src/constants/common.ts +13 -0
  20. package/src/engine/DefaultEngineDependenciesFactory.ts +18 -13
  21. package/src/engine/Logger.ts +43 -17
  22. package/src/engine/Peer.ts +8 -2
  23. package/src/engine/PeerConsumer.ts +12 -3
  24. package/src/engine/handlers/ChannelEventHandler.ts +4 -1
  25. package/src/engine/handlers/MediaSoupEventHandler.ts +4 -1
  26. package/src/engine/index.ts +42 -8
  27. package/src/engine/media/index.ts +15 -3
  28. package/src/engine/media/tracks/BaseTrack.ts +13 -3
  29. package/src/engine/media/tracks/PeerTrack.ts +5 -1
  30. package/src/engine/network/Socket.ts +10 -3
  31. package/src/engine/network/index.ts +6 -2
  32. package/src/engine/system/index.ts +7 -7
  33. package/src/engine/wid/WebRTCIssueDetector.ts +2 -2
  34. package/src/engine/wid/types.ts +1 -1
  35. package/src/helpers/retry.ts +4 -2
  36. package/src/index.ts +14 -1
  37. package/src/types/common.ts +2 -0
  38. package/src/types/engine.ts +18 -5
@@ -210,3 +210,4 @@ export declare type TransformParams = {
210
210
  height?: number;
211
211
  };
212
212
  export declare type LogMessageHandler = (msg: any, ...meta: any) => void;
213
+ export declare type LogLevel = 3 | 4 | 6 | 7;
@@ -7,17 +7,27 @@ import ChannelEventHandler from '../engine/handlers/ChannelEventHandler';
7
7
  import MediaSoupEventHandler from '../engine/handlers/MediaSoupEventHandler';
8
8
  import WebRTCIssueDetector from '../engine/wid/WebRTCIssueDetector';
9
9
  import { LoadBalancerApiClientParams } from '../engine/network/LoadBalancerClient';
10
- import Logger from '../engine/Logger';
10
+ import { IssueDetectorResult } from '../engine/wid/types';
11
+ import { LogLevel } from './common';
12
+ export declare type IssuesHandler = (issues: IssueDetectorResult) => void;
11
13
  export interface CreateIssueDetectorParams {
12
- logger: Logger;
14
+ onIssues?: IssuesHandler;
15
+ }
16
+ export interface CreateMediaParams {
17
+ engine: Engine;
13
18
  }
14
19
  export interface CreateNetworkParams {
20
+ logLevel: LogLevel;
15
21
  loadbalancer: LoadBalancerApiClientParams;
16
22
  }
23
+ export interface CreateSystemParams {
24
+ logLevel: LogLevel;
25
+ clientEventEmitter: EnhancedEventEmitter;
26
+ }
17
27
  export interface EngineDependenciesFactory {
18
- createSystem: (clientEventEmitter: EnhancedEventEmitter) => System;
19
- createMedia: () => Media;
20
- createNetwork: (networkParams: CreateNetworkParams) => Network;
28
+ createSystem: (params: CreateSystemParams) => System;
29
+ createMedia: (params: CreateMediaParams) => Media;
30
+ createNetwork: (params: CreateNetworkParams) => Network;
21
31
  createChannelEventHandler: (engine: Engine) => ChannelEventHandler;
22
32
  createMediaSoupEventHandler: (engine: Engine) => MediaSoupEventHandler;
23
33
  createIssueDetector: (params: CreateIssueDetectorParams) => WebRTCIssueDetector;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@livedigital/client",
3
3
  "author": "vlprojects",
4
4
  "license": "MIT",
5
- "version": "2.11.0",
5
+ "version": "2.12.0-add-onissue-callback.2",
6
6
  "private": false,
7
7
  "bugs": {
8
8
  "url": "https://github.com/vlprojects/livedigital-sdk/issues"
@@ -0,0 +1,13 @@
1
+ import { LogLevel } from '../types/common';
2
+
3
+ export const LOG_LEVEL_ERROR: LogLevel = 3;
4
+ export const LOG_LEVEL_WARN: LogLevel = 4;
5
+ export const LOG_LEVEL_INFO: LogLevel = 6;
6
+ export const LOG_LEVEL_DEBUG: LogLevel = 7;
7
+
8
+ export const LogLevels = {
9
+ Error: LOG_LEVEL_ERROR,
10
+ Warn: LOG_LEVEL_WARN,
11
+ Info: LOG_LEVEL_INFO,
12
+ Debug: LOG_LEVEL_DEBUG,
13
+ };
@@ -1,4 +1,3 @@
1
- import EnhancedEventEmitter from '../EnhancedEventEmitter';
2
1
  import Network from './network';
3
2
  import System from './system';
4
3
  import Media from './media';
@@ -6,25 +5,35 @@ import ChannelEventHandler from './handlers/ChannelEventHandler';
6
5
  import Engine from './index';
7
6
  import MediaSoupEventHandler from './handlers/MediaSoupEventHandler';
8
7
  import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
9
- import { CreateIssueDetectorParams, CreateNetworkParams, EngineDependenciesFactory } from '../types/engine';
8
+ import {
9
+ CreateIssueDetectorParams,
10
+ CreateMediaParams,
11
+ CreateNetworkParams,
12
+ CreateSystemParams,
13
+ EngineDependenciesFactory,
14
+ } from '../types/engine';
10
15
  import SocketIO from './network/Socket';
11
16
  import LoadBalancerApiClient from './network/LoadBalancerClient';
12
17
 
13
18
  /* eslint-disable class-methods-use-this */
14
19
  class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
15
- createSystem(clientEventEmitter: EnhancedEventEmitter): System {
16
- return new System({ clientEventEmitter });
20
+ createSystem(params: CreateSystemParams): System {
21
+ return new System(params);
17
22
  }
18
23
 
19
- createMedia(): Media {
20
- return new Media();
24
+ createMedia(params: CreateMediaParams): Media {
25
+ return new Media(params);
21
26
  }
22
27
 
23
28
  createNetwork(params: CreateNetworkParams): Network {
24
- const { loadbalancer } = params;
25
- const socketClient = new SocketIO();
29
+ const { loadbalancer, logLevel } = params;
30
+ const socketClient = new SocketIO({
31
+ logLevel,
32
+ });
33
+
26
34
  const loadBalancerApiClient = new LoadBalancerApiClient(loadbalancer);
27
35
  return new Network({
36
+ logLevel,
28
37
  socketClient,
29
38
  loadBalancerApiClient,
30
39
  });
@@ -40,11 +49,7 @@ class DefaultEngineDependenciesFactory implements EngineDependenciesFactory {
40
49
 
41
50
  createIssueDetector(params: CreateIssueDetectorParams): WebRTCIssueDetector {
42
51
  return new WebRTCIssueDetector({
43
- onIssue: (issues: any[]) => {
44
- issues.forEach((issue) => {
45
- params.logger.warn('webRtcIssueDetector', issue);
46
- });
47
- },
52
+ onIssues: params.onIssues,
48
53
  });
49
54
  }
50
55
  }
@@ -1,35 +1,48 @@
1
1
  import debug from 'debug';
2
- import { LogMessageHandler } from '../types/common';
2
+ import { LogLevels } from '../constants/common';
3
+ import { LogLevel, LogMessageHandler } from '../types/common';
3
4
 
4
5
  const APP_NAME = 'LiveDigital';
5
6
 
7
+ export type LoggerConstructorParams = {
8
+ namespace: string,
9
+ logLevel: LogLevel,
10
+ onLogMessage?: LogMessageHandler,
11
+ };
12
+
6
13
  class Logger {
7
14
  private readonly _debug: debug.Debugger;
8
15
 
16
+ private readonly _info: debug.Debugger;
17
+
9
18
  private readonly _warn: debug.Debugger;
10
19
 
11
20
  private readonly _error: debug.Debugger;
12
21
 
13
- private readonly onLogMessage: LogMessageHandler;
14
-
15
- constructor(prefix?: string, onLogMessage?: LogMessageHandler) {
16
- if (prefix) {
17
- this._debug = debug(`${APP_NAME}:${prefix}`);
18
- this._warn = debug(`${APP_NAME}:WARN:${prefix}`);
19
- this._error = debug(`${APP_NAME}:ERROR:${prefix}`);
20
- } else {
21
- this._debug = debug(APP_NAME);
22
- this._warn = debug(`${APP_NAME}:WARN`);
23
- this._error = debug(`${APP_NAME}:ERROR`);
24
- }
22
+ #namespace: string;
23
+
24
+ #logLevel: LogLevel;
25
+
26
+ #onLogMessage: LogMessageHandler;
27
+
28
+ constructor(params: LoggerConstructorParams) {
29
+ const { logLevel, namespace, onLogMessage } = params;
30
+ this.#namespace = namespace;
31
+ this.#logLevel = logLevel;
32
+
33
+ this._debug = debug(APP_NAME).extend('debug').extend(this.#namespace);
34
+ this._info = debug(APP_NAME).extend('info').extend(this.#namespace);
35
+ this._warn = debug(APP_NAME).extend('warn').extend(this.#namespace);
36
+ this._error = debug(APP_NAME).extend('error').extend(this.#namespace);
25
37
 
26
38
  /* eslint-disable no-console */
27
39
  this._debug.log = console.info.bind(console);
40
+ this._info.log = console.info.bind(console);
28
41
  this._warn.log = console.warn.bind(console);
29
42
  this._error.log = console.error.bind(console);
30
43
  /* eslint-enable no-console */
31
44
 
32
- this.onLogMessage = (msg: any, ...meta: any[]) => {
45
+ this.#onLogMessage = (msg: any, ...meta: any[]) => {
33
46
  if (typeof onLogMessage === 'function') {
34
47
  onLogMessage(msg, ...meta);
35
48
  }
@@ -38,17 +51,30 @@ class Logger {
38
51
 
39
52
  debug(msg: any, ...meta: any[]): void {
40
53
  this._debug(msg, ...meta);
41
- this.onLogMessage(msg, ...meta);
54
+ if (this.#logLevel >= LogLevels.Debug) {
55
+ this.#onLogMessage(msg, ...meta);
56
+ }
57
+ }
58
+
59
+ info(msg: any, ...meta: any[]): void {
60
+ this._debug(msg, ...meta);
61
+ if (this.#logLevel >= LogLevels.Info) {
62
+ this.#onLogMessage(msg, ...meta);
63
+ }
42
64
  }
43
65
 
44
66
  warn(msg: any, ...meta: any[]): void {
45
67
  this._warn(msg, ...meta);
46
- this.onLogMessage(msg, ...meta);
68
+ if (this.#logLevel >= LogLevels.Warn) {
69
+ this.#onLogMessage(msg, ...meta);
70
+ }
47
71
  }
48
72
 
49
73
  error(msg: any, ...meta: any[]): void {
50
74
  this._error(msg, ...meta);
51
- this.onLogMessage(msg, ...meta);
75
+ if (this.#logLevel >= LogLevels.Error) {
76
+ this.#onLogMessage(msg, ...meta);
77
+ }
52
78
  }
53
79
  }
54
80
 
@@ -89,7 +89,10 @@ class Peer {
89
89
  this.uid = uid;
90
90
  this.role = role;
91
91
  this.engine = engine;
92
- this.logger = new Logger('Peer');
92
+ this.logger = new Logger({
93
+ logLevel: engine.logLevel,
94
+ namespace: 'Peer',
95
+ });
93
96
  producers.forEach(this.handleNewProducer.bind(this));
94
97
  this.handlePeerEvents();
95
98
  }
@@ -153,7 +156,10 @@ class Peer {
153
156
  const track = new PeerTrack({
154
157
  mediaStreamTrack: consumer.track,
155
158
  label: producer.label,
156
- consumer: new PeerConsumer(consumer),
159
+ consumer: new PeerConsumer({
160
+ consumer,
161
+ logLevel: this.engine.logLevel,
162
+ }),
157
163
  engine: this.engine,
158
164
  });
159
165
  this.tracks.set(track.label, track);
@@ -1,9 +1,14 @@
1
1
  import { parseScalabilityMode } from 'mediasoup-client';
2
2
  import { MediaKind, RtpEncodingParameters } from 'mediasoup-client/lib/RtpParameters';
3
3
  import { Consumer as MediasoupConsumer } from 'mediasoup-client/lib/types';
4
- import { ConsumerData, SpatialLayerParams } from '../types/common';
4
+ import { ConsumerData, LogLevel, SpatialLayerParams } from '../types/common';
5
5
  import Logger from './Logger';
6
6
 
7
+ export type PeerConsumerConstructorParams = {
8
+ consumer: MediasoupConsumer,
9
+ logLevel: LogLevel,
10
+ };
11
+
7
12
  class PeerConsumer {
8
13
  public score = 10;
9
14
 
@@ -37,13 +42,17 @@ class PeerConsumer {
37
42
 
38
43
  private readonly logger: Logger;
39
44
 
40
- constructor(consumer: MediasoupConsumer) {
45
+ constructor(params: PeerConsumerConstructorParams) {
46
+ const { logLevel, consumer } = params;
41
47
  this.id = consumer.id;
42
48
  this.kind = consumer.kind as MediaKind;
43
49
  this.producerId = consumer.producerId;
44
50
  this.appData = consumer.appData as ConsumerData;
45
51
  this.consumer = consumer;
46
- this.logger = new Logger('PeerConsumer');
52
+ this.logger = new Logger({
53
+ logLevel,
54
+ namespace: 'PeerConsumer',
55
+ });
47
56
  this.currentMaxSpatialLayer = this.appData.producerData.maxSpatialLayer;
48
57
  this.parseScalabilityMode();
49
58
  this.setSpatialLayersParams();
@@ -10,7 +10,10 @@ class ChannelEventHandler {
10
10
 
11
11
  constructor(engine: Engine) {
12
12
  this.engine = engine;
13
- this.logger = new Logger('ChannelEvents');
13
+ this.logger = new Logger({
14
+ logLevel: engine.logLevel,
15
+ namespace: 'ChannelEvents',
16
+ });
14
17
  }
15
18
 
16
19
  public subscribeToEvents(): void {
@@ -17,7 +17,10 @@ class MediaSoupEventHandler {
17
17
 
18
18
  constructor(engine: Engine) {
19
19
  this.engine = engine;
20
- this.logger = new Logger('MediasoupEvents');
20
+ this.logger = new Logger({
21
+ logLevel: engine.logLevel,
22
+ namespace: 'MediasoupEvents',
23
+ });
21
24
  }
22
25
 
23
26
  public subscribeToEvents(): void {
@@ -11,6 +11,7 @@ import {
11
11
  Track,
12
12
  TrackLabel,
13
13
  LogMessageHandler,
14
+ LogLevel,
14
15
  } from '../types/common';
15
16
  import EnhancedEventEmitter from '../EnhancedEventEmitter';
16
17
  import System from './system';
@@ -29,13 +30,19 @@ import AudioTrack from './media/tracks/AudioTrack';
29
30
  import PeerTrack from './media/tracks/PeerTrack';
30
31
  import WebRTCIssueDetector from './wid/WebRTCIssueDetector';
31
32
  import { retryAsync } from '../helpers/retry';
32
- import { CreateNetworkParams, EngineDependenciesFactory } from '../types/engine';
33
+ import { EngineDependenciesFactory, IssuesHandler } from '../types/engine';
34
+ import { LogLevels } from '../constants/common';
35
+ import { LoadBalancerApiClientParams } from './network/LoadBalancerClient';
33
36
 
34
37
  type EngineParams = {
35
38
  clientEventEmitter: EnhancedEventEmitter,
36
- network: CreateNetworkParams,
37
- onLogMessage?: LogMessageHandler;
39
+ network: {
40
+ loadbalancer: LoadBalancerApiClientParams;
41
+ },
38
42
  dependenciesFactory: EngineDependenciesFactory;
43
+ logLevel?: LogLevel;
44
+ onLogMessage?: LogMessageHandler;
45
+ onIssues?: IssuesHandler;
39
46
  };
40
47
 
41
48
  class Engine {
@@ -47,6 +54,8 @@ class Engine {
47
54
 
48
55
  public clientEventEmitter: EnhancedEventEmitter;
49
56
 
57
+ public logLevel: LogLevel;
58
+
50
59
  private readonly peersRepository: Map<string, Peer>;
51
60
 
52
61
  private channelEventsHandler: ChannelEventHandler;
@@ -72,16 +81,33 @@ class Engine {
72
81
  clientEventEmitter,
73
82
  network,
74
83
  dependenciesFactory,
84
+ logLevel,
75
85
  } = params;
76
- this.system = dependenciesFactory.createSystem(clientEventEmitter);
77
- this.media = dependenciesFactory.createMedia();
78
- this.network = dependenciesFactory.createNetwork(network);
86
+ this.logLevel = logLevel || LogLevels.Error;
87
+ this.system = dependenciesFactory.createSystem({
88
+ logLevel: this.logLevel,
89
+ clientEventEmitter,
90
+ });
91
+ this.media = dependenciesFactory.createMedia({
92
+ engine: this,
93
+ });
94
+ this.network = dependenciesFactory.createNetwork({
95
+ logLevel: this.logLevel,
96
+ loadbalancer: network.loadbalancer,
97
+ });
79
98
  this.peersRepository = new Map<string, Peer>();
80
99
  this.clientEventEmitter = clientEventEmitter;
81
100
  this.channelEventsHandler = dependenciesFactory.createChannelEventHandler(this);
82
101
  this.mediaSoupEventsHandler = dependenciesFactory.createMediaSoupEventHandler(this);
83
- this.logger = new Logger('Engine', params.onLogMessage);
84
- this.webRtcIssueDetector = dependenciesFactory.createIssueDetector({ logger: this.logger });
102
+ this.logger = new Logger({
103
+ logLevel: this.logLevel,
104
+ namespace: 'Engine',
105
+ onLogMessage: params.onLogMessage,
106
+ });
107
+
108
+ this.webRtcIssueDetector = dependenciesFactory.createIssueDetector({
109
+ onIssues: params.onIssues,
110
+ });
85
111
 
86
112
  this.watchSocketState();
87
113
  }
@@ -444,6 +470,10 @@ class Engine {
444
470
  minBackoffDelayMs: 150,
445
471
  maxBackoffDelayMs: 5_000,
446
472
  actionName: 'connectToSocketServer',
473
+ logger: new Logger({
474
+ namespace: 'RetrySocketConnect',
475
+ logLevel: this.logLevel,
476
+ }),
447
477
  });
448
478
  }
449
479
 
@@ -523,6 +553,10 @@ class Engine {
523
553
  maxRetries: 3,
524
554
  minBackoffDelayMs: 300,
525
555
  actionName: 'sendJoinChannelRequest',
556
+ logger: new Logger({
557
+ namespace: 'RetryJoin',
558
+ logLevel: this.logLevel,
559
+ }),
526
560
  });
527
561
  }
528
562
 
@@ -6,6 +6,8 @@ import { CreateScreenVideoTrackOptions, CreateVideoTrackParams, Track } from '..
6
6
  import Logger from '../Logger';
7
7
  import { VIDEO_CONSTRAINS } from '../../constants/videoConstrains';
8
8
  import { SCREEN_SHARING_SIMULCAST_ENCODINGS, WEBCAM_SIMULCAST_ENCODINGS } from '../../constants/simulcastEncodings';
9
+ import { CreateMediaParams } from '../../types/engine';
10
+ import Engine from '../index';
9
11
 
10
12
  class Media {
11
13
  public isDeviceLoaded = false;
@@ -14,7 +16,17 @@ class Media {
14
16
 
15
17
  private tracks: Map<string, Track> = new Map();
16
18
 
17
- #logger = new Logger('Media');
19
+ #logger: Logger;
20
+
21
+ #engine: Engine;
22
+
23
+ constructor(params: CreateMediaParams) {
24
+ this.#engine = params.engine;
25
+ this.#logger = new Logger({
26
+ namespace: 'Media',
27
+ logLevel: params.engine.logLevel,
28
+ });
29
+ }
18
30
 
19
31
  get mediasoupDevice(): Device {
20
32
  if (!this.device) {
@@ -50,8 +62,8 @@ class Media {
50
62
  const mediaStreamTracks = stream.getTracks();
51
63
  return mediaStreamTracks.map((mediaStreamTrack) => {
52
64
  const track = mediaStreamTrack.kind === 'audio'
53
- ? new AudioTrack(mediaStreamTrack)
54
- : new VideoTrack(mediaStreamTrack);
65
+ ? new AudioTrack({ mediaStreamTrack, logLevel: this.#engine.logLevel })
66
+ : new VideoTrack({ mediaStreamTrack, logLevel: this.#engine.logLevel });
55
67
 
56
68
  this.tracks.set(track.id, track);
57
69
  this.#logger.debug('createTrack() track created', {
@@ -1,8 +1,13 @@
1
1
  import { Producer } from 'mediasoup-client/lib/Producer';
2
2
  import { MediaKind } from 'mediasoup-client/lib/RtpParameters';
3
- import { EncoderConfig, TrackLabel } from '../../../types/common';
3
+ import { EncoderConfig, LogLevel, TrackLabel } from '../../../types/common';
4
4
  import Logger from '../../Logger';
5
5
 
6
+ export type BaseTrackConstructorParams = {
7
+ mediaStreamTrack: MediaStreamTrack,
8
+ logLevel: LogLevel,
9
+ };
10
+
6
11
  class BaseTrack {
7
12
  readonly #mediaStreamTrack: MediaStreamTrack;
8
13
 
@@ -12,10 +17,15 @@ class BaseTrack {
12
17
 
13
18
  private label: TrackLabel = TrackLabel.Unknown;
14
19
 
15
- protected logger = new Logger('Track');
20
+ protected logger: Logger;
16
21
 
17
- constructor(mediaStreamTrack: MediaStreamTrack) {
22
+ constructor(params: BaseTrackConstructorParams) {
23
+ const { mediaStreamTrack, logLevel } = params;
18
24
  this.#mediaStreamTrack = mediaStreamTrack;
25
+ this.logger = new Logger({
26
+ namespace: 'Track',
27
+ logLevel,
28
+ });
19
29
  }
20
30
 
21
31
  get mediaStreamTrack(): MediaStreamTrack {
@@ -24,13 +24,17 @@ class PeerTrack {
24
24
 
25
25
  readonly #engine: Engine;
26
26
 
27
- readonly #logger = new Logger('PeerTrack');
27
+ readonly #logger: Logger;
28
28
 
29
29
  constructor(payload: PeerTrackConstructor) {
30
30
  this.mediaStreamTrack = payload.mediaStreamTrack;
31
31
  this.label = payload.label;
32
32
  this.consumer = payload.consumer;
33
33
  this.#engine = payload.engine;
34
+ this.#logger = new Logger({
35
+ logLevel: payload.engine.logLevel,
36
+ namespace: 'PeerTrack',
37
+ });
34
38
  }
35
39
 
36
40
  get consumerId(): string | undefined {
@@ -1,9 +1,13 @@
1
1
  import { io, Socket } from 'socket.io-client';
2
2
  import EnhancedEventEmitter from '../../EnhancedEventEmitter';
3
3
  import { SocketIOEvents } from '../../constants/events';
4
- import { SocketResponse } from '../../types/common';
4
+ import { LogLevel, SocketResponse } from '../../types/common';
5
5
  import Logger from '../Logger';
6
6
 
7
+ export type SocketIOConstructorParams = {
8
+ logLevel: LogLevel,
9
+ };
10
+
7
11
  class SocketIO {
8
12
  public connection?: Socket;
9
13
 
@@ -29,8 +33,11 @@ class SocketIO {
29
33
  'transport error': 'transport.error',
30
34
  };
31
35
 
32
- constructor() {
33
- this.logger = new Logger('Socket');
36
+ constructor(params: SocketIOConstructorParams) {
37
+ this.logger = new Logger({
38
+ namespace: 'Socket',
39
+ logLevel: params.logLevel,
40
+ });
34
41
  }
35
42
 
36
43
  get observer(): EnhancedEventEmitter {
@@ -6,13 +6,14 @@ import {
6
6
  } from 'mediasoup-client/lib/Transport';
7
7
  import { Device } from 'mediasoup-client';
8
8
  import SocketIO from './Socket';
9
- import { ProduceParams } from '../../types/common';
9
+ import { LogLevel, ProduceParams } from '../../types/common';
10
10
  import LoadBalancerApiClient from './LoadBalancerClient';
11
11
  import { MEDIASOUP_EVENTS, MEDIASOUP_TRANSPORT_EVENTS } from '../../constants/events';
12
12
  import Logger from '../Logger';
13
13
 
14
14
  export type NetworkParams = {
15
15
  socketClient: SocketIO;
16
+ logLevel: LogLevel,
16
17
  loadBalancerApiClient: LoadBalancerApiClient;
17
18
  };
18
19
 
@@ -31,7 +32,10 @@ class Network {
31
32
  const { socketClient, loadBalancerApiClient } = params;
32
33
  this.socket = socketClient;
33
34
  this.loadBalancerClient = loadBalancerApiClient;
34
- this.logger = new Logger('Network');
35
+ this.logger = new Logger({
36
+ namespace: 'Network',
37
+ logLevel: params.logLevel,
38
+ });
35
39
  }
36
40
 
37
41
  async closeRemoteProducer(producerId: string): Promise<void> {
@@ -1,12 +1,9 @@
1
+ import { CreateSystemParams } from '../../types/engine';
1
2
  import { CLIENT_EVENTS } from '../../constants/events';
2
3
  import EnhancedEventEmitter from '../../EnhancedEventEmitter';
3
4
  import { AvailableMediaDevices } from '../../types/common';
4
5
  import Logger from '../Logger';
5
6
 
6
- type SystemParams = {
7
- clientEventEmitter: EnhancedEventEmitter,
8
- };
9
-
10
7
  class System {
11
8
  public isEnableVideoDevicesLock = false;
12
9
 
@@ -24,10 +21,13 @@ class System {
24
21
 
25
22
  private readonly logger: Logger;
26
23
 
27
- constructor(params: SystemParams) {
28
- const { clientEventEmitter } = params;
24
+ constructor(params: CreateSystemParams) {
25
+ const { clientEventEmitter, logLevel } = params;
29
26
  this.clientEventEmitter = clientEventEmitter;
30
- this.logger = new Logger('System');
27
+ this.logger = new Logger({
28
+ namespace: 'System',
29
+ logLevel,
30
+ });
31
31
  this.listenDevices();
32
32
  }
33
33
 
@@ -28,8 +28,8 @@ class WebRTCIssueDetector {
28
28
  #running = false;
29
29
 
30
30
  constructor(params: WebRTCIssueDetectorConstructorParams) {
31
- if (params.onIssue) {
32
- this.eventEmitter.on(EventType.Issue, params.onIssue);
31
+ if (params.onIssues) {
32
+ this.eventEmitter.on(EventType.Issue, params.onIssues);
33
33
  }
34
34
 
35
35
  // Move instantiation from the constructor
@@ -19,7 +19,7 @@ export enum EventType {
19
19
  export type EventPayload = IssueDetectorResult;
20
20
 
21
21
  export type WebRTCIssueDetectorConstructorParams = {
22
- onIssue?: (payload: IssueDetectorResult) => void,
22
+ onIssues?: (payload: IssueDetectorResult) => void,
23
23
  };
24
24
 
25
25
  export enum IssueType {
@@ -6,9 +6,9 @@ export type RetryOpts = {
6
6
  minBackoffDelayMs?: number;
7
7
  maxBackoffDelayMs?: number;
8
8
  actionName?: string; // human-readable action name for debug purposes
9
+ logger?: Logger;
9
10
  };
10
11
 
11
- const logger = new Logger('Retry');
12
12
  const timeProvider = new DefaultTimeProvider();
13
13
 
14
14
  const retryAsync = async <ReturnType>(
@@ -28,7 +28,9 @@ const retryAsync = async <ReturnType>(
28
28
  return await action();
29
29
  } catch (err: unknown) {
30
30
  lastError = err;
31
- logger.warn('Action retry failed', currentAttempt, opts.actionName, err);
31
+ if (opts.logger) {
32
+ opts.logger.info('Action retry failed', currentAttempt, opts.actionName, err);
33
+ }
32
34
 
33
35
  if (currentAttempt < maxRetries) {
34
36
  const delay = 2 ** (currentAttempt - 1) * minBackoffDelayMs;