@techsee/techsee-media-service 0.19.1 → 0.20.1
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/MultiParty/Contracts.d.ts +11 -0
- package/lib/MultiParty/Contracts.d.ts.map +1 -0
- package/lib/MultiParty/Contracts.js +6 -0
- package/lib/MultiParty/Contracts.js.map +1 -0
- package/lib/MultiParty/DetectWebRtcService.d.ts +16 -0
- package/lib/MultiParty/DetectWebRtcService.d.ts.map +1 -0
- package/lib/MultiParty/DetectWebRtcService.js +63 -0
- package/lib/MultiParty/DetectWebRtcService.js.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesHelper.d.ts +12 -0
- package/lib/MultiParty/MediaCapabilitiesHelper.d.ts.map +1 -0
- package/lib/MultiParty/MediaCapabilitiesHelper.js +167 -0
- package/lib/MultiParty/MediaCapabilitiesHelper.js.map +1 -0
- package/lib/MultiParty/MultiParty.d.ts +21 -0
- package/lib/MultiParty/MultiParty.d.ts.map +1 -0
- package/lib/MultiParty/MultiParty.js +155 -0
- package/lib/MultiParty/MultiParty.js.map +1 -0
- package/lib/MultiParty/MultipartyFactory.d.ts +2 -0
- package/lib/MultiParty/MultipartyFactory.d.ts.map +1 -0
- package/lib/MultiParty/MultipartyFactory.js +16 -0
- package/lib/MultiParty/MultipartyFactory.js.map +1 -0
- package/lib/MultiParty/OpentokMultiparty.d.ts +24 -0
- package/lib/MultiParty/OpentokMultiparty.d.ts.map +1 -0
- package/lib/MultiParty/OpentokMultiparty.js +408 -0
- package/lib/MultiParty/OpentokMultiparty.js.map +1 -0
- package/lib/oldCode/tracer.js +1 -1
- package/lib/oldCode/tracer.js.map +1 -1
- package/lib/oldCode/utils/ImageFixer.js +1 -1
- package/lib/oldCode/utils/ImageFixer.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MultiParty } from './MultiParty';
|
|
2
|
+
import { ICredentials, ISessionSettings } from './Contracts';
|
|
3
|
+
export declare class OpentokMultiparty extends MultiParty {
|
|
4
|
+
subscribers: Array<any>;
|
|
5
|
+
session: any;
|
|
6
|
+
currentPublisher: any;
|
|
7
|
+
credentials: any;
|
|
8
|
+
get ownConnectionId(): string | boolean;
|
|
9
|
+
connect: (credentials: ICredentials) => void;
|
|
10
|
+
disconnect: () => void;
|
|
11
|
+
couldStartPublishVideo: (settings: ISessionSettings) => Promise<boolean | Error>;
|
|
12
|
+
couldStartPublishAudio: (settings: ISessionSettings) => Promise<boolean | Error>;
|
|
13
|
+
createPublisher: (settingsForPublisher: ISessionSettings) => Promise<void>;
|
|
14
|
+
publishAudio: (value: boolean) => Promise<void>;
|
|
15
|
+
publishVideo: (value: boolean) => Promise<void>;
|
|
16
|
+
initPublisher: (settings: ISessionSettings) => void;
|
|
17
|
+
streamCreatedHandler: (event: {
|
|
18
|
+
stream: any;
|
|
19
|
+
}) => void;
|
|
20
|
+
streamDestroyedHandler: (event: any) => void;
|
|
21
|
+
connectionCreatedHandler: (event: any) => void;
|
|
22
|
+
connectionDestroyedHandler: (event: any) => void;
|
|
23
|
+
traceError: (error: any) => void;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/OpentokMultiparty.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,UAAU,EAAmB,MAAM,cAAc,CAAC;AAIrG,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAe3D,qBAAa,iBAAkB,SAAQ,UAAU;IAC7C,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAM;IAC7B,OAAO,EAAE,GAAG,CAAC;IACb,gBAAgB,EAAE,GAAG,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC;IAEjB,IAAI,eAAe,IAAI,MAAM,GAAG,OAAO,CAEtC;IAED,OAAO,gBAAiB,YAAY,KAAG,IAAI,CAmCzC;IAEF,UAAU,QAAO,IAAI,CAYnB;IAEF,sBAAsB,aAAoB,gBAAgB,KAAG,QAAQ,OAAO,GAAG,KAAK,CAAC,CAYnF;IAEF,sBAAsB,aAAoB,gBAAgB,KAAG,QAAQ,OAAO,GAAG,KAAK,CAAC,CASnF;IAEF,eAAe,yBAAgC,gBAAgB,KAAG,QAAQ,IAAI,CAAC,CAwB7E;IAEF,YAAY,UAAiB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAgBlD;IAEF,YAAY,UAAiB,OAAO,KAAG,QAAQ,IAAI,CAAC,CAgBlD;IAEF,aAAa,aAAc,gBAAgB,UAyB1C;IAED,oBAAoB;gBAAqB,GAAG;UAAK,IAAI,CAmCnD;IAEF,sBAAsB,UAAW,GAAG,KAAG,IAAI,CAOzC;IAEF,wBAAwB,UAAW,GAAG,KAAG,IAAI,CAY3C;IAEF,0BAA0B,UAAW,GAAG,KAAG,IAAI,CAI7C;IAEF,UAAU,UAAW,GAAG,KAAG,IAAI,CAE7B;CACL","file":"OpentokMultiparty.d.ts","sourcesContent":["import {maxParticipantsNumber, MULTI_PARTY_EVENTS, MultiParty, participateDomId} from './MultiParty';\nimport {CameraTypes} from '../MediaConstants';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport get from 'lodash/get';\nimport {ICredentials, ISessionSettings} from './Contracts';\nimport filter from 'lodash/filter';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {MediaCapabilitiesHelper} from './MediaCapabilitiesHelper';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst OT = require('@opentok/client');\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\nexport class OpentokMultiparty extends MultiParty {\n subscribers: Array<any> = [];\n session: any;\n currentPublisher: any;\n credentials: any;\n\n get ownConnectionId(): string | boolean {\n return this.session && this.session.connection && this.session.connection.connectionId;\n }\n\n connect = (credentials: ICredentials): void => {\n this.credentials = credentials;\n\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(err)}});\n\n return;\n }\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n\n this.session.connect(this.credentials.token, async (error: any) => {\n if (error) {\n this.session.off();\n this.session = null;\n this.traceError(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n\n return;\n }\n\n if (this.settings.defaultCamera === CameraTypes.NONE && this.settings.startWithAudioMuted) {\n trace.info('camera is none, no need to create publisher');\n\n return;\n }\n\n await this.createPublisher(this.settings);\n });\n };\n\n disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n couldStartPublishVideo = async (settings: ISessionSettings): Promise<boolean | Error> => {\n try {\n const mediaCapabilitiesHelper = await MediaCapabilitiesHelper.init();\n\n return (settings.defaultCamera !== CameraTypes.NONE)\n ? mediaCapabilitiesHelper.hasCamera()\n : false;\n\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n couldStartPublishAudio = async (settings: ISessionSettings): Promise<boolean | Error> => {\n try {\n const mediaCapabilitiesHelper = await MediaCapabilitiesHelper.init();\n\n return !settings.startWithAudioMuted && mediaCapabilitiesHelper.hasMicrophone();\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n createPublisher = async (settingsForPublisher: ISessionSettings): Promise<void> => {\n const settings = cloneDeep(settingsForPublisher);\n const couldStartPublishVideo = await this.couldStartPublishVideo(settings);\n const couldStartPublishAudio = await this.couldStartPublishAudio(settings);\n\n if (!couldStartPublishVideo && !couldStartPublishAudio) {\n // FIXME: use emitter\n trace.error('could not create a publisher, due to lack of media capabilities or settings');\n\n return;\n }\n\n if (!couldStartPublishVideo) {\n settings.defaultCamera = CameraTypes.NONE;\n }\n\n if (!couldStartPublishAudio) {\n settings.startWithAudioMuted = true;\n }\n\n if (!this.currentPublisher) {\n this.initPublisher(settings);\n this.session.publish(this.currentPublisher, this.traceError);\n }\n };\n\n publishAudio = async (value: boolean): Promise<void> => {\n const settings = cloneDeep(this.settings);\n\n settings.startWithAudioMuted = !value;\n\n if (value && !await this.couldStartPublishAudio(settings)) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n this.createPublisher(settings);\n } else {\n this.currentPublisher.publishAudio(value);\n }\n };\n\n publishVideo = async (value: boolean): Promise<void> => {\n const settings = cloneDeep(this.settings);\n\n settings.defaultCamera = value ? this.settings.defaultCamera : CameraTypes.NONE;\n\n if (value && !await this.couldStartPublishVideo(settings)) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n this.createPublisher(settings);\n } else {\n this.currentPublisher.publishVideo(value);\n }\n };\n\n initPublisher = (settings: ISessionSettings) => {\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.defaultCamera !== CameraTypes.NONE,\n facingMode: settings.defaultCamera === CameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n\n this.currentPublisher = OT.initPublisher(`${participateDomId}1`, properties, this.traceError);\n\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, get(this.currentPublisher, 'stream.hasAudio'));\n });\n }\n }\n\n streamCreatedHandler = (event: { stream: any }): void => {\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MULTI_PARTY_EVENTS.streamCreated, event);\n\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.ownConnectionId || !stream || connection.connectionId === this.ownConnectionId) {\n return;\n }\n\n if (this.subscribers.length >= maxParticipantsNumber - 1) {\n trace.info(`a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`);\n } else {\n //fixme: use width and height passed in settings\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n\n const subscriber = this.session.subscribe(event.stream, `${participateDomId}${this.subscribers.length}`, properties, (err: any) => {\n this.traceError(err);\n\n subscriber.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n });\n\n this.subscribers.push({\n subscriber,\n connectionId: connection.connectionId,\n clientRole: connection?.data?.clientRole ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n };\n\n streamDestroyedHandler = (event: any): void => {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n const destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {meta: {event: JSON.stringify(event)}});\n this.subscribers = filter(this.subscribers, (subscriber) => subscriber.connectionId !== destroyedConnectionId);\n };\n\n connectionCreatedHandler = (event: any): void => {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n const clientRole = 'default'; //JSON.parse(connection.data).clientRole; //fixme\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n\n };\n\n connectionDestroyedHandler = (event: any): void => {\n this.session = null;\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {meta: {event: JSON.stringify(event)}});\n };\n\n traceError = (error: any): void => {\n trace.error(error);\n };\n}\n"]}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __extends = undefined && undefined.__extends || function () {
|
|
4
|
+
var _extendStatics = function extendStatics(d, b) {
|
|
5
|
+
_extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
|
|
6
|
+
d.__proto__ = b;
|
|
7
|
+
} || function (d, b) {
|
|
8
|
+
for (var p in b) {
|
|
9
|
+
if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
return _extendStatics(d, b);
|
|
13
|
+
};
|
|
14
|
+
return function (d, b) {
|
|
15
|
+
_extendStatics(d, b);
|
|
16
|
+
function __() {
|
|
17
|
+
this.constructor = d;
|
|
18
|
+
}
|
|
19
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
20
|
+
};
|
|
21
|
+
}();
|
|
22
|
+
var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
23
|
+
function adopt(value) {
|
|
24
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
25
|
+
resolve(value);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
29
|
+
function fulfilled(value) {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.next(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function rejected(value) {
|
|
37
|
+
try {
|
|
38
|
+
step(generator["throw"](value));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
reject(e);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function step(result) {
|
|
44
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
45
|
+
}
|
|
46
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
var __generator = undefined && undefined.__generator || function (thisArg, body) {
|
|
50
|
+
var _ = { label: 0, sent: function sent() {
|
|
51
|
+
if (t[0] & 1) throw t[1];return t[1];
|
|
52
|
+
}, trys: [], ops: [] },
|
|
53
|
+
f,
|
|
54
|
+
y,
|
|
55
|
+
t,
|
|
56
|
+
g;
|
|
57
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
|
|
58
|
+
return this;
|
|
59
|
+
}), g;
|
|
60
|
+
function verb(n) {
|
|
61
|
+
return function (v) {
|
|
62
|
+
return step([n, v]);
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function step(op) {
|
|
66
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
67
|
+
while (_) {
|
|
68
|
+
try {
|
|
69
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
70
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
71
|
+
switch (op[0]) {
|
|
72
|
+
case 0:case 1:
|
|
73
|
+
t = op;break;
|
|
74
|
+
case 4:
|
|
75
|
+
_.label++;return { value: op[1], done: false };
|
|
76
|
+
case 5:
|
|
77
|
+
_.label++;y = op[1];op = [0];continue;
|
|
78
|
+
case 7:
|
|
79
|
+
op = _.ops.pop();_.trys.pop();continue;
|
|
80
|
+
default:
|
|
81
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
82
|
+
_ = 0;continue;
|
|
83
|
+
}
|
|
84
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
85
|
+
_.label = op[1];break;
|
|
86
|
+
}
|
|
87
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
88
|
+
_.label = t[1];t = op;break;
|
|
89
|
+
}
|
|
90
|
+
if (t && _.label < t[2]) {
|
|
91
|
+
_.label = t[2];_.ops.push(op);break;
|
|
92
|
+
}
|
|
93
|
+
if (t[2]) _.ops.pop();
|
|
94
|
+
_.trys.pop();continue;
|
|
95
|
+
}
|
|
96
|
+
op = body.call(thisArg, _);
|
|
97
|
+
} catch (e) {
|
|
98
|
+
op = [6, e];y = 0;
|
|
99
|
+
} finally {
|
|
100
|
+
f = t = 0;
|
|
101
|
+
}
|
|
102
|
+
}if (op[0] & 5) throw op[1];return { value: op[0] ? op[1] : void 0, done: true };
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
var __importDefault = undefined && undefined.__importDefault || function (mod) {
|
|
106
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
107
|
+
};
|
|
108
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
109
|
+
exports.OpentokMultiparty = void 0;
|
|
110
|
+
var MultiParty_1 = require("./MultiParty");
|
|
111
|
+
var MediaConstants_1 = require("../MediaConstants");
|
|
112
|
+
var MediaTracer_1 = require("../MediaUtils/MediaTracer");
|
|
113
|
+
var get_1 = __importDefault(require("lodash/get"));
|
|
114
|
+
var filter_1 = __importDefault(require("lodash/filter"));
|
|
115
|
+
var cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
|
|
116
|
+
var MediaCapabilitiesHelper_1 = require("./MediaCapabilitiesHelper");
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
118
|
+
var OT = require('@opentok/client');
|
|
119
|
+
var trace = MediaTracer_1.getMediaTracer('Multiparty');
|
|
120
|
+
// The preferred camera position to use for the video source
|
|
121
|
+
var OpentokFacingMode;
|
|
122
|
+
(function (OpentokFacingMode) {
|
|
123
|
+
OpentokFacingMode["USER"] = "user";
|
|
124
|
+
OpentokFacingMode["ENVIRONMENT"] = "environment";
|
|
125
|
+
})(OpentokFacingMode || (OpentokFacingMode = {}));
|
|
126
|
+
var OpentokMultiparty = /** @class */function (_super) {
|
|
127
|
+
__extends(OpentokMultiparty, _super);
|
|
128
|
+
function OpentokMultiparty() {
|
|
129
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
130
|
+
_this.subscribers = [];
|
|
131
|
+
_this.connect = function (credentials) {
|
|
132
|
+
_this.credentials = credentials;
|
|
133
|
+
try {
|
|
134
|
+
_this.session = OT.initSession(credentials.apiKey, credentials.sessionId);
|
|
135
|
+
} catch (err) {
|
|
136
|
+
trace.error(JSON.stringify(err));
|
|
137
|
+
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(err) } });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
_this.session.on('connectionCreated', _this.connectionCreatedHandler);
|
|
141
|
+
_this.session.on('connectionDestroyed', _this.connectionDestroyedHandler);
|
|
142
|
+
_this.session.on('streamCreated', _this.streamCreatedHandler);
|
|
143
|
+
_this.session.on('streamDestroyed', _this.streamDestroyedHandler);
|
|
144
|
+
_this.session.connect(_this.credentials.token, function (error) {
|
|
145
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
146
|
+
return __generator(this, function (_a) {
|
|
147
|
+
switch (_a.label) {
|
|
148
|
+
case 0:
|
|
149
|
+
if (error) {
|
|
150
|
+
this.session.off();
|
|
151
|
+
this.session = null;
|
|
152
|
+
this.traceError(error);
|
|
153
|
+
this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(error) } });
|
|
154
|
+
return [2 /*return*/];
|
|
155
|
+
}
|
|
156
|
+
if (this.settings.defaultCamera === MediaConstants_1.CameraTypes.NONE && this.settings.startWithAudioMuted) {
|
|
157
|
+
trace.info('camera is none, no need to create publisher');
|
|
158
|
+
return [2 /*return*/];
|
|
159
|
+
}
|
|
160
|
+
return [4 /*yield*/, this.createPublisher(this.settings)];
|
|
161
|
+
case 1:
|
|
162
|
+
_a.sent();
|
|
163
|
+
return [2 /*return*/];
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
_this.disconnect = function () {
|
|
170
|
+
try {
|
|
171
|
+
trace.info('Disconnecting from session');
|
|
172
|
+
if (_this.session) {
|
|
173
|
+
_this.session.disconnect();
|
|
174
|
+
trace.info('Disconnection from session completed');
|
|
175
|
+
}
|
|
176
|
+
} catch (err) {
|
|
177
|
+
trace.error(JSON.stringify(err));
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
_this.couldStartPublishVideo = function (settings) {
|
|
181
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
182
|
+
var mediaCapabilitiesHelper, err_1;
|
|
183
|
+
return __generator(this, function (_a) {
|
|
184
|
+
switch (_a.label) {
|
|
185
|
+
case 0:
|
|
186
|
+
_a.trys.push([0, 2,, 3]);
|
|
187
|
+
return [4 /*yield*/, MediaCapabilitiesHelper_1.MediaCapabilitiesHelper.init()];
|
|
188
|
+
case 1:
|
|
189
|
+
mediaCapabilitiesHelper = _a.sent();
|
|
190
|
+
return [2 /*return*/, settings.defaultCamera !== MediaConstants_1.CameraTypes.NONE ? mediaCapabilitiesHelper.hasCamera() : false];
|
|
191
|
+
case 2:
|
|
192
|
+
err_1 = _a.sent();
|
|
193
|
+
trace.error(JSON.stringify(err_1));
|
|
194
|
+
throw err_1;
|
|
195
|
+
case 3:
|
|
196
|
+
return [2 /*return*/];
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
_this.couldStartPublishAudio = function (settings) {
|
|
202
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
203
|
+
var mediaCapabilitiesHelper, err_2;
|
|
204
|
+
return __generator(this, function (_a) {
|
|
205
|
+
switch (_a.label) {
|
|
206
|
+
case 0:
|
|
207
|
+
_a.trys.push([0, 2,, 3]);
|
|
208
|
+
return [4 /*yield*/, MediaCapabilitiesHelper_1.MediaCapabilitiesHelper.init()];
|
|
209
|
+
case 1:
|
|
210
|
+
mediaCapabilitiesHelper = _a.sent();
|
|
211
|
+
return [2 /*return*/, !settings.startWithAudioMuted && mediaCapabilitiesHelper.hasMicrophone()];
|
|
212
|
+
case 2:
|
|
213
|
+
err_2 = _a.sent();
|
|
214
|
+
trace.error(JSON.stringify(err_2));
|
|
215
|
+
throw err_2;
|
|
216
|
+
case 3:
|
|
217
|
+
return [2 /*return*/];
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
_this.createPublisher = function (settingsForPublisher) {
|
|
223
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
224
|
+
var settings, couldStartPublishVideo, couldStartPublishAudio;
|
|
225
|
+
return __generator(this, function (_a) {
|
|
226
|
+
switch (_a.label) {
|
|
227
|
+
case 0:
|
|
228
|
+
settings = cloneDeep_1.default(settingsForPublisher);
|
|
229
|
+
return [4 /*yield*/, this.couldStartPublishVideo(settings)];
|
|
230
|
+
case 1:
|
|
231
|
+
couldStartPublishVideo = _a.sent();
|
|
232
|
+
return [4 /*yield*/, this.couldStartPublishAudio(settings)];
|
|
233
|
+
case 2:
|
|
234
|
+
couldStartPublishAudio = _a.sent();
|
|
235
|
+
if (!couldStartPublishVideo && !couldStartPublishAudio) {
|
|
236
|
+
// FIXME: use emitter
|
|
237
|
+
trace.error('could not create a publisher, due to lack of media capabilities or settings');
|
|
238
|
+
return [2 /*return*/];
|
|
239
|
+
}
|
|
240
|
+
if (!couldStartPublishVideo) {
|
|
241
|
+
settings.defaultCamera = MediaConstants_1.CameraTypes.NONE;
|
|
242
|
+
}
|
|
243
|
+
if (!couldStartPublishAudio) {
|
|
244
|
+
settings.startWithAudioMuted = true;
|
|
245
|
+
}
|
|
246
|
+
if (!this.currentPublisher) {
|
|
247
|
+
this.initPublisher(settings);
|
|
248
|
+
this.session.publish(this.currentPublisher, this.traceError);
|
|
249
|
+
}
|
|
250
|
+
return [2 /*return*/];
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
_this.publishAudio = function (value) {
|
|
256
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
257
|
+
var settings, _a;
|
|
258
|
+
return __generator(this, function (_b) {
|
|
259
|
+
switch (_b.label) {
|
|
260
|
+
case 0:
|
|
261
|
+
settings = cloneDeep_1.default(this.settings);
|
|
262
|
+
settings.startWithAudioMuted = !value;
|
|
263
|
+
_a = value;
|
|
264
|
+
if (!_a) return [3 /*break*/, 2];
|
|
265
|
+
return [4 /*yield*/, this.couldStartPublishAudio(settings)];
|
|
266
|
+
case 1:
|
|
267
|
+
_a = !_b.sent();
|
|
268
|
+
_b.label = 2;
|
|
269
|
+
case 2:
|
|
270
|
+
if (_a) {
|
|
271
|
+
trace.error('could not publish audio');
|
|
272
|
+
return [2 /*return*/];
|
|
273
|
+
}
|
|
274
|
+
if (!this.currentPublisher) {
|
|
275
|
+
this.createPublisher(settings);
|
|
276
|
+
} else {
|
|
277
|
+
this.currentPublisher.publishAudio(value);
|
|
278
|
+
}
|
|
279
|
+
return [2 /*return*/];
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
};
|
|
284
|
+
_this.publishVideo = function (value) {
|
|
285
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
286
|
+
var settings, _a;
|
|
287
|
+
return __generator(this, function (_b) {
|
|
288
|
+
switch (_b.label) {
|
|
289
|
+
case 0:
|
|
290
|
+
settings = cloneDeep_1.default(this.settings);
|
|
291
|
+
settings.defaultCamera = value ? this.settings.defaultCamera : MediaConstants_1.CameraTypes.NONE;
|
|
292
|
+
_a = value;
|
|
293
|
+
if (!_a) return [3 /*break*/, 2];
|
|
294
|
+
return [4 /*yield*/, this.couldStartPublishVideo(settings)];
|
|
295
|
+
case 1:
|
|
296
|
+
_a = !_b.sent();
|
|
297
|
+
_b.label = 2;
|
|
298
|
+
case 2:
|
|
299
|
+
if (_a) {
|
|
300
|
+
trace.error('could not publish video');
|
|
301
|
+
return [2 /*return*/];
|
|
302
|
+
}
|
|
303
|
+
if (!this.currentPublisher) {
|
|
304
|
+
this.createPublisher(settings);
|
|
305
|
+
} else {
|
|
306
|
+
this.currentPublisher.publishVideo(value);
|
|
307
|
+
}
|
|
308
|
+
return [2 /*return*/];
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
};
|
|
313
|
+
_this.initPublisher = function (settings) {
|
|
314
|
+
var properties = {
|
|
315
|
+
insertMode: 'append',
|
|
316
|
+
width: '200',
|
|
317
|
+
height: '200',
|
|
318
|
+
publishAudio: !settings.startWithAudioMuted,
|
|
319
|
+
publishVideo: settings.defaultCamera !== MediaConstants_1.CameraTypes.NONE,
|
|
320
|
+
facingMode: settings.defaultCamera === MediaConstants_1.CameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT
|
|
321
|
+
};
|
|
322
|
+
_this.currentPublisher = OT.initPublisher(MultiParty_1.participateDomId + "1", properties, _this.traceError);
|
|
323
|
+
if (!_this.currentPublisher) {
|
|
324
|
+
trace.error('failed to init publisher');
|
|
325
|
+
} else {
|
|
326
|
+
_this.currentPublisher.on('videoElementCreated', function (event) {
|
|
327
|
+
trace.info('videoElementCreated', event);
|
|
328
|
+
});
|
|
329
|
+
_this.currentPublisher.on('streamDestroyed', function (event) {
|
|
330
|
+
trace.info('Publisher stream destroyed', event);
|
|
331
|
+
});
|
|
332
|
+
_this.currentPublisher.on('streamCreated', function (event) {
|
|
333
|
+
trace.info('publisher stream created', event, get_1.default(_this.currentPublisher, 'stream.hasAudio'));
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
_this.streamCreatedHandler = function (event) {
|
|
338
|
+
var _a;
|
|
339
|
+
trace.info('streamCreatedHandler', event.stream);
|
|
340
|
+
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamCreated, event);
|
|
341
|
+
var stream = event.stream;
|
|
342
|
+
var connection = (stream || { connection: null }).connection;
|
|
343
|
+
if (!_this.ownConnectionId || !stream || connection.connectionId === _this.ownConnectionId) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (_this.subscribers.length >= MultiParty_1.maxParticipantsNumber - 1) {
|
|
347
|
+
trace.info("a new subscriber cannot be added, as the number of participants reached its limit: " + MultiParty_1.maxParticipantsNumber);
|
|
348
|
+
} else {
|
|
349
|
+
//fixme: use width and height passed in settings
|
|
350
|
+
var properties = {
|
|
351
|
+
insertMode: 'append',
|
|
352
|
+
width: '200',
|
|
353
|
+
height: '200'
|
|
354
|
+
};
|
|
355
|
+
var subscriber_1 = _this.session.subscribe(event.stream, "" + MultiParty_1.participateDomId + _this.subscribers.length, properties, function (err) {
|
|
356
|
+
_this.traceError(err);
|
|
357
|
+
subscriber_1.on('videoElementCreated', function (event) {
|
|
358
|
+
trace.info('videoElementCreated', event);
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
_this.subscribers.push({
|
|
362
|
+
subscriber: subscriber_1,
|
|
363
|
+
connectionId: connection.connectionId,
|
|
364
|
+
clientRole: ((_a = connection === null || connection === void 0 ? void 0 : connection.data) === null || _a === void 0 ? void 0 : _a.clientRole) ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
_this.streamDestroyedHandler = function (event) {
|
|
369
|
+
trace.info('streamDestroyedHandler', event);
|
|
370
|
+
var stream = event.stream;
|
|
371
|
+
var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;
|
|
372
|
+
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamDestroyed, { meta: { event: JSON.stringify(event) } });
|
|
373
|
+
_this.subscribers = filter_1.default(_this.subscribers, function (subscriber) {
|
|
374
|
+
return subscriber.connectionId !== destroyedConnectionId;
|
|
375
|
+
});
|
|
376
|
+
};
|
|
377
|
+
_this.connectionCreatedHandler = function (event) {
|
|
378
|
+
trace.info('connectionCreatedHandler', event);
|
|
379
|
+
var connection = event.connection;
|
|
380
|
+
if (!_this.ownConnectionId || !connection) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
var clientRole = 'default'; //JSON.parse(connection.data).clientRole; //fixme
|
|
384
|
+
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectionCreated, { meta: { clientRole: clientRole, event: JSON.stringify(event) } });
|
|
385
|
+
};
|
|
386
|
+
_this.connectionDestroyedHandler = function (event) {
|
|
387
|
+
_this.session = null;
|
|
388
|
+
trace.info('connectionDestroyedHandler', event);
|
|
389
|
+
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectionDestroyed, { meta: { event: JSON.stringify(event) } });
|
|
390
|
+
};
|
|
391
|
+
_this.traceError = function (error) {
|
|
392
|
+
trace.error(error);
|
|
393
|
+
};
|
|
394
|
+
return _this;
|
|
395
|
+
}
|
|
396
|
+
Object.defineProperty(OpentokMultiparty.prototype, "ownConnectionId", {
|
|
397
|
+
get: function get() {
|
|
398
|
+
return this.session && this.session.connection && this.session.connection.connectionId;
|
|
399
|
+
},
|
|
400
|
+
enumerable: false,
|
|
401
|
+
configurable: true
|
|
402
|
+
});
|
|
403
|
+
return OpentokMultiparty;
|
|
404
|
+
}(MultiParty_1.MultiParty);
|
|
405
|
+
exports.OpentokMultiparty = OpentokMultiparty;
|
|
406
|
+
//# sourceMappingURL=OpentokMultiparty.js.map
|
|
407
|
+
|
|
408
|
+
//# sourceMappingURL=OpentokMultiparty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["MultiParty/OpentokMultiparty.js","../src/MultiParty/OpentokMultiparty.ts"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__","constructor","create","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__generator","body","_","label","sent","t","trys","ops","f","y","g","verb","Symbol","iterator","n","v","op","TypeError","pop","length","push","__importDefault","mod","__esModule","defineProperty","exports","OpentokMultiparty","MultiParty_1","require","MediaConstants_1","MediaTracer_1","get_1","filter_1","cloneDeep_1","MediaCapabilitiesHelper_1","OT","trace","getMediaTracer","OpentokFacingMode","_super","_this","arguments","subscribers","connect","credentials","session","initSession","apiKey","sessionId","err","error","JSON","stringify","emit","MULTI_PARTY_EVENTS","connectFailed","meta","on","connectionCreatedHandler","connectionDestroyedHandler","streamCreatedHandler","streamDestroyedHandler","token","_a","off","traceError","settings","defaultCamera","CameraTypes","NONE","startWithAudioMuted","info","createPublisher","disconnect","couldStartPublishVideo","mediaCapabilitiesHelper","err_1","MediaCapabilitiesHelper","init","hasCamera","couldStartPublishAudio","err_2","hasMicrophone","settingsForPublisher","default","currentPublisher","initPublisher","publish","publishAudio","_b","publishVideo","properties","insertMode","width","height","facingMode","FRONT","USER","ENVIRONMENT","participateDomId","event","stream","streamCreated","connection","ownConnectionId","connectionId","maxParticipantsNumber","subscriber_1","subscribe","subscriber","clientRole","data","parse","destroyedConnectionId","streamDestroyed","connectionCreated","connectionDestroyed","get","enumerable","configurable","MultiParty"],"mappings":"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","file":"OpentokMultiparty.js","sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OpentokMultiparty = void 0;\nvar MultiParty_1 = require(\"./MultiParty\");\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar get_1 = __importDefault(require(\"lodash/get\"));\nvar filter_1 = __importDefault(require(\"lodash/filter\"));\nvar cloneDeep_1 = __importDefault(require(\"lodash/cloneDeep\"));\nvar MediaCapabilitiesHelper_1 = require(\"./MediaCapabilitiesHelper\");\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar OT = require('@opentok/client');\nvar trace = MediaTracer_1.getMediaTracer('Multiparty');\n// The preferred camera position to use for the video source\nvar OpentokFacingMode;\n(function (OpentokFacingMode) {\n OpentokFacingMode[\"USER\"] = \"user\";\n OpentokFacingMode[\"ENVIRONMENT\"] = \"environment\";\n})(OpentokFacingMode || (OpentokFacingMode = {}));\nvar OpentokMultiparty = /** @class */ (function (_super) {\n __extends(OpentokMultiparty, _super);\n function OpentokMultiparty() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.subscribers = [];\n _this.connect = function (credentials) {\n _this.credentials = credentials;\n try {\n _this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(err) } });\n return;\n }\n _this.session.on('connectionCreated', _this.connectionCreatedHandler);\n _this.session.on('connectionDestroyed', _this.connectionDestroyedHandler);\n _this.session.on('streamCreated', _this.streamCreatedHandler);\n _this.session.on('streamDestroyed', _this.streamDestroyedHandler);\n _this.session.connect(_this.credentials.token, function (error) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (error) {\n this.session.off();\n this.session = null;\n this.traceError(error);\n this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectFailed, { meta: { err: JSON.stringify(error) } });\n return [2 /*return*/];\n }\n if (this.settings.defaultCamera === MediaConstants_1.CameraTypes.NONE && this.settings.startWithAudioMuted) {\n trace.info('camera is none, no need to create publisher');\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.createPublisher(this.settings)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n }); });\n };\n _this.disconnect = function () {\n try {\n trace.info('Disconnecting from session');\n if (_this.session) {\n _this.session.disconnect();\n trace.info('Disconnection from session completed');\n }\n }\n catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n _this.couldStartPublishVideo = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var mediaCapabilitiesHelper, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, MediaCapabilitiesHelper_1.MediaCapabilitiesHelper.init()];\n case 1:\n mediaCapabilitiesHelper = _a.sent();\n return [2 /*return*/, (settings.defaultCamera !== MediaConstants_1.CameraTypes.NONE)\n ? mediaCapabilitiesHelper.hasCamera()\n : false];\n case 2:\n err_1 = _a.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.couldStartPublishAudio = function (settings) { return __awaiter(_this, void 0, void 0, function () {\n var mediaCapabilitiesHelper, err_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, MediaCapabilitiesHelper_1.MediaCapabilitiesHelper.init()];\n case 1:\n mediaCapabilitiesHelper = _a.sent();\n return [2 /*return*/, !settings.startWithAudioMuted && mediaCapabilitiesHelper.hasMicrophone()];\n case 2:\n err_2 = _a.sent();\n trace.error(JSON.stringify(err_2));\n throw err_2;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n _this.createPublisher = function (settingsForPublisher) { return __awaiter(_this, void 0, void 0, function () {\n var settings, couldStartPublishVideo, couldStartPublishAudio;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n settings = cloneDeep_1.default(settingsForPublisher);\n return [4 /*yield*/, this.couldStartPublishVideo(settings)];\n case 1:\n couldStartPublishVideo = _a.sent();\n return [4 /*yield*/, this.couldStartPublishAudio(settings)];\n case 2:\n couldStartPublishAudio = _a.sent();\n if (!couldStartPublishVideo && !couldStartPublishAudio) {\n // FIXME: use emitter\n trace.error('could not create a publisher, due to lack of media capabilities or settings');\n return [2 /*return*/];\n }\n if (!couldStartPublishVideo) {\n settings.defaultCamera = MediaConstants_1.CameraTypes.NONE;\n }\n if (!couldStartPublishAudio) {\n settings.startWithAudioMuted = true;\n }\n if (!this.currentPublisher) {\n this.initPublisher(settings);\n this.session.publish(this.currentPublisher, this.traceError);\n }\n return [2 /*return*/];\n }\n });\n }); };\n _this.publishAudio = function (value) { return __awaiter(_this, void 0, void 0, function () {\n var settings, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n settings = cloneDeep_1.default(this.settings);\n settings.startWithAudioMuted = !value;\n _a = value;\n if (!_a) return [3 /*break*/, 2];\n return [4 /*yield*/, this.couldStartPublishAudio(settings)];\n case 1:\n _a = !(_b.sent());\n _b.label = 2;\n case 2:\n if (_a) {\n trace.error('could not publish audio');\n return [2 /*return*/];\n }\n if (!this.currentPublisher) {\n this.createPublisher(settings);\n }\n else {\n this.currentPublisher.publishAudio(value);\n }\n return [2 /*return*/];\n }\n });\n }); };\n _this.publishVideo = function (value) { return __awaiter(_this, void 0, void 0, function () {\n var settings, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n settings = cloneDeep_1.default(this.settings);\n settings.defaultCamera = value ? this.settings.defaultCamera : MediaConstants_1.CameraTypes.NONE;\n _a = value;\n if (!_a) return [3 /*break*/, 2];\n return [4 /*yield*/, this.couldStartPublishVideo(settings)];\n case 1:\n _a = !(_b.sent());\n _b.label = 2;\n case 2:\n if (_a) {\n trace.error('could not publish video');\n return [2 /*return*/];\n }\n if (!this.currentPublisher) {\n this.createPublisher(settings);\n }\n else {\n this.currentPublisher.publishVideo(value);\n }\n return [2 /*return*/];\n }\n });\n }); };\n _this.initPublisher = function (settings) {\n var properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.defaultCamera !== MediaConstants_1.CameraTypes.NONE,\n facingMode: settings.defaultCamera === MediaConstants_1.CameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n _this.currentPublisher = OT.initPublisher(MultiParty_1.participateDomId + \"1\", properties, _this.traceError);\n if (!_this.currentPublisher) {\n trace.error('failed to init publisher');\n }\n else {\n _this.currentPublisher.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n _this.currentPublisher.on('streamDestroyed', function (event) {\n trace.info('Publisher stream destroyed', event);\n });\n _this.currentPublisher.on('streamCreated', function (event) {\n trace.info('publisher stream created', event, get_1.default(_this.currentPublisher, 'stream.hasAudio'));\n });\n }\n };\n _this.streamCreatedHandler = function (event) {\n var _a;\n trace.info('streamCreatedHandler', event.stream);\n _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamCreated, event);\n var stream = event.stream;\n var connection = (stream || { connection: null }).connection;\n if (!_this.ownConnectionId || !stream || connection.connectionId === _this.ownConnectionId) {\n return;\n }\n if (_this.subscribers.length >= MultiParty_1.maxParticipantsNumber - 1) {\n trace.info(\"a new subscriber cannot be added, as the number of participants reached its limit: \" + MultiParty_1.maxParticipantsNumber);\n }\n else {\n //fixme: use width and height passed in settings\n var properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n var subscriber_1 = _this.session.subscribe(event.stream, \"\" + MultiParty_1.participateDomId + _this.subscribers.length, properties, function (err) {\n _this.traceError(err);\n subscriber_1.on('videoElementCreated', function (event) {\n trace.info('videoElementCreated', event);\n });\n });\n _this.subscribers.push({\n subscriber: subscriber_1,\n connectionId: connection.connectionId,\n clientRole: ((_a = connection === null || connection === void 0 ? void 0 : connection.data) === null || _a === void 0 ? void 0 : _a.clientRole) ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n };\n _this.streamDestroyedHandler = function (event) {\n trace.info('streamDestroyedHandler', event);\n var stream = event.stream;\n var destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamDestroyed, { meta: { event: JSON.stringify(event) } });\n _this.subscribers = filter_1.default(_this.subscribers, function (subscriber) { return subscriber.connectionId !== destroyedConnectionId; });\n };\n _this.connectionCreatedHandler = function (event) {\n trace.info('connectionCreatedHandler', event);\n var connection = event.connection;\n if (!_this.ownConnectionId || !connection) {\n return;\n }\n var clientRole = 'default'; //JSON.parse(connection.data).clientRole; //fixme\n _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectionCreated, { meta: { clientRole: clientRole, event: JSON.stringify(event) } });\n };\n _this.connectionDestroyedHandler = function (event) {\n _this.session = null;\n trace.info('connectionDestroyedHandler', event);\n _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectionDestroyed, { meta: { event: JSON.stringify(event) } });\n };\n _this.traceError = function (error) {\n trace.error(error);\n };\n return _this;\n }\n Object.defineProperty(OpentokMultiparty.prototype, \"ownConnectionId\", {\n get: function () {\n return this.session && this.session.connection && this.session.connection.connectionId;\n },\n enumerable: false,\n configurable: true\n });\n return OpentokMultiparty;\n}(MultiParty_1.MultiParty));\nexports.OpentokMultiparty = OpentokMultiparty;\n","import {maxParticipantsNumber, MULTI_PARTY_EVENTS, MultiParty, participateDomId} from './MultiParty';\nimport {CameraTypes} from '../MediaConstants';\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport get from 'lodash/get';\nimport {ICredentials, ISessionSettings} from './Contracts';\nimport filter from 'lodash/filter';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {MediaCapabilitiesHelper} from './MediaCapabilitiesHelper';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst OT = require('@opentok/client');\nconst trace = getMediaTracer('Multiparty');\n\n// The preferred camera position to use for the video source\nenum OpentokFacingMode {\n USER = 'user',\n ENVIRONMENT = 'environment'\n}\n\nexport class OpentokMultiparty extends MultiParty {\n subscribers: Array<any> = [];\n session: any;\n currentPublisher: any;\n credentials: any;\n\n get ownConnectionId(): string | boolean {\n return this.session && this.session.connection && this.session.connection.connectionId;\n }\n\n connect = (credentials: ICredentials): void => {\n this.credentials = credentials;\n\n try {\n this.session = OT.initSession(credentials.apiKey, credentials.sessionId);\n } catch (err) {\n trace.error(JSON.stringify(err));\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(err)}});\n\n return;\n }\n\n this.session.on('connectionCreated', this.connectionCreatedHandler);\n this.session.on('connectionDestroyed', this.connectionDestroyedHandler);\n this.session.on('streamCreated', this.streamCreatedHandler);\n this.session.on('streamDestroyed', this.streamDestroyedHandler);\n\n this.session.connect(this.credentials.token, async (error: any) => {\n if (error) {\n this.session.off();\n this.session = null;\n this.traceError(error);\n this.emit(MULTI_PARTY_EVENTS.connectFailed, {meta: {err: JSON.stringify(error)}});\n\n return;\n }\n\n if (this.settings.defaultCamera === CameraTypes.NONE && this.settings.startWithAudioMuted) {\n trace.info('camera is none, no need to create publisher');\n\n return;\n }\n\n await this.createPublisher(this.settings);\n });\n };\n\n disconnect = (): void => {\n try {\n trace.info('Disconnecting from session');\n\n if (this.session) {\n this.session.disconnect();\n\n trace.info('Disconnection from session completed');\n }\n } catch (err) {\n trace.error(JSON.stringify(err));\n }\n };\n\n couldStartPublishVideo = async (settings: ISessionSettings): Promise<boolean | Error> => {\n try {\n const mediaCapabilitiesHelper = await MediaCapabilitiesHelper.init();\n\n return (settings.defaultCamera !== CameraTypes.NONE)\n ? mediaCapabilitiesHelper.hasCamera()\n : false;\n\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n couldStartPublishAudio = async (settings: ISessionSettings): Promise<boolean | Error> => {\n try {\n const mediaCapabilitiesHelper = await MediaCapabilitiesHelper.init();\n\n return !settings.startWithAudioMuted && mediaCapabilitiesHelper.hasMicrophone();\n } catch (err) {\n trace.error(JSON.stringify(err));\n throw err;\n }\n };\n\n createPublisher = async (settingsForPublisher: ISessionSettings): Promise<void> => {\n const settings = cloneDeep(settingsForPublisher);\n const couldStartPublishVideo = await this.couldStartPublishVideo(settings);\n const couldStartPublishAudio = await this.couldStartPublishAudio(settings);\n\n if (!couldStartPublishVideo && !couldStartPublishAudio) {\n // FIXME: use emitter\n trace.error('could not create a publisher, due to lack of media capabilities or settings');\n\n return;\n }\n\n if (!couldStartPublishVideo) {\n settings.defaultCamera = CameraTypes.NONE;\n }\n\n if (!couldStartPublishAudio) {\n settings.startWithAudioMuted = true;\n }\n\n if (!this.currentPublisher) {\n this.initPublisher(settings);\n this.session.publish(this.currentPublisher, this.traceError);\n }\n };\n\n publishAudio = async (value: boolean): Promise<void> => {\n const settings = cloneDeep(this.settings);\n\n settings.startWithAudioMuted = !value;\n\n if (value && !await this.couldStartPublishAudio(settings)) {\n trace.error('could not publish audio');\n\n return;\n }\n\n if (!this.currentPublisher) {\n this.createPublisher(settings);\n } else {\n this.currentPublisher.publishAudio(value);\n }\n };\n\n publishVideo = async (value: boolean): Promise<void> => {\n const settings = cloneDeep(this.settings);\n\n settings.defaultCamera = value ? this.settings.defaultCamera : CameraTypes.NONE;\n\n if (value && !await this.couldStartPublishVideo(settings)) {\n trace.error('could not publish video');\n\n return;\n }\n\n if (!this.currentPublisher) {\n this.createPublisher(settings);\n } else {\n this.currentPublisher.publishVideo(value);\n }\n };\n\n initPublisher = (settings: ISessionSettings) => {\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200',\n publishAudio: !settings.startWithAudioMuted,\n publishVideo: settings.defaultCamera !== CameraTypes.NONE,\n facingMode: settings.defaultCamera === CameraTypes.FRONT ? OpentokFacingMode.USER : OpentokFacingMode.ENVIRONMENT\n };\n\n this.currentPublisher = OT.initPublisher(`${participateDomId}1`, properties, this.traceError);\n\n if (!this.currentPublisher) {\n trace.error('failed to init publisher');\n } else {\n this.currentPublisher.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n this.currentPublisher.on('streamDestroyed', (event: any) => {\n trace.info('Publisher stream destroyed', event);\n });\n this.currentPublisher.on('streamCreated', (event: any) => {\n trace.info('publisher stream created', event, get(this.currentPublisher, 'stream.hasAudio'));\n });\n }\n }\n\n streamCreatedHandler = (event: { stream: any }): void => {\n trace.info('streamCreatedHandler', event.stream);\n this.emit(MULTI_PARTY_EVENTS.streamCreated, event);\n\n const {stream} = event;\n const {connection} = stream || {connection: null};\n\n if (!this.ownConnectionId || !stream || connection.connectionId === this.ownConnectionId) {\n return;\n }\n\n if (this.subscribers.length >= maxParticipantsNumber - 1) {\n trace.info(`a new subscriber cannot be added, as the number of participants reached its limit: ${maxParticipantsNumber}`);\n } else {\n //fixme: use width and height passed in settings\n const properties = {\n insertMode: 'append',\n width: '200',\n height: '200'\n };\n\n const subscriber = this.session.subscribe(event.stream, `${participateDomId}${this.subscribers.length}`, properties, (err: any) => {\n this.traceError(err);\n\n subscriber.on('videoElementCreated', (event: any) => {\n trace.info('videoElementCreated', event);\n });\n });\n\n this.subscribers.push({\n subscriber,\n connectionId: connection.connectionId,\n clientRole: connection?.data?.clientRole ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE\n });\n }\n };\n\n streamDestroyedHandler = (event: any): void => {\n trace.info('streamDestroyedHandler', event);\n const {stream} = event;\n const destroyedConnectionId = stream && stream.connection && stream.connection.connectionId;\n\n this.emit(MULTI_PARTY_EVENTS.streamDestroyed, {meta: {event: JSON.stringify(event)}});\n this.subscribers = filter(this.subscribers, (subscriber) => subscriber.connectionId !== destroyedConnectionId);\n };\n\n connectionCreatedHandler = (event: any): void => {\n trace.info('connectionCreatedHandler', event);\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection) {\n return;\n }\n\n const clientRole = 'default'; //JSON.parse(connection.data).clientRole; //fixme\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n\n };\n\n connectionDestroyedHandler = (event: any): void => {\n this.session = null;\n trace.info('connectionDestroyedHandler', event);\n this.emit(MULTI_PARTY_EVENTS.connectionDestroyed, {meta: {event: JSON.stringify(event)}});\n };\n\n traceError = (error: any): void => {\n trace.error(error);\n };\n}\n"]}
|
package/lib/oldCode/tracer.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["oldCode/tracer.js"],"names":["__spreadArrays","s","i","il","arguments","length","r","Array","k","a","j","jl","Object","defineProperty","exports","value","getTracer","getTracers","TsTracers","TsTracer","TsTracerType","TsTracerEvent","type","message","extra","_type","WebRtcSessionTrace","_message","_extra","prototype","get","enumerable","configurable","tracerType","enabled","callback","_enabled","consoleOutputEnabled","_callback","set","trace","rest","_i","console","log","apply","Enabled","_this","_tracers","_callbacks","_","keys","forEach","_add","register","indexOf","push","unregister","index","splice","tracer","event","enableTracers","enableConsoleOutput","find","TracerType","tracers"],"mappings":"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","file":"tracer.js","sourcesContent":["\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTracer = exports.getTracers = exports.TsTracers = exports.TsTracer = exports.TsTracerType = void 0;\nvar TsTracerType;\n(function (TsTracerType) {\n TsTracerType[\"WebRtcSessionTrace\"] = \"WebRtcSessionTrace\";\n TsTracerType[\"TSMediaServiceHelper\"] = \"TSMediaServiceHelper\";\n})(TsTracerType = exports.TsTracerType || (exports.TsTracerType = {}));\nvar TsTracerEvent = /** @class */ (function () {\n function TsTracerEvent(type, message, extra) {\n this._type = TsTracerType.WebRtcSessionTrace;\n this._message = '';\n this._type = type;\n this._message = message;\n this._extra = extra;\n }\n Object.defineProperty(TsTracerEvent.prototype, \"Type\", {\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TsTracerEvent.prototype, \"Message\", {\n get: function () {\n return this._message;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TsTracerEvent.prototype, \"Extra\", {\n get: function () {\n return this._extra;\n },\n enumerable: false,\n configurable: true\n });\n return TsTracerEvent;\n}());\nvar TsTracer = /** @class */ (function () {\n function TsTracer(tracerType, enabled, callback) {\n this._enabled = false;\n this._type = TsTracerType.WebRtcSessionTrace;\n this.consoleOutputEnabled = false;\n this._type = tracerType;\n this._enabled = enabled;\n this._callback = callback;\n }\n Object.defineProperty(TsTracer.prototype, \"Enabled\", {\n get: function () {\n return this._enabled;\n },\n set: function (enabled) {\n this._enabled = enabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TsTracer.prototype, \"TracerType\", {\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n TsTracer.prototype.trace = function (message) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n if (this.consoleOutputEnabled) {\n console.log.apply(console, __spreadArrays([this._type + \":\" + message], rest));\n }\n if (!this.Enabled) {\n return;\n }\n if (this._callback) {\n this._callback(new TsTracerEvent(this._type, message, rest));\n }\n };\n return TsTracer;\n}());\nexports.TsTracer = TsTracer;\nvar TsTracers = /** @class */ (function () {\n function TsTracers() {\n var _this = this;\n this._tracers = [];\n this._callbacks = [];\n // @ts-ignore\n _.keys(TsTracerType).forEach(function (tracerType) {\n // @ts-ignore\n _this._add(TsTracerType[tracerType]);\n });\n }\n TsTracers.prototype.register = function (callback) {\n if (this._callbacks.indexOf(callback) < 0) {\n this._callbacks.push(callback);\n }\n };\n TsTracers.prototype.unregister = function (callback) {\n var index = this._callbacks.indexOf(callback);\n if (index >= 0) {\n this._callbacks.splice(index, 1);\n }\n };\n TsTracers.prototype._add = function (tracerType) {\n var _this = this;\n var tracer = new TsTracer(tracerType, false, function (event) {\n // @ts-ignore\n _.forEach(_this._callbacks, function (callback) { return callback(event); });\n });\n this._tracers.push(tracer);\n };\n TsTracers.prototype.enableTracers = function (value) {\n // @ts-ignore\n _.forEach(this._tracers, function (tracer) {\n tracer.Enabled = value;\n });\n };\n TsTracers.prototype.enableConsoleOutput = function () {\n // @ts-ignore\n _.forEach(this._tracers, function (tracer) {\n tracer.consoleOutputEnabled = true;\n });\n };\n TsTracers.prototype.getTracer = function (tracerType) {\n // @ts-ignore\n return _.find(this._tracers, function (tracer) { return tracer.TracerType === tracerType; });\n };\n return TsTracers;\n}());\nexports.TsTracers = TsTracers;\nvar tracers = new TsTracers();\nfunction getTracers() {\n return tracers;\n}\nexports.getTracers = getTracers;\nfunction getTracer(tracerType) {\n if (tracerType === void 0) { tracerType = TsTracerType.WebRtcSessionTrace; }\n return getTracers().getTracer(tracerType);\n}\nexports.getTracer = getTracer;\n\n//# sourceMappingURL=tracer.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["oldCode/tracer.js","../src/oldCode/tracer.ts"],"names":["__spreadArrays","s","i","il","arguments","length","r","Array","k","a","j","jl","Object","defineProperty","exports","value","getTracer","getTracers","TsTracers","TsTracer","TsTracerType","TsTracerEvent","type","message","extra","_type","WebRtcSessionTrace","_message","_extra","prototype","get","enumerable","configurable","tracerType","enabled","callback","_enabled","consoleOutputEnabled","_callback","set","trace","rest","_i","console","log","apply","Enabled","_this","_tracers","_callbacks","_","keys","forEach","_add","register","indexOf","push","unregister","index","splice","tracer","event","enableTracers","enableConsoleOutput","find","TracerType","tracers"],"mappings":"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","file":"tracer.js","sourcesContent":["\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTracer = exports.getTracers = exports.TsTracers = exports.TsTracer = exports.TsTracerType = void 0;\nvar TsTracerType;\n(function (TsTracerType) {\n TsTracerType[\"WebRtcSessionTrace\"] = \"WebRtcSessionTrace\";\n TsTracerType[\"TSMediaServiceHelper\"] = \"TSMediaServiceHelper\";\n})(TsTracerType = exports.TsTracerType || (exports.TsTracerType = {}));\nvar TsTracerEvent = /** @class */ (function () {\n function TsTracerEvent(type, message, extra) {\n this._type = TsTracerType.WebRtcSessionTrace;\n this._message = '';\n this._type = type;\n this._message = message;\n this._extra = extra;\n }\n Object.defineProperty(TsTracerEvent.prototype, \"Type\", {\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TsTracerEvent.prototype, \"Message\", {\n get: function () {\n return this._message;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TsTracerEvent.prototype, \"Extra\", {\n get: function () {\n return this._extra;\n },\n enumerable: false,\n configurable: true\n });\n return TsTracerEvent;\n}());\nvar TsTracer = /** @class */ (function () {\n function TsTracer(tracerType, enabled, callback) {\n this._enabled = false;\n this._type = TsTracerType.WebRtcSessionTrace;\n this.consoleOutputEnabled = false;\n this._type = tracerType;\n this._enabled = enabled;\n this._callback = callback;\n }\n Object.defineProperty(TsTracer.prototype, \"Enabled\", {\n get: function () {\n return this._enabled;\n },\n set: function (enabled) {\n this._enabled = enabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(TsTracer.prototype, \"TracerType\", {\n get: function () {\n return this._type;\n },\n enumerable: false,\n configurable: true\n });\n TsTracer.prototype.trace = function (message) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n if (this.consoleOutputEnabled) {\n console.log.apply(console, __spreadArrays([this._type + \":\" + message], rest));\n }\n if (!this.Enabled) {\n return;\n }\n if (this._callback) {\n this._callback(new TsTracerEvent(this._type, message, rest));\n }\n };\n return TsTracer;\n}());\nexports.TsTracer = TsTracer;\nvar TsTracers = /** @class */ (function () {\n function TsTracers() {\n var _this = this;\n this._tracers = [];\n this._callbacks = [];\n // @ts-ignore\n _.keys(TsTracerType).forEach(function (tracerType) {\n // @ts-ignore\n _this._add(TsTracerType[tracerType]);\n });\n }\n TsTracers.prototype.register = function (callback) {\n if (this._callbacks.indexOf(callback) < 0) {\n this._callbacks.push(callback);\n }\n };\n TsTracers.prototype.unregister = function (callback) {\n var index = this._callbacks.indexOf(callback);\n if (index >= 0) {\n this._callbacks.splice(index, 1);\n }\n };\n TsTracers.prototype._add = function (tracerType) {\n var _this = this;\n var tracer = new TsTracer(tracerType, false, function (event) {\n // @ts-ignore\n _.forEach(_this._callbacks, function (callback) { return callback(event); });\n });\n this._tracers.push(tracer);\n };\n TsTracers.prototype.enableTracers = function (value) {\n // @ts-ignore\n _.forEach(this._tracers, function (tracer) {\n tracer.Enabled = value;\n });\n };\n TsTracers.prototype.enableConsoleOutput = function () {\n // @ts-ignore\n _.forEach(this._tracers, function (tracer) {\n tracer.consoleOutputEnabled = true;\n });\n };\n TsTracers.prototype.getTracer = function (tracerType) {\n // @ts-ignore\n return _.find(this._tracers, function (tracer) { return tracer.TracerType === tracerType; });\n };\n return TsTracers;\n}());\nexports.TsTracers = TsTracers;\nvar tracers = new TsTracers();\nfunction getTracers() {\n return tracers;\n}\nexports.getTracers = getTracers;\nfunction getTracer(tracerType) {\n if (tracerType === void 0) { tracerType = TsTracerType.WebRtcSessionTrace; }\n return getTracers().getTracer(tracerType);\n}\nexports.getTracer = getTracer;\n","export enum TsTracerType {\n WebRtcSessionTrace = 'WebRtcSessionTrace',\n TSMediaServiceHelper = 'TSMediaServiceHelper'\n}\n\nexport interface ITsTracerEvent {\n readonly Type: TsTracerType;\n readonly Message: string;\n readonly Extra: any[];\n}\n\nexport interface ITsTraceEvent {\n (event: ITsTracerEvent): any\n}\n\nclass TsTracerEvent implements ITsTracerEvent {\n private _type: TsTracerType = TsTracerType.WebRtcSessionTrace;\n private _message: string = '';\n private _extra: any[];\n\n constructor(type: TsTracerType, message: string, extra: any[]) {\n this._type = type;\n this._message = message;\n this._extra = extra;\n }\n\n get Type(): TsTracerType {\n return this._type;\n }\n\n get Message(): string {\n return this._message;\n }\n\n get Extra(): any[] {\n return this._extra;\n }\n}\n\nexport class TsTracer {\n private _enabled: boolean = false;\n private readonly _type: TsTracerType = TsTracerType.WebRtcSessionTrace;\n private readonly _callback: ITsTraceEvent;\n public consoleOutputEnabled: boolean = false;\n\n constructor(tracerType: TsTracerType, enabled: boolean, callback: ITsTraceEvent) {\n this._type = tracerType;\n this._enabled = enabled;\n this._callback = callback;\n }\n\n get Enabled() {\n return this._enabled;\n }\n\n set Enabled(enabled: boolean) {\n this._enabled = enabled;\n }\n\n get TracerType() {\n return this._type;\n }\n\n trace(message: string, ...rest: any[]) {\n if (this.consoleOutputEnabled) {\n console.log(`${this._type}:${message}`, ...rest);\n }\n\n if (!this.Enabled) {\n return;\n }\n\n if (this._callback) {\n this._callback(new TsTracerEvent(this._type, message, rest));\n }\n }\n}\n\nexport class TsTracers {\n private _tracers: Array<TsTracer> = [];\n private _callbacks: Array<ITsTraceEvent> = [];\n\n constructor() {\n\n // @ts-ignore\n _.keys(TsTracerType).forEach((tracerType: string) => {\n\n // @ts-ignore\n this._add(TsTracerType[tracerType]);\n });\n }\n\n register(callback: ITsTraceEvent) {\n if (this._callbacks.indexOf(callback) < 0) {\n this._callbacks.push(callback);\n }\n }\n\n unregister(callback: ITsTraceEvent) {\n let index = this._callbacks.indexOf(callback);\n\n if (index >= 0) {\n this._callbacks.splice(index, 1);\n }\n }\n\n private _add(tracerType: TsTracerType) {\n const tracer = new TsTracer(tracerType, false, (event: ITsTracerEvent) => {\n // @ts-ignore\n _.forEach(this._callbacks, (callback) => callback(event));\n });\n\n this._tracers.push(tracer);\n }\n\n enableTracers(value: boolean) {\n // @ts-ignore\n _.forEach(this._tracers, (tracer) => {\n tracer.Enabled = value;\n\n });\n }\n\n enableConsoleOutput() {\n // @ts-ignore\n _.forEach(this._tracers, (tracer) => {\n tracer.consoleOutputEnabled = true;\n\n });\n }\n\n getTracer(tracerType: TsTracerType) {\n // @ts-ignore\n return _.find(this._tracers, (tracer) => tracer.TracerType === tracerType);\n }\n}\n\nconst tracers = new TsTracers();\n\nexport function getTracers(): TsTracers {\n return tracers;\n}\n\nexport function getTracer(tracerType: TsTracerType = TsTracerType.WebRtcSessionTrace) {\n\n return getTracers().getTracer(tracerType);\n}\n"]}
|