vani-meeting-client 0.3.4 → 0.3.7
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/lib/MeetingHandler.js +8 -3
- package/lib/model/MeetingStartRequest.d.ts +1 -0
- package/lib/model/MeetingStartRequest.js +1 -0
- package/lib/model/MessagePayload.d.ts +5 -0
- package/lib/model/MessagePayload.js +6 -0
- package/lib/model/Track.d.ts +2 -1
- package/lib/model/Track.js +1 -0
- package/lib/video-call-handler/BaseVideoCallHandler.d.ts +2 -0
- package/lib/video-call-handler/SFUHandler.d.ts +1 -0
- package/lib/video-call-handler/SFUHandler.js +83 -30
- package/lib/video-call-handler/WebrtcHandler.d.ts +1 -0
- package/lib/video-call-handler/WebrtcHandler.js +3 -0
- package/lib/websocket-handler/WebsocketHandler.d.ts +1 -0
- package/lib/websocket-handler/WebsocketHandler.js +1 -0
- package/package.json +1 -1
package/lib/MeetingHandler.js
CHANGED
|
@@ -34,7 +34,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
-
import { VaniEvent, MeetingStartRequest } from ".";
|
|
37
|
+
import { VaniEvent, MeetingStartRequest, ChatSendVia } from ".";
|
|
38
38
|
import { DynamicLibHelper } from "./utility/DynamicLibHelper";
|
|
39
39
|
import * as log from 'loglevel';
|
|
40
40
|
import { WebSocketBasicEvents, WebsocketHandler } from "./websocket-handler/WebsocketHandler";
|
|
@@ -303,7 +303,7 @@ var MeetingHandler = /** @class */ (function () {
|
|
|
303
303
|
};
|
|
304
304
|
///Messages
|
|
305
305
|
MeetingHandler.prototype.sendMessage = function (message) {
|
|
306
|
-
var _a, _b;
|
|
306
|
+
var _a, _b, _c;
|
|
307
307
|
if (!message.sender) {
|
|
308
308
|
message.sender = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getSelfParticipant();
|
|
309
309
|
}
|
|
@@ -317,7 +317,12 @@ var MeetingHandler = /** @class */ (function () {
|
|
|
317
317
|
else {
|
|
318
318
|
var to = message.to === "all" ? this.meetingStartRequest.roomId : message.to;
|
|
319
319
|
var messageObj = { type: "chat", message: message.toJsonObjectForSending(), to: to, shouldPresist: message.shouldPresist };
|
|
320
|
-
(
|
|
320
|
+
if (message.chatSendVia === ChatSendVia.DataChannel) {
|
|
321
|
+
(_b = this.videoCallHandler) === null || _b === void 0 ? void 0 : _b.sendMessageViaDataChannel(messageObj);
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
(_c = this.websocketCallHandler) === null || _c === void 0 ? void 0 : _c.sendSocketMessage(WebSocketBasicEvents.Message, messageObj);
|
|
325
|
+
}
|
|
321
326
|
return { message: "Message Sent", error: 'NoError', isSuccess: true };
|
|
322
327
|
}
|
|
323
328
|
};
|
|
@@ -36,6 +36,7 @@ export declare class MeetingStartRequest {
|
|
|
36
36
|
defaultScreenShareBlocked: boolean;
|
|
37
37
|
defaultCameraFacingMode: CameraFacingMode;
|
|
38
38
|
simulcastEncodings: RTCRtpEncodingParameters[];
|
|
39
|
+
isDataChannelRequired: boolean;
|
|
39
40
|
urlToCheckInternetPresent: string;
|
|
40
41
|
constructor(_roomId: string, _userId: string, _appId: string, _wssUrl: string);
|
|
41
42
|
}
|
|
@@ -31,6 +31,7 @@ var MeetingStartRequest = /** @class */ (function () {
|
|
|
31
31
|
this.defaultScreenShareBlocked = false;
|
|
32
32
|
this.defaultCameraFacingMode = CameraFacingMode.Front;
|
|
33
33
|
this.simulcastEncodings = [{ maxBitrate: 40000, scaleResolutionDownBy: 2.0 }, { maxBitrate: 620000, scaleResolutionDownBy: 1.0 },];
|
|
34
|
+
this.isDataChannelRequired = false;
|
|
34
35
|
this.urlToCheckInternetPresent = "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Stack%20Overflow";
|
|
35
36
|
this.roomId = _roomId;
|
|
36
37
|
this.userId = _userId;
|
|
@@ -4,6 +4,10 @@ export declare enum ChatMessageType {
|
|
|
4
4
|
File = "file",
|
|
5
5
|
Info = "info"
|
|
6
6
|
}
|
|
7
|
+
export declare enum ChatSendVia {
|
|
8
|
+
WebSocket = "WebSocket",
|
|
9
|
+
DataChannel = "DataChannel"
|
|
10
|
+
}
|
|
7
11
|
export declare class MessagePayload {
|
|
8
12
|
message: string;
|
|
9
13
|
to: string;
|
|
@@ -13,6 +17,7 @@ export declare class MessagePayload {
|
|
|
13
17
|
sender?: Participant;
|
|
14
18
|
shouldPresist: boolean;
|
|
15
19
|
time: number;
|
|
20
|
+
chatSendVia: ChatSendVia;
|
|
16
21
|
constructor(_message: string);
|
|
17
22
|
constructor(_message: string, _to: string);
|
|
18
23
|
toJsonObjectForSending(): {
|
|
@@ -4,6 +4,11 @@ export var ChatMessageType;
|
|
|
4
4
|
ChatMessageType["File"] = "file";
|
|
5
5
|
ChatMessageType["Info"] = "info";
|
|
6
6
|
})(ChatMessageType || (ChatMessageType = {}));
|
|
7
|
+
export var ChatSendVia;
|
|
8
|
+
(function (ChatSendVia) {
|
|
9
|
+
ChatSendVia["WebSocket"] = "WebSocket";
|
|
10
|
+
ChatSendVia["DataChannel"] = "DataChannel";
|
|
11
|
+
})(ChatSendVia || (ChatSendVia = {}));
|
|
7
12
|
var MessagePayload = /** @class */ (function () {
|
|
8
13
|
function MessagePayload(_message, _to, _sender, _type) {
|
|
9
14
|
if (_to === void 0) { _to = "all"; }
|
|
@@ -12,6 +17,7 @@ var MessagePayload = /** @class */ (function () {
|
|
|
12
17
|
this.extraData = {};
|
|
13
18
|
this.shouldPresist = false;
|
|
14
19
|
this.time = new Date().getTime();
|
|
20
|
+
this.chatSendVia = ChatSendVia.WebSocket;
|
|
15
21
|
this.message = _message;
|
|
16
22
|
this.to = _to;
|
|
17
23
|
this.sender = _sender;
|
package/lib/model/Track.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ export declare enum TrackKind {
|
|
|
4
4
|
Audio = "Audio",
|
|
5
5
|
ScreenshareVideo = "ScreenshareVideo",
|
|
6
6
|
ScreenshareAudio = "ScreenshareAudio",
|
|
7
|
-
LocalVideo = "LocalVideo"
|
|
7
|
+
LocalVideo = "LocalVideo",
|
|
8
|
+
DataChannel = "DataChannel"
|
|
8
9
|
}
|
|
9
10
|
export declare class Track {
|
|
10
11
|
trackId: string;
|
package/lib/model/Track.js
CHANGED
|
@@ -5,6 +5,7 @@ export var TrackKind;
|
|
|
5
5
|
TrackKind["ScreenshareVideo"] = "ScreenshareVideo";
|
|
6
6
|
TrackKind["ScreenshareAudio"] = "ScreenshareAudio";
|
|
7
7
|
TrackKind["LocalVideo"] = "LocalVideo";
|
|
8
|
+
TrackKind["DataChannel"] = "DataChannel";
|
|
8
9
|
})(TrackKind || (TrackKind = {}));
|
|
9
10
|
var Track = /** @class */ (function () {
|
|
10
11
|
function Track(_participant, _isLocalTrack, _trackKind, _track) {
|
|
@@ -13,6 +13,8 @@ export declare abstract class BaseVideoCallHandler extends Base {
|
|
|
13
13
|
abstract resumeIncomingTrack(track: Track): void;
|
|
14
14
|
abstract pauseIncomingTrack(track: Track): void;
|
|
15
15
|
abstract onParticipantUpdated(): void;
|
|
16
|
+
abstract createDataChannel(): any;
|
|
17
|
+
abstract sendMessageViaDataChannel(messagePayload: any): any;
|
|
16
18
|
updateSpatialForTrack(track: Track, spatialLayerIndex: number): Promise<void>;
|
|
17
19
|
reconnectedWithoutPing(): void;
|
|
18
20
|
cleanup(): void;
|
|
@@ -22,6 +22,7 @@ export declare class SFUHandler extends BaseVideoCallHandler {
|
|
|
22
22
|
sendTrack(track: Track): Promise<void>;
|
|
23
23
|
createDataChannel(): Promise<void>;
|
|
24
24
|
onParticipantUpdated(): void;
|
|
25
|
+
sendMessageViaDataChannel(messagePayload: any): void;
|
|
25
26
|
init(): Promise<void>;
|
|
26
27
|
private onTransportNotFound;
|
|
27
28
|
private addObserverForDevice;
|
|
@@ -198,7 +198,6 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
198
198
|
if (webcamProducer) {
|
|
199
199
|
this.producers.push(webcamProducer);
|
|
200
200
|
this.onParticipantUpdated();
|
|
201
|
-
this.createDataChannel();
|
|
202
201
|
// this.sendMessageReadyToConsume();
|
|
203
202
|
}
|
|
204
203
|
_d.label = 4;
|
|
@@ -208,20 +207,21 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
208
207
|
});
|
|
209
208
|
};
|
|
210
209
|
SFUHandler.prototype.createDataChannel = function () {
|
|
211
|
-
var _a;
|
|
210
|
+
var _a, _b;
|
|
212
211
|
return __awaiter(this, void 0, void 0, function () {
|
|
213
|
-
var webcamProducer;
|
|
214
|
-
return __generator(this, function (
|
|
215
|
-
switch (
|
|
212
|
+
var track, webcamProducer;
|
|
213
|
+
return __generator(this, function (_c) {
|
|
214
|
+
switch (_c.label) {
|
|
216
215
|
case 0:
|
|
217
216
|
if (!(this.dataProducers.length === 0)) return [3 /*break*/, 2];
|
|
218
|
-
|
|
217
|
+
track = new Track((_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getSelfParticipant(), true, TrackKind.DataChannel, undefined);
|
|
218
|
+
return [4 /*yield*/, ((_b = this.sendTransport) === null || _b === void 0 ? void 0 : _b.produceData({ appData: track }))];
|
|
219
219
|
case 1:
|
|
220
|
-
webcamProducer =
|
|
220
|
+
webcamProducer = _c.sent();
|
|
221
221
|
if (webcamProducer) {
|
|
222
222
|
this.dataProducers.push(webcamProducer);
|
|
223
223
|
}
|
|
224
|
-
|
|
224
|
+
_c.label = 2;
|
|
225
225
|
case 2: return [2 /*return*/];
|
|
226
226
|
}
|
|
227
227
|
});
|
|
@@ -239,6 +239,11 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
239
239
|
});
|
|
240
240
|
}
|
|
241
241
|
};
|
|
242
|
+
SFUHandler.prototype.sendMessageViaDataChannel = function (messagePayload) {
|
|
243
|
+
if (this.dataProducers && this.dataProducers.length > 0) {
|
|
244
|
+
this.dataProducers[0].send(messagePayload);
|
|
245
|
+
}
|
|
246
|
+
};
|
|
242
247
|
SFUHandler.prototype.init = function () {
|
|
243
248
|
return __awaiter(this, void 0, void 0, function () {
|
|
244
249
|
var messageJson;
|
|
@@ -308,10 +313,20 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
308
313
|
this.sendTransport = this.device.createSendTransport(transport);
|
|
309
314
|
this.sendTransport.on('produce', function (producerLocalParameters, callback, errback) {
|
|
310
315
|
var _a;
|
|
311
|
-
_this.transportCallBacks[
|
|
316
|
+
_this.transportCallBacks[producerLocalParameters.appData.trackId] = callback;
|
|
312
317
|
var messageJson = { to: "self", type: SFUMessageType.OnTransportProduceSyncRequest, message: { type: producerLocalParameters.appData.type, transportId: (_a = _this.sendTransport) === null || _a === void 0 ? void 0 : _a.id, kind: producerLocalParameters.kind, rtpParameters: producerLocalParameters.rtpParameters, appData: producerLocalParameters.appData } };
|
|
313
318
|
_this.sendSFUMessageToSocket(messageJson);
|
|
314
319
|
});
|
|
320
|
+
this.sendTransport.on("producedata", function (producerLocalParameters, callback, errback) { return __awaiter(_this, void 0, void 0, function () {
|
|
321
|
+
var messageJson;
|
|
322
|
+
var _a;
|
|
323
|
+
return __generator(this, function (_b) {
|
|
324
|
+
this.transportCallBacks[producerLocalParameters.appData.trackId] = callback;
|
|
325
|
+
messageJson = { to: "self", type: SFUMessageType.OnTransportDataProduceSyncRequest, message: { type: 'send', transportId: (_a = this.sendTransport) === null || _a === void 0 ? void 0 : _a.id, sctpStreamParameters: producerLocalParameters.sctpStreamParameters, label: producerLocalParameters.label, appData: producerLocalParameters.appData } };
|
|
326
|
+
this.sendSFUMessageToSocket(messageJson);
|
|
327
|
+
return [2 /*return*/];
|
|
328
|
+
});
|
|
329
|
+
}); });
|
|
315
330
|
this.sendTransport.on('connectionstatechange', function (newState) {
|
|
316
331
|
var _a;
|
|
317
332
|
if (newState === "disconnected" || newState === "failed") {
|
|
@@ -337,7 +352,7 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
337
352
|
};
|
|
338
353
|
SFUHandler.prototype.produceTracks = function () {
|
|
339
354
|
var _this = this;
|
|
340
|
-
var _a;
|
|
355
|
+
var _a, _b;
|
|
341
356
|
log.info("produceTracks");
|
|
342
357
|
if (!this.sendTransport || !this.consumerTransport == null || this.isProduceTrackIntialWorkDone) {
|
|
343
358
|
return;
|
|
@@ -353,15 +368,18 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
353
368
|
else {
|
|
354
369
|
this.sendMessageReadyToConsume();
|
|
355
370
|
}
|
|
371
|
+
if ((_b = this.meetingStartRequest) === null || _b === void 0 ? void 0 : _b.isDataChannelRequired) {
|
|
372
|
+
this.createDataChannel();
|
|
373
|
+
}
|
|
356
374
|
};
|
|
357
375
|
SFUHandler.prototype.onProduceSyncDone = function (data) {
|
|
358
|
-
if (data.message.
|
|
376
|
+
if (data.message.appData && data.message.appData.trackId && data.message.producerId) {
|
|
359
377
|
var transportId = data.message.transportId;
|
|
360
|
-
var callBack = this.transportCallBacks[
|
|
378
|
+
var callBack = this.transportCallBacks[data.message.appData.trackId];
|
|
361
379
|
if (callBack) {
|
|
362
380
|
var id = data.message.producerId;
|
|
363
381
|
callBack({ id: id });
|
|
364
|
-
delete this.transportCallBacks[
|
|
382
|
+
delete this.transportCallBacks[data.message.appData.trackId];
|
|
365
383
|
}
|
|
366
384
|
}
|
|
367
385
|
};
|
|
@@ -416,6 +434,11 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
416
434
|
if (track) {
|
|
417
435
|
(_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.removeTrack(track);
|
|
418
436
|
}
|
|
437
|
+
consumer.close();
|
|
438
|
+
var index = this.consumers.indexOf(consumer);
|
|
439
|
+
if (index > -1) {
|
|
440
|
+
this.consumers.splice(index, 1);
|
|
441
|
+
}
|
|
419
442
|
}
|
|
420
443
|
}
|
|
421
444
|
};
|
|
@@ -431,7 +454,12 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
431
454
|
consumerAppData = __assign({}, this.consumerTransport.appData);
|
|
432
455
|
consumerAppData.producerData = producer.appData;
|
|
433
456
|
consumerAppData.producerData.producerId = producerId;
|
|
434
|
-
|
|
457
|
+
producer.appData = consumerAppData;
|
|
458
|
+
cosumeObj = {
|
|
459
|
+
producerId: producerId, rtpCapabilities: this.routerRtpCapabilities, rtpParameters: data.message.producer.rtpParameters,
|
|
460
|
+
paused: true, appData: consumerAppData, transportId: this.consumerTransport.id, type: "consume",
|
|
461
|
+
sctpStreamParameters: data.message.producer.sctpStreamParameters, label: data.message.producer.label, protocol: data.message.producer.protocol
|
|
462
|
+
};
|
|
435
463
|
message = { to: "self", type: SFUMessageType.ConsumeProductId, message: cosumeObj };
|
|
436
464
|
this.sendSFUMessageToSocket(message);
|
|
437
465
|
}
|
|
@@ -441,27 +469,42 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
441
469
|
};
|
|
442
470
|
SFUHandler.prototype.onServerConsumer = function (data) {
|
|
443
471
|
return __awaiter(this, void 0, void 0, function () {
|
|
444
|
-
var consumerObj;
|
|
472
|
+
var consumerObj, consumerObj;
|
|
445
473
|
var _this = this;
|
|
446
474
|
return __generator(this, function (_a) {
|
|
447
475
|
log.info("onServerConsumer");
|
|
448
476
|
log.info(data);
|
|
449
477
|
if (this.consumerTransport && data && data.message && data.message.consumer) {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
478
|
+
if (data.message.consumer.appData.producerData.trackKind === TrackKind.DataChannel) {
|
|
479
|
+
consumerObj = data.message.consumer;
|
|
480
|
+
this.consumerTransport.consumeData(consumerObj).then(function (consumer) {
|
|
481
|
+
_this.dataConsumer.push(consumer);
|
|
482
|
+
consumer.on("message", function (message, ppid) {
|
|
483
|
+
var _a;
|
|
484
|
+
if (message && message.message) {
|
|
485
|
+
(_a = _this.communicationHandler) === null || _a === void 0 ? void 0 : _a.onMessage(message.message);
|
|
486
|
+
}
|
|
487
|
+
console.log("OnMessage Data Channel", message);
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
consumerObj = data.message.consumer;
|
|
493
|
+
this.consumerTransport.consume(consumerObj).then(function (consumer) {
|
|
494
|
+
var _a, _b;
|
|
495
|
+
_this.consumers.push(consumer);
|
|
496
|
+
var mediaTrack = consumer.track;
|
|
497
|
+
var data = consumer.appData.producerData;
|
|
498
|
+
log.info(data);
|
|
499
|
+
var participant = (_a = _this.communicationHandler) === null || _a === void 0 ? void 0 : _a.addParticipantIfNotExist(data.participant, true);
|
|
500
|
+
if (participant) {
|
|
501
|
+
var track = new Track(participant, false, data.trackKind, mediaTrack);
|
|
502
|
+
(_b = _this.communicationHandler) === null || _b === void 0 ? void 0 : _b.addUpdateRemoteTrack(track, participant, true);
|
|
503
|
+
}
|
|
504
|
+
var messageJson = { to: "self", type: SFUMessageType.ResumeConsumer, message: { id: consumer.id } };
|
|
505
|
+
_this.sendSFUMessageToSocket(messageJson);
|
|
506
|
+
});
|
|
507
|
+
}
|
|
465
508
|
}
|
|
466
509
|
return [2 /*return*/];
|
|
467
510
|
});
|
|
@@ -491,6 +534,16 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
491
534
|
producer.close();
|
|
492
535
|
}
|
|
493
536
|
});
|
|
537
|
+
this.dataProducers.forEach(function (producer) {
|
|
538
|
+
if (producer.closed === false) {
|
|
539
|
+
producer.close();
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
this.dataConsumer.forEach(function (consumer) {
|
|
543
|
+
if (consumer.closed === false) {
|
|
544
|
+
consumer.close();
|
|
545
|
+
}
|
|
546
|
+
});
|
|
494
547
|
this.consumers.forEach(function (consumer) {
|
|
495
548
|
if (consumer.closed === false) {
|
|
496
549
|
consumer.close();
|
|
@@ -98,6 +98,9 @@ var WebrtcHandler = /** @class */ (function (_super) {
|
|
|
98
98
|
});
|
|
99
99
|
});
|
|
100
100
|
};
|
|
101
|
+
WebrtcHandler.prototype.sendMessageViaDataChannel = function (messagePayload) {
|
|
102
|
+
throw new Error('Method not implemented.');
|
|
103
|
+
};
|
|
101
104
|
return WebrtcHandler;
|
|
102
105
|
}(BaseVideoCallHandler));
|
|
103
106
|
export { WebrtcHandler };
|
|
@@ -36,6 +36,7 @@ export declare enum SFUMessageType {
|
|
|
36
36
|
OnSendTransport = "onSendTransport",
|
|
37
37
|
OnConsumeTransport = "onConsumeTransport",
|
|
38
38
|
OnTransportProduceSyncRequest = "transportProduceSync",
|
|
39
|
+
OnTransportDataProduceSyncRequest = "dataTransportProduceSync",
|
|
39
40
|
OnReadyToConsume = "readyToConsume",
|
|
40
41
|
OnProducerClosed = "producerClosed",
|
|
41
42
|
OnPauseProducer = "pauseProducer",
|
|
@@ -92,6 +92,7 @@ export var SFUMessageType;
|
|
|
92
92
|
SFUMessageType["OnSendTransport"] = "onSendTransport";
|
|
93
93
|
SFUMessageType["OnConsumeTransport"] = "onConsumeTransport";
|
|
94
94
|
SFUMessageType["OnTransportProduceSyncRequest"] = "transportProduceSync";
|
|
95
|
+
SFUMessageType["OnTransportDataProduceSyncRequest"] = "dataTransportProduceSync";
|
|
95
96
|
SFUMessageType["OnReadyToConsume"] = "readyToConsume";
|
|
96
97
|
SFUMessageType["OnProducerClosed"] = "producerClosed";
|
|
97
98
|
SFUMessageType["OnPauseProducer"] = "pauseProducer";
|