vani-meeting-server 2.7.1 → 2.7.3

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.
@@ -14,7 +14,10 @@ export declare enum VaniEvent {
14
14
  OnPlainTransportCreateError = "onPlainTransportCreateError",
15
15
  OnLog = "OnLog",
16
16
  OnNewChatMessageReceived = "OnNewChatMessageReceived",
17
- OnClientPingRecieved = "OnClientPingRecieved"
17
+ OnClientPingRecieved = "OnClientPingRecieved",
18
+ OnConsumerScoreChange = "OnConsumerScoreChange",
19
+ OnConsumerLayerChange = "OnConsumerLayerChange",
20
+ OnProducerScoreChange = "OnProducerScoreChange"
18
21
  }
19
22
  interface VaniConnectionEvents {
20
23
  [VaniEvent.OnNewMeetingStarted]: (roomId: string) => any;
@@ -15,4 +15,7 @@ var VaniEvent;
15
15
  VaniEvent["OnLog"] = "OnLog";
16
16
  VaniEvent["OnNewChatMessageReceived"] = "OnNewChatMessageReceived";
17
17
  VaniEvent["OnClientPingRecieved"] = "OnClientPingRecieved";
18
+ VaniEvent["OnConsumerScoreChange"] = "OnConsumerScoreChange";
19
+ VaniEvent["OnConsumerLayerChange"] = "OnConsumerLayerChange";
20
+ VaniEvent["OnProducerScoreChange"] = "OnProducerScoreChange";
18
21
  })(VaniEvent || (exports.VaniEvent = VaniEvent = {}));
@@ -24,4 +24,6 @@ export declare class WebSocketServerStartRequest {
24
24
  isAudioVolumeLevelRequired: boolean;
25
25
  iceServers?: any;
26
26
  wssServerHostForCert?: string;
27
+ shouldShareDetailStats: boolean;
28
+ shouldShareStreamScoreChange: boolean;
27
29
  }
@@ -29,5 +29,7 @@ class WebSocketServerStartRequest {
29
29
  isAudioVolumeLevelRequired = true;
30
30
  iceServers;
31
31
  wssServerHostForCert;
32
+ shouldShareDetailStats = false;
33
+ shouldShareStreamScoreChange = false;
32
34
  }
33
35
  exports.WebSocketServerStartRequest = WebSocketServerStartRequest;
@@ -21,6 +21,7 @@ export declare class SFUEachRoomUserHandler extends BaseSFUWebsocket {
21
21
  private resumeConsumer;
22
22
  private pauseConsumer;
23
23
  private updateSpatialConsumer;
24
+ private addObserverForProducer;
24
25
  private onTransportProduceSyncRequest;
25
26
  private onResumeProducer;
26
27
  private onPauseProducer;
@@ -11,6 +11,8 @@ const Logs_1 = require("../models/Logs");
11
11
  const WebSocketServerStartRequest_1 = require("../models/WebSocketServerStartRequest");
12
12
  const Utility_1 = require("../utility/Utility");
13
13
  const ServerHandler_1 = require("../ServerHandler");
14
+ const EventEmitterHandler_1 = require("../utility/EventEmitterHandler");
15
+ const Event_1 = require("../models/Event");
14
16
  class SFUEachRoomUserHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
15
17
  isUserPresentInRoom = true;
16
18
  selfParticipant;
@@ -116,6 +118,18 @@ class SFUEachRoomUserHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
116
118
  consumer.pause();
117
119
  }
118
120
  });
121
+ if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.shouldShareStreamScoreChange) {
122
+ consumer.on("score", async (score) => {
123
+ ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("Consumer score Change - ", JSON.stringify(score), "App Data", JSON.stringify(consumer.appData));
124
+ EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnConsumerScoreChange, { score: score, consumerId: consumer.id, appData: consumer.appData, participant: this.selfParticipant });
125
+ this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.selfParticipant.roomId, (await Constant_1.default.getPublicIp())), this.preapreClientMessageBody(true, this.selfParticipant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnConsumerScoreChange, { score: score, consumerId: consumer.id, appData: consumer.appData, participant: this.selfParticipant })));
126
+ });
127
+ consumer.on("layerschange", async (layers) => {
128
+ ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("Consumer layerschange Change - ", JSON.stringify(layers), "App Data", JSON.stringify(consumer.appData));
129
+ EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnConsumerLayerChange, { layer: layers, consumerId: consumer.id, appData: consumer.appData, participant: this.selfParticipant });
130
+ this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.selfParticipant.roomId, (await Constant_1.default.getPublicIp())), this.preapreClientMessageBody(true, this.selfParticipant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnConsumerLayerChange, { layer: layers, consumerId: consumer.id, appData: consumer.appData, participant: this.selfParticipant })));
131
+ });
132
+ }
119
133
  consumer.on("producerresume", () => {
120
134
  ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("producerresume");
121
135
  if (consumer.closed === false) {
@@ -213,11 +227,29 @@ class SFUEachRoomUserHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
213
227
  }
214
228
  }
215
229
  }
