vani-meeting-client 1.9.0 → 1.9.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.
@@ -4,6 +4,7 @@ import { GetDevicesType } from "./user-media-handler/UserMediaHandler";
4
4
  import { Track, TrackKind } from "./model/Track";
5
5
  import { TaskResponse } from "./model/TaskResponse";
6
6
  import { Participant } from "./model/Participant";
7
+ import { TrackStats } from "./model/TrackStats";
7
8
  export declare class MeetingHandler {
8
9
  private meetingStartRequest?;
9
10
  private videoCallHandler?;
@@ -23,6 +24,7 @@ export declare class MeetingHandler {
23
24
  getDevices(deviceType: GetDevicesType): Promise<Device[] | undefined>;
24
25
  pauseCamera(userId?: string): Promise<TaskResponse>;
25
26
  muteUser(userId?: string): Promise<TaskResponse>;
27
+ getClientStats: () => Promise<TrackStats[] | undefined>;
26
28
  resumeCamera(userId?: string): Promise<TaskResponse>;
27
29
  unmute(userId?: string): Promise<TaskResponse>;
28
30
  resumeStreamWithoutAdding(streamKind: TrackKind): TaskResponse | undefined;
@@ -69,6 +69,15 @@ var MeetingHandler = /** @class */ (function () {
69
69
  }
70
70
  });
71
71
  }); };
