@techsee/techsee-media-service 0.20.3 → 0.21.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/MediaServiceBase.d.ts.map +1 -1
- package/lib/MediaServiceBase.js +1 -1
- package/lib/MediaServiceBase.js.map +1 -1
- package/lib/MediaUtils/Compatibility.d.ts.map +1 -1
- package/lib/MediaUtils/Compatibility.js +1 -1
- package/lib/MediaUtils/Compatibility.js.map +1 -1
- package/lib/MultiParty/MediaCapabilitiesHelper.d.ts.map +1 -1
- package/lib/MultiParty/MediaCapabilitiesHelper.js +17 -10
- package/lib/MultiParty/MediaCapabilitiesHelper.js.map +1 -1
- package/lib/MultiParty/OpentokMultiparty.d.ts.map +1 -1
- package/lib/MultiParty/OpentokMultiparty.js +3 -3
- package/lib/MultiParty/OpentokMultiparty.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","registerWebRTCAdapters","onMediaElementResize","isVideoPlaySupportedOnDevice","enumerateMediaDevices","waitForOpenTokIsLoaded","WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL","WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS","MediaConstants_1","require","isEqual_1","ts_environment_detect_1","MediaTracer_1","trace","getMediaTracer","environmentDetect","TsEnvironmentDetect","isIE11","monitoredIeElements","Map","_isOTDefined","window","OT","e","Promise","resolve","isDefined","reduce","Array","delay","then","reject","Error","getDevices","error","devices","navigator","mediaDevices","enumerateDevices","catch","mediaServiceType","isOpenTokService","MediaServiceType","OPENTOK","isMediaServer","MEDIASERVER","OTPlugin","isInstalled","WebRTCAdapter","mediaElement","onResizeHandler","checkTimeoutPtr","unsubscribeIE","clearTimeout","delete","addEventListener","set","videoWidth","videoHeight","checkElementSize_1","lastElementSize","get","currentSize","setTimeout","default","removeEventListener","isChrome","majorVersion","warn"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerWebRTCAdapters = exports.onMediaElementResize = exports.isVideoPlaySupportedOnDevice = exports.enumerateMediaDevices = exports.waitForOpenTokIsLoaded = exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar isEqual_1 = __importDefault(require(\"lodash/isEqual\"));\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('Compatibility');\nvar environmentDetect = new ts_environment_detect_1.TsEnvironmentDetect();\nvar isIE11 = environmentDetect.isIE11();\nvar monitoredIeElements = new Map();\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\nfunction _isOTDefined() {\n try {\n return !!window.OT;\n }\n catch (e) {\n return false;\n }\n}\nfunction waitForOpenTokIsLoaded() {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n var isDefined = false;\n return Promise.reduce(new Array(exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS), function () {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n return Promise.resolve();\n }\n return Promise.delay(exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n }, 0)\n .then(function () { return isDefined || Promise.reject(new Error('OT is undefined')); });\n}\nexports.waitForOpenTokIsLoaded = waitForOpenTokIsLoaded;\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if ((typeof window.OT !== 'undefined') && window.OT && window.OT.getDevices) {\n window.OT.getDevices(function (error, devices) { return (error ? reject(error) : resolve(devices)); });\n }\n else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\nexports.enumerateMediaDevices = enumerateMediaDevices;\nfunction isVideoPlaySupportedOnDevice(mediaServiceType) {\n var isOpenTokService = mediaServiceType === MediaConstants_1.MediaServiceType.OPENTOK;\n var isMediaServer = mediaServiceType === MediaConstants_1.MediaServiceType.MEDIASERVER;\n if (!isIE11) {\n return Promise.resolve(true);\n }\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(function () { return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled(); });\n }\n if (isMediaServer) {\n return Promise.resolve(false);\n }\n if (window.WebRTCAdapter) {\n return Promise.resolve(true);\n }\n return Promise.resolve(false);\n}\nexports.isVideoPlaySupportedOnDevice = isVideoPlaySupportedOnDevice;\nfunction onMediaElementResize(mediaElement, onResizeHandler) {\n var checkTimeoutPtr = null;\n var unsubscribeIE = function () {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n }\n else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n var checkElementSize_1 = function () {\n var lastElementSize = monitoredIeElements.get(mediaElement);\n if (!lastElementSize) {\n unsubscribeIE();\n }\n else {\n var currentSize = { videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight };\n checkTimeoutPtr = setTimeout(checkElementSize_1, 500);\n if (!isEqual_1.default(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n setTimeout(onResizeHandler);\n }\n }\n };\n checkElementSize_1();\n }\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n }\n else {\n unsubscribeIE();\n }\n };\n}\nexports.onMediaElementResize = onMediaElementResize;\nfunction registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n }\n else if (!(environmentDetect.isChrome() && (environmentDetect.majorVersion() < 49))) {\n require('webrtc-adapter/src/js/adapter_core'); // eslint-disable-line global-require\n }\n else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\nexports.registerWebRTCAdapters = registerWebRTCAdapters;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["MediaUtils/Compatibility.js"],"names":["__importDefault","mod","__esModule","Object","defineProperty","exports","value","registerWebRTCAdapters","onMediaElementResize","isVideoPlaySupportedOnDevice","enumerateMediaDevices","waitForOpenTokIsLoaded","WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL","WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS","MediaConstants_1","require","isEqual_1","ts_environment_detect_1","MediaTracer_1","trace","getMediaTracer","environmentDetect","TsEnvironmentDetect","isIE11","monitoredIeElements","Map","_isOTDefined","window","OT","e","Promise","resolve","isDefined","reduce","Array","delay","then","reject","Error","getDevices","error","devices","navigator","mediaDevices","enumerateDevices","catch","mediaServiceType","isOpenTokService","MediaServiceType","OPENTOK","isMediaServer","MEDIASERVER","OTPlugin","isInstalled","WebRTCAdapter","mediaElement","onResizeHandler","checkTimeoutPtr","unsubscribeIE","clearTimeout","delete","addEventListener","set","videoWidth","videoHeight","checkElementSize_1","lastElementSize","get","currentSize","setTimeout","default","removeEventListener","isChrome","majorVersion","warn"],"mappings":"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","file":"Compatibility.js","sourcesContent":["\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerWebRTCAdapters = exports.onMediaElementResize = exports.isVideoPlaySupportedOnDevice = exports.enumerateMediaDevices = exports.waitForOpenTokIsLoaded = exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = void 0;\nvar MediaConstants_1 = require(\"../MediaConstants\");\nvar isEqual_1 = __importDefault(require(\"lodash/isEqual\"));\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n//@ts-ignore\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar MediaTracer_1 = require(\"./MediaTracer\");\nvar trace = MediaTracer_1.getMediaTracer('Compatibility');\nvar environmentDetect = new ts_environment_detect_1.TsEnvironmentDetect();\nvar isIE11 = environmentDetect.isIE11();\nvar monitoredIeElements = new Map();\n// Grace period to wait in the unlikely case that Opentok has not finished initializing,\n// and a session initialization was requested\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS = 10;\nexports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL = 500;\nfunction _isOTDefined() {\n try {\n return !!window.OT;\n }\n catch (e) {\n return false;\n }\n}\nfunction waitForOpenTokIsLoaded() {\n if (_isOTDefined()) {\n return Promise.resolve();\n }\n var isDefined = false;\n return Promise.reduce(new Array(exports.WAIT_FOR_OPENTOK_INITIALIZATION_MAX_ATTEMPTS), function () {\n if (isDefined || _isOTDefined()) {\n isDefined = true;\n return Promise.resolve();\n }\n return Promise.delay(exports.WAIT_FOR_OPENTOK_INITIALIZATION_INTERVAL);\n }, 0)\n .then(function () { return isDefined || Promise.reject(new Error('OT is undefined')); });\n}\nexports.waitForOpenTokIsLoaded = waitForOpenTokIsLoaded;\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if ((typeof window.OT !== 'undefined') && window.OT && window.OT.getDevices) {\n window.OT.getDevices(function (error, devices) { return (error ? reject(error) : resolve(devices)); });\n }\n else if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n else {\n reject(new Error('Enumerating media devices is not supported'));\n }\n });\n}\nexports.enumerateMediaDevices = enumerateMediaDevices;\nfunction isVideoPlaySupportedOnDevice(mediaServiceType) {\n var isOpenTokService = mediaServiceType === MediaConstants_1.MediaServiceType.OPENTOK;\n var isMediaServer = mediaServiceType === MediaConstants_1.MediaServiceType.MEDIASERVER;\n if (!isIE11) {\n return Promise.resolve(true);\n }\n if (isOpenTokService) {\n return waitForOpenTokIsLoaded().then(function () { return window.OT && window.OTPlugin && window.OTPlugin.isInstalled && window.OTPlugin.isInstalled(); });\n }\n if (isMediaServer) {\n return Promise.resolve(false);\n }\n if (window.WebRTCAdapter) {\n return Promise.resolve(true);\n }\n return Promise.resolve(false);\n}\nexports.isVideoPlaySupportedOnDevice = isVideoPlaySupportedOnDevice;\nfunction onMediaElementResize(mediaElement, onResizeHandler) {\n var checkTimeoutPtr = null;\n var unsubscribeIE = function () {\n clearTimeout(checkTimeoutPtr);\n monitoredIeElements.delete(mediaElement);\n };\n if (!isIE11) {\n mediaElement.addEventListener('resize', onResizeHandler, false);\n }\n else {\n monitoredIeElements.set(mediaElement, {\n videoWidth: mediaElement.videoWidth,\n videoHeight: mediaElement.videoHeight\n });\n var checkElementSize_1 = function () {\n var lastElementSize = monitoredIeElements.get(mediaElement);\n if (!lastElementSize) {\n unsubscribeIE();\n }\n else {\n var currentSize = { videoWidth: mediaElement.videoWidth, videoHeight: mediaElement.videoHeight };\n checkTimeoutPtr = setTimeout(checkElementSize_1, 500);\n if (!isEqual_1.default(currentSize, lastElementSize)) {\n monitoredIeElements.set(mediaElement, lastElementSize);\n setTimeout(onResizeHandler);\n }\n }\n };\n checkElementSize_1();\n }\n return function () {\n if (!isIE11) {\n mediaElement && mediaElement.removeEventListener('resize', onResizeHandler);\n }\n else {\n unsubscribeIE();\n }\n };\n}\nexports.onMediaElementResize = onMediaElementResize;\nfunction registerWebRTCAdapters() {\n if (isIE11) {\n require('../webrtc-ie-shim.js');\n }\n else if (!(environmentDetect.isChrome() && (environmentDetect.majorVersion() < 49))) {\n require('webrtc-adapter/dist/adapter_core'); // eslint-disable-line global-require\n }\n else {\n trace.warn('no WebRTC adapters loaded.');\n }\n}\nexports.registerWebRTCAdapters = registerWebRTCAdapters;\n\n//# sourceMappingURL=Compatibility.js.map\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MultiParty/MediaCapabilitiesHelper.ts"],"names":[],"mappings":"AAmBA,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAsB;IACxD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA+B;IAC/D,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAA0B;IAChE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAyD;IAEnF,OAAO,CAAC,kBAAkB,CAA6B;WAEnC,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA0BrD,SAAS,IAAI,OAAO;IAMpB,aAAa,IAAI,OAAO;IAMxB,SAAS,IAAI,OAAO;IAIpB,wBAAwB,IAAI,OAAO;CAG7C","file":"MediaCapabilitiesHelper.d.ts","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-var-requires\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {DETECT_RTC_ADVISED_TIMEOUT, DetectWebRtcService} from './DetectWebRtcService';\nimport {ClientWebRtcInfo} from '../MediaContracts';\nimport filter from 'lodash/filter';\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nconst trace = getMediaTracer('MediaCapabilitiesHelper');\n\nfunction enumerateMediaDevices(): Promise<MediaDeviceInfo[]> {\n return new Promise((resolve, reject) => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n\n return resolve([]);\n });\n}\n\nexport class MediaCapabilitiesHelper {\n private static detectWebRtcService: DetectWebRtcService;\n private static webRtcSupportInfo: ClientWebRtcInfo | undefined;\n private static mediaCapabilitiesHelper: MediaCapabilitiesHelper;\n private static devicesList: { video: MediaDeviceInfo[]; audio: MediaDeviceInfo[] };\n\n private environmentService = new TsEnvironmentDetect();\n\n public static async init(): Promise<MediaCapabilitiesHelper> {\n try {\n this.detectWebRtcService = await new DetectWebRtcService(DETECT_RTC_ADVISED_TIMEOUT);\n this.webRtcSupportInfo = await this.detectWebRtcService.getWebRtcInfo();\n\n const localDevicesList = await enumerateMediaDevices();\n\n this.devicesList = {\n video: filter(localDevicesList, (device) => device.kind.toLowerCase() === 'videoinput'),\n audio: filter(localDevicesList, (device) => device.kind.toLowerCase() === 'audioinput')\n };\n\n if (!this.mediaCapabilitiesHelper) {\n this.mediaCapabilitiesHelper = new MediaCapabilitiesHelper();\n }\n trace.info('initialize media capabilities helper successfully');\n\n return this.mediaCapabilitiesHelper;\n\n } catch (err) {\n trace.error(JSON.stringify(err));\n\n throw err;\n }\n }\n\n public hasCamera(): boolean {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo!.isWebsiteHasWebcamPermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.video.length > 0 && this.hasGetUserMediaSupported();\n }\n\n public hasMicrophone(): boolean {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo!.isWebsiteHasMicrophonePermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.audio.length > 0 && this.hasGetUserMediaSupported();\n }\n\n public hasWebRTC(): boolean {\n return MediaCapabilitiesHelper.webRtcSupportInfo!.isWebRTCSupported;\n }\n\n public hasGetUserMediaSupported(): boolean {\n return MediaCapabilitiesHelper.webRtcSupportInfo!.isGetUserMediaSupported;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/MultiParty/MediaCapabilitiesHelper.ts"],"names":[],"mappings":"AAmBA,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAsB;IACxD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA+B;IAC/D,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAA0B;IAChE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAyD;IAEnF,OAAO,CAAC,kBAAkB,CAA6B;WAEnC,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA0BrD,SAAS,IAAI,OAAO;IAMpB,aAAa,IAAI,OAAO;IAMxB,SAAS,IAAI,OAAO;IAIpB,wBAAwB,IAAI,OAAO;CAG7C","file":"MediaCapabilitiesHelper.d.ts","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-var-requires\nimport {getMediaTracer} from '../MediaUtils/MediaTracer';\nimport {DETECT_RTC_ADVISED_TIMEOUT, DetectWebRtcService} from './DetectWebRtcService';\nimport {ClientWebRtcInfo} from '../MediaContracts';\nimport filter from 'lodash/filter';\nimport {TsEnvironmentDetect} from '@techsee/techsee-common/lib/helpers/ts-environment-detect';\n\nconst trace = getMediaTracer('MediaCapabilitiesHelper');\n\nfunction enumerateMediaDevices(): Promise<MediaDeviceInfo[]> {\n return new Promise((resolve, reject) => {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n\n return resolve([]);\n });\n}\n\nexport class MediaCapabilitiesHelper {\n private static detectWebRtcService: DetectWebRtcService;\n private static webRtcSupportInfo: ClientWebRtcInfo | undefined;\n private static mediaCapabilitiesHelper: MediaCapabilitiesHelper;\n private static devicesList: { video: MediaDeviceInfo[]; audio: MediaDeviceInfo[] };\n\n private environmentService = new TsEnvironmentDetect();\n\n public static async init(): Promise<MediaCapabilitiesHelper> {\n try {\n this.detectWebRtcService = await new DetectWebRtcService(DETECT_RTC_ADVISED_TIMEOUT);\n this.webRtcSupportInfo = await this.detectWebRtcService.getWebRtcInfo();\n\n const localDevicesList = this.webRtcSupportInfo.isWebRTCSupported ? await enumerateMediaDevices() : [];\n\n this.devicesList = {\n video: filter(localDevicesList, (device) => device.kind.toLowerCase() === 'videoinput'),\n audio: filter(localDevicesList, (device) => device.kind.toLowerCase() === 'audioinput')\n };\n\n if (!this.mediaCapabilitiesHelper) {\n this.mediaCapabilitiesHelper = new MediaCapabilitiesHelper();\n }\n trace.info('initialize media capabilities helper successfully');\n\n return this.mediaCapabilitiesHelper;\n\n } catch (err) {\n trace.error(JSON.stringify(err));\n\n throw err;\n }\n }\n\n public hasCamera(): boolean {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo!.isWebsiteHasWebcamPermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.video.length > 0 && this.hasGetUserMediaSupported();\n }\n\n public hasMicrophone(): boolean {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo!.isWebsiteHasMicrophonePermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.audio.length > 0 && this.hasGetUserMediaSupported();\n }\n\n public hasWebRTC(): boolean {\n return MediaCapabilitiesHelper.webRtcSupportInfo!.isWebRTCSupported;\n }\n\n public hasGetUserMediaSupported(): boolean {\n return MediaCapabilitiesHelper.webRtcSupportInfo!.isGetUserMediaSupported;\n }\n}\n"]}
|
|
@@ -108,22 +108,29 @@ var MediaCapabilitiesHelper = /** @class */function () {
|
|
|
108
108
|
}
|
|
109
109
|
MediaCapabilitiesHelper.init = function () {
|
|
110
110
|
return __awaiter(this, void 0, void 0, function () {
|
|
111
|
-
var _a, _b, localDevicesList, err_1;
|
|
112
|
-
return __generator(this, function (
|
|
113
|
-
switch (
|
|
111
|
+
var _a, _b, localDevicesList, _c, err_1;
|
|
112
|
+
return __generator(this, function (_d) {
|
|
113
|
+
switch (_d.label) {
|
|
114
114
|
case 0:
|
|
115
|
-
|
|
115
|
+
_d.trys.push([0, 6,, 7]);
|
|
116
116
|
_a = this;
|
|
117
117
|
return [4 /*yield*/, new DetectWebRtcService_1.DetectWebRtcService(DetectWebRtcService_1.DETECT_RTC_ADVISED_TIMEOUT)];
|
|
118
118
|
case 1:
|
|
119
|
-
_a.detectWebRtcService =
|
|
119
|
+
_a.detectWebRtcService = _d.sent();
|
|
120
120
|
_b = this;
|
|
121
121
|
return [4 /*yield*/, this.detectWebRtcService.getWebRtcInfo()];
|
|
122
122
|
case 2:
|
|
123
|
-
_b.webRtcSupportInfo =
|
|
123
|
+
_b.webRtcSupportInfo = _d.sent();
|
|
124
|
+
if (!this.webRtcSupportInfo.isWebRTCSupported) return [3 /*break*/, 4];
|
|
124
125
|
return [4 /*yield*/, enumerateMediaDevices()];
|
|
125
126
|
case 3:
|
|
126
|
-
|
|
127
|
+
_c = _d.sent();
|
|
128
|
+
return [3 /*break*/, 5];
|
|
129
|
+
case 4:
|
|
130
|
+
_c = [];
|
|
131
|
+
_d.label = 5;
|
|
132
|
+
case 5:
|
|
133
|
+
localDevicesList = _c;
|
|
127
134
|
this.devicesList = {
|
|
128
135
|
video: filter_1.default(localDevicesList, function (device) {
|
|
129
136
|
return device.kind.toLowerCase() === 'videoinput';
|
|
@@ -137,11 +144,11 @@ var MediaCapabilitiesHelper = /** @class */function () {
|
|
|
137
144
|
}
|
|
138
145
|
trace.info('initialize media capabilities helper successfully');
|
|
139
146
|
return [2 /*return*/, this.mediaCapabilitiesHelper];
|
|
140
|
-
case
|
|
141
|
-
err_1 =
|
|
147
|
+
case 6:
|
|
148
|
+
err_1 = _d.sent();
|
|
142
149
|
trace.error(JSON.stringify(err_1));
|
|
143
150
|
throw err_1;
|
|
144
|
-
case
|
|
151
|
+
case 7:
|
|
145
152
|
return [2 /*return*/];
|
|
146
153
|
}
|
|
147
154
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MultiParty/MediaCapabilitiesHelper.js"],"names":["__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","call","pop","length","push","__importDefault","mod","__esModule","Object","defineProperty","exports","MediaCapabilitiesHelper","MediaTracer_1","require","DetectWebRtcService_1","filter_1","ts_environment_detect_1","trace","getMediaTracer","enumerateMediaDevices","navigator","mediaDevices","enumerateDevices","catch","environmentService","TsEnvironmentDetect","init","_a","_b","localDevicesList","err_1","_c","DetectWebRtcService","DETECT_RTC_ADVISED_TIMEOUT","detectWebRtcService","getWebRtcInfo","webRtcSupportInfo","devicesList","video","default","device","kind","toLowerCase","audio","mediaCapabilitiesHelper","info","error","JSON","stringify","prototype","hasCamera","isIOS","isWebsiteHasWebcamPermissions","hasGetUserMediaSupported","hasMicrophone","isWebsiteHasMicrophonePermissions","hasWebRTC","isWebRTCSupported","isGetUserMediaSupported"],"mappings":"AAAA;;AACA,IAAIA,YAAa,aAAQ,UAAKA,SAAd,IAA4B,UAAUC,OAAV,EAAmBC,UAAnB,EAA+BC,CAA/B,EAAkCC,SAAlC,EAA6C;AACrF,aAASC,KAAT,CAAeC,KAAf,EAAsB;AAAE,eAAOA,iBAAiBH,CAAjB,GAAqBG,KAArB,GAA6B,IAAIH,CAAJ,CAAM,UAAUI,OAAV,EAAmB;AAAEA,oBAAQD,KAAR;AAAiB,SAA5C,CAApC;AAAoF;AAC5G,WAAO,KAAKH,MAAMA,IAAIK,OAAV,CAAL,EAAyB,UAAUD,OAAV,EAAmBE,MAAnB,EAA2B;AACvD,iBAASC,SAAT,CAAmBJ,KAAnB,EAA0B;AAAE,gBAAI;AAAEK,qBAAKP,UAAUQ,IAAV,CAAeN,KAAf,CAAL;AAA8B,aAApC,CAAqC,OAAOO,CAAP,EAAU;AAAEJ,uBAAOI,CAAP;AAAY;AAAE;AAC3F,iBAASC,QAAT,CAAkBR,KAAlB,EAAyB;AAAE,gBAAI;AAAEK,qBAAKP,UAAU,OAAV,EAAmBE,KAAnB,CAAL;AAAkC,aAAxC,CAAyC,OAAOO,CAAP,EAAU;AAAEJ,uBAAOI,CAAP;AAAY;AAAE;AAC9F,iBAASF,IAAT,CAAcI,MAAd,EAAsB;AAAEA,mBAAOC,IAAP,GAAcT,QAAQQ,OAAOT,KAAf,CAAd,GAAsCD,MAAMU,OAAOT,KAAb,EAAoBW,IAApB,CAAyBP,SAAzB,EAAoCI,QAApC,CAAtC;AAAsF;AAC9GH,aAAK,CAACP,YAAYA,UAAUc,KAAV,CAAgBjB,OAAhB,EAAyBC,cAAc,EAAvC,CAAb,EAAyDU,IAAzD,EAAL;AACH,KALM,CAAP;AAMH,CARD;AASA,IAAIO,cAAe,aAAQ,UAAKA,WAAd,IAA8B,UAAUlB,OAAV,EAAmBmB,IAAnB,EAAyB;AACrE,QAAIC,IAAI,EAAEC,OAAO,CAAT,EAAYC,MAAM,gBAAW;AAAE,gBAAIC,EAAE,CAAF,IAAO,CAAX,EAAc,MAAMA,EAAE,CAAF,CAAN,CAAY,OAAOA,EAAE,CAAF,CAAP;AAAc,SAAvE,EAAyEC,MAAM,EAA/E,EAAmFC,KAAK,EAAxF,EAAR;AAAA,QAAsGC,CAAtG;AAAA,QAAyGC,CAAzG;AAAA,QAA4GJ,CAA5G;AAAA,QAA+GK,CAA/G;AACA,WAAOA,IAAI,EAAEjB,MAAMkB,KAAK,CAAL,CAAR,EAAiB,SAASA,KAAK,CAAL,CAA1B,EAAmC,UAAUA,KAAK,CAAL,CAA7C,EAAJ,EAA4D,OAAOC,MAAP,KAAkB,UAAlB,KAAiCF,EAAEE,OAAOC,QAAT,IAAqB,YAAW;AAAE,eAAO,IAAP;AAAc,KAAjF,CAA5D,EAAgJH,CAAvJ;AACA,aAASC,IAAT,CAAcG,CAAd,EAAiB;AAAE,eAAO,UAAUC,CAAV,EAAa;AAAE,mBAAOvB,KAAK,CAACsB,CAAD,EAAIC,CAAJ,CAAL,CAAP;AAAsB,SAA5C;AAA+C;AAClE,aAASvB,IAAT,CAAcwB,EAAd,EAAkB;AACd,YAAIR,CAAJ,EAAO,MAAM,IAAIS,SAAJ,CAAc,iCAAd,CAAN;AACP,eAAOf,CAAP;AAAU,gBAAI;AACV,oBAAIM,IAAI,CAAJ,EAAOC,MAAMJ,IAAIW,GAAG,CAAH,IAAQ,CAAR,GAAYP,EAAE,QAAF,CAAZ,GAA0BO,GAAG,CAAH,IAAQP,EAAE,OAAF,MAAe,CAACJ,IAAII,EAAE,QAAF,CAAL,KAAqBJ,EAAEa,IAAF,CAAOT,CAAP,CAArB,EAAgC,CAA/C,CAAR,GAA4DA,EAAEhB,IAAlG,KAA2G,CAAC,CAACY,IAAIA,EAAEa,IAAF,CAAOT,CAAP,EAAUO,GAAG,CAAH,CAAV,CAAL,EAAuBnB,IAA9I,EAAoJ,OAAOQ,CAAP;AACpJ,oBAAII,IAAI,CAAJ,EAAOJ,CAAX,EAAcW,KAAK,CAACA,GAAG,CAAH,IAAQ,CAAT,EAAYX,EAAElB,KAAd,CAAL;AACd,wBAAQ6B,GAAG,CAAH,CAAR;AACI,yBAAK,CAAL,CAAQ,KAAK,CAAL;AAAQX,4BAAIW,EAAJ,CAAQ;AACxB,yBAAK,CAAL;AAAQd,0BAAEC,KAAF,GAAW,OAAO,EAAEhB,OAAO6B,GAAG,CAAH,CAAT,EAAgBnB,MAAM,KAAtB,EAAP;AACnB,yBAAK,CAAL;AAAQK,0BAAEC,KAAF,GAAWM,IAAIO,GAAG,CAAH,CAAJ,CAAWA,KAAK,CAAC,CAAD,CAAL,CAAU;AACxC,yBAAK,CAAL;AAAQA,6BAAKd,EAAEK,GAAF,CAAMY,GAAN,EAAL,CAAkBjB,EAAEI,IAAF,CAAOa,GAAP,GAAc;AACxC;AACI,4BAAI,EAAEd,IAAIH,EAAEI,IAAN,EAAYD,IAAIA,EAAEe,MAAF,GAAW,CAAX,IAAgBf,EAAEA,EAAEe,MAAF,GAAW,CAAb,CAAlC,MAAuDJ,GAAG,CAAH,MAAU,CAAV,IAAeA,GAAG,CAAH,MAAU,CAAhF,CAAJ,EAAwF;AAAEd,gCAAI,CAAJ,CAAO;AAAW;AAC5G,4BAAIc,GAAG,CAAH,MAAU,CAAV,KAAgB,CAACX,CAAD,IAAOW,GAAG,CAAH,IAAQX,EAAE,CAAF,CAAR,IAAgBW,GAAG,CAAH,IAAQX,EAAE,CAAF,CAA/C,CAAJ,EAA2D;AAAEH,8BAAEC,KAAF,GAAUa,GAAG,CAAH,CAAV,CAAiB;AAAQ;AACtF,4BAAIA,GAAG,CAAH,MAAU,CAAV,IAAed,EAAEC,KAAF,GAAUE,EAAE,CAAF,CAA7B,EAAmC;AAAEH,8BAAEC,KAAF,GAAUE,EAAE,CAAF,CAAV,CAAgBA,IAAIW,EAAJ,CAAQ;AAAQ;AACrE,4BAAIX,KAAKH,EAAEC,KAAF,GAAUE,EAAE,CAAF,CAAnB,EAAyB;AAAEH,8BAAEC,KAAF,GAAUE,EAAE,CAAF,CAAV,CAAgBH,EAAEK,GAAF,CAAMc,IAAN,CAAWL,EAAX,EAAgB;AAAQ;AACnE,4BAAIX,EAAE,CAAF,CAAJ,EAAUH,EAAEK,GAAF,CAAMY,GAAN;AACVjB,0BAAEI,IAAF,CAAOa,GAAP,GAAc;AAXtB;AAaAH,qBAAKf,KAAKiB,IAAL,CAAUpC,OAAV,EAAmBoB,CAAnB,CAAL;AACH,aAjBS,CAiBR,OAAOR,CAAP,EAAU;AAAEsB,qBAAK,CAAC,CAAD,EAAItB,CAAJ,CAAL,CAAae,IAAI,CAAJ;AAAQ,aAjBzB,SAiBkC;AAAED,oBAAIH,IAAI,CAAR;AAAY;AAjB1D,SAkBA,IAAIW,GAAG,CAAH,IAAQ,CAAZ,EAAe,MAAMA,GAAG,CAAH,CAAN,CAAa,OAAO,EAAE7B,OAAO6B,GAAG,CAAH,IAAQA,GAAG,CAAH,CAAR,GAAgB,KAAK,CAA9B,EAAiCnB,MAAM,IAAvC,EAAP;AAC/B;AACJ,CA1BD;AA2BA,IAAIyB,kBAAmB,aAAQ,UAAKA,eAAd,IAAkC,UAAUC,GAAV,EAAe;AACnE,WAAQA,OAAOA,IAAIC,UAAZ,GAA0BD,GAA1B,GAAgC,EAAE,WAAWA,GAAb,EAAvC;AACH,CAFD;AAGAE,OAAOC,cAAP,CAAsBC,OAAtB,EAA+B,YAA/B,EAA6C,EAAExC,OAAO,IAAT,EAA7C;AACAwC,QAAQC,uBAAR,GAAkC,KAAK,CAAvC;AACA;AACA,IAAIC,gBAAgBC,QAAQ,2BAAR,CAApB;AACA,IAAIC,wBAAwBD,QAAQ,uBAAR,CAA5B;AACA,IAAIE,WAAWV,gBAAgBQ,QAAQ,eAAR,CAAhB,CAAf;AACA,IAAIG,0BAA0BH,QAAQ,2DAAR,CAA9B;AACA,IAAII,QAAQL,cAAcM,cAAd,CAA6B,yBAA7B,CAAZ;AACA,SAASC,qBAAT,GAAiC;AAC7B,WAAO,IAAI/C,OAAJ,CAAY,UAAUD,OAAV,EAAmBE,MAAnB,EAA2B;AAC1C,YAAI+C,UAAUC,YAAV,IAA0BD,UAAUC,YAAV,CAAuBC,gBAArD,EAAuE;AACnE,mBAAOF,UAAUC,YAAV,CAAuBC,gBAAvB,GAA0CzC,IAA1C,CAA+CV,OAA/C,EAAwDoD,KAAxD,CAA8DlD,MAA9D,CAAP;AACH;AACD,eAAOF,QAAQ,EAAR,CAAP;AACH,KALM,CAAP;AAMH;AACD,IAAIwC,0BAA0B,aAAe,YAAY;AACrD,aAASA,uBAAT,GAAmC;AAC/B,aAAKa,kBAAL,GAA0B,IAAIR,wBAAwBS,mBAA5B,EAA1B;AACH;AACDd,4BAAwBe,IAAxB,GAA+B,YAAY;AACvC,eAAO9D,UAAU,IAAV,EAAgB,KAAK,CAArB,EAAwB,KAAK,CAA7B,EAAgC,YAAY;AAC/C,gBAAI+D,EAAJ,EAAQC,EAAR,EAAYC,gBAAZ,EAA8BC,KAA9B;AACA,mBAAO/C,YAAY,IAAZ,EAAkB,UAAUgD,EAAV,EAAc;AACnC,wBAAQA,GAAG7C,KAAX;AACI,yBAAK,CAAL;AACI6C,2BAAG1C,IAAH,CAAQe,IAAR,CAAa,CAAC,CAAD,EAAI,CAAJ,GAAS,CAAT,CAAb;AACAuB,6BAAK,IAAL;AACA,+BAAO,CAAC,CAAD,CAAG,SAAH,EAAc,IAAIb,sBAAsBkB,mBAA1B,CAA8ClB,sBAAsBmB,0BAApE,CAAd,CAAP;AACJ,yBAAK,CAAL;AACIN,2BAAGO,mBAAH,GAAyBH,GAAG5C,IAAH,EAAzB;AACAyC,6BAAK,IAAL;AACA,+BAAO,CAAC,CAAD,CAAG,SAAH,EAAc,KAAKM,mBAAL,CAAyBC,aAAzB,EAAd,CAAP;AACJ,yBAAK,CAAL;AACIP,2BAAGQ,iBAAH,GAAuBL,GAAG5C,IAAH,EAAvB;AACA,+BAAO,CAAC,CAAD,CAAG,SAAH,EAAcgC,uBAAd,CAAP;AACJ,yBAAK,CAAL;AACIU,2CAAmBE,GAAG5C,IAAH,EAAnB;AACA,6BAAKkD,WAAL,GAAmB;AACfC,mCAAOvB,SAASwB,OAAT,CAAiBV,gBAAjB,EAAmC,UAAUW,MAAV,EAAkB;AAAE,uCAAOA,OAAOC,IAAP,CAAYC,WAAZ,OAA8B,YAArC;AAAoD,6BAA3G,CADQ;AAEfC,mCAAO5B,SAASwB,OAAT,CAAiBV,gBAAjB,EAAmC,UAAUW,MAAV,EAAkB;AAAE,uCAAOA,OAAOC,IAAP,CAAYC,WAAZ,OAA8B,YAArC;AAAoD,6BAA3G;AAFQ,yBAAnB;AAIA,4BAAI,CAAC,KAAKE,uBAAV,EAAmC;AAC/B,iCAAKA,uBAAL,GAA+B,IAAIjC,uBAAJ,EAA/B;AACH;AACDM,8BAAM4B,IAAN,CAAW,mDAAX;AACA,+BAAO,CAAC,CAAD,CAAG,UAAH,EAAe,KAAKD,uBAApB,CAAP;AACJ,yBAAK,CAAL;AACId,gCAAQC,GAAG5C,IAAH,EAAR;AACA8B,8BAAM6B,KAAN,CAAYC,KAAKC,SAAL,CAAelB,KAAf,CAAZ;AACA,8BAAMA,KAAN;AACJ,yBAAK,CAAL;AAAQ,+BAAO,CAAC,CAAD,CAAG,UAAH,CAAP;AA3BZ;AA6BH,aA9BM,CAAP;AA+BH,SAjCM,CAAP;AAkCH,KAnCD;AAoCAnB,4BAAwBsC,SAAxB,CAAkCC,SAAlC,GAA8C,YAAY;AACtD,eAAO,KAAK1B,kBAAL,CAAwB2B,KAAxB,KACDxC,wBAAwByB,iBAAxB,CAA0CgB,6BAA1C,IAA2E,KAAKC,wBAAL,EAD1E,GAED1C,wBAAwB0B,WAAxB,CAAoCC,KAApC,CAA0CnC,MAA1C,GAAmD,CAAnD,IAAwD,KAAKkD,wBAAL,EAF9D;AAGH,KAJD;AAKA1C,4BAAwBsC,SAAxB,CAAkCK,aAAlC,GAAkD,YAAY;AAC1D,eAAO,KAAK9B,kBAAL,CAAwB2B,KAAxB,KACDxC,wBAAwByB,iBAAxB,CAA0CmB,iCAA1C,IAA+E,KAAKF,wBAAL,EAD9E,GAED1C,wBAAwB0B,WAAxB,CAAoCM,KAApC,CAA0CxC,MAA1C,GAAmD,CAAnD,IAAwD,KAAKkD,wBAAL,EAF9D;AAGH,KAJD;AAKA1C,4BAAwBsC,SAAxB,CAAkCO,SAAlC,GAA8C,YAAY;AACtD,eAAO7C,wBAAwByB,iBAAxB,CAA0CqB,iBAAjD;AACH,KAFD;AAGA9C,4BAAwBsC,SAAxB,CAAkCI,wBAAlC,GAA6D,YAAY;AACrE,eAAO1C,wBAAwByB,iBAAxB,CAA0CsB,uBAAjD;AACH,KAFD;AAGA,WAAO/C,uBAAP;AACH,CAzD4C,EAA7C;AA0DAD,QAAQC,uBAAR,GAAkCA,uBAAlC;;AAEA","file":"MediaCapabilitiesHelper.js","sourcesContent":["\"use strict\";\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.MediaCapabilitiesHelper = void 0;\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar DetectWebRtcService_1 = require(\"./DetectWebRtcService\");\nvar filter_1 = __importDefault(require(\"lodash/filter\"));\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar trace = MediaTracer_1.getMediaTracer('MediaCapabilitiesHelper');\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n return resolve([]);\n });\n}\nvar MediaCapabilitiesHelper = /** @class */ (function () {\n function MediaCapabilitiesHelper() {\n this.environmentService = new ts_environment_detect_1.TsEnvironmentDetect();\n }\n MediaCapabilitiesHelper.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, localDevicesList, err_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 4, , 5]);\n _a = this;\n return [4 /*yield*/, new DetectWebRtcService_1.DetectWebRtcService(DetectWebRtcService_1.DETECT_RTC_ADVISED_TIMEOUT)];\n case 1:\n _a.detectWebRtcService = _c.sent();\n _b = this;\n return [4 /*yield*/, this.detectWebRtcService.getWebRtcInfo()];\n case 2:\n _b.webRtcSupportInfo = _c.sent();\n return [4 /*yield*/, enumerateMediaDevices()];\n case 3:\n localDevicesList = _c.sent();\n this.devicesList = {\n video: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'videoinput'; }),\n audio: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'audioinput'; })\n };\n if (!this.mediaCapabilitiesHelper) {\n this.mediaCapabilitiesHelper = new MediaCapabilitiesHelper();\n }\n trace.info('initialize media capabilities helper successfully');\n return [2 /*return*/, this.mediaCapabilitiesHelper];\n case 4:\n err_1 = _c.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n MediaCapabilitiesHelper.prototype.hasCamera = function () {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo.isWebsiteHasWebcamPermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.video.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesHelper.prototype.hasMicrophone = function () {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo.isWebsiteHasMicrophonePermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.audio.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesHelper.prototype.hasWebRTC = function () {\n return MediaCapabilitiesHelper.webRtcSupportInfo.isWebRTCSupported;\n };\n MediaCapabilitiesHelper.prototype.hasGetUserMediaSupported = function () {\n return MediaCapabilitiesHelper.webRtcSupportInfo.isGetUserMediaSupported;\n };\n return MediaCapabilitiesHelper;\n}());\nexports.MediaCapabilitiesHelper = MediaCapabilitiesHelper;\n\n//# sourceMappingURL=MediaCapabilitiesHelper.js.map\n"]}
|
|
1
|
+
{"version":3,"sources":["MultiParty/MediaCapabilitiesHelper.js"],"names":["__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","call","pop","length","push","__importDefault","mod","__esModule","Object","defineProperty","exports","MediaCapabilitiesHelper","MediaTracer_1","require","DetectWebRtcService_1","filter_1","ts_environment_detect_1","trace","getMediaTracer","enumerateMediaDevices","navigator","mediaDevices","enumerateDevices","catch","environmentService","TsEnvironmentDetect","init","_a","_b","localDevicesList","_c","err_1","_d","DetectWebRtcService","DETECT_RTC_ADVISED_TIMEOUT","detectWebRtcService","getWebRtcInfo","webRtcSupportInfo","isWebRTCSupported","devicesList","video","default","device","kind","toLowerCase","audio","mediaCapabilitiesHelper","info","error","JSON","stringify","prototype","hasCamera","isIOS","isWebsiteHasWebcamPermissions","hasGetUserMediaSupported","hasMicrophone","isWebsiteHasMicrophonePermissions","hasWebRTC","isGetUserMediaSupported"],"mappings":"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","file":"MediaCapabilitiesHelper.js","sourcesContent":["\"use strict\";\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.MediaCapabilitiesHelper = void 0;\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar MediaTracer_1 = require(\"../MediaUtils/MediaTracer\");\nvar DetectWebRtcService_1 = require(\"./DetectWebRtcService\");\nvar filter_1 = __importDefault(require(\"lodash/filter\"));\nvar ts_environment_detect_1 = require(\"@techsee/techsee-common/lib/helpers/ts-environment-detect\");\nvar trace = MediaTracer_1.getMediaTracer('MediaCapabilitiesHelper');\nfunction enumerateMediaDevices() {\n return new Promise(function (resolve, reject) {\n if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices().then(resolve).catch(reject);\n }\n return resolve([]);\n });\n}\nvar MediaCapabilitiesHelper = /** @class */ (function () {\n function MediaCapabilitiesHelper() {\n this.environmentService = new ts_environment_detect_1.TsEnvironmentDetect();\n }\n MediaCapabilitiesHelper.init = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b, localDevicesList, _c, err_1;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n _d.trys.push([0, 6, , 7]);\n _a = this;\n return [4 /*yield*/, new DetectWebRtcService_1.DetectWebRtcService(DetectWebRtcService_1.DETECT_RTC_ADVISED_TIMEOUT)];\n case 1:\n _a.detectWebRtcService = _d.sent();\n _b = this;\n return [4 /*yield*/, this.detectWebRtcService.getWebRtcInfo()];\n case 2:\n _b.webRtcSupportInfo = _d.sent();\n if (!this.webRtcSupportInfo.isWebRTCSupported) return [3 /*break*/, 4];\n return [4 /*yield*/, enumerateMediaDevices()];\n case 3:\n _c = _d.sent();\n return [3 /*break*/, 5];\n case 4:\n _c = [];\n _d.label = 5;\n case 5:\n localDevicesList = _c;\n this.devicesList = {\n video: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'videoinput'; }),\n audio: filter_1.default(localDevicesList, function (device) { return device.kind.toLowerCase() === 'audioinput'; })\n };\n if (!this.mediaCapabilitiesHelper) {\n this.mediaCapabilitiesHelper = new MediaCapabilitiesHelper();\n }\n trace.info('initialize media capabilities helper successfully');\n return [2 /*return*/, this.mediaCapabilitiesHelper];\n case 6:\n err_1 = _d.sent();\n trace.error(JSON.stringify(err_1));\n throw err_1;\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n MediaCapabilitiesHelper.prototype.hasCamera = function () {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo.isWebsiteHasWebcamPermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.video.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesHelper.prototype.hasMicrophone = function () {\n return this.environmentService.isIOS()\n ? MediaCapabilitiesHelper.webRtcSupportInfo.isWebsiteHasMicrophonePermissions && this.hasGetUserMediaSupported()\n : MediaCapabilitiesHelper.devicesList.audio.length > 0 && this.hasGetUserMediaSupported();\n };\n MediaCapabilitiesHelper.prototype.hasWebRTC = function () {\n return MediaCapabilitiesHelper.webRtcSupportInfo.isWebRTCSupported;\n };\n MediaCapabilitiesHelper.prototype.hasGetUserMediaSupported = function () {\n return MediaCapabilitiesHelper.webRtcSupportInfo.isGetUserMediaSupported;\n };\n return MediaCapabilitiesHelper;\n}());\nexports.MediaCapabilitiesHelper = MediaCapabilitiesHelper;\n\n//# sourceMappingURL=MediaCapabilitiesHelper.js.map\n"]}
|
|
@@ -1 +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,CAU7C;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 const {connection} = event;\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\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"]}
|
|
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,UA0B1C;IAED,oBAAoB;gBAAqB,GAAG;UAAK,IAAI,CAmCnD;IAEF,sBAAsB,UAAW,GAAG,KAAG,IAAI,CAOzC;IAEF,wBAAwB,UAAW,GAAG,KAAG,IAAI,CAW3C;IAEF,0BAA0B,UAAW,GAAG,KAAG,IAAI,CAU7C;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 this.emit(MULTI_PARTY_EVENTS.streamCreated, event);\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 ? 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 = connection.data ? JSON.parse(connection.data).clientRole : 'default'; //fixme temp workaround for BE\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n };\n\n connectionDestroyedHandler = (event: any): void => {\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\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"]}
|
|
@@ -330,12 +330,12 @@ var OpentokMultiparty = /** @class */function (_super) {
|
|
|
330
330
|
trace.info('Publisher stream destroyed', event);
|
|
331
331
|
});
|
|
332
332
|
_this.currentPublisher.on('streamCreated', function (event) {
|
|
333
|
+
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamCreated, event);
|
|
333
334
|
trace.info('publisher stream created', event, get_1.default(_this.currentPublisher, 'stream.hasAudio'));
|
|
334
335
|
});
|
|
335
336
|
}
|
|
336
337
|
};
|
|
337
338
|
_this.streamCreatedHandler = function (event) {
|
|
338
|
-
var _a;
|
|
339
339
|
trace.info('streamCreatedHandler', event.stream);
|
|
340
340
|
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamCreated, event);
|
|
341
341
|
var stream = event.stream;
|
|
@@ -361,7 +361,7 @@ var OpentokMultiparty = /** @class */function (_super) {
|
|
|
361
361
|
_this.subscribers.push({
|
|
362
362
|
subscriber: subscriber_1,
|
|
363
363
|
connectionId: connection.connectionId,
|
|
364
|
-
clientRole: (
|
|
364
|
+
clientRole: (connection === null || connection === void 0 ? void 0 : connection.data) ? JSON.parse(connection.data).clientRole : 'default' //fixme temp workaround for BE
|
|
365
365
|
});
|
|
366
366
|
}
|
|
367
367
|
};
|
|
@@ -380,7 +380,7 @@ var OpentokMultiparty = /** @class */function (_super) {
|
|
|
380
380
|
if (!_this.ownConnectionId || !connection) {
|
|
381
381
|
return;
|
|
382
382
|
}
|
|
383
|
-
var clientRole =
|
|
383
|
+
var clientRole = connection.data ? JSON.parse(connection.data).clientRole : 'default'; //fixme temp workaround for BE
|
|
384
384
|
_this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectionCreated, { meta: { clientRole: clientRole, event: JSON.stringify(event) } });
|
|
385
385
|
};
|
|
386
386
|
_this.connectionDestroyedHandler = function (event) {
|
|
@@ -1 +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 var connection = event.connection;\n if (!_this.ownConnectionId || !connection || connection.connectionId !== _this.ownConnectionId) {\n return;\n }\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 const {connection} = event;\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\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"]}
|
|
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","streamCreated","stream","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 _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.streamCreated, event);\n trace.info('publisher stream created', event, get_1.default(_this.currentPublisher, 'stream.hasAudio'));\n });\n }\n };\n _this.streamCreatedHandler = function (event) {\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: (connection === null || connection === void 0 ? void 0 : connection.data) ? 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 = connection.data ? JSON.parse(connection.data).clientRole : 'default'; //fixme temp workaround for BE\n _this.emit(MultiParty_1.MULTI_PARTY_EVENTS.connectionCreated, { meta: { clientRole: clientRole, event: JSON.stringify(event) } });\n };\n _this.connectionDestroyedHandler = function (event) {\n var connection = event.connection;\n if (!_this.ownConnectionId || !connection || connection.connectionId !== _this.ownConnectionId) {\n return;\n }\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 this.emit(MULTI_PARTY_EVENTS.streamCreated, event);\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 ? 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 = connection.data ? JSON.parse(connection.data).clientRole : 'default'; //fixme temp workaround for BE\n\n this.emit(MULTI_PARTY_EVENTS.connectionCreated, {meta: {clientRole, event: JSON.stringify(event)}});\n };\n\n connectionDestroyedHandler = (event: any): void => {\n const {connection} = event;\n\n if (!this.ownConnectionId || !connection || connection.connectionId !== this.ownConnectionId) {\n return;\n }\n\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"]}
|