230
+ addObserverForProducer = async (producer) => {
231
+ producer.on("@close", () => {
232
+ try {
233
+ const sfuMessagePayload = { message: { producerId: producer.id }, type: EachSocketConnectionHandler_1.SFUMessageType.OnStopProducer, to: "self" };
234
+ this.onProducerClosed(sfuMessagePayload);
235
+ }
236
+ catch (err) {
237
+ }
238
+ });
239
+ if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.shouldShareStreamScoreChange) {
240
+ producer.on("score", async (score) => {
241
+ ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("producer score Change - ", JSON.stringify(score), "App Data", JSON.stringify(producer.appData));
242
+ EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnProducerScoreChange, { score: score, producerId: producer.id, appData: producer.appData, participant: this.selfParticipant });
243
+ this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.selfParticipant.roomId, (await Constant_1.default.getPublicIp())), this.preapreClientMessageBody(true, this.selfParticipant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnProducerScoreChange, { score: score, producerId: producer.id, appData: producer.appData, participant: this.selfParticipant })));
244
+ });
245
+ }
246
+ };
216
247
  async onTransportProduceSyncRequest(payload) {
217
248
  ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("onTransportProduceSyncRequest");
218
249
  if (this.roomHandlerDataSource) {
219
250
  const producer = await this.webrtcSendTransport?.produce(payload.message);
220
251
  if (producer) {
252
+ this.addObserverForProducer(producer);
221
253
  await this.onNewProducer(producer);
222
254
  if (producer.kind === 'audio') {
223
255
  this.roomHandlerDataSource.addAudioObserverForProducer(producer);
@@ -67,6 +67,9 @@ export declare enum SFUMessageType {
67
67
  GetAllProducers = "getAllProducers",
68
68
  OnAllProducers = "onAllProducers",
69
69
  OnStopProducer = "stopProducer",
70
+ OnConsumerScoreChange = "OnConsumerScoreChange",
71
+ OnProducerScoreChange = "OnProducerScoreChange",
72
+ OnConsumerLayerChange = "OnConsumerLayerChange",
70
73
  OnProducerNotFound = "OnProducerNotFound"
71
74
  }
72
75
  export declare enum MultiSystemEvents {
@@ -84,6 +84,9 @@ var SFUMessageType;
84
84
  SFUMessageType["GetAllProducers"] = "getAllProducers";
85
85
  SFUMessageType["OnAllProducers"] = "onAllProducers";
86
86
  SFUMessageType["OnStopProducer"] = "stopProducer";
87
+ SFUMessageType["OnConsumerScoreChange"] = "OnConsumerScoreChange";
88
+ SFUMessageType["OnProducerScoreChange"] = "OnProducerScoreChange";
89
+ SFUMessageType["OnConsumerLayerChange"] = "OnConsumerLayerChange";
87
90
  // },
88
91
  // socket
89
92
  // );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vani-meeting-server",
3
- "version": "2.7.1",
3
+ "version": "2.7.3",
4
4
  "description": "Vani Meeting Server SDK",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -31,11 +31,11 @@
31
31
  "dotenv": "^16.0.2",
32
32
  "express": "^4.18.1",
33
33
  "helmet": "^6.0.0",
34
- "mediasoup": "3.15.4",
34
+ "mediasoup": "3.16.0",
35
35
  "public-ip": "4.0.3",
36
36
  "typescript": "^5.6.2",
37
37
  "uuid": "^9.0.0",
38
- "ws": "^8.9.0"
38
+ "ws": "^8.18.2"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/uuid": "^8.3.4",