72
+ this.getClientStats = function () { return __awaiter(_this, void 0, void 0, function () {
73
+ var _a;
74
+ return __generator(this, function (_b) {
75
+ switch (_b.label) {
76
+ case 0: return [4 /*yield*/, ((_a = this.videoCallHandler) === null || _a === void 0 ? void 0 : _a.getClientStats())];
77
+ case 1: return [2 /*return*/, _b.sent()];
78
+ }
79
+ });
80
+ }); };
72
81
  this.restartTransport = function () { return __awaiter(_this, void 0, void 0, function () {
73
82
  var _a;
74
83
  return __generator(this, function (_b) {
@@ -33,7 +33,10 @@ export declare enum VaniEvent {
33
33
  OnReconectionTimeout = "reconectionTimeout",
34
34
  OnReconecting = "reconecting",
35
35
  OnUserOnFoundWhileReconnect = "onUserOnFoundWhileReconnect",
36
- OnNewPingFromServer = "OnNewPingFromServer"
36
+ OnNewPingFromServer = "OnNewPingFromServer",
37
+ OnConsumerScoreChange = "OnConsumerScoreChange",
38
+ OnProducerScoreChange = "OnProducerScoreChange",
39
+ OnConsumerLayerChange = "OnConsumerLayerChange"
37
40
  }
38
41
  interface VaniConnectionEvents {
39
42
  [VaniEvent.OnInitDone]: () => any;
@@ -61,6 +64,21 @@ interface VaniConnectionEvents {
61
64
  participant: Participant;
62
65
  volume: any;
63
66
  }) => any;
67
+ [VaniEvent.OnConsumerScoreChange]: (data: {
68
+ participant: Participant;
69
+ track: Track;
70
+ score: any;
71
+ }) => any;
72
+ [VaniEvent.OnProducerScoreChange]: (data: {
73
+ participant: Participant;
74
+ track: Track;
75
+ score: any;
76
+ }) => any;
77
+ [VaniEvent.OnConsumerLayerChange]: (data: {
78
+ participant: Participant;
79
+ track: Track;
80
+ layer: any;
81
+ }) => any;
64
82
  [VaniEvent.OnNotReachable]: () => any;
65
83
  [VaniEvent.OnReconectionTimeout]: () => any;
66
84
  [VaniEvent.OnReconecting]: () => any;
@@ -32,4 +32,7 @@ export var VaniEvent;
32
32
  VaniEvent["OnReconecting"] = "reconecting";
33
33
  VaniEvent["OnUserOnFoundWhileReconnect"] = "onUserOnFoundWhileReconnect";
34
34
  VaniEvent["OnNewPingFromServer"] = "OnNewPingFromServer";
35
+ VaniEvent["OnConsumerScoreChange"] = "OnConsumerScoreChange";
36
+ VaniEvent["OnProducerScoreChange"] = "OnProducerScoreChange";
37
+ VaniEvent["OnConsumerLayerChange"] = "OnConsumerLayerChange";
35
38
  })(VaniEvent || (VaniEvent = {}));
@@ -0,0 +1,11 @@
1
+ import { Track } from "./Track";
2
+ export declare enum StreamType {
3
+ Consumer = "Consumer",
4
+ Producer = "Producer"
5
+ }
6
+ export declare class TrackStats {
7
+ track: Track;
8
+ type: StreamType;
9
+ stats: any;
10
+ constructor(_track: Track, _type: StreamType, _stats?: any);
11
+ }
@@ -0,0 +1,14 @@
1
+ export var StreamType;
2
+ (function (StreamType) {
3
+ StreamType["Consumer"] = "Consumer";
4
+ StreamType["Producer"] = "Producer";
5
+ })(StreamType || (StreamType = {}));
6
+ var TrackStats = /** @class */ (function () {
7
+ function TrackStats(_track, _type, _stats) {
8
+ this.track = _track;
9
+ this.type = _type;
10
+ this.stats = _stats;
11
+ }
12
+ return TrackStats;
13
+ }());
14
+ export { TrackStats };
@@ -1,6 +1,7 @@
1
1
  import { Track } from "../model/Track";
2
2
  import { WebSocketMessageBody } from "../websocket-handler/WebsocketHandler";
3
3
  import { Base } from "../base/Base";
4
+ import { TrackStats } from "../model/TrackStats";
4
5
  export declare abstract class BaseVideoCallHandler extends Base {
5
6
  protected onObjectCreated(): void;
6
7
  abstract init(): Promise<void>;
@@ -22,4 +23,5 @@ export declare abstract class BaseVideoCallHandler extends Base {
22
23
  updateSpatialForTrack(track: Track, spatialLayerIndex: number): Promise<void>;
23
24
  cleanup(shouldStopTracks?: boolean): void;
24
25
  restartTransport(): void;
26
+ getClientStats: () => Promise<TrackStats[]>;
25
27
  }
@@ -55,7 +55,13 @@ import { Base } from "../base/Base";
55
55
  var BaseVideoCallHandler = /** @class */ (function (_super) {
56
56
  __extends(BaseVideoCallHandler, _super);
57
57
  function BaseVideoCallHandler() {
58
- return _super !== null && _super.apply(this, arguments) || this;
58
+ var _this = _super !== null && _super.apply(this, arguments) || this;
59
+ _this.getClientStats = function () { return __awaiter(_this, void 0, void 0, function () {
60
+ return __generator(this, function (_a) {
61
+ return [2 /*return*/, []];
62
+ });
63
+ }); };
64
+ return _this;
59
65
  }
60
66
  BaseVideoCallHandler.prototype.onObjectCreated = function () {
61
67
  var _a;
@@ -4,6 +4,7 @@ import { Track } from "../model/Track";
4
4
  import { Consumer } from "mediasoup-client/lib/Consumer";
5
5
  import { MeetingStartRequest } from '..';
6
6
  import { CommunicationHandler } from '../inter-communication-handler/CommunicationHandler';
7
+ import { TrackStats } from '../model/TrackStats';
7
8
  export declare class SFUHandler extends BaseVideoCallHandler {
8
9
  private device?;
9
10
  private transportCallBacks;
@@ -50,8 +51,12 @@ export declare class SFUHandler extends BaseVideoCallHandler {
50
51
  private onProducerNotFound;
51
52
  private onTrackEnded;
52
53
  private onNewProducer;
54
+ onConsumerScoreChange: (data: any) => Promise<void>;
55
+ onProducerScoreChange: (data: any) => Promise<void>;
56
+ onConsumerLayerChange: (data: any) => Promise<void>;
53
57
  private onServerConsumer;
54
58
  private onAudioVolumeChanged;
55
59
  private onSpeakerChanged;
60
+ getClientStats: () => Promise<TrackStats[]>;
56
61
  cleanup(shouldStopTracks?: boolean): void;
57
62
  }
@@ -66,6 +66,7 @@ import { detectDevice, Device } from 'mediasoup-client';
66
66
  import { SFUMessageType } from "../websocket-handler/WebsocketHandler";
67
67
  import { Track, TrackKind } from "../model/Track";
68
68
  import { LogLevel, VaniEvent } from '..';
69
+ import { StreamType, TrackStats } from '../model/TrackStats';
69
70
  var SFUHandler = /** @class */ (function (_super) {
70
71
  __extends(SFUHandler, _super);
71
72
  function SFUHandler(_meetingStartRequest, _communicationHandler) {
@@ -97,6 +98,115 @@ var SFUHandler = /** @class */ (function (_super) {
97
98
  }
98
99
  }
99
100
  };
101
+ _this.onConsumerScoreChange = function (data) { return __awaiter(_this, void 0, void 0, function () {
102
+ var score, consumerId, consumedProducer, track;
103
+ var _a, _b;
104
+ return __generator(this, function (_c) {
105
+ this.meetingStartRequest && this.meetingStartRequest.logLevel === LogLevel.Debug && log.info("onConsumerScoreChange", data);
106
+ score = data.score;
107
+ consumerId = data.consumerId;
108
+ consumedProducer = this.consumers.find(function (eachConsumer) { return eachConsumer.id === consumerId; });
109
+ if (consumedProducer) {
110
+ track = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks().find(function (eachTrack) { return consumedProducer.appData.producerData.trackId === eachTrack.trackId; });
111
+ (_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.emitMessageToSource(VaniEvent.OnConsumerScoreChange, { track: track, score: score, participant: track === null || track === void 0 ? void 0 : track.participant });
112
+ }
113
+ return [2 /*return*/];
114
+ });
115
+ }); };
116
+ _this.onProducerScoreChange = function (data) { return __awaiter(_this, void 0, void 0, function () {
117
+ var score, producerId, producer, consumedProducer, track, track;
118
+ var _a, _b, _c, _d;
119
+ return __generator(this, function (_e) {
120
+ this.meetingStartRequest && this.meetingStartRequest.logLevel === LogLevel.Debug && log.info("onProducerScoreChange", data);
121
+ score = data.score;
122
+ producerId = data.producerId;
123
+ producer = this.producers.find(function (producer) { return producer.id === producerId; });
124
+ consumedProducer = this.consumers.find(function (eachConsumer) { return eachConsumer.producerId === producerId; });
125
+ if (consumedProducer) {
126
+ track = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks().find(function (eachTrack) { return consumedProducer.appData.producerData.trackId === eachTrack.trackId; });
127
+ (_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.emitMessageToSource(VaniEvent.OnProducerScoreChange, { track: track, score: score, participant: track === null || track === void 0 ? void 0 : track.participant });
128
+ }
129
+ if (producer) {
130
+ track = (_c = this.communicationHandler) === null || _c === void 0 ? void 0 : _c.getAllTracks().find(function (eachTrack) { return (producer.appData).trackId === eachTrack.trackId; });
131
+ if (track) {
132
+ (_d = this.communicationHandler) === null || _d === void 0 ? void 0 : _d.emitMessageToSource(VaniEvent.OnProducerScoreChange, { track: track, score: score, participant: track === null || track === void 0 ? void 0 : track.participant });
133
+ }
134
+ }
135
+ return [2 /*return*/];
136
+ });
137
+ }); };
138
+ _this.onConsumerLayerChange = function (data) { return __awaiter(_this, void 0, void 0, function () {
139
+ var layer, consumerId, consumer, track;
140
+ var _a, _b;
141
+ return __generator(this, function (_c) {
142
+ this.meetingStartRequest && this.meetingStartRequest.logLevel === LogLevel.Debug && log.info("onConsumerLayerChange", data);
143
+ layer = data.layer;
144
+ consumerId = data.consumerId;
145
+ consumer = this.consumers.find(function (consumer) { return consumer.id === consumerId; });
146
+ if (consumer) {
147
+ track = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks().find(function (eachTrack) { return consumer.appData.producerData.trackId === eachTrack.trackId; });
148
+ if (track) {
149
+ (_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.emitMessageToSource(VaniEvent.OnConsumerLayerChange, { track: track, layer: layer, participant: track.participant });
150
+ }
151
+ }
152
+ return [2 /*return*/];
153
+ });
154
+ }); };
155
+ _this.getClientStats = function () { return __awaiter(_this, void 0, void 0, function () {
156
+ var allStats, allTracks, _loop_1, this_1, _i, allTracks_1, track;
157
+ var _a;
158
+ return __generator(this, function (_b) {
159
+ switch (_b.label) {
160
+ case 0:
161
+ allStats = [];
162
+ if (!this.communicationHandler) return [3 /*break*/, 4];
163
+ allTracks = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks();
164
+ _loop_1 = function (track) {
165
+ var trackId, consumer, _c, _d, _e, _f, producer, _g, _h, _j, _k;
166
+ return __generator(this, function (_l) {
167
+ switch (_l.label) {
168
+ case 0:
169
+ trackId = track.trackId;
170
+ consumer = this_1.consumers.find(function (consumer) { return consumer.appData.producerData.trackId === trackId; });
171
+ if (!consumer) return [3 /*break*/, 2];
172
+ _d = (_c = allStats).push;
173
+ _e = TrackStats.bind;
174
+ _f = [void 0, track, StreamType.Consumer];
175
+ return [4 /*yield*/, consumer.getStats()];
176
+ case 1:
177
+ _d.apply(_c, [new (_e.apply(TrackStats, _f.concat([_l.sent()])))()]);
178
+ return [3 /*break*/, 4];
179
+ case 2:
180
+ producer = this_1.producers.find(function (producer) { return (producer.appData).trackId === trackId; });
181
+ if (!producer) return [3 /*break*/, 4];
182
+ _h = (_g = allStats).push;
183
+ _j = TrackStats.bind;
184
+ _k = [void 0, track, StreamType.Producer];
185
+ return [4 /*yield*/, producer.getStats()];
186
+ case 3:
187
+ _h.apply(_g, [new (_j.apply(TrackStats, _k.concat([_l.sent()])))()]);
188
+ _l.label = 4;
189
+ case 4: return [2 /*return*/];
190
+ }
191
+ });
192
+ };
193
+ this_1 = this;
194
+ _i = 0, allTracks_1 = allTracks;
195
+ _b.label = 1;
196
+ case 1:
197
+ if (!(_i < allTracks_1.length)) return [3 /*break*/, 4];
198
+ track = allTracks_1[_i];
199
+ return [5 /*yield**/, _loop_1(track)];
200
+ case 2:
201
+ _b.sent();
202
+ _b.label = 3;
203
+ case 3:
204
+ _i++;
205
+ return [3 /*break*/, 1];
206
+ case 4: return [2 /*return*/, allStats];
207
+ }
208
+ });
209
+ }); };
100
210
  var handlerName = detectDevice();
101
211
  if (handlerName) {
102
212
  _this.device = new Device();
@@ -614,6 +724,15 @@ var SFUHandler = /** @class */ (function (_super) {
614
724
  else if (websocketCallHandler.type === SFUMessageType.OnServerConsumer) {
615
725
  this.onServerConsumer(websocketCallHandler.data);
616
726
  }
727
+ else if (websocketCallHandler.type === SFUMessageType.OnConsumerLayerChange) {
728
+ this.onConsumerLayerChange(websocketCallHandler.data);
729
+ }
730
+ else if (websocketCallHandler.type === SFUMessageType.OnConsumerScoreChange) {
731
+ this.onConsumerScoreChange(websocketCallHandler.data);
732
+ }
733
+ else if (websocketCallHandler.type === SFUMessageType.OnProducerScoreChange) {
734
+ this.onProducerScoreChange(websocketCallHandler.data);
735
+ }
617
736
  else if (websocketCallHandler.type === SFUMessageType.OnProduceSyncDone) {
618
737
  this.onProduceSyncDone(websocketCallHandler.data);
619
738
  }
@@ -65,7 +65,10 @@ export declare enum SFUMessageType {
65
65
  OnAllProducers = "onAllProducers",
66
66
  OnAudioVolumeChanged = "OnAudioVolumeChanged",
67
67
  OnConsumerNotFound = "OnConsumerNotFound",
68
- OnProducerNotFound = "OnProducerNotFound"
68
+ OnProducerNotFound = "OnProducerNotFound",
69
+ OnConsumerScoreChange = "OnConsumerScoreChange",
70
+ OnProducerScoreChange = "OnProducerScoreChange",
71
+ OnConsumerLayerChange = "OnConsumerLayerChange"
69
72
  }
70
73
  export type WebSocketEvents = SFUMessageType | WebSocketBasicEvents;
71
74
  export interface WebSocketMessageBody {
@@ -122,6 +122,9 @@ export var SFUMessageType;
122
122
  SFUMessageType["OnAudioVolumeChanged"] = "OnAudioVolumeChanged";
123
123
  SFUMessageType["OnConsumerNotFound"] = "OnConsumerNotFound";
124
124
  SFUMessageType["OnProducerNotFound"] = "OnProducerNotFound";
125
+ SFUMessageType["OnConsumerScoreChange"] = "OnConsumerScoreChange";
126
+ SFUMessageType["OnProducerScoreChange"] = "OnProducerScoreChange";
127
+ SFUMessageType["OnConsumerLayerChange"] = "OnConsumerLayerChange";
125
128
  })(SFUMessageType || (SFUMessageType = {}));
126
129
  var ConnectionType;
127
130
  (function (ConnectionType) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vani-meeting-client",
3
- "version": "1.9.0",
3
+ "version": "1.9.2",
4
4
  "description": "Vani Meeting Clinet SDK",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -42,11 +42,9 @@
42
42
  "typescript": "^4.5.2"
43
43
  },
44
44
  "dependencies": {
45
- "@analytics/google-analytics": "^0.5.3",
46
- "analytics": "^0.7.21",
47
45
  "axios": "^0.24.0",
48
46
  "loglevel": "^1.8.0",
49
- "mediasoup-client": "^3.8.1"
47
+ "mediasoup-client": "^3.11.0"
50
48
  },
51
49
  "optionalDependencies": {}
52
50
